Browse Source

MI_Element almost bin exact

pull/44/head
qndel 7 years ago committed by Anders Jenbo
parent
commit
da41d06293
  1. 147
      Source/missiles.cpp

147
Source/missiles.cpp

@ -5078,106 +5078,73 @@ void __fastcall MI_Hbolt(int i)
void __fastcall MI_Element(int i) void __fastcall MI_Element(int i)
{ {
int v1; // esi int mid, sd, dam, cx, cy, px, py, id;
int v2; // edi
int v3; // eax
int v4; // ebx
int v5; // ebx
int v6; // ecx
int v7; // ebx
int v8; // eax
int v9; // edi
int v10; // eax
int v11; // edi
int v12; // ecx
int ty; // [esp+Ch] [ebp-18h]
int tya; // [esp+Ch] [ebp-18h]
//int tyb; // [esp+Ch] [ebp-18h]
int my; // [esp+10h] [ebp-14h]
//int mya; // [esp+10h] [ebp-14h]
//int myb; // [esp+10h] [ebp-14h]
int fx; // [esp+14h] [ebp-10h]
//int fxa; // [esp+14h] [ebp-10h]
int fy; // [esp+18h] [ebp-Ch]
int ia; // [esp+1Ch] [ebp-8h]
int y; // [esp+20h] [ebp-4h]
int ya; // [esp+20h] [ebp-4h]
v1 = i; missile[i]._mirange--;
ia = i; dam = missile[i]._midam;
--missile[v1]._mirange; id = missile[i]._misource;
v2 = missile[i]._midam; if (missile[i]._miAnimType == MFILE_BIGEXP) {
ty = missile[i]._misource; cx = missile[i]._mix;
if (_LOBYTE(missile[i]._miAnimType) == MFILE_KRULL) { cy = missile[i]._miy;
v3 = missile[i]._misource; px = plr[id].WorldX;
v4 = missile[v1]._mix; py = plr[id].WorldY;
y = missile[v1]._miy; ChangeLight(missile[i]._mlid, cx, cy, missile[i]._miAnimFrame);
fx = plr[v3].WorldX; if (!CheckBlock(px, py, cx, cy))
fy = plr[v3].WorldY; CheckMissileCol(i, dam, dam, 1, cx, cy, 1);
ChangeLight(missile[v1]._mlid, v4, y, missile[v1]._miAnimFrame); if (!CheckBlock(px, py, cx, cy + 1))
if (!CheckBlock(fx, fy, v4, y)) CheckMissileCol(i, dam, dam, 1, cx, cy + 1, 1);
CheckMissileCol(ia, v2, v2, 1, v4, y, 1); if (!CheckBlock(px, py, cx, cy - 1))
my = y + 1; CheckMissileCol(i, dam, dam, 1, cx, cy - 1, 1);
if (!CheckBlock(fx, fy, v4, y + 1)) if (!CheckBlock(px, py, cx + 1, cy))
CheckMissileCol(ia, v2, v2, 1, v4, my, 1); CheckMissileCol(i, dam, dam, 1, cx + 1, cy, 1); /* check x/y */
tya = y - 1; if (!CheckBlock(px, py, cx + 1, cy - 1))
if (!CheckBlock(fx, fy, v4, y - 1)) CheckMissileCol(i, dam, dam, 1, cx + 1, cy - 1, 1);
CheckMissileCol(ia, v2, v2, 1, v4, tya, 1); if (!CheckBlock(px, py, cx + 1, cy + 1))
if (!CheckBlock(fx, fy, v4 + 1, y)) CheckMissileCol(i, dam, dam, 1, cx + 1, cy + 1, 1);
CheckMissileCol(ia, v2, v2, 1, v4 + 1, y, 1); /* check x/y */ if (!CheckBlock(px, py, cx - 1, cy))
if (!CheckBlock(fx, fy, v4 + 1, tya)) CheckMissileCol(i, dam, dam, 1, cx - 1, cy, 1);
CheckMissileCol(ia, v2, v2, 1, v4 + 1, tya, 1); if (!CheckBlock(px, py, cx - 1, cy + 1))
if (!CheckBlock(fx, fy, v4 + 1, my)) CheckMissileCol(i, dam, dam, 1, cx - 1, cy + 1, 1);
CheckMissileCol(ia, v2, v2, 1, v4 + 1, my, 1); if (!CheckBlock(px, py, cx - 1, cy - 1))
v5 = v4 - 1; CheckMissileCol(i, dam, dam, 1, cx - 1, cy - 1, 1);
if (!CheckBlock(fx, fy, v5, y)) if (!missile[i]._mirange) {
CheckMissileCol(ia, v2, v2, 1, v5, y, 1); missile[i]._miDelFlag = TRUE;
if (!CheckBlock(fx, fy, v5, my)) AddUnLight(missile[i]._mlid);
CheckMissileCol(ia, v2, v2, 1, v5, my, 1);
if (!CheckBlock(fx, fy, v5, tya))
CheckMissileCol(ia, v2, v2, 1, v5, tya, 1);
if (!missile[v1]._mirange) {
v6 = missile[v1]._mlid;
missile[v1]._miDelFlag = TRUE;
AddUnLight(v6);
} }
} else { } else {
missile[v1]._mitxoff += missile[v1]._mixvel; missile[i]._mitxoff += missile[i]._mixvel;
missile[v1]._mityoff += missile[v1]._miyvel; missile[i]._mityoff += missile[i]._miyvel;
GetMissilePos(i); GetMissilePos(i);
v7 = missile[v1]._mix; cx = missile[i]._mix;
ya = missile[v1]._miy; cy = missile[i]._miy;
CheckMissileCol(ia, v2, v2, 0, missile[v1]._mix, ya, 0); CheckMissileCol(i, dam, dam, 0, cx, cy, 0);
if (!missile[v1]._miVar3 && v7 == missile[v1]._miVar4 && ya == missile[v1]._miVar5) if (!missile[i]._miVar3 && cx == missile[i]._miVar4 && cy == missile[i]._miVar5)
missile[v1]._miVar3 = 1; missile[i]._miVar3 = 1;
if (missile[v1]._miVar3 == 1) { if (missile[i]._miVar3 == 1) {
missile[v1]._miVar3 = 2; missile[i]._miVar3 = 2;
missile[v1]._mirange = 255; missile[i]._mirange = 255;
v8 = FindClosest(v7, ya, 19); mid = FindClosest(cx, cy, 19);
if (v8 <= 0) { if (mid > 0) {
v11 = plr[ty]._pdir; SetMissDir(i, GetDirection8(cx, cy, monster[mid]._mx, monster[mid]._my));
SetMissDir(ia, plr[ty]._pdir); GetMissileVel(i, cx, cy, monster[mid]._mx, monster[mid]._my, 16);
GetMissileVel(ia, v7, ya, v7 + XDirAdd[v11], ya + YDirAdd[v11], 16);
} else { } else {
v9 = v8; sd = plr[id]._pdir;
v10 = GetDirection8(v7, ya, monster[v8]._mx, monster[v8]._my); SetMissDir(i, sd);
SetMissDir(ia, v10); GetMissileVel(i, cx, cy, cx + XDirAdd[sd], cy + YDirAdd[sd], 16);
GetMissileVel(ia, v7, ya, monster[v9]._mx, monster[v9]._my, 16);
} }
} }
if (v7 != missile[v1]._miVar1 || ya != missile[v1]._miVar2) { if (cx != missile[i]._miVar1 || cy != missile[i]._miVar2) {
missile[v1]._miVar2 = ya; missile[i]._miVar1 = cx;
v12 = missile[v1]._mlid; missile[i]._miVar2 = cy;
missile[v1]._miVar1 = v7; ChangeLight(missile[i]._mlid, cx, cy, 8);
ChangeLight(v12, v7, ya, 8);
} }
if (!missile[v1]._mirange) { if (!missile[i]._mirange) {
missile[v1]._mimfnum = 0; missile[i]._mimfnum = 0;
SetMissAnim(ia, MFILE_BIGEXP); SetMissAnim(i, MFILE_BIGEXP);
missile[v1]._mirange = missile[v1]._miAnimLen - 1; missile[i]._mirange = missile[i]._miAnimLen - 1;
} }
} }
PutMissile(ia); PutMissile(i);
} }
void __fastcall MI_Bonespirit(int i) void __fastcall MI_Bonespirit(int i)

Loading…
Cancel
Save