# wendersondiazx/rewoodpecker architecture

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

- Interactive diagram: https://gitdiagram.com/wendersondiazx/rewoodpecker
- Repository: https://github.com/wendersondiazx/rewoodpecker

## Overview

The repository provides two user-facing parts: Woody PSP Studio converts a PS2 BIN+CUE image into an installable PSP game package, and the PSP runtime runs that game. The runtime’s documented stages include startup/configuration, platform services, game and level logic, rendering, presentation, and audio. The README names vendor gameplay modules that are not present in the supplied file tree or excerpts; they are represented by their documented paths, but their internal calls are not inferred. Edges show only documented or excerpt-supported relationships.

Main entry points: [`woody/runtime/platform_psp.cpp`](https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/platform_psp.cpp) (Platform services), [`woody/runtime/gl_compat.h`](https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/gl_compat.h) (GL compatibility), [`converter/main.cpp`](https://github.com/wendersondiazx/rewoodpecker/blob/main/converter/main.cpp) (Studio UI), [`converter/convert.cpp`](https://github.com/wendersondiazx/rewoodpecker/blob/main/converter/convert.cpp) (Disc converter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_studio["Studio conversion"]
  node_studio_ui["Studio UI<br/>[main.cpp]"]
  node_converter["Disc converter<br/>[convert.cpp]"]
  node_package["PSP game package"]
end

subgraph group_startup["PSP startup"]
  node_launcher["PSP launcher<br/>[launch_psp.cpp]"]
end

subgraph group_game["Game runtime"]
  node_game_entry["Game entry"]
  node_level["Level and collision"]
  node_player["Player and camera"]
  node_scene_objects["Scene objects"]
  node_enemies["Enemies and bosses"]
  node_eko["EKO scripts"]
  node_render_prep["Render preparation"]
  node_hud["HUD"]
  node_audio["Audio"]
  node_media["Legacy media"]
end

subgraph group_platform["PSP services"]
  node_platform["Platform services<br/>[platform_psp.cpp]"]
  node_presentation["Boot and loading"]
  node_gl_frontend["GL compatibility<br/>[gl_compat.h]"]
  node_gu_backend["PSP GU renderer<br/>[native_gu.cpp]"]
end

node_user(("Game owner"))

node_user -->|"selects disc"| node_studio_ui
node_studio_ui -.->|"starts conversion"| node_converter
node_converter -->|"writes package"| node_package
node_user -->|"launches game"| node_launcher
node_launcher -.->|"starts runtime"| node_game_entry
node_game_entry -->|"loads levels"| node_level
node_game_entry -->|"runs gameplay"| node_player
node_game_entry -->|"updates objects"| node_scene_objects
node_game_entry -->|"updates enemies"| node_enemies
node_game_entry -->|"runs scripts"| node_eko
node_game_entry -->|"prepares rendering"| node_render_prep
node_game_entry -->|"updates HUD"| node_hud
node_game_entry -->|"handles sound"| node_audio
node_game_entry -->|"uses media paths"| node_media
node_game_entry -.->|"uses platform services"| node_platform
node_platform -->|"calls presentation"| node_presentation
node_presentation -->|"uses drawing API"| node_gl_frontend
node_platform -->|"uses drawing API"| node_gl_frontend
node_gl_frontend -->|"implemented by"| node_gu_backend

click node_studio_ui "https://github.com/wendersondiazx/rewoodpecker/blob/main/converter/main.cpp"
click node_converter "https://github.com/wendersondiazx/rewoodpecker/blob/main/converter/convert.cpp"
click node_launcher "https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/launch_psp.cpp"
click node_platform "https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/platform_psp.cpp"
click node_presentation "https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/presentation_psp.cpp"
click node_gl_frontend "https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/gl_compat.h"
click node_gu_backend "https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/native_gu.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_studio_ui,node_converter,node_package toneBlue
class node_launcher toneAmber
class node_game_entry,node_level,node_player,node_scene_objects,node_enemies,node_eko,node_render_prep,node_hud,node_audio,node_media toneMint
class node_platform,node_presentation,node_gl_frontend,node_gu_backend toneRose
class node_user toneIndigo
```

## Components

### Studio conversion

- [Studio UI](https://github.com/wendersondiazx/rewoodpecker/blob/main/converter/main.cpp): `converter/main.cpp`
- [Disc converter](https://github.com/wendersondiazx/rewoodpecker/blob/main/converter/convert.cpp): `converter/convert.cpp`
- **PSP game package**

### PSP startup

- [PSP launcher](https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/launch_psp.cpp): `woody/runtime/launch_psp.cpp`

### Game runtime

- **Game entry**
- **Level and collision**
- **Player and camera**
- **Scene objects**
- **Enemies and bosses**
- **EKO scripts**
- **Render preparation**
- **HUD**
- **Audio**
- **Legacy media**

### PSP services

- [Platform services](https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/platform_psp.cpp): `woody/runtime/platform_psp.cpp`
- [Boot and loading](https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/presentation_psp.cpp): `woody/runtime/presentation_psp.cpp`
- [GL compatibility](https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/gl_compat.h): `woody/runtime/gl_compat.h`
- [PSP GU renderer](https://github.com/wendersondiazx/rewoodpecker/blob/main/woody/runtime/native_gu.cpp): `woody/runtime/native_gu.cpp`

### Other components

- **Game owner**

## Connections

- Game owner → Studio UI: selects disc (evidence: `README.md`)
- Studio UI → Disc converter: starts conversion
- Disc converter → PSP game package: writes package (evidence: `converter/convert.cpp`)
- Game owner → PSP launcher: launches game (evidence: `README.md`)
- PSP launcher → Game entry: starts runtime
- Game entry → Level and collision: loads levels (evidence: `README.md`)
- Game entry → Player and camera: runs gameplay (evidence: `README.md`)
- Game entry → Scene objects: updates objects (evidence: `README.md`)
- Game entry → Enemies and bosses: updates enemies (evidence: `README.md`)
- Game entry → EKO scripts: runs scripts (evidence: `README.md`)
- Game entry → Render preparation: prepares rendering (evidence: `README.md`)
- Game entry → HUD: updates HUD (evidence: `README.md`)
- Game entry → Audio: handles sound (evidence: `README.md`)
- Game entry → Legacy media: uses media paths (evidence: `README.md`)
- Game entry → Platform services: uses platform services
- Platform services → Boot and loading: calls presentation (evidence: `woody/runtime/platform_psp.cpp`)
- Boot and loading → GL compatibility: uses drawing API (evidence: `woody/runtime/presentation_psp.cpp`)
- Platform services → GL compatibility: uses drawing API (evidence: `woody/runtime/platform_psp.cpp`)
- GL compatibility → PSP GU renderer: implemented by (evidence: `woody/runtime/native_gu.cpp`)
