diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 5af222c88..4e6df525a 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -2178,7 +2178,7 @@ void __fastcall AddWeapexp(int mi, int sx, int sy, int dx, int dy, int midir, in missile[v9]._mirange = missile[v9]._miAnimLen - 1; } -BOOLEAN __fastcall CheckIfTrig(int x, int y) +BOOL __fastcall CheckIfTrig(int x, int y) { int v2; // edi int v3; // ebx @@ -2208,105 +2208,56 @@ BOOLEAN __fastcall CheckIfTrig(int x, int y) void __fastcall AddTown(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam) { - int v9; // ebx - int v10; // esi - int v11; // edi - int v12; // eax - int v13; // ecx - char *v14; // eax - int v15; // eax - //int v16; // eax - int v17; // ecx - int v18; // eax - int v19; // eax - int v20; // ecx - int v21; // eax - int v22; // ST0C_4 - int CrawlNum[6]; // [esp+Ch] [ebp-28h] - int i; // [esp+24h] [ebp-10h] - char *v25; // [esp+28h] [ebp-Ch] - int v26; // [esp+2Ch] [ebp-8h] - int v27; // [esp+30h] [ebp-4h] - int x; // [esp+40h] [ebp+Ch] + int i, j, k, mx, tx, ty; + int CrawlNum[6] = { 0, 3, 12, 45, 94, 159 }; - _LOBYTE(v9) = dx; - i = mi; - v10 = mi; - CrawlNum[0] = 0; - CrawlNum[1] = 3; - CrawlNum[2] = 12; - CrawlNum[3] = 45; - CrawlNum[4] = 94; - CrawlNum[5] = 159; + + tx = dx; if (currlevel) { - _LOBYTE(v11) = dx; - missile[v10]._miDelFlag = TRUE; - v26 = 0; - do { - v12 = CrawlNum[v26]; - v13 = (unsigned char)CrawlTable[v12]; - v27 = (unsigned char)CrawlTable[v12]; - if (v13 > 0) { - v14 = &CrawlTable[v12 + 2]; - v25 = v14; - while (1) { - v9 = dx + (char)*(v14 - 1); - v11 = dy + (char)*v14; - if (v9 > 0 && v9 < MAXDUNX && v11 > 0 && v11 < MAXDUNY) { - v15 = v11 + 112 * v9; - if (!(dObject[0][v15] | dPlayer[0][v15] | dMissile[0][v15] | nSolidTable[dPiece[0][v15]] | (unsigned char)nMissileTable[dPiece[0][v15]])) { - //_LOBYTE(v16) = CheckIfTrig(v9, v11); - if (!CheckIfTrig(v9, v11)) - break; + missile[mi]._miDelFlag = TRUE; + for (j = 0; j < 6; j++) { + k = CrawlNum[j] + 2; + for (i = 0; i < (unsigned char)CrawlTable[CrawlNum[j]]; i++) { + tx = dx + CrawlTable[k - 1]; + ty = dy + CrawlTable[k]; + if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { + if (!(dObject[tx][ty] | dPlayer[tx][ty] | dMissile[tx][ty] | nSolidTable[dPiece[tx][ty]] | (unsigned char)nMissileTable[dPiece[tx][ty]])) { + if (!CheckIfTrig(tx, ty)) { + missile[mi]._miDelFlag = FALSE; + missile[mi]._mix = tx; + missile[mi]._miy = ty; + missile[mi]._misx = tx; + missile[mi]._misy = ty; + j = 6; + break; } } - v14 = v25 + 2; - --v27; - v25 += 2; - if (v27 <= 0) - goto LABEL_14; } - missile[v10]._miDelFlag = FALSE; - missile[v10]._mix = v9; - missile[v10]._miy = v11; - missile[v10]._misx = v9; - missile[v10]._misy = v11; - v26 = 6; + k += 2; } - LABEL_14: - ++v26; - } while (v26 < 6); + } } else { - _LOBYTE(v11) = dy; - missile[v10]._mix = dx; - missile[v10]._miy = dy; - missile[v10]._misx = dx; - missile[v10]._misy = dy; - missile[v10]._miDelFlag = FALSE; - } - v17 = nummissiles; - missile[v10]._miVar2 = 0; - v27 = 0; - missile[v10]._mirange = 100; - for (missile[v10]._miVar1 = 100 - missile[v10]._miAnimLen; v27 < v17; ++v27) { - v18 = missileactive[v27]; - x = v18; - v19 = v18; - if (missile[v19]._mitype == MIS_TOWN && x != i && missile[v19]._misource == id) - missile[v19]._mirange = 0; + ty = dy; + missile[mi]._mix = tx; + missile[mi]._miy = ty; + missile[mi]._misx = tx; + missile[mi]._misy = ty; + missile[mi]._miDelFlag = FALSE; + } + missile[mi]._mirange = 100; + missile[mi]._miVar1 = 100 - missile[mi]._miAnimLen; + missile[mi]._miVar2 = 0; + for (i = 0; i < nummissiles; i++) { + mx = missileactive[i]; + if (missile[mx]._mitype == MIS_TOWN && mx != mi && missile[mx]._misource == id) + missile[mx]._mirange = 0; } - PutMissile(i); - _HIWORD(v21) = _HIWORD(id); - if (id == myplr && !missile[v10]._miDelFlag && currlevel) { - if (setlevel) { - _LOWORD(v21) = leveltype; - v22 = v21; - _LOWORD(v21) = setlvlnum; - NetSendCmdLocParam3(TRUE, CMD_ACTIVATEPORTAL, v9, v11, v21, v22, 1); + PutMissile(mi); + if (id == myplr && !missile[mi]._miDelFlag && currlevel) { + if (!setlevel) { + NetSendCmdLocParam3(TRUE, CMD_ACTIVATEPORTAL, tx, ty, currlevel, leveltype, 0); } else { - _LOWORD(v20) = leveltype; - _LOWORD(v21) = currlevel; - NetSendCmdLocParam3(TRUE, CMD_ACTIVATEPORTAL, v9, v11, v21, v20, 0); + NetSendCmdLocParam3(TRUE, CMD_ACTIVATEPORTAL, tx, ty, setlvlnum, leveltype, 1); } } } diff --git a/Source/missiles.h b/Source/missiles.h index e649b3395..96aec1f30 100644 --- a/Source/missiles.h +++ b/Source/missiles.h @@ -50,7 +50,7 @@ void __fastcall AddLightctrl(int mi, int sx, int sy, int dx, int dy, int midir, void __fastcall AddLightning(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam); void __fastcall AddMisexp(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam); void __fastcall AddWeapexp(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam); -BOOLEAN __fastcall CheckIfTrig(int x, int y); +BOOL __fastcall CheckIfTrig(int x, int y); void __fastcall AddTown(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam); void __fastcall AddFlash(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam); void __fastcall AddFlash2(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam);