Use when changing the first-class Island Viewer shell, sequential generated-island viewer routing, or viewer-scoped graphics defaults.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add jasonkneen/tiny-world-builder --skill tinyworld-island-viewer --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Tinyworld Island Viewer?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jasonkneen-tinyworld-island-viewer)More formats (shields.io, HTML) on the badges page.
---
name: tinyworld-island-viewer
description: Use when changing the first-class Island Viewer shell, sequential generated-island viewer routing, or viewer-scoped graphics defaults.
---
# TinyWorld Island Viewer
Island Viewer is the first-class generated-island viewing surface:
- Shell: `island-viewer.html`
- Styles: `styles/island-viewer.css`
- Generator: `scripts/island-viewer-sequential-generator.js`
- Renderer adapter: `scripts/island-viewer-engine-runtime.js`
- Controller: `scripts/island-viewer.js`
- Compatibility redirect: `random-island-preview.html`
Rules:
- Keep the active generator viewer-only and sequential. `island-viewer.html`
should load `scripts/island-viewer-sequential-generator.js`, not the giant
`scripts/tinyworld-island-core.js` copied random-island bundle.
- Keep the builder-engine renderer stack active for now. Do not load
`scripts/island-viewer-renderer.js` on `island-viewer.html` while
`scripts/island-viewer-engine-runtime.js` provides the current look.
- The sequential layer stack is: all grass, first house, corner towers, paths,
extra houses, fenced crops, fenced animals, rock patch, water route, bridge
detection, strategic lanterns, plain stone outcrops, trees/bushes, then final
weighted infill.
- The viewer sequential generator must emit schema-valid `v:4` world cells,
use normal `terrain: "path"` cells for public path output, and expose
`TinyWorldIslandGenerator.generate(...)` and `.profile(...)`.
- Do not emit `water-bridge` or `bridgeAxis` metadata from the active viewer
generator. Bridges are allowed only through the new local detector: after
water carving, scan local crossings with path cells on one axis and water
cells on the perpendicular axis, then turn only the center water cell into a
normal `kind: "bridge"`.
- Strategic lanterns are native `kind: "lamp-post"` cells placed after bridge
detection. Keep them on empty grass cells that touch exactly two perpendicular
path cells, and keep every pair more than 3 Manhattan spaces apart.
- A manor is a rare native `house` with `buildingType: "manor"`, not a promoted
cottage. Only roll the 25% manor chance after at least three normal houses
exist, reserve its footprint during generation, and connect a path from the
cell in front of its door back into the existing path network before plots,
rocks, water, or lanterns run.
- Trees and bushes are native `kind: "tree"` / `kind: "bush"` decoration placed
after the functional path/water/bridge/lamp layers. Only use empty grass cells,
keep trees spaced out, and let bushes fill smaller remaining border/garden
opportunities without occupying paths.
- The initial fenced crop plot should keep its four dirt plot cells and fence
gates, but each cell rolls independently: 25% empty, otherwise evenly between
wheat, corn, carrot, pumpkin, and sunflower.
- The quarry/rock patch is the canonical ore showcase: its four cells should
emit `kind: "rock"` with `appearance.oreMetal` covering `copper`, `iron`,
`silver`, and `gold` once each. Extra infill ore may still pick a deterministic
metal, but the core patch should visibly expose all four variants. Prefer a
2x2 quarry; if earlier sequential layers leave no legal 2x2 space, place a
compact connected four-cell quarry without overwriting paths, water, fences,
structures, or reserved manor footprint cells.
- After the sparse tree/bush pass, run a final weighted infill loop over normal
empty buildable cells until none remain. The infill choices should stay within
native economy objects: crops, plain stone, ore, sheep/cow, bushes, and trees.
Plain stone should be generated by the dedicated outcrop layer and can be
extended by this weighted pass, clustered around stone/quarry terrain; do not
add a post-pass forced stone correction.
Do not fill water, paths, fences, structures, or reserved manor footprint cells.
- Water route planning must treat path crossings as single-cell crossings per
connected path area. Do not let water carve two adjacent path cells or run
along the path before turning back into normal terrain.
- Keep normal viewer chrome minimal. It is not a build screen: visible controls
should stay viewer actions such as New Island, Load, and Save.
- Put grid/seed and graphics controls in the local/developer defaults helper,
not in the primary viewer toolbar. Do not expose archetype as a viewer-facing
economy or card concept; it is only hidden generator input when a caller passes
it explicitly.
- Generated Island Viewer islands are fixed at `8 x 8`.
- Viewer runtime load applies the normalized 64-cell island once. Do not restore
the old `clearViewerWorld()` + full reapply double pass, and do not force
every tile rebuild during initial load. Use the
`window.__tinyworldIslandViewerLoading` guard to suppress interleaved renders,
then render once after the island settles.
- Viewer directional sun defaults to `10.0` (1000%). Migrate the old viewer
default `1.1` only when it still looks untouched; user-edited values should
stay user-owned.
- Persist viewer defaults only under `tinyworld:island-viewer:*`. Do not write
viewer graphics into normal builder `tinyworld:render:*` keys.
- Use `npm run stats:island-viewer -- --count 1000` for on-demand sequential
generator sweeps. The CLI loads the shared Raw Yield economy helper plus the
viewer generator directly, validates schema/invariants, reports Raw Yield
score/rarity/leader/resource summaries, and writes reports under
`stats-runs/island-viewer-sequential/`.
Validation:
- `npm test`
- `npm run build`
- `npm run stats:island-viewer -- --count 1000`
- Check `/island-viewer` or `/island-viewer.html`: page loads through the
builder-engine renderer, generated saves contain no legacy bridge metadata,
and the shell does not request `scripts/tinyworld-island-core.js` or
`scripts/island-viewer-renderer.js`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!