🐼 AniMagica

2026-11-03 21:47:33

Raise a war-band of ridiculous beasts. Train them, rest them, scar them, and lead the survivors to the throne.

© 2026 TBS 🎮 Games. All rights reserved.

🧙‍♂️ AniMagica

Raise a war-band of ridiculous beasts. Train them, rest them, scar them, and lead the survivors to the throne.

📜 Story

Twelve elemental clans of beasts send their fiercest champions to the arena. You do not buy a deck, you raise a war-band: every beast you recruit trains, fights, gets hurt, rests and grows. Some fall, the survivors carry the marks of every battle. Only one war-band holds the throne at the end.

🧭 Vision

AniMagica is an auto-battler strategy card game. It is free to play with no pay-to-win. It offers an accessible yet rich game experience that is fun and challenging to master.

A band of veterans. The units are not disposable pieces. Each unit keeps its story (experience, level, 💀 Deaths, battles and kills): it grows when it fights, takes a 💀 Death each time it dies in a battle (COMBAT.md “💀 Deaths”), becomes Injured after 3, and heals when it rests in the 🏡 Refuge (REFUGE.md). The player chooses who fights, who rests and who is sold, so the survivors of the last battle are the ones the player raised. A game ends with the report of the band (the MVP and the veterans).

💡 Inspiration

It borrows some proven and successful concepts like

💎 Production value

What sets it apart from the games above:

🌀 Metas

Many of the metas can be ignored, and the game can be played without any knowledge of these mechanics.

Of course, experienced players will use and stack these mechanics to their advantage.

🎮 Game anatomy

👻 Ghost opponent

🏆 Winning a game

A player’s game ends when they’re eliminated or become the last one standing.

The placements follow the ranking of COMBAT.md (“Ranking”).

🪜 The two ladders

There are two distinct ladders. Do not confuse them.

Local ladder (during a game)

After each turn, the 8 players of a game are ranked on the local ladder. It orders the Swiss-style pairing and the in-game standings. The final placement is the elimination order (last one standing is 1st); among players eliminated at the same time, this ranking breaks the tie. The result panel of the end of the game shows this placement among all the players (“You finished 4th of 8”); a shared victory shows no place.

  1. Highest 💚 Vitality first.
  2. If tied, the player who won the most lanes ranks first.
  3. If tied, the one with more units.
  4. If tied, the one with the most total attack.
  5. If tied, the one with the most total health.

The in-game standings are always shown: online on the board (players list) and the end screen; offline inside the Oracle (visible once it opens), refreshed after each turn. One line per player in ladder order, without rank number: ⚔️ for the next opponent of the player (or the eliminated player whose ghost it fights), the name (🙂 You, 💻 3 for a bot), 💚 and the 💚 Vitality, then its 2 main elements (most units first) on its ⚔️ Battlefield as it entered the last battle, or out once eliminated. Example: ⚔️ 💻 3 💚 9 🔥 3 💧 2. The ties use those frozen boards, never the boards being planned. The standings are the only place that shows the next opponent offline: there is no other message for it.

Global online ladder (across games)

Every player has Rank points (start at 1000, never below 0). The global ladder orders all players by Rank points. It is only used to find players of similar skill when a game is created; it does not affect a game in progress.

Similar skill = close Rank points. The 8 players of a game are the first queued player plus the 7 queued players whose Rank points are the closest to theirs. The accepted gap starts at 100 points and widens by 10 points per second of waiting, so nobody waits forever.

Rank points formula

When a game ends, each player’s placement (1st = last one standing) changes their Rank points like in auto-battlers, with a multiplayer Elo:

Result: the top 4 gain points, the bottom 4 lose points, the total stays close to zero, and a stronger player gains less (and loses more) than a weaker one for the same placement.

Worked example, 8 players with equal ratings (E = 0.5):

Placement Score S Delta
1st 1.00 +20
2nd 0.86 +14
3rd 0.71 +9
4th 0.57 +3
5th 0.43 -3
6th 0.29 -9
7th 0.14 -14
8th 0.00 -20

💰 Monetization

👤 Players will be able to purchase vanities like skin and such. The game will never have pay-to-win features as it usually ruins the experience of many players.


🚩 Locations

⚔️ Battlefield

Orientation. This spec is written in portrait terms: the 3 lanes are vertical columns (left, center, right), the rows are front and back from the enemy side down to the player, and the player is at the bottom. The ⚔️ Battlefield zone and the combat replay draw this same grid in both orientations of the screen: in landscape the grid is not turned, only the place of the zones changes (landscape: the 🧺 Marketplace on the full width at the top, then the 🏡 Refuge, the ⚔️ Battlefield and the Oracle). The words “left / center / right lane” and “front / back row” therefore mean the same on every screen.

The screen turns. The orientation follows the window: portrait when it is taller than wide, landscape otherwise, at the start and each time it changes, any number of times (portrait, landscape, portrait…). The game in progress is kept: every zone is laid out again with its cards, doors and title, and the zoomed card and the tooltip close. The turn waits while something moves (the end of a turn and its combat, an animation that locks the UI, a drag) and happens when it is over, in the last orientation of the window (none when the window turned back meanwhile). The menus are laid out again.

Each player has its own section of the ⚔️ Battlefield, which is structured into a 3x2 grid. There are 3 Vertical 🛣️ Lanes. Each 🛣️ Lane contains 2 rows: Front and Back, giving you a total of 6 positions on your side of the ⚔️ Battlefield, mirrored by 6 on the opponent’s side. You can deploy one unit per position, giving you the possibility to engage up to 6 units per combat (at most 2 per lane). 🛣️ Lanes confine combats: units interact only within their 🛣️ Lane (units cannot change lanes, see COMBAT.md MOVE). 🛣️ Lane pairing is mirrored: the Left lane faces the opponent’s Left lane (same lane index; the combat pairs lane i of player 1 with lane i of player 2). 🛣️ Lanes are resolved in the order center, left, right.

Left lane Center lane Right lane
Front row unit 1 unit 2 unit 3
Back row unit 4 unit 5 unit 6

At the start of the game, the player has limited coins to buy units. For this reason, not all positions are available. The positions and lanes open progressively based on the ⟳️ Turn number: a lane at a time, a pair of positions: the center lane at turn 1, the left lane at turn 3, the right lane at turn 5; the ⚔️ Battlefield is complete at turn 5. The number of lanes with an open position defines how many vitality points can be lost (1, 1, 2, 2, then 3): a lane opens exactly when a lane is added to the cap. The table below shows the ⟳️ Turn at which a position is open.

Left lane Center lane Right lane
Front row 3 1 5
Back row 3 1 5
⟳️ Turn 🪙 Income Total Earned Slots 💚 Max Vitality Loss†
1 4 🪙 4 🪙 2 1
2 5 🪙 9 🪙 2 1
3 6 🪙 15 🪙 4 2
4 7 🪙 22 🪙 4 2
5 8 🪙 30 🪙 6 3
6 9 🪙 39 🪙 same same
7 9 🪙 48 🪙 same same
8 10 🪙 58 🪙 same same
9 10 🪙 68 🪙 same same
10 11 🪙 79 🪙 same same
11 11 🪙 90 🪙 same same
12 12 🪙 102 🪙 same same
13 12 🪙 114 🪙 same same
14 12 🪙 126 🪙 same same
15 12 🪙 138 🪙 same same

The income grows by 1 every turn up to turn 6, then by 1 every 2 turns, and never above 12 (it starts at 4 coins). The bonuses of the cards (income+) come on top of the table.

† 💚 Max Vitality Loss: from turn 12, or once 3 players remain, every 💚 Vitality loss costs +1 more (overtime rule, see COMBAT.md, After each battle).

A unit cannot be dropped on a closed position (the drop is refused). A drop with no slot chosen is auto-placed (below). The client and the server share one rule for deploying, undeploying and reordering: open slots of the turn, no Injured deployment, the deployment traits, the 🏡 Refuge capacity (6); the ideal row is a hint, never a refusal. An injured unit leaving the battlefield does not change which slots are open: open slots depend only on the ⟳️ Turn.

A unit bought while the player owns the same card (⚔️ Battlefield or 🏡 Refuge) merges into it (MERGING.md): the bought card takes no slot, and a merged unit on the ⚔️ Battlefield keeps its slot (the survivor is the ⚔️ Battlefield one). Dropped on the ⚔️ Battlefield, such a purchase needs no free or open slot and moves no unit, whatever the slot it is dropped on: no slot preview, the unit in place stays, the bought card goes from where it was dropped to the 🪦️ Graveyard. Merging is how a few slots hold more power: a Double occupies one slot with the summed stats of two units, so it is also a bigger target for the lane.

🐼 Unit placement

👤 Players group their units by vertical 🛣️ Lanes, with each unit assigned to one of 2 horizontal rows.

position name Ideal unit Role 💪 Attack order
Front row 🗡 Melee Tank 1
Back row 🏹 Shooter, 🪄 Spellcaster DPS, Support 2

A unit is in its ideal row only when its type matches the table above (🗡 Melee in the Front row, 🏹 Shooter and 🪄 Spellcaster in the Back row). This is strict: no other row counts as ideal for a type. A ranged unit may stand in the Front row: it reaches more of the lane but fights next to the enemy 🗡 Melee (Disrupted, COMBAT.md). The UI hints (slot highlight when dragging, warning on drop) and the bots follow this rule.

Automatic placement. When a unit is deployed without a chosen slot (auto-deploy, a unit displaced by a deployment, the bots), the game picks the slot in this order, among the open and empty slots only (a displaced unit first tries the ideal row of its own lane, see COMBAT.md, then follows this order):

  1. the ideal row of the unit type; inside the row the leftmost lane first (left, center, right);
  2. if no slot of the ideal row is available: the other row (a 🗡 Melee whose Front row is full goes to the Back row, a ranged unit whose Back row is full goes to the Front row), leftmost lane first;
  3. if no slot is available there is no automatic placement: the player must free a slot, a displaced unit goes to the 🏡 Refuge, and a bot with a full ⚔️ Battlefield replaces its weakest unit.

Dropping on a closed cell. A unit dragged from the ⚔️ Battlefield and dropped on a closed cell (or on no cell) always returns to its original slot, never to a new one; the slot preview shows it while dragging. A card that comes from the 🧺 Marketplace or the 🏡 Refuge and is dropped there takes the automatic placement above. For a unit dragged from the 🧺 Marketplace, the preview says what the drop does: if the ⚔️ Battlefield has an open empty cell, that cell (the automatic placement) is highlighted and the text is “Buy + Deploy”; if the ⚔️ Battlefield is full, the locked cell stays highlighted with the lock icon and the drop is refused.

Preview text of a purchase. Dropping a unit of the 🧺 Marketplace on an open cell also shows “Buy + Deploy”. The text over the dragged card is the plain Buy, except when the drop also does something: a unit bought and deployed reuses the three-line text of the spells (Buy, +, Use, each line with its own color and size) with its last line replaced by Deploy, and a purchase that merges into an owned unit replaces it by Double, Triple, Quad, Quintuple or Sextuple.

The bots also move a unit placed by the fallback to its ideal row as soon as a slot of that row is available (moving a unit inside the ⚔️ Battlefield is free).

No penalty outside the ideal row. A unit outside its ideal row suffers no penalty other than the position itself: a unit with no enemy in range moves for free until one is (a 🗡 Melee in the Back row attacks once the cell in front of it is free), see COMBAT.md.

1. Front Row

2. Back Row

🏡 Refuge

Capacity

🧹️ Maintenance order

At each 🧹️ Maintenance, the 🏡 Refuge steps run in this order:

  1. Mentoring XP is given. Then every unit with 💀 Deaths that is in the 🏡 Refuge heals 1 💀 Death and gains a 🛡️ Shield of round((🎖️ Level + ⭐ Tier) / 2) (it is not the Rested state below).
  2. Identical units merge, ⚔️ Battlefield and 🏡 Refuge (MERGING.md); this runs after the level-ups and the 🏡 Refuge count.
  3. Egg laying: eggs evolve, then Egg Layers lay (only if the 🏡 Refuge has room).
  4. As the last action, injured units (3 💀 Deaths or more) are undeployed from the ⚔️ Battlefield to the 🏡 Refuge, whatever the room. They heal from the next 🧹️ Maintenance.

Staying in the 🏡 Refuge

After staying in the refuge for 1 ⟳️ Turn,

🧺 Marketplace

You can perform these actions:

The table below shows the number of cards offered by type. The percentages of unit types are per-slot probabilities: each unit slot independently draws its type with these percentages (they are not exact quotas of an offer).

When the 📦 Shoe has no copy left of the drawn type, the fallback order is:

  1. another unit type of the same tier (with the percentages of the tier);
  2. a unit of the next tier (tier + 1, then tier + 2, …), never above the maximum tier. This is the only case where a unit above the tier of the 🧺 Marketplace is offered (for example, tier 2 units complete a tier 1 🧺 Marketplace when the 📦 Shoe lacks tier 1 units).

A unit is never offered twice in one offer. The 🔮 Spell keeps its own slot.

⭐ Tier 🗡 Melee 🏹 Shooter 🪄 Spellcaster 🐼 Units 🔮 Spells Totals
1 100% ❌ ❌ 3 1 4
2 100% ❌ ❌ 4 1 5
3 65% 35% ❌ 5 1 6
4 45% 35% 20% 5 1 6
5 40% 35% 25% 5 1 6
6 35% 35% 30% 5 1 6
7 (max) 30% 35% 35% 5 1 6

What a unit may have at each tier (no trait or enchantment before tier 2, no 🏹 Shooter before tier 3, no 🪄 Spellcaster before tier 4) is the table “Progression by tier” of UNITS.md.

The table below shows the cost of upgrading the 🧺 Marketplace.

⭐ Tier Upgrade cost Cumulative Total 🪙 Cost
1 0 🪙 0 🪙
2 4 🪙 4 🪙
3 6 🪙 10 🪙
4 8 🪙 18 🪙
5 10 🪙 28 🪙
6 11 🪙 39 🪙
7 (max) 12 🪙 51 🪙

🪦️ Graveyard

📦 Shoe


⟳️ Turn

⚙️️ Phase 🏷️ Name Automatic
1 🧹️ Maintenance ✅
2 🧰 Preparation ❌
3 ⚔️ Combat ✅

1. 🧹️ Maintenance phase

2. 🧰 Preparation phase

You take strategic and tactical decisions to prepare for combat. A limited amount of time is given to this phase. It increases at each turn: 30 s at turn 0, +1 s per turn, 45 s from turn 15 on.

⟳️ Turn 0 1 5 10 15+
Planning time 30 s 31 s 35 s 40 s 45 s

⚔️ Combat replay duration used for the game length budget: ~15 s at speed x1, ~7.5 s at x2, ~2 s with Skip; maintenance and transitions ~5 s.

Trading cards

Each card has its own abilities. There are 🐼 Unit cards to fight and 🔮 Spell cards to boost your units.

Deploying units

By strategically placing them on the ⚔️ Battlefield, you create interactions, build traps and advantages.

Using spells

3. Battle phase

Orientation. The descriptions of this spec (lanes left / center / right, rows front / back, “vertical” moves along a lane, player A at the bottom) are written in portrait terms, see BATTLEFIELD.md. The combat replay and the ⚔️ Battlefield zone draw this same grid on every screen: the lanes are columns, player A (cells 0..1) at the bottom and the enemy (cells 2..3) at the top. Only the place of the log changes:

Portrait screen Landscape screen
🛣️ Lanes on top across the full screen width, the log panel below them The log on the left (over the 🏡 Refuge), the lanes on its right: the player half lies on the ⚔️ Battlefield zone, so the units do not move when the combat starts

🛣️ Lane resolution order (center, left, right) and the cell numbers of a lane (0 = player back row … 3 = enemy back row: 2 rows) do not depend on the orientation. The cells of a lane run from the bottom (0) to the top (3).

