Initial pass at unicorn pack.

This commit is contained in:
Greyson Parrelli
2026-07-25 00:37:44 -04:00
parent f3783b44bf
commit a1d57fe1dd
21 changed files with 2419 additions and 44 deletions
+440 -3
View File
@@ -19,6 +19,9 @@ type CardKind string
const (
KindPet CardKind = "pet"
KindFood CardKind = "food"
// KindAilment (Unicorn pack) is a temporary debuff card (Spooked, Exposed)
// attached to a pet during battle. It is neither a pet nor a food.
KindAilment CardKind = "ailment"
)
// Food identifiers.
@@ -37,6 +40,15 @@ const (
FoodPotato = "potato"
FoodDurian = "durian"
FoodTomato = "tomato"
// FoodFairyDust (Unicorn pack) is a perk food: the pet it's on gains 1 Mana
// when played. FoodWaterOfYouth is a one-shot shop food (not a perk) that
// upgrades a pet into a next-tier card.
FoodFairyDust = "fairyDust"
FoodWaterOfYouth = "waterOfYouth"
// Unicorn pack perk foods, tiers 4-6.
FoodHealthPotion = "healthPotion" // Hurt: heal 3 damage
FoodBigManaPotion = "bigManaPotion" // Play: gain 3 Mana
FoodCornucopia = "cornucopia" // Play: eat 2 Apples, add 2 on deck
)
// EffectTrigger is when an effect fires.
@@ -209,6 +221,91 @@ const (
// Retriever, when summoned, prevents Count damage on its first hit (German
// Shepherd).
ActionGuardRetriever EffectAction = "guardRetriever"
// --- Unicorn pack ---
// ActionGainMana adds Count Mana to the acting side. Mana is a persistent
// resource (unlike Trumpets): it is gained shop-time (Buy: Cuddle Toad,
// Thunderbird) or battle-time (Play/Faint: Alchemedes, Fur-Bearing Trout),
// kept between rounds, and spent via CostMana (see Effect.CostMana).
ActionGainMana EffectAction = "gainMana"
// ActionAddAilment attaches Count Ailment cards (Effect.Ailment: "spooked" |
// "exposed") to the enemy. Target "" hits the enemy pet in play; Target
// "enemyDeck" puts them on top of the enemy deck to snare the next pet. When
// Eat > 0 (Calygreyhound) the pet also eats that many apples. Battle-time.
ActionAddAilment EffectAction = "addAilment"
// ActionAilmentImmune (passive) makes the pet discard the first Ailment it
// would receive (or one it enters play with) — Baku.
ActionAilmentImmune EffectAction = "ailmentImmune"
// ActionThrowRockGainMana (play) throws Count rocks at the enemy pet, then
// gains 1 Mana for each rock that rolled a blank (a 0) — Tatzelwurm.
ActionThrowRockGainMana EffectAction = "throwRockGainMana"
// ActionReviveSelf (faint) puts a plain copy of this pet back on top of its
// owner's deck once per battle (the copy carries no faint ability, so it
// can't loop) — Slime.
ActionReviveSelf EffectAction = "reviveSelf"
// ActionNegateEnemyFaint (faint) sets the pet aside: the next enemy pet to
// faint has its Faint ability do nothing — Mandrake.
ActionNegateEnemyFaint EffectAction = "negateEnemyFaint"
// ActionNextRoundApple (faint) banks Count apples that land in the owner's
// hand at the start of the next round — Skeleton Dog.
ActionNextRoundApple EffectAction = "nextRoundApple"
// ActionPeekShop (passive) marks a pet whose owner may reveal it from hand to
// look at the top of the current shop deck, once per round — Bigfoot. It is
// an optional shop action (see Game.PeekShopDeck), never auto-fired.
ActionPeekShop EffectAction = "peekShop"
// ActionUpgradeNextTier (buy) discards this food and a pet from the player's
// hand to take the top card of the next tier's deck for free — Water of
// Youth. Shop-time; opens a PendingSacrifice choice.
ActionUpgradeNextTier EffectAction = "upgradeNextTier"
// --- Unicorn pack, tiers 4-6 ---
// ActionAilmentToApples (faint) sets the pet aside and arms a side guard: the
// next Ailment that would land on a friendly pet or friendly deck is replaced
// by 2 Apples on top of the owner's deck — Unicorn.
ActionAilmentToApples EffectAction = "ailmentToApples"
// ActionSmallPetAura (faint) sets the pet aside: friendly pets with base
// Power <= 2 get +Count Power for the rest of the battle — Rootlin.
ActionSmallPetAura EffectAction = "smallPetAura"
// ActionReviveNextFaint (faint) sets the pet aside (paying CostMana): the next
// time a friendly pet faints, a copy goes on the bottom of the owner's deck —
// Fairy.
ActionReviveNextFaint EffectAction = "reviveNextFaint"
// ActionGainAbility (play) reveals a random pet from the highest tier with
// discards and copies its effects onto this pet — Abomination.
ActionGainAbility EffectAction = "gainAbility"
// ActionSummonFromDiscard (faint, paying CostMana) adds Count random cards
// from the FromTier discard pile as temporary copies on top of the deck —
// Chimera.
ActionSummonFromDiscard EffectAction = "summonFromDiscard"
// ActionSummonFromTierDeck (faint, paying CostMana) adds a temporary copy of
// the top of the FromTier shop deck on top of the owner's deck — Pixiu.
ActionSummonFromTierDeck EffectAction = "summonFromTierDeck"
// ActionRockThenEat (play) throws Count rocks at the enemy pet, then feeds
// this pet Apples equal to the damage those rocks actually dealt (Exposed
// counts) — Vampire Bat. Usually gated on ConditionEnemyAilment.
ActionRockThenEat EffectAction = "rockThenEat"
// ActionBounceEnemy (play) sends the enemy pet to the bottom of the enemy
// deck as a fresh body (its Play ability stripped so it can't re-loop) —
// Loveland Frogman.
ActionBounceEnemy EffectAction = "bounceEnemy"
// ActionManaPower (passive) sets the pet's base Power to the owner's Mana at
// play time, capped at Cap — Sleipnir.
ActionManaPower EffectAction = "manaPower"
// ActionSpendManaRocks (play) spends all the owner's Mana to throw that many
// rocks at the enemy pet — Sea Serpent.
ActionSpendManaRocks EffectAction = "spendManaRocks"
// ActionSpendManaSpook (play) spends all the owner's Mana to add that many
// Spooked to the enemy pet — Bakunawa.
ActionSpendManaSpook EffectAction = "spendManaSpook"
// ActionAilmentBoost (faint) sets the pet aside: Ailments on enemy pets count
// for Count more — Manticore.
ActionAilmentBoost EffectAction = "ailmentBoost"
// ActionManaFeedOnPlay (faint) sets the pet aside: each time the owner plays a
// pet, spend 1 Mana to feed it Count Apples — Team Spirit.
ActionManaFeedOnPlay EffectAction = "manaFeedOnPlay"
// ActionRevealTierForApples (buy) opens a reveal of a hand pet at tier <= Cap
// for Count Apples — Quetzalcoatl. Shop-time.
ActionRevealTierForApples EffectAction = "revealTierForApples"
)
// Per multipliers for dynamic effect counts.
@@ -236,6 +333,19 @@ const (
ConditionTripled = "tripledThisRound" // player Tripled during this round's shop
ConditionHasPerk = "hasPerk" // this pet has a perk attached
ConditionFirstPet = "firstPet" // this is the first pet the side has played (Komodo)
// ConditionEnemyAilment gates a battle effect on the enemy pet in play
// carrying at least one Ailment (Unicorn pack: Mothman).
ConditionEnemyAilment = "enemyAilment"
// ConditionEvenRound gates a battle effect to even-numbered rounds (Unicorn
// pack: Werewolf).
ConditionEvenRound = "evenRound"
)
// Ailment kinds (Unicorn pack). Ailments are temporary debuff cards attached to
// a pet during battle; they stack and are removed at the end of the round.
const (
AilmentSpooked = "spooked" // the pet deals N less damage in a clash (min 0)
AilmentExposed = "exposed" // the pet takes N extra damage each time it is hit
)
// Effect is one trigger→action pair printed on a card.
@@ -257,6 +367,22 @@ type Effect struct {
// effect to fire (Golden pack). It's auto-paid when affordable and the
// effect is skipped otherwise — battles take no player input.
CostTrumpet int `json:"costTrumpet,omitempty"`
// CostMana, when > 0, is a Mana cost paid the same way as CostTrumpet
// (Unicorn pack). Unlike Trumpets, Mana persists across rounds.
CostMana int `json:"costMana,omitempty"`
// Ailment names the debuff an ActionAddAilment applies ("spooked" |
// "exposed"); Count is how many (Unicorn pack).
Ailment string `json:"ailment,omitempty"`
// Eat, on an ActionAddAilment, also feeds the pet that many apples
// (Calygreyhound spends 1 Mana to eat and spook in one ability).
Eat int `json:"eat,omitempty"`
// FromTier names a tier a battle effect pulls from — a discard pile (Chimera)
// or a shop deck (Pixiu) — 1-based (Unicorn pack).
FromTier int `json:"fromTier,omitempty"`
// Once marks an After-Attack effect that fires at most once per battle
// (Bulldog); without it the effect fires after every clash survived
// (Behemoth).
Once bool `json:"once,omitempty"`
// SurviveOnly marks a Hurt effect that fires only when the pet lives through
// the hit. By default a Hurt effect still fires on a fatal hit (the Lizard
// drops its Bee even when killed); self-buffs that are pointless once the
@@ -295,10 +421,14 @@ type Card struct {
// Temporary cards (apples, bees) are removed from the deck after the
// next battle.
Temporary bool `json:"temporary,omitempty"`
// Ailment marks a debuff card (Unicorn pack): "spooked" | "exposed". Set
// together with Kind == KindAilment.
Ailment string `json:"ailment,omitempty"`
}
func (c Card) IsPet() bool { return c.Kind == KindPet }
func (c Card) IsFood() bool { return c.Kind == KindFood }
func (c Card) IsPet() bool { return c.Kind == KindPet }
func (c Card) IsFood() bool { return c.Kind == KindFood }
func (c Card) IsAilment() bool { return c.Kind == KindAilment }
// petTemplate is the printed definition of a pet. Suits lists the suit of
// each physical copy in the tier deck (one card per entry).
@@ -613,7 +743,7 @@ var goldenPetTiers = [MaxRounds][]petTemplate{
},
{
Name: "Bulldog", Power: 2, Suits: []Suit{SuitRed, SuitYellow},
Effects: []Effect{{Trigger: TriggerAfterAttack, Action: ActionEatApple}},
Effects: []Effect{{Trigger: TriggerAfterAttack, Action: ActionEatApple, Once: true}},
EffectText: "After Attacking: if it hasn't fainted, eat 1 Apple (once per round)",
},
{
@@ -853,6 +983,294 @@ var goldenFoodTiers = [MaxRounds][]foodTemplate{
},
}
// unicornPetTiers defines the Unicorn pack's pets. Tiers 1-3 are printed;
// tiers 4-6 are still being authored. Each pet ships as two copies (one per
// listed suit). The pack adds two mechanics the others don't have: Mana (a
// persistent resource spent to power abilities) and Ailments (Spooked/Exposed
// debuffs attached to enemy pets during battle).
var unicornPetTiers = [MaxRounds][]petTemplate{
{ // Tier 1
{
Name: "Alchemedes", Power: 1, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionGainMana}},
EffectText: "Play: gain 1 Mana",
},
{
Name: "Cuddle Toad", Power: 2, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerBuy, Action: ActionGainMana}},
EffectText: "Buy: gain 1 Mana",
},
{
Name: "Pengobble", Power: 2, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionThrowRock, Count: 2, CostMana: 1}},
EffectText: "Play: spend 1 Mana to throw 2 Rocks",
},
{
Name: "Barghest", Power: 1, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentSpooked}},
EffectText: "Play: add 1 Spooked to the enemy pet",
},
{
Name: "Basilisk", Power: 1, Suits: []Suit{SuitRed, SuitYellow},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentExposed}},
EffectText: "Play: add 1 Exposed to the enemy pet",
},
{
Name: "Baku", Power: 2, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerPassive, Action: ActionAilmentImmune}},
EffectText: "Discard the first Ailment added to this pet",
},
},
{ // Tier 2
{
Name: "Thunderbird", Power: 2, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{{Trigger: TriggerBuy, Action: ActionGainMana, Count: 2}},
EffectText: "Buy: gain 2 Mana",
},
{
Name: "Gargoyle", Power: 2, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionSummonTop, Card: "apple", Count: 2, CostMana: 1}},
EffectText: "Faint: spend 1 Mana to add 2 Apples on top of your deck",
},
{
Name: "Frost Wolf", Power: 2, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{
{Trigger: TriggerFaint, Action: ActionAddAilment, Ailment: AilmentExposed},
{Trigger: TriggerFaint, Action: ActionAddAilment, Ailment: AilmentExposed, Target: "enemyDeck"},
},
EffectText: "Faint: add 1 Exposed to the enemy pet and 1 on top of the enemy deck",
},
{
Name: "Mothman", Power: 2, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionEatApple, Count: 2, Condition: ConditionEnemyAilment}},
EffectText: "Play: if the enemy pet has an Ailment, eat 2 Apples",
},
{
Name: "Nightcrawler", Power: 1, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentSpooked, Count: 2}},
EffectText: "Play: add 2 Spooked to the enemy pet",
},
{
Name: "Bigfoot", Power: 3, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerPassive, Action: ActionPeekShop}},
EffectText: "Reveal from your hand to look at the top of the shop deck (once per round)",
},
},
{ // Tier 3
{
Name: "Fur-Bearing Trout", Power: 2, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{
{Trigger: TriggerFaint, Action: ActionGainMana},
{Trigger: TriggerFaint, Action: ActionSummonTop, Card: "apple", Count: 2},
},
EffectText: "Faint: gain 1 Mana and add 2 Apples on top of your deck",
},
{
Name: "Calygreyhound", Power: 3, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentSpooked, Eat: 1, CostMana: 1}},
EffectText: "Play: spend 1 Mana to eat 1 Apple and add 1 Spooked to the enemy pet",
},
{
Name: "Tatzelwurm", Power: 2, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionThrowRockGainMana, Count: 2}},
EffectText: "Play: throw 2 Rocks, then gain 1 Mana for each blank rolled",
},
{
Name: "Skeleton Dog", Power: 3, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{
{Trigger: TriggerFaint, Action: ActionSummonTop, Card: "apple"},
{Trigger: TriggerFaint, Action: ActionNextRoundApple},
},
EffectText: "Faint: add 1 Apple on top of your deck and 1 to your hand next round",
},
{
Name: "Mandrake", Power: 2, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionNegateEnemyFaint}},
EffectText: "Faint: set aside — the next enemy Faint ability does nothing",
},
{
Name: "Lucky Cat", Power: 3, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerTriple, Action: ActionGainApple, Count: 3}},
EffectText: "Triple: add 3 Apples to your hand",
},
{
Name: "Slime", Power: 2, Suits: []Suit{SuitBlue, SuitRed},
Effects: []Effect{
{Trigger: TriggerFaint, Action: ActionReviveSelf},
{Trigger: TriggerFaint, Action: ActionAddAilment, Ailment: AilmentExposed, Target: "enemyDeck"},
},
EffectText: "Faint: put this pet on top of your deck and 1 Exposed on the enemy deck (once per round)",
},
},
{ // Tier 4
{
Name: "Roc", Power: 4, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{
{Trigger: TriggerPlay, Action: ActionGainMana},
{Trigger: TriggerSell, Action: ActionGainMana},
},
EffectText: "Play: gain 1 Mana · Sell: gain 1 Mana",
},
{
Name: "Chimera", Power: 1, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionSummonFromDiscard, Count: 2, FromTier: 1, CostMana: 4}},
EffectText: "Faint: spend 4 Mana to add 2 random cards from the tier 1 discard pile on top of your deck",
},
{
Name: "Kraken", Power: 4, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{
{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentSpooked},
{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentSpooked, Target: "enemyDeck"},
},
EffectText: "Play: add 1 Spooked to the enemy pet and 1 on top of the enemy deck",
},
{
Name: "Unicorn", Power: 4, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionAilmentToApples}},
EffectText: "Faint: set aside — replace the next friendly Ailment with 2 Apples on your deck",
},
{
Name: "Abomination", Power: 4, Suits: []Suit{SuitYellow, SuitBlue},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionGainAbility}},
EffectText: "Play: reveal a random pet from the highest tier discard pile and gain its ability",
},
{
Name: "Rootlin", Power: 4, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionSmallPetAura, Count: 1}},
EffectText: "Faint: set aside — your pets with base Power 2 or less have +1 Power",
},
{
Name: "Fairy", Power: 1, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionReviveNextFaint, CostMana: 3}},
EffectText: "Faint: spend 3 Mana to set aside — the next friendly faint returns to the bottom of your deck",
},
},
{ // Tier 5
{
Name: "Kitsune", Power: 2, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionGainMana, Per: PerFaintedPets}},
EffectText: "Play: gain 1 Mana for each friendly fainted pet",
},
{
Name: "Pixiu", Power: 2, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionSummonFromTierDeck, FromTier: 6, CostMana: 4}},
EffectText: "Faint: spend 4 Mana to add the top card of the tier 6 deck on top of your deck",
},
{
Name: "Red Dragon", Power: 2, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{
{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentExposed, Count: 2},
{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentExposed, Count: 2, Target: "enemyDeck"},
{Trigger: TriggerPlay, Action: ActionThrowRock, Count: 2},
},
EffectText: "Play: add 2 Exposed to the enemy pet and 2 on the enemy deck, then throw 2 Rocks",
},
{
Name: "Amalgamation", Power: 1, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{
{Trigger: TriggerPlay, Action: ActionEatApple, Per: PerFaintedPets},
{Trigger: TriggerPlay, Action: ActionAddAilment, Ailment: AilmentSpooked, Count: 2},
},
EffectText: "Play: eat 1 Apple per friendly fainted pet, then add 2 Spooked to the enemy pet",
},
{
Name: "Vampire Bat", Power: 3, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionRockThenEat, Count: 2, Condition: ConditionEnemyAilment}},
EffectText: "Play: if the enemy pet has an Ailment, throw 2 Rocks, then eat Apples equal to the damage dealt",
},
{
Name: "Werewolf", Power: 2, Suits: []Suit{SuitRed, SuitYellow},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionEatApple, Count: 6, Condition: ConditionEvenRound}},
EffectText: "Play: on an even-numbered round, eat 6 Apples",
},
{
Name: "Loveland Frogman", Power: 2, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionBounceEnemy}},
EffectText: "Play: put the enemy pet on the bottom of the enemy deck",
},
},
{ // Tier 6
{
Name: "Sleipnir", Power: 0, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerPassive, Action: ActionManaPower, Cap: 9}},
EffectText: "This pet's base Power equals your Mana (max 9)",
},
{
Name: "Sea Serpent", Power: 4, Suits: []Suit{SuitYellow, SuitRed},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionSpendManaRocks}},
EffectText: "Play: spend any number of Mana to throw that many Rocks",
},
{
Name: "Bakunawa", Power: 3, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionSpendManaSpook}},
EffectText: "Play: spend any number of Mana to add that many Spooked to the enemy pet",
},
{
Name: "Manticore", Power: 6, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionAilmentBoost, Count: 1}},
EffectText: "Faint: set aside — Ailments on enemy pets count for 1 more",
},
{
Name: "Team Spirit", Power: 4, Suits: []Suit{SuitYellow, SuitBlue},
Effects: []Effect{{Trigger: TriggerFaint, Action: ActionManaFeedOnPlay, Count: 2}},
EffectText: "Faint: set aside — each pet you play, spend 1 Mana to feed it 2 Apples",
},
{
Name: "Behemoth", Power: 6, Suits: []Suit{SuitBlue, SuitYellow},
Effects: []Effect{{Trigger: TriggerAfterAttack, Action: ActionEatApple, Count: 2}},
EffectText: "After Attacking: if it hasn't fainted, eat 2 Apples",
},
{
Name: "Quetzalcoatl", Power: 6, Suits: []Suit{SuitRed, SuitBlue},
Effects: []Effect{{Trigger: TriggerBuy, Action: ActionRevealTierForApples, Count: 3, Cap: 3}},
EffectText: "Buy: reveal a tier 3 or lower pet from your hand to gain 3 Apples",
},
},
}
// unicornFoodTiers defines the Unicorn pack's food cards (tiers 1-3 printed).
var unicornFoodTiers = [MaxRounds][]foodTemplate{
{}, // Tier 1
{ // Tier 2
{
Name: "Fairy Dust", Food: FoodFairyDust, Copies: 2, Perk: true,
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionGainMana}},
EffectText: "Play: gain 1 Mana",
},
},
{ // Tier 3
{
Name: "Water of Youth", Food: FoodWaterOfYouth, Copies: 2,
Effects: []Effect{{Trigger: TriggerBuy, Action: ActionUpgradeNextTier}},
EffectText: "Buy: discard this and a pet to buy the top of the next tier for free",
},
},
{ // Tier 4
{
Name: "Health Potion", Food: FoodHealthPotion, Copies: 2, Perk: true,
Effects: []Effect{{Trigger: TriggerHurt, Action: ActionHeal, Count: 3, SurviveOnly: true}},
EffectText: "Hurt: if this pet hasn't fainted, heal 3 damage",
},
},
{ // Tier 5
{
Name: "Big Mana Potion", Food: FoodBigManaPotion, Copies: 2, Perk: true,
Effects: []Effect{{Trigger: TriggerPlay, Action: ActionGainMana, Count: 3}},
EffectText: "Play: gain 3 Mana",
},
},
{ // Tier 6
{
Name: "Cornucopia", Food: FoodCornucopia, Copies: 2, Perk: true,
Effects: []Effect{
{Trigger: TriggerPlay, Action: ActionEatApple, Count: 2},
{Trigger: TriggerPlay, Action: ActionSummonTop, Card: "apple", Count: 2},
},
EffectText: "Play: eat 2 Apples and add 2 Apples on top of your deck",
},
},
}
// newCardID mints a unique card ID within the game.
func (g *Game) newCardID() string {
g.NextCardID++
@@ -866,6 +1284,8 @@ func packTiers(pack string) (*[MaxRounds][]petTemplate, *[MaxRounds][]foodTempla
switch pack {
case "golden":
return &goldenPetTiers, &goldenFoodTiers
case "unicorn":
return &unicornPetTiers, &unicornFoodTiers
default: // turtle (and the placeholder packs, until they ship)
return &petTiers, &foodTiers
}
@@ -981,6 +1401,23 @@ func (g *Game) newApple() Card {
}
}
// newAilment mints an ailment debuff card (Unicorn pack). It is temporary — it
// leaves play at the end of the round, like an apple — and belongs to no deck
// until an effect attaches it to a pet or drops it on a deck.
func (g *Game) newAilment(kind string) Card {
name := "Spooked"
if kind == AilmentExposed {
name = "Exposed"
}
return Card{
ID: g.newCardID(),
Kind: KindAilment,
Name: name,
Ailment: kind,
Temporary: true,
}
}
// newBee mints a bee: a temporary 1-power pet with no effect, summoned by
// other pets' effects. It counts as a pet while it exists (foods can attach
// to it in battle).