From 3b596945352ad49e89f5c366ef3d2cdb115baac4 Mon Sep 17 00:00:00 2001 From: qndel Date: Wed, 10 Apr 2019 16:36:16 +0200 Subject: [PATCH] MI_Manashield bin exact --- Source/missiles.cpp | 162 +++++++++++++++++--------------------------- 1 file changed, 64 insertions(+), 98 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index ce4052b4a..5fd39057b 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -3484,111 +3484,77 @@ void MI_Flash2(int i) void MI_Manashield(int i) { - int v1; // edi - int v2; // esi - int v3; // edx - int v4; // eax - int v5; // ecx - int v6; // edx - BOOLEAN v7; // zf - int v8; // eax - int v9; // ecx - int v10; // edx - int v11; // ecx - int v12; // ecx - BOOLEAN v13; // sf - int v14; // [esp+Ch] [ebp-10h] - int ia; // [esp+14h] [ebp-8h] - int arglist; // [esp+18h] [ebp-4h] + int id, diff; - ia = i; - v1 = i; - arglist = missile[i]._misource; - v2 = arglist; - v3 = plr[arglist]._pxoff; - v4 = plr[arglist].WorldX; - v5 = plr[arglist].WorldY; - missile[v1]._mix = v4; - missile[v1]._mitxoff = v3 << 16; - v6 = plr[arglist]._pyoff << 16; - v7 = plr[arglist]._pmode == PM_WALK3; - missile[v1]._miy = v5; - missile[v1]._mityoff = v6; - if (v7) { - missile[v1]._misx = plr[v2]._px; - missile[v1]._misy = plr[v2]._py; + id = missile[i]._misource; + missile[i]._mix = plr[id].WorldX; + missile[i]._miy = plr[id].WorldY; + missile[i]._mitxoff = plr[id]._pxoff << 16; + missile[i]._mityoff = plr[id]._pyoff << 16; + if (plr[id]._pmode == PM_WALK3) { + missile[i]._misx = plr[id]._px; + missile[i]._misy = plr[id]._py; } else { - missile[v1]._misx = v4; - missile[v1]._misy = v5; + missile[i]._misx = plr[id].WorldX; + missile[i]._misy = plr[id].WorldY; } - GetMissilePos(ia); - if (plr[v2]._pmode == PM_WALK3) { - if (plr[v2]._pdir == 2) - ++missile[v1]._mix; + GetMissilePos(i); + if (plr[id]._pmode == PM_WALK3) { + if (plr[id]._pdir == DIR_W) + missile[i]._mix++; else - ++missile[v1]._miy; - } - if (arglist != myplr) { - if (currlevel != plr[v2].plrlevel) - missile[v1]._miDelFlag = TRUE; - goto LABEL_33; - } - v8 = plr[v2]._pMana; - v14 = plr[v2]._pMana; - if (v8 <= 0 || !plr[v2].plractive) - missile[v1]._mirange = 0; - v9 = missile[v1]._miVar1; - if (plr[v2]._pHitPoints >= v9) - goto LABEL_26; - v10 = v9 - plr[v2]._pHitPoints; - if (missile[v1]._mispllvl > 0) { - v10 = v10 / -3 + v9 - plr[v2]._pHitPoints; - v8 = v14; + missile[i]._miy++; } - if (v10 < 0) - v10 = 0; - drawmanaflag = TRUE; - drawhpflag = TRUE; - if (v8 >= v10) { - plr[v2]._pHitPoints = v9; - v11 = missile[v1]._miVar2; - plr[v2]._pManaBase -= v10; - plr[v2]._pHPBase = v11; - plr[v2]._pMana = v8 - v10; - LABEL_26: - if (arglist == myplr && !plr[v2]._pHitPoints && !missile[v1]._miVar1 && plr[v2]._pmode != PM_DEATH) { - missile[v1]._mirange = 0; - missile[v1]._miDelFlag = TRUE; - SyncPlrKill(arglist, -1); + if (id != myplr) { + if (currlevel != plr[id].plrlevel) + missile[i]._miDelFlag = TRUE; + } else { + if (plr[id]._pMana <= 0 || !plr[id].plractive) + missile[i]._mirange = 0; + if (plr[id]._pHitPoints < missile[i]._miVar1) { + diff = missile[i]._miVar1 - plr[id]._pHitPoints; + if (missile[i]._mispllvl > 0) { + diff += diff / -3; + } + + if (diff < 0) + diff = 0; + drawmanaflag = TRUE; + drawhpflag = TRUE; + + if (plr[id]._pMana >= diff) { + plr[id]._pHitPoints = missile[i]._miVar1; + plr[id]._pHPBase = missile[i]._miVar2; + plr[id]._pMana -= diff; + plr[id]._pManaBase -= diff; + } else { + missile[i]._miDelFlag = TRUE; + plr[id]._pHitPoints = plr[id]._pMana + missile[i]._miVar1 - diff; + plr[id]._pHPBase = plr[id]._pMana + missile[i]._miVar2 - diff; + plr[id]._pMana = 0; + plr[id]._pManaBase = plr[id]._pMaxManaBase - plr[id]._pMaxMana; + missile[i]._mirange = 0; + if (plr[id]._pHitPoints < 0) + SetPlayerHitPoints(id, 0); + if (!(plr[id]._pHitPoints >> 6) && id == myplr) { + SyncPlrKill(id, missile[i]._miVar8); + } + } + } + + if (id == myplr && !plr[id]._pHitPoints && !missile[i]._miVar1 && plr[id]._pmode != PM_DEATH) { + missile[i]._mirange = 0; + missile[i]._miDelFlag = TRUE; + SyncPlrKill(id, -1); + } + missile[i]._miVar1 = plr[id]._pHitPoints; + missile[i]._miVar2 = plr[id]._pHPBase; + if (missile[i]._mirange == 0) { + missile[i]._miDelFlag = TRUE; + NetSendCmd(TRUE, CMD_ENDSHIELD); } - goto LABEL_31; - } - missile[v1]._miDelFlag = TRUE; - plr[v2]._pHitPoints = v8 + v9 - v10; - plr[v2]._pHPBase = v8 + missile[v1]._miVar2 - v10; - v12 = plr[v2]._pMaxManaBase - plr[v2]._pMaxMana; - v13 = plr[v2]._pHitPoints < 0; - plr[v2]._pMana = 0; - missile[v1]._mirange = 0; - plr[v2]._pManaBase = v12; - if (v13) - SetPlayerHitPoints(arglist, 0); - if (plr[v2]._pHitPoints >> 6) - goto LABEL_26; - if (arglist == myplr) { - SyncPlrKill(arglist, missile[v1]._miVar8); - goto LABEL_26; - } -LABEL_31: - v7 = missile[v1]._mirange == 0; - missile[v1]._miVar1 = plr[v2]._pHitPoints; - missile[v1]._miVar2 = plr[v2]._pHPBase; - if (v7) { - missile[v1]._miDelFlag = TRUE; - NetSendCmd(TRUE, CMD_ENDSHIELD); } -LABEL_33: - PutMissile(ia); + PutMissile(i); } void MI_Etherealize(int i)