Go to file
type-two d68fa84f92 Kit thumbnails + prop colliders
js/kitthumbs.js renders each kit GLB to a 128x96 sprite once (offscreen
renderer, framed by bounding sphere), POSTs to /api/kit-thumb, and all 52
are committed under assets/kit_thumbs/ so every checkout gets instant thumbs;
the generator only runs for props without one (future kit drops). KIT drawer
shows them with category groups and filter.

js/colliders.js derives world-space colliders from kit manifest hints +
a table for builtin props (bins, planters, trunks, fences...). Test ride
resolves circle-vs-box/circle push-out — you scrub and stop instead of
riding through furniture. Exports gain an additive COLLIDERS array for
bookquoy to adopt when its player is ready; existing contract untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 21:13:36 +10:00
.claude SKATEMAKER PRO v1 — stand-alone park builder/editor for BOOKQUOY 2026-08-03 19:34:45 +10:00
assets/kit_thumbs Kit thumbnails + prop colliders 2026-08-03 21:13:36 +10:00
docs GODVERSE grass system + test-ride grinds 2026-08-03 20:39:45 +10:00
js Kit thumbnails + prop colliders 2026-08-03 21:13:36 +10:00
parks Modular custom bowls: polygon pools with per-vertex depths 2026-08-03 20:26:47 +10:00
.gitignore SKATEMAKER PRO v1 — stand-alone park builder/editor for BOOKQUOY 2026-08-03 19:34:45 +10:00
index.html Kit thumbnails + prop colliders 2026-08-03 21:13:36 +10:00
README.md park_kit integration: textured props with linked collision + grinds 2026-08-03 21:04:31 +10:00
serve.py Kit thumbnails + prop colliders 2026-08-03 21:13:36 +10:00

SKATEMAKER PRO — stand-alone park builder

The park editor for BOOKQUOY (and whatever comes after it). Born from bookquoy's one rule: heightAt(x,z) is the single source of truth — the same element data drives the editor viewport, the collision, the test ride, and the exported game level. Shape it in the editor and it is the real thing.

Run it

python3 serve.py            # http://localhost:8093

serve.py is static hosting plus the MODELBEAST proxy (token read from ~/Documents/backnforth/.env server-side — never shipped to the browser) and park/asset persistence (parks/, assets/uploads/).

The editor

  • TRANSITION — quarter (escalating radius, lump, vert extension), hip/corner quarter, bank, kicker (tunable concavity), spine, roller/pump bump, mogul, volcano, bowl (square pool or round), and the CUSTOM BOWL: a polygon pool where every rim vertex is a draggable ball with its own depth slider. Inside corners = drag a vertex in, hips = out, shallow-to-deep escalator = ramp the depths, waterfall = two close vertices with different depths — one continuous carve, no seams by construction. Auto pool coping (bullnose tube, exported as grindable ledge segments) and a tile band baked into the ground texture. STREET — funbox, pyramid, ledge, wedge/manny pad (inclined), stairs, island. Click a piece, click the ground. Drag to move, [ ] rotate, D dupe, delete, ⌘Z undo, optional 0.5m grid snap (THPS style).
  • STEEL — rails are polylines: flatbar, square bar, down rail, kink, double-kink, rainbow, A-frame, pole jam, donkey kick — or draw your own (RAIL, two clicks) and + POINT for kinks. Round pipe (with posts) or square angle-iron profile; every node is a draggable ball. Exports flatten to straight segments so bookquoy's grind detection needs zero changes.
  • PARK KIT — the textured object library (../park_kit, mounted at /kit/): 52 original GLB props with photoreal MODELBEAST textures. Placing a kit obstacle brings the whole package as one linked unit: the textured mesh, a matching heightfield element for real collision (quarters anchor on their coping line, truncated-transition math for real mini-ramp geometry), and its grindable edges as linked rails — move/rotate/delete the prop and everything follows. Kit surfaces also texture the ground: slab/grass texture selects in the PARK panel (green concrete, tarmac, dry grass, brick...).
  • PROPS — parametric street furniture: jersey barrier, picnic table, parking block, bench, trash can, hydrant, chain-link fence, floodlight, bleachers, shade sail, fountain, drain grate, fig tree. Make any prop grindable by drawing a ledge rail along its edge. (Overhangs — cradles, capsules, over-vert — aren't heightfield-able; those arrive as MODELBEAST GLB props.)
  • SPOTS — named score gaps, B·O·O·K·Q·U·O·Y letters, spawn point.
  • SURFACE — paint zones (rect/ellipse, any color), image decals (drop any image on the window, or generate one on the farm), and a reference underlay for tracing a real park from an aerial photo.
  • MODELBEAST panel — browse farm assets, one-click PLACE any GLB as a park prop, use any farm image as a decal, GEN IMAGE (flux_local, ~9s), MAKE 3D (hunyuan3d_mlx image→GLB). Everything free and local on the m3ultra queue.
  • PARK CHECK — live design linter encoding docs/DESIGN_PRINCIPLES.md: pumping geometry, run-out clearance, crossing lines, skill tiering, buried/floating steel.
  • GRASS — reusable GODVERSE grass system (js/grass.js + docs/GRASS.md): GPU-instanced blades, vertex-shader wind, root→tip fake-AO gradient, player-push. Styles: lush, dry, pixel (nearest-filter PS1 cards). Auto-grows on the parkland ring + islands; style/density in the PARK panel. Lift the single file into any game.
  • ▶ TEST RIDE (Enter) — instant Create-A-Park-style build↔skate toggle with bookquoy's physics constants over the live data. W push, A/D steer, Space ollie, land on any steel to grind (rails, ledges, pool coping — pop off with Space), and the grass parts around you.

Park format

parks/*.json — bounds, spawn, elements (parametric primitives evaluated by js/parkmath.js), rails (polylines), gaps, letters, zones, decals, props, optional underlay. Premade parks: parks/paddo.json (Paddington Skatepark ported from bookquoy) and parks/pool_demo.json (THE POOLROOM — custom-bowl showcase, passes PARK CHECK clean). Load them, ride them, remix them.

Export → BOOKQUOY

⬇ LEVEL.JS generates level.<name>.js exporting bookquoy's exact level.js contract (heightAt, normalAt, BOUNDS, RAILS, GAPS, LETTERS, SPAWN, buildLevel). To ship a park:

  1. copy js/parkmath.js + js/parkbuild.js + the generated level.<name>.js into bookquoy/js/, and any assets/uploads/ files it references
  2. point the two imports (main.js, player.js) at the new level file

⬇ JSON downloads the raw park data; SAVE/LOAD… persist to parks/ on disk.

Lineage

  • bookquoy (../bookquoy) — the game this feeds; level 01 PADDO
  • ~/Documents/thwk/THPS_STUDY.md — Neversoft architecture study (technique only, no extracted assets ever ship)
  • THPS Create-A-Park — inspiration for the palette/test-loop/themes/premade-parks shape