# 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 **Controller** (PS5 DualSense over Bluetooth, or any standard gamepad — press any button after connecting so the browser picks it up): ``` left stick / dpad steer · up = push + up-variants · down = brake/varials R2 push ✕ ollie / bunnyhop / hop off a grind ◻ kickflip|barspin ○ heelflip|tailwhip △ pop shove|x-up R1 tre flip L1 fs shove L2 hardflip OPTIONS start / run it back CREATE reset ``` Rumble on bails and bonks. On the title screen: dpad picks your discipline, ✕ drops in. **Keyboard** ``` 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 ```bash python3 serve.py 8141 # no-cache dev server open http://localhost:8141 ``` Textured trees + street furniture come from the **park_kit** sibling repo (`monster/park_kit`, checked out next to this one — serve.py mounts it at `/kit/`, or point `PARK_KIT=` elsewhere). Without it the park runs bare. Parks built in **skatemakerpro** export a `level..js` with this exact level.js contract and drop straight in. ## 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?)