Installs into .claude/skills of the current project.
Are you the author of Tinyworld Tinyverse Race Track?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/jasonkneen-tinyworld-tinyverse-race-track)
---
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.