# dylan-joyn/krypt-o-key architecture

> Architecture diagram of the GitHub repository dylan-joyn/krypt-o-key, 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/dylan-joyn/krypt-o-key
- Repository: https://github.com/dylan-joyn/krypt-o-key

## Overview

Krypt-o-Key is a Java typing-based fantasy RPG with both a Swing game and a separate console battle entry point. The GUI workflow begins at the title screen, moves through narrated character setup into the game menu, then handles typing challenges, damage, and battle outcomes. Player progression and monster behavior are modeled separately from the interface. The README provides no capability details; the map follows the shown source and module references, so some unsampled implementation relationships are omitted.

Main entry points: [`src/src/BattlePanel.java`](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/BattlePanel.java) (Battle Interface), [`src/src/BattleLogic.java`](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/BattleLogic.java) (Console Battle Logic), [`src/src/Player.java`](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/Player.java) (Player Progression), [`src/src/GameGUI.java`](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/GameGUI.java) (Game Menu)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Startup and Story"]
  node_main["Application Entry<br/>[Main.java]"]
  node_font["Font Loader<br/>[FontLoader.java]"]
  node_title["Title Sequence<br/>[TitleSequence.java]"]
  node_narration["Narration Setup"]
end

subgraph group_gui["Game Interface"]
  node_gamegui["Game Menu<br/>[GameGUI.java]"]
  node_battlepanel["Battle Interface<br/>[BattlePanel.java]"]
  node_monsterimages["Monster Images"]
  node_assets["Game Assets"]
  node_transitions["Transition Effects"]
end

subgraph group_battle["Battle and Typing"]
  node_console["Console Game Entry<br/>[TypingRPG.java]"]
  node_battlelogic["Console Battle Logic<br/>[BattleLogic.java]"]
  node_typing["Typing Challenges<br/>[TimedTyping.java]"]
  node_damage["Damage Calculation"]
end

subgraph group_domain["Game Domain"]
  node_player["Player Progression<br/>[Player.java]"]
  node_monster["Monster Model<br/>[Monster.java]"]
  node_utilities["Game Utilities<br/>[UtilFunc.java]"]
end

node_user(("Player"))

node_user -->|"opens game"| node_title
node_main -->|"loads fonts"| node_font
node_main -->|"shows welcome"| node_title
node_title -->|"opens narration"| node_narration
node_narration -->|"starts game"| node_gamegui
node_narration -->|"creates player"| node_player
node_gamegui -->|"shows battle"| node_battlepanel
node_gamegui -->|"creates monster"| node_monster
node_gamegui -->|"uses player state"| node_player
node_battlepanel -->|"handles typing"| node_typing
node_battlepanel -->|"calculates damage"| node_damage
node_battlepanel -->|"updates monster"| node_monster
node_battlepanel -->|"updates player"| node_player
node_battlepanel -->|"loads imagery"| node_monsterimages
node_battlepanel -->|"uses utilities"| node_utilities
node_console -->|"uses player"| node_player
node_console -->|"starts battles"| node_battlelogic
node_battlelogic -->|"runs challenges"| node_typing
node_battlelogic -->|"calculates damage"| node_damage
node_battlelogic -->|"battles monster"| node_monster
node_battlelogic -->|"updates player"| node_player
node_typing -->|"computes distance"| node_utilities
node_damage -->|"reads typing result"| node_typing
node_monsterimages -->|"reads monster"| node_monster

