{{#if (equals type "aetherSpend")}}
🔮 {{actorName}} casts {{spellName}}{{#if tierLabel}}{{tierLabel}}{{/if}} — spends {{value}} Aether ({{oldValue}} → {{newValue}}).
{{else if (equals type "graceSpend")}}✨ {{actorName}} invokes {{spellName}} — spends {{value}} Grace ({{oldValue}} → {{newValue}}).
{{else if (equals type "bleedingNotice")}}Bleeding: Wound of {{value}} HP for {{value}} seconds.
{{else if (equals type "d30BonusRoll")}}D30 bonus: rolled {{formula}} = {{value}}
{{else if (equals type "mulligan")}}{{actorName}} uses Mulligan and re-rolls {{side}}: {{oldRoll}} → {{newRoll}}.
{{> chat/dice-breakdown diceResults=diceResults D30result=D30result D30message=D30message}}Both sides may now react to the new numbers.
{{else}}{{actorName}} {{#if (equals type "grit")}} spends 1 {{resource}} and rolls {{value}} for {{side}}. {{else if (equals type "luck")}} spends 1 {{resource}} and rolls {{value}} for {{side}}. {{else if (equals type "bonusDie")}} adds {{formula}} and rolls {{value}} for {{side}}. {{else if (equals type "d30Bonus")}} gains +{{value}} from D30 bonus die for {{side}}. {{else if (equals type "d30Flag")}} D30 — {{specialName}} possible for {{actorName}}! {{else if (equals type "d30Bleed")}} D30 — Bleeding/Internal Injury on hit! Damage past DR will cause a bleeding wound. {{else if (equals type "d30DamageMultiplier")}} D30 — x{{value}} damage before damage reduction! {{else if (equals type "d30DRMultiplier")}} D30 — Defense grants x{{value}} DR (choose which DR types to multiply when damage is applied). {{else if (equals type "shieldBlock")}} rolls {{shieldLabel}} and adds {{shieldBonus}} to defense ({{newTotal}} ≥ {{opposingRoll}}). Shield blocked the attack! Both armor DR and shield DR {{shieldDR}} will apply to damage. {{else if (equals type "shieldFail")}} rolls {{shieldLabel}} and adds {{shieldBonus}} to defense ({{newTotal}} < {{opposingRoll}}). Shield did not block — normal hit, armor DR only. {{else if (equals type "generic")}} {{{body}}} {{/if}}
{{/if}}