# guladam/deck_builder_tutorial architecture

> Architecture diagram of the GitHub repository guladam/deck_builder_tutorial, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/guladam/deck_builder_tutorial
- Repository: https://github.com/guladam/deck_builder_tutorial

## Overview

This is a Godot 4 roguelike deckbuilder tutorial. The apparent player journey is character selection, a run map, room encounters, turn-based card combat, then rewards and further progression. The tree also shows supporting systems for enemy intent, cards and effects, relics, statuses, events, shops, and saved run state. No source excerpts were provided and the README does not describe component interactions, so the flow links below are dashed and have no evidence path; they represent inferred workflow rather than verified calls.

Main entry points: [`scenes/battle/battle.gd`](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/battle/battle.gd) (Battle), [`scenes/map/map.gd`](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/map/map.gd) (Run map), [`custom_resources/run_startup.gd`](https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/run_startup.gd) (Run startup), [`scenes/card_ui/card_ui.gd`](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/card_ui/card_ui.gd) (Card interaction)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_run["Run progression"]
  node_selection["Character selection"]
  node_run_start["Run startup<br/>[run_startup.gd]"]
  node_map["Run map<br/>[map.gd]"]
  node_map_generator["Map generation<br/>[map_generator.gd]"]
  node_event_rooms["Event rooms<br/>[event_room.gd]"]
  node_shop["Shop<br/>[shop.gd]"]
  node_campfire["Campfire<br/>[campfire.gd]"]
  node_treasure["Treasure<br/>[treasure.gd]"]
  node_rewards["Battle rewards<br/>[battle_reward.gd]"]
end

subgraph group_combat["Combat"]
  node_battle["Battle<br/>[battle.gd]"]
  node_player_combat["Player combat<br/>[player.gd]"]
  node_enemy["Enemy behavior<br/>[enemy.gd]"]
  node_card_ui["Card interaction<br/>[card_ui.gd]"]
  node_targeting["Card targeting"]
end

subgraph group_content["Game content"]
  node_effects["Card effects<br/>[damage_effect.gd]"]
  node_card_definitions["Card definitions<br/>[card.gd]"]
  node_relics["Relics<br/>[relic_handler.gd]"]
  node_statuses["Statuses<br/>[status_handler.gd]"]
end

subgraph group_state["Shared state"]
  node_run_state[("Run state<br/>[run_stats.gd]")]
  node_save_game["Save data<br/>[save_game.gd]"]
end

node_player(("Player"))

node_player -.->|"chooses character"| node_selection
node_selection -.->|"starts run"| node_run_start
node_run_start -.->|"enters map"| node_map
node_map -.->|"uses generated map"| node_map_generator
node_player -.->|"selects room"| node_map
node_map -.->|"enters battle"| node_battle
node_map -.->|"enters event"| node_event_rooms
node_map -.->|"enters shop"| node_shop
node_map -.->|"enters campfire"| node_campfire
node_map -.->|"enters treasure"| node_treasure
node_battle -.->|"runs combat"| node_player_combat
node_battle -.->|"runs enemy turns"| node_enemy
node_player -.->|"plays cards"| node_card_ui
node_card_ui -.->|"selects target"| node_targeting
node_card_ui -.->|"uses card data"| node_card_definitions
node_battle -.->|"resolves effects"| node_effects
node_battle -.->|"grants rewards"| node_rewards
node_rewards -.->|"offers cards"| node_card_definitions
node_battle -.->|"uses relics"| node_relics
node_battle -.->|"applies statuses"| node_statuses
node_run_start -.->|"initializes state"| node_run_state
node_battle -.->|"updates state"| node_run_state
node_run_state -.->|"persists state"| node_save_game

