feat: protruding double-sided shop signs over the sidewalks

1-2 per building at second-floor height on metal brackets, double-faced
with generated ad graphics — the perpendicular sign clutter that defines
Akihabara/anime-city streets and makes rows read dense from street level.

Verified via street capture; smoke test 0 failures.

Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
Nicholas Butzke
2026-07-19 02:53:03 -04:00
co-authored by Claude Fable 5
parent c8a85586bd
commit 6b3e363dfd
@@ -187,6 +187,16 @@ func _kit_fill_side(front_x: float, dir: int, z0: float, z1: float, seed_id: Str
var pz := cursor + _rng.randf_range(1.5, maxf(w - 1.5, 2.0)) var pz := cursor + _rng.randf_range(1.5, maxf(w - 1.5, 2.0))
_ad_quad(Vector3(front_x - float(dir) * 0.15, _rng.randf_range(1.7, 2.4), pz), _ad_quad(Vector3(front_x - float(dir) * 0.15, _rng.randf_range(1.7, 2.4), pz),
Vector2(1.3, 2.0) * _rng.randf_range(0.8, 1.1), face_yaw, _poster_tex()) Vector2(1.3, 2.0) * _rng.randf_range(0.8, 1.1), face_yaw, _poster_tex())
# Protruding double-sided shop signs over the sidewalk (2nd floor)
if h >= 8.0:
var signs := 1 + _rng.randi() % 2
for sp in signs:
var sz := cursor + w * (float(sp) + 0.7) / (float(signs) + 0.7)
var spos := Vector3(front_x - float(dir) * 0.9, 5.6 + _rng.randf_range(-0.4, 0.6), sz)
var stx := _poster_tex()
_deco_box(spos + Vector3(float(dir) * 0.75, 0, 0), Vector3(1.6, 0.12, 0.12), METAL.darkened(0.2))
_ad_quad(spos + Vector3(0.06, 0, 0), Vector2(1.2, 1.7), 90.0, stx)
_ad_quad(spos + Vector3(-0.06, 0, 0), Vector2(1.2, 1.7), -90.0, stx)
# Akiba signage layer, aligned to the model's measured bounds # Akiba signage layer, aligned to the model's measured bounds
if h >= 14.0: if h >= 14.0:
var zs := cursor + 1.2 var zs := cursor + 1.2