Add formal enemies, remaining formal partners and synthesized UI SFX
- 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>
This commit is contained in:
@@ -0,0 +1,575 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,512 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"status": "design_only",
|
||||
"runtimeEnabled": false,
|
||||
"proposedBattleRules": 3,
|
||||
"source": {
|
||||
"path": "Config/Gameplay/greenfield.json",
|
||||
"sha256AtAuthoring": "924e4ebe7d6f699b8a6445fa11a9dbd0163d3284693194d893578f4f8275f7ec",
|
||||
"values": "resolve_from_frozen_gameplay_snapshot"
|
||||
},
|
||||
"clock": {
|
||||
"tickMs": 50,
|
||||
"cooldownRounding": "ceil",
|
||||
"simulationUsesWallClock": false
|
||||
},
|
||||
"numeric": {
|
||||
"hpScale": 1000,
|
||||
"positionScale": 1000,
|
||||
"factorScale": 10000,
|
||||
"rounding": "explicit_integer_rules_v1"
|
||||
},
|
||||
"scheduling": {
|
||||
"channel": "main_action",
|
||||
"priorities": {
|
||||
"ability": 100,
|
||||
"basic": 10
|
||||
},
|
||||
"cooldownStarts": "cast_start",
|
||||
"cancelRefund": "none",
|
||||
"initialCooldownTicks": 0,
|
||||
"interruptBeforeRelease": [
|
||||
"death",
|
||||
"hard_control"
|
||||
],
|
||||
"releasedProjectileSurvivesCaster": true
|
||||
},
|
||||
"projectile": {
|
||||
"speedMmPerTick": 800,
|
||||
"maxLifetimeTicks": 40,
|
||||
"arrival": "ceil_distance_at_release",
|
||||
"targetLost": "expire",
|
||||
"retarget": false,
|
||||
"collisionAuthority": "simulation"
|
||||
},
|
||||
"statuses": [
|
||||
{
|
||||
"id": "shield_main",
|
||||
"merge": "max_remaining_replace_expiry",
|
||||
"value": "flat_hp"
|
||||
},
|
||||
{
|
||||
"id": "slow_main",
|
||||
"merge": "min_factor_max_expiry",
|
||||
"value": "remaining_speed_factor"
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"id": "basic_melee",
|
||||
"selector": "front_enemy_same_lane",
|
||||
"delivery": "instant",
|
||||
"actions": [
|
||||
{
|
||||
"id": "main",
|
||||
"trigger": "delivery_hit",
|
||||
"type": "damage",
|
||||
"amount": "attack_scaled",
|
||||
"scale": "one"
|
||||
}
|
||||
],
|
||||
"timing": {
|
||||
"releaseTicks": 9,
|
||||
"recoveryTicks": 11
|
||||
},
|
||||
"parameters": {
|
||||
"cooldown": "basic_cooldown",
|
||||
"range": "basic_range",
|
||||
"amount": "actor_attack"
|
||||
},
|
||||
"targetLost": "expire",
|
||||
"channel": "main_action",
|
||||
"snapshot": "caster_on_start_target_on_hit"
|
||||
},
|
||||
{
|
||||
"id": "basic_ranged",
|
||||
"selector": "front_enemy_same_lane",
|
||||
"delivery": "projectile",
|
||||
"actions": [
|
||||
{
|
||||
"id": "main",
|
||||
"trigger": "delivery_hit",
|
||||
"type": "damage",
|
||||
"amount": "attack_scaled",
|
||||
"scale": "one"
|
||||
}
|
||||
],
|
||||
"timing": {
|
||||
"releaseTicks": 6,
|
||||
"recoveryTicks": 6
|
||||
},
|
||||
"parameters": {
|
||||
"cooldown": "basic_cooldown",
|
||||
"range": "basic_range",
|
||||
"amount": "actor_attack"
|
||||
},
|
||||
"targetLost": "expire",
|
||||
"channel": "main_action",
|
||||
"snapshot": "caster_on_start_target_on_hit"
|
||||
},
|
||||
{
|
||||
"id": "ability_burst",
|
||||
"selector": "front_enemy_same_lane",
|
||||
"delivery": "projectile",
|
||||
"actions": [
|
||||
{
|
||||
"id": "main",
|
||||
"trigger": "delivery_hit",
|
||||
"type": "damage",
|
||||
"amount": "attack_scaled",
|
||||
"scale": "ability_value"
|
||||
}
|
||||
],
|
||||
"timing": {
|
||||
"releaseTicks": 8,
|
||||
"recoveryTicks": 8
|
||||
},
|
||||
"parameters": {
|
||||
"cooldown": "ability_cooldown",
|
||||
"range": "ability_range",
|
||||
"amount": "ability_value",
|
||||
"targetCount": "ability_target_count"
|
||||
},
|
||||
"targetLost": "expire",
|
||||
"channel": "main_action",
|
||||
"snapshot": "caster_on_start_target_on_hit"
|
||||
},
|
||||
{
|
||||
"id": "ability_chain",
|
||||
"selector": "front_enemy_same_lane",
|
||||
"delivery": "instant",
|
||||
"actions": [
|
||||
{
|
||||
"id": "main",
|
||||
"trigger": "delivery_hit",
|
||||
"type": "damage",
|
||||
"amount": "attack_scaled",
|
||||
"scale": "ability_value"
|
||||
}
|
||||
],
|
||||
"timing": {
|
||||
"releaseTicks": 8,
|
||||
"recoveryTicks": 8
|
||||
},
|
||||
"parameters": {
|
||||
"cooldown": "ability_cooldown",
|
||||
"range": "ability_range",
|
||||
"amount": "ability_value",
|
||||
"targetCount": "ability_target_count"
|
||||
},
|
||||
"targetLost": "expire",
|
||||
"channel": "main_action",
|
||||
"snapshot": "caster_on_start_target_on_hit"
|
||||
},
|
||||
{
|
||||
"id": "ability_heal",
|
||||
"selector": "lowest_hp_ratio_ally",
|
||||
"delivery": "instant",
|
||||
"actions": [
|
||||
{
|
||||
"id": "main",
|
||||
"trigger": "delivery_hit",
|
||||
"type": "heal",
|
||||
"amount": "ability_value"
|
||||
}
|
||||
],
|
||||
"timing": {
|
||||
"releaseTicks": 8,
|
||||
"recoveryTicks": 8
|
||||
},
|
||||
"parameters": {
|
||||
"cooldown": "ability_cooldown",
|
||||
"range": "ability_range",
|
||||
"amount": "ability_value",
|
||||
"targetCount": "ability_target_count",
|
||||
"radius": "ability_radius"
|
||||
},
|
||||
"targetLost": "expire",
|
||||
"channel": "main_action",
|
||||
"snapshot": "caster_on_start_target_on_hit"
|
||||
},
|
||||
{
|
||||
"id": "ability_shield",
|
||||
"selector": "self",
|
||||
"delivery": "instant",
|
||||
"actions": [
|
||||
{
|
||||
"id": "main",
|
||||
"trigger": "delivery_hit",
|
||||
"type": "apply_status",
|
||||
"statusId": "shield_main",
|
||||
"value": "ability_value",
|
||||
"duration": "ability_duration"
|
||||
}
|
||||
],
|
||||
"timing": {
|
||||
"releaseTicks": 0,
|
||||
"recoveryTicks": 8
|
||||
},
|
||||
"parameters": {
|
||||
"cooldown": "ability_cooldown",
|
||||
"range": "ability_range",
|
||||
"amount": "ability_value",
|
||||
"targetCount": "ability_target_count",
|
||||
"duration": "ability_duration"
|
||||
},
|
||||
"targetLost": "expire",
|
||||
"channel": "main_action",
|
||||
"snapshot": "caster_on_start_target_on_hit"
|
||||
},
|
||||
{
|
||||
"id": "ability_slow",
|
||||
"selector": "front_enemy_same_lane",
|
||||
"delivery": "instant",
|
||||
"actions": [
|
||||
{
|
||||
"id": "main",
|
||||
"trigger": "delivery_hit",
|
||||
"type": "apply_status",
|
||||
"statusId": "slow_main",
|
||||
"value": "ability_value",
|
||||
"duration": "ability_duration"
|
||||
}
|
||||
],
|
||||
"timing": {
|
||||
"releaseTicks": 8,
|
||||
"recoveryTicks": 8
|
||||
},
|
||||
"parameters": {
|
||||
"cooldown": "ability_cooldown",
|
||||
"range": "ability_range",
|
||||
"amount": "ability_value",
|
||||
"targetCount": "ability_target_count",
|
||||
"duration": "ability_duration",
|
||||
"bossScale": "boss_control_scale"
|
||||
},
|
||||
"targetLost": "expire",
|
||||
"channel": "main_action",
|
||||
"snapshot": "caster_on_start_target_on_hit"
|
||||
},
|
||||
{
|
||||
"id": "enemy_melee",
|
||||
"selector": "front_blocker_same_lane",
|
||||
"delivery": "instant",
|
||||
"actions": [
|
||||
{
|
||||
"id": "main",
|
||||
"trigger": "delivery_hit",
|
||||
"type": "damage",
|
||||
"amount": "attack_scaled",
|
||||
"scale": "one"
|
||||
}
|
||||
],
|
||||
"timing": {
|
||||
"releaseTicks": 6,
|
||||
"recoveryTicks": 6
|
||||
},
|
||||
"parameters": {
|
||||
"cooldown": "basic_cooldown",
|
||||
"range": "basic_range",
|
||||
"amount": "actor_attack"
|
||||
},
|
||||
"targetLost": "expire",
|
||||
"channel": "main_action",
|
||||
"snapshot": "caster_on_start_target_on_hit"
|
||||
}
|
||||
],
|
||||
"skills": [
|
||||
{
|
||||
"id": "pet.0.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 0,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/0",
|
||||
"template": "basic_melee",
|
||||
"presentation": "rockball_basic"
|
||||
},
|
||||
{
|
||||
"id": "pet.0.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 0,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/0",
|
||||
"template": "ability_shield",
|
||||
"presentation": "rockball_ability"
|
||||
},
|
||||
{
|
||||
"id": "pet.1.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 1,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/1",
|
||||
"template": "basic_ranged",
|
||||
"presentation": "firecat_basic",
|
||||
"timing": {
|
||||
"releaseTicks": 9,
|
||||
"recoveryTicks": 9
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "pet.1.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 1,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/1",
|
||||
"template": "ability_burst",
|
||||
"presentation": "firecat_ability",
|
||||
"timing": {
|
||||
"releaseTicks": 11,
|
||||
"recoveryTicks": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "pet.2.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 2,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/2",
|
||||
"template": "basic_ranged",
|
||||
"presentation": "prototype_basic_ranged"
|
||||
},
|
||||
{
|
||||
"id": "pet.2.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 2,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/2",
|
||||
"template": "ability_heal",
|
||||
"presentation": "prototype_ability_heal"
|
||||
},
|
||||
{
|
||||
"id": "pet.3.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 3,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/3",
|
||||
"template": "basic_ranged",
|
||||
"presentation": "prototype_basic_ranged"
|
||||
},
|
||||
{
|
||||
"id": "pet.3.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 3,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/3",
|
||||
"template": "ability_chain",
|
||||
"presentation": "prototype_ability_chain"
|
||||
},
|
||||
{
|
||||
"id": "pet.4.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 4,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/4",
|
||||
"template": "basic_melee",
|
||||
"presentation": "prototype_basic_melee"
|
||||
},
|
||||
{
|
||||
"id": "pet.4.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 4,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/4",
|
||||
"template": "ability_slow",
|
||||
"presentation": "prototype_ability_slow"
|
||||
},
|
||||
{
|
||||
"id": "pet.5.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 5,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/5",
|
||||
"template": "basic_melee",
|
||||
"presentation": "prototype_basic_melee"
|
||||
},
|
||||
{
|
||||
"id": "pet.5.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 5,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/5",
|
||||
"template": "ability_slow",
|
||||
"presentation": "prototype_ability_slow"
|
||||
},
|
||||
{
|
||||
"id": "pet.6.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 6,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/6",
|
||||
"template": "basic_ranged",
|
||||
"presentation": "prototype_basic_ranged"
|
||||
},
|
||||
{
|
||||
"id": "pet.6.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 6,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/6",
|
||||
"template": "ability_burst",
|
||||
"presentation": "prototype_ability_burst"
|
||||
},
|
||||
{
|
||||
"id": "pet.7.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 7,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/7",
|
||||
"template": "basic_ranged",
|
||||
"presentation": "prototype_basic_ranged"
|
||||
},
|
||||
{
|
||||
"id": "pet.7.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 7,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/7",
|
||||
"template": "ability_heal",
|
||||
"presentation": "prototype_ability_heal"
|
||||
},
|
||||
{
|
||||
"id": "pet.8.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 8,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/8",
|
||||
"template": "basic_ranged",
|
||||
"presentation": "prototype_basic_ranged"
|
||||
},
|
||||
{
|
||||
"id": "pet.8.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 8,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/8",
|
||||
"template": "ability_chain",
|
||||
"presentation": "prototype_ability_chain"
|
||||
},
|
||||
{
|
||||
"id": "pet.9.basic",
|
||||
"actorKind": "pet",
|
||||
"actorId": 9,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/pets/9",
|
||||
"template": "basic_melee",
|
||||
"presentation": "prototype_basic_melee"
|
||||
},
|
||||
{
|
||||
"id": "pet.9.ability",
|
||||
"actorKind": "pet",
|
||||
"actorId": 9,
|
||||
"slot": "ability",
|
||||
"sourcePointer": "/pets/9",
|
||||
"template": "ability_shield",
|
||||
"presentation": "prototype_ability_shield"
|
||||
},
|
||||
{
|
||||
"id": "enemy.0.basic",
|
||||
"actorKind": "enemy",
|
||||
"actorId": 0,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/enemies/0",
|
||||
"template": "enemy_melee",
|
||||
"presentation": "prototype_enemy_melee"
|
||||
},
|
||||
{
|
||||
"id": "enemy.1.basic",
|
||||
"actorKind": "enemy",
|
||||
"actorId": 1,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/enemies/1",
|
||||
"template": "enemy_melee",
|
||||
"presentation": "prototype_enemy_melee"
|
||||
},
|
||||
{
|
||||
"id": "enemy.2.basic",
|
||||
"actorKind": "enemy",
|
||||
"actorId": 2,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/enemies/2",
|
||||
"template": "enemy_melee",
|
||||
"presentation": "prototype_enemy_melee"
|
||||
},
|
||||
{
|
||||
"id": "enemy.3.basic",
|
||||
"actorKind": "enemy",
|
||||
"actorId": 3,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/enemies/3",
|
||||
"template": "enemy_melee",
|
||||
"presentation": "prototype_enemy_melee"
|
||||
},
|
||||
{
|
||||
"id": "enemy.4.basic",
|
||||
"actorKind": "enemy",
|
||||
"actorId": 4,
|
||||
"slot": "basic",
|
||||
"sourcePointer": "/enemies/4",
|
||||
"template": "enemy_melee",
|
||||
"presentation": "prototype_enemy_melee"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user