From 4b466a0fb638e7ee2b80f63f8519d14243ab00a1 Mon Sep 17 00:00:00 2001 From: qndel Date: Sun, 24 Mar 2019 18:45:08 +0100 Subject: [PATCH] AddGuardian bin exact (#734) --- Source/missiles.cpp | 156 +++++++++++++------------------------------- 1 file changed, 47 insertions(+), 109 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 115f8bc2e..37e292c61 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -2078,119 +2078,57 @@ void __fastcall AddFiremove(int mi, int sx, int sy, int dx, int dy, int midir, i void __fastcall AddGuardian(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam) { - int v9; // edi - int v10; // esi - int v11; // esi - int v12; // eax - int v13; // ecx - int v14; // eax - int v15; // ecx - char *v16; // eax - int v17; // ebx - int v18; // edi - //int v19; // eax - int v20; // edx - int v21; // ecx - int v22; // eax - int v23; // ecx - int v24; // eax - int v25; // eax - int v26; // eax - int v27; // eax - int CrawlNum[6]; // [esp+8h] [ebp-38h] - unsigned int v29; // [esp+20h] [ebp-20h] - int v30; // [esp+24h] [ebp-1Ch] - int v31; // [esp+28h] [ebp-18h] - int x1; // [esp+2Ch] [ebp-14h] - int v33; // [esp+30h] [ebp-10h] - char *v34; // [esp+34h] [ebp-Ch] - int v35; // [esp+38h] [ebp-8h] - int v36; // [esp+3Ch] [ebp-4h] + int i, pn, k, j, tx, ty; + int CrawlNum[6] = { 0, 3, 12, 45, 94, 159 }; - CrawlNum[0] = 0; - v9 = 21720 * id; - x1 = sx; - v10 = mi; - CrawlNum[1] = 3; - CrawlNum[2] = 12; - CrawlNum[3] = 45; - CrawlNum[4] = 94; - CrawlNum[5] = 159; - v33 = 21720 * id; - v11 = v10; - v12 = random(62, 10) + (plr[id]._pLevel >> 1) + 1; - v13 = missile[v11]._mispllvl; - missile[v11]._midam = v12; - if (v13 > 0) { - do { - v12 += v12 >> 3; - --v13; - } while (v13); - missile[v11]._midam = v12; + missile[mi]._midam = random(62, 10) + (plr[id]._pLevel >> 1) + 1; + for (i = missile[mi]._mispllvl; i > 0; i--) { + missile[mi]._midam += missile[mi]._midam >> 3; } - v36 = 0; - missile[v11]._miDelFlag = TRUE; - do { - v14 = CrawlNum[v36]; - v15 = (unsigned char)CrawlTable[v14]; - v35 = (unsigned char)CrawlTable[v14]; - if (v15 <= 0) - goto LABEL_18; - v16 = &CrawlTable[v14 + 2]; - v34 = v16; - while (1) { - v17 = dx + (char)*(v16 - 1); - v18 = dy + (char)*v16; - v30 = v18 + 112 * (dx + (char)*(v16 - 1)); - v29 = 4 * v30; - v31 = dPiece[0][v30]; - if (v17 <= 0 || v17 >= MAXDUNX || v18 <= 0 || v18 >= MAXDUNY) - goto LABEL_14; - //_LOBYTE(v19) = LineClear(x1, sy, v17, v18); - if (LineClear(x1, sy, v17, v18)) { - if (!(dMonster[0][v29 / 4] | dObject[0][v30] | dMissile[0][v30] | nSolidTable[v31] | (unsigned char)nMissileTable[v31])) - break; + + missile[mi]._miDelFlag = TRUE; + for (i = 0; i < 6; i++) { + pn = CrawlNum[i]; + k = pn + 2; + for (j = (unsigned char)CrawlTable[pn]; j > 0; j--) { + tx = dx + CrawlTable[k - 1]; + ty = dy + CrawlTable[k]; + pn = dPiece[tx][ty]; + if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { + if (LineClear(sx, sy, tx, ty)) { + if (!(dMonster[tx][ty] | dObject[tx][ty] | dMissile[tx][ty] | nSolidTable[pn] | (unsigned char)nMissileTable[pn])) { + missile[mi]._miDelFlag = FALSE; + missile[mi]._mix = tx; + missile[mi]._miy = ty; + missile[mi]._misx = tx; + missile[mi]._misy = ty; + UseMana(id, 13); + i = 6; + break; + } + } } - v16 = v34; - LABEL_14: - v16 += 2; - --v35; - v34 = v16; - if (v35 <= 0) - goto LABEL_17; + k += 2; } - missile[v11]._miDelFlag = FALSE; - missile[v11]._mix = v17; - missile[v11]._miy = v18; - missile[v11]._misx = v17; - missile[v11]._misy = v18; - UseMana(id, 13); - v36 = 6; - LABEL_17: - v9 = v33; - LABEL_18: - ++v36; - } while (v36 < 6); - if (missile[v11]._miDelFlag != TRUE) { - v20 = missile[v11]._miy; - v21 = missile[v11]._mix; - missile[v11]._misource = id; - v22 = AddLight(v21, v20, 1); - v23 = missile[v11]._mispllvl; - missile[v11]._mlid = v22; - v24 = v23 + (*(&plr[0]._pLevel + v9) >> 1); - v25 = (v24 * *(int *)((char *)&plr[0]._pISplDur + v9) >> 7) + v24; - missile[v11]._mirange = v25; - if (v25 > 30) - missile[v11]._mirange = 30; - missile[v11]._mirange *= 16; - if (missile[v11]._mirange < 30) - missile[v11]._mirange = 30; - v26 = missile[v11]._mirange; - missile[v11]._miVar3 = 1; - v27 = v26 - missile[v11]._miAnimLen; - missile[v11]._miVar2 = 0; - missile[v11]._miVar1 = v27; + } + + if (missile[mi]._miDelFlag != TRUE) { + missile[mi]._misource = id; + missile[mi]._mlid = AddLight(missile[mi]._mix, missile[mi]._miy, 1); + + missile[mi]._mirange = plr[id]._pLevel >> 1; + missile[mi]._mirange += missile[mi]._mispllvl; + missile[mi]._mirange += (missile[mi]._mirange * plr[id]._pISplDur) >> 7; + + if (missile[mi]._mirange > 30) + missile[mi]._mirange = 30; + missile[mi]._mirange <<= 4; + if (missile[mi]._mirange < 30) + missile[mi]._mirange = 30; + + missile[mi]._miVar1 = missile[mi]._mirange - missile[mi]._miAnimLen; + missile[mi]._miVar3 = 1; + missile[mi]._miVar2 = 0; } }