Give the Joke Shop a real queue line and thicken the rope barrier
Full build / Import + headless tests (push) Successful in 46s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-06 20:47:28 +01:00
1 parent 6381dbc5cb
commit efa062833f
21 files changed
+51 -14

No files matched your search

+2
View File
@@ -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
+12 -3
View File
@@ -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
+3 -3
View File
@@ -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
]
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

+15
View File
@@ -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),
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 KiB

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 455 KiB

After

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 757 KiB

After

Width:  |  Height:  |  Size: 757 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 KiB

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 615 KiB

After

Width:  |  Height:  |  Size: 615 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 969 KiB

After

Width:  |  Height:  |  Size: 969 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 529 KiB

After

Width:  |  Height:  |  Size: 529 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

+13 -5
View File
@@ -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},
+6 -3
View File
@@ -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)))