Give the Joke Shop a real queue line and thicken the rope barrier
No files matched your search
@@ -9,6 +9,8 @@ Semantic Versioning.
|
|||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- The red event banners are lit from the top down at night instead of reading as flat red cards.
|
- 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.
|
- 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
|
- 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
|
frame by less than one 255th of a level; it now throws a visible pool on the door and the pavement
|
||||||
|
|||||||
@@ -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.
|
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`
|
- [x] Refresh `docs/screenshots/` for the whole roster and the new flashlight; `check_screenshots.sh`
|
||||||
reports 21 good / 0 bad.
|
reports 21 good / 0 bad.
|
||||||
- [ ] Set dressing: fix the Joke Shop queue story (podium/stanchion line at the door), rope
|
- [x] **Joke Shop queue story.** The four queue props were scattered (stanchions at ±3, a barricade
|
||||||
barrier thickness, the west palm overlap and the empty sidewalk light pool; apply the same
|
at x 2.2, the podium at 6.8) so nothing read as a queue. They are now one line: four
|
||||||
review to Hollywood and the TV Studio.
|
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.
|
- [ ] Build one real-photo comparison for street furniture and record the accepted mismatches.
|
||||||
|
|
||||||
### Evidence and release
|
### Evidence and release
|
||||||
|
|||||||
@@ -144,12 +144,12 @@
|
|||||||
"crowd_barrier": {
|
"crowd_barrier": {
|
||||||
"bounds_godot": {
|
"bounds_godot": {
|
||||||
"max": [
|
"max": [
|
||||||
1.116,
|
1.12,
|
||||||
1.066,
|
1.07,
|
||||||
0.307
|
0.307
|
||||||
],
|
],
|
||||||
"min": [
|
"min": [
|
||||||
-1.122,
|
-1.128,
|
||||||
-0.014,
|
-0.014,
|
||||||
-0.307
|
-0.307
|
||||||
]
|
]
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
@@ -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
|
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.
|
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
|
## Scorecard skeleton
|
||||||
|
|
||||||
Verdicts use `qa-review` semantics: **P0** (blocker: wrong scale, broken normals, budget fail),
|
Verdicts use `qa-review` semantics: **P0** (blocker: wrong scale, broken normals, budget fail),
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 512 KiB After Width: | Height: | Size: 512 KiB |
|
Before Width: | Height: | Size: 455 KiB After Width: | Height: | Size: 457 KiB |
|
Before Width: | Height: | Size: 757 KiB After Width: | Height: | Size: 757 KiB |
|
Before Width: | Height: | Size: 384 KiB After Width: | Height: | Size: 384 KiB |
|
Before Width: | Height: | Size: 615 KiB After Width: | Height: | Size: 615 KiB |
|
Before Width: | Height: | Size: 969 KiB After Width: | Height: | Size: 969 KiB |
|
Before Width: | Height: | Size: 529 KiB After Width: | Height: | Size: 529 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
@@ -161,15 +161,23 @@ const VENUE_SPECS := {
|
|||||||
"sunset_across_street": true, "hollywood_lane_markings": true,
|
"sunset_across_street": true, "hollywood_lane_markings": true,
|
||||||
},
|
},
|
||||||
"prop_placements": [
|
"prop_placements": [
|
||||||
{"zone": "entrance", "prop": "security_podium", "x": 6.8, "z": 5.8, "rot": -15.0},
|
# Queue story: a rope line guides the walk-up from the sidewalk to the door,
|
||||||
{"zone": "entrance", "prop": "crowd_barrier", "x": 2.2, "z": 9.0},
|
# with the check-in podium at its head and a barricade holding the street
|
||||||
{"zone": "entrance", "prop": "stanchion", "x": -3.0, "z": 9.4},
|
# side. The posts are 0.9 m apart so the 0.9 m velvet stubs on each post join
|
||||||
{"zone": "entrance", "prop": "stanchion", "x": 3.0, "z": 9.4},
|
# 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": "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": -11.5, "z": 7.2, "accessory": "bag"},
|
||||||
{"zone": "mid_block", "prop": "trash_bin", "x": 10.5, "z": 7.2},
|
{"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": "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": "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},
|
{"zone": "curb", "prop": "newspaper_box", "x": 11.0, "z": 10.6, "rot": -12.0},
|
||||||
|
|||||||
@@ -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("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))
|
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
|
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),
|
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):
|
for i in range(13):
|
||||||
x = -0.96 + i * 0.16
|
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):
|
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,
|
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))
|
M("steel"), seg=6))
|
||||||
@@ -2903,8 +2905,9 @@ def build_prop(name):
|
|||||||
M("chrome"), seg=20))
|
M("chrome"), seg=20))
|
||||||
p.append(cyl("Post", 0.025, 0.025, 0.90, (0, 0, 0.50), M("chrome"), seg=12))
|
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))
|
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),
|
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))
|
M("velvet_red"), seg=8))
|
||||||
p.append(cyl("Hook", 0.022, 0.022, 0.05, (0.9, 0, 0.92), M("brass"), 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)))
|
rot=(0, math.radians(90), 0)))
|
||||||
|
|||||||