# belisarius7487/fs3 architecture

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

- Interactive diagram: https://gitdiagram.com/belisarius7487/fs3
- Repository: https://github.com/belisarius7487/fs3

## Overview

This repository contains a browser-based FreeSpace-inspired space-combat game, with a separate 2.5D rendering draft and Python tools for converting POF models into web assets. The principal workflow is piloting a ship through campaign waves, combat, and mission events while the game renders the world and presents HUD controls. The tree and excerpts identify these capabilities, but provide little direct runtime wiring evidence; gameplay connections below are therefore dashed and unverified. The README is empty, and unsampled implementation details are not inferred.

Main entry points: [`src/40_world.js`](https://github.com/belisarius7487/fs3/blob/main/src/40_world.js) (World Simulation), [`src/50_combat.js`](https://github.com/belisarius7487/fs3/blob/main/src/50_combat.js) (Combat), [`src/20_render.js`](https://github.com/belisarius7487/fs3/blob/main/src/20_render.js) (2D Rendering), [`src/10_core.js`](https://github.com/belisarius7487/fs3/blob/main/src/10_core.js) (Game Core)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gameplay["Campaign and Combat"]
  node_waves["Waves and Missions<br/>[30_waves.js]"]
  node_world["World Simulation<br/>[40_world.js]"]
  node_combat["Combat<br/>[50_combat.js]"]
  node_weapons["Weapon Banks<br/>[55_arms.js]"]
  node_bankdata["Bank Data<br/>[56_banks.js]"]
  node_turrets["Turrets<br/>[57_turrets.js]"]
  node_effects["Projectile Effects<br/>[60_effects.js]"]
  node_core["Game Core<br/>[10_core.js]"]
end

subgraph group_presentation["Rendering and Interface"]
  node_audio["Audio<br/>[12_audio.js]"]
  node_render["2D Rendering<br/>[20_render.js]"]
  node_field3d["3D Field<br/>[59_field3d.js]"]
  node_model3d["3D Models<br/>[58_model3d.js]"]
  node_wavesvisual["Wave Presentation<br/>[30_waves.js]"]
  node_ui["HUD and Menus<br/>[70_ui.js]"]
  node_radar["Radar Icons<br/>[71_radar_icons.js]"]
  node_target["Target Display<br/>[72_target.js]"]
  node_glow["Glow Effects<br/>[61_glow.js]"]
  node_performance["Performance<br/>[62_perf.js]"]
  node_fxanimation["Effect Animation<br/>[63_fxanim.js]"]
end

subgraph group_models["POF Model Tools"]
  node_pofreader["POF Reader<br/>[pof.py]"]
  node_poflite["POF Metadata Reader<br/>[poflite.py]"]
  node_webmodel["Web Model Converter<br/>[webmodel.py]"]
  node_buildmodels["Model Asset Builder<br/>[buildmodels.py]"]
end

subgraph group_prototype["Rendering Prototype"]
  node_demo["2.5D Draft<br/>[demo.js]"]
end

node_player(("Player"))

node_player -.->|"provides input"| node_core
node_core -.->|"starts campaign"| node_waves
node_waves -.->|"sets encounters"| node_world
node_world -.->|"simulates combat"| node_combat
node_combat -.->|"uses weapons"| node_weapons
node_combat -.->|"uses turrets"| node_turrets
node_combat -.->|"updates projectiles"| node_effects
node_core -.->|"drives audio"| node_audio
node_world -.->|"draws world"| node_render
node_world -.->|"draws field"| node_field3d
node_field3d -.->|"renders models"| node_model3d
node_ui -.->|"uses icons"| node_radar
node_ui -.->|"shows target"| node_target
node_render -.->|"uses glow"| node_glow
node_render -.->|"animates effects"| node_fxanimation
node_render -.->|"tracks performance"| node_performance
node_poflite -->|"uses reader"| node_pofreader
node_webmodel -->|"uses reader"| node_pofreader
node_buildmodels -->|"converts models"| node_webmodel
node_buildmodels -->|"reads models"| node_pofreader

click node_waves "https://github.com/belisarius7487/fs3/blob/main/src/30_waves.js"
click node_world "https://github.com/belisarius7487/fs3/blob/main/src/40_world.js"
click node_combat "https://github.com/belisarius7487/fs3/blob/main/src/50_combat.js"
click node_weapons "https://github.com/belisarius7487/fs3/blob/main/src/55_arms.js"
click node_bankdata "https://github.com/belisarius7487/fs3/blob/main/src/56_banks.js"
click node_turrets "https://github.com/belisarius7487/fs3/blob/main/src/57_turrets.js"
click node_effects "https://github.com/belisarius7487/fs3/blob/main/src/60_effects.js"
click node_core "https://github.com/belisarius7487/fs3/blob/main/src/10_core.js"
click node_audio "https://github.com/belisarius7487/fs3/blob/main/src/12_audio.js"
click node_render "https://github.com/belisarius7487/fs3/blob/main/src/20_render.js"
click node_field3d "https://github.com/belisarius7487/fs3/blob/main/src/59_field3d.js"
click node_model3d "https://github.com/belisarius7487/fs3/blob/main/src/58_model3d.js"
click node_wavesvisual "https://github.com/belisarius7487/fs3/blob/main/src/30_waves.js"
click node_ui "https://github.com/belisarius7487/fs3/blob/main/src/70_ui.js"
click node_radar "https://github.com/belisarius7487/fs3/blob/main/src/71_radar_icons.js"
click node_target "https://github.com/belisarius7487/fs3/blob/main/src/72_target.js"
click node_glow "https://github.com/belisarius7487/fs3/blob/main/src/61_glow.js"
click node_performance "https://github.com/belisarius7487/fs3/blob/main/src/62_perf.js"
click node_fxanimation "https://github.com/belisarius7487/fs3/blob/main/src/63_fxanim.js"
click node_pofreader "https://github.com/belisarius7487/fs3/blob/main/tools/pof/pof.py"
click node_poflite "https://github.com/belisarius7487/fs3/blob/main/tools/pof/poflite.py"
click node_webmodel "https://github.com/belisarius7487/fs3/blob/main/tools/pof/webmodel.py"
click node_buildmodels "https://github.com/belisarius7487/fs3/blob/main/tools/pof/buildmodels.py"
click node_demo "https://github.com/belisarius7487/fs3/blob/main/demo25d/demo.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_waves,node_world,node_combat,node_weapons,node_bankdata,node_turrets,node_effects,node_core toneBlue
class node_audio,node_render,node_field3d,node_model3d,node_wavesvisual,node_ui,node_radar,node_target,node_glow,node_performance,node_fxanimation toneAmber
class node_pofreader,node_poflite,node_webmodel,node_buildmodels toneMint
class node_demo toneRose
class node_player toneIndigo
```

## Components

### Campaign and Combat

- [Waves and Missions](https://github.com/belisarius7487/fs3/blob/main/src/30_waves.js): `src/30_waves.js`
- [World Simulation](https://github.com/belisarius7487/fs3/blob/main/src/40_world.js): `src/40_world.js`
- [Combat](https://github.com/belisarius7487/fs3/blob/main/src/50_combat.js): `src/50_combat.js`
- [Weapon Banks](https://github.com/belisarius7487/fs3/blob/main/src/55_arms.js): `src/55_arms.js`
- [Bank Data](https://github.com/belisarius7487/fs3/blob/main/src/56_banks.js): `src/56_banks.js`
- [Turrets](https://github.com/belisarius7487/fs3/blob/main/src/57_turrets.js): `src/57_turrets.js`
- [Projectile Effects](https://github.com/belisarius7487/fs3/blob/main/src/60_effects.js): `src/60_effects.js`
- [Game Core](https://github.com/belisarius7487/fs3/blob/main/src/10_core.js): `src/10_core.js`

### Rendering and Interface

- [Audio](https://github.com/belisarius7487/fs3/blob/main/src/12_audio.js): `src/12_audio.js`
- [2D Rendering](https://github.com/belisarius7487/fs3/blob/main/src/20_render.js): `src/20_render.js`
- [3D Field](https://github.com/belisarius7487/fs3/blob/main/src/59_field3d.js): `src/59_field3d.js`
- [3D Models](https://github.com/belisarius7487/fs3/blob/main/src/58_model3d.js): `src/58_model3d.js`
- [Wave Presentation](https://github.com/belisarius7487/fs3/blob/main/src/30_waves.js): `src/30_waves.js`
- [HUD and Menus](https://github.com/belisarius7487/fs3/blob/main/src/70_ui.js): `src/70_ui.js`
- [Radar Icons](https://github.com/belisarius7487/fs3/blob/main/src/71_radar_icons.js): `src/71_radar_icons.js`
- [Target Display](https://github.com/belisarius7487/fs3/blob/main/src/72_target.js): `src/72_target.js`
- [Glow Effects](https://github.com/belisarius7487/fs3/blob/main/src/61_glow.js): `src/61_glow.js`
- [Performance](https://github.com/belisarius7487/fs3/blob/main/src/62_perf.js): `src/62_perf.js`
- [Effect Animation](https://github.com/belisarius7487/fs3/blob/main/src/63_fxanim.js): `src/63_fxanim.js`

### POF Model Tools

- [POF Reader](https://github.com/belisarius7487/fs3/blob/main/tools/pof/pof.py): `tools/pof/pof.py`
- [POF Metadata Reader](https://github.com/belisarius7487/fs3/blob/main/tools/pof/poflite.py): `tools/pof/poflite.py`
- [Web Model Converter](https://github.com/belisarius7487/fs3/blob/main/tools/pof/webmodel.py): `tools/pof/webmodel.py`
- [Model Asset Builder](https://github.com/belisarius7487/fs3/blob/main/tools/pof/buildmodels.py): `tools/pof/buildmodels.py`

### Rendering Prototype

- [2.5D Draft](https://github.com/belisarius7487/fs3/blob/main/demo25d/demo.js): `demo25d/demo.js`

### Other components

- **Player**

## Connections

- Player → Game Core: provides input
- Game Core → Waves and Missions: starts campaign
- Waves and Missions → World Simulation: sets encounters
- World Simulation → Combat: simulates combat
- Combat → Weapon Banks: uses weapons
- Combat → Turrets: uses turrets
- Combat → Projectile Effects: updates projectiles
- Game Core → Audio: drives audio
- World Simulation → 2D Rendering: draws world
- World Simulation → 3D Field: draws field
- 3D Field → 3D Models: renders models
- HUD and Menus → Radar Icons: uses icons
- HUD and Menus → Target Display: shows target
- 2D Rendering → Glow Effects: uses glow
- 2D Rendering → Effect Animation: animates effects
- 2D Rendering → Performance: tracks performance
- POF Metadata Reader → POF Reader: uses reader (evidence: `tools/pof/poflite.py`)
- Web Model Converter → POF Reader: uses reader (evidence: `tools/pof/webmodel.py`)
- Model Asset Builder → Web Model Converter: converts models (evidence: `tools/pof/buildmodels.py`)
- Model Asset Builder → POF Reader: reads models (evidence: `tools/pof/buildmodels.py`)
