feat(chess/modifiers): add 3 recipes showcasing new trigger primitives (T26)

Adds three recipes to the built-in template library, each built on a
Wave 2 trigger that previously had no pre-composed example:

- Kamikaze Knight — on-captured with target: attacker, nested
  add-to-attribute Hp -2. Death-rattle that damages whichever piece
  made the fatal capture.
- Berserker Pawn — on-move nested with add-to-attribute AttackBonus
  +1. Stacking rage: the pawn grows stronger with every move it
  survives.
- Promotion Feast — on-promotion nested with seed-attribute Hp 5.
  When a pawn finally promotes, it starts its new life with a fresh
  5 HP pool regardless of damage taken on the way up the board.

Each recipe passes validateCustomDescriptor and lands in the editors
Templates dropdown alongside the existing five. Recipe count: 5 → 8.
This commit is contained in:
Joey Yakimowich-Payne 2026-04-21 18:59:17 -06:00
commit b08415c7f8
No known key found for this signature in database

View file

@ -129,29 +129,102 @@ export const CUSTOM_MODIFIER_RECIPES: readonly CustomModifierRecipe[] = [
],
),
},
{
id: "recipe-low-hp-fortress",
title: "Low-HP Fortress (invulnerable when HP<2)",
summary:
"conditional: when Hp < 2, sets CANNOT_BE_CAPTURED. A last-stand trigger that keeps a wounded piece alive.",
descriptor: descriptorForRecipe(
"recipe-low-hp-fortress",
"Low-HP Fortress",
"Becomes untargetable when HP drops below 2.",
[
{
kind: "conditional",
params: {
condition: { type: "attr-lt", attr: "Hp", value: 2 },
then: [
{
kind: "set-capture-flag",
params: { flag: 2 },
},
],
},
},
],
),
},
{
id: "recipe-low-hp-fortress",
title: "Low-HP Fortress (invulnerable when HP<2)",
summary:
"conditional: when Hp < 2, sets CANNOT_BE_CAPTURED. A last-stand trigger that keeps a wounded piece alive.",
descriptor: descriptorForRecipe(
"recipe-low-hp-fortress",
"Low-HP Fortress",
"Becomes untargetable when HP drops below 2.",
[
{
kind: "conditional",
params: {
condition: { type: "attr-lt", attr: "Hp", value: 2 },
then: [
{
kind: "set-capture-flag",
params: { flag: 2 },
},
],
},
},
],
),
},
{
id: "recipe-kamikaze-knight",
title: "Kamikaze Knight (-2 HP to attacker)",
summary:
"on-captured wrapping add-to-attribute with target: 'attacker'. When captured, this piece deals 2 damage back to its slayer.",
descriptor: descriptorForRecipe(
"recipe-kamikaze-knight",
"Kamikaze Knight",
"Damages the attacker for 2 HP when captured, creating mutual wounds in exchanges.",
[
{
kind: "on-captured",
params: {
target: "attacker",
primitives: [
{
kind: "add-to-attribute",
params: { attr: "Hp", delta: -2 },
},
],
},
},
],
),
},
{
id: "recipe-berserker-pawn",
title: "Berserker Pawn (+1 Attack per move)",
summary:
"on-move wrapping add-to-attribute AttackBonus +1. Gains +1 attack power every move, stacking into an unstoppable force.",
descriptor: descriptorForRecipe(
"recipe-berserker-pawn",
"Berserker Pawn",
"Gains +1 AttackBonus each move, creating an escalating threat the longer it advances.",
[
{
kind: "on-move",
params: {
primitives: [
{
kind: "add-to-attribute",
params: { attr: "AttackBonus", delta: 1 },
},
],
},
},
],
),
},
{
id: "recipe-promotion-feast",
title: "Promotion Feast (+5 HP on promotion)",
summary:
"on-promotion wrapping seed-attribute for Hp 5. When this pawn promotes, it immediately gains 5 bonus HP as a reward.",
descriptor: descriptorForRecipe(
"recipe-promotion-feast",
"Promotion Feast",
"Seeds 5 HP when pawn promotes, rewarding safe advancement across the board.",
[
{
kind: "on-promotion",
params: {
primitives: [
{
kind: "seed-attribute",
params: { attr: "Hp", value: 5 },
},
],
},
},
],
),
},
];