Browse Source

Clean up BreakBarrel.

pull/287/head^2
Sergey Semushin 7 years ago
parent
commit
090e3d36fd
  1. 160
      Source/objects.cpp
  2. 2
      Source/objects.h

160
Source/objects.cpp

@ -4417,107 +4417,73 @@ void BreakCrux(int i)
} }
// 676190: using guessed type int deltaload; // 676190: using guessed type int deltaload;
void BreakBarrel(int pnum, int i, int dam, unsigned char forcebreak, int sendmsg) void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, int sendmsg)
{ {
int v5; // esi int oi;
BOOLEAN v6; // zf int xp, yp;
int v7; // eax
int v8; // edx if (!object[i]._oSelFlag)
int v9; // eax return;
int v10; // eax if (forcebreak) {
int v11; // eax object[i]._oVar1 = 0;
char v12; // al } else {
char v13; // al object[i]._oVar1 -= dam;
int v14; // edx if (pnum != myplr && object[i]._oVar1 <= 0)
int v15; // [esp-4h] [ebp-24h] object[i]._oVar1 = 1;
short param2; // [esp+Ch] [ebp-14h] }
int param1; // [esp+10h] [ebp-10h] if (object[i]._oVar1 > 0) {
int v18; // [esp+14h] [ebp-Ch] if (deltaload)
int *v19; // [esp+18h] [ebp-8h] return;
int v20; // [esp+1Ch] [ebp-4h]
int forcebreaka; // [esp+2Ch] [ebp+Ch] PlaySfxLoc(IS_IBOW, object[i]._ox, object[i]._oy);
return;
param2 = i; }
v5 = i;
param1 = pnum; object[i]._oBreak = -1;
if (object[i]._oSelFlag) { object[i]._oVar1 = 0;
if (forcebreak) { object[i]._oAnimFlag = 1;
object[v5]._oVar1 = 0; object[i]._oAnimFrame = 1;
} else { object[i]._oAnimDelay = 1;
object[v5]._oVar1 -= dam; object[i]._oSolidFlag = FALSE;
if (pnum != myplr && object[v5]._oVar1 <= 0) object[i]._oMissFlag = TRUE;
object[v5]._oVar1 = 1; object[i]._oSelFlag = 0;
} object[i]._oPreFlag = TRUE;
if (object[v5]._oVar1 <= 0) { if (deltaload != 0) {
object[v5]._oBreak = -1; object[i]._oAnimCnt = 0;
v6 = deltaload == 0; object[i]._oAnimFrame = object[i]._oAnimLen;
object[v5]._oVar1 = 0; object[i]._oAnimDelay = 1000;
object[v5]._oAnimFlag = 1; return;
object[v5]._oAnimFrame = 1; }
object[v5]._oAnimDelay = 1;
object[v5]._oSolidFlag = FALSE; if (object[i]._otype == OBJ_BARRELEX) {
object[v5]._oMissFlag = TRUE; PlaySfxLoc(IS_BARLFIRE, object[i]._ox, object[i]._oy);
object[v5]._oSelFlag = 0; for (yp = object[i]._oy - 1; yp <= object[i]._oy + 1; yp++) {
object[v5]._oPreFlag = TRUE; for (xp = object[i]._ox - 1; xp <= object[i]._ox + 1; xp++) {
if (v6) { if (dMonster[xp][yp] > 0)
v8 = object[v5]._ox; MonsterTrapHit(dMonster[xp][yp] - 1, 1, 4, 0, 1, 0);
v15 = object[v5]._oy; if (dPlayer[xp][yp] > 0)
if (object[v5]._otype == OBJ_BARRELEX) { PlayerMHit(dPlayer[xp][yp] - 1, -1, 0, 8, 16, 1, 0, 0);
PlaySfxLoc(IS_BARLFIRE, v8, v15); if (dObject[xp][yp] > 0) {
v9 = object[v5]._oy; oi = dObject[xp][yp] - 1;
v20 = v9 - 1; if (object[oi]._otype == OBJ_BARRELEX && object[oi]._oBreak != -1)
if (v9 - 1 <= v9 + 1) { BreakBarrel(pnum, oi, dam, TRUE, sendmsg);
do {
v10 = object[v5]._ox;
v18 = v10 - 1;
if (v10 - 1 <= v10 + 1) {
forcebreaka = 112 * (v10 - 1) + v20;
v19 = (int *)((char *)dMonster + 4 * forcebreaka);
do {
v11 = *v19;
if (*v19 > 0)
MonsterTrapHit(v11 - 1, 1, 4, 0, 1, 0);
v12 = dPlayer[0][forcebreaka];
if (v12 > 0)
PlayerMHit(v12 - 1, -1, 0, 8, 16, 1, 0, 0);
v13 = dObject[0][forcebreaka];
if (v13 > 0) {
v14 = v13 - 1;
if (object[v14]._otype == OBJ_BARRELEX && object[v14]._oBreak != -1)
BreakBarrel(param1, v14, dam, 1u, sendmsg);
}
++v18;
v19 += 112;
forcebreaka += 112;
} while (v18 <= object[v5]._ox + 1);
}
++v20;
} while (v20 <= object[v5]._oy + 1);
}
} else {
PlaySfxLoc(IS_BARREL, v8, v15);
SetRndSeed(object[v5]._oRndSeed);
if (object[v5]._oVar2 <= 1) {
if (object[v5]._oVar3)
CreateRndItem(object[v5]._ox, object[v5]._oy, 0, sendmsg, 0);
else
CreateRndUseful(param1, object[v5]._ox, object[v5]._oy, sendmsg);
}
if (object[v5]._oVar2 >= 8)
SpawnSkeleton(object[v5]._oVar4, object[v5]._ox, object[v5]._oy);
} }
if (param1 == myplr)
NetSendCmdParam2(FALSE, CMD_BREAKOBJ, param1, param2);
} else {
v7 = object[v5]._oAnimLen;
object[v5]._oAnimCnt = 0;
object[v5]._oAnimFrame = v7;
object[v5]._oAnimDelay = 1000;
} }
} else if (!deltaload) {
PlaySfxLoc(IS_IBOW, object[v5]._ox, object[v5]._oy);
} }
} else {
PlaySfxLoc(IS_BARREL, object[i]._ox, object[i]._oy);
SetRndSeed(object[i]._oRndSeed);
if (object[i]._oVar2 <= 1) {
if (!object[i]._oVar3)
CreateRndUseful(pnum, object[i]._ox, object[i]._oy, sendmsg);
else
CreateRndItem(object[i]._ox, object[i]._oy, 0, sendmsg, 0);
}
if (object[i]._oVar2 >= 8)
SpawnSkeleton(object[i]._oVar4, object[i]._ox, object[i]._oy);
} }
if (pnum == myplr)
NetSendCmdParam2(FALSE, CMD_BREAKOBJ, pnum, i);
} }
// 676190: using guessed type int deltaload; // 676190: using guessed type int deltaload;

2
Source/objects.h

@ -133,7 +133,7 @@ void SyncOpL2Door(int pnum, int cmd, int i);
void SyncOpL3Door(int pnum, int cmd, int i); void SyncOpL3Door(int pnum, int cmd, int i);
void SyncOpObject(int pnum, int cmd, int i); void SyncOpObject(int pnum, int cmd, int i);
void BreakCrux(int i); void BreakCrux(int i);
void BreakBarrel(int pnum, int i, int dam, unsigned char forcebreak, int sendmsg); void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, int sendmsg);
void BreakObject(int pnum, int oi); void BreakObject(int pnum, int oi);
void SyncBreakObj(int pnum, int oi); void SyncBreakObj(int pnum, int oi);
void SyncL1Doors(int i); void SyncL1Doors(int i);

Loading…
Cancel
Save