- UI SFX v3: procedurally synthesized one-shots (Tools/synth_ui_sfx.py) wired to buttons, rewards, errors and red dots via UiSfx, gated by the SFX setting. - Five formal enemies (Hornlet, Dashlet, Shellhorn, HornCaptain, GreatHorn): Hunyuan 50k -> 2000-tri XPbr, DGXA TokenRig, Idle/Walk/Attack, nested per type in PrototypeArena; PrototypeBattle.Enemy gains presentation-only Moving/Strikes. - Formal partners for all ten pets in the arena and portraits, including new VineSprite, ThunderLeopard and TideWhale. - Pipeline fixes: reject local TokenRig fallback, drop loose mesh islands, configurable Unity run_script timeout, companion static stage. - Also includes concurrent work from another tool in this working tree (FlameLion, enemy combat FX, challenge mode, home explorer, server updates). - Resources registered in Doc/ResDesc_*.md; verified on isolated :18081. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 lines
720 B
Python
13 lines
720 B
Python
#!/usr/bin/env python3
|
|
"""Join an enemy's static_audit front/side/back/perspective captures into sheet.png for review."""
|
|
import sys
|
|
from pathlib import Path
|
|
from PIL import Image
|
|
base = Path(__file__).resolve().parents[1] / "Tools/output"
|
|
d = next(p for p in (base / "enemy_characters" / sys.argv[1] / "static_audit", base / "companions" / sys.argv[1] / "static_audit") if p.exists())
|
|
ims = [Image.open(d / f"{v}.png").convert("RGB") for v in ("front", "side", "back", "perspective")]
|
|
ims = [i.resize((int(i.width * 300 / i.height), 300)) for i in ims]
|
|
s = Image.new("RGB", (sum(i.width for i in ims), 300), "white"); x = 0
|
|
for i in ims: s.paste(i, (x, 0)); x += i.width
|
|
s.save(d / "sheet.png"); print(d / "sheet.png")
|