diff --git a/src/battle/BattleState.lua b/src/battle/BattleState.lua index ec26c48b..b976ffb4 100644 --- a/src/battle/BattleState.lua +++ b/src/battle/BattleState.lua @@ -2527,11 +2527,7 @@ end -- the HUD label drawn in place of the level for a statused mon function BattleState:statusLabel(mon) - local record = Status.recordFor(self.data.statuses, mon.status) - if record then - return record.hudLabel or record.label or mon.status - end - return mon.status + return Status.hudLabelFor(self.data.statuses, mon.status) end -- the one accuracy roll (MoveHitTest), hooked as battle.accuracy diff --git a/src/battle/Status.lua b/src/battle/Status.lua index 9a217b65..86e5565c 100644 --- a/src/battle/Status.lua +++ b/src/battle/Status.lua @@ -54,6 +54,13 @@ end -- freeze the English. They are already translatable through the -- statuses registry (mod.content.statuses:patch(id, { label = ... })). -- +-- Do not add a matching hudLabel = "..." below: Status.hudLabelFor reads +-- hudLabel before label, and Registry:patch only overrides the fields a +-- mod actually passes, so a label-only translation patch would be +-- shadowed by this hudLabel forever. Nothing in this codebase gives +-- hudLabel a value different from label -- setting it here only recreates +-- that trap for no observed benefit. +-- -- The five persistent conditions as records: the beforeMove gauntlet, the -- residual sweep, the inflict text/immunities (StatusRegistry.inflict), -- the catch/wobble bonuses (Catching.attempt), the HUD label, and the @@ -61,7 +68,7 @@ end -- read these fields, so a mod's sixth status plugs into every consumer. Status.RECORDS = { SLP = { - id = "SLP", label = "SLP", hudLabel = "SLP", + id = "SLP", label = "SLP", catchBonus = 25, shakeBonus = 10, beforeMovePriority = 40, beforeMove = function(battler, _, battle) @@ -82,7 +89,7 @@ Status.RECORDS = { end, }, FRZ = { - id = "FRZ", label = "FRZ", hudLabel = "FRZ", + id = "FRZ", label = "FRZ", catchBonus = 25, shakeBonus = 10, beforeMovePriority = 30, beforeMove = function(battler, _, battle) @@ -96,7 +103,7 @@ Status.RECORDS = { end, }, PSN = { - id = "PSN", label = "PSN", hudLabel = "PSN", + id = "PSN", label = "PSN", catchBonus = 12, shakeBonus = 5, residual = damageOverTime("_HurtByPoisonText", Strings.source("%s's\nhurt by poison!")), @@ -112,7 +119,7 @@ Status.RECORDS = { end, }, BRN = { - id = "BRN", label = "BRN", hudLabel = "BRN", + id = "BRN", label = "BRN", catchBonus = 12, shakeBonus = 5, statPenalty = { stat = "attack", div = 2 }, residual = damageOverTime("_HurtByBurnText", @@ -124,7 +131,7 @@ Status.RECORDS = { end, }, PAR = { - id = "PAR", label = "PAR", hudLabel = "PAR", + id = "PAR", label = "PAR", catchBonus = 12, shakeBonus = 5, statPenalty = { stat = "speed", div = 4 }, beforeMovePriority = 10, @@ -160,6 +167,14 @@ function Status.recordFor(statuses, id) return (statuses or Status.RECORDS)[id] end +-- the HUD label for a status id: a mod's patched hudLabel/label if the +-- merged registry has one, the raw id otherwise (BattleState.statusLabel, +-- SummaryMenu.draw and PartyMenu.draw all read this the same way) +function Status.hudLabelFor(statuses, id) + local record = Status.recordFor(statuses, id) + return record and (record.hudLabel or record.label) or id +end + local function battleStatuses(battle) return battle and battle.data and battle.data.statuses end diff --git a/src/ui/PartyMenu.lua b/src/ui/PartyMenu.lua index 833b5ffb..4e2b9535 100644 --- a/src/ui/PartyMenu.lua +++ b/src/ui/PartyMenu.lua @@ -18,6 +18,7 @@ local Theme = require("src.ui.Theme") local FieldDefaults = require("src.world.FieldDefaults") local Map = require("src.world.Map") local Strings = require("src.core.Strings") +local Status = require("src.battle.Status") local PartyMenu = {} PartyMenu.__index = PartyMenu @@ -821,7 +822,7 @@ function PartyMenu:draw() if mon.hp <= 0 then Font.draw(Strings("FNT"), 136, y) elseif mon.status then - Font.draw(mon.status, 136, y) + Font.draw(Status.hudLabelFor(self.game.data.statuses, mon.status), 136, y) end -- the tile HP bar (DrawHP2 + SetPartyMenuHPBarColor). grayFill: -- tinting the fill AND running it through the row's zone diff --git a/src/ui/SummaryMenu.lua b/src/ui/SummaryMenu.lua index 30d0de4f..789c3135 100644 --- a/src/ui/SummaryMenu.lua +++ b/src/ui/SummaryMenu.lua @@ -14,6 +14,7 @@ local Font = require("src.render.Font") local TypeChart = require("src.battle.TypeChart") local Strings = require("src.core.Strings") local Stats = require("src.pokemon.Stats") +local Status = require("src.battle.Status") local SummaryMenu = {} SummaryMenu.__index = SummaryMenu @@ -145,7 +146,7 @@ function SummaryMenu:draw() HudTiles.drawHPBar(data, 11, 3, mon, 1, barZoned) -- wHPBarType 1 Font.draw(("%3d/%3d"):format(mon.hp, mon.stats.hp), 96, 32) Font.draw(Strings("STATUS/"), 72, 48) - Font.draw(mon.status or "OK", 128, 48) + Font.draw(Status.hudLabelFor(data.statuses, mon.status) or "OK", 128, 48) -- stats box (0,8) 10x10: names rows 9/11/13/15, values indented Font.drawBox(0, 8, 10, 10)