- 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>
18 lines
759 B
Python
18 lines
759 B
Python
import bpy
|
|
from pathlib import Path
|
|
p=Path('Tools/output/companions/BudBud/motions/Walk/animated.fbx')
|
|
bpy.ops.wm.read_factory_settings(use_empty=True); bpy.ops.import_scene.fbx(filepath=str(p),use_anim=True)
|
|
for o in bpy.context.scene.objects:
|
|
if o.type=='ARMATURE':
|
|
print('arm',o.name,'frame',bpy.context.scene.frame_start,bpy.context.scene.frame_end,'anim',bool(o.animation_data))
|
|
a=o.animation_data.action if o.animation_data else None
|
|
print('action',a,a.layers if a else None)
|
|
if a:
|
|
for l in a.layers:
|
|
print('layer',l.name,'strips',len(l.strips))
|
|
for s in l.strips:
|
|
print('strip',type(s),dir(s)[:20])
|
|
cb=s.channelbag(0) if hasattr(s,'channelbag') else None
|
|
print('cb',cb, 'fcurves',len(cb.fcurves) if cb else None)
|
|
|