From ac9ae2e06239ef7b458f6d95a0ded363f324d61b Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 21 Mar 2021 13:13:22 +0100 Subject: [PATCH] :bug: Fix loading of sorceror graphics This also detangles some of the hellfire wip classes and duplicate tables --- Source/control.cpp | 14 ++++++++++++-- Source/player.cpp | 46 +++++++++++++--------------------------------- Source/player.h | 2 -- 3 files changed, 25 insertions(+), 37 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index 36d660e83..76db72dad 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -66,6 +66,16 @@ BYTE *pSpellCels; BOOL panbtndown; BOOL spselflag; +/** Map of hero class names */ +const char *const ClassStrTbl[] = { + "Warrior", + "Rogue", + "Sorcerer", + "Monk", + "Bard", + "Barbarian", +}; + /** Maps from font index to smaltext.cel frame number. */ const BYTE fontframe[128] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1303,7 +1313,7 @@ void DrawInfoBox(CelOutputBuffer out) infoclr = COL_GOLD; strcpy(infostr, plr[pcursplr]._pName); ClearPanel(); - sprintf(tempstr, "%s, Level: %i", ClassStrTblOld[plr[pcursplr]._pClass], plr[pcursplr]._pLevel); + sprintf(tempstr, "%s, Level: %i", ClassStrTbl[plr[pcursplr]._pClass], plr[pcursplr]._pLevel); AddPanelString(tempstr, TRUE); sprintf(tempstr, "Hit Points %i of %i", plr[pcursplr]._pHitPoints >> 6, plr[pcursplr]._pMaxHP >> 6); AddPanelString(tempstr, TRUE); @@ -1374,7 +1384,7 @@ void DrawChr(CelOutputBuffer out) CelDrawTo(out, 0, 351, pChrPanel, 1, SPANEL_WIDTH); ADD_PlrStringXY(out, 20, 32, 151, plr[myplr]._pName, COL_WHITE); - ADD_PlrStringXY(out, 168, 32, 299, ClassStrTblOld[plr[myplr]._pClass], COL_WHITE); + ADD_PlrStringXY(out, 168, 32, 299, ClassStrTbl[plr[myplr]._pClass], COL_WHITE); sprintf(chrstr, "%i", plr[myplr]._pLevel); ADD_PlrStringXY(out, 66, 69, 109, chrstr, COL_WHITE); diff --git a/Source/player.cpp b/Source/player.cpp index 96916fc94..0a4eeefde 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -32,15 +32,6 @@ const char ArmourChar[4] = { 'L', 'M', 'H', 0 }; const char WepChar[10] = { 'N', 'U', 'S', 'D', 'B', 'A', 'M', 'H', 'T', 0 }; /** Maps from player class to letter used in graphic files. */ const char CharChar[] = { - 'W', - 'R', - 'S', - 'M', - 'R', - 'W', - 0 -}; -const char CharCharHF[] = { 'W', 'R', 'S', @@ -134,14 +125,6 @@ int ToBlkTbl[NUM_CLASSES] = { 25, 30, }; -const char *const ClassStrTblOld[] = { - "Warrior", - "Rogue", - "Sorcerer", - "Monk", - "Bard", - "Barbarian", -}; /** Maps from player_class to maximum stats. */ int MaxStats[NUM_CLASSES][4] = { // clang-format off @@ -207,10 +190,10 @@ int ExpLvlsTbl[MAXCHARLEVEL] = { 1310707109, 1583495809 }; -const char *const ClassStrTbl[] = { +const char *const ClassPathTbl[] = { "Warrior", "Rogue", - "Sorcerer", + "Sorceror", "Monk", "Rogue", "Warrior", @@ -231,7 +214,6 @@ void LoadPlrGFX(int pnum, player_graphic gfxflag) char pszName[256]; const char *szCel; PlayerStruct *p; - const char *cs; BYTE *pData, *pAnim; DWORD i; @@ -240,14 +222,17 @@ void LoadPlrGFX(int pnum, player_graphic gfxflag) } p = &plr[pnum]; - if ((p->_pClass != PC_BARD || hfbard_mpq == NULL) && (p->_pClass != PC_BARBARIAN || hfbarb_mpq == NULL)) { - sprintf(prefix, "%c%c%c", CharChar[p->_pClass], ArmourChar[p->_pgfxnum >> 4], WepChar[p->_pgfxnum & 0xF]); - cs = ClassStrTbl[p->_pClass]; - } else { - sprintf(prefix, "%c%c%c", CharCharHF[p->_pClass], ArmourChar[p->_pgfxnum >> 4], WepChar[p->_pgfxnum & 0xF]); - cs = ClassStrTblOld[p->_pClass]; + + plr_class c = p->_pClass; + if (c == PC_BARD && hfbard_mpq == NULL) { + c = PC_ROGUE; + } else if (c == PC_BARBARIAN && hfbarb_mpq == NULL) { + c = PC_WARRIOR; } + sprintf(prefix, "%c%c%c", CharChar[c], ArmourChar[p->_pgfxnum >> 4], WepChar[p->_pgfxnum & 0xF]); + const char *cs = ClassPathTbl[c]; + for (i = 1; i <= PFILE_NONDEATH; i <<= 1) { if (!(i & gfxflag)) { continue; @@ -385,13 +370,8 @@ static DWORD GetPlrGFXSize(const char *szCel) if (szCel[0] == 'B' && szCel[1] == 'L' && (*w != 'U' && *w != 'D' && *w != 'H')) { continue; //No block without weapon } - if ((c == PC_BARD && hfbard_mpq == NULL) || (c == PC_BARBARIAN && hfbarb_mpq == NULL)) { - sprintf(Type, "%c%c%c", CharChar[c], *a, *w); - sprintf(pszName, "PlrGFX\\%s\\%s\\%s%s.CL2", ClassStrTbl[c], Type, Type, szCel); - } else { - sprintf(Type, "%c%c%c", CharCharHF[c], *a, *w); - sprintf(pszName, "PlrGFX\\%s\\%s\\%s%s.CL2", ClassStrTblOld[c], Type, Type, szCel); - } + sprintf(Type, "%c%c%c", CharChar[c], *a, *w); + sprintf(pszName, "PlrGFX\\%s\\%s\\%s%s.CL2", ClassPathTbl[c], Type, Type, szCel); if (SFileOpenFile(pszName, &hsFile)) { /// ASSERT: assert(hsFile); dwSize = SFileGetFileSize(hsFile, NULL); diff --git a/Source/player.h b/Source/player.h index eb429294c..bb06b24bc 100644 --- a/Source/player.h +++ b/Source/player.h @@ -306,8 +306,6 @@ extern int DexterityTbl[NUM_CLASSES]; extern int VitalityTbl[NUM_CLASSES]; extern int MaxStats[NUM_CLASSES][4]; extern int ExpLvlsTbl[MAXCHARLEVEL]; -extern const char *const ClassStrTblOld[]; -extern const char *const ClassStrTbl[]; #ifdef __cplusplus }