Files
AIGame/Config/Combat/skill_system_v1.proposal.json
T
udxandClaude Opus 5.5 89e0fa246f 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>
2026-10-21 12:23:55 +08:00

513 lines
12 KiB
JSON

{
"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"
}
]
}