antizona

antizona - Minimalist 3D software-rendered multiplayer engine for GTA: San Andreas in pure C99
Log | Files | Refs | README

README.md (2949B)


      1 # antizona
      2 
      3 A minimalist 3D software-rendered multiplayer engine and client for Grand Theft Auto: San Andreas, written in pure C99.
      4 
      5 ## Overview
      6 
      7 antizona is a low-level, bloat-free multiplayer suite. It operates without GPU drivers (software rendering), embedded web browsers (CEF), or heavy scripting runtimes.
      8 
      9 - **Client**: Multithreaded CPU software rasterizer outputting directly to an X11 framebuffer (`XShm`).
     10 - **Server**: Lightweight UDP daemon using spatial grid broadcasting.
     11 - **Pipeline**: Offline asset converter mapping GTA SA archives into clean binary meshes and raw textures packed in an uncompressed `assets.tar`.
     12 
     13 ## Platform & Status
     14 
     15 - **Tested OS**: OpenBSD.
     16 - **Target OS**: Linux / POSIX.
     17 
     18 *Windows and Android platforms are not supported at this stage.*
     19 
     20 ## Quick Start
     21 
     22 ### Prerequisites
     23 - C99 compiler (`gcc`, `clang`, or `pcc`)
     24 - POSIX threads (`pthread`), math library (`libm`)
     25 - X11 libraries (`libX11`, `libXext`)
     26 - Original GTA: SA installation files (required only for the asset build phase)
     27 
     28 ### Building & Running
     29 
     30 1. Compile binaries:
     31 ```sh
     32 make
     33 ```
     34 
     35 2. Extract game assets (one-time step):
     36 ```sh
     37 ./bin/build /path/to/gta_sa
     38 ```
     39 
     40 3. Launch server:
     41 ```sh
     42 ./bin/server 7777 32
     43 ```
     44 
     45 4. Launch client:
     46 ```sh
     47 ./bin/render 127.0.0.1:7777 nickname
     48 ```
     49 
     50 <details>
     51 <summary><b>Development Roadmap</b></summary>
     52 
     53 ### v0.1.0 — Core Hardening & UX
     54 - [ ] Implement synchronous connection handshake (`PKT_JOIN` -> `PKT_JOIN_ACK`) before client window initialization.
     55 - [ ] Add 5-second server timeout auto-disconnect in client.
     56 - [ ] Add vertical substepping to movement physics to prevent high-velocity terrain clipping.
     57 - [ ] Mandate strict packet length checks and string null-termination in network code.
     58 - [ ] Remove `system()` calls from asset pipeline.
     59 
     60 ### v0.2.0 — Protocol Security & Server Scaling
     61 - [ ] Add 64-bit session tokens to packet headers to prevent UDP IP spoofing.
     62 - [ ] Implement 64x64 spatial grid partitioning on the server for $O(N)$ broadcasts.
     63 - [ ] Optimize server socket I/O using `recvmmsg()` / `sendmmsg()` datagram batching.
     64 - [ ] Transition server polling from `poll()` to `kqueue()` on BSD and `epoll()` on Linux.
     65 
     66 ### v0.3.0 — Animations & Ped Mechanics
     67 - [ ] Parse RenderWare `.ifp` animation files.
     68 - [ ] Implement keyframe vertex-pose caching and SIMD blending for ped locomotion.
     69 
     70 ### v0.4.0 — Combat & Systemic Base
     71 - [ ] Ray-capsule intersection testing for hitscan shooting.
     72 - [ ] Server-authoritative hit verification and health tracking.
     73 - [ ] Compact binary item and pickup system.
     74 
     75 ### v0.5.0 — Vehicles
     76 - [ ] Vehicle geometry parsing and raycast suspension physics.
     77 - [ ] Vehicle movement, orientation quaternion, and entry/exit network synchronization.
     78 
     79 ### v1.0.0 — Production Release
     80 - First stable, production-ready release.
     81 </details>
     82 
     83 ## Support
     84 
     85 Monero (XMR):
     86 `83xqB91zW31gZkw9sbeT3vjcFQ22L69nKUyCEWgTnWYYfZ4E7gbEVAX5dWh6hCpk6RGqCatZUgjvzGiDYL9HZ6dVCWoa6Jh`