# ryunumchon/monsterhunterturnbased architecture

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

- Interactive diagram: https://gitdiagram.com/ryunumchon/monsterhunterturnbased
- Repository: https://github.com/ryunumchon/monsterhunterturnbased

## Overview

Monster Hunt: Sacred Forest is a browser-based, turn-based hunting game. The player starts in the game runtime, moves through generated field areas, interacts with the world, and enters encounters; battle actions resolve through turn and status mechanics. Hunts feed quest rewards and persistent equipment, inventory, and crafting progression, while UI, pixel art, and synthesized audio present the experience. The graph follows documented imports and README capabilities; several unsampled subsystems are represented by their exact directories, and their internal links are omitted where evidence is unavailable.

Main entry points: [`src/input.js`](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/input.js) (Input Router), [`src/main.js`](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/main.js) (Startup), [`src/game.js`](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/game.js) (Game Flow), [`src/world/field.js`](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/field.js) (Field Movement)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Game Runtime"]
  node_main["Startup<br/>[main.js]"]
  node_input["Input Router<br/>[input.js]"]
  node_game["Game Flow<br/>[game.js]"]
  node_state["Game State<br/>[state.js]"]
end

subgraph group_field["Field Exploration"]
  node_field["Field Movement<br/>[field.js]"]
  node_worlddata["World Layout<br/>[world.js]"]
  node_mapgen["Area Generation<br/>[mapgen.js]"]
  node_spawn["Monster Spawning<br/>[spawn.js]"]
  node_interact["World Interaction<br/>[interact.js]"]
end

subgraph group_hunt["Hunt and Battle"]
  node_encounter["Encounter Setup<br/>[encounter.js]"]
  node_turn["Battle Turns<br/>[turn.js]"]
  node_meter["Timing Meter<br/>[meter.js]"]
  node_status["Status Effects<br/>[status.js]"]
  node_monsters["Monster Data<br/>[monsters.js]"]
end

subgraph group_progress["Progression and Presentation"]
  node_rewards["Quest Rewards<br/>[rewards.js]"]
  node_inventory["Inventory and Crafting<br/>[inventory.js]"]
  node_smith["Smith Services<br/>[smith.js]"]
  node_gear["Gear Effects<br/>[gear.js]"]
  node_save[("Persistent Save<br/>[save.js]")]
  node_dialogue["NPC Dialogue<br/>[dialogue.js]"]
  node_dialog["Menus and Dialog<br/>[dialog.js]"]
  node_hud["HUD<br/>[hud.js]"]
  node_mapui["Map UI<br/>[map.js]"]
  node_render["Field Renderer<br/>[fieldRender.js]"]
  node_art["Pixel Art<br/>[index.js]"]
  node_audio["Synth Audio<br/>[audio8.js]"]
end

node_player(("Player"))

node_player -->|"opens game"| node_main
node_main -->|"registers input"| node_input
node_main -->|"starts flow"| node_game
node_main -->|"initializes"| node_state
node_input -->|"routes movement"| node_field
node_input -->|"routes actions"| node_interact
node_input -->|"starts encounter"| node_encounter
node_input -->|"dispatches battle"| node_turn
node_input -->|"dispatches commands"| node_game
node_field -->|"reads layout"| node_worlddata
node_field -->|"uses generated areas"| node_mapgen
node_field -->|"requests spawns"| node_spawn
node_field -->|"starts hunt"| node_encounter
node_interact -->|"routes NPC talk"| node_dialogue
node_interact -->|"starts encounter"| node_encounter
node_mapgen -->|"reads area rules"| node_worlddata
node_spawn -->|"reads monster data"| node_monsters
node_encounter -->|"loads target data"| node_monsters
node_encounter -->|"starts battle"| node_turn
node_turn -->|"applies effects"| node_status
node_turn -->|"runs timing checks"| node_meter
node_turn -->|"returns to field"| node_field
node_game -->|"awards hunt results"| node_rewards
node_game -->|"manages spawns"| node_spawn
node_game -->|"opens map"| node_mapui
node_rewards -->|"updates progress"| node_save
node_inventory -->|"persists changes"| node_save
node_inventory -->|"equips armor"| node_gear
node_dialogue -->|"offers smith services"| node_smith
node_smith -->|"updates equipment"| node_save
node_dialogue -->|"presents choices"| node_dialog
node_input -->|"opens inventory"| node_inventory
node_main -->|"starts rendering"| node_render
node_render -->|"draws generated map"| node_mapgen
node_render -->|"uses sprites"| node_art
node_main -->|"initializes HUD"| node_hud
node_main -->|"initializes map UI"| node_mapui
node_dialog -->|"sets display mode"| node_hud
node_turn -->|"updates battle display"| node_hud
node_input -->|"triggers sound"| node_audio
node_game -->|"controls music"| node_audio

