From 7dde42c89e04c76e9e05de2c675d3028072af22d Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 15:20:52 +0200 Subject: [PATCH 01/15] On_SBSPELL cleanup --- Source/msg.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 50144bb56..0a3b941ac 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1384,7 +1384,8 @@ DWORD On_SBSPELL(TCmd *pCmd, int pnum) TCmdParam1 *p = (TCmdParam1 *)pCmd; if (gbBufferMsgs != 1) { - if (currlevel != 0 || spelldata[p->wParam1].sTownSpell) { + int spell = p->wParam1; + if (currlevel != 0 || spelldata[spell].sTownSpell) { plr[pnum]._pSpell = p->wParam1; plr[pnum]._pSplType = plr[pnum]._pSBkSplType; plr[pnum]._pSplFrom = 1; From 2d6f5d09b8425ad752bd3f8cb747a132ecdf8469 Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 16:36:01 +0200 Subject: [PATCH 02/15] delta_get_item cleanup --- Source/msg.cpp | 103 ++++++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 49 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 0a3b941ac..8c5dc49bc 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1497,62 +1497,67 @@ DWORD On_GETITEM(TCmd *pCmd, int pnum) BOOL delta_get_item(TCmdGItem *pI, BYTE bLevel) { - BOOL result; TCmdPItem *pD; int i; - BOOL found; - result = TRUE; - found = FALSE; - if (gbMaxPlayers != 1) { - pD = sgLevels[bLevel].item; - for (i = 0; i < MAXITEMS; i++, pD++) { - if (pD->bCmd != 0xFF && pD->wIndx == pI->wIndx && pD->wCI == pI->wCI && pD->dwSeed == pI->dwSeed) { - found = TRUE; - break; - } + if (gbMaxPlayers == 1) + return TRUE; + + pD = sgLevels[bLevel].item; + for (i = 0; i < MAXITEMS; i++, pD++) { + if (pD->bCmd == 0xFF || pD->wIndx != pI->wIndx || pD->wCI != pI->wCI || pD->dwSeed != pI->dwSeed) + continue; + + if (pD->bCmd == CMD_WALKXY) { + return TRUE; } - if (found) { - if (pD->bCmd == CMD_WALKXY) { - return result; - } - if (pD->bCmd == CMD_STAND) { - sgbDeltaChanged = 1; - pD->bCmd = CMD_WALKXY; - return result; - } - if (pD->bCmd == CMD_ACK_PLRINFO) { - pD->bCmd = 0xFF; - sgbDeltaChanged = 1; - return result; - } - app_fatal("delta:1"); + if (pD->bCmd == CMD_STAND) { + sgbDeltaChanged = TRUE; + pD->bCmd = CMD_WALKXY; + return TRUE; } - if (((pI->wCI >> 8) & 0x80) == 0) - return FALSE; - pD = sgLevels[bLevel].item; - for (i = 0; i < MAXITEMS; i++, pD++) { - if (pD->bCmd == 0xFF) { - sgbDeltaChanged = 1; - pD->bCmd = CMD_WALKXY; - pD->x = pI->x; - pD->y = pI->y; - pD->wIndx = pI->wIndx; - pD->wCI = pI->wCI; - pD->dwSeed = pI->dwSeed; - pD->bId = pI->bId; - pD->bDur = pI->bDur; - pD->bMDur = pI->bMDur; - pD->bCh = pI->bCh; - pD->bMCh = pI->bMCh; - pD->wValue = pI->wValue; - pD->dwBuff = pI->dwBuff; - result = TRUE; - break; - } + if (pD->bCmd == CMD_ACK_PLRINFO) { + sgbDeltaChanged = TRUE; + pD->bCmd = 0xFF; + return TRUE; + } + + app_fatal("delta:1"); + break; + } + + if ((pI->wCI & CF_PREGEN) == 0) + return FALSE; + + pD = sgLevels[bLevel].item; + for (i = 0; i < MAXITEMS; i++, pD++) { + if (pD->bCmd == 0xFF) { + sgbDeltaChanged = TRUE; + pD->bCmd = CMD_WALKXY; + pD->x = pI->x; + pD->y = pI->y; + pD->wIndx = pI->wIndx; + pD->wCI = pI->wCI; + pD->dwSeed = pI->dwSeed; + pD->bId = pI->bId; + pD->bDur = pI->bDur; + pD->bMDur = pI->bMDur; + pD->bCh = pI->bCh; + pD->bMCh = pI->bMCh; + pD->wValue = pI->wValue; + pD->dwBuff = pI->dwBuff; +#ifdef HELLFIRE + pD->wToHit = pI->wToHit; + pD->wMaxDam = pI->wMaxDam; + pD->bMinStr = pI->bMinStr; + pD->bMinMag = pI->bMinMag; + pD->bMinDex = pI->bMinDex; + pD->bAC = pI->bAC; +#endif + break; } } - return result; + return TRUE; } DWORD On_GOTOAGETITEM(TCmd *pCmd, int pnum) From 4fa00f90793c6fa76e06f9c64fe2c8d7e25a8213 Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 17:14:35 +0200 Subject: [PATCH 03/15] DeltaImportData bin exact and cleanup --- Source/msg.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 8c5dc49bc..ff44bcf69 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1216,13 +1216,17 @@ void DeltaImportData(BYTE cmd, DWORD recv_offset) BYTE i; BYTE *src; - if (sgRecvBuf[0]) - PkwareDecompress(&sgRecvBuf[1], recv_offset, 4721); + if (sgRecvBuf[0] != 0) + PkwareDecompress(&sgRecvBuf[1], recv_offset, (sizeof(sgRecvBuf) / sizeof(sgRecvBuf[0])) - 1); src = &sgRecvBuf[1]; if (cmd == CMD_DLEVEL_JUNK) { DeltaImportJunk(src); +#ifdef HELLFIRE + } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_24) { +#else } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_16) { +#endif i = cmd - CMD_DLEVEL_0; src = DeltaImportItem(src, sgLevels[i].item); src = DeltaImportObject(src, sgLevels[i].object); From 51ca45e0d68ff66f4d6e96cb3f4803771c3bdbf2 Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 17:24:40 +0200 Subject: [PATCH 04/15] On_SPELLXYD cleanup (#2130) --- Source/msg.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index ff44bcf69..66feb3639 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1811,7 +1811,8 @@ DWORD On_SPELLXYD(TCmd *pCmd, int pnum) TCmdLocParam3 *p = (TCmdLocParam3 *)pCmd; if (gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel) { - if (currlevel != 0 || spelldata[p->wParam1].sTownSpell) { + int spell = p->wParam1; + if (currlevel != 0 || spelldata[spell].sTownSpell) { ClrPlrPath(pnum); plr[pnum].destAction = ACTION_SPELLWALL; plr[pnum].destParam1 = p->x; @@ -1833,7 +1834,8 @@ DWORD On_SPELLXY(TCmd *pCmd, int pnum) TCmdLocParam2 *p = (TCmdLocParam2 *)pCmd; if (gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel) { - if (currlevel != 0 || spelldata[p->wParam1].sTownSpell) { + int spell = p->wParam1; + if (currlevel != 0 || spelldata[spell].sTownSpell) { ClrPlrPath(pnum); plr[pnum].destAction = ACTION_SPELL; plr[pnum].destParam1 = p->x; @@ -1854,7 +1856,8 @@ DWORD On_TSPELLXY(TCmd *pCmd, int pnum) TCmdLocParam2 *p = (TCmdLocParam2 *)pCmd; if (gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel) { - if (currlevel != 0 || spelldata[p->wParam1].sTownSpell) { + int spell = p->wParam1; + if (currlevel != 0 || spelldata[spell].sTownSpell) { ClrPlrPath(pnum); plr[pnum].destAction = ACTION_SPELL; plr[pnum].destParam1 = p->x; @@ -1974,7 +1977,8 @@ DWORD On_SPELLID(TCmd *pCmd, int pnum) TCmdParam3 *p = (TCmdParam3 *)pCmd; if (gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel) { - if (currlevel != 0 || spelldata[p->wParam2].sTownSpell) { + int spell = p->wParam2; + if (currlevel != 0 || spelldata[spell].sTownSpell) { ClrPlrPath(pnum); plr[pnum].destAction = ACTION_SPELLMON; plr[pnum].destParam1 = p->wParam1; @@ -1994,7 +1998,8 @@ DWORD On_SPELLPID(TCmd *pCmd, int pnum) TCmdParam3 *p = (TCmdParam3 *)pCmd; if (gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel) { - if (currlevel != 0 || spelldata[p->wParam2].sTownSpell) { + int spell = p->wParam2; + if (currlevel != 0 || spelldata[spell].sTownSpell) { ClrPlrPath(pnum); plr[pnum].destAction = ACTION_SPELLPLR; plr[pnum].destParam1 = p->wParam1; @@ -2014,7 +2019,8 @@ DWORD On_TSPELLID(TCmd *pCmd, int pnum) TCmdParam3 *p = (TCmdParam3 *)pCmd; if (gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel) { - if (currlevel != 0 || spelldata[p->wParam2].sTownSpell) { + int spell = p->wParam2; + if (currlevel != 0 || spelldata[spell].sTownSpell) { ClrPlrPath(pnum); plr[pnum].destAction = ACTION_SPELLMON; plr[pnum].destParam1 = p->wParam1; @@ -2034,7 +2040,8 @@ DWORD On_TSPELLPID(TCmd *pCmd, int pnum) TCmdParam3 *p = (TCmdParam3 *)pCmd; if (gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel) { - if (currlevel != 0 || spelldata[p->wParam2].sTownSpell) { + int spell = p->wParam2; + if (currlevel != 0 || spelldata[spell].sTownSpell) { ClrPlrPath(pnum); plr[pnum].destAction = ACTION_SPELLPLR; plr[pnum].destParam1 = p->wParam1; From 36dba1cc1cd5e5758d2fdf8bc364b7cf7e6ee64f Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 17:26:24 +0200 Subject: [PATCH 05/15] cleanup (#2127) --- Source/missiles.cpp | 24 +++++++-------- Source/monster.cpp | 20 ++++++------ Source/multi.cpp | 2 +- Source/objects.cpp | 74 ++++++++++++++++++++++----------------------- Source/player.cpp | 12 ++++---- 5 files changed, 66 insertions(+), 66 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index b3037c206..07113375b 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1123,7 +1123,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my, missile[i]._miHitFlag = TRUE; } } - if (dObject[mx][my]) { + if (dObject[mx][my] != 0) { oi = dObject[mx][my] > 0 ? dObject[mx][my] - 1 : -(dObject[mx][my] + 1); if (!object[oi]._oMissFlag) { if (object[oi]._oBreak == 1) @@ -1350,7 +1350,7 @@ BOOLEAN missiles_found_target(int mi, int *x, int *y, int rad) ty = *y + CrawlTable[k]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { dp = dPiece[tx][ty]; - if (!nSolidTable[dp] && !dObject[tx][ty] && !dMissile[tx][ty]) { + if (!nSolidTable[dp] && dObject[tx][ty] == 0 && dMissile[tx][ty] == 0) { missile[mi]._mix = tx; missile[mi]._miy = ty; *x = tx; @@ -2130,10 +2130,10 @@ void AddRndTeleport(int mi, int sx, int sy, int dx, int dy, int midir, char mien if (r1 <= MAXDUNX && r1 >= 0 && r2 <= MAXDUNY && r2 >= 0) { ///BUGFIX: < MAXDUNX / < MAXDUNY pn = dPiece[r1][r2]; } - } while (nSolidTable[pn] || dObject[r1][r2] || dMonster[r1][r2]); + } while (nSolidTable[pn] || dObject[r1][r2] != 0 || dMonster[r1][r2] != 0); #else pn = dPiece[r1 + sx][sy + r2]; - } while (nSolidTable[pn] || dObject[r1 + sx][sy + r2] || dMonster[r1 + sx][sy + r2]); + } while (nSolidTable[pn] || dObject[r1 + sx][sy + r2] != 0 || dMonster[r1 + sx][sy + r2] != 0); #endif missile[mi]._mirange = 2; @@ -2235,7 +2235,7 @@ void AddTeleport(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy tx = dx + CrawlTable[pn - 1]; ty = dy + CrawlTable[pn]; if (0 < tx && tx < MAXDUNX && 0 < ty && ty < MAXDUNY) { - if (!(nSolidTable[dPiece[tx][ty]] | dMonster[tx][ty] | dObject[tx][ty] | dPlayer[tx][ty])) { + if ((nSolidTable[dPiece[tx][ty]] | dMonster[tx][ty] | dObject[tx][ty] | dPlayer[tx][ty]) == 0) { missile[mi]._mix = tx; missile[mi]._miy = ty; missile[mi]._misx = tx; @@ -2448,7 +2448,7 @@ void AddTown(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in ty = dy + CrawlTable[k]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { dp = dPiece[tx][ty]; - if (!(dMissile[tx][ty] | nSolidTable[dp] | nMissileTable[dp] | dObject[tx][ty] | dPlayer[tx][ty])) { + if ((dMissile[tx][ty] | nSolidTable[dp] | nMissileTable[dp] | dObject[tx][ty] | dPlayer[tx][ty]) == 0) { if (!CheckIfTrig(tx, ty)) { missile[mi]._mix = tx; missile[mi]._miy = ty; @@ -2589,7 +2589,7 @@ void AddGuardian(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy pn = dPiece[tx][ty]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { if (LineClear(sx, sy, tx, ty)) { - if (!(dMonster[tx][ty] | nSolidTable[pn] | nMissileTable[pn] | dObject[tx][ty] | dMissile[tx][ty])) { + if ((dMonster[tx][ty] | nSolidTable[pn] | nMissileTable[pn] | dObject[tx][ty] | dMissile[tx][ty]) == 0) { missile[mi]._mix = tx; missile[mi]._miy = ty; missile[mi]._misx = tx; @@ -3036,7 +3036,7 @@ void AddFirewallC(int mi, int sx, int sy, int dx, int dy, int midir, char mienem if (0 < tx && tx < MAXDUNX && 0 < ty && ty < MAXDUNY) { k = dPiece[tx][ty]; if (LineClear(sx, sy, tx, ty)) { - if ((sx != tx || sy != ty) && !(nSolidTable[k] | dObject[tx][ty])) { + if ((sx != tx || sy != ty) && (nSolidTable[k] | dObject[tx][ty]) == 0) { missile[mi]._miVar1 = tx; missile[mi]._miVar2 = ty; missile[mi]._miVar5 = tx; @@ -3510,7 +3510,7 @@ void MI_Golem(int i) if (0 < tx && tx < MAXDUNX && 0 < ty && ty < MAXDUNY) { dp = dPiece[tx][ty]; if (LineClear(missile[i]._miVar1, missile[i]._miVar2, tx, ty)) { - if (!(dMonster[tx][ty] | nSolidTable[dp] | dObject[tx][ty])) { + if ((dMonster[tx][ty] | nSolidTable[dp] | dObject[tx][ty]) == 0) { l = 6; SpawnGolum(src, tx, ty, i); break; @@ -3920,7 +3920,7 @@ void missiles_4359A0(int i) ty = missile[i]._miy + CrawlTable[k]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { dp = dPiece[tx][ty]; - if (!nSolidTable[dp] && !dMonster[tx][ty] && !dPlayer[tx][ty] && !dObject[tx][ty]) { + if (!nSolidTable[dp] && dMonster[tx][ty] == 0 && dPlayer[tx][ty] == 0 && dObject[tx][ty] == 0) { j = 6; int mon = AddMonster(tx, ty, missile[i]._miVar1, 1, TRUE); M_StartStand(mon, missile[i]._miVar1); @@ -4279,7 +4279,7 @@ void mi_fire_ring(int i) ty = missile[i]._miVar2 + CrawlTable[k]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { dp = dPiece[tx][ty]; - if (!nSolidTable[dp] && !dObject[tx][ty]) { + if (!nSolidTable[dp] && dObject[tx][ty] == 0) { if (LineClear(missile[i]._mix, missile[i]._miy, tx, ty)) { if (nMissileTable[dp] || missile[i]._miVar8) missile[i]._miVar8 = 1; @@ -4310,7 +4310,7 @@ void mi_light_ring(int i) ty = missile[i]._miVar2 + CrawlTable[k]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { dp = dPiece[tx][ty]; - if (!nSolidTable[dp] && !dObject[tx][ty]) { + if (!nSolidTable[dp] && dObject[tx][ty] == 0) { if (LineClear(missile[i]._mix, missile[i]._miy, tx, ty)) { if (nMissileTable[dp] || missile[i]._miVar8) missile[i]._miVar8 = 1; diff --git a/Source/monster.cpp b/Source/monster.cpp index 1915458dd..63f8f12eb 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -629,8 +629,8 @@ BOOL MonstPlace(int xp, int yp) if (xp < 0 || xp >= MAXDUNX || yp < 0 || yp >= MAXDUNY - || dMonster[xp][yp] - || dPlayer[xp][yp]) { + || dMonster[xp][yp] != 0 + || dPlayer[xp][yp] != 0) { return FALSE; } @@ -1295,8 +1295,8 @@ void monster_43C785(int i) x = mx + offset_x[d]; y = my + offset_y[d]; if (!SolidLoc(x, y)) { - if (!dPlayer[x][y] && !dMonster[x][y]) { - if (!dObject[x][y]) + if (dPlayer[x][y] == 0 && dMonster[x][y] == 0) { + if (dObject[x][y] == 0) break; oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); if (!object[oi]._oSolidFlag) @@ -5731,9 +5731,9 @@ BOOL PosOkMonst(int i, int x, int y) int oi; BOOL ret; - ret = !SolidLoc(x, y) && !dPlayer[x][y] && !dMonster[x][y]; + ret = !SolidLoc(x, y) && dPlayer[x][y] == 0 && dMonster[x][y] == 0; oi = dObject[x][y]; - if (ret && oi) { + if (ret && oi != 0) { oi = oi > 0 ? oi - 1 : -(oi + 1); if (object[oi]._oSolidFlag) ret = FALSE; @@ -5746,8 +5746,8 @@ BOOL PosOkMonst(int i, int x, int y) BOOL ret, fire; fire = FALSE; - ret = !SolidLoc(x, y) && !dPlayer[x][y] && !dMonster[x][y]; - if (ret && dObject[x][y]) { + ret = !SolidLoc(x, y) && dPlayer[x][y] == 0 && dMonster[x][y] == 0; + if (ret && dObject[x][y] != 0) { oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); if (object[oi]._oSolidFlag) ret = FALSE; @@ -5822,7 +5822,7 @@ BOOL PosOkMonst2(int i, int x, int y) oi = dObject[x][y]; ret = !SolidLoc(x, y); - if (ret && oi) { + if (ret && oi != 0) { oi = oi > 0 ? oi - 1 : -(oi + 1); if (object[oi]._oSolidFlag) ret = FALSE; @@ -5835,7 +5835,7 @@ BOOL PosOkMonst2(int i, int x, int y) fire = FALSE; ret = !SolidLoc(x, y); - if (ret && dObject[x][y]) { + if (ret && dObject[x][y] != 0) { oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); if (object[oi]._oSolidFlag) ret = FALSE; diff --git a/Source/multi.cpp b/Source/multi.cpp index 0b07633da..d14951986 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -483,7 +483,7 @@ void multi_process_network_packets() plr[dwID]._pBaseStr = pkt->bstr; plr[dwID]._pBaseMag = pkt->bmag; plr[dwID]._pBaseDex = pkt->bdex; - if (!cond && plr[dwID].plractive && plr[dwID]._pHitPoints) { + if (!cond && plr[dwID].plractive && plr[dwID]._pHitPoints != 0) { if (currlevel == plr[dwID].plrlevel && !plr[dwID]._pLvlChanging) { dx = abs(plr[dwID]._px - pkt->px); dy = abs(plr[dwID]._py - pkt->py); diff --git a/Source/objects.cpp b/Source/objects.cpp index 29b7b977e..11c65c273 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -282,11 +282,11 @@ void FreeObjectGFX() DIABOOL RndLocOk(int xp, int yp) { - if (dMonster[xp][yp]) + if (dMonster[xp][yp] != 0) return FALSE; - if (dPlayer[xp][yp]) + if (dPlayer[xp][yp] != 0) return FALSE; - if (dObject[xp][yp]) + if (dObject[xp][yp] != 0) return FALSE; if (dFlags[xp][yp] & BFLAG_POPULATED) return FALSE; @@ -1971,10 +1971,10 @@ void Obj_Door(int i) } else { dx = object[i]._ox; dy = object[i]._oy; - dok = !dMonster[dx][dy]; - dok = dok HFAND !dItem[dx][dy]; - dok = dok HFAND !dDead[dx][dy]; - dok = dok HFAND !dPlayer[dx][dy]; + dok = dMonster[dx][dy] == 0; + dok = dok HFAND (dItem[dx][dy] == 0); + dok = dok HFAND (dDead[dx][dy] == 0); + dok = dok HFAND (dPlayer[dx][dy] == 0); object[i]._oSelFlag = 2; object[i]._oVar4 = dok ? 1 : 2; object[i]._oMissFlag = TRUE; @@ -2022,7 +2022,7 @@ void Obj_FlameTrap(int i) x = object[i]._ox - 2; y = object[i]._oy; for (j = 0; j < 5; j++) { - if (dPlayer[x][y] || dMonster[x][y]) + if (dPlayer[x][y] != 0 || dMonster[x][y] != 0) object[i]._oVar4 = 1; x++; } @@ -2030,7 +2030,7 @@ void Obj_FlameTrap(int i) x = object[i]._ox; y = object[i]._oy - 2; for (k = 0; k < 5; k++) { - if (dPlayer[x][y] || dMonster[x][y]) + if (dPlayer[x][y] != 0 || dMonster[x][y] != 0) object[i]._oVar4 = 1; y++; } @@ -2082,7 +2082,7 @@ void Obj_Trap(int i) dy = object[oti]._oy; for (y = dy - 1; y <= object[oti]._oy + 1; y++) { for (x = object[oti]._ox - 1; x <= object[oti]._ox + 1; x++) { - if (dPlayer[x][y]) { + if (dPlayer[x][y] != 0) { dx = x; dy = y; } @@ -2542,9 +2542,9 @@ void OperateL1RDoor(int pnum, int oi, DIABOOL sendflag) if (!deltaload) PlaySfxLoc(IS_CRCLOS, xp, object[oi]._oy); } - BOOLEAN dok = !dMonster[xp][yp]; - dok = dok && !dItem[xp][yp]; - dok = dok && !dDead[xp][yp]; + BOOLEAN dok = dMonster[xp][yp] == 0; + dok = dok && dItem[xp][yp] == 0; + dok = dok && dDead[xp][yp] == 0; if (dok) { #else if (!deltaload) @@ -2650,9 +2650,9 @@ void OperateL1LDoor(int pnum, int oi, DIABOOL sendflag) if (!deltaload) PlaySfxLoc(IS_CRCLOS, xp, object[oi]._oy); } - BOOLEAN dok = !dMonster[xp][yp]; - dok = dok && !dItem[xp][yp]; - dok = dok && !dDead[xp][yp]; + BOOLEAN dok = dMonster[xp][yp] == 0; + dok = dok && dItem[xp][yp] == 0; + dok = dok && dDead[xp][yp] == 0; if (dok) { #else if (!deltaload) @@ -2723,9 +2723,9 @@ void OperateL2RDoor(int pnum, int oi, DIABOOL sendflag) if (!deltaload) PlaySfxLoc(IS_DOORCLOS, object[oi]._ox, yp); - dok = !dMonster[xp][yp]; - dok = dok HFAND !dItem[xp][yp]; - dok = dok HFAND !dDead[xp][yp]; + dok = dMonster[xp][yp] == 0; + dok = dok HFAND (dItem[xp][yp] == 0); + dok = dok HFAND (dDead[xp][yp] == 0); if (dok) { if (pnum == myplr && sendflag) NetSendCmdParam1(TRUE, CMD_CLOSEDOOR, oi); @@ -2768,9 +2768,9 @@ void OperateL2LDoor(int pnum, int oi, BOOL sendflag) if (!deltaload) PlaySfxLoc(IS_DOORCLOS, object[oi]._ox, yp); - dok = !dMonster[xp][yp]; - dok = dok HFAND !dItem[xp][yp]; - dok = dok HFAND !dDead[xp][yp]; + dok = dMonster[xp][yp] == 0; + dok = dok HFAND (dItem[xp][yp] == 0); + dok = dok HFAND (dDead[xp][yp] == 0); if (dok) { if (pnum == myplr && sendflag) NetSendCmdParam1(TRUE, CMD_CLOSEDOOR, oi); @@ -2814,9 +2814,9 @@ void OperateL3RDoor(int pnum, int oi, DIABOOL sendflag) if (!deltaload) PlaySfxLoc(IS_DOORCLOS, object[oi]._ox, yp); - dok = !dMonster[xp][yp]; - dok = dok HFAND !dItem[xp][yp]; - dok = dok HFAND !dDead[xp][yp]; + dok = dMonster[xp][yp] == 0; + dok = dok HFAND (dItem[xp][yp] == 0); + dok = dok HFAND (dDead[xp][yp] == 0); if (dok) { if (pnum == myplr && sendflag) NetSendCmdParam1(TRUE, CMD_CLOSEDOOR, oi); @@ -2860,9 +2860,9 @@ void OperateL3LDoor(int pnum, int oi, DIABOOL sendflag) if (!deltaload) PlaySfxLoc(IS_DOORCLOS, object[oi]._ox, yp); - dok = !dMonster[xp][yp]; - dok = dok HFAND !dItem[xp][yp]; - dok = dok HFAND !dDead[xp][yp]; + dok = dMonster[xp][yp] == 0; + dok = dok HFAND (dItem[xp][yp] == 0); + dok = dok HFAND (dDead[xp][yp] == 0); if (dok) { if (pnum == myplr && sendflag) NetSendCmdParam1(TRUE, CMD_CLOSEDOOR, oi); @@ -2884,14 +2884,14 @@ void MonstCheckDoors(int m) mx = monster[m]._mx; my = monster[m]._my; - if (dObject[mx - 1][my - 1] - || dObject[mx][my - 1] - || dObject[mx + 1][my - 1] - || dObject[mx - 1][my] - || dObject[mx + 1][my] - || dObject[mx - 1][my + 1] - || dObject[mx][my + 1] - || dObject[mx + 1][my + 1]) { + if (dObject[mx - 1][my - 1] != 0 + || dObject[mx][my - 1] != 0 + || dObject[mx + 1][my - 1] != 0 + || dObject[mx - 1][my] != 0 + || dObject[mx + 1][my] != 0 + || dObject[mx - 1][my + 1] != 0 + || dObject[mx][my + 1] != 0 + || dObject[mx + 1][my + 1] != 0) { for (i = 0; i < nobjects; ++i) { oi = objectactive[i]; if ((object[oi]._otype == OBJ_L1LDOOR || object[oi]._otype == OBJ_L1RDOOR) && object[oi]._oVar4 == 0) { @@ -3908,7 +3908,7 @@ void OperateShrine(int pnum, int i, int sType) if (j > MAXDUNX * 112) break; lv = dPiece[xx][yy]; - } while (nSolidTable[lv] || dObject[xx][yy] || dMonster[xx][yy]); + } while (nSolidTable[lv] || dObject[xx][yy] != 0 || dMonster[xx][yy] != 0); AddMissile(plr[pnum]._px, plr[pnum]._py, xx, yy, plr[pnum]._pdir, MIS_RNDTELEPORT, -1, pnum, 0, 2 * leveltype); if (pnum != myplr) return; diff --git a/Source/player.cpp b/Source/player.cpp index 4218a306f..7c7af0859 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -3031,7 +3031,7 @@ BOOL PM_DoAttack(int pnum) dx = plr[pnum]._px + offset_x[dir]; dy = plr[pnum]._py + offset_y[dir]; - if (dMonster[dx][dy]) { + if (dMonster[dx][dy] != 0) { if (dMonster[dx][dy] > 0) { m = dMonster[dx][dy] - 1; } else { @@ -3059,7 +3059,7 @@ BOOL PM_DoAttack(int pnum) m = -(dMonster[dx][dy] + 1); } didhit = PlrHitMonst(pnum, m); - } else if (dPlayer[dx][dy] && !FriendlyMode) { + } else if (dPlayer[dx][dy] != 0 && !FriendlyMode) { BYTE p = dPlayer[dx][dy]; if (dPlayer[dx][dy] > 0) { p = dPlayer[dx][dy] - 1; @@ -3951,18 +3951,18 @@ BOOL PosOkPlayer(int pnum, int x, int y) PosOK = FALSE; if (x >= 0 && x < MAXDUNX && y >= 0 && y < MAXDUNY && !SolidLoc(x, y) && dPiece[x][y]) { - if (dPlayer[x][y]) { + if (dPlayer[x][y] != 0) { if (dPlayer[x][y] > 0) { p = dPlayer[x][y] - 1; } else { p = -(dPlayer[x][y] + 1); } - if (p != pnum && p < MAX_PLRS && plr[p]._pHitPoints) { + if (p != pnum && p < MAX_PLRS && plr[p]._pHitPoints != 0) { return FALSE; } } - if (dMonster[x][y]) { + if (dMonster[x][y] != 0) { if (currlevel == 0) { return FALSE; } @@ -3974,7 +3974,7 @@ BOOL PosOkPlayer(int pnum, int x, int y) } } - if (dObject[x][y]) { + if (dObject[x][y] != 0) { if (dObject[x][y] > 0) { bv = dObject[x][y] - 1; } else { From ce1cc24e04c89bc56a3e9cecfc51773ca855c9b1 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 22 Oct 2020 17:57:51 +0200 Subject: [PATCH 06/15] [hellfire] S_HealerEnter --- Source/stores.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/stores.cpp b/Source/stores.cpp index 9ec53887f..1846531e2 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -2586,6 +2586,14 @@ void S_HealerEnter() gossipend = TEXT_PEPIN11; StartStore(STORE_GOSSIP); break; +#ifdef HELLFIRE + case 14: + StartStore(STORE_HBUY); + break; + case 16: + stextflag = STORE_NONE; + break; +#else case 14: if (plr[myplr]._pHitPoints != plr[myplr]._pMaxHP) PlaySFX(IS_CAST8); @@ -2599,6 +2607,7 @@ void S_HealerEnter() case 18: stextflag = STORE_NONE; break; +#endif } } From 804071652b40d3b14a497f8b0c38140374e1e70a Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 22 Oct 2020 18:17:17 +0200 Subject: [PATCH 07/15] Clean up HealerBuyItem --- Source/stores.cpp | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/Source/stores.cpp b/Source/stores.cpp index 1846531e2..c768aaded 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -2424,20 +2424,14 @@ void BoyBuyItem() void HealerBuyItem() { int idx; - BOOL ok; idx = stextvhold + ((stextlhold - stextup) >> 2); - - ok = FALSE; if (gbMaxPlayers == 1) { if (idx < 2) - ok = TRUE; + plr[myplr].HoldItem._iSeed = GetRndSeed(); } else { if (idx < 3) - ok = TRUE; - } - if (ok) { - plr[myplr].HoldItem._iSeed = GetRndSeed(); + plr[myplr].HoldItem._iSeed = GetRndSeed(); } TakePlrsMoney(plr[myplr].HoldItem._iIvalue); @@ -2445,26 +2439,23 @@ void HealerBuyItem() plr[myplr].HoldItem._iIdentified = FALSE; StoreAutoPlace(); - ok = FALSE; if (gbMaxPlayers == 1) { - if (idx >= 2) - ok = TRUE; + if (idx < 2) + return; } else { - if (idx >= 3) - ok = TRUE; + if (idx < 3) + return; } - if (ok) { - idx = stextvhold + ((stextlhold - stextup) >> 2); - if (idx == 19) { - healitem[19]._itype = ITYPE_NONE; - } else { - for (; healitem[idx + 1]._itype != ITYPE_NONE; idx++) { - healitem[idx] = healitem[idx + 1]; - } - healitem[idx]._itype = ITYPE_NONE; + idx = stextvhold + ((stextlhold - stextup) >> 2); + if (idx == 19) { + healitem[19]._itype = ITYPE_NONE; + } else { + for (; healitem[idx + 1]._itype != ITYPE_NONE; idx++) { + healitem[idx] = healitem[idx + 1]; } - CalcPlrInv(myplr, TRUE); + healitem[idx]._itype = ITYPE_NONE; } + CalcPlrInv(myplr, TRUE); } void S_BBuyEnter() From 9150cb71a6198efa3d0259e71620f567ae9756af Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 22 Oct 2020 18:40:18 +0200 Subject: [PATCH 08/15] Clean up WitchBuyItem --- Source/stores.cpp | 4 ++-- defs.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/stores.cpp b/Source/stores.cpp index c768aaded..17eac713e 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -2282,8 +2282,8 @@ void WitchBuyItem() StoreAutoPlace(); if (idx >= 3) { - if (idx == 19) { - witchitem[19]._itype = ITYPE_NONE; + if (idx == WITCH_ITEMS - 1) { + witchitem[WITCH_ITEMS - 1]._itype = ITYPE_NONE; } else { for (; witchitem[idx + 1]._itype != ITYPE_NONE; idx++) { witchitem[idx] = witchitem[idx + 1]; diff --git a/defs.h b/defs.h index 5c30d1cde..d18ef92cf 100644 --- a/defs.h +++ b/defs.h @@ -95,6 +95,7 @@ // todo: enums #ifdef HELLFIRE #define NUMLEVELS 25 +#define WITCH_ITEMS 25 #define SMITH_ITEMS 25 #define SMITH_PREMIUM_ITEMS 15 #define SMITH_MAX_VALUE 200000 @@ -102,6 +103,7 @@ #define STORE_LINES 104 #else #define NUMLEVELS 17 +#define WITCH_ITEMS 20 #define SMITH_ITEMS 20 #define SMITH_PREMIUM_ITEMS 6 #define SMITH_MAX_VALUE 140000 From 2c951ac168facfc3b7319cfa97800a4656f2577c Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 22 Oct 2020 18:51:36 +0200 Subject: [PATCH 09/15] Add bugfix to hellfire variant of CrawlTable --- Source/missiles.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 07113375b..6a1d08f3e 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -275,7 +275,7 @@ int FindClosest(int sx, int sy, int rad) for (i = 1; i < rad; i++) { cr = CrawlNum[i] + 2; #ifdef HELLFIRE - for (j = CrawlTable[CrawlNum[i]]; j > 0; j--) { + for (j = CrawlTable[CrawlNum[i]]; j > 0; j--) { // BUGFIX: should cast to BYTE or CrawlTable header will be wrong #else for (j = (BYTE)CrawlTable[CrawlNum[i]]; j > 0; j--) { #endif @@ -2440,7 +2440,7 @@ void AddTown(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in for (j = 0; j < 6; j++) { k = CrawlNum[j] + 2; #ifdef HELLFIRE - for (i = CrawlTable[CrawlNum[j]]; i > 0; i--) { + for (i = CrawlTable[CrawlNum[j]]; i > 0; i--) { // BUGFIX: should cast to BYTE or CrawlTable header will be wrong #else for (i = (BYTE)CrawlTable[CrawlNum[j]]; i > 0; i--) { #endif @@ -2580,7 +2580,7 @@ void AddGuardian(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy pn = CrawlNum[i]; k = pn + 2; #ifdef HELLFIRE - for (j = CrawlTable[pn]; j > 0; j--) { + for (j = CrawlTable[pn]; j > 0; j--) { // BUGFIX: should cast to BYTE or CrawlTable header will be wrong #else for (j = (BYTE)CrawlTable[pn]; j > 0; j--) { #endif @@ -2811,7 +2811,7 @@ void AddStone(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i k = CrawlNum[i]; l = k + 2; #ifdef HELLFIRE - for (j = CrawlTable[k]; j > 0; j--) { + for (j = CrawlTable[k]; j > 0; j--) { // BUGFIX: should cast to BYTE or CrawlTable header will be wrong #else for (j = (BYTE)CrawlTable[k]; j > 0; j--) { #endif @@ -3027,7 +3027,7 @@ void AddFirewallC(int mi, int sx, int sy, int dx, int dy, int midir, char mienem k = CrawlNum[i]; pn = k + 2; #ifdef HELLFIRE - for (j = CrawlTable[k]; j > 0; j--) { + for (j = CrawlTable[k]; j > 0; j--) { // BUGFIX: should cast to BYTE or CrawlTable header will be wrong #else for (j = (BYTE)CrawlTable[k]; j > 0; j--) { #endif @@ -3500,7 +3500,7 @@ void MI_Golem(int i) k = CrawlNum[l]; tid = k + 2; #ifdef HELLFIRE - for (m = CrawlTable[k]; m > 0; m--) { + for (m = CrawlTable[k]; m > 0; m--) { // BUGFIX: should cast to BYTE or CrawlTable header will be wrong #else for (m = (BYTE)CrawlTable[k]; m > 0; m--) { #endif @@ -4897,7 +4897,7 @@ void MI_Chain(int i) k = CrawlNum[m]; l = k + 2; #ifdef HELLFIRE - for (n = CrawlTable[k]; n > 0; n--) { + for (n = CrawlTable[k]; n > 0; n--) { // BUGFIX: should cast to BYTE or CrawlTable header will be wrong #else for (n = (BYTE)CrawlTable[k]; n > 0; n--) { #endif From aa9a938665848de2bc402cbe43eb251940264c85 Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 18:43:10 +0200 Subject: [PATCH 10/15] DeltaAddItem --- Source/msg.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 66feb3639..56508441a 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -411,9 +411,9 @@ void DeltaAddItem(int ii) int i; TCmdPItem *pD; - if (gbMaxPlayers == 1) { + if (gbMaxPlayers == 1) return; - } + pD = sgLevels[currlevel].item; for (i = 0; i < MAXITEMS; i++, pD++) { if (pD->bCmd != 0xFF @@ -428,8 +428,8 @@ void DeltaAddItem(int ii) pD = sgLevels[currlevel].item; for (i = 0; i < MAXITEMS; i++, pD++) { if (pD->bCmd == 0xFF) { - pD->bCmd = CMD_STAND; sgbDeltaChanged = TRUE; + pD->bCmd = CMD_STAND; pD->x = item[ii]._ix; pD->y = item[ii]._iy; pD->wIndx = item[ii].IDidx; @@ -441,6 +441,14 @@ void DeltaAddItem(int ii) pD->bCh = item[ii]._iCharges; pD->bMCh = item[ii]._iMaxCharges; pD->wValue = item[ii]._ivalue; +#ifdef HELLFIRE + pD->wToHit = item[ii]._iPLToHit; + pD->wMaxDam = item[ii]._iMaxDam; + pD->bMinStr = item[ii]._iMinStr; + pD->bMinMag = item[ii]._iMinMag; + pD->bMinDex = item[ii]._iMinDex; + pD->bAC = item[ii]._iAC; +#endif return; } } From fb81425ac67acc17b00aaf416f090f1d89b291de Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 17:50:02 +0200 Subject: [PATCH 11/15] some magic numbers cleanup --- Source/msg.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 56508441a..7ebd7d934 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -60,7 +60,7 @@ void msg_get_next_packet() sgpCurrPkt = (TMegaPkt *)DiabloAllocPtr(sizeof(TMegaPkt)); sgpCurrPkt->pNext = NULL; - sgpCurrPkt->dwSpaceLeft = 32000; + sgpCurrPkt->dwSpaceLeft = sizeof(result->data); result = (TMegaPkt *)&sgpMegaPkt; while (result->pNext) { @@ -161,9 +161,9 @@ void msg_pre_packet() TFakeCmdPlr *cmd, *tmpCmd; TFakeDropPlr *dropCmd; - pkt = sgpMegaPkt; - for (i = -1; pkt; pkt = pkt->pNext) { - spaceLeft = 32000; + i = -1; + for (pkt = sgpMegaPkt; pkt != NULL; pkt = pkt->pNext) { + spaceLeft = sizeof(pkt->data); cmd = (TFakeCmdPlr *)pkt->data; while (spaceLeft != pkt->dwSpaceLeft) { if (cmd->bCmd == FAKE_CMD_SETID) { @@ -192,7 +192,7 @@ void DeltaExportData(int pnum) char src; if (sgbDeltaChanged) { - dst = (BYTE *)DiabloAllocPtr(4722); + dst = (BYTE *)DiabloAllocPtr(sizeof(DLevel) + 1); for (i = 0; i < NUMLEVELS; i++) { dstEnd = dst + 1; dstEnd = DeltaExportItem(dstEnd, sgLevels[i].item); From e31a7bc22ec13ddd55d6c346f10682288890eabf Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 17:37:31 +0200 Subject: [PATCH 12/15] enums and cleanups --- Source/msg.cpp | 16 ++++++++-------- Source/nthread.cpp | 12 ++---------- Source/wave.cpp | 7 +------ defs.h | 12 +++++++----- 4 files changed, 18 insertions(+), 29 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 7ebd7d934..ce2a01a77 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -92,7 +92,7 @@ BOOL msg_wait_resync() return FALSE; } - if (sgbDeltaChunks != 21) { + if (sgbDeltaChunks != MAX_CHUNKS) { DrawDlg("Unable to get level data"); msg_free_packets(); return FALSE; @@ -115,9 +115,9 @@ int msg_wait_for_turns() BOOL received; DWORD turns; - if (!sgbDeltaChunks) { + if (sgbDeltaChunks == 0) { nthread_send_and_recv_turn(0, 0); - if (!SNetGetOwnerTurnsWaiting(&turns) && SErrGetLastError() == STORM_ERROR_NOT_IN_GAME) + if (!SNetGetOwnerTurnsWaiting(&turns) && DERROR() == STORM_ERROR_NOT_IN_GAME) return 100; if (GetTickCount() - sgdwOwnerWait <= 2000 && turns < gdwTurnsInTransit) return 0; @@ -136,11 +136,11 @@ int msg_wait_for_turns() gbDeltaSender = myplr; nthread_set_turn_upper_bit(); } - if (sgbDeltaChunks == 20) { - sgbDeltaChunks = 21; + if (sgbDeltaChunks == MAX_CHUNKS - 1) { + sgbDeltaChunks = MAX_CHUNKS; return 99; } - return 100 * sgbDeltaChunks / 21; + return 100 * sgbDeltaChunks / MAX_CHUNKS; } void run_delta_info() @@ -1193,7 +1193,7 @@ DWORD On_DLEVEL(int pnum, TCmd *pCmd) } if (sgbRecvCmd == CMD_DLEVEL_END) { if (p->bCmd == CMD_DLEVEL_END) { - sgbDeltaChunks = 20; + sgbDeltaChunks = MAX_CHUNKS - 1; return p->wBytes + sizeof(*p); } else if (p->bCmd == CMD_DLEVEL_0 && p->wOffset == 0) { sgdwRecvOffset = 0; @@ -1204,7 +1204,7 @@ DWORD On_DLEVEL(int pnum, TCmd *pCmd) } else if (sgbRecvCmd != p->bCmd) { DeltaImportData(sgbRecvCmd, sgdwRecvOffset); if (p->bCmd == CMD_DLEVEL_END) { - sgbDeltaChunks = 20; + sgbDeltaChunks = MAX_CHUNKS - 1; sgbRecvCmd = CMD_DLEVEL_END; return p->wBytes + sizeof(*p); } else { diff --git a/Source/nthread.cpp b/Source/nthread.cpp index 0d87321eb..50b1ee6ef 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -30,11 +30,7 @@ void nthread_terminate_game(const char *pszFcn) { DWORD sErr; -#ifdef HELLFIRE - sErr = GetLastError(); -#else - sErr = SErrGetLastError(); -#endif + sErr = DERROR(); if (sErr == STORM_ERROR_INVALID_PLAYER) { return; } else if (sErr == STORM_ERROR_GAME_TERMINATED) { @@ -92,11 +88,7 @@ BOOL nthread_recv_turns(BOOL *pfSendAsync) return TRUE; } if (!SNetReceiveTurns(0, MAX_PLRS, (char **)glpMsgTbl, gdwMsgLenTbl, (LPDWORD)player_state)) { -#ifdef HELLFIRE - if (GetLastError() != STORM_ERROR_NO_MESSAGES_WAITING) -#else - if (SErrGetLastError() != STORM_ERROR_NO_MESSAGES_WAITING) -#endif + if (DERROR() != STORM_ERROR_NO_MESSAGES_WAITING) nthread_terminate_game("SNetReceiveTurns"); sgbTicsOutOfSync = FALSE; sgbSyncCountdown = 1; diff --git a/Source/wave.cpp b/Source/wave.cpp index 8a819abf5..8b9b6b402 100644 --- a/Source/wave.cpp +++ b/Source/wave.cpp @@ -43,13 +43,8 @@ BOOL WOpenFile(const char *FileName, HANDLE *phsFile, BOOL mayNotExist) while (1) { if (SFileOpenFile(FileName, phsFile)) return TRUE; -#ifdef HELLFIRE - if (mayNotExist && GetLastError() == ERROR_FILE_NOT_FOUND) + if (mayNotExist && DERROR() == ERROR_FILE_NOT_FOUND) break; -#else - if (mayNotExist && SErrGetLastError() == ERROR_FILE_NOT_FOUND) - break; -#endif WGetFileArchive(NULL, &retry, FileName); } return FALSE; diff --git a/defs.h b/defs.h index d18ef92cf..1d13b2f75 100644 --- a/defs.h +++ b/defs.h @@ -16,8 +16,10 @@ #ifdef HELLFIRE #define HFAND && +#define DERROR GetLastError #else #define HFAND & +#define DERROR SErrGetLastError #endif #define DMAXX 40 @@ -35,17 +37,17 @@ #ifdef HELLFIRE #define MAX_LVLS 24 #define MAX_LVLMTYPES 24 +#define MAX_SPELLS 52 #else #define MAX_LVLS 16 #define MAX_LVLMTYPES 16 +#define MAX_SPELLS 37 #endif + +#define MAX_CHUNKS (MAX_LVLS + 5) + // #define MAX_PATH 260 #define MAX_SEND_STR_LEN 80 -#ifdef HELLFIRE -#define MAX_SPELLS 52 -#else -#define MAX_SPELLS 37 -#endif #define MAXDEAD 31 #define MAXDUNX 112 From 1b18927bf283cf0753b58a2057d92f499c0ef716 Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 19:19:34 +0200 Subject: [PATCH 13/15] fix multi quest bug --- Source/msg.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index ce2a01a77..15273f633 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -271,7 +271,7 @@ BYTE *DeltaExportJunk(BYTE *dst) } mq = sgJunk.quests; - for (i = 0; i < MAXMULTIQUESTS; i++) { + for (i = 0; i < MAXQUESTS; i++) { if (questlist[i]._qflags & QUEST_ANY) { mq->qlog = quests[i]._qlog; mq->qstate = quests[i]._qactive; @@ -1313,7 +1313,7 @@ void DeltaImportJunk(BYTE *src) } mq = sgJunk.quests; - for (i = 0; i < MAXMULTIQUESTS; i++) { + for (i = 0; i < MAXQUESTS; i++) { if (questlist[i]._qflags & QUEST_ANY) { memcpy(mq, src, sizeof(MultiQuests)); src += sizeof(MultiQuests); From bdab54021779a995ad355af4aa0c24ce1511919d Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 22 Oct 2020 19:44:28 +0200 Subject: [PATCH 14/15] delta_init bin exact --- defs.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defs.h b/defs.h index 1d13b2f75..c81519c23 100644 --- a/defs.h +++ b/defs.h @@ -57,13 +57,14 @@ #define MAXLIGHTS 32 #define MAXMISSILES 125 #define MAXMONSTERS 200 -#define MAXMULTIQUESTS 4 #define MAXOBJECTS 127 #define MAXPORTAL 4 #ifdef HELLFIRE #define MAXQUESTS 24 +#define MAXMULTIQUESTS 10 #else #define MAXQUESTS 16 +#define MAXMULTIQUESTS 4 #endif #define MAXTHEMES 50 #define MAXTILES 2048 From 8d4366bc64839bd7aaccd09101e4dc403997a165 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 22 Oct 2020 20:36:04 +0200 Subject: [PATCH 15/15] Update names of Hellfire functions --- comparer-config/hellfire.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/comparer-config/hellfire.toml b/comparer-config/hellfire.toml index 56bb1e27b..d6617b503 100644 --- a/comparer-config/hellfire.toml +++ b/comparer-config/hellfire.toml @@ -6303,17 +6303,17 @@ addr = 0x44A2F6 size = 0x4 [[func]] -name = "On_cmd_100" +name = "On_NAKRUL" addr = 0x44A2FA size = 0x28 [[func]] -name = "On_cmd_101" +name = "On_OPENHIVE" addr = 0x44A322 size = 0x32 [[func]] -name = "On_cmd_102" +name = "On_OPENCRYPT" addr = 0x44A354 size = 0x28