From 7c92fbd06bf0e3dbbc45633014e8c3b4d2d5d568 Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 21 Mar 2019 13:36:46 +0100 Subject: [PATCH] MI_Rhino bin exact (#721) --- Source/missiles.cpp | 93 ++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 57 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 20342815e..d33dd2085 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -4301,69 +4301,48 @@ void __fastcall MI_Boom(int i) void __fastcall MI_Rhino(int i) { - int v1; // ebx - int v2; // esi - int v3; // edi - int v4; // edi - int v5; // eax - int v6; // eax - int v7; // ebx - BOOLEAN v8; // zf - int x; // [esp+Ch] [ebp-1Ch] - int v10; // [esp+10h] [ebp-18h] - int y; // [esp+14h] [ebp-14h] - int a2; // [esp+18h] [ebp-10h] - int a3; // [esp+1Ch] [ebp-Ch] - int arglist; // [esp+20h] [ebp-8h] - int a1; // [esp+24h] [ebp-4h] + int mix, miy, mix2, miy2, omx, omy, monst; - v1 = i; - v2 = i; - arglist = i; - v3 = missile[i]._misource; - a1 = v3; - v4 = v3; - if (monster[v4]._mmode != MM_CHARGE) - goto LABEL_12; + monst = missile[i]._misource; + if (monster[monst]._mmode != MM_CHARGE) { + missile[i]._miDelFlag = TRUE; + return; + } GetMissilePos(i); - v5 = missile[v2]._mix; - x = v5; - v10 = missile[v2]._miy; - dMonster[v5][v10] = 0; - v6 = missile[v2]._mixvel; - if (monster[v4]._mAi == AI_SNAKE) { - missile[v2]._mitxoff += 2 * v6; - missile[v2]._mityoff += 2 * missile[v2]._miyvel; - GetMissilePos(v1); - a2 = missile[v2]._mix; - a3 = missile[v2]._miy; - missile[v2]._mitxoff -= missile[v2]._mixvel; - missile[v2]._mityoff -= missile[v2]._miyvel; + mix = missile[i]._mix; + miy = missile[i]._miy; + dMonster[mix][miy] = 0; + if (monster[monst]._mAi == AI_SNAKE) { + missile[i]._mitxoff += 2 * missile[i]._mixvel; + missile[i]._mityoff += 2 * missile[i]._miyvel; + GetMissilePos(i); + mix2 = missile[i]._mix; + miy2 = missile[i]._miy; + missile[i]._mitxoff -= missile[i]._mixvel; + missile[i]._mityoff -= missile[i]._miyvel; } else { - missile[v2]._mitxoff += v6; - missile[v2]._mityoff += missile[v2]._miyvel; + missile[i]._mitxoff += missile[i]._mixvel; + missile[i]._mityoff += missile[i]._miyvel; } - GetMissilePos(v1); - v7 = missile[v2]._mix; - y = missile[v2]._miy; - if (!PosOkMonst(a1, missile[v2]._mix, missile[v2]._miy) || monster[v4]._mAi == AI_SNAKE && !PosOkMonst(a1, a2, a3)) { - MissToMonst(arglist, x, v10); - LABEL_12: - missile[v2]._miDelFlag = TRUE; + GetMissilePos(i); + omx = missile[i]._mix; + omy = missile[i]._miy; + if (!PosOkMonst(monst, missile[i]._mix, missile[i]._miy) || (monster[monst]._mAi == AI_SNAKE && !PosOkMonst(monst, mix2, miy2))) { + MissToMonst(i, mix, miy); + missile[i]._miDelFlag = TRUE; return; } - v8 = monster[v4]._uniqtype == 0; - monster[v4]._mfutx = v7; - monster[v4]._moldx = v7; - dMonster[v7][y] = -1 - a1; - monster[v4]._mx = v7; - monster[v4]._mfuty = y; - monster[v4]._moldy = y; - monster[v4]._my = y; - if (!v8) - ChangeLightXY(missile[v2]._mlid, v7, y); - MoveMissilePos(arglist); - PutMissile(arglist); + monster[monst]._mfutx = omx; + monster[monst]._moldx = omx; + dMonster[omx][omy] = -1 - monst; + monster[monst]._mx = omx; + monster[monst]._mfuty = omy; + monster[monst]._moldy = omy; + monster[monst]._my = omy; + if (monster[monst]._uniqtype != 0) + ChangeLightXY(missile[i]._mlid, omx, omy); + MoveMissilePos(i); + PutMissile(i); } void __fastcall mi_null_32(int i)