feat: add ABSORB and RESIST combat text types for spell misses

Adds dedicated CombatTextEntry::Type entries for ABSORB (miss type 7)
and RESIST (miss type 8), replacing the generic MISS display. Updates
missTypes arrays in SMSG_SPELLLOGMISS and SMSG_SPELL_GO, and adds
light-blue "Absorb" and grey "Resist" rendering in the combat text overlay.
This commit is contained in:
Kelsi 2026-03-11 03:23:01 -07:00
parent d5196abaec
commit e902375763
3 changed files with 13 additions and 5 deletions

View file

@ -51,7 +51,7 @@ struct CombatTextEntry {
enum Type : uint8_t {
MELEE_DAMAGE, SPELL_DAMAGE, HEAL, MISS, DODGE, PARRY, BLOCK,
CRIT_DAMAGE, CRIT_HEAL, PERIODIC_DAMAGE, PERIODIC_HEAL, ENVIRONMENTAL,
ENERGIZE, XP_GAIN, IMMUNE
ENERGIZE, XP_GAIN, IMMUNE, ABSORB, RESIST
};
Type type;
int32_t amount = 0;

View file

@ -2433,8 +2433,8 @@ void GameHandler::handlePacket(network::Packet& packet) {
CombatTextEntry::MISS, // 4=EVADE
CombatTextEntry::IMMUNE, // 5=IMMUNE
CombatTextEntry::MISS, // 6=DEFLECT
CombatTextEntry::MISS, // 7=ABSORB
CombatTextEntry::MISS, // 8=RESIST
CombatTextEntry::ABSORB, // 7=ABSORB
CombatTextEntry::RESIST, // 8=RESIST
};
CombatTextEntry::Type ct = (missInfo < 9) ? missTypes[missInfo] : CombatTextEntry::MISS;
addCombatText(ct, 0, 0, true);
@ -13967,8 +13967,8 @@ void GameHandler::handleSpellGo(network::Packet& packet) {
CombatTextEntry::MISS, // 4=EVADE
CombatTextEntry::IMMUNE, // 5=IMMUNE
CombatTextEntry::MISS, // 6=DEFLECT
CombatTextEntry::MISS, // 7=ABSORB
CombatTextEntry::MISS, // 8=RESIST
CombatTextEntry::ABSORB, // 7=ABSORB
CombatTextEntry::RESIST, // 8=RESIST
};
// Show text for each miss (usually just 1 target per spell go)
for (const auto& m : data.missTargets) {

View file

@ -5203,6 +5203,14 @@ void GameScreen::renderCombatText(game::GameHandler& gameHandler) {
snprintf(text, sizeof(text), "Immune!");
color = ImVec4(0.9f, 0.9f, 0.9f, alpha); // White for immune
break;
case game::CombatTextEntry::ABSORB:
snprintf(text, sizeof(text), "Absorb");
color = ImVec4(0.5f, 0.8f, 1.0f, alpha); // Light blue for absorb
break;
case game::CombatTextEntry::RESIST:
snprintf(text, sizeof(text), "Resist");
color = ImVec4(0.7f, 0.7f, 0.7f, alpha); // Grey for resist
break;
default:
snprintf(text, sizeof(text), "%d", entry.amount);
color = ImVec4(1.0f, 1.0f, 1.0f, alpha);