Open golden scene Return to MarsScape

DEC-79 production decision

2:1 dimetric, preserving the shipped board

The grid advances 42px east/west and 21px south per axis. A logical tile occupies an 84×42 diamond; the terrain face remains the shipped 66×34 inset diamond. This choice avoids asset and input-coordinate churn.

Logical tile84 × 422:1 footprint
Drawn face66 × 34terrain inset
Ground contactsBottom centreresources +12 · buildings +18 · other feet +4
Actor anchorFeet +4bottom centre
Global lightNW → SEshadows fall southeast
Board11 × 11940 × 620 canvas

Measured grid

Generator handoff surface

Overlays

The solid diamonds are the drawn terrain faces; dotted outlines show logical tile bounds. Cyan marks the tile-centre prop anchor, parchment marks actor feet, and amber outlines show multi-tile footprints.

Runtime fallback proof

ImageBitmap cache

Priming 33 authored sprites…

These code-owned fallback maps are rasterized once, cached as ImageBitmap objects, and drawn with smoothing disabled. Validated commissioned PNGs use the same cached-bitmap rule through the runtime index.

Non-negotiables

Asset acceptance rules

  1. Transparent PNG, nearest-neighbour scaling, no baked drop shadow.
  2. Northwest key light; darkest cast shadow falls southeast.
  3. Logical props register to tile centre. Node, building, and actor canvases use a bottom-centre ground contact at their measured renderer offsets.
  4. Multi-tile buildings declare width × depth in grid cells; their anchor is the footprint centre.
  5. Every prompt repeats the locked palette and cites two approved anchors from the same material family.
  6. States are blueprint, construction, active, disabled, and damaged. A missing state falls back through the contract ladder without blocking gameplay.
  7. Filename: sprites/<family>/<id>__<state>__f<frame>.png; IDs use lowercase snake_case and two-digit frames.

Palette lock

Approved production colours