All skills
thedivergentai avatar

/godot-genre-card-game

@9d6e91e

Expert blueprint for digital card games (CCG/Deckbuilders) including card data structures (Resource-based), deck management (draw/discard/reshuffle), turn logic, hand layout (arcing), drag-and-drop UI, effect resolution (Command pattern), and visual polish (godot-tweening, shaders). Use for CCG, deckbuilders, or tactical card games. Trigger keywords: card_game, deck_manager, card_data, hand_layout, drag_drop_cards, effect_resolution, command_pattern, draw_pile, discard_pile.

Use this Skill: https://skilld.dev/gh/thedivergentai/gd-agentic-skills/godot-genre-card-game

This session only. Nothing lands on disk.

SKILL.md

β‰ˆ126 tokens always: the name and description. β‰ˆ3k when used: this file. β‰ˆ2.3k more on demand in 2 files.

NEVER Do (Expert Anti-Patterns)

Logic & Architecture

  • NEVER hardcode card logic inside UI scripts; strictly encapsulate gameplay effects in Callable objects or Command resources pushed to a LIFO stack.
  • NEVER perform board-state calculations (Power/Toughness) in _process(); strictly use Signal-driven triggers or a centralized EffectStack resolver.
  • NEVER forget LIFO Stack Resolution; strictly use Array.push_back() and Array.pop_back() to resolve reactions from top-to-bottom.

UX & Animation

  • NEVER skip Z-Index management during drag-and-drop; strictly raise the card to the front on click to prevent it sliding under other cards.
  • NEVER allow instant card "teleportation" between piles; strictly use create_tween() / tween_property chains (0.2s+) for pile moves.
  • NEVER use global_position for cards in hand; strictly position them using a Curve2D layout with sample_baked() for smooth arcs.

Deck & State Management

  • NEVER forget to handle Empty Deck scenarios; strictly implement auto-reshuffle of the discard pile to prevent soft-locks.
  • NEVER use floating point numbers for discrete card stats; strictly use int for Costs, Attack, and Health to avoid precision drift.
  • NEVER use standard Control nodes for mass tokens/battlefields; strictly use _draw() custom drawing to bypass SceneTree overhead when rendering 100+ cards or map icons.
  • NEVER rely on SceneTree order for hand logic; strictly manage logical order in an Array and update visuals via queue_redraw().
  • NEVER erase array elements during a standard for loop; strictly iterate in reverse or use filter() to avoid indexing errors.
  • NEVER forget to provide parameterless constructors in _init(); otherwise, Resources will fail to load in the Inspector.

πŸ›  Expert Components (scripts/)

MANDATORY reads before implementing the matching system:

  1. card_effect_resolution.gd β€” LIFO effect stack (push_back / pop_back)
  2. card_tween_manager.gd β€” interruptible pile/hand Tweens (no teleports)
  3. card_data_resource.gd β€” Inspector-safe Resource card definitions

Original Expert Patterns

Modular Components


Core Loop

  1. Draw β†’ 2. Evaluate β†’ 3. Play β†’ 4. Resolve (LIFO stack) β†’ 5. Discard/End

Decision Trees

Effect stack

Need Action
Nested reactions / counters MANDATORY card_effect_resolution.gd β€” LIFO only (pop_back)
FIFO sequential animations only Rare; keep a separate queue β€” do not reuse the reaction stack

Hand & board

Need Action
Arc hand layout Curve2D.sample_baked + card_tween_manager.gd
Drag targeting card_drag_drop.gd
Dense boards (100+ icons) _draw() / board_state_dictionary.gd β€” not Control-per-token

Data

Need Action
Card definitions MANDATORY card_data_resource.gd (parameterless _init)
Deck RNG deck_shuffle_bag.gd
Turn phases turn_state_machine.gd

Skill Chain

Phase Skills Purpose
1. Data resources, custom-resources Card properties (Cost, Type, Effect)
2. UI control-nodes, layout-containers Hand layout, tooltips
3. Input drag-and-drop, state-machines Targeting, hovering
4. Logic command-pattern, signals LIFO stack, turn phases
5. Polish godot-tweening, shaders Draw juice, foils

Common Pitfalls

Pitfall Solution
FIFO pop_front on reaction stack Use LIFO pop_back in card_effect_resolution.gd
Instant pile snaps Tween via card_tween_manager.gd
Float ATK/HP Use int stats on Resources

Elite notes (optional polish)

  • Holographic foil: UV scroll shader on card Control β€” not required for stack correctness.
  • Card history: signal bus logger for replay/debug; keep off the hot resolve path.

Expert knowledge (on demand)

LLM-ignorance rule: If a general agent would not know it before reading, load the reference β€” never delete expert deltas.

Reference

Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain β€” do not preload the whole lattice.

Official Documentation

  • Resources β€” CardData as .tres Resources so designers edit cost/stats without touching UI scripts.
  • GDScript exports β€” @export / @export_group patterns that drive Inspector-authored card definitions.
  • Control β€” _get_drag_data / _can_drop_data / _drop_data and set_drag_preview for native card drag-and-drop.
  • Custom GUI controls β€” building interactive card faces with _gui_input, mouse_filter, and _draw for dense boards.
  • Size and anchors β€” anchoring hand/board zones so layouts survive resolution changes.
  • Using Containers β€” when HBox/Grid help deck-builder grids vs manual hand arcing.
  • Tween β€” interruptible create_tween() / tween_property juice for draw, play, and discard moves.
  • Beziers, curves and paths β€” math behind arcing hand layouts instead of circular fudge factors.
  • Curve2D β€” sample_baked() for smooth non-circular fan positions and rotations.
  • Random number generation β€” seeded RNG and shuffle-bag fairness for draw piles.
  • Using signals β€” Resource changed and effect-stack signals that keep UI reactive without _process polling.
  • Your first 2D shader β€” canvas_item foil/rarity shaders on card faces.

Related Skills

Prerequisites
  • godot-project-foundations β€” scene tree, Autoloads, and import basics before wiring DeckManager and card scenes.
  • godot-resource-data-patterns β€” .tres ownership, duplication, and emit_changed so match buffs never leak into authored card files.
  • godot-gdscript-mastery β€” typed Arrays, Callables/Commands, and match phases used by effect stacks and turn machines.
  • godot-ui-containers β€” Control layout, anchors, and mouse_filter habits required for hand/board hit-testing.
Complements
  • godot-tweening β€” kill/parallel Tween patterns so rapid plays do not teleport or stack dead tweens.
  • godot-signal-architecture β€” bus/signal graphs for draw, play, resolve, and discard without UI owning game rules.
  • godot-input-handling β€” pointer vs action maps when cards share the viewport with keyboard shortcuts and accessibility drag.
  • godot-turn-system β€” Draw/Main/Combat/End phase ownership that this skill's turn state machine plugs into.
  • godot-shaders-basics β€” canvas_item rarity foils and highlight materials beyond the skill's starter hologram snippet.
Downstream / consumers
  • godot-monte-carlo-balancer β€” simulate mulligans, mana curves, and win-rate vs cost/power so card stats stay fair under RNG.
  • godot-genre-roguelike β€” run-based deckbuilders that consume CardData, shops, and per-act draft pools.
  • godot-inventory-system β€” collection/deck-builder UIs that persist owned cards separately from the in-match piles.
  • godot-ability-system β€” keyword/status effects (Poison, Taunt, Shield) resolved as reusable ability resources on the stack.
Master
  • godot-master β€” library router and mirrored module entry for cross-skill discovery.

Source: SKILL.md on GitHub

2 warnings16d4 checks Β· Risk MEDIUM
  • Gen Agent Trust Hub16d

    The skill provides a framework for creating digital card games in Godot. It utilizes a Resource-based architecture that allows gameplay logic to be defined in scripts attached to data files. While this is a common game development pattern, it introduces a dynamic execution vector if the game loads resources from untrusted sources. The skill also processes card metadata which lacks sanitization, presenting a surface for indirect prompt injection.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW Β· No issues

  • Runlayer7mo

    3/3 files flagged

Signed by skilld at 9d6e91e. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 weeks ago.

Activeupdated 2 months ago

README badge

README badge for thedivergentai/gd-agentic-skills/godot-genre-card-game