diff --git a/TODO.md b/TODO.md index c44e714..108b6c9 100644 --- a/TODO.md +++ b/TODO.md @@ -194,6 +194,11 @@ licence-free zone only. field, six columns, eight steps, landing + guard spawn at y=1.0) while keeping the arrival staging (`bulb_canopy`, `sedan`, `handrail`, barriers); Godot 276/276, screenshot smoke 21/0, `13-studio-arrival.png` recaptured. + **Fix 3 landed:** the Joke Shop canopy signature band is now white (`Color(0.90, 0.88, 0.80)`) + over the black fascia, matching the concept's "white celebrity signatures"; a test asserts + the `CanopySignatures` label is white, Godot 276/276, `12-joke-shop.png` + the three-up + board recaptured. Note: fix 2 (blade sign) is already a circular disc on a roof pole in the + code (`37f925c`); the ranking note was stale. - [ ] Lighting: `lighting`/`lookdev` pass on sconces, canopy, marquee and street lamps with day/late captures; verify local attenuation stays at 1.0 and no constant-falloff light returns. - [ ] Set dressing: review entrance and sidewalk prop clusters (`set-dressing`) for occlusion, diff --git a/docs/screens/boards/jokeshop-day-board.jpg b/docs/screens/boards/jokeshop-day-board.jpg index a99f53a..3961610 100644 Binary files a/docs/screens/boards/jokeshop-day-board.jpg and b/docs/screens/boards/jokeshop-day-board.jpg differ diff --git a/docs/screens/boards/jokeshop-day-board.json b/docs/screens/boards/jokeshop-day-board.json index f055fb0..ad5fd23 100644 --- a/docs/screens/boards/jokeshop-day-board.json +++ b/docs/screens/boards/jokeshop-day-board.json @@ -1,7 +1,7 @@ { "board": "jokeshop-day-board.jpg", - "caption": "Joke Shop frontage, day. Photo: local-only research frame (tmp/research/comedy-store). Concept: photo-anchored (gemini + gpt). Capture: dark stucco wall tile.", - "photo": "tmp/research/comedy-store/01.jpg (local-only, gitignored)", + "caption": "Joke Shop frontage, day. Photo: local-only research frame (tmp/research/comedy-store). Concept: photo-anchored (gemini + gpt). Capture: dark stucco wall tile + white signature band.", + "photo": "tmp/research/comedy-store/01.jpg", "concept": "docs/screens/concepts/joke_shop/joke_shop_entrance_day-v2.png", "capture": "docs/screenshots/12-joke-shop.png" } diff --git a/docs/screenshots/12-joke-shop.png b/docs/screenshots/12-joke-shop.png index e698c11..d7a598a 100644 Binary files a/docs/screenshots/12-joke-shop.png and b/docs/screenshots/12-joke-shop.png differ diff --git a/src/game/world_builder.gd b/src/game/world_builder.gd index 172e749..c86a559 100644 --- a/src/game/world_builder.gd +++ b/src/game/world_builder.gd @@ -378,7 +378,9 @@ func _build_comedy_store_building() -> void: var front := cz + d * 0.5 var black := Color(0.105, 0.10, 0.105) var black_deep := Color(0.045, 0.045, 0.05) - var signature := Color(0.58, 0.56, 0.52) + # The canopy carries the real club's white celebrity signatures over the black + # fascia; keep them near-white so they read as chalk/paint from the sidewalk. + var signature := Color(0.90, 0.88, 0.80) var red := Color(0.42, 0.035, 0.045) # Main hall. The black stucco is the real building's dominant surface: a flat # matte charcoal tile now replaces the grey paver texture so the wall reads as @@ -408,9 +410,9 @@ func _build_comedy_store_building() -> void: _add_box(building, Vector3(0.20, 0.92, 4.9), Vector3(side * (w * 0.5 - 0.22), 4.98, front + 2.35), black_deep, true, null, Vector2.ONE, "concrete") - # Signature scribbles on the fascia and the wall. Keeping them as a few - # texture-free labels reads as handwriting at gameplay distance and costs - # no extra draw calls compared with stamping dozens of decals. + # White signature scribbles on the fascia. Keeping them as a few texture-free + # labels reads as handwriting at gameplay distance and costs no extra draw + # calls compared with stamping dozens of decals. var scribbles := "Richard Pryor Robin Williams George Carlin\n" \ + "Dave Chappelle Bill Burr Ali Wong Marc Maron\n" \ + "Joan Rivers Sam Kinison Andrew Dice Clay Mitzi Shore" diff --git a/src/test/tests/test_world.gd b/src/test/tests/test_world.gd index 4adcddc..87f30dd 100644 --- a/src/test/tests/test_world.gd +++ b/src/test/tests/test_world.gd @@ -62,6 +62,10 @@ func test_joke_shop_uses_the_real_sunset_strip_layout() -> bool: builder.build() var a := TestUtils.check(root.find_child("SignatureCanopy", true, false) != null, "the signature-covered canopy is built") + var sig_label := root.find_child("CanopySignatures_west", true, false) as Label3D + var a2 := TestUtils.check(sig_label != null + and sig_label.modulate.r > 0.85 and sig_label.modulate.g > 0.85, + "the canopy signature band is white, matching the reference's white celebrity names") var sign := root.find_child("ComedySignLabel", true, false) as Label3D var b := TestUtils.check(sign != null and sign.text.contains("JOKE") and sign.text.contains("SHOP"), "the circular blade sign carries the club wordmark") @@ -90,7 +94,7 @@ func test_joke_shop_uses_the_real_sunset_strip_layout() -> bool: and WorldBuilder.placement_problems(placements).is_empty(), "the Joke Shop prop placements stay on the sidewalk and clear the lane") root.free() - return a and b and c and d and e and f and g and g2 and h + return a and a2 and b and c and d and e and f and g and g2 and h func test_joke_shop_geometry_stays_inside_the_map_budget() -> bool: var root := Node3D.new()