Monorepo for Aesthetic.Computer aesthetic.computer

arena: walls, pillars, strafe-jumping, solid player meshes master

Closes the open todo at the top of disks/arena.mjs. 🧱 Static obstacles. New shared module `lib/arena-world.mjs` exports ARENA_OBSTACLES (4 corner pillars, a center totem, two staggered cover walls) — imported by both disks/arena.mjs (client + render) and session-server/arena-manager.mjs (authority), so what you see is what blocks you. lib/pmove.mjs gains `resolveObstacles` (cylinder push-out + AABB push-out, Y-bounded so high jumps clear them); the client runs the same routine inside lib/cam-doll.mjs after horizontal integration so prediction stays converged with the server without depending on the reconciler to push you out of walls. 🏃 Strafe-jumping / bunny-hop. lib/pmove.mjs takes opt-in `airAccel`, `groundAccel`, `airCapSpeed`, `groundFriction` cfg keys. When set, the legacy hVelDecay lerp is replaced by Q3 ground-friction + ground/air-accelerate. Air mode caps wishspeed (Q3's air-control window) so perpendicular wishdir adds velocity without subtracting forward speed — strafe-jumping accumulates speed past runSpeed. Jump edge-trigger moved before friction so a held jump preserves landing speed (PMF_TIME_LAND trick). lib/cam-doll.mjs mirrors the same physics on the client (owns the dolly's horizontal velocity when Q3 mode is on; dolly.dec set to 1 so dolly.sim acts as pure integration). Tunables live in ARENA_PHYSICS in arena-world.mjs. 🧍 Solid player meshes. buildRemoteBody in arena.mjs replaces the line stick figure with a boxy humanoid (head, torso, arms, legs) emitted as type:"triangle" with shaded face colors. The +Z face of the head gets a darker visor so facing direction reads at a glance. Watchers stay translucent; named handles render solid. Walls + pillars get matching solid meshes too — cylinder side+top fans for pillars, full 6-face boxes for walls, plus golden top-rim line outlines so silhouettes survive fog. Drawn after the ground in paint(). Knockback note: applyImpulse rescales for the Q3 dolly convention (per-second world velocity ÷ simHz), so existing EXPLOSION_KICK_HOR values may now feel weak — tune in arena.mjs if needed. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>


+589 -41
5 changed files