diff --git a/.travis.yml b/.travis.yml index 0813b97ea..85496a908 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: cpp os: osx - + osx_image: xcode10.3 addons: diff --git a/Source/automap.cpp b/Source/automap.cpp index 3e2f45634..6a8a9c065 100644 --- a/Source/automap.cpp +++ b/Source/automap.cpp @@ -73,24 +73,21 @@ void InitAutomap() switch (leveltype) { case DTYPE_CATHEDRAL: pAFile = LoadFileInMem("Levels\\L1Data\\L1.AMP", &dwTiles); - dwTiles >>= 1; break; case DTYPE_CATACOMBS: pAFile = LoadFileInMem("Levels\\L2Data\\L2.AMP", &dwTiles); - dwTiles >>= 1; break; case DTYPE_CAVES: pAFile = LoadFileInMem("Levels\\L3Data\\L3.AMP", &dwTiles); - dwTiles >>= 1; break; case DTYPE_HELL: pAFile = LoadFileInMem("Levels\\L4Data\\L4.AMP", &dwTiles); - dwTiles >>= 1; break; default: return; } + dwTiles >>= 1; pTmp = pAFile; for (i = 1; i <= dwTiles; i++) { diff --git a/Source/codec.cpp b/Source/codec.cpp index 9cfbb542e..dcbb291c1 100644 --- a/Source/codec.cpp +++ b/Source/codec.cpp @@ -36,20 +36,21 @@ int codec_decode(BYTE *pbSrcDst, DWORD size, char *pszPassword) memset(buf, 0, sizeof(buf)); sig = (CodecSignature *)pbSrcDst; if (sig->error > 0) { - size = 0; - SHA1Clear(); - } else { - SHA1Result(0, dst); - if (sig->checksum != *(DWORD *)dst) { - memset(dst, 0, sizeof(dst)); - size = 0; - SHA1Clear(); - } else { - size += sig->last_chunk_size - 64; - SHA1Clear(); - } + goto error; + } + + SHA1Result(0, dst); + if (sig->checksum != *(DWORD *)dst) { + memset(dst, 0, sizeof(dst)); + goto error; } + + size += sig->last_chunk_size - 64; + SHA1Clear(); return size; +error: + SHA1Clear(); + return 0; } void codec_init_key(int unused, char *pszPassword) diff --git a/Source/control.cpp b/Source/control.cpp index 54c002ca3..e8a1538f9 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -395,9 +395,9 @@ void SetSpell() spselflag = 0; if (pSpell != -1) { ClearPanel(); - drawpanflag = 255; plr[myplr]._pRSpell = pSpell; plr[myplr]._pRSplType = pSplType; + drawpanflag = 255; } } @@ -452,11 +452,8 @@ void CPrintString(int nOffset, int nCel, char col) int i, nDataSize; BYTE width, pix; BYTE *src, *dst, *end; - DWORD *pFrameTable; - pFrameTable = (DWORD *)&pPanelText[4 * nCel]; - src = &pPanelText[pFrameTable[0]]; - nDataSize = pFrameTable[1] - pFrameTable[0]; + src = CelGetFrame(pPanelText, nCel, &nDataSize); end = &src[nDataSize]; dst = &gpBuffer[nOffset]; diff --git a/Source/dthread.cpp b/Source/dthread.cpp index f4f58fc5e..0010eccaf 100644 --- a/Source/dthread.cpp +++ b/Source/dthread.cpp @@ -19,7 +19,7 @@ void dthread_remove_player(int pnum) sgMemCrit.Enter(); for (pkt = sgpInfoHead; pkt; pkt = pkt->pNext) { if (pkt->dwSpaceLeft == pnum) - pkt->dwSpaceLeft = 4; + pkt->dwSpaceLeft = MAX_PLRS; } sgMemCrit.Leave(); } @@ -94,7 +94,7 @@ unsigned int __stdcall dthread_handler(void *) sgMemCrit.Leave(); if (pkt) { - if (pkt->dwSpaceLeft != 4) + if (pkt->dwSpaceLeft != MAX_PLRS) multi_send_zero_packet(pkt->dwSpaceLeft, pkt->data[0], &pkt->data[8], *(DWORD *)&pkt->data[4]); dwMilliseconds = 1000 * *(DWORD *)&pkt->data[4] / gdwDeltaBytesSec; diff --git a/Source/engine.cpp b/Source/engine.cpp index ed9c8de0e..9b9db8c9c 100644 --- a/Source/engine.cpp +++ b/Source/engine.cpp @@ -15,6 +15,27 @@ BOOL gbNotInView; // valid - if x/y are in bounds const int RndInc = 1; const int RndMult = 0x015A4E35; +inline BYTE *CelGetFrame(BYTE *pCelBuff, int nCel, int *nDataSize) +{ + DWORD *pFrameTable; + DWORD nCellStart; + + pFrameTable = (DWORD *)pCelBuff; + nCellStart = SwapLE32(pFrameTable[nCel]); + *nDataSize = SwapLE32(pFrameTable[nCel + 1]) - nCellStart; + + return pCelBuff + nCellStart; +} + +inline int CelGetFrameSize(BYTE *pCelBuff, int nCel) +{ + DWORD *pFrameTable; + + pFrameTable = (DWORD *)pCelBuff; + + return SwapLE32(pFrameTable[nCel + 1]) - SwapLE32(pFrameTable[nCel]); +} + void CelDrawDatOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth) { int w; @@ -71,7 +92,8 @@ void CelDrawDatOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth) void CelDecodeOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth) { - DWORD *pFrameTable; + int nDataSize; + BYTE *pRLEBytes; /// ASSERT: assert(gpBuffer); if (!gpBuffer) @@ -80,18 +102,14 @@ void CelDecodeOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth) if (!pCelBuff) return; - pFrameTable = (DWORD *)pCelBuff; - - CelDrawDatOnly( - &gpBuffer[sx + PitchTbl[sy]], - &pCelBuff[pFrameTable[nCel]], - pFrameTable[nCel + 1] - pFrameTable[nCel], - nWidth); + pRLEBytes = CelGetFrame(pCelBuff, nCel, &nDataSize); + CelDrawDatOnly(&gpBuffer[sx + PitchTbl[sy]], pRLEBytes, nDataSize, nWidth); } void CelDecDatOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth) { - DWORD *pFrameTable; + int nDataSize; + BYTE *pRLEBytes; /// ASSERT: assert(pCelBuff != NULL); if (!pCelBuff) @@ -100,13 +118,8 @@ void CelDecDatOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth) if (!pBuff) return; - pFrameTable = (DWORD *)pCelBuff; - - CelDrawDatOnly( - pBuff, - &pCelBuff[pFrameTable[nCel]], - pFrameTable[nCel + 1] - pFrameTable[nCel], - nWidth); + pRLEBytes = CelGetFrame(pCelBuff, nCel, &nDataSize); + CelDrawDatOnly(pBuff, pRLEBytes, nDataSize, nWidth); } /** @@ -115,9 +128,9 @@ void CelDecDatOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth) */ void CelDrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) { - int nDataStart, nDataSize, nDataCap; BYTE *pRLEBytes; DWORD *pFrameTable; + int nDataStart, nDataSize, nDataCap; /// ASSERT: assert(gpBuffer); if (!gpBuffer) @@ -156,9 +169,9 @@ void CelDrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int Ce */ void CelDecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) { - int nDataStart, nDataSize, nDataCap; BYTE *pRLEBytes; DWORD *pFrameTable; + int nDataStart, nDataSize, nDataCap; /// ASSERT: assert(pCelBuff != NULL); if (!pCelBuff) @@ -328,7 +341,6 @@ void CelDecodeLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth) { int nDataSize; BYTE *pDecodeTo, *pRLEBytes; - DWORD *pFrameTable; /// ASSERT: assert(gpBuffer); if (!gpBuffer) @@ -337,10 +349,7 @@ void CelDecodeLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth) if (!pCelBuff) return; - pFrameTable = (DWORD *)pCelBuff; - - nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel]; - pRLEBytes = &pCelBuff[pFrameTable[nCel]]; + pRLEBytes = CelGetFrame(pCelBuff, nCel, &nDataSize); pDecodeTo = &gpBuffer[sx + PitchTbl[sy]]; if (light_table_index) @@ -573,9 +582,9 @@ void Cel2DecDatOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth) */ void Cel2DrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) { - int nDataStart, nDataSize, nDataCap; BYTE *pRLEBytes; DWORD *pFrameTable; + int nDataStart, nDataSize, nDataCap; /// ASSERT: assert(gpBuffer); if (!gpBuffer) @@ -614,9 +623,9 @@ void Cel2DrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int C */ void Cel2DecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) { - int nDataStart, nDataSize, nDataCap; BYTE *pRLEBytes; DWORD *pFrameTable; + int nDataStart, nDataSize, nDataCap; /// ASSERT: assert(pCelBuff != NULL); if (!pCelBuff) @@ -967,13 +976,11 @@ void CelDecodeRect(BYTE *pBuff, int CelSkip, int hgt, int wdt, BYTE *pCelBuff, i if (!pBuff) return; - int i; + int i, nDataSize; BYTE width; - DWORD *pFrameTable; - pFrameTable = (DWORD *)&pCelBuff[4 * nCel]; - pRLEBytes = &pCelBuff[pFrameTable[0]]; - end = &pRLEBytes[pFrameTable[1] - pFrameTable[0]]; + pRLEBytes = CelGetFrame(pCelBuff, nCel, &nDataSize); + end = &pRLEBytes[nDataSize]; dst = &pBuff[hgt * wdt + CelSkip]; for (; pRLEBytes != end; dst -= wdt + nWidth) { @@ -1421,12 +1428,13 @@ int GetDirection(int x1, int y1, int x2, int y2) if (2 * my < mx) return DIR_SE; } else { - ny = -mx; if (my >= 0) { + ny = -mx; md = DIR_W; if (2 * ny < my) md = DIR_SW; } else { + ny = -mx; my = -my; md = DIR_N; if (2 * ny < my) @@ -1560,7 +1568,7 @@ void Cl2ApplyTrans(BYTE *p, BYTE *ttbl, int nCel) for (i = 1; i <= nCel; i++) { pFrameTable = (DWORD *)&p[4 * i]; dst = &p[pFrameTable[0] + 10]; - nDataSize = pFrameTable[1] - pFrameTable[0] - 10; + nDataSize = CelGetFrameSize(p, i) - 10; while (nDataSize) { width = *dst++; nDataSize--; @@ -1592,9 +1600,9 @@ void Cl2ApplyTrans(BYTE *p, BYTE *ttbl, int nCel) */ void Cl2DecodeFrm1(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) { - int nDataStart, nDataSize; BYTE *pRLEBytes; DWORD *pFrameTable; + int nDataStart, nDataSize; /// ASSERT: assert(gpBuffer != NULL); if (!gpBuffer) @@ -1974,9 +1982,9 @@ void Cl2DecodeLightTbl(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int */ void Cl2DecodeFrm4(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) { - int nDataStart, nDataSize; BYTE *pRLEBytes; DWORD *pFrameTable; + int nDataStart, nDataSize; /// ASSERT: assert(gpBuffer != NULL); if (!gpBuffer) diff --git a/Source/engine.h b/Source/engine.h index d4c90f372..4752c72ee 100644 --- a/Source/engine.h +++ b/Source/engine.h @@ -11,6 +11,8 @@ extern int orgseed; extern int SeedCount; extern BOOL gbNotInView; // valid - if x/y are in bounds +__FINLINE BYTE *CelGetFrame(BYTE *pCelBuff, int nCel, int *nDataSize); + void CelDrawDatOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth); void CelDecodeOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth); void CelDecDatOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth); diff --git a/Source/gmenu.cpp b/Source/gmenu.cpp index 3cf46fe18..7422c1a31 100644 --- a/Source/gmenu.cpp +++ b/Source/gmenu.cpp @@ -202,7 +202,8 @@ void gmenu_clear_buffer(int x, int y, int width, int height) { BYTE *i; - for (i = gpBuffer + PitchTbl[y] + x; height; height--) { + i = gpBuffer + PitchTbl[y] + x; + while (height--) { memset(i, 205, width); i -= BUFFER_WIDTH; } diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 977b0b02f..6b4dc66b8 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1374,12 +1374,12 @@ 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 (!(dMonster[tx][ty] | dObject[tx][ty] | dPlayer[tx][ty] | nSolidTable[dPiece[tx][ty]])) { - missile[mi]._miDelFlag = FALSE; + if (!(nSolidTable[dPiece[tx][ty]] | dMonster[tx][ty] | dObject[tx][ty] | dPlayer[tx][ty])) { missile[mi]._mix = tx; missile[mi]._miy = ty; missile[mi]._misx = tx; missile[mi]._misy = ty; + missile[mi]._miDelFlag = FALSE; i = 6; break; } @@ -1779,8 +1779,8 @@ void AddRhino(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i anim = &monster[id].MType->Anims[MA_SPECIAL]; } GetMissileVel(mi, sx, sy, dx, dy, 18); - missile[mi]._miAnimFlags = 0; missile[mi]._mimfnum = midir; + missile[mi]._miAnimFlags = 0; missile[mi]._miAnimData = anim->Data[midir]; missile[mi]._miAnimDelay = anim->Rate; missile[mi]._miAnimLen = anim->Frames; @@ -1926,10 +1926,9 @@ void AddStone(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i } else { missile[mi]._mix = tx; missile[mi]._miy = ty; - missile[mi]._misx = tx; - missile[mi]._misy = ty; - missile[mi]._mirange = 6; - missile[mi]._mirange += missile[mi]._mispllvl; + missile[mi]._misx = missile[mi]._mix; + missile[mi]._misy = missile[mi]._miy; + missile[mi]._mirange = missile[mi]._mispllvl + 6; missile[mi]._mirange += (missile[mi]._mirange * plr[id]._pISplDur) >> 7; if (missile[mi]._mirange > 15) @@ -2344,8 +2343,8 @@ void AddResurrectBeam(int mi, int sx, int sy, int dx, int dy, int midir, char mi { missile[mi]._mix = dx; missile[mi]._miy = dy; - missile[mi]._misx = dx; - missile[mi]._misy = dy; + missile[mi]._misx = missile[mi]._mix; + missile[mi]._misy = missile[mi]._miy; missile[mi]._mixvel = 0; missile[mi]._miyvel = 0; missile[mi]._mirange = misfiledata[36].mAnimLen[0]; @@ -2802,8 +2801,8 @@ void MI_Firewall(int i) } if (missile[i]._mirange == missile[i]._miAnimLen - 1) { SetMissDir(i, 0); - missile[i]._miAnimAdd = -1; missile[i]._miAnimFrame = 13; + missile[i]._miAnimAdd = -1; } CheckMissileCol(i, missile[i]._midam, missile[i]._midam, 1, missile[i]._mix, missile[i]._miy, 1); if (!missile[i]._mirange) { diff --git a/Source/monster.cpp b/Source/monster.cpp index 807d454a7..1d19db969 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -330,34 +330,22 @@ void InitMonsterGFX(int monst) MissileFileFlag |= 2; LoadMissileGFX(MFILE_THINLGHT); } - if (mtype == MT_SUCCUBUS) { - if (MissileFileFlag & 4) - return; - + if (mtype == MT_SUCCUBUS && !(MissileFileFlag & 4)) { MissileFileFlag |= 4; LoadMissileGFX(MFILE_FLARE); LoadMissileGFX(MFILE_FLAREEXP); } - if (mtype == MT_SNOWWICH) { - if (MissileFileFlag & 0x20) - return; - + if (mtype == MT_SNOWWICH && !(MissileFileFlag & 0x20)) { MissileFileFlag |= 0x20; LoadMissileGFX(MFILE_SCUBMISB); LoadMissileGFX(MFILE_SCBSEXPB); } - if (mtype == MT_HLSPWN) { - if (MissileFileFlag & 0x40) - return; - + if (mtype == MT_HLSPWN && !(MissileFileFlag & 0x40)) { MissileFileFlag |= 0x40; LoadMissileGFX(MFILE_SCUBMISD); LoadMissileGFX(MFILE_SCBSEXPD); } - if (mtype == MT_SOLBRNR) { - if (MissileFileFlag & 0x80) - return; - + if (mtype == MT_SOLBRNR && !(MissileFileFlag & 0x80)) { MissileFileFlag |= 0x80; LoadMissileGFX(MFILE_SCUBMISC); LoadMissileGFX(MFILE_SCBSEXPC); diff --git a/Source/multi.cpp b/Source/multi.cpp index c9edfa439..fd327f3bc 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -694,7 +694,7 @@ BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram) ProgramData.versionid = 42; ProgramData.maxplayers = MAX_PLRS; ProgramData.initdata = &sgGameInitInfo; - ProgramData.initdatabytes = 8; + ProgramData.initdatabytes = sizeof(sgGameInitInfo); ProgramData.optcategorybits = 15; ProgramData.lcid = 1033; /* LANG_ENGLISH */ memset(&plrdata, 0, sizeof(plrdata)); diff --git a/Source/spells.cpp b/Source/spells.cpp index 6293f69a0..cd914550f 100644 --- a/Source/spells.cpp +++ b/Source/spells.cpp @@ -4,7 +4,6 @@ DEVILUTION_BEGIN_NAMESPACE int GetManaAmount(int id, int sn) { - int i; // "raw" mana cost int ma; // mana amount // mana adjust @@ -28,12 +27,12 @@ int GetManaAmount(int id, int sn) } if (spelldata[sn].sManaCost == 255) { - i = (BYTE)plr[id]._pMaxManaBase; + ma = ((BYTE)plr[id]._pMaxManaBase - adj); } else { - i = spelldata[sn].sManaCost; + ma = (spelldata[sn].sManaCost - adj); } - ma = (i - adj) << 6; + ma <<= 6; if (sn == SPL_HEAL) { ma = (spelldata[SPL_HEAL].sManaCost + 2 * plr[id]._pLevel - adj) << 6; @@ -140,7 +139,7 @@ void CastSpell(int id, int spl, int sx, int sy, int dx, int dy, int caster, int if (spelldata[spl].sMissiles[0] == MIS_CBOLT) { UseMana(id, SPL_CBOLT); - for (i = 0; i < (spllvl >> 1) + 3; i++) { + for (i = (spllvl >> 1) + 3; i > 0; i--) { AddMissile(sx, sy, dx, dy, dir, MIS_CBOLT, caster, id, 0, spllvl); } } diff --git a/Source/stores.cpp b/Source/stores.cpp index d61882506..274c8b4b1 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -197,16 +197,17 @@ void PrintSString(int x, int y, BOOL cjustflag, char *str, char col, int val) void DrawSLine(int y) { - int xy, yy, width, line; + int xy, yy, width, line, sy; + sy = SStringY[y]; if (stextsize == 1) { xy = SCREENXY(26, 25); - yy = PitchTbl[SStringY[y] + 198] + 26 + 64; + yy = PitchTbl[sy + 198] + 26 + 64; width = 586 / 4; line = BUFFER_WIDTH - 586; } else { xy = SCREENXY(346, 25); - yy = PitchTbl[SStringY[y] + 198] + 346 + 64; + yy = PitchTbl[sy + 198] + 346 + 64; width = 266 / 4; line = BUFFER_WIDTH - 266; } @@ -309,9 +310,9 @@ void StoreAutoPlace() int i, w, h, idx; SetICursor(plr[myplr].HoldItem._iCurs + CURSOR_FIRSTITEM); - done = FALSE; w = icursW28; h = icursH28; + done = FALSE; if (w == 1 && h == 1) { idx = plr[myplr].HoldItem.IDidx; if (plr[myplr].HoldItem._iStatFlag && AllItemsList[idx].iUsable) { @@ -432,6 +433,8 @@ void S_ScrollSBuy(int idx) void PrintStoreItem(ItemStruct *x, int l, char iclr) { char sstr[128]; + char str, dex; + BYTE mag; sstr[0] = '\0'; if (x->_iIdentified) { @@ -471,7 +474,10 @@ void PrintStoreItem(ItemStruct *x, int l, char iclr) } if (!x->_itype) sstr[0] = '\0'; - if (!(x->_iMinStr + x->_iMinMag + x->_iMinDex)) { + str = x->_iMinStr; + dex = x->_iMinDex; + mag = x->_iMinMag; + if (!(str + mag + dex)) { strcat(sstr, "No required attributes"); } else { strcpy(tempstr, "Required:"); @@ -483,10 +489,10 @@ void PrintStoreItem(ItemStruct *x, int l, char iclr) sprintf(tempstr, "%s %i Dex", tempstr, x->_iMinDex); strcat(sstr, tempstr); } - AddSText(40, l, 0, sstr, iclr, 0); + AddSText(40, l++, 0, sstr, iclr, 0); if (x->_iMagical == ITEM_QUALITY_UNIQUE) { if (x->_iIdentified) - AddSText(40, l + 1, 0, "Unique Item", iclr, 0); + AddSText(40, l, 0, "Unique Item", iclr, 0); } } diff --git a/Source/themes.cpp b/Source/themes.cpp index 04f2c0642..fa940f757 100644 --- a/Source/themes.cpp +++ b/Source/themes.cpp @@ -285,41 +285,41 @@ BOOL SpecialThemeFit(int i, int t) case THEME_BLOODFOUNTAIN: if (rv) { rv = TFit_Obj5(i); - if (rv) { - bFountainFlag = FALSE; - } + } + if (rv) { + bFountainFlag = FALSE; } break; case THEME_PURIFYINGFOUNTAIN: if (rv) { rv = TFit_Obj5(i); - if (rv) { - pFountainFlag = FALSE; - } + } + if (rv) { + pFountainFlag = FALSE; } break; case THEME_MURKYFOUNTAIN: if (rv) { rv = TFit_Obj5(i); - if (rv) { - mFountainFlag = FALSE; - } + } + if (rv) { + mFountainFlag = FALSE; } break; case THEME_TEARFOUNTAIN: if (rv) { rv = TFit_Obj5(i); - if (rv) { - tFountainFlag = FALSE; - } + } + if (rv) { + tFountainFlag = FALSE; } break; case THEME_CAULDRON: if (rv) { rv = TFit_Obj5(i); - if (rv) { - cauldronFlag = FALSE; - } + } + if (rv) { + cauldronFlag = FALSE; } break; case THEME_GOATSHRINE: @@ -338,7 +338,7 @@ BOOL SpecialThemeFit(int i, int t) break; case THEME_TREASURE: rv = treasureFlag; - if (treasureFlag) { + if (rv) { treasureFlag = FALSE; } break; diff --git a/Source/towners.cpp b/Source/towners.cpp index 7d07c06c5..2ecc55f94 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -672,11 +672,11 @@ void TalkToTowner(int p, int t) towner[t]._tVar1 = p; quests[QTYPE_BUTCH]._qvar1 = 1; #ifndef SPAWN - if (plr[p]._pClass == 0 && !effect_is_playing(PS_WARR8)) { + if (plr[p]._pClass == PC_WARRIOR && !effect_is_playing(PS_WARR8)) { PlaySFX(PS_WARR8); - } else if (plr[p]._pClass == 1 && !effect_is_playing(PS_ROGUE8)) { + } else if (plr[p]._pClass == PC_ROGUE && !effect_is_playing(PS_ROGUE8)) { PlaySFX(PS_ROGUE8); - } else if (plr[p]._pClass == 2 && !effect_is_playing(PS_MAGE8)) { + } else if (plr[p]._pClass == PC_SORCERER && !effect_is_playing(PS_MAGE8)) { PlaySFX(PS_MAGE8); } #endif diff --git a/Source/trigs.cpp b/Source/trigs.cpp index 709371672..ab53a9574 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -592,15 +592,15 @@ BOOL ForceL4Trig() void Freeupstairs() { - int i, yy, xx, tx, ty; + int i, tx, ty, yy, xx; for (i = 0; i < numtrigs; i++) { tx = trigs[i]._tx; ty = trigs[i]._ty; - for (yy = 0; yy < MAXTRIGGERS; yy++) { - for (xx = 0; xx < MAXTRIGGERS; xx++) { - dFlags[tx - 2 + xx][ty - 2 + yy] |= BFLAG_POPULATED; + for (yy = -2; yy <= 2; yy++) { + for (xx = -2; xx <= 2; xx++) { + dFlags[tx + xx][ty + yy] |= BFLAG_POPULATED; } } } diff --git a/defs.h b/defs.h index e5b6dde4f..6f5a53551 100644 --- a/defs.h +++ b/defs.h @@ -182,3 +182,15 @@ typedef void (*_PVFV)(void); #else #define ALIGN_BY_1 #endif + +#if (_MSC_VER == 1200) +#define __FINLINE __forceinline +#else +#define __FINLINE +#endif + +#ifndef _BIG_ENDIAN_ +#define SwapLE32 +#else +#define SwapLE32(value) (value << 24 | (value & 0xFF00) << 8 | (value & 0xFF0000) >> 8 | value >> 24); +#endif