currently in very early stage.
written in c99
intended for voxel games.
You start in a city, you end up getting swarmed by monster attack, you need to create a settlement deep into the wilderness and find what is the reason of the swarm
every function should be like this:
[module]_[submodule]_[use]();
ex:
alloc_pool_init();
thread_mgr_init();
everything under is a ia slope template for now:
██████████████████████████████████████████
█ Hybrid Client-Server Flow █
██████████████████████████████████████████
┌───────────────────┐
│ Game Client │
│ ┌───────────────┐ │
│ │ Input │ │ ┌───────┐
│ │ Processing ├─┼──►│ Local │
│ └───────┬───────┘ │ │ Server│
│ │ │ └───┬───┘
│ ┌───────▼───────┐ │ │
│ │ Prediction │ │ │
│ │ & Rendering │ │ │
│ └───────┬───────┘ │ │
└─────┬───┼───┬─────┘ │
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────┐
│ Shared Simulation Core │
│ ┌──────────────────┐ ┌───────────────┐ │
│ │ Command Queue │ │ World State │ │
│ │ - Input buffer │ │ - Chunk data │ │
│ │ - Priority sorted│ │ - Entities │ │
│ └────────┬─────────┘ └───────┬───────┘ │
│ │ │ │
│ ┌────────▼────────────────────▼───────┐ │
│ │ Simulation Loop │ │
│ │ 1. Process commands │ │
│ │ 2. Update physics │ │
│ │ 3. Generate snapshots │ │
│ └─────────────────────────────────────┘ │
└───────────────────┬─────────────────────┘
│
┌─────────▼──────────┐
│ Snapshot Delivery │
│ - Local: Memcpy │
│ - Remote: Network │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ Client State │
│ Reconciliation │
└────────────────────┘
Client Side Server Side Shared
─────────────────────────────────────────────────────────────
[Input Polling] [Command Queue]
│ │
├──User Input────────►│
│ │
[Prediction] [Simulation Tick]
│ │
│◄───World Snapshot───┤
│ │
[Render Interp.] [State Broadcast]
│ │
├──Correction Req.───►│
│ │
[State Apply] [Delta Update]
Local Mode Remote Mode
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ Client │ │ Server │ │ Client │ │ Server │
└───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘
│ Input │ │ Input │
│────────────►│ │───via Net──►│
│ │ Simulate │ │
│ Prediction │───┐ │ Prediction │
│◄────────────│◄──┘ │◄───via Net──│
│ Render │ │ Render │
│ │ │ │
WorldSnapshot ◄───┐ ┌───► InputCommand
▲ │ │ ▲
│ ├─has a───┤ │
│ │ │ │
│ ┌────┴─────┐ │ ┌────┴─────┐
└─────┤ World │ └─────┤ Player │
│ State │ │ State │
└──────────┘ └──────────┘
┌───────────────────────────┐
│ Client Memory │
├─────────────┬─────────────┤
│ Predicted │ Command │
│ World State │ Buffer │
│ (Write) │ (Ring) │
└──────┬──────┴──────┬──────┘
│ │
▼ ▼
┌───────────────────────────┐
│ Shared Memory │
├─────────────┬─────────────┤
│ Server │ Snapshot │
│ World State │ Buffer │
│ (Read-Only) │ (Double) │
└─────────────┴─────────────┘
┌──────────────────────┬──────────────────────┐
│ Client │ Server │
├──────────────────────┼──────────────────────┤
│ FPS: 60 │ TPS: 20 │
│ Pred. Error: 0.2m │ Cmd Lag: 12ms │
│ Chunks Rendered: 142 │ Chunks Loaded: 256 │
│ VRAM: 1.4GB │ RAM: 2.1GB │
└──────────────────────┴──────────────────────┘
┌─────────────────────────────────────────┐
│ Debug Overlay (F1) │
├─────────────────────────────────────────┤
│ Local Server: ACTIVE [] │
│ Snapshot Delay: 42ms [] │
│ Unacknowledged Commands: 3 [] │
│ Predicted vs Actual: 0.4m [] │
└─────────────────────────────────────────┘
┌───────────────────┬───────────────────────┐
│ Test Case │ Visual Indicator │
├───────────────────┼───────────────────────┤
│ Normal Operation │ Green network icon │
│ High Latency │ Yellow ping counter │
│ Prediction Error │ Red position marker │
│ Server Desync │ Purple warning flash │
└───────────────────┴───────────────────────┘
┌────────────────┐
│ raylib │
│ librg │
│ fastNoiseLight │
│ enet │
└────────────────┘