| 2816 | } |
| 2817 | |
| 2818 | void OperateShrine(int pnum, int i, int sType) |
| 2819 | { |
| 2820 | int cnt; |
| 2821 | int r, j; |
| 2822 | DWORD lv, t; |
| 2823 | int xx, yy; |
| 2824 | int v1, v2, v3, v4; |
| 2825 | unsigned __int64 spell, spells; |
| 2826 | |
| 2827 | if (dropGoldFlag) { |
| 2828 | dropGoldFlag = FALSE; |
| 2829 | dropGoldValue = 0; |
| 2830 | } |
| 2831 | |
| 2832 | assert((DWORD)i < MAXOBJECTS); |
| 2833 | |
| 2834 | if (object[i]._oSelFlag == 0) |
| 2835 | return; |
| 2836 | |
| 2837 | SetRndSeed(object[i]._oRndSeed); |
| 2838 | object[i]._oSelFlag = 0; |
| 2839 | |
| 2840 | if (!deltaload) { |
| 2841 | PlaySfxLoc(sType, object[i]._ox, object[i]._oy); |
| 2842 | object[i]._oAnimFlag = 1; |
| 2843 | object[i]._oAnimDelay = 1; |
| 2844 | } else { |
| 2845 | object[i]._oAnimFlag = 0; |
| 2846 | object[i]._oAnimFrame = object[i]._oAnimLen; |
| 2847 | } |
| 2848 | switch (object[i]._oVar1) { |
| 2849 | case SHRINE_MYSTERIOUS: |
| 2850 | if (deltaload) |
| 2851 | return; |
| 2852 | if (pnum != myplr) |
| 2853 | return; |
| 2854 | ModifyPlrStr(pnum, -1); |
| 2855 | ModifyPlrMag(pnum, -1); |
| 2856 | ModifyPlrDex(pnum, -1); |
| 2857 | ModifyPlrVit(pnum, -1); |
| 2858 | switch (random_(0, 4)) { |
| 2859 | case 0: |
| 2860 | ModifyPlrStr(pnum, 6); |
| 2861 | break; |
| 2862 | case 1: |
| 2863 | ModifyPlrMag(pnum, 6); |
| 2864 | break; |
| 2865 | case 2: |
| 2866 | ModifyPlrDex(pnum, 6); |
| 2867 | break; |
| 2868 | case 3: |
| 2869 | ModifyPlrVit(pnum, 6); |
| 2870 | break; |
| 2871 | } |
| 2872 | CheckStats(pnum); |
| 2873 | InitDiabloMsg(EMSG_SHRINE_MYSTERIOUS); |
| 2874 | break; |
| 2875 | case SHRINE_HIDDEN: |
no test coverage detected