F8 toggles edit mode. Tools: brush/line/rect/ellipse/flood/gradient/picker; ink meanings write LOOK/FLOOR/WALL/WATER/DEPTH across the four screens; V overlays priority/control/hotspot; hotspot rects, prop placement, spawn, and a :colon command line (save/name/enter/music/weather/exit/room/hotmsg). Every editor action is a bus Command (paint_op, undo_op, clear_ops, set_spawn/exit/music/weather/room_name/enter_text, upsert/delete hotspot+prop) so MCP clients wield identical powers. PicOp::Brush added; docs/EDITOR.md. Verified: 5 suites green, playthrough events byte-identical to pre-editor build, GUI boots. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
50 lines
2.2 KiB
Markdown
50 lines
2.2 KiB
Markdown
# The in-engine room editor
|
||
|
||
Press **F8** in the game to flip into edit mode (the sim freezes; F8 again
|
||
to play-test instantly). Everything the editor does is a bus `Command` —
|
||
an LLM on the MCP surface has exactly the same powers with the same JSON.
|
||
|
||
## Tools & keys
|
||
|
||
| Key | Meaning |
|
||
|---|---|
|
||
| `B` `L` `R` `O` `F` `G` `K` | brush · line · rect · ellipse · flood fill · gradient · color picker |
|
||
| `M` | cycle what the ink writes: LOOK → FLOOR → WALL → WATER → DEPTH → HOTSPOT |
|
||
| `V` | overlay the invisible screens: priority / control / hotspot |
|
||
| `[` `]` | depth band 0–15 (DEPTH mode) |
|
||
| `-` `=` | brush size |
|
||
| `U` | undo last paint op |
|
||
| `S` | set the room spawn at the cursor |
|
||
| `P` | place a prop of the selected sprite (`,` `.` cycle sprites) |
|
||
| `X` | delete the prop under the cursor |
|
||
| `Enter` | open the `:` command line |
|
||
| palette panel | left-click = primary color, right-click = secondary (gradients) |
|
||
|
||
Meanings write multiple screens at once, MRPGI-style but with four screens:
|
||
**FLOOR** paints color + default depth band + open control; **WALL** paints
|
||
color + blocked control; **WATER** color + water; **DEPTH** forces a band
|
||
(walk-behind scenery); **HOTSPOT** + the rect tool creates a named clickable
|
||
region (no pixels painted — it lives on the hotspot screen).
|
||
|
||
## Colon commands
|
||
|
||
```
|
||
:save write rooms/roomN.json
|
||
:name Neon Row room display name
|
||
:enter TEXT entry prose
|
||
:music N 0 off · 1 calm · 2 eerie · 3 tense · 4 jolly · 5 spooky · 6 noir
|
||
:weather N 0 none · 1 rain · 2 snow · 3 embers
|
||
:exit e 2 edge exit (n/e/s/w) to room 2; `:exit e -` clears
|
||
:room 7 jump rooms (a missing room is a fresh blank one)
|
||
:clear drop all paint ops
|
||
:hotspot NAME rename the most recently drawn hotspot
|
||
:hotmsg look TEXT give the newest hotspot a verb response
|
||
:delhot NAME delete a hotspot
|
||
:help the cheat sheet
|
||
```
|
||
|
||
Dialogue trees, prop lock-and-key fields, scale tables and palettes are
|
||
data — edit the room JSON (or drive `upsert_room` over the bus) for those.
|
||
The editor covers the 90%: geometry, paint, walkability, depth, hotspots,
|
||
props, exits, mood.
|