497c13972718634cbd61472a11b0ade840b54b36
work.map.json was still schema-v2 with the legacy fa_terrain_v1 atlas — neither has a `material` field on its layers, so the renderer's vertex/blob path never fired and Auto-Tile painting had no visible effect (the set_vertex writes landed but the renderer fell back to the cell-tile path that doesn't consume them). Migration: - schema_version 2 -> 3 - size 4x4 -> 16x16 (room to paint) - atlases: fa_terrain_v1 -> blob_rect_stone (S-V2E2-RM-Blob 14-slot atlas from lib-asset.prototype-blob-geom) - layers: surface + wall, both with "material": "blob_rect_stone"; vertices+overrides start empty (lib-core.maps lazy-allocates on first set_vertex) Manifest: - asset_aliases: fa_terrain_v1 -> blob_rect_stone (lib-asset. prototype-blob-geom) - deps: drop prototype-fa-starter, add prototype-blob-geom 0.1.0
sporel-module-map-editor
Interactive map editor for v2 Sporel map files. Click-to-paint, vertical layer-chip overlay on the left edge, collapsible atlas+tile picker bottom-left.
Run
Default — edit the module's in-place work map:
bash scripts/run-map-editor.sh
With a target — copy a real map in, edit, copy back out:
bash scripts/run-map-editor.sh ~/Projects/Sporel/sporel-modules/spine-prototype/maps/demo.map.json
UI
- Layer chips (left edge, vertical): top-of-stack down.
Rfat top toggles roof-edit mode; the other eight chips select the active layer.- Left-click = set active layer (or toggle roof mode)
- Right-click = toggle layer visibility (Rf chip ignores right-click)
- Atlas + tile picker (bottom-left): collapsed chip shows the active tile. Click to expand; click again or outside to collapse.
- Status chip (bottom-right): current mouse-cell coordinate plus a
*when the map has unsaved changes.
Hotkeys
| Key | Action |
|---|---|
Left click on map |
Paint cell with active tile (or set roof flag in roof-mode) |
E |
Erase the cell under the mouse |
R |
Cycle rotation 0 → 1 → 2 → 3 → 0 |
S |
Save to disk (overwrites the work map) |
Esc |
Quit |
Limitations (v0.1.0)
- Tile thumbnails in the picker render as gray placeholders with tile-IDs as text — lib-core.maps v0.4.0 does not expose per-tile UVs to Lua, so visual thumbnails are a v0.2.0 task.
- Atlas list in the picker is purely informational; if a map declares multiple atlases, the active atlas is set from
state.luadefaults at startup and cannot yet be switched via UI (v0.2.0 hit-tests inside the expanded picker). - Engine bindings
engine.render.draw_rect_linesandengine.render.draw_lineare not yet registered — active-chip borders, hidden-layer strikethroughs, and the entity-slot divider will trigger runtime errors when their code paths execute. Adding the bindings is a small engine-side follow-up. - No undo/redo, no multi-tile brush, no entity placement, no heightmap editing — see the design spec §1 for the full out-of-scope list.
Spec
docs/superpowers/specs/2026-05-23-sporel-module-map-editor-design.md in the sporel-meta repo.
Description
Languages
Lua
98.3%
Shell
1.7%