Skip to main content

tinyworld-tinyverse-race-track

Use when changing the Tinyverse ground-surface race track, perimeter bridge loop, rally karts, or poser-surface show/hide hook.

Source facts

Repository
jasonkneen/tiny-world-builder
Last source activity
June 15, 2026 at 12:15
Detected SKILL.md language
English
Stars
1,619
Forks
216

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
tinyworld-tinyverse-race-track
description
Use when changing the Tinyverse ground-surface race track, perimeter bridge loop, rally karts, or poser-surface show/hide hook.
# Tinyverse Race Track The race track lives in `engine/world/61-tinyverse-race-track.js`. Rules: - Keep the system isolated from avatar files. The track wraps `window.__tinyworldPoserSurface.{build,show,hide}` and attaches one root group under the poser-surface group. - Respect sky-island vs ground-surface separation: do not add race-track meshes to `worldGroup` directly and do not mutate editable island or home-grid cells. - The poser surface scales Y three times harder than X/Z. Keep `root.scale.y = 1 / 3` and multiply sampled terrain heights by `3` before placing track/kart geometry. - Use existing TinyWorld material families (`M.path`, `M.pathTrim`, `M.bridgeWood`, `M.bridgeWoodD`, `M.castleStoneD`) instead of new texture assets. Clone them locally when the track needs `fog=false` readability, but never mutate shared `M.*` materials. - Keep static road/bridge pieces in a static subgroup and run `mergeStaticBaseMeshesByMaterial(...)` after authoring. Dynamic karts should stay in their own subgroup and animate by transform only. - The HUD should be visible only while the poser surface is visible. `PS.hide()` must hide it and clear active race state. - Keep an obvious user-facing entry point. The `Play rally` launcher should call `watch()`, descend to the poser surface, frame the route from the ground layer, and start the race after the descent settles. Do not leave the rally as a console-only or hidden-key feature. - Watch mode may set `body.tinyverse-rally-watch` to clear obstructive editor panels and use a lightweight follower camera. Keep this state scoped to `watch()` and clear it on hide. - Do not create a local `requestAnimationFrame` loop. The module exposes `window.__tinyworldRaceTrack._tick(dt)`, and `25-animation-loop-schema.js` calls it from the main loop; `_tick` must stay a fast no-op while hidden. - Public runtime hook: `window.__tinyworldRaceTrack` exposes `show()`, `hide()`, `watch()`, `startRace()`, `stopRace()`, `rebuild()`, `group()`, and `routeLength()`. Validation: - `node --check engine/world/61-tinyverse-race-track.js` - `node tools/check.js` - Visual check: click `Play rally` or call `window.__tinyworldRaceTrack.watch()` and confirm the app descends to the ground islands, frames the road loop, shows the HUD, and starts moving karts.
View on GitHub