diff --git a/Concepts.md b/Concepts.md index ab1a38c..f6da5d6 100644 --- a/Concepts.md +++ b/Concepts.md @@ -12,7 +12,7 @@ | **Enabled** | Every placeable asset has the switch `enabled` (default on). A disabled object is not drawn, does not collide and its behavior does not run — **and neither does anything parented below it**. Switching one instance off is a normal override, which makes a container a *screen*: switch it on to show it, off to hide it. From a graph, `Properties` with `enabled` switched to Set does it, and `Is enabled` asks (including the parents); a behavior hears the switch as `On enable` / `On disable`. | | **Scene object** | An asset placed into a scene: a link to the asset + a **position** (`x`, `y`, `z`) + sparse **overrides** of the asset's properties + an optional **parent** (another object of the scene). Drawn objects also carry **transform** rows (scale, rotation, mirror) — properties like any other, and they cascade to children the way a position does (see [Scene editing](Scene-editing)). Scenes cannot be placed. | | **Container** | A reusable group ("prefab"): the asset holds a **template** of objects (asset link, local position, overrides, parent links) centred on its origin. Placing a container stores the container object **and nothing else** — its content is resolved from the template on every read, so a template edit reaches every instance at once. **Create container** turns the current selection into such an asset: the selected objects move into the template and the scene keeps one placed container at their centre (world positions unchanged). The template is edited in the **Container** tab (see [Containers](Containers)) or from an instance through **Apply to container**. | -| **Selection** | One or more scene objects. Click selects, `Ctrl`/`Shift`-click adds/removes, dragging on empty scene space draws a rubber band (objects whose position lies inside are selected). Dragging a selected object moves the whole selection; `Delete` removes it; the inspector offers **Create container** and **Remove** for several objects. | +| **Selection** | One or more scene objects. Click selects the topmost object as it is drawn, `Ctrl`/`Shift`-click adds/removes, dragging on empty scene space draws a rubber band (objects whose position lies inside are selected). A tilemap counts only where it has a tile, at the z of the highest layer with a tile there, so its empty cells are empty space. Clicking a selected object again selects the next one below it, and after the lowest the topmost again. Pressing on a selected object, even one hidden under others, and dragging moves the whole selection; `Delete` removes it; the inspector offers **Create container** and **Remove** for several objects. | | **Behavior** | Logic as an asset: a **node graph** plus the **variables** it declares. Placed like anything else (a diamond symbol in the scene); its parent is the **owner** the graph acts on. | | **Variables asset** | Declarations and nothing else — no graph, no position, never placed. A `Variables` node naming it reads and writes **one value per key for the whole run**, however many graphs point at it. The values start at the declared ones on every Play and are never written back, so playing cannot change the project; while a run is on the asset's inspector shows them live and an edit there reaches the run at once. Two such assets may declare the same name without meeting. A **Persistent** one keeps its values past the end of the run, in this browser: the next Play starts where the last one ended — the savegame. See [Behaviors](Behaviors). | | **Run in editor** | A switch only behaviors have (default off). With it on the behavior keeps running while the project is **not** playing — and unlike Play it then edits the *saved* model: what it moves or writes is a real change, autosaved and not on the undo stack. See *Running without Play*. | diff --git a/Development.md b/Development.md index 4da5934..c5803c4 100644 --- a/Development.md +++ b/Development.md @@ -13,7 +13,7 @@ npm run check # typecheck + lint + format:check + tests, the gate CI runs npm run build # writes dist/ and regenerates index.html ./build.sh # the same under `set -o pipefail`, for callers that pipe the output php tools/make-user.php # an account; every tool signs in (see Accounts) -node tools/seed-e2e.mjs && node tools/e2e.mjs # 1286 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 1290 editor checks, screenshots in /tmp/gm-e2e-*.png GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step ./e2e.sh start [GM_STEPS] # the same run detached, see below ./e2e.sh status # live progress, or the last run's result diff --git a/Tilemaps.md b/Tilemaps.md index e6866fe..973523d 100644 --- a/Tilemaps.md +++ b/Tilemaps.md @@ -85,6 +85,9 @@ the Columns, Rows and Tile size rows. back. Choosing another tool while Alt is down keeps that one. While any painting tool is chosen, the map shows its cell grid, so one does not paint blind. +It paints anywhere on that grid, also where another object is drawn above the map. +With **Select**, a click on an empty cell is empty space, and a sprite drawn above the map's +layers there is what the click selects. Shift-drag still pans the view, whatever the tool. **One stroke is one undo step**, and so is one fill — a line of twenty cells comes back with one Ctrl+Z, and a stroke