# jeon0121/castlevania architecture

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

- Interactive diagram: https://gitdiagram.com/jeon0121/castlevania
- Repository: https://github.com/jeon0121/castlevania

## Overview

This repository is a Castlevania-style, side-scrolling action game. The player enters through the application loop, which selects and starts a title, stage, or game-over scene; during play, scenes coordinate the character, level geometry, pickups, enemies, and HUD as the player advances. The README also documents stage environments, collision, enemy drops, weapons, and audio. Sampled source confirms application/scene dispatch and several gameplay interactions; some stage-specific wiring is unsampled, so those links are omitted.

Main entry points: [`src/App.cpp`](https://github.com/jeon0121/castlevania/blob/main/src/App.cpp) (App state manager), [`src/State/Scene.cpp`](https://github.com/jeon0121/castlevania/blob/main/src/State/Scene.cpp) (Scene coordinator), [`src/Object/EnemiesManager.cpp`](https://github.com/jeon0121/castlevania/blob/main/src/Object/EnemiesManager.cpp) (Enemy manager), [`src/State/Menu.cpp`](https://github.com/jeon0121/castlevania/blob/main/src/State/Menu.cpp) (Status HUD)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Game runtime"]
  node_main["Application loop<br/>[main.cpp]"]
  node_app["App state manager<br/>[App.cpp]"]
  node_bgm["Background music<br/>[App.hpp]"]
end

subgraph group_scenes["Scenes and stages"]
  node_scene["Scene coordinator<br/>[Scene.cpp]"]
  node_title["Title screen<br/>[Title.cpp]"]
  node_stage0["Stage 0<br/>[Stage0.cpp]"]
  node_stage1["Stage 1<br/>[Stage1.cpp]"]
  node_stage2a["Stage 2A<br/>[Stage2a.cpp]"]
  node_stage2b["Stage 2B<br/>[Stage2b.cpp]"]
  node_stage3["Stage 3<br/>[Stage3.cpp]"]
  node_gameover["Game over<br/>[GG.cpp]"]
end

subgraph group_play["Player and level"]
  node_character["Character control<br/>[Character.cpp]"]
  node_geometry["Level geometry<br/>[Block.hpp]"]
  node_sceneobjects["Level objects"]
end

subgraph group_combat["Enemies and combat"]
  node_enemies["Enemy manager<br/>[EnemiesManager.cpp]"]
  node_enemytypes["Enemy behaviors"]
  node_boss["Phantom Bat boss<br/>[PhantomBat.cpp]"]
end

subgraph group_interface["Items and interface"]
  node_loot["Loot and drops<br/>[Loot.cpp]"]
  node_weapons["Whip and subweapons"]
  node_hud["Status HUD<br/>[Menu.cpp]"]
end

node_player(("Player"))

node_player -->|"plays"| node_main
node_main -->|"runs lifecycle"| node_app
node_app -->|"starts and updates"| node_scene
node_app -->|"selects scene"| node_title
node_app -->|"selects scene"| node_stage0
node_app -->|"selects scene"| node_stage1
node_app -->|"selects scene"| node_stage2a
node_app -->|"selects scene"| node_stage2b
node_app -->|"selects scene"| node_stage3
node_app -->|"selects scene"| node_gameover
node_app -->|"creates and updates"| node_hud
node_app -->|"controls playback"| node_bgm
node_scene -->|"updates gameplay"| node_character
node_scene -->|"checks collisions"| node_geometry
node_scene -->|"updates objects"| node_sceneobjects
node_scene -->|"updates enemies"| node_enemies
node_scene -->|"creates and uses"| node_weapons
node_scene -->|"updates pickups"| node_loot
node_scene -->|"updates status"| node_hud
node_enemies -->|"manages behavior"| node_enemytypes
node_enemies -->|"checks collisions"| node_character
node_enemies -->|"passes collision blocks"| node_geometry
node_enemies -->|"creates drops"| node_loot
node_enemies -->|"updates health"| node_hud
node_boss -->|"checks attacks"| node_character
node_boss -->|"updates health"| node_hud
node_loot -->|"applies pickup"| node_character
node_loot -->|"updates item status"| node_hud

click node_main "https://github.com/jeon0121/castlevania/blob/main/src/main.cpp"
click node_app "https://github.com/jeon0121/castlevania/blob/main/src/App.cpp"
click node_bgm "https://github.com/jeon0121/castlevania/blob/main/include/App.hpp"
click node_scene "https://github.com/jeon0121/castlevania/blob/main/src/State/Scene.cpp"
click node_title "https://github.com/jeon0121/castlevania/blob/main/src/State/Title.cpp"
click node_stage0 "https://github.com/jeon0121/castlevania/blob/main/src/State/Stage0.cpp"
click node_stage1 "https://github.com/jeon0121/castlevania/blob/main/src/State/Stage1.cpp"
click node_stage2a "https://github.com/jeon0121/castlevania/blob/main/src/State/Stage2a.cpp"
click node_stage2b "https://github.com/jeon0121/castlevania/blob/main/src/State/Stage2b.cpp"
click node_stage3 "https://github.com/jeon0121/castlevania/blob/main/src/State/Stage3.cpp"
click node_gameover "https://github.com/jeon0121/castlevania/blob/main/src/State/GG.cpp"
click node_character "https://github.com/jeon0121/castlevania/blob/main/src/Object/Character.cpp"
click node_geometry "https://github.com/jeon0121/castlevania/blob/main/include/Object/Block.hpp"
click node_sceneobjects "https://github.com/jeon0121/castlevania/tree/main/include/Object"
click node_enemies "https://github.com/jeon0121/castlevania/blob/main/src/Object/EnemiesManager.cpp"
click node_enemytypes "https://github.com/jeon0121/castlevania/tree/main/include/Object/Enemies"
click node_boss "https://github.com/jeon0121/castlevania/blob/main/src/Object/Boss/PhantomBat.cpp"
click node_loot "https://github.com/jeon0121/castlevania/blob/main/src/Object/Loot.cpp"
click node_weapons "https://github.com/jeon0121/castlevania/tree/main/include/Object/Subweapon"
click node_hud "https://github.com/jeon0121/castlevania/blob/main/src/State/Menu.cpp"

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_main,node_app,node_bgm toneBlue
class node_scene,node_title,node_stage0,node_stage1,node_stage2a,node_stage2b,node_stage3,node_gameover toneAmber
class node_character,node_geometry,node_sceneobjects toneMint
class node_enemies,node_enemytypes,node_boss toneRose
class node_loot,node_weapons,node_hud,node_player toneIndigo
```

## Components

### Game runtime

- [Application loop](https://github.com/jeon0121/castlevania/blob/main/src/main.cpp): `src/main.cpp`
- [App state manager](https://github.com/jeon0121/castlevania/blob/main/src/App.cpp): `src/App.cpp`
- [Background music](https://github.com/jeon0121/castlevania/blob/main/include/App.hpp): `include/App.hpp`

### Scenes and stages

- [Scene coordinator](https://github.com/jeon0121/castlevania/blob/main/src/State/Scene.cpp): `src/State/Scene.cpp`
- [Title screen](https://github.com/jeon0121/castlevania/blob/main/src/State/Title.cpp): `src/State/Title.cpp`
- [Stage 0](https://github.com/jeon0121/castlevania/blob/main/src/State/Stage0.cpp): `src/State/Stage0.cpp`
- [Stage 1](https://github.com/jeon0121/castlevania/blob/main/src/State/Stage1.cpp): `src/State/Stage1.cpp`
- [Stage 2A](https://github.com/jeon0121/castlevania/blob/main/src/State/Stage2a.cpp): `src/State/Stage2a.cpp`
- [Stage 2B](https://github.com/jeon0121/castlevania/blob/main/src/State/Stage2b.cpp): `src/State/Stage2b.cpp`
- [Stage 3](https://github.com/jeon0121/castlevania/blob/main/src/State/Stage3.cpp): `src/State/Stage3.cpp`
- [Game over](https://github.com/jeon0121/castlevania/blob/main/src/State/GG.cpp): `src/State/GG.cpp`

### Player and level

- [Character control](https://github.com/jeon0121/castlevania/blob/main/src/Object/Character.cpp): `src/Object/Character.cpp`
- [Level geometry](https://github.com/jeon0121/castlevania/blob/main/include/Object/Block.hpp): `include/Object/Block.hpp`
- [Level objects](https://github.com/jeon0121/castlevania/tree/main/include/Object): `include/Object`

### Enemies and combat

- [Enemy manager](https://github.com/jeon0121/castlevania/blob/main/src/Object/EnemiesManager.cpp): `src/Object/EnemiesManager.cpp`
- [Enemy behaviors](https://github.com/jeon0121/castlevania/tree/main/include/Object/Enemies): `include/Object/Enemies`
- [Phantom Bat boss](https://github.com/jeon0121/castlevania/blob/main/src/Object/Boss/PhantomBat.cpp): `src/Object/Boss/PhantomBat.cpp`

### Items and interface

- [Loot and drops](https://github.com/jeon0121/castlevania/blob/main/src/Object/Loot.cpp): `src/Object/Loot.cpp`
- [Whip and subweapons](https://github.com/jeon0121/castlevania/tree/main/include/Object/Subweapon): `include/Object/Subweapon`
- [Status HUD](https://github.com/jeon0121/castlevania/blob/main/src/State/Menu.cpp): `src/State/Menu.cpp`

### Other components

- **Player**

## Connections

- Player → Application loop: plays
- Application loop → App state manager: runs lifecycle
- App state manager → Scene coordinator: starts and updates
- App state manager → Title screen: selects scene
- App state manager → Stage 0: selects scene
- App state manager → Stage 1: selects scene
- App state manager → Stage 2A: selects scene
- App state manager → Stage 2B: selects scene
- App state manager → Stage 3: selects scene
- App state manager → Game over: selects scene
- App state manager → Status HUD: creates and updates
- App state manager → Background music: controls playback
- Scene coordinator → Character control: updates gameplay
- Scene coordinator → Level geometry: checks collisions
- Scene coordinator → Level objects: updates objects
- Scene coordinator → Enemy manager: updates enemies
- Scene coordinator → Whip and subweapons: creates and uses
- Scene coordinator → Loot and drops: updates pickups
- Scene coordinator → Status HUD: updates status
- Enemy manager → Enemy behaviors: manages behavior
- Enemy manager → Character control: checks collisions
- Enemy manager → Level geometry: passes collision blocks
- Enemy manager → Loot and drops: creates drops
- Enemy manager → Status HUD: updates health
- Phantom Bat boss → Character control: checks attacks
- Phantom Bat boss → Status HUD: updates health
- Loot and drops → Character control: applies pickup
- Loot and drops → Status HUD: updates item status
