# cerkal/wookster architecture

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

- Interactive diagram: https://gitdiagram.com/cerkal/wookster
- Repository: https://github.com/cerkal/wookster

## Overview

Wookster is a Java 2D adventure game. The player starts the game, explores tile-based levels, interacts with characters and objects, and progresses through quests and combat. Runtime responsibilities span the Swing game entry point, level and tile world, entities and combat, and inventory/progression and presentation. The tree and excerpts establish several interactions, but GamePanel and most subsystem source were not sampled; uncertain wiring is omitted rather than inferred.

Main entry points: [`src/main/java/main/EventHandler.java`](https://github.com/cerkal/wookster/blob/main/src/main/java/main/EventHandler.java) (World events), [`src/main/java/objects`](https://github.com/cerkal/wookster/tree/main/src/main/java/objects) (World objects), [`src/main/java/entity/Player.java`](https://github.com/cerkal/wookster/blob/main/src/main/java/entity/Player.java) (Player entity), [`src/main/java/main/KeyHandler.java`](https://github.com/cerkal/wookster/blob/main/src/main/java/main/KeyHandler.java) (Keyboard handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Game runtime"]
  node_main["Game startup<br/>[Main.java]"]
  node_game_panel["Game panel<br/>[GamePanel.java]"]
  node_key_handler["Keyboard handler<br/>[KeyHandler.java]"]
end

subgraph group_world["World and levels"]
  node_level_manager["Level manager<br/>[LevelManager.java]"]
  node_level_base["Level base<br/>[LevelBase.java]"]
  node_level_content["Level content"]
  node_tile_manager["Tile manager<br/>[TileManager.java]"]
  node_event_handler["World events<br/>[EventHandler.java]"]
end

subgraph group_actors["Actors and combat"]
  node_player_entity["Player entity<br/>[Player.java]"]
  node_npc_entities["NPCs and animals"]
  node_weapons_projectiles["Weapons and projectiles"]
  node_projectile_manager["Projectile manager"]
end

subgraph group_progress["Progression and items"]
  node_game_objects["World objects"]
  node_spells["Spells"]
  node_quest_manager["Quest manager<br/>[QuestManager.java]"]
end

subgraph group_presentation["Player interface"]
  node_ui["Game UI<br/>[UI.java]"]
  node_vendor_screen["Vendor screen<br/>[VendorScreen.java]"]
  node_sprite_manager["Sprite animation<br/>[SpriteManager.java]"]
end

node_player_input(("Player input"))

node_player_input -->|"presses keys"| node_key_handler
node_main -->|"creates and starts"| node_game_panel
node_key_handler -->|"changes game state"| node_game_panel
node_key_handler -->|"opens inventory"| node_ui
node_level_manager -->|"loads, updates, draws"| node_level_base
node_level_base -->|"loads level"| node_level_content
node_level_manager -->|"saves config"| node_game_panel
node_event_handler -->|"chooses hazard tiles"| node_tile_manager
node_event_handler -->|"checks collision; applies effects"| node_player_entity
node_event_handler -->|"displays dialogue"| node_ui
node_event_handler -->|"applies random spell"| node_spells
node_level_content -->|"adds and completes quests"| node_quest_manager
node_game_objects -->|"updates inventory"| node_player_entity
node_game_objects -->|"updates walkability"| node_tile_manager
node_game_objects -->|"stops dialogue"| node_ui
node_game_objects -.->|"opens vendor"| node_vendor_screen
node_player_entity -->|"stores active spells"| node_spells
node_projectile_manager -->|"draws projectiles"| node_weapons_projectiles
node_sprite_manager -->|"selects animation from state"| node_player_entity

click node_main "https://github.com/cerkal/wookster/blob/main/src/main/java/main/Main.java"
click node_game_panel "https://github.com/cerkal/wookster/blob/main/src/main/java/main/GamePanel.java"
click node_key_handler "https://github.com/cerkal/wookster/blob/main/src/main/java/main/KeyHandler.java"
click node_level_manager "https://github.com/cerkal/wookster/blob/main/src/main/java/main/LevelManager.java"
click node_level_base "https://github.com/cerkal/wookster/blob/main/src/main/java/levels/LevelBase.java"
click node_level_content "https://github.com/cerkal/wookster/tree/main/src/main/java/levels"
click node_tile_manager "https://github.com/cerkal/wookster/blob/main/src/main/java/tile/TileManager.java"
click node_player_entity "https://github.com/cerkal/wookster/blob/main/src/main/java/entity/Player.java"
click node_npc_entities "https://github.com/cerkal/wookster/tree/main/src/main/java/entity"
click node_event_handler "https://github.com/cerkal/wookster/blob/main/src/main/java/main/EventHandler.java"
click node_game_objects "https://github.com/cerkal/wookster/tree/main/src/main/java/objects"
click node_weapons_projectiles "https://github.com/cerkal/wookster/tree/main/src/main/java/objects/weapons"
click node_projectile_manager "https://github.com/cerkal/wookster/blob/main/src/main/java/objects/projectiles/ProjectileManager.java"
click node_spells "https://github.com/cerkal/wookster/tree/main/src/main/java/spells"
click node_quest_manager "https://github.com/cerkal/wookster/blob/main/src/main/java/main/QuestManager.java"
click node_ui "https://github.com/cerkal/wookster/blob/main/src/main/java/main/UI.java"
click node_vendor_screen "https://github.com/cerkal/wookster/blob/main/src/main/java/main/VendorScreen.java"
click node_sprite_manager "https://github.com/cerkal/wookster/blob/main/src/main/java/entity/SpriteManager.java"

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_game_panel,node_key_handler toneBlue
class node_level_manager,node_level_base,node_level_content,node_tile_manager,node_event_handler toneAmber
class node_player_entity,node_npc_entities,node_weapons_projectiles,node_projectile_manager toneMint
class node_game_objects,node_spells,node_quest_manager toneRose
class node_ui,node_vendor_screen,node_sprite_manager,node_player_input toneIndigo
```

## Components

### Game runtime

- [Game startup](https://github.com/cerkal/wookster/blob/main/src/main/java/main/Main.java): `src/main/java/main/Main.java`
- [Game panel](https://github.com/cerkal/wookster/blob/main/src/main/java/main/GamePanel.java): `src/main/java/main/GamePanel.java`
- [Keyboard handler](https://github.com/cerkal/wookster/blob/main/src/main/java/main/KeyHandler.java): `src/main/java/main/KeyHandler.java`

### World and levels

- [Level manager](https://github.com/cerkal/wookster/blob/main/src/main/java/main/LevelManager.java): `src/main/java/main/LevelManager.java`
- [Level base](https://github.com/cerkal/wookster/blob/main/src/main/java/levels/LevelBase.java): `src/main/java/levels/LevelBase.java`
- [Level content](https://github.com/cerkal/wookster/tree/main/src/main/java/levels): `src/main/java/levels`
- [Tile manager](https://github.com/cerkal/wookster/blob/main/src/main/java/tile/TileManager.java): `src/main/java/tile/TileManager.java`
- [World events](https://github.com/cerkal/wookster/blob/main/src/main/java/main/EventHandler.java): `src/main/java/main/EventHandler.java`

### Actors and combat

- [Player entity](https://github.com/cerkal/wookster/blob/main/src/main/java/entity/Player.java): `src/main/java/entity/Player.java`
- [NPCs and animals](https://github.com/cerkal/wookster/tree/main/src/main/java/entity): `src/main/java/entity`
- [Weapons and projectiles](https://github.com/cerkal/wookster/tree/main/src/main/java/objects/weapons): `src/main/java/objects/weapons`
- [Projectile manager](https://github.com/cerkal/wookster/blob/main/src/main/java/objects/projectiles/ProjectileManager.java): `src/main/java/objects/projectiles/ProjectileManager.java`

### Progression and items

- [World objects](https://github.com/cerkal/wookster/tree/main/src/main/java/objects): `src/main/java/objects`
- [Spells](https://github.com/cerkal/wookster/tree/main/src/main/java/spells): `src/main/java/spells`
- [Quest manager](https://github.com/cerkal/wookster/blob/main/src/main/java/main/QuestManager.java): `src/main/java/main/QuestManager.java`

### Player interface

- [Game UI](https://github.com/cerkal/wookster/blob/main/src/main/java/main/UI.java): `src/main/java/main/UI.java`
- [Vendor screen](https://github.com/cerkal/wookster/blob/main/src/main/java/main/VendorScreen.java): `src/main/java/main/VendorScreen.java`
- [Sprite animation](https://github.com/cerkal/wookster/blob/main/src/main/java/entity/SpriteManager.java): `src/main/java/entity/SpriteManager.java`

### Other components

- **Player input**

## Connections

- Player input → Keyboard handler: presses keys
- Game startup → Game panel: creates and starts
- Keyboard handler → Game panel: changes game state
- Keyboard handler → Game UI: opens inventory
- Level manager → Level base: loads, updates, draws
- Level base → Level content: loads level
- Level manager → Game panel: saves config
- World events → Tile manager: chooses hazard tiles
- World events → Player entity: checks collision; applies effects
- World events → Game UI: displays dialogue
- World events → Spells: applies random spell
- Level content → Quest manager: adds and completes quests
- World objects → Player entity: updates inventory
- World objects → Tile manager: updates walkability
- World objects → Game UI: stops dialogue
- World objects → Vendor screen: opens vendor
- Player entity → Spells: stores active spells
- Projectile manager → Weapons and projectiles: draws projectiles
- Sprite animation → Player entity: selects animation from state
