- 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>
10 lines
662 B
Python
10 lines
662 B
Python
import bpy,sys
|
|
from pathlib import Path
|
|
for fp in [Path('AIClient/Assets/Bundles/Characters/Animal/BudBud/BudBud.fbx'),Path('Tools/output/companions/BudBud/BudBud_Rigged.fbx')]:
|
|
bpy.ops.wm.read_factory_settings(use_empty=True); bpy.ops.import_scene.fbx(filepath=str(fp))
|
|
vs=[]
|
|
for o in bpy.context.scene.objects:
|
|
if o.type=='MESH': vs.extend([o.matrix_world@v.co for v in o.data.vertices])
|
|
mn=[min(v[i] for v in vs) for i in range(3)]; mx=[max(v[i] for v in vs) for i in range(3)]
|
|
print(fp.name,'min',*[round(x,5) for x in mn],'max',*[round(x,5) for x in mx],'height',round(mx[1]-mn[1],5),'center_xz',round((mn[0]+mx[0])/2,5),round((mn[2]+mx[2])/2,5))
|