diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 41d968f0d..1cbb67e4f 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -277,7 +277,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 @@ -1120,7 +1120,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) @@ -1351,7 +1351,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; @@ -2131,10 +2131,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; @@ -2236,7 +2236,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; @@ -2441,7 +2441,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 @@ -2449,7 +2449,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; @@ -2579,7 +2579,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 @@ -2588,7 +2588,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; @@ -2810,7 +2810,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 @@ -3034,7 +3034,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 @@ -3043,7 +3043,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; @@ -3514,7 +3514,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 @@ -3524,7 +3524,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; @@ -3934,7 +3934,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); @@ -4293,7 +4293,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; @@ -4324,7 +4324,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; @@ -4911,7 +4911,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 diff --git a/Source/monster.cpp b/Source/monster.cpp index 2dd7a832c..97fb832a1 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -630,8 +630,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; } @@ -1300,8 +1300,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) @@ -5667,9 +5667,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; @@ -5682,8 +5682,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; @@ -5758,7 +5758,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; @@ -5771,7 +5771,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/msg.cpp b/Source/msg.cpp index 8a1f422ed..333c4bcba 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -62,7 +62,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) { @@ -94,7 +94,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; @@ -117,7 +117,7 @@ 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) return 100; @@ -138,11 +138,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() @@ -163,9 +163,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) { @@ -194,7 +194,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); @@ -273,7 +273,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; @@ -413,9 +413,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 @@ -430,8 +430,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; @@ -443,6 +443,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; } } @@ -1187,7 +1195,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; @@ -1198,7 +1206,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 { @@ -1218,13 +1226,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); @@ -1303,7 +1315,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); @@ -1386,7 +1398,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; @@ -1498,62 +1511,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; } - return result; + + 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 TRUE; } DWORD On_GOTOAGETITEM(TCmd *pCmd, int pnum) @@ -1803,7 +1821,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; @@ -1825,7 +1844,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; @@ -1846,7 +1866,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; @@ -1966,7 +1987,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; @@ -1986,7 +2008,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; @@ -2006,7 +2029,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; @@ -2026,7 +2050,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; diff --git a/Source/multi.cpp b/Source/multi.cpp index 2b76ac814..06935cdb0 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -438,7 +438,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 d1134bca0..185651cba 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; @@ -1976,10 +1976,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; @@ -2027,7 +2027,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++; } @@ -2035,7 +2035,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++; } @@ -2099,7 +2099,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; } @@ -2522,9 +2522,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) @@ -2630,9 +2630,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) @@ -2703,9 +2703,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); @@ -2748,9 +2748,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); @@ -2794,9 +2794,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); @@ -2840,9 +2840,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); @@ -2864,14 +2864,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) { @@ -3877,7 +3877,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 c3ca187c3..b52a3339d 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -2952,7 +2952,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 { @@ -2980,7 +2980,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; @@ -3872,18 +3872,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; } @@ -3895,7 +3895,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 { diff --git a/Source/stores.cpp b/Source/stores.cpp index 5cd8b1639..452e82d48 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -2246,8 +2246,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]; @@ -2388,20 +2388,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); @@ -2409,26 +2403,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() @@ -2550,6 +2541,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); @@ -2563,6 +2562,7 @@ void S_HealerEnter() case 18: stextflag = STORE_NONE; break; +#endif } } diff --git a/defs.h b/defs.h index f5679b973..2b5e18aae 100644 --- a/defs.h +++ b/defs.h @@ -35,17 +35,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 @@ -55,13 +55,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 @@ -95,6 +96,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 +104,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