skatemakerpro/README.md
type-two 188921278e park_kit integration: textured props with linked collision + grinds
serve.py mounts ../park_kit at /kit/. New PARK KIT drawer browses all 52
manifest props (filter + category groups); placing one creates a linked unit:
textured GLB + matching heightfield element (anchored on the coping/grind
line; quarter kind gained an optional h cap for truncated real-mini-ramp
transitions) + grindable edge rails. Move/rotate/scale/delete cascades through
the links. Kit textures also drive the ground: park.surf {slab,grass} pattern-
fills the bake (concrete_green, tarmac, grass_dry...), PARK panel selects.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 21:04:31 +10:00

91 lines
5.3 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), 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