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`