diff --git a/TODO.md b/TODO.md index 788ea9f..d94fe83 100644 --- a/TODO.md +++ b/TODO.md @@ -467,8 +467,11 @@ pass. The current `_build_comedy_store_building()` stays as the fallback.* - [ ] Rebuild the canopy + blade sign as library props or procedural geometry through the assisted pipeline (`blender_assets.py inspect` → scripted edits → `audit`/`fit`), keeping the 4,000 prop-triangle budget; verify against the street/strip concept pairs before committing. -- [ ] Add the neighbouring hotel/parking ramp as a low-detail blocker mass (no interior) so the - block silhouette matches the hotel reference frame, inside the venue mesh budget. +- [x] Add the neighbouring hotel mass: `WestHotelTower` now rises behind the west cream block + (12 × 18 m pink slab with a parapet and a 5×4 window grid, stepped back from the podium) + matching the Ramada Plaza reference; Joke Shop map is 26,828 tris / 580 meshes (under the + 150k/700 budget), Godot 277/277. The parking-ramp/drop-off detail stays out (low-detail + blocker mass only). - [ ] Re-work the facade field from flat boxes to the reference's actual banding: black stucco field (`dark_stucco`), deep canopy shadow, fascia band, red curtain bays and the recessed entrance, using the four concept pairs for value/mood targets. diff --git a/docs/3d-model-review.md b/docs/3d-model-review.md index d277b5a..8ff3ef0 100644 --- a/docs/3d-model-review.md +++ b/docs/3d-model-review.md @@ -176,7 +176,7 @@ for presence, not re-reviewed for art quality. | Venue | Measured (map-budget test) | Status | | --- | --- | --- | | Hollywood Boulevard | 58,884 tris / 409 meshes | shape-language review pending | -| The Joke Shop | 25,828 tris / 518 meshes | facade review landed (white signature band + tied-back curtains); shape-language gaps ranked | +| The Joke Shop | 26,828 tris / 580 meshes | facade review landed (white signature band + tied-back curtains); shape-language gaps ranked; hotel tower mass added | | TV Studio | — | shape-language review pending | ## Pose evidence is blocked (2026-11-03) diff --git a/docs/joke-shop-map.md b/docs/joke-shop-map.md index 1d3d680..e21bdbb 100644 --- a/docs/joke-shop-map.md +++ b/docs/joke-shop-map.md @@ -54,7 +54,7 @@ the ranges below are the reconciled reading; the game spec is a deliberate compr | Red curtains | Seven tied-back velvet drapes between the entrance and the east end — each cinched into an hourglass with a scalloped hem and dark recess between bays; a red velvet entrance curtain | | West-end entrance | Recessed opening at x = -8.8 m with a low step, brass pulls and the door-lock indicator | | Warm practicals | Sconces along the wall, canopy downlights, entrance wash and three ground uplights; all off in daylight and switched by `set_night_mode()` | -| Neighbouring low-rise frontage | Cream Mediterranean block west (balconies, red awning) and white commercial block east (ribbon windows, lobby) | +| Neighbouring low-rise frontage | Cream Mediterranean block west (balconies, red awning) with a stepped-back 5–6 storey pink hotel tower behind it (`WestHotelTower`, the Ramada Plaza mass); white commercial block east (ribbon windows, lobby) | | Hillside and houses | Fog-free unshaded 60° ramp behind the rear wall with stucco houses, shrubs and palms; its tint drops to a dark silhouette at night | | Opposite side of Sunset | Low retail row, rooftop billboard, neon and palms as background context beyond the far kerb | | Sidewalk furniture | Palms, queue barriers, stanchions, bins, planters, a-frame sign, hydrant and a parked sedan; prop placements pass the shared validator | diff --git a/docs/screens/boards/jokeshop-day-board.jpg b/docs/screens/boards/jokeshop-day-board.jpg index 7b8b78b..61e9812 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 06fbc31..219b068 100644 --- a/docs/screens/boards/jokeshop-day-board.json +++ b/docs/screens/boards/jokeshop-day-board.json @@ -1,6 +1,6 @@ { "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 + white signature band + tied-back curtain bays.", + "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 + tied-back curtain bays + west hotel tower.", "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 edddad2..533abe7 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 ee94708..031d346 100644 --- a/src/game/world_builder.gd +++ b/src/game/world_builder.gd @@ -708,6 +708,21 @@ func _build_sunset_neighbours() -> void: west.shape_owner_set_transform(west_owner, Transform3D(Basis(), Vector3(-21.0, west_h * 0.5, -9.2))) neighbours.add_child(west) + # Hotel tower set back behind the west wing: the real Ramada Plaza is a 5–6 + # storey pink slab stepped back from the street-level retail podium, so it + # looms over the club rather than crowding the sidewalk. + var tower := Node3D.new() + tower.name = "WestHotelTower" + _add_box(tower, Vector3(12.0, 18.0, 10.0), Vector3(-21.0, 9.0, -13.0), + Color(0.72, 0.60, 0.62), false, T_CONCRETE, Vector2(5, 6), "concrete") + _add_box(tower, Vector3(12.4, 0.5, 10.4), Vector3(-21.0, 18.15, -13.0), + Color(0.56, 0.47, 0.49), true, null, Vector2.ONE, "stone") + for row in 5: + var wy := 2.6 + float(row) * 3.1 + for column in 4: + _add_sunset_window(tower, Vector3(-25.6 + float(column) * 3.0, wy, -7.9), + Vector2(1.6, 1.4)) + neighbours.add_child(tower) # East: 15 m white block with a taller parapet, ribbon windows and a lit # ground-floor lobby. var east := StaticBody3D.new()