park_kit/README.md
type-two 0c551843a7 expansion: 25 modular editor props (52 total) + pool tile / grate textures
John's editor taxonomy: kink/A-frame/donkey/down/square rails, pole jam,
hubba, low/table boxes, inclined manny, pyramid, euro gap, vert quarter,
wallride wall, volcano, roller, jersey barrier, parking block, hydrant,
pool coping, chain fence, floodlight, bleachers, drain grate.
propkit: alpha + emissive materials; lathe winding fixed (was inside-out).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 20:10:13 +10:00

70 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# park_kit — GODVERSE park object library
Reusable, textured, license-clean park objects for **bookquoy** and **skatemakerpro**
(and whatever comes next). 52 props, 20 photoreal surfaces, all original: geometry
authored parametrically in `tools/prop_author.py`, textures generated on the
MODELBEAST farm (flux_local, local GPU, no cloud spend).
## The contract
**`props/` and `textures/` ship together.** GLBs are geometry-only (224KB) and
reference `../textures/*.jpg` by relative URI, so every prop shares one texture set
and the browser caches each surface once. Move a GLB without the textures folder
and it loads grey.
`manifest.json` is the catalog. Per prop:
| field | meaning |
|---|---|
| `src` | `props/<id>.glb` — drop straight into a skatemakerpro `props[]` entry |
| `grinds` | grindable edges in **prop-local metres** `{a:[x,z], b:[x,z], ya, yb, kind}` — rotate/translate with the prop, append to the park `rails[]` |
| `element` | matching skatemakerpro terrain kind (`quarter`/`bank`/`funbox`/`spine`/`ledge`/`mogul`) with params — place alongside ramp props for real collision from the heightfield |
| `collider` | simple blocker hint for furniture/trees (`box`/`cylinder`/`none`) |
| `size` | world-space bounding box `[x, y, z]` |
Sampler is MIRRORED_REPEAT — tileable-intent textures never show a hard seam.
UVs are world-scale (metres per tile fixed per material), so texture density
matches across every prop.
## Catalog
- **transition:** qp_24, qp_18, qp_vert (8ft), wallride_qp (to-vertical, concrete),
spine_ply, bank_12, kicker, launch_high, euro_gap, pyramid, funbox_ply,
volcano, roller, pipe_full (graffiti-bombed concrete full pipe), mound_dirt
- **rails:** rail_flat_3m, rail_flat_6m, square_flatbar, rail_down, rail_kink,
rail_kink2 (double), rail_aframe, rail_donkey (kinks up), rail_rainbow,
pole_jam (35°)
- **ledges/boxes:** ledge_concrete, grindbox_ply, box_low (10in),
box_table (24in), manual_pad, manny_incline, hubba_down (flat-to-down)
- **street furniture:** bench_park, bench_concrete, picnic_table, bin_council,
bollard_steel, railing_ped_2m, planter_box, jersey_barrier, parking_block,
hydrant, pool_edge (bullnose coping + tile band), bleachers_3
- **vegetation:** tree_fig (Moreton Bay, buttress roots), tree_gum (eucalypt)
- **infrastructure/dressing:** kerb_3m (slappy central), wall_graffiti
(wallride bait), shade_sail, fence_chain_3m, floodlight, drain_grate
## View it
```bash
python3 serve.py 8151 # then open http://localhost:8151
```
Dropdown per prop or the full grid; red lines = grind metadata (toggle).
`window.__view(id)` / `window.__ready()` hooks for headless checks.
## Regenerate
```bash
python3 tools/gen_textures.py # MODELBEAST textures (idempotent; --force name to redo)
python3 tools/prop_author.py # all GLBs + manifest.json
```
`tools/propkit.py` is the textured-GLB writer (UVs + external images — the
character_kit writers' upgrade). `fan(..., out=)` auto-orients windings; lathe
UVs wrap girth-first to match tube (bark ridges stay vertical).
## Provenance
Everything here is original GODVERSE work. Textures: flux2-klein-4b on the farm,
prompts in `tools/gen_textures.py`. No game assets, no trademarks, no scans.