diff --git a/docs/screens/boards/elcapitan-night-board.jpg b/docs/screens/boards/elcapitan-night-board.jpg index 9367346..1c530d3 100644 Binary files a/docs/screens/boards/elcapitan-night-board.jpg and b/docs/screens/boards/elcapitan-night-board.jpg differ diff --git a/docs/screens/boards/elcapitan-night-board.json b/docs/screens/boards/elcapitan-night-board.json index c15a56f..ab24ef7 100644 --- a/docs/screens/boards/elcapitan-night-board.json +++ b/docs/screens/boards/elcapitan-night-board.json @@ -1,6 +1,6 @@ { "board": "elcapitan-night-board.jpg", - "caption": "El Capitan block, night: CC BY-SA photo (redistribution only) | photo-anchored concept | current capture", + "caption": "El Capitan block, night: CC BY-SA photo (redistribution only) | photo-anchored concept | current capture (banner self-light + facade washes).", "photo": "docs/screens/refs/hollywood/hollywood-boulevard-night-context-ccbysa.jpg", "concept": "docs/screens/concepts/hollywood_boulevard/el_capitan_facade_night.png", "capture": "docs/screenshots/05-late-night-avenue.png" diff --git a/docs/screenshots/05-late-night-avenue.png b/docs/screenshots/05-late-night-avenue.png index 61ace1d..7401aac 100644 Binary files a/docs/screenshots/05-late-night-avenue.png and b/docs/screenshots/05-late-night-avenue.png differ diff --git a/src/game/world_builder.gd b/src/game/world_builder.gd index d959493..c63f953 100644 --- a/src/game/world_builder.gd +++ b/src/game/world_builder.gd @@ -1111,8 +1111,13 @@ func _add_masonic_lattice(parent: Node3D, x: float, y: float, z: float, func _add_masonic_banner(parent: Node3D, x: float, front: float, text: String) -> void: var red := Color(0.58, 0.055, 0.065) - _add_box(parent, Vector3(2.62, 5.55, 0.06), Vector3(x, 8.2, front + 0.73), + # The reference night photo keeps the event banners readable against the dark + # stone: a low warm self-light that the day/night cycle brightens (not a + # glowing neon box). Registered with `_marquee_emissive` in `set_night_mode`. + var cloth := _add_box(parent, Vector3(2.62, 5.55, 0.06), Vector3(x, 8.2, front + 0.73), red, true, null, Vector2.ONE, "cloth") + cloth.material_override = Materials.emissive(red, 0.14) + _marquee_emissive.append(cloth.material_override) for y in [5.55, 10.85]: _add_box(parent, Vector3(2.82, 0.10, 0.12), Vector3(x, y, front + 0.75), Color(0.78, 0.62, 0.28), true, null, Vector2.ONE, "metal") diff --git a/src/test/tests/test_world.gd b/src/test/tests/test_world.gd index 55ff5f0..073c666 100644 --- a/src/test/tests/test_world.gd +++ b/src/test/tests/test_world.gd @@ -113,6 +113,13 @@ func test_hollywood_uses_the_real_landmark_layout() -> bool: var banners := root.find_child("EventBanners", true, false) var d := TestUtils.check(banners != null and banners.get_child_count() >= 9, "three red event banners with their trim are present") + # The event banners stay readable at night: the cloth carries a warm + # self-light that the day/night cycle brightens (not a flat dead panel). + var banner_cloth: Material = banners.get_child(0).material_override \ + if banners != null and banners.get_child_count() > 0 else null + var d2 := TestUtils.check(banner_cloth is StandardMaterial3D + and (banner_cloth as StandardMaterial3D).emission_enabled, + "the event banner cloth is emissive for the night balance") var walk := root.find_child("WalkOfFame", true, false) var walk_band := walk.get_child(0) as MeshInstance3D if walk != null else null var walk_material: Material = walk_band.mesh.surface_get_material(0) if walk_band != null else null @@ -130,7 +137,7 @@ func test_hollywood_uses_the_real_landmark_layout() -> bool: and WorldBuilder.placement_problems(placements).is_empty(), "the landmark prop placements keep the wide steps clear") root.free() - return a and b and c and d and e and f and g and h + return a and b and c and d and d2 and e and f and g and h func test_hollywood_geometry_stays_inside_the_map_budget() -> bool: