Prop batch 2: monitor, booth lamp, dishwasher, pool table, wet-floor cone, high tables, plants, and a real red-carpet plate for the door

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-21 02:39:11 +10:00
parent 5ebdfc61eb
commit 5334a30150
13 changed files with 43 additions and 7 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
node_modules
dist/
art_incoming/

View File

@ -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 42304237,
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.

BIN
public/props/boothLamp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

BIN
public/props/carpet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
public/props/dishwasher.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

BIN
public/props/highTable.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

View File

@ -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"
]
}

BIN
public/props/monitor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

BIN
public/props/plant.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

BIN
public/props/poolTable.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
public/props/wetFloor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

View File

@ -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();

View File

@ -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: