# firminpangolin/roguelike architecture

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

- Interactive diagram: https://gitdiagram.com/firminpangolin/roguelike
- Repository: https://github.com/firminpangolin/roguelike

## Overview

This repository implements a Raylib room-based shooter. The principal workflow is a game loop that updates the player, advances bullets and enemies, resolves collisions and room progression, then refreshes the display. The graph separates those gameplay stages from shared world and room state. Source excerpts show the loop and several event/player behaviors; initialization, enemy movement, and rendering details are only partially sampled, so their internal relationships are not expanded.

Main entry points: [`src/main.c`](https://github.com/firminpangolin/roguelike/blob/main/src/main.c) (Game loop), [`src/player.c`](https://github.com/firminpangolin/roguelike/blob/main/src/player.c) (Player control), [`src/bullet.c`](https://github.com/firminpangolin/roguelike/blob/main/src/bullet.c) (Bullet management), [`src/events.c`](https://github.com/firminpangolin/roguelike/blob/main/src/events.c) (Bullet simulation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_loop["Game loop"]
  node_main["Game loop<br/>[main.c]"]
  node_bullet_update["Bullet simulation<br/>[events.c]"]
  node_combat["Collision resolution<br/>[events.c]"]
end

subgraph group_actors["Combat entities"]
  node_player["Player control<br/>[player.c]"]
  node_bullets["Bullet management<br/>[bullet.c]"]
  node_enemies["Enemy behavior<br/>[ennemy.c]"]
end

subgraph group_rooms["Room progression"]
  node_room_exit["Room navigation<br/>[events.c]"]
  node_room_clear["Room completion<br/>[events.c]"]
  node_room_map["Room topology<br/>[room.c]"]
end

subgraph group_display["World and display"]
  node_world["World state<br/>[world.c]"]
  node_renderer["Graphics refresh<br/>[graphics.c]"]
end

node_user(("Keyboard player"))

node_user -->|"provides input"| node_player
node_main -->|"initializes state"| node_world
node_main -->|"updates control"| node_player
node_main -->|"updates bullets"| node_bullet_update
node_main -->|"checks exits"| node_room_exit
node_main -->|"updates enemies"| node_enemies
node_main -->|"checks collisions"| node_combat
node_main -->|"checks completion"| node_room_clear
node_main -->|"refreshes display"| node_renderer
node_player -->|"creates shots"| node_bullets
node_bullet_update -->|"frees offscreen"| node_bullets
node_combat -->|"removes hit shots"| node_bullets
node_room_exit -->|"spawns room enemies"| node_enemies
node_world -->|"stores room links"| node_room_map

click node_main "https://github.com/firminpangolin/roguelike/blob/main/src/main.c"
click node_player "https://github.com/firminpangolin/roguelike/blob/main/src/player.c"
click node_bullets "https://github.com/firminpangolin/roguelike/blob/main/src/bullet.c"
click node_enemies "https://github.com/firminpangolin/roguelike/blob/main/src/ennemy.c"
click node_bullet_update "https://github.com/firminpangolin/roguelike/blob/main/src/events.c"
click node_combat "https://github.com/firminpangolin/roguelike/blob/main/src/events.c"
click node_room_exit "https://github.com/firminpangolin/roguelike/blob/main/src/events.c"
click node_room_clear "https://github.com/firminpangolin/roguelike/blob/main/src/events.c"
click node_room_map "https://github.com/firminpangolin/roguelike/blob/main/src/room.c"
click node_world "https://github.com/firminpangolin/roguelike/blob/main/src/world.c"
click node_renderer "https://github.com/firminpangolin/roguelike/blob/main/src/graphics.c"

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_bullet_update,node_combat toneBlue
class node_player,node_bullets,node_enemies toneAmber
class node_room_exit,node_room_clear,node_room_map toneMint
class node_world,node_renderer toneRose
class node_user toneIndigo
```

## Components

### Game loop

- [Game loop](https://github.com/firminpangolin/roguelike/blob/main/src/main.c): `src/main.c`
- [Bullet simulation](https://github.com/firminpangolin/roguelike/blob/main/src/events.c): `src/events.c`
- [Collision resolution](https://github.com/firminpangolin/roguelike/blob/main/src/events.c): `src/events.c`

### Combat entities

- [Player control](https://github.com/firminpangolin/roguelike/blob/main/src/player.c): `src/player.c`
- [Bullet management](https://github.com/firminpangolin/roguelike/blob/main/src/bullet.c): `src/bullet.c`
- [Enemy behavior](https://github.com/firminpangolin/roguelike/blob/main/src/ennemy.c): `src/ennemy.c`

### Room progression

- [Room navigation](https://github.com/firminpangolin/roguelike/blob/main/src/events.c): `src/events.c`
- [Room completion](https://github.com/firminpangolin/roguelike/blob/main/src/events.c): `src/events.c`
- [Room topology](https://github.com/firminpangolin/roguelike/blob/main/src/room.c): `src/room.c`

### World and display

- [World state](https://github.com/firminpangolin/roguelike/blob/main/src/world.c): `src/world.c`
- [Graphics refresh](https://github.com/firminpangolin/roguelike/blob/main/src/graphics.c): `src/graphics.c`

### Other components

- **Keyboard player**

## Connections

- Keyboard player → Player control: provides input (evidence: `src/player.c`)
- Game loop → World state: initializes state (evidence: `src/main.c`)
- Game loop → Player control: updates control (evidence: `src/main.c`)
- Game loop → Bullet simulation: updates bullets (evidence: `src/main.c`)
- Game loop → Room navigation: checks exits (evidence: `src/main.c`)
- Game loop → Enemy behavior: updates enemies (evidence: `src/main.c`)
- Game loop → Collision resolution: checks collisions (evidence: `src/main.c`)
- Game loop → Room completion: checks completion (evidence: `src/main.c`)
- Game loop → Graphics refresh: refreshes display (evidence: `src/main.c`)
- Player control → Bullet management: creates shots (evidence: `src/player.c`)
- Bullet simulation → Bullet management: frees offscreen (evidence: `src/events.c`)
- Collision resolution → Bullet management: removes hit shots (evidence: `src/events.c`)
- Room navigation → Enemy behavior: spawns room enemies (evidence: `src/events.c`)
- World state → Room topology: stores room links
