# kaaasi/traders-redone architecture

> Architecture diagram of the GitHub repository kaaasi/traders-redone, 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/kaaasi/traders-redone
- Repository: https://github.com/kaaasi/traders-redone

## Overview

Traders Redone is a C# port of a DOS trading game, with a host-run game path and a reference PC emulator for running the original executable. The principal workflow starts in the host, enters menus and game phases, updates shared game state, and presents menus, fields, and reports through VGA graphics. The tree also contains resource decoding and an asset viewer. The README mentions networking and dedicated-server extensions, but the supplied tree does not show their implementation. Several subsystem links are omitted or dashed because their caller code was not sampled.

Main entry points: [`src/Traders.Core/State/Dgroup.cs`](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/State/Dgroup.cs) (Game state), [`src/Traders.Core/Field/Planting.cs`](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Field/Planting.cs) (Field planting), [`src/Traders.RefEmu/Machine/PcMachine.cs`](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Machine/PcMachine.cs) (PC machine), [`src/Traders.App/Program.cs`](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/Program.cs) (Game entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_host["Host runtime"]
  node_app["Game entry<br/>[Program.cs]"]
  node_hostgame["Host game<br/>[HostGame.cs]"]
  node_programhost["Core host<br/>[ProgramHost.cs]"]
  node_hostinput["Host input<br/>[HostKeyMap.cs]"]
end

subgraph group_game["Game logic"]
  node_menu["Main menu<br/>[MainMenu.cs]"]
  node_phases["Game phases<br/>[ProgramMachine.cs]"]
  node_planning["AI planning<br/>[WeekPlanning.cs]"]
  node_fieldlogic["Field planting<br/>[Planting.cs]"]
  node_fieldgrid["Field grid<br/>[FieldGrid.cs]"]
  node_rules["Game rules<br/>[Rules]"]
  node_state[("Game state<br/>[Dgroup.cs]")]
  node_save["Save games<br/>[SaveGame.cs]"]
  node_weekreport["Weekly reports<br/>[Report.cs]"]
end

subgraph group_presentation["Presentation"]
  node_menuscreen["Menu scene<br/>[MenuScene.cs]"]
  node_fieldscene["Field scene<br/>[FieldScene.cs]"]
  node_reportscene["Report scene<br/>[ReportScene.cs]"]
  node_gfx["Graphics layers<br/>[GraphicsLayers.cs]"]
  node_modex["Mode X driver<br/>[ModeXDriver.cs]"]
  node_vram[("Video memory<br/>[ModeXMemory.cs]")]
end

subgraph group_resources["Assets"]
  node_assets["Asset library<br/>[AssetLibrary.cs]"]
  node_decrunch["PP20 decoder<br/>[PowerPacker.cs]"]
  node_resourceset["Resource table<br/>[ResourceTable.cs]"]
  node_viewer["Asset viewer<br/>[ViewerGame.cs]"]
end

subgraph group_reference["Reference emulator"]
  node_original["Original runner<br/>[OriginalProgram.cs]"]
  node_machine["PC machine<br/>[PcMachine.cs]"]
  node_cpu["286 CPU<br/>[Cpu286.cs]"]
  node_memory[("Emulated memory<br/>[Memory.cs]")]
  node_dosfs["DOS files<br/>[DosFileSystem.cs]"]
  node_hardware["PC devices<br/>[Hardware]"]
end

node_player(("Player"))

node_player -->|"starts"| node_app
node_app -->|"runs"| node_hostgame
node_app -->|"configures"| node_programhost
node_app -->|"finds data"| node_assets
node_hostgame -.->|"hosts core"| node_programhost
node_hostinput -.->|"supplies input"| node_hostgame
node_programhost -.->|"enters game"| node_menu
node_menu -->|"updates"| node_state
node_menu -->|"uses saves"| node_save
node_phases -.->|"advances state"| node_state
node_phases -.->|"runs planting"| node_fieldlogic
node_phases -.->|"runs planning"| node_planning
node_fieldlogic -->|"reads and writes"| node_state
node_fieldlogic -->|"uses grid"| node_fieldgrid
node_fieldlogic -->|"uses AI helpers"| node_planning
node_fieldlogic -->|"uses arithmetic"| node_rules
node_weekreport -.->|"reads state"| node_state
node_menuscreen -->|"reads state"| node_state
node_menuscreen -->|"draws through"| node_gfx
node_fieldscene -->|"reads state"| node_state
node_fieldscene -->|"reads grid"| node_fieldgrid
node_fieldscene -->|"draws through"| node_gfx
node_reportscene -->|"reuses scene"| node_menuscreen
node_reportscene -->|"reuses scene"| node_fieldscene
node_reportscene -->|"draws through"| node_gfx
node_gfx -->|"uses driver"| node_modex
node_modex -->|"writes pixels"| node_vram
node_assets -->|"loads resources"| node_resourceset
node_assets -->|"decodes images"| node_decrunch
node_viewer -->|"loads assets"| node_assets
node_original -->|"starts machine"| node_machine
node_machine -->|"executes on"| node_cpu
node_machine -->|"maps memory"| node_memory
node_machine -->|"uses files"| node_dosfs
node_machine -->|"models devices"| node_hardware
node_cpu -->|"reads and writes"| node_memory

click node_app "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/Program.cs"
click node_hostgame "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/HostGame.cs"
click node_programhost "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/ProgramHost.cs"
click node_hostinput "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/Input/HostKeyMap.cs"
click node_menu "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Menus/MainMenu.cs"
click node_phases "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Phases/ProgramMachine.cs"
click node_planning "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Ai/WeekPlanning.cs"
click node_fieldlogic "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Field/Planting.cs"
click node_fieldgrid "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Field/FieldGrid.cs"
click node_rules "https://github.com/kaaasi/traders-redone/tree/main/src/Traders.Core/Rules"
click node_state "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/State/Dgroup.cs"
click node_save "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/State/SaveGame.cs"
click node_weekreport "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Week/Report.cs"
click node_menuscreen "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Presentation/Menus/MenuScene.cs"
click node_fieldscene "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Presentation/Field/FieldScene.cs"
click node_reportscene "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Presentation/Week/ReportScene.cs"
click node_gfx "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Vga/Layers/GraphicsLayers.cs"
click node_modex "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Vga/ModeXDriver.cs"
click node_vram "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Vga/ModeXMemory.cs"
click node_assets "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Assets/AssetLibrary.cs"
click node_decrunch "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Assets/PowerPacker.cs"
click node_resourceset "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Assets/ResourceTable.cs"
click node_viewer "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Viewer/ViewerGame.cs"
click node_original "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/OriginalProgram.cs"
click node_machine "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Machine/PcMachine.cs"
click node_cpu "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Cpu/Cpu286.cs"
click node_memory "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Cpu/Memory.cs"
click node_dosfs "https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Machine/DosFileSystem.cs"
click node_hardware "https://github.com/kaaasi/traders-redone/tree/main/src/Traders.RefEmu/Hardware"

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_app,node_hostgame,node_programhost,node_hostinput toneBlue
class node_menu,node_phases,node_planning,node_fieldlogic,node_fieldgrid,node_rules,node_state,node_save,node_weekreport toneAmber
class node_menuscreen,node_fieldscene,node_reportscene,node_gfx,node_modex,node_vram toneMint
class node_assets,node_decrunch,node_resourceset,node_viewer toneRose
class node_original,node_machine,node_cpu,node_memory,node_dosfs,node_hardware,node_player toneIndigo
```

## Components

### Host runtime

- [Game entry](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/Program.cs): `src/Traders.App/Program.cs`
- [Host game](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/HostGame.cs): `src/Traders.App/HostGame.cs`
- [Core host](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/ProgramHost.cs): `src/Traders.App/ProgramHost.cs`
- [Host input](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.App/Input/HostKeyMap.cs): `src/Traders.App/Input/HostKeyMap.cs`

### Game logic

- [Main menu](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Menus/MainMenu.cs): `src/Traders.Core/Menus/MainMenu.cs`
- [Game phases](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Phases/ProgramMachine.cs): `src/Traders.Core/Phases/ProgramMachine.cs`
- [AI planning](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Ai/WeekPlanning.cs): `src/Traders.Core/Ai/WeekPlanning.cs`
- [Field planting](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Field/Planting.cs): `src/Traders.Core/Field/Planting.cs`
- [Field grid](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Field/FieldGrid.cs): `src/Traders.Core/Field/FieldGrid.cs`
- [Game rules](https://github.com/kaaasi/traders-redone/tree/main/src/Traders.Core/Rules): `src/Traders.Core/Rules`
- [Game state](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/State/Dgroup.cs): `src/Traders.Core/State/Dgroup.cs`
- [Save games](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/State/SaveGame.cs): `src/Traders.Core/State/SaveGame.cs`
- [Weekly reports](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Core/Week/Report.cs): `src/Traders.Core/Week/Report.cs`

### Presentation

- [Menu scene](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Presentation/Menus/MenuScene.cs): `src/Traders.Presentation/Menus/MenuScene.cs`
- [Field scene](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Presentation/Field/FieldScene.cs): `src/Traders.Presentation/Field/FieldScene.cs`
- [Report scene](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Presentation/Week/ReportScene.cs): `src/Traders.Presentation/Week/ReportScene.cs`
- [Graphics layers](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Vga/Layers/GraphicsLayers.cs): `src/Traders.Vga/Layers/GraphicsLayers.cs`
- [Mode X driver](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Vga/ModeXDriver.cs): `src/Traders.Vga/ModeXDriver.cs`
- [Video memory](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Vga/ModeXMemory.cs): `src/Traders.Vga/ModeXMemory.cs`

### Assets

- [Asset library](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Assets/AssetLibrary.cs): `src/Traders.Assets/AssetLibrary.cs`
- [PP20 decoder](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Assets/PowerPacker.cs): `src/Traders.Assets/PowerPacker.cs`
- [Resource table](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Assets/ResourceTable.cs): `src/Traders.Assets/ResourceTable.cs`
- [Asset viewer](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.Viewer/ViewerGame.cs): `src/Traders.Viewer/ViewerGame.cs`

### Reference emulator

- [Original runner](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/OriginalProgram.cs): `src/Traders.RefEmu/OriginalProgram.cs`
- [PC machine](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Machine/PcMachine.cs): `src/Traders.RefEmu/Machine/PcMachine.cs`
- [286 CPU](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Cpu/Cpu286.cs): `src/Traders.RefEmu/Cpu/Cpu286.cs`
- [Emulated memory](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Cpu/Memory.cs): `src/Traders.RefEmu/Cpu/Memory.cs`
- [DOS files](https://github.com/kaaasi/traders-redone/blob/main/src/Traders.RefEmu/Machine/DosFileSystem.cs): `src/Traders.RefEmu/Machine/DosFileSystem.cs`
- [PC devices](https://github.com/kaaasi/traders-redone/tree/main/src/Traders.RefEmu/Hardware): `src/Traders.RefEmu/Hardware`

### Other components

- **Player**

## Connections

- Player → Game entry: starts (evidence: `src/Traders.App/Program.cs`)
- Game entry → Host game: runs (evidence: `src/Traders.App/Program.cs`)
- Game entry → Core host: configures (evidence: `src/Traders.App/Program.cs`)
- Game entry → Asset library: finds data (evidence: `src/Traders.App/Program.cs`)
- Host game → Core host: hosts core
- Host input → Host game: supplies input
- Core host → Main menu: enters game
- Main menu → Game state: updates (evidence: `src/Traders.Core/Menus/MainMenu.cs`)
- Main menu → Save games: uses saves (evidence: `src/Traders.Core/Menus/MainMenu.cs`)
- Game phases → Game state: advances state
- Game phases → Field planting: runs planting
- Game phases → AI planning: runs planning
- Field planting → Game state: reads and writes (evidence: `src/Traders.Core/Field/Planting.cs`)
- Field planting → Field grid: uses grid (evidence: `src/Traders.Core/Field/Planting.cs`)
- Field planting → AI planning: uses AI helpers (evidence: `src/Traders.Core/Field/Planting.cs`)
- Field planting → Game rules: uses arithmetic (evidence: `src/Traders.Core/Field/Planting.cs`)
- Weekly reports → Game state: reads state
- Menu scene → Game state: reads state (evidence: `src/Traders.Presentation/Menus/MenuScene.cs`)
- Menu scene → Graphics layers: draws through (evidence: `src/Traders.Presentation/Menus/MenuScene.cs`)
- Field scene → Game state: reads state (evidence: `src/Traders.Presentation/Field/FieldScene.cs`)
- Field scene → Field grid: reads grid (evidence: `src/Traders.Presentation/Field/FieldScene.cs`)
- Field scene → Graphics layers: draws through (evidence: `src/Traders.Presentation/Field/FieldScene.cs`)
- Report scene → Menu scene: reuses scene (evidence: `src/Traders.Presentation/Week/ReportScene.cs`)
- Report scene → Field scene: reuses scene (evidence: `src/Traders.Presentation/Week/ReportScene.cs`)
- Report scene → Graphics layers: draws through (evidence: `src/Traders.Presentation/Week/ReportScene.cs`)
- Graphics layers → Mode X driver: uses driver (evidence: `src/Traders.Vga/Layers/GraphicsLayers.cs`)
- Mode X driver → Video memory: writes pixels (evidence: `src/Traders.Vga/ModeXDriver.cs`)
- Asset library → Resource table: loads resources (evidence: `src/Traders.Assets/AssetLibrary.cs`)
- Asset library → PP20 decoder: decodes images (evidence: `src/Traders.Assets/AssetLibrary.cs`)
- Asset viewer → Asset library: loads assets (evidence: `src/Traders.Viewer/ViewerGame.cs`)
- Original runner → PC machine: starts machine (evidence: `src/Traders.RefEmu/OriginalProgram.cs`)
- PC machine → 286 CPU: executes on (evidence: `src/Traders.RefEmu/Machine/PcMachine.cs`)
- PC machine → Emulated memory: maps memory (evidence: `src/Traders.RefEmu/Machine/PcMachine.cs`)
- PC machine → DOS files: uses files (evidence: `src/Traders.RefEmu/Machine/PcMachine.cs`)
- PC machine → PC devices: models devices (evidence: `src/Traders.RefEmu/Machine/PcMachine.cs`)
- 286 CPU → Emulated memory: reads and writes (evidence: `src/Traders.RefEmu/Cpu/Cpu286.cs`)