click node_main "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/main.js"
click node_input "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/input.js"
click node_game "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/game.js"
click node_state "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/core/state.js"
click node_field "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/field.js"
click node_worlddata "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/data/world.js"
click node_mapgen "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/mapgen.js"
click node_spawn "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/spawn.js"
click node_interact "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/interact.js"
click node_encounter "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/battle/encounter.js"
click node_turn "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/battle/turn.js"
click node_meter "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/battle/meter.js"
click node_status "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/battle/status.js"
click node_monsters "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/data/monsters.js"
click node_rewards "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/quest/rewards.js"
click node_inventory "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/inventory.js"
click node_smith "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/npc/smith.js"
click node_gear "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/core/gear.js"
click node_save "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/core/save.js"
click node_dialogue "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/npc/dialogue.js"
click node_dialog "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/ui/dialog.js"
click node_hud "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/ui/hud.js"
click node_mapui "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/ui/map.js"
click node_render "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/ui/fieldRender.js"
click node_art "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/art/index.js"
click node_audio "https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/audio/audio8.js"

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_input,node_game,node_state toneBlue
class node_field,node_worlddata,node_mapgen,node_spawn,node_interact toneAmber
class node_encounter,node_turn,node_meter,node_status,node_monsters toneMint
class node_rewards,node_inventory,node_smith,node_gear,node_save,node_dialogue,node_dialog,node_hud,node_mapui,node_render,node_art,node_audio toneRose
class node_player toneIndigo
```

## Components

### Game Runtime

- [Startup](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/main.js): `src/main.js`
- [Input Router](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/input.js): `src/input.js`
- [Game Flow](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/game.js): `src/game.js`
- [Game State](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/core/state.js): `src/core/state.js`

### Field Exploration

- [Field Movement](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/field.js): `src/world/field.js`
- [World Layout](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/data/world.js): `src/data/world.js`
- [Area Generation](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/mapgen.js): `src/world/mapgen.js`
- [Monster Spawning](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/spawn.js): `src/world/spawn.js`
- [World Interaction](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/interact.js): `src/world/interact.js`

### Hunt and Battle

- [Encounter Setup](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/battle/encounter.js): `src/battle/encounter.js`
- [Battle Turns](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/battle/turn.js): `src/battle/turn.js`
- [Timing Meter](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/battle/meter.js): `src/battle/meter.js`
- [Status Effects](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/battle/status.js): `src/battle/status.js`
- [Monster Data](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/data/monsters.js): `src/data/monsters.js`

### Progression and Presentation

- [Quest Rewards](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/quest/rewards.js): `src/quest/rewards.js`
- [Inventory and Crafting](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/world/inventory.js): `src/world/inventory.js`
- [Smith Services](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/npc/smith.js): `src/npc/smith.js`
- [Gear Effects](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/core/gear.js): `src/core/gear.js`
- [Persistent Save](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/core/save.js): `src/core/save.js`
- [NPC Dialogue](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/npc/dialogue.js): `src/npc/dialogue.js`
- [Menus and Dialog](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/ui/dialog.js): `src/ui/dialog.js`
- [HUD](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/ui/hud.js): `src/ui/hud.js`
- [Map UI](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/ui/map.js): `src/ui/map.js`
- [Field Renderer](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/ui/fieldRender.js): `src/ui/fieldRender.js`
- [Pixel Art](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/art/index.js): `src/art/index.js`
- [Synth Audio](https://github.com/ryunumchon/monsterhunterturnbased/blob/main/src/audio/audio8.js): `src/audio/audio8.js`

### Other components

- **Player**

## Connections

- Player → Startup: opens game
- Startup → Input Router: registers input (evidence: `src/main.js`)
- Startup → Game Flow: starts flow (evidence: `src/main.js`)
- Startup → Game State: initializes (evidence: `src/main.js`)
- Input Router → Field Movement: routes movement (evidence: `src/input.js`)
- Input Router → World Interaction: routes actions (evidence: `src/input.js`)
- Input Router → Encounter Setup: starts encounter (evidence: `src/input.js`)
- Input Router → Battle Turns: dispatches battle (evidence: `src/input.js`)
- Input Router → Game Flow: dispatches commands (evidence: `src/input.js`)
- Field Movement → World Layout: reads layout (evidence: `src/world/field.js`)
- Field Movement → Area Generation: uses generated areas (evidence: `src/world/field.js`)
- Field Movement → Monster Spawning: requests spawns (evidence: `src/world/field.js`)
- Field Movement → Encounter Setup: starts hunt (evidence: `src/world/field.js`)
- World Interaction → NPC Dialogue: routes NPC talk (evidence: `src/world/interact.js`)
- World Interaction → Encounter Setup: starts encounter (evidence: `src/world/interact.js`)
- Area Generation → World Layout: reads area rules (evidence: `src/world/mapgen.js`)
- Monster Spawning → Monster Data: reads monster data (evidence: `src/world/spawn.js`)
- Encounter Setup → Monster Data: loads target data (evidence: `src/battle/encounter.js`)
- Encounter Setup → Battle Turns: starts battle (evidence: `src/battle/turn.js`)
- Battle Turns → Status Effects: applies effects (evidence: `src/battle/turn.js`)
- Battle Turns → Timing Meter: runs timing checks (evidence: `src/battle/turn.js`)
- Battle Turns → Field Movement: returns to field (evidence: `src/battle/turn.js`)
- Game Flow → Quest Rewards: awards hunt results (evidence: `src/game.js`)
- Game Flow → Monster Spawning: manages spawns (evidence: `src/game.js`)
- Game Flow → Map UI: opens map (evidence: `src/game.js`)
- Quest Rewards → Persistent Save: updates progress (evidence: `src/quest/rewards.js`)
- Inventory and Crafting → Persistent Save: persists changes (evidence: `src/world/inventory.js`)
- Inventory and Crafting → Gear Effects: equips armor (evidence: `src/world/inventory.js`)
- NPC Dialogue → Smith Services: offers smith services (evidence: `src/npc/dialogue.js`)
- Smith Services → Persistent Save: updates equipment (evidence: `src/npc/smith.js`)
- NPC Dialogue → Menus and Dialog: presents choices (evidence: `src/npc/dialogue.js`)
- Input Router → Inventory and Crafting: opens inventory (evidence: `src/input.js`)
- Startup → Field Renderer: starts rendering (evidence: `src/main.js`)
- Field Renderer → Area Generation: draws generated map (evidence: `src/ui/fieldRender.js`)
- Field Renderer → Pixel Art: uses sprites (evidence: `src/ui/fieldRender.js`)
- Startup → HUD: initializes HUD (evidence: `src/main.js`)
- Startup → Map UI: initializes map UI (evidence: `src/main.js`)
- Menus and Dialog → HUD: sets display mode (evidence: `src/ui/dialog.js`)
- Battle Turns → HUD: updates battle display (evidence: `src/ui/hud.js`)
- Input Router → Synth Audio: triggers sound (evidence: `src/input.js`)
- Game Flow → Synth Audio: controls music (evidence: `src/game.js`)
