From 9358465bb5c7af83c516cc0610f12913de81bfef Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 11 Mar 2019 23:59:26 +0100 Subject: [PATCH] AddMissile bin exact (#621) * AddMissile bin exact * Clean up bools --- Source/missiles.cpp | 167 ++++++++++++++++++++------------------------ Source/msg.cpp | 4 +- Source/pack.cpp | 2 +- Source/player.cpp | 4 +- Source/scrollrt.cpp | 16 ++--- Source/scrollrt.h | 4 +- Source/town.cpp | 6 +- structs.h | 8 +-- 8 files changed, 97 insertions(+), 114 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 44686ef56..f8f2f714c 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -656,7 +656,7 @@ void __fastcall DeleteMissile(int mi, int i) src = missile[mi]._misource; if (src == myplr) NetSendCmd(TRUE, CMD_REMSHIELD); - plr[src].pManaShield = 0; + plr[src].pManaShield = FALSE; } missileavail[-nummissiles + MAXMISSILES] = mi; nummissiles--; @@ -1378,7 +1378,7 @@ void __fastcall CheckMissileCol(int i, int mindam, int maxdam, BOOLEAN shift, in if (v22) { if (!(_BYTE)nodel) missile[v8]._mirange = 0; - missile[v8]._miHitFlag = 1; + missile[v8]._miHitFlag = TRUE; } } v23 = dPlayer[0][v11]; @@ -1396,7 +1396,7 @@ void __fastcall CheckMissileCol(int i, int mindam, int maxdam, BOOLEAN shift, in if (v17) { if (!(_BYTE)nodel) missile[v8]._mirange = 0; - missile[v8]._miHitFlag = 1; + missile[v8]._miHitFlag = TRUE; } goto LABEL_39; } @@ -1438,7 +1438,7 @@ void __fastcall CheckMissileCol(int i, int mindam, int maxdam, BOOLEAN shift, in if (v13) { if (!(_BYTE)nodel) missile[v8]._mirange = 0; - missile[v8]._miHitFlag = 1; + missile[v8]._miHitFlag = TRUE; } goto LABEL_13; } @@ -1457,7 +1457,7 @@ void __fastcall CheckMissileCol(int i, int mindam, int maxdam, BOOLEAN shift, in if (v19) { if (!(_BYTE)nodel) missile[v8]._mirange = 0; - missile[v8]._miHitFlag = 1; + missile[v8]._miHitFlag = TRUE; } } } @@ -1486,13 +1486,13 @@ LABEL_39: BreakObject(-1, v25); if (!(_BYTE)nodel) missile[v8]._mirange = 0; - missile[v8]._miHitFlag = 0; + missile[v8]._miHitFlag = FALSE; } } if (nMissileTable[dPiece[0][v11]]) { if (!(_BYTE)nodel) missile[v8]._mirange = 0; - missile[v8]._miHitFlag = 0; + missile[v8]._miHitFlag = FALSE; } if (!missile[v8]._mirange) { v26 = missiledata[missile[v8]._mitype].miSFX; @@ -2405,7 +2405,7 @@ void __fastcall AddFlash2(int mi, int sx, int sy, int dx, int dy, int midir, int } } v14 = v15; - missile[v14]._miPreFlag = 1; + missile[v14]._miPreFlag = TRUE; missile[v14]._mirange = 19; } @@ -2419,7 +2419,7 @@ void __fastcall AddManashield(int mi, int sx, int sy, int dx, int dy, int midir, UseMana(id, 11); if (id == myplr) NetSendCmd(TRUE, CMD_SETSHIELD); - plr[id].pManaShield = 1; + plr[id].pManaShield = TRUE; } void __fastcall AddFiremove(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam) @@ -2776,7 +2776,7 @@ void __fastcall AddAcidpud(int mi, int sx, int sy, int dx, int dy, int midir, in missile[v9]._miyoff = 0; missile[v9]._miLightFlag = 1; v11 = random(50, 15); - missile[v9]._miPreFlag = 1; + missile[v9]._miPreFlag = TRUE; missile[v9]._mirange = v11 + 40 * ((unsigned char)monster[v10]._mint + 1); } @@ -3398,84 +3398,67 @@ void __fastcall AddDiabApoca(int mi, int sx, int sy, int dx, int dy, int midir, int __fastcall AddMissile(int sx, int sy, int dx, int dy, int midir, int mitype, int micaster, int id, int midam, int spllvl) { - int v10; // esi - int v11; // ecx - int v12; // ecx - int v13; // ebx - int v14; // esi - int v15; // esi - int v16; // edi - int v17; // ecx - char v18; // al - int v19; // edx - int v20; // ecx - int v21; // eax - int sya; // [esp+8h] [ebp-8h] - int sxa; // [esp+Ch] [ebp-4h] - - sya = sy; - sxa = sx; + int i, mi; + if (nummissiles >= MAXMISSILES) return -1; - if (mitype != MIS_MANASHIELD || plr[id].pManaShield != 1) - goto LABEL_9; - if (currlevel != plr[id].plrlevel) - return -1; - v10 = 0; - if (nummissiles > 0) { - do { - v11 = missileactive[v10]; - if (missile[v11]._mitype == MIS_MANASHIELD && missile[v11]._misource == id) + + if (mitype == MIS_MANASHIELD && plr[id].pManaShield) { + if (currlevel != plr[id].plrlevel) + return -1; + + for (i = 0; i < nummissiles; i++) { + mi = missileactive[i]; + if (missile[mi]._mitype == MIS_MANASHIELD && missile[mi]._misource == id) return -1; - } while (++v10 < nummissiles); - } -LABEL_9: - v12 = nummissiles; - v13 = missileavail[0]; - v14 = missileavail[-nummissiles++ + 124]; /* MAXMISSILES */ - missileavail[0] = v14; - v15 = v13; - missile[v15]._mitype = mitype; - v16 = mitype; - missileactive[v12] = v13; - v17 = missiledata[mitype].mDraw; - missile[v15]._micaster = (char)micaster; - v18 = missiledata[mitype].mFileNum; - missile[v15]._misource = id; - v19 = midir; - missile[v15]._miDrawFlag = v17; - _LOBYTE(missile[v15]._miAnimType) = v18; - missile[v15]._mispllvl = spllvl; - missile[v15]._mimfnum = midir; - if (v18 == -1 || misfiledata[(unsigned char)v18].mAnimFAmt < 8u) - v19 = 0; - SetMissDir(v13, v19); - v20 = sya; - missile[v15]._mlid = -1; - missile[v15]._mixoff = 0; - missile[v15]._miyoff = 0; - missile[v15]._mitxoff = 0; - missile[v15]._mityoff = 0; - missile[v15]._miDelFlag = FALSE; - missile[v15]._miLightFlag = 0; - missile[v15]._miPreFlag = 0; - missile[v15]._miUniqTrans = 0; - missile[v15]._miHitFlag = 0; - missile[v15]._midist = 0; - missile[v15]._mirnd = 0; - v21 = missiledata[v16].mlSFX; - missile[v15]._mix = sxa; - missile[v15]._misx = sxa; - missile[v15]._miy = sya; - missile[v15]._misy = sya; - missile[v15]._miAnimAdd = 1; - missile[v15]._midam = midam; - if (v21 != -1) { - PlaySfxLoc(v21, sxa, sya); - v20 = sya; - } - missiledata[v16].mAddProc(v13, sxa, v20, dx, dy, midir, micaster, id, midam); - return v13; + } + } + + mi = missileavail[0]; + + missileavail[0] = missileavail[MAXMISSILES - nummissiles - 1]; + missileactive[nummissiles] = mi; + nummissiles++; + + missile[mi]._mitype = mitype; + missile[mi]._micaster = (char)micaster; + missile[mi]._misource = id; + missile[mi]._miAnimType = missiledata[mitype].mFileNum; + missile[mi]._miDrawFlag = missiledata[mitype].mDraw; + missile[mi]._mimfnum = midir; + missile[mi]._mispllvl = spllvl; + + if (missile[mi]._miAnimType == 255 || misfiledata[missile[mi]._miAnimType].mAnimFAmt < 8) + SetMissDir(mi, 0); + else + SetMissDir(mi, midir); + + missile[mi]._mix = sx; + missile[mi]._miy = sy; + missile[mi]._mixoff = 0; + missile[mi]._miyoff = 0; + missile[mi]._misx = sx; + missile[mi]._misy = sy; + missile[mi]._mitxoff = 0; + missile[mi]._mityoff = 0; + missile[mi]._miDelFlag = FALSE; + missile[mi]._miAnimAdd = 1; + missile[mi]._miLightFlag = 0; + missile[mi]._miPreFlag = FALSE; + missile[mi]._miUniqTrans = 0; + missile[mi]._midam = midam; + missile[mi]._miHitFlag = FALSE; + missile[mi]._midist = 0; + missile[mi]._mlid = -1; + missile[mi]._mirnd = 0; + + if (missiledata[mitype].mlSFX != -1) { + PlaySfxLoc(missiledata[mitype].mlSFX, sx, sy); + } + + missiledata[mitype].mAddProc(mi, sx, sy, dx, dy, midir, micaster, id, midam); + + return mi; } int __fastcall Sentfire(int i, int sx, int sy) @@ -3953,7 +3936,7 @@ void __fastcall MI_Lightball(int i) GetMissilePos(i); v10 = missile[v1]._mirange; CheckMissileCol(ia, missile[v1]._midam, missile[v1]._midam, 0, missile[v1]._mix, missile[v1]._miy, 0); - if (missile[v1]._miHitFlag == 1) + if (missile[v1]._miHitFlag) missile[v1]._mirange = v10; v5 = dObject[v2][v4]; if (v5 && v2 == missile[v1]._mix && v4 == missile[v1]._miy) { @@ -4240,7 +4223,7 @@ void __fastcall MI_Lightning(int i) v4 = missile[i]._mirange; if (v3 != missile[i]._misx || missile[v2]._miy != missile[v2]._misy) CheckMissileCol(i, missile[v2]._midam, missile[v2]._midam, 1, v3, missile[v2]._miy, 0); - if (missile[v2]._miHitFlag == 1) + if (missile[v2]._miHitFlag) missile[v2]._mirange = v4; if (!missile[v2]._mirange) { v5 = missile[v2]._mlid; @@ -4589,7 +4572,7 @@ void __fastcall MI_Firemove(int i) GetMissilePos(v4); v5 = missile[v1]._mirange; CheckMissileCol(ia, missile[v1]._midam, missile[v1]._midam, 0, missile[v1]._mix, missile[v1]._miy, 0); - if (missile[v1]._miHitFlag == 1) + if (missile[v1]._miHitFlag) missile[v1]._mirange = v5; if (!missile[v1]._mirange) { v6 = missile[v1]._mlid; @@ -4806,7 +4789,7 @@ void __fastcall mi_null_11(int i) if (v2) missile[v1]._miDelFlag = TRUE; if (missile[v1]._miAnimFrame == missile[v1]._miAnimLen) - missile[v1]._miPreFlag = 1; + missile[v1]._miPreFlag = TRUE; PutMissile(i); } @@ -5040,7 +5023,7 @@ void __fastcall MI_Boom(int i) --missile[v2]._mirange; if (!missile[i]._miVar1) CheckMissileCol(i, missile[v2]._midam, missile[v2]._midam, 0, missile[v2]._mix, missile[v2]._miy, 1); - if (missile[v2]._miHitFlag == 1) + if (missile[v2]._miHitFlag) missile[v2]._miVar1 = 1; if (!missile[v2]._mirange) missile[v2]._miDelFlag = TRUE; @@ -5496,7 +5479,7 @@ void __fastcall MI_Flame(int i) v6 = missile[i]._mix; --missile[v2]._miVar2; CheckMissileCol(i, v4, v4, 1, v6, v3, 0); - if (!missile[v2]._mirange && missile[v2]._miHitFlag == 1) + if (!missile[v2]._mirange && missile[v2]._miHitFlag) missile[v2]._mirange = v5; v7 = missile[v2]._miVar2; if (!v7) @@ -5620,7 +5603,7 @@ void __fastcall MI_Cbolt(int i) missile[v1]._mityoff += missile[v1]._miyvel; GetMissilePos(v6); CheckMissileCol(ia, missile[v1]._midam, missile[v1]._midam, 0, missile[v1]._mix, missile[v1]._miy, 0); - if (missile[v1]._miHitFlag == 1) { + if (missile[v1]._miHitFlag) { v7 = ia; missile[v1]._miVar1 = 8; missile[v1]._mimfnum = 0; diff --git a/Source/msg.cpp b/Source/msg.cpp index 60de60a37..930538d1d 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -2480,7 +2480,7 @@ int __fastcall On_NOVA(TCmdLoc *pCmd, int pnum) int __fastcall On_SETSHIELD(TCmd *pCmd, int pnum) { if (gbBufferMsgs != 1) - plr[pnum].pManaShield = 1; + plr[pnum].pManaShield = TRUE; return sizeof(*pCmd); } @@ -2488,7 +2488,7 @@ int __fastcall On_SETSHIELD(TCmd *pCmd, int pnum) int __fastcall On_REMSHIELD(TCmd *pCmd, int pnum) { if (gbBufferMsgs != 1) - plr[pnum].pManaShield = 0; + plr[pnum].pManaShield = FALSE; return sizeof(*pCmd); } diff --git a/Source/pack.cpp b/Source/pack.cpp index 91642537b..7117babc7 100644 --- a/Source/pack.cpp +++ b/Source/pack.cpp @@ -65,7 +65,7 @@ void __fastcall PackPlayer(PkPlayerStruct *pPack, int pnum, BOOL manashield) if (gbMaxPlayers == 1 || manashield) pPack->pManaShield = pPlayer->pManaShield; else - pPack->pManaShield = 0; + pPack->pManaShield = FALSE; } // 679660: using guessed type char gbMaxPlayers; diff --git a/Source/player.cpp b/Source/player.cpp index 9ec8b6d68..d4192d5a3 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -658,7 +658,7 @@ void __fastcall CreatePlayer(int pnum, char c) plr[pnum].pTownWarps = 0; plr[pnum].pLvlLoad = 0; plr[pnum].pBattleNet = 0; - plr[pnum].pManaShield = 0; + plr[pnum].pManaShield = FALSE; InitDungMsgs(pnum); CreatePlrItems(pnum); @@ -834,7 +834,7 @@ void __fastcall InitPlayer(int pnum, BOOL FirstTime) } else { plr[pnum]._pwtype = WT_MELEE; } - plr[pnum].pManaShield = 0; + plr[pnum].pManaShield = FALSE; } if (plr[pnum].plrlevel == currlevel || leveldebug) { diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index 706639f83..eb3139c55 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -67,7 +67,7 @@ void __cdecl ClearCursor() // CODE_FIX: this was supposed to be in cursor.cpp sgdwCursWdtOld = 0; } -void __fastcall DrawMissile(int x, int y, int sx, int sy, int a5, int a6, int del_flag) +void __fastcall DrawMissile(int x, int y, int sx, int sy, int a5, int a6, BOOL del_flag) { int v7; // ebx char v8; // al @@ -151,7 +151,7 @@ void __fastcall DrawMissile(int x, int y, int sx, int sy, int a5, int a6, int de } } -void __fastcall DrawClippedMissile(int x, int y, int sx, int sy, int a5, int a6, int a7) +void __fastcall DrawClippedMissile(int x, int y, int sx, int sy, int a5, int a6, BOOL a7) { int v7; // ebx char v8; // al @@ -880,7 +880,7 @@ void __fastcall scrollrt_draw_clipped_dungeon(char *a1, int sx, int sy, int a4, if (visiondebug && v50 & DFLAG_LIT) Cel2DecodeHdrOnly(dst_buf, (char *)pSquareCel, 1, 64, 0, 8); if (MissilePreFlag && v50 & DFLAG_MISSILE) - DrawClippedMissile(a1a, sy, a4, a5, 0, 8, 1); + DrawClippedMissile(a1a, sy, a4, a5, 0, 8, TRUE); if (light_table_index < lightmax) { if (v7) { v11 = &dead[(v7 & 0x1F) - 1]; @@ -1010,7 +1010,7 @@ void __fastcall scrollrt_draw_clipped_dungeon(char *a1, int sx, int sy, int a4, } } if (v50 & 1) - DrawClippedMissile(a1a, sy, a4, a5, 0, 8, 0); + DrawClippedMissile(a1a, sy, a4, a5, 0, 8, FALSE); if (v47 && light_table_index < lightmax) DrawClippedObject(a1a, sy, a4, a5, 0, 0, 8); if (v49) { @@ -1476,7 +1476,7 @@ void __fastcall scrollrt_draw_clipped_dungeon_2(char *buffer, int x, int y, int Cel2DecodeHdrOnly(dst_buf, (char *)pSquareCel, 1, 64, a5, 8); if (MissilePreFlag && v53 & DFLAG_MISSILE) { v13 = sx; - DrawClippedMissile(a1, y, sx, sy, a5, 8, 1); + DrawClippedMissile(a1, y, sx, sy, a5, 8, TRUE); } else { v13 = sx; } @@ -1611,7 +1611,7 @@ void __fastcall scrollrt_draw_clipped_dungeon_2(char *buffer, int x, int y, int } } if (v53 & DFLAG_MISSILE) - DrawClippedMissile(a1, y, v13, sy, a5, 8, 0); + DrawClippedMissile(a1, y, v13, sy, a5, 8, FALSE); if (v50 && light_table_index < lightmax) DrawClippedObject(a1, y, v13, sy, 0, a5, 8); if (v52) { @@ -2019,7 +2019,7 @@ void __fastcall scrollrt_draw_dungeon(char *buffer, int x, int y, int a4, int a5 if (visiondebug && v52 & DFLAG_LIT) CelDecodeHdrOnly(dst_buf, (char *)pSquareCel, 1, 64, 0, a5); if (MissilePreFlag && v52 & DFLAG_MISSILE) - DrawMissile(xa, y, sx, sy, 0, a5, 1); + DrawMissile(xa, y, sx, sy, 0, a5, TRUE); if (light_table_index < lightmax) { if (v9) { v13 = &dead[(v9 & 0x1F) - 1]; @@ -2149,7 +2149,7 @@ void __fastcall scrollrt_draw_dungeon(char *buffer, int x, int y, int a4, int a5 } } if (v52 & DFLAG_MISSILE) - DrawMissile(xa, y, sx, sy, 0, a5, 0); + DrawMissile(xa, y, sx, sy, 0, a5, FALSE); if (v49 && light_table_index < lightmax) DrawObject(xa, y, sx, sy, 0, 0, a5); if (v51) { diff --git a/Source/scrollrt.h b/Source/scrollrt.h index 9c3a2fc17..0e78f0003 100644 --- a/Source/scrollrt.h +++ b/Source/scrollrt.h @@ -14,8 +14,8 @@ extern int(__fastcall *DrawPlrProc)(int player_num, int x, int y, int screen_x, extern int draw_monster_num; // weak void __cdecl ClearCursor(); -void __fastcall DrawMissile(int x, int y, int sx, int sy, int a5, int a6, int del_flag); -void __fastcall DrawClippedMissile(int x, int y, int sx, int sy, int a5, int a6, int a7); +void __fastcall DrawMissile(int x, int y, int sx, int sy, int a5, int a6, BOOL del_flag); +void __fastcall DrawClippedMissile(int x, int y, int sx, int sy, int a5, int a6, BOOL a7); void __fastcall DrawDeadPlayer(int x, int y, int sx, int sy, int a5, int a6, BOOLEAN clipped); void __fastcall DrawPlayer(int pnum, int x, int y, int px, int py, unsigned char *animdata, int animframe, int animwidth, int a9, int a10); void __fastcall DrawClippedPlayer(int pnum, int x, int y, int px, int py, unsigned char *animdata, int animframe, int animwidth, int a9, int a10); diff --git a/Source/town.cpp b/Source/town.cpp index 553f6ab8b..a6cecafc5 100644 --- a/Source/town.cpp +++ b/Source/town.cpp @@ -213,7 +213,7 @@ void __fastcall town_draw_clipped_town(BYTE *buffer, int x, int y, int sx, int s v7 = v29; } if (dFlags[0][v7] & DFLAG_MISSILE) - DrawClippedMissile(xa, y, sx, sy, 0, 8, 0); + DrawClippedMissile(xa, y, sx, sy, 0, 8, FALSE); } // 4B8CC0: using guessed type char pcursitem; // 4B8CC2: using guessed type char pcursplr; @@ -473,7 +473,7 @@ void __fastcall town_draw_clipped_town_2(int x, int y, int a3, int a4, int a5, i v9 = v31; } if (dFlags[0][v9] & DFLAG_MISSILE) - DrawClippedMissile(xa, a3, sx, sy, a5, 8, 0); + DrawClippedMissile(xa, a3, sx, sy, a5, 8, FALSE); } // 4B8CC0: using guessed type char pcursitem; // 4B8CC2: using guessed type char pcursplr; @@ -693,7 +693,7 @@ void __fastcall town_draw_town_all(BYTE *buffer, int x, int y, int a4, int dir, town_draw_e_flag(buffer - 64, x - 1, y + 1, a4, dir, sx - 64, sy); } if (dFlags[x][y] & DFLAG_MISSILE) - DrawMissile(x, y, sx, sy, 0, dir, 0); + DrawMissile(x, y, sx, sy, 0, dir, FALSE); } // 4B8CC0: using guessed type char pcursitem; // 4B8CC2: using guessed type char pcursplr; diff --git a/structs.h b/structs.h index f7279eca0..0dce86953 100644 --- a/structs.h +++ b/structs.h @@ -322,7 +322,7 @@ typedef struct PlayerStruct { unsigned char pDungMsgs; unsigned char pLvlLoad; unsigned char pBattleNet; - unsigned char pManaShield; + BOOLEAN pManaShield; char bReserved[3]; short wReserved[8]; DWORD pDiabloKillLevel; @@ -414,13 +414,13 @@ typedef struct MissileStruct { int _miAnimFrame; BOOL _miDrawFlag; int _miLightFlag; - int _miPreFlag; + BOOL _miPreFlag; int _miUniqTrans; int _mirange; int _misource; int _micaster; int _midam; - int _miHitFlag; + BOOL _miHitFlag; int _midist; int _mlid; int _mirnd; @@ -1409,7 +1409,7 @@ typedef struct PkPlayerStruct { char pDungMsgs; char pLvlLoad; char pBattleNet; - char pManaShield; + BOOLEAN pManaShield; char bReserved[3]; short wReserved[8]; int pDiabloKillLevel;