diff --git a/lib/CBonusTypeHandler.cpp b/lib/CBonusTypeHandler.cpp index cd27e7121..7c3f60cf1 100644 --- a/lib/CBonusTypeHandler.cpp +++ b/lib/CBonusTypeHandler.cpp @@ -96,6 +96,12 @@ ImagePath CBonusTypeHandler::bonusToGraphics(const std::shared_ptr & bonu { const CBonusType & bt = bonusTypes[vstd::to_underlying(bonus->type)]; + if (bonus->type == BonusType::SPELL_IMMUNITY && bonus->subtype.as().hasValue()) + { + const CSpell * sp = bonus->subtype.as().toSpell(); + return sp->getIconImmune(); + } + if (bt.subtypeIcons.count(bonus->subtype.getNum())) return bt.subtypeIcons.at(bonus->subtype.getNum()); diff --git a/lib/spells/CSpellHandler.cpp b/lib/spells/CSpellHandler.cpp index a5602b3bf..74f879baf 100644 --- a/lib/spells/CSpellHandler.cpp +++ b/lib/spells/CSpellHandler.cpp @@ -310,7 +310,7 @@ bool CSpell::canCastWithoutSkip() const return castWithoutSkip; } -const std::string & CSpell::getIconImmune() const +const ImagePath & CSpell::getIconImmune() const { return iconImmune; } @@ -948,7 +948,7 @@ std::shared_ptr CSpellHandler::loadFromJson(const std::string & scope, c const JsonNode & graphicsNode = json["graphics"]; - spell->iconImmune = graphicsNode["iconImmune"].String(); + spell->iconImmune = ImagePath::fromJson(graphicsNode["iconImmune"]); spell->iconBook = graphicsNode["iconBook"].String(); spell->iconEffect = graphicsNode["iconEffect"].String(); spell->iconScenarioBonus = graphicsNode["iconScenarioBonus"].String(); diff --git a/lib/spells/CSpellHandler.h b/lib/spells/CSpellHandler.h index 712c140ab..1e6790b68 100644 --- a/lib/spells/CSpellHandler.h +++ b/lib/spells/CSpellHandler.h @@ -221,7 +221,7 @@ public: void registerIcons(const IconRegistar & cb) const override; - const std::string & getIconImmune() const; ///< Returns resource name of icon for SPELL_IMMUNITY bonus + const ImagePath & getIconImmune() const; ///< Returns resource name of icon for SPELL_IMMUNITY bonus const std::string & getIconBook() const; const std::string & getIconEffect() const; const std::string & getIconScenarioBonus() const; @@ -280,7 +280,7 @@ private: spells::AimType targetType; ///graphics related stuff - std::string iconImmune; + ImagePath iconImmune; std::string iconBook; std::string iconEffect; std::string iconScenarioBonus;