Combat narration: format magnitude for stat_drain/debuff/ally_buff

These three stateful enemy-effect cases emitted their flavor pool via bare
pickRand, leaking the literal %d placeholder to players ("-%d damage on
every strike from here"). The magnitude is carried in CombatEvent.Damage,
exactly like the already-correct max_hp_drain / spell_fizzle cases; wrap
them in fmt.Sprintf. Add a regression test asserting no placeholder leaks.
This commit is contained in:
prosolis
2026-05-22 09:26:17 -07:00
parent 7dbfa0b56f
commit 2ce56cf76a
2 changed files with 27 additions and 3 deletions

View File

@@ -326,9 +326,9 @@ func renderEvent(e CombatEvent, playerName, enemyName string, result CombatResul
case "survive_at_1":
return pickRand(narrativeSurvive)
case "stat_drain":
return pickRand(narrativeStatDrain)
return fmt.Sprintf(pickRand(narrativeStatDrain), e.Damage)
case "debuff":
return pickRand(narrativeDebuff)
return fmt.Sprintf(pickRand(narrativeDebuff), e.Damage)
case "max_hp_drain":
return fmt.Sprintf(pickRand(narrativeMaxHPDrain), e.Damage)
@@ -346,7 +346,7 @@ func renderEvent(e CombatEvent, playerName, enemyName string, result CombatResul
case "fear_resist":
return pickRand(narrativeFearResist)
case "ally_buff":
return pickRand(narrativeAllyBuff)
return fmt.Sprintf(pickRand(narrativeAllyBuff), e.Damage)
case "timeout":
return pickRand(narrativeTimeout)