Round 2 Master Card List - UQcsse3200/2026-studio-3 GitHub Wiki

Round 2 Master Card List

Maintainer: Team 6 Member 1.

Task: #160 — Guardian Cards and Card Library Standards

Related pages:

  • Initial Cards
  • Card Data Model
  • Card System Diagrams
  • Guardian Cards
  • Survival Cards
  • Corruption Cards and PIERCE Effect
  • Card Art Specification

Target for Sprint 2: 26 official cards — the 6 Sprint 1 cards plus 20 new cards, four per Team 6 member.

This page records delivery status against that target. It reflects what is actually present in cards.json, not what has been designed or proposed. A card counts as delivered when its configuration is merged, not when its design is agreed.

Last verified: 16 September 2026, against origin/main.

Summary

Count
Sprint 1 cards in config 6
Sprint 2 cards in config 20
Total in config 26
Outstanding 0
Target 26

All 26 official cards are merged to main. Remaining work is presentation, balance and upgrade coverage rather than delivery.

Sprint 1 Cards (6)

These predate Round 2 and are not part of the 20 expansion slots.

ID Cost Type Rarity Target Effects Upgrade
strike 1 ATTACK COMMON SINGLE_ENEMY DAMAGE 6 yes
defend 1 SKILL COMMON SELF BLOCK 5 no
poison_dagger 1 ATTACK UNCOMMON SINGLE_ENEMY DAMAGE 4, POISON 3 (3t) no
expose 1 SKILL UNCOMMON ALL_ENEMIES VULNERABLE 2 (2t) no
inner_focus 2 POWER RARE SELF STRENGTH 2 no
bandage 1 SKILL COMMON SELF HEAL 6 no

All six were regenerated to the current Card Art Specification in commit 3541b6c2.

Guardian — Member 1 (4/4)

ID Cost Type Rarity Target Effects Upgrade
warding_sweep 2 ATTACK COMMON ALL_ENEMIES DAMAGE 4 no
sentinels_rebuke 1 ATTACK UNCOMMON SINGLE_ENEMY DAMAGE 4, FEEBLE 1 (2t) no
wardens_judgement 2 ATTACK UNCOMMON SINGLE_ENEMY DAMAGE 9 no
unseal_the_breach 1 ATTACK UNCOMMON SINGLE_ENEMY SUNDER 3, DAMAGE 2 no

Introduces the SUNDER effect. Details on Guardian Cards; resolution order is diagrammed on Card System Diagrams.

Seal and Restore was withdrawn during design — its block-plus-heal role overlapped with the Survival set — and wardens_judgement took the slot. Sentinel's Stance was replaced by Sentinel's Rebuke in commit edae49fd.

Astral (4/4)

ID Cost Type Rarity Target Effects Upgrade
starfall 2 ATTACK UNCOMMON ALL_ENEMIES DAMAGE 6 no
rift_lance 1 ATTACK UNCOMMON SINGLE_ENEMY DAMAGE 4, VULNERABLE 1 (2t) no
astral_ward 2 SKILL UNCOMMON SELF BLOCK 4, STRENGTH 1, ENERGY_GAIN 1 no
resurrection 5 SKILL RARE SELF HEAL 6 (3t) no

Introduces the ENERGY_GAIN effect.

Corruption (4/4)

ID Cost Type Rarity Target Effects Upgrade
poison_flask 1 SKILL UNCOMMON SINGLE_ENEMY POISON 5 (3t) no
poison_blade 2 ATTACK UNCOMMON SINGLE_ENEMY PIERCE 10, POISON 4 (2t) no
poison_cloud 2 SKILL UNCOMMON ALL_ENEMIES POISON 3 (3t) no
poison_mark 1 SKILL RARE SINGLE_ENEMY VULNERABLE 2 (2t), POISON 2 (2t) no

Introduces the PIERCE effect. Details on Corruption Cards and PIERCE Effect.

Survival — Member 4 (4/4)

ID Cost Type Rarity Target Effects Upgrade
makeshift_shelter 2 SKILL UNCOMMON SELF BLOCK 7, HEAL 3 no
rubble_barricade 2 SKILL UNCOMMON SELF BLOCK 12 no
emergency_salve 2 SKILL UNCOMMON SELF HEAL 10 no
purify 1 SKILL UNCOMMON SELF CLEANSE 1 no

Introduces the CLEANSE effect. Details on Survival Cards.

Forbidden — Member 5 (4/4)

ID Cost Type Rarity Target Effects Upgrade
sealed_pact 3 POWER RARE SELF STRENGTH 3, BLOCK 6 yes
blood_price 3 ATTACK UNCOMMON SINGLE_ENEMY DAMAGE 20 yes
doom_sigil 2 SKILL RARE SINGLE_ENEMY VULNERABLE 1 (2t), POISON 4 (3t) yes
iron_oath 1 SKILL UNCOMMON SELF FORTIFY 4 yes

Introduces the FORTIFY effect. Eclipse Decree was proposed during design but is not in the config; Iron Oath occupies the fourth slot.

The original allocation document suggested drawback-bearing same-target combinations, such as gaining Strength while suffering Poison. The delivered set does not use that pattern — the schema applies one target per card across all of its effects, so a card cannot both benefit the player and debuff the player unless every effect is valid on SELF.

Effect Types in Use

The current EffectType enum has twelve constants.

Effect Uses duration Introduced by
DAMAGE no Sprint 1
BLOCK no Sprint 1
HEAL no Sprint 1
STRENGTH no Sprint 1
POISON yes Sprint 1
VULNERABLE yes Sprint 1
FEEBLE yes Sprint 1
SUNDER no Guardian
PIERCE no Corruption
ENERGY_GAIN no Astral
CLEANSE no Survival
FORTIFY no Forbidden

Cross-Cutting Issues

Status durations do not tick

updateStatusEffects() in CombatStatsComponent (line 462) has no production caller anywhere in source/core/src/main — re-verified 16 September 2026 against origin/main. A TODO in the same class records that it still needs wiring to Team 3's turn event.

POISON, VULNERABLE and FEEBLE therefore do not expire. The following cards are affected and their balance should be treated as provisional until Team 7's #161 lands:

poison_dagger, expose, sentinels_rebuke, poison_flask, poison_blade, poison_cloud, poison_mark, rift_lance, resurrection, doom_sigil

That is ten of the twenty-six cards in the config.

Armour removal is permanent

clearArmour() and resetBlock() have no production call sites, so armour removed by SUNDER does not return at end of turn, and armour granted by FORTIFY persists indefinitely. Same root cause as the duration issue above. The class JavaDoc for CombatStatsComponent documents this explicitly: block is intended to reset once per turn via resetBlock(), but the reset timing is not yet wired up.

Two divergent effect application paths

The same SUNDER handling exists in two separate classes, and they have drifted apart:

  • BattleController line 795 — handles DAMAGE, PIERCE, POISON, VULNERABLE and SUNDER; its default branch is commented as a legacy battle path and silently ignores every other effect type
  • Team1EnemyStateAdapter line 85 — accepts DAMAGE, PIERCE, POISON, VULNERABLE, FEEBLE and SUNDER, and throws IllegalArgumentException for anything else

FEEBLE is accepted by the adapter and silently dropped by the legacy controller. HEAL, BLOCK, STRENGTH, CLEANSE, ENERGY_GAIN and FORTIFY are not handled by the legacy path at all. Which path a card actually takes at runtime determines whether its effects resolve. Raised with Team 5 and Member 2.

Armour interactions overlap

SUNDER removes armour so that subsequent damage lands on health. PIERCE ignores block and armour entirely. FORTIFY adds armour. The three interact in ways worth a deliberate balance comparison rather than by accident:

  • poison_blade deals 10 piercing damage for 2 energy; unseal_the_breach removes 3 armour and deals 2 damage for 1
  • PIERCE gains nothing from SUNDER, because takePiercingDamage() bypasses armour anyway
  • FORTIFY grants armour that currently never decays, per the issue above

Upgrade coverage is uneven

Only 5 of 26 cards define an upgrade block: strike, and all four Forbidden cards. The CardConfig JavaDoc notes that upgrades remain optional while the library is migrated, and that validation may require them for release definitions once every card has one. Twenty-one cards would need upgrade definitions before that becomes enforceable.

Cost efficiency outliers

blood_price deals 20 damage for 3 energy (6.7 per energy), rising to 28 when upgraded. For comparison, wardens_judgement deals 9 for 2 (4.5 per energy) and starfall deals 6 to all enemies for 2. Worth a balance review pass.

Remaining Work

  • upgrade definitions for the 21 cards that lack them
  • full 26-card asset audit — see Card Art Specification
  • rebalance pass once #161 lands and status durations tick
  • resolve the divergence between the two effect application paths with Team 5
  • SUNDER sign-off submission to Team 5