New heightfield kinds: hip/corner quarter, kicker (tunable concavity), roller, wedge/manny pad, volcano, round-bowl option, quarter vert extension. Rails are now polylines (kink/dbl-kink/rainbow/A-frame/pole-jam/donkey presets, round or square profile, per-node drag handles) that flatten to straight segments on export so bookquoy grind detection is untouched. 13 parametric street props (jersey barrier, picnic table, parking block, fence, floodlight, bleachers...). Palette regrouped TRANSITION/STREET/STEEL/PROPS; park check covers new kinds. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
71 lines
3.7 KiB
Markdown
71 lines
3.7 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
|
|
|
|
- **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). **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.
|
|
- **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.
|
|
- **▶ 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
|