click node_selection "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/ui/character_selector.gd"
click node_run_start "https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/run_startup.gd"
click node_map "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/map/map.gd"
click node_map_generator "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/map/map_generator.gd"
click node_event_rooms "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/event_rooms/event_room.gd"
click node_shop "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/shop/shop.gd"
click node_campfire "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/campfire/campfire.gd"
click node_treasure "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/treasure/treasure.gd"
click node_battle "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/battle/battle.gd"
click node_player_combat "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/player/player.gd"
click node_enemy "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/enemy/enemy.gd"
click node_card_ui "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/card_ui/card_ui.gd"
click node_targeting "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/card_target_selector/card_target_selector.gd"
click node_effects "https://github.com/guladam/deck_builder_tutorial/blob/main/effects/damage_effect.gd"
click node_card_definitions "https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/card.gd"
click node_rewards "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/battle_reward/battle_reward.gd"
click node_relics "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/relic_handler/relic_handler.gd"
click node_statuses "https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/status_handler/status_handler.gd"
click node_run_state "https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/run_stats.gd"
click node_save_game "https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/save_game.gd"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_selection,node_run_start,node_map,node_map_generator,node_event_rooms,node_shop,node_campfire,node_treasure,node_rewards toneBlue
class node_battle,node_player_combat,node_enemy,node_card_ui,node_targeting toneAmber
class node_effects,node_card_definitions,node_relics,node_statuses toneMint
class node_run_state,node_save_game toneRose
class node_player toneIndigo
```

## Components

### Run progression

- [Character selection](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/ui/character_selector.gd): `scenes/ui/character_selector.gd`
- [Run startup](https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/run_startup.gd): `custom_resources/run_startup.gd`
- [Run map](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/map/map.gd): `scenes/map/map.gd`
- [Map generation](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/map/map_generator.gd): `scenes/map/map_generator.gd`
- [Event rooms](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/event_rooms/event_room.gd): `scenes/event_rooms/event_room.gd`
- [Shop](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/shop/shop.gd): `scenes/shop/shop.gd`
- [Campfire](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/campfire/campfire.gd): `scenes/campfire/campfire.gd`
- [Treasure](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/treasure/treasure.gd): `scenes/treasure/treasure.gd`
- [Battle rewards](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/battle_reward/battle_reward.gd): `scenes/battle_reward/battle_reward.gd`

### Combat

- [Battle](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/battle/battle.gd): `scenes/battle/battle.gd`
- [Player combat](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/player/player.gd): `scenes/player/player.gd`
- [Enemy behavior](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/enemy/enemy.gd): `scenes/enemy/enemy.gd`
- [Card interaction](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/card_ui/card_ui.gd): `scenes/card_ui/card_ui.gd`
- [Card targeting](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/card_target_selector/card_target_selector.gd): `scenes/card_target_selector/card_target_selector.gd`

### Game content

- [Card effects](https://github.com/guladam/deck_builder_tutorial/blob/main/effects/damage_effect.gd): `effects/damage_effect.gd`
- [Card definitions](https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/card.gd): `custom_resources/card.gd`
- [Relics](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/relic_handler/relic_handler.gd): `scenes/relic_handler/relic_handler.gd`
- [Statuses](https://github.com/guladam/deck_builder_tutorial/blob/main/scenes/status_handler/status_handler.gd): `scenes/status_handler/status_handler.gd`

### Shared state

- [Run state](https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/run_stats.gd): `custom_resources/run_stats.gd`
- [Save data](https://github.com/guladam/deck_builder_tutorial/blob/main/custom_resources/save_game.gd): `custom_resources/save_game.gd`

### Other components

- **Player**

## Connections

- Player → Character selection: chooses character
- Character selection → Run startup: starts run
- Run startup → Run map: enters map
- Run map → Map generation: uses generated map
- Player → Run map: selects room
- Run map → Battle: enters battle
- Run map → Event rooms: enters event
- Run map → Shop: enters shop
- Run map → Campfire: enters campfire
- Run map → Treasure: enters treasure
- Battle → Player combat: runs combat
- Battle → Enemy behavior: runs enemy turns
- Player → Card interaction: plays cards
- Card interaction → Card targeting: selects target
- Card interaction → Card definitions: uses card data
- Battle → Card effects: resolves effects
- Battle → Battle rewards: grants rewards
- Battle rewards → Card definitions: offers cards
- Battle → Relics: uses relics
- Battle → Statuses: applies statuses
- Run startup → Run state: initializes state
- Battle → Run state: updates state
- Run state → Save data: persists state
