# k1x78/samp_clone architecture

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

- Interactive diagram: https://gitdiagram.com/k1x78/samp_clone
- Repository: https://github.com/k1x78/samp_clone

## Overview

samp_clone is a C++20 reimplementation of the SA-MP 0.3.DL multiplayer client and dedicated server. A player starts the client, which initializes the game and network session; the client exchanges game traffic with the server, whose game layer manages players and world state and runs Pawn gamemodes through its VM. The repository also includes server query/RCON, downloadable assets, and client rendering and UI. Edges are limited to relationships shown by excerpts, SOURCE INDEX references, or README statements; unsampled implementation details are left unconnected.

Main entry points: [`src/client/main.cpp`](https://github.com/k1x78/samp_clone/blob/main/src/client/main.cpp) (Client Startup), [`src/client/include/samp/client/network_client.hpp`](https://github.com/k1x78/samp_clone/blob/main/src/client/include/samp/client/network_client.hpp) (Client Network), [`src/server/main.cpp`](https://github.com/k1x78/samp_clone/blob/main/src/server/main.cpp) (Server Startup), [`src/server/game_layer.cpp`](https://github.com/k1x78/samp_clone/blob/main/src/server/game_layer.cpp) (Server Game Layer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client Runtime"]
  node_client_boot["Client Startup<br/>[main.cpp]"]
  node_client_settings["Client Settings<br/>[config.h]"]
  node_client_network["Client Network<br/>[network_client.hpp]"]
  node_client_world["Client World<br/>[world_state.hpp]"]
  node_assets["Asset Downloads<br/>[asset_manager.hpp]"]
  node_client_ui["Client UI<br/>[chatwindow.h]"]
end

subgraph group_server["Server Runtime"]
  node_server_boot["Server Startup<br/>[main.cpp]"]
  node_server_config["Server Configuration<br/>[config.hpp]"]
  node_server_transport["RakNet Server<br/>[raknet_server.hpp]"]
  node_game_layer["Server Game Layer<br/>[game_layer.cpp]"]
  node_query_rcon["Query and RCON<br/>[query_server.hpp]"]
end

subgraph group_script["Pawn Scripting"]
  node_pawn_vm["Pawn VM<br/>[pawn_vm.cpp]"]
  node_pawn_natives["Server Natives<br/>[natives.cpp]"]
end

subgraph group_protocol["Shared Protocol"]
  node_bitstream["Bitstream<br/>[bitstream.hpp]"]
  node_wire["Wire Encoding<br/>[wire.hpp]"]
  node_reliability["Reliable Frames"]
end

subgraph group_game["Game Rendering"]
  node_game_runtime["Game Runtime<br/>[game.h]"]
  node_game_hooks["Game Hooks<br/>[hooks.h]"]
  node_d3d_hook["D3D Hooks"]
  node_model_preview["Model Preview<br/>[model_preview.cpp]"]
end

node_player(("Player"))

node_player -->|"starts client"| node_client_boot
node_client_boot -->|"reads settings"| node_client_settings
node_client_boot -->|"initializes game"| node_game_runtime
node_client_boot -->|"creates session"| node_client_network
node_client_boot -->|"initializes UI"| node_client_ui
node_client_boot -->|"installs render hook"| node_game_hooks
node_client_boot -->|"creates preview"| node_model_preview
node_client_network -->|"encodes traffic"| node_bitstream
node_client_network -->|"uses wire format"| node_wire
node_client_network -->|"uses reliable frames"| node_reliability
node_client_network -->|"maintains state"| node_client_world
node_client_network -->|"manages assets"| node_assets
node_client_network -.->|"exchanges game traffic"| node_server_transport
node_server_boot -->|"loads configuration"| node_server_config
node_server_boot -->|"loads gamemode"| node_game_layer
node_server_boot -->|"configures network"| node_server_transport
node_server_boot -.->|"serves queries"| node_query_rcon
node_server_transport -.->|"delivers game messages"| node_game_layer
node_game_layer -->|"runs gamemode"| node_pawn_vm
node_game_layer -->|"sends RPCs"| node_server_transport
node_pawn_vm -->|"registers natives"| node_pawn_natives
node_pawn_natives -->|"builds RPC payloads"| node_bitstream
node_game_runtime -.->|"uses game hooks"| node_game_hooks
node_model_preview -->|"uses device hook"| node_d3d_hook
node_model_preview -->|"uses game services"| node_game_runtime

click node_client_boot "https://github.com/k1x78/samp_clone/blob/main/src/client/main.cpp"
click node_client_settings "https://github.com/k1x78/samp_clone/blob/main/src/client/config.h"
click node_client_network "https://github.com/k1x78/samp_clone/blob/main/src/client/include/samp/client/network_client.hpp"
click node_client_world "https://github.com/k1x78/samp_clone/blob/main/src/client/include/samp/client/world_state.hpp"
click node_assets "https://github.com/k1x78/samp_clone/blob/main/src/client/include/samp/client/asset_manager.hpp"
click node_server_boot "https://github.com/k1x78/samp_clone/blob/main/src/server/main.cpp"
click node_server_config "https://github.com/k1x78/samp_clone/blob/main/src/server/include/samp/server/config.hpp"
click node_server_transport "https://github.com/k1x78/samp_clone/blob/main/src/server/include/samp/server/raknet_server.hpp"
click node_game_layer "https://github.com/k1x78/samp_clone/blob/main/src/server/game_layer.cpp"
click node_query_rcon "https://github.com/k1x78/samp_clone/blob/main/src/server/include/samp/server/query_server.hpp"
click node_pawn_vm "https://github.com/k1x78/samp_clone/blob/main/src/pawn/pawn_vm.cpp"
click node_pawn_natives "https://github.com/k1x78/samp_clone/blob/main/src/pawn/natives.cpp"
click node_bitstream "https://github.com/k1x78/samp_clone/blob/main/src/protocol/include/samp/proto/bitstream.hpp"
click node_wire "https://github.com/k1x78/samp_clone/blob/main/src/protocol/include/samp/proto/wire.hpp"
click node_reliability "https://github.com/k1x78/samp_clone/blob/main/src/protocol/reliability_frame.cpp"
click node_game_runtime "https://github.com/k1x78/samp_clone/blob/main/src/client/game/game.h"
click node_game_hooks "https://github.com/k1x78/samp_clone/blob/main/src/client/game/hooks.h"
click node_d3d_hook "https://github.com/k1x78/samp_clone/blob/main/src/client/d3dhook/IDirect3DDevice9Hook.h"
click node_model_preview "https://github.com/k1x78/samp_clone/blob/main/src/client/game/model_preview.cpp"
click node_client_ui "https://github.com/k1x78/samp_clone/blob/main/src/client/chatwindow.h"

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_client_boot,node_client_settings,node_client_network,node_client_world,node_assets,node_client_ui toneBlue
class node_server_boot,node_server_config,node_server_transport,node_game_layer,node_query_rcon toneAmber
class node_pawn_vm,node_pawn_natives toneMint
class node_bitstream,node_wire,node_reliability toneRose
class node_game_runtime,node_game_hooks,node_d3d_hook,node_model_preview,node_player toneIndigo
```

## Components

### Client Runtime

- [Client Startup](https://github.com/k1x78/samp_clone/blob/main/src/client/main.cpp): `src/client/main.cpp`
- [Client Settings](https://github.com/k1x78/samp_clone/blob/main/src/client/config.h): `src/client/config.h`
- [Client Network](https://github.com/k1x78/samp_clone/blob/main/src/client/include/samp/client/network_client.hpp): `src/client/include/samp/client/network_client.hpp`
- [Client World](https://github.com/k1x78/samp_clone/blob/main/src/client/include/samp/client/world_state.hpp): `src/client/include/samp/client/world_state.hpp`
- [Asset Downloads](https://github.com/k1x78/samp_clone/blob/main/src/client/include/samp/client/asset_manager.hpp): `src/client/include/samp/client/asset_manager.hpp`
- [Client UI](https://github.com/k1x78/samp_clone/blob/main/src/client/chatwindow.h): `src/client/chatwindow.h`

### Server Runtime

- [Server Startup](https://github.com/k1x78/samp_clone/blob/main/src/server/main.cpp): `src/server/main.cpp`
- [Server Configuration](https://github.com/k1x78/samp_clone/blob/main/src/server/include/samp/server/config.hpp): `src/server/include/samp/server/config.hpp`
- [RakNet Server](https://github.com/k1x78/samp_clone/blob/main/src/server/include/samp/server/raknet_server.hpp): `src/server/include/samp/server/raknet_server.hpp`
- [Server Game Layer](https://github.com/k1x78/samp_clone/blob/main/src/server/game_layer.cpp): `src/server/game_layer.cpp`
- [Query and RCON](https://github.com/k1x78/samp_clone/blob/main/src/server/include/samp/server/query_server.hpp): `src/server/include/samp/server/query_server.hpp`

### Pawn Scripting

- [Pawn VM](https://github.com/k1x78/samp_clone/blob/main/src/pawn/pawn_vm.cpp): `src/pawn/pawn_vm.cpp`
- [Server Natives](https://github.com/k1x78/samp_clone/blob/main/src/pawn/natives.cpp): `src/pawn/natives.cpp`

### Shared Protocol

- [Bitstream](https://github.com/k1x78/samp_clone/blob/main/src/protocol/include/samp/proto/bitstream.hpp): `src/protocol/include/samp/proto/bitstream.hpp`
- [Wire Encoding](https://github.com/k1x78/samp_clone/blob/main/src/protocol/include/samp/proto/wire.hpp): `src/protocol/include/samp/proto/wire.hpp`
- [Reliable Frames](https://github.com/k1x78/samp_clone/blob/main/src/protocol/reliability_frame.cpp): `src/protocol/reliability_frame.cpp`

### Game Rendering

- [Game Runtime](https://github.com/k1x78/samp_clone/blob/main/src/client/game/game.h): `src/client/game/game.h`
- [Game Hooks](https://github.com/k1x78/samp_clone/blob/main/src/client/game/hooks.h): `src/client/game/hooks.h`
- [D3D Hooks](https://github.com/k1x78/samp_clone/blob/main/src/client/d3dhook/IDirect3DDevice9Hook.h): `src/client/d3dhook/IDirect3DDevice9Hook.h`
- [Model Preview](https://github.com/k1x78/samp_clone/blob/main/src/client/game/model_preview.cpp): `src/client/game/model_preview.cpp`

### Other components

- **Player**

## Connections

- Player → Client Startup: starts client (evidence: `README.md`)
- Client Startup → Client Settings: reads settings (evidence: `src/client/main.cpp`)
- Client Startup → Game Runtime: initializes game (evidence: `src/client/main.cpp`)
- Client Startup → Client Network: creates session (evidence: `src/client/main.cpp`)
- Client Startup → Client UI: initializes UI (evidence: `src/client/main.cpp`)
- Client Startup → Game Hooks: installs render hook (evidence: `src/client/main.cpp`)
- Client Startup → Model Preview: creates preview (evidence: `src/client/main.cpp`)
- Client Network → Bitstream: encodes traffic (evidence: `src/client/include/samp/client/network_client.hpp`)
- Client Network → Wire Encoding: uses wire format (evidence: `src/client/include/samp/client/network_client.hpp`)
- Client Network → Reliable Frames: uses reliable frames (evidence: `src/client/include/samp/client/network_client.hpp`)
- Client Network → Client World: maintains state (evidence: `src/client/include/samp/client/network_client.hpp`)
- Client Network → Asset Downloads: manages assets (evidence: `src/client/include/samp/client/network_client.hpp`)
- Client Network → RakNet Server: exchanges game traffic
- Server Startup → Server Configuration: loads configuration (evidence: `src/server/main.cpp`)
- Server Startup → Server Game Layer: loads gamemode (evidence: `src/server/main.cpp`)
- Server Startup → RakNet Server: configures network (evidence: `src/server/main.cpp`)
- Server Startup → Query and RCON: serves queries (evidence: `src/server/main.cpp`)
- RakNet Server → Server Game Layer: delivers game messages
- Server Game Layer → Pawn VM: runs gamemode
- Server Game Layer → RakNet Server: sends RPCs
- Pawn VM → Server Natives: registers natives
- Server Natives → Bitstream: builds RPC payloads (evidence: `src/pawn/natives.cpp`)
- Game Runtime → Game Hooks: uses game hooks
- Model Preview → D3D Hooks: uses device hook (evidence: `src/client/game/model_preview.cpp`)
- Model Preview → Game Runtime: uses game services (evidence: `src/client/game/model_preview.cpp`)
