Playtesters asked, the ball answered: arrow keys, orbit camera, a heavier jump
We played the Windows build like real players and wrote down every 'why can't I…' — then fixed the lot. Arrow keys now work alongside WASD.
In plain words
We played the Windows build like real players and wrote down every "why can't I…" — then fixed the lot. Arrow keys now work alongside WASD. The camera swings around you on Q/E, the right stick, or a right-mouse drag. The ball moves like it has weight: it accelerates toward where you point, brakes hard when you reverse, and coasts a little slide when you let go. The jump is heavier and squashes flat on landing before springing back. And there's finally a pause menu where you can rebind every key and have it stick. One knock-on: our robot playtester used to cheat by knowing the old physics, so we had to teach it to actually play like a person again.
Under the hood
- Controls pass (
5a1d041): arrow keys join themove_*actions; a new orbit camera addscamera_left/right/up/downon Q/E + right stick + right-mouse-drag.PlayerBallswapped constant torque for a velocity-target model — it accelerates toward the input, actively brakes opposing velocity (harder when reversing), and coasts a short speed-proportional slide on release. Visual roll is synced to ground speed (ω = v/r). - Options menu:
Escopens aprocess_mode = ALWAYSpause menu (Resume/Options/Quit); Options lists every remappable action with click-to-rebind and Reset, persisted touser://input_binds.cfgand applied at startup. Built entirely in code viaInputSettings+PauseMenuautoloads — nomain.tscndependency. A follow-up (ad90c5f) routes every panel through_show_panel()so keyboard and gamepad players get focus for free. - Ball feel (
4f71ede):gravity_scaleup to2.0for a snappier hang time, jump impulse raised9 → 13to hold roughly the same apex (h = v²/2g). Squash-and-stretch lives on the visual mesh only — stretch+1.0on jump, squash−0.45on landing, decaying back at 9/s with rough volume conservation. Camera pitch also gets physical R/F keys. - Re-teaching the robot (
c2e473c,789e7f9): the new slide/brake feel broke the goal bot — full-speed jumps sailed ~25m past 5m platforms, and it hopped at walls forever, tanking from ~950m to ~300m in 90s.GoalSeekPolicynow approaches step climbs like a human: line up straight, shed speed to a ~3 m/s hop pace, time the jump from projectile prediction, release keys mid-flight, and retreat-and-rerun instead of bonking in place. It also derives jump kinematics from the player's actualjump_impulse/gravity rather than hardcoded constants, so future feel tweaks can't silently fool it. Verified: wins on seeds 1–5 × keyboard+gamepad. - Naming the build you soaked (
1e14ba2):GAME_BUILD_FINGERPRINTwas exported but compiled in nowhere, so every binary reported "dev".SConstructnow injects it as a guarded C string and scheduled jobs stamp the samev<year.week>+<shortsha>formula — playtest reports now name the exact release they tested, and the scheduledbuild:linuxartifact is bit-identical to the release rebuild. A Monday WSL keeper task holds the VM open so the weekly train can actually fire.