diff --git a/Source/automap.cpp b/Source/automap.cpp index 9b734e22..2e657b67 100644 --- a/Source/automap.cpp +++ b/Source/automap.cpp @@ -35,10 +35,8 @@ int AmLine4; #define COLOR_BRIGHT PAL8_YELLOW /** color for dim map lines/dots */ #define COLOR_DIM (PAL16_YELLOW + 8) -#ifdef HELLFIRE // color for items on automap #define COLOR_ITEM (PAL8_BLUE + 1) -#endif #define MAPFLAG_TYPE 0x000F /** these are in the second byte */ @@ -391,7 +389,6 @@ static void DrawAutomapTile(int sx, int sy, WORD automap_type) } } -#ifdef HELLFIRE static void DrawAutomapItem(int x, int y, BYTE color) { int x1, y1, x2, y2; @@ -451,7 +448,7 @@ void SearchAutomapItem() for (i = x1; i < x2; i++) { for (j = y1; j < y2; j++) { - if (dItem[i][j] != 0){ + if (dItem[i][j] != 0) { px = i - 2 * AutoMapXOfs - ViewX; py = j - 2 * AutoMapYOfs - ViewY; @@ -470,7 +467,6 @@ void SearchAutomapItem() } } } -#endif /** * @brief Renders an arrow on the automap, centered on and facing the direction of the player. @@ -728,10 +724,8 @@ void DrawAutomap() sy += AmLine32; } DrawAutomapPlr(); -#ifdef HELLFIRE if (AutoMapShowItems) SearchAutomapItem(); -#endif DrawAutomapText(); gpBufEnd = &gpBuffer[BUFFER_WIDTH * (SCREEN_Y + SCREEN_HEIGHT)]; } diff --git a/Source/capture.cpp b/Source/capture.cpp index 296cf3db..7bd15f2a 100644 --- a/Source/capture.cpp +++ b/Source/capture.cpp @@ -35,7 +35,7 @@ static BOOL CaptureHdr(short width, short height, std::ofstream *out) Buffer.NPlanes = 1; Buffer.BytesPerLine = SDL_SwapLE16(width); - out->write(reinterpret_cast(&Buffer), sizeof(Buffer)); + out->write(reinterpret_cast(&Buffer), sizeof(Buffer)); return !out->fail(); } @@ -122,7 +122,8 @@ static bool CapturePix(WORD width, WORD height, WORD stride, BYTE *pixels, std:: pixels += stride; writeSize = pBufferEnd - pBuffer; out->write(reinterpret_cast(pBuffer), writeSize); - if (out->fail()) return false; + if (out->fail()) + return false; } mem_free_dbg(pBuffer); return true; @@ -175,7 +176,8 @@ void CaptureScreen() BOOL success; std::ofstream *out = CaptureFile(&FileName); - if (out == NULL) return; + if (out == NULL) + return; DrawAndBlit(); PaletteGetEntries(256, palette); RedPalette(); diff --git a/Source/control.cpp b/Source/control.cpp index 9426ca8d..a77f03a7 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -524,7 +524,7 @@ void ToggleSpell(int slot) break; } - if (spells & (__int64)1 << (plr[myplr]._pSplHotKey[slot] - 1)) { + if (spells & SPELLBIT(plr[myplr]._pSplHotKey[slot])) { plr[myplr]._pRSpell = plr[myplr]._pSplHotKey[slot]; plr[myplr]._pRSplType = plr[myplr]._pSplTHotKey[slot]; force_redraw = 255; @@ -1391,7 +1391,6 @@ void DrawInfoBox() PrintInfo(); } - #define ADD_PlrStringXY(x, y, width, pszStr, col) MY_PlrStringXY(x, y, width, pszStr, col, 1) void PrintGameStr(int x, int y, const char *str, int color) @@ -1904,10 +1903,10 @@ char GetSBookTrans(int ii, BOOL townok) return RSPLTYPE_SKILL; #endif st = RSPLTYPE_SPELL; - if (plr[myplr]._pISpells & (__int64)1 << (ii - 1)) { + if (plr[myplr]._pISpells & SPELLBIT(ii)) { st = RSPLTYPE_CHARGES; } - if (plr[myplr]._pAblSpells & (__int64)1 << (ii - 1)) { /// BUGFIX: missing (__int64) (fixed) + if (plr[myplr]._pAblSpells & SPELLBIT(ii)) { st = RSPLTYPE_SKILL; } if (st == RSPLTYPE_SPELL) { @@ -1944,7 +1943,7 @@ void DrawSpellBook() yp = 55 + SCREEN_Y; for (i = 1; i < 8; i++) { sn = SpellPages[sbooktab][i - 1]; - if (sn != -1 && spl & (__int64)1 << (sn - 1)) { + if (sn != -1 && spl & SPELLBIT(sn)) { st = GetSBookTrans(sn, TRUE); SetSpellTrans(st); DrawSpellCel(RIGHT_PANEL_X + 11, yp, pSBkIconCels, SpellITbl[sn], 37); @@ -1998,12 +1997,12 @@ void CheckSBook() if (MouseX >= RIGHT_PANEL + 11 && MouseX < RIGHT_PANEL + 48 && MouseY >= 18 && MouseY < 314) { sn = SpellPages[sbooktab][(MouseY - 18) / 43]; spl = plr[myplr]._pMemSpells | plr[myplr]._pISpells | plr[myplr]._pAblSpells; - if (sn != -1 && spl & (__int64)1 << (sn - 1)) { + if (sn != -1 && spl & SPELLBIT(sn)) { st = RSPLTYPE_SPELL; - if (plr[myplr]._pISpells & (__int64)1 << (sn - 1)) { + if (plr[myplr]._pISpells & SPELLBIT(sn)) { st = RSPLTYPE_CHARGES; } - if (plr[myplr]._pAblSpells & (__int64)1 << (sn - 1)) { + if (plr[myplr]._pAblSpells & SPELLBIT(sn)) { st = RSPLTYPE_SKILL; } plr[myplr]._pRSpell = sn; diff --git a/Source/control.h b/Source/control.h index be821302..ff0b128d 100644 --- a/Source/control.h +++ b/Source/control.h @@ -99,7 +99,6 @@ extern const BYTE gbFontTransTbl[256]; extern RECT32 ChrBtnsRect[4]; - #ifdef __cplusplus } #endif diff --git a/Source/cursor.cpp b/Source/cursor.cpp index 60309a81..00b0877a 100644 --- a/Source/cursor.cpp +++ b/Source/cursor.cpp @@ -428,7 +428,7 @@ void CheckCursMove() cursmy = my; } #ifdef HELLFIRE - if (pcursmonst != -1 && monster[pcursmonst]._mFlags & MFLAG_GOLEM && !(monster[pcursmonst]._mFlags & MFLAG_UNUSED)) { + if (pcursmonst != -1 && monster[pcursmonst]._mFlags & MFLAG_GOLEM && !(monster[pcursmonst]._mFlags & MFLAG_BERSERK)) { pcursmonst = -1; } #else @@ -502,7 +502,7 @@ void CheckCursMove() cursmy = my; } #ifdef HELLFIRE - if (pcursmonst != -1 && monster[pcursmonst]._mFlags & MFLAG_GOLEM && !(monster[pcursmonst]._mFlags & MFLAG_UNUSED)) { + if (pcursmonst != -1 && monster[pcursmonst]._mFlags & MFLAG_GOLEM && !(monster[pcursmonst]._mFlags & MFLAG_BERSERK)) { pcursmonst = -1; } #else @@ -678,7 +678,7 @@ void CheckCursMove() cursmy = my; } #ifdef HELLFIRE - if (pcursmonst != -1 && monster[pcursmonst]._mFlags & MFLAG_GOLEM && !(monster[pcursmonst]._mFlags & MFLAG_UNUSED)) { + if (pcursmonst != -1 && monster[pcursmonst]._mFlags & MFLAG_GOLEM && !(monster[pcursmonst]._mFlags & MFLAG_BERSERK)) { pcursmonst = -1; } #else diff --git a/Source/debug.cpp b/Source/debug.cpp index 688051de..60019457 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -54,7 +54,7 @@ void GiveGoldCheat() int i, ni; for (i = 0; i < NUM_INV_GRID_ELEM; i++) { - if (!plr[myplr].InvGrid[i]) { + if (plr[myplr].InvGrid[i] == 0) { ni = plr[myplr]._pNumInv++; SetPlrHandItem(&plr[myplr].InvList[ni], IDI_GOLD); GetPlrHandSeed(&plr[myplr].InvList[ni]); @@ -110,7 +110,7 @@ void MaxSpellsCheat() for (i = 1; i < MAX_SPELLS; i++) { if (GetSpellBookLevel(i) != -1) { - plr[myplr]._pMemSpells |= (__int64)1 << (i - 1); + plr[myplr]._pMemSpells |= SPELLBIT(i); plr[myplr]._pSplLvl[i] = 10; } } @@ -118,7 +118,7 @@ void MaxSpellsCheat() void SetSpellLevelCheat(char spl, int spllvl) { - plr[myplr]._pMemSpells |= (__int64)1 << (spl - 1); + plr[myplr]._pMemSpells |= SPELLBIT(spl); plr[myplr]._pSplLvl[spl] = spllvl; } diff --git a/Source/diablo.cpp b/Source/diablo.cpp index b67e7a63..e3ac7808 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -413,10 +413,11 @@ BOOL StartGame(BOOL bNewGame, BOOL bSinglePlayer) NetClose(); #ifndef HELLFIRE pfile_create_player_description(0, 0); - } while (gbRunGameResult); #else - } while (gbMaxPlayers == 1 || !gbRunGameResult); + if (gbMaxPlayers == 1) + break; #endif + } while (gbRunGameResult); SNetDestroy(); return gbRunGameResult; @@ -475,14 +476,14 @@ static void diablo_splash() #ifndef HELLFIRE if (!gbIsSpawn) #endif - if (getIniBool(APP_NAME, "Intro", true)) { + if (getIniBool(APP_NAME, "Intro", true)) { #ifndef HELLFIRE - play_movie("gendata\\diablo1.smk", TRUE); + play_movie("gendata\\diablo1.smk", TRUE); #else play_movie("gendata\\Hellfire.smk", TRUE); #endif - setIniValue(APP_NAME, "Intro", "0"); - } + setIniValue(APP_NAME, "Intro", "0"); + } UiTitleDialog(); } @@ -623,7 +624,7 @@ BOOL TryIconCurs() if (pcursinvitem != -1) DoOil(myplr, pcursinvitem); else - SetCursor_(CURSOR_HAND); + NewCursor(CURSOR_HAND); return TRUE; } @@ -715,7 +716,6 @@ static BOOL LeftMouseDown(int wParam) NewCursor(CURSOR_HAND); } - return FALSE; } @@ -1060,7 +1060,7 @@ static void PressKey(int vkey) /** * @internal `return` must be used instead of `break` to be bin exact as C++ */ -static void PressChar(int vkey) +static void PressChar(WPARAM vkey) { if (gmenu_is_active() || control_talk_last_key(vkey) || sgnTimeoutCurs != CURSOR_NONE || deathflag) { return; @@ -1465,7 +1465,7 @@ void GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) void LoadLvlGFX() { - assert(! pDungeonCels); + assert(!pDungeonCels); switch (leveltype) { case DTYPE_TOWN: @@ -1557,7 +1557,7 @@ void CreateLevel(int lvldir) InitL1Triggers(); Freeupstairs(); #ifdef HELLFIRE - if(currlevel < 21) { + if (currlevel < 21) { LoadRndLvlPal(1); } else { LoadRndLvlPal(5); @@ -1577,7 +1577,7 @@ void CreateLevel(int lvldir) InitL3Triggers(); Freeupstairs(); #ifdef HELLFIRE - if(currlevel < 17) { + if (currlevel < 17) { LoadRndLvlPal(3); } else { LoadRndLvlPal(6); @@ -1700,7 +1700,7 @@ void LoadGameLevel(BOOL firstflag, int lvldir) InitObjects(); InitItems(); #ifdef HELLFIRE - if ( currlevel < 17 ) + if (currlevel < 17) #endif CreateThemeRooms(); IncProgress(); @@ -1816,21 +1816,18 @@ void LoadGameLevel(BOOL firstflag, int lvldir) } #ifdef HELLFIRE - if ( currlevel >= 21 ) - { - if ( currlevel == 21 ) - { + if (currlevel >= 21) { + if (currlevel == 21) { items_427ABA(CornerStone.x, CornerStone.y); } - if ( quests[Q_NAKRUL]._qactive == QUEST_DONE && currlevel == 24 ) - { + if (quests[Q_NAKRUL]._qactive == QUEST_DONE && currlevel == 24) { objects_454BA8(); } } #endif #ifdef HELLFIRE - if ( currlevel >= 17 ) + if (currlevel >= 17) music_start(currlevel > 20 ? TMUSIC_L5 : TMUSIC_L6); else music_start(leveltype); @@ -1933,10 +1930,10 @@ void diablo_color_cyc_logic() if (leveltype == DTYPE_HELL) { lighting_color_cycling(); #ifdef HELLFIRE - } else if (currlevel >= 21) { - palette_update_crypt(); - } else if (currlevel >= 17) { - palette_update_hive(); + } else if (currlevel >= 21) { + palette_update_crypt(); + } else if (currlevel >= 17) { + palette_update_hive(); #endif } else if (leveltype == DTYPE_CAVES) { palette_update_caves(); diff --git a/Source/drlg_l1.cpp b/Source/drlg_l1.cpp index a272fb48..52dc9578 100644 --- a/Source/drlg_l1.cpp +++ b/Source/drlg_l1.cpp @@ -27,11 +27,11 @@ int UberLeverCol; int IsUberLeverActivated; int UberDiabloMonsterIndex; /** Specifies whether to generate a vertical room at position 1 in the Cathedral. */ -int VR1; +BOOL VR1; /** Specifies whether to generate a vertical room at position 2 in the Cathedral. */ -int VR2; +BOOL VR2; /** Specifies whether to generate a vertical room at position 3 in the Cathedral. */ -int VR3; +BOOL VR3; /** Contains the contents of the single player quest DUN file. */ BYTE *L5pSetPiece; @@ -566,288 +566,285 @@ void drlg_l1_crypt_lavafloor() { int i, j; - for ( j = 1; j < 40; j++ ) - { - for ( i = 1; i < 40; i++ ) - { - switch ( dungeon[i][j] ) - { + for (j = 1; j < 40; j++) { + for (i = 1; i < 40; i++) { + switch (dungeon[i][j]) { case 5: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 7: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 8: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 9: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 10: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 11: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 12: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 14: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 15: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 17: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 95: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 96: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 208; break; case 116: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 118: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 119: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 120: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 121: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 122: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 211; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 212; break; case 123: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 125: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 126: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 128: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 133: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 135: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 136: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 137: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 213; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 214; - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 138: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 139: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 215; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 216; break; case 140: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 217; break; case 142: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 143: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 213; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 214; break; case 145: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 213; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 214; break; case 150: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 217; break; case 152: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 153: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 154: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 155: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 205; break; case 156: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 157: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 217; break; case 159: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 160: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 206; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 207; break; case 162: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 209; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 210; break; case 167: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 209; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 210; break; case 187: - if ( dungeon[i][j - 1] == 13 ) + if (dungeon[i][j - 1] == 13) dungeon[i][j - 1] = 208; break; case 185: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 186: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 203; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 204; break; case 192: - if ( dungeon[i - 1][j] == 13 ) + if (dungeon[i - 1][j] == 13) dungeon[i - 1][j] = 209; - if ( dungeon[i - 1][j - 1] == 13 ) + if (dungeon[i - 1][j - 1] == 13) dungeon[i - 1][j - 1] = 210; break; } @@ -1092,8 +1089,7 @@ static void DRLG_L1Pass3() v3 = SDL_SwapLE16(*(MegaTiles + 2)) + 1; v4 = SDL_SwapLE16(*(MegaTiles + 3)) + 1; - for (j = 0; j < MAXDUNY; j += 2) - { + for (j = 0; j < MAXDUNY; j += 2) { for (i = 0; i < MAXDUNX; i += 2) { dPiece[i][j] = v1; dPiece[i + 1][j] = v2; @@ -1260,7 +1256,7 @@ void LoadL1Dungeon(const char *sFileName, int vx, int vy) #ifdef HELLFIRE if (currlevel < 17) #endif - DRLG_InitL1Vals(); + DRLG_InitL1Vals(); SetMapMonsters(pLevelMap, 0, 0); SetMapObjects(pLevelMap, 0, 0); mem_free_dbg(pLevelMap); @@ -2019,7 +2015,7 @@ static void DRLG_L5Subs() for (y = 0; y < DMAXY; y++) { for (x = 0; x < DMAXX; x++) { - if (!random_(0, 4)) { + if (random_(0, 4) == 0) { BYTE c = L5BTYPES[dungeon[x][y]]; if (c && !L5dflags[x][y]) { @@ -2135,13 +2131,13 @@ static void L5FillChambers() if (currlevel == 24) { if (VR1 || VR2 || VR3) { c = 1; - if (!VR1 && VR2 && VR3 && random_(0, 2)) + if (!VR1 && VR2 && VR3 && random_(0, 2) != 0) c = 2; - if (VR1 && VR2 && !VR3 && random_(0, 2)) + if (VR1 && VR2 && !VR3 && random_(0, 2) != 0) c = 0; if (VR1 && !VR2 && VR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2163,13 +2159,13 @@ static void L5FillChambers() } } else { c = 1; - if (!HR1 && HR2 && HR3 && random_(0, 2)) + if (!HR1 && HR2 && HR3 && random_(0, 2) != 0) c = 2; - if (HR1 && HR2 && !HR3 && random_(0, 2)) + if (HR1 && HR2 && !HR3 && random_(0, 2) != 0) c = 0; if (HR1 && !HR2 && HR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2194,13 +2190,13 @@ static void L5FillChambers() if (currlevel == 21) { if (VR1 || VR2 || VR3) { c = 1; - if (!VR1 && VR2 && VR3 && random_(0, 2)) + if (!VR1 && VR2 && VR3 && random_(0, 2) != 0) c = 2; - if (VR1 && VR2 && !VR3 && random_(0, 2)) + if (VR1 && VR2 && !VR3 && random_(0, 2) != 0) c = 0; if (VR1 && !VR2 && VR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2254,13 +2250,13 @@ static void L5FillChambers() if (L5setloadflag) { if (VR1 || VR2 || VR3) { c = 1; - if (!VR1 && VR2 && VR3 && random_(0, 2)) + if (!VR1 && VR2 && VR3 && random_(0, 2) != 0) c = 2; - if (VR1 && VR2 && !VR3 && random_(0, 2)) + if (VR1 && VR2 && !VR3 && random_(0, 2) != 0) c = 0; if (VR1 && !VR2 && VR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2282,13 +2278,13 @@ static void L5FillChambers() } } else { c = 1; - if (!HR1 && HR2 && HR3 && random_(0, 2)) + if (!HR1 && HR2 && HR3 && random_(0, 2) != 0) c = 2; - if (HR1 && HR2 && !HR3 && random_(0, 2)) + if (HR1 && HR2 && !HR3 && random_(0, 2) != 0) c = 0; if (HR1 && !HR2 && HR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2500,15 +2496,15 @@ static void DRLG_L5DirtFix() } else { for (j = 0; j < DMAXY - 1; j++) { for (i = 0; i < DMAXX - 1; i++) { - if ( dungeon[i][j] == 19 ) + if (dungeon[i][j] == 19) dungeon[i][j] = 83; - if ( dungeon[i][j] == 21 ) + if (dungeon[i][j] == 21) dungeon[i][j] = 85; - if ( dungeon[i][j] == 23 ) + if (dungeon[i][j] == 23) dungeon[i][j] = 87; - if ( dungeon[i][j] == 24 ) + if (dungeon[i][j] == 24) dungeon[i][j] = 88; - if ( dungeon[i][j] == 18 ) + if (dungeon[i][j] == 18) dungeon[i][j] = 82; } } @@ -2618,82 +2614,64 @@ static void DRLG_L5(int entry) } #ifdef HELLFIRE } else if (entry == 0) { - if ( currlevel < 21 ) - { - if ( DRLG_PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0 ) + if (currlevel < 21) { + if (DRLG_PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0) doneflag = 0; - if ( DRLG_PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0 ) + if (DRLG_PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0) doneflag = 0; - } - else if ( currlevel == 21 ) - { - if ( DRLG_PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, 0, -1, 6) < 0 ) + } else if (currlevel == 21) { + if (DRLG_PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, 0, -1, 6) < 0) doneflag = 0; - if ( DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0 ) + if (DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0) doneflag = 0; ViewY++; - } - else - { - if ( DRLG_PlaceMiniSet(L5STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0 ) + } else { + if (DRLG_PlaceMiniSet(L5STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0) doneflag = 0; - if ( currlevel != 24 ) - { - if ( DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0 ) + if (currlevel != 24) { + if (DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0) doneflag = 0; } ViewY++; } - } else if ( entry == 1 ) { - if ( currlevel < 21 ) - { - if ( DRLG_PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, 0, -1, 0) < 0 ) + } else if (entry == 1) { + if (currlevel < 21) { + if (DRLG_PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, 0, -1, 0) < 0) doneflag = 0; - if ( DRLG_PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, 1, -1, 1) < 0 ) + if (DRLG_PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, 1, -1, 1) < 0) doneflag = 0; ViewY--; - } - else if ( currlevel == 21 ) - { - if ( DRLG_PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, 0, -1, 6) < 0 ) + } else if (currlevel == 21) { + if (DRLG_PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, 0, -1, 6) < 0) doneflag = 0; - if ( DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 1, -1, 1) < 0 ) + if (DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 1, -1, 1) < 0) doneflag = 0; ViewY += 3; - } - else - { - if ( DRLG_PlaceMiniSet(L5STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0 ) + } else { + if (DRLG_PlaceMiniSet(L5STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0) doneflag = 0; - if ( currlevel != 24 ) - { - if ( DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 1, -1, 1) < 0 ) + if (currlevel != 24) { + if (DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 1, -1, 1) < 0) doneflag = 0; } ViewY += 3; } } else { - if ( currlevel < 21 ) - { - if ( DRLG_PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, 0, -1, 0) < 0 ) + if (currlevel < 21) { + if (DRLG_PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, 0, -1, 0) < 0) doneflag = 0; - if ( DRLG_PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0 ) + if (DRLG_PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0) doneflag = 0; - } - else if ( currlevel == 21 ) - { - if ( DRLG_PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, 1, -1, 6) < 0 ) + } else if (currlevel == 21) { + if (DRLG_PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, 1, -1, 6) < 0) doneflag = 0; - if ( DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0 ) + if (DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0) doneflag = 0; - } - else - { - if ( DRLG_PlaceMiniSet(L5STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0 ) + } else { + if (DRLG_PlaceMiniSet(L5STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0) doneflag = 0; - if ( currlevel != 24 ) - { - if ( DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0 ) + if (currlevel != 24) { + if (DRLG_PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, 0, -1, 1) < 0) doneflag = 0; } } @@ -2736,12 +2714,9 @@ static void DRLG_L5(int entry) } #ifdef HELLFIRE - if ( currlevel < 21 ) - { + if (currlevel < 21) { DRLG_L5Subs(); - } - else - { + } else { drlg_l1_crypt_pattern1(10); drlg_l1_crypt_rndset(byte_48A1B4, 95); drlg_l1_crypt_rndset(byte_48A1B8, 95); @@ -2749,8 +2724,7 @@ static void DRLG_L5(int entry) drlg_l1_crypt_rndset(byte_48A1C8, 100); drlg_l1_crypt_rndset(byte_48A1E0, 60); drlg_l1_crypt_lavafloor(); - switch ( currlevel ) - { + switch (currlevel) { case 21: drlg_l1_crypt_pattern2(30); drlg_l1_crypt_pattern3(15); @@ -2848,24 +2822,20 @@ void CreateL5Dungeon(DWORD rseed, int entry) DRLG_FreeL1SP(); #ifdef HELLFIRE - if ( currlevel < 17 ) + if (currlevel < 17) DRLG_InitL1Vals(); else DRLG_InitL5Vals(); DRLG_SetPC(); - for ( j = dminy; j < dmaxy; j++ ) - { - for ( i = dminx; i < dmaxx; i++ ) - { - if ( dPiece[i][j] == 290 ) - { + for (j = dminy; j < dmaxy; j++) { + for (i = dminx; i < dmaxx; i++) { + if (dPiece[i][j] == 290) { UberRow = i; UberCol = j; } - if ( dPiece[i][j] == 317 ) - { + if (dPiece[i][j] == 317) { CornerStone.x = i; CornerStone.y = j; } diff --git a/Source/drlg_l2.cpp b/Source/drlg_l2.cpp index 9f046f0d..9bc4bf99 100644 --- a/Source/drlg_l2.cpp +++ b/Source/drlg_l2.cpp @@ -61,7 +61,7 @@ BYTE VARCH2[] = { 47, 44, 0, 0, // clang-format on - }; +}; /** Miniset: Arch vertical. */ BYTE VARCH3[] = { // clang-format off @@ -358,6 +358,7 @@ BYTE VARCH21[] = { }; /** Miniset: Arch vertical - open wall. */ BYTE VARCH22[] = { + // clang-format off 2, 3, // width, height 2, 7, // search diff --git a/Source/drlg_l3.cpp b/Source/drlg_l3.cpp index 8db709ec..025d0a8d 100644 --- a/Source/drlg_l3.cpp +++ b/Source/drlg_l3.cpp @@ -506,7 +506,7 @@ const BYTE L3XTRA5[] = { /** Miniset: Anvil of Fury island. */ const BYTE L3ANVIL[] = { - // clang-format on + // clang-format off 11, 11, // width, height 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // search @@ -544,7 +544,7 @@ const BYTE byte_48A780[] = { 1, 1, 7, 30 }; const BYTE byte_48A784[] = { 1, 1, 7, 31 }; const BYTE byte_48A788[] = { 1, 1, 7, 32 }; const BYTE byte_48A790[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -557,7 +557,7 @@ const BYTE byte_48A790[] = { // clang-format on }; const BYTE byte_48A7A8[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -588,7 +588,7 @@ const BYTE byte_48A7F8[] = { 1, 1, 10, 48 }; const BYTE byte_48A7FC[] = { 1, 1, 11, 49 }; const BYTE byte_48A800[] = { 1, 1, 11, 50 }; const BYTE byte_48A808[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -601,7 +601,7 @@ const BYTE byte_48A808[] = { // clang-format on }; const BYTE byte_48A820[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -614,7 +614,7 @@ const BYTE byte_48A820[] = { // clang-format on }; const BYTE byte_48A838[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -627,7 +627,7 @@ const BYTE byte_48A838[] = { // clang-format on }; const BYTE byte_48A850[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -640,7 +640,7 @@ const BYTE byte_48A850[] = { // clang-format on }; const BYTE byte_48A868[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -653,7 +653,7 @@ const BYTE byte_48A868[] = { // clang-format on }; const BYTE byte_48A880[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -666,7 +666,7 @@ const BYTE byte_48A880[] = { // clang-format on }; const BYTE byte_48A898[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -679,7 +679,7 @@ const BYTE byte_48A898[] = { // clang-format on }; const BYTE byte_48A8B0[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -692,7 +692,7 @@ const BYTE byte_48A8B0[] = { // clang-format on }; const BYTE byte_48A8C8[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -705,7 +705,7 @@ const BYTE byte_48A8C8[] = { // clang-format on }; const BYTE byte_48A8E0[] = { - // clang-format on + // clang-format off 3, 3, // width, height 7, 7, 7, // search @@ -718,7 +718,7 @@ const BYTE byte_48A8E0[] = { // clang-format on }; const BYTE L6ISLE1[] = { - // clang-format on + // clang-format off 2, 3, // width, height 5, 14, // search @@ -731,7 +731,7 @@ const BYTE L6ISLE1[] = { // clang-format on }; const BYTE L6ISLE2[] = { - // clang-format on + // clang-format off 3, 2, // width, height 5, 2, 14, // search @@ -742,7 +742,7 @@ const BYTE L6ISLE2[] = { // clang-format on }; const BYTE L6ISLE3[] = { - // clang-format on + // clang-format off 2, 3, // width, height 5, 14, // search @@ -755,7 +755,7 @@ const BYTE L6ISLE3[] = { // clang-format on }; const BYTE L6ISLE4[] = { - // clang-format on + // clang-format off 3, 2, // width, height 5, 2, 14, // search @@ -766,7 +766,7 @@ const BYTE L6ISLE4[] = { // clang-format on }; const BYTE L6ISLE5[] = { - // clang-format on + // clang-format off 2, 2, // width, height 5, 14, // search @@ -777,7 +777,7 @@ const BYTE L6ISLE5[] = { // clang-format on }; const BYTE byte_48A948[] = { - // clang-format on + // clang-format off 4, 4, // width, height 7, 7, 7, 7, // search @@ -792,7 +792,7 @@ const BYTE byte_48A948[] = { // clang-format on }; const BYTE byte_48A970[] = { - // clang-format on + // clang-format off 4, 4, // width, height 7, 7, 7, 7, // search @@ -807,7 +807,7 @@ const BYTE byte_48A970[] = { // clang-format on }; const BYTE byte_48A998[] = { - // clang-format on + // clang-format off 4, 5, // width, height 7, 7, 7, 7, // search @@ -824,7 +824,7 @@ const BYTE byte_48A998[] = { // clang-format on }; const BYTE byte_48A9C8[] = { - // clang-format on + // clang-format off 4, 5, // width, height 7, 7, 7, 7, // search @@ -903,7 +903,7 @@ static BOOL DRLG_L3FillRoom(int x1, int y1, int x2, int y2) static void DRLG_L3CreateBlock(int x, int y, int obs, int dir) { int blksizex, blksizey, x1, y1, x2, y2; - BOOL contflag; + int contflag; blksizex = random_(0, 2) + 3; blksizey = random_(0, 2) + 3; @@ -967,16 +967,16 @@ static void DRLG_L3CreateBlock(int x, int y, int obs, int dir) if (DRLG_L3FillRoom(x1, y1, x2, y2) == TRUE) { contflag = random_(0, 4); - if (contflag && dir != 2) { + if (contflag != 0 && dir != 2) { DRLG_L3CreateBlock(x1, y1, blksizey, 0); } - if (contflag && dir != 3) { + if (contflag != 0 && dir != 3) { DRLG_L3CreateBlock(x2, y1, blksizex, 1); } - if (contflag && dir != 0) { + if (contflag != 0 && dir != 0) { DRLG_L3CreateBlock(x1, y2, blksizey, 2); } - if (contflag && dir != 1) { + if (contflag != 0 && dir != 1) { DRLG_L3CreateBlock(x1, y1, blksizex, 3); } } @@ -2365,7 +2365,7 @@ static void DRLG_L3(int entry) genok = DRLG_L3PlaceMiniSet(L3UP, 1, 1, -1, -1, TRUE, 0); #ifdef HELLFIRE } else { - if ( currlevel != 17 ) + if (currlevel != 17) genok = DRLG_L3PlaceMiniSet(L6UP, 1, 1, -1, -1, TRUE, 0); else genok = DRLG_L3PlaceMiniSet(L6HOLDWARP, 1, 1, -1, -1, TRUE, 6); @@ -2378,7 +2378,7 @@ static void DRLG_L3(int entry) genok = DRLG_L3PlaceMiniSet(L3DOWN, 1, 1, -1, -1, FALSE, 1); #ifdef HELLFIRE } else { - if ( currlevel != 20 ) + if (currlevel != 20) genok = DRLG_L3PlaceMiniSet(L6DOWN, 1, 1, -1, -1, FALSE, 1); } #endif @@ -2393,7 +2393,7 @@ static void DRLG_L3(int entry) genok = DRLG_L3PlaceMiniSet(L3UP, 1, 1, -1, -1, FALSE, 0); #ifdef HELLFIRE } else { - if ( currlevel != 17 ) + if (currlevel != 17) genok = DRLG_L3PlaceMiniSet(L6UP, 1, 1, -1, -1, FALSE, 0); else genok = DRLG_L3PlaceMiniSet(L6HOLDWARP, 1, 1, -1, -1, FALSE, 6); @@ -2408,8 +2408,7 @@ static void DRLG_L3(int entry) ViewY -= 2; #ifdef HELLFIRE } else { - if ( currlevel != 20 ) - { + if (currlevel != 20) { genok = DRLG_L3PlaceMiniSet(L6DOWN, 1, 1, -1, -1, TRUE, 1); ViewX += 2; ViewY -= 2; @@ -2427,7 +2426,7 @@ static void DRLG_L3(int entry) genok = DRLG_L3PlaceMiniSet(L3UP, 1, 1, -1, -1, FALSE, 0); #ifdef HELLFIRE } else { - if ( currlevel != 17 ) + if (currlevel != 17) genok = DRLG_L3PlaceMiniSet(L6UP, 1, 1, -1, -1, FALSE, 0); else genok = DRLG_L3PlaceMiniSet(L6HOLDWARP, 1, 1, -1, -1, TRUE, 6); @@ -2440,7 +2439,7 @@ static void DRLG_L3(int entry) genok = DRLG_L3PlaceMiniSet(L3DOWN, 1, 1, -1, -1, FALSE, 1); #ifdef HELLFIRE } else { - if ( currlevel != 20 ) + if (currlevel != 20) genok = DRLG_L3PlaceMiniSet(L6DOWN, 1, 1, -1, -1, FALSE, 1); } #endif @@ -2463,7 +2462,7 @@ static void DRLG_L3(int entry) lavapool += drlg_l3_hive_rnd_piece(byte_48A9C8, 40); lavapool += drlg_l3_hive_rnd_piece(byte_48A948, 50); lavapool += drlg_l3_hive_rnd_piece(byte_48A970, 60); - if ( lavapool < 3 ) + if (lavapool < 3) lavapool = FALSE; } #endif @@ -2630,8 +2629,7 @@ static void DRLG_L3Pass3() v3 = SDL_SwapLE16(*(MegaTiles + 2)) + 1; v4 = SDL_SwapLE16(*(MegaTiles + 3)) + 1; - for (j = 0; j < MAXDUNY; j += 2) - { + for (j = 0; j < MAXDUNY; j += 2) { for (i = 0; i < MAXDUNX; i += 2) { dPiece[i][j] = v1; dPiece[i + 1][j] = v2; diff --git a/Source/drlg_l4.cpp b/Source/drlg_l4.cpp index 184e17e5..c201b9ea 100644 --- a/Source/drlg_l4.cpp +++ b/Source/drlg_l4.cpp @@ -242,9 +242,9 @@ static void L4makeDmt() for (j = 0, dmty = 1; dmty <= 77; j++, dmty += 2) { for (i = 0, dmtx = 1; dmtx <= 77; i++, dmtx += 2) { val = 8 * L4dungeon[dmtx + 1][dmty + 1] - + 4 * L4dungeon[dmtx][dmty + 1] - + 2 * L4dungeon[dmtx + 1][dmty] - + L4dungeon[dmtx][dmty]; + + 4 * L4dungeon[dmtx][dmty + 1] + + 2 * L4dungeon[dmtx + 1][dmty] + + L4dungeon[dmtx][dmty]; idx = L4ConvTbl[val]; dungeon[i][j] = idx; } @@ -1819,7 +1819,6 @@ void LoadL4Dungeon(char *sFileName, int vx, int vy) InitL4Dungeon(); pLevelMap = LoadFileInMem(sFileName, NULL); - lm = pLevelMap; rw = *lm; lm += 2; diff --git a/Source/effects.h b/Source/effects.h index 8e654029..a049df3e 100644 --- a/Source/effects.h +++ b/Source/effects.h @@ -24,14 +24,12 @@ void PlayEffect(int i, int mode); void PlaySFX(int psfx); void PlaySfxLoc(int psfx, int x, int y); void sound_stop(); -void sfx_stop(); void sound_update(); void effects_cleanup_sfx(); void sound_init(); void ui_sound_init(); void effects_play_sound(const char *snd_file); - #ifdef __cplusplus } #endif diff --git a/Source/encrypt.cpp b/Source/encrypt.cpp index 1c7fcd8b..2abfae17 100644 --- a/Source/encrypt.cpp +++ b/Source/encrypt.cpp @@ -21,8 +21,8 @@ void Decrypt(DWORD *castBlock, DWORD size, DWORD key) t ^= seed + key; *castBlock = t; seed += t + (seed << 5) + 3; - key = ((~key << 0x15) + 0x11111111) | (key >> 0x0B); castBlock++; + key = (((key << 0x15) ^ 0xFFE00000) + 0x11111111) | (key >> 0x0B); } } @@ -36,9 +36,9 @@ void Encrypt(DWORD *castBlock, DWORD size, DWORD key) seed += hashtable[4][(key & 0xFF)]; t ^= seed + key; *castBlock = SwapLE32(t); - seed += ch + (seed << 5) + 3; - key = ((~key << 0x15) + 0x11111111) | (key >> 0x0B); castBlock++; + seed += ch + (seed << 5) + 3; + key = ((key << 0x15) ^ 0xFFE00000) + 0x11111111 | (key >> 0x0B); } } diff --git a/Source/engine.cpp b/Source/engine.cpp index f8269268..eef257dd 100644 --- a/Source/engine.cpp +++ b/Source/engine.cpp @@ -887,10 +887,9 @@ void Cl2ApplyTrans(BYTE *p, BYTE *ttbl, int nCel) } else { nDataSize -= width; assert(nDataSize >= 0); - while (width) { + while (width--) { *dst = ttbl[*dst]; dst++; - width--; } } } diff --git a/Source/engine.h b/Source/engine.h index 80ee5f19..ef94ac81 100644 --- a/Source/engine.h +++ b/Source/engine.h @@ -82,7 +82,6 @@ void Cl2DrawLightTbl(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, char void Cl2DrawLight(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth); void PlayInGameMovie(const char *pszMovie); - #ifdef __cplusplus } #endif diff --git a/Source/gamemenu.cpp b/Source/gamemenu.cpp index 1354bc06..13a929e8 100644 --- a/Source/gamemenu.cpp +++ b/Source/gamemenu.cpp @@ -15,7 +15,7 @@ BOOL jogging_opt = TRUE; /** Contains the game menu items of the single player menu. */ TMenuItem sgSingleMenu[] = { -// clang-format off + // clang-format off // dwFlags, pszStr, fnMenu { GMENU_ENABLED, "Save Game", &gamemenu_save_game }, { GMENU_ENABLED, "Options", &gamemenu_options }, @@ -27,11 +27,11 @@ TMenuItem sgSingleMenu[] = { { GMENU_ENABLED, "Quit Hellfire", &gamemenu_quit_game }, #endif { GMENU_ENABLED, NULL, NULL } -// clang-format on + // clang-format on }; /** Contains the game menu items of the multi player menu. */ TMenuItem sgMultiMenu[] = { -// clang-format off + // clang-format off // dwFlags, pszStr, fnMenu { GMENU_ENABLED, "Options", &gamemenu_options }, { GMENU_ENABLED, "New Game", &gamemenu_new_game }, @@ -42,10 +42,10 @@ TMenuItem sgMultiMenu[] = { { GMENU_ENABLED, "Quit Hellfire", &gamemenu_quit_game }, #endif { GMENU_ENABLED, NULL, NULL }, -// clang-format on + // clang-format on }; TMenuItem sgOptionsMenu[] = { -// clang-format off + // clang-format off // dwFlags, pszStr, fnMenu { GMENU_ENABLED | GMENU_SLIDER, NULL, &gamemenu_music_volume }, { GMENU_ENABLED | GMENU_SLIDER, NULL, &gamemenu_sound_volume }, @@ -58,7 +58,7 @@ TMenuItem sgOptionsMenu[] = { #endif { GMENU_ENABLED , "Previous Menu", &gamemenu_previous }, { GMENU_ENABLED , NULL, NULL }, -// clang-format on + // clang-format on }; /** Specifies the menu names for music enabled and disabled. */ const char *const music_toggle_names[] = { @@ -325,17 +325,17 @@ void gamemenu_music_volume(BOOL bActivate) #else music_start(leveltype); #endif - } - } else { - volume = gamemenu_slider_music_sound(&sgOptionsMenu[0]); - sound_get_or_set_music_volume(volume); - if (volume == VOLUME_MIN) { - if (gbMusicOn) { - gbMusicOn = FALSE; - music_stop(); - } - } else if (!gbMusicOn) { - gbMusicOn = TRUE; + } + } else { + volume = gamemenu_slider_music_sound(&sgOptionsMenu[0]); + sound_get_or_set_music_volume(volume); + if (volume == VOLUME_MIN) { + if (gbMusicOn) { + gbMusicOn = FALSE; + music_stop(); + } + } else if (!gbMusicOn) { + gbMusicOn = TRUE; #ifdef HELLFIRE int lt; if (currlevel >= 17) { @@ -349,9 +349,9 @@ void gamemenu_music_volume(BOOL bActivate) #else music_start(leveltype); #endif - } - } - gamemenu_get_music(); + } + } + gamemenu_get_music(); } void gamemenu_sound_volume(BOOL bActivate) diff --git a/Source/gendung.cpp b/Source/gendung.cpp index 9e804a07..7640991d 100644 --- a/Source/gendung.cpp +++ b/Source/gendung.cpp @@ -178,7 +178,7 @@ void FillSolidBlockTbls() break; case DTYPE_CATHEDRAL: #ifdef HELLFIRE - if ( currlevel < 17 ) + if (currlevel < 17) pSBFile = LoadFileInMem("Levels\\L1Data\\L1.SOL", &dwTiles); else pSBFile = LoadFileInMem("NLevels\\L5Data\\L5.SOL", &dwTiles); @@ -191,7 +191,7 @@ void FillSolidBlockTbls() break; case DTYPE_CAVES: #ifdef HELLFIRE - if ( currlevel < 17 ) + if (currlevel < 17) pSBFile = LoadFileInMem("Levels\\L3Data\\L3.SOL", &dwTiles); else pSBFile = LoadFileInMem("NLevels\\L6Data\\L6.SOL", &dwTiles); diff --git a/Source/gmenu.cpp b/Source/gmenu.cpp index 53e8cd94..6a7c6d58 100644 --- a/Source/gmenu.cpp +++ b/Source/gmenu.cpp @@ -236,7 +236,7 @@ void gmenu_draw() #ifdef HELLFIRE ticks = SDL_GetTicks(); if ((int)(ticks - LogoAnim_tick) > 25) { - LogoAnim_frame++; + LogoAnim_frame++; if (LogoAnim_frame > 16) LogoAnim_frame = 1; LogoAnim_tick = ticks; @@ -254,28 +254,30 @@ void gmenu_draw() y += 45; } } - } + } } static void gmenu_left_right(BOOL isRight) { - int step; + int step, steps; - if (sgpCurrItem->dwFlags & GMENU_SLIDER) { - step = sgpCurrItem->dwFlags & 0xFFF; - if (isRight) { - if (step == (int)(sgpCurrItem->dwFlags & 0xFFF000) >> 12) - return; - step++; - } else { - if (!step) - return; - step--; - } - sgpCurrItem->dwFlags &= 0xFFFFF000; - sgpCurrItem->dwFlags |= step; - sgpCurrItem->fnMenu(FALSE); + if (!(sgpCurrItem->dwFlags & GMENU_SLIDER)) + return; + + step = sgpCurrItem->dwFlags & 0xFFF; + steps = (int)(sgpCurrItem->dwFlags & 0xFFF000) >> 12; + if (isRight) { + if (step == steps) + return; + step++; + } else { + if (step == 0) + return; + step--; } + sgpCurrItem->dwFlags &= 0xFFFFF000; + sgpCurrItem->dwFlags |= step; + sgpCurrItem->fnMenu(FALSE); } BOOL gmenu_presskeys(int vkey) diff --git a/Source/init.cpp b/Source/init.cpp index 00d6a65e..227e3345 100644 --- a/Source/init.cpp +++ b/Source/init.cpp @@ -42,7 +42,7 @@ namespace { HANDLE init_test_access(const char *mpq_name, const char *reg_loc, int dwPriority, int fs) { HANDLE archive; - const std::string *paths[2] = {&GetBasePath(), &GetPrefPath()}; + const std::string *paths[2] = { &GetBasePath(), &GetPrefPath() }; std::string mpq_abspath; DWORD mpq_flags = 0; #if !defined(__SWITCH__) && !defined(__AMIGA__) diff --git a/Source/inv.cpp b/Source/inv.cpp index bdf51e5f..b59f8da1 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -194,7 +194,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelBlitOutline(color, RIGHT_PANEL_X + 133, 59 + SCREEN_Y, pCursCels, frame, frame_width); + CelBlitOutline(color, RIGHT_PANEL_X + 133, 59 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelBlitOutline(color, RIGHT_PANEL_X + 133, 59 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -216,7 +216,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelDrawLightRed(RIGHT_PANEL_X + 133, 59 + SCREEN_Y, pCursCels, frame, frame_width, 1); + CelDrawLightRed(RIGHT_PANEL_X + 133, 59 + SCREEN_Y, pCursCels, frame, frame_width, 1); #ifdef HELLFIRE } else { CelDrawLightRed(RIGHT_PANEL_X + 133, 59 + SCREEN_Y, pCursCels2, frame - 179, frame_width, 1); @@ -242,7 +242,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelBlitOutline(color, RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels, frame, frame_width); + CelBlitOutline(color, RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelBlitOutline(color, RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -254,7 +254,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelClippedDraw(RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels, frame, frame_width); + CelClippedDraw(RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelClippedDraw(RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -264,7 +264,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelDrawLightRed(RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels, frame, frame_width, 1); + CelDrawLightRed(RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels, frame, frame_width, 1); #ifdef HELLFIRE } else { CelDrawLightRed(RIGHT_PANEL_X + 48, 205 + SCREEN_Y, pCursCels2, frame - 179, frame_width, 1); @@ -290,7 +290,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelBlitOutline(color, RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels, frame, frame_width); + CelBlitOutline(color, RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelBlitOutline(color, RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -302,7 +302,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelClippedDraw(RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels, frame, frame_width); + CelClippedDraw(RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelClippedDraw(RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -312,7 +312,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelDrawLightRed(RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels, frame, frame_width, 1); + CelDrawLightRed(RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels, frame, frame_width, 1); #ifdef HELLFIRE } else { CelDrawLightRed(RIGHT_PANEL_X + 249, 205 + SCREEN_Y, pCursCels2, frame - 179, frame_width, 1); @@ -338,7 +338,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelBlitOutline(color, RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels, frame, frame_width); + CelBlitOutline(color, RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelBlitOutline(color, RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -350,7 +350,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelClippedDraw(RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels, frame, frame_width); + CelClippedDraw(RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelClippedDraw(RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -360,7 +360,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelDrawLightRed(RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels, frame, frame_width, 1); + CelDrawLightRed(RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels, frame, frame_width, 1); #ifdef HELLFIRE } else { CelDrawLightRed(RIGHT_PANEL_X + 205, 60 + SCREEN_Y, pCursCels2, frame - 179, frame_width, 1); @@ -389,7 +389,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelBlitOutline(color, screen_x, screen_y, pCursCels, frame, frame_width); + CelBlitOutline(color, screen_x, screen_y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelBlitOutline(color, screen_x, screen_y, pCursCels2, frame - 179, frame_width); @@ -401,7 +401,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelClippedDraw(screen_x, screen_y, pCursCels, frame, frame_width); + CelClippedDraw(screen_x, screen_y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelClippedDraw(screen_x, screen_y, pCursCels2, frame - 179, frame_width); @@ -411,7 +411,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelDrawLightRed(screen_x, screen_y, pCursCels, frame, frame_width, 1); + CelDrawLightRed(screen_x, screen_y, pCursCels, frame, frame_width, 1); #ifdef HELLFIRE } else { CelDrawLightRed(screen_x, screen_y, pCursCels2, frame - 179, frame_width, 1); @@ -430,8 +430,8 @@ void DrawInv() cel_transparency_active = TRUE; pBuff = frame_width == INV_SLOT_SIZE_PX - ? &gpBuffer[SCREENXY(RIGHT_PANEL_X + 197, SCREEN_Y)] - : &gpBuffer[SCREENXY(RIGHT_PANEL_X + 183, SCREEN_Y)]; + ? &gpBuffer[SCREENXY(RIGHT_PANEL_X + 197, SCREEN_Y)] + : &gpBuffer[SCREENXY(RIGHT_PANEL_X + 183, SCREEN_Y)]; #ifdef HELLFIRE if (frame <= 179) { #endif @@ -468,7 +468,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelBlitOutline(color, screen_x, screen_y, pCursCels, frame, frame_width); + CelBlitOutline(color, screen_x, screen_y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelBlitOutline(color, screen_x, screen_y, pCursCels2, frame - 179, frame_width); @@ -480,7 +480,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelClippedDraw(screen_x, screen_y, pCursCels, frame, frame_width); + CelClippedDraw(screen_x, screen_y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelClippedDraw(screen_x, screen_y, pCursCels2, frame - 179, frame_width); @@ -490,7 +490,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelDrawLightRed(screen_x, screen_y, pCursCels, frame, frame_width, 1); + CelDrawLightRed(screen_x, screen_y, pCursCels, frame, frame_width, 1); #ifdef HELLFIRE } else { CelDrawLightRed(screen_x, screen_y, pCursCels2, frame - 179, frame_width, 1); @@ -516,7 +516,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelBlitOutline(color, RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels, frame, frame_width); + CelBlitOutline(color, RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelBlitOutline(color, RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -528,7 +528,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelClippedDraw(RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels, frame, frame_width); + CelClippedDraw(RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelClippedDraw(RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels2, frame - 179, frame_width); @@ -538,7 +538,7 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelDrawLightRed(RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels, frame, frame_width, 1); + CelDrawLightRed(RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels, frame, frame_width, 1); #ifdef HELLFIRE } else { CelDrawLightRed(RIGHT_PANEL_X + 133, 160 + SCREEN_Y, pCursCels2, frame - 179, frame_width, 1); @@ -578,11 +578,11 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelBlitOutline( - color, - InvRect[j + SLOTXY_INV_FIRST].X + RIGHT_PANEL_X, - InvRect[j + SLOTXY_INV_FIRST].Y + SCREEN_Y - 1, - pCursCels, frame, frame_width); + CelBlitOutline( + color, + InvRect[j + SLOTXY_INV_FIRST].X + RIGHT_PANEL_X, + InvRect[j + SLOTXY_INV_FIRST].Y + SCREEN_Y - 1, + pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelBlitOutline( @@ -598,10 +598,10 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelClippedDraw( - InvRect[j + SLOTXY_INV_FIRST].X + RIGHT_PANEL_X, - InvRect[j + SLOTXY_INV_FIRST].Y + SCREEN_Y - 1, - pCursCels, frame, frame_width); + CelClippedDraw( + InvRect[j + SLOTXY_INV_FIRST].X + RIGHT_PANEL_X, + InvRect[j + SLOTXY_INV_FIRST].Y + SCREEN_Y - 1, + pCursCels, frame, frame_width); #ifdef HELLFIRE } else { CelClippedDraw( @@ -614,10 +614,10 @@ void DrawInv() #ifdef HELLFIRE if (frame <= 179) { #endif - CelDrawLightRed( - InvRect[j + SLOTXY_INV_FIRST].X + RIGHT_PANEL_X, - InvRect[j + SLOTXY_INV_FIRST].Y + SCREEN_Y - 1, - pCursCels, frame, frame_width, 1); + CelDrawLightRed( + InvRect[j + SLOTXY_INV_FIRST].X + RIGHT_PANEL_X, + InvRect[j + SLOTXY_INV_FIRST].Y + SCREEN_Y - 1, + pCursCels, frame, frame_width, 1); #ifdef HELLFIRE } else { CelDrawLightRed( @@ -659,12 +659,12 @@ void DrawInvBelt() color = ICOL_RED; if (!sgbControllerActive || invflag) { #ifdef HELLFIRE - if (frame <= 179) + if (frame <= 179) #endif - CelBlitOutline(color, InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels, frame, frame_width); + CelBlitOutline(color, InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels, frame, frame_width); #ifdef HELLFIRE - else - CelBlitOutline(color, InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels2, frame - 179, frame_width); + else + CelBlitOutline(color, InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels2, frame - 179, frame_width); #endif } } @@ -673,7 +673,7 @@ void DrawInvBelt() #ifdef HELLFIRE if (frame <= 179) #endif - CelClippedDraw(InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels, frame, frame_width); + CelClippedDraw(InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels, frame, frame_width); #ifdef HELLFIRE else CelClippedDraw(InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels2, frame - 179, frame_width); @@ -682,7 +682,7 @@ void DrawInvBelt() #ifdef HELLFIRE if (frame <= 179) #endif - CelDrawLightRed(InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels, frame, frame_width, 1); + CelDrawLightRed(InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels, frame, frame_width, 1); #ifdef HELLFIRE else CelDrawLightRed(InvRect[i + SLOTXY_BELT_FIRST].X + PANEL_X, InvRect[i + SLOTXY_BELT_FIRST].Y + PANEL_Y - 1, pCursCels2, frame - 179, frame_width, 1); @@ -868,7 +868,7 @@ BOOL GoldAutoPlace(int pnum) for (i = 39; i >= 0 && !done; i--) { yy = 10 * (i / 10); xx = i % 10; - if (!plr[pnum].InvGrid[xx + yy]) { + if (plr[pnum].InvGrid[xx + yy] == 0) { ii = plr[pnum]._pNumInv; plr[pnum].InvList[ii] = plr[pnum].HoldItem; plr[pnum]._pNumInv = plr[pnum]._pNumInv + 1; @@ -931,7 +931,7 @@ BOOL GoldAutoPlace(int pnum) for (int i = 39; i >= 0 && !done; i--) { yy = 10 * (i / 10); xx = i % 10; - if (!plr[pnum].InvGrid[xx + yy]) { + if (plr[pnum].InvGrid[xx + yy] == 0) { ii = plr[pnum]._pNumInv; plr[pnum].InvList[ii] = plr[pnum].HoldItem; plr[pnum]._pNumInv = plr[pnum]._pNumInv + 1; @@ -1043,9 +1043,8 @@ void CheckInvPaste(int pnum, int mx, int my) if (r == SLOTXY_CHEST_LAST) { if ((sx & 1) == 0) i -= 14; - if ((sy & 1) == 0) { + if ((sy & 1) == 0) j -= 14; - } } if (r == SLOTXY_INV_LAST && (sy & 1) == 0) j += 14; @@ -1070,13 +1069,12 @@ void CheckInvPaste(int pnum, int mx, int my) done = TRUE; if (il == ILOC_ONEHAND && plr[pnum].HoldItem._iLoc == ILOC_TWOHAND) { #ifdef HELLFIRE - if (plr[pnum]._pClass == PC_BARBARIAN - && (plr[pnum].HoldItem._itype == ITYPE_SWORD || plr[pnum].HoldItem._itype == ITYPE_MACE) - ) - il = ILOC_ONEHAND; - else + if (plr[pnum]._pClass == PC_BARBARIAN + && (plr[pnum].HoldItem._itype == ITYPE_SWORD || plr[pnum].HoldItem._itype == ITYPE_MACE)) + il = ILOC_ONEHAND; + else #endif - il = ILOC_TWOHAND; + il = ILOC_TWOHAND; done = TRUE; } if (plr[pnum].HoldItem._iLoc == ILOC_UNEQUIPABLE && il == ILOC_BELT) { @@ -1201,7 +1199,11 @@ void CheckInvPaste(int pnum, int mx, int my) case ILOC_ONEHAND: if (r <= SLOTXY_HAND_LEFT_LAST) { if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) { - if (plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass != plr[pnum].HoldItem._iClass) { + if ((plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass != plr[pnum].HoldItem._iClass) +#ifdef HELLFIRE + || (plr[pnum]._pClass == PC_BARD && plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass == ICLASS_WEAPON && plr[pnum].HoldItem._iClass == ICLASS_WEAPON) +#endif + ) { NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); plr[pnum].InvBody[INVLOC_HAND_LEFT] = plr[pnum].HoldItem; } else { @@ -1210,7 +1212,11 @@ void CheckInvPaste(int pnum, int mx, int my) } break; } - if (plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass != plr[pnum].HoldItem._iClass) { + if ((plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass != plr[pnum].HoldItem._iClass) +#ifdef HELLFIRE + || (plr[pnum]._pClass == PC_BARD && plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass == ICLASS_WEAPON && plr[pnum].HoldItem._iClass == ICLASS_WEAPON) +#endif + ) { NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].HoldItem); break; @@ -1221,8 +1227,16 @@ void CheckInvPaste(int pnum, int mx, int my) break; } if (plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE) { - if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_LEFT]._iLoc != ILOC_TWOHAND) { - if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass != plr[pnum].HoldItem._iClass) { + if ((plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_LEFT]._iLoc != ILOC_TWOHAND) +#ifdef HELLFIRE + || (plr[pnum]._pClass == PC_BARBARIAN && (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SWORD || plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_MACE)) +#endif + ) { + if ((plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass != plr[pnum].HoldItem._iClass) +#ifdef HELLFIRE + || (plr[pnum]._pClass == PC_BARD && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass == ICLASS_WEAPON && plr[pnum].HoldItem._iClass == ICLASS_WEAPON) +#endif + ) { NetSendCmdChItem(FALSE, INVLOC_HAND_RIGHT); plr[pnum].InvBody[INVLOC_HAND_RIGHT] = plr[pnum].HoldItem; break; @@ -1231,14 +1245,22 @@ void CheckInvPaste(int pnum, int mx, int my) cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].HoldItem); break; } +#ifdef HELLFIRE + NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); +#else NetSendCmdDelItem(FALSE, INVLOC_HAND_LEFT); NetSendCmdChItem(FALSE, INVLOC_HAND_RIGHT); +#endif SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].InvBody[INVLOC_HAND_LEFT]); cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].HoldItem); break; } - if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass == plr[pnum].HoldItem._iClass) { + if ((plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass == plr[pnum].HoldItem._iClass) +#ifdef HELLFIRE + && !(plr[pnum]._pClass == PC_BARD && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass == ICLASS_WEAPON && plr[pnum].HoldItem._iClass == ICLASS_WEAPON) +#endif + ) { NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].HoldItem); break; @@ -1284,7 +1306,7 @@ void CheckInvPaste(int pnum, int mx, int my) NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); plr[pnum].InvBody[INVLOC_HAND_LEFT] = plr[pnum].HoldItem; } - if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_STAFF && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iSpell != 0 && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iCharges > 0) { + if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_STAFF && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iSpell != SPL_NULL && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iCharges > 0) { plr[pnum]._pRSpell = plr[pnum].InvBody[INVLOC_HAND_LEFT]._iSpell; plr[pnum]._pRSplType = RSPLTYPE_CHARGES; force_redraw = 255; @@ -1324,11 +1346,11 @@ void CheckInvPaste(int pnum, int mx, int my) plr[pnum].InvList[il]._iCurs = ICURS_GOLD_LARGE; // BUGFIX: incorrect values here are leftover from beta if (plr[pnum].HoldItem._ivalue >= GOLD_MEDIUM_LIMIT) - cn = 18; + cn = ICURS_GOLD_LARGE + CURSOR_FIRSTITEM; else if (plr[pnum].HoldItem._ivalue <= GOLD_SMALL_LIMIT) - cn = 16; + cn = ICURS_GOLD_SMALL + CURSOR_FIRSTITEM; else - cn = 17; + cn = ICURS_GOLD_MEDIUM + CURSOR_FIRSTITEM; } } else { il = plr[pnum]._pNumInv; @@ -1343,6 +1365,10 @@ void CheckInvPaste(int pnum, int mx, int my) plr[pnum].InvList[il]._iCurs = ICURS_GOLD_SMALL; else plr[pnum].InvList[il]._iCurs = ICURS_GOLD_MEDIUM; +#ifdef HELLFIRE + } else { + plr[pnum].InvList[ii]._iCurs = ICURS_GOLD_LARGE; +#endif } } } else { @@ -1407,11 +1433,11 @@ void CheckInvPaste(int pnum, int mx, int my) // BUGFIX: incorrect values here are leftover from beta if (plr[pnum].HoldItem._ivalue >= GOLD_MEDIUM_LIMIT) - cn = 18; + cn = ICURS_GOLD_LARGE + CURSOR_FIRSTITEM; else if (plr[pnum].HoldItem._ivalue <= GOLD_SMALL_LIMIT) - cn = 16; + cn = ICURS_GOLD_SMALL + CURSOR_FIRSTITEM; else - cn = 17; + cn = ICURS_GOLD_MEDIUM + CURSOR_FIRSTITEM; } } else { plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; @@ -2702,9 +2728,9 @@ void UseStaffCharge(int pnum) if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE && (plr[pnum].InvBody[INVLOC_HAND_LEFT]._iMiscId == IMISC_STAFF #ifdef HELLFIRE - || plr[myplr].InvBody[INVLOC_HAND_LEFT]._iMiscId == IMISC_UNIQUE // BUGFIX: myplr->pnum + || plr[myplr].InvBody[INVLOC_HAND_LEFT]._iMiscId == IMISC_UNIQUE // BUGFIX: myplr->pnum #endif - ) + ) && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iSpell == plr[pnum]._pRSpell && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iCharges > 0) { plr[pnum].InvBody[INVLOC_HAND_LEFT]._iCharges--; diff --git a/Source/inv.h b/Source/inv.h index d7835d0c..bc0e9189 100644 --- a/Source/inv.h +++ b/Source/inv.h @@ -44,7 +44,8 @@ void DrawInvMsg(const char *msg); int InvPutItem(int pnum, int x, int y); int SyncPutItem(int pnum, int x, int y, int idx, WORD icreateinfo, int iseed, int Id, int dur, int mdur, int ch, int mch, int ivalue, DWORD ibuff #ifdef HELLFIRE - , int to_hit, int max_dam, int min_str, int min_mag, int min_dex, int ac + , + int to_hit, int max_dam, int min_str, int min_mag, int min_dex, int ac #endif ); char CheckInvHLight(); diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index 837e79a1..9f3b879b 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -10,461 +10,465 @@ DEVILUTION_BEGIN_NAMESPACE /** Contains the data related to each item ID. */ ItemDataStruct AllItemsList[] = { // clang-format off - // iRnd, iClass, iLoc, iCurs, itype, iItemId, iName, iSName, iMinMLvl, iDurability, iMinDam, iMaxDam, iMinAC, iMaxAC, iMinStr, iMinMag, iMinDex, iFlags, iMiscId, iSpell, iUsable, iValue, iMaxValue - { IDROP_REGULAR, ICLASS_GOLD, ILOC_UNEQUIPABLE, ICURS_GOLD, ITYPE_GOLD, UITYPE_NONE, "Gold", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, TRUE, 0, 0 }, - { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_SWORD, UITYPE_NONE, "Short Sword", NULL, 2, 20, 2, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 50, 50 }, - { IDROP_NEVER, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, ITYPE_SHIELD, UITYPE_NONE, "Buckler", NULL, 2, 10, 0, 0, 3, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 50, 50 }, - { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, "Club", NULL, 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, - { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, ITYPE_BOW, UITYPE_NONE, "Short Bow", NULL, 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 100, 100 }, +//_item_indexes iRnd, iClass, iLoc, iCurs, itype, iItemId, iName, iSName, iMinMLvl, iDurability, iMinDam, iMaxDam, iMinAC, iMaxAC, iMinStr, iMinMag, iMinDex, iFlags, iMiscId, iSpell, iUsable, iValue, iMaxValue +/*IDI_GOLD */ { IDROP_REGULAR, ICLASS_GOLD, ILOC_UNEQUIPABLE, ICURS_GOLD, ITYPE_GOLD, UITYPE_NONE, "Gold", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, TRUE, 0, 0 }, +/*IDI_WARRIOR */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_SWORD, UITYPE_NONE, "Short Sword", NULL, 2, 20, 2, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 50, 50 }, +/*IDI_WARRSHLD */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, ITYPE_SHIELD, UITYPE_NONE, "Buckler", NULL, 2, 10, 0, 0, 3, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 50, 50 }, +/*IDI_WARRCLUB */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, "Club", NULL, 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, +/*IDI_ROGUE */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, ITYPE_BOW, UITYPE_NONE, "Short Bow", NULL, 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 100, 100 }, #ifndef HELLFIRE - { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_NONE, "Short Staff of Charged Bolt", NULL, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_CBOLT, FALSE, 520, 520 }, +/*IDI_SORCEROR */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_NONE, "Short Staff of Charged Bolt", NULL, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_CBOLT, FALSE, 520, 520 }, #else - { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_NONE, "Short Staff of Mana", NULL, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_MANA, FALSE, 520, 520 }, +/*IDI_SORCEROR */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_NONE, "Short Staff of Mana", NULL, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_MANA, FALSE, 520, 520 }, #endif - { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_CLEAVER, ITYPE_AXE, UITYPE_CLEAVER, "Cleaver", NULL, 10, 10, 4, 24, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 2000, 2000 }, - { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_THE_UNDEAD_CROWN, ITYPE_HELM, UITYPE_SKCROWN, "The Undead Crown", NULL, 0, 50, 0, 0, 15, 15, 0, 0, 0, ISPL_RNDSTEALLIFE, IMISC_UNIQUE, SPL_NULL, FALSE, 10000, 10000 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_EMPYREAN_BAND, ITYPE_RING, UITYPE_INFRARING, "Empyrean Band", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 8000, 8000 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAGIC_ROCK, ITYPE_MISC, UITYPE_NONE, "Magic Rock", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_OPTIC_AMULET, ITYPE_AMULET, UITYPE_OPTAMULET, "Optic Amulet", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 5000, 5000 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_RING_OF_TRUTH, ITYPE_RING, UITYPE_TRING, "Ring of Truth", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 1000, 1000 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TAVERN_SIGN, ITYPE_MISC, UITYPE_NONE, "Tavern Sign", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_HARLEQUIN_CREST, ITYPE_HELM, UITYPE_HARCREST, "Harlequin Crest", NULL, 0, 15, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 15, 20 }, - { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_VIEL_OF_STEEL, ITYPE_HELM, UITYPE_STEELVEIL, "Veil of Steel", NULL, 0, 60, 0, 0, 18, 18, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GOLDEN_ELIXIR, ITYPE_MISC, UITYPE_ELIXIR, "Golden Elixir", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_ANVIL_OF_FURY, ITYPE_MISC, UITYPE_NONE, "Anvil of Fury", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLACK_MUSHROOM, ITYPE_MISC, UITYPE_NONE, "Black Mushroom", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BRAIN, ITYPE_MISC, UITYPE_NONE, "Brain", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_FUNGAL_TOME, ITYPE_MISC, UITYPE_NONE, "Fungal Tome", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SPECTRAL_ELIXIR, ITYPE_MISC, UITYPE_ELIXIR, "Spectral Elixir", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SPECELIX, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLOOD_STONE, ITYPE_MISC, UITYPE_NONE, "Blood Stone", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_CLEAVER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_CLEAVER, ITYPE_AXE, UITYPE_CLEAVER, "Cleaver", NULL, 10, 10, 4, 24, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 2000, 2000 }, +/*IDI_SKCROWN */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_THE_UNDEAD_CROWN, ITYPE_HELM, UITYPE_SKCROWN, "The Undead Crown", NULL, 0, 50, 0, 0, 15, 15, 0, 0, 0, ISPL_RNDSTEALLIFE, IMISC_UNIQUE, SPL_NULL, FALSE, 10000, 10000 }, +/*IDI_INFRARING */ { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_EMPYREAN_BAND, ITYPE_RING, UITYPE_INFRARING, "Empyrean Band", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 8000, 8000 }, +/*IDI_ROCK */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAGIC_ROCK, ITYPE_MISC, UITYPE_NONE, "Magic Rock", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_OPTAMULET */ { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_OPTIC_AMULET, ITYPE_AMULET, UITYPE_OPTAMULET, "Optic Amulet", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 5000, 5000 }, +/*IDI_TRING */ { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_RING_OF_TRUTH, ITYPE_RING, UITYPE_TRING, "Ring of Truth", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 1000, 1000 }, +/*IDI_BANNER */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TAVERN_SIGN, ITYPE_MISC, UITYPE_NONE, "Tavern Sign", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_HARCREST */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_HARLEQUIN_CREST, ITYPE_HELM, UITYPE_HARCREST, "Harlequin Crest", NULL, 0, 15, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 15, 20 }, +/*IDI_STEELVEIL */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_VIEL_OF_STEEL, ITYPE_HELM, UITYPE_STEELVEIL, "Veil of Steel", NULL, 0, 60, 0, 0, 18, 18, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_GLDNELIX */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GOLDEN_ELIXIR, ITYPE_MISC, UITYPE_ELIXIR, "Golden Elixir", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_ANVIL */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_ANVIL_OF_FURY, ITYPE_MISC, UITYPE_NONE, "Anvil of Fury", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_MUSHROOM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLACK_MUSHROOM, ITYPE_MISC, UITYPE_NONE, "Black Mushroom", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_BRAIN */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BRAIN, ITYPE_MISC, UITYPE_NONE, "Brain", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_FUNGALTM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_FUNGAL_TOME, ITYPE_MISC, UITYPE_NONE, "Fungal Tome", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_SPECELIX */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SPECTRAL_ELIXIR, ITYPE_MISC, UITYPE_ELIXIR, "Spectral Elixir", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SPECELIX, SPL_NULL, FALSE, 0, 0 }, +/*IDI_BLDSTONE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLOOD_STONE, ITYPE_MISC, UITYPE_NONE, "Blood Stone", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, #ifndef HELLFIRE - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAP_OF_THE_STARS, ITYPE_MISC, UITYPE_MAPOFDOOM, "Map of the Stars", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MAPOFDOOM, SPL_NULL, TRUE, 0, 0 }, +/*IDI_MAPOFDOOM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAP_OF_THE_STARS, ITYPE_MISC, UITYPE_MAPOFDOOM, "Map of the Stars", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MAPOFDOOM, SPL_NULL, TRUE, 0, 0 }, #else - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAP_OF_THE_STARS, ITYPE_MISC, UITYPE_MAPOFDOOM, "Cathedral Map", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MAPOFDOOM, SPL_NULL, TRUE, 0, 0 }, +/*IDI_MAPOFDOOM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAP_OF_THE_STARS, ITYPE_MISC, UITYPE_MAPOFDOOM, "Cathedral Map", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MAPOFDOOM, SPL_NULL, TRUE, 0, 0 }, #endif - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_EAR_SORCEROR, ITYPE_MISC, UITYPE_NONE, "Heart", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_EAR, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, ITYPE_MISC, UITYPE_NONE, "Potion of Healing", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, TRUE, 50, 50 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, ITYPE_MISC, UITYPE_NONE, "Potion of Mana", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, TRUE, 50, 50 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Identify", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_IDENTIFY, TRUE, 200, 200 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Town Portal", NULL, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_TOWN, TRUE, 200, 200 }, - { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_ARKAINES_VALOR, ITYPE_MARMOR, UITYPE_ARMOFVAL, "Arkaine's Valor", NULL, 0, 40, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, ITYPE_MISC, UITYPE_NONE, "Potion of Full Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, TRUE, 150, 150 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, "Potion of Full Mana", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, TRUE, 150, 150 }, - { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, ITYPE_SWORD, UITYPE_GRISWOLD, "Griswold's Edge", NULL, 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 750, 750 }, +/*IDI_EAR */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_EAR_SORCEROR, ITYPE_MISC, UITYPE_NONE, "Heart", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_EAR, SPL_NULL, FALSE, 0, 0 }, +/*IDI_HEAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, ITYPE_MISC, UITYPE_NONE, "Potion of Healing", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, TRUE, 50, 50 }, +/*IDI_MANA */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, ITYPE_MISC, UITYPE_NONE, "Potion of Mana", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, TRUE, 50, 50 }, +/*IDI_IDENTIFY */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Identify", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_IDENTIFY, TRUE, 200, 200 }, +/*IDI_PORTAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Town Portal", NULL, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_TOWN, TRUE, 200, 200 }, +/*IDI_ARMOFVAL */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_ARKAINES_VALOR, ITYPE_MARMOR, UITYPE_ARMOFVAL, "Arkaine's Valor", NULL, 0, 40, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_FULLHEAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, ITYPE_MISC, UITYPE_NONE, "Potion of Full Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, TRUE, 150, 150 }, +/*IDI_FULLMANA */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, "Potion of Full Mana", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, TRUE, 150, 150 }, +/*IDI_GRISWOLD */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, ITYPE_SWORD, UITYPE_GRISWOLD, "Griswold's Edge", NULL, 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 750, 750 }, #ifndef HELLFIRE - { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MACE, ITYPE_MACE, UITYPE_LGTFORGE, "Lightforge", NULL, 2, 32, 1, 8, 0, 0, 16, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 200, 200 }, +/*IDI_LGTFORGE */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MACE, ITYPE_MACE, UITYPE_LGTFORGE, "Lightforge", NULL, 2, 32, 1, 8, 0, 0, 16, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 200, 200 }, #else - { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BOVINE, ITYPE_HARMOR, UITYPE_BOVINE, "Bovine Plate", NULL, 0, 40, 0, 0, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 200, 0 }, +/*IDI_LGTFORGE */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BOVINE, ITYPE_HARMOR, UITYPE_BOVINE, "Bovine Plate", NULL, 0, 40, 0, 0, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 0, 0 }, #endif - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_STAFF_OF_LAZARUS, ITYPE_MISC, UITYPE_LAZSTAFF, "Staff of Lazarus", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Resurrect", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, TRUE, 250, 250 }, +/*IDI_LAZSTAFF */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_STAFF_OF_LAZARUS, ITYPE_MISC, UITYPE_LAZSTAFF, "Staff of Lazarus", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_RESURRECT */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Resurrect", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, TRUE, 250, 250 }, #ifndef HELLFIRE - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, #else - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Blacksmith Oil", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, TRUE, 100, 100 }, - { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_MISC, UITYPE_NONE, "Short Staff", NULL, 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, - { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_MISC, UITYPE_NONE, "Sword", NULL, 2, 8, 1, 5, 0, 0, 15, 0, 20, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, - { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, ITYPE_MISC, UITYPE_NONE, "Dagger", NULL, 1, 16, 1, 4, 0, 0, 15, 0, 20, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RUNE_BOMB, ITYPE_MISC, UITYPE_NONE, "Rune Bomb", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_THEODORE, ITYPE_MISC, UITYPE_NONE, "Theodore", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_AURIC_AMULET, ITYPE_MISC, UITYPE_NONE, "Auric Amulet", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AURIC, SPL_NULL, FALSE, 100, 100 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_1, ITYPE_MISC, UITYPE_NONE, "Torn Note 1", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_2, ITYPE_MISC, UITYPE_NONE, "Torn Note 2", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_3, ITYPE_MISC, UITYPE_NONE, "Torn Note 3", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RECONSTRUCTED_NOTE, ITYPE_MISC, UITYPE_NONE, "Reconstructed Note", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NOTE, SPL_NULL, TRUE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BROWN_SUIT, ITYPE_MISC, UITYPE_NONE, "Brown Suit", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_GREY_SUIT, ITYPE_MISC, UITYPE_NONE, "Grey Suit", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_OIL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Blacksmith Oil", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, TRUE, 100, 100 }, +/*IDI_SHORTSTAFF */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_NONE, "Short Staff", NULL, 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, +/*IDI_BARDSWORD */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_SWORD, UITYPE_NONE, "Sword", NULL, 2, 8, 1, 5, 0, 0, 15, 0, 20, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, +/*IDI_BARDDAGGER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, ITYPE_SWORD, UITYPE_NONE, "Dagger", NULL, 1, 16, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, +/*IDI_RUNEBOMB */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RUNE_BOMB, ITYPE_MISC, UITYPE_NONE, "Rune Bomb", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_THEODORE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_THEODORE, ITYPE_MISC, UITYPE_NONE, "Theodore", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_AURIC */ { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_AURIC_AMULET, ITYPE_MISC, UITYPE_NONE, "Auric Amulet", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AURIC, SPL_NULL, FALSE, 100, 100 }, +/*IDI_NOTE1 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_1, ITYPE_MISC, UITYPE_NONE, "Torn Note 1", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_NOTE2 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_2, ITYPE_MISC, UITYPE_NONE, "Torn Note 2", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_NOTE3 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_3, ITYPE_MISC, UITYPE_NONE, "Torn Note 3", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_FULLNOTE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RECONSTRUCTED_NOTE, ITYPE_MISC, UITYPE_NONE, "Reconstructed Note", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NOTE, SPL_NULL, TRUE, 0, 0 }, +/*IDI_BROWNSUIT */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BROWN_SUIT, ITYPE_MISC, UITYPE_NONE, "Brown Suit", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/*IDI_GREYSUIT */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_GREY_SUIT, ITYPE_MISC, UITYPE_NONE, "Grey Suit", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, #endif - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CAP, ITYPE_HELM, UITYPE_NONE, "Cap", "Cap", 1, 15, 0, 0, 1, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 15, 20 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_SKULL_CAP, ITYPE_HELM, UITYPE_SKULLCAP, "Skull Cap", "Cap", 4, 20, 0, 0, 2, 4, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 25, 30 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_HELM, ITYPE_HELM, UITYPE_HELM, "Helm", "Helm", 8, 30, 0, 0, 4, 6, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 40, 70 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_FULL_HELM, ITYPE_HELM, UITYPE_NONE, "Full Helm", "Helm", 12, 35, 0, 0, 6, 8, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 90, 130 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CROWN, ITYPE_HELM, UITYPE_CROWN, "Crown", "Crown", 16, 40, 0, 0, 8, 12, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 300 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_GREAT_HELM, ITYPE_HELM, UITYPE_GREATHELM, "Great Helm", "Helm", 20, 60, 0, 0, 10, 15, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 400, 500 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CAPE, ITYPE_LARMOR, UITYPE_CAPE, "Cape", "Cape", 1, 12, 0, 0, 1, 5, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 10, 50 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_RAGS, ITYPE_LARMOR, UITYPE_RAGS, "Rags", "Rags", 1, 6, 0, 0, 2, 6, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 5, 25 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CLOAK, ITYPE_LARMOR, UITYPE_CLOAK, "Cloak", "Cloak", 2, 18, 0, 0, 3, 7, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 40, 70 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_ROBE, ITYPE_LARMOR, UITYPE_ROBE, "Robe", "Robe", 3, 24, 0, 0, 4, 7, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 75, 125 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_QUILTED_ARMOR, ITYPE_LARMOR, UITYPE_NONE, "Quilted Armor", "Armor", 4, 30, 0, 0, 7, 10, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 300 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_LEATHARMOR, "Leather Armor", "Armor", 6, 35, 0, 0, 10, 13, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 300, 400 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_HARD_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_NONE, "Hard Leather Armor", "Armor", 7, 40, 0, 0, 11, 14, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 450, 550 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_STUDDED_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_STUDARMOR, "Studded Leather Armor", "Armor", 9, 45, 0, 0, 15, 17, 20, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 700, 800 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_RING_MAIL, ITYPE_MARMOR, UITYPE_NONE, "Ring Mail", "Mail", 11, 50, 0, 0, 17, 20, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 900, 1100 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CHAIN_MAIL, ITYPE_MARMOR, UITYPE_CHAINMAIL, "Chain Mail", "Mail", 13, 55, 0, 0, 18, 22, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1250, 1750 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_SCALE_MAIL, ITYPE_MARMOR, UITYPE_NONE, "Scale Mail", "Mail", 15, 60, 0, 0, 23, 28, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2300, 2800 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BREAST_PLATE, ITYPE_HARMOR, UITYPE_BREASTPLATE, "Breast Plate", "Plate", 16, 80, 0, 0, 20, 24, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2800, 3200 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_SPLINT_MAIL, ITYPE_MARMOR, UITYPE_NONE, "Splint Mail", "Mail", 17, 65, 0, 0, 30, 35, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 3250, 3750 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FIELD_PLATE, ITYPE_HARMOR, UITYPE_PLATEMAIL, "Plate Mail", "Plate", 19, 75, 0, 0, 42, 50, 60, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 4600, 5400 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FIELD_PLATE, ITYPE_HARMOR, UITYPE_NONE, "Field Plate", "Plate", 21, 80, 0, 0, 40, 45, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 5800, 6200 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_GOTHIC_PLATE, ITYPE_HARMOR, UITYPE_NONE, "Gothic Plate", "Plate", 23, 100, 0, 0, 50, 60, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 8000, 10000 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FULL_PLATE_MAIL, ITYPE_HARMOR, UITYPE_FULLPLATE, "Full Plate Mail", "Plate", 25, 90, 0, 0, 60, 75, 90, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 6500, 8000 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, ITYPE_SHIELD, UITYPE_BUCKLER, "Buckler", "Shield", 1, 16, 0, 0, 1, 5, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 30, 70 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_SMALL_SHIELD, ITYPE_SHIELD, UITYPE_SMALLSHIELD, "Small Shield", "Shield", 5, 24, 0, 0, 3, 8, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 90, 130 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_LARGE_SHIELD, ITYPE_SHIELD, UITYPE_LARGESHIELD, "Large Shield", "Shield", 9, 32, 0, 0, 5, 10, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 300 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_KITE_SHIELD, ITYPE_SHIELD, UITYPE_KITESHIELD, "Kite Shield", "Shield", 14, 40, 0, 0, 8, 15, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 400, 700 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_TOWER_SHIELD, ITYPE_SHIELD, UITYPE_GOTHSHIELD, "Tower Shield", "Shield", 20, 50, 0, 0, 12, 20, 60, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 850, 1200 }, - { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_GOTHIC_SHIELD, ITYPE_SHIELD, UITYPE_GOTHSHIELD, "Gothic Shield", "Shield", 23, 60, 0, 0, 14, 18, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2300, 2700 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, ITYPE_MISC, UITYPE_NONE, "Potion of Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, TRUE, 50, 50 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, ITYPE_MISC, UITYPE_NONE, "Potion of Full Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, TRUE, 150, 150 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, ITYPE_MISC, UITYPE_NONE, "Potion of Mana", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, TRUE, 50, 50 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, "Potion of Full Mana", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, TRUE, 150, 150 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_REJUVENATION, ITYPE_MISC, UITYPE_NONE, "Potion of Rejuvenation", NULL, 3, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_REJUV, SPL_NULL, TRUE, 120, 120 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_REJUVENATION, ITYPE_MISC, UITYPE_NONE, "Potion of Full Rejuvenation", NULL, 7, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLREJUV, SPL_NULL, TRUE, 600, 600 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CAP, ITYPE_HELM, UITYPE_NONE, "Cap", "Cap", 1, 15, 0, 0, 1, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 15, 20 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_SKULL_CAP, ITYPE_HELM, UITYPE_SKULLCAP, "Skull Cap", "Cap", 4, 20, 0, 0, 2, 4, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 25, 30 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_HELM, ITYPE_HELM, UITYPE_HELM, "Helm", "Helm", 8, 30, 0, 0, 4, 6, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 40, 70 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_FULL_HELM, ITYPE_HELM, UITYPE_NONE, "Full Helm", "Helm", 12, 35, 0, 0, 6, 8, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 90, 130 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CROWN, ITYPE_HELM, UITYPE_CROWN, "Crown", "Crown", 16, 40, 0, 0, 8, 12, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 300 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_GREAT_HELM, ITYPE_HELM, UITYPE_GREATHELM, "Great Helm", "Helm", 20, 60, 0, 0, 10, 15, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 400, 500 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CAPE, ITYPE_LARMOR, UITYPE_CAPE, "Cape", "Cape", 1, 12, 0, 0, 1, 5, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 10, 50 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_RAGS, ITYPE_LARMOR, UITYPE_RAGS, "Rags", "Rags", 1, 6, 0, 0, 2, 6, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 5, 25 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CLOAK, ITYPE_LARMOR, UITYPE_CLOAK, "Cloak", "Cloak", 2, 18, 0, 0, 3, 7, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 40, 70 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_ROBE, ITYPE_LARMOR, UITYPE_ROBE, "Robe", "Robe", 3, 24, 0, 0, 4, 7, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 75, 125 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_QUILTED_ARMOR, ITYPE_LARMOR, UITYPE_NONE, "Quilted Armor", "Armor", 4, 30, 0, 0, 7, 10, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 300 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_LEATHARMOR, "Leather Armor", "Armor", 6, 35, 0, 0, 10, 13, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 300, 400 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_HARD_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_NONE, "Hard Leather Armor", "Armor", 7, 40, 0, 0, 11, 14, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 450, 550 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_STUDDED_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_STUDARMOR, "Studded Leather Armor", "Armor", 9, 45, 0, 0, 15, 17, 20, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 700, 800 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_RING_MAIL, ITYPE_MARMOR, UITYPE_NONE, "Ring Mail", "Mail", 11, 50, 0, 0, 17, 20, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 900, 1100 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CHAIN_MAIL, ITYPE_MARMOR, UITYPE_CHAINMAIL, "Chain Mail", "Mail", 13, 55, 0, 0, 18, 22, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1250, 1750 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_SCALE_MAIL, ITYPE_MARMOR, UITYPE_NONE, "Scale Mail", "Mail", 15, 60, 0, 0, 23, 28, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2300, 2800 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BREAST_PLATE, ITYPE_HARMOR, UITYPE_BREASTPLATE, "Breast Plate", "Plate", 16, 80, 0, 0, 20, 24, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2800, 3200 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_SPLINT_MAIL, ITYPE_MARMOR, UITYPE_NONE, "Splint Mail", "Mail", 17, 65, 0, 0, 30, 35, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 3250, 3750 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FIELD_PLATE, ITYPE_HARMOR, UITYPE_PLATEMAIL, "Plate Mail", "Plate", 19, 75, 0, 0, 42, 50, 60, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 4600, 5400 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FIELD_PLATE, ITYPE_HARMOR, UITYPE_NONE, "Field Plate", "Plate", 21, 80, 0, 0, 40, 45, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 5800, 6200 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_GOTHIC_PLATE, ITYPE_HARMOR, UITYPE_NONE, "Gothic Plate", "Plate", 23, 100, 0, 0, 50, 60, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 8000, 10000 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FULL_PLATE_MAIL, ITYPE_HARMOR, UITYPE_FULLPLATE, "Full Plate Mail", "Plate", 25, 90, 0, 0, 60, 75, 90, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 6500, 8000 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, ITYPE_SHIELD, UITYPE_BUCKLER, "Buckler", "Shield", 1, 16, 0, 0, 1, 5, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 30, 70 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_SMALL_SHIELD, ITYPE_SHIELD, UITYPE_SMALLSHIELD, "Small Shield", "Shield", 5, 24, 0, 0, 3, 8, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 90, 130 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_LARGE_SHIELD, ITYPE_SHIELD, UITYPE_LARGESHIELD, "Large Shield", "Shield", 9, 32, 0, 0, 5, 10, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 300 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_KITE_SHIELD, ITYPE_SHIELD, UITYPE_KITESHIELD, "Kite Shield", "Shield", 14, 40, 0, 0, 8, 15, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 400, 700 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_TOWER_SHIELD, ITYPE_SHIELD, UITYPE_GOTHSHIELD, "Tower Shield", "Shield", 20, 50, 0, 0, 12, 20, 60, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 850, 1200 }, +/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_GOTHIC_SHIELD, ITYPE_SHIELD, UITYPE_GOTHSHIELD, "Gothic Shield", "Shield", 23, 60, 0, 0, 14, 18, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2300, 2700 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, ITYPE_MISC, UITYPE_NONE, "Potion of Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, TRUE, 50, 50 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, ITYPE_MISC, UITYPE_NONE, "Potion of Full Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, TRUE, 150, 150 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, ITYPE_MISC, UITYPE_NONE, "Potion of Mana", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, TRUE, 50, 50 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, "Potion of Full Mana", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, TRUE, 150, 150 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_REJUVENATION, ITYPE_MISC, UITYPE_NONE, "Potion of Rejuvenation", NULL, 3, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_REJUV, SPL_NULL, TRUE, 120, 120 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_REJUVENATION, ITYPE_MISC, UITYPE_NONE, "Potion of Full Rejuvenation", NULL, 7, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLREJUV, SPL_NULL, TRUE, 600, 600 }, #ifdef HELLFIRE - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Blacksmith Oil", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, TRUE, 100, 100 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Oil of Accuracy", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILACC, SPL_NULL, TRUE, 500, 500 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Oil of Sharpness", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILSHARP, SPL_NULL, TRUE, 500, 500 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Blacksmith Oil", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, TRUE, 100, 100 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Oil of Accuracy", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILACC, SPL_NULL, TRUE, 500, 500 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Oil of Sharpness", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILSHARP, SPL_NULL, TRUE, 500, 500 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, "Oil", NULL, 10, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILOF, SPL_NULL, TRUE, 0, 0 }, #endif - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_STRENGTH, ITYPE_MISC, UITYPE_NONE, "Elixir of Strength", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXSTR, SPL_NULL, TRUE, 5000, 5000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_MAGIC, ITYPE_MISC, UITYPE_NONE, "Elixir of Magic", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXMAG, SPL_NULL, TRUE, 5000, 5000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_DEXTERITY, ITYPE_MISC, UITYPE_NONE, "Elixir of Dexterity", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXDEX, SPL_NULL, TRUE, 5000, 5000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_VITALITY, ITYPE_MISC, UITYPE_NONE, "Elixir of Vitality", NULL, 20, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXVIT, SPL_NULL, TRUE, 5000, 5000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_HEAL, TRUE, 50, 50 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Lightning", NULL, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_LIGHTNING, TRUE, 150, 150 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Identify", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_IDENTIFY, TRUE, 100, 100 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Resurrect", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, TRUE, 250, 250 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Fire Wall", NULL, 4, 0, 0, 0, 0, 0, 0, 17, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FIREWALL, TRUE, 400, 400 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Inferno", NULL, 1, 0, 0, 0, 0, 0, 0, 19, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FLAME, TRUE, 100, 100 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Town Portal", NULL, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_TOWN, TRUE, 200, 200 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Flash", NULL, 6, 0, 0, 0, 0, 0, 0, 21, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FLASH, TRUE, 500, 500 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Infravision", NULL, 8, 0, 0, 0, 0, 0, 0, 23, 0, ISPL_NONE, IMISC_SCROLL, SPL_INFRA, TRUE, 600, 600 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Phasing", NULL, 6, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_SCROLL, SPL_RNDTELEPORT, TRUE, 200, 200 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Mana Shield", NULL, 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_MANASHIELD, TRUE, 1200, 1200 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Flame Wave", NULL, 10, 0, 0, 0, 0, 0, 0, 29, 0, ISPL_NONE, IMISC_SCROLLT, SPL_WAVE, TRUE, 650, 650 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Fireball", NULL, 8, 0, 0, 0, 0, 0, 0, 31, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FIREBALL, TRUE, 300, 300 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Stone Curse", NULL, 6, 0, 0, 0, 0, 0, 0, 33, 0, ISPL_NONE, IMISC_SCROLLT, SPL_STONE, TRUE, 800, 800 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Chain Lightning", NULL, 10, 0, 0, 0, 0, 0, 0, 35, 0, ISPL_NONE, IMISC_SCROLLT, SPL_CHAIN, TRUE, 750, 750 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Guardian", NULL, 12, 0, 0, 0, 0, 0, 0, 47, 0, ISPL_NONE, IMISC_SCROLLT, SPL_GUARDIAN, TRUE, 950, 950 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Non Item", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Nova", NULL, 14, 0, 0, 0, 0, 0, 0, 57, 0, ISPL_NONE, IMISC_SCROLL, SPL_NOVA, TRUE, 1300, 1300 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Golem", NULL, 10, 0, 0, 0, 0, 0, 0, 51, 0, ISPL_NONE, IMISC_SCROLLT, SPL_GOLEM, TRUE, 1100, 1100 }, - { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of None", NULL, 99, 0, 0, 0, 0, 0, 0, 61, 0, ISPL_NONE, IMISC_SCROLLT, SPL_NULL, TRUE, 1000, 1000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Teleport", NULL, 14, 0, 0, 0, 0, 0, 0, 81, 0, ISPL_NONE, IMISC_SCROLL, SPL_TELEPORT, TRUE, 3000, 3000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Apocalypse", NULL, 22, 0, 0, 0, 0, 0, 0, 117, 0, ISPL_NONE, IMISC_SCROLL, SPL_APOCA, TRUE, 2000, 2000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, "Book of ", NULL, 2, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, TRUE, 0, 0 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, "Book of ", NULL, 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, TRUE, 0, 0 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, "Book of ", NULL, 14, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, TRUE, 0, 0 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, "Book of ", NULL, 20, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, TRUE, 0, 0 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, ITYPE_SWORD, UITYPE_DAGGER, "Dagger", "Dagger", 1, 16, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 60, 60 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_SWORD, UITYPE_NONE, "Short Sword", "Sword", 1, 24, 2, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 120, 120 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_FALCHION, ITYPE_SWORD, UITYPE_FALCHION, "Falchion", "Sword", 2, 20, 4, 8, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 250, 250 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SCIMITAR, ITYPE_SWORD, UITYPE_SCIMITAR, "Scimitar", "Sword", 4, 28, 3, 7, 0, 0, 23, 0, 23, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 200 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLAYMORE, ITYPE_SWORD, UITYPE_CLAYMORE, "Claymore", "Sword", 5, 36, 1, 12, 0, 0, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 450, 450 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BLADE, ITYPE_SWORD, UITYPE_NONE, "Blade", "Blade", 4, 30, 3, 8, 0, 0, 25, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 280, 280 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SABRE, ITYPE_SWORD, UITYPE_SABRE, "Sabre", "Sabre", 1, 45, 1, 8, 0, 0, 17, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 170, 170 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_LONG_SWORD, ITYPE_SWORD, UITYPE_LONGSWR, "Long Sword", "Sword", 6, 40, 2, 10, 0, 0, 30, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 350, 350 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, ITYPE_SWORD, UITYPE_BROADSWR, "Broad Sword", "Sword", 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 750, 750 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BASTARD_SWORD, ITYPE_SWORD, UITYPE_BASTARDSWR, "Bastard Sword", "Sword", 10, 60, 6, 15, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1000, 1000 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_TWO_HANDED_SWORD, ITYPE_SWORD, UITYPE_TWOHANDSWR, "Two-Handed Sword", "Sword", 14, 75, 8, 16, 0, 0, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1800, 1800 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_GREAT_SWORD, ITYPE_SWORD, UITYPE_GREATSWR, "Great Sword", "Sword", 17, 100, 10, 20, 0, 0, 75, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 3000, 3000 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SMALL_AXE, ITYPE_AXE, UITYPE_SMALLAXE, "Small Axe", "Axe", 2, 24, 2, 10, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 150, 150 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_AXE, ITYPE_AXE, UITYPE_NONE, "Axe", "Axe", 4, 32, 4, 12, 0, 0, 22, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 450, 450 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LARGE_AXE, ITYPE_AXE, UITYPE_LARGEAXE, "Large Axe", "Axe", 6, 40, 6, 16, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 750, 750 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_BROAD_AXE, ITYPE_AXE, UITYPE_BROADAXE, "Broad Axe", "Axe", 8, 50, 8, 20, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1000, 1000 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_BATTLE_AXE, ITYPE_AXE, UITYPE_BATTLEAXE, "Battle Axe", "Axe", 10, 60, 10, 25, 0, 0, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1500, 1500 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_GREAT_AXE, ITYPE_AXE, UITYPE_GREATAXE, "Great Axe", "Axe", 12, 75, 12, 30, 0, 0, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2500, 2500 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MACE, ITYPE_MACE, UITYPE_MACE, "Mace", "Mace", 2, 32, 1, 8, 0, 0, 16, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 200 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MORNING_STAR, ITYPE_MACE, UITYPE_MORNSTAR, "Morning Star", "Mace", 3, 40, 1, 10, 0, 0, 26, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 300, 300 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_WAR_HAMMER, ITYPE_MACE, UITYPE_WARHAMMER, "War Hammer", "Hammer", 5, 50, 5, 9, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 600, 600 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SPIKED_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, "Spiked Club", "Club", 4, 20, 3, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 225, 225 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, "Club", "Club", 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_FLAIL, ITYPE_MACE, UITYPE_FLAIL, "Flail", "Flail", 7, 36, 2, 12, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 500, 500 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_MAUL, ITYPE_MACE, UITYPE_MAUL, "Maul", "Maul", 10, 50, 6, 20, 0, 0, 55, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 900, 900 }, - { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, ITYPE_BOW, UITYPE_SHORTBOW, "Short Bow", "Bow", 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 100, 100 }, - { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_HUNTERS_BOW, ITYPE_BOW, UITYPE_HUNTBOW, "Hunter's Bow", "Bow", 3, 40, 2, 5, 0, 0, 20, 0, 35, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 350, 350 }, - { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_HUNTERS_BOW, ITYPE_BOW, UITYPE_LONGBOW, "Long Bow", "Bow", 5, 35, 1, 6, 0, 0, 25, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 250, 250 }, - { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_COMPOSITE_BOW, ITYPE_BOW, UITYPE_COMPBOW, "Composite Bow", "Bow", 7, 45, 3, 6, 0, 0, 25, 0, 40, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 600, 600 }, - { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BATTLE_BOW, ITYPE_BOW, UITYPE_NONE, "Short Battle Bow", "Bow", 9, 45, 3, 7, 0, 0, 30, 0, 50, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 750, 750 }, - { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_WAR_BOW, ITYPE_BOW, UITYPE_BATTLEBOW, "Long Battle Bow", "Bow", 11, 50, 1, 10, 0, 0, 30, 0, 60, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1000, 1000 }, - { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_WAR_BOW, ITYPE_BOW, UITYPE_NONE, "Short War Bow", "Bow", 15, 55, 4, 8, 0, 0, 35, 0, 70, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1500, 1500 }, - { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_WAR_BOW, ITYPE_BOW, UITYPE_WARBOW, "Long War Bow", "Bow", 19, 60, 1, 14, 0, 0, 45, 0, 80, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2000, 2000 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_SHORTSTAFF, "Short Staff", "Staff", 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 30, 30 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_STAFF, ITYPE_STAFF, UITYPE_LONGSTAFF, "Long Staff", "Staff", 4, 35, 4, 8, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 100, 100 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_COMPOSITE_STAFF, ITYPE_STAFF, UITYPE_COMPSTAFF, "Composite Staff", "Staff", 6, 45, 5, 10, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 500, 500 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_QUARSTAFF, "Quarter Staff", "Staff", 9, 55, 6, 12, 0, 0, 20, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 1000, 1000 }, - { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_WAR_STAFF, ITYPE_STAFF, UITYPE_WARSTAFF, "War Staff", "Staff", 12, 75, 8, 16, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 1500, 1500 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, "Ring", "Ring", 5, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, FALSE, 1000, 1000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, "Ring", "Ring", 10, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, FALSE, 1000, 1000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, "Ring", "Ring", 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, FALSE, 1000, 1000 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, ITYPE_AMULET, UITYPE_AMULET, "Amulet", "Amulet", 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, FALSE, 1200, 1200 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, ITYPE_AMULET, UITYPE_AMULET, "Amulet", "Amulet", 16, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, FALSE, 1200, 1200 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_STRENGTH, ITYPE_MISC, UITYPE_NONE, "Elixir of Strength", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXSTR, SPL_NULL, TRUE, 5000, 5000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_MAGIC, ITYPE_MISC, UITYPE_NONE, "Elixir of Magic", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXMAG, SPL_NULL, TRUE, 5000, 5000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_DEXTERITY, ITYPE_MISC, UITYPE_NONE, "Elixir of Dexterity", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXDEX, SPL_NULL, TRUE, 5000, 5000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_VITALITY, ITYPE_MISC, UITYPE_NONE, "Elixir of Vitality", NULL, 20, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXVIT, SPL_NULL, TRUE, 5000, 5000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_HEAL, TRUE, 50, 50 }, #ifdef HELLFIRE - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_FIRE, ITYPE_MISC, UITYPE_NONE, "Rune of Fire", "Rune", 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RUNEF, SPL_NULL, TRUE, 100, 100 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_LIGHTNING, ITYPE_MISC, UITYPE_NONE, "Rune of Lightning", "Rune", 3, 0, 0, 0, 0, 0, 0, 13, 0, ISPL_NONE, IMISC_RUNEL, SPL_NULL, TRUE, 200, 200 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_FIRE, ITYPE_MISC, UITYPE_NONE, "Greater Rune of Fire", "Rune", 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEF, SPL_NULL, TRUE, 400, 400 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_LIGHTNING, ITYPE_MISC, UITYPE_NONE, "Greater Rune of Lightning", "Rune", 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEL, SPL_NULL, TRUE, 500, 500 }, - { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_STONE, ITYPE_MISC, UITYPE_NONE, "Rune of Stone", "Rune", 7, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_RUNES, SPL_NULL, TRUE, 300, 300 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Search", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_SEARCH, TRUE, 50, 50 }, #endif - { IDROP_NEVER, ICLASS_NONE, ILOC_INVALID, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Lightning", NULL, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_LIGHTNING, TRUE, 150, 150 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Identify", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_IDENTIFY, TRUE, 100, 100 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Resurrect", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, TRUE, 250, 250 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Fire Wall", NULL, 4, 0, 0, 0, 0, 0, 0, 17, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FIREWALL, TRUE, 400, 400 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Inferno", NULL, 1, 0, 0, 0, 0, 0, 0, 19, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FLAME, TRUE, 100, 100 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Town Portal", NULL, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_TOWN, TRUE, 200, 200 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Flash", NULL, 6, 0, 0, 0, 0, 0, 0, 21, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FLASH, TRUE, 500, 500 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Infravision", NULL, 8, 0, 0, 0, 0, 0, 0, 23, 0, ISPL_NONE, IMISC_SCROLL, SPL_INFRA, TRUE, 600, 600 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Phasing", NULL, 6, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_SCROLL, SPL_RNDTELEPORT, TRUE, 200, 200 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Mana Shield", NULL, 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_MANASHIELD, TRUE, 1200, 1200 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Flame Wave", NULL, 10, 0, 0, 0, 0, 0, 0, 29, 0, ISPL_NONE, IMISC_SCROLLT, SPL_WAVE, TRUE, 650, 650 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Fireball", NULL, 8, 0, 0, 0, 0, 0, 0, 31, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FIREBALL, TRUE, 300, 300 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Stone Curse", NULL, 6, 0, 0, 0, 0, 0, 0, 33, 0, ISPL_NONE, IMISC_SCROLLT, SPL_STONE, TRUE, 800, 800 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Chain Lightning", NULL, 10, 0, 0, 0, 0, 0, 0, 35, 0, ISPL_NONE, IMISC_SCROLLT, SPL_CHAIN, TRUE, 750, 750 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Guardian", NULL, 12, 0, 0, 0, 0, 0, 0, 47, 0, ISPL_NONE, IMISC_SCROLLT, SPL_GUARDIAN, TRUE, 950, 950 }, +/* */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Non Item", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Nova", NULL, 14, 0, 0, 0, 0, 0, 0, 57, 0, ISPL_NONE, IMISC_SCROLL, SPL_NOVA, TRUE, 1300, 1300 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Golem", NULL, 10, 0, 0, 0, 0, 0, 0, 51, 0, ISPL_NONE, IMISC_SCROLLT, SPL_GOLEM, TRUE, 1100, 1100 }, +/* */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of None", NULL, 99, 0, 0, 0, 0, 0, 0, 61, 0, ISPL_NONE, IMISC_SCROLLT, SPL_NULL, TRUE, 1000, 1000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Teleport", NULL, 14, 0, 0, 0, 0, 0, 0, 81, 0, ISPL_NONE, IMISC_SCROLL, SPL_TELEPORT, TRUE, 3000, 3000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of Apocalypse", NULL, 22, 0, 0, 0, 0, 0, 0, 117, 0, ISPL_NONE, IMISC_SCROLL, SPL_APOCA, TRUE, 2000, 2000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, "Book of ", NULL, 2, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, TRUE, 0, 0 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, "Book of ", NULL, 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, TRUE, 0, 0 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, "Book of ", NULL, 14, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, TRUE, 0, 0 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, "Book of ", NULL, 20, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, TRUE, 0, 0 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, ITYPE_SWORD, UITYPE_DAGGER, "Dagger", "Dagger", 1, 16, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 60, 60 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_SWORD, UITYPE_NONE, "Short Sword", "Sword", 1, 24, 2, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 120, 120 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_FALCHION, ITYPE_SWORD, UITYPE_FALCHION, "Falchion", "Sword", 2, 20, 4, 8, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 250, 250 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SCIMITAR, ITYPE_SWORD, UITYPE_SCIMITAR, "Scimitar", "Sword", 4, 28, 3, 7, 0, 0, 23, 0, 23, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 200 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLAYMORE, ITYPE_SWORD, UITYPE_CLAYMORE, "Claymore", "Sword", 5, 36, 1, 12, 0, 0, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 450, 450 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BLADE, ITYPE_SWORD, UITYPE_NONE, "Blade", "Blade", 4, 30, 3, 8, 0, 0, 25, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 280, 280 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SABRE, ITYPE_SWORD, UITYPE_SABRE, "Sabre", "Sabre", 1, 45, 1, 8, 0, 0, 17, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 170, 170 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_LONG_SWORD, ITYPE_SWORD, UITYPE_LONGSWR, "Long Sword", "Sword", 6, 40, 2, 10, 0, 0, 30, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 350, 350 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, ITYPE_SWORD, UITYPE_BROADSWR, "Broad Sword", "Sword", 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 750, 750 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BASTARD_SWORD, ITYPE_SWORD, UITYPE_BASTARDSWR, "Bastard Sword", "Sword", 10, 60, 6, 15, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1000, 1000 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_TWO_HANDED_SWORD, ITYPE_SWORD, UITYPE_TWOHANDSWR, "Two-Handed Sword", "Sword", 14, 75, 8, 16, 0, 0, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1800, 1800 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_GREAT_SWORD, ITYPE_SWORD, UITYPE_GREATSWR, "Great Sword", "Sword", 17, 100, 10, 20, 0, 0, 75, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 3000, 3000 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SMALL_AXE, ITYPE_AXE, UITYPE_SMALLAXE, "Small Axe", "Axe", 2, 24, 2, 10, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 150, 150 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_AXE, ITYPE_AXE, UITYPE_NONE, "Axe", "Axe", 4, 32, 4, 12, 0, 0, 22, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 450, 450 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LARGE_AXE, ITYPE_AXE, UITYPE_LARGEAXE, "Large Axe", "Axe", 6, 40, 6, 16, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 750, 750 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_BROAD_AXE, ITYPE_AXE, UITYPE_BROADAXE, "Broad Axe", "Axe", 8, 50, 8, 20, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1000, 1000 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_BATTLE_AXE, ITYPE_AXE, UITYPE_BATTLEAXE, "Battle Axe", "Axe", 10, 60, 10, 25, 0, 0, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1500, 1500 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_GREAT_AXE, ITYPE_AXE, UITYPE_GREATAXE, "Great Axe", "Axe", 12, 75, 12, 30, 0, 0, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2500, 2500 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MACE, ITYPE_MACE, UITYPE_MACE, "Mace", "Mace", 2, 32, 1, 8, 0, 0, 16, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 200, 200 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MORNING_STAR, ITYPE_MACE, UITYPE_MORNSTAR, "Morning Star", "Mace", 3, 40, 1, 10, 0, 0, 26, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 300, 300 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_WAR_HAMMER, ITYPE_MACE, UITYPE_WARHAMMER, "War Hammer", "Hammer", 5, 50, 5, 9, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 600, 600 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SPIKED_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, "Spiked Club", "Club", 4, 20, 3, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 225, 225 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, "Club", "Club", 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_FLAIL, ITYPE_MACE, UITYPE_FLAIL, "Flail", "Flail", 7, 36, 2, 12, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 500, 500 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_MAUL, ITYPE_MACE, UITYPE_MAUL, "Maul", "Maul", 10, 50, 6, 20, 0, 0, 55, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 900, 900 }, +/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, ITYPE_BOW, UITYPE_SHORTBOW, "Short Bow", "Bow", 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 100, 100 }, +/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_HUNTERS_BOW, ITYPE_BOW, UITYPE_HUNTBOW, "Hunter's Bow", "Bow", 3, 40, 2, 5, 0, 0, 20, 0, 35, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 350, 350 }, +/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_HUNTERS_BOW, ITYPE_BOW, UITYPE_LONGBOW, "Long Bow", "Bow", 5, 35, 1, 6, 0, 0, 25, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 250, 250 }, +/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_COMPOSITE_BOW, ITYPE_BOW, UITYPE_COMPBOW, "Composite Bow", "Bow", 7, 45, 3, 6, 0, 0, 25, 0, 40, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 600, 600 }, +/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BATTLE_BOW, ITYPE_BOW, UITYPE_NONE, "Short Battle Bow", "Bow", 9, 45, 3, 7, 0, 0, 30, 0, 50, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 750, 750 }, +/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_WAR_BOW, ITYPE_BOW, UITYPE_BATTLEBOW, "Long Battle Bow", "Bow", 11, 50, 1, 10, 0, 0, 30, 0, 60, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1000, 1000 }, +/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_WAR_BOW, ITYPE_BOW, UITYPE_NONE, "Short War Bow", "Bow", 15, 55, 4, 8, 0, 0, 35, 0, 70, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 1500, 1500 }, +/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_WAR_BOW, ITYPE_BOW, UITYPE_WARBOW, "Long War Bow", "Bow", 19, 60, 1, 14, 0, 0, 45, 0, 80, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 2000, 2000 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_SHORTSTAFF, "Short Staff", "Staff", 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 30, 30 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_STAFF, ITYPE_STAFF, UITYPE_LONGSTAFF, "Long Staff", "Staff", 4, 35, 4, 8, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 100, 100 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_COMPOSITE_STAFF, ITYPE_STAFF, UITYPE_COMPSTAFF, "Composite Staff", "Staff", 6, 45, 5, 10, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 500, 500 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_QUARSTAFF, "Quarter Staff", "Staff", 9, 55, 6, 12, 0, 0, 20, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 1000, 1000 }, +/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_WAR_STAFF, ITYPE_STAFF, UITYPE_WARSTAFF, "War Staff", "Staff", 12, 75, 8, 16, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, FALSE, 1500, 1500 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, "Ring", "Ring", 5, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, FALSE, 1000, 1000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, "Ring", "Ring", 10, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, FALSE, 1000, 1000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, "Ring", "Ring", 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, FALSE, 1000, 1000 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, ITYPE_AMULET, UITYPE_AMULET, "Amulet", "Amulet", 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, FALSE, 1200, 1200 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, ITYPE_AMULET, UITYPE_AMULET, "Amulet", "Amulet", 16, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, FALSE, 1200, 1200 }, +#ifdef HELLFIRE +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_FIRE, ITYPE_MISC, UITYPE_NONE, "Rune of Fire", "Rune", 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RUNEF, SPL_NULL, TRUE, 100, 100 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_LIGHTNING, ITYPE_MISC, UITYPE_NONE, "Rune of Lightning", "Rune", 3, 0, 0, 0, 0, 0, 0, 13, 0, ISPL_NONE, IMISC_RUNEL, SPL_NULL, TRUE, 200, 200 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_FIRE, ITYPE_MISC, UITYPE_NONE, "Greater Rune of Fire", "Rune", 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEF, SPL_NULL, TRUE, 400, 400 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_LIGHTNING, ITYPE_MISC, UITYPE_NONE, "Greater Rune of Lightning", "Rune", 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEL, SPL_NULL, TRUE, 500, 500 }, +/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_STONE, ITYPE_MISC, UITYPE_NONE, "Rune of Stone", "Rune", 7, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_RUNES, SPL_NULL, TRUE, 300, 300 }, +#endif +/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_INVALID, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, // clang-format on }; /** Contains the data related to each item prefix. */ const PLStruct PL_Prefix[] = { // clang-format off - // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal - { "Tin", IPL_TOHIT_CURSE, 6, 10, 3, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, FALSE, 0, 0, -3 }, - { "Brass", IPL_TOHIT_CURSE, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, FALSE, 0, 0, -2 }, - { "Bronze", IPL_TOHIT, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, TRUE, 100, 500, 2 }, - { "Iron", IPL_TOHIT, 6, 10, 4, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, TRUE, 600, 1000, 3 }, - { "Steel", IPL_TOHIT, 11, 15, 6, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, TRUE, 1100, 1500, 5 }, - { "Silver", IPL_TOHIT, 16, 20, 9, PLT_WEAP | PLT_BOW | PLT_MISC, 16, TRUE, TRUE, 1600, 2000, 7 }, - { "Gold", IPL_TOHIT, 21, 30, 12, PLT_WEAP | PLT_BOW | PLT_MISC, 16, TRUE, TRUE, 2100, 3000, 9 }, - { "Platinum", IPL_TOHIT, 31, 40, 16, PLT_WEAP | PLT_BOW , 16, TRUE, TRUE, 3100, 4000, 11 }, - { "Mithril", IPL_TOHIT, 41, 60, 20, PLT_WEAP | PLT_BOW , 16, TRUE, TRUE, 4100, 6000, 13 }, - { "Meteoric", IPL_TOHIT, 61, 80, 23, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 6100, 10000, 15 }, - { "Weird", IPL_TOHIT, 81, 100, 35, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 10100, 14000, 17 }, - { "Strange", IPL_TOHIT, 101, 150, 60, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 14100, 20000, 20 }, + // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal + { "Tin", IPL_TOHIT_CURSE, 6, 10, 3, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, FALSE, 0, 0, -3 }, + { "Brass", IPL_TOHIT_CURSE, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, FALSE, 0, 0, -2 }, + { "Bronze", IPL_TOHIT, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, TRUE, 100, 500, 2 }, + { "Iron", IPL_TOHIT, 6, 10, 4, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, TRUE, 600, 1000, 3 }, + { "Steel", IPL_TOHIT, 11, 15, 6, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, TRUE, 1100, 1500, 5 }, + { "Silver", IPL_TOHIT, 16, 20, 9, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, TRUE, TRUE, 1600, 2000, 7 }, + { "Gold", IPL_TOHIT, 21, 30, 12, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, TRUE, TRUE, 2100, 3000, 9 }, + { "Platinum", IPL_TOHIT, 31, 40, 16, PLT_WEAP | PLT_BOW , GOE_GOOD, TRUE, TRUE, 3100, 4000, 11 }, + { "Mithril", IPL_TOHIT, 41, 60, 20, PLT_WEAP | PLT_BOW , GOE_GOOD, TRUE, TRUE, 4100, 6000, 13 }, + { "Meteoric", IPL_TOHIT, 61, 80, 23, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 6100, 10000, 15 }, + { "Weird", IPL_TOHIT, 81, 100, 35, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 10100, 14000, 17 }, + { "Strange", IPL_TOHIT, 101, 150, 60, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 14100, 20000, 20 }, #ifdef HELLFIRE - { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -8 }, - { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -4 }, - { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -3 }, - { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 250, 450, 3 }, - { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 500, 700, 4 }, - { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 750, 950, 5 }, - { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_STAFF | PLT_BOW , 1, TRUE, TRUE, 1000, 1450, 8 }, - { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 1500, 1950, 10 }, - { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 2000, 2450, 13 }, + { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -8 }, + { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -4 }, + { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -3 }, + { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 250, 450, 3 }, + { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 500, 700, 4 }, + { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 750, 950, 5 }, + { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, TRUE, TRUE, 1000, 1450, 8 }, + { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 1500, 1950, 10 }, + { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 2000, 2450, 13 }, #else - { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_BOW , 0, TRUE, FALSE, 0, 0, -8 }, - { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_BOW , 0, TRUE, FALSE, 0, 0, -4 }, - { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_BOW , 0, TRUE, FALSE, 0, 0, -3 }, - { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 250, 450, 3 }, - { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 500, 700, 4 }, - { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 750, 950, 5 }, - { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_BOW , 1, TRUE, TRUE, 1000, 1450, 8 }, - { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 1500, 1950, 10 }, - { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 2000, 2450, 13 }, + { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -8 }, + { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -4 }, + { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -3 }, + { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 250, 450, 3 }, + { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 500, 700, 4 }, + { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 750, 950, 5 }, + { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_BOW , GOE_EVIL, TRUE, TRUE, 1000, 1450, 8 }, + { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 1500, 1950, 10 }, + { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 2000, 2450, 13 }, #endif - { "Savage", IPL_DAMP, 111, 125, 23, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 2500, 3000, 15 }, - { "Ruthless", IPL_DAMP, 126, 150, 35, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 10100, 15000, 17 }, - { "Merciless", IPL_DAMP, 151, 175, 60, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 15000, 20000, 20 }, - { "Clumsy", IPL_TOHIT_DAMP_CURSE, 50, 75, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -7 }, - { "Dull", IPL_TOHIT_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -5 }, - { "Sharp", IPL_TOHIT_DAMP, 20, 35, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 350, 950, 5 }, - { "Fine", IPL_TOHIT_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 1100, 1700, 7 }, - { "Warrior's", IPL_TOHIT_DAMP, 51, 65, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 1850, 2450, 13 }, - { "Soldier's", IPL_TOHIT_DAMP, 66, 80, 15, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 2600, 3950, 17 }, - { "Lord's", IPL_TOHIT_DAMP, 81, 95, 19, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 4100, 5950, 21 }, - { "Knight's", IPL_TOHIT_DAMP, 96, 110, 23, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 6100, 8450, 26 }, - { "Master's", IPL_TOHIT_DAMP, 111, 125, 28, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 8600, 13000, 30 }, - { "Champion's", IPL_TOHIT_DAMP, 126, 150, 40, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 15200, 24000, 33 }, - { "King's", IPL_TOHIT_DAMP, 151, 175, 28, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 24100, 35000, 38 }, - { "Vulnerable", IPL_ACP_CURSE, 51, 100, 3, PLT_ARMO | PLT_SHLD , 0, TRUE, FALSE, 0, 0, -3 }, - { "Rusted", IPL_ACP_CURSE, 25, 50, 1, PLT_ARMO | PLT_SHLD , 0, TRUE, FALSE, 0, 0, -2 }, - { "Fine", IPL_ACP, 20, 30, 1, PLT_ARMO | PLT_SHLD , 0, TRUE, TRUE, 20, 100, 2 }, - { "Strong", IPL_ACP, 31, 40, 3, PLT_ARMO | PLT_SHLD , 0, TRUE, TRUE, 120, 200, 3 }, - { "Grand", IPL_ACP, 41, 55, 6, PLT_ARMO | PLT_SHLD , 0, TRUE, TRUE, 220, 300, 5 }, - { "Valiant", IPL_ACP, 56, 70, 10, PLT_ARMO | PLT_SHLD , 0, TRUE, TRUE, 320, 400, 7 }, - { "Glorious", IPL_ACP, 71, 90, 14, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 420, 600, 9 }, - { "Blessed", IPL_ACP, 91, 110, 19, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 620, 800, 11 }, - { "Saintly", IPL_ACP, 111, 130, 24, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 820, 1200, 13 }, - { "Awesome", IPL_ACP, 131, 150, 28, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 1220, 2000, 15 }, - { "Holy", IPL_ACP, 151, 170, 35, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 5200, 6000, 17 }, - { "Godly", IPL_ACP, 171, 200, 60, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 6200, 7000, 20 }, - { "Red", IPL_FIRERES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 500, 1500, 2 }, - { "Crimson", IPL_FIRERES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2100, 3000, 2 }, - { "Crimson", IPL_FIRERES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3100, 4000, 2 }, - { "Garnet", IPL_FIRERES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 8200, 12000, 3 }, - { "Ruby", IPL_FIRERES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 17100, 20000, 5 }, - { "Blue", IPL_LIGHTRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 500, 1500, 2 }, - { "Azure", IPL_LIGHTRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2100, 3000, 2 }, - { "Lapis", IPL_LIGHTRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3100, 4000, 2 }, - { "Cobalt", IPL_LIGHTRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 8200, 12000, 3 }, - { "Sapphire", IPL_LIGHTRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 17100, 20000, 5 }, - { "White", IPL_MAGICRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 500, 1500, 2 }, - { "Pearl", IPL_MAGICRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2100, 3000, 2 }, - { "Ivory", IPL_MAGICRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3100, 4000, 2 }, - { "Crystal", IPL_MAGICRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 8200, 12000, 3 }, - { "Diamond", IPL_MAGICRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 17100, 20000, 5 }, - { "Topaz", IPL_ALLRES, 10, 15, 8, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2000, 5000, 3 }, - { "Amber", IPL_ALLRES, 16, 20, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 7400, 10000, 3 }, - { "Jade", IPL_ALLRES, 21, 30, 18, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 11000, 15000, 3 }, - { "Obsidian", IPL_ALLRES, 31, 40, 24, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 24000, 40000, 4 }, - { "Emerald", IPL_ALLRES, 41, 50, 31, PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 61000, 75000, 7 }, - { "Hyena's", IPL_MANA_CURSE, 11, 25, 4, PLT_STAFF | PLT_MISC, 0, FALSE, FALSE, 100, 1000, -2 }, - { "Frog's", IPL_MANA_CURSE, 1, 10, 1, PLT_STAFF | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "Spider's", IPL_MANA, 10, 15, 1, PLT_STAFF | PLT_MISC, 1, FALSE, TRUE, 500, 1000, 2 }, - { "Raven's", IPL_MANA, 15, 20, 5, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 1100, 2000, 3 }, - { "Snake's", IPL_MANA, 21, 30, 9, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 2100, 4000, 5 }, - { "Serpent's", IPL_MANA, 30, 40, 15, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 4100, 6000, 7 }, - { "Drake's", IPL_MANA, 41, 50, 21, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 6100, 10000, 9 }, - { "Dragon's", IPL_MANA, 51, 60, 27, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 10100, 15000, 11 }, - { "Wyrm's", IPL_MANA, 61, 80, 35, PLT_STAFF , 0, FALSE, TRUE, 15100, 19000, 12 }, - { "Hydra's", IPL_MANA, 81, 100, 60, PLT_STAFF , 0, FALSE, TRUE, 19100, 30000, 13 }, - { "Angel's", IPL_SPLLVLADD, 1, 1, 15, PLT_STAFF , 16, FALSE, TRUE, 25000, 25000, 2 }, - { "Arch-Angel's", IPL_SPLLVLADD, 2, 2, 25, PLT_STAFF , 16, FALSE, TRUE, 50000, 50000, 3 }, - { "Plentiful", IPL_CHARGES, 2, 2, 4, PLT_STAFF , 0, FALSE, TRUE, 2000, 2000, 2 }, - { "Bountiful", IPL_CHARGES, 3, 3, 9, PLT_STAFF , 0, FALSE, TRUE, 3000, 3000, 3 }, - { "Flaming", IPL_FIREDAM, 1, 10, 7, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 5000, 5000, 2 }, - { "Lightning", IPL_LIGHTDAM, 2, 20, 18, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 10000, 10000, 2 }, -#ifdef HELLFIRE - { "Jester's", IPL_JESTERS, 1, 1, 7, PLT_WEAP , 0, FALSE, TRUE, 1200, 1200, 3 }, - { "Crystalline", IPL_CRYSTALLINE, 30, 70, 5, PLT_WEAP , 0, FALSE, TRUE, 1000, 3000, 3 }, - { "Doppelganger's", IPL_DOPPELGANGER, 81, 95, 11, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 2000, 2400, 10 }, + { "Savage", IPL_DAMP, 111, 125, 23, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 2500, 3000, 15 }, + { "Ruthless", IPL_DAMP, 126, 150, 35, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 10100, 15000, 17 }, + { "Merciless", IPL_DAMP, 151, 175, 60, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 15000, 20000, 20 }, + { "Clumsy", IPL_TOHIT_DAMP_CURSE, 50, 75, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -7 }, + { "Dull", IPL_TOHIT_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -5 }, + { "Sharp", IPL_TOHIT_DAMP, 20, 35, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 350, 950, 5 }, + { "Fine", IPL_TOHIT_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 1100, 1700, 7 }, + { "Warrior's", IPL_TOHIT_DAMP, 51, 65, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 1850, 2450, 13 }, + { "Soldier's", IPL_TOHIT_DAMP, 66, 80, 15, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 2600, 3950, 17 }, + { "Lord's", IPL_TOHIT_DAMP, 81, 95, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 4100, 5950, 21 }, + { "Knight's", IPL_TOHIT_DAMP, 96, 110, 23, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 6100, 8450, 26 }, + { "Master's", IPL_TOHIT_DAMP, 111, 125, 28, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 8600, 13000, 30 }, + { "Champion's", IPL_TOHIT_DAMP, 126, 150, 40, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 15200, 24000, 33 }, + { "King's", IPL_TOHIT_DAMP, 151, 175, 28, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 24100, 35000, 38 }, + { "Vulnerable", IPL_ACP_CURSE, 51, 100, 3, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, FALSE, 0, 0, -3 }, + { "Rusted", IPL_ACP_CURSE, 25, 50, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, FALSE, 0, 0, -2 }, + { "Fine", IPL_ACP, 20, 30, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, TRUE, 20, 100, 2 }, + { "Strong", IPL_ACP, 31, 40, 3, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, TRUE, 120, 200, 3 }, + { "Grand", IPL_ACP, 41, 55, 6, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, TRUE, 220, 300, 5 }, + { "Valiant", IPL_ACP, 56, 70, 10, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, TRUE, 320, 400, 7 }, + { "Glorious", IPL_ACP, 71, 90, 14, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 420, 600, 9 }, + { "Blessed", IPL_ACP, 91, 110, 19, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 620, 800, 11 }, + { "Saintly", IPL_ACP, 111, 130, 24, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 820, 1200, 13 }, + { "Awesome", IPL_ACP, 131, 150, 28, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 1220, 2000, 15 }, + { "Holy", IPL_ACP, 151, 170, 35, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 5200, 6000, 17 }, + { "Godly", IPL_ACP, 171, 200, 60, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 6200, 7000, 20 }, + { "Red", IPL_FIRERES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 500, 1500, 2 }, + { "Crimson", IPL_FIRERES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 3000, 2 }, + { "Crimson", IPL_FIRERES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3100, 4000, 2 }, + { "Garnet", IPL_FIRERES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8200, 12000, 3 }, + { "Ruby", IPL_FIRERES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 17100, 20000, 5 }, + { "Blue", IPL_LIGHTRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 500, 1500, 2 }, + { "Azure", IPL_LIGHTRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 3000, 2 }, + { "Lapis", IPL_LIGHTRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3100, 4000, 2 }, + { "Cobalt", IPL_LIGHTRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8200, 12000, 3 }, + { "Sapphire", IPL_LIGHTRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 17100, 20000, 5 }, + { "White", IPL_MAGICRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 500, 1500, 2 }, + { "Pearl", IPL_MAGICRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 3000, 2 }, + { "Ivory", IPL_MAGICRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3100, 4000, 2 }, + { "Crystal", IPL_MAGICRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8200, 12000, 3 }, + { "Diamond", IPL_MAGICRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 17100, 20000, 5 }, + { "Topaz", IPL_ALLRES, 10, 15, 8, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2000, 5000, 3 }, + { "Amber", IPL_ALLRES, 16, 20, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 7400, 10000, 3 }, + { "Jade", IPL_ALLRES, 21, 30, 18, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 11000, 15000, 3 }, + { "Obsidian", IPL_ALLRES, 31, 40, 24, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 24000, 40000, 4 }, + { "Emerald", IPL_ALLRES, 41, 50, 31, PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 61000, 75000, 7 }, + { "Hyena's", IPL_MANA_CURSE, 11, 25, 4, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, FALSE, 100, 1000, -2 }, + { "Frog's", IPL_MANA_CURSE, 1, 10, 1, PLT_STAFF | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "Spider's", IPL_MANA, 10, 15, 1, PLT_STAFF | PLT_MISC, GOE_EVIL, FALSE, TRUE, 500, 1000, 2 }, + { "Raven's", IPL_MANA, 15, 20, 5, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 1100, 2000, 3 }, + { "Snake's", IPL_MANA, 21, 30, 9, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 4000, 5 }, + { "Serpent's", IPL_MANA, 30, 40, 15, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 4100, 6000, 7 }, + { "Drake's", IPL_MANA, 41, 50, 21, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 6100, 10000, 9 }, + { "Dragon's", IPL_MANA, 51, 60, 27, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 10100, 15000, 11 }, + { "Wyrm's", IPL_MANA, 61, 80, 35, PLT_STAFF , GOE_ANY, FALSE, TRUE, 15100, 19000, 12 }, + { "Hydra's", IPL_MANA, 81, 100, 60, PLT_STAFF , GOE_ANY, FALSE, TRUE, 19100, 30000, 13 }, + { "Angel's", IPL_SPLLVLADD, 1, 1, 15, PLT_STAFF , GOE_GOOD, FALSE, TRUE, 25000, 25000, 2 }, + { "Arch-Angel's", IPL_SPLLVLADD, 2, 2, 25, PLT_STAFF , GOE_GOOD, FALSE, TRUE, 50000, 50000, 3 }, + { "Plentiful", IPL_CHARGES, 2, 2, 4, PLT_STAFF , GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, + { "Bountiful", IPL_CHARGES, 3, 3, 9, PLT_STAFF , GOE_ANY, FALSE, TRUE, 3000, 3000, 3 }, + { "Flaming", IPL_FIREDAM, 1, 10, 7, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 5000, 5000, 2 }, + { "Lightning", IPL_LIGHTDAM, 2, 20, 18, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 10000, 10000, 2 }, +#ifdef HELLFIRE + { "Jester's", IPL_JESTERS, 1, 1, 7, PLT_WEAP , GOE_ANY, FALSE, TRUE, 1200, 1200, 3 }, + { "Crystalline", IPL_CRYSTALLINE, 30, 70, 5, PLT_WEAP , GOE_ANY, FALSE, TRUE, 1000, 3000, 3 }, + { "Doppelganger's", IPL_DOPPELGANGER, 81, 95, 11, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 2000, 2400, 10 }, #endif - { "", IPL_INVALID, 0, 0, 0, 0 , 0, FALSE, FALSE, 0, 0, 0 }, + { "", IPL_INVALID, 0, 0, 0, 0 , GOE_ANY, FALSE, FALSE, 0, 0, 0 }, // clang-format on }; /** Contains the data related to each item suffix. */ const PLStruct PL_Suffix[] = { - // clang-format off - // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal +// clang-format off + // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal #ifdef HELLFIRE - { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 100, 200, 2 }, - { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 1300, 1500, 3 }, + { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 100, 200, 2 }, + { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 1300, 1500, 3 }, #else - { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 100, 200, 2 }, - { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 1300, 1500, 3 }, + { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 100, 200, 2 }, + { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1300, 1500, 3 }, #endif - { "slaying", IPL_DAMMOD, 6, 8, 15, PLT_WEAP , 0, FALSE, TRUE, 2600, 3000, 5 }, - { "gore", IPL_DAMMOD, 9, 12, 25, PLT_WEAP , 0, FALSE, TRUE, 4100, 5000, 8 }, - { "carnage", IPL_DAMMOD, 13, 16, 35, PLT_WEAP , 0, FALSE, TRUE, 5100, 10000, 10 }, - { "slaughter", IPL_DAMMOD, 17, 20, 60, PLT_WEAP , 0, FALSE, TRUE, 10100, 15000, 13 }, - { "pain", IPL_GETHIT_CURSE, 2, 4, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, 1, FALSE, FALSE, 0, 0, -4 }, - { "tears", IPL_GETHIT_CURSE, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "health", IPL_GETHIT, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, 16, FALSE, TRUE, 200, 200, 2 }, - { "protection", IPL_GETHIT, 2, 2, 6, PLT_ARMO | PLT_SHLD , 16, FALSE, TRUE, 400, 800, 4 }, - { "absorption", IPL_GETHIT, 3, 3, 12, PLT_ARMO | PLT_SHLD , 16, FALSE, TRUE, 1001, 2500, 10 }, - { "deflection", IPL_GETHIT, 4, 4, 20, PLT_ARMO , 16, FALSE, TRUE, 2500, 6500, 15 }, - { "osmosis", IPL_GETHIT, 5, 6, 50, PLT_ARMO , 16, FALSE, TRUE, 7500, 10000, 20 }, - { "frailty", IPL_STR_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, + { "slaying", IPL_DAMMOD, 6, 8, 15, PLT_WEAP , GOE_ANY, FALSE, TRUE, 2600, 3000, 5 }, + { "gore", IPL_DAMMOD, 9, 12, 25, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4100, 5000, 8 }, + { "carnage", IPL_DAMMOD, 13, 16, 35, PLT_WEAP , GOE_ANY, FALSE, TRUE, 5100, 10000, 10 }, + { "slaughter", IPL_DAMMOD, 17, 20, 60, PLT_WEAP , GOE_ANY, FALSE, TRUE, 10100, 15000, 13 }, + { "pain", IPL_GETHIT_CURSE, 2, 4, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -4 }, + { "tears", IPL_GETHIT_CURSE, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "health", IPL_GETHIT, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_GOOD, FALSE, TRUE, 200, 200, 2 }, + { "protection", IPL_GETHIT, 2, 2, 6, PLT_ARMO | PLT_SHLD , GOE_GOOD, FALSE, TRUE, 400, 800, 4 }, + { "absorption", IPL_GETHIT, 3, 3, 12, PLT_ARMO | PLT_SHLD , GOE_GOOD, FALSE, TRUE, 1001, 2500, 10 }, + { "deflection", IPL_GETHIT, 4, 4, 20, PLT_ARMO , GOE_GOOD, FALSE, TRUE, 2500, 6500, 15 }, + { "osmosis", IPL_GETHIT, 5, 6, 50, PLT_ARMO , GOE_GOOD, FALSE, TRUE, 7500, 10000, 20 }, + { "frailty", IPL_STR_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, #ifdef HELLFIRE - { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, + { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, #else - { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, + { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, #endif - { "might", IPL_STR, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 1200, 2000, 3 }, - { "power", IPL_STR, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2200, 3000, 4 }, - { "giants", IPL_STR, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3200, 5000, 7 }, - { "titans", IPL_STR, 21, 30, 23, PLT_WEAP | PLT_MISC, 0, FALSE, TRUE, 5200, 10000, 10 }, - { "paralysis", IPL_DEX_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, + { "might", IPL_STR, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 1200, 2000, 3 }, + { "power", IPL_STR, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, + { "giants", IPL_STR, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, + { "titans", IPL_STR, 21, 30, 23, PLT_WEAP | PLT_MISC, GOE_ANY, FALSE, TRUE, 5200, 10000, 10 }, + { "paralysis", IPL_DEX_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, #ifdef HELLFIRE - { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, + { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, #else - { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, + { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, #endif - { "skill", IPL_DEX, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 1200, 2000, 3 }, - { "accuracy", IPL_DEX, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2200, 3000, 4 }, - { "precision", IPL_DEX, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3200, 5000, 7 }, - { "perfection", IPL_DEX, 21, 30, 23, PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 5200, 10000, 10 }, - { "the fool", IPL_MAG_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, - { "dyslexia", IPL_MAG_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "magic", IPL_MAG, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, - { "the mind", IPL_MAG, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 1200, 2000, 3 }, - { "brilliance", IPL_MAG, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2200, 3000, 4 }, - { "sorcery", IPL_MAG, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3200, 5000, 7 }, - { "wizardry", IPL_MAG, 21, 30, 23, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 5200, 10000, 10 }, + { "skill", IPL_DEX, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 1200, 2000, 3 }, + { "accuracy", IPL_DEX, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, + { "precision", IPL_DEX, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, + { "perfection", IPL_DEX, 21, 30, 23, PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 5200, 10000, 10 }, + { "the fool", IPL_MAG_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, + { "dyslexia", IPL_MAG_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "magic", IPL_MAG, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, + { "the mind", IPL_MAG, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 1200, 2000, 3 }, + { "brilliance", IPL_MAG, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, + { "sorcery", IPL_MAG, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, + { "wizardry", IPL_MAG, 21, 30, 23, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 5200, 10000, 10 }, #ifdef HELLFIRE - { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, - { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 200, 1000, 2 }, + { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, + { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 200, 1000, 2 }, #else - { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, - { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 200, 1000, 2 }, + { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, + { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 200, 1000, 2 }, #endif - { "zest", IPL_VIT, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 1200, 2000, 3 }, - { "vim", IPL_VIT, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 2200, 3000, 4 }, - { "vigor", IPL_VIT, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 3200, 5000, 7 }, - { "life", IPL_VIT, 21, 30, 23, PLT_MISC, 16, FALSE, TRUE, 5200, 10000, 10 }, + { "zest", IPL_VIT, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 1200, 2000, 3 }, + { "vim", IPL_VIT, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 2200, 3000, 4 }, + { "vigor", IPL_VIT, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 3200, 5000, 7 }, + { "life", IPL_VIT, 21, 30, 23, PLT_MISC, GOE_GOOD, FALSE, TRUE, 5200, 10000, 10 }, #ifdef HELLFIRE - { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -10 }, - { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -5 }, - { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 800, 4000, 5 }, - { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 4800, 8000, 10 }, + { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -10 }, + { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -5 }, + { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 800, 4000, 5 }, + { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 4800, 8000, 10 }, #else - { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -10 }, - { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -5 }, - { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 800, 4000, 5 }, - { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 4800, 8000, 10 }, + { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -10 }, + { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -5 }, + { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 800, 4000, 5 }, + { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 4800, 8000, 10 }, #endif - { "the stars", IPL_ATTRIBS, 8, 11, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 8800, 12000, 15 }, - { "the heavens", IPL_ATTRIBS, 12, 15, 25, PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 12800, 20000, 20 }, - { "the zodiac", IPL_ATTRIBS, 16, 20, 30, PLT_MISC, 0, FALSE, TRUE, 20800, 40000, 30 }, - { "the vulture", IPL_LIFE_CURSE, 11, 25, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, 1, FALSE, FALSE, 0, 0, -4 }, - { "the jackal", IPL_LIFE_CURSE, 1, 10, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "the fox", IPL_LIFE, 10, 15, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 100, 1000, 2 }, - { "the jaguar", IPL_LIFE, 16, 20, 5, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 1100, 2000, 3 }, - { "the eagle", IPL_LIFE, 21, 30, 9, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 2100, 4000, 5 }, - { "the wolf", IPL_LIFE, 30, 40, 15, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 4100, 6000, 7 }, - { "the tiger", IPL_LIFE, 41, 50, 21, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 6100, 10000, 9 }, - { "the lion", IPL_LIFE, 51, 60, 27, PLT_ARMO | PLT_MISC, 0, FALSE, TRUE, 10100, 15000, 11 }, - { "the mammoth", IPL_LIFE, 61, 80, 35, PLT_ARMO , 0, FALSE, TRUE, 15100, 19000, 12 }, - { "the whale", IPL_LIFE, 81, 100, 60, PLT_ARMO , 0, FALSE, TRUE, 19100, 30000, 13 }, - { "fragility", IPL_DUR_CURSE, 100, 100, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP , 1, FALSE, FALSE, 0, 0, -4 }, - { "brittleness", IPL_DUR_CURSE, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , 1, FALSE, FALSE, 0, 0, -2 }, + { "the stars", IPL_ATTRIBS, 8, 11, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8800, 12000, 15 }, + { "the heavens", IPL_ATTRIBS, 12, 15, 25, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 12800, 20000, 20 }, + { "the zodiac", IPL_ATTRIBS, 16, 20, 30, PLT_MISC, GOE_ANY, FALSE, TRUE, 20800, 40000, 30 }, + { "the vulture", IPL_LIFE_CURSE, 11, 25, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -4 }, + { "the jackal", IPL_LIFE_CURSE, 1, 10, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "the fox", IPL_LIFE, 10, 15, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 100, 1000, 2 }, + { "the jaguar", IPL_LIFE, 16, 20, 5, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 1100, 2000, 3 }, + { "the eagle", IPL_LIFE, 21, 30, 9, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 4000, 5 }, + { "the wolf", IPL_LIFE, 30, 40, 15, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 4100, 6000, 7 }, + { "the tiger", IPL_LIFE, 41, 50, 21, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 6100, 10000, 9 }, + { "the lion", IPL_LIFE, 51, 60, 27, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 10100, 15000, 11 }, + { "the mammoth", IPL_LIFE, 61, 80, 35, PLT_ARMO , GOE_ANY, FALSE, TRUE, 15100, 19000, 12 }, + { "the whale", IPL_LIFE, 81, 100, 60, PLT_ARMO , GOE_ANY, FALSE, TRUE, 19100, 30000, 13 }, + { "fragility", IPL_DUR_CURSE, 100, 100, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, FALSE, FALSE, 0, 0, -4 }, + { "brittleness", IPL_DUR_CURSE, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, #ifdef HELLFIRE - { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 100, 100, 2 }, - { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 200, 200, 2 }, - { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 300, 300, 2 }, - { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 600, 600, 5 }, + { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 100, 100, 2 }, + { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, + { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 300, 300, 2 }, + { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 600, 600, 5 }, #else - { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , 0, FALSE, TRUE, 100, 100, 2 }, - { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP , 0, FALSE, TRUE, 200, 200, 2 }, - { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP , 0, FALSE, TRUE, 300, 300, 2 }, - { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP , 0, FALSE, TRUE, 600, 600, 5 }, + { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 100, 100, 2 }, + { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, + { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 300, 300, 2 }, + { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 600, 600, 5 }, #endif - { "the dark", IPL_LIGHT_CURSE, 4, 4, 6, PLT_ARMO | PLT_WEAP | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, - { "the night", IPL_LIGHT_CURSE, 2, 2, 3, PLT_ARMO | PLT_WEAP | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "light", IPL_LIGHT, 2, 2, 4, PLT_ARMO | PLT_WEAP | PLT_MISC, 16, FALSE, TRUE, 750, 750, 2 }, - { "radiance", IPL_LIGHT, 4, 4, 8, PLT_ARMO | PLT_WEAP | PLT_MISC, 16, FALSE, TRUE, 1500, 1500, 3 }, - { "flame", IPL_FIRE_ARROWS, 1, 3, 1, PLT_BOW , 0, FALSE, TRUE, 2000, 2000, 2 }, - { "fire", IPL_FIRE_ARROWS, 1, 6, 11, PLT_BOW , 0, FALSE, TRUE, 4000, 4000, 4 }, - { "burning", IPL_FIRE_ARROWS, 1, 16, 35, PLT_BOW , 0, FALSE, TRUE, 6000, 6000, 6 }, - { "shock", IPL_LIGHT_ARROWS, 1, 6, 13, PLT_BOW , 0, FALSE, TRUE, 6000, 6000, 2 }, - { "lightning", IPL_LIGHT_ARROWS, 1, 10, 21, PLT_BOW , 0, FALSE, TRUE, 8000, 8000, 4 }, - { "thunder", IPL_LIGHT_ARROWS, 1, 20, 60, PLT_BOW , 0, FALSE, TRUE, 12000, 12000, 6 }, - { "many", IPL_DUR, 100, 100, 3, PLT_BOW , 0, FALSE, TRUE, 750, 750, 2 }, - { "plenty", IPL_DUR, 200, 200, 7, PLT_BOW , 0, FALSE, TRUE, 1500, 1500, 3 }, - { "thorns", IPL_THORNS, 1, 3, 1, PLT_ARMO | PLT_SHLD , 0, FALSE, TRUE, 500, 500, 2 }, - { "corruption", IPL_NOMANA, 0, 0, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP , 1, FALSE, FALSE, -1000, -1000, 2 }, - { "thieves", IPL_ABSHALFTRAP, 0, 0, 11, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 1500, 1500, 2 }, - { "the bear", IPL_KNOCKBACK, 0, 0, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , 1, FALSE, TRUE, 750, 750, 2 }, - { "the bat", IPL_STEALMANA, 3, 3, 8, PLT_WEAP , 0, FALSE, TRUE, 7500, 7500, 3 }, - { "vampires", IPL_STEALMANA, 5, 5, 19, PLT_WEAP , 0, FALSE, TRUE, 15000, 15000, 3 }, - { "the leech", IPL_STEALLIFE, 3, 3, 8, PLT_WEAP , 0, FALSE, TRUE, 7500, 7500, 3 }, - { "blood", IPL_STEALLIFE, 5, 5, 19, PLT_WEAP , 0, FALSE, TRUE, 15000, 15000, 3 }, + { "the dark", IPL_LIGHT_CURSE, 4, 4, 6, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, + { "the night", IPL_LIGHT_CURSE, 2, 2, 3, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "light", IPL_LIGHT, 2, 2, 4, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, FALSE, TRUE, 750, 750, 2 }, + { "radiance", IPL_LIGHT, 4, 4, 8, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, FALSE, TRUE, 1500, 1500, 3 }, + { "flame", IPL_FIRE_ARROWS, 1, 3, 1, PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, + { "fire", IPL_FIRE_ARROWS, 1, 6, 11, PLT_BOW , GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, + { "burning", IPL_FIRE_ARROWS, 1, 16, 35, PLT_BOW , GOE_ANY, FALSE, TRUE, 6000, 6000, 6 }, + { "shock", IPL_LIGHT_ARROWS, 1, 6, 13, PLT_BOW , GOE_ANY, FALSE, TRUE, 6000, 6000, 2 }, + { "lightning", IPL_LIGHT_ARROWS, 1, 10, 21, PLT_BOW , GOE_ANY, FALSE, TRUE, 8000, 8000, 4 }, + { "thunder", IPL_LIGHT_ARROWS, 1, 20, 60, PLT_BOW , GOE_ANY, FALSE, TRUE, 12000, 12000, 6 }, + { "many", IPL_DUR, 100, 100, 3, PLT_BOW , GOE_ANY, FALSE, TRUE, 750, 750, 2 }, + { "plenty", IPL_DUR, 200, 200, 7, PLT_BOW , GOE_ANY, FALSE, TRUE, 1500, 1500, 3 }, + { "thorns", IPL_THORNS, 1, 3, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, FALSE, TRUE, 500, 500, 2 }, + { "corruption", IPL_NOMANA, 0, 0, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, FALSE, FALSE, -1000, -1000, 2 }, + { "thieves", IPL_ABSHALFTRAP, 0, 0, 11, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 1500, 1500, 2 }, + { "the bear", IPL_KNOCKBACK, 0, 0, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, FALSE, TRUE, 750, 750, 2 }, + { "the bat", IPL_STEALMANA, 3, 3, 8, PLT_WEAP , GOE_ANY, FALSE, TRUE, 7500, 7500, 3 }, + { "vampires", IPL_STEALMANA, 5, 5, 19, PLT_WEAP , GOE_ANY, FALSE, TRUE, 15000, 15000, 3 }, + { "the leech", IPL_STEALLIFE, 3, 3, 8, PLT_WEAP , GOE_ANY, FALSE, TRUE, 7500, 7500, 3 }, + { "blood", IPL_STEALLIFE, 5, 5, 19, PLT_WEAP , GOE_ANY, FALSE, TRUE, 15000, 15000, 3 }, #ifdef HELLFIRE - { "piercing", IPL_TARGAC, 1, 1, 1, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 1000, 1000, 3 }, - { "puncturing", IPL_TARGAC, 2, 2, 9, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 2000, 2000, 6 }, - { "bashing", IPL_TARGAC, 3, 3, 17, PLT_WEAP , 0, FALSE, TRUE, 4000, 4000, 12 }, + { "piercing", IPL_TARGAC, 1, 1, 1, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1000, 1000, 3 }, + { "puncturing", IPL_TARGAC, 2, 2, 9, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 6 }, + { "bashing", IPL_TARGAC, 3, 3, 17, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4000, 4000, 12 }, #else - { "piercing", IPL_TARGAC, 2, 6, 1, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 1000, 1000, 3 }, - { "puncturing", IPL_TARGAC, 4, 12, 9, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 2000, 2000, 6 }, - { "bashing", IPL_TARGAC, 8, 24, 17, PLT_WEAP , 0, FALSE, TRUE, 4000, 4000, 12 }, + { "piercing", IPL_TARGAC, 2, 6, 1, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1000, 1000, 3 }, + { "puncturing", IPL_TARGAC, 4, 12, 9, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 6 }, + { "bashing", IPL_TARGAC, 8, 24, 17, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4000, 4000, 12 }, #endif - { "readiness", IPL_FASTATTACK, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 2000, 2000, 2 }, - { "swiftness", IPL_FASTATTACK, 2, 2, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 4000, 4000, 4 }, - { "speed", IPL_FASTATTACK, 3, 3, 19, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 8000, 8000, 8 }, - { "haste", IPL_FASTATTACK, 4, 4, 27, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 16000, 16000, 16 }, - { "balance", IPL_FASTRECOVER, 1, 1, 1, PLT_ARMO | PLT_MISC, 0, FALSE, TRUE, 2000, 2000, 2 }, - { "stability", IPL_FASTRECOVER, 2, 2, 10, PLT_ARMO | PLT_MISC, 0, FALSE, TRUE, 4000, 4000, 4 }, - { "harmony", IPL_FASTRECOVER, 3, 3, 20, PLT_ARMO | PLT_MISC, 0, FALSE, TRUE, 8000, 8000, 8 }, - { "blocking", IPL_FASTBLOCK, 1, 1, 5, PLT_SHLD , 0, FALSE, TRUE, 4000, 4000, 4 }, + { "readiness", IPL_FASTATTACK, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, + { "swiftness", IPL_FASTATTACK, 2, 2, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, + { "speed", IPL_FASTATTACK, 3, 3, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 8000, 8000, 8 }, + { "haste", IPL_FASTATTACK, 4, 4, 27, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 16000, 16000, 16 }, + { "balance", IPL_FASTRECOVER, 1, 1, 1, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, + { "stability", IPL_FASTRECOVER, 2, 2, 10, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, + { "harmony", IPL_FASTRECOVER, 3, 3, 20, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 8000, 8000, 8 }, + { "blocking", IPL_FASTBLOCK, 1, 1, 5, PLT_SHLD , GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, #ifdef HELLFIRE - { "devastation", IPL_DEVASTATION, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 1200, 1200, 3 }, - { "decay", IPL_DECAY, 150, 250, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 200, 200, 2 }, - { "peril", IPL_PERIL, 1, 1, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 500, 500, 1 }, + { "devastation", IPL_DEVASTATION, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 1200, 1200, 3 }, + { "decay", IPL_DECAY, 150, 250, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, + { "peril", IPL_PERIL, 1, 1, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 500, 500, 1 }, #endif - { "", IPL_INVALID, 0, 0, 0, 0 , 0, FALSE, FALSE, 0, 0, 0 }, + { "", IPL_INVALID, 0, 0, 0, 0 , GOE_ANY, FALSE, FALSE, 0, 0, 0 }, // clang-format on }; diff --git a/Source/items.cpp b/Source/items.cpp index fd55cb78..ac5ea0c9 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -306,6 +306,7 @@ char *off_4A5AC4 = "SItem"; int idoppely = 16; /** Maps from Griswold premium item number to a quality level delta as added to the base quality level. */ int premiumlvladd[SMITH_PREMIUM_ITEMS] = { + // clang-format off -1, -1, #ifdef HELLFIRE @@ -327,6 +328,7 @@ int premiumlvladd[SMITH_PREMIUM_ITEMS] = { 3, 3, #endif + // clang-format on }; #ifdef HELLFIRE @@ -438,14 +440,14 @@ int items_42342E(int i) res = 0; for (j = 0; j < NUM_INVLOC; j++) { - if (plr[i].InvBody[j]._iClass != ITYPE_NONE && - (plr[i].InvBody[j]._itype == ITYPE_LARMOR || plr[i].InvBody[j]._itype == ITYPE_MARMOR || plr[i].InvBody[j]._itype == ITYPE_HARMOR) - && res < plr[i].InvBody[j]._iIvalue) + if (plr[i].InvBody[j]._iClass != ITYPE_NONE + && (plr[i].InvBody[j]._itype == ITYPE_LARMOR || plr[i].InvBody[j]._itype == ITYPE_MARMOR || plr[i].InvBody[j]._itype == ITYPE_HARMOR) + && res < plr[i].InvBody[j]._iIvalue) res = plr[i].InvBody[j]._iIvalue; } for (j = 0; j < NUM_INV_GRID_ELEM; j++) { - if (plr[i].InvList[j]._iClass != ITYPE_NONE && - (plr[i].InvList[j]._itype == ITYPE_LARMOR || plr[i].InvList[j]._itype == ITYPE_MARMOR || plr[i].InvList[j]._itype == ITYPE_HARMOR) + if (plr[i].InvList[j]._iClass != ITYPE_NONE + && (plr[i].InvList[j]._itype == ITYPE_LARMOR || plr[i].InvList[j]._itype == ITYPE_MARMOR || plr[i].InvList[j]._itype == ITYPE_HARMOR) && res < plr[i].InvList[j]._iIvalue) res = plr[i].InvList[j]._iIvalue; } @@ -576,13 +578,13 @@ void AddInitItems() item[i]._iSeed = GetRndSeed(); SetRndSeed(item[i]._iSeed); #ifdef HELLFIRE - if (random_(12, 2)) + if (random_(12, 2) != 0) GetItemAttrs(i, IDI_HEAL, curlv); else GetItemAttrs(i, IDI_MANA, curlv); item[i]._iCreateInfo = curlv - CF_PREGEN; #else - if (random_(12, 2)) + if (random_(12, 2) != 0) GetItemAttrs(i, IDI_HEAL, currlevel); else GetItemAttrs(i, IDI_MANA, currlevel); @@ -729,7 +731,7 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) maxd += itm->_iMaxDam; if (itm->_iSpell != SPL_NULL) { - spl |= (unsigned __int64)1 << (itm->_iSpell - 1); + spl |= SPELLBIT(itm->_iSpell); } if (itm->_iMagical == ITEM_QUALITY_NORMAL || itm->_iIdentified) { @@ -895,9 +897,9 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) else if (plr[p].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) plr[p]._pIAC -= plr[p].InvBody[INVLOC_HAND_RIGHT]._iAC / 2; } else if (plr[p].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_STAFF && plr[p].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_STAFF && plr[p].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_BOW && plr[p].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_BOW) { - plr[p]._pDamageMod += plr[p]._pLevel * plr[p]._pVitality / 100; + plr[p]._pDamageMod += plr[p]._pLevel * plr[p]._pVitality / 100; } - plr[p]._pIAC += plr[p]._pLevel/4; + plr[p]._pIAC += plr[p]._pLevel / 4; } #endif else { @@ -1148,14 +1150,14 @@ void CalcPlrScrolls(int p) for (i = 0; i < plr[p]._pNumInv; i++) { if (plr[p].InvList[i]._itype != ITYPE_NONE && (plr[p].InvList[i]._iMiscId == IMISC_SCROLL || plr[p].InvList[i]._iMiscId == IMISC_SCROLLT)) { if (plr[p].InvList[i]._iStatFlag) - plr[p]._pScrlSpells |= 1ULL << (plr[p].InvList[i]._iSpell - 1); + plr[p]._pScrlSpells |= SPELLBIT(plr[p].InvList[i]._iSpell); } } for (j = 0; j < MAXBELTITEMS; j++) { if (plr[p].SpdList[j]._itype != ITYPE_NONE && (plr[p].SpdList[j]._iMiscId == IMISC_SCROLL || plr[p].SpdList[j]._iMiscId == IMISC_SCROLLT)) { if (plr[p].SpdList[j]._iStatFlag) - plr[p]._pScrlSpells |= 1ULL << (plr[p].SpdList[j]._iSpell - 1); + plr[p]._pScrlSpells |= SPELLBIT(plr[p].SpdList[j]._iSpell); } } EnsureValidReadiedSpell(plr[p]); @@ -1167,7 +1169,7 @@ void CalcPlrStaff(int p) if (plr[p].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE && plr[p].InvBody[INVLOC_HAND_LEFT]._iStatFlag && plr[p].InvBody[INVLOC_HAND_LEFT]._iCharges > 0) { - plr[p]._pISpells |= (__int64)1 << (plr[p].InvBody[INVLOC_HAND_LEFT]._iSpell - 1); + plr[p]._pISpells |= SPELLBIT(plr[p].InvBody[INVLOC_HAND_LEFT]._iSpell); } } @@ -1475,7 +1477,7 @@ void CreatePlrItems(int p) #ifdef HELLFIRE case PC_MONK: - SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_LEFT], 36); + SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_LEFT], IDI_SHORTSTAFF); GetPlrHandSeed(&plr[p].InvBody[INVLOC_HAND_LEFT]); SetPlrHandItem(&plr[p].SpdList[0], IDI_HEAL); GetPlrHandSeed(&plr[p].SpdList[0]); @@ -1484,10 +1486,10 @@ void CreatePlrItems(int p) GetPlrHandSeed(&plr[p].SpdList[1]); break; case PC_BARD: - SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_LEFT], 37); + SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_LEFT], IDI_BARDSWORD); GetPlrHandSeed(&plr[p].InvBody[INVLOC_HAND_LEFT]); - SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_RIGHT], 38); + SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_RIGHT], IDI_BARDDAGGER); GetPlrHandSeed(&plr[p].InvBody[INVLOC_HAND_RIGHT]); SetPlrHandItem(&plr[p].SpdList[0], IDI_HEAL); GetPlrHandSeed(&plr[p].SpdList[0]); @@ -1496,10 +1498,10 @@ void CreatePlrItems(int p) GetPlrHandSeed(&plr[p].SpdList[1]); break; case PC_BARBARIAN: - SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_LEFT], 139); + SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_LEFT], 139); // TODO: add more enums to items GetPlrHandSeed(&plr[p].InvBody[INVLOC_HAND_LEFT]); - SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_RIGHT], 2); + SetPlrHandItem(&plr[p].InvBody[INVLOC_HAND_RIGHT], IDI_WARRSHLD); GetPlrHandSeed(&plr[p].InvBody[INVLOC_HAND_RIGHT]); SetPlrHandItem(&plr[p].SpdList[0], IDI_HEAL); GetPlrHandSeed(&plr[p].SpdList[0]); @@ -1732,12 +1734,12 @@ void GetBookSpell(int i, int lvl) #ifdef HELLFIRE else #endif - if (spelldata[bs].sType == STYPE_LIGHTNING) + if (spelldata[bs].sType == STYPE_LIGHTNING) item[i]._iCurs = ICURS_BOOK_BLUE; #ifdef HELLFIRE else #endif - if (spelldata[bs].sType == STYPE_MAGIC) + if (spelldata[bs].sType == STYPE_MAGIC) item[i]._iCurs = ICURS_BOOK_GREY; } @@ -1804,7 +1806,7 @@ void GetStaffSpell(int i, int lvl, BOOL onlygood) char istr[64]; #ifndef HELLFIRE - if (!random_(17, 4)) { + if (random_(17, 4) == 0) { GetItemPower(i, lvl >> 1, lvl, PLT_STAFF, onlygood); } else #endif @@ -2442,21 +2444,21 @@ void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) pre = random_(23, 4); post = random_(23, 3); if (pre != 0 && post == 0) { - if (random_(23, 2)) + if (random_(23, 2) != 0) post = 1; else pre = 0; } preidx = -1; sufidx = -1; - goe = 0; - if (!onlygood && random_(0, 3)) + goe = GOE_ANY; + if (!onlygood && random_(0, 3) != 0) onlygood = TRUE; - if (!pre) { + if (pre == 0) { nt = 0; for (j = 0; PL_Prefix[j].PLPower != -1; j++) { if (flgs & PL_Prefix[j].PLIType) { - if (PL_Prefix[j].PLMinLvl >= minlvl && PL_Prefix[j].PLMinLvl <= maxlvl && (!onlygood || PL_Prefix[j].PLOk) && (flgs != 256 || PL_Prefix[j].PLPower != 15)) { + if (PL_Prefix[j].PLMinLvl >= minlvl && PL_Prefix[j].PLMinLvl <= maxlvl && (!onlygood || PL_Prefix[j].PLOk) && (flgs != PLT_STAFF || PL_Prefix[j].PLPower != IPL_CHARGES)) { l[nt] = j; nt++; if (PL_Prefix[j].PLDouble) { @@ -2488,7 +2490,7 @@ void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) for (j = 0; PL_Suffix[j].PLPower != -1; j++) { if (PL_Suffix[j].PLIType & flgs && PL_Suffix[j].PLMinLvl >= minlvl && PL_Suffix[j].PLMinLvl <= maxlvl - && (goe | PL_Suffix[j].PLGOE) != 0x11 + && (goe | PL_Suffix[j].PLGOE) != (GOE_GOOD | GOE_EVIL) && (!onlygood || PL_Suffix[j].PLOk)) { l[nl] = j; nl++; @@ -2511,7 +2513,16 @@ void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) } } if (!control_WriteStringToBuffer((BYTE *)item[i]._iIName)) { +#ifdef HELLFIRE + int aii = item[i].IDidx; + if (AllItemsList[aii].iSName) + strcpy(item[i]._iIName, AllItemsList[aii].iSName); + else + item[i]._iName[0] = 0; +#else strcpy(item[i]._iIName, AllItemsList[item[i].IDidx].iSName); +#endif + if (preidx != -1) { sprintf(istr, "%s %s", PL_Prefix[preidx].PLName, item[i]._iIName); strcpy(item[i]._iIName, istr); @@ -2557,7 +2568,7 @@ void GetItemBonus(int i, int idata, int minlvl, int maxlvl, BOOL onlygood) #ifdef HELLFIRE if (allowspells) #endif - GetStaffSpell(i, maxlvl, onlygood); + GetStaffSpell(i, maxlvl, onlygood); #ifdef HELLFIRE else GetItemPower(i, minlvl, maxlvl, 0x100, onlygood); @@ -2615,15 +2626,15 @@ int RndItem(int m) for (i = 0; AllItemsList[i].iLoc != ILOC_INVALID; i++) { if (AllItemsList[i].iRnd == IDROP_DOUBLE && monster[m].mLevel >= AllItemsList[i].iMinMLvl #ifdef HELLFIRE - && ri < 512 + && ri < 512 #endif ) { ril[ri] = i; ri++; } - if (AllItemsList[i].iRnd && monster[m].mLevel >= AllItemsList[i].iMinMLvl + if (AllItemsList[i].iRnd != IDROP_NEVER && monster[m].mLevel >= AllItemsList[i].iMinMLvl #ifdef HELLFIRE - && ri < 512 + && ri < 512 #endif ) { ril[ri] = i; @@ -2654,7 +2665,7 @@ int RndUItem(int m) ri = 0; for (i = 0; AllItemsList[i].iLoc != ILOC_INVALID; i++) { okflag = TRUE; - if (!AllItemsList[i].iRnd) + if (AllItemsList[i].iRnd == IDROP_NEVER) okflag = FALSE; if (m != -1) { if (monster[m].mLevel < AllItemsList[i].iMinMLvl) @@ -2706,9 +2717,9 @@ int RndAllItems() ri = 0; for (i = 0; AllItemsList[i].iLoc != ILOC_INVALID; i++) { #ifdef HELLFIRE - if (AllItemsList[i].iRnd && 2 * curlv >= AllItemsList[i].iMinMLvl && ri < 512) { + if (AllItemsList[i].iRnd != IDROP_NEVER && 2 * curlv >= AllItemsList[i].iMinMLvl && ri < 512) { #else - if (AllItemsList[i].iRnd && 2 * currlevel >= AllItemsList[i].iMinMLvl) { + if (AllItemsList[i].iRnd != IDROP_NEVER && 2 * currlevel >= AllItemsList[i].iMinMLvl) { #endif ril[ri] = i; ri++; @@ -2735,7 +2746,7 @@ int RndTypeItems(int itype, int imid) ri = 0; for (i = 0; AllItemsList[i].iLoc != ILOC_INVALID; i++) { okflag = TRUE; - if (!AllItemsList[i].iRnd) + if (AllItemsList[i].iRnd == IDROP_NEVER) okflag = FALSE; #ifdef HELLFIRE if (lvl << 1 < AllItemsList[i].iMinMLvl) @@ -3064,12 +3075,12 @@ void SetupAllUseful(int ii, int iseed, int lvl) break; } #else - if (random_(34, 2)) + if (random_(34, 2) != 0) idx = IDI_HEAL; else idx = IDI_MANA; - if (lvl > 1 && !random_(34, 3)) + if (lvl > 1 && random_(34, 3) == 0) idx = IDI_PORTAL; #endif @@ -3607,7 +3618,7 @@ void DoRecharge(int pnum, int cii) } else { pi = &p->InvBody[cii]; } - if (pi->_itype == ITYPE_STAFF && pi->_iSpell) { + if (pi->_itype == ITYPE_STAFF && pi->_iSpell != SPL_NULL) { r = GetSpellBookLevel(pi->_iSpell); r = random_(38, p->_pLevel / r) + 1; RechargeItem(pi, r); @@ -3999,7 +4010,7 @@ void PrintItemPower(char plidx, ItemStruct *x) sprintf(tempstr, "Fire hit damage: %i", x->_iFMinDam); else #endif - sprintf(tempstr, "Fire hit damage: %i-%i", x->_iFMinDam, x->_iFMaxDam); + sprintf(tempstr, "Fire hit damage: %i-%i", x->_iFMinDam, x->_iFMaxDam); break; case IPL_LIGHTDAM: #ifdef HELLFIRE @@ -4007,7 +4018,7 @@ void PrintItemPower(char plidx, ItemStruct *x) sprintf(tempstr, "Lightning hit damage: %i", x->_iLMinDam); else #endif - sprintf(tempstr, "Lightning hit damage: %i-%i", x->_iLMinDam, x->_iLMaxDam); + sprintf(tempstr, "Lightning hit damage: %i-%i", x->_iLMinDam, x->_iLMaxDam); break; case IPL_STR: case IPL_STR_CURSE: @@ -4067,7 +4078,7 @@ void PrintItemPower(char plidx, ItemStruct *x) sprintf(tempstr, "fire arrows damage: %i", x->_iFMinDam); else #endif - sprintf(tempstr, "fire arrows damage: %i-%i", x->_iFMinDam, x->_iFMaxDam); + sprintf(tempstr, "fire arrows damage: %i-%i", x->_iFMinDam, x->_iFMaxDam); break; case IPL_LIGHT_ARROWS: #ifdef HELLFIRE @@ -4075,7 +4086,7 @@ void PrintItemPower(char plidx, ItemStruct *x) sprintf(tempstr, "lightning arrows damage %i", x->_iLMinDam); else #endif - sprintf(tempstr, "lightning arrows damage %i-%i", x->_iLMinDam, x->_iLMaxDam); + sprintf(tempstr, "lightning arrows damage %i-%i", x->_iLMinDam, x->_iLMaxDam); break; case IPL_THORNS: strcpy(tempstr, "attacker takes 1-3 damage"); @@ -4393,7 +4404,7 @@ void PrintItemDetails(ItemStruct *x) sprintf(tempstr, "damage: %i Dur: %i/%i", x->_iMinDam, x->_iDurability, x->_iMaxDur); } else #endif - if (x->_iMaxDur == DUR_INDESTRUCTIBLE) + if (x->_iMaxDur == DUR_INDESTRUCTIBLE) sprintf(tempstr, "damage: %i-%i Indestructible", x->_iMinDam, x->_iMaxDam); else sprintf(tempstr, "damage: %i-%i Dur: %i/%i", x->_iMinDam, x->_iMaxDam, x->_iDurability, x->_iMaxDur); @@ -4412,7 +4423,7 @@ void PrintItemDetails(ItemStruct *x) sprintf(tempstr, "dam: %i Dur: %i/%i", x->_iMinDam, x->_iDurability, x->_iMaxDur); else #endif - sprintf(tempstr, "dam: %i-%i Dur: %i/%i", x->_iMinDam, x->_iMaxDam, x->_iDurability, x->_iMaxDur); + sprintf(tempstr, "dam: %i-%i Dur: %i/%i", x->_iMinDam, x->_iMaxDam, x->_iDurability, x->_iMaxDur); sprintf(tempstr, "Charges: %i/%i", x->_iCharges, x->_iMaxCharges); AddPanelString(tempstr, TRUE); } @@ -4460,7 +4471,7 @@ void PrintItemDur(ItemStruct *x) sprintf(tempstr, "damage: %i Dur: %i/%i", x->_iMinDam, x->_iDurability, x->_iMaxDur); } else #endif - if (x->_iMaxDur == DUR_INDESTRUCTIBLE) + if (x->_iMaxDur == DUR_INDESTRUCTIBLE) sprintf(tempstr, "damage: %i-%i Indestructible", x->_iMinDam, x->_iMaxDam); else sprintf(tempstr, "damage: %i-%i Dur: %i/%i", x->_iMinDam, x->_iMaxDam, x->_iDurability, x->_iMaxDur); @@ -4643,8 +4654,8 @@ void UseItem(int p, int Mid, int spl) } break; case IMISC_BOOK: - plr[p]._pMemSpells |= (__int64)1 << (spl - 1); - if (plr[p]._pSplLvl[spl] < 15) + plr[p]._pMemSpells |= SPELLBIT(spl); + if (plr[p]._pSplLvl[spl] < MAX_SPELL_LEVEL) plr[p]._pSplLvl[spl]++; plr[p]._pMana += spelldata[spl].sManaCost << 6; if (plr[p]._pMana > plr[p]._pMaxMana) @@ -4771,19 +4782,18 @@ int RndSmithItem(int lvl) ri = 0; for (i = 1; AllItemsList[i].iLoc != ILOC_INVALID; i++) { + if (AllItemsList[i].iRnd != IDROP_NEVER && SmithItemOk(i) && lvl >= AllItemsList[i].iMinMLvl #ifdef HELLFIRE - if (AllItemsList[i].iRnd && SmithItemOk(i) && lvl >= AllItemsList[i].iMinMLvl && ri < 512) { -#else - if (AllItemsList[i].iRnd && SmithItemOk(i) && lvl >= AllItemsList[i].iMinMLvl) { + && ri < 512 #endif + ) { ril[ri] = i; ri++; + if (AllItemsList[i].iRnd == IDROP_DOUBLE #ifdef HELLFIRE - if (AllItemsList[i].iRnd == IDROP_DOUBLE && ri < 512) { -#else - if (AllItemsList[i].iRnd == IDROP_DOUBLE) - { + && ri < 512 #endif + ) { ril[ri] = i; ri++; } @@ -4896,7 +4906,7 @@ int RndPremiumItem(int minlvl, int maxlvl) ri = 0; for (i = 1; AllItemsList[i].iLoc != ILOC_INVALID; i++) { - if (AllItemsList[i].iRnd) { + if (AllItemsList[i].iRnd != IDROP_NEVER) { if (PremiumItemOk(i)) { #ifdef HELLFIRE if (AllItemsList[i].iMinMLvl >= minlvl && AllItemsList[i].iMinMLvl <= maxlvl && ri < 512) { @@ -5045,11 +5055,12 @@ int RndWitchItem(int lvl) ri = 0; for (i = 1; AllItemsList[i].iLoc != ILOC_INVALID; i++) { + if (AllItemsList[i].iRnd != IDROP_NEVER && WitchItemOk(i) && lvl >= AllItemsList[i].iMinMLvl #ifdef HELLFIRE - if (AllItemsList[i].iRnd && WitchItemOk(i) && lvl >= AllItemsList[i].iMinMLvl && ri < 512) { -#else - if (AllItemsList[i].iRnd && WitchItemOk(i) && lvl >= AllItemsList[i].iMinMLvl) { + && ri < 512 #endif + ) { + ril[ri] = i; ri++; } @@ -5156,11 +5167,11 @@ int RndBoyItem(int lvl) ri = 0; for (i = 1; AllItemsList[i].iLoc != ILOC_INVALID; i++) { + if (AllItemsList[i].iRnd != IDROP_NEVER && PremiumItemOk(i) && lvl >= AllItemsList[i].iMinMLvl #ifdef HELLFIRE - if (AllItemsList[i].iRnd && PremiumItemOk(i) && lvl >= AllItemsList[i].iMinMLvl && ri < 512) { -#else - if (AllItemsList[i].iRnd && PremiumItemOk(i) && lvl >= AllItemsList[i].iMinMLvl) { + && ri < 512 #endif + ) { ril[ri] = i; ri++; } @@ -5173,7 +5184,7 @@ void SpawnBoy(int lvl) { int itype; - if (boylevel> 1 || boyitem._itype == ITYPE_NONE) { + if (boylevel < (lvl >> 1) || boyitem._itype == ITYPE_NONE) { do { item[0]._iSeed = GetRndSeed(); SetRndSeed(item[0]._iSeed); @@ -5273,11 +5284,11 @@ int RndHealerItem(int lvl) ri = 0; for (i = 1; AllItemsList[i].iLoc != ILOC_INVALID; i++) { + if (AllItemsList[i].iRnd != IDROP_NEVER && HealerItemOk(i) && lvl >= AllItemsList[i].iMinMLvl #ifdef HELLFIRE - if (AllItemsList[i].iRnd && HealerItemOk(i) && lvl >= AllItemsList[i].iMinMLvl && ri < 512) { -#else - if (AllItemsList[i].iRnd && HealerItemOk(i) && lvl >= AllItemsList[i].iMinMLvl) { + && ri < 512 #endif + ) { ril[ri] = i; ri++; } @@ -5422,24 +5433,24 @@ void RecreateWitchItem(int ii, int idx, int lvl, int iseed) volatile int hi_predelnik = random_(0, 1); iblvl = lvl; GetItemAttrs(ii, idx, iblvl); - } else{ + } else { #endif - SetRndSeed(iseed); - itype = RndWitchItem(lvl) - 1; - GetItemAttrs(ii, itype, lvl); - iblvl = -1; - if (random_(51, 100) <= 5) - iblvl = 2 * lvl; - if (iblvl == -1 && item[ii]._iMiscId == IMISC_STAFF) - iblvl = 2 * lvl; - if (iblvl != -1) + SetRndSeed(iseed); + itype = RndWitchItem(lvl) - 1; + GetItemAttrs(ii, itype, lvl); + iblvl = -1; + if (random_(51, 100) <= 5) + iblvl = 2 * lvl; + if (iblvl == -1 && item[ii]._iMiscId == IMISC_STAFF) + iblvl = 2 * lvl; + if (iblvl != -1) #ifdef HELLFIRE - GetItemBonus(ii, itype, iblvl >> 1, iblvl, TRUE, TRUE); - } + GetItemBonus(ii, itype, iblvl >> 1, iblvl, TRUE, TRUE); + } #else GetItemBonus(ii, itype, iblvl >> 1, iblvl, TRUE); #endif -} + } item[ii]._iSeed = iseed; item[ii]._iCreateInfo = lvl | CF_WITCH; diff --git a/Source/lighting.cpp b/Source/lighting.cpp index f18c9a8c..5e8ef343 100644 --- a/Source/lighting.cpp +++ b/Source/lighting.cpp @@ -570,7 +570,7 @@ void DoLighting(int nXPos, int nYPos, int nRadius, int Lnum) #endif } - mult = xoff + 8*yoff; + mult = xoff + 8 * yoff; for (y = 0; y < min_y; y++) { for (x = 1; x < max_x; x++) { radius_block = lightblock[mult][y][x]; @@ -769,7 +769,7 @@ void DoVision(int nXPos, int nYPos, int nRadius, BOOL doautomap, BOOL visible) if ((x1adj + nCrawlX >= 0 && x1adj + nCrawlX < MAXDUNX && y1adj + nCrawlY >= 0 && y1adj + nCrawlY < MAXDUNY && !nBlockTable[dPiece[x1adj + nCrawlX][y1adj + nCrawlY]]) || (x2adj + nCrawlX >= 0 && x2adj + nCrawlX < MAXDUNX && y2adj + nCrawlY >= 0 && y2adj + nCrawlY < MAXDUNY - && !nBlockTable[dPiece[x2adj + nCrawlX][y2adj + nCrawlY]])) { + && !nBlockTable[dPiece[x2adj + nCrawlX][y2adj + nCrawlY]])) { if (doautomap) { if (dFlags[nCrawlX][nCrawlY] >= 0) { SetAutomapView(nCrawlX, nCrawlY); diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 51a8aa33..acd301ae 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -88,7 +88,7 @@ static void CopyInts(const void *src, const int n, void *dst) const unsigned int *s = reinterpret_cast(src); const unsigned int *d = reinterpret_cast(dst); for (int i = 0; i < n; i++) { - CopyInt(s, (void*)d); + CopyInt(s, (void *)d); ++d; ++s; } diff --git a/Source/mainmenu.cpp b/Source/mainmenu.cpp index aec7b1c6..dfb0a1e8 100644 --- a/Source/mainmenu.cpp +++ b/Source/mainmenu.cpp @@ -49,9 +49,9 @@ static BOOL mainmenu_init_menu(int type) static BOOL mainmenu_single_player() { #ifdef HELLFIRE - if (!SRegLoadValue(APP_NAME, jogging_title, 0, &jogging_opt)) { - jogging_opt = TRUE; - } + if (!SRegLoadValue(APP_NAME, jogging_title, 0, &jogging_opt)) { + jogging_opt = TRUE; + } #endif gbMaxPlayers = 1; @@ -164,13 +164,13 @@ void mainmenu_loop() done = TRUE; break; case MAINMENU_ATTRACT_MODE: - case MAINMENU_REPLAY_INTRO: + case MAINMENU_REPLAY_INTRO: #ifndef HELLFIRE if (gbIsSpawn) done = FALSE; else #endif - if (gbActive) + if (gbActive) mainmenu_play_intro(); break; case MAINMENU_SHOW_CREDITS: diff --git a/Source/missiles.cpp b/Source/missiles.cpp index d941d8b9..219a5230 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -441,16 +441,20 @@ void GetMissileVel(int i, int sx, int sy, int dx, int dy, int v) { double dxp, dyp, dr; +#ifndef HELLFIRE if (dx != sx || dy != sy) { +#endif dxp = (dx + sy - sx - dy) * (1 << 21); dyp = (dy + dx - sx - sy) * (1 << 21); dr = sqrt(dxp * dxp + dyp * dyp); missile[i]._mixvel = (dxp * (v << 16)) / dr; missile[i]._miyvel = (dyp * (v << 15)) / dr; +#ifndef HELLFIRE } else { missile[i]._mixvel = 0; missile[i]._miyvel = 0; } +#endif } void PutMissile(int i) @@ -1024,7 +1028,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my, int oi; if (missile[i]._miAnimType != MFILE_FIREWAL && missile[i]._misource != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (dMonster[mx][my] > 0) { if (MonsterMHit( missile[i]._misource, @@ -1042,13 +1046,13 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my, if (dMonster[mx][my] < 0 && monster[-(dMonster[mx][my] + 1)]._mmode == MM_STONE && MonsterMHit( - missile[i]._misource, - -(dMonster[mx][my] + 1), - mindam, - maxdam, - missile[i]._midist, - missile[i]._mitype, - shift)) { + missile[i]._misource, + -(dMonster[mx][my] + 1), + mindam, + maxdam, + missile[i]._midist, + missile[i]._mitype, + shift)) { if (!nodel) missile[i]._mirange = 0; missile[i]._miHitFlag = TRUE; @@ -1057,13 +1061,13 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my, if (dPlayer[mx][my] > 0 && dPlayer[mx][my] - 1 != missile[i]._misource && Plr2PlrMHit( - missile[i]._misource, - dPlayer[mx][my] - 1, - mindam, - maxdam, - missile[i]._midist, - missile[i]._mitype, - shift)) { + missile[i]._misource, + dPlayer[mx][my] - 1, + mindam, + maxdam, + missile[i]._midist, + missile[i]._mitype, + shift)) { if (!nodel) missile[i]._mirange = 0; missile[i]._miHitFlag = TRUE; @@ -1079,14 +1083,14 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my, } if (dPlayer[mx][my] > 0 && PlayerMHit( - dPlayer[mx][my] - 1, - missile[i]._misource, - missile[i]._midist, - mindam, - maxdam, - missile[i]._mitype, - shift, - 0)) { + dPlayer[mx][my] - 1, + missile[i]._misource, + missile[i]._midist, + mindam, + maxdam, + missile[i]._mitype, + shift, + 0)) { if (!nodel) missile[i]._mirange = 0; missile[i]._miHitFlag = TRUE; @@ -1248,9 +1252,7 @@ void InitMissiles() { int mi, src, i, j; -#ifdef HELLFIRE AutoMapShowItems = FALSE; -#endif plr[myplr]._pSpellFlags &= ~0x1; if (plr[myplr]._pInfraFlag == TRUE) { for (i = 0; i < nummissiles; ++i) { @@ -1470,7 +1472,7 @@ void missiles_berserk(int mi, int sx, int sy, int dx, int dy, int midir, char mi if ((!(monster[dm].mMagicRes & RESIST_MAGIC) || (monster[dm].mMagicRes & RESIST_MAGIC) == 1 && !random_(99, 2)) && monster[dm]._mmode != MM_CHARGE) { j = 6; double slvl = (double)GetSpellLevel(id, SPL_BERSERK); - monster[dm]._mFlags |= MFLAG_UNUSED | MFLAG_GOLEM; + monster[dm]._mFlags |= MFLAG_BERSERK | MFLAG_GOLEM; monster[dm].mMinDamage = ((double)(random_(145, 10) + 20) / 100 - -1) * (double)monster[dm].mMinDamage + slvl; monster[dm].mMaxDamage = ((double)(random_(145, 10) + 20) / 100 - -1) * (double)monster[dm].mMaxDamage + slvl; monster[dm].mMinDamage2 = ((double)(random_(145, 10) + 20) / 100 - -1) * (double)monster[dm].mMinDamage2 + slvl; @@ -1565,7 +1567,7 @@ void missiles_steal_pots(int mi, int sx, int sy, int dx, int dy, int midir, char for (si = 0; si < MAXBELTITEMS; si++) { ii = -1; if (plr[pnum].SpdList[si]._itype == ITYPE_MISC) { - if (random_(205, 2)) { + if (random_(205, 2) != 0) { switch (plr[pnum].SpdList[si]._iMiscId) { case IMISC_FULLHEAL: ii = ItemMiscIdIdx(IMISC_HEAL); @@ -1578,7 +1580,7 @@ void missiles_steal_pots(int mi, int sx, int sy, int dx, int dy, int midir, char ii = ItemMiscIdIdx(IMISC_MANA); break; case IMISC_REJUV: - if (random_(205, 2)) { + if (random_(205, 2) != 0) { ii = ItemMiscIdIdx(IMISC_MANA); } else { ii = ItemMiscIdIdx(IMISC_HEAL); @@ -1658,7 +1660,7 @@ void missiles_spec_arrow(int mi, int sx, int sy, int dx, int dy, int midir, char int av; av = 0; - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { if (plr[id]._pClass == PC_ROGUE) av += (plr[id]._pLevel - 1) >> 2; else if (plr[id]._pClass == PC_WARRIOR || plr[id]._pClass == PC_BARD) @@ -1716,7 +1718,7 @@ void missiles_warp(int mi, int sx, int sy, int dx, int dy, int midir, char miene missile[mi]._miVar1 = 0; missile[mi]._mix = tx; missile[mi]._miy = ty; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_WARP); } @@ -1739,7 +1741,7 @@ void missiles_rune_explosion(int mi, int sx, int sy, int dx, int dy, int midir, { int i, dmg; - if (!mienemy || mienemy == 2) { + if (mienemy == TARGET_MONSTERS || mienemy == TARGET_BOTH) { missile[mi]._midam = 2 * (plr[id]._pLevel + random_(60, 10) + random_(60, 10)) + 4; for (i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam >> 3; @@ -1770,7 +1772,7 @@ void missiles_immo_1(int mi, int sx, int sy, int dx, int dy, int midir, char mie dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { missile[mi]._midam = 2 * (plr[id]._pLevel + random_(60, 10) + random_(60, 10)) + 4; for (i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam >> 3; @@ -1803,7 +1805,7 @@ void missiles_immo_2(int mi, int sx, int sy, int dx, int dy, int midir, char mie dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { i = missile[mi]._mispllvl + 16; if (i > 50) { i = 50; @@ -1849,7 +1851,7 @@ void missiles_433040(int mi, int sx, int sy, int dx, int dy, int midir, char mie { int lvl; - if (!mienemy && id != -1) { + if (mienemy == TARGET_MONSTERS && id != -1) { missile[mi]._midam = 0; if (2 * (id > 0)) lvl = plr[id]._pLevel; @@ -1897,7 +1899,7 @@ void missiles_magi(int mi, int sx, int sy, int dx, int dy, int midir, char miene void missiles_ring(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) { missile[mi]._miDelFlag = TRUE; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_FIRERING); missile[mi]._miVar1 = sx; missile[mi]._miVar2 = sy; @@ -1931,7 +1933,7 @@ void missiles_search(int mi, int sx, int sy, int dx, int dy, int midir, char mie else lvl = 1; missile[mi]._mirange = lvl + 10 * missile[mi]._mispllvl + 245; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_SEARCH); for (i = 0; i < nummissiles; i++) { @@ -1952,7 +1954,7 @@ void missiles_search(int mi, int sx, int sy, int dx, int dy, int midir, char mie void missiles_cbolt_arrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) { - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { if (id == myplr) { missile[mi]._mirnd = random_(63, 15) + 1; } else { @@ -2008,7 +2010,7 @@ void AddLArrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { #ifdef HELLFIRE int av = 32; @@ -2052,7 +2054,7 @@ void AddArrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { av = 32; if (plr[id]._pIFlags & ISPL_RNDARROWVEL) { av = random_(64, 32) + 16; @@ -2147,7 +2149,7 @@ void AddRndTeleport(int mi, int sx, int sy, int dx, int dy, int midir, char mien missile[mi]._mix = sx + r1; missile[mi]._miy = sy + r2; #endif - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_RNDTELEPORT); } else { pn = dObject[dx][dy] - 1; @@ -2226,13 +2228,19 @@ void miss_null_33(int mi, int sx, int sy, int dx, int dy, int midir, char mienem void AddTeleport(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) { int i, pn, k, j, tx, ty; +#ifndef HELLFIRE int CrawlNum[6] = { 0, 3, 12, 45, 94, 159 }; +#endif missile[mi]._miDelFlag = TRUE; for (i = 0; i < 6; i++) { k = CrawlNum[i]; pn = k + 2; +#ifdef HELLFIRE + 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 tx = dx + CrawlTable[pn - 1]; ty = dy + CrawlTable[pn]; if (0 < tx && tx < MAXDUNX && 0 < ty && ty < MAXDUNY) { @@ -2296,7 +2304,7 @@ void AddFireball(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { missile[mi]._midam = 2 * (plr[id]._pLevel + random_(60, 10) + random_(60, 10)) + 4; for (i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam >> 3; @@ -2321,7 +2329,7 @@ void AddFireball(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy void AddLightctrl(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) { - if (!dam && !mienemy) + if (!dam && mienemy == TARGET_MONSTERS) UseMana(id, SPL_LIGHTNING); missile[mi]._miVar1 = sx; missile[mi]._miVar2 = sy; @@ -2342,7 +2350,7 @@ void AddLightning(int mi, int sx, int sy, int dx, int dy, int midir, char mienem } missile[mi]._miAnimFrame = random_(52, 8) + 1; - if (midir < 0 || mienemy == 1 || id == -1) { + if (midir < 0 || mienemy == TARGET_PLAYERS || id == -1) { if (midir < 0 || id == -1) missile[mi]._mirange = 8; else @@ -2495,7 +2503,7 @@ void AddFlash(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i { int i; - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { if (id != -1) { missile[mi]._midam = 0; for (i = 0; i <= plr[id]._pLevel; i++) { @@ -2519,7 +2527,7 @@ void AddFlash2(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, { int i; - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { if (id != -1) { missile[mi]._midam = 0; for (i = 0; i <= plr[id]._pLevel; i++) { @@ -2543,7 +2551,7 @@ void AddManashield(int mi, int sx, int sy, int dx, int dy, int midir, char miene missile[mi]._miVar1 = plr[id]._pHitPoints; missile[mi]._miVar2 = plr[id]._pHPBase; missile[mi]._miVar8 = -1; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_MANASHIELD); if (id == myplr) NetSendCmd(TRUE, CMD_SETSHIELD); @@ -2730,7 +2738,7 @@ void AddFlare(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i missile[mi]._miVar1 = sx; missile[mi]._miVar2 = sy; missile[mi]._mlid = AddLight(sx, sy, 8); - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { UseMana(id, SPL_FLARE); plr[id]._pHitPoints -= 320; plr[id]._pHPBase -= 320; @@ -2890,7 +2898,7 @@ void AddEtherealize(int mi, int sx, int sy, int dx, int dy, int midir, char mien missile[mi]._mirange += missile[mi]._mirange * plr[id]._pISplDur >> 7; missile[mi]._miVar1 = plr[id]._pHitPoints; missile[mi]._miVar2 = plr[id]._pHPBase; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_ETHEREALIZE); } @@ -3077,7 +3085,7 @@ void AddInfra(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i missile[mi]._mirange += missile[mi]._mirange >> 3; } missile[mi]._mirange += missile[mi]._mirange * plr[id]._pISplDur >> 7; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_INFRA); } @@ -3105,7 +3113,7 @@ void AddNova(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in for (k = missile[mi]._mispllvl; k > 0; k--) { missile[mi]._midam += missile[mi]._midam >> 3; } - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_NOVA); } else { missile[mi]._midam = ((DWORD)currlevel >> 1) + random_(66, 3) + random_(66, 3) + random_(66, 3); @@ -3125,7 +3133,7 @@ void AddBlodboil(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy PS_WARR70, PS_ROGUE70, PS_MAGE70, - PS_MAGE70, // BUGFIX: PS_MONK70? + PS_MAGE70, // BUGFIX: PS_MONK70? PS_ROGUE70, PS_WARR70 }; @@ -3238,7 +3246,7 @@ void AddFlame(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i missile[mi]._mityoff = missile[midir]._mityoff; missile[mi]._mirange = missile[mi]._miVar2 + 20; missile[mi]._mlid = AddLight(sx, sy, 1); - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { i = random_(79, plr[id]._pLevel) + random_(79, 2); missile[mi]._midam = 8 * i + 16 + ((8 * i + 16) >> 1); } else { @@ -3253,7 +3261,7 @@ void AddFlamec(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, dy += YDirAdd[midir]; } GetMissileVel(mi, sx, sy, dx, dy, 32); - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_FLAME); missile[mi]._miVar1 = sx; missile[mi]._miVar2 = sy; @@ -3365,7 +3373,7 @@ void AddBoneSpirit(int mi, int sx, int sy, int dx, int dy, int midir, char miene missile[mi]._miVar4 = dx; missile[mi]._miVar5 = dy; missile[mi]._mlid = AddLight(sx, sy, 8); - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { UseMana(id, SPL_BONESPIRIT); plr[id]._pHitPoints -= 384; plr[id]._pHPBase -= 384; @@ -3483,7 +3491,7 @@ int Sentfire(int i, int sx, int sy) if (dMonster[sx][sy] > 0 && monster[dMonster[sx][sy] - 1]._mhitpoints >> 6 > 0 && dMonster[sx][sy] - 1 > MAX_PLRS - 1) { dir = GetDirection(missile[i]._mix, missile[i]._miy, sx, sy); missile[i]._miVar3 = missileavail[0]; - AddMissile(missile[i]._mix, missile[i]._miy, sx, sy, dir, MIS_FIREBOLT, 0, missile[i]._misource, missile[i]._midam, GetSpellLevel(missile[i]._misource, SPL_FIREBOLT)); + AddMissile(missile[i]._mix, missile[i]._miy, sx, sy, dir, MIS_FIREBOLT, TARGET_MONSTERS, missile[i]._misource, missile[i]._midam, GetSpellLevel(missile[i]._misource, SPL_FIREBOLT)); ex = -1; } } @@ -3582,7 +3590,7 @@ void MI_LArrow(int i) GetMissilePos(i); if (p != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { mind = plr[p]._pIMinDam; maxd = plr[p]._pIMaxDam; } else { @@ -3636,7 +3644,7 @@ void MI_Arrow(int i) GetMissilePos(i); p = missile[i]._misource; if (p != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { mind = plr[p]._pIMinDam; maxd = plr[p]._pIMaxDam; } else { @@ -3668,7 +3676,7 @@ void MI_Firebolt(int i) GetMissilePos(i); p = missile[i]._misource; if (p != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { switch (missile[i]._mitype) { case MIS_FIREBOLT: d = random_(75, 10) + (plr[p]._pMagic >> 3) + missile[i]._mispllvl + 1; @@ -3848,7 +3856,7 @@ void MI_Fireball(int i) dam = missile[i]._midam; missile[i]._mirange--; - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { px = plr[id]._px; py = plr[id]._py; } else { @@ -3867,7 +3875,7 @@ void MI_Fireball(int i) GetMissilePos(i); if (missile[i]._mix != missile[i]._misx || missile[i]._miy != missile[i]._misy) CheckMissileCol(i, dam, dam, 0, missile[i]._mix, missile[i]._miy, 0); - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { mx = missile[i]._mix; my = missile[i]._miy; ChangeLight(missile[i]._mlid, missile[i]._mix, my, missile[i]._miAnimFrame); @@ -3897,12 +3905,12 @@ void MI_Fireball(int i) } if (missile[i]._miyvel > 0 && (TransList[dTransVal[mx + 1][my]] && nSolidTable[dPiece[mx + 1][my]] - || TransList[dTransVal[mx - 1][my]] && nSolidTable[dPiece[mx - 1][my]])) { + || TransList[dTransVal[mx - 1][my]] && nSolidTable[dPiece[mx - 1][my]])) { missile[i]._miyoff -= 32; } if (missile[i]._mixvel > 0 && (TransList[dTransVal[mx][my + 1]] && nSolidTable[dPiece[mx][my + 1]] - || TransList[dTransVal[mx][my - 1]] && nSolidTable[dPiece[mx][my - 1]])) { + || TransList[dTransVal[mx][my - 1]] && nSolidTable[dPiece[mx][my - 1]])) { missile[i]._mixoff -= 32; } missile[i]._mimfnum = 0; @@ -3976,7 +3984,7 @@ void MI_Rune(int i) } missile[i]._miDelFlag = TRUE; AddUnLight(missile[i]._mlid); - AddMissile(mx, my, mx, my, dir, missile[i]._miVar1, 2, missile[i]._misource, missile[i]._midam, missile[i]._mispllvl); + AddMissile(mx, my, mx, my, dir, missile[i]._miVar1, TARGET_BOTH, missile[i]._misource, missile[i]._midam, missile[i]._mispllvl); } PutMissile(i); } @@ -3990,7 +3998,7 @@ void mi_light_wall(int i) CheckMissileCol(i, missile[i]._midam, missile[i]._midam, 1, missile[i]._mix, missile[i]._miy, 0); if (missile[i]._miHitFlag == TRUE) missile[i]._mirange = range; - if (!missile[i]._mirange) + if (missile[i]._mirange == 0) missile[i]._miDelFlag = TRUE; PutMissile(i); } @@ -4059,7 +4067,7 @@ void mi_immolation(int i) } missile[i]._mirange--; - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { px = plr[id]._px; py = plr[id]._py; } else { @@ -4068,7 +4076,7 @@ void mi_immolation(int i) } if (missile[i]._miAnimType == MFILE_BIGEXP) { - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; AddUnLight(missile[i]._mlid); } @@ -4108,12 +4116,12 @@ void mi_immolation(int i) } if (missile[i]._miyvel > 0 && (TransList[dTransVal[mx + 1][my]] && nSolidTable[dPiece[mx + 1][my]] - || TransList[dTransVal[mx - 1][my]] && nSolidTable[dPiece[mx - 1][my]])) { + || TransList[dTransVal[mx - 1][my]] && nSolidTable[dPiece[mx - 1][my]])) { missile[i]._miyoff -= 32; } if (missile[i]._mixvel > 0 && (TransList[dTransVal[mx][my + 1]] && nSolidTable[dPiece[mx][my + 1]] - || TransList[dTransVal[mx][my - 1]] && nSolidTable[dPiece[mx][my - 1]])) { + || TransList[dTransVal[mx][my - 1]] && nSolidTable[dPiece[mx][my - 1]])) { missile[i]._mixoff -= 32; } missile[i]._mimfnum = 0; @@ -4157,7 +4165,7 @@ void mi_light_arrow(int i) if (!nMissileTable[pn]) { if ((mx != missile[i]._miVar1 || my != missile[i]._miVar2) && mx > 0 && my > 0 && mx < MAXDUNX && my < MAXDUNY) { if (missile[i]._misource != -1) { - if (missile[i]._micaster == 1 + if (missile[i]._micaster == TARGET_PLAYERS && monster[missile[i]._misource].MType->mtype >= MT_STORM && monster[missile[i]._misource].MType->mtype <= MT_MAEL) { AddMissile( @@ -4212,16 +4220,16 @@ void mi_flashfr(int i) int src; src = missile[i]._misource; - if (!missile[i]._micaster && src != -1) { + if (missile[i]._micaster == TARGET_MONSTERS && src != -1) { missile[i]._mix = plr[src]._px; missile[i]._miy = plr[src]._py; missile[i]._mitxoff = plr[src]._pxoff << 16; missile[i]._mityoff = plr[src]._pyoff << 16; } missile[i]._mirange--; - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; - if (!missile[i]._micaster) { + if (missile[i]._micaster == TARGET_MONSTERS) { src = missile[i]._misource; if (src != -1) plr[src]._pBaseToBlk -= 50; @@ -4232,14 +4240,14 @@ void mi_flashfr(int i) void mi_flashbk(int i) { - if (!missile[i]._micaster) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) { missile[i]._mix = plr[missile[i]._misource]._pfutx; missile[i]._miy = plr[missile[i]._misource]._pfuty; } } missile[i]._mirange--; - if (!missile[i]._mirange) + if (missile[i]._mirange == 0) missile[i]._miDelFlag = TRUE; PutMissile(i); } @@ -4298,7 +4306,7 @@ void mi_fire_ring(int i) if (nMissileTable[dp] || missile[i]._miVar8) missile[i]._miVar8 = 1; else - AddMissile(tx, ty, tx, ty, 0, MIS_FIREWALL, 2, src, dmg, missile[i]._mispllvl); + AddMissile(tx, ty, tx, ty, 0, MIS_FIREWALL, TARGET_BOTH, src, dmg, missile[i]._mispllvl); } } } @@ -4329,7 +4337,7 @@ void mi_light_ring(int i) if (nMissileTable[dp] || missile[i]._miVar8) missile[i]._miVar8 = 1; else - AddMissile(tx, ty, tx, ty, 0, MIS_LIGHTWALL, 2, src, dmg, missile[i]._mispllvl); + AddMissile(tx, ty, tx, ty, 0, MIS_LIGHTWALL, TARGET_BOTH, src, dmg, missile[i]._mispllvl); } } } @@ -4339,7 +4347,7 @@ void mi_light_ring(int i) void mi_search(int i) { missile[i]._mirange--; - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; PlaySfxLoc(IS_CAST7, plr[missile[i]._miVar1]._px, plr[missile[i]._miVar1]._py); AutoMapShowItems = FALSE; @@ -4357,7 +4365,7 @@ void mi_lightning_wall(int i) else lvl = 0; dmg = 16 * (random_(53, 10) + random_(53, 10) + lvl + 2); - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; } else { dp = dPiece[missile[i]._miVar1][missile[i]._miVar2]; @@ -4365,7 +4373,7 @@ void mi_lightning_wall(int i) tx = missile[i]._miVar1 + XDirAdd[missile[i]._miVar3]; ty = missile[i]._miVar2 + YDirAdd[missile[i]._miVar3]; if (!nMissileTable[dp] && !missile[i]._miVar8 && tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - AddMissile(missile[i]._miVar1, missile[i]._miVar2, missile[i]._miVar1, missile[i]._miVar2, plr[src]._pdir, MIS_LIGHTWALL, 2, src, dmg, missile[i]._mispllvl); + AddMissile(missile[i]._miVar1, missile[i]._miVar2, missile[i]._miVar1, missile[i]._miVar2, plr[src]._pdir, MIS_LIGHTWALL, TARGET_BOTH, src, dmg, missile[i]._mispllvl); missile[i]._miVar1 = tx; missile[i]._miVar2 = ty; } else { @@ -4379,7 +4387,7 @@ void mi_lightning_wall(int i) tx = missile[i]._miVar5 + XDirAdd[missile[i]._miVar4]; ty = missile[i]._miVar6 + YDirAdd[missile[i]._miVar4]; if (!nMissileTable[dp] && !missile[i]._miVar7 && tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - AddMissile(missile[i]._miVar5, missile[i]._miVar6, missile[i]._miVar5, missile[i]._miVar6, plr[src]._pdir, MIS_LIGHTWALL, 2, src, dmg, missile[i]._mispllvl); + AddMissile(missile[i]._miVar5, missile[i]._miVar6, missile[i]._miVar5, missile[i]._miVar6, plr[src]._pdir, MIS_LIGHTWALL, TARGET_BOTH, src, dmg, missile[i]._mispllvl); missile[i]._miVar5 = tx; missile[i]._miVar6 = ty; } else { @@ -4402,11 +4410,11 @@ void mi_fire_nova(int i) sx = missile[i]._mix; sy = missile[i]._miy; if (id != -1) { - en = 0; dir = plr[id]._pdir; + en = TARGET_MONSTERS; } else { dir = 0; - en = 1; + en = TARGET_PLAYERS; } for (k = 0; k < 23; k++) { if (sx1 != vCrawlTable[k][6] || sy1 != vCrawlTable[k][7]) { @@ -4427,7 +4435,6 @@ void mi_spec_arrow(int i) { int dir, src, dam, sx, sy, dx, dy, spllvl, mitype, micaster; - dir = 0; src = missile[i]._misource; dam = missile[i]._midam; sx = missile[i]._mix; @@ -4438,7 +4445,7 @@ void mi_spec_arrow(int i) mitype = 0; if (src != -1) { dir = plr[src]._pdir; - micaster = 0; + micaster = TARGET_MONSTERS; switch (plr[src]._pILMinDam) { case 0: @@ -4455,7 +4462,8 @@ void mi_spec_arrow(int i) break; } } else { - micaster = 1; + dir = 0; + micaster = TARGET_PLAYERS; } AddMissile(sx, sy, dx, dy, dir, mitype, micaster, src, dam, spllvl); if (mitype == MIS_CBOLTARROW) { @@ -4477,7 +4485,7 @@ void MI_Lightctrl(int i) p = missile[i]._misource; if (p != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { dam = (random_(79, 2) + random_(79, plr[p]._pLevel) + 2) << 6; } else { dam = 2 * (monster[p].mMinDamage + random_(80, monster[p].mMaxDamage - monster[p].mMinDamage + 1)); @@ -4507,7 +4515,7 @@ void MI_Lightctrl(int i) if (!nMissileTable[pn]) { if ((mx != missile[i]._miVar1 || my != missile[i]._miVar2) && mx > 0 && my > 0 && mx < MAXDUNX && my < MAXDUNY) { if (missile[i]._misource != -1) { - if (missile[i]._micaster == 1 + if (missile[i]._micaster == TARGET_PLAYERS && monster[missile[i]._misource].MType->mtype >= MT_STORM && monster[missile[i]._misource].MType->mtype <= MT_MAEL) { AddMissile( @@ -4608,7 +4616,7 @@ void MI_Town(int i) void MI_Flash(int i) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) plr[missile[i]._misource]._pInvincible = TRUE; } @@ -4621,7 +4629,7 @@ void MI_Flash(int i) CheckMissileCol(i, missile[i]._midam, missile[i]._midam, TRUE, missile[i]._mix + 1, missile[i]._miy + 1, TRUE); if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) plr[missile[i]._misource]._pInvincible = FALSE; } @@ -4631,7 +4639,7 @@ void MI_Flash(int i) void MI_Flash2(int i) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) plr[missile[i]._misource]._pInvincible = TRUE; } @@ -4641,7 +4649,7 @@ void MI_Flash2(int i) CheckMissileCol(i, missile[i]._midam, missile[i]._midam, TRUE, missile[i]._mix + 1, missile[i]._miy - 1, TRUE); if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) plr[missile[i]._misource]._pInvincible = FALSE; } @@ -4903,7 +4911,7 @@ void MI_Chain(int i) sx = missile[i]._mix; sy = missile[i]._miy; dir = GetDirection(sx, sy, missile[i]._miVar1, missile[i]._miVar2); - AddMissile(sx, sy, missile[i]._miVar1, missile[i]._miVar2, dir, MIS_LIGHTCTRL, 0, id, 1, missile[i]._mispllvl); + AddMissile(sx, sy, missile[i]._miVar1, missile[i]._miVar2, dir, MIS_LIGHTCTRL, TARGET_MONSTERS, id, 1, missile[i]._mispllvl); rad = missile[i]._mispllvl + 3; if (rad > 19) rad = 19; @@ -4919,7 +4927,7 @@ void MI_Chain(int i) ty = sy + CrawlTable[l]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY && dMonster[tx][ty] > 0) { dir = GetDirection(sx, sy, tx, ty); - AddMissile(sx, sy, tx, ty, dir, MIS_LIGHTCTRL, 0, id, 1, missile[i]._mispllvl); + AddMissile(sx, sy, tx, ty, dir, MIS_LIGHTCTRL, TARGET_MONSTERS, id, 1, missile[i]._mispllvl); } l += 2; } @@ -5006,8 +5014,8 @@ void MI_Acidsplat(int i) if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; monst = missile[i]._misource; - dam = missile[i]._mispllvl; - AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_ACIDPUD, 1, monst, (monster[monst].MData->mLevel >= 2) + 1, dam); + dam = (monster[monst].MData->mLevel >= 2 ? 2 : 1); + AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_ACIDPUD, TARGET_PLAYERS, monst, dam, missile[i]._mispllvl); } else { PutMissile(i); } @@ -5186,7 +5194,7 @@ void MI_FirewallC(int i) tx = missile[i]._miVar1 + XDirAdd[missile[i]._miVar3]; ty = missile[i]._miVar2 + YDirAdd[missile[i]._miVar3]; if (!nMissileTable[dPiece[missile[i]._miVar1][missile[i]._miVar2]] && missile[i]._miVar8 == 0 && tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - AddMissile(missile[i]._miVar1, missile[i]._miVar2, missile[i]._miVar1, missile[i]._miVar2, plr[id]._pdir, MIS_FIREWALL, 0, id, 0, missile[i]._mispllvl); + AddMissile(missile[i]._miVar1, missile[i]._miVar2, missile[i]._miVar1, missile[i]._miVar2, plr[id]._pdir, MIS_FIREWALL, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); missile[i]._miVar1 = tx; missile[i]._miVar2 = ty; } else { @@ -5195,7 +5203,7 @@ void MI_FirewallC(int i) tx = missile[i]._miVar5 + XDirAdd[missile[i]._miVar4]; ty = missile[i]._miVar6 + YDirAdd[missile[i]._miVar4]; if (!nMissileTable[dPiece[missile[i]._miVar5][missile[i]._miVar6]] && missile[i]._miVar7 == 0 && tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - AddMissile(missile[i]._miVar5, missile[i]._miVar6, missile[i]._miVar5, missile[i]._miVar6, plr[id]._pdir, MIS_FIREWALL, 0, id, 0, missile[i]._mispllvl); + AddMissile(missile[i]._miVar5, missile[i]._miVar6, missile[i]._miVar5, missile[i]._miVar6, plr[id]._pdir, MIS_FIREWALL, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); missile[i]._miVar5 = tx; missile[i]._miVar6 = ty; } else { @@ -5226,11 +5234,11 @@ void MI_Apoca(int i) if (dMonster[k][j] > MAX_PLRS - 1 && !nSolidTable[dPiece[k][j]]) { #ifdef HELLFIRE if (LineClear(missile[i]._mix, missile[i]._miy, k, j)) { - AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, 0, id, missile[i]._midam, 0); + AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, TARGET_MONSTERS, id, missile[i]._midam, 0); exit = TRUE; } #else - AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, 0, id, missile[i]._midam, 0); + AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, TARGET_MONSTERS, id, missile[i]._midam, 0); exit = TRUE; #endif } @@ -5272,7 +5280,7 @@ void MI_Wave(int i) pn = dPiece[nxa][nya]; assert((DWORD)pn <= MAXTILES); if (!nMissileTable[pn]) { - AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, 0, id, 0, missile[i]._mispllvl); + AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); nxa += XDirAdd[dira]; nya += YDirAdd[dira]; nxb = sx + XDirAdd[sd] + XDirAdd[dirb]; @@ -5283,7 +5291,7 @@ void MI_Wave(int i) if (nMissileTable[pn] || f1 || nxa <= 0 || nxa >= MAXDUNX || nya <= 0 || nya >= MAXDUNY) { f1 = TRUE; } else { - AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, 0, id, 0, missile[i]._mispllvl); + AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); nxa += XDirAdd[dira]; nya += YDirAdd[dira]; } @@ -5292,7 +5300,7 @@ void MI_Wave(int i) if (nMissileTable[pn] || f2 || nxb <= 0 || nxb >= MAXDUNX || nyb <= 0 || nyb >= MAXDUNY) { f2 = TRUE; } else { - AddMissile(nxb, nyb, nxb + XDirAdd[sd], nyb + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, 0, id, 0, missile[i]._mispllvl); + AddMissile(nxb, nyb, nxb + XDirAdd[sd], nyb + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); nxb += XDirAdd[dirb]; nyb += YDirAdd[dirb]; } @@ -5314,11 +5322,11 @@ void MI_Nova(int i) sx = missile[i]._mix; sy = missile[i]._miy; if (id != -1) { - en = 0; dir = plr[id]._pdir; + en = TARGET_MONSTERS; } else { dir = 0; - en = 1; + en = TARGET_PLAYERS; } for (k = 0; k < 23; k++) { if (sx1 != vCrawlTable[k][6] || sy1 != vCrawlTable[k][7]) { @@ -5644,7 +5652,7 @@ void MI_Bonespirit(int i) ChangeLight(missile[i]._mlid, cx, cy, 8); } if (missile[i]._mirange == 0) { - SetMissDir(i, DIR_OMNI); + SetMissDir(i, 8); missile[i]._mirange = 7; } PutMissile(i); diff --git a/Source/monstdat.cpp b/Source/monstdat.cpp index e2b5c40a..5ca024f1 100644 --- a/Source/monstdat.cpp +++ b/Source/monstdat.cpp @@ -197,7 +197,7 @@ MonsterData monsterdata[] = { #ifdef HELLFIRE int MonstConvTbl[] = { #else -BYTE MonstConvTbl[] = { +char MonstConvTbl[] = { #endif MT_NZOMBIE, MT_BZOMBIE, @@ -367,7 +367,7 @@ BYTE MonstConvTbl[] = { #ifdef HELLFIRE int MonstAvailTbl[] = { #else -BYTE MonstAvailTbl[] = { +char MonstAvailTbl[] = { #endif MAT_ALWAYS, // Zombie MAT_ALWAYS, // Ghoul @@ -405,7 +405,7 @@ BYTE MonstAvailTbl[] = { #ifdef HELLFIRE MAT_RETAIL, // Satyr Lord #else - MAT_NEVER, // Lord Sayter + MAT_NEVER, // Lord Sayter #endif MAT_RETAIL, // Flesh Clan MAT_RETAIL, // Stone Clan @@ -456,7 +456,7 @@ BYTE MonstAvailTbl[] = { #ifdef HELLFIRE MAT_RETAIL, // Devil Kin Brute #else - MAT_NEVER, // Devil Kin Brute + MAT_NEVER, // Devil Kin Brute #endif MAT_RETAIL, // Winged-Demon MAT_RETAIL, // Gargoyle @@ -477,7 +477,7 @@ BYTE MonstAvailTbl[] = { #ifdef HELLFIRE MAT_RETAIL, // The Shredded #else - MAT_NEVER, // Unraveler + MAT_NEVER, // Unraveler #endif MAT_NEVER, // Hollow One MAT_NEVER, // Pain Master diff --git a/Source/monstdat.h b/Source/monstdat.h index ce75a443..4ed5a757 100644 --- a/Source/monstdat.h +++ b/Source/monstdat.h @@ -17,8 +17,8 @@ extern MonsterData monsterdata[]; extern int MonstConvTbl[]; extern int MonstAvailTbl[]; #else -extern BYTE MonstConvTbl[]; -extern BYTE MonstAvailTbl[]; +extern char MonstConvTbl[]; +extern char MonstAvailTbl[]; #endif extern UniqMonstStruct UniqMonst[]; diff --git a/Source/monster.cpp b/Source/monster.cpp index 7837edb2..fd03624d 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -29,10 +29,6 @@ int monstimgtot; int uniquetrans; int nummtypes; -#ifdef HELLFIRE -int HorkXAdd[8] = { 1, 0, -1, -1, -1, 0, 1, 1 }; -int HorkYAdd[8] = { 1, 1, 1, 0, -1, -1, -1, 0 }; -#endif /** Maps from walking path step to facing direction. */ const char plr2monst[9] = { 0, 5, 3, 7, 1, 4, 6, 0, 2 }; /** Maps from monster intelligence factor to missile type. */ @@ -80,6 +76,11 @@ int offset_x[8] = { 1, 0, -1, -1, -1, 0, 1, 1 }; /** Maps from direction to delta Y-offset. */ int offset_y[8] = { 1, 1, 1, 0, -1, -1, -1, 0 }; +#ifdef HELLFIRE +int HorkXAdd[8] = { 1, 0, -1, -1, -1, 0, 1, 1 }; // CODEFIX: same values as offset_x, remove it and use offset_x instead +int HorkYAdd[8] = { 1, 1, 1, 0, -1, -1, -1, 0 }; // CODEFIX: same values as offset_y, remove it and use offset_y instead +#endif + /** unused */ int rnd5[4] = { 5, 10, 15, 20 }; int rnd10[4] = { 10, 15, 20, 30 }; @@ -1245,17 +1246,17 @@ void SetMapMonsters(BYTE *pMap, int startx, int starty) PlaceUniqueMonst(UMT_BLACKJADE, 0, 0); } lm = (WORD *)pMap; - rw = SDL_SwapLE16(*lm); - lm++; - rh = SDL_SwapLE16(*lm); - lm += (rw * rh + 1); + rw = SDL_SwapLE16(*lm++); + lm; + rh = SDL_SwapLE16(*lm++); + lm += rw * rh; rw = rw << 1; rh = rh << 1; lm += rw * rh; for (j = 0; j < rh; j++) { for (i = 0; i < rw; i++) { - if (*lm) { + if (*lm != 0) { mtype = AddMonsterType(MonstConvTbl[SDL_SwapLE16(*lm) - 1], PLACE_SPECIAL); PlaceMonster(nummonsters++, mtype, i + startx + 16, j + starty + 16); } @@ -1400,7 +1401,7 @@ void M_Enemy(int i) continue; if (!(Monst->_mFlags & MFLAG_GOLEM) && ((abs(monster[mi]._mx - Monst->_mx) >= 2 || abs(monster[mi]._my - Monst->_my) >= 2) && !M_Ranged(i) - || (!(Monst->_mFlags & MFLAG_GOLEM) && !(monster[mi]._mFlags & MFLAG_GOLEM)))) { + || (!(Monst->_mFlags & MFLAG_GOLEM) && !(monster[mi]._mFlags & MFLAG_GOLEM)))) { continue; } sameroom = dTransVal[Monst->_mx][Monst->_my] == dTransVal[monster[mi]._mx][monster[mi]._my]; @@ -1749,7 +1750,7 @@ void M_DiabloDeath(int i, BOOL sendmsg) int dist; int j, k; - Monst = monster + i; + Monst = &monster[i]; PlaySFX(USFX_DIABLOD); quests[Q_DIABLO]._qactive = QUEST_DONE; if (sendmsg) @@ -1944,7 +1945,7 @@ void MonstStartKill(int i, int pnum, BOOL sendmsg) #else if (Monst->MType->mtype >= MT_NACID && Monst->MType->mtype <= MT_XACID) #endif - AddMissile(Monst->_mx, Monst->_my, 0, 0, 0, MIS_ACIDPUD, 1, i, Monst->_mint + 1, 0); + AddMissile(Monst->_mx, Monst->_my, 0, 0, 0, MIS_ACIDPUD, TARGET_PLAYERS, i, Monst->_mint + 1, 0); } void M2MStartKill(int i, int mid) @@ -1999,7 +2000,7 @@ void M2MStartKill(int i, int mid) CheckQuestKill(mid, TRUE); M_FallenFear(monster[mid]._mx, monster[mid]._my); if (monster[mid].MType->mtype >= MT_NACID && monster[mid].MType->mtype <= MT_XACID) - AddMissile(monster[mid]._mx, monster[mid]._my, 0, 0, 0, MIS_ACIDPUD, 1, mid, monster[mid]._mint + 1, 0); + AddMissile(monster[mid]._mx, monster[mid]._my, 0, 0, 0, MIS_ACIDPUD, TARGET_PLAYERS, mid, monster[mid]._mint + 1, 0); } void M_StartKill(int i, int pnum) @@ -2547,13 +2548,25 @@ BOOL M_DoAttack(int i) MonsterStruct *Monst; if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoAttack: Invalid monster %d", i); +#endif Monst = &monster[i]; if (Monst->MType == NULL) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoAttack: Monster %d \"%s\" MType NULL", i, Monst->mName); +#endif if (Monst->MType == NULL) // BUGFIX: should check MData +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoAttack: Monster %d \"%s\" MData NULL", i, Monst->mName); +#endif if (monster[i]._mAnimFrame == monster[i].MData->mAFNum) { M_TryH2HHit(i, monster[i]._menemy, monster[i].mHit, monster[i].mMinDamage, monster[i].mMaxDamage); @@ -2583,27 +2596,44 @@ BOOL M_DoRAttack(int i) int multimissiles, mi; if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoRAttack: Invalid monster %d", i); +#endif if (monster[i].MType == NULL) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoRAttack: Monster %d \"%s\" MType NULL", i, monster[i].mName); +#endif if (monster[i].MType == NULL) // BUGFIX: should check MData +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoRAttack: Monster %d \"%s\" MData NULL", i, monster[i].mName); +#endif if (monster[i]._mAnimFrame == monster[i].MData->mAFNum) { if (monster[i]._mVar1 != -1) { - if (monster[i]._mVar1 != MIS_CBOLT) - multimissiles = 1; - else + if (monster[i]._mVar1 == MIS_CBOLT) multimissiles = 3; + else + multimissiles = 1; for (mi = 0; mi < multimissiles; mi++) { AddMissile( +#ifdef HELLFIRE + monster[i]._mx + HorkXAdd[monster[i]._mdir], + monster[i]._my + HorkYAdd[monster[i]._mdir], +#else monster[i]._mx, monster[i]._my, +#endif monster[i]._menemyx, monster[i]._menemyy, monster[i]._mdir, monster[i]._mVar1, - 1, + TARGET_PLAYERS, i, monster[i]._mVar2, 0); @@ -2620,34 +2650,52 @@ BOOL M_DoRAttack(int i) return FALSE; } -int M_DoRSpAttack(int i) +BOOL M_DoRSpAttack(int i) { if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoRSpAttack: Invalid monster %d", i); +#endif if (monster[i].MType == NULL) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoRSpAttack: Monster %d \"%s\" MType NULL", i, monster[i].mName); +#endif if (monster[i].MType == NULL) // BUGFIX: should check MData +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoRSpAttack: Monster %d \"%s\" MData NULL", i, monster[i].mName); +#endif if (monster[i]._mAnimFrame == monster[i].MData->mAFNum2 && monster[i]._mAnimCnt == 0) { AddMissile( +#ifdef HELLFIRE + monster[i]._mx + HorkXAdd[monster[i]._mdir], + monster[i]._my + HorkYAdd[monster[i]._mdir], +#else monster[i]._mx, monster[i]._my, +#endif monster[i]._menemyx, monster[i]._menemyy, monster[i]._mdir, monster[i]._mVar1, - 1, + TARGET_PLAYERS, i, monster[i]._mVar3, 0); - PlayEffect(i, 3); +#ifdef HELLFIRE + if (Monsters[i].Snds[3][0] != 0) +#endif + PlayEffect(i, 3); } if (monster[i]._mAi == AI_MEGA && monster[i]._mAnimFrame == 3) { - int hadV2 = monster[i]._mVar2; - monster[i]._mVar2++; - if (hadV2 == 0) { + if (monster[i]._mVar2++ == 0) { monster[i]._mFlags |= MFLAG_ALLOW_SPECIAL; } else if (monster[i]._mVar2 == 15) { monster[i]._mFlags &= ~MFLAG_ALLOW_SPECIAL; @@ -2665,11 +2713,23 @@ int M_DoRSpAttack(int i) BOOL M_DoSAttack(int i) { if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoSAttack: Invalid monster %d", i); +#endif if (monster[i].MType == NULL) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoSAttack: Monster %d \"%s\" MType NULL", i, monster[i].mName); +#endif if (monster[i].MType == NULL) // BUGFIX: should check MData +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoSAttack: Monster %d \"%s\" MData NULL", i, monster[i].mName); +#endif if (monster[i]._mAnimFrame == monster[i].MData->mAFNum2) M_TryH2HHit(i, monster[i]._menemy, monster[i].mHit2, monster[i].mMinDamage2, monster[i].mMaxDamage2); @@ -2685,7 +2745,11 @@ BOOL M_DoSAttack(int i) BOOL M_DoFadein(int i) { if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoFadein: Invalid monster %d", i); +#endif if ((!(monster[i]._mFlags & MFLAG_LOCK_ANIMATION) || monster[i]._mAnimFrame != 1) && (monster[i]._mFlags & MFLAG_LOCK_ANIMATION || monster[i]._mAnimFrame != monster[i]._mAnimLen)) { @@ -2703,7 +2767,11 @@ BOOL M_DoFadeout(int i) int mt; if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoFadeout: Invalid monster %d", i); +#endif if ((!(monster[i]._mFlags & MFLAG_LOCK_ANIMATION) || monster[i]._mAnimFrame != 1) && (monster[i]._mFlags & MFLAG_LOCK_ANIMATION || monster[i]._mAnimFrame != monster[i]._mAnimLen)) { @@ -2723,16 +2791,22 @@ BOOL M_DoFadeout(int i) return TRUE; } -int M_DoHeal(int i) +BOOL M_DoHeal(int i) { MonsterStruct *Monst; if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoHeal: Invalid monster %d", i); - Monst = monster + i; +#endif + Monst = &monster[i]; if (monster[i]._mFlags & MFLAG_NOHEAL) { +#ifndef HELLFIRE Monst->_mFlags &= ~MFLAG_ALLOW_SPECIAL; Monst->_mmode = MM_SATTACK; +#endif return FALSE; } @@ -2750,39 +2824,43 @@ int M_DoHeal(int i) return FALSE; } -int M_DoTalk(int i) +BOOL M_DoTalk(int i) { MonsterStruct *Monst; int tren; if ((DWORD)i >= MAXMONSTERS) - app_fatal("M_DoTalk: Invalid monster %d", i); - - Monst = monster + i; - M_StartStand(i, Monst->_mdir); - monster[i]._mgoal = MGOAL_TALKING; - if (effect_is_playing(alltext[Monst->mtalkmsg].sfxnr)) +#ifdef HELLFIRE return FALSE; - InitQTextMsg(Monst->mtalkmsg); - if (Monst->mName == UniqMonst[UMT_GARBUD].mName) { - if (Monst->mtalkmsg == TEXT_GARBUD1) +#else + app_fatal("M_DoTalk: Invalid monster %d", i); +#endif + + Monst = &monster[i]; + M_StartStand(i, monster[i]._mdir); + Monst->_mgoal = MGOAL_TALKING; // CODEFIX: apply Monst instead of monster[i] in the rest of the function + if (effect_is_playing(alltext[monster[i].mtalkmsg].sfxnr)) + return FALSE; + InitQTextMsg(monster[i].mtalkmsg); + if (monster[i].mName == UniqMonst[UMT_GARBUD].mName) { + if (monster[i].mtalkmsg == TEXT_GARBUD1) quests[Q_GARBUD]._qactive = QUEST_ACTIVE; - quests[Q_GARBUD]._qlog = TRUE; - if (Monst->mtalkmsg == TEXT_GARBUD2 && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) { - SpawnItem(i, Monst->_mx + 1, Monst->_my + 1, TRUE); - Monst->_mFlags |= MFLAG_QUEST_COMPLETE; + quests[Q_GARBUD]._qlog = TRUE; // BUGFIX: (?) for other quests qactive and qlog go together, maybe this should actually go into the if above + if (monster[i].mtalkmsg == TEXT_GARBUD2 && !(monster[i]._mFlags & MFLAG_QUEST_COMPLETE)) { + SpawnItem(i, monster[i]._mx + 1, monster[i]._my + 1, TRUE); + monster[i]._mFlags |= MFLAG_QUEST_COMPLETE; } } - if (Monst->mName == UniqMonst[UMT_ZHAR].mName - && Monst->mtalkmsg == TEXT_ZHAR1 - && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) { + if (monster[i].mName == UniqMonst[UMT_ZHAR].mName + && monster[i].mtalkmsg == TEXT_ZHAR1 + && !(monster[i]._mFlags & MFLAG_QUEST_COMPLETE)) { quests[Q_ZHAR]._qactive = QUEST_ACTIVE; quests[Q_ZHAR]._qlog = TRUE; - CreateTypeItem(Monst->_mx + 1, Monst->_my + 1, FALSE, ITYPE_MISC, IMISC_BOOK, TRUE, FALSE); - Monst->_mFlags |= MFLAG_QUEST_COMPLETE; + CreateTypeItem(monster[i]._mx + 1, monster[i]._my + 1, FALSE, ITYPE_MISC, IMISC_BOOK, TRUE, FALSE); + monster[i]._mFlags |= MFLAG_QUEST_COMPLETE; } - if (Monst->mName == UniqMonst[UMT_SNOTSPIL].mName) { - if (Monst->mtalkmsg == TEXT_BANNER10 && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) { + if (monster[i].mName == UniqMonst[UMT_SNOTSPIL].mName) { + if (monster[i].mtalkmsg == TEXT_BANNER10 && !(monster[i]._mFlags & MFLAG_QUEST_COMPLETE)) { ObjChangeMap(setpc_x, setpc_y, (setpc_w >> 1) + setpc_x + 2, (setpc_h >> 1) + setpc_y - 2); tren = TransVal; TransVal = 9; @@ -2791,67 +2869,72 @@ int M_DoTalk(int i) quests[Q_LTBANNER]._qvar1 = 2; if (quests[Q_LTBANNER]._qactive == QUEST_INIT) quests[Q_LTBANNER]._qactive = QUEST_ACTIVE; - Monst->_mFlags |= MFLAG_QUEST_COMPLETE; + monster[i]._mFlags |= MFLAG_QUEST_COMPLETE; } if (quests[Q_LTBANNER]._qvar1 < 2) { - sprintf(tempstr, "SS Talk = %i, Flags = %i", Monst->mtalkmsg, Monst->_mFlags); + sprintf(tempstr, "SS Talk = %i, Flags = %i", monster[i].mtalkmsg, monster[i]._mFlags); // CODEFIX: no need for tempstr, app_fatal supports v_args app_fatal(tempstr); } } - if (Monst->mName == UniqMonst[UMT_LACHDAN].mName) { - if (Monst->mtalkmsg == TEXT_VEIL9) { + if (monster[i].mName == UniqMonst[UMT_LACHDAN].mName) { + if (monster[i].mtalkmsg == TEXT_VEIL9) { quests[Q_VEIL]._qactive = QUEST_ACTIVE; quests[Q_VEIL]._qlog = TRUE; } - if (Monst->mtalkmsg == TEXT_VEIL11 && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) { - SpawnUnique(UITEM_STEELVEIL, Monst->_mx + 1, Monst->_my + 1); - Monst->_mFlags |= MFLAG_QUEST_COMPLETE; + if (monster[i].mtalkmsg == TEXT_VEIL11 && !(monster[i]._mFlags & MFLAG_QUEST_COMPLETE)) { + SpawnUnique(UITEM_STEELVEIL, monster[i]._mx + 1, monster[i]._my + 1); + monster[i]._mFlags |= MFLAG_QUEST_COMPLETE; } } - if (Monst->mName == UniqMonst[UMT_WARLORD].mName) + if (monster[i].mName == UniqMonst[UMT_WARLORD].mName) quests[Q_WARLORD]._qvar1 = 2; - if (Monst->mName == UniqMonst[UMT_LAZURUS].mName && gbMaxPlayers != 1) { - Monst->_msquelch = UCHAR_MAX; - Monst->mtalkmsg = 0; + if (monster[i].mName == UniqMonst[UMT_LAZURUS].mName && gbMaxPlayers != 1) { quests[Q_BETRAYER]._qvar1 = 6; - Monst->_mgoal = MGOAL_NORMAL; + monster[i]._mgoal = MGOAL_NORMAL; + monster[i]._msquelch = UCHAR_MAX; + monster[i].mtalkmsg = 0; } return FALSE; } void M_Teleport(int i) { - BOOL tren; + BOOL done; MonsterStruct *Monst; int k, j, x, y, _mx, _my, rx, ry; if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return; +#else app_fatal("M_Teleport: Invalid monster %d", i); +#endif - tren = FALSE; + done = FALSE; Monst = &monster[i]; - if (Monst->_mmode != MM_STONE) { - _mx = Monst->_menemyx; - _my = Monst->_menemyy; - rx = 2 * random_(100, 2) - 1; - ry = 2 * random_(100, 2) - 1; + if (Monst->_mmode == MM_STONE) + return; - for (j = -1; j <= 1 && !tren; j++) { - for (k = -1; k < 1 && !tren; k++) { - if (j != 0 || k != 0) { - x = _mx + rx * j; - y = _my + ry * k; - if (y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX && x != Monst->_mx && y != Monst->_my) { - if (PosOkMonst(i, x, y)) - tren = TRUE; - } + _mx = Monst->_menemyx; + _my = Monst->_menemyy; + rx = 2 * random_(100, 2) - 1; + ry = 2 * random_(100, 2) - 1; + + for (j = -1; j <= 1 && !done; j++) { + for (k = -1; k < 1 && !done; k++) { + if (j != 0 || k != 0) { + x = _mx + rx * j; + y = _my + ry * k; + if (y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX && x != Monst->_mx && y != Monst->_my) { + if (PosOkMonst(i, x, y)) + done = TRUE; } } } } - if (tren) { + if (done) { M_ClearSquares(i); dMonster[Monst->_mx][Monst->_my] = 0; dMonster[x][y] = i + 1; @@ -2864,10 +2947,18 @@ void M_Teleport(int i) BOOL M_DoGotHit(int i) { if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoGotHit: Invalid monster %d", i); +#endif if (monster[i].MType == NULL) +#ifdef HELLFIRE + return FALSE; +#else app_fatal("M_DoGotHit: Monster %d \"%s\" MType NULL", i, monster[i].mName); +#endif if (monster[i]._mAnimFrame == monster[i]._mAnimLen) { M_StartStand(i, monster[i]._mdir); @@ -2882,7 +2973,11 @@ void M_UpdateLeader(int i) int ma, j; if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return; +#else app_fatal("M_UpdateLeader: Invalid monster %d", i); +#endif for (j = 0; j < nummonsters; j++) { ma = monstactive[j]; @@ -3210,11 +3305,11 @@ BOOL M_CallWalk(int i, int md) mdtemp = md; ok = DirOK(i, md); - if (random_(101, 2)) + if (random_(101, 2) != 0) ok = ok || (md = left[mdtemp], DirOK(i, md)) || (md = right[mdtemp], DirOK(i, md)); else ok = ok || (md = right[mdtemp], DirOK(i, md)) || (md = left[mdtemp], DirOK(i, md)); - if (random_(102, 2)) + if (random_(102, 2) != 0) ok = ok || (md = right[right[mdtemp]], DirOK(i, md)) || (md = left[left[mdtemp]], DirOK(i, md)); @@ -3258,8 +3353,8 @@ BOOL M_CallWalk2(int i, int md) int mdtemp; mdtemp = md; - ok = DirOK(i, md); // Can we continue in the same direction - if (random_(101, 2)) { // Randomly go left or right + ok = DirOK(i, md); // Can we continue in the same direction + if (random_(101, 2) != 0) { // Randomly go left or right ok = ok || (mdtemp = left[md], DirOK(i, left[md])) || (mdtemp = right[md], DirOK(i, right[md])); } else { ok = ok || (mdtemp = right[md], DirOK(i, right[md])) || (mdtemp = left[md], DirOK(i, left[md])); @@ -3462,7 +3557,7 @@ void MAI_Snake(int i) #endif } char pattern[6] = { 1, 1, 0, -1, -1, 0 }; - Monst = monster + i; + Monst = &monster[i]; pnum = Monst->_menemy; if (Monst->_mmode != MM_STAND || Monst->_msquelch == 0) return; @@ -3563,7 +3658,7 @@ void MAI_Bat(int i) M_CallWalk(i, opposite[md]); Monst->_mgoalvar1++; } else { - if (random_(108, 2)) + if (random_(108, 2) != 0) M_CallWalk(i, left[md]); else M_CallWalk(i, right[md]); @@ -3594,7 +3689,7 @@ void MAI_Bat(int i) Monst->_mgoal = MGOAL_RETREAT; Monst->_mgoalvar1 = 0; if (Monst->MType->mtype == MT_FAMILIAR) { - AddMissile(Monst->_menemyx, Monst->_menemyy, Monst->_menemyx + 1, 0, -1, MIS_LIGHTNING, 1, i, random_(109, 10) + 1, 0); + AddMissile(Monst->_menemyx, Monst->_menemyy, Monst->_menemyx + 1, 0, -1, MIS_LIGHTNING, TARGET_PLAYERS, i, random_(109, 10) + 1, 0); } } @@ -3703,7 +3798,7 @@ void MAI_Sneak(int i) #endif } - Monst = monster + i; + Monst = &monster[i]; if (Monst->_mmode == MM_STAND) { mx = Monst->_mx; my = Monst->_my; @@ -3734,7 +3829,7 @@ void MAI_Sneak(int i) md = GetDirection(Monst->_mx, Monst->_my, plr[Monst->_menemy]._pownerx, plr[Monst->_menemy]._pownery); md = opposite[md]; if (Monst->MType->mtype == MT_UNSEEN) { - if (random_(112, 2)) + if (random_(112, 2) != 0) md = left[md]; else md = right[md]; @@ -3950,7 +4045,7 @@ void MAI_Round(int i, BOOL special) #else app_fatal("MAI_Round: Invalid monster %d", i); #endif - Monst = monster + i; + Monst = &monster[i]; if (Monst->_mmode == MM_STAND && Monst->_msquelch != 0) { fy = Monst->_menemyy; fx = Monst->_menemyx; @@ -4022,7 +4117,7 @@ void MAI_Ranged(int i, int missile_type, BOOL special) return; } - Monst = monster + i; + Monst = &monster[i]; if (Monst->_msquelch == UCHAR_MAX || Monst->_mFlags & MFLAG_TARGETS_MONSTER) { fx = Monst->_menemyx; fy = Monst->_menemyy; @@ -4118,7 +4213,7 @@ void MAI_Scav(int i) #else app_fatal("MAI_Scav: Invalid monster %d", i); #endif - Monst = monster + i; + Monst = &monster[i]; _mx = Monst->_mx; _my = Monst->_my; done = FALSE; @@ -4153,11 +4248,11 @@ void MAI_Scav(int i) continue; done = dDead[Monst->_mx + x][Monst->_my + y] != 0 && LineClearF( - CheckNoSolid, - Monst->_mx, - Monst->_my, - Monst->_mx + x, - Monst->_my + y); + CheckNoSolid, + Monst->_mx, + Monst->_my, + Monst->_mx + x, + Monst->_my + y); } } x--; @@ -4170,11 +4265,11 @@ void MAI_Scav(int i) continue; done = dDead[Monst->_mx + x][Monst->_my + y] != 0 && LineClearF( - CheckNoSolid, - Monst->_mx, - Monst->_my, - Monst->_mx + x, - Monst->_my + y); + CheckNoSolid, + Monst->_mx, + Monst->_my, + Monst->_mx + x, + Monst->_my + y); } } x++; @@ -4223,7 +4318,7 @@ void MAI_Garg(int i) return; } - if (Monst->_mhitpoints_mmaxhp>> 1 && !(Monst->_mFlags & MFLAG_NOHEAL)) + if (Monst->_mhitpoints < (Monst->_mmaxhp >> 1) && !(Monst->_mFlags & MFLAG_NOHEAL)) Monst->_mgoal = MGOAL_RETREAT; if (Monst->_mgoal == MGOAL_RETREAT) { if (abs(dx) >= Monst->_mint + 2 || abs(dy) >= Monst->_mint + 2) { @@ -4244,8 +4339,12 @@ void MAI_RoundRanged(int i, int missile_type, BOOL checkdoors, int dam, int less int md, dist, v; if ((DWORD)i >= MAXMONSTERS) +#ifdef HELLFIRE + return; +#else app_fatal("MAI_RoundRanged: Invalid monster %d", i); - Monst = monster + i; +#endif + Monst = &monster[i]; if (Monst->_mmode == MM_STAND && Monst->_msquelch != 0) { fx = Monst->_menemyx; fy = Monst->_menemyy; @@ -4269,7 +4368,7 @@ void MAI_RoundRanged(int i, int missile_type, BOOL checkdoors, int dam, int less } if (Monst->_mgoalvar1++ >= 2 * dist && DirOK(i, md)) { Monst->_mgoal = MGOAL_NORMAL; - } else if (v<500 * (Monst->_mint + 1)>> lessmissiles + } else if (v < (500 * (Monst->_mint + 1) >> lessmissiles) && (LineClear(Monst->_mx, Monst->_my, fx, fy))) { M_StartRSpAttack(i, missile_type, dam); } else { @@ -4337,7 +4436,7 @@ void MAI_RR2(int i, int mistype, int dam) if ((DWORD)i >= MAXMONSTERS) app_fatal("MAI_RR2: Invalid monster %d", i); - Monst = monster + i; + Monst = &monster[i]; mx = Monst->_mx - Monst->_menemyx; my = Monst->_my - Monst->_menemyy; if (abs(mx) >= 5 || abs(my) >= 5) { @@ -4495,7 +4594,7 @@ void MAI_SkelKing(int i) if ((DWORD)i >= MAXMONSTERS) app_fatal("MAI_SkelKing: Invalid monster %d", i); - Monst = monster + i; + Monst = &monster[i]; if (Monst->_mmode == MM_STAND && Monst->_msquelch != 0) { fx = Monst->_menemyx; fy = Monst->_menemyy; @@ -4563,7 +4662,7 @@ void MAI_Rhino(int i) if ((DWORD)i >= MAXMONSTERS) app_fatal("MAI_Rhino: Invalid monster %d", i); - Monst = monster + i; + Monst = &monster[i]; if (Monst->_mmode == MM_STAND && Monst->_msquelch != 0) { fx = Monst->_menemyx; fy = Monst->_menemyy; @@ -4608,8 +4707,8 @@ void MAI_Rhino(int i) v = random_(134, 100); if (v >= 2 * Monst->_mint + 33 && (Monst->_mVar1 != MM_WALK && Monst->_mVar1 != MM_WALK2 && Monst->_mVar1 != MM_WALK3 - || Monst->_mVar2 - || v >= 2 * Monst->_mint + 83)) { + || Monst->_mVar2 + || v >= 2 * Monst->_mint + 83)) { M_StartDelay(i, random_(135, 10) + 10); } else { M_CallWalk(i, md); @@ -4707,7 +4806,7 @@ void MAI_Counselor(int i) if ((DWORD)i >= MAXMONSTERS) app_fatal("MAI_Counselor: Invalid monster %d", i); if (monster[i]._mmode == MM_STAND && monster[i]._msquelch != 0) { - Monst = monster + i; + Monst = &monster[i]; fx = Monst->_menemyx; fy = Monst->_menemyy; mx = Monst->_mx - fx; @@ -4758,8 +4857,8 @@ void MAI_Counselor(int i) } else if (Monst->_mVar1 == MM_DELAY || random_(105, 100) < 2 * Monst->_mint + 20) { M_StartRAttack(i, -1, 0); - AddMissile(Monst->_mx, Monst->_my, 0, 0, Monst->_mdir, MIS_FLASH, 1, i, 4, 0); - AddMissile(Monst->_mx, Monst->_my, 0, 0, Monst->_mdir, MIS_FLASH2, 1, i, 4, 0); + AddMissile(Monst->_mx, Monst->_my, 0, 0, Monst->_mdir, MIS_FLASH, TARGET_PLAYERS, i, 4, 0); + AddMissile(Monst->_mx, Monst->_my, 0, 0, Monst->_mdir, MIS_FLASH2, TARGET_PLAYERS, i, 4, 0); } else M_StartDelay(i, random_(105, 10) + 2 * (5 - Monst->_mint)); } @@ -4975,7 +5074,7 @@ void MAI_Lazhelp(int i) if (monster[i]._mmode != MM_STAND) return; - Monst = monster + i; + Monst = &monster[i]; _mx = Monst->_mx; _my = Monst->_my; md = M_GetDir(i); @@ -5529,68 +5628,69 @@ BOOL LineClearF1(BOOL (*Clear)(int, int, int), int monst, int x1, int y1, int x2 void SyncMonsterAnim(int i) { - MonsterData *MData; int _mdir; - MonsterStruct *Monst; +#ifdef HELLFIRE + if ((DWORD)i >= MAXMONSTERS || i < 0) + return; +#else if ((DWORD)i >= MAXMONSTERS) app_fatal("SyncMonsterAnim: Invalid monster %d", i); - Monst = monster + i; - Monst->MType = Monsters + Monst->_mMTidx; - MData = Monsters[Monst->_mMTidx].MData; - Monst->MData = MData; - if (Monst->_uniqtype != 0) - Monst->mName = UniqMonst[Monst->_uniqtype - 1].mName; +#endif + monster[i].MType = &Monsters[monster[i]._mMTidx]; + monster[i].MData = Monsters[monster[i]._mMTidx].MData; + if (monster[i]._uniqtype != 0) + monster[i].mName = UniqMonst[monster[i]._uniqtype - 1].mName; else - Monst->mName = MData->mName; + monster[i].mName = monster[i].MData->mName; _mdir = monster[i]._mdir; - switch (Monst->_mmode) { + switch (monster[i]._mmode) { + case MM_STAND: + monster[i]._mAnimData = monster[i].MType->Anims[MA_STAND].Data[_mdir]; + break; case MM_WALK: case MM_WALK2: case MM_WALK3: - Monst->_mAnimData = Monst->MType->Anims[MA_WALK].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_WALK].Data[_mdir]; + break; case MM_ATTACK: case MM_RATTACK: - Monst->_mAnimData = Monst->MType->Anims[MA_ATTACK].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_ATTACK].Data[_mdir]; + break; case MM_GOTHIT: - Monst->_mAnimData = Monst->MType->Anims[MA_GOTHIT].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_GOTHIT].Data[_mdir]; + break; case MM_DEATH: - Monst->_mAnimData = Monst->MType->Anims[MA_DEATH].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_DEATH].Data[_mdir]; + break; case MM_SATTACK: case MM_FADEIN: case MM_FADEOUT: - Monst->_mAnimData = Monst->MType->Anims[MA_SPECIAL].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_SPECIAL].Data[_mdir]; + break; case MM_SPSTAND: case MM_RSPATTACK: - Monst->_mAnimData = Monst->MType->Anims[MA_SPECIAL].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_SPECIAL].Data[_mdir]; + break; case MM_HEAL: - Monst->_mAnimData = Monst->MType->Anims[MA_SPECIAL].Data[_mdir]; - return; - case MM_STAND: - Monst->_mAnimData = Monst->MType->Anims[MA_STAND].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_SPECIAL].Data[_mdir]; + break; case MM_DELAY: - Monst->_mAnimData = Monst->MType->Anims[MA_STAND].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_STAND].Data[_mdir]; + break; case MM_TALK: - Monst->_mAnimData = Monst->MType->Anims[MA_STAND].Data[_mdir]; - return; + monster[i]._mAnimData = monster[i].MType->Anims[MA_STAND].Data[_mdir]; + break; case MM_CHARGE: - Monst->_mAnimData = Monst->MType->Anims[MA_ATTACK].Data[_mdir]; - Monst->_mAnimFrame = 1; - Monst->_mAnimLen = Monst->MType->Anims[MA_ATTACK].Frames; + monster[i]._mAnimData = monster[i].MType->Anims[MA_ATTACK].Data[_mdir]; + monster[i]._mAnimFrame = 1; + monster[i]._mAnimLen = monster[i].MType->Anims[MA_ATTACK].Frames; break; default: - Monst->_mAnimData = Monst->MType->Anims[MA_STAND].Data[_mdir]; - Monst->_mAnimFrame = 1; - Monst->_mAnimLen = Monst->MType->Anims[MA_STAND].Frames; + monster[i]._mAnimData = monster[i].MType->Anims[MA_STAND].Data[_mdir]; + monster[i]._mAnimFrame = 1; + monster[i]._mAnimLen = monster[i].MType->Anims[MA_STAND].Frames; break; } } diff --git a/Source/msg.cpp b/Source/msg.cpp index b5062c2f..eefd52b5 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -35,9 +35,9 @@ static void msg_get_next_packet() sgpCurrPkt->dwSpaceLeft = sizeof(result->data); result = (TMegaPkt *)&sgpMegaPkt; - while (result->pNext) { + while (result->pNext) result = result->pNext; - } + result->pNext = sgpCurrPkt; } @@ -53,29 +53,25 @@ static void msg_free_packets() static void msg_pre_packet() { int i; - int spaceLeft, pktSize; - TMegaPkt *pkt; - TFakeCmdPlr *cmd, *tmpCmd; - TFakeDropPlr *dropCmd; i = -1; - for (pkt = sgpMegaPkt; pkt != NULL; pkt = pkt->pNext) { - spaceLeft = sizeof(pkt->data); - cmd = (TFakeCmdPlr *)pkt->data; + for (TMegaPkt *pkt = sgpMegaPkt; pkt != NULL; pkt = pkt->pNext) { + BYTE *data = pkt->data; + int spaceLeft = sizeof(pkt->data); while (spaceLeft != pkt->dwSpaceLeft) { - if (cmd->bCmd == FAKE_CMD_SETID) { - tmpCmd = cmd; - cmd++; - i = tmpCmd->bPlr; + if (*data == FAKE_CMD_SETID) { + TFakeCmdPlr *cmd = (TFakeCmdPlr *)data; + data += sizeof(*cmd); spaceLeft -= sizeof(*cmd); - } else if (cmd->bCmd == FAKE_CMD_DROPID) { - dropCmd = (TFakeDropPlr *)cmd; - cmd += 3; - spaceLeft -= sizeof(*dropCmd); - multi_player_left(dropCmd->bPlr, dropCmd->dwReason); + i = cmd->bPlr; + } else if (*data == FAKE_CMD_DROPID) { + TFakeDropPlr *cmd = (TFakeDropPlr *)data; + data += sizeof(*cmd); + spaceLeft -= sizeof(*cmd); + multi_player_left(cmd->bPlr, cmd->dwReason); } else { - pktSize = ParseCmd(i, (TCmd *)cmd); - cmd = (TFakeCmdPlr *)((char *)cmd + pktSize); + int pktSize = ParseCmd(i, (TCmd *)data); + data += pktSize; spaceLeft -= pktSize; } } @@ -84,7 +80,6 @@ static void msg_pre_packet() static void msg_send_packet(int pnum, const void *packet, DWORD dwSize) { - TMegaPkt *packeta; TFakeCmdPlr cmd; if (pnum != sgnCurrMegaPlayer) { @@ -93,12 +88,10 @@ static void msg_send_packet(int pnum, const void *packet, DWORD dwSize) cmd.bPlr = pnum; msg_send_packet(pnum, &cmd, sizeof(cmd)); } - packeta = sgpCurrPkt; - if (sgpCurrPkt->dwSpaceLeft < dwSize) { + if (sgpCurrPkt->dwSpaceLeft < dwSize) msg_get_next_packet(); - packeta = sgpCurrPkt; - } - memcpy((char *)&packeta[1] - packeta->dwSpaceLeft, packet, dwSize); + + memcpy(sgpCurrPkt->data + sizeof(sgpCurrPkt->data) - sgpCurrPkt->dwSpaceLeft, packet, dwSize); sgpCurrPkt->dwSpaceLeft -= dwSize; } @@ -179,23 +172,21 @@ BOOL msg_wait_resync() void run_delta_info() { - if (gbMaxPlayers != 1) { - gbBufferMsgs = 2; - msg_pre_packet(); - gbBufferMsgs = 0; - msg_free_packets(); - } + if (gbMaxPlayers == 1) + return; + + gbBufferMsgs = 2; + msg_pre_packet(); + gbBufferMsgs = 0; + msg_free_packets(); } static BYTE *DeltaExportItem(BYTE *dst, TCmdPItem *src) { - int i; - - for (i = 0; i < MAXITEMS; i++) { - if (src->bCmd == 0xFF) { - *dst = 0xFF; - dst++; - } else { + for (int i = 0; i < MAXITEMS; i++, src++) { + if (src->bCmd == 0xFF) + *dst++ = 0xFF; + else { #ifdef HELLFIRE *reinterpret_cast(dst) = *src; #else @@ -203,7 +194,6 @@ static BYTE *DeltaExportItem(BYTE *dst, TCmdPItem *src) #endif dst += sizeof(TCmdPItem); } - src++; } return dst; @@ -211,9 +201,7 @@ static BYTE *DeltaExportItem(BYTE *dst, TCmdPItem *src) static BYTE *DeltaImportItem(BYTE *src, TCmdPItem *dst) { - int i; - - for (i = 0; i < MAXITEMS; i++) { + for (int i = 0; i < MAXITEMS; i++, dst++) { if (*src == 0xFF) { memset(dst, 0xFF, sizeof(TCmdPItem)); src++; @@ -225,7 +213,6 @@ static BYTE *DeltaImportItem(BYTE *src, TCmdPItem *dst) #endif src += sizeof(TCmdPItem); } - dst++; } return src; @@ -245,13 +232,10 @@ static BYTE *DeltaImportObject(BYTE *src, DObjectStr *dst) static BYTE *DeltaExportMonster(BYTE *dst, DMonsterStr *src) { - int i; - - for (i = 0; i < MAXMONSTERS; i++) { - if (src->_mx == 0xFF) { - *dst = 0xFF; - dst++; - } else { + for (int i = 0; i < MAXMONSTERS; i++, src++) { + if (src->_mx == 0xFF) + *dst++ = 0xFF; + else { #ifdef HELLFIRE *reinterpret_cast(dst) = *src; #else @@ -259,7 +243,6 @@ static BYTE *DeltaExportMonster(BYTE *dst, DMonsterStr *src) #endif dst += sizeof(DMonsterStr); } - src++; } return dst; @@ -267,9 +250,7 @@ static BYTE *DeltaExportMonster(BYTE *dst, DMonsterStr *src) static BYTE *DeltaImportMonster(BYTE *src, DMonsterStr *dst) { - int i; - - for (i = 0; i < MAXMONSTERS; i++) { + for (int i = 0; i < MAXMONSTERS; i++, dst++) { if (*src == 0xFF) { memset(dst, 0xFF, sizeof(DMonsterStr)); src++; @@ -281,7 +262,6 @@ static BYTE *DeltaImportMonster(BYTE *src, DMonsterStr *dst) #endif src += sizeof(DMonsterStr); } - dst++; } return src; @@ -293,8 +273,7 @@ static BYTE *DeltaExportJunk(BYTE *dst) for (i = 0; i < MAXPORTAL; i++) { if (sgJunk.portal[i].x == 0xFF) { - *dst = 0xFF; - dst++; + *dst++ = 0xFF; } else { #ifdef HELLFIRE *reinterpret_cast(dst) = sgJunk.portal[i]; @@ -340,12 +319,12 @@ static void DeltaImportJunk(BYTE *src) #endif src += sizeof(DPortal); SetPortalStats( - i, - TRUE, - sgJunk.portal[i].x, - sgJunk.portal[i].y, - sgJunk.portal[i].level, - sgJunk.portal[i].ltype); + i, + TRUE, + sgJunk.portal[i].x, + sgJunk.portal[i].y, + sgJunk.portal[i].level, + sgJunk.portal[i].ltype); } } @@ -367,10 +346,8 @@ static void DeltaImportJunk(BYTE *src) static int msg_comp_level(BYTE *buffer, BYTE *end) { - int size, pkSize; - - size = end - buffer - 1; - pkSize = PkwareCompress(buffer + 1, size); + int size = end - buffer - 1; + int pkSize = PkwareCompress(buffer + 1, size); *buffer = size != pkSize; return pkSize + 1; @@ -378,13 +355,10 @@ static int msg_comp_level(BYTE *buffer, BYTE *end) void DeltaExportData(int pnum) { - BYTE *dst, *dstEnd; - int size, i; - char src; - if (sgbDeltaChanged) { - dst = (BYTE *)DiabloAllocPtr(sizeof(DLevel) + 1); - for (i = 0; i < NUMLEVELS; i++) { + int size; + BYTE *dstEnd, *dst = (BYTE *)DiabloAllocPtr(sizeof(DLevel) + 1); + for (int i = 0; i < NUMLEVELS; i++) { dstEnd = dst + 1; dstEnd = DeltaExportItem(dstEnd, sgLevels[i].item); dstEnd = DeltaExportObject(dstEnd, sgLevels[i].object); @@ -398,19 +372,16 @@ void DeltaExportData(int pnum) dthread_send_delta(pnum, CMD_DLEVEL_JUNK, dst, size); mem_free_dbg(dst); } - src = 0; + char src = 0; dthread_send_delta(pnum, CMD_DLEVEL_END, &src, 1); } static void DeltaImportData(BYTE cmd, DWORD recv_offset) { - BYTE i; - BYTE *src; - if (sgRecvBuf[0] != 0) - PkwareDecompress(&sgRecvBuf[1], recv_offset, (sizeof(sgRecvBuf) / sizeof(sgRecvBuf[0])) - 1); + PkwareDecompress(&sgRecvBuf[1], recv_offset, sizeof(sgRecvBuf) - 1); - src = &sgRecvBuf[1]; + BYTE *src = &sgRecvBuf[1]; if (cmd == CMD_DLEVEL_JUNK) { DeltaImportJunk(src); #ifdef HELLFIRE @@ -418,7 +389,7 @@ static void DeltaImportData(BYTE cmd, DWORD recv_offset) #else } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_16) { #endif - i = cmd - CMD_DLEVEL_0; + BYTE i = cmd - CMD_DLEVEL_0; src = DeltaImportItem(src, sgLevels[i].item); src = DeltaImportObject(src, sgLevels[i].object); DeltaImportMonster(src, sgLevels[i].monster); @@ -484,112 +455,104 @@ void delta_init() void delta_kill_monster(int mi, BYTE x, BYTE y, BYTE bLevel) { - DMonsterStr *pD; + if (gbMaxPlayers == 1) + return; - if (gbMaxPlayers != 1) { - sgbDeltaChanged = TRUE; - pD = &sgLevels[bLevel].monster[mi]; - pD->_mx = x; - pD->_my = y; - pD->_mdir = monster[mi]._mdir; - pD->_mhitpoints = 0; - } + sgbDeltaChanged = TRUE; + DMonsterStr *pD = &sgLevels[bLevel].monster[mi]; + pD->_mx = x; + pD->_my = y; + pD->_mdir = monster[mi]._mdir; + pD->_mhitpoints = 0; } void delta_monster_hp(int mi, int hp, BYTE bLevel) { - DMonsterStr *pD; + if (gbMaxPlayers == 1) + return; - if (gbMaxPlayers != 1) { - sgbDeltaChanged = TRUE; - pD = &sgLevels[bLevel].monster[mi]; - if (pD->_mhitpoints > hp) - pD->_mhitpoints = hp; - } + sgbDeltaChanged = TRUE; + DMonsterStr *pD = &sgLevels[bLevel].monster[mi]; + if (pD->_mhitpoints > hp) + pD->_mhitpoints = hp; } void delta_sync_monster(const TSyncMonster *pSync, BYTE bLevel) { - DMonsterStr *pD; - - if (gbMaxPlayers == 1) { + if (gbMaxPlayers == 1) return; - } /// ASSERT: assert(pSync != NULL); /// ASSERT: assert(bLevel < NUMLEVELS); sgbDeltaChanged = TRUE; - pD = &sgLevels[bLevel].monster[pSync->_mndx]; - if (pD->_mhitpoints != 0) { - pD->_mx = pSync->_mx; - pD->_my = pSync->_my; - pD->_mactive = UCHAR_MAX; - pD->_menemy = pSync->_menemy; - } + DMonsterStr *pD = &sgLevels[bLevel].monster[pSync->_mndx]; + if (pD->_mhitpoints == 0) + return; + + pD->_mx = pSync->_mx; + pD->_my = pSync->_my; + pD->_mactive = UCHAR_MAX; + pD->_menemy = pSync->_menemy; } void delta_sync_golem(TCmdGolem *pG, int pnum, BYTE bLevel) { - DMonsterStr *pD; + if (gbMaxPlayers == 1) + return; - if (gbMaxPlayers != 1) { - sgbDeltaChanged = TRUE; - pD = &sgLevels[bLevel].monster[pnum]; - pD->_mx = pG->_mx; - pD->_my = pG->_my; - pD->_mactive = UCHAR_MAX; - pD->_menemy = pG->_menemy; - pD->_mdir = pG->_mdir; - pD->_mhitpoints = pG->_mhitpoints; - } + sgbDeltaChanged = TRUE; + DMonsterStr *pD = &sgLevels[bLevel].monster[pnum]; + pD->_mx = pG->_mx; + pD->_my = pG->_my; + pD->_mactive = UCHAR_MAX; + pD->_menemy = pG->_menemy; + pD->_mdir = pG->_mdir; + pD->_mhitpoints = pG->_mhitpoints; } void delta_leave_sync(BYTE bLevel) { - int i, ma; - DMonsterStr *pD; + if (gbMaxPlayers == 1) + return; + if (currlevel == 0) + glSeedTbl[0] = GetRndSeed(); + if (currlevel <= 0) + return; - if (gbMaxPlayers != 1) { - if (currlevel == 0) { - glSeedTbl[0] = GetRndSeed(); - } - if (currlevel > 0) { - for (i = 0; i < nummonsters; ++i) { - ma = monstactive[i]; - if (monster[ma]._mhitpoints) { - sgbDeltaChanged = TRUE; - pD = &sgLevels[bLevel].monster[ma]; - pD->_mx = monster[ma]._mx; - pD->_my = monster[ma]._my; - pD->_mdir = monster[ma]._mdir; - pD->_menemy = encode_enemy(ma); - pD->_mhitpoints = monster[ma]._mhitpoints; - pD->_mactive = monster[ma]._msquelch; - } - } - memcpy(&sgLocals[bLevel], automapview, sizeof(automapview)); - } + for (int i = 0; i < nummonsters; i++) { + int ma = monstactive[i]; + if (monster[ma]._mhitpoints == 0) + continue; + sgbDeltaChanged = TRUE; + DMonsterStr *pD = &sgLevels[bLevel].monster[ma]; + pD->_mx = monster[ma]._mx; + pD->_my = monster[ma]._my; + pD->_mdir = monster[ma]._mdir; + pD->_menemy = encode_enemy(ma); + pD->_mhitpoints = monster[ma]._mhitpoints; + pD->_mactive = monster[ma]._msquelch; } + memcpy(&sgLocals[bLevel].automapsv, automapview, sizeof(automapview)); } static void delta_sync_object(int oi, BYTE bCmd, BYTE bLevel) { - if (gbMaxPlayers != 1) { - sgbDeltaChanged = TRUE; - sgLevels[bLevel].object[oi].bCmd = bCmd; - } + if (gbMaxPlayers == 1) + return; + + sgbDeltaChanged = TRUE; + sgLevels[bLevel].object[oi].bCmd = bCmd; } static BOOL delta_get_item(TCmdGItem *pI, BYTE bLevel) { - TCmdPItem *pD; int i; if (gbMaxPlayers == 1) return TRUE; - pD = sgLevels[bLevel].item; + TCmdPItem *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; @@ -649,18 +612,17 @@ static BOOL delta_get_item(TCmdGItem *pI, BYTE bLevel) static void delta_put_item(TCmdPItem *pI, int x, int y, BYTE bLevel) { int i; - TCmdPItem *pD; - if (gbMaxPlayers == 1) { + if (gbMaxPlayers == 1) return; - } - pD = sgLevels[bLevel].item; + + TCmdPItem *pD = sgLevels[bLevel].item; for (i = 0; i < MAXITEMS; i++, pD++) { if (pD->bCmd != CMD_WALKXY - && pD->bCmd != 0xFF - && pD->wIndx == pI->wIndx - && pD->wCI == pI->wCI - && pD->dwSeed == pI->dwSeed) { + && pD->bCmd != 0xFF + && pD->wIndx == pI->wIndx + && pD->wCI == pI->wCI + && pD->dwSeed == pI->dwSeed) { if (pD->bCmd == CMD_ACK_PLRINFO) return; app_fatal("Trying to drop a floor item?"); @@ -697,18 +659,17 @@ BOOL delta_quest_inited(int i) void DeltaAddItem(int ii) { int i; - TCmdPItem *pD; if (gbMaxPlayers == 1) return; - pD = sgLevels[currlevel].item; + TCmdPItem *pD = sgLevels[currlevel].item; for (i = 0; i < MAXITEMS; i++, pD++) { if (pD->bCmd != 0xFF - && pD->wIndx == item[ii].IDidx - && pD->wCI == item[ii]._iCreateInfo - && pD->dwSeed == item[ii]._iSeed - && (pD->bCmd == CMD_WALKXY || pD->bCmd == CMD_STAND)) { + && pD->wIndx == item[ii].IDidx + && pD->wCI == item[ii]._iCreateInfo + && pD->dwSeed == item[ii]._iSeed + && (pD->bCmd == CMD_WALKXY || pD->bCmd == CMD_STAND)) { return; } } @@ -744,16 +705,15 @@ void DeltaAddItem(int ii) void DeltaSaveLevel() { - int i; + if (gbMaxPlayers == 1) + return; - if (gbMaxPlayers != 1) { - for (i = 0; i < MAX_PLRS; i++) { - if (i != myplr) - plr[i]._pGFXLoad = 0; - } - plr[myplr]._pLvlVisited[currlevel] = TRUE; - delta_leave_sync(currlevel); + for (int i = 0; i < MAX_PLRS; i++) { + if (i != myplr) + plr[i]._pGFXLoad = 0; } + plr[myplr]._pLvlVisited[currlevel] = TRUE; + delta_leave_sync(currlevel); } void DeltaLoadLevel() @@ -763,9 +723,8 @@ void DeltaLoadLevel() int x, y, xx, yy; BOOL done; - if (gbMaxPlayers == 1) { + if (gbMaxPlayers == 1) return; - } deltaload = TRUE; if (currlevel != 0) { @@ -787,7 +746,7 @@ void DeltaLoadLevel() monster[i]._moldy = sgLevels[currlevel].monster[i]._my; // CODEFIX: useless assignment M_ClearSquares(i); if (monster[i]._mAi != AI_DIABLO) { - if (!monster[i]._uniqtype) + if (monster[i]._uniqtype == 0) /// ASSERT: assert(monster[i].MType != NULL); AddDead(monster[i]._mx, monster[i]._my, monster[i].MType->mdeadval, (direction)monster[i]._mdir); else @@ -816,9 +775,9 @@ void DeltaLoadLevel() if (sgLevels[currlevel].item[i].bCmd != 0xFF) { if (sgLevels[currlevel].item[i].bCmd == CMD_WALKXY) { ii = FindGetItem( - sgLevels[currlevel].item[i].wIndx, - sgLevels[currlevel].item[i].wCI, - sgLevels[currlevel].item[i].dwSeed); + sgLevels[currlevel].item[i].wIndx, + sgLevels[currlevel].item[i].wCI, + sgLevels[currlevel].item[i].dwSeed); if (ii != -1) { if (dItem[item[ii]._ix][item[ii]._iy] == ii + 1) dItem[item[ii]._ix][item[ii]._iy] = 0; @@ -831,23 +790,23 @@ void DeltaLoadLevel() itemactive[numitems] = ii; if (sgLevels[currlevel].item[i].wIndx == IDI_EAR) { RecreateEar( - ii, - sgLevels[currlevel].item[i].wCI, - sgLevels[currlevel].item[i].dwSeed, - sgLevels[currlevel].item[i].bId, - sgLevels[currlevel].item[i].bDur, - sgLevels[currlevel].item[i].bMDur, - sgLevels[currlevel].item[i].bCh, - sgLevels[currlevel].item[i].bMCh, - sgLevels[currlevel].item[i].wValue, - sgLevels[currlevel].item[i].dwBuff); + ii, + sgLevels[currlevel].item[i].wCI, + sgLevels[currlevel].item[i].dwSeed, + sgLevels[currlevel].item[i].bId, + sgLevels[currlevel].item[i].bDur, + sgLevels[currlevel].item[i].bMDur, + sgLevels[currlevel].item[i].bCh, + sgLevels[currlevel].item[i].bMCh, + sgLevels[currlevel].item[i].wValue, + sgLevels[currlevel].item[i].dwBuff); } else { RecreateItem( - ii, - sgLevels[currlevel].item[i].wIndx, - sgLevels[currlevel].item[i].wCI, - sgLevels[currlevel].item[i].dwSeed, - sgLevels[currlevel].item[i].wValue); + ii, + sgLevels[currlevel].item[i].wIndx, + sgLevels[currlevel].item[i].wCI, + sgLevels[currlevel].item[i].dwSeed, + sgLevels[currlevel].item[i].wValue); if (sgLevels[currlevel].item[i].bId) item[ii]._iIdentified = TRUE; item[ii]._iDurability = sgLevels[currlevel].item[i].bDur; @@ -1094,7 +1053,6 @@ void NetSendCmdGItem(BOOL bHiPri, BYTE bCmd, BYTE mast, BYTE pnum, BYTE ii) void NetSendCmdGItem2(BOOL usonly, BYTE bCmd, BYTE mast, BYTE pnum, TCmdGItem *p) { - int ticks; TCmdGItem cmd; #ifdef HELLFIRE @@ -1112,8 +1070,8 @@ void NetSendCmdGItem2(BOOL usonly, BYTE bCmd, BYTE mast, BYTE pnum, TCmdGItem *p return; } - ticks = SDL_GetTicks(); - if (!cmd.dwTime) { + int ticks = SDL_GetTicks(); + if (cmd.dwTime == 0) { cmd.dwTime = ticks; } else if (ticks - cmd.dwTime > 5000) { return; @@ -1124,7 +1082,6 @@ void NetSendCmdGItem2(BOOL usonly, BYTE bCmd, BYTE mast, BYTE pnum, TCmdGItem *p BOOL NetSendCmdReq2(BYTE bCmd, BYTE mast, BYTE pnum, TCmdGItem *p) { - int ticks; TCmdGItem cmd; #ifdef HELLFIRE @@ -1136,12 +1093,11 @@ BOOL NetSendCmdReq2(BYTE bCmd, BYTE mast, BYTE pnum, TCmdGItem *p) cmd.bPnum = pnum; cmd.bMaster = mast; - ticks = SDL_GetTicks(); - if (!cmd.dwTime) { + int ticks = SDL_GetTicks(); + if (cmd.dwTime == 0) cmd.dwTime = ticks; - } else if (ticks - cmd.dwTime > 5000) { + else if (ticks - cmd.dwTime > 5000) return FALSE; - } multi_msg_add((BYTE *)&cmd.bCmd, sizeof(cmd)); @@ -1284,13 +1240,16 @@ static BOOL i_own_level(int nReqLevel) int i; for (i = 0; i < MAX_PLRS; i++) { - if (plr[i].plractive - && !plr[i]._pLvlChanging - && plr[i].plrlevel == nReqLevel - && (i != myplr || !gbBufferMsgs)) - break; + if (!plr[i].plractive) + continue; + if (plr[i]._pLvlChanging) + continue; + if (plr[i].plrlevel != nReqLevel) + continue; + if (i == myplr && gbBufferMsgs != 0) + continue; + break; } - return i == myplr; } @@ -1516,7 +1475,8 @@ static DWORD On_GETITEM(TCmd *pCmd, int pnum) if (currlevel != p->bLevel) { ii = SyncPutItem(myplr, plr[myplr]._px, plr[myplr]._py, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff #ifdef HELLFIRE - , p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC + , + p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC #endif ); if (ii != -1) @@ -1582,7 +1542,8 @@ static DWORD On_AGETITEM(TCmd *pCmd, int pnum) if (currlevel != p->bLevel) { int ii = SyncPutItem(myplr, plr[myplr]._px, plr[myplr]._py, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff #ifdef HELLFIRE - , p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC + , + p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC #endif ); if (ii != -1) @@ -1627,7 +1588,8 @@ static DWORD On_PUTITEM(TCmd *pCmd, int pnum) else ii = SyncPutItem(pnum, p->x, p->y, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff #ifdef HELLFIRE - , p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC + , + p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC #endif ); if (ii != -1) { @@ -1654,7 +1616,8 @@ static DWORD On_SYNCPUTITEM(TCmd *pCmd, int pnum) else if (currlevel == plr[pnum].plrlevel) { int ii = SyncPutItem(pnum, p->x, p->y, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff #ifdef HELLFIRE - , p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC + , + p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC #endif ); if (ii != -1) { @@ -1682,7 +1645,8 @@ static DWORD On_RESPAWNITEM(TCmd *pCmd, int pnum) if (currlevel == plr[pnum].plrlevel && pnum != myplr) { SyncPutItem(pnum, p->x, p->y, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff #ifdef HELLFIRE - , p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC + , + p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC #endif ); } @@ -2113,7 +2077,7 @@ static DWORD On_AWAKEGOLEM(TCmd *pCmd, int pnum) } } if (addGolem) - AddMissile(plr[pnum]._px, plr[pnum]._py, p->_mx, p->_my, p->_mdir, MIS_GOLEM, 0, pnum, 0, 1); + AddMissile(plr[pnum]._px, plr[pnum]._py, p->_mx, p->_my, p->_mdir, MIS_GOLEM, TARGET_MONSTERS, pnum, 0, 1); } return sizeof(*p); @@ -2121,20 +2085,33 @@ static DWORD On_AWAKEGOLEM(TCmd *pCmd, int pnum) static DWORD On_MONSTDAMAGE(TCmd *pCmd, int pnum) { +#ifdef HELLFIRE + TCmdMonDamage *p = (TCmdMonDamage *)pCmd; +#else TCmdParam2 *p = (TCmdParam2 *)pCmd; +#endif if (gbBufferMsgs == 1) - msg_send_packet(pnum, p, sizeof(*p)); + msg_send_packet(pnum, p, sizeof(TCmdParam2)); // BUGFIX: change to sizeof(*p) or it still uses TCmdParam2 size for hellfire else if (pnum != myplr) { if (currlevel == plr[pnum].plrlevel) { +#ifdef HELLFIRE + monster[p->wMon].mWhoHit |= 1 << pnum; + if (monster[p->wMon]._mhitpoints >= 0) { + monster[p->wMon]._mhitpoints -= p->dwDam; + if ((monster[p->wMon]._mhitpoints >> 6) < 1) + monster[p->wMon]._mhitpoints = 1 << 6; + delta_monster_hp(p->wMon, monster[p->wMon]._mhitpoints, plr[pnum].plrlevel); + } +#else monster[p->wParam1].mWhoHit |= 1 << pnum; - - if (monster[p->wParam1]._mhitpoints) { + if (monster[p->wParam1]._mhitpoints != 0) { monster[p->wParam1]._mhitpoints -= p->wParam2; if ((monster[p->wParam1]._mhitpoints >> 6) < 1) monster[p->wParam1]._mhitpoints = 1 << 6; delta_monster_hp(p->wParam1, monster[p->wParam1]._mhitpoints, plr[pnum].plrlevel); } +#endif } } @@ -2159,18 +2136,17 @@ static DWORD On_PLRDAMAGE(TCmd *pCmd, int pnum) { TCmdDamage *p = (TCmdDamage *)pCmd; - if (p->bPlr == myplr && currlevel != 0) { - if (gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel && p->dwDam <= 192000) { - if ((plr[myplr]._pHitPoints >> 6) > 0) { - drawhpflag = TRUE; - plr[myplr]._pHitPoints -= p->dwDam; - plr[myplr]._pHPBase -= p->dwDam; - if (plr[myplr]._pHitPoints > plr[myplr]._pMaxHP) { - plr[myplr]._pHitPoints = plr[myplr]._pMaxHP; - plr[myplr]._pHPBase = plr[myplr]._pMaxHPBase; - } - if ((plr[myplr]._pHitPoints >> 6) <= 0) - SyncPlrKill(myplr, 1); + if (p->bPlr == myplr && currlevel != 0 && gbBufferMsgs != 1) { + if (currlevel == plr[pnum].plrlevel && p->dwDam <= 192000 && plr[myplr]._pHitPoints >> 6 > 0) { + drawhpflag = TRUE; + plr[myplr]._pHitPoints -= p->dwDam; + plr[myplr]._pHPBase -= p->dwDam; + if (plr[myplr]._pHitPoints > plr[myplr]._pMaxHP) { + plr[myplr]._pHitPoints = plr[myplr]._pMaxHP; + plr[myplr]._pHPBase = plr[myplr]._pMaxHPBase; + } + if (plr[myplr]._pHitPoints >> 6 <= 0) { + SyncPlrKill(myplr, 1); } } } @@ -2326,7 +2302,7 @@ static DWORD On_PLAYER_JOINLEVEL(TCmd *pCmd, int pnum) msg_send_packet(pnum, p, sizeof(*p)); else { plr[pnum]._pLvlChanging = FALSE; - if (plr[pnum]._pName[0] && !plr[pnum].plractive) { + if (plr[pnum]._pName[0] != 0 && !plr[pnum].plractive) { plr[pnum].plractive = TRUE; gbActivePlayers++; EventPlrMsg("Player '%s' (level %d) just joined the game", plr[pnum]._pName, plr[pnum]._pLevel); @@ -2373,13 +2349,12 @@ static DWORD On_ACTIVATEPORTAL(TCmd *pCmd, int pnum) if (currlevel == 0) AddInTownPortal(pnum); else if (currlevel == plr[pnum].plrlevel) { - int i; BOOL addPortal = TRUE; - for (i = 0; i < nummissiles; i++) { + for (int i = 0; i < nummissiles; i++) { int mi = missileactive[i]; if (missile[mi]._mitype == MIS_TOWN && missile[mi]._misource == pnum) { addPortal = FALSE; - // BUGFIX: break + // CODEFIX: break } } if (addPortal) @@ -2493,10 +2468,8 @@ static DWORD On_SYNCQUEST(TCmd *pCmd, int pnum) #ifdef HELLFIRE static DWORD On_ENDREFLECT(TCmd *pCmd, int pnum) { - int i; - if (gbBufferMsgs != 1 && pnum != myplr && currlevel == plr[pnum].plrlevel) { - for (i = 0; i < nummissiles; i++) { + for (int i = 0; i < nummissiles; i++) { int mi = missileactive[i]; if (missile[mi]._mitype == MIS_REFLECT && missile[mi]._misource == pnum) { ClearMissileSpot(mi); @@ -2511,10 +2484,8 @@ static DWORD On_ENDREFLECT(TCmd *pCmd, int pnum) static DWORD On_ENDSHIELD(TCmd *pCmd, int pnum) { - int i; - if (gbBufferMsgs != 1 && pnum != myplr && currlevel == plr[pnum].plrlevel) { - for (i = 0; i < nummissiles; i++) { + for (int i = 0; i < nummissiles; i++) { int mi = missileactive[i]; if (missile[mi]._mitype == MIS_MANASHIELD && missile[mi]._misource == pnum) { ClearMissileSpot(mi); @@ -2590,15 +2561,10 @@ static DWORD On_REMSHIELD(TCmd *pCmd, int pnum) static DWORD On_REFLECT(TCmd *pCmd, int pnum) { - int i, mx; - - if ( gbBufferMsgs != 1 && pnum != myplr && currlevel == plr[pnum].plrlevel ) - { - for(i = 0; i < nummissiles; i++) - { - mx = missileactive[i]; - if ( missile[mx]._mitype == MIS_REFLECT && missile[mx]._misource == pnum ) - { + if (gbBufferMsgs != 1 && pnum != myplr && currlevel == plr[pnum].plrlevel) { + for (int i = 0; i < nummissiles; i++) { + int mx = missileactive[i]; + if (missile[mx]._mitype == MIS_REFLECT && missile[mx]._misource == pnum) { ClearMissileSpot(mx); DeleteMissile(mx, i); } @@ -2610,8 +2576,7 @@ static DWORD On_REFLECT(TCmd *pCmd, int pnum) static DWORD On_NAKRUL(TCmd *pCmd, int pnum) { - if ( gbBufferMsgs != 1 ) - { + if (gbBufferMsgs != 1) { operate_lv24_lever(); IsUberRoomOpened = 1; quests[Q_NAKRUL]._qactive = 3; @@ -2623,9 +2588,8 @@ static DWORD On_NAKRUL(TCmd *pCmd, int pnum) static DWORD On_OPENHIVE(TCmd *pCmd, int pnum) { TCmdLocParam2 *p = (TCmdLocParam2 *)pCmd; - if ( gbBufferMsgs != 1 ) - { - AddMissile(p->x, p->y, p->wParam1, p->wParam2, 0, MIS_HIVEEXP2, 0, pnum, 0, 0); + if (gbBufferMsgs != 1) { + AddMissile(p->x, p->y, p->wParam1, p->wParam2, 0, MIS_HIVEEXP2, TARGET_MONSTERS, pnum, 0, 0); town_4751C6(); } return sizeof(*p); @@ -2633,11 +2597,10 @@ static DWORD On_OPENHIVE(TCmd *pCmd, int pnum) static DWORD On_OPENCRYPT(TCmd *pCmd, int pnum) { - if ( gbBufferMsgs != 1 ) - { + if (gbBufferMsgs != 1) { town_475595(); InitTownTriggers(); - if ( !currlevel ) + if (currlevel == 0) PlaySFX(IS_SARC); } return sizeof(*pCmd); diff --git a/Source/objdat.cpp b/Source/objdat.cpp index 26a88ed0..1988662d 100644 --- a/Source/objdat.cpp +++ b/Source/objdat.cpp @@ -5,7 +5,6 @@ */ #include "all.h" - DEVILUTION_BEGIN_NAMESPACE /** Maps from dun_object_id to object_id. */ diff --git a/Source/objects.cpp b/Source/objects.cpp index 5d81c1ea..170d2027 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -1306,7 +1306,7 @@ void AddSCambBook(int i) void AddChest(int i, int t) { - if (!random_(147, 2)) + if (random_(147, 2) == 0) object[i]._oAnimFrame += 3; object[i]._oRndSeed = GetRndSeed(); switch (t) { @@ -1453,7 +1453,7 @@ void AddShrine(int i) } while (!slist[val]); object[i]._oVar1 = val; - if (random_(150, 2)) { + if (random_(150, 2) != 0) { object[i]._oAnimFrame = 12; object[i]._oAnimLen = 22; } @@ -1561,20 +1561,25 @@ void AddPedistal(int i) void AddStoryBook(int i) { - int bookframe; - SetRndSeed(glSeedTbl[16]); - bookframe = random_(0, 3); - object[i]._oVar1 = bookframe; + object[i]._oVar1 = random_(0, 3); if (currlevel == 4) - object[i]._oVar2 = StoryText[bookframe][0]; + object[i]._oVar2 = StoryText[object[i]._oVar1][0]; +#ifdef HELLFIRE if (currlevel == 8) - object[i]._oVar2 = StoryText[bookframe][1]; +#else + else if (currlevel == 8) +#endif + object[i]._oVar2 = StoryText[object[i]._oVar1][1]; +#ifdef HELLFIRE if (currlevel == 12) - object[i]._oVar2 = StoryText[bookframe][2]; - object[i]._oVar3 = (currlevel >> 2) + 3 * bookframe - 1; - object[i]._oAnimFrame = 5 - 2 * bookframe; +#else + else if (currlevel == 12) +#endif + object[i]._oVar2 = StoryText[object[i]._oVar1][2]; + object[i]._oVar3 = (currlevel >> 2) + 3 * object[i]._oVar1 - 1; + object[i]._oAnimFrame = 5 - 2 * object[i]._oVar1; object[i]._oVar4 = object[i]._oAnimFrame + 1; } @@ -1942,7 +1947,7 @@ void Obj_Circle(int i) ObjChangeMapResync(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4); if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE) quests[Q_BETRAYER]._qvar1 = 4; - AddMissile(plr[myplr]._px, plr[myplr]._py, 35, 46, plr[myplr]._pdir, MIS_RNDTELEPORT, 0, myplr, 0, 0); + AddMissile(plr[myplr]._px, plr[myplr]._py, 35, 46, plr[myplr]._pdir, MIS_RNDTELEPORT, TARGET_MONSTERS, myplr, 0, 0); track_repeat_walk(FALSE); sgbMouseDown = CLICK_NONE; ClrPlrPath(myplr); @@ -1977,9 +1982,9 @@ void Obj_Door(int i) dx = object[i]._ox; dy = object[i]._oy; 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); + 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; @@ -2107,7 +2112,7 @@ void Obj_Trap(int i) } if (!deltaload) { dir = GetDirection(sx, sy, dx, dy); - AddMissile(sx, sy, dx, dy, dir, object[i]._oVar3, 1, -1, 0, 0); + AddMissile(sx, sy, dx, dy, dir, object[i]._oVar3, TARGET_PLAYERS, -1, 0, 0); PlaySfxLoc(IS_TRAP, object[oti]._ox, object[oti]._oy); } object[oti]._oTrapFlag = FALSE; @@ -2384,40 +2389,40 @@ void DoorSet(int oi, int dx, int dy) #ifdef HELLFIRE if (currlevel < 17) { #endif - if (pn == 43) - ObjSetMicro(dx, dy, 392); - if (pn == 45) - ObjSetMicro(dx, dy, 394); - if (pn == 50 && object[oi]._otype == OBJ_L1LDOOR) - ObjSetMicro(dx, dy, 411); - if (pn == 50 && object[oi]._otype == OBJ_L1RDOOR) - ObjSetMicro(dx, dy, 412); - if (pn == 54) - ObjSetMicro(dx, dy, 397); - if (pn == 55) - ObjSetMicro(dx, dy, 398); - if (pn == 61) - ObjSetMicro(dx, dy, 399); - if (pn == 67) - ObjSetMicro(dx, dy, 400); - if (pn == 68) - ObjSetMicro(dx, dy, 401); - if (pn == 69) - ObjSetMicro(dx, dy, 403); - if (pn == 70) - ObjSetMicro(dx, dy, 404); - if (pn == 72) - ObjSetMicro(dx, dy, 406); - if (pn == 212) - ObjSetMicro(dx, dy, 407); - if (pn == 354) - ObjSetMicro(dx, dy, 409); - if (pn == 355) - ObjSetMicro(dx, dy, 410); - if (pn == 411) - ObjSetMicro(dx, dy, 396); - if (pn == 412) - ObjSetMicro(dx, dy, 396); + if (pn == 43) + ObjSetMicro(dx, dy, 392); + if (pn == 45) + ObjSetMicro(dx, dy, 394); + if (pn == 50 && object[oi]._otype == OBJ_L1LDOOR) + ObjSetMicro(dx, dy, 411); + if (pn == 50 && object[oi]._otype == OBJ_L1RDOOR) + ObjSetMicro(dx, dy, 412); + if (pn == 54) + ObjSetMicro(dx, dy, 397); + if (pn == 55) + ObjSetMicro(dx, dy, 398); + if (pn == 61) + ObjSetMicro(dx, dy, 399); + if (pn == 67) + ObjSetMicro(dx, dy, 400); + if (pn == 68) + ObjSetMicro(dx, dy, 401); + if (pn == 69) + ObjSetMicro(dx, dy, 403); + if (pn == 70) + ObjSetMicro(dx, dy, 404); + if (pn == 72) + ObjSetMicro(dx, dy, 406); + if (pn == 212) + ObjSetMicro(dx, dy, 407); + if (pn == 354) + ObjSetMicro(dx, dy, 409); + if (pn == 355) + ObjSetMicro(dx, dy, 410); + if (pn == 411) + ObjSetMicro(dx, dy, 396); + if (pn == 412) + ObjSetMicro(dx, dy, 396); #ifdef HELLFIRE } else { if (pn == 75) @@ -2539,14 +2544,14 @@ void OperateL1RDoor(int pnum, int oi, DIABOOL sendflag) #ifdef HELLFIRE if (currlevel < 17) { #endif - if (object[oi]._oVar2 != 50) { - ObjSetMicro(xp - 1, yp, object[oi]._oVar2); - } else { - if (dPiece[xp - 1][yp] == 396) - ObjSetMicro(xp - 1, yp, 411); - else - ObjSetMicro(xp - 1, yp, 50); - } + if (object[oi]._oVar2 != 50) { + ObjSetMicro(xp - 1, yp, object[oi]._oVar2); + } else { + if (dPiece[xp - 1][yp] == 396) + ObjSetMicro(xp - 1, yp, 411); + else + ObjSetMicro(xp - 1, yp, 50); + } #ifdef HELLFIRE } else { if (object[oi]._oVar2 != 86) { @@ -2647,14 +2652,14 @@ void OperateL1LDoor(int pnum, int oi, DIABOOL sendflag) #ifdef HELLFIRE if (currlevel < 17) { #endif - if (object[oi]._oVar2 != 50) { - ObjSetMicro(xp, yp - 1, object[oi]._oVar2); - } else { - if (dPiece[xp][yp - 1] == 396) - ObjSetMicro(xp, yp - 1, 412); - else - ObjSetMicro(xp, yp - 1, 50); - } + if (object[oi]._oVar2 != 50) { + ObjSetMicro(xp, yp - 1, object[oi]._oVar2); + } else { + if (dPiece[xp][yp - 1] == 396) + ObjSetMicro(xp, yp - 1, 412); + else + ObjSetMicro(xp, yp - 1, 50); + } #ifdef HELLFIRE } else { if (object[oi]._oVar2 != 86) { @@ -2704,8 +2709,8 @@ void OperateL2RDoor(int pnum, int oi, DIABOOL sendflag) if (!deltaload) PlaySfxLoc(IS_DOORCLOS, object[oi]._ox, yp); dok = dMonster[xp][yp] == 0; - dok = dok HFAND (dItem[xp][yp] == 0); - dok = dok HFAND (dDead[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); @@ -2749,8 +2754,8 @@ void OperateL2LDoor(int pnum, int oi, BOOL sendflag) if (!deltaload) PlaySfxLoc(IS_DOORCLOS, object[oi]._ox, yp); dok = dMonster[xp][yp] == 0; - dok = dok HFAND (dItem[xp][yp] == 0); - dok = dok HFAND (dDead[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); @@ -2795,8 +2800,8 @@ void OperateL3RDoor(int pnum, int oi, DIABOOL sendflag) if (!deltaload) PlaySfxLoc(IS_DOORCLOS, object[oi]._ox, yp); dok = dMonster[xp][yp] == 0; - dok = dok HFAND (dItem[xp][yp] == 0); - dok = dok HFAND (dDead[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); @@ -2841,8 +2846,8 @@ void OperateL3LDoor(int pnum, int oi, DIABOOL sendflag) if (!deltaload) PlaySfxLoc(IS_DOORCLOS, object[oi]._ox, yp); dok = dMonster[xp][yp] == 0; - dok = dok HFAND (dItem[xp][yp] == 0); - dok = dok HFAND (dDead[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); @@ -3025,7 +3030,7 @@ void OperateBook(int pnum, int i) } if (do_add_missile) { object[dObject[35][36] - 1]._oVar5++; - AddMissile(plr[pnum]._px, plr[pnum]._py, dx, dy, plr[pnum]._pdir, MIS_RNDTELEPORT, 0, pnum, 0, 0); + AddMissile(plr[pnum]._px, plr[pnum]._py, dx, dy, plr[pnum]._pdir, MIS_RNDTELEPORT, TARGET_MONSTERS, pnum, 0, 0); missile_added = TRUE; do_add_missile = FALSE; } @@ -3039,8 +3044,8 @@ void OperateBook(int pnum, int i) return; if (setlvlnum == SL_BONECHAMB) { - plr[myplr]._pMemSpells |= ((__int64)1 << (SPL_GUARDIAN - 1)); - if (plr[pnum]._pSplLvl[SPL_GUARDIAN] < 15) + plr[myplr]._pMemSpells |= SPELLBIT(SPL_GUARDIAN); + if (plr[pnum]._pSplLvl[SPL_GUARDIAN] < MAX_SPELL_LEVEL) plr[myplr]._pSplLvl[SPL_GUARDIAN]++; quests[Q_SCHAMB]._qactive = QUEST_DONE; if (!deltaload) @@ -3053,7 +3058,7 @@ void OperateBook(int pnum, int i) object[i]._oy - 4, plr[myplr]._pdir, MIS_GUARDIAN, - 0, + TARGET_MONSTERS, myplr, 0, 0); @@ -3197,7 +3202,7 @@ void OperateChest(int pnum, int i, DIABOOL sendmsg) mtype = MIS_ARROW; #endif } - AddMissile(object[i]._ox, object[i]._oy, plr[pnum]._px, plr[pnum]._py, mdir, mtype, 1, -1, 0, 0); + AddMissile(object[i]._ox, object[i]._oy, plr[pnum]._px, plr[pnum]._py, mdir, mtype, TARGET_PLAYERS, -1, 0, 0); object[i]._oTrapFlag = FALSE; } if (pnum == myplr) @@ -3713,16 +3718,16 @@ void OperateShrine(int pnum, int i, int sType) } if (cnt > 1) { spell = 1; - for (j = 1; j <= MAX_SPELLS; j++) { + for (j = SPL_FIREBOLT; j <= MAX_SPELLS; j++) { // BUGFIX: < MAX_SPELLS, there is no spell with MAX_SPELLS index if (plr[pnum]._pMemSpells & spell) { - if (plr[pnum]._pSplLvl[j] < 15) + if (plr[pnum]._pSplLvl[j] < MAX_SPELL_LEVEL) plr[pnum]._pSplLvl[j]++; } spell <<= 1; } do { - r = random_(0, 37); - } while (!(plr[pnum]._pMemSpells & ((__int64)1 << r))); + r = random_(0, MAX_SPELLS); + } while (!(plr[pnum]._pMemSpells & SPELLBIT(r + 1))); if (plr[pnum]._pSplLvl[r] >= 2) plr[pnum]._pSplLvl[r] -= 2; else @@ -3753,10 +3758,10 @@ void OperateShrine(int pnum, int i, int sType) return; if (pnum != myplr) return; - plr[pnum]._pMemSpells |= (__int64)1 << (SPL_FIREBOLT - 1); - if (plr[pnum]._pSplLvl[SPL_FIREBOLT] < 15) + plr[pnum]._pMemSpells |= SPELLBIT(SPL_FIREBOLT); + if (plr[pnum]._pSplLvl[SPL_FIREBOLT] < MAX_SPELL_LEVEL) plr[pnum]._pSplLvl[SPL_FIREBOLT]++; - if (plr[pnum]._pSplLvl[SPL_FIREBOLT] < 15) + if (plr[pnum]._pSplLvl[SPL_FIREBOLT] < MAX_SPELL_LEVEL) plr[pnum]._pSplLvl[SPL_FIREBOLT]++; t = plr[pnum]._pMaxManaBase / 10; v1 = plr[pnum]._pMana - plr[pnum]._pManaBase; @@ -3886,10 +3891,10 @@ void OperateShrine(int pnum, int i, int sType) case SHRINE_SACRED: if (deltaload || pnum != myplr) return; - plr[pnum]._pMemSpells |= (__int64)1 << (SPL_CBOLT - 1); - if (plr[pnum]._pSplLvl[SPL_CBOLT] < 15) + plr[pnum]._pMemSpells |= SPELLBIT(SPL_CBOLT); + if (plr[pnum]._pSplLvl[SPL_CBOLT] < MAX_SPELL_LEVEL) plr[pnum]._pSplLvl[SPL_CBOLT]++; - if (plr[pnum]._pSplLvl[SPL_CBOLT] < 15) + if (plr[pnum]._pSplLvl[SPL_CBOLT] < MAX_SPELL_LEVEL) plr[pnum]._pSplLvl[SPL_CBOLT]++; t = plr[pnum]._pMaxManaBase / 10; v1 = plr[pnum]._pMana - plr[pnum]._pManaBase; @@ -3914,7 +3919,7 @@ void OperateShrine(int pnum, int i, int sType) if (pnum != myplr) return; for (j = 0; j < NUM_INV_GRID_ELEM; j++) { - if (!plr[pnum].InvGrid[j]) { + if (plr[pnum].InvGrid[j] == 0) { r = 5 * leveltype + random_(160, 10 * leveltype); t = plr[pnum]._pNumInv; // check plr[pnum].InvList[t] = golditem; @@ -3989,10 +3994,10 @@ void OperateShrine(int pnum, int i, int sType) return; if (pnum != myplr) return; - plr[pnum]._pMemSpells |= (__int64)1 << (SPL_HBOLT - 1); - if (plr[pnum]._pSplLvl[SPL_HBOLT] < 15) + plr[pnum]._pMemSpells |= SPELLBIT(SPL_HBOLT); + if (plr[pnum]._pSplLvl[SPL_HBOLT] < MAX_SPELL_LEVEL) plr[pnum]._pSplLvl[SPL_HBOLT]++; - if (plr[pnum]._pSplLvl[SPL_HBOLT] < 15) + if (plr[pnum]._pSplLvl[SPL_HBOLT] < MAX_SPELL_LEVEL) plr[pnum]._pSplLvl[SPL_HBOLT]++; t = plr[pnum]._pMaxManaBase / 10; v1 = plr[pnum]._pMana - plr[pnum]._pManaBase; @@ -4102,7 +4107,7 @@ void OperateShrine(int pnum, int i, int sType) plr[myplr]._py, plr[myplr]._pdir, MIS_FIREWALL, - 1, + TARGET_PLAYERS, 0, 2 * currlevel + 2, 0); @@ -4152,7 +4157,7 @@ void OperateShrine(int pnum, int i, int sType) plr[myplr]._py, plr[myplr]._pdir, MIS_FLASH, - 1, + TARGET_PLAYERS, 0, 3 * currlevel + 2, 0); @@ -4171,7 +4176,7 @@ void OperateShrine(int pnum, int i, int sType) plr[myplr]._py, plr[myplr]._pdir, MIS_TOWN, - 1, + TARGET_PLAYERS, 0, 0, 0); @@ -4254,7 +4259,7 @@ void OperateSkelBook(int pnum, int i, DIABOOL sendmsg) object[i]._oAnimFrame += 2; if (!deltaload) { SetRndSeed(object[i]._oRndSeed); - if (random_(161, 5)) + if (random_(161, 5) != 0) CreateTypeItem(object[i]._ox, object[i]._oy, FALSE, ITYPE_MISC, IMISC_SCROLL, sendmsg, FALSE); else CreateTypeItem(object[i]._ox, object[i]._oy, FALSE, ITYPE_MISC, IMISC_BOOK, sendmsg, FALSE); @@ -4964,8 +4969,8 @@ void BreakObject(int pnum, int oi) if (pnum != -1) { mind = plr[pnum]._pIMinDam; - maxd = random_(163, plr[pnum]._pIMaxDam - mind + 1); - objdam = maxd + mind; + maxd = plr[pnum]._pIMaxDam; + objdam = random_(163, maxd - mind + 1) + mind; objdam += plr[pnum]._pDamageMod + plr[pnum]._pIBonusDamMod + objdam * plr[pnum]._pIBonusDam / 100; } else { objdam = 10; @@ -5120,26 +5125,16 @@ void SyncL3Doors(int i) void SyncObjectAnim(int o) { - int file; - int i; - int ofindex; + int i, index; - file = ObjFileList[0]; - ofindex = AllObjects[object[o]._otype].ofindex; + index = AllObjects[object[o]._otype].ofindex; i = 0; - while (file != ofindex) { - file = ObjFileList[i + 1]; + while (ObjFileList[i] != index) { i++; } + object[o]._oAnimData = pObjCels[i]; switch (object[o]._otype) { - case OBJ_BOOK2R: - case OBJ_BLINDBOOK: - case OBJ_STEELTOME: - SyncQSTLever(o); - break; - case OBJ_L1LIGHT: - break; case OBJ_L1LDOOR: case OBJ_L1RDOOR: SyncL1Doors(o); @@ -5152,15 +5147,20 @@ void SyncObjectAnim(int o) case OBJ_L3RDOOR: SyncL3Doors(o); break; + case OBJ_CRUX1: + case OBJ_CRUX2: + case OBJ_CRUX3: + SyncCrux(o); + break; case OBJ_LEVER: case OBJ_BOOK2L: case OBJ_SWITCHSKL: SyncLever(o); break; - case OBJ_CRUX1: - case OBJ_CRUX2: - case OBJ_CRUX3: - SyncCrux(o); + case OBJ_BOOK2R: + case OBJ_BLINDBOOK: + case OBJ_STEELTOME: + SyncQSTLever(o); break; case OBJ_PEDISTAL: SyncPedistal(o); @@ -5231,13 +5231,13 @@ void GetObjectStr(int i) case OBJ_BARREL: case OBJ_BARRELEX: #ifdef HELLFIRE - if (currlevel > 16 && currlevel < 21) // for hive levels - strcpy(infostr, "Pod"); //Then a barrel is called a pod + if (currlevel > 16 && currlevel < 21) // for hive levels + strcpy(infostr, "Pod"); //Then a barrel is called a pod else if (currlevel > 20 && currlevel < 25) // for crypt levels - strcpy(infostr, "Urn"); //Then a barrel is called an urn + strcpy(infostr, "Urn"); //Then a barrel is called an urn else #endif - strcpy(infostr, "Barrel"); + strcpy(infostr, "Barrel"); break; case OBJ_SKELBOOK: strcpy(infostr, "Skeleton Tome"); diff --git a/Source/pack.cpp b/Source/pack.cpp index e4835386..e04fc880 100644 --- a/Source/pack.cpp +++ b/Source/pack.cpp @@ -132,7 +132,8 @@ void PackPlayer(PkPlayerStruct *pPack, int pnum, BOOL manashield) #ifndef HELLFIRE static #endif -void UnPackItem(PkItemStruct *is, ItemStruct *id) + void + UnPackItem(PkItemStruct *is, ItemStruct *id) { WORD idx = SwapLE16(is->idx); @@ -226,11 +227,15 @@ void UnPackPlayer(PkPlayerStruct *pPack, int pnum, BOOL killok) pPlayer->_pManaBase = SwapLE32(pPack->pManaBase); pPlayer->_pMemSpells = SDL_SwapLE64(pPack->pMemSpells); - for (i = 0; i < 37; i++) // Should be MAX_SPELLS but set to 37 to make save games compatible - pPlayer->_pSplLvl[i] = pPack->pSplLvl[i]; #ifdef HELLFIRE + for (i = 0; i <= 36; i++) // Should be MAX_SPELLS-1 but set to 36 to make save games compatible + pPlayer->_pSplLvl[i] = pPack->pSplLvl[i]; + char *p = pPack->pSplLvl2; for (i = 37; i < 47; i++) - pPlayer->_pSplLvl[i] = pPack->pSplLvl2[i - 37]; + pPlayer->_pSplLvl[i] = p[i - 37]; +#else + for (i = 0; i < MAX_SPELLS; i++) + pPlayer->_pSplLvl[i] = pPack->pSplLvl[i]; #endif pki = &pPack->InvBody[0]; diff --git a/Source/palette.cpp b/Source/palette.cpp index 2ae108f4..a947adaf 100644 --- a/Source/palette.cpp +++ b/Source/palette.cpp @@ -250,8 +250,6 @@ void palette_update_crypt() system_palette[i].g = col.g; system_palette[i].b = col.b; - - dword_6E2D58 = 0; } else { dword_6E2D58++; diff --git a/Source/path.cpp b/Source/path.cpp index fc1007a8..a3d82292 100644 --- a/Source/path.cpp +++ b/Source/path.cpp @@ -5,7 +5,6 @@ */ #include "all.h" - DEVILUTION_BEGIN_NAMESPACE /** Notes visisted by the path finding algorithm. */ PATHNODE path_nodes[MAXPATHNODES]; diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 78af520d..4834fea6 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -24,9 +24,9 @@ std::string GetSavePath(DWORD save_num) { std::string path = GetPrefPath(); #ifdef HELLFIRE - const char *ext = ".hsv"; + const char *ext = ".hsv"; #else - const char *ext = ".sv"; + const char *ext = ".sv"; #endif if (gbIsSpawn) { @@ -295,7 +295,7 @@ void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSav heroinfo->spawned = gbIsSpawn; } -BOOL pfile_ui_set_hero_infos(BOOL(*ui_add_hero_info)(_uiheroinfo *)) +BOOL pfile_ui_set_hero_infos(BOOL (*ui_add_hero_info)(_uiheroinfo *)) { DWORD i; BOOL showFixedMsg; @@ -474,10 +474,10 @@ static BOOL GetPermSaveNames(DWORD dwIndex, char *szPerm) { const char *fmt; - if (dwIndex < 17) + if (dwIndex < NUMLEVELS) fmt = "perml%02d"; - else if (dwIndex < 34) { - dwIndex -= 17; + else if (dwIndex < NUMLEVELS * 2) { + dwIndex -= NUMLEVELS; fmt = "perms%02d"; } else return FALSE; @@ -490,10 +490,10 @@ static BOOL GetTempSaveNames(DWORD dwIndex, char *szTemp) { const char *fmt; - if (dwIndex < 17) + if (dwIndex < NUMLEVELS) fmt = "templ%02d"; - else if (dwIndex < 34) { - dwIndex -= 17; + else if (dwIndex < NUMLEVELS * 2) { + dwIndex -= NUMLEVELS; fmt = "temps%02d"; } else return FALSE; @@ -537,7 +537,7 @@ void pfile_rename_temp_to_perm() mpqapi_rename(szTemp, szPerm); } } - assert(! GetPermSaveNames(dwIndex,szPerm)); + assert(!GetPermSaveNames(dwIndex, szPerm)); pfile_flush(TRUE, dwChar); } diff --git a/Source/pfile.h b/Source/pfile.h index 8cbbf42b..f3b1b877 100644 --- a/Source/pfile.h +++ b/Source/pfile.h @@ -20,7 +20,7 @@ BOOL pfile_create_player_description(char *dst, DWORD len); BOOL pfile_rename_hero(const char *name_1, const char *name_2); void pfile_flush_W(); void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSaveFile); -BOOL pfile_ui_set_hero_infos(BOOL(*ui_add_hero_info)(_uiheroinfo *)); +BOOL pfile_ui_set_hero_infos(BOOL (*ui_add_hero_info)(_uiheroinfo *)); BOOL pfile_archive_contains_game(HANDLE hsArchive, DWORD save_num); BOOL pfile_ui_set_class_stats(unsigned int player_class_nr, _uidefaultstats *class_stats); BOOL pfile_ui_save_create(_uiheroinfo *heroinfo); diff --git a/Source/player.cpp b/Source/player.cpp index 1e523a6c..f2810eac 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -105,6 +105,7 @@ int StrengthTbl[NUM_CLASSES] = { }; /** Maps from player_class to starting stat in magic. */ int MagicTbl[NUM_CLASSES] = { + // clang-format off 10, 15, 35, @@ -113,6 +114,7 @@ int MagicTbl[NUM_CLASSES] = { 20, 0, #endif + // clang-format on }; /** Maps from player_class to starting stat in dexterity. */ int DexterityTbl[NUM_CLASSES] = { @@ -159,6 +161,7 @@ const char *const ClassStrTblOld[] = { }; /** Maps from player_class to maximum stats. */ int MaxStats[NUM_CLASSES][4] = { + // clang-format off { 250, 50, 60, 100 }, { 55, 70, 250, 80 }, { 45, 250, 85, 80 }, @@ -167,6 +170,7 @@ int MaxStats[NUM_CLASSES][4] = { { 120, 120, 120, 100 }, { 255, 0, 55, 150 }, #endif + // clang-format on }; /** Specifies the experience point limit of each level. */ int ExpLvlsTbl[MAXCHARLEVEL] = { @@ -805,15 +809,15 @@ void CreatePlayer(int pnum, char c) plr[pnum]._pInfraFlag = FALSE; if (c == PC_WARRIOR) { - plr[pnum]._pAblSpells = (__int64)1 << (SPL_REPAIR - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_REPAIR); } else if (c == PC_ROGUE) { - plr[pnum]._pAblSpells = (__int64)1 << (SPL_DISARM - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_DISARM); } else if (c == PC_SORCERER) { - plr[pnum]._pAblSpells = (__int64)1 << (SPL_RECHARGE - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_RECHARGE); } if (c == PC_SORCERER) { - plr[pnum]._pMemSpells = 1; + plr[pnum]._pMemSpells = SPELLBIT(SPL_FIREBOLT); } else { plr[pnum]._pMemSpells = 0; } @@ -1103,18 +1107,18 @@ void InitPlayer(int pnum, BOOL FirstTime) } if (plr[pnum]._pClass == PC_WARRIOR) { - plr[pnum]._pAblSpells = 1 << (SPL_REPAIR - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_REPAIR); } else if (plr[pnum]._pClass == PC_ROGUE) { - plr[pnum]._pAblSpells = 1 << (SPL_DISARM - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_DISARM); } else if (plr[pnum]._pClass == PC_SORCERER) { - plr[pnum]._pAblSpells = 1 << (SPL_RECHARGE - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_RECHARGE); #ifdef HELLFIRE } else if (plr[pnum]._pClass == PC_MONK) { - plr[pnum]._pAblSpells = (unsigned __int64)1 << (SPL_SEARCH - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_SEARCH); } else if (plr[pnum]._pClass == PC_BARD) { - plr[pnum]._pAblSpells = 1 << (SPL_IDENTIFY - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_IDENTIFY); } else if (plr[pnum]._pClass == PC_BARBARIAN) { - plr[pnum]._pAblSpells = 1 << (SPL_BLODBOIL - 1); + plr[pnum]._pAblSpells = SPELLBIT(SPL_BLODBOIL); #endif } @@ -2000,9 +2004,9 @@ void DropHalfPlayersGold(int pnum) for (i = 0; i < MAXBELTITEMS && hGold > 0; i++) { if (plr[pnum].SpdList[i]._itype == ITYPE_GOLD && #ifndef HELLFIRE - plr[pnum].SpdList[i]._ivalue != GOLD_MAX_LIMIT) { + plr[pnum].SpdList[i]._ivalue != GOLD_MAX_LIMIT) { #else - plr[pnum].SpdList[i]._ivalue != MaxGold) { + plr[pnum].SpdList[i]._ivalue != MaxGold) { #endif if (hGold < plr[pnum].SpdList[i]._ivalue) { plr[pnum].SpdList[i]._ivalue -= hGold; @@ -2055,9 +2059,9 @@ void DropHalfPlayersGold(int pnum) for (i = 0; i < plr[pnum]._pNumInv && hGold > 0; i++) { if (plr[pnum].InvList[i]._itype == ITYPE_GOLD && #ifndef HELLFIRE - plr[pnum].InvList[i]._ivalue != GOLD_MAX_LIMIT) { + plr[pnum].InvList[i]._ivalue != GOLD_MAX_LIMIT) { #else - plr[pnum].InvList[i]._ivalue != MaxGold) { + plr[pnum].InvList[i]._ivalue != MaxGold) { #endif if (hGold < plr[pnum].InvList[i]._ivalue) { plr[pnum].InvList[i]._ivalue -= hGold; @@ -2332,7 +2336,7 @@ BOOL PM_DoWalk(int pnum) PlaySfxLoc(PS_WALK1, plr[pnum]._px, plr[pnum]._py); } #else - if (!currlevel && jogging_opt) { + if (currlevel == 0 && jogging_opt) { if (plr[pnum]._pAnimFrame % 2 == 0) { plr[pnum]._pAnimFrame++; plr[pnum]._pVar8++; @@ -2404,7 +2408,7 @@ BOOL PM_DoWalk2(int pnum) PlaySfxLoc(PS_WALK1, plr[pnum]._px, plr[pnum]._py); } #else - if (!currlevel && jogging_opt) { + if (currlevel == 0 && jogging_opt) { if (plr[pnum]._pAnimFrame % 2 == 0) { plr[pnum]._pAnimFrame++; plr[pnum]._pVar8++; @@ -2472,7 +2476,7 @@ BOOL PM_DoWalk3(int pnum) PlaySfxLoc(PS_WALK1, plr[pnum]._px, plr[pnum]._py); } #else - if (!currlevel && jogging_opt) { + if (currlevel == 0 && jogging_opt) { if (plr[pnum]._pAnimFrame % 2 == 0) { plr[pnum]._pAnimFrame++; plr[pnum]._pVar8++; @@ -2965,10 +2969,10 @@ BOOL PM_DoAttack(int pnum) } if (plr[pnum]._pIFlags & ISPL_FIREDAM) { - AddMissile(dx, dy, 1, 0, 0, MIS_WEAPEXP, 0, pnum, 0, 0); + AddMissile(dx, dy, 1, 0, 0, MIS_WEAPEXP, TARGET_MONSTERS, pnum, 0, 0); } if (plr[pnum]._pIFlags & ISPL_LIGHTDAM) { - AddMissile(dx, dy, 2, 0, 0, MIS_WEAPEXP, 0, pnum, 0, 0); + AddMissile(dx, dy, 2, 0, 0, MIS_WEAPEXP, TARGET_MONSTERS, pnum, 0, 0); } didhit = FALSE; @@ -3039,7 +3043,7 @@ BOOL PM_DoRangeAttack(int pnum) plr[pnum]._pVar2, plr[pnum]._pdir, mistype, - 0, + TARGET_MONSTERS, pnum, 4, 0); @@ -3111,7 +3115,7 @@ BOOL PM_DoBlock(int pnum) StartStand(pnum, plr[pnum]._pdir); ClearPlrPVars(pnum); - if (!random_(3, 10)) { + if (random_(3, 10) == 0) { ShieldDur(pnum); } return TRUE; @@ -3187,7 +3191,7 @@ BOOL PM_DoSpell(int pnum) 0, plr[pnum]._pVar4); - if (!plr[pnum]._pSplFrom) { + if (plr[pnum]._pSplFrom == 0) { EnsureValidReadiedSpell(plr[pnum]); } } @@ -3248,7 +3252,7 @@ BOOL PM_DoGotHit(int pnum) #endif StartStand(pnum, plr[pnum]._pdir); ClearPlrPVars(pnum); - if (random_(3, 4)) { + if (random_(3, 4) != 0) { ArmorDur(pnum); } @@ -3685,9 +3689,9 @@ void ValidatePlayer() for (b = 1; b < MAX_SPELLS; b++) { if (GetSpellBookLevel(b) != -1) { - msk |= (__int64)1 << (b - 1); - if (plr[myplr]._pSplLvl[b] > 15) - plr[myplr]._pSplLvl[b] = 15; + msk |= SPELLBIT(b); + if (plr[myplr]._pSplLvl[b] > MAX_SPELL_LEVEL) + plr[myplr]._pSplLvl[b] = MAX_SPELL_LEVEL; } } @@ -3753,7 +3757,7 @@ void ProcessPlayers() break; default: #endif - PlaySFX(sfxdnum); + PlaySFX(sfxdnum); #ifdef HELLFIRE } #endif diff --git a/Source/portal.cpp b/Source/portal.cpp index 82185a05..e4d1ceae 100644 --- a/Source/portal.cpp +++ b/Source/portal.cpp @@ -43,7 +43,7 @@ void AddWarpMissile(int i, int x, int y) missiledata[MIS_TOWN].mlSFX = -1; dMissile[x][y] = 0; - mi = AddMissile(0, 0, x, y, 0, MIS_TOWN, 0, i, 0, 0); + mi = AddMissile(0, 0, x, y, 0, MIS_TOWN, TARGET_MONSTERS, i, 0, 0); if (mi != -1) { SetMissDir(mi, 1); diff --git a/Source/quests.cpp b/Source/quests.cpp index 5802c0db..90871238 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -119,34 +119,34 @@ void InitQuests() for (z = 0; z < MAXQUESTS; z++) { if (gbMaxPlayers > 1 && !(questlist[z]._qflags & QUEST_ANY)) continue; - quests[z]._qtype = questlist[z]._qdtype; - if (gbMaxPlayers > 1) { - quests[z]._qlevel = questlist[z]._qdmultlvl; - if (!delta_quest_inited(initiatedQuests)) { - quests[z]._qactive = QUEST_INIT; - quests[z]._qvar1 = 0; - quests[z]._qlog = FALSE; - } - initiatedQuests++; - } else { + quests[z]._qtype = questlist[z]._qdtype; + if (gbMaxPlayers > 1) { + quests[z]._qlevel = questlist[z]._qdmultlvl; + if (!delta_quest_inited(initiatedQuests)) { quests[z]._qactive = QUEST_INIT; - quests[z]._qlevel = questlist[z]._qdlvl; quests[z]._qvar1 = 0; quests[z]._qlog = FALSE; } + initiatedQuests++; + } else { + quests[z]._qactive = QUEST_INIT; + quests[z]._qlevel = questlist[z]._qdlvl; + quests[z]._qvar1 = 0; + quests[z]._qlog = FALSE; + } - quests[z]._qslvl = questlist[z]._qslvl; - quests[z]._qtx = 0; - quests[z]._qty = 0; - quests[z]._qidx = z; - quests[z]._qlvltype = questlist[z]._qlvlt; - quests[z]._qvar2 = 0; - quests[z]._qmsg = questlist[z]._qdmsg; + quests[z]._qslvl = questlist[z]._qslvl; + quests[z]._qtx = 0; + quests[z]._qty = 0; + quests[z]._qidx = z; + quests[z]._qlvltype = questlist[z]._qlvlt; + quests[z]._qvar2 = 0; + quests[z]._qmsg = questlist[z]._qdmsg; } if (gbMaxPlayers == 1) { SetRndSeed(glSeedTbl[15]); - if (random_(0, 2)) + if (random_(0, 2) != 0) quests[Q_PWATER]._qactive = QUEST_NOTAVAIL; else quests[Q_SKELKING]._qactive = QUEST_NOTAVAIL; @@ -202,7 +202,7 @@ void CheckQuests() quests[Q_BETRAYER]._qty = 2 * quests[Q_BETRAYER]._qty + 16; rportx = quests[Q_BETRAYER]._qtx; rporty = quests[Q_BETRAYER]._qty; - AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, 0, myplr, 0, 0); + AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, TARGET_MONSTERS, myplr, 0, 0); quests[Q_BETRAYER]._qvar2 = 1; if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE) { quests[Q_BETRAYER]._qvar1 = 3; @@ -215,7 +215,7 @@ void CheckQuests() && quests[Q_BETRAYER]._qvar2 == 4) { rportx = 35; rporty = 32; - AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, 0, myplr, 0, 0); + AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, TARGET_MONSTERS, myplr, 0, 0); quests[Q_BETRAYER]._qvar2 = 3; } @@ -426,7 +426,7 @@ void CheckQuestKill(int m, BOOL sendmsg) quests[Q_BETRAYER]._qvar1 = 7; quests[Q_BETRAYER]._qvar2 = 4; quests[Q_DIABLO]._qactive = QUEST_ACTIVE; - AddMissile(35, 32, 35, 32, 0, MIS_RPORTAL, 0, myplr, 0, 0); + AddMissile(35, 32, 35, 32, 0, MIS_RPORTAL, TARGET_MONSTERS, myplr, 0, 0); if (plr[myplr]._pClass == PC_WARRIOR) { sfxdnum = PS_WARR83; } else if (plr[myplr]._pClass == PC_ROGUE) { diff --git a/Source/render.cpp b/Source/render.cpp index b6dda728..464e5200 100644 --- a/Source/render.cpp +++ b/Source/render.cpp @@ -133,28 +133,35 @@ static DWORD LeftFoliageMask[TILE_HEIGHT] = { 0xFFFFFFF0, 0xFFFFFFFC, }; -inline static int count_leading_zeros(DWORD mask) { +inline static int count_leading_zeros(DWORD mask) +{ // Note: This function assumes that the argument is not zero, // which means there is at least one bit set. static_assert( - sizeof(DWORD) == sizeof(uint32_t), - "count_leading_zeros: DWORD must be 32bits"); + sizeof(DWORD) == sizeof(uint32_t), + "count_leading_zeros: DWORD must be 32bits"); #if defined(__GNUC__) || defined(__clang__) return __builtin_clz(mask); #else // Count the number of leading zeros using binary search. int n = 0; - if ((mask & 0xFFFF0000) == 0) n += 16, mask <<= 16; - if ((mask & 0xFF000000) == 0) n += 8, mask <<= 8; - if ((mask & 0xF0000000) == 0) n += 4, mask <<= 4; - if ((mask & 0xC0000000) == 0) n += 2, mask <<= 2; - if ((mask & 0x80000000) == 0) n += 1; + if ((mask & 0xFFFF0000) == 0) + n += 16, mask <<= 16; + if ((mask & 0xFF000000) == 0) + n += 8, mask <<= 8; + if ((mask & 0xF0000000) == 0) + n += 4, mask <<= 4; + if ((mask & 0xC0000000) == 0) + n += 2, mask <<= 2; + if ((mask & 0x80000000) == 0) + n += 1; return n; #endif } template -void foreach_set_bit(DWORD mask, const F& f) { +void foreach_set_bit(DWORD mask, const F &f) +{ int i = 0; while (mask != 0) { int z = count_leading_zeros(mask); @@ -191,11 +198,11 @@ inline static void RenderLine(BYTE **dst, BYTE **src, int n, BYTE *tbl, DWORD ma mask &= DWORD(-1) << ((sizeof(DWORD) * CHAR_BIT) - n); if (light_table_index == lightmax) { - foreach_set_bit(mask, [=] (int i) { (*dst)[i] = 0; }); + foreach_set_bit(mask, [=](int i) { (*dst)[i] = 0; }); } else if (light_table_index == 0) { - foreach_set_bit(mask, [=] (int i) { (*dst)[i] = (*src)[i]; }); + foreach_set_bit(mask, [=](int i) { (*dst)[i] = (*src)[i]; }); } else { - foreach_set_bit(mask, [=] (int i) { (*dst)[i] = tbl[(*src)[i]]; }); + foreach_set_bit(mask, [=](int i) { (*dst)[i] = tbl[(*src)[i]]; }); } } diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index d26c328b..9c1d97d2 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -33,9 +33,7 @@ DWORD sgdwCursHgt; DWORD level_cel_block; DWORD sgdwCursXOld; DWORD sgdwCursYOld; -#ifdef HELLFIRE BOOLEAN AutoMapShowItems; -#endif /** * Specifies the type of arches to render. */ @@ -375,7 +373,7 @@ static void DrawPlayer(int pnum, int x, int y, int px, int py, BYTE *pCelBuff, i { int l, frames; - if (dFlags[x][y] & BFLAG_LIT || plr[myplr]._pInfraFlag || !setlevel && !currlevel) { + if (dFlags[x][y] & BFLAG_LIT || plr[myplr]._pInfraFlag || !setlevel && currlevel == 0) { if (!pCelBuff) { // app_fatal("Drawing player %d \"%s\": NULL Cel Buffer", pnum, plr[pnum]._pName); return; @@ -448,26 +446,14 @@ static void DrawPlayer(int pnum, int x, int y, int px, int py, BYTE *pCelBuff, i */ void DrawDeadPlayer(int x, int y, int sx, int sy) { - int i, px, py, nCel, frames; + int i, px, py; PlayerStruct *p; - BYTE *pCelBuff; dFlags[x][y] &= ~BFLAG_DEAD_PLAYER; for (i = 0; i < MAX_PLRS; i++) { p = &plr[i]; if (p->plractive && p->_pHitPoints == 0 && p->plrlevel == (BYTE)currlevel && p->_px == x && p->_py == y) { - pCelBuff = p->_pAnimData; - if (!pCelBuff) { - // app_fatal("Drawing dead player %d \"%s\": NULL Cel Buffer", i, p->_pName); - break; - } - nCel = p->_pAnimFrame; - frames = SDL_SwapLE32(*(DWORD *)pCelBuff); - if (nCel < 1 || frames > 50 || nCel > frames) { - // app_fatal("Drawing dead player %d \"%s\": facing %d, frame %d of %d", i, p->_pName, p->_pdir, nCel, frame); - break; - } dFlags[x][y] |= BFLAG_DEAD_PLAYER; px = sx + p->_pxoff - p->_pAnimWidth2; py = sy + p->_pyoff; @@ -552,7 +538,7 @@ static void drawCell(int x, int y, int sx, int sy) level_piece_id = dPiece[x][y]; cel_transparency_active = (BYTE)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]); cel_foliage_active = !nSolidTable[level_piece_id]; - for (int i = 0; i> 1; i++) { + for (int i = 0; i < (MicroTileLen >> 1); i++) { level_cel_block = pMap->mt[2 * i]; if (level_cel_block != 0) { arch_draw_type = i == 0 ? 1 : 0; @@ -603,22 +589,37 @@ static void drawFloor(int x, int y, int sx, int sy) */ static void DrawItem(int x, int y, int sx, int sy, BOOL pre) { + int nCel; char bItem = dItem[x][y]; ItemStruct *pItem; + BYTE *pCelBuff; + DWORD *pFrameTable; - if (bItem == 0) + assert((unsigned char)bItem <= MAXITEMS); + + if (bItem > MAXITEMS || bItem <= 0) return; pItem = &item[bItem - 1]; if (pItem->_iPostDraw == pre) return; - assert((unsigned char)bItem <= MAXITEMS); - int px = sx - pItem->_iAnimWidth2; - if (bItem - 1 == pcursitem) { - CelBlitOutline(181, px, sy, pItem->_iAnimData, pItem->_iAnimFrame, pItem->_iAnimWidth); + pCelBuff = pItem->_iAnimData; + if (pCelBuff == NULL) { + // app_fatal("Draw Item \"%s\" 1: NULL Cel Buffer", pItem->_iIName); + return; } - CelClippedDrawLight(px, sy, pItem->_iAnimData, pItem->_iAnimFrame, pItem->_iAnimWidth); + pFrameTable = (DWORD *)pCelBuff; + nCel = pItem->_iAnimFrame; + if (nCel < 1 || pFrameTable[0] > 50 || nCel > (int)pFrameTable[0]) { + // app_fatal("Draw \"%s\" Item 1: frame %d of %d, item type==%d", pItem->_iIName, nCel, pFrameTable[0], pItem->_itype); + return; + } + int px = sx - pItem->_iAnimWidth2; + if (bItem - 1 == pcursitem || AutoMapShowItems) { + CelBlitOutline(181, px, sy, pCelBuff, nCel, pItem->_iAnimWidth); + } + CelClippedDrawLight(px, sy, pCelBuff, nCel, pItem->_iAnimWidth); } /** @@ -652,6 +653,7 @@ static void DrawMonsterHelper(int x, int y, int oy, int sx, int sy) if ((DWORD)mi >= MAXMONSTERS) { // app_fatal("Draw Monster: tried to draw illegal monster %d", mi); + return; } pMonster = &monster[mi]; @@ -659,8 +661,9 @@ static void DrawMonsterHelper(int x, int y, int oy, int sx, int sy) return; } - if (pMonster->MType != NULL) { + if (pMonster->MType == NULL) { // app_fatal("Draw Monster \"%s\": uninitialized monster", pMonster->mName); + return; } px = sx + pMonster->_mxoff - pMonster->MType->width2; @@ -683,6 +686,12 @@ static void DrawPlayerHelper(int x, int y, int oy, int sx, int sy) { int p = dPlayer[x][y + oy]; p = p > 0 ? p - 1 : -(p + 1); + + if ((DWORD)p >= MAX_PLRS) { + // app_fatal("draw player: tried to draw illegal player %d", p); + return; + } + PlayerStruct *pPlayer = &plr[p]; int px = sx + pPlayer->_pxoff - pPlayer->_pAnimWidth2; int py = sy + pPlayer->_pyoff; @@ -703,6 +712,7 @@ static void scrollrt_draw_dungeon(int sx, int sy, int dx, int dy) char bFlag, bDead, bObj, bItem, bPlr, bArch, bMap, negPlr, dd; DeadStruct *pDeadGuy; BYTE *pCelBuff; + DWORD *pFrameTable; assert((DWORD)sx < MAXDUNX); assert((DWORD)sy < MAXDUNY); @@ -732,18 +742,26 @@ static void scrollrt_draw_dungeon(int sx, int sy, int dx, int dy) } if (light_table_index < lightmax && bDead != 0) { - pDeadGuy = &dead[(bDead & 0x1F) - 1]; - dd = (bDead >> 5) & 7; - px = dx - pDeadGuy->_deadWidth2; - pCelBuff = pDeadGuy->_deadData[dd]; - assert(pDeadGuy->_deadData[dd] != NULL); - if (pCelBuff != NULL) { - if (pDeadGuy->_deadtrans != 0) { - Cl2DrawLightTbl(px, dy, pCelBuff, pDeadGuy->_deadFrame, pDeadGuy->_deadWidth, pDeadGuy->_deadtrans); - } else { - Cl2DrawLight(px, dy, pCelBuff, pDeadGuy->_deadFrame, pDeadGuy->_deadWidth); + do { + pDeadGuy = &dead[(bDead & 0x1F) - 1]; + dd = (bDead >> 5) & 7; + px = dx - pDeadGuy->_deadWidth2; + pCelBuff = pDeadGuy->_deadData[dd]; + assert(pCelBuff != NULL); + if (pCelBuff == NULL) + break; + pFrameTable = (DWORD *)pCelBuff; + nCel = pDeadGuy->_deadFrame; + if (nCel < 1 || pFrameTable[0] > 50 || nCel > (int)pFrameTable[0]) { + // app_fatal("Unclipped dead: frame %d of %d, deadnum==%d", nCel, pFrameTable[0], (bDead & 0x1F) - 1); + break; } - } + if (pDeadGuy->_deadtrans != 0) { + Cl2DrawLightTbl(px, dy, pCelBuff, nCel, pDeadGuy->_deadWidth, pDeadGuy->_deadtrans); + } else { + Cl2DrawLight(px, dy, pCelBuff, nCel, pDeadGuy->_deadWidth); + } + } while (0); } DrawObject(sx, sy, dx, dy, 1); DrawItem(sx, sy, dx, dy, 1); @@ -854,7 +872,7 @@ static void scrollrt_draw(int x, int y, int sx, int sy, int rows, int columns) memset(dRendered, 0, sizeof(dRendered)); for (int i = 0; i < rows; i++) { - for (int j = 0; j < columns ; j++) { + for (int j = 0; j < columns; j++) { if (x >= 0 && x < MAXDUNX && y >= 0 && y < MAXDUNY) { if (x + 1 < MAXDUNX && y - 1 >= 0 && sx + TILE_WIDTH <= SCREEN_X + SCREEN_WIDTH) { // Render objects behind walls first to prevent sprites, that are moving @@ -862,7 +880,7 @@ static void scrollrt_draw(int x, int y, int sx, int sy, int rows, int columns) // A proper fix for this would probably be to layout the sceen and render by // sprite screen position rather than tile position. if (IsWall(x, y) && (IsWall(x + 1, y) || (x > 0 && IsWall(x - 1, y)))) { // Part of a wall aligned on the x-axis - if (IsWalkable(x + 1, y - 1) && IsWalkable(x, y - 1) ) { // Has walkable area behind it + if (IsWalkable(x + 1, y - 1) && IsWalkable(x, y - 1)) { // Has walkable area behind it scrollrt_draw_dungeon(x + 1, y - 1, sx + TILE_WIDTH, sy); } } @@ -1117,8 +1135,8 @@ static void DrawGame(int x, int y) } } - // Draw areas moving in and out of the screen - switch (ScrollInfo._sdir) { + // Draw areas moving in and out of the screen + switch (ScrollInfo._sdir) { case SDIR_N: sy -= TILE_HEIGHT; ShiftGrid(&x, &y, 0, -1); diff --git a/Source/scrollrt.h b/Source/scrollrt.h index 968d7878..eb1f761c 100644 --- a/Source/scrollrt.h +++ b/Source/scrollrt.h @@ -24,9 +24,7 @@ extern char arch_draw_type; extern int cel_transparency_active; extern int cel_foliage_active; extern int level_piece_id; -#ifdef HELLFIRE extern BOOLEAN AutoMapShowItems; -#endif extern int tileOffsetX; extern int tileOffsetY; diff --git a/Source/sha.cpp b/Source/sha.cpp index 1891b6a3..d3594e7b 100644 --- a/Source/sha.cpp +++ b/Source/sha.cpp @@ -56,7 +56,6 @@ static void SHA1ProcessMessageBlock(SHA1Context *context) for (i = 0; i < 16; i++) W[i] = SwapLE32(buf[i]); - for (i = 16; i < 80; i++) { W[i] = W[i - 16] ^ W[i - 14] ^ W[i - 8] ^ W[i - 3]; } diff --git a/Source/spells.cpp b/Source/spells.cpp index cda06de1..52d25496 100644 --- a/Source/spells.cpp +++ b/Source/spells.cpp @@ -197,13 +197,13 @@ void CastSpell(int id, int spl, int sx, int sy, int dx, int dy, int caster, int int dir; // missile direction switch (caster) { - case 1: + case TARGET_PLAYERS: dir = monster[id]._mdir; break; - case 0: + case TARGET_MONSTERS: // caster must be 0 already in this case, but oh well, // it's needed to generate the right code - caster = 0; + caster = TARGET_MONSTERS; dir = plr[id]._pdir; #ifdef HELLFIRE @@ -287,7 +287,7 @@ void DoResurrect(int pnum, int rid) int hp; if ((char)rid != -1) { - AddMissile(plr[rid]._px, plr[rid]._py, plr[rid]._px, plr[rid]._py, 0, MIS_RESURRECTBEAM, 0, pnum, 0, 0); + AddMissile(plr[rid]._px, plr[rid]._py, plr[rid]._px, plr[rid]._py, 0, MIS_RESURRECTBEAM, TARGET_MONSTERS, pnum, 0, 0); } if (pnum == myplr) { @@ -309,9 +309,9 @@ void DoResurrect(int pnum, int rid) PlacePlayer(rid); #endif - hp = 640; + hp = 10 << 6; #ifndef HELLFIRE - if (plr[rid]._pMaxHPBase < 640) { + if (plr[rid]._pMaxHPBase < (10 << 6)) { hp = plr[rid]._pMaxHPBase; } #endif diff --git a/Source/stores.cpp b/Source/stores.cpp index f38bd83b..a3c9eb18 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -578,6 +578,34 @@ BOOL S_StartSPBuy() BOOL SmithSellOk(int i) { +#ifdef HELLFIRE + ItemStruct *pI; + + if (i >= 0) { + pI = &plr[myplr].InvList[i]; + } else { + pI = &plr[myplr].SpdList[-(i + 1)]; + } + + if (pI->_itype == ITYPE_NONE) + return FALSE; + + if (pI->_iMiscId > IMISC_OILFIRST && pI->_iMiscId < IMISC_OILLAST) + return TRUE; + + if (pI->_itype == ITYPE_MISC) + return FALSE; + if (pI->_itype == ITYPE_GOLD) + return FALSE; + if (pI->_itype == ITYPE_MEAT) + return FALSE; + if (pI->_itype == ITYPE_STAFF && pI->_iSpell != SPL_NULL) + return FALSE; + if (pI->_iClass == ICLASS_QUEST) + return FALSE; + if (pI->IDidx == IDI_LAZSTAFF) + return FALSE; +#else if (plr[myplr].InvList[i]._itype == ITYPE_NONE) return FALSE; if (plr[myplr].InvList[i]._itype == ITYPE_MISC) @@ -590,6 +618,7 @@ BOOL SmithSellOk(int i) return FALSE; if (plr[myplr].InvList[i].IDidx == IDI_LAZSTAFF) return FALSE; +#endif return TRUE; } @@ -2038,7 +2067,7 @@ BOOL StoreGoldFit(int idx) cost = storehold[idx]._iIvalue; sz = cost / GOLD_MAX_LIMIT; - if (cost % GOLD_MAX_LIMIT) + if (cost % GOLD_MAX_LIMIT != 0) sz++; SetCursor_(storehold[idx]._iCurs + CURSOR_FIRSTITEM); @@ -2049,7 +2078,7 @@ BOOL StoreGoldFit(int idx) return TRUE; for (i = 0; i < NUM_INV_GRID_ELEM; i++) { - if (!plr[myplr].InvGrid[i]) + if (plr[myplr].InvGrid[i] == 0) numsqrs++; } @@ -2079,7 +2108,7 @@ void PlaceStoreGold(int v) for (i = 0; i < NUM_INV_GRID_ELEM && !done; i++) { yy = 10 * (i / 10); xx = i % 10; - if (!plr[myplr].InvGrid[xx + yy]) { + if (plr[myplr].InvGrid[xx + yy] == 0) { ii = plr[myplr]._pNumInv; GetGoldSeed(myplr, &golditem); plr[myplr].InvList[ii] = golditem; diff --git a/Source/sync.cpp b/Source/sync.cpp index 7198d8d6..c13c0861 100644 --- a/Source/sync.cpp +++ b/Source/sync.cpp @@ -208,7 +208,7 @@ static void sync_monster(int pnum, const TSyncMonster *p) return; } - for (i = 0; i < nummonsters; i++) { + for (i = 0; i < nummonsters; i++) { // CODEFIX: this loop does nothing if (monstactive[i] == ndx) { break; } diff --git a/Source/themes.cpp b/Source/themes.cpp index 40544762..6527cd20 100644 --- a/Source/themes.cpp +++ b/Source/themes.cpp @@ -193,7 +193,7 @@ BOOL CheckThemeObj3(int xp, int yp, int t, int f) return FALSE; if (dObject[xp + trm3x[i]][yp + trm3y[i]]) return FALSE; - if (f != -1 && !random_(0, f)) + if (f != -1 && random_(0, f) == 0) return FALSE; } diff --git a/Source/town.cpp b/Source/town.cpp index 0a26eac0..70c6c330 100644 --- a/Source/town.cpp +++ b/Source/town.cpp @@ -79,7 +79,8 @@ void T_FillTile(BYTE *P3Tiles, int xx, int yy, int t) dPiece[xx + 1][yy + 1] = v4; } -void town_4751C6(){ +void town_4751C6() +{ dPiece[78][60] = 0x48a; dPiece[79][60] = 0x48b; dPiece[78][61] = 0x48c; @@ -129,7 +130,8 @@ void town_4751C6(){ SetDungeonMicros(); } -void town_475379(){ +void town_475379() +{ dPiece[78][60] = 0x48a; dPiece[79][60] = 0x4eb; dPiece[78][61] = 0x4ec; @@ -179,7 +181,8 @@ void town_475379(){ SetDungeonMicros(); } -void town_47552C(){ +void town_47552C() +{ dPiece[36][21] = 0x52b; dPiece[37][21] = 0x52c; dPiece[36][22] = 0x52d; @@ -193,7 +196,8 @@ void town_47552C(){ SetDungeonMicros(); } -void town_475595(){ +void town_475595() +{ dPiece[36][21] = 0x533; dPiece[37][21] = 0x534; dPiece[36][22] = 0x535; @@ -240,16 +244,13 @@ void T_Pass3() if (gbIsSpawn || gbMaxPlayers == 1) { #ifdef HELLFIRE - if(quests[Q_FARMER]._qactive == 3 || quests[Q_FARMER]._qactive == 10 - || quests[Q_JERSEY]._qactive == 3 || quests[Q_JERSEY]._qactive == 10) - { + if (quests[Q_FARMER]._qactive == 3 || quests[Q_FARMER]._qactive == 10 + || quests[Q_JERSEY]._qactive == 3 || quests[Q_JERSEY]._qactive == 10) { town_4751C6(); - } - else - { + } else { town_475379(); } - if ( quests[Q_GRAVE]._qactive == 3 || plr[myplr]._pLvlVisited[21] ) + if (quests[Q_GRAVE]._qactive == 3 || plr[myplr]._pLvlVisited[21]) town_475595(); else town_47552C(); @@ -282,18 +283,14 @@ void T_Pass3() } } #ifdef HELLFIRE - else - { - if(quests[Q_FARMER]._qactive == 3 || quests[Q_FARMER]._qactive == 10 - || quests[Q_JERSEY]._qactive == 3 || quests[Q_JERSEY]._qactive == 10) - { + else { + if (quests[Q_FARMER]._qactive == 3 || quests[Q_FARMER]._qactive == 10 + || quests[Q_JERSEY]._qactive == 3 || quests[Q_JERSEY]._qactive == 10) { town_4751C6(); - } - else - { + } else { town_475379(); } - if ( quests[Q_GRAVE]._qactive == 3 || plr[myplr]._pLvlVisited[21] ) + if (quests[Q_GRAVE]._qactive == 3 || plr[myplr]._pLvlVisited[21]) town_475595(); else town_47552C(); diff --git a/Source/town.h b/Source/town.h index b97796b6..e1faf7bd 100644 --- a/Source/town.h +++ b/Source/town.h @@ -16,7 +16,7 @@ void T_FillSector(BYTE *P3Tiles, BYTE *pSector, int xi, int yi, int w, int h); void T_FillTile(BYTE *P3Tiles, int xx, int yy, int t); void T_Pass3(); void town_4751C6(); -void town_475595(); +void town_475595(); void CreateTown(int entry); #ifdef __cplusplus diff --git a/Source/towners.cpp b/Source/towners.cpp index f78a743a..4da4db3d 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -800,19 +800,19 @@ void TalkToTowner(int p, int t) #ifdef HELLFIRE if (quests[Q_SKELKING]._qactive != QUEST_NOTAVAIL) #endif - if (quests[Q_SKELKING]._qvar2 == 0 && !towner[t]._tMsgSaid) { - quests[Q_SKELKING]._qvar2 = 1; - quests[Q_SKELKING]._qlog = TRUE; - if (quests[Q_SKELKING]._qactive == QUEST_INIT) { - quests[Q_SKELKING]._qactive = QUEST_ACTIVE; - quests[Q_SKELKING]._qvar1 = 1; + if (quests[Q_SKELKING]._qvar2 == 0 && !towner[t]._tMsgSaid) { + quests[Q_SKELKING]._qvar2 = 1; + quests[Q_SKELKING]._qlog = TRUE; + if (quests[Q_SKELKING]._qactive == QUEST_INIT) { + quests[Q_SKELKING]._qactive = QUEST_ACTIVE; + quests[Q_SKELKING]._qvar1 = 1; + } + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_KING2); + towner[t]._tMsgSaid = TRUE; + NetSendCmdQuest(TRUE, Q_SKELKING); } - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_KING2); - towner[t]._tMsgSaid = TRUE; - NetSendCmdQuest(TRUE, Q_SKELKING); - } if (quests[Q_SKELKING]._qactive == QUEST_DONE && quests[Q_SKELKING]._qvar2 == 1 && !towner[t]._tMsgSaid) { quests[Q_SKELKING]._qvar2 = 2; quests[Q_SKELKING]._qvar1 = 2; @@ -825,86 +825,90 @@ void TalkToTowner(int p, int t) } if (gbMaxPlayers == 1) { if (plr[p]._pLvlVisited[3] && quests[Q_LTBANNER]._qactive != QUEST_NOTAVAIL) { - if ((quests[Q_LTBANNER]._qactive == QUEST_INIT || quests[Q_LTBANNER]._qactive == QUEST_ACTIVE) && quests[Q_LTBANNER]._qvar2 == 0 && !towner[t]._tMsgSaid) { - quests[Q_LTBANNER]._qvar2 = 1; - if (quests[Q_LTBANNER]._qactive == QUEST_INIT) { - quests[Q_LTBANNER]._qvar1 = 1; - quests[Q_LTBANNER]._qactive = QUEST_ACTIVE; + if ((quests[Q_LTBANNER]._qactive == QUEST_INIT || quests[Q_LTBANNER]._qactive == QUEST_ACTIVE) && quests[Q_LTBANNER]._qvar2 == 0 && !towner[t]._tMsgSaid) { + quests[Q_LTBANNER]._qvar2 = 1; + if (quests[Q_LTBANNER]._qactive == QUEST_INIT) { + quests[Q_LTBANNER]._qvar1 = 1; + quests[Q_LTBANNER]._qactive = QUEST_ACTIVE; + } + quests[Q_LTBANNER]._qlog = TRUE; + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_BANNER2); + towner[t]._tMsgSaid = TRUE; } - quests[Q_LTBANNER]._qlog = TRUE; - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_BANNER2); - towner[t]._tMsgSaid = TRUE; - } #ifdef HELLFIRE } if (!towner[t]._tMsgSaid && PlrHasItem(p, IDI_BANNER, &i) != NULL) { #else if (quests[Q_LTBANNER]._qvar2 == 1 && PlrHasItem(p, IDI_BANNER, &i) != NULL && !towner[t]._tMsgSaid) { #endif - quests[Q_LTBANNER]._qactive = QUEST_DONE; - quests[Q_LTBANNER]._qvar1 = 3; - RemoveInvItem(p, i); - CreateItem(UITEM_HARCREST, towner[t]._tx, towner[t]._ty + 1); - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_BANNER3); - towner[t]._tMsgSaid = TRUE; - } + quests[Q_LTBANNER]._qactive = QUEST_DONE; + quests[Q_LTBANNER]._qvar1 = 3; + RemoveInvItem(p, i); + CreateItem(UITEM_HARCREST, towner[t]._tx, towner[t]._ty + 1); + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_BANNER3); + towner[t]._tMsgSaid = TRUE; } + } #ifndef HELLFIRE - } + } #endif - if (!qtextflag) { - TownerTalk(TEXT_OGDEN1, t); - if (storeflag) { - StartStore(STORE_TAVERN); - } + if (!qtextflag) { + TownerTalk(TEXT_OGDEN1, t); + if (storeflag) { + StartStore(STORE_TAVERN); } - } else if (t == GetActiveTowner(TOWN_DEADGUY)) { - if (quests[Q_BUTCHER]._qactive == QUEST_ACTIVE && quests[Q_BUTCHER]._qvar1 == 1) { - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - quests[Q_BUTCHER]._qvar1 = 1; - if (plr[p]._pClass == PC_WARRIOR && !effect_is_playing(PS_WARR8)) { - PlaySFX(PS_WARR8); - } else if (plr[p]._pClass == PC_ROGUE && !effect_is_playing(PS_ROGUE8)) { - PlaySFX(PS_ROGUE8); - } else if (plr[p]._pClass == PC_SORCERER && !effect_is_playing(PS_MAGE8)) { - PlaySFX(PS_MAGE8); + } +} +else if (t == GetActiveTowner(TOWN_DEADGUY)) +{ + if (quests[Q_BUTCHER]._qactive == QUEST_ACTIVE && quests[Q_BUTCHER]._qvar1 == 1) { + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + quests[Q_BUTCHER]._qvar1 = 1; + if (plr[p]._pClass == PC_WARRIOR && !effect_is_playing(PS_WARR8)) { + PlaySFX(PS_WARR8); + } else if (plr[p]._pClass == PC_ROGUE && !effect_is_playing(PS_ROGUE8)) { + PlaySFX(PS_ROGUE8); + } else if (plr[p]._pClass == PC_SORCERER && !effect_is_playing(PS_MAGE8)) { + PlaySFX(PS_MAGE8); #ifdef HELLFIRE - } else if (plr[p]._pClass == PC_MONK && !effect_is_playing(PS_MONK8)) { - PlaySFX(PS_MONK8); - } else if (plr[p]._pClass == PC_BARD && !effect_is_playing(PS_ROGUE8)) { - PlaySFX(PS_ROGUE8); - } else if (plr[p]._pClass == PC_BARBARIAN && !effect_is_playing(PS_WARR8)) { - PlaySFX(PS_WARR8); + } else if (plr[p]._pClass == PC_MONK && !effect_is_playing(PS_MONK8)) { + PlaySFX(PS_MONK8); + } else if (plr[p]._pClass == PC_BARD && !effect_is_playing(PS_ROGUE8)) { + PlaySFX(PS_ROGUE8); + } else if (plr[p]._pClass == PC_BARBARIAN && !effect_is_playing(PS_WARR8)) { + PlaySFX(PS_WARR8); #endif - } - towner[t]._tMsgSaid = TRUE; - } else if (quests[Q_BUTCHER]._qactive == QUEST_DONE && quests[Q_BUTCHER]._qvar1 == 1) { - quests[Q_BUTCHER]._qvar1 = 1; - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - towner[t]._tMsgSaid = TRUE; - } else if (quests[Q_BUTCHER]._qactive == QUEST_INIT || quests[Q_BUTCHER]._qactive == QUEST_ACTIVE && quests[Q_BUTCHER]._qvar1 == 0) { - quests[Q_BUTCHER]._qactive = QUEST_ACTIVE; - quests[Q_BUTCHER]._qlog = TRUE; - quests[Q_BUTCHER]._qmsg = TEXT_BUTCH9; - quests[Q_BUTCHER]._qvar1 = 1; - towner[t]._tbtcnt = 50; - towner[t]._tVar1 = p; - towner[t]._tVar2 = 3; - InitQTextMsg(TEXT_BUTCH9); - towner[t]._tMsgSaid = TRUE; - NetSendCmdQuest(TRUE, Q_BUTCHER); } - } else if (t == GetActiveTowner(TOWN_SMITH)) { - if (gbMaxPlayers == 1) { - if (plr[p]._pLvlVisited[4] && quests[Q_ROCK]._qactive != QUEST_NOTAVAIL) { + towner[t]._tMsgSaid = TRUE; + } else if (quests[Q_BUTCHER]._qactive == QUEST_DONE && quests[Q_BUTCHER]._qvar1 == 1) { + quests[Q_BUTCHER]._qvar1 = 1; + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + towner[t]._tMsgSaid = TRUE; + } else if (quests[Q_BUTCHER]._qactive == QUEST_INIT || quests[Q_BUTCHER]._qactive == QUEST_ACTIVE && quests[Q_BUTCHER]._qvar1 == 0) { + quests[Q_BUTCHER]._qactive = QUEST_ACTIVE; + quests[Q_BUTCHER]._qlog = TRUE; + quests[Q_BUTCHER]._qmsg = TEXT_BUTCH9; + quests[Q_BUTCHER]._qvar1 = 1; + towner[t]._tbtcnt = 50; + towner[t]._tVar1 = p; + towner[t]._tVar2 = 3; + InitQTextMsg(TEXT_BUTCH9); + towner[t]._tMsgSaid = TRUE; + NetSendCmdQuest(TRUE, Q_BUTCHER); + } +} +else if (t == GetActiveTowner(TOWN_SMITH)) +{ + if (gbMaxPlayers == 1) { + if (plr[p]._pLvlVisited[4] && quests[Q_ROCK]._qactive != QUEST_NOTAVAIL) { #ifdef HELLFIRE - if (quests[Q_ROCK]._qactive != QUEST_NOTAVAIL) + if (quests[Q_ROCK]._qactive != QUEST_NOTAVAIL) #endif if (quests[Q_ROCK]._qvar2 == 0) { quests[Q_ROCK]._qvar2 = 1; @@ -919,151 +923,159 @@ void TalkToTowner(int p, int t) towner[t]._tMsgSaid = TRUE; } #ifdef HELLFIRE - } - if (!towner[t]._tMsgSaid && PlrHasItem(p, IDI_ROCK, &i) != NULL) { -#else - if (quests[Q_ROCK]._qvar2 == 1 && PlrHasItem(p, IDI_ROCK, &i) != NULL && !towner[t]._tMsgSaid) { -#endif - quests[Q_ROCK]._qactive = QUEST_DONE; - quests[Q_ROCK]._qvar2 = 2; - quests[Q_ROCK]._qvar1 = 2; - RemoveInvItem(p, i); - CreateItem(UITEM_INFRARING, towner[t]._tx, towner[t]._ty + 1); - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_INFRA7); - towner[t]._tMsgSaid = TRUE; - } -#ifndef HELLFIRE - } -#endif - if (plr[p]._pLvlVisited[9] && quests[Q_ANVIL]._qactive != QUEST_NOTAVAIL) { - if ((quests[Q_ANVIL]._qactive == QUEST_INIT || quests[Q_ANVIL]._qactive == QUEST_ACTIVE) && quests[Q_ANVIL]._qvar2 == 0 && !towner[t]._tMsgSaid) { - if (quests[Q_ROCK]._qvar2 == 2 || quests[Q_ROCK]._qactive == QUEST_ACTIVE && quests[Q_ROCK]._qvar2 == 1) { - quests[Q_ANVIL]._qvar2 = 1; - quests[Q_ANVIL]._qlog = TRUE; - if (quests[Q_ANVIL]._qactive == QUEST_INIT) { - quests[Q_ANVIL]._qactive = QUEST_ACTIVE; - quests[Q_ANVIL]._qvar1 = 1; - } - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_ANVIL5); - towner[t]._tMsgSaid = TRUE; - } - } -#ifdef HELLFIRE - } - if (!towner[t]._tMsgSaid && PlrHasItem(p, IDI_ANVIL, &i) != NULL) { -#else - if (quests[Q_ANVIL]._qvar2 == 1 && PlrHasItem(p, IDI_ANVIL, &i) != NULL) { - if (!towner[t]._tMsgSaid) { -#endif - quests[Q_ANVIL]._qactive = QUEST_DONE; - quests[Q_ANVIL]._qvar2 = 2; - quests[Q_ANVIL]._qvar1 = 2; - RemoveInvItem(p, i); - CreateItem(UITEM_GRISWOLD, towner[t]._tx, towner[t]._ty + 1); - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_ANVIL7); - towner[t]._tMsgSaid = TRUE; -#ifndef HELLFIRE - } - } -#endif - } } - if (!qtextflag) { - TownerTalk(TEXT_GRISWOLD1, t); - if (storeflag) { - StartStore(STORE_SMITH); - } - } - } else if (t == GetActiveTowner(TOWN_WITCH)) { - if (quests[Q_MUSHROOM]._qactive == QUEST_INIT && PlrHasItem(p, IDI_FUNGALTM, &i) != NULL) { + if (!towner[t]._tMsgSaid && PlrHasItem(p, IDI_ROCK, &i) != NULL) { +#else + if (quests[Q_ROCK]._qvar2 == 1 && PlrHasItem(p, IDI_ROCK, &i) != NULL && !towner[t]._tMsgSaid) { +#endif + quests[Q_ROCK]._qactive = QUEST_DONE; + quests[Q_ROCK]._qvar2 = 2; + quests[Q_ROCK]._qvar1 = 2; RemoveInvItem(p, i); - quests[Q_MUSHROOM]._qactive = QUEST_ACTIVE; - quests[Q_MUSHROOM]._qlog = TRUE; - quests[Q_MUSHROOM]._qvar1 = QS_TOMEGIVEN; + CreateItem(UITEM_INFRARING, towner[t]._tx, towner[t]._ty + 1); towner[t]._tbtcnt = 150; towner[t]._tVar1 = p; - InitQTextMsg(TEXT_MUSH8); - towner[t]._tMsgSaid = TRUE; - } else if (quests[Q_MUSHROOM]._qactive == QUEST_ACTIVE) { - if (quests[Q_MUSHROOM]._qvar1 >= QS_TOMEGIVEN && quests[Q_MUSHROOM]._qvar1 <= QS_MUSHPICKED) { - if (PlrHasItem(p, IDI_MUSHROOM, &i) != NULL) { - RemoveInvItem(p, i); - quests[Q_MUSHROOM]._qvar1 = 5; - Qtalklist[TOWN_HEALER]._qblkm = TEXT_MUSH3; - Qtalklist[TOWN_WITCH]._qblkm = -1; - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - quests[Q_MUSHROOM]._qmsg = TEXT_MUSH10; - InitQTextMsg(TEXT_MUSH10); - towner[t]._tMsgSaid = TRUE; - } else if (quests[Q_MUSHROOM]._qmsg != TEXT_MUSH9) { - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - quests[Q_MUSHROOM]._qmsg = TEXT_MUSH9; - InitQTextMsg(TEXT_MUSH9); - towner[t]._tMsgSaid = TRUE; - } - } else { - Item = PlrHasItem(p, IDI_SPECELIX, &i); - if (Item != NULL) { - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_MUSH12); - quests[Q_MUSHROOM]._qactive = QUEST_DONE; - towner[t]._tMsgSaid = TRUE; - AllItemsList[Item->IDidx].iUsable = TRUE; - } else if (PlrHasItem(p, IDI_BRAIN, &i) != NULL && quests[Q_MUSHROOM]._qvar2 != TEXT_MUSH11) { - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - quests[Q_MUSHROOM]._qvar2 = TEXT_MUSH11; - InitQTextMsg(TEXT_MUSH11); - towner[t]._tMsgSaid = TRUE; - } - } - } - if (!qtextflag) { - TownerTalk(TEXT_ADRIA1, t); - if (storeflag) { - StartStore(STORE_WITCH); - } - } - } else if (t == GetActiveTowner(TOWN_BMAID)) { -#ifdef HELLFIRE - if (plr[p]._pLvlVisited[21] == false && PlrHasItem(p, IDI_MAPOFDOOM, &i)) { - quests[Q_GRAVE]._qactive = 2; - quests[Q_GRAVE]._qlog = 1; - quests[Q_GRAVE]._qmsg = TEXT_GRAVE8; - InitQTextMsg(TEXT_GRAVE8); + InitQTextMsg(TEXT_INFRA7); towner[t]._tMsgSaid = TRUE; } +#ifndef HELLFIRE + } #endif - if (!qtextflag) { - TownerTalk(TEXT_GILLIAN1, t); - if (storeflag) { - StartStore(STORE_BARMAID); + if (plr[p]._pLvlVisited[9] && quests[Q_ANVIL]._qactive != QUEST_NOTAVAIL) { + if ((quests[Q_ANVIL]._qactive == QUEST_INIT || quests[Q_ANVIL]._qactive == QUEST_ACTIVE) && quests[Q_ANVIL]._qvar2 == 0 && !towner[t]._tMsgSaid) { + if (quests[Q_ROCK]._qvar2 == 2 || quests[Q_ROCK]._qactive == QUEST_ACTIVE && quests[Q_ROCK]._qvar2 == 1) { + quests[Q_ANVIL]._qvar2 = 1; + quests[Q_ANVIL]._qlog = TRUE; + if (quests[Q_ANVIL]._qactive == QUEST_INIT) { + quests[Q_ANVIL]._qactive = QUEST_ACTIVE; + quests[Q_ANVIL]._qvar1 = 1; + } + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_ANVIL5); + towner[t]._tMsgSaid = TRUE; } } - } else if (t == GetActiveTowner(TOWN_DRUNK)) { - if (!qtextflag) { - TownerTalk(TEXT_FARNHAM1, t); - if (storeflag) { - StartStore(STORE_DRUNK); - } - } - } else if (t == GetActiveTowner(TOWN_HEALER)) { - if (gbMaxPlayers == 1) { #ifdef HELLFIRE - if (plr[p]._pLvlVisited[1] || plr[p]._pLvlVisited[5]) { + } + if (!towner[t]._tMsgSaid && PlrHasItem(p, IDI_ANVIL, &i) != NULL) { #else - if (plr[p]._pLvlVisited[1]) { + if (quests[Q_ANVIL]._qvar2 == 1 && PlrHasItem(p, IDI_ANVIL, &i) != NULL) { + if (!towner[t]._tMsgSaid) { #endif - if (!towner[t]._tMsgSaid) { + quests[Q_ANVIL]._qactive = QUEST_DONE; + quests[Q_ANVIL]._qvar2 = 2; + quests[Q_ANVIL]._qvar1 = 2; + RemoveInvItem(p, i); + CreateItem(UITEM_GRISWOLD, towner[t]._tx, towner[t]._ty + 1); + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_ANVIL7); + towner[t]._tMsgSaid = TRUE; +#ifndef HELLFIRE + } +} +#endif +} +} +if (!qtextflag) { + TownerTalk(TEXT_GRISWOLD1, t); + if (storeflag) { + StartStore(STORE_SMITH); + } +} +} +else if (t == GetActiveTowner(TOWN_WITCH)) +{ + if (quests[Q_MUSHROOM]._qactive == QUEST_INIT && PlrHasItem(p, IDI_FUNGALTM, &i) != NULL) { + RemoveInvItem(p, i); + quests[Q_MUSHROOM]._qactive = QUEST_ACTIVE; + quests[Q_MUSHROOM]._qlog = TRUE; + quests[Q_MUSHROOM]._qvar1 = QS_TOMEGIVEN; + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_MUSH8); + towner[t]._tMsgSaid = TRUE; + } else if (quests[Q_MUSHROOM]._qactive == QUEST_ACTIVE) { + if (quests[Q_MUSHROOM]._qvar1 >= QS_TOMEGIVEN && quests[Q_MUSHROOM]._qvar1 <= QS_MUSHPICKED) { + if (PlrHasItem(p, IDI_MUSHROOM, &i) != NULL) { + RemoveInvItem(p, i); + quests[Q_MUSHROOM]._qvar1 = 5; + Qtalklist[TOWN_HEALER]._qblkm = TEXT_MUSH3; + Qtalklist[TOWN_WITCH]._qblkm = -1; + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + quests[Q_MUSHROOM]._qmsg = TEXT_MUSH10; + InitQTextMsg(TEXT_MUSH10); + towner[t]._tMsgSaid = TRUE; + } else if (quests[Q_MUSHROOM]._qmsg != TEXT_MUSH9) { + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + quests[Q_MUSHROOM]._qmsg = TEXT_MUSH9; + InitQTextMsg(TEXT_MUSH9); + towner[t]._tMsgSaid = TRUE; + } + } else { + Item = PlrHasItem(p, IDI_SPECELIX, &i); + if (Item != NULL) { + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_MUSH12); + quests[Q_MUSHROOM]._qactive = QUEST_DONE; + towner[t]._tMsgSaid = TRUE; + AllItemsList[Item->IDidx].iUsable = TRUE; + } else if (PlrHasItem(p, IDI_BRAIN, &i) != NULL && quests[Q_MUSHROOM]._qvar2 != TEXT_MUSH11) { + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + quests[Q_MUSHROOM]._qvar2 = TEXT_MUSH11; + InitQTextMsg(TEXT_MUSH11); + towner[t]._tMsgSaid = TRUE; + } + } + } + if (!qtextflag) { + TownerTalk(TEXT_ADRIA1, t); + if (storeflag) { + StartStore(STORE_WITCH); + } + } +} +else if (t == GetActiveTowner(TOWN_BMAID)) +{ +#ifdef HELLFIRE + if (plr[p]._pLvlVisited[21] == false && PlrHasItem(p, IDI_MAPOFDOOM, &i)) { + quests[Q_GRAVE]._qactive = 2; + quests[Q_GRAVE]._qlog = 1; + quests[Q_GRAVE]._qmsg = TEXT_GRAVE8; + InitQTextMsg(TEXT_GRAVE8); + towner[t]._tMsgSaid = TRUE; + } +#endif + if (!qtextflag) { + TownerTalk(TEXT_GILLIAN1, t); + if (storeflag) { + StartStore(STORE_BARMAID); + } + } +} +else if (t == GetActiveTowner(TOWN_DRUNK)) +{ + if (!qtextflag) { + TownerTalk(TEXT_FARNHAM1, t); + if (storeflag) { + StartStore(STORE_DRUNK); + } + } +} +else if (t == GetActiveTowner(TOWN_HEALER)) +{ + if (gbMaxPlayers == 1) { +#ifdef HELLFIRE + if (plr[p]._pLvlVisited[1] || plr[p]._pLvlVisited[5]) { +#else + if (plr[p]._pLvlVisited[1]) { +#endif + if (!towner[t]._tMsgSaid) { if (quests[Q_PWATER]._qactive == QUEST_INIT) { quests[Q_PWATER]._qactive = QUEST_ACTIVE; quests[Q_PWATER]._qlog = TRUE; @@ -1082,306 +1094,318 @@ void TalkToTowner(int p, int t) towner[t]._tMsgSaid = TRUE; } } - } - if (quests[Q_MUSHROOM]._qactive == QUEST_ACTIVE && quests[Q_MUSHROOM]._qmsg == TEXT_MUSH10 && PlrHasItem(p, IDI_BRAIN, &i) != NULL) { - RemoveInvItem(p, i); - SpawnQuestItem(IDI_SPECELIX, towner[t]._tx, towner[t]._ty + 1, 0, 0); - InitQTextMsg(TEXT_MUSH4); - quests[Q_MUSHROOM]._qvar1 = QS_BRAINGIVEN; - Qtalklist[TOWN_HEALER]._qblkm = -1; - } } - if (!qtextflag) { - TownerTalk(TEXT_PEPIN1, t); - if (storeflag) { - StartStore(STORE_HEALER); - } + if (quests[Q_MUSHROOM]._qactive == QUEST_ACTIVE && quests[Q_MUSHROOM]._qmsg == TEXT_MUSH10 && PlrHasItem(p, IDI_BRAIN, &i) != NULL) { + RemoveInvItem(p, i); + SpawnQuestItem(IDI_SPECELIX, towner[t]._tx, towner[t]._ty + 1, 0, 0); + InitQTextMsg(TEXT_MUSH4); + quests[Q_MUSHROOM]._qvar1 = QS_BRAINGIVEN; + Qtalklist[TOWN_HEALER]._qblkm = -1; } - } else if (t == GetActiveTowner(TOWN_PEGBOY)) { - if (!qtextflag) { - TownerTalk(TEXT_WIRT1, t); - if (storeflag) { - StartStore(STORE_BOY); - } + } + if (!qtextflag) { + TownerTalk(TEXT_PEPIN1, t); + if (storeflag) { + StartStore(STORE_HEALER); } - } else if (t == GetActiveTowner(TOWN_STORY)) { - if (gbMaxPlayers == 1) { - if (quests[Q_BETRAYER]._qactive == QUEST_INIT && PlrHasItem(p, IDI_LAZSTAFF, &i) != NULL) { - RemoveInvItem(p, i); - quests[Q_BETRAYER]._qvar1 = 2; - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_VILE1); - towner[t]._tMsgSaid = TRUE; - quests[Q_BETRAYER]._qactive = QUEST_ACTIVE; - quests[Q_BETRAYER]._qlog = TRUE; - } else if (quests[Q_BETRAYER]._qactive == QUEST_DONE && quests[Q_BETRAYER]._qvar1 == 7) { - quests[Q_BETRAYER]._qvar1 = 8; - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_VILE3); - towner[t]._tMsgSaid = TRUE; - quests[Q_DIABLO]._qlog = TRUE; - } + } +} +else if (t == GetActiveTowner(TOWN_PEGBOY)) +{ + if (!qtextflag) { + TownerTalk(TEXT_WIRT1, t); + if (storeflag) { + StartStore(STORE_BOY); } - if (gbMaxPlayers != 1) { - if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE && !quests[Q_BETRAYER]._qlog) { - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_VILE1); - towner[t]._tMsgSaid = TRUE; - quests[Q_BETRAYER]._qlog = TRUE; - NetSendCmdQuest(TRUE, Q_BETRAYER); - } else if (quests[Q_BETRAYER]._qactive == QUEST_DONE && quests[Q_BETRAYER]._qvar1 == 7) { - quests[Q_BETRAYER]._qvar1 = 8; - towner[t]._tbtcnt = 150; - towner[t]._tVar1 = p; - InitQTextMsg(TEXT_VILE3); - towner[t]._tMsgSaid = TRUE; - NetSendCmdQuest(TRUE, Q_BETRAYER); - quests[Q_DIABLO]._qlog = TRUE; - NetSendCmdQuest(TRUE, Q_DIABLO); - } + } +} +else if (t == GetActiveTowner(TOWN_STORY)) +{ + if (gbMaxPlayers == 1) { + if (quests[Q_BETRAYER]._qactive == QUEST_INIT && PlrHasItem(p, IDI_LAZSTAFF, &i) != NULL) { + RemoveInvItem(p, i); + quests[Q_BETRAYER]._qvar1 = 2; + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_VILE1); + towner[t]._tMsgSaid = TRUE; + quests[Q_BETRAYER]._qactive = QUEST_ACTIVE; + quests[Q_BETRAYER]._qlog = TRUE; + } else if (quests[Q_BETRAYER]._qactive == QUEST_DONE && quests[Q_BETRAYER]._qvar1 == 7) { + quests[Q_BETRAYER]._qvar1 = 8; + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_VILE3); + towner[t]._tMsgSaid = TRUE; + quests[Q_DIABLO]._qlog = TRUE; } - if (!qtextflag) { - TownerTalk(TEXT_STORY1, t); - if (storeflag) { - StartStore(STORE_STORY); - } + } + if (gbMaxPlayers != 1) { + if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE && !quests[Q_BETRAYER]._qlog) { + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_VILE1); + towner[t]._tMsgSaid = TRUE; + quests[Q_BETRAYER]._qlog = TRUE; + NetSendCmdQuest(TRUE, Q_BETRAYER); + } else if (quests[Q_BETRAYER]._qactive == QUEST_DONE && quests[Q_BETRAYER]._qvar1 == 7) { + quests[Q_BETRAYER]._qvar1 = 8; + towner[t]._tbtcnt = 150; + towner[t]._tVar1 = p; + InitQTextMsg(TEXT_VILE3); + towner[t]._tMsgSaid = TRUE; + NetSendCmdQuest(TRUE, Q_BETRAYER); + quests[Q_DIABLO]._qlog = TRUE; + NetSendCmdQuest(TRUE, Q_DIABLO); } - } else if (towner[t]._ttype == TOWN_COW) { - if (!qtextflag) - CowSFX(p); + } + if (!qtextflag) { + TownerTalk(TEXT_STORY1, t); + if (storeflag) { + StartStore(STORE_STORY); + } + } +} +else if (towner[t]._ttype == TOWN_COW) +{ + if (!qtextflag) + CowSFX(p); #ifdef HELLFIRE - } else if (towner[t]._ttype == TOWN_FARMER) { - if (!qtextflag) { - qt = 277; - t2 = 1; - switch (quests[Q_FARMER]._qactive) { - case 0: - if (PlrHasItem(p, IDI_RUNEBOMB, &i)) { - qt = TEXT_FARMER2; - quests[Q_FARMER]._qactive = 2; - quests[Q_FARMER]._qvar1 = 1; - quests[Q_FARMER]._qlog = 1; - quests[Q_FARMER]._qmsg = TEXT_FARMER1; - break; - } else if (!plr[myplr]._pLvlVisited[9] && plr[myplr]._pLevel < 15) { - qt = 309; - if (plr[myplr]._pLvlVisited[2]) - qt = 281; - if (plr[myplr]._pLvlVisited[5]) - qt = 308; - if (plr[myplr]._pLvlVisited[7]) - qt = 310; - } else { - qt = TEXT_FARMER1; - quests[Q_FARMER]._qactive = 2; - quests[Q_FARMER]._qvar1 = 1; - quests[Q_FARMER]._qlog = 1; - quests[Q_FARMER]._qmsg = TEXT_FARMER1; - SpawnRuneBomb(towner[t]._tx + 1, towner[t]._ty); - t2 = 1; - break; - } - case 2: - if (PlrHasItem(p, IDI_RUNEBOMB, &i)) - qt = TEXT_FARMER2; - else - qt = TEXT_FARMER3; +} +else if (towner[t]._ttype == TOWN_FARMER) +{ + if (!qtextflag) { + qt = 277; + t2 = 1; + switch (quests[Q_FARMER]._qactive) { + case 0: + if (PlrHasItem(p, IDI_RUNEBOMB, &i)) { + qt = TEXT_FARMER2; + quests[Q_FARMER]._qactive = 2; + quests[Q_FARMER]._qvar1 = 1; + quests[Q_FARMER]._qlog = 1; + quests[Q_FARMER]._qmsg = TEXT_FARMER1; break; - case 1: - if (PlrHasItem(p, IDI_RUNEBOMB, &i)) { - qt = TEXT_FARMER2; - quests[Q_FARMER]._qactive = 2; - quests[Q_FARMER]._qvar1 = 1; - quests[Q_FARMER]._qmsg = TEXT_FARMER1; - quests[Q_FARMER]._qlog = 1; - } else if (!plr[myplr]._pLvlVisited[9] && plr[myplr]._pLevel < 15) { - qt = TEXT_FARMER8; - if (plr[myplr]._pLvlVisited[2]) { - qt = TEXT_FARMER5; - } - if (plr[myplr]._pLvlVisited[5]) { - qt = TEXT_FARMER7; - } - if (plr[myplr]._pLvlVisited[7]) { - qt = TEXT_FARMER9; - } - } else { - qt = TEXT_FARMER1; - quests[Q_FARMER]._qactive = 2; - quests[Q_FARMER]._qvar1 = 1; - quests[Q_FARMER]._qlog = 1; - quests[Q_FARMER]._qmsg = TEXT_FARMER1; - SpawnRuneBomb(towner[t]._tx + 1, towner[t]._ty); - t2 = 1; - } - break; - case 3: - qt = TEXT_FARMER4; - SpawnRewardItem(IDI_AURIC, towner[t]._tx + 1, towner[t]._ty); - quests[Q_FARMER]._qactive = 10; - quests[Q_FARMER]._qlog = 0; + } else if (!plr[myplr]._pLvlVisited[9] && plr[myplr]._pLevel < 15) { + qt = 309; + if (plr[myplr]._pLvlVisited[2]) + qt = 281; + if (plr[myplr]._pLvlVisited[5]) + qt = 308; + if (plr[myplr]._pLvlVisited[7]) + qt = 310; + } else { + qt = TEXT_FARMER1; + quests[Q_FARMER]._qactive = 2; + quests[Q_FARMER]._qvar1 = 1; + quests[Q_FARMER]._qlog = 1; + quests[Q_FARMER]._qmsg = TEXT_FARMER1; + SpawnRuneBomb(towner[t]._tx + 1, towner[t]._ty); t2 = 1; break; - case 10: + } + case 2: + if (PlrHasItem(p, IDI_RUNEBOMB, &i)) + qt = TEXT_FARMER2; + else + qt = TEXT_FARMER3; + break; + case 1: + if (PlrHasItem(p, IDI_RUNEBOMB, &i)) { + qt = TEXT_FARMER2; + quests[Q_FARMER]._qactive = 2; + quests[Q_FARMER]._qvar1 = 1; + quests[Q_FARMER]._qmsg = TEXT_FARMER1; + quests[Q_FARMER]._qlog = 1; + } else if (!plr[myplr]._pLvlVisited[9] && plr[myplr]._pLevel < 15) { + qt = TEXT_FARMER8; + if (plr[myplr]._pLvlVisited[2]) { + qt = TEXT_FARMER5; + } + if (plr[myplr]._pLvlVisited[5]) { + qt = TEXT_FARMER7; + } + if (plr[myplr]._pLvlVisited[7]) { + qt = TEXT_FARMER9; + } + } else { + qt = TEXT_FARMER1; + quests[Q_FARMER]._qactive = 2; + quests[Q_FARMER]._qvar1 = 1; + quests[Q_FARMER]._qlog = 1; + quests[Q_FARMER]._qmsg = TEXT_FARMER1; + SpawnRuneBomb(towner[t]._tx + 1, towner[t]._ty); + t2 = 1; + } + break; + case 3: + qt = TEXT_FARMER4; + SpawnRewardItem(IDI_AURIC, towner[t]._tx + 1, towner[t]._ty); + quests[Q_FARMER]._qactive = 10; + quests[Q_FARMER]._qlog = 0; + t2 = 1; + break; + case 10: + qt = -1; + break; + default: + quests[Q_FARMER]._qactive = 0; + qt = TEXT_FARMER4; + break; + } + if (qt != -1) { + if (t2) + InitQTextMsg(qt); + else + PlaySFX(alltext[qt].sfxnr); + } + if (gbMaxPlayers != 1) { + NetSendCmdQuest(TRUE, Q_FARMER); + } + } +} +else if (towner[t]._ttype == TOWN_COWFARM) +{ + if (!qtextflag) { + qt = 297; + t2 = 1; + if (PlrHasItem(p, IDI_GREYSUIT, &i)) { + qt = TEXT_JERSEY7; + RemoveInvItem(p, i); + } else if (PlrHasItem(p, IDI_BROWNSUIT, &i)) { + CreateItem(UITEM_BOVINE, towner[t]._tx + 1, towner[t]._ty); + RemoveInvItem(p, i); + qt = TEXT_JERSEY8; + quests[Q_JERSEY]._qactive = 3; + } else if (PlrHasItem(p, IDI_RUNEBOMB, &i)) { + qt = TEXT_JERSEY5; + quests[Q_JERSEY]._qactive = 2; + quests[Q_JERSEY]._qvar1 = 1; + quests[Q_JERSEY]._qmsg = TEXT_JERSEY4; + quests[Q_JERSEY]._qlog = 1; + } else { + switch (quests[Q_JERSEY]._qactive) { + case 0: + qt = TEXT_JERSEY1; + quests[Q_JERSEY]._qactive = 7; + break; + case 1: + qt = TEXT_JERSEY1; + quests[23]._qactive = 7; + break; + case 2: + qt = TEXT_JERSEY5; + break; + case 3: + qt = TEXT_JERSEY1; + break; + case 7: + qt = TEXT_JERSEY2; + quests[Q_JERSEY]._qactive = 8; + break; + case 8: + qt = TEXT_JERSEY3; + quests[Q_JERSEY]._qactive = 9; + break; + case 9: + if (!plr[myplr]._pLvlVisited[9] && plr[myplr]._pLevel < 15) { + switch (random_(0, 4) + 9) { + case 9: + qt = TEXT_JERSEY9; + break; + case 10: + qt = TEXT_JERSEY10; + break; + case 11: + qt = TEXT_JERSEY11; + break; + default: + qt = TEXT_JERSEY12; + } + break; + } else { + qt = TEXT_JERSEY4; + quests[Q_JERSEY]._qactive = 2; + quests[Q_JERSEY]._qvar1 = 1; + quests[Q_JERSEY]._qmsg = TEXT_JERSEY4; + quests[Q_JERSEY]._qlog = 1; + SpawnRuneBomb(towner[t]._tx + 1, towner[t]._ty); + t2 = 1; + } + break; + default: + qt = TEXT_JERSEY5; + quests[Q_JERSEY]._qactive = 0; + break; + } + } + if (qt != -1) { + if (t2) + InitQTextMsg(qt); + else + PlaySFX(alltext[qt].sfxnr); + } + if (gbMaxPlayers != 1) { + NetSendCmdQuest(TRUE, Q_JERSEY); + } + } +} +else if (towner[t]._ttype == TOWN_GIRL) +{ + if (!qtextflag) { + qt = 282; + t2 = 0; + if (!PlrHasItem(p, IDI_THEODORE, &i) || quests[Q_GIRL]._qactive == 3) { + switch (quests[Q_GIRL]._qactive) { + case 0: + qt = TEXT_GIRL2; + quests[Q_GIRL]._qactive = 2; + quests[Q_GIRL]._qvar1 = 1; + quests[Q_GIRL]._qlog = 1; + quests[Q_GIRL]._qmsg = TEXT_GIRL2; + t2 = 1; + break; + case 1: + qt = TEXT_GIRL2; + quests[Q_GIRL]._qvar1 = 1; + quests[Q_GIRL]._qlog = 1; + quests[Q_GIRL]._qmsg = TEXT_GIRL2; + quests[Q_GIRL]._qactive = 2; + t2 = 1; + break; + case 2: + qt = TEXT_GIRL3; + t2 = 1; + break; + case 3: qt = -1; break; default: - quests[Q_FARMER]._qactive = 0; - qt = TEXT_FARMER4; + quests[Q_GIRL]._qactive = 0; + qt = TEXT_GIRL1; break; } - if (qt != -1) { - if (t2) - InitQTextMsg(qt); - else - PlaySFX(alltext[qt].sfxnr); - } - if (gbMaxPlayers != 1) { - NetSendCmdQuest(TRUE, Q_FARMER); - } - } - } else if (towner[t]._ttype == TOWN_COWFARM) { - if (!qtextflag) { - qt = 297; + } else { + qt = TEXT_GIRL4; + RemoveInvItem(p, i); + CreateAmulet(towner[t]._tx, towner[t]._ty, 13, 0, 1); + quests[Q_GIRL]._qlog = 0; + quests[Q_GIRL]._qactive = 3; t2 = 1; - if (PlrHasItem(p, IDI_GREYSUIT, &i)) { - qt = TEXT_JERSEY7; - RemoveInvItem(p, i); - } else if (PlrHasItem(p, IDI_BROWNSUIT, &i)) { - CreateItem(UITEM_BOVINE, towner[t]._tx + 1, towner[t]._ty); - RemoveInvItem(p, i); - qt = TEXT_JERSEY8; - quests[Q_JERSEY]._qactive = 3; - } else if (PlrHasItem(p, IDI_RUNEBOMB, &i)) { - qt = TEXT_JERSEY5; - quests[Q_JERSEY]._qactive = 2; - quests[Q_JERSEY]._qvar1 = 1; - quests[Q_JERSEY]._qmsg = TEXT_JERSEY4; - quests[Q_JERSEY]._qlog = 1; - } else { - switch (quests[Q_JERSEY]._qactive) { - case 0: - qt = TEXT_JERSEY1; - quests[Q_JERSEY]._qactive = 7; - break; - case 1: - qt = TEXT_JERSEY1; - quests[23]._qactive = 7; - break; - case 2: - qt = TEXT_JERSEY5; - break; - case 3: - qt = TEXT_JERSEY1; - break; - case 7: - qt = TEXT_JERSEY2; - quests[Q_JERSEY]._qactive = 8; - break; - case 8: - qt = TEXT_JERSEY3; - quests[Q_JERSEY]._qactive = 9; - break; - case 9: - if (!plr[myplr]._pLvlVisited[9] && plr[myplr]._pLevel < 15) { - switch (random_(0, 4) + 9) { - case 9: - qt = TEXT_JERSEY9; - break; - case 10: - qt = TEXT_JERSEY10; - break; - case 11: - qt = TEXT_JERSEY11; - break; - default: - qt = TEXT_JERSEY12; - } - break; - } else { - qt = TEXT_JERSEY4; - quests[Q_JERSEY]._qactive = 2; - quests[Q_JERSEY]._qvar1 = 1; - quests[Q_JERSEY]._qmsg = TEXT_JERSEY4; - quests[Q_JERSEY]._qlog = 1; - SpawnRuneBomb(towner[t]._tx + 1, towner[t]._ty); - t2 = 1; - } - break; - default: - qt = TEXT_JERSEY5; - quests[Q_JERSEY]._qactive = 0; - break; - } - } - if (qt != -1) { - if (t2) + } + if (qt != -1) { + if (t2 != 0) { InitQTextMsg(qt); - else - PlaySFX(alltext[qt].sfxnr); - } - if (gbMaxPlayers != 1) { - NetSendCmdQuest(TRUE, Q_JERSEY); - } - } - } else if (towner[t]._ttype == TOWN_GIRL) { - if (!qtextflag) { - qt = 282; - t2 = 0; - if (!PlrHasItem(p, IDI_THEODORE, &i) || quests[Q_GIRL]._qactive == 3) { - switch (quests[Q_GIRL]._qactive) { - case 0: - qt = TEXT_GIRL2; - quests[Q_GIRL]._qactive = 2; - quests[Q_GIRL]._qvar1 = 1; - quests[Q_GIRL]._qlog = 1; - quests[Q_GIRL]._qmsg = TEXT_GIRL2; - t2 = 1; - break; - case 1: - qt = TEXT_GIRL2; - quests[Q_GIRL]._qvar1 = 1; - quests[Q_GIRL]._qlog = 1; - quests[Q_GIRL]._qmsg = TEXT_GIRL2; - quests[Q_GIRL]._qactive = 2; - t2 = 1; - break; - case 2: - qt = TEXT_GIRL3; - t2 = 1; - break; - case 3: - qt = -1; - break; - default: - quests[Q_GIRL]._qactive = 0; - qt = TEXT_GIRL1; - break; - } } else { - qt = TEXT_GIRL4; - RemoveInvItem(p, i); - CreateAmulet(towner[t]._tx, towner[t]._ty, 13, 0, 1); - quests[Q_GIRL]._qlog = 0; - quests[Q_GIRL]._qactive = 3; - t2 = 1; - } - if (qt != -1) { - if (t2 != 0) { - InitQTextMsg(qt); - } else { - PlaySFX(alltext[qt].sfxnr); - } - } - if (gbMaxPlayers != 1) { - NetSendCmdQuest(TRUE, Q_GIRL); + PlaySFX(alltext[qt].sfxnr); } } -#endif + if (gbMaxPlayers != 1) { + NetSendCmdQuest(TRUE, Q_GIRL); + } } +#endif +} } DEVILUTION_END_NAMESPACE diff --git a/Source/trigs.cpp b/Source/trigs.cpp index 3411e9ce..d974e31b 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -19,7 +19,7 @@ int TownDownList[] = { 716, 715, 719, 720, 721, 723, 724, 725, 726, 727, -1 }; int TownWarp1List[] = { 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1183, 1185, -1 }; #ifdef HELLFIRE int TownCryptList[] = { 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, -1 }; -int TownHiveList[] = { 1307,1308,1309,1310, -1}; +int TownHiveList[] = { 1307, 1308, 1309, 1310, -1 }; #endif /** Specifies the dungeon piece IDs which constitute stairways leading up from the cathedral. */ int L1UpList[] = { 127, 129, 130, 131, 132, 133, 135, 137, 138, 139, 140, -1 }; @@ -71,7 +71,6 @@ void InitTownTriggers() trigs[numtrigs]._tmsg = WM_DIABNEXTLVL; numtrigs++; - if (!gbIsSpawn && gbMaxPlayers == MAX_PLRS) { for (i = 0; i < sizeof(townwarps) / sizeof(townwarps[0]); i++) { townwarps[i] = TRUE; diff --git a/defs.h b/defs.h index 2b5e18aa..469a8979 100644 --- a/defs.h +++ b/defs.h @@ -41,6 +41,8 @@ #define MAX_LVLMTYPES 16 #define MAX_SPELLS 37 #endif +#define MAX_SPELL_LEVEL 15 +#define SPELLBIT(s) ((__int64)1 << (s - 1)) #define MAX_CHUNKS (MAX_LVLS + 5) @@ -128,7 +130,7 @@ // 256 kilobytes + 3 bytes (demo leftover) for file magic (262147) // final game uses 4-byte magic instead of 3 -#define FILEBUFF ((256*1024)+3) +#define FILEBUFF ((256 * 1024) + 3) #define PMSG_COUNT 8 @@ -210,7 +212,7 @@ #define DIALOG_TOP ((SCREEN_HEIGHT - PANEL_HEIGHT) / 2 - 18) #define DIALOG_Y (SCREEN_Y + DIALOG_TOP) -#define SCREENXY(x, y) ((x) + SCREEN_X + ((y) + SCREEN_Y) * BUFFER_WIDTH) +#define SCREENXY(x, y) ((x) + SCREEN_X + ((y) + SCREEN_Y) * BUFFER_WIDTH) #define NIGHTMARE_TO_HIT_BONUS 85 #define HELL_TO_HIT_BONUS 120 @@ -218,20 +220,20 @@ #define NIGHTMARE_AC_BONUS 50 #define HELL_AC_BONUS 80 -#define MemFreeDbg(p) \ -{ \ - void *p__p; \ - p__p = p; \ - p = NULL; \ - mem_free_dbg(p__p); \ -} +#define MemFreeDbg(p) \ + { \ + void *p__p; \ + p__p = p; \ + p = NULL; \ + mem_free_dbg(p__p); \ + } #undef assert #ifndef _DEBUG #define assert(exp) ((void)0) #else -#define assert(exp) (void)( (exp) || (assert_fail(__LINE__, __FILE__, #exp), 0) ) +#define assert(exp) (void)((exp) || (assert_fail(__LINE__, __FILE__, #exp), 0)) #endif #define ERR_DLG(title, text) ErrDlg(title, text, __FILE__, __LINE__) diff --git a/enums.h b/enums.h index 09474a1c..47813c8d 100644 --- a/enums.h +++ b/enums.h @@ -1541,38 +1541,38 @@ typedef enum missile_graphic_id { } missile_graphic_id; typedef enum _mai_id { - AI_ZOMBIE = 0, - AI_FAT = 1, - AI_SKELSD = 2, - AI_SKELBOW = 3, - AI_SCAV = 4, - AI_RHINO = 5, - AI_GOATMC = 6, - AI_GOATBOW = 7, - AI_FALLEN = 8, - AI_MAGMA = 9, - AI_SKELKING = 10, - AI_BAT = 11, - AI_GARG = 12, - AI_CLEAVER = 13, - AI_SUCC = 14, - AI_SNEAK = 15, - AI_STORM = 16, - AI_FIREMAN = 17, - AI_GARBUD = 18, - AI_ACID = 19, - AI_ACIDUNIQ = 20, - AI_GOLUM = 21, - AI_ZHAR = 22, - AI_SNOTSPIL = 23, - AI_SNAKE = 24, - AI_COUNSLR = 25, - AI_MEGA = 26, - AI_DIABLO = 27, - AI_LAZURUS = 28, - AI_LAZHELP = 29, - AI_LACHDAN = 30, - AI_WARLORD = 31, + AI_ZOMBIE = 0, + AI_FAT = 1, + AI_SKELSD = 2, + AI_SKELBOW = 3, + AI_SCAV = 4, + AI_RHINO = 5, + AI_GOATMC = 6, + AI_GOATBOW = 7, + AI_FALLEN = 8, + AI_MAGMA = 9, + AI_SKELKING = 10, + AI_BAT = 11, + AI_GARG = 12, + AI_CLEAVER = 13, + AI_SUCC = 14, + AI_SNEAK = 15, + AI_STORM = 16, + AI_FIREMAN = 17, + AI_GARBUD = 18, + AI_ACID = 19, + AI_ACIDUNIQ = 20, + AI_GOLUM = 21, + AI_ZHAR = 22, + AI_SNOTSPIL = 23, + AI_SNAKE = 24, + AI_COUNSLR = 25, + AI_MEGA = 26, + AI_DIABLO = 27, + AI_LAZURUS = 28, + AI_LAZHELP = 29, + AI_LACHDAN = 30, + AI_WARLORD = 31, AI_FIREBAT = 32, AI_TORCHANT = 33, AI_HORKDMN = 34, @@ -1776,7 +1776,7 @@ typedef enum monster_flag { MFLAG_SEARCH = 0x100, MFLAG_CAN_OPEN_DOOR = 0x200, MFLAG_NO_ENEMY = 0x400, - MFLAG_UNUSED = 0x800, + MFLAG_BERSERK = 0x800, MFLAG_NOLIFESTEAL = 0x1000 } monster_flag; @@ -1794,11 +1794,11 @@ typedef enum monster_resistance { RESIST_MAGIC = 0x01, RESIST_FIRE = 0x02, RESIST_LIGHTNING = 0x04, - IMMUNE_MAGIC = 0x08, - IMMUNE_FIRE = 0x10, - IMMUNE_LIGHTNING = 0x20, - IMMUNE_NULL_40 = 0x40, - IMMUNE_ACID = 0x80, + IMMUNE_MAGIC = 0x08, + IMMUNE_FIRE = 0x10, + IMMUNE_LIGHTNING = 0x20, + IMMUNE_NULL_40 = 0x40, + IMMUNE_ACID = 0x80, } monster_resistance; typedef enum missile_resistance { @@ -2069,10 +2069,10 @@ typedef enum _speech_id { TEXT_BOOK32 = 0x100, TEXT_BOOK33 = 0x101, TEXT_INTRO = 0x102, - TEXT_HBONER = 0x103, - TEXT_HBLOODY = 0x104, - TEXT_HBLINDING = 0x105, - TEXT_HBLOODWAR = 0x106, + TEXT_HBONER = 0x103, + TEXT_HBLOODY = 0x104, + TEXT_HBLINDING = 0x105, + TEXT_HBLOODWAR = 0x106, TEXT_BBONER = 0x107, TEXT_BBLOODY = 0x108, TEXT_BBLINDING = 0x109, @@ -2243,7 +2243,22 @@ typedef enum placeflag { PLACE_UNIQUE = 4, } placeflag; - /* +typedef enum mienemy_type { + TARGET_MONSTERS = 0, + TARGET_PLAYERS = 1, + TARGET_BOTH = 2, +} mienemy_type; + +/* +Looks like someone treated hex values as binary, so 0x10 came after 0x01, that's why we have 1 and 16, they did the same thing with affix_item_type +*/ +typedef enum goodorevil { + GOE_ANY = 0x00, + GOE_EVIL = 0x01, + GOE_GOOD = 0x10, +} goodorevil; + +/* First 5 bits store level 6th bit stores onlygood flag 7th bit stores uper15 flag - uper means unique percent, this flag is true for unique monsters and loot from them has 15% to become unique @@ -2998,8 +3013,8 @@ typedef enum _item_indexes { IDI_RESURRECT, IDI_OIL, IDI_SHORTSTAFF, - IDI_SWORD, - IDI_DAGGER, + IDI_BARDSWORD, + IDI_BARDDAGGER, IDI_RUNEBOMB, IDI_THEODORE, IDI_AURIC, @@ -3021,31 +3036,31 @@ typedef enum _setlevels { } _setlevels; typedef enum quest_id { - Q_ROCK = 0x0, - Q_MUSHROOM = 0x1, - Q_GARBUD = 0x2, - Q_ZHAR = 0x3, - Q_VEIL = 0x4, - Q_DIABLO = 0x5, - Q_BUTCHER = 0x6, - Q_LTBANNER = 0x7, - Q_BLIND = 0x8, - Q_BLOOD = 0x9, - Q_ANVIL = 0xA, - Q_WARLORD = 0xB, - Q_SKELKING = 0xC, - Q_PWATER = 0xD, - Q_SCHAMB = 0xE, - Q_BETRAYER = 0xF, - Q_GRAVE = 0x10, - Q_FARMER = 0x11, - Q_GIRL = 0x12, - Q_TRADER = 0x13, - Q_DEFILER = 0x14, - Q_NAKRUL = 0x15, - Q_CORNSTN = 0x16, - Q_JERSEY = 0x17, - Q_INVALID = -1, + Q_ROCK = 0x00, + Q_MUSHROOM = 0x01, + Q_GARBUD = 0x02, + Q_ZHAR = 0x03, + Q_VEIL = 0x04, + Q_DIABLO = 0x05, + Q_BUTCHER = 0x06, + Q_LTBANNER = 0x07, + Q_BLIND = 0x08, + Q_BLOOD = 0x09, + Q_ANVIL = 0x0A, + Q_WARLORD = 0x0B, + Q_SKELKING = 0x0C, + Q_PWATER = 0x0D, + Q_SCHAMB = 0x0E, + Q_BETRAYER = 0x0F, + Q_GRAVE = 0x10, + Q_FARMER = 0x11, + Q_GIRL = 0x12, + Q_TRADER = 0x13, + Q_DEFILER = 0x14, + Q_NAKRUL = 0x15, + Q_CORNSTN = 0x16, + Q_JERSEY = 0x17, + Q_INVALID = -1, } quest_id; typedef enum quest_state { @@ -3369,7 +3384,7 @@ typedef enum anim_weapon_id { } anim_weapon_id; typedef enum anim_armor_id { - ANIM_ID_LIGHT_ARMOR = 0x00, + ANIM_ID_LIGHT_ARMOR = 0x00, ANIM_ID_MEDIUM_ARMOR = 0x10, ANIM_ID_HEAVY_ARMOR = 0x20 } anim_armor_id;