click node_main "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/Main.java"
click node_font "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/FontLoader.java"
click node_title "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/TitleSequence.java"
click node_narration "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/NarrationScene.java"
click node_gamegui "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/GameGUI.java"
click node_battlepanel "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/BattlePanel.java"
click node_monsterimages "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/MonsterImageLoader.java"
click node_assets "https://github.com/dylan-joyn/krypt-o-key/tree/main/src/resources/assets"
click node_console "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/TypingRPG.java"
click node_battlelogic "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/BattleLogic.java"
click node_typing "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/TimedTyping.java"
click node_damage "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/DamagePerCharacter.java"
click node_transitions "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/TransitionEffects.java"
click node_player "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/Player.java"
click node_monster "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/Monster.java"
click node_utilities "https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/UtilFunc.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_font,node_title,node_narration toneBlue
class node_gamegui,node_battlepanel,node_monsterimages,node_assets,node_transitions toneAmber
class node_console,node_battlelogic,node_typing,node_damage toneMint
class node_player,node_monster,node_utilities toneRose
class node_user toneIndigo
```

## Components

### Startup and Story

- [Application Entry](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/Main.java): `src/src/Main.java`
- [Font Loader](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/FontLoader.java): `src/src/FontLoader.java`
- [Title Sequence](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/TitleSequence.java): `src/src/TitleSequence.java`
- [Narration Setup](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/NarrationScene.java): `src/src/NarrationScene.java`

### Game Interface

- [Game Menu](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/GameGUI.java): `src/src/GameGUI.java`
- [Battle Interface](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/BattlePanel.java): `src/src/BattlePanel.java`
- [Monster Images](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/MonsterImageLoader.java): `src/src/MonsterImageLoader.java`
- [Game Assets](https://github.com/dylan-joyn/krypt-o-key/tree/main/src/resources/assets): `src/resources/assets`
- [Transition Effects](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/TransitionEffects.java): `src/src/TransitionEffects.java`

### Battle and Typing

- [Console Game Entry](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/TypingRPG.java): `src/src/TypingRPG.java`
- [Console Battle Logic](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/BattleLogic.java): `src/src/BattleLogic.java`
- [Typing Challenges](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/TimedTyping.java): `src/src/TimedTyping.java`
- [Damage Calculation](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/DamagePerCharacter.java): `src/src/DamagePerCharacter.java`

### Game Domain

- [Player Progression](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/Player.java): `src/src/Player.java`
- [Monster Model](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/Monster.java): `src/src/Monster.java`
- [Game Utilities](https://github.com/dylan-joyn/krypt-o-key/blob/main/src/src/UtilFunc.java): `src/src/UtilFunc.java`

### Other components

- **Player**

## Connections

- Player → Title Sequence: opens game (evidence: `src/src/TitleSequence.java`)
- Application Entry → Font Loader: loads fonts (evidence: `src/src/Main.java`)
- Application Entry → Title Sequence: shows welcome (evidence: `src/src/Main.java`)
- Title Sequence → Narration Setup: opens narration (evidence: `src/src/TitleSequence.java`)
- Narration Setup → Game Menu: starts game (evidence: `src/src/NarrationScene.java`)
- Narration Setup → Player Progression: creates player (evidence: `src/src/NarrationScene.java`)
- Game Menu → Battle Interface: shows battle (evidence: `src/src/GameGUI.java`)
- Game Menu → Monster Model: creates monster (evidence: `src/src/GameGUI.java`)
- Game Menu → Player Progression: uses player state (evidence: `src/src/GameGUI.java`)
- Battle Interface → Typing Challenges: handles typing (evidence: `src/src/BattlePanel.java`)
- Battle Interface → Damage Calculation: calculates damage (evidence: `src/src/BattlePanel.java`)
- Battle Interface → Monster Model: updates monster (evidence: `src/src/BattlePanel.java`)
- Battle Interface → Player Progression: updates player (evidence: `src/src/BattlePanel.java`)
- Battle Interface → Monster Images: loads imagery (evidence: `src/src/BattlePanel.java`)
- Battle Interface → Game Utilities: uses utilities (evidence: `src/src/BattlePanel.java`)
- Console Game Entry → Player Progression: uses player (evidence: `src/src/TypingRPG.java`)
- Console Game Entry → Console Battle Logic: starts battles (evidence: `src/src/TypingRPG.java`)
- Console Battle Logic → Typing Challenges: runs challenges (evidence: `src/src/BattleLogic.java`)
- Console Battle Logic → Damage Calculation: calculates damage (evidence: `src/src/BattleLogic.java`)
- Console Battle Logic → Monster Model: battles monster (evidence: `src/src/BattleLogic.java`)
- Console Battle Logic → Player Progression: updates player (evidence: `src/src/BattleLogic.java`)
- Typing Challenges → Game Utilities: computes distance (evidence: `src/src/TimedTyping.java`)
- Damage Calculation → Typing Challenges: reads typing result (evidence: `src/src/DamagePerCharacter.java`)
- Monster Images → Monster Model: reads monster (evidence: `src/src/MonsterImageLoader.java`)
