Forbidden Cards and FORTIFY Effect - UQcsse3200/2026-studio-3 GitHub Wiki

Overview

The Member 5 Round 2 set for Team 6 contains four cards:

  • Sealed Pact
  • Blood Price
  • Doom Sigil
  • Iron Oath (FORTIFY)

The first three support a Strength/burst line and a poison/control line. Iron Oath is the Round 2 new-effect demonstration card for FORTIFY. Each card has a complete data-driven configuration, optional upgrade values, automated configuration tests and an individual pixel-art illustration without embedded text, cost badges or card frames. Card names, costs and descriptions are rendered separately by the card UI.

Eclipse Decree was removed so the Member 5 set stays at four cards total (matching other Team 6 members).

The implementation is delivered through:

Related work:

Card Collection

Card Cost Target Effects Intended role
Sealed Pact 3 Self Strength 3 + Block 6 Expensive setup for the Strength/burst line
Blood Price 3 Single enemy Damage 20 High-impact attack after Strength setup
Doom Sigil 2 Single enemy Vulnerable 1 (2 turns) + Poison 4 (3 turns) Opens the poison/control line
Iron Oath 1 Self FORTIFY 4 Grants lasting armour (distinct from Block)

Card Artwork

Artwork follows the Team 6 shared Round 2 specification:

  • 4:3 landscape, final size 1024×768 (nearest-neighbour upscale)
  • PNG under 500 KB
  • Illustration only — no baked text, cost, borders or icons
  • Filename equals card ID under source/core/assets/images/cards/

Card Design

Sealed Pact

Sealed Pact is the setup power for the Strength/burst line. Compared with Inner Focus, it costs more energy in exchange for additional Strength and immediate Block.

Upgrade draft: Strength 4 + Block 9.

Blood Price

Blood Price is a high-commitment single-target attack. Its value increases after Sealed Pact because Strength modifies normal Damage resolution.

Upgrade draft: Damage 28.

Doom Sigil

Doom Sigil applies Vulnerable and Poison without dealing immediate damage. It prepares a priority target for follow-up attacks while Poison applies delayed pressure.

Upgrade draft: Vulnerable 2 + Poison 6 (same durations).

Iron Oath

Iron Oath is the representative card for FORTIFY. It grants armour through CombatStatsComponent.addArmor, which is distinct from per-turn Block.

Upgrade draft: FORTIFY 6.

New Effect: FORTIFY

Behaviour

FORTIFY immediately increases the player's armour by a flat amount. It does not create a status-effect entry and does not depend on updateStatusEffects().

Field Definition
usesDuration false (instant; duration must be 0)
Valid targets SELF only
Strength / modifiers Not modified by Strength or CardEffectResolutionContext
Where it writes CombatStatsComponent.armor via addArmor(value)
Stacking No residual FORTIFY state; repeated plays add armour again

Integration

Wired on the player path:

  • EffectType.FORTIFY
  • EffectExecutor both resolveSelfEffect overloads
  • CardValidator.isCompatibleWithTarget (SELF, including upgrade blocks)
  • Team7PlayerStateAdapter (switch + allow-list)
  • BattleController.applyPlayerEffects

Not enemy-facing: Team1EnemyStateAdapter is unchanged for this effect.

Relation to SUNDER

SUNDER reduces enemy armour; FORTIFY grants player armour. Both use the same CombatStatsComponent.armor field and are complementary rather than conflicting.

Deck Strategies

Strength / burst

  1. Play Sealed Pact for Strength and temporary Block.
  2. Play Blood Price on a later turn.
  3. Confirm Strength increases resolved Damage.

Poison / control

  1. Play Doom Sigil on a priority enemy.
  2. Use the Vulnerable window for follow-up attacks.

Armour

  1. Play Iron Oath to gain lasting armour via FORTIFY.
  2. Confirm armour is distinct from per-turn Block.

Test Entry Point

Production reward/shop acquisition remains an external dependency. Until that route is confirmed, use:

PlayerDeck testDeck = PlayerDeckFactory.createForbiddenTestDeck();

The test deck includes sealed_pact, blood_price, doom_sigil and iron_oath. The starter deck is intentionally unchanged.

Verification

Automated coverage includes:

  • ForbiddenCardsTest — config loading, fields and upgrades for all four Member 5 cards
  • FortifyIronOathTest — Iron Oath / FORTIFY config and validation
  • EffectExecutorTest — FORTIFY on SELF; enemy targets rejected
  • Team7PlayerStateAdapterTest — armour increases; block unchanged
  • CardValidatorTest — FORTIFY SELF accepted; enemy-target upgrade rejected
  • PlayerDeckFactoryTest — forbidden test-deck contents

Branch / PR

AI Disclosure

Card illustrations were generated with Cursor image generation using the Team 6 shared Round 2 art prompt, then resized with nearest-neighbour scaling. Card concepts, mechanics, configuration values and final asset selection were reviewed by Zeyu Wang. This use should also be listed in the team AI declaration.