# Audit the sibling Gig Line project for assets this project can reuse. # # python3 Tools/sibling_asset_audit.py # summary # python3 Tools/sibling_asset_audit.py --manifest # write Art/props/reuse-manifest.json # # The sibling project (…/06-games/security-game) is a Godot 4 security game by # the same author that researched this block first. Its street props are small, # generic and far cheaper to reuse than to remodel; its building meshes are not # reusable because they are Godot GLBs built to a different contract. # # What this tool does NOT do: copy anything, decide licence, or assume a prop # matches this project's proportions. It reports name, size, format and whether # a Blender source exists, so the copy list can be chosen deliberately. import argparse import json import os import struct import sys SIBLING = "/run/media/system/DATA/Documents/06-games/security-game" PROPS_GLB = os.path.join(SIBLING, "assets/models/blender/props") SRC_BLEND = os.path.join(SIBLING, "assets/models/blender_src") OUT = "Art/props/reuse-manifest.json" def glb_stats(path): """Triangle count and bounds from a GLB, without any dependency.""" with open(path, "rb") as f: data = f.read() if data[:4] != b"glTF": return None json_len = struct.unpack("18} glTF m " f"mats {r.get('materials', 0)} {src}") print(f"\n{len(rows)} props, {sum(r['bytes'] for r in rows)//1024} KB of GLB, " f"{sum(r['triangles'] for r in rows)} triangles total") print("glTF is Y-up and Blender is Z-up: the exporter swaps Y/Z, so `size_gltf` " "lists X, height, depth — not X, Y, Z as authored.") if args.manifest: os.makedirs(os.path.dirname(OUT), exist_ok=True) with open(OUT, "w") as f: json.dump({ "source_project": SIBLING, "scanned": "assets/models/blender/props + assets/models/blender_src", "licence": "project-owned (same author); confirm before shipping", "note": "audit only — nothing has been copied", "props": rows, }, f, indent=2) print(f"wrote {OUT}") if __name__ == "__main__": main()