diff --git a/.gitignore b/.gitignore index 44d646d..d8d243f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules dist/ +art_incoming/ diff --git a/LANEHANDOVER.md b/LANEHANDOVER.md index 8cc2405..3e8b5ee 100644 --- a/LANEHANDOVER.md +++ b/LANEHANDOVER.md @@ -1531,3 +1531,24 @@ QueueManager owns it (pure, 7 new tests); DoorScene renders it. `monitor`, `boothLamp`, `dishwasher`, `poolTable`, `wetFloor`, `highTable`, plus new candidates: red-carpet strip + brass bollards (street), the pour glass, the card jar. Recipe in the Phase-3 deploy note. + +## SESSION — FABLE-SOLO-15 · 2026-07-21 + +**Branch:** main (solo, Fable, ultra) · **Gate:** lint ✓ build ✓ test ✓ (718 tests) +**Deployed:** https://monsterrobot.games/not-tonight/ (rsync, curl 200) + +### MODELBEAST prop batch #2 (the SOLO-14 art audit, cleared) +8 flux_local jobs on the farm (flux2-klein-4b steps 4, seeds 4230–4237, +SPACES.md prompt register), imported via tools/props_import.py → 28 generated +props now in the manifest: `monitor`, `boothLamp`, `dishwasher`, `poolTable`, +`wetFloor`, `highTable`, `plant`, and **`carpet`** — a front-on red-carpet +plate (128×32, new TARGETS entry) that DoorScene now prefers over the +rect-drawn strip (`gen:prop:carpet` texture check, rects stay as fallback). +Batch script kept at scratchpad `mb_props_batch.py` pattern; raws in +art_incoming/ (now gitignored — repo carries only the game-ready sprites). +Verified in pane: all 8 `gen:prop:*` textures load, carpet plate renders at +the door, pool corner dressed on the floor. Screenshots taken. + +### Shelf +Remaining §6: Head of Security finale arc, roster board. Ambition-tier patron +sprite sheets (ASSETS.md §2) still wants its own session. diff --git a/public/props/boothLamp.png b/public/props/boothLamp.png new file mode 100644 index 0000000..dabbbea Binary files /dev/null and b/public/props/boothLamp.png differ diff --git a/public/props/carpet.png b/public/props/carpet.png new file mode 100644 index 0000000..31db70e Binary files /dev/null and b/public/props/carpet.png differ diff --git a/public/props/dishwasher.png b/public/props/dishwasher.png new file mode 100644 index 0000000..42ed05f Binary files /dev/null and b/public/props/dishwasher.png differ diff --git a/public/props/highTable.png b/public/props/highTable.png new file mode 100644 index 0000000..3277798 Binary files /dev/null and b/public/props/highTable.png differ diff --git a/public/props/manifest.json b/public/props/manifest.json index b993bca..7fafc44 100644 --- a/public/props/manifest.json +++ b/public/props/manifest.json @@ -2,15 +2,22 @@ "props": [ "arcade", "barShelf", + "boothLamp", "boothTable", "buttBin", + "carpet", "cloak", "crate", "deck", "discoball", + "dishwasher", "glassRack", "glassStack", + "highTable", "mixer", + "monitor", + "plant", + "poolTable", "poster1", "poster2", "poster3", @@ -19,6 +26,7 @@ "stampPodium", "street_backdrop", "taps", - "till" + "till", + "wetFloor" ] } diff --git a/public/props/monitor.png b/public/props/monitor.png new file mode 100644 index 0000000..d548d74 Binary files /dev/null and b/public/props/monitor.png differ diff --git a/public/props/plant.png b/public/props/plant.png new file mode 100644 index 0000000..e1a0899 Binary files /dev/null and b/public/props/plant.png differ diff --git a/public/props/poolTable.png b/public/props/poolTable.png new file mode 100644 index 0000000..1f07167 Binary files /dev/null and b/public/props/poolTable.png differ diff --git a/public/props/wetFloor.png b/public/props/wetFloor.png new file mode 100644 index 0000000..8c50be7 Binary files /dev/null and b/public/props/wetFloor.png differ diff --git a/src/scenes/door/DoorScene.ts b/src/scenes/door/DoorScene.ts index 94dd7cf..c105a80 100644 --- a/src/scenes/door/DoorScene.ts +++ b/src/scenes/door/DoorScene.ts @@ -255,13 +255,17 @@ export class DoorScene extends Phaser.Scene { // The red carpet: a strip of somewhere-better between rope and door, // flanked by brass posts. Bodies parked here are rendered by // syncCarpetSprites; the strip is set dressing. - this.add.rectangle(420, 232, 124, 12, 0x8a1428).setDepth(2); - this.add.rectangle(420, 227, 124, 2, 0xa8283c).setDepth(2); - for (const px of [356, 484]) { - this.add.rectangle(px, 216, 3, 22, 0xc8a24a).setDepth(2); - this.add.rectangle(px, 205, 7, 4, 0xe0c060).setDepth(2); + if (this.textures.exists('gen:prop:carpet')) { + this.add.image(420, 236, 'gen:prop:carpet').setOrigin(0.5, 1).setDisplaySize(132, 34).setDepth(2); + } else { + this.add.rectangle(420, 232, 124, 12, 0x8a1428).setDepth(2); + this.add.rectangle(420, 227, 124, 2, 0xa8283c).setDepth(2); + for (const px of [356, 484]) { + this.add.rectangle(px, 216, 3, 22, 0xc8a24a).setDepth(2); + this.add.rectangle(px, 205, 7, 4, 0xe0c060).setDepth(2); + } + this.add.rectangle(420, 206, 126, 2, 0x7a2438).setDepth(2); // the velvet itself } - this.add.rectangle(420, 206, 126, 2, 0x7a2438).setDepth(2); // the velvet itself this.buildRain(); this.buildRope(); diff --git a/tools/props_import.py b/tools/props_import.py index 1dae2c4..e5dce4c 100644 --- a/tools/props_import.py +++ b/tools/props_import.py @@ -29,6 +29,8 @@ TARGETS = { "dishwasher": (32, 16), # the door-scene backdrop plate is special-cased: full size, no quantise "street:backdrop": (640, 176), + # door-scene red carpet plate (front-on, not a floor prop) + "carpet": (128, 32), } def main() -> None: