# kaaasi/eishockey-manager-redone architecture

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

## Overview

Eishockey Manager Redone is a C# recreation of a classic hockey-management game, using a user-supplied DOS game copy for original assets and data. A player configures a game, manages a club and roster, advances matchdays and seasons, and can follow optional live matches; results and state feed competitions and season progression. The desktop app hosts palette-based UI screens, while Core owns game rules and Formats reads legacy assets. README-documented save/load, audio, and emtool capabilities are included. Unsampled subsystems are represented at directory level; edges are limited to documented or indexed relationships.

Main entry points: [`src/EishockeyManager.Core/GameState.cs`](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/GameState.cs) (Game state), [`src/EishockeyManager.Desktop/DesktopGame.cs`](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Desktop/DesktopGame.cs) (Desktop host), [`src/EishockeyManager.UI/Screens`](https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.UI/Screens) (Game screens), [`src/EishockeyManager.UI/Assets.cs`](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Assets.cs) (Asset loading)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Game presentation"]
  node_desktop["Desktop host<br/>[DesktopGame.cs]"]
  node_screens["Game screens<br/>[Screens]"]
  node_surface["Palette renderer<br/>[Surface.cs]"]
  node_audio["Audio playback"]
  node_liveui["Live match UI<br/>[LiveMatchScreen.cs]"]
end

subgraph group_simulation["Management simulation"]
  node_setup["Game setup<br/>[SetupScreen.cs]"]
  node_newgame["New game<br/>[NewGame.cs]"]
  node_state[("Game state<br/>[GameState.cs]")]
  node_management["Club management"]
  node_transfers["Transfers<br/>[Transfer.cs]"]
end

subgraph group_competition["Matches and competitions"]
  node_season["Season flow<br/>[Season.cs]"]
  node_competitions["Competitions<br/>[Cups.cs]"]
  node_match["Match engine<br/>[MatchEngine.cs]"]
end

subgraph group_compatibility["Legacy data and persistence"]
  node_gamedata["Original game data<br/>[GameData.cs]"]
  node_assets["Asset loading<br/>[Assets.cs]"]
  node_formats["Legacy formats"]
  node_saves["Save and load<br/>[SaveGame.cs]"]
end

subgraph group_utilities["Asset utilities"]
  node_tools["emtool utilities<br/>[Program.cs]"]
  node_viewer["Asset viewer<br/>[Program.cs]"]
end

node_player(("Player"))

node_player -->|"starts game"| node_desktop
node_desktop -->|"hosts screens"| node_screens
node_screens -->|"draws into"| node_surface
node_setup -->|"creates game"| node_newgame
node_newgame -->|"initializes"| node_state
node_state -->|"advances season"| node_season
node_state -->|"runs matches"| node_match
node_season -->|"uses playoffs"| node_competitions
node_management -.->|"updates state"| node_state
node_transfers -.->|"changes roster"| node_state
node_match -.->|"reports live events"| node_liveui
node_desktop -->|"plays audio"| node_audio
node_desktop -->|"loads assets"| node_assets
node_assets -->|"reads files"| node_gamedata
node_assets -->|"uses decoders"| node_formats
node_screens -.->|"saves games"| node_saves
node_tools -->|"inspects assets"| node_gamedata
node_viewer -->|"opens assets"| node_gamedata

click node_desktop "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Desktop/DesktopGame.cs"
click node_screens "https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.UI/Screens"
click node_surface "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Surface.cs"
click node_audio "https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.Audio"
click node_setup "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Screens/SetupScreen.cs"
click node_newgame "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/NewGame.cs"
click node_state "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/GameState.cs"
click node_management "https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.Core"
click node_transfers "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/Transfer.cs"
click node_season "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/Season.cs"
click node_competitions "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/Cups.cs"
click node_match "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/MatchEngine.cs"
click node_liveui "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Screens/Live/LiveMatchScreen.cs"
click node_gamedata "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Formats/GameData.cs"
click node_assets "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Assets.cs"
click node_formats "https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.Formats"
click node_saves "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/SaveGame.cs"
click node_tools "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Tools/Program.cs"
click node_viewer "https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Viewer/Program.cs"

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_desktop,node_screens,node_surface,node_audio,node_liveui toneBlue
class node_setup,node_newgame,node_state,node_management,node_transfers toneAmber
class node_season,node_competitions,node_match toneMint
class node_gamedata,node_assets,node_formats,node_saves toneRose
class node_tools,node_viewer,node_player toneIndigo
```

## Components

### Game presentation

- [Desktop host](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Desktop/DesktopGame.cs): `src/EishockeyManager.Desktop/DesktopGame.cs`
- [Game screens](https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.UI/Screens): `src/EishockeyManager.UI/Screens`
- [Palette renderer](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Surface.cs): `src/EishockeyManager.UI/Surface.cs`
- [Audio playback](https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.Audio): `src/EishockeyManager.Audio`
- [Live match UI](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Screens/Live/LiveMatchScreen.cs): `src/EishockeyManager.UI/Screens/Live/LiveMatchScreen.cs`

### Management simulation

- [Game setup](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Screens/SetupScreen.cs): `src/EishockeyManager.UI/Screens/SetupScreen.cs`
- [New game](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/NewGame.cs): `src/EishockeyManager.Core/NewGame.cs`
- [Game state](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/GameState.cs): `src/EishockeyManager.Core/GameState.cs`
- [Club management](https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.Core): `src/EishockeyManager.Core`
- [Transfers](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/Transfer.cs): `src/EishockeyManager.Core/Transfer.cs`

### Matches and competitions

- [Season flow](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/Season.cs): `src/EishockeyManager.Core/Season.cs`
- [Competitions](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/Cups.cs): `src/EishockeyManager.Core/Cups.cs`
- [Match engine](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/MatchEngine.cs): `src/EishockeyManager.Core/MatchEngine.cs`

### Legacy data and persistence

- [Original game data](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Formats/GameData.cs): `src/EishockeyManager.Formats/GameData.cs`
- [Asset loading](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.UI/Assets.cs): `src/EishockeyManager.UI/Assets.cs`
- [Legacy formats](https://github.com/kaaasi/eishockey-manager-redone/tree/main/src/EishockeyManager.Formats): `src/EishockeyManager.Formats`
- [Save and load](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Core/SaveGame.cs): `src/EishockeyManager.Core/SaveGame.cs`

### Asset utilities

- [emtool utilities](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Tools/Program.cs): `src/EishockeyManager.Tools/Program.cs`
- [Asset viewer](https://github.com/kaaasi/eishockey-manager-redone/blob/main/src/EishockeyManager.Viewer/Program.cs): `src/EishockeyManager.Viewer/Program.cs`

### Other components

- **Player**

## Connections

- Player → Desktop host: starts game
- Desktop host → Game screens: hosts screens (evidence: `src/EishockeyManager.Desktop/DesktopGame.cs`)
- Game screens → Palette renderer: draws into (evidence: `src/EishockeyManager.UI/Screens/Manager/ManagerText.cs`)
- Game setup → New game: creates game (evidence: `src/EishockeyManager.UI/Screens/SetupScreen.cs`)
- New game → Game state: initializes (evidence: `src/EishockeyManager.Core/GameState.cs`)
- Game state → Season flow: advances season (evidence: `src/EishockeyManager.Core/GameState.cs`)
- Game state → Match engine: runs matches (evidence: `src/EishockeyManager.Core/GameState.cs`)
- Season flow → Competitions: uses playoffs (evidence: `src/EishockeyManager.Core/Season.cs`)
- Club management → Game state: updates state (evidence: `src/EishockeyManager.Core/MatchEngine.Live.cs`)
- Transfers → Game state: changes roster
- Match engine → Live match UI: reports live events
- Desktop host → Audio playback: plays audio (evidence: `src/EishockeyManager.Desktop/DesktopGame.cs`)
- Desktop host → Asset loading: loads assets (evidence: `src/EishockeyManager.Desktop/DesktopGame.cs`)
- Asset loading → Original game data: reads files (evidence: `src/EishockeyManager.UI/Assets.cs`)
- Asset loading → Legacy formats: uses decoders (evidence: `src/EishockeyManager.UI/Assets.cs`)
- Game screens → Save and load: saves games
- emtool utilities → Original game data: inspects assets (evidence: `src/EishockeyManager.Tools/Program.cs`)
- Asset viewer → Original game data: opens assets (evidence: `src/EishockeyManager.Viewer/Program.cs`)