After each battle:

⚔️ Combat log

The log of the replay (the panel and the console) presents all the units at the beginning, then refers to a unit only by its alias.

🛣️ Lane resolution

Before each round, check if: * both players have no active units left; it’s a tie — no points are lost * one player has no living units in a lane, they lose that lane * No-progress: a round with no attack and no move ends the lane with a tie when both sides have units alive.

In the combat replay the outcome of a lane is shown without text on the board:

The units in the combat replay:

⚔️ Combat start

Before the first round of a lane (and only when both players have a living unit in it), in this order: the stat effects of the combat start traits (herding, pack instinct, rested, intimidate), then 💪 Attack / ❤️ Health mimicry, then the strikes (first strike: flat damage equal to the level of the unit to the closest enemy, resolved as steps of the round 0). If a side has no living unit left after the strikes, it loses the lane without any round. See TRAITS.md “⚔️ Combat start traits”.

Battle Flow: Per Round

A battle is a series of Rounds until all lanes are resolved. Per Round

🐼 Unit capabilities

The range defines which enemies the attacker can reach, counted in cells of the lane (1 = touching). Close combat is defined by touching an enemy 🗡 Melee unit.

🧬 Type 💪 Attack range Enemy 🎯 Target policy Close combat penalty
🗡 Melee 1 Closest ❌
🏹 Shooter 2 Weakest 🔴 Disrupted
🪄 Spellcaster 3 Furthest 🔴 Disrupted

The ranges follow the rows of a side: 🏹 Shooter = rows (2), 🪄 Spellcaster = 2 x rows - 1 (3, the whole lane from its back row).

💪 Attack priority

At the start of the combat, units receive order of attack based on their row that stay constant for all rounds. * The front row units receive the highest priority, then the back row. * Even a unit change row or walks into an enemy cell, it keeps the priority of its original home row.

💪 Attack order Optimal 🐼 Unit type
Front row 1 🗡 Melee
Back row 2 🏹 Shooter, 🪄 Spellcaster

Placement tactics

The row of a unit decides its attack priority (above), what it reaches (the ranges count cells) and how soon it is touched by an enemy 🗡 Melee.

🐼 Unit type 📝 Notes
Front row 🗡 Melee The 🗡 Melee touches the enemy front row at once; when it is empty it needs a MOVE (its action) to reach the enemy back row
Back row 🗡 Melee (1)
Front row 🏹 Shooter, 🪄 Spellcaster They reach the whole enemy lane but stand next to the enemy front row (2)
Back row 🏹 Shooter It reaches the enemy front row; when only the enemy back row is left it spends one round to step up
Back row 🪄 Spellcaster It reaches the whole lane and is protected by its front row

📝 Notes: * (1) A 🗡 Melee behind an ally cannot pass it: it can only move through empty cells, so it attacks once the cell in front of it is free (its ally moved on or died). * (2) A 🏹 Shooter or a 🪄 Spellcaster suffers the close combat penalty (Disrupted) as soon as it touches an enemy 🗡 Melee.

Targeting example

🛣️ Lane with player A at the bottom of the table, player B at the top (on every screen). A’s 🏹 Shooter stands in the front row. B has a 🗡 Melee (front, ❤️ Health 10) and a 🏹 Shooter (back, ❤️ Health 3 + 🛡️ Shield 1). Both are in range (distance 1 and 2), so A’s 🏹 Shooter picks the weakest: ❤️ Health + 🛡️ Shield = 4 for B’s 🏹 Shooter, against 10, and attacks B’s 🏹 Shooter. From A’s back row the same 🏹 Shooter would reach B’s front row only (distance 3 to B’s back row). A’s 🪄 Spellcaster would target B’s back row, the furthest, from any row.

Weakest tie example

A’s front 🏹 Shooter faces B’s front 🗡 Melee (❤️ Health 4, 🛡️ Shield 0) and B’s back 🏹 Shooter (❤️ Health 2, 🛡️ Shield 2). Both have ❤️ Health + 🛡️ Shield = 4, so the tiebreak is the closest: A’s 🏹 Shooter attacks the 🗡 Melee (distance 1, against 2).

MOVE examples

Numbering the cells of a lane from A’s back row (0) to B’s back row (3): A’s front row is cell 1, B’s front row is cell 2.

Actions:

💀 Deaths

XP: 🪖 Experience points

Progression has 5 levels. Merging identical units (Double, Triple …, MERGING.md) is the other, bigger way to grow a unit.

🧬 Trait XP given per turn
🟢 Mentoring 1

📶 🎖️ Levels

🎖️ Level XP required Cumulative XP
1 (start) 0 0
2 2 2
3 3 5
4 3 8
5 (Max) 4 12

🗿 Clans

☯ Element 🗿 Clan Associated animals Metas Environment
🔥️ Fire 🐓 Rooster Chicken Peacock Ostrich Flamingo Pheasant Guinea Fowl - Farmlands, Wetlands, Coasts
🔥️ Fire 🐱 Cat Tiger Lion Hyena Leopard Jaguar Cheetah Puma Lynx Eating units to improve Jungle, forests
🔥️ Fire 🐉 Dragon Griffon Bird of Prey Succubus Harpy Basilisk Hydra Improving on wound Mountain, Volcano
💧 Water 🐍 Cobra Shark Octopus Python Moray Eel Def–, Atk++ Caverns, Mangroves
💧 Water 🐖 Pig Bear Hippo Wild boar Rhino Tapir Capybara Warthog Def++ Grasslands, Swamps
💧 Water 🐸 Frog Rat Toad Salamander Newt Mudskipper Egg laying (Egg Layer) Forests, wetlands, Coasts
🌿️ Earth 🐃 Buffalo Elephant Cow Ox Yak Bison Def++ Savannas, scrublands, valleys
🌿️ Earth 🐼 Panda Goat Sheep Ibex Markhor Tahr Chamois Atk–, summon Hillsides, Bamboo forests
🌿️ Earth 🐕 Dog Wolf Fox Dingo Jackal - Forest, Tundra, Himalaya
🌪️️ Wind 🐇 Rabbit Mouse Hamster Squirrel Hare Faster XP Farms, Meadows
🌪️️ Wind 🦓 Zebra Horse Donkey Mule Okapi Elk Camel Saiga Speed, Extra cards, Atk–, Def– Plains, Deserts, Steppes
🌪️️ Wind 🐒 Monkey Gorilla Orangutan Chimpanzee Baboon Gibbon Capuchin Def–, ❤️ Health–, Atk++ Jungles, Tropical Rainforest

Metas notation (what the clan units favour in their stat budget, compared to the tier average of the same unit type):

🧬 Traits: the traits are specific to an ELEMENT, not to a clan. A trait reserved to some elements may be carried by the units of every clan of these elements; the list comes from the DB (☯ Elements of the 🧬 Traits table) and is in TRAITS.md “☯ Element-specific traits”. A trait for ◯️ Neutral is allowed to every element. A clan has no trait of its own.

🗿 Clan design

🃏 Card distribution

This is the target distribution of cards in the game (the cards of the game are still far from it, see “Current distribution” below). The 240 units (20 x 12) are for the 12 clans; only 4 clans (one per element, about 80 units) plus the neutral units are in the shoe of a game. When a clan is drawable: ELEMENTS.md “Reactivity”. ⭐ Tier thresholds: 🏹 Shooters appear from tier 3, 🪄 Spellcasters from tier 4 (see MARKETPLACE.md).

🎯 Target distribution

⭐ Tier 🗡 Melee 🏹 Shooter 🪄 Spellcaster 🐼 Units total
1 3 0 0 3
2 2 0 0 2
3 1 2 0 3
4 0 1 2 3
5 1 1 1 3
6 1 1 1 3
7 1 1 1 3
1 clan 9 6 5 20
4 clans 36 24 20 80
12 clans 108 72 60 240
🗿 Clans units ◯️ Neutral units 🔮 Spells total 🃏 Cards total
240 24 55 319

Current distribution

Generated by tools/card_distribution/card_distribution.py --write from game/frontend/public/cards.json (the card data is never edited by the script); refresh it after the cards change.

Current cards for sale (generated from cards.json, the NotForSale cards are not counted); gap = current - target (negative: cards missing).

🗿 Clan ☯ Element Active 🗡 Melee 🏹 Shooter 🪄 Spellcaster 🐼 Units total Gap
🐓 Rooster 🔥️ ✅ 15 (+6) ✅ 10 (+4) ✅ 8 (+3) ✅ 33/20 +13
🐱 Cat 🔥️ ❌ 0 (-9) ❌ 0 (-6) ❌ 0 (-5) ❌ 0/20 -20
🐉 Dragon 🔥️ ❌ 0 (-9) ❌ 0 (-6) ❌ 0 (-5) ❌ 0/20 -20
🐍 Cobra 💧 ❌ 7 (-2) ❌ 4 (-2) ❌ 3 (-2) ❌ 14/20 -6
🐖 Pig 💧 ❌ 14 (+5) ✅ 5 (-1) ❌ 6 (+1) ✅ 25/20 +5
🐸 Frog 💧 ❌ 0 (-9) ❌ 0 (-6) ❌ 0 (-5) ❌ 0/20 -20
🐃 Buffalo 🌿️ ✅ 16 (+7) ✅ 3 (-3) ❌ 5 (0) ✅ 24/20 +4
🐼 Panda 🌿️ ❌ 12 (+3) ✅ 8 (+2) ✅ 7 (+2) ✅ 27/20 +7
🐕 Dog 🌿️ ❌ 2 (-7) ❌ 0 (-6) ❌ 0 (-5) ❌ 2/20 -18
🐇 Rabbit 🌪️️ ❌ 0 (-9) ❌ 0 (-6) ❌ 0 (-5) ❌ 0/20 -20
🦓 Zebra 🌪️️ ❌ 0 (-9) ❌ 0 (-6) ❌ 0 (-5) ❌ 0/20 -20
🐒 Monkey 🌪️️ ❌ 15 (+6) ✅ 10 (+4) ✅ 8 (+3) ✅ 33/20 +13
◯️ Neutral ❌ 8 (-3) ❌ 5 (-2) ❌ 1 (-5) ❌ 14/24 -10
12 clans 81 (-27) ❌ 40 (-32) ❌ 37 (-23) ❌ 158/240 -82

🔮 Spells: 55 (target 55, gap 0).

Gap per clan and tier, melee/shooter/spellcaster (negative: missing, positive: surplus):

🗿 Clan Active ⭐ Tier 1 ⭐ Tier 2 ⭐ Tier 3 ⭐ Tier 4 ⭐ Tier 5 ⭐ Tier 6 ⭐ Tier 7
🐓 Rooster ✅ 0/0/0 ✅ 0/0/0 ✅ +1/0/0 ✅ +2/+1/-2 ❌ +1/-1/+3 ❌ +1/+3/+2 ✅ +1/+1/0 ✅
🐱 Cat ❌ -3/0/0 ❌ -2/0/0 ❌ -1/-2/0 ❌ 0/-1/-2 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌
🐉 Dragon ❌ -3/0/0 ❌ -2/0/0 ❌ -1/-2/0 ❌ 0/-1/-2 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌
🐍 Cobra ❌ -3/0/0 ❌ 0/0/0 ✅ +1/-1/0 ❌ +2/0/-2 ❌ 0/-1/0 ❌ -1/0/+1 ❌ -1/0/-1 ❌
🐖 Pig ❌ +2/0/0 ✅ -2/0/0 ❌ +1/0/0 ✅ +2/0/-2 ❌ 0/-1/+2 ❌ +1/+1/0 ✅ +1/-1/+1 ❌
🐸 Frog ❌ -3/0/0 ❌ -2/0/0 ❌ -1/-2/0 ❌ 0/-1/-2 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌
🐃 Buffalo ✅ 0/0/0 ✅ -1/0/0 ❌ +1/-1/0 ❌ +3/0/-1 ❌ +2/-1/0 ❌ +1/0/+2 ✅ +1/-1/-1 ❌
🐼 Panda ❌ +2/0/0 ✅ -2/0/0 ❌ +1/0/0 ✅ +1/0/-2 ❌ +1/-1/+3 ❌ +1/+3/+1 ✅ -1/0/0 ❌
🐕 Dog ❌ -3/0/0 ❌ 0/0/0 ✅ -1/-2/0 ❌ 0/-1/-2 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌
🐇 Rabbit ❌ -3/0/0 ❌ -2/0/0 ❌ -1/-2/0 ❌ 0/-1/-2 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌
🦓 Zebra ❌ -3/0/0 ❌ -2/0/0 ❌ -1/-2/0 ❌ 0/-1/-2 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌ -1/-1/-1 ❌
🐒 Monkey ❌ +2/0/0 ✅ -2/0/0 ❌ +2/0/0 ✅ +1/+1/-2 ❌ +2/-1/+2 ❌ 0/+3/+2 ✅ +1/+1/+1 ✅
◯️ Neutral 1/0/0 2/0/0 2/3/0 2/0/1 0/1/0 1/1/0 0/0/0

☯ Elements

A unit is always associated with one of the 4 elements + ◯️ Neutral (no clan is ◯️ Neutral):

  1. ◯️ Neutral
  2. 🌿️ Earth
  3. 💧 Water
  4. 🔥️ Fire
  5. 🌪️️ Wind

Reactivity

  1. ◯️ Neutral element doesn’t affect and is not affected by other elements.
  2. 🌪️️ Wind dominates the 🌿️ Earth by eroding it.
  3. 🌿️ Earth dominates the 💧 Water by absorbing it.
  4. 💧 Water dominates the 🔥️ Fire by extinguishing it.
  5. 🔥️ Fire dominates the 🌪️️ Wind by consuming its air.

Neutrality

🟢 Buff and 🔴 Debuff during 💪 Attack

☯ Elements only give upside: nothing in a lane can punish a placement.

Between enemies

Between allies

On the ⚔️ Battlefield with the placement in the same lane, allies can affect each other:

Flat reactions

Every reaction is on or off: there are no levels, no +/++/+++ and no stacks. A second source of the same reaction does nothing.

Examples:

lane pos. 🐼 Unit 🟢 Buffs 🔴 Debuffs
Front 🔥️ Fire 🟢 Resonance 0
Back 🔥️ Fire 🟢 Resonance 0
lane pos. 🐼 Unit 🟢 Buffs 🔴 Debuffs
Front 🌪️️ Wind 0 0
Back 🌿️ Earth 0 0

A mixed lane (🌪️️ Wind, 🌿️ Earth) has no Resonance and no penalty: every unit takes the plain damage.

Hit (💪 Attack 10) 💥 Damage
🌪️️ Wind hits 🌿️ Earth 10 x 1.25 = 12.5 -> 13
🌪️️ Wind (in a lane of 2 🌪️️ Wind) hits ◯️ Neutral 10 x 1.25 = 12.5 -> 13
🌪️️ Wind (in a lane of 2 🌪️️ Wind) hits 🌿️ Earth 10 x (1 + 0.25 + 0.25) = 15
🌿️ Earth hits 🌪️️ Wind (dominated, no reaction) 10
🏹 Shooter touching an enemy 🗡 Melee (Disrupted) 10 x 0.5 = 5
Disrupted 🪄 Spellcaster in a Resonance lane 10 x 1.25 x 0.5 = 6.25 -> 6

Vibe

☯ Element Vibe Ideas
🌿️ Earth Grounded Stability, endurance, nature, strength
🔥️ Fire Passionate Power, transformation, destruction, intensity
💧 Water Fluid Adaptability, healing, mystery, emotional
🌪️️ Wind Free Speed, intellect, invisibility, cerebral

🃏 Cards

🃏 Card types


🐼 Unit types

There are 3 types of 🐼 Unit cards.

