- 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>
576 lines
13 KiB
JSON
576 lines
13 KiB
JSON
{
|
|
"schemaVersion": 1,
|
|
"status": "design_only",
|
|
"runtimeEnabled": false,
|
|
"clock": "battle_playback_clock",
|
|
"eventDedup": [
|
|
"battleId",
|
|
"eventSeq",
|
|
"cueIndex"
|
|
],
|
|
"anchors": [
|
|
"model",
|
|
"cast",
|
|
"body",
|
|
"target_hit",
|
|
"projectile"
|
|
],
|
|
"anchorPolicy": {
|
|
"configuredSocketFirst": true,
|
|
"fallback": "bounds_based",
|
|
"localForward": "-Z",
|
|
"worldFacing": "source_to_target"
|
|
},
|
|
"audio": {
|
|
"bus": "BattleSfx",
|
|
"initialVoiceCap": 12,
|
|
"mutedStillConsumesEvent": true,
|
|
"pause": "pause_owned_sources",
|
|
"speed": "keep_pitch_drop_expired_one_shots"
|
|
},
|
|
"lifecycle": {
|
|
"statusStop": "StatusRemoved",
|
|
"projectileStop": "ProjectileExpired_or_HitResolved",
|
|
"battleStop": "BattleEnded"
|
|
},
|
|
"assets": [
|
|
{
|
|
"id": "anim.firecat.attack",
|
|
"type": "animation",
|
|
"path": "Assets/Bundles/Characters/Animal/FireCat/Clips/Attack.anim",
|
|
"status": "existing",
|
|
"clipSeconds": 1.1,
|
|
"releaseNormalized": 0.5
|
|
},
|
|
{
|
|
"id": "anim.rockball.attack",
|
|
"type": "animation",
|
|
"path": "Assets/Bundles/Characters/Animal/RockBall/Clips/Attack.anim",
|
|
"status": "existing",
|
|
"clipSeconds": 1,
|
|
"releaseNormalized": 0.45
|
|
},
|
|
{
|
|
"id": "vfx.FireCharge",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/FireCharge/FireCharge.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.FireCharge",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireCharge.wav",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "vfx.FireProjectile",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/FireProjectile/FireProjectile.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "vfx.FireHit",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/FireHit/FireHit.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.FireHit",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireHit.wav",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "vfx.RockHit",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/RockHit/RockHit.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.RockHit",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_RockHit.wav",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "vfx.Heal",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/Heal/Heal.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.Heal",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Heal.wav",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "vfx.Shield",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/Shield/Shield.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.Shield",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Shield.wav",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "vfx.Slow",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/Slow/Slow.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.Slow",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Slow.wav",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "vfx.Lightning",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/Lightning/Lightning.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.Lightning",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Lightning.wav",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "vfx.EnemyHit",
|
|
"type": "vfx",
|
|
"path": "Assets/Bundles/Effects/BattleSkills/EnemyHit/EnemyHit.prefab",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.EnemyHit",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_EnemyHit.wav",
|
|
"status": "planned"
|
|
},
|
|
{
|
|
"id": "sfx.FireLaunch",
|
|
"type": "sfx",
|
|
"path": "Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireLaunch.wav",
|
|
"status": "planned"
|
|
}
|
|
],
|
|
"profiles": [
|
|
{
|
|
"id": "prototype_basic_melee",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.RockHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.RockHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "prototype_basic_ranged",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.EnemyHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.EnemyHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "prototype_ability_burst",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.FireHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.FireHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "prototype_ability_chain",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.Lightning",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.Lightning",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "prototype_ability_heal",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.Heal",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.Heal",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "prototype_ability_shield",
|
|
"bindings": {
|
|
"StatusApplied": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.Shield",
|
|
"anchor": "body",
|
|
"token": "status"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.Shield",
|
|
"anchor": "body"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "prototype_ability_slow",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.Slow",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.Slow",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "prototype_enemy_melee",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.EnemyHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.EnemyHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "firecat_basic",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.FireHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.FireHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
],
|
|
"CastStarted": [
|
|
{
|
|
"kind": "animation",
|
|
"asset": "anim.firecat.attack",
|
|
"anchor": "model",
|
|
"fit": "cast_duration",
|
|
"rootMotion": false
|
|
},
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.FireCharge",
|
|
"anchor": "cast",
|
|
"token": "charge"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.FireCharge",
|
|
"anchor": "cast",
|
|
"token": "charge"
|
|
}
|
|
],
|
|
"CastReleased": [
|
|
{
|
|
"kind": "stop_token",
|
|
"token": "charge"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.FireLaunch",
|
|
"anchor": "cast"
|
|
}
|
|
],
|
|
"ProjectileSpawned": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.FireProjectile",
|
|
"anchor": "projectile",
|
|
"token": "projectile"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "firecat_ability",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.FireHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.FireHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
],
|
|
"CastStarted": [
|
|
{
|
|
"kind": "animation",
|
|
"asset": "anim.firecat.attack",
|
|
"anchor": "model",
|
|
"fit": "cast_duration",
|
|
"rootMotion": false
|
|
},
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.FireCharge",
|
|
"anchor": "cast",
|
|
"token": "charge"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.FireCharge",
|
|
"anchor": "cast",
|
|
"token": "charge"
|
|
}
|
|
],
|
|
"CastReleased": [
|
|
{
|
|
"kind": "stop_token",
|
|
"token": "charge"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.FireLaunch",
|
|
"anchor": "cast"
|
|
}
|
|
],
|
|
"ProjectileSpawned": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.FireProjectile",
|
|
"anchor": "projectile",
|
|
"token": "projectile"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "rockball_basic",
|
|
"bindings": {
|
|
"HitResolved": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.RockHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.RockHit",
|
|
"anchor": "target_hit",
|
|
"when": "valid_hit"
|
|
}
|
|
],
|
|
"CastStarted": [
|
|
{
|
|
"kind": "animation",
|
|
"asset": "anim.rockball.attack",
|
|
"anchor": "model",
|
|
"fit": "cast_duration",
|
|
"rootMotion": false
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
},
|
|
{
|
|
"id": "rockball_ability",
|
|
"bindings": {
|
|
"StatusApplied": [
|
|
{
|
|
"kind": "vfx",
|
|
"asset": "vfx.Shield",
|
|
"anchor": "body",
|
|
"token": "status"
|
|
},
|
|
{
|
|
"kind": "sfx",
|
|
"asset": "sfx.Shield",
|
|
"anchor": "body"
|
|
}
|
|
]
|
|
},
|
|
"cancelStops": [
|
|
"charge"
|
|
],
|
|
"endStops": [
|
|
"charge"
|
|
],
|
|
"resourceFallback": "prototype",
|
|
"seekReplaysOneShots": false
|
|
}
|
|
]
|
|
}
|