Give the Joke Shop a dark stucco wall and a photo-anchored concept
This commit is contained in:
1 parent
36583921cf
commit
634b1f75a3
14 files changed
+56
-13
No files matched your search
@@ -36,6 +36,10 @@ const T_LIMESTONE_NORMAL := preload(PICK_DIR + "stone_steps_normal.png")
|
||||
## `stone_steps` tile reads as small pavers, not wall ashlar).
|
||||
const T_ASHLAR := preload(PICK_DIR + "limestone_ashlar.png")
|
||||
const T_ASHLAR_NORMAL := preload(PICK_DIR + "limestone_ashlar_normal.png")
|
||||
## Dark stucco for the Comedy Store hall wall: flat matte charcoal (the concrete
|
||||
## paver tile read as grey masonry, not the building's flat black surface).
|
||||
const T_STUCCO := preload(PICK_DIR + "dark_stucco.png")
|
||||
const T_STUCCO_NORMAL := preload(PICK_DIR + "dark_stucco_normal.png")
|
||||
|
||||
## Roughness / metallic pairs per surface role. Exposed so tests and tooling can
|
||||
## assert the profiles instead of hard-coding numbers twice.
|
||||
@@ -118,6 +122,9 @@ static func limestone(tint: Color = Color(1, 1, 1), uv_scale: Vector2 = Vector2(
|
||||
static func ashlar(tint: Color = Color(1, 1, 1), uv_scale: Vector2 = Vector2(6, 3)) -> StandardMaterial3D:
|
||||
return textured(T_ASHLAR, tint, uv_scale, "stone", T_ASHLAR_NORMAL)
|
||||
|
||||
static func stucco(tint: Color = Color(1, 1, 1), uv_scale: Vector2 = Vector2(6, 3)) -> StandardMaterial3D:
|
||||
return textured(T_STUCCO, tint, uv_scale, "concrete", T_STUCCO_NORMAL)
|
||||
|
||||
static func asphalt(tint: Color = Color(1, 1, 1), uv_scale: Vector2 = Vector2(30, 7),
|
||||
wet: bool = false) -> StandardMaterial3D:
|
||||
var texture: Texture2D = T_ASPHALT_WET if wet else T_ASPHALT
|
||||
|
||||
@@ -10,6 +10,7 @@ const T_ASPHALT := preload(PICK_DIR + "asphalt.png")
|
||||
const T_AWNING := preload(PICK_DIR + "awning_canvas.png")
|
||||
const T_LIMESTONE := preload(PICK_DIR + "stone_steps.png")
|
||||
const T_ASHLAR := preload(PICK_DIR + "limestone_ashlar.png")
|
||||
const T_STUCCO := preload(PICK_DIR + "dark_stucco.png")
|
||||
## One skyline panorama per shift phase (realism pass): hazy daylight, warm dusk
|
||||
## with lit windows, and a night city. The old single strip was a black silhouette.
|
||||
const T_SKYLINE_DAY := preload(PICK_DIR + "skyline_day.png")
|
||||
@@ -374,10 +375,12 @@ func _build_comedy_store_building() -> void:
|
||||
var black_deep := Color(0.045, 0.045, 0.05)
|
||||
var signature := Color(0.58, 0.56, 0.52)
|
||||
var red := Color(0.42, 0.035, 0.045)
|
||||
# Main hall. The black stucco is the real building's dominant surface; the
|
||||
# concrete texture keeps it matte instead of turning it into glossy paint.
|
||||
# Main hall. The black stucco is the real building's dominant surface: a flat
|
||||
# matte charcoal tile now replaces the grey paver texture so the wall reads as
|
||||
# dark plaster, not masonry. The 0.105 tint keeps the effective value near the
|
||||
# reference's flat black while the fine grain stops it looking like glossy paint.
|
||||
_add_box(building, Vector3(w, h, d), Vector3(0, h * 0.5, cz), black,
|
||||
false, T_CONCRETE, Vector2(w * 0.42, h * 0.42), "concrete")
|
||||
false, T_STUCCO, Vector2(w * 0.42, h * 0.42), "concrete")
|
||||
# Low plinth and a thin parapet cap so the roofline reads against the hill.
|
||||
_add_box(building, Vector3(w, 0.30, 0.34), Vector3(0, 0.15, front + 0.05),
|
||||
Color(0.07, 0.07, 0.075), true, null, Vector2.ONE, "stone")
|
||||
|
||||
@@ -76,12 +76,21 @@ func test_joke_shop_uses_the_real_sunset_strip_layout() -> bool:
|
||||
"the low entrance step is built")
|
||||
var g := TestUtils.check(root.find_child("AlleyWall", true, false) == null,
|
||||
"the old alley walls are gone")
|
||||
# The hall wall uses the dark stucco pick, not the grey sidewalk-paver tile,
|
||||
# so it reads as the real club's flat black plaster.
|
||||
var wall := root.find_child("Building", true, false) as Node3D
|
||||
var wall_mesh := wall.get_child(0) as MeshInstance3D if wall != null and wall.get_child_count() > 0 else null
|
||||
var wall_mat: Material = wall_mesh.mesh.surface_get_material(0) if wall_mesh != null and wall_mesh.mesh != null else null
|
||||
var g2 := TestUtils.check(wall_mat is StandardMaterial3D
|
||||
and (wall_mat as StandardMaterial3D).albedo_texture != null
|
||||
and (wall_mat as StandardMaterial3D).albedo_texture.resource_path.contains("dark_stucco"),
|
||||
"the hall wall carries the dark stucco texture")
|
||||
var placements: Array = builder.spec.get("prop_placements", [])
|
||||
var h := TestUtils.check(not placements.is_empty()
|
||||
and WorldBuilder.placement_problems(placements).is_empty(),
|
||||
"the Joke Shop prop placements stay on the sidewalk and clear the lane")
|
||||
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 e and f and g and g2 and h
|
||||
|
||||
func test_joke_shop_geometry_stays_inside_the_map_budget() -> bool:
|
||||
var root := Node3D.new()
|
||||
|
||||
Reference in new issue
Block a user