🧬 Type Defense
🗡 Melee High
🏹 Shooter Medium
🪄 Spellcaster Low

🚩 Locations

A card can only be in one of these locations:

🚩 Location When
📦 Shoe Before purchase
🧺 Marketplace Before purchase
🏡 Refuge After purchase
⚔️ Battlefield After purchase
🪦️ Graveyard After resale (a 🐼 Unit or a 🔮 Spell sold) or after being cast (🔮 Spell); public to all players. A sold 🔮 Spell does not go back to the 📦 Shoe

🔮 Spells

🔮 Spell cards

🖼️ Image 🏷️ Name ⭐ X 🕯️ Enchantment 👥
Brief Incarnation 5 0 clone target unit 🎯On spell use⏳-1
Clone of Power 7 0 clone target unit 🎯On spell use🧬ephemeral
Twin Deployment 6 0 extra on deploy 🎯On purchase⏳-1
Return to ashes 6 get coins from destroyed units 🎯On spell use
Lottery Fair 3 0 get coins random 🎯On purchase
Delayed Gratification 1 2 get coins 🎯On next turn start
Delayed Gratification+++ 5 8 get coins 🎯On next turn start
1 Gold coin 1 1 get coins 🎯On spell use
2 Gold coins 2 2 get coins 🎯On spell use
3 Gold coins 3 3 get coins 🎯On spell use
Awakening of a champion 3 3 get predominant clan unit tier mp 🎯On purchase
Wild 🔮 Spell Invocation 3 0 get random spell tier mp 🎯On purchase
Unbound Mana Gift 2 3 get random spell tier x 🎯On purchase
🌪️️ Wind Summoning 3 0 get random unit in group tier mp 🎯On purchase 🌪️️ Wind
🌿️ Earth Summoning 3 0 get random unit in group tier mp 🎯On purchase 🌿 Earth
💧 Water Summoning 3 0 get random unit in group tier mp 🎯On purchase 💧 Water
🔥️ Fire Summoning 3 0 get random unit in group tier mp 🎯On purchase 🔥️ Fire
Fortune’s Fountain 4 1 income+ 🎯On purchase
Eternal ☯ Element Rebirth 5 0 market card replace by element 🎯On purchase⏳-1
🔮 Spell Stream Infinity 4 0 market card replace by spell 🎯On purchase⏳-1
Legion of the endless 3 0 market card replace by type 🎯On purchase⏳-1
No mercy for the weak 5 3 market excludes cards below tier 🎯On purchase
Oath of allegiance 4 0 market reduce all units cost 🎯On spell use
Magician’s Gift 2 market refresh with spells 🎯On purchase
Renewal of Power 4 0 market refresh with units next tier 🎯On purchase
Renewal of 🌪️️ Wind 3 market refresh with units 🎯On purchase 🌪️️ Wind
Renewal of 🌿️ Earth 3 market refresh with units 🎯On purchase 🌿 Earth
Renewal of 💧 Water 3 market refresh with units 🎯On purchase 💧 Water
Renewal of 🔥️ Fire 3 market refresh with units 🎯On purchase 🔥️ Fire
Renewal of Neutrality 3 0 market refresh with units 🎯On purchase ◯️ Neutral
Feast on the Frail 6 0 prop eat lvp to group💪 Attack,❤️ Health,🛡️ Shield🎯On purchase
Survival of the Fittest 2 prop eat random by mvp💪 Attack,❤️ Health,🛡️ Shield🎯On purchase
Hard-Won Strength 3 0 prop+ by level to group💪 Attack,❤️ Health🎯On purchase
Diamond Pentablade 4 0 prop+ by tier mp to group💪 Attack🎯On purchase
Unstable Mutation 7 200 prop+ random by percentage💪 Attack,❤️ Health🎯On spell use
Unpredictable Empowerment 1 3 prop+ random💪 Attack,❤️ Health,🛡️ Shield🎯On spell use
Baker’s Bounty 2 1 prop+ to group💪 Attack,❤️ Health🎯On spell use
Strong and Proud 5 4 prop+ to group💪 Attack,❤️ Health🎯On spell use
Lessons of War 7 3 prop+ to group🪖 Experience🎯On spell use
Chosen by the sword 2 7 prop+ to random in group💪 Attack🎯On purchase
Bloom of Life 1 2 prop+❤️ Health🎯On spell use
Elixir of Life 6 -3 prop+💀 Death🎯On spell use
Fireside Feast 1 1 prop+💪 Attack,❤️ Health🎯On spell use
Celestial Blade 1 3 prop+💪 Attack🎯On spell use
Diamond blade 2 5 prop+💪 Attack🎯On spell use
Elixir of 💀 Death 5 1 prop+💀 Death🎯On spell use, prop+💪 Attack🎯On spell use
Shell of Serenity 2 8 prop+🛡️ Shield🎯On spell use
Protection at a Price 5 100 prop+🛡️ Shield🎯On spell use
Shell of Serenity++ 6 10 prop+🛡️ Shield🎯On spell use
Divine 🛡️ Shield 6 50 prop+🛡️ Shield🎯On spell use
Echoes of 🪖 Experience 4 2 prop+🪖 Experience🎯On spell use
Echoes of 🪖 Experience++ 6 4 prop+🪖 Experience🎯On spell use
Ascension through resurrection 2 0 replace target unit by higher tier unit 🎯On spell use
Reset of No Regret 2 replace units by random units 🎯On spell use
Requiem for a Massacre 3 0 replace units by spirits 🎯On spell use
Protection from 🔥️ Fire 3 traits+ 🎯On purchase
Protection from 🌿️ Earth 3 traits+ 🎯On purchase
Protection from 💧 Water 3 traits+ 🎯On purchase
Protection from 🌪️️ Wind 3 traits+ 🎯On purchase
Last Breath Gift 5 0 traits+ 🎯On purchase
Pass the Torch 5 0 traits+ 🎯On purchase

🐼 Units

🐼 Unit design

🃏 Card 🔢 Value =
  💪 Attack × 💪 Attack 🪙 Cost +
  ❤️ Health × ❤️ Health 🪙 Cost +
  🛡️ Shield × 🛡️ Shield 🪙 Cost +
  🧬 Trait value (point or percent) for each 🧬 Trait +
  🕯️ Enchantment value (point or percent of its ✴️ Effect) for each 🕯️ Enchantment
🔢 Value points 💪 Attack ❤️ Health 🛡️ Shield
2 2 0 0
3 0 2 0
1 0 0 2
6 3 1 3
7.5 3 3 0
⭐ Tier ◯️ Neutral 🗡 Melee ◯️ Neutral 🏹 Shooter ◯️ Neutral 🪄 Spellcaster ☯ Element 🗡 Melee ☯ Element 🏹 Shooter ☯ Element 🪄 Spellcaster
1 8 n/a n/a 7 n/a n/a
2 16 n/a n/a 14 n/a n/a
3 24 21.6 n/a 21 18.9 n/a
4 32 28.8 25.6 28 25.2 22.4
5 40 36 32 35 31.5 28
6 48 43.2 38.4 42 37.8 33.6
7 56 50.4 44.8 49 44.1 39.2

The 🏹 Shooter is allowed from tier 3 and the 🪄 Spellcaster from tier 4, so the cells below those tiers are never used (n/a).

🐼 Unit type Floor Ideal ❤️ Health Ceiling
🗡 Melee 40% 60-70% 75%
🏹 Shooter 30% 45-60% 65%
🪄 Spellcaster 40% 50-65% 75%

Progression by tier

What a unit may have, by tier. The 🧺 Marketplace of a tier offers the units of its tier (MARKETPLACE.md); a new feature appears at the tier where its cell turns ✅, so a new player meets one idea at a time.

⭐ Tier 🗡 Melee 🏹 Shooter 🪄 Spellcaster 🧬 Trait or enchantment New for the player
1 ✅ ❌ ❌ ❌ Stats only (💪 Attack, ❤️ Health, 🛡️ Shield), the 🗡 Melee fight and the lanes
2 ✅ ❌ ❌ ✅ The first traits and enchantments
3 ✅ ✅ ❌ ✅ 🏹 Shooters: the reach and the Disrupted state (COMBAT.md “🐼 Unit capabilities”)
4 ✅ ✅ ✅ ✅ 🪄 Spellcasters: the whole roster of types
5 to 7 ✅ ✅ ✅ ✅ Stronger units of the same kinds (the budget grows by 7 points per tier)

⭐ Tier 1 units (onboarding)

🐼 Unit states

A unit state is a condition of a unit that the rules compute from the game (the elements, the positions, the 🏡 Refuge, the 💀 Deaths, the battle) or that its card carries as a tag. It is not a trait: it has no row in the DB, no value points, and no 🔮 Spell gives or removes it (TRAITS.md “States that are not traits”). The info scroll of the zoomed card explains the ones that apply (“🃏 Card details” below).

State 📝 Description Explained in
Dominance The element of the attacker beats the one of its target: 💪+25% damage dealt. ELEMENTS.md, TRAITS.md “States that are not traits”
Resonance The 2 units of the lane share the same non-neutral element: 💪+25% damage dealt. ELEMENTS.md “Between allies”, TRAITS.md
Disrupted A 🏹 Shooter or a 🪄 Spellcaster touching an enemy 🗡 Melee: 💪-50% damage dealt. COMBAT.md “🐼 Unit capabilities”, TRAITS.md
Rested The unit spent the last 🧹️ Maintenance in the 🏡 Refuge: 💪+25% 💪 Attack for the next battle. REFUGE.md “Staying in the 🏡 Refuge”, TRAITS.md “⚔️ Combat start traits”
Injured 3 💀 Deaths or more: the unit cannot be deployed or fight, it rests in the 🏡 Refuge until it heals. COMBAT.md “Deaths”, REFUGE.md
Poisoned Hit by a poisonous unit during the battle: ❤️-50% of its current ❤️ Health at each round end. TRAITS.md “Round traits”
Developing An egg stage (tag Developing): it evolves into the next stage at each 🧹️ Maintenance spent in the 🏡 Refuge, and never merges. REFUGE.md “Egg chains”, MERGING.md, TRAITS.md “Developing is a tag”

🃏 Card details (zoom)

When neither side of the card has that room (portrait), the scroll goes below the card, else above it, centred on it; in landscape, when neither side of the card has the width of the scroll, the card slides horizontally toward its closer screen border, just enough to leave that width on its other side; the card is never resized, and the scroll always stays inside the screen.

A click on a card shows it in full (the zoomed card). Beside it, never over it (on its right, else on its left, touching the card frame), a scroll like the tooltip one lists what the card does not show, in this order, one note per line:

  1. The unit type and its behaviour in combat: reach, target, Disrupted for a 🏹 Shooter or a 🪄 Spellcaster touched by a 🗡 Melee (COMBAT.md “🐼 Unit capabilities”). An empty line follows.
  2. 🎖️ 🎖️ Level, the 🪖 XP to reach the next level (or “max”) and what the next level gives: 💪 Attack and ❤️ Health (COMBAT.md “Levels”, the copies of a merged unit included). An empty line follows.
  3. Merge, a merged unit only: Triple: 3 copies of the card merged into one unit, then Not the sum: each added copy gives 50% of the card stats, here 💪+5 💪 Attack, ❤️+3 ❤️ Health and 🛡️+1 🛡️ Shield (what the copies added, MERGING.md “Stats of a merge”; the 🛡️ Shield only when they added some). An empty line follows. Then, from a Triple, Merge boost: ... says which trait is held twice or which value is multiplied (MERGING.md “Merge boost”). Only here: the card description does not explain the merge.
  4. Developing, a card with the tag Developing only (an egg stage, TRAITS.md “Developing is a tag”): 🥚 Developing: at each 🧹️ Maintenance it spends in the 🏡 Refuge it evolves into <next stage>; it never merges (no “into” for the last stage of a chain, REFUGE.md “Egg chains”). Only here: the card description does not explain the tag.
  5. Rested: on the ⚔️ Battlefield, or “if deployed” in the 🏡 Refuge (REFUGE.md). Only here: the card description does not explain Rested, the stats of the card do not show its +25% 💪 Attack (applied at the start of the battle).
  6. Each trait with its explanation.
  7. The element of the card, then its Dominance: Dominance 🌪️ > 🌿 > 💧 > 🔥 > 🌪️: 🔥 Fire beats 🌪️ Wind: +25% damage; a ◯️ Neutral unit has no Dominance (ELEMENTS.md). An empty line comes before and after it.
  8. Resonance when the unit is on the ⚔️ Battlefield and the other unit of its lane has the same element (ELEMENTS.md).
  9. Last, after an empty line, everything about the 💀 Deaths: 💀 Deaths below the injury with what happens at 3 💀 Deaths (Injured: back to the 🏡 Refuge, cannot be deployed until it heals), or the explanation of Injured (COMBAT.md “Deaths”). Only here: the card description does not explain the 💀 Deaths, the combat card shows their count (💀 n).

A note that does not apply is left out, and there are never two empty lines in a row. The scroll closes with the zoomed card.

🗡 Melees cards

🖼️ Image 🏷️ Name 🗿 Clan ⭐ 💪 ❤️ 🛡️ 🧬 Traits X 🕯️ Enchantment 👥
Skarn the Oasis Raider ◯️ null 1 1 4 0 0
Trade Oasis Keeper ◯️ null 2 2 3 1 last stand 0
The Golden Gladiator ◯️ null 2 4 4 0 poisonous 0
Sand Sentinel ◯️ null 3 9 6 0 first strike 0
Al Zarah The Caravaner ◯️ null 3 7 6 0 dodge 0
◯️ Neutral Spirit ◯️ null 3 0 1 0 ephemeral 0
The Blackscale Warlord ◯️ null 4 11 11 1 first strike 0
Parasitic Blob ◯️ null 4 0 1 0 attack assimilation, health assimilation 0
Crok Hellscale ◯️ null 6 12 15 1 shield piercing 0
Simian Scout 🌪️️ 🐒 Monkey 1 1 1 0 0
Dozing Slacker 🌪️️ 🐒 Monkey 1 3 2 0 1
Sirocco Striker 🌪️️ 🐒 Monkey 1 3 2 0 2
Hoopoe ravager 🌪️️ 🐒 Monkey 1 1 3 0 2
Rusher King 🌪️️ 🐒 Monkey 1 4 2 0
Pyrojack The Reluctant 🌪️️ 🐒 Monkey 1 1 4 0 2
Bari the vanguard 🌪️️ 🐒 Monkey 1 1 1 0 0
Knucklegrunt 🌪️️ 🐒 Monkey 2 7 6 0 fury 0
Brutus The Butcher 🌪️️ 🐒 Monkey 2 9 4 0 🌿protection 0
Simian Smogsmash 🌪️️ 🐒 Monkey 2 5 4 0 0
Tribal Martyr 🌪️️ 🐒 Monkey 3 6 6 0 taunt 6
Gale-force vane 🌪️️ 🐒 Monkey 3 9 6 0 ricochet 0
Silverback Brute 🌪️️ 🐒 Monkey 3 9 4 0 overflow damage 0
🌪️️ Wind Spirit 🌪️️ 🐒 Monkey 3 0 1 0 ephemeral 0
Bonker Basher 🌪️️ 🐒 Monkey 4 12 12 0 overflow damage 0
Orangoon Twins 🌪️️ 🐒 Monkey 4 9 9 0 0 summon 🎯On death🃏Simian Smogsmash
Grungle the savage 🌪️️ 🐒 Monkey 4 7 10 0 1 prop+ to random in group💪 Attack🎯On kill by ally⏳-1 ☯ UnitElement
Banana Brute 🌪️️ 🐒 Monkey 5 15 10 0 first strike 0
Ballrog Brawler 🌪️️ 🐒 Monkey 5 11 12 0 last stand 1
Gormilla The Unshaken 🌪️️ 🐒 Monkey 5 7 14 0 fury 0
Quickfoot zingo 🌪️️ 🐒 Monkey 5 18 8 0 ricochet 1
Endless Screamers 🌪️️ 🐒 Monkey 6 9 14 0 0 summon 🎯On death🃏Orangoon Twins
Rimba 🌪️️ 🐒 Monkey 6 18 12 0 ricochet 2
Bantu the woodsman 🌪️️ 🐒 Monkey 7 20 14 0 charge 0
Vita flesh 🌪️️ 🐒 Monkey 7 23 14 0 💧protection 1
Ivory Impaler 🌱️ 🐃 Buffalo 1 1 3 1 1 ☯ UnitElement
Karrak the Watcher 🌱️ 🐃 Buffalo 1 1 3 1 0
Blacknok 🌱️ 🐃 Buffalo 1 1 3 1 1
Gaj’Kar Kragspike 🌱️ 🐃 Buffalo 2 4 4 2 shield piercing 2 prop+ to random in group🛡️ Shield🎯On sale,On purchase
Tharok the Stomper 🌱️ 🐃 Buffalo 3 2 4 6 backlash 4
Saffran Solwane 🌱️ 🐃 Buffalo 3 4 6 2 social herding 1
Thamur Hammer Tusk 🌱️ 🐃 Buffalo 4 5 10 4 overflow damage 0
Clubadon Mastokar 🌱️ 🐃 Buffalo 4 7 8 6 overflow damage 0
Kravok the Piercer 🌱️ 🐃 Buffalo 4 8 6 6 shield piercing 0
Khan Whitehorn 🌱️ 🐃 Buffalo 5 14 10 4 social herding 2
Klotch the Cleaver 🌱️ 🐃 Buffalo 5 14 9 7 social herding 3
Cragmilker 🌱️ 🐃 Buffalo 5 10 13 3 social herding 2
Black Spire 🌱️ 🐃 Buffalo 6 11 17 1 last stand 6
Arbitrator Proxacutor 🌱️ 🐃 Buffalo 6 13 13 13 social herding 3
Merciless Golden Mane 🌱️ 🐃 Buffalo 7 13 18 8 💧protection 4
Kumar The Nightcleaver 🌱️ 🐃 Buffalo 7 10 16 4 shield piercing 4 prop+💪 Attack🎯On kill by ally⏳-1
Vireya the Sylvan Riftwolf 🌱️ 🐕 Dog 2 1 3 1 pack instinct 1
Tenebris Fang 🌱️ 🐕 Dog 2 1 3 1 🔥️protection 0
🌿️ Earth Spirit 🌱️ 🐕 Dog 3 0 1 0 ephemeral 0
Kestrel-thorn Kid 🌱️ 🐼 Panda 1 1 3 1 0
High-markhor goro 🌱️ 🐼 Panda 1 1 2 0 0
Root-caller feng 🌱️ 🐼 Panda 1 1 3 1 0
The highland blade 🌱️ 🐼 Panda 1 1 2 2 0
Koda the unyielding 🌱️ 🐼 Panda 1 1 2 2 0
Sledge the sentry 🌱️ 🐼 Panda 3 4 6 2 charge 0
Soren of the peak 🌱️ 🐼 Panda 3 4 6 2 health transfer 0
Karn the Avalanche 🌱️ 🐼 Panda 4 4 8 4 1 prop+ to group❤️ Health🎯On round end⏳-1 ☯ UnitElement
Sentry veda 🌱️ 🐼 Panda 5 11 12 0 🌪️️protection 0
Stone Binder 🌱️ 🐼 Panda 5 6 13 7 🔥️protection 0
Braken the twin-hitter 🌱️ 🐼 Panda 6 11 17 1 overflow damage 0
Bould the earth crafter 🌱️ 🐼 Panda 6 10 15 3 🌪️️protection 1 prop+ to random in group in refuge🛡️ Shield🎯On hit⏳-1 ☯ UnitElement
Azurecoil Ambusher 💧 🐍 Cobra 2 2 3 1 0 prop transfer to random💪 Attack🎯On death
Scorchcoil venom 💧 🐍 Cobra 2 2 3 1 poisonous 0
Ripple Channeler 💧 🐍 Cobra 3 3 6 6 🔥️protection 0
Orichal Wyrm 💧 🐍 Cobra 3 6 5 1 1 get random spell tier x 🎯On combat surviving⏳-1
💧 Water Spirit 💧 🐍 Cobra 3 0 1 0 ephemeral 0
Twisty Tempest Tongue 💧 🐍 Cobra 4 7 9 1 poisonous, 🌪️️protection 0
Shallow Scourge Predator 💧 🐍 Cobra 4 8 9 3 poisonous 0
Cavecoil Immortal 💧 🐍 Cobra 5 10 13 1 poisonous 0
Mudtusk Recruit 💧 🐖 Pig 1 2 2 2 1
Prince Fougash 💧 🐖 Pig 1 1 3 1 0
Piglet Clet-Ush 💧 🐖 Pig 1 1 3 1 0
Spear Lirael 💧 🐖 Pig 1 2 2 2 0
Noj the monk 💧 🐖 Pig 1 1 3 1 0
Clet-Ush the Grown 💧 🐖 Pig 3 4 6 2 first strike 0
Bristle-weaver koel 💧 🐖 Pig 3 4 5 1 1 prop+ to group💪 Attack,❤️ Health🎯On purchase ☯ UnitElement
Warthog Charger 💧 🐖 Pig 4 9 8 2 🔥️protection 1
Stone-heart brin 💧 🐖 Pig 4 5 9 7 first strike 0
Riptide axe thalia 💧 🐖 Pig 5 11 11 3 🌪️️protection 1
Root-strider mara 💧 🐖 Pig 6 11 14 4 charge 0
Tide shield borin 💧 🐖 Pig 6 9 16 8 1 prop+ to group❤️ Health🎯On round end⏳-1 ☯ UnitElement
Riptide dagger siren 💧 🐖 Pig 6 12 15 7 poisonous 2
Vorin 💧 🐖 Pig 7 15 16 8 health transfer 0
Tusk-scarred thorne 💧 🐖 Pig 7 14 15 4 health transfer 2
🐸 Frog eggs 💧 🐸 Frog 1 0 3 0 0
Tadpoles 💧 🐸 Frog 1 0 2 0 0
Legged tadpoles 💧 🐸 Frog 1 0 1 0 0
Cluckopatra 🔥️ 🐓 Rooster 1 1 2 1 1
🏁 First Feather 🔥️ 🐓 Rooster 1 1 1 1
Sir Squawkalot 🔥️ 🐓 Rooster 1 2 3 1
Dormant egg 🔥️ 🐓 Rooster 1 0 3 0
Developing egg 🔥️ 🐓 Rooster 1 0 2 0
Hatching egg 🔥️ 🐓 Rooster 1 0 1 0
Hatchling prodigy 🔥️ 🐓 Rooster 1 1 1 0 prop+ by level💪 Attack,❤️ Health🎯On level up, prop+ by tier mp💪 💪 Attack,❤️ Health🎯On combat surviving
Brackenwood Guardian 🔥️ 🐓 Rooster 1 3 2
Bonebreaker krik 🔥️ 🐓 Rooster 1 1 3 1 0
Rhythm Flapwing 🔥️ 🐓 Rooster 1 1 2 0 2
Fluffcano McBoom 🔥️ 🐓 Rooster 2 2 1 egg layer
Spiky Bantami 🔥️ 🐓 Rooster 2 8 4 2 0
Golden order veteran 🔥️ 🐓 Rooster 2 6 5 3 0 prop+ by level to random in group in refuge💪 Attack🎯On combat end 🔥️ Fire
Clawrus 🔥️ 🐓 Rooster 2 3 2 0 egg layer 0
Bulwark Brisker 🔥️ 🐓 Rooster 3 8 8 4 3 prop+❤️ Health🎯On attack boost⏳-1
Grimfang 🔥️ 🐓 Rooster 3 11 11 1 mercenary 1
Whisperwing lyra 🔥️ 🐓 Rooster 3 14 9 1 mercenary 1
Talon The Cleaver 🔥️ 🐓 Rooster 4 9 9 3 dodge
Terrorcock 🔥️ 🐓 Rooster 4 13 10 2 last stand 0
Boomerang blitz 🔥️ 🐓 Rooster 4 9 8 2 🌪️️protection 0
Dominus quill 🔥️ 🐓 Rooster 4 9 8 2 first strike 0
Regulus 🔥️ 🐓 Rooster 4 10 11 1 shield piercing 0
Embercluck 🔥️ 🐓 Rooster 5 12 7 2 dodge 0
Magus Plumpheus 🔥️ 🐓 Rooster 5 22 13 5 mercenary 2
Gronak 🔥️ 🐓 Rooster 5 14 14 2 2 prop+💪 Attack🎯On kill by ally⏳-1
Arakian 🔥️ 🐓 Rooster 6 11 13 3 egg layer 0
Terran 🔥️ 🐓 Rooster 6 11 12 2 dodge 0
Aura flare 🔥️ 🐓 Rooster 7 12 15 3 dodge 0
Pyrecrest Warden 🔥️ 🐓 Rooster 7 15 18 4 🌿protection 2
🔥️ Fire Spirit 🔥️ 🐱 Cat 3 0 1 0 ephemeral 0

🏹 Shooters cards

🖼️ Image 🏷️ Name 🗿 Clan ⭐ 💪 ❤️ 🛡️ 🧬 Traits X 🕯️ Enchantment 👥
Redscale Dunehunter ◯️ null 3 8 6 2 0
Sunslinger ◯️ null 3 11 5 1 🔥️protection 0
Grafty Amalgam ◯️ null 3 0 1 0 attack mimicry, health mimicry 0
Dust Strangler ◯️ null 5 13 10 🌪️️protection 0
Burning Sands Hunter ◯️ null 6 17 12 4 last stand 0
Sneaky Skirmisher 🌪️️ 🐒 Monkey 3 10 8 0 first strike 0
Fast Slinger 🌪️️ 🐒 Monkey 3 6 6 0 overflow damage 0
Sneaky Sniper 🌪️️ 🐒 Monkey 3 13 6 0 first strike 2
Boomerang queen 🌪️️ 🐒 Monkey 3 7 4 0 ricochet 0
Canopy Skyhunter 🌪️️ 🐒 Monkey 4 11 6 0 ricochet 0
Jangal 🌪️️ 🐒 Monkey 4 8 8 0 ricochet 0
Bomboon Grenadoon 🌪️️ 🐒 Monkey 5 22 8 0 ricochet 0
Simian Sapper 🌪️️ 🐒 Monkey 5 12 8 0 dodge, ricochet 0
Gorok 🌪️️ 🐒 Monkey 5 24 8 0 12 prop+ to random in group💪 Attack🎯On deploy ☯ UnitElement
Boulder aim 🌪️️ 🐒 Monkey 6 17 8 0 🔥️protection 0
Jungle maven 🌪️️ 🐒 Monkey 6 21 10 0 dodge 0
Scattershot clay 🌪️️ 🐒 Monkey 6 15 8 0 ricochet 0
Shuriken master 🌪️️ 🐒 Monkey 6 23 12 0 ricochet 0
Billy Bomber 🌪️️ 🐒 Monkey 7 19 8 0 ricochet, 🌿protection 0
Koko Rokai 🌪️️ 🐒 Monkey 7 12 8 0 ricochet, 🔥️protection 3 prop+ to group in refuge❤️ Health🎯On combat surviving⏳-1
Zirfail Darksnout 🌱️ 🐃 Buffalo 3 7 5 1 social herding 1
Arokh the Ivory Fang 🌱️ 🐃 Buffalo 4 8 9 3 social herding 1
Hornshot Twinbolt 🌱️ 🐃 Buffalo 6 13 10 2 🔥️protection 0
Anchor-hedge Slinger 🌱️ 🐼 Panda 3 6 5 3 2
Thicket Trapper 🌱️ 🐼 Panda 3 6 5 3 1 prop+ to random in group💪 Attack🎯On hit⏳-1 ☯ UnitElement
Scent-seeker mira 🌱️ 🐼 Panda 4 9 8 2 health transfer 1
Dax the tracker 🌱️ 🐼 Panda 6 15 17 9 last stand 0
Elowen the scout 🌱️ 🐼 Panda 6 14 10 0 💧protection 0
Ibex Archer Lhamo 🌱️ 🐼 Panda 6 17 18 0 🌪️️protection 0
Sentry-stone Matriarch 🌱️ 🐼 Panda 6 12 14 2 3 get random unit in group tier x 🎯On purchase ☯ UnitElement
The meadow stalkers 🌱️ 🐼 Panda 6 10 10 6 intimidate 1
Pinnacle Warden 🌱️ 🐼 Panda 7 14 15 1 🔥️protection 0
Lagoon Shade Medic 💧 🐍 Cobra 3 6 4 0 dodge 2
HydroSpire Healer 💧 🐍 Cobra 4 13 6 0 4 prop+❤️ Health🎯On round end⏳-1
Gravedigger Guardian 💧 🐍 Cobra 6 12 12 0 poisonous 0
Thunder Viper 💧 🐍 Cobra 7 19 10 0 0 get random spell tier mp 🎯On lane won⏳-1
Marsh Slinger 💧 🐖 Pig 3 4 5 5 1 prop+ to random in group💪 Attack🎯On purchase ☯ UnitElement
Bog Harpooner 💧 🐖 Pig 3 4 5 5 1 prop+ to random in group💪 Attack🎯On hit⏳-1 ☯ UnitElement
Cartographer Nerida 💧 🐖 Pig 3 7 6 4 dodge 1
Orin 💧 🐖 Pig 4 10 9 5 2 prop+ to group in refuge❤️ Health🎯On combat surviving⏳-1 ☯ UnitElement
Diver Mirel 💧 🐖 Pig 4 6 6 6 dodge 1
Dart nix 💧 🐖 Pig 6 9 10 10 🔥️protection 0
Dart nix2 💧 🐖 Pig 6 9 10 10 🌪️️protection 0
Ruddy Biscuit 🔥️ 🐓 Rooster 3 6 4 dodge
MacFeather Swiftshot 🔥️ 🐓 Rooster 3 7 5 1 🌿protection
Galliard 🔥️ 🐓 Rooster 3 10 5 1 dodge 0
Luckywood Ranger 🔥️ 🐓 Rooster 3 10 7 3 0 get card 🎯On purchase🃏1 Gold coin
Aelion 🔥️ 🐓 Rooster 3 6 4 0 dodge 0
Youngshot Fatwing 🔥️ 🐓 Rooster 4 15 7 7 0 prop+ by level💪 Attack🎯On kill
Hookshot 🔥️ 🐓 Rooster 4 9 6 0 dodge 0
Scurry 🔥️ 🐓 Rooster 4 11 7 1 🌿protection 0
Sir Boltfeather 🔥️ 🐓 Rooster 6 11 12 2 0 get card 🎯On purchase🃏Renewal of 🔥️ Fire
Duo-shot doug 🔥️ 🐓 Rooster 6 12 10 4 🌪️️protection 0
Ironbow master zik1 🔥️ 🐓 Rooster 6 21 15 3 last stand 2
Ironbow master zik2 🔥️ 🐓 Rooster 6 21 14 4 💧protection 0
Flicker 🔥️ 🐓 Rooster 7 15 9 3 dodge 0
Featherdart shae 🔥️ 🐓 Rooster 7 18 8 0 dodge 0

🪄 Spellcasters cards

🖼️ Image 🏷️ Name 🗿 Clan ⭐ 💪 ❤️ 🛡️ 🧬 Traits X 🕯️ Enchantment 👥
Instructor Magilysk ◯️ null 4 12 12 2 get random unit in group tier x 🎯On purchase ☯ UnitElement
Echo keeper kalu 🌪️️ 🐒 Monkey 4 7 6 0 attack mimicry 0
Flora weave 🌪️️ 🐒 Monkey 4 7 10 0 1 prop+ to random in group in refuge❤️ Health🎯On hit by ally⏳-1 ☯ UnitElement
Silas whisper 🌪️️ 🐒 Monkey 4 10 8 0 dodge 2
Mojo Kong 🌪️️ 🐒 Monkey 5 7 14 0 overflow damage 4 prop+ to group💪 Attack🎯On spell use by ally⏳-1 ☯ UnitElement
Aetheron 🌪️️ 🐒 Monkey 5 16 12 0 ricochet 1
Khtun shaman 🌪️️ 🐒 Monkey 5 6 6 0 dodge 1 prop+ to random in group💪 Attack🎯On hit⏳-1 ☯ UnitElement
Vigor 🌪️️ 🐒 Monkey 5 14 14 0 fury 2 prop+❤️ Health🎯On round end⏳-1
Spark-student kael 🌪️️ 🐒 Monkey 5 13 6 0 3 prop+ to random in group💪 Attack🎯On hit⏳-1 ☯ UnitElement
Elemantor The Protector 🌪️️ 🐒 Monkey 6 10 20 0 0 traits+ random to random in group 🎯On turn end,On purchase🧬🌿protection,🔥️protection,💧protection,🌪️️protection⏳-1 ☯ UnitElement
Rocchet 🌪️️ 🐒 Monkey 6 14 10 0 1 prop+ to random in group💪 Attack🎯On hit⏳-1
Luminara 🌪️️ 🐒 Monkey 6 11 8 0 ricochet 2 prop+ to random in group💪 Attack🎯On kill by ally⏳-1 ☯ UnitElement
Morwen 🌪️️ 🐒 Monkey 6 14 14 0 gifted learner 2 prop+ to group in refuge❤️ Health🎯On combat surviving⏳-1 ☯ UnitElement
Malphas the defiler 🌪️️ 🐒 Monkey 6 14 10 0 dodge, ricochet 3
Zephyrin 🌪️️ 🐒 Monkey 6 20 16 0 💧protection 1
Mirage-weaver nyx 🌪️️ 🐒 Monkey 7 11 8 0 health mimicry 0
Sky whisper 🌪️️ 🐒 Monkey 7 15 10 0 ricochet 2
Barzok Bustabull 🌱️ 🐃 Buffalo 4 3 7 0 1 prop+ to random in group in refuge❤️ Health🎯On hit by ally⏳-1
Lorzok ThunderHoof 🌱️ 🐃 Buffalo 5 11 12 12 intimidate 3
Krag’Ar The Protector 🌱️ 🐃 Buffalo 6 15 9 3 1 prop+ to random in group in refuge🛡️ Shield🎯On hit⏳-1 🌿 Earth
Hornseer of Fury 🌱️ 🐃 Buffalo 6 11 12 0 🔥️protection 2
Tuskwalker, living soil 🌱️ 🐃 Buffalo 6 9 18 8 5 prop+ random to group in refuge💪 Attack,❤️ Health,🛡️ Shield🎯On combat surviving⏳-1 🌿 Earth
Rho the Moss Mender 🌱️ 🐼 Panda 5 9 11 2 health transfer 1 prop+ to group❤️ Health🎯On round end⏳-1 ☯ UnitElement
Bloom-summoner mei 🌱️ 🐼 Panda 5 8 9 1 1 prop+ to random in group in refuge❤️ Health🎯On hit by ally⏳-1 ☯ UnitElement
Kaelen the earth-lord 🌱️ 🐼 Panda 5 10 15 3 2 prop+ random to group in refuge💪 Attack,❤️ Health,🛡️ Shield🎯On combat surviving⏳-1 ☯ UnitElement
Livia the healer 🌱️ 🐼 Panda 5 7 9 3 💧protection 1
Vaelin the Herd-herald 🌱️ 🐼 Panda 6 14 19 3 2 prop+ to random in group💪 Attack🎯On kill by ally⏳-1 ☯ UnitElement
Yin of the Bamboo Veil 🌱️ 🐼 Panda 6 12 15 1 🌪️️protection 2 prop+ to group in refuge💪 Attack,❤️ Health🎯On kill⏳-1 ☯ UnitElement
Elder Bambookeeper 🌱️ 🐼 Panda 7 8 12 0 2 prop+ to group in refuge❤️ Health🎯On combat surviving⏳-1 ☯ UnitElement
Venombra 💧 🐍 Cobra 5 15 15 1 poisonous 0
Shadowmend Broodmother 💧 🐍 Cobra 6 13 13 1 🌿protection 8 prop+ to group❤️ Health🎯On round end⏳-1 💧 Water
Thalassaryn 💧 🐍 Cobra 6 14 10 2 prop+ to random in group💪 Attack🎯On kill by ally⏳-1 💧 Water
Healer 💧 🐖 Pig 4 3 9 0 health transfer 1 prop+ to random in group in refuge❤️ Health🎯On hit by ally⏳-1 ☯ UnitElement
Wizard 💧 🐖 Pig 5 5 8 8 1 prop+ to random in group in refuge🛡️ Shield🎯On hit⏳-1 ☯ UnitElement
Bramble-weaver sylas 💧 🐖 Pig 5 6 8 8 first strike 2
Ore-whisperer liora 💧 🐖 Pig 5 8 13 7 2 prop+ to group❤️ Health🎯On round end⏳-1 ☯ UnitElement
Tide Joran 💧 🐖 Pig 6 9 17 5 1 prop+ to group❤️ Health🎯On round end⏳-1 ☯ UnitElement
Root-scribe toorne2 💧 🐖 Pig 6 11 15 7 3 prop+ to group❤️ Health🎯On round end⏳-1 ☯ UnitElement
Root-scribe toorne 💧 🐖 Pig 7 7 10 10 3 prop+ random to group in refuge💪 Attack,❤️ Health,🛡️ Shield🎯On combat surviving⏳-1 ☯ UnitElement
Stone-singer mirael 💧 🐖 Pig 7 8 9 9 2 prop+ to group in refuge💪 Attack,❤️ Health🎯On kill⏳-1 ☯ UnitElement
Brackenwood Druid 🔥️ 🐓 Rooster 4 14 10 🌿protection 8 🔥️ Fire
Emberwhisper 🔥️ 🐓 Rooster 4 6 8 0 egg layer 2 prop+ to group in refuge❤️ Health🎯On combat surviving⏳-1 ☯ UnitElement
Magmingo Ignisquawk 🔥️ 🐓 Rooster 5 13 6 5 prop+💪 Attack🎯On attack boost of ally⏳-1 ☯ UnitElement
Flaminar Cindravius 🔥️ 🐓 Rooster 5 16 14 💧protection 0
Marquise Aquina 🔥️ 🐓 Rooster 5 19 10 0 traits+ to random in group 🎯On kill by ally,On purchase🧬💧protection⏳-1 ☯ UnitElement
Magister Krotum 🔥️ 🐓 Rooster 5 14 12 2 2 prop+ to group in refuge💪 Attack,❤️ Health🎯On kill⏳-1 ☯ UnitElement
Aetherian 🔥️ 🐓 Rooster 5 10 15 1 shield piercing 1
Blazecaller 🔥️ 🐓 Rooster 5 10 8 0 💧protection 1
Scorchmender 🔥️ 🐓 Rooster 5 9 12 0 health transfer 2 prop+ to group❤️ Health🎯On round end⏳-1 ☯ UnitElement
Ignis weaver 🔥️ 🐓 Rooster 6 15 14 0 egg layer 1 prop+💪 Attack🎯On kill by ally⏳-1
Ignisara 🔥️ 🐓 Rooster 6 11 10 2 2 prop+ to random in group💪 Attack🎯On hit⏳-1 ☯ UnitElement
Scribe pyra 🔥️ 🐓 Rooster 6 15 17 7 3 prop+ to random in group💪 Attack🎯On kill by ally⏳-1 ☯ UnitElement
Vesperia 🔥️ 🐓 Rooster 6 10 12 0 dodge, egg layer 3
Ashbinder 🔥️ 🐓 Rooster 7 7 10 4 dodge 1

🕯️ Enchantments

The huge diversity of possible enchantments gives a significant depth to the game. Powerful strategies emerge when combining enchantments from different units.

🕯️ Enchantments parameterize an ✴️ Effect with

The enchantment name format is {effect}{properties}[🎯triggers][🃏card][🧬traits][⏳duration]. There is no ⏰ Delay parameter. A delay is expressed with a future-event trigger (On next turn start, …); a counter or countdown (“every Nth”, several turns) may be designed later together with the server persistence of the applied enchantments.

⚡ Trigger repeaters (extra on deploy, extra on turn start, extra on turn end, extra on death): the rows are kept in the data. Only extra on deploy repeats its trigger today; the three others have no effect yet (no card uses them).

🕯️ Enchantments are further parameterized by the 🐼 Unit or 🔮 Spell with

Market cost reducers (market reduce next spell cost, market reduce next unit cost, market reduce upgrade, market free upgrade): see MARKETPLACE.md.

🕯️ Enchantment list

🏷️ Name ✴️ Effect 📝 Description
cast random spell tier mp Cast on itself a random spell at the current market tier
clone target unit 🎯On spell use⏳-1 Duplicate unit stats and traits, not its spells
clone target unit 🎯On spell use🧬ephemeral Duplicate unit stats and traits, not its spells
extra on death ⏳-1 Your future ‘’ effects will trigger an extra time
extra on deploy 🎯On purchase⏳-1 Your future ‘’ effects will trigger an extra time
extra on turn end ⏳-1 Your future ‘’ effects will trigger an extra time
extra on turn start ⏳-1 Your future ‘’ effects will trigger an extra time
get card 🎯On purchase🃏1 Gold coin Get 🃏 Card
get card 🎯On purchase🃏2 Gold coins Get 🃏 Card
get card 🎯On purchase🃏3 Gold coins Get 🃏 Card
get card 🎯On purchase🃏Protection from 🌿️ Earth Get 🃏 Card
get card 🎯On purchase🃏Renewal of 🌿️ Earth Get 🃏 Card
get card 🎯On purchase🃏Renewal of 🔥️ Fire Get 🃏 Card
get card 🎯On purchase🃏Renewal of 💧 Water Get 🃏 Card
get card 🎯On purchase🃏Renewal of 🌪️️ Wind Get 🃏 Card
get coins from destroyed units 🎯On spell use Destroy all units and gain their original value + 1 🪙
get coins random 🎯On purchase Get a random amount of 🪙 between 2 to 6
get coins 🎯On next turn start Get 🔢 Value 🪙
get coins 🎯On purchase Get 🔢 Value 🪙
get coins 🎯On spell use Get 🔢 Value 🪙
get predominant clan unit tier mp 🎯On purchase Get a random unit at the current market tier of your predominant clan
get random spell tier mp 🎯On lane won⏳-1 Get a random spell at the current market tier
get random spell tier mp 🎯On purchase Get a random spell at the current market tier
get random spell tier x 🎯On combat surviving⏳-1 Get a random spell from tier 🔢 Value
get random spell tier x 🎯On purchase Get a random spell from tier 🔢 Value
get random unit in group tier mp 🎯On purchase Get a random 👥 Group unit at the current market tier
get random unit in group tier x 🎯On purchase Get a random 👥 Group unit from tier 🔢 Value
income+ 🎯On purchase Increase your income by 🔢 Value 🪙
market card replace by element 🎯On purchase⏳-1 Whenever you purchase a unit, place a card into the market
market card replace by spell 🎯On purchase⏳-1 Whenever you purchase a card, place a card into the market
market card replace by type 🎯On purchase⏳-1 Whenever you purchase a unit, place a card into the market
market excludes cards below tier 🎯On purchase Market does not offer cards below ⭐ Tier 🔢 Value
market free upgrade Upgrade the marketplace for free
market reduce all units cost 🎯On spell use Reduce the cost of all units by 1 for this turn only
market reduce upgrade Reduce cost by 🔢 Value of your next marketplace upgrade
market refresh with spells 🎯On purchase Refresh the marketplace with spells
market refresh with units next tier 🎯On purchase Refresh the marketplace with 👥 Group units of the next tier
market refresh with units 🎯On purchase Refresh the marketplace with 👥 Group units
prop amplify spell❤️ Health Your 📊 Properties spells increases by 🔢 Value
prop amplify spell💪 Attack Your 📊 Properties spells increases by 🔢 Value
prop amplify spell💪 Attack,❤️ Health Your 📊 Properties spells increases by 🔢 Value
prop amplify spell🛡️ Shield Your 📊 Properties spells increases by 🔢 Value
prop eat lvp to group💪 Attack,❤️ Health,🛡️ Shield🎯On purchase Your 👥 Group units eat your lowest health unit to gain its 📊 Properties
prop eat random by mvp💪 Attack,❤️ Health,🛡️ Shield🎯On purchase Your highest 💪 Attack unit eats one of your unit randomly to gain its 📊 Properties ($HAS_TRAIT?and 🧬 Traits)
prop eat random in mp❤️ Health Eat random unit from the marketplace to gain its 📊 Properties
prop eat random in mp💪 Attack Eat random unit from the marketplace to gain its 📊 Properties
prop eat random in mp💪 Attack,❤️ Health Eat random unit from the marketplace to gain its 📊 Properties
prop eat random in mp🛡️ Shield Eat random unit from the marketplace to gain its 📊 Properties
prop eat random❤️ Health Eat one of your unit randomly to gain its 📊 Properties ($HAS_TRAIT?and 🧬 Traits)
prop eat random💪 Attack Eat one of your unit randomly to gain its 📊 Properties ($HAS_TRAIT?and 🧬 Traits)
prop eat random💪 Attack,❤️ Health Eat one of your unit randomly to gain its 📊 Properties ($HAS_TRAIT?and 🧬 Traits)
prop eat random💪 Attack,❤️ Health Eat one of your unit randomly to gain its 📊 Properties ($HAS_TRAIT?and 🧬 Traits)
prop eat random🛡️ Shield Eat one of your unit randomly to gain its 📊 Properties ($HAS_TRAIT?and 🧬 Traits)
prop eat target❤️ Health ($TARGET?Choose a unit.) Eat it and gain its 📊 Properties
prop eat target💪 Attack ($TARGET?Choose a unit.) Eat it and gain its 📊 Properties
prop eat target💪 Attack,❤️ Health ($TARGET?Choose a unit.) Eat it and gain its 📊 Properties
prop eat target🛡️ Shield ($TARGET?Choose a unit.) Eat it and gain its 📊 Properties
prop equalize attack health Set 💪 Attack and ❤️ Health to the highest value of both
prop give to random in group❤️ Health Give its 📊 Properties to 🔢 Value random 👥 Group unit(s)
prop give to random in group💪 Attack Give its 📊 Properties to 🔢 Value random 👥 Group unit(s)
prop give to random in group💪 Attack,❤️ Health Give its 📊 Properties to 🔢 Value random 👥 Group unit(s)
prop give to random in group🛡️ Shield🎯On sale,On purchase Give its 📊 Properties to 🔢 Value random 👥 Group unit(s)
prop transfer to random❤️ Health Transfer its 📊 Properties to a random 👥 Group unit
prop transfer to random💪 Attack,❤️ Health Transfer its 📊 Properties to a random 👥 Group unit
prop transfer to random💪 Attack🎯On death Transfer its 📊 Properties to a random 👥 Group unit
prop transfer to random🛡️ Shield Transfer its 📊 Properties to a random 👥 Group unit
prop+ by level to group💪 Attack,❤️ Health🎯On purchase Give 📊 Properties +${LEVEL} (current unit level) to your 👥 Group units
prop+ by level to random in group in refuge💪 Attack🎯On combat end Give 📊 Properties +${LEVEL} (current unit level) to a random 👥 Group unit in the refuge
prop+ by level❤️ Health ($TARGET?Choose a unit.) It gains 📊 Properties +${LEVEL} (current unit level)
prop+ by level💪 Attack,❤️ Health🎯On level up ($TARGET?Choose a unit.) It gains 📊 Properties +${LEVEL} (current unit level)
prop+ by level💪 Attack🎯On kill ($TARGET?Choose a unit.) It gains 📊 Properties +${LEVEL} (current unit level)
prop+ by level🛡️ Shield ($TARGET?Choose a unit.) It gains 📊 Properties +${LEVEL} (current unit level)
prop+ by tier mp to group💪 Attack🎯On purchase Give 📊 Properties +${TIER} (current market tier) to your 👥 Group units
prop+ by tier mp❤️ Health ($TARGET?Choose a unit.) It gains 📊 Properties +${TIER} (current market tier)
prop+ by tier mp💪 Attack,❤️ Health🎯On combat surviving ($TARGET?Choose a unit.) It gains 📊 Properties +${TIER} (current market tier)
prop+ by tier mp💪 Attack🎯On purchase ($TARGET?Choose a unit.) It gains 📊 Properties +${TIER} (current market tier)
prop+ by tier mp🛡️ Shield ($TARGET?Choose a unit.) It gains 📊 Properties +${TIER} (current market tier)
prop+ random by percentage💪 Attack,❤️ Health🎯On spell use ($TARGET?Choose a unit.) It gains ($HAS_TRAIT? 🧬 Traits and) one of: 📊 Properties + 🔢 Value
prop+ random to group in refuge💪 Attack,❤️ Health,🛡️ Shield🎯On combat surviving⏳-1 Give one of: ($HAS_TRAIT? 🧬 Traits and) 📊 Properties + 🔢 Value to 👥 Group units in the refuge
prop+ random💪 Attack,❤️ Health,🛡️ Shield🎯On spell use ($TARGET?Choose a unit.) It gains ($HAS_TRAIT? 🧬 Traits and) one of: 📊 Properties + 🔢 Value
prop+ to group in refuge❤️ Health🎯On combat surviving⏳-1 Give 📊 Properties + 🔢 Value to 👥 Group units in the refuge
prop+ to group in refuge💪 Attack Give 📊 Properties + 🔢 Value to 👥 Group units in the refuge
prop+ to group in refuge💪 Attack,❤️ Health🎯On kill⏳-1 Give 📊 Properties + 🔢 Value to 👥 Group units in the refuge
prop+ to group in refuge💪 Attack,❤️ Health🎯On purchase Give 📊 Properties + 🔢 Value to 👥 Group units in the refuge
prop+ to group in refuge🛡️ Shield Give 📊 Properties + 🔢 Value to 👥 Group units in the refuge
prop+ to group❤️ Health🎯On round end⏳-1 Give 📊 Properties + 🔢 Value to your 👥 Group units
prop+ to group💪 Attack,❤️ Health🎯On purchase Give 📊 Properties + 🔢 Value to your 👥 Group units
prop+ to group💪 Attack,❤️ Health🎯On spell use Give 📊 Properties + 🔢 Value to your 👥 Group units
prop+ to group💪 Attack🎯On spell use by ally⏳-1 Give 📊 Properties + 🔢 Value to your 👥 Group units
prop+ to group🛡️ Shield Give 📊 Properties + 🔢 Value to your 👥 Group units
prop+ to group🪖 Experience🎯On spell use Give 📊 Properties + 🔢 Value to your 👥 Group units
prop+ to random in group in refuge❤️ Health🎯On hit by ally⏳-1 Give 📊 Properties + 🔢 Value to a random 👥 Group unit in the refuge
prop+ to random in group in refuge💪 Attack Give 📊 Properties + 🔢 Value to a random 👥 Group unit in the refuge
prop+ to random in group in refuge💪 Attack,❤️ Health Give 📊 Properties + 🔢 Value to a random 👥 Group unit in the refuge
prop+ to random in group in refuge🛡️ Shield Give 📊 Properties + 🔢 Value to a random 👥 Group unit in the refuge
prop+ to random in group in refuge🛡️ Shield🎯On hit⏳-1 Give 📊 Properties + 🔢 Value to a random 👥 Group unit in the refuge
prop+ to random in group❤️ Health Give 📊 Properties + 🔢 Value to a random 👥 Group unit
prop+ to random in group💪 Attack,❤️ Health Give 📊 Properties + 🔢 Value to a random 👥 Group unit
prop+ to random in group💪 Attack🎯On deploy Give 📊 Properties + 🔢 Value to a random 👥 Group unit
prop+ to random in group💪 Attack🎯On hit⏳-1 Give 📊 Properties + 🔢 Value to a random 👥 Group unit
prop+ to random in group💪 Attack🎯On kill by ally⏳-1 Give 📊 Properties + 🔢 Value to a random 👥 Group unit
prop+ to random in group💪 Attack🎯On purchase Give 📊 Properties + 🔢 Value to a random 👥 Group unit
prop+ to random in group🛡️ Shield🎯On purchase Give 📊 Properties + 🔢 Value to a random 👥 Group unit
prop+ to random in group🛡️ Shield🎯On sale,On purchase Give 📊 Properties + 🔢 Value to a random 👥 Group unit
prop+ to target in group❤️ Health ($TARGET?Choose a 👥 Group unit:) 📊 Properties + 🔢 Value
prop+ to target in group💪 Attack ($TARGET?Choose a 👥 Group unit:) 📊 Properties + 🔢 Value
prop+ to target in group💪 Attack,❤️ Health ($TARGET?Choose a 👥 Group unit:) 📊 Properties + 🔢 Value
prop+ to target in group🛡️ Shield ($TARGET?Choose a 👥 Group unit:) 📊 Properties + 🔢 Value
prop+❤️ Health🎯On attack boost⏳-1 ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+❤️ Health🎯On purchase ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+❤️ Health🎯On round end⏳-1 ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+❤️ Health🎯On spell use ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💀 Death🎯On death ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💀 Death🎯On spell use ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack,❤️ Health,🛡️ Shield🎯On attack boost⏳-1 ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack,❤️ Health,🛡️ Shield🎯On purchase ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack,❤️ Health🎯On purchase ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack,❤️ Health🎯On purchase ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack,❤️ Health🎯On refuge staying⏳-1 ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack,❤️ Health🎯On spell use ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack,❤️ Health🎯On spell use ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack🎯On attack boost of ally⏳-1 ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack🎯On kill by ally⏳-1 ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack🎯On purchase ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+💪 Attack🎯On spell use ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+🛡️ Shield🎯On purchase ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+🛡️ Shield🎯On spell use ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+🪖 Experience🎯On purchase ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
prop+🪖 Experience🎯On spell use ($TARGET?Choose a unit.) It gains 📊 Properties + 🔢 Value
replace target unit by higher tier unit 🎯On spell use Replace a unit with a random unit of the same type and next tier, keeping its stats except deaths
replace units by random units 🎯On spell use Replace your units with random ones of the same tiers and types
replace units by spirits 🎯On spell use Replaces permanently battlefield units by ephemeral spirit with double stats, they live only 1 turn.
summon 🎯On death🃏Orangoon Twins Summon 🃏 Card to replace this
summon 🎯On death🃏Simian Smogsmash Summon 🃏 Card to replace this
traits+ random to random in group 🎯On turn end,On purchase🧬🌿protection,🔥️protection,💧protection,🌪️️protection⏳-1 Give one of: 🧬 Traits to a random 👥 Group unit
traits+ to random in group 🎯On kill by ally,On purchase🧬💧protection⏳-1 Give 🧬 Traits to a random 👥 Group unit
traits+ to random in group 🎯On turn end🧬🌿protection,🔥️protection,💧protection,🌪️️protection⏳-1 Give 🧬 Traits to a random 👥 Group unit
traits+ 🎯On purchase ($TARGET?Choose a unit.) It gains 🧬 Traits
traits+ 🎯On spell use ($TARGET?Choose a unit.) It gains 🧬 Traits

✴️ Effects

Rounding of the computed values

There is no single rule: every computed value follows the rule of the code that computes it. Rounding “to the nearest” is JavaScript Math.round, which rounds a half up (0.5 gives 1). “Can be 0” means that a small base gives nothing.

✴️ Effect Computation Rounding Minimum
🎖️ Level bonus (each level reached) 25% of the printed 💪 Attack and of the printed ❤️ Health, times the copies nearest 1 each (per copy)
Merge, stat added by a copy 50% of the stat of the card down for an even copy count (Double, Quadruple, Sextuple), up for an odd one (Triple, Quintuple) 0
💥 Damage of a hit 💪 Attack x round doubling x (100 + Dominance/Resonance %) x (100 - Disrupted %) x (100 + damage taken %), over 100 per bracket nearest, once at the end (the damage taken bracket is floored at -100%) 0
Lifesteal 50% of the damage dealt, times the number of Lifesteal nearest 0
Ricochet 50% of the damage of the hit, times the number of Ricochet nearest 0
Backlash 25% of the damage taken nearest 0
💥 Damage routed to another unit the routed damage x (100 + damage taken %) / 100 nearest 0
Poison (each tick) 50% of the current ❤️ Health down 1 (0 only for a unit without ❤️ Health)
💪 Attack transfer / ❤️ Health transfer (on death) 50% of the 💪 Attack / of the ❤️ Health of the card down 0 (a gift of 0 is not given)
⚔️ Combat start effects that change a stat by a percentage (Rested +25% 💪 Attack…) percentage of the current stat nearest, with the sign of the percentage 0 (a small stat gives a change of 0); the result keeps 💪 Attack at 0 or more and ❤️ Health at 1 or more
Cannibalism, gain half of the stat of the prey down 0
Cannibalism, starving the unit loses half of its stat the loss is rounded down the stat never goes below 1
Assimilation 50% of the stat of each target down 0
Unstable Mutation (prop+ random by percentage) VALUE % of the current 💪 Attack or ❤️ Health of the unit, one of the two drawn at random down +1 (a small stat still gains 1)
Return to ashes (get coins from destroyed units) the original cost of each destroyed unit: its tier, times its copies (not its sell value), + 1 coin per destroyed unit - -
🛡️ Shield gained by resting (healing a 💀 Death) (🎖️ Level + ⭐ Tier) / 2 nearest (half up) -
Sell value half of the base cost (the tier) down 1
🔢 Value points of a trait or an effect percent x 7 x tier nearest, then compared with the flat point: the larger in absolute value wins -

🔮 Spells that destroy or mutate

Parameters

Parameter Data type Source 📝 Description
PROPERTIES set of 📌 enum enchantment (props) set of properties: 💪 Attack, ❤️ Health, 🛡️ Shield, 🪖 Experience (and 🎖️ Level, 💀 Death for the spells that use them)
PROPERTY 📌 enum enchantment one property of the set above, when the effect iterates over PROPERTIES
TRAITS set of 📌 enum enchantment (traits) traits granted by the effect
CARD card enchantment (card) the name of a card, when the effect uses a card
GROUP 📌 enum card (fxGroup) all (empty), UnitElement (the 5 elements) or UnitType (the 3 unit types)
VALUE number card (fxValue) any number; a second enchantment of the same card reads fxValue2

✴️ Effect list

🏷️ Name 🎯 Target 📝 Description
cast random spell tier mp Cast on itself a random spell at the current market tier
cast random spell tier x Cast on itself a random spell from tier ${VALUE}
cast spell Cast ${CARD} on itself
cast spell on group Cast ${CARD} on each of your ${GROUP} units
cast spell on random in group Cast ${CARD} on a random ${GROUP} unit
cast spell on target ✅ ($TARGET?Choose a unit.) Cast ${CARD} ($TARGET?on it)
clone target unit ✅ Duplicate unit stats and traits, not its spells
extra on death Your future ‘’ effects will trigger an extra time
extra on deploy Your future ‘’ effects will trigger an extra time
extra on turn end Your future ‘’ effects will trigger an extra time
extra on turn start Your future ‘’ effects will trigger an extra time
get card Get ${CARD}
get coins Get ${VALUE} 🪙
get coins from destroyed units Destroy all units and gain their original value + 1 🪙
get coins random Get a random amount of 🪙 between 2 to 6
get predominant clan unit tier mp Get a random unit at the current market tier of your predominant clan
get random spell tier mp Get a random spell at the current market tier
get random spell tier x Get a random spell from tier ${VALUE}
get random unit in group tier mp Get a random ${GROUP} unit at the current market tier
get random unit in group tier x Get a random ${GROUP} unit from tier ${VALUE}
income+ Increase your income by ${VALUE} 🪙
market card replace by element Whenever you purchase a unit, place a card into the market
market card replace by spell Whenever you purchase a card, place a card into the market
market card replace by type Whenever you purchase a unit, place a card into the market
market excludes cards below tier Market does not offer cards below ⭐ Tier ${VALUE}
market free upgrade Upgrade the marketplace for free
market reduce all units cost Reduce the cost of all units by 1 for this turn only
market reduce next spell cost Reduce cost by ${VALUE} of your next spell
market reduce next unit cost Reduce cost by ${VALUE} of your next unit
market reduce upgrade Reduce cost by ${VALUE} of your next marketplace upgrade
market refresh with spells Refresh the marketplace with spells
market refresh with units Refresh the marketplace with ${GROUP} units
market refresh with units next tier Refresh the marketplace with ${GROUP} units of the next tier
prop amplify spell Your ${PROPERTIES} spells increases by ${VALUE}
prop eat lvp to group Your ${GROUP} units eat your lowest health unit to gain its ${PROPERTIES}
prop eat random Eat one of your unit randomly to gain its ${PROPERTIES} ($HAS_TRAIT?and ${TRAITS})
prop eat random by mvp Your highest 💪 Attack unit eats one of your unit randomly to gain its ${PROPERTIES} ($HAS_TRAIT?and ${TRAITS})
prop eat random in mp Eat random unit from the marketplace to gain its ${PROPERTIES}
prop eat target ✅ ($TARGET?Choose a unit.) Eat it and gain its ${PROPERTIES}
prop equalize attack health Set 💪 Attack and ❤️ Health to the highest value of both
prop give to random in group Give its ${PROPERTIES} to ${VALUE} random ${GROUP} unit(s)
prop transfer to random Transfer its ${PROPERTIES} to a random ${GROUP} unit
prop+ ✅ ($TARGET?Choose a unit.) It gains ${PROPERTIES} +${VALUE}
prop+ by level ✅ ($TARGET?Choose a unit.) It gains ${PROPERTIES} +${LEVEL} (current unit level)
prop+ by level to group Give ${PROPERTIES} +${LEVEL} (current unit level) to your ${GROUP} units
prop+ by level to group in refuge Give ${PROPERTIES} +${LEVEL} (current unit level) to ${GROUP} units in the refuge
prop+ by level to random in group Give ${PROPERTIES} +${LEVEL} (current unit level) to a random ${GROUP} unit
prop+ by level to random in group in refuge Give ${PROPERTIES} +${LEVEL} (current unit level) to a random ${GROUP} unit in the refuge
prop+ by level to target in group ✅ ($TARGET?Choose a ${GROUP} unit:)${PROPERTIES} +${LEVEL} (current unit level)
prop+ by tier mp ✅ ($TARGET?Choose a unit.) It gains ${PROPERTIES} +${TIER} (current market tier)
prop+ by tier mp to group Give ${PROPERTIES} +${TIER} (current market tier) to your ${GROUP} units
prop+ by tier mp to group in refuge Give ${PROPERTIES} +${TIER} (current market tier)to ${GROUP} units in the refuge
prop+ by tier mp to random in group Give ${PROPERTIES} +${TIER} (current market tier) to a random ${GROUP} unit
prop+ by tier mp to random in group in refuge Give ${PROPERTIES} +${TIER} (current market tier) to a random ${GROUP} unit in the refuge
prop+ by tier mp to target in group ✅ ($TARGET?Choose a ${GROUP} unit:)${PROPERTIES} +${TIER} (current market tier)
prop+ random ✅ ($TARGET?Choose a unit.) It gains ($HAS_TRAIT?${TRAITS} and) one of: ${PROPERTIES} +${VALUE}
prop+ random by level ✅ ($TARGET?Choose a unit.) It gains ($HAS_TRAIT?${TRAITS} and) one of: ${PROPERTIES} +${LEVEL} (current unit level)
prop+ random by percentage ✅ ($TARGET?Choose a unit.) It gains ($HAS_TRAIT?${TRAITS} and) one of: ${PROPERTIES} +${VALUE}
prop+ random by tier mp ✅ ($TARGET?Choose a unit.) It gains ($HAS_TRAIT?${TRAITS} and) one of: ${PROPERTIES} +${TIER} (current market tier)
prop+ random to group Give one of: ($HAS_TRAIT?${TRAITS} and) ${PROPERTIES} +${VALUE} to your ${GROUP} units
prop+ random to group in refuge Give one of: ($HAS_TRAIT?${TRAITS} and) ${PROPERTIES} +${VALUE} to ${GROUP} units in the refuge
prop+ random to random in group Give one of: ($HAS_TRAIT?${TRAITS} and) ${PROPERTIES} +${VALUE} to a random ${GROUP} unit
prop+ random to random in group in refuge Give one of: ($HAS_TRAIT?${TRAITS} and) ${PROPERTIES} +${VALUE} to a random ${GROUP} unit in the refuge
prop+ random to target in group ✅ ($TARGET?Choose a ${GROUP} unit.) It gains ($HAS_TRAIT?${TRAITS} and) one of: ${PROPERTIES} +${VALUE}
prop+ to group Give ${PROPERTIES} +${VALUE} to your ${GROUP} units
prop+ to group in refuge Give ${PROPERTIES} +${VALUE} to ${GROUP} units in the refuge
prop+ to random in group Give ${PROPERTIES} +${VALUE} to a random ${GROUP} unit
prop+ to random in group in refuge Give ${PROPERTIES} +${VALUE} to a random ${GROUP} unit in the refuge
prop+ to target in group ✅ ($TARGET?Choose a ${GROUP} unit:)${PROPERTIES} +${VALUE}
prop- to mvp attack unit Inflict ${VALUE} damage to the highest 💪 Attack enemy
prop- to mvp health unit Inflict ${VALUE} damage to the highest ❤️ Health enemy
replace target unit by higher tier unit ✅ Replace a unit with a random unit of the same type and next tier, keeping its stats except deaths
replace units by random units Replace your units with random ones of the same tiers and types
replace units by spirits Replaces permanently battlefield units by ephemeral spirit with double stats, they live only 1 turn.
summon Summon ${CARD} to replace this
traits+ ✅ ($TARGET?Choose a unit.) It gains ${TRAITS}
traits+ random ✅ ($TARGET?Choose a unit.) It gains one of: ${TRAITS}
traits+ random to group Give one of: ${TRAITS} to your ${GROUP} units
traits+ random to group in refuge Give one of: ${TRAITS} to your ${GROUP} units in the refuge
traits+ random to random in group Give one of: ${TRAITS} to a random ${GROUP} unit
traits+ random to random in group in refuge Give one of: ${TRAITS} to a random ${GROUP} unit in the refuge
traits+ random to target in group ✅ ($TARGET?Choose a ${GROUP} unit.) It gains one of: ${TRAITS}
traits+ to group Give ${TRAITS} to your ${GROUP} units
traits+ to group in refuge Give ${TRAITS} to your ${GROUP} units in the refuge
traits+ to random in group Give ${TRAITS} to a random ${GROUP} unit
traits+ to random in group in refuge Give ${TRAITS} to a random ${GROUP} unit in the refuge
traits+ to target in group ✅ ($TARGET?Choose a ${GROUP} unit.) It gains ${TRAITS}

⚡ Triggers

The list of the triggers and the condition required to activate each of them is generated_from_db/TABLE_TRIGGERS.md (generated from the DB).

One-shot triggers

A trigger of an enchantment is consumed when it fires; the enchantment duration (duration, -1 = infinite) is the number of times its triggers can fire. Some triggers are one-shot: On deploy, On purchase, On sale, On spell use and On next turn start are consumed by their first use, whatever the duration of the enchantment (ex: duration 2 with On deploy fires once). The other triggers are recurring: they fire as many times as the duration allows. An infinite duration is never consumed.

Future events

On turn start, On turn end and On next turn start are future events: when a spell is bought or used they cannot fire at once. Only the targetless effects of a spell are attached to the player, and they fire at the next occurrence of the event; the enchantment of the spell card is marked consumed for that trigger. An effect that needs a target unit stays on the unit and fires on its own events. The future triggers of a unit card stay on the unit.

Non-displayed triggers

On purchase and On spell use are not displayed during the play: the effect is obvious because the player has just done the action. Every other trigger is shown to the player when it fires.

BUY, USE and BUY & USE (spells)

The trigger of a spell decides what the player can do with it (COMBAT.md “Using spells”):

⚡ Trigger of the spell Possible actions
On spell use BUY (keep it in the 🏡 Refuge), then USE later; or BUY & USE in the same drag
On purchase only, or only a future event (ex: On next turn start) BUY & USE only: the purchase drag is also the use

On purchase and On spell use never exist on the same card, and On spell use only exists on spell cards. Using a spell (On spell use) also raises On spell use by ally on the units of the player. The preview of the actions of a spell depends on its trigger, NOT on whether a target is required.

Several enchantments on one trigger

When an event happens on a card, its enchantments are processed one after the other, in the order of the card (the order of the DB), each one consumed independently. The enchantments attached to the player (future events) are processed in the order they were attached. The effects are applied in that order, so a later one sees the result of the earlier ones.

Recursion guard

An effect can raise another trigger (ex: a unit in the 🏡 Refuge gains 💪 Attack, which raises On attack boost of ally on the other units, which gain 💪 Attack in turn). To stop the loops the processor remembers the pair trigger + source card being processed: the same trigger from the same source card is ignored while it is already being processed, but a different source card is allowed.

⚡ Trigger list

🏷️ Name 📝 Condition Manual
On combat surviving when it survives a combat
On first hit when it deals damage, once per combat
On first kill when it kills its first enemy per combat
On first wound when it takes damage, once per combat
On next turn start when the next turn starts
On round 1 when the 1st round starts
On round 2 when the 2nd round starts
On deploy when it enters the ⚔️ Battlefield ✅
On deploy of ally when another ${GROUP} unit enters the ⚔️ Battlefield ✅
On purchase when you buy a card ✅
On purchase of ally when you buy a ${GROUP} unit ✅
On sale when you sell it ✅
On sale of ally when you sell a ${GROUP} unit ✅
On spell use when you consume a spell ✅
On spell use by ally when a spell is cast ✅
On attack boost when it increases its 💪 Attack
On attack boost of ally when another ${GROUP} unit increases its 💪 Attack
On combat end when a combat ends
On combat lost if you lost your last combat
On combat start when a combat starts
On death when it dies
On death of ally when another ${GROUP} unit dies
On healing when it recovers some lost ❤️ Health
On healing of ally when another ${GROUP} unit recovers some lost ❤️ Health
On health boost when it increases its ❤️ Health
On health boost of ally when another ${GROUP} unit increases its ❤️ Health
On hit when it deals damage
On hit by ally when another ${GROUP} unit deals damage
On kill when it kills an enemy
On kill by ally when another ${GROUP} unit kills an enemy
On kill of melee when it kills an enemy 🗡 Melee
On kill of shooter when it kills an enemy 🏹 Shooter
On kill of spellcaster when it kills an enemy 🪄 Spellcaster
On lane lost when you lose a 🛣️ Lane
On lane won when you win a 🛣️ Lane
On level up when it increases its 🎖️ Level
On marketplace upgrade when you upgrade the 🧺 Marketplace
On refuge mating when it spends a turn in the 🏡 Refuge with a mate
On refuge staying when it spends a turn in the 🏡 Refuge
On round end when a round ends
On round start when a round starts
On shield boost when it increases its 🛡️ Shield
On shield boost of ally when another ${GROUP} unit increases its 🛡️ Shield
On turn end when a turn ends
On turn start when a turn starts
On wound when it takes damage
On wound of ally when another ${GROUP} unit takes damage

🧬 Traits

The full list of traits (name, Permanent, ±, description, ⚡ Triggers) is generated_from_db/TABLE_TRAITS.md, generated from the DB: it is the reference for the exact values, this file explains the rules.

Concepts

Families

  1. Positive traits (🟢): poisonous, dodge, lifesteal, protections…
  2. Negative traits (🔴): mercenary, cannibalism, hibernation…

A trait held twice

A unit can hold the same trait twice: the first trait of a Triple or more when it is positive (MERGING.md “Merge boost”: a negative first trait is removed instead), or a trait granted by a spell to a unit that has it. The traits with a number add up (dodge, backlash, attack / health transfer, intimidate, lifesteal, fury, ricochet, gifted learner, mentoring, first strike); the other traits count once. A trait that reads ${VALUE} is not held twice by the merge: its VALUE is multiplied instead.

States that are not traits

The short list of the 7 states, with where each one is explained, is the table “🐼 Unit states” of UNITS.md.

These states are computed by the rules from the state of the game or of the battle. They have no row in the DB, no value points, and no spell can give or remove them: a unit never carries them in its traits, so they never show as a trait (the trait icon, the trait notes, the description). The info scroll of the zoomed card explains each one that applies (UNITS.md “🃏 Card details”). Each has one level: on or off, with a flat percentage, the same from any number of sources.

State Derived from ✴️ Effect Shown by
Dominance The element of the attacker beats the one of its target (ELEMENTS.md) 💪+25% damage dealt the combat log and the replay of the hit (+25% Dominance) and the ☯ Element note of the scroll
Resonance Both units of the lane of the attacker share its element (ELEMENTS.md) 💪+25% damage dealt the combat log and the replay, the Resonance note of the scroll
Disrupted A 🏹 Shooter or a 🪄 Spellcaster touching an enemy 🗡 Melee (COMBAT.md) 💪-50% damage dealt the combat log and the replay, the unit type note of the scroll
Rested The unit spent the last 🧹️ Maintenance in the 🏡 Refuge and is deployed (REFUGE.md; “⚔️ Combat start traits”) 💪+25% 💪 Attack for the battle the Rested note of the scroll, the combat log
Injured 3 💀 Deaths or more (COMBAT.md “💀 Deaths”) cannot be deployed or fight, it rests in the 🏡 Refuge the 3 skulls, the dark greyscale combat card, the 💀 Deaths / Injured notes of the scroll
Poisoned Hit by a poisonous unit during the battle (“Round traits”) ❤️-50% of the current ❤️ Health at each round end the combat log and the replay (the poison ticks)

Developing is a tag

The egg stages (Dormant egg, Developing egg, Hatching egg and the 🐸 Frog ones) carry the tag Developing and not a trait: an egg is a kind of card, not a property that a spell could give or take. The tag means that the card (REFUGE.md “Egg chains”): * evolves into the next stage of its chain at each 🧹️ Maintenance it spends in the 🏡 Refuge; * never merges (MERGING.md “Eligibility”); * is exempt from the ❤️ Health share check (UNITS.md). The info scroll of a card with this tag says it (UNITS.md “🃏 Card details”).

❤️ Health share exemptions

The ❤️ Health share check (UNITS.md “❤️ Health share”) skips a card in every one of these cases, and only these:

☯ Element-specific traits

Some traits are specific to an ELEMENT, not to a clan: only the units of these elements may carry them (checked when the cards are loaded). The DB gives them in the ☯ Elements column of the 🧬 Traits table (ex: 🌿️ Earth,🌪️️ Wind).

☯ Element 🧬 Traits
🔥 Fire (🐓 Rooster, 🐱 Cat, 🐉 Dragon) shield piercing, fury, egg layer, cannibalism
💧 Water (🐍 Cobra, 🐖 Pig, 🐸 Frog) poisonous, lifesteal, egg layer, cannibalism
🌿 Earth (🐃 Buffalo, 🐼 Panda, 🐕 Dog) overflow damage, shield piercing, backlash, hibernation, pack instinct, social herding, intimidate
🌪️ Wind (🐇 Rabbit, 🦓 Zebra, 🐒 Monkey) overflow damage, ricochet, fury, half-life revival, gifted learner

The other traits (mentoring, protections, first strike, dodge, the transfers, the mimicries, the assimilations, tribute, taunt, charge…) have no element: every unit may carry them.

Permanent and temporary traits

A trait is either permanent or temporary. The Permanent column of generated_from_db/TABLE_TRAITS.md says which.

Defensive traits

🧬 Trait ✴️ Effect
🔥️ / 💧 / 🌿 / 🌪️️ protection Negates the first damage of ITS element in the battle
dodge 💥 -50% damage taken (deterministic, no chance)
random protection 🔮 Spell only: becomes one of the 4 protections when the spell is used on a unit

Last stand

The first hit of the battle that would kill the unit (an attack, a strike of the combat start or a secondary hit; not the poison) leaves it at 1 ❤️ Health instead: the 🛡️ Shield the hit removed is lost, the unit is not dead (no On kill, no On death, no 💀 Death), and the trait is spent for this battle (the trait stays on the card and is back at the next battle, like a Protection). Any later lethal hit kills it. The step of the replay shows the ❤️ Health 1 and names the trait. A trait given twice counts once.

⚔️ Combat start traits

Resolved once at the start of each lane, before the first round, in this order: player 1 then player 2, by ⚔️ Battlefield slot (front row first), and the traits of a unit in their order. Every effect reads the values at the combat start, before any combat start effect, so the order never changes a result (rested +25% and intimidate -25% on the same unit cancel out). Rested comes after the traits of the unit.

🧬 Trait ✴️ Effect Reads the VALUE
first strike Inflicts damage equal to its level (1 to 5) to the closest enemy no
intimidate The nearest enemy suffers 💪-25% no
social herding ❤️+VALUE for each other member of the clan on the ⚔️ Battlefield yes
pack instinct 💪+VALUE for each other member of the pack (the clan) on the ⚔️ Battlefield yes

Round traits

Resolved at the end of each round of a lane, battle-only (nothing is written to the card), before the Round end enchantments:

  1. Poisoned (state): a unit hit by a poisonous unit is poisoned from that hit until the end of the battle. Poisonous poisons with the first hit that does damage (a hit absorbed by the 🛡️ Shield counts), once per combat, and only the unit it damaged. At each round end a poisoned unit loses 50% of its current ❤️ Health (rounded down, at least 1); it can kill. A death by poison has no killer (no On kill).
  2. The units that died are removed.

The poison is shown as a step of the replay.

Attacker traits

Read when a unit attacks or is wounded; battle-only.

🧬 Trait ✴️ Effect
shield piercing The damage ignores the 🛡️ Shield: the whole damage goes to the ❤️ Health and the 🛡️ Shield is untouched
lifesteal The attacker gains 50% (rounded to the nearest, a trait given twice stacks) of the damage it really inflicted (🛡️ Shield and ❤️ Health removed) as ❤️. There is no ceiling: the ❤️ Health can exceed the maximum. Only the part of the gain that brings the ❤️ Health back up to the ❤️ Health of the start of the lane is a healing (it raises On healing / On healing of ally); a gain above it is a boost. A secondary hit gives nothing
fury The unit gains 💪 equal to the damage it really took (🛡️ Shield and ❤️ Health removed)

Movement and targeting traits

