diff --git a/Source/objects.cpp b/Source/objects.cpp index a9d59c7b2..7fa60fe8d 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -518,7 +518,7 @@ void ClrAllObjects() object[i]._oAnimCnt = 0; object[i]._oAnimLen = 0; object[i]._oAnimFrame = 0; - object[i]._oDelFlag = 0; + object[i]._oDelFlag = FALSE; object[i]._oVar1 = 0; object[i]._oVar2 = 0; object[i]._oVar3 = 0; @@ -1267,55 +1267,40 @@ void DeleteObject_(int oi, int i) void SetupObject(int i, int x, int y, int ot) { - int v4; // esi - int v5; // edi - int v6; // ecx - int v7; // edx - int v8; // eax - int v9; // eax - int v10; // edx - int v11; // eax - int v13; // eax - int v14; // eax + int ofi; + int j; - v4 = i; - object[v4]._otype = ot; - v5 = ot; - v6 = AllObjects[ot].ofindex; - object[v4]._ox = x; - object[v4]._oy = y; - v7 = ObjFileList[0]; - v8 = 0; - while (v7 != v6) - v7 = ObjFileList[v8++ + 1]; - object[v4]._oAnimData = pObjCels[v8]; - v9 = AllObjects[v5].oAnimFlag; - object[v4]._oAnimFlag = v9; - if (v9) { - v10 = AllObjects[v5].oAnimDelay; - object[v4]._oAnimDelay = v10; - object[v4]._oAnimCnt = random(146, v10); - v11 = AllObjects[v5].oAnimLen; - object[v4]._oAnimLen = v11; - v13 = random(146, v11 - 1) + 1; + object[i]._otype = ot; + ofi = AllObjects[ot].ofindex; + object[i]._ox = x; + object[i]._oy = y; + j = 0; + while (ObjFileList[j] != ofi) { + j++; + } + object[i]._oAnimData = pObjCels[j]; + object[i]._oAnimFlag = AllObjects[ot].oAnimFlag; + if (AllObjects[ot].oAnimFlag) { + object[i]._oAnimDelay = AllObjects[ot].oAnimDelay; + object[i]._oAnimCnt = random(146, AllObjects[ot].oAnimDelay); + object[i]._oAnimLen = AllObjects[ot].oAnimLen; + object[i]._oAnimFrame = random(146, AllObjects[ot].oAnimLen - 1) + 1; } else { - v14 = AllObjects[v5].oAnimLen; - object[v4]._oAnimDelay = 1000; - object[v4]._oAnimLen = v14; - v13 = AllObjects[v5].oAnimDelay; - object[v4]._oAnimCnt = 0; + object[i]._oAnimDelay = 1000; + object[i]._oAnimLen = AllObjects[ot].oAnimLen; + object[i]._oAnimFrame = AllObjects[ot].oAnimDelay; + object[i]._oAnimCnt = 0; } - object[v4]._oAnimFrame = v13; - object[v4]._oAnimWidth = AllObjects[v5].oAnimWidth; - object[v4]._oSolidFlag = AllObjects[v5].oSolidFlag; - object[v4]._oMissFlag = AllObjects[v5].oMissFlag; - object[v4]._oLight = AllObjects[v5].oLightFlag; - object[v4]._oBreak = AllObjects[v5].oBreak; - object[v4]._oDelFlag = 0; - object[v4]._oSelFlag = AllObjects[v5].oSelFlag; - object[v4]._oPreFlag = FALSE; - object[v4]._oTrapFlag = FALSE; - object[v4]._oDoorFlag = FALSE; + object[i]._oAnimWidth = AllObjects[ot].oAnimWidth; + object[i]._oSolidFlag = AllObjects[ot].oSolidFlag; + object[i]._oMissFlag = AllObjects[ot].oMissFlag; + object[i]._oLight = AllObjects[ot].oLightFlag; + object[i]._oBreak = AllObjects[ot].oBreak; + object[i]._oDelFlag = FALSE; + object[i]._oSelFlag = AllObjects[ot].oSelFlag; + object[i]._oPreFlag = FALSE; + object[i]._oTrapFlag = FALSE; + object[i]._oDoorFlag = FALSE; } void SetObjMapRange(int i, int x1, int y1, int x2, int y2, int v) @@ -1521,11 +1506,8 @@ void AddShrine(int i) void AddBookcase(int i) { - int v1; // esi - - v1 = i; - object[v1]._oRndSeed = GetRndSeed(); - object[v1]._oPreFlag = TRUE; + object[i]._oRndSeed = GetRndSeed(); + object[i]._oPreFlag = TRUE; } void AddPurifyingFountain(int i) @@ -1857,45 +1839,33 @@ void Obj_Light(int i, int lr) void Obj_Circle(int i) { - int v1; // ecx - int v2; // edx - int v3; // esi - int v4; // eax - int v5; // ST1C_4 - int v6; // edx - int v7; // eax + int ox; + int oy; - v1 = i; - v2 = object[v1]._ox; - v3 = object[v1]._oy; - if (plr[myplr].WorldX != v2 || plr[myplr].WorldY != v3) { - v7 = object[v1]._otype; - if (v7 == OBJ_MCIRCLE1) - object[v1]._oAnimFrame = 1; - if (v7 == OBJ_MCIRCLE2) - object[v1]._oAnimFrame = 3; - object[v1]._oVar6 = 0; + ox = object[i]._ox; + oy = object[i]._oy; + if (plr[myplr].WorldX != ox || plr[myplr].WorldY != object[i]._oy) { + if (object[i]._otype == OBJ_MCIRCLE1) + object[i]._oAnimFrame = 1; + if (object[i]._otype == OBJ_MCIRCLE2) + object[i]._oAnimFrame = 3; + object[i]._oVar6 = 0; } else { - v4 = object[v1]._otype; - if (v4 == OBJ_MCIRCLE1) - object[v1]._oAnimFrame = 2; - if (v4 == OBJ_MCIRCLE2) - object[v1]._oAnimFrame = 4; - if (v2 == 45) { - if (v3 == 47) { - object[v1]._oVar6 = 2; - return; - } - } else if (v2 == 26 && v3 == 46) { - object[v1]._oVar6 = 1; + if (object[i]._otype == OBJ_MCIRCLE1) + object[i]._oAnimFrame = 2; + if (object[i]._otype == OBJ_MCIRCLE2) + object[i]._oAnimFrame = 4; + if (ox == 45 && oy == 47) { + object[i]._oVar6 = 2; + return; + } else if (object[i]._ox == 26 && object[i]._oy == 46) { + object[i]._oVar6 = 1; return; } - object[v1]._oVar6 = 0; - if (v2 == 35 && v3 == 36 && object[v1]._oVar5 == 3) { - v5 = object[v1]._oVar4; - v6 = object[v1]._oVar2; - object[v1]._oVar6 = 4; - ObjChangeMapResync(object[v1]._oVar1, v6, object[v1]._oVar3, v5); + object[i]._oVar6 = 0; + if (ox == 35 && object[i]._oy == 36 && object[i]._oVar5 == 3) { + object[i]._oVar6 = 4; + ObjChangeMapResync(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4); if (quests[QTYPE_VB]._qactive == 2) quests[QTYPE_VB]._qvar1 = 4; AddMissile(plr[myplr].WorldX, plr[myplr].WorldY, 35, 46, plr[myplr]._pdir, MIS_RNDTELEPORT, 0, myplr, 0, 0); @@ -2059,45 +2029,33 @@ void Obj_Trap(int i) void Obj_BCrossDamage(int i) { - int v1; // esi - BOOLEAN v2; // zf - int v3; // ecx - int v4; // edx - int v6; // ecx - int damage[4]; // [esp+4h] [ebp-18h] - int v8; // [esp+18h] [ebp-4h] - - v1 = myplr; - v8 = i; - v2 = plr[myplr]._pmode == PM_DEATH; - damage[0] = 6; - damage[1] = 8; - damage[2] = 10; - damage[3] = 12; - if (!v2) { - v3 = plr[v1]._pFireResist; - if (v3 > 0) - damage[leveltype - 1] -= v3 * damage[leveltype - 1] / 100; - if (plr[v1].WorldX == object[v8]._ox && plr[v1].WorldY == object[v8]._oy - 1) { - v4 = damage[leveltype - 1]; - plr[v1]._pHitPoints -= v4; - plr[v1]._pHPBase -= v4; - if (plr[v1]._pHitPoints >> 6 <= 0) { - SyncPlrKill(myplr, 0); - drawhpflag = TRUE; - return; - } - if (plr[myplr]._pClass == PC_WARRIOR) { - v6 = PS_WARR68; - } else if (plr[myplr]._pClass == PC_ROGUE) { - v6 = PS_ROGUE68; - } else if (plr[myplr]._pClass == PC_SORCERER) { - v6 = PS_MAGE68; - } - PlaySfxLoc(v6, plr[v1].WorldX, plr[v1].WorldY); - drawhpflag = TRUE; + int fire_resist; + int damage[4] = { 6, 8, 10, 12 }; + + if (plr[myplr]._pmode == PM_DEATH) + return; + + fire_resist = plr[myplr]._pFireResist; + if (fire_resist > 0) + damage[leveltype - 1] -= fire_resist * damage[leveltype - 1] / 100; + + if (plr[myplr].WorldX != object[i]._ox || plr[myplr].WorldY != object[i]._oy - 1) + return; + + plr[myplr]._pHitPoints -= damage[leveltype - 1]; + plr[myplr]._pHPBase -= damage[leveltype - 1]; + if (plr[myplr]._pHitPoints >> 6 <= 0) { + SyncPlrKill(myplr, 0); + } else { + if (plr[myplr]._pClass == PC_WARRIOR) { + PlaySfxLoc(PS_WARR68, plr[myplr].WorldX, plr[myplr].WorldY); + } else if (plr[myplr]._pClass == PC_ROGUE) { + PlaySfxLoc(PS_ROGUE68, plr[myplr].WorldX, plr[myplr].WorldY); + } else if (plr[myplr]._pClass == PC_SORCERER) { + PlaySfxLoc(PS_MAGE68, plr[myplr].WorldX, plr[myplr].WorldY); } } + drawhpflag = TRUE; } void ProcessObjects() diff --git a/structs.h b/structs.h index 826ba15ec..bc6517fc6 100644 --- a/structs.h +++ b/structs.h @@ -668,7 +668,7 @@ typedef struct ObjectStruct { int _oAnimFrame; int _oAnimWidth; int _oAnimWidth2; - int _oDelFlag; + BOOL _oDelFlag; char _oBreak; // check BOOL _oSolidFlag; BOOL _oMissFlag;