Under the hood
Developer notes
Architecture
DUSTLINE combines a Three.js renderer with a fixed-step FPS simulation. The player camera drives precise center-screen raycasts, while the animation system blends gunslinger locomotion, shooting and death poses. Audio, transport, simulation and menu lifecycle remain separate modules.
Local tab duel is LOCAL / no internet server. Tabs exchange state within the same browser. It is a networking demonstration, not an online matchmaking service.
Performance budget
The arena targets approximately 15k scene triangles. Low-poly voxel-style models, compact geometry, short-lived effects and restrained draw calls keep movement crisp on desktop and mobile WebGL. Future optimization: spatial hashing for broad-phase queries and instancing for repeated rocks, barrels and town props.
Prediction & reconciliation
Each local tab applies movement immediately, so aiming and strafing never wait for another tab. Local input is predicted on the client; remote gunslingers retain previous and next snapshots and render through interpolation to hide packet spacing. A future authoritative server would sequence inputs, replay unacknowledged commands after snapshots, and reconcile predicted state toward the confirmed position without visible snapping.
Next steps
- Authoritative WebSocket rooms with server-owned health, ammunition and scoring.
- Snapshot replication at 20 Hz, input acknowledgment and delta compression.
- Server-side lag compensation using historical hitboxes for fair raycasts.
- Spatial hashing for nearby-player, projectile and collision queries.
- Instancing and geometry batching for larger desert towns.
- Skill-based matchmaking, reconnect support and room migration.
- Server validation, rate limits and replay analysis for anti-cheat.
Controls
Desktop: WASD or arrow keys to move, mouse to aim, Shift to sprint, Space or left click to fire, R to reload and Escape to pause. Click the arena to lock the pointer.
Touch: use the left joystick to move, drag the right look zone to aim, and tap Fire or Reload.