🧬 Trait ✴️ Effect
charge Can attack after move: the unit that has just moved attacks in the same action when an enemy is then in range
taunt Enemies in range must target this unit
last stand Survives the first lethal hit with 1 ❤️ Health, once per combat (see “Defensive traits”)

⟳️ Turn start traits

Resolved at the start of each turn for the units of the ⚔️ Battlefield and of the 🏡 Refuge, in the order of the payments (the ⚔️ Battlefield first, then the 🏡 Refuge, by position), after the income of the turn:

🧬 Trait ✴️ Effect
tribute The player receives VALUE coins (the VALUE of the card; a trait given by an enchantment uses the VALUE of the card that is its source). The coins are received one unit after the other
mercenary The unit costs VALUE coins; a unit that cannot be paid is dismissed (COMBAT.md)

The tributes come before the mercenary fees, so the coins of a tribute can pay a mercenary.

Purchase traits (assimilation)

Resolved once, when the unit that carries the trait is purchased; the change is permanent (the real cards). The unit drains up to 3 random other units of the player (🏡 Refuge or ⚔️ Battlefield; distinct, fewer when the player owns fewer), each trait with its own draws (attack first):

🧬 Trait ✴️ Effect
attack assimilation Each target loses 50% of its 💪 (rounded down) and the drainer gains what was drained
health assimilation Each target loses 50% of its ❤️ - 1 (rounded down; a target keeps at least 1 ❤️) and the drainer gains what was drained

💥 Damage routing traits

No damage crosses lanes. In a lane the cells are a line: behind a unit is the allied unit in the next cell towards the own back; the next enemy after a target is the next living enemy beyond it on the line from the attacker to the target (range ignored; nothing if there is none).

🧬 Trait ✴️ Effect
overflow damage When the target dies, the excess over its remaining 🛡️ Shield + ❤️ Health (❤️ Health only for a 🛡️ Shield piercing attacker) hits the next enemy
ricochet 50% (rounded to the nearest, a trait given twice stacks) of the final damage of the main hit, after the modifiers, hits the next enemy
backlash Redirects 💥25% (rounded to the nearest) of the damage of an attack on the unit back to the attacker: the unit takes the rest

🧬 Traits list

🏷️ Name Permanent ± 📝 Description ⚡ Triggers
attack assimilation ✅ 🟢 Drain and gain <50%> 💪 of up to 3 random ally units On purchase
attack mimicry ✅ 🟢 Copy 💪 from the first ally in the lane On combat start
attack transfer ✅ 🟢 Give <50%> of its 💪 to the first ally in the lane On death
backlash ✅ 🟢 Redirect 💥<25%> back to the attacker On wound
charge ✅ 🟢 Can attack after move
dodge ✅ 🟢 💥<-50%> On first wound
egg layer ✅ 🟢 Give sometimes a card On refuge staying
first strike ✅ 🟢 Inflict damage equals to its level to the closest enemy On combat start
fury ✅ 🟢 Increase 💪 by 💥 taken On first wound
gifted learner ✅ 🟢 🪖<+1> On combat surviving
health assimilation ✅ 🟢 Drain and gain <50%> ❤️-1 of up to 3 random ally units On purchase
health mimicry ✅ 🟢 Copy ❤️ from the first ally in the lane On combat start
health transfer ✅ 🟢 Give <50%> of its ❤️ to the first ally in the lane On death
intimidate ✅ 🟢 Nearest enemy suffers 💪<-25%> On combat start
last stand ✅ 🟢 Survives the first lethal hit with 1 ❤️ Health, once per combat On death
lifesteal ✅ 🟢 Gain 50% of inflicted 💥 to its ❤️ (can exceed max health) On hit
mentoring ✅ 🟢 Give 🪖<+1> to the unit on the right when resting in 🏡 Refuge On refuge staying
overflow damage ✅ 🟢 Unabsorbed damage goes to the next enemy On hit
pack instinct ✅ 🟢 💪<+${VALUE}> for each other member of the clan in ⚔️ Battlefield On combat start
poisonous ✅ 🟢 Poison any unit it damages, once per combat On first hit
random protection ✅ 🟢 Negate random damage once
ricochet ✅ 🟢 💪 Attack also hits the next enemy with 50% of attack On hit
shield piercing ✅ 🟢 💥 Damage ignores shield On hit
social herding ✅ 🟢 ❤️<+${VALUE}> for each other member of the clan in ⚔️ Battlefield On combat start
taunt ✅ 🟢 Enemies in range must target this unit
tribute ✅ 🟢 <+${VALUE}> coins at each turn start On turn start
🌪️️protection ✅ 🟢 Negate 🌪️️damage once On first wound
🌿protection ✅ 🟢 Negate 🌿damage once On first wound
💧protection ✅ 🟢 Negate 💧damage once On first wound
🔥️protection ✅ 🟢 Negate 🔥️damage once On first wound
cannibalism ✅ 🔴 Eat the lowest health ally in the same zone and gain half of ally 💪 and ❤️, if unable to eat, lose half of its 💪 and ❤️ On turn start
ephemeral ✅ 🔴 Vanishes permanently on next turn. On turn start
half-life revival ✅ 🔴 if died last turn, resurrect with only half of its ❤️ Health On turn start
hibernation ✅ 🔴 Must stay ${VALUE} ⟳️ Turn(s) in refuge before deploying
mercenary ✅ 🔴 🪙 Costs ${VALUE} coins at the start of each turn, otherwise it leaves. On turn start

🃏 Card data models

The game knows its cards, enchantments, effects, traits and triggers from JSON data files (frontend/public/*.json, read by the client and by the server through the shared loader). The database holds only a thin copy of the cards (icards) and the instances of a game. This page describes both, as the code has them.

🃏 Card data (cards.json)

Field Used by Data type 📝 Description
id both 🧮 integer identifier in the data
name both 🧾 string name of the card displayed in the game. The label (UPPERCASE_WITH_UNDERSCORES) is computed from it.
type both 🧾 string CardType: 🗡 Melee, 🏹 Shooter, 🪄 Spellcaster or 🔮 Spell (the data writes it with an emoji prefix)
clan both 🧾 string ClanType, absent for a neutral card (the element comes from the clan). A spell can use the clan to extract its element.
tier both 🧾 string “1” to “7” in the data (the code reads it with parseInt); the tier at which the card becomes available in the 🧺 Marketplace
atk unit 🧮 integer 💪 Attack, absent = 0
hp unit 🧮 integer ❤️ Health, absent = 0
def unit 🧮 integer 🛡️ Shield, absent = 0
traits both 🧾 string traits of the unit, comma separated, absent = none
enchantments both 🧾 string names of the enchantments, separated by \| (the names contain commas), absent = none
fxGroup both 🧾 string group used by the effect and the trigger: all (absent), UnitElement or UnitType
fxValue both 🧮 integer value used by the effect; fxValue2 is the value of the second enchantment (only one card has it)
tags both 🧾 string comma separated CardTagType: Breedable, Developing (egg), NotForSale, NotForResell, Inactive, StatExemption
hash both 🧾 string hash of the image of the card

🃏 Card template (database, 🃏 ICard)

🏷️ Name Data type Attributes 📝 Description
🗝 Id 🧾 string primary key internal name (only UPPERCASE and ’_’ characters)
🏷️ Name 🧾 string non-null name of the card displayed in the game
🧬 Type 🧾 string non-null CardType
📝 Comment 🧾 string nullable internal notes (never written by the game)
✏️ Prompt 🧾 string nullable ai prompt used to generate the image (never written by the game)
🖼️ Image 🧮 integer nullable image of the card (never written by the game)
⭐ Tier 🧮 integer non-null tier of the card, 1-7 (the comment of the entity still says 1-6)
🪙 Cost 🧮 integer default=4 legacy: never written nor read, the price is the ⭐ Tier. The default of 4 is stale.
🕯️ Enchantment IEnchantment nullable enchantment to apply (never written by the game)
🔢 Fx Value 🧮 integer nullable used by the effect
👥 Fx Group 🧾 string nullable ELEMENT, CLAN, TYPE or null
🧬 Traits list of 📌 enum nullable never written by the game: the traits come from the data
🗿 Clan 🧾 string nullable ClanType, null for neutral units
💪 Attack 🧮 integer default=1 damage inflicted to a unit when attacking
❤️ Health 🧮 integer default=1 each 💥 Damage point removes one health point, ❤️ Health is fully restored after a combat
🛡️ Shield 🧮 integer default=0 blocks 💥 Damage until depleted, 🛡️ Shield points are permanently lost and not restored after a combat

🃏 Card instance

🏷️ Name Used by Data type Default 📝 Description
🗝 Id both 🧾 string unique (the runtime model has a numeric uid)
⟳️ Turn both 🧮 integer non-null turn at which the card has been bought
🃏 Card both 🃏 ICard (row) / JsonCard (runtime) non-null reference to the immutable template
🎮 Game both 🧮 integer non-null index of the game
👤 Owner both 🧮 integer non-null index of the game player (0-7), row only
🚩 Zone both 📌 enum non-null CardZone (the runtime default is SHOE)
🔢️ Order both 🧮 integer non-null ordered position in the zone
💪 Cur Attack unit 🧮 integer 0 current 💪 Attack (row); attack at runtime
❤️ Cur Health unit 🧮 integer 0 current ❤️ Health (row); health at runtime
💪 Max Attack unit 🧮 integer 0 row only, kept equal to the current 💪 Attack by the runners
❤️ Max Health unit 🧮 integer 0 row only, kept equal to the current ❤️ Health; used for the totals of the ranking
🛡️ Shield unit 🧮 integer 0 current 🛡️ Shield
🪖 Experience unit 🧮 integer 0 XP banked towards the next level, spent on a level up
💀 Deaths unit 🧮 integer 0 times the unit died in a battle and was not healed; 3 or more injure it. Healed by resting in the 🏡 Refuge.
Copies unit 🧮 integer 1 identical units merged into this one (1 = never merged); the stats are the sum of the copies
🏡 Refuge ⟳️ Turns unit 🧮 integer 0 maintenance phases of the current stay in the 🏡 Refuge (Hibernation); 0 outside of it
Range unit 🧮 integer 1 range of the unit when attacking
🎖️ Level unit 🧮 integer 1 at runtime (START_LEVEL); 0 in the row (column default) from 1 to 5. The 💪 Attack boost is a share of the printed stats, see ✴️ Effects. A row saved under the old 9 levels is clamped to 5 when read.
🕯️ Enchantments unit list of MEnchantment enchantments of the unit
🔮 Spells unit list of 🃏 MCard row only: spells cast on the unit (unit points back to the unit)
🏷️ Name Data type Default 📝 Description
Battles 🧮 integer 0 battles in which the unit was on a lane
Kills 🧮 integer 0 enemy units it killed with an attack
💀 Deaths Taken 🧮 integer 0 💀 Deaths ever received in a battle, the healed ones included
🏡 Refuge Spent 🧮 integer 0 maintenance phases ever spent in the 🏡 Refuge

A merge sums the history of the copies. They are kept apart from 💀 Deaths (which heals) and 🏡 Refuge ⟳️ Turns (the current stay).

🕯️ Enchantment template

🏷️ Name Data type Attributes 📝 Description
🗝 Id 🧾 string primary key internal name (only UPPERCASE and ’_’ characters)
🏷️ Name 🧾 string non-null name displayed
✴️ Effect 📌 enum non-null EffectType applied
⚡ Triggers list of 📌 enum nullable decides when to trigger the effect. If none, it is applied instantly when used.
📊 Properties list of 🧾 string nullable properties to modify (💪 Attack, ❤️ Health, 🛡️ Shield, 🪖 Experience…)
⏳ Duration 🧮 integer default=1 for how many turns the effect repeats (-1=infinite, 0=never, 1=default)
⏰ Delay 🧮 integer default=0 legacy: the delay is gone from the design and from the engine; the column is still in the entity
⏳ Cooldown 🧮 integer default=0 legacy: currently unused
🃏 Card 🃏 ICard nullable optional when the effect uses a card
🧬 Traits list of 📌 enum nullable optional when the effect grants traits
📝 Comment 🧾 string nullable internal notes

🕯️ Enchantment instance

🏷️ Name Data type Attributes 📝 Description
🗝 Id 🧾 string primary key
⟳️ Turn 🧮 integer non-null turn at which the enchantment has been bought
🕯️ Enchantment IEnchantment non-null reference to the template
🎮 Game 🧮 integer non-null index of the game
👤 Owner 🧮 integer non-null index of the game player (0-7)
🔢️ Order 🧮 integer non-null ordered position at the unit
🐼 Unit 🃏 MCard nullable the unit it has been cast on
🏁 First Use 🔘 boolean default=true legacy: always written true, absent from the runtime model
⏳ Duration 🧮 integer default=0 counter of the rounds already affected
⏰ Delay 🧮 integer default=0 legacy: “delay and cooldown counter”, always written 0, the design has no delay
Data text (JSON) nullable what the engine needs to rebuild the applied enchantment: source card name, triggers, traits and values given at application, consumed triggers. null = the template alone.

✴️ Effect, ⚡ Trigger, 🧬 Trait

Data Fields in the JSON
✴️ Effect id, name, desc (description, uses PROPERTIES / VALUE / GROUP), target (1 when a target unit is required), point, percent
⚡ Trigger id, name, condition, manual (1 when the event results directly from a player’s action), combat (1 when it is triggered in combat)
🧬 Trait id, name, desc, positive (“+” benefits the player, otherwise harms it), permanent, triggers (one), triggerExplained (Y/N), elements (the elements whose units may carry it), point, percent

Catch-up mechanics

What to avoid

Economy: help rebuild without handing out power

Pity refresh. After a lost duel without winning any lane, your next 🧰 Preparation phase starts with one free 🧺 Marketplace refresh. It’s worth only 1 coin, but it gives the loser a better chance of finding the unit that fixes their board. It’s hard to exploit because the reward is small and it’s about choice rather than stats.

Consolation coin. A player who loses the duel but wins at least one lane gets +2 coins. The payout is tied to partial success, so you can’t farm it by fielding a weak board, and it gives losers a reason to fight for every lane even when the duel is gone. Only the loser gets it; paying per-lane coins to both sides would feed the winner’s snowball instead. The consolation coin can’t fire before turn 5. A loser needs to win at least one lane, which requires three open lanes, so turns 1–4 rely on the 1-coin pity refresh alone.

Underdog market slot. 👤 Players in the bottom half of the ladder see one extra card in the 🧺 Marketplace. This fits especially well because of the shared 📦 Shoe: leaders can buy or hoard the good copies, and an extra slot gives trailing players a fairer chance at what’s left. Tanking to reach the bottom half costs 💚 Vitality you can’t get back, so few players will do it on purpose.

Structure: make leaders slow each other down

Streak bounty. A player on a win streak carries a bounty of 1 coin per consecutive win, capped at 3 or 4. Whoever breaks the streak collects it. This rewards beating the leader rather than losing, so it can’t be exploited, and it adds drama: show the bounty on the 🪜 Ladder and in the Oracle, and players will look forward to drawing the leader.

Comparison

Mechanic Main effect Exploit risk Complexity
Pity refresh More choice after a loss Very low Very low
Consolation coin Economy for partial success Low Very low
Underdog market slot Fairer access to the shared pool Low Low
Streak bounty Punishes runaway leaders None Low

🧩 Board setup

The game screen or board is composed of different “UI elements” that can be shown or hidden depending on the turn phase.

Design principles

Due to the high number of graphics to create, the goal is to leverage the help of generative AI. It is now possible to generate high-quality images in high resolution that do adhere to the prompt requirement.

Rules

The following rules are based on experience using different generative tools.

⚠️ ️Mandatory

❌ To avoid

🗿 Clan

🎵 Audio

All animals will have anthropomorphic sounds where a human mimics the animal sound in different languages (like Cocorico, …). We will favor the most ridiculous ones for fun.