# ominousindustries/opusskate architecture

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

- Interactive diagram: https://gitdiagram.com/ominousindustries/opusskate
- Repository: https://github.com/ominousindustries/opusskate

## Overview

OpusSkate is a single-file C++ street-skating game. The principal workflow is keyboard input into free-skate or timed-session play, where the player rides and performs tricks in a generated city, builds a combo and score, and sees game state through the HUD. The file also contains procedural world, shader, character/NPC, and presentation code. Excerpts are partial, so the graph omits uncertain wiring and does not imply separate modules.

Main entry points: [`skate.cpp`](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp) (3D rendering)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_play["Skating and scoring"]
  node_player["Player controls<br/>[skate.cpp]"]
  node_skate["Ride and tricks<br/>[skate.cpp]"]
  node_combo["Combo scoring<br/>[skate.cpp]"]
  node_session["Session modes<br/>[skate.cpp]"]
end

subgraph group_world["Game world"]
  node_worldgen["City generation<br/>[skate.cpp]"]
  node_worldstate["Collision world<br/>[skate.cpp]"]
  node_obstacles["Skate obstacles<br/>[skate.cpp]"]
  node_npc["NPC paths<br/>[skate.cpp]"]
end

subgraph group_presentation["Rendering and presentation"]
  node_shaders["Scene shaders<br/>[skate.cpp]"]
  node_renderer["3D rendering<br/>[skate.cpp]"]
  node_hud["HUD screens<br/>[skate.cpp]"]
  node_procedural["Generated assets<br/>[skate.cpp]"]
end

subgraph group_runtime["Runtime"]
  node_main["Application entry<br/>[skate.cpp]"]
end

node_sdl["SDL2"]
node_gl["OpenGL"]
node_skater(("Player"))

node_skater -->|"provides input"| node_sdl
node_sdl -->|"input events"| node_player
node_player -->|"controls"| node_skate
node_skate -->|"adds tricks"| node_combo
node_session -->|"tracks score"| node_combo
node_worldgen -->|"adds geometry"| node_worldstate
node_worldgen -->|"places features"| node_obstacles
node_npc -->|"samples paths"| node_worldstate
node_renderer -->|"uses"| node_shaders
node_renderer -->|"renders scene"| node_worldstate
node_renderer -->|"draws with"| node_gl
node_procedural -->|"supplies assets"| node_renderer
node_hud -->|"shows score"| node_session
node_main -->|"uses"| node_sdl
node_main -->|"runs"| node_renderer
node_main -->|"updates screens"| node_hud

click node_player "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_skate "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_combo "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_session "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_worldgen "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_worldstate "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_obstacles "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_npc "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_shaders "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_renderer "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_hud "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_procedural "https://github.com/ominousindustries/opusskate/blob/main/skate.cpp"
click node_main "https://github.com/ominousindustries/opusskate/blob/main/skate.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_player,node_skate,node_combo,node_session toneBlue
class node_worldgen,node_worldstate,node_obstacles,node_npc toneAmber
class node_shaders,node_renderer,node_hud,node_procedural toneMint
class node_main toneRose
class node_sdl,node_gl,node_skater toneIndigo
```

## Components

### Skating and scoring

- [Player controls](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [Ride and tricks](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [Combo scoring](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [Session modes](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`

### Game world

- [City generation](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [Collision world](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [Skate obstacles](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [NPC paths](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`

### Rendering and presentation

- [Scene shaders](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [3D rendering](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [HUD screens](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`
- [Generated assets](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`

### Runtime

- [Application entry](https://github.com/ominousindustries/opusskate/blob/main/skate.cpp): `skate.cpp`

### Other components

- **SDL2**
- **OpenGL**
- **Player**

## Connections

- Player → SDL2: provides input
- SDL2 → Player controls: input events
- Player controls → Ride and tricks: controls
- Ride and tricks → Combo scoring: adds tricks
- Session modes → Combo scoring: tracks score
- City generation → Collision world: adds geometry
- City generation → Skate obstacles: places features
- NPC paths → Collision world: samples paths
- 3D rendering → Scene shaders: uses
- 3D rendering → Collision world: renders scene
- 3D rendering → OpenGL: draws with
- Generated assets → 3D rendering: supplies assets
- HUD screens → Session modes: shows score
- Application entry → SDL2: uses
- Application entry → 3D rendering: runs
- Application entry → HUD screens: updates screens
