From 5334a301508b336eafb2f61f889a9e3bdeb475b3 Mon Sep 17 00:00:00 2001 From: type-two Date: Tue, 21 Jul 2026 02:39:11 +1000 Subject: [PATCH] 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 --- .gitignore | 1 + LANEHANDOVER.md | 21 +++++++++++++++++++++ public/props/boothLamp.png | Bin 0 -> 424 bytes public/props/carpet.png | Bin 0 -> 1538 bytes public/props/dishwasher.png | Bin 0 -> 552 bytes public/props/highTable.png | Bin 0 -> 430 bytes public/props/manifest.json | 10 +++++++++- public/props/monitor.png | Bin 0 -> 351 bytes public/props/plant.png | Bin 0 -> 396 bytes public/props/poolTable.png | Bin 0 -> 1278 bytes public/props/wetFloor.png | Bin 0 -> 387 bytes src/scenes/door/DoorScene.ts | 16 ++++++++++------ tools/props_import.py | 2 ++ 13 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 public/props/boothLamp.png create mode 100644 public/props/carpet.png create mode 100644 public/props/dishwasher.png create mode 100644 public/props/highTable.png create mode 100644 public/props/monitor.png create mode 100644 public/props/plant.png create mode 100644 public/props/poolTable.png create mode 100644 public/props/wetFloor.png 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 0000000000000000000000000000000000000000..dabbbea6fd7ac23ca1590212489a71f790312cef GIT binary patch literal 424 zcmV;Z0ayNsP)A03{xG)Tgk^vMnY1OCon_3=4k+C zCYVWnU0bfE7DJf(%J_v$^1ShU+TaN;DFu&&ffPX>Dkz|8s?a0rn zxH_8SwrzyZj8ojp+q#lP70qpJ>$ zXu0+Nao>Au>8oNa!EKM7%0ZE(FM!sz}QyXlQlBfgH>wfBt#?Mmqvjk z>J97AS?BqdoZWjcY)CoM67OdHKk;joOA&%Xv`ejS?&-gusRJh?Vxt+C#122>Gsauq S2K{aT0000IBjW*Y>m1zfe|j z{_+yNS-fDxxqs?Zcn|Ny2?3(ibAj6#<8|bhLPTmhN-YE+b|G%vt6rxv^(X~6X)Pvl zf!i4;twrT|7`|HR6=4#3Oe?AW~e)}BV7j=w_h>1VSFYANRTF4K>&ee zGD4mJLaKz%BFYgD3FBkXOj`?nevlRsT0#H_0)b>=VyqpYJewkPBT;3=cVPZI@d z5rjZq!ZTx4oMqPwwCeV4jbpSX3=c2)k;eE47i4uX0RR?k+B+UkF}v+B7``{O7Fv4a zmgN9B+7meeGLD=88Anclj3XyNn`8Dtx_NR=fHnt~)YC*xfQ%z2K*rJ1g`g;=tp%Dc zwszqoM;L`8M~^4YG9GSpiS5oEkNkb0`d5VppBeV+T>K_}M-IHZie@6<;`s~)M(6wCD9;6A5XF+%bK zDqFA~b@k1nFtF$OraR$23{#FMzlz`f-Oo~?>j`q~^-%p11iHOWKYsc*6}m?0taXKK zuMQ*MCPO4BvLcNdV}K%RW5`Ad$l+eYZ5(f(iGjXw-|#ijzV(ApM=$i-TP)LRX+n_T zV(}7v@Z9UPbf=4EKYu_(qqP6EI$6%N3_ObD4A z5E!|^m(?4>MPg(;sfhV7SX{A{$HBANp>u5fz|f9X#^}A=zT~Z}i_MS#vO@MRw1!@foVNjVJ;FA}=^I|ARPQExjW~MI-aksL>EE z@U&d&wNC;&EVa~^quJLFA{lrR$O;m0PJp+gUR?W=OtYYj^J#q(Af5-)wCG7Nkqs>G z>wq=@w|jN3CEj5}mW%E0-Fy9T009y6MP^)@@M6BBjl*mRQ*%D{x%@WCBb}|eAJ^6c z&o|^_9sLjtdDep|B3=cP*Z%QM1>T*+dI>N&Hbk>`MrkXd)QoKKddBBAD45^E_yA9F zu*EqTA0z*ZYu}4{7~g#Wz40S=i5=zYE8PC%>w@du{(`o(VWqYhp;8M-qkpz&4M+yV z1MCT2e%cU&1pfhGeSlvJ=TF0i{!zb19*4NZyy;m0Mn4J+%7_Yd5?{fF2_KL^9tK^Low{)$-C_;QSH)CipjQ$uF< zipUR6j|}_aK-MRJX$3FA`IH=9wH`om-q=b47&Qw)?o>}6`5f=q_^MHz1p<%)ObR9e oRzmNSDVB~gMbrU0Ze|MkKOg!n1lv7ZjQ{`u07*qoM6N<$f*`-zY5)KL literal 0 HcmV?d00001 diff --git a/public/props/dishwasher.png b/public/props/dishwasher.png new file mode 100644 index 0000000000000000000000000000000000000000..42ed05f56ee3c738fc056233af17db5fd03b1f6d GIT binary patch literal 552 zcmV+@0@wYCP)K|{BWX1wFydRNJl zy#CGl&5UQpYB;>pN&x_WEHpH)Xzi_e6WR~|l99-S=fzM;am)B1tpMc?WF7^STC)(J zNg_s5=(04&S9AWs@{^#|IHs)>RBR0Wo+*)zWOb?WwcFuzI$`y?N?I`jjnD~9OL9s26&+_C!v`1L4-_Y;(%~6)zH!DOZ zNnS;%U^02&UdVgBp6#X4p6rvi$a@ZHazfn$9WnBcAKT`zLQjI zBX`;EEDv{76oghRO&$i8o0CT*FeL*VUArM2G~QDP|Nf=L5GAA{rr}?$rc&GvB3?W% zxFk0b`pSHKe)62I#AJcHh?*)IQ1lwsGe8~-Woy8HK^60SJ}1-AMu6)03N-n`k6bBG qb*s#SV-z>C)Qg-v-u`=NO64!?Bh(|Yq{s{a0000>HQ1@w#dmx|XBDsI!qS$Ypn(Muq%P_=@;68HkDP$_XW-rZyuwJSEPW6yZ( ztYtD9sfYkjr~>Znma4*;VrK|{ji0OKL+u%e2JIu!Ng$a%4wp=mB*_{>u+DP~t_xHO zR1lPY^UO7D7sxjo2?>n=4OpiAt^w$d^YdJK(&_z;u5*$^1f^D(_Pa{3qjNi{!2eSn zNvtO%P$<76@(>9BpYF4xTpvcp}7%5Z$H_RsGtw36?Y z^!o%DxhearICn$<@P4?!nP=ix`FBOGUFpinT%CgXYH#`MGE@2~k5V=>D(1_b5K}ji z$lh&F7b`l{tMMd87HkJ*Y#0G?)7bQ@f?~Vb@>(|Bh)0RR91 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d548d74f56b52f512a05f23034cf8275feec004e GIT binary patch literal 351 zcmV-l0igbgP)4_u%ti2DO(T81y9nGBEsSVBlM{ z6)bne$&cab%?pg6goJDWqmj1e|8rNbGa|oJdZ>#F(2ZQzIy~g4Auyx{YjCN(Lvjs!) zbUpzT;*7hqZbd)9u%8+X+dwN~tzX_=n_iSq9E)(Y)bAz^kU<1#Jaylry-#~~{|Z6~ zisQr_vvOX6*b$87Du;1&VQeGu9fgen3L-L2Q(&0g3jB(2*zNbVQvFtob`-!fT5C{R zgI6jIeoFx7)kF!4 zfWXc(0E;kIr-d;fVb$4L5i8GS%Hpn#LhPxo;Y7@u%)J)k9>rLe*~K|tZs5w->|+s5 zo=Z%~b$y;L0bek*ng{qFz=+aRG6^Iucy$FZKu5}TZm%r8i)?WR%S{cRXiaNKZYYlG z{;BnEg4)c!-K8nKxU<1h$t0i6HGCw6jtMU$bHx}K&EY@+ zJEG~gkNfdz@Cg4UMqc;f#xq@gSCI2?4n!(fRY;crcUmTnu5q9d2M#51za!P@pFnl< zUqw)#2dd*7cqX?5dLcK6I~Rxmv&eP1U&8d%2flrgz&z+@K@1pnARA~@%s)9rW$h)- z8!`KroVw)Td%(!X1>s#t0+)a4;p9WW^By20?)KCPs|%xeG`No8VhyRjOBntcm>t~1 z{W%TwMhoX40j7V%WvhFjZt(DRMij#E;|#7WT}JDuj@?@gls^K#deC%ABptI$ZxT?i zYvLoi8tvSCBZ!$T?E$wZku9!a`_q0*42>dNT0{BUi^d)v1g8U-2slvpMP@~M+v;Spz^IQOzN&Q zgb$zj<4Bw^5r4h34tivmMtyZGk4j}-^bP+wfb92agu(98lqfn!-eV*QxOJWgA$Q0! zTE`PB&m}QmTDR(CysNh-#Tta^=}DnJ2e;61Eds?|WJ7d-n=IoO3VGOo5sk_=(BA~= z=!_q}(X8=w>SkNESi|l@0|*fdGR;G)y`CA)n^@|N>O-q-y#Oc-ho6KhUVxXYp~nePw?ee6J;RoruqWK8jas zFY)5u25MinzzQ0UDa>AsThbz!gp+FdGU3CF+lYG%BPi}CMydra^q=Z)7vn;w3H0wf zSBplxTZMX~y*qcH}M%ufMOsP#`SbU09`RZF6Eo} zywo5F5*W(iOrfkkc+GYWfrLVb}`P$!#JLmDx@1*eZ-5oA;B^!4BR^v`%ZlK z9^Wk1oUxE)vaUC=-C>UXVywk~*-EjQ(qV`fn$6tmLSEdweb1Q)Goqlne~4vW^`!9F zNxWME@-<+L=IvvcIUTS3jhYjZVZ|_j2npozKDi(V%&`xvX(PEMW%VQp_^OcXiLC6e z2r&=}G^ZDD#+Ce(3r6}!x``z>s*1_>uc6VaD`o}}evys2zAGNkl=$np?E@w1|H}Y&~N}6Bre8bxX2R~cYu-#?m&#jpH24d6Df8RdpsFCBiA=~ zCL)*@w-*2Q+aM}vt@V6D_+{N>W)*Rus(QkF9|^`t>R4w7MB=X%fEi9$Og3_ssv@@r zE3CuCPwHw#AiSjtsv{>Mr35*Zbqa^6iiWgcawQ#NuoklYYb=`CLxE@vV~!_~$=8=} ze7;$nTT4hzINO%(?R{t&av%HU)Zh0%cznLV?#ZIv8l{ax90qo{SbR913g{AQ^Nq*W z=$9f>`{%~>TBDU6)hpPt^u literal 0 HcmV?d00001 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: