[LMB] Next · [RMB] Prev · [R] Free Cam · [ESC] Menu
FIRE
JUMP
THIRD RAIL
A Three.js Arena Shooter
v0.3.40.035 — 2026-05-30 SlopCode Seal of Approval
Default Map: Areowalk is copyright 2007, Ben Edney Game under constant development. Things may be broken or not work
SETUP GAME×
Match
Not installed
0%
MAPS
Bots
50
Rules
1.00×
2.0s
100
25
Debug
SERVER BROWSER×
NAME
MAP
PLAYERS
TIME
PING
THIRD RAIL — ONLINE
WAITING… | |
PLAYERS
SETTINGS×
Player
3.0×
Crosshair
2
3
2
0.85
1.00
Dot
2.5
Health / Armor Bars
+0
1.00×
Target Name
15px
0
Video
100%
Off = render at 1:1 (much faster on retina/4K)
Audio
80%
Sound Pack
—
0%
Input
Bot_0
DEBUG×
Bodies
Bot AI
World
Overlay edge lines (deduped mesh edges, not full triangle wireframe) on every mesh, but only during the portal RT pass. Shows what's actually being drawn into each portal view so you can see overdraw / poor culling.
Combat
Dev
(needs Skeleton Bones on)
Graphs (uncheck to hide a row from the [Z] overlay)
Off = numeric values + avg only. Drawing 1800 samples × N rows of canvas paths has measurable cost on its own — disable when you want the overlay to NOT affect what it's measuring.
History window stored per row. Changing this wipes existing samples and reallocates the ring buffers.
Frames per second (1000 / frameDt)
ms between server snapshot arrivals
total RAF frame dt
ms since last 60 Hz input tick (high = stalled)
WebGL draw calls per frame
triangles rendered per frame
line segments rendered per frame
total geometries allocated (climbs on leaks)
total textures allocated
shader programs compiled
ms between snap arrivals
horizontal mispredict per snap (units)
vertical mispredict per snap — jump axis
velocity mispredict per snap (u/s)
unacked input buffer length
per-frame pState.pos motion magnitude
per-frame camera.position motion magnitude
|camera.y − (pState.y + EYE_OFFSET)|
per-frame view-angle change (mrad)
ms since last input tick
Frames per second
total RAF dt
top-level meshes / groups in scene
local actors array length
local bots array length
legacy ring (rocket trails, pad sparks)
Particles subsystem alive count (sum of liveCount)
active ragdoll bodies
WebGL draw calls per frame
total geometries allocated
Frames per second
total RAF dt
renderer.render() submit time
Particles.tickAll() time
applySnapshots() reconcile + replay time
ms since last input tick
last >50 ms browser task (single-task hitch)
pulse train (1 = dropped frame, 0 = clean)
ms between snap arrivals
unacked input buffer length
IMPORT MAP
Paste map JSON or legacy MAP START/END text below.