diff --git a/Source/control.cpp b/Source/control.cpp index 8d38de1a9..f826d4acc 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -338,9 +338,9 @@ void DrawSpell() st = RSPLTYPE_INVALID; SetSpellTrans(st); if (spl != SPL_INVALID) - DrawSpellCel(PANEL_X + 565, PANEL_Y + 119, pSpellCels, SpellITbl[spl], 56); + DrawSpellCel(PANEL_X + 565, PANEL_Y + 119, pSpellCels, SpellITbl[spl], SPLICONLENGTH); else - DrawSpellCel(PANEL_X + 565, PANEL_Y + 119, pSpellCels, 27, 56); + DrawSpellCel(PANEL_X + 565, PANEL_Y + 119, pSpellCels, 27, SPLICONLENGTH); } void DrawSpellList() @@ -357,22 +357,22 @@ void DrawSpellList() switch ((spell_type)i) { case RSPLTYPE_SKILL: SetSpellTrans(RSPLTYPE_SKILL); - c = SPLICONLAST + 3; mask = plr[myplr]._pAblSpells; + c = SPLICONLAST + 3; break; case RSPLTYPE_SPELL: - c = SPLICONLAST + 4; mask = plr[myplr]._pMemSpells; + c = SPLICONLAST + 4; break; case RSPLTYPE_SCROLL: SetSpellTrans(RSPLTYPE_SCROLL); - c = SPLICONLAST + 1; mask = plr[myplr]._pScrlSpells; + c = SPLICONLAST + 1; break; case RSPLTYPE_CHARGES: SetSpellTrans(RSPLTYPE_CHARGES); - c = SPLICONLAST + 2; mask = plr[myplr]._pISpells; + c = SPLICONLAST + 2; break; } for (spl = 1, j = 1; j < MAX_SPELLS; spl <<= 1, j++) { @@ -398,10 +398,14 @@ void DrawSpellList() pSplType = i; #ifdef HELLFIRE if (plr[myplr]._pClass == PC_MONK && j == SPL_SEARCH) - i = RSPLTYPE_SKILL; + pSplType = RSPLTYPE_SKILL; #endif DrawSpellCel(x, y, pSpellCels, c, SPLICONLENGTH); +#ifdef HELLFIRE + switch (pSplType) { +#else switch (i) { +#endif case RSPLTYPE_SKILL: sprintf(infostr, "%s Skill", spelldata[pSpell].sSkillText); break; @@ -1414,6 +1418,9 @@ void DrawChr() CelDraw(SCREEN_X, 351 + SCREEN_Y, pChrPanel, 1, SPANEL_WIDTH); ADD_PlrStringXY(20, 32, 151, plr[myplr]._pName, COL_WHITE); +#ifdef HELLFIRE + ADD_PlrStringXY(168, 32, 299, ClassStrTbl[plr[myplr]._pClass], COL_WHITE); +#else if (plr[myplr]._pClass == PC_WARRIOR) { ADD_PlrStringXY(168, 32, 299, "Warrior", COL_WHITE); #ifndef SPAWN @@ -1423,6 +1430,7 @@ void DrawChr() ADD_PlrStringXY(168, 32, 299, "Sorceror", COL_WHITE); #endif } +#endif sprintf(chrstr, "%i", plr[myplr]._pLevel); ADD_PlrStringXY(66, 69, 109, chrstr, COL_WHITE); diff --git a/Source/diablo.cpp b/Source/diablo.cpp index a218287a9..63b2863d6 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -884,10 +884,14 @@ void RightMouseDown() } else if (stextflag == STORE_NONE) { if (spselflag) { SetSpell(); +#ifdef HELLFIRE + } else if ((!sbookflag || MouseX <= RIGHT_PANEL) && (MouseY >= SPANEL_HEIGHT || (!TryIconCurs() && (pcursinvitem == -1 || !UseInvItem(myplr, pcursinvitem))))) { +#else } else if (MouseY >= SPANEL_HEIGHT || (!sbookflag || MouseX <= RIGHT_PANEL) && !TryIconCurs() && (pcursinvitem == -1 || !UseInvItem(myplr, pcursinvitem))) { +#endif if (pcurs == CURSOR_HAND) { if (pcursinvitem == -1 || !UseInvItem(myplr, pcursinvitem)) CheckPlrSpell(); diff --git a/Source/doom.cpp b/Source/doom.cpp index 8eb673285..b20356fa3 100644 --- a/Source/doom.cpp +++ b/Source/doom.cpp @@ -145,7 +145,7 @@ void doom_draw() } #endif - CelDraw(PANEL_X, PANEL_Y - 1, pDoomCel, 1, SCREEN_WIDTH); + CelDraw(PANEL_X, PANEL_Y - 1, pDoomCel, 1, 640); } DEVILUTION_END_NAMESPACE diff --git a/Source/mainmenu.cpp b/Source/mainmenu.cpp index 9cba254ab..d1a3ebd8f 100644 --- a/Source/mainmenu.cpp +++ b/Source/mainmenu.cpp @@ -172,7 +172,11 @@ BOOL mainmenu_multi_player() void mainmenu_play_intro() { music_stop(); +#ifdef HELLFIRE + play_movie("gendata\\Hellfire.smk", TRUE); +#else play_movie("gendata\\diablo1.smk", TRUE); +#endif mainmenu_refresh_music(); } #endif diff --git a/Source/missiles.cpp b/Source/missiles.cpp index b1194ad4c..d4fb5dfeb 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -2279,13 +2279,15 @@ void AddFirewall(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy { int i; - missile[mi]._midam = 16 * (random_(53, 10) + random_(53, 10) + plr[id]._pLevel + 2) >> 1; + missile[mi]._midam = (random_(53, 10) + random_(53, 10) + plr[id]._pLevel + 2) << 4; + missile[mi]._midam >>= 1; GetMissileVel(mi, sx, sy, dx, dy, 16); missile[mi]._mirange = 10; i = missile[mi]._mispllvl; if (i > 0) missile[mi]._mirange = 10 * (i + 1); - missile[mi]._mirange = ((missile[mi]._mirange * plr[id]._pISplDur >> 3) & 0xFFFFFFF0) + 16 * missile[mi]._mirange; + missile[mi]._mirange += (plr[id]._pISplDur * missile[mi]._mirange) >> 7; + missile[mi]._mirange <<= 4; missile[mi]._miVar1 = missile[mi]._mirange - missile[mi]._miAnimLen; missile[mi]._miVar2 = 0; } @@ -2361,6 +2363,7 @@ void AddMisexp(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, if (mienemy && id > 0) { mon = monster[id].MType; +#ifndef HELLFIRE if (mon->mtype == MT_SUCCUBUS) SetMissAnim(mi, MFILE_FLAREEXP); if (mon->mtype == MT_SNOWWICH) @@ -2369,6 +2372,22 @@ void AddMisexp(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, SetMissAnim(mi, MFILE_SCBSEXPD); if (mon->mtype == MT_SOLBRNR) SetMissAnim(mi, MFILE_SCBSEXPC); +#else + switch (mon->mtype) { + case MT_SUCCUBUS: + SetMissAnim(mi, MFILE_FLAREEXP); + break; + case MT_SNOWWICH: + SetMissAnim(mi, MFILE_SCBSEXPB); + break; + case MT_HLSPWN: + SetMissAnim(mi, MFILE_SCBSEXPD); + break; + case MT_SOLBRNR: + SetMissAnim(mi, MFILE_SCBSEXPC); + break; + } +#endif } missile[mi]._mix = missile[dx]._mix; diff --git a/Source/objects.cpp b/Source/objects.cpp index 8d812ce90..2d108bf93 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -74,35 +74,35 @@ char shrinemax[NUM_SHRINETYPE] = { */ BYTE shrineavail[NUM_SHRINETYPE] = { - SHRINETYPE_ANY, // SHRINE_MYSTERIOUS - SHRINETYPE_ANY, // SHRINE_HIDDEN - SHRINETYPE_SINGLE, // SHRINE_GLOOMY - SHRINETYPE_SINGLE, // SHRINE_WEIRD - SHRINETYPE_ANY, // SHRINE_MAGICAL - SHRINETYPE_ANY, // SHRINE_STONE - SHRINETYPE_ANY, // SHRINE_RELIGIOUS - SHRINETYPE_ANY, // SHRINE_ENCHANTED - SHRINETYPE_SINGLE, // SHRINE_THAUMATURGIC - SHRINETYPE_ANY, // SHRINE_FASCINATING - SHRINETYPE_ANY, // SHRINE_CRYPTIC - SHRINETYPE_ANY, // SHRINE_MAGICAL2 - SHRINETYPE_ANY, // SHRINE_ELDRITCH - SHRINETYPE_ANY, // SHRINE_EERIE - SHRINETYPE_ANY, // SHRINE_DIVINE - SHRINETYPE_ANY, // SHRINE_HOLY - SHRINETYPE_ANY, // SHRINE_SACRED - SHRINETYPE_ANY, // SHRINE_SPIRITUAL - SHRINETYPE_MULTI, // SHRINE_SPOOKY - SHRINETYPE_ANY, // SHRINE_ABANDONED - SHRINETYPE_ANY, // SHRINE_CREEPY - SHRINETYPE_ANY, // SHRINE_QUIET - SHRINETYPE_ANY, // SHRINE_SECLUDED - SHRINETYPE_ANY, // SHRINE_ORNATE - SHRINETYPE_ANY, // SHRINE_GLIMMERING - SHRINETYPE_MULTI // SHRINE_TAINTED - }; + SHRINETYPE_ANY, // SHRINE_MYSTERIOUS + SHRINETYPE_ANY, // SHRINE_HIDDEN + SHRINETYPE_SINGLE, // SHRINE_GLOOMY + SHRINETYPE_SINGLE, // SHRINE_WEIRD + SHRINETYPE_ANY, // SHRINE_MAGICAL + SHRINETYPE_ANY, // SHRINE_STONE + SHRINETYPE_ANY, // SHRINE_RELIGIOUS + SHRINETYPE_ANY, // SHRINE_ENCHANTED + SHRINETYPE_SINGLE, // SHRINE_THAUMATURGIC + SHRINETYPE_ANY, // SHRINE_FASCINATING + SHRINETYPE_ANY, // SHRINE_CRYPTIC + SHRINETYPE_ANY, // SHRINE_MAGICAL2 + SHRINETYPE_ANY, // SHRINE_ELDRITCH + SHRINETYPE_ANY, // SHRINE_EERIE + SHRINETYPE_ANY, // SHRINE_DIVINE + SHRINETYPE_ANY, // SHRINE_HOLY + SHRINETYPE_ANY, // SHRINE_SACRED + SHRINETYPE_ANY, // SHRINE_SPIRITUAL + SHRINETYPE_MULTI, // SHRINE_SPOOKY + SHRINETYPE_ANY, // SHRINE_ABANDONED + SHRINETYPE_ANY, // SHRINE_CREEPY + SHRINETYPE_ANY, // SHRINE_QUIET + SHRINETYPE_ANY, // SHRINE_SECLUDED + SHRINETYPE_ANY, // SHRINE_ORNATE + SHRINETYPE_ANY, // SHRINE_GLIMMERING + SHRINETYPE_MULTI // SHRINE_TAINTED +}; /** Maps from book_id to book name. */ -char *StoryBookName[9] = { +char *StoryBookName[] = { "The Great Conflict", "The Wages of Sin are War", "The Tale of the Horadrim", @@ -111,7 +111,16 @@ char *StoryBookName[9] = { "The Binding of the Three", "The Realms Beyond", "Tale of the Three", - "The Black King" + "The Black King", +#ifdef HELLFIRE + "Journal: The Ensorcellment", + "Journal: The Meeting", + "Journal: The Tirade", + "Journal: His Power Grows", + "Journal: NA-KRUL", + "Journal: The End", + "A Spellbook", +#endif }; /** Specifies the speech IDs of each dungeon type narrator book, for each player class. */ int StoryText[3][3] = { diff --git a/Source/objects.h b/Source/objects.h index ed38ca723..4ad06bc5c 100644 --- a/Source/objects.h +++ b/Source/objects.h @@ -186,7 +186,7 @@ extern char *shrinestrs[NUM_SHRINETYPE]; extern char shrinemin[NUM_SHRINETYPE]; extern char shrinemax[NUM_SHRINETYPE]; extern BYTE shrineavail[NUM_SHRINETYPE]; -extern char *StoryBookName[9]; +extern char *StoryBookName[]; extern int StoryText[3][3]; #ifdef __cplusplus diff --git a/Source/palette.cpp b/Source/palette.cpp index 0f8b578fa..3972e1f26 100644 --- a/Source/palette.cpp +++ b/Source/palette.cpp @@ -242,7 +242,7 @@ void palette_update_crypt() if (dword_6E2D58 > 1) { col = system_palette[15]; - for (i = 15; i > 0; i--) { + for (i = 15; i > 1; i--) { system_palette[i].r = system_palette[i - 1].r; system_palette[i].g = system_palette[i - 1].g; system_palette[i].b = system_palette[i - 1].b; @@ -283,7 +283,7 @@ void palette_update_hive() if (dword_6E2D60 == 2) { col = system_palette[8]; - for (i = 8; i > 0; i--) { + for (i = 8; i > 1; i--) { system_palette[i].r = system_palette[i - 1].r; system_palette[i].g = system_palette[i - 1].g; system_palette[i].b = system_palette[i - 1].b; diff --git a/Source/path.cpp b/Source/path.cpp index 9140099d7..fc1007a85 100644 --- a/Source/path.cpp +++ b/Source/path.cpp @@ -271,9 +271,12 @@ BOOL path_parent_path(PATHNODE *pPath, int dx, int dy, int sx, int sy) PATHNODE *path_get_node1(int dx, int dy) { PATHNODE *result = path_2_nodes->NextNode; - while (result != NULL && (result->x != dx || result->y != dy)) + while (result != NULL) { + if (result->x == dx && result->y == dy) + return result; result = result->NextNode; - return result; + } + return NULL; } /** @@ -282,9 +285,12 @@ PATHNODE *path_get_node1(int dx, int dy) PATHNODE *path_get_node2(int dx, int dy) { PATHNODE *result = pnode_ptr->NextNode; - while (result != NULL && (result->x != dx || result->y != dy)) + while (result != NULL) { + if (result->x == dx && result->y == dy) + return result; result = result->NextNode; - return result; + } + return NULL; } /** diff --git a/Source/themes.cpp b/Source/themes.cpp index 526fd7118..47e720282 100644 --- a/Source/themes.cpp +++ b/Source/themes.cpp @@ -584,21 +584,18 @@ void Theme_MonstPit(int t) r = random_(0, 100) + 1; ixp = 0; iyp = 0; - if (r > 0) { - while (TRUE) { - if (dTransVal[ixp][iyp] == themes[t].ttval && !nSolidTable[dPiece[ixp][iyp]]) { - --r; - } - if (r <= 0) { - break; - } - ixp++; - if (ixp == MAXDUNX) { - ixp = 0; - iyp++; - if (iyp == MAXDUNY) { - iyp = 0; - } + while (r > 0) { + if (dTransVal[ixp][iyp] == themes[t].ttval && !nSolidTable[dPiece[ixp][iyp]]) { + --r; + } + if (r <= 0) + continue; + ixp++; + if (ixp == MAXDUNX) { + ixp = 0; + iyp++; + if (iyp == MAXDUNY) { + iyp = 0; } } }