CtrlK
BlogDocsLog inGet started
Tessl Logo

tinyworld-island-viewer

Use when changing the first-class Island Viewer shell, sequential generated-island viewer routing, or viewer-scoped graphics defaults.

68

Quality

83%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

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.
Repository
jasonkneen/tiny-world-builder
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.