diff --git a/CHANGELOG.md b/CHANGELOG.md index 429d8a1..f1dcb4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ Semantic Versioning. ### Fixed - The red event banners are lit from the top down at night instead of reading as flat red cards. +- The Joke Shop has a readable queue: a velvet rope line leading to the check-in podium, a thicker + bike-rack barricade on the curb side, and a planter no longer clipping the palm foliage. - Street lamps now throw a warm pool on the pavement instead of dimly washing the whole walkway. - The flashlight actually lights what it points at. It was tuned to a beam so weak it changed the frame by less than one 255th of a level; it now throws a visible pool on the door and the pavement diff --git a/TODO.md b/TODO.md index 5acd9bd..07c38f7 100644 --- a/TODO.md +++ b/TODO.md @@ -971,9 +971,18 @@ scorecard source, this milestone is the actionable list. takes the pool 14.1 → 16.0 and the gap between poles 2.7 → 1.3, pool/gap 5.2 → 12.3. - [x] Refresh `docs/screenshots/` for the whole roster and the new flashlight; `check_screenshots.sh` reports 21 good / 0 bad. -- [ ] Set dressing: fix the Joke Shop queue story (podium/stanchion line at the door), rope - barrier thickness, the west palm overlap and the empty sidewalk light pool; apply the same - review to Hollywood and the TV Studio. +- [x] **Joke Shop queue story.** The four queue props were scattered (stanchions at ±3, a barricade + at x 2.2, the podium at 6.8) so nothing read as a queue. They are now one line: four + stanchions 0.9 m apart west of the guest approach lane, the check-in podium at its head, and + the bike-rack barricade on the curb side. The placements stay outside the `guest approach + lane` exclusion that `placement_problems()` enforces. +- [x] **Rope and barrier thickness.** Bike-rack frame 22 → 28 mm, bars 10 → 12 mm, velvet rope + 18 → 22 mm; the old sizes read as wire at 8 m. +- [x] **West palm / planter overlap.** The planter box sat under the west palm canopy (palm spans + x −15.0…−11.0 there) and the foliage cards clipped its lip; it moved 1.6 m clear. +- [ ] The same queue/set-dressing review for Hollywood and the TV Studio. +- [ ] Sidewalk light pool at the Joke Shop: the entrance walkway measures 20.7/255 against 3.0 on + the side pavement, so a pool exists but only at the door; the queue area itself is unlit. - [ ] Build one real-photo comparison for street furniture and record the accepted mismatches. ### Evidence and release diff --git a/assets/models/blender/manifest.json b/assets/models/blender/manifest.json index 38084c4..e137661 100644 --- a/assets/models/blender/manifest.json +++ b/assets/models/blender/manifest.json @@ -144,12 +144,12 @@ "crowd_barrier": { "bounds_godot": { "max": [ - 1.116, - 1.066, + 1.12, + 1.07, 0.307 ], "min": [ - -1.122, + -1.128, -0.014, -0.307 ] diff --git a/assets/models/blender/props/crowd_barrier.glb b/assets/models/blender/props/crowd_barrier.glb index 35cdca0..dae023e 100644 Binary files a/assets/models/blender/props/crowd_barrier.glb and b/assets/models/blender/props/crowd_barrier.glb differ diff --git a/assets/models/blender/props/crowd_barrier_ao.png b/assets/models/blender/props/crowd_barrier_ao.png index a534bef..0fec2e2 100644 Binary files a/assets/models/blender/props/crowd_barrier_ao.png and b/assets/models/blender/props/crowd_barrier_ao.png differ diff --git a/assets/models/blender/props/stanchion.glb b/assets/models/blender/props/stanchion.glb index 7a6dbf9..955378a 100644 Binary files a/assets/models/blender/props/stanchion.glb and b/assets/models/blender/props/stanchion.glb differ diff --git a/assets/models/blender/props/stanchion_ao.png b/assets/models/blender/props/stanchion_ao.png index c579319..c214e74 100644 Binary files a/assets/models/blender/props/stanchion_ao.png and b/assets/models/blender/props/stanchion_ao.png differ diff --git a/docs/assets/3d-model-review.md b/docs/assets/3d-model-review.md index e2116d5..b31093f 100644 --- a/docs/assets/3d-model-review.md +++ b/docs/assets/3d-model-review.md @@ -350,6 +350,21 @@ material through `night_energy` metadata so `set_night_mode` keeps the ratio ins No clipping in either state, and the Compatibility renderer draws it with the same flat emissive material as before — the change is geometry plus per-material energy, not a new shader. +## Set dressing — Joke Shop queue (2026-11-06) + +The queue props were placed individually (`stanchion` at ±3, `crowd_barrier` at x 2.2, podium at 6.8), +so no line read and the stanchions' 0.9 m velvet stubs pointed in unrelated directions. They are now +one queue: four stanchions 0.9 m apart west of the guest approach lane, the check-in podium at the +head, and the barricade on the curb side. The line has to sit outside +`PROP_EXCLUSIONS["guest approach lane"]` (x ±1.4), which is what the placement validator enforces — +the first attempt put the podium at x 0.4 and the test caught it. + +Readability at 8 m drove the thickness pass: bike-rack frame 22 → 28 mm, bars 10 → 12 mm, velvet rope +18 → 22 mm. The west planter also moved 1.6 m clear of the palm canopy, which was clipping its lip. + +Measured at night afterwards: the entrance walkway sits at 20.7/255 against 3.0 on the side pavement, +so the door pool exists; the queue area itself is still unlit and stays queued as a follow-up. + ## Scorecard skeleton Verdicts use `qa-review` semantics: **P0** (blocker: wrong scale, broken normals, budget fail), diff --git a/docs/screenshots/02-targeting-npc.png b/docs/screenshots/02-targeting-npc.png index 7a76b07..52c65ef 100644 Binary files a/docs/screenshots/02-targeting-npc.png and b/docs/screenshots/02-targeting-npc.png differ diff --git a/docs/screenshots/05-late-night-avenue.png b/docs/screenshots/05-late-night-avenue.png index 382fc54..435062d 100644 Binary files a/docs/screenshots/05-late-night-avenue.png and b/docs/screenshots/05-late-night-avenue.png differ diff --git a/docs/screenshots/08-escalation-hud.png b/docs/screenshots/08-escalation-hud.png index 4ec46ef..a7498b5 100644 Binary files a/docs/screenshots/08-escalation-hud.png and b/docs/screenshots/08-escalation-hud.png differ diff --git a/docs/screenshots/09-body-camera-timeline.png b/docs/screenshots/09-body-camera-timeline.png index 195fa78..c2713ed 100644 Binary files a/docs/screenshots/09-body-camera-timeline.png and b/docs/screenshots/09-body-camera-timeline.png differ diff --git a/docs/screenshots/11-precision-walk.png b/docs/screenshots/11-precision-walk.png index 26fe92e..91f8824 100644 Binary files a/docs/screenshots/11-precision-walk.png and b/docs/screenshots/11-precision-walk.png differ diff --git a/docs/screenshots/12-joke-shop.png b/docs/screenshots/12-joke-shop.png index 85c037d..860136c 100644 Binary files a/docs/screenshots/12-joke-shop.png and b/docs/screenshots/12-joke-shop.png differ diff --git a/docs/screenshots/13-studio-arrival.png b/docs/screenshots/13-studio-arrival.png index 4aade2c..94175ca 100644 Binary files a/docs/screenshots/13-studio-arrival.png and b/docs/screenshots/13-studio-arrival.png differ diff --git a/docs/screenshots/17-shift-review.png b/docs/screenshots/17-shift-review.png index 28520ef..d5b8436 100644 Binary files a/docs/screenshots/17-shift-review.png and b/docs/screenshots/17-shift-review.png differ diff --git a/docs/screenshots/19-radial-menu.png b/docs/screenshots/19-radial-menu.png index 9a7609e..d74bbf1 100644 Binary files a/docs/screenshots/19-radial-menu.png and b/docs/screenshots/19-radial-menu.png differ diff --git a/docs/screenshots/20-crowd-panic.png b/docs/screenshots/20-crowd-panic.png index 765a7ef..d5b0e6f 100644 Binary files a/docs/screenshots/20-crowd-panic.png and b/docs/screenshots/20-crowd-panic.png differ diff --git a/docs/screenshots/21-responder-arrival.png b/docs/screenshots/21-responder-arrival.png index 70b4407..6d2fbd4 100644 Binary files a/docs/screenshots/21-responder-arrival.png and b/docs/screenshots/21-responder-arrival.png differ diff --git a/src/game/world_builder.gd b/src/game/world_builder.gd index c20a60d..0718269 100644 --- a/src/game/world_builder.gd +++ b/src/game/world_builder.gd @@ -161,15 +161,23 @@ const VENUE_SPECS := { "sunset_across_street": true, "hollywood_lane_markings": true, }, "prop_placements": [ - {"zone": "entrance", "prop": "security_podium", "x": 6.8, "z": 5.8, "rot": -15.0}, - {"zone": "entrance", "prop": "crowd_barrier", "x": 2.2, "z": 9.0}, - {"zone": "entrance", "prop": "stanchion", "x": -3.0, "z": 9.4}, - {"zone": "entrance", "prop": "stanchion", "x": 3.0, "z": 9.4}, + # Queue story: a rope line guides the walk-up from the sidewalk to the door, + # with the check-in podium at its head and a barricade holding the street + # side. The posts are 0.9 m apart so the 0.9 m velvet stubs on each post join + # into one continuous rope instead of three disconnected ones. + {"zone": "entrance", "prop": "stanchion", "x": -4.5, "z": 8.6}, + {"zone": "entrance", "prop": "stanchion", "x": -3.6, "z": 8.6}, + {"zone": "entrance", "prop": "stanchion", "x": -2.7, "z": 8.6}, + {"zone": "entrance", "prop": "stanchion", "x": -1.8, "z": 8.6}, + {"zone": "entrance", "prop": "security_podium", "x": -1.7, "z": 7.5, "rot": -95.0}, + {"zone": "entrance", "prop": "crowd_barrier", "x": -3.2, "z": 10.6}, {"zone": "mid_block", "prop": "palm_tree", "x": -13.0, "z": 8.0, "rot": 8.0}, {"zone": "mid_block", "prop": "palm_tree", "x": 13.0, "z": 8.0, "rot": -8.0}, {"zone": "mid_block", "prop": "trash_bin", "x": -11.5, "z": 7.2, "accessory": "bag"}, {"zone": "mid_block", "prop": "trash_bin", "x": 10.5, "z": 7.2}, - {"zone": "mid_block", "prop": "planter_box", "x": -12.0, "z": 9.7}, + # Clear of the west palm canopy (which spans x -15.0 .. -11.0 there); the box + # used to sit under it and the foliage cards clipped the planter lip. + {"zone": "mid_block", "prop": "planter_box", "x": -10.4, "z": 9.7}, {"zone": "mid_block", "prop": "round_planter", "x": 8.5, "z": 7.3}, {"zone": "curb", "prop": "a_frame_sign", "x": 5.0, "z": 7.8, "rot": 18.0}, {"zone": "curb", "prop": "newspaper_box", "x": 11.0, "z": 10.6, "rot": -12.0}, diff --git a/tools/blender_assets.py b/tools/blender_assets.py index f014650..f1aceb8 100644 --- a/tools/blender_assets.py +++ b/tools/blender_assets.py @@ -2890,11 +2890,13 @@ def build_prop(name): p.append(lathe("Stripe", [(0.118, 0.22), (0.096, 0.34)], M("reflective"), seg=16)) p.append(lathe("Stripe2", [(0.08, 0.42), (0.064, 0.50)], M("reflective"), seg=16)) elif name == "crowd_barrier": # steel bike-rack barricade, 2.2 m + # 28 mm frame and 12 mm bars: the old 22/10 mm read as wire at 8 m, and a real + # bike-rack barricade is chunkier than that. p.append(tube("Frame", [(-1.1, 0, 0.12), (-1.1, 0, 1.05), (1.1, 0, 1.05), (1.1, 0, 0.12), - (-1.1, 0, 0.12)], 0.022, M("steel"), seg=8, caps=False)) + (-1.1, 0, 0.12)], 0.028, M("steel"), seg=8, caps=False)) for i in range(13): x = -0.96 + i * 0.16 - p.append(cyl("Bar", 0.01, 0.01, 0.90, (x, 0, 0.585), M("steel"), seg=6)) + p.append(cyl("Bar", 0.012, 0.012, 0.90, (x, 0, 0.585), M("steel"), seg=6)) for x in (-1.0, 1.0): p.append(tube("Foot", [(x, -0.30, 0.0), (x, 0.0, 0.14), (x, 0.30, 0.0)], 0.018, M("steel"), seg=6)) @@ -2903,8 +2905,9 @@ def build_prop(name): M("chrome"), seg=20)) p.append(cyl("Post", 0.025, 0.025, 0.90, (0, 0, 0.50), M("chrome"), seg=12)) p.append(sphere("Top", 0.04, (0, 0, 0.97), M("chrome"), seg=12, rings=8)) + # 22 mm velvet rope: a 36 mm one read as thread at gameplay distance. p.append(tube("Rope", [(0, 0.0, 0.92), (0.2, 0.0, 0.80), (0.45, 0.0, 0.74), - (0.70, 0.0, 0.80), (0.9, 0.0, 0.92)], 0.018, + (0.70, 0.0, 0.80), (0.9, 0.0, 0.92)], 0.022, M("velvet_red"), seg=8)) p.append(cyl("Hook", 0.022, 0.022, 0.05, (0.9, 0, 0.92), M("brass"), seg=8, rot=(0, math.radians(90), 0)))