Spaces:
Sleeping
NEONSTRIKE — ray-traced arena FPS with online multiplayer
Fast-paced CS-style shooter where the entire frame is ray traced in a WebGL2 fragment shader. No triangles are rasterized: every pixel casts a primary ray against the analytic scene (level AABBs + multi-sphere humanoid characters), then shadow rays, ambient-occlusion rays, and up to 3 reflection bounces. Per-map themes tint the sky, fog, haze, and neon emissives.
Run
cd app && npm install && npm start # serves game + WebSocket rooms on :3002
Or launch from the AI Archives hub, which starts it automatically.
Game
- Maps: pick on the main menu.
- VECTOR — neon night three-lane arena (mid + long A + long B), two sites.
- FOUNDRY — ember-lit furnace hall, raised central platform, ring corridor.
- CANOPY — violet dusk rooftops: islands, bridges, a lower street level.
- Solo: CS rounds vs bots — buy phase → live → end, first to 8. Economy: $800 start, +$300/kill, +$3250 win, +$1400 loss.
- Multiplayer: free-for-all deathmatch, first to 15 kills. Create a room, share the 4-letter code, friends join from the MULTIPLAYER menu. The Node WebSocket server is authoritative for damage, kills, scores, and respawns; clients hit-test locally and report, positions sync at 15 Hz with interpolation (on a timer, so backgrounded tabs keep syncing). TAB shows the scoreboard.
- Characters: humanoid sphere rigs (head, emissive visor, torso, hips, gun hand) with per-player tint colors, fully ray traced like the world.
- Bots: waypoint-graph patrol, distance + view-cone + ray-traced LOS spotting, reaction delay, strafing return fire. 4 difficulty tiers.
- Settings (Esc): 36 options across graphics (resolution scale, RT bounces, shadow mode/samples, AO, fog, frame cap…), audio, controls, crosshair (style/size/gap/color/dynamic), game (bot count, difficulty, radar, damage numbers…). Quality presets potato→ultra. Persisted to localStorage.
Everything is generated at runtime: textures are procedural GLSL (triplanar brick/planks/brushed metal/hazard), all 21 SFX are synthesized Float32Array DSP (verifiable headlessly), the ambient loop included.
Visuals
- Ray tracing: primary + shadow + AO + reflection rays per pixel; characters are sphere/capsule rigs intersected analytically, with walk-cycle limb animation driven by movement.
- HDR bloom: the scene renders linear HDR to a half-float framebuffer; a bright-pass + separable gaussian blur (quarter res) builds the glow and a composite pass applies ACES tonemapping and vignette. Off/low/high setting.
- Blender Cycles assets (
blender/): all 7 weapons are modeled procedurally in Python and path-traced into transparent viewmodel sprites and buy-card art (assets/weapons/); each map is rebuilt from its real geometry and rendered as an isometric diorama for the map picker (assets/maps/). Re-render with:blender -b -P blender/weapons.py -- app/public/assets/weapons - FX: 3D impact sparks with gravity, muzzle flash anchored to the sprite barrel, inertial weapon sway, nebula sky with theme-tinted haze.
Playtest
test/playtest.mjs runs the real game in headless Chrome (SwiftShader
WebGL2) and verifies:
- boot with zero JS errors
- menu + 5 in-game vantage screenshots (pixel variance, not-black, sky≠floor)
- every procedural material renders a distinct swatch
- every SFX buffer has sane duration/peak/RMS
- gameplay: hitscan damage, ammo, bot navigation, bots engaging the player, round win on elimination, money payouts, buy-phase purchase flow
- settings: bounces visibly change pixels, resolution scale resizes the RT target, persistence
- perf snapshot per quality preset (software-rendering floor)
- maps: all three render, are >90% pixel-distinct from each other, bots navigate each; character close-up renders
- multiplayer: two real browser clients — create room, join by code, see each other, cross-client hit applies server damage, kill credits the scoreboard, victim respawns at full hp
cd test && npm install && npm run playtest
Latest result: 86/86 checks passed — see playtest/report.md and
screenshots in playtest/.