MCPcopy Create free account
hub / github.com/diasurgical/devilution / OperateShrine

Function OperateShrine

Source/objects.cpp:2818–3420  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2816}
2817
2818void 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:

Callers 4

OperateGoatShrineFunction · 0.85
OperateCauldronFunction · 0.85
OperateObjectFunction · 0.85
SyncOpObjectFunction · 0.85

Calls 15

SetRndSeedFunction · 0.85
PlaySfxLocFunction · 0.85
ModifyPlrStrFunction · 0.85
ModifyPlrMagFunction · 0.85
ModifyPlrDexFunction · 0.85
ModifyPlrVitFunction · 0.85
random_Function · 0.85
CheckStatsFunction · 0.85
InitDiabloMsgFunction · 0.85
AddMissileFunction · 0.85
GetRndSeedFunction · 0.85
SetPlrHandItemFunction · 0.85

Tested by

no test coverage detected