Data-driven parks: one heightAt(x,z) evaluated from element JSON drives the editor viewport, collision, test ride, and exported game levels. Ships with Paddo ported from bookquoy, a MODELBEAST panel (gen images, cut bg, image->3D, place farm GLBs as props), image decals + reference underlay tracing, a park design linter (docs/DESIGN_PRINCIPLES.md), THPS-style instant test ride, and a level.js codegen that drops straight into bookquoy. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
2.9 KiB
Markdown
60 lines
2.9 KiB
Markdown
# 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
|
|
|
|
- **BUILD palette** — quarter, bank, funbox, pyramid, ledge, stairs, spine, mogul, bowl,
|
|
island. Click a piece, click the ground. Drag to move, `[` `]` rotate, `D` dupe,
|
|
`⌫` delete, `⌘Z` undo, optional 0.5m grid snap (THPS style).
|
|
- **SPOTS** — rails/ledge-caps (two clicks, draggable end-balls), 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.
|
|
- **▶ 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.
|
|
|
|
## Park format
|
|
|
|
`parks/*.json` — bounds, spawn, `elements` (parametric primitives evaluated by
|
|
`js/parkmath.js`), `rails`, `gaps`, `letters`, `zones`, `decals`, `props`, optional
|
|
`underlay`. `parks/paddo.json` is Paddington Skatepark ported from bookquoy — load it,
|
|
ride it, remix it.
|
|
|
|
## 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
|