From 52c415a98ab97cd751902b90e224417a7f4ad941 Mon Sep 17 00:00:00 2001 From: qndel Date: Sun, 24 Mar 2019 20:27:13 +0100 Subject: [PATCH] AddFirebolt almost bin exact --- Source/missiles.cpp | 72 +++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 45 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 9c9001f67..ce9a1e6ee 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1651,54 +1651,36 @@ void __fastcall AddRndTeleport(int mi, int sx, int sy, int dx, int dy, int midir void __fastcall AddFirebolt(int mi, int sx, int sy, int dx, int dy, int midir, int micaster, int id, int dam) { - int v9; // ebx - int v10; // esi - int v11; // edi - int v12; // eax - int v13; // eax - int v14; // eax - int v15; // esi - signed int v16; // [esp-4h] [ebp-14h] - int i; // [esp+Ch] [ebp-4h] - int micastera; // [esp+28h] [ebp+18h] - - v9 = dx; - v10 = dy; - v11 = sx; - i = mi; + int i, mx, sp; + if (sx == dx && sy == dy) { - v9 = XDirAdd[midir] + dx; - v10 = YDirAdd[midir] + dy; - } - if ((_BYTE)micaster) { - v16 = 26; - goto LABEL_17; - } - for (micastera = 0; micastera < nummissiles; ++micastera) { - v12 = missileactive[micastera]; - if (missile[v12]._mitype == MIS_GUARDIAN && missile[v12]._misource == id && missile[v12]._miVar3 == mi) - break; + dx += XDirAdd[midir]; + dy += YDirAdd[midir]; } - if (micastera == nummissiles) - UseMana(id, 1); - if (id == -1) { - v16 = 16; - goto LABEL_17; + if (!(_BYTE)micaster) { + for (i = 0; i < nummissiles; i++) { + mx = missileactive[i]; + if (missile[mx]._mitype == MIS_GUARDIAN && missile[mx]._misource == id && missile[mx]._miVar3 == mi) + break; + } + if (i == nummissiles) + UseMana(id, 1); + if (id != -1) { + sp = 2 * missile[mi]._mispllvl + 16; + if (sp >= 63) + sp = 63; + } else { + sp = 16; + } + } else { + sp = 26; } - v13 = 2 * missile[i]._mispllvl + 16; - if (v13 >= 63) { - v16 = 63; - LABEL_17: - v13 = v16; - } - GetMissileVel(i, v11, sy, v9, v10, v13); - v14 = GetDirection16(v11, sy, v9, v10); - SetMissDir(i, v14); - v15 = i; - missile[v15]._mirange = 256; - missile[v15]._miVar1 = v11; - missile[v15]._miVar2 = sy; - missile[v15]._mlid = AddLight(v11, sy, 8); + GetMissileVel(mi, sx, sy, dx, dy, sp); + SetMissDir(mi, GetDirection16(sx, sy, dx, dy)); + missile[mi]._mirange = 256; + missile[mi]._miVar1 = sx; + missile[mi]._miVar2 = sy; + missile[mi]._mlid = AddLight(sx, sy, 8); } void __fastcall AddMagmaball(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam)