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> |
||
|---|---|---|
| assets | ||
| js | ||
| .gitignore | ||
| index.html | ||
| README.md | ||
| serve.py | ||
BOOKQUOY — a brisbane sesh
Late nights in the park in Moorooka, someone yells "BOOKQUOY!" into the dark. Friend or foe? A friend calls back "BOOKQUOYORK!" — and everything's sweet.
That's the game. Skate the parks of Brisbane, land tricks, hit the gaps, and collect B·O·O·K·Q·U·O·Y — light all eight letters and the game calls back.
Level 01: PADDO
Paddington Skatepark, 113 Caxton St (Neal Macrossan Park, opposite Suncorp) — Brisbane's premier street park, stylised from the council upgrade plan and local park guides: the looping island layout around the Moreton Bay figs, the fast green concrete, the 5ft square bowl in the west, the 6ft lumpy quarter at the south end, escalating transitions on the walls, and the street plaza — funbox with rail combo, tiered down-ledges, stairset with hubbas, long metal-capped ledge, P-rail, moguls with a rainbow rail, and the spine.
Every surface rides on one function — heightAt(x,z) in js/level.js is the single
source of truth for the visual mesh and the collision, so what you see is what you skate.
Three disciplines
| 1 SKATE | full trick bank: flips, varials, tre/laser, grinds on every rail and ledge |
| 2 BMX | bunnyhop, barspin, double barspin, tailwhip, X-up |
| 3 BLADES | same park, one catch: locals throw rubbish at you. Tradition. Dodge the cans or eat pavement to a chorus of "FRUIT BOOTS!!" |
Controls
W / ↑ push SPACE ollie / bunnyhop / hop off a grind
A D / ← → steer S / ↓ brake
J kickflip | barspin K heelflip | tailwhip L pop shove | x-up
(hold ↑ or ↓ with J/K/L for varials + specials)
T tre flip Y laser H hardflip N impossible F fs shove
R reset to the tennis-court entrance ENTER start / run it back
Land on rails and ledges to grind. Chain tricks before the wheels settle to multiply. 2:00 on the clock. Named gaps (THE STAIR GAP, CAXTON CARVE, BOWL HIP…) pay 300 a pop.
Run it
python3 serve.py 8141 # no-cache dev server
open http://localhost:8141
How it's built
- three.js, no engine, no bundler — plain ES modules.
- Characters + animation from the GODVERSE
character_kit: the two-rig system (rider rig + independently-animated board/bike rig), contact-solved with IK so feet sit on the deck and hands hold the grips. Tricks are data (js/tricks.js) — clip name + score — the design lesson taken from decompiling THUG's QB script tables. - Physics owns the root; clips are cosmetic and in-place (the other THPS lesson).
- Trick clips carry their own pop, so the controller treats clip-time as air-time and hands over to projectile physics only for drops.
Assets are original, license-clean, generated by the character_kit authoring tools. Character: "raver" (Mixamo base, converted + normalized on m3ultra).
Testing hooks
window.__step(seconds) advances the sim deterministically (the embedded browser pane
throttles rAF when hidden); window.__tp(x, z, heading) places the player; both exist
for headless verification and are harmless in play.
Roadmap
- More Brisbane parks: Fairfield bowl? Bracken Ridge? Mt Gravatt snake run?
- Manuals + lip tricks, bail balance meter, session goals ("50-50 the Long Metal Ledge")
- BOOKQUOYORK multiplayer call-and-response (two players, one park?)