Files
settled-reach/client/tools/garment_preview/load_check.gd
T
jpmschweitzerandClaude Fable 5 ded5c62515 feat(assets): wardrobe wave 2 — footwear, sportswear, swimwear, sweater, cargos, thrds parka, slides (T-1089)
Twelve garments, per-body on all 11 bodies, chromakey-gated (worst clips:
parka 3px, boots 54, sweater/tank 83, sneakers 100 final-geometry, slides
123, swim trunks 132, cargo 138 — all under the 150px gate), previewed:
tank top, sweater (crew-neck via per-body ring-valley probe — first draft
read mock-neck, fixed by measured rim circularization), track jacket
(recolorable sleeve-stripe region), joggers (side-stripe region), cargo
pants, swim trunks, one-piece swimsuit, sneakers (prism-sole), formal
shoes, ankle boots (calf shaft), slides (open strap + sole), and the
hip-length thrds parka — the first canon-branded garment (Braemar
cold-weather cooperative), quilted, logo-capable.

Tops now hem into real hip geometry (the natural seg_torso bottom is a
9-14cm tooth ring — the sweater established the hem-into-hips practice).
Manifest merged by the lead: 24 clothing entries with region/default-tint
metadata. Full modern catalogue: 21 garments across tops/bottoms/feet/
full-body x casual/formal/sport/swim/outerwear.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:20:18 +02:00

50 lines
1.4 KiB
GDScript

extends SceneTree
## Headless load check: verify garment GLB scenes load and their albedo
## texture resolves. Usage:
## godot4 --path client --headless --script res://tools/garment_preview/load_check.gd
## Temporary tool script — safe to delete after wave-2 integration.
const ITEMS := [
"res://assets/characters/clothing/jeans_modern/average_m.glb",
"res://assets/characters/clothing/swim_trunks/average_m.glb",
"res://assets/characters/clothing/swim_trunks/heavy_m.glb",
]
func _init() -> void:
for path in ITEMS:
_check(path)
quit(0)
func _check(path: String) -> void:
if not ResourceLoader.exists(path):
print("loadcheck: MISSING ", path)
return
var ps := load(path) as PackedScene
if ps == null:
print("loadcheck: LOAD FAILED ", path)
return
var inst := ps.instantiate()
var found := false
var stack: Array[Node] = [inst]
while not stack.is_empty():
var n: Node = stack.pop_back()
for c in n.get_children():
stack.append(c)
if n is MeshInstance3D:
var mi := n as MeshInstance3D
if mi.mesh == null:
continue
for surf in range(mi.mesh.get_surface_count()):
var m := mi.mesh.surface_get_material(surf)
if m is BaseMaterial3D:
var tex := (m as BaseMaterial3D).albedo_texture
if tex != null:
print("loadcheck: OK ", path, " albedo=", tex.get_class(),
" ", tex.get_width(), "x", tex.get_height())
found = true
if not found:
print("loadcheck: NO ALBEDO ", path)
inst.free()