diff --git a/Source/misdat.cpp b/Source/misdat.cpp index 37a90babb..e4b539f2b 100644 --- a/Source/misdat.cpp +++ b/Source/misdat.cpp @@ -92,7 +92,7 @@ MissileData missiledata[] = { { &AddCboltArrow, &MI_Cbolt, MIS_CBOLTARROW, true, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, SFX_NONE }, { &AddHbolt, &MI_Hbolt, MIS_HBOLTARROW, true, 1, MISR_NONE, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1 }, { &AddWarp, &MI_Teleport, MIS_WARP, false, 1, MISR_NONE, MFILE_NONE, LS_ETHEREAL, SFX_NONE }, - { &AddReflection, &MI_Reflect, MIS_REFLECT, true, 1, MISR_NONE, MFILE_REFLECT, LS_MSHIELD, SFX_NONE }, + { &AddReflection, &MI_Reflect, MIS_REFLECT, false, 1, MISR_NONE, MFILE_REFLECT, LS_MSHIELD, SFX_NONE }, { &AddBerserk, &MI_Dummy, MIS_BERSERK, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, { &AddRing, &MI_FireRing, MIS_FIRERING, false, 1, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE }, { &AddStealPotions, &MI_Dummy, MIS_STEALPOTS, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, @@ -175,7 +175,7 @@ MisFileData misfiledata[] = { { "Scubmisd", MFILE_SCUBMISD, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { "Scbsexpd", MFILE_SCBSEXPD, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { "spawns", MFILE_SPAWNS, 8, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { "reflect", MFILE_REFLECT, 1, 2, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "reflect", MFILE_REFLECT, 1, 2, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { "ms_ora", MFILE_LICH, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } }, { "ms_bla", MFILE_MSBLA, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } }, { "ms_reb", MFILE_NECROMORB, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } }, diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index 7b681bd5a..42352e07f 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -351,22 +351,14 @@ static void DrawMonster(const CelOutputBuffer &out, int x, int y, int mx, int my } /** - * @brief Helper for rendering player a Mana Shield - * @param out Output buffer - * @param pnum Player id - * @param sx Output buffer coordinate - * @param sy Output buffer coordinate - * @param lighting Should lighting be applied + * @brief Helper for rendering a specific player icon (Mana Shield or Reflect) */ -static void DrawManaShield(const CelOutputBuffer &out, int pnum, int x, int y, bool lighting) +static void DrawPlayerIconHelper(const CelOutputBuffer &out, int pnum, missile_graphic_id missileGraphicId, int x, int y, bool lighting) { - if (!plr[pnum].pManaShield) - return; - - x += CalculateWidth2(plr[pnum]._pAnimWidth) - misfiledata[MFILE_MANASHLD].mAnimWidth2[0]; + x += CalculateWidth2(plr[pnum]._pAnimWidth) - misfiledata[missileGraphicId].mAnimWidth2[0]; - int width = misfiledata[MFILE_MANASHLD].mAnimWidth[0]; - byte *pCelBuff = misfiledata[MFILE_MANASHLD].mAnimData[0]; + int width = misfiledata[missileGraphicId].mAnimWidth[0]; + byte *pCelBuff = misfiledata[missileGraphicId].mAnimData[0]; CelSprite cel { pCelBuff, width }; @@ -383,6 +375,22 @@ static void DrawManaShield(const CelOutputBuffer &out, int pnum, int x, int y, b Cl2DrawLight(out, x, y, cel, 1); } +/** + * @brief Helper for rendering player icons (Mana Shield and Reflect) + * @param out Output buffer + * @param pnum Player id + * @param sx Output buffer coordinate + * @param sy Output buffer coordinate + * @param lighting Should lighting be applied + */ +static void DrawPlayerIcons(const CelOutputBuffer &out, int pnum, int x, int y, bool lighting) +{ + if (plr[pnum].pManaShield) + DrawPlayerIconHelper(out, pnum, MFILE_MANASHLD, x, y, lighting); + if (plr[pnum].wReflections > 0) + DrawPlayerIconHelper(out, pnum, MFILE_REFLECT, x, y + 16, lighting); +} + /** * @brief Render a player sprite * @param out Output buffer @@ -433,13 +441,13 @@ static void DrawPlayer(const CelOutputBuffer &out, int pnum, int x, int y, int p if (pnum == myplr) { Cl2Draw(out, px, py, cel, nCel); - DrawManaShield(out, pnum, px, py, true); + DrawPlayerIcons(out, pnum, px, py, true); return; } if (!(dFlags[x][y] & BFLAG_LIT) || (plr[myplr]._pInfraFlag && light_table_index > 8)) { Cl2DrawLightTbl(out, px, py, cel, nCel, 1); - DrawManaShield(out, pnum, px, py, true); + DrawPlayerIcons(out, pnum, px, py, true); return; } @@ -450,7 +458,7 @@ static void DrawPlayer(const CelOutputBuffer &out, int pnum, int x, int y, int p light_table_index -= 5; Cl2DrawLight(out, px, py, cel, nCel); - DrawManaShield(out, pnum, px, py, false); + DrawPlayerIcons(out, pnum, px, py, false); light_table_index = l; }