js/pad.js synthesizes the same KeyboardEvents the keyboard produces —
one input path, zero new handler code. Stick/dpad steer (+variants),
R2 push, CROSS ollie, SQUARE/CIRCLE/TRIANGLE flip/heel/shove, R1 tre,
L1 fs shove, L2 hardflip, OPTIONS start, CREATE reset. Dual-rumble on
bails and bonks. Title screen: dpad cycles discipline, CROSS drops in
(Space now works there for keyboards too). Verified with a stubbed
DualSense through __step: push 7.6m/s, steer, ollie->kickflip x2 (220).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
level.js adopts skatemakerpro's COLLIDERS export shape (box|circle) so
editor parks drop in: box tops join heightAt (land on the picnic table),
circles push out (bins, trunks, hydrants). player.js: hard-edge step
block in roll + bail, blocker resolve in fall, bonk -> stumble + flash
('STRAIGHT INTO THE BIN'). Kit grinds append to RAILS (bench boardslides,
trolley 50-50s); props declare gap triggers vs terrain height (y0).
New Paddo street set: two trolleys, slappy kerbs, planters, parking
block, jersey barrier. Verified: bin stop at contact, planter stand
y=0.50, bench + trolley grinds, 'Tre Flip + TROLLEY GAP + 50-50
(trolley) x3 (2109)'.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Level 01: Paddington Skatepark from the council plan + park guides —
heightAt(x,z) single-source terrain, grindable rails/ledges, named gaps,
B-O-O-K-Q-U-O-Y letters with the BOOKQUOYORK callback.
SKATE / BMX / BLADES (blades cop thrown rubbish, as is tradition).
character_kit two-rig banks: physics owns the root, clips are cosmetic.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>