Initial Cards - UQcsse3200/2026-studio-3 GitHub Wiki

Initial Cards

Sprint 1 starter set for Team 6 (Feature #5). These six cards ship in source/core/assets/configs/cards.json and are used to exercise the full load → validate → register → retrieve path.

Related pages:

Sprint Grouping → CardType Mapping

Member5 deliverables describe the set as 2 Attack / 2 Defence / 2 Utility. The data model uses Slay the Spire-style CardType values (ATTACK, SKILL, POWER, STATUS, CURSE). Mapping used for the initial set:

Sprint group Count Card IDs CardType Typical effects
Attack 2 strike, poison_dagger ATTACK DAMAGE (+ optional POISON)
Defence 2 defend, bandage SKILL BLOCK, HEAL
Utility 2 expose, inner_focus SKILL / POWER VULNERABLE, STRENGTH

Card category stays separate from effects: a card's type does not restrict which effect types it may carry.

The Six Cards

ID Name Cost Type Rarity Target Effects Texture
strike Strike 1 ATTACK COMMON SINGLE_ENEMY DAMAGE 6 images/cards/strike.png
poison_dagger Poison Dagger 1 ATTACK UNCOMMON SINGLE_ENEMY DAMAGE 4; POISON 3 for 3 turns images/cards/poison_dagger.png
defend Defend 1 SKILL COMMON SELF BLOCK 5 images/cards/defend.png
bandage Bandage 1 SKILL COMMON SELF HEAL 6 images/cards/bandage.png
expose Expose 1 SKILL UNCOMMON ALL_ENEMIES VULNERABLE 2 for 2 turns images/cards/expose.png
inner_focus Inner Focus 2 POWER RARE SELF STRENGTH 2 (rest of combat) images/cards/inner_focus.png

Descriptions and texture paths are temporary placeholders where final art/copy is not ready yet.

Testing Procedure

Automated end-to-end

From the source/ directory:

./gradlew core:test --tests 'com.csse3200.game.cards.CardsEndToEndTest'

CardsEndToEndTest covers:

  1. Load the real configs/cards.json through CardConfigLoader
  2. Register all loaded configs into CardLibrary
  3. Retrieve all six cards by ID
  4. Assert key fields for Attack / Defence / Utility groups
  5. Confirm unknown IDs return Optional.empty()

Also run the full card suite before merging:

./gradlew core:test --tests 'com.csse3200.game.cards.*'

Manual smoke check (optional)

List<CardConfig> cards = CardConfigLoader.loadCards();
CardLibrary library = new CardLibrary(cards);

library.getCard("strike").orElseThrow();
library.getAllCards().size(); // expect 6
library.getCard("nonexistent").isEmpty(); // expect true

Known Limitations

  • Only six cards are defined for Sprint 1 integration and testing.
  • Texture files under images/cards/ may not exist yet; paths are reserved for later asset work.
  • Descriptions are temporary and may change with design / Team 5 combat balancing.
  • The set includes only one POWER card (inner_focus). STATUS and CURSE have no initial representatives.
  • Runtime card entities (hand, draw pile, play resolution) are outside this page; ownership is coordinated with Team 5.
  • Energy, damage, and status-effect semantics must stay compatible with Team 7 player/status representations.

Regression Checklist (before merge to main)

  • configs/cards.json still contains exactly these six unique IDs
  • ./gradlew core:test passes, including CardsEndToEndTest
  • Card Library API docs still match public method names (getCard, getAllCards)
  • Cross-team notes for Team 5 / Team 7 are recorded on Feature #5 or linked issues
⚠️ **GitHub.com Fallback** ⚠️