lofivor/TODO.md

72 lines
2.2 KiB
Markdown

# lockstep artillery - build roadmap
## phase 1: foundation
- [x] set up build.zig with raylib-zig dependency
- [x] create fixed-point math module (Fixed struct, add/sub/mul/div)
- [x] create trig lookup tables (sin/cos at comptime)
- [x] basic window opens with raylib
## phase 2: single-player simulation
- [ ] define GameState, Player, Projectile structs
- [ ] terrain generation (random jagged line)
- [ ] cannon aiming (angle adjustment with keys)
- [ ] power adjustment
- [ ] fire projectile
- [ ] projectile physics (gravity, movement)
- [ ] terrain collision detection
- [ ] player hit detection
- [ ] turn switching after shot resolves
## phase 3: rendering
- [ ] draw terrain as connected line segments
- [ ] draw players as geometric shapes
- [ ] draw cannon angle indicator
- [ ] draw power meter
- [ ] draw projectile with trail (last N positions)
- [ ] implement bloom shader (blur.fs)
- [ ] render-to-texture pipeline for glow effect
- [ ] explosion effect (expanding circle)
## phase 4: local two-player
- [ ] split keyboard input (player 1: wasd+space, player 2: arrows+enter)
- [ ] verify determinism by running two simulations side-by-side
- [ ] add checksum verification
## phase 5: networking
- [ ] UDP socket wrapper (bind, send, receive)
- [ ] define packet format (INPUT, SYNC, PING, PONG)
- [ ] host mode: listen for connection, send initial SYNC
- [ ] guest mode: connect, receive SYNC, start simulation
- [ ] input exchange each frame
- [ ] handle packet loss (resend on timeout)
- [ ] checksum exchange and desync detection
- [ ] latency display
## phase 6: polish
- [ ] wind indicator
- [ ] health bars
- [ ] win/lose screen
- [ ] rematch option
- [ ] sound effects (optional, breaks no-dependency purity)
## known pitfalls to watch
- [ ] don't use floats in simulation
- [ ] don't iterate hashmaps
- [ ] don't use @sin/@cos - use lookup tables
- [ ] always process inputs in same order (player 0 then player 1)
- [ ] serialize terrain heights as fixed-point, not float
## stretch goals
- [ ] destructible terrain (explosion removes pixels)
- [ ] multiple weapon types
- [ ] rollback netcode (predict, rewind, replay on correction)
- [ ] replay file save/load
- [ ] web build via emscripten