diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 4e6df525a..aa23b9709 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -3395,79 +3395,32 @@ void __fastcall MI_Dummy(int i) void __fastcall MI_Golem(int i) { - int v1; // esi - int v2; // eax - int v3; // eax - BOOLEAN v4; // zf - int v5; // eax - int v6; // ecx - char *v7; // eax - int v8; // ebx - int v9; // edi - int v10; // edx - int v11; // ecx - int CrawlNum[6]; // [esp+4h] [ebp-38h] - int arglist; // [esp+1Ch] [ebp-20h] - int mi; // [esp+20h] [ebp-1Ch] - unsigned int v16; // [esp+24h] [ebp-18h] - int v17; // [esp+28h] [ebp-14h] - int v18; // [esp+2Ch] [ebp-10h] - char *v19; // [esp+30h] [ebp-Ch] - int v20; // [esp+34h] [ebp-8h] - int v21; // [esp+38h] [ebp-4h] - - mi = i; - v1 = i; - v2 = missile[i]._misource; - arglist = v2; - v3 = v2; - v4 = monster[v3]._mx == 1; - CrawlNum[0] = 0; - CrawlNum[1] = 3; - CrawlNum[2] = 12; - CrawlNum[3] = 45; - CrawlNum[4] = 94; - CrawlNum[5] = 159; - if (!v4 || monster[v3]._my) - goto LABEL_17; - v21 = 0; - do { - v5 = CrawlNum[v21]; - v6 = (unsigned char)CrawlTable[v5]; - v20 = (unsigned char)CrawlTable[v5]; - if (v6 <= 0) - goto LABEL_16; - v7 = &CrawlTable[v5 + 2]; - v19 = v7; - while (1) { - v8 = missile[v1]._miVar4 + (char)*(v7 - 1); - v9 = missile[v1]._miVar5 + (char)*v7; - if (v8 <= 0 || v8 >= MAXDUNX || v9 <= 0 || v9 >= MAXDUNY) - goto LABEL_13; - v10 = missile[v1]._miVar2; - v11 = missile[v1]._miVar1; - v18 = v9 + 112 * v8; - v16 = 4 * v18; - v17 = dPiece[0][v18]; - if (LineClear(v11, v10, v8, v9)) { - if (!(dMonster[0][v16 / 4] | nSolidTable[v17] | dObject[0][v18])) - break; + int CrawlNum[6] = { 0, 3, 12, 45, 94, 159 }; + int tx, ty, dp, l,m, src, k, tid; + + src = missile[i]._misource; + if (monster[src]._mx == 1 && !monster[src]._my) { + for (l = 0; l < 6; l++) { + k = CrawlNum[l]; + tid = k + 2; + for (m = (unsigned char)CrawlTable[k];m > 0; m--){ + tx = missile[i]._miVar4 + CrawlTable[tid - 1]; + ty = missile[i]._miVar5 + CrawlTable[tid]; + if (0 < tx && tx < MAXDUNX && 0 < ty && ty < MAXDUNY) { + dp = dPiece[tx][ty]; + if (LineClear(missile[i]._miVar1, missile[i]._miVar2, tx, ty)) { + if (!(dMonster[tx][ty] | nSolidTable[dp] | dObject[tx][ty])) { + l = 6; + SpawnGolum(src, tx, ty, i); + break; + } + } + } + tid += 2; } - v7 = v19; - LABEL_13: - v7 += 2; - --v20; - v19 = v7; - if (v20 <= 0) - goto LABEL_16; } - v21 = 6; - SpawnGolum(arglist, v8, v9, mi); - LABEL_16: - ++v21; - } while (v21 < 6); -LABEL_17: - missile[v1]._miDelFlag = TRUE; + } + missile[i]._miDelFlag = TRUE; } void __fastcall MI_SetManashield(int i)