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:
udx
2026-10-21 12:23:55 +08:00
co-authored by Claude Opus 5.5
parent 6c64210331
commit 89e0fa246f
780 changed files with 7117051 additions and 15906 deletions
@@ -0,0 +1,78 @@
{
"schemaVersion": 1,
"id": "BubbleTurtle",
"kind": "Animal",
"usage": "companion_visual",
"profile": "quadruped_turtle",
"boneMappingReady": false,
"height": 0.35,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/BubbleTurtle",
"staticPrefab": "Assets/Bundles/Characters/Animal/BubbleTurtle/BubbleTurtle.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/BubbleTurtle/BubbleTurtle.fbx",
"rigSource": "Tools/output/bubbleturtle_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/BubbleTurtle",
"visualPrefab": "Assets/Bundles/Characters/Animal/BubbleTurtle/BubbleTurtle_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_BubbleTurtle_Review.unity",
"reviewOriginX": 100,
"rootBone": "",
"shellBone": "",
"neckBone": "",
"headBone": "",
"faceRight": "",
"faceLeft": "",
"frontRightFoot": "",
"frontLeftFoot": "",
"hindRightFoot": "",
"hindLeftFoot": "",
"frontRightFootTip": "",
"frontLeftFootTip": "",
"hindRightFootTip": "",
"hindLeftFootTip": "",
"walkStride": 0.035,
"walkLift": 0.008,
"walkSeconds": 1.6,
"walkSwingFraction": 0.2,
"walkBindCalibration": true,
"walkSourceWeight": 0.12,
"idleSeconds": 2.0,
"idleBreath": 0.0015,
"idleSourceWeight": 0.04,
"attackStyle": "turtle_bubble",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.2,
"attackSourceWeight": 0.08,
"attackWindup": 0.3,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackHeadReach": 0.015,
"attackHeadPitchDegrees": 8,
"attackLunge": 0.002,
"maxRootTilt": 15,
"groundTolerance": 0.003,
"rootTiltReference": "bind_up",
"shellRigidityTolerance": 0.001,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/BubbleTurtle/motions/Idle",
"prompt": "a small squat quadrupedal turtle stands on all four feet with gentle breathing and subtle head movement, keeping its hard shell rigid",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/BubbleTurtle/motions/Walk",
"prompt": "a small squat quadrupedal turtle walks slowly on the ground with four separate legs taking short alternating steps, keeping its body horizontal and its hard shell rigid",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/BubbleTurtle/motions/Attack",
"prompt": "a small squat quadrupedal turtle braces on all four feet, briefly retracts its neck, extends its head forward once to blow a bubble spell, and recovers to its resting pose",
"duration": 2.0
}
],
"anatomyNotes": "Disabled proposal. Four short weight-bearing legs and a horizontal turtle body; inspect its own TokenRig before mapping root, shell, neck, head and four ankles/toes. Ground-up is measured from the bind pose, not the longitudinal root bone axis. Requires a new quadruped_turtle/turtle_bubble adapter; do not run a biped or avian adapter on this mesh. Preserve shell rigidity and verify all four feet."
}
+160
View File
@@ -0,0 +1,160 @@
{
"schemaVersion": 1,
"id": "BubbleTurtle",
"kind": "Animal",
"usage": "companion_visual",
"profile": "quadruped_turtle",
"boneMappingReady": true,
"height": 0.35,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/BubbleTurtle",
"staticPrefab": "Assets/Bundles/Characters/Animal/BubbleTurtle/BubbleTurtle.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/BubbleTurtle/BubbleTurtle.fbx",
"rigSource": "Tools/output/bubbleturtle_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/BubbleTurtle",
"visualPrefab": "Assets/Bundles/Characters/Animal/BubbleTurtle/BubbleTurtle_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_BubbleTurtle_Review.unity",
"reviewOriginX": 100,
"rootBone": "bone_0",
"shellBone": "bone_1",
"neckBone": "bone_2",
"headBone": "bone_3",
"faceRight": "bone_7",
"faceLeft": "bone_12",
"frontRightFoot": "bone_7",
"frontLeftFoot": "bone_12",
"hindRightFoot": "bone_16",
"hindLeftFoot": "bone_20",
"frontRightFootTip": "bone_8",
"frontLeftFootTip": "bone_13",
"hindRightFootTip": "bone_17",
"hindLeftFootTip": "bone_21",
"walkStride": 0.035,
"walkLift": 0.008,
"walkSeconds": 1.6,
"walkSwingFraction": 0.2,
"walkBindCalibration": true,
"walkSourceWeight": 0.12,
"idleSeconds": 2.0,
"idleBreath": 0.0015,
"idleSourceWeight": 0.04,
"attackStyle": "turtle_bubble",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.2,
"attackSourceWeight": 0.08,
"attackWindup": 0.3,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackHeadReach": 0.025,
"attackHeadPitchDegrees": 6,
"attackLunge": 0,
"maxRootTilt": 15,
"groundTolerance": 0.003,
"rootTiltReference": "bind_up",
"shellRigidityTolerance": 0.001,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/BubbleTurtle/motions/Idle",
"prompt": "a small squat quadrupedal turtle stands on all four feet with gentle breathing and subtle head movement, keeping its hard shell rigid",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/BubbleTurtle/motions/Walk",
"prompt": "a small squat quadrupedal turtle walks slowly on the ground with four separate legs taking short alternating steps, keeping its body horizontal and its hard shell rigid",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/BubbleTurtle/motions/Attack",
"prompt": "a small squat quadrupedal turtle braces on all four feet, briefly retracts its neck, extends its head forward once to blow a bubble spell, and recovers to its resting pose",
"duration": 2.0
}
],
"anatomyNotes": "Final forward source uses rigid Blender Z yaw +45 degrees from original Hunyuan. Unity front/side/back views verify -Z faces the head (FBX handedness included). Own final TokenRig: 26 bones: root0, shell1, neck2, head3/4, frontR7/toe8 frontL12/toe13 hindR16/toe17 hindL20/toe21, tail22..25. Previous 17-bone diagonal and 11-bone reversed rigs are diagnostic only. skinRegions use original low-FBX Y-up coordinates (Z is opposite Unity world Z); shellRegionMin/Max are Unity normalized bounds.",
"shellRegionMin": [
-0.7,
0.29,
-0.48
],
"shellRegionMax": [
0.7,
1.05,
0.9
],
"skinRegions": [
{
"bone": "bone_1",
"min": [
-0.7,
0.29,
-0.9
],
"max": [
0.7,
1.05,
0.48
],
"feather": 0.035
},
{
"bone": "bone_7",
"min": [
0.22,
-0.1,
0.15
],
"max": [
0.75,
0.23,
0.9
],
"feather": 0.025
},
{
"bone": "bone_12",
"min": [
-0.75,
-0.1,
0.15
],
"max": [
-0.22,
0.23,
0.9
],
"feather": 0.025
},
{
"bone": "bone_16",
"min": [
0.22,
-0.1,
-0.8
],
"max": [
0.75,
0.23,
-0.1
],
"feather": 0.025
},
{
"bone": "bone_20",
"min": [
-0.75,
-0.1,
-0.8
],
"max": [
-0.22,
0.23,
-0.1
],
"feather": 0.025
}
]
}
@@ -0,0 +1,71 @@
{
"schemaVersion": 1,
"id": "BudBud",
"kind": "Animal",
"usage": "companion_visual",
"profile": "biped_short",
"boneMappingReady": false,
"height": 0.5,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/BudBud",
"staticPrefab": "Assets/Bundles/Characters/Animal/BudBud/BudBud.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/BudBud/BudBud.fbx",
"rigSource": "Tools/output/budbud_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/BudBud",
"visualPrefab": "Assets/Bundles/Characters/Animal/BudBud/BudBud_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_BudBud_Review.unity",
"reviewOriginX": 60,
"rootBone": "",
"chestBone": "",
"faceRight": "",
"faceLeft": "",
"rightFoot": "",
"leftFoot": "",
"rightFootTip": "",
"leftFootTip": "",
"rightArm": "",
"leftArm": "",
"walkStride": 0.06,
"walkLift": 0.018,
"walkSeconds": 1.1,
"walkBindCalibration": true,
"walkSourceWeight": 0.35,
"idleSeconds": 1.6,
"idleBreath": 0.003,
"idleSourceWeight": 0.08,
"attackStyle": "ranged_cast",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.1,
"attackSourceWeight": 0.12,
"attackWindup": 0.28,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackLeanDegrees": 4,
"attackArmDegrees": 65,
"attackLunge": 0.002,
"attackReach": 0.025,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/BudBud/motions/Idle",
"prompt": "a small bipedal plant creature stands upright and idles with gentle breathing",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/BudBud/motions/Walk",
"prompt": "a small bipedal plant creature walks upright on two feet with alternating short steps and gentle arm swings",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/BudBud/motions/Attack",
"prompt": "a small bipedal plant creature raises both leaf hands and pushes them forward once to cast a gentle healing spell, then returns to upright standing",
"duration": 2.0
}
]
}
+72
View File
@@ -0,0 +1,72 @@
{
"schemaVersion": 1,
"id": "BudBud",
"kind": "Animal",
"usage": "companion_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.5,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/BudBud",
"staticPrefab": "Assets/Bundles/Characters/Animal/BudBud/BudBud.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/BudBud/BudBud.fbx",
"rigSource": "Tools/output/budbud_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/BudBud",
"visualPrefab": "Assets/Bundles/Characters/Animal/BudBud/BudBud_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_BudBud_Review.unity",
"reviewOriginX": 60,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_16",
"faceLeft": "bone_20",
"rightFoot": "bone_16",
"leftFoot": "bone_20",
"rightFootTip": "bone_17",
"leftFootTip": "bone_21",
"rightArm": "bone_7",
"leftArm": "bone_11",
"walkStride": 0.06,
"walkLift": 0.018,
"walkSeconds": 1.1,
"walkBindCalibration": true,
"walkSourceWeight": 0.35,
"idleSeconds": 1.6,
"idleBreath": 0.003,
"idleSourceWeight": 0.08,
"attackStyle": "ranged_cast",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.1,
"attackSourceWeight": 0.12,
"attackWindup": 0.28,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackLeanDegrees": 4,
"attackArmDegrees": 65,
"attackLunge": 0.002,
"attackReach": 0.025,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/BudBud/motions/Idle",
"prompt": "a small bipedal plant creature stands upright and idles with gentle breathing",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/BudBud/motions/Walk",
"prompt": "a small bipedal plant creature walks upright on two feet with alternating short steps and gentle arm swings",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/BudBud/motions/Attack",
"prompt": "a small bipedal plant creature raises both leaf hands and pushes them forward once to cast a gentle healing spell, then returns to upright standing",
"duration": 2.0
}
],
"boneMappingNotes": "Inspected BudBud TokenRig original: 22 bones; bone_0 vertical pelvis; bone_3 chest; x-positive ankle16/toe17 and arm7; x-negative ankle20/toe21 and arm11. All names refer to this BudBud rig, not a shared skeleton. Head chain4/5 holds flower halo and bud."
}
@@ -0,0 +1,76 @@
{
"schemaVersion": 1,
"id": "FlameLion",
"kind": "Animal",
"usage": "companion_visual",
"profile": "biped_short",
"boneMappingReady": false,
"height": 0.6,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/FlameLion",
"staticPrefab": "Assets/Bundles/Characters/Animal/FlameLion/FlameLion.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/FlameLion/FlameLion.fbx",
"rigSource": "Tools/output/flamelion_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/FlameLion",
"visualPrefab": "Assets/Bundles/Characters/Animal/FlameLion/FlameLion_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_FlameLion_Review.unity",
"reviewOriginX": 140,
"rootBone": "",
"chestBone": "",
"faceRight": "",
"faceLeft": "",
"rightFoot": "",
"leftFoot": "",
"rightFootTip": "",
"leftFootTip": "",
"rightArm": "",
"leftArm": "",
"walkStride": 0.065,
"walkLift": 0.018,
"walkSeconds": 1.2,
"walkBindCalibration": true,
"walkSourceWeight": 0.25,
"idleSeconds": 1.8,
"idleBreath": 0.003,
"idleSourceWeight": 0.08,
"attackStyle": "flame_roar",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.2,
"attackSourceWeight": 0.08,
"attackWindup": 0.3,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackLeanDegrees": 6,
"attackArmDegrees": 35,
"attackLunge": 0.005,
"attackReach": 0.02,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/FlameLion/motions/Idle",
"prompt": "a small bipedal lion stands upright on two feet with relaxed forepaws and gentle breathing, keeping its large mane stable",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/FlameLion/motions/Walk",
"prompt": "a small bipedal lion walks upright on two feet with alternating short steps and gentle forepaw swings, keeping its head facing forward and its large mane stable",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/FlameLion/motions/Attack",
"prompt": "a small bipedal lion braces on two feet, draws back slightly to gather energy, spreads both forepaws and thrusts its head forward once to release a flame spell, then recovers to its upright resting stance",
"duration": 2.0
}
],
"headBone": "",
"neckBone": "",
"attackHeadPitchDegrees": 8,
"attackHeadReach": 0.015,
"anatomyNotes": "Disabled proposal. Inspect this lion own TokenRig before mapping all bones or selecting mane/tail skin regions. Keep the prototype upright biped anatomy. The proposed flame_roar behavior needs head/neck and braced forepaw authoring and QA; it is not yet implemented. Do not copy FireCat bone names, skin overrides or arm amplitudes. Jaw motion is conditional on a real independent jaw bone."
}
+145
View File
@@ -0,0 +1,145 @@
{
"schemaVersion": 1,
"id": "FlameLion",
"kind": "Animal",
"usage": "companion_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.6,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/FlameLion",
"staticPrefab": "Assets/Bundles/Characters/Animal/FlameLion/FlameLion.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/FlameLion/FlameLion.fbx",
"rigSource": "Tools/output/flamelion_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [
{
"bone": "bone_0",
"seed": [
0.3,
0.4,
-0.26
],
"fullDistance": 0.35,
"fadeDistance": 0.5
}
],
"outputDir": "Tools/output/companions/FlameLion",
"visualPrefab": "Assets/Bundles/Characters/Animal/FlameLion/FlameLion_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_FlameLion_Review.unity",
"reviewOriginX": 140,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_22",
"faceLeft": "bone_26",
"rightFoot": "bone_22",
"leftFoot": "bone_26",
"rightFootTip": "bone_23",
"leftFootTip": "bone_27",
"rightArm": "bone_7",
"leftArm": "bone_14",
"walkStride": 0.065,
"walkLift": 0.018,
"walkSeconds": 1.2,
"walkBindCalibration": true,
"walkSourceWeight": 0.12,
"idleSeconds": 1.8,
"idleBreath": 0.003,
"idleSourceWeight": 0.08,
"attackStyle": "flame_roar",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.2,
"attackSourceWeight": 0.08,
"attackWindup": 0.3,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackLeanDegrees": 6,
"attackArmDegrees": 45,
"attackLunge": 0,
"attackReach": 0.02,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/FlameLion/motions/Idle",
"prompt": "a small bipedal lion stands upright on two feet with relaxed forepaws and gentle breathing, keeping its large mane stable",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/FlameLion/motions/Walk",
"prompt": "a small bipedal lion walks upright on two feet with alternating short steps and gentle forepaw swings, keeping its head facing forward and its large mane stable",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/FlameLion/motions/Attack",
"prompt": "a small bipedal lion braces on two feet, draws back slightly to gather energy, spreads both forepaws and thrusts its head forward once to release a flame spell, then recovers to its upright resting stance",
"duration": 2.0
}
],
"headBone": "bone_5",
"neckBone": "bone_4",
"attackHeadPitchDegrees": 8,
"attackHeadReach": 0.015,
"anatomyNotes": "Own final REMOTE 28-bone rig inspected. Root 0, chest 3, neck 4, head 5, arms 7/14 and paw tips 10/17, feet 22/26 with tips 23/27. No independent jaw or tail bones. Broad head/mane weight region is followed by precise tail geodesic override to hip root; geometry and UV retained. Rejected local 33-bone chain is diagnostic only.",
"rightPawTip": "bone_10",
"leftPawTip": "bone_17",
"attackSpreadDegrees": 25,
"maneRegionMin": [
-0.38,
0.6,
-0.35
],
"maneRegionMax": [
0.38,
1.05,
0.36
],
"maneRigidityTolerance": 0.001,
"skinRegions": [
{
"bone": "bone_5",
"min": [
-0.42,
0.43,
-0.4
],
"max": [
0.42,
1.05,
0.4
],
"feather": 0.035
},
{
"bone": "bone_22",
"min": [
0.005,
-0.02,
-0.07
],
"max": [
0.27,
0.16,
0.24
],
"feather": 0.03
},
{
"bone": "bone_26",
"min": [
-0.28,
-0.02,
-0.07
],
"max": [
-0.005,
0.16,
0.24
],
"feather": 0.03
}
]
}
@@ -0,0 +1,75 @@
{
"schemaVersion": 1,
"id": "RockRhino",
"kind": "Animal",
"usage": "companion_visual",
"profile": "quadruped_heavy",
"boneMappingReady": false,
"height": 0.55,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/RockRhino",
"staticPrefab": "Assets/Bundles/Characters/Animal/RockRhino/RockRhino.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/RockRhino/RockRhino.fbx",
"rigSource": "Tools/output/rockrhino_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/RockRhino",
"visualPrefab": "Assets/Bundles/Characters/Animal/RockRhino/RockRhino_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_RockRhino_Review.unity",
"reviewOriginX": 120,
"rootBone": "",
"neckBone": "",
"headBone": "",
"faceRight": "",
"faceLeft": "",
"frontRightFoot": "",
"frontLeftFoot": "",
"hindRightFoot": "",
"hindLeftFoot": "",
"frontRightFootTip": "",
"frontLeftFootTip": "",
"hindRightFootTip": "",
"hindLeftFootTip": "",
"walkStride": 0.06,
"walkLift": 0.015,
"walkSeconds": 1.4,
"walkSwingFraction": 0.2,
"walkBindCalibration": true,
"walkSourceWeight": 0.12,
"idleSeconds": 2.0,
"idleBreath": 0.0015,
"idleSourceWeight": 0.04,
"attackStyle": "braced_bash",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.2,
"attackSourceWeight": 0.08,
"attackWindup": 0.3,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackLunge": 0.015,
"maxRootTilt": 15,
"groundTolerance": 0.003,
"rootTiltReference": "bind_up",
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/RockRhino/motions/Idle",
"prompt": "a small stocky armored quadrupedal rhinoceros stands on all four hooves with gentle breathing, keeping its stone armor stable and head relaxed",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/RockRhino/motions/Walk",
"prompt": "a small stocky armored quadrupedal rhinoceros walks steadily on the ground with four separate short legs taking deliberate alternating steps, keeping its back horizontal and head facing forward",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/RockRhino/motions/Attack",
"prompt": "a small stocky armored quadrupedal rhinoceros braces its four hooves, draws its head and shoulders back slightly, lowers its horn and performs one short forward head and shoulder bash, then recovers to its resting stance",
"duration": 2.0
}
],
"anatomyNotes": "Disabled proposal. New quadruped_heavy/braced_bash adapters must be implemented and validated after inspecting this rhino own rig. Map chest, head, neck and four hooves; preserve stone armor and horn rigidity. Do not reuse turtle bone names or head-extension attack.",
"chestBone": ""
}
+185
View File
@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"id": "RockRhino",
"kind": "Animal",
"usage": "companion_visual",
"profile": "quadruped_heavy",
"boneMappingReady": true,
"height": 0.55,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/RockRhino",
"staticPrefab": "Assets/Bundles/Characters/Animal/RockRhino/RockRhino.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/RockRhino/RockRhino.fbx",
"rigSource": "Tools/output/rockrhino_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/RockRhino",
"visualPrefab": "Assets/Bundles/Characters/Animal/RockRhino/RockRhino_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_RockRhino_Review.unity",
"reviewOriginX": 120,
"rootBone": "bone_0",
"neckBone": "bone_2",
"headBone": "bone_3",
"faceRight": "bone_11",
"faceLeft": "bone_15",
"frontRightFoot": "bone_11",
"frontLeftFoot": "bone_15",
"hindRightFoot": "bone_19",
"hindLeftFoot": "bone_27",
"frontRightFootTip": "bone_12",
"frontLeftFootTip": "bone_16",
"hindRightFootTip": "bone_20",
"hindLeftFootTip": "bone_28",
"walkStride": 0.06,
"walkLift": 0.015,
"walkSeconds": 1.4,
"walkSwingFraction": 0.2,
"walkBindCalibration": true,
"walkSourceWeight": 0.12,
"idleSeconds": 2.0,
"idleBreath": 0.0015,
"idleSourceWeight": 0.04,
"attackStyle": "braced_bash",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.2,
"attackSourceWeight": 0.04,
"attackWindup": 0.3,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackLunge": 0.025,
"maxRootTilt": 15,
"groundTolerance": 0.003,
"rootTiltReference": "bind_up",
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/RockRhino/motions/Idle",
"prompt": "a small stocky armored quadrupedal rhinoceros stands on all four hooves with gentle breathing, keeping its stone armor stable and head relaxed",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/RockRhino/motions/Walk",
"prompt": "a small stocky armored quadrupedal rhinoceros walks steadily on the ground with four separate short legs taking deliberate alternating steps, keeping its back horizontal and head facing forward",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/RockRhino/motions/Attack",
"prompt": "a small stocky armored quadrupedal rhinoceros braces its four hooves, draws its head and shoulders back slightly, lowers its horn and performs one short forward head and shoulder bash, then recovers to its resting stance",
"duration": 2.0
}
],
"anatomyNotes": "Own 29-bone forward TokenRig inspected: hip root 0, chest 1, neck 2, head 3, ears 5..8, front legs 9..12 / 13..16, hind legs 17..20 / 25..28, tail 21..24. Offline full-weight rigid core/head and planted lower-paw masks fitted to this low mesh. Heavy braced shoulder and head bash; no turtle or biped mapping reused.",
"chestBone": "bone_1",
"attackHeadReach": 0.018,
"attackHeadPitchDegrees": 10,
"armorRegionMin": [
-0.4,
0.48,
-0.1
],
"armorRegionMax": [
0.4,
0.85,
0.6
],
"armorRigidityTolerance": 0.001,
"hornRegionMin": [
-0.1,
0.72,
-0.74
],
"hornRegionMax": [
0.2,
0.95,
-0.43
],
"hornRigidityTolerance": 0.001,
"skinRegions": [
{
"bone": "bone_1",
"min": [
-0.5,
0.4,
-0.66
],
"max": [
0.5,
0.89,
0.16
],
"feather": 0.03
},
{
"bone": "bone_3",
"min": [
-0.45,
0.36,
0.2
],
"max": [
0.4,
1.05,
0.8
],
"feather": 0.04
},
{
"bone": "bone_11",
"min": [
-0.07,
-0.02,
-0.08
],
"max": [
0.33,
0.25,
0.41
],
"feather": 0.03
},
{
"bone": "bone_15",
"min": [
-0.49,
-0.02,
-0.15
],
"max": [
-0.1,
0.25,
0.41
],
"feather": 0.03
},
{
"bone": "bone_19",
"min": [
0.08,
-0.02,
-0.47
],
"max": [
0.49,
0.25,
-0.12
],
"feather": 0.03
},
{
"bone": "bone_27",
"min": [
-0.27,
-0.02,
-0.57
],
"max": [
0.08,
0.25,
-0.14
],
"feather": 0.03
}
]
}
@@ -0,0 +1,72 @@
{
"schemaVersion": 1,
"id": "SparkBird",
"kind": "Animal",
"usage": "companion_visual",
"profile": "avian_grounded",
"boneMappingReady": false,
"height": 0.45,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/SparkBird",
"staticPrefab": "Assets/Bundles/Characters/Animal/SparkBird/SparkBird.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/SparkBird/SparkBird.fbx",
"rigSource": "Tools/output/sparkbird_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/SparkBird",
"visualPrefab": "Assets/Bundles/Characters/Animal/SparkBird/SparkBird_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_SparkBird_Review.unity",
"reviewOriginX": 80,
"rootBone": "",
"chestBone": "",
"faceRight": "",
"faceLeft": "",
"rightFoot": "",
"leftFoot": "",
"rightFootTip": "",
"leftFootTip": "",
"rightArm": "",
"leftArm": "",
"walkStride": 0.045,
"walkLift": 0.012,
"walkSeconds": 0.9,
"walkBindCalibration": true,
"walkSourceWeight": 0.25,
"idleSeconds": 1.4,
"idleBreath": 0.002,
"idleSourceWeight": 0.06,
"attackStyle": "wing_cast",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.0,
"attackSourceWeight": 0.1,
"attackWindup": 0.25,
"attackImpact": 0.45,
"attackRecover": 0.88,
"attackLeanDegrees": 4,
"attackArmDegrees": 35,
"attackLunge": 0.002,
"attackReach": 0.015,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/SparkBird/motions/Idle",
"prompt": "a small upright bipedal sparrow stands on two feet with gentle breathing and subtle wing settling",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/SparkBird/motions/Walk",
"prompt": "a small upright bipedal sparrow walks on the ground with alternating short steps, keeping its wings near its sides",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/SparkBird/motions/Attack",
"prompt": "a small upright bipedal sparrow briefly draws both wings back, sweeps them forward once to cast a lightning spell, and recovers to standing",
"duration": 2.0
}
],
"anatomyNotes": "Grounded bird: two feet, separate short feather wings, compact tail and crest. Pending inspection of its own TokenRig; avian_grounded and wing_cast are disabled proposals until implemented and validated. No bone numbers copied from BudBud."
}
+75
View File
@@ -0,0 +1,75 @@
{
"schemaVersion": 1,
"id": "SparkBird",
"kind": "Animal",
"usage": "companion_visual",
"profile": "avian_grounded",
"boneMappingReady": true,
"height": 0.45,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/SparkBird",
"staticPrefab": "Assets/Bundles/Characters/Animal/SparkBird/SparkBird.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/SparkBird/SparkBird.fbx",
"rigSource": "Tools/output/sparkbird_dgx/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/SparkBird",
"visualPrefab": "Assets/Bundles/Characters/Animal/SparkBird/SparkBird_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_SparkBird_Review.unity",
"reviewOriginX": 80,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_22",
"faceLeft": "bone_26",
"rightFoot": "bone_22",
"leftFoot": "bone_26",
"rightFootTip": "bone_23",
"leftFootTip": "bone_27",
"rightArm": "bone_7",
"leftArm": "bone_14",
"walkStride": 0.045,
"walkLift": 0.012,
"walkSeconds": 0.9,
"walkBindCalibration": true,
"walkSourceWeight": 0.25,
"idleSeconds": 1.4,
"idleBreath": 0.002,
"idleSourceWeight": 0.06,
"attackStyle": "wing_cast",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.0,
"attackSourceWeight": 0.1,
"attackWindup": 0.25,
"attackImpact": 0.45,
"attackRecover": 0.88,
"attackLeanDegrees": 4,
"attackArmDegrees": 35,
"attackLunge": 0.002,
"attackReach": 0.015,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/SparkBird/motions/Idle",
"prompt": "a small upright bipedal sparrow stands on two feet with gentle breathing and subtle wing settling",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/SparkBird/motions/Walk",
"prompt": "a small upright bipedal sparrow walks on the ground with alternating short steps, keeping its wings near its sides",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/SparkBird/motions/Attack",
"prompt": "a small upright bipedal sparrow briefly draws both wings back, sweeps them forward once to cast a lightning spell, and recovers to standing",
"duration": 2.0
}
],
"anatomyNotes": "Inspected this SparkBird TokenRig original: 28 bones. Root0 vertical pelvis, chest3; x-positive wing7 with feather chain8..12, x-negative wing14 with feather chain15..19; x-positive ankle22/toe23 and x-negative ankle26/toe27. Head4/5 carries crest. Tail has no independent bone; inspect its weighting under the strongest wing cast. Grounded bird, not a flying locomotion adapter.",
"rightWingTip": "bone_12",
"leftWingTip": "bone_19",
"wingSpreadDegrees": 25
}
+115
View File
@@ -0,0 +1,115 @@
{
"schemaVersion": 1,
"id": "ThunderLeopard",
"kind": "Animal",
"usage": "companion_visual",
"profile": "quadruped_heavy",
"boneMappingReady": true,
"height": 0.45,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/ThunderLeopard",
"staticPrefab": "Assets/Bundles/Characters/Animal/ThunderLeopard/ThunderLeopard.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/ThunderLeopard/ThunderLeopard.fbx",
"rigSource": "Tools/output/companion_dgx/ThunderLeopard/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/companions/ThunderLeopard",
"visualPrefab": "Assets/Bundles/Characters/Animal/ThunderLeopard/ThunderLeopard_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_ThunderLeopard_Review.unity",
"reviewOriginX": 260,
"rootBone": "bone_0",
"neckBone": "bone_3",
"headBone": "bone_4",
"faceRight": "bone_13",
"faceLeft": "bone_17",
"frontRightFoot": "bone_13",
"frontLeftFoot": "bone_17",
"hindRightFoot": "bone_21",
"hindLeftFoot": "bone_25",
"frontRightFootTip": "bone_14",
"frontLeftFootTip": "bone_18",
"hindRightFootTip": "bone_22",
"hindLeftFootTip": "bone_26",
"walkStride": 0.055,
"walkLift": 0.015,
"walkSeconds": 1.1,
"walkSwingFraction": 0.2,
"walkBindCalibration": true,
"walkSourceWeight": 0.12,
"idleSeconds": 1.8,
"idleBreath": 0.0015,
"idleSourceWeight": 0.04,
"attackStyle": "braced_bash",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.0,
"attackSourceWeight": 0.04,
"attackWindup": 0.3,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackLunge": 0.025,
"maxRootTilt": 15,
"groundTolerance": 0.003,
"rootTiltReference": "bind_up",
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/ThunderLeopard/motions/Idle",
"prompt": "a small four-legged leopard cub stands on all four paws and idles with gentle breathing and a calm head",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/ThunderLeopard/motions/Walk",
"prompt": "a small four-legged leopard cub walks forward on all four paws with a light alternating four-beat gait",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/ThunderLeopard/motions/Attack",
"prompt": "a small four-legged leopard cub braces on all four paws, crouches its shoulders back, then makes one short forward head-and-shoulder pounce and recovers to standing",
"duration": 2.0
}
],
"anatomyNotes": "Inspected this ThunderLeopard DGXA TokenRig original: 31 bones. Pelvis root0 (rear), spine1, chest2 (front), neck3, head4 with ears5/6, crest7, eye/jaw 8..10; x-positive front leg11..14 (ankle13/toe14) and x-negative 15..18 from chest2; x-positive hind leg19..22 (21/22) and x-negative 23..26 (25/26) from root0; tail27..30. Armor region = cyan shoulder lightning plates (rigid with chest2), horn region = forehead zigzag crest (rigid with head4); both measured from cyan texels on the approved mesh in height-normalized Unity space. braced_bash reads as a short head-and-shoulder pounce; no rhino bone numbers reused. First QA: the wide armor box (495 verts incl. leg roots/neck fur) deformed 4.73mm in Idle; narrowed to the shoulder plates/chest and added a chest2 full-weight skinRegion (static FBX space, Z flipped) like RockRhino.",
"chestBone": "bone_2",
"attackHeadReach": 0.018,
"attackHeadPitchDegrees": 10,
"armorRegionMin": [
-0.36,
0.3,
-0.52
],
"armorRegionMax": [
0.36,
0.56,
-0.22
],
"armorRigidityTolerance": 0.001,
"hornRegionMin": [
-0.15,
0.6,
-0.8
],
"hornRegionMax": [
0.15,
1.02,
-0.5
],
"hornRigidityTolerance": 0.001,
"skinRegions": [
{
"bone": "bone_2",
"min": [
-0.4,
0.27,
0.19
],
"max": [
0.4,
0.59,
0.55
],
"feather": 0.03
}
]
}
+72
View File
@@ -0,0 +1,72 @@
{
"schemaVersion": 1,
"id": "TideWhale",
"kind": "Animal",
"usage": "companion_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.55,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/TideWhale",
"staticPrefab": "Assets/Bundles/Characters/Animal/TideWhale/TideWhale.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale.fbx",
"rigSource": "Tools/output/companion_dgx/TideWhale/high_rig/rigged.glb",
"lowUp": "Y",
"outputDir": "Tools/output/companions/TideWhale",
"visualPrefab": "Assets/Bundles/Characters/Animal/TideWhale/TideWhale_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_TideWhale_Review.unity",
"reviewOriginX": 280,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_16",
"faceLeft": "bone_20",
"rightFoot": "bone_16",
"leftFoot": "bone_20",
"rightFootTip": "bone_17",
"leftFootTip": "bone_21",
"rightArm": "bone_6",
"leftArm": "bone_10",
"walkStride": 0.05,
"walkLift": 0.015,
"walkSeconds": 1.3,
"walkBindCalibration": true,
"walkSourceWeight": 0.35,
"idleSeconds": 2.0,
"idleBreath": 0.003,
"idleSourceWeight": 0.08,
"attackStyle": "body_slam",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.1,
"attackSourceWeight": 0.05,
"attackWindup": 0.25,
"attackImpact": 0.45,
"attackRecover": 0.88,
"attackLeanDegrees": 9,
"attackArmDegrees": 25,
"attackLunge": 0.02,
"attackReach": 0,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/TideWhale/motions/Idle",
"prompt": "a chubby small bipedal whale stands upright on two short feet and idles with slow gentle breathing",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/TideWhale/motions/Walk",
"prompt": "a chubby small bipedal whale walks upright on two short feet with slow alternating short steps and small flipper swings",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/TideWhale/motions/Attack",
"prompt": "a small bipedal character performs one forward body slam attack and recovers to standing",
"duration": 2.0
}
],
"skinOverrides": [],
"anatomyNotes": "Inspected this TideWhale DGXA TokenRig original: 22 bones. Root0 pelvis, spine1..3 (chest3), short neck4/head5; x-positive flipper arm6..9 and x-negative arm10..13 from chest3; x-positive leg14/15/16 ankle/17 toe and x-negative 18/19/20/21 from root0. The grounded whale tail, dorsal fin and back ridge have no own bones (check tail weighting at the slam peak). Water guardian: short body_slam like RockBall, own rig. First Attack at 10% source / 12 deg lean lifted a contact 4.03mm (over the 3mm gate); lowered to 5% / 9 deg without relaxing the gate."
}
+72
View File
@@ -0,0 +1,72 @@
{
"schemaVersion": 1,
"id": "VineSprite",
"kind": "Animal",
"usage": "companion_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.5,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Animal/VineSprite",
"staticPrefab": "Assets/Bundles/Characters/Animal/VineSprite/VineSprite.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Animal/VineSprite/VineSprite.fbx",
"rigSource": "Tools/output/companion_dgx/VineSprite/high_rig/rigged.glb",
"lowUp": "Y",
"outputDir": "Tools/output/companions/VineSprite",
"visualPrefab": "Assets/Bundles/Characters/Animal/VineSprite/VineSprite_Companion.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Companion_VineSprite_Review.unity",
"reviewOriginX": 240,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_22",
"faceLeft": "bone_26",
"rightFoot": "bone_22",
"leftFoot": "bone_26",
"rightFootTip": "bone_23",
"leftFootTip": "bone_27",
"rightArm": "bone_6",
"leftArm": "bone_13",
"walkStride": 0.055,
"walkLift": 0.016,
"walkSeconds": 1.1,
"walkBindCalibration": true,
"walkSourceWeight": 0.35,
"idleSeconds": 1.6,
"idleBreath": 0.003,
"idleSourceWeight": 0.08,
"attackStyle": "ranged_cast",
"attackEvent": "OnCompanionAttackImpact",
"attackSeconds": 1.1,
"attackSourceWeight": 0.12,
"attackWindup": 0.28,
"attackImpact": 0.5,
"attackRecover": 0.9,
"attackLeanDegrees": 4,
"attackArmDegrees": 65,
"attackLunge": 0.002,
"attackReach": 0.025,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/companions/VineSprite/motions/Idle",
"prompt": "a small slender bipedal vine spirit stands upright and idles with gentle breathing",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/companions/VineSprite/motions/Walk",
"prompt": "a small slender bipedal vine spirit walks upright on two feet with alternating short steps and gentle arm swings",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/companions/VineSprite/motions/Attack",
"prompt": "a small slender bipedal vine spirit raises both leaf hands and pushes them forward once to cast a gentle healing spell, then returns to upright standing",
"duration": 2.0
}
],
"skinOverrides": [],
"anatomyNotes": "Inspected this VineSprite DGXA TokenRig original: 28 bones. Root0 pelvis, spine1..3 (chest3), neck4/head5 (head tendrils, leaf hood and flower have no own bones); x-positive arm6..8 with hand chain9..12 and x-negative arm13..15 with chain16..19 from chest3; x-positive leg20/21/22 ankle/23 toe and x-negative 24/25/26/27 from root0. Grass support healer: ranged_cast heal like BudBud, own rig."
}
+70
View File
@@ -0,0 +1,70 @@
{
"schemaVersion": 1,
"id": "Dashlet",
"kind": "Enemy",
"usage": "enemy_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.5,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Enemy/Dashlet",
"staticPrefab": "Assets/Bundles/Characters/Enemy/Dashlet/Dashlet.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Enemy/Dashlet/Dashlet.fbx",
"rigSource": "Tools/output/enemy_dgx/Dashlet/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/enemy_characters/Dashlet",
"enemyPrefab": "Assets/Bundles/Characters/Enemy/Dashlet/Dashlet_Enemy.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Enemy_Dashlet_Review.unity",
"reviewOriginX": 160,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_16",
"faceLeft": "bone_20",
"rightFoot": "bone_16",
"leftFoot": "bone_20",
"rightFootTip": "bone_17",
"leftFootTip": "bone_21",
"rightArm": "bone_6",
"leftArm": "bone_10",
"walkStride": 0.06,
"walkLift": 0.018,
"walkSeconds": 0.8,
"walkBindCalibration": true,
"walkSourceWeight": 0.25,
"idleSeconds": 1.4,
"idleBreath": 0.003,
"idleSourceWeight": 0.06,
"attackStyle": "body_slam",
"attackSeconds": 0.9,
"attackSourceWeight": 0.1,
"attackWindup": 0.25,
"attackImpact": 0.45,
"attackRecover": 0.88,
"attackLeanDegrees": 14,
"attackArmDegrees": 25,
"attackLunge": 0.025,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"anatomyNotes": "Inspected this Dashlet DGXA TokenRig original: 22 bones. Root0 pelvis with spine1..3 (chest3) -> neck4/head5; x-positive arm6..9 and x-negative arm10..13 hang from chest3; x-positive leg14 hip/15 knee/16 ankle/17 toe and x-negative leg18/19/20/21 hang from root0. Ears, horn and tail have no independent bones. Fast runner: shorter walk cycle than Hornlet.",
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/enemy_characters/Dashlet/motions/Idle",
"prompt": "a small bipedal imp stands upright and idles with gentle breathing, slightly bouncing with impatience",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/enemy_characters/Dashlet/motions/Walk",
"prompt": "a small bipedal imp walks forward upright with quick alternating short steps and small arm swings",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/enemy_characters/Dashlet/motions/Attack",
"prompt": "a small bipedal character performs one forward body slam attack and recovers to standing",
"duration": 2.0
}
]
}
+70
View File
@@ -0,0 +1,70 @@
{
"schemaVersion": 1,
"id": "GreatHorn",
"kind": "Enemy",
"usage": "enemy_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.8,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Enemy/GreatHorn",
"staticPrefab": "Assets/Bundles/Characters/Enemy/GreatHorn/GreatHorn.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Enemy/GreatHorn/GreatHorn.fbx",
"rigSource": "Tools/output/enemy_dgx/GreatHorn/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/enemy_characters/GreatHorn",
"enemyPrefab": "Assets/Bundles/Characters/Enemy/GreatHorn/GreatHorn_Enemy.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Enemy_GreatHorn_Review.unity",
"reviewOriginX": 220,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_16",
"faceLeft": "bone_20",
"rightFoot": "bone_16",
"leftFoot": "bone_20",
"rightFootTip": "bone_17",
"leftFootTip": "bone_21",
"rightArm": "bone_6",
"leftArm": "bone_10",
"walkStride": 0.08,
"walkLift": 0.02,
"walkSeconds": 1.3,
"walkBindCalibration": true,
"walkSourceWeight": 0.25,
"idleSeconds": 2.0,
"idleBreath": 0.004,
"idleSourceWeight": 0.06,
"attackStyle": "body_slam",
"attackSeconds": 1.2,
"attackSourceWeight": 0.1,
"attackWindup": 0.25,
"attackImpact": 0.45,
"attackRecover": 0.88,
"attackLeanDegrees": 12,
"attackArmDegrees": 25,
"attackLunge": 0.025,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"anatomyNotes": "Inspected this GreatHorn DGXA TokenRig original: 22 bones. Root0, spine1..3 (chest3), short neck4/head5; x-positive arm6..9, x-negative arm10..13 from chest3; x-positive leg14/15/16 ankle/17 toe and x-negative 18/19/20/21 from root0. Ram horns and cape have no independent bones; check cape weighting at the attack peak.",
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/enemy_characters/GreatHorn/motions/Idle",
"prompt": "a big heavy bipedal imp boss stands upright and idles with slow proud breathing",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/enemy_characters/GreatHorn/motions/Walk",
"prompt": "a big heavy bipedal imp boss walks forward upright with slow heavy alternating steps",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/enemy_characters/GreatHorn/motions/Attack",
"prompt": "a big heavy bipedal character performs one forward body slam attack and recovers to standing",
"duration": 2.0
}
]
}
@@ -0,0 +1,70 @@
{
"schemaVersion": 1,
"id": "HornCaptain",
"kind": "Enemy",
"usage": "enemy_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.6,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Enemy/HornCaptain",
"staticPrefab": "Assets/Bundles/Characters/Enemy/HornCaptain/HornCaptain.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Enemy/HornCaptain/HornCaptain.fbx",
"rigSource": "Tools/output/enemy_dgx/HornCaptain/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/enemy_characters/HornCaptain",
"enemyPrefab": "Assets/Bundles/Characters/Enemy/HornCaptain/HornCaptain_Enemy.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Enemy_HornCaptain_Review.unity",
"reviewOriginX": 200,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_16",
"faceLeft": "bone_20",
"rightFoot": "bone_16",
"leftFoot": "bone_20",
"rightFootTip": "bone_17",
"leftFootTip": "bone_21",
"rightArm": "bone_6",
"leftArm": "bone_10",
"walkStride": 0.07,
"walkLift": 0.02,
"walkSeconds": 1.1,
"walkBindCalibration": true,
"walkSourceWeight": 0.25,
"idleSeconds": 1.8,
"idleBreath": 0.003,
"idleSourceWeight": 0.06,
"attackStyle": "body_slam",
"attackSeconds": 1.0,
"attackSourceWeight": 0.1,
"attackWindup": 0.25,
"attackImpact": 0.45,
"attackRecover": 0.88,
"attackLeanDegrees": 14,
"attackArmDegrees": 25,
"attackLunge": 0.025,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"anatomyNotes": "Inspected this HornCaptain DGXA TokenRig original (cleaned source horncaptain_main.glb): 22 bones. Root0, spine1..3 (chest3), neck4/head5; x-positive arm6..9 and x-negative arm10..13 from chest3; x-positive leg14/15/16 ankle/17 toe and x-negative 18/19/20/21 from root0. Scarf, horns and tail have no independent bones. Bl_keep_main_island.py dropped the floating tail tip and a speck that TokenRig discards (they had broken bind alignment: max 0.36m); game mesh and rig share that cleaned source. The first 28-bone rig and its motions are kept in diagnostics/island_rig.",
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/enemy_characters/HornCaptain/motions/Idle",
"prompt": "a sturdy small bipedal imp leader stands upright and idles with confident gentle breathing",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/enemy_characters/HornCaptain/motions/Walk",
"prompt": "a sturdy small bipedal imp leader walks forward upright with steady alternating short steps and arm swings",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/enemy_characters/HornCaptain/motions/Attack",
"prompt": "a small bipedal character performs one forward body slam attack and recovers to standing",
"duration": 2.0
}
]
}
+70
View File
@@ -0,0 +1,70 @@
{
"schemaVersion": 1,
"id": "Hornlet",
"kind": "Enemy",
"usage": "enemy_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.5,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Enemy/Hornlet",
"staticPrefab": "Assets/Bundles/Characters/Enemy/Hornlet/Hornlet.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Enemy/Hornlet/Hornlet.fbx",
"rigSource": "Tools/output/enemy_dgx/Hornlet/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/enemy_characters/Hornlet",
"enemyPrefab": "Assets/Bundles/Characters/Enemy/Hornlet/Hornlet_Enemy.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Enemy_Hornlet_Review.unity",
"reviewOriginX": 140,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_16",
"faceLeft": "bone_20",
"rightFoot": "bone_16",
"leftFoot": "bone_20",
"rightFootTip": "bone_17",
"leftFootTip": "bone_21",
"rightArm": "bone_6",
"leftArm": "bone_10",
"walkStride": 0.06,
"walkLift": 0.018,
"walkSeconds": 1.0,
"walkBindCalibration": true,
"walkSourceWeight": 0.25,
"idleSeconds": 1.6,
"idleBreath": 0.003,
"idleSourceWeight": 0.06,
"attackStyle": "body_slam",
"attackSeconds": 1.0,
"attackSourceWeight": 0.1,
"attackWindup": 0.25,
"attackImpact": 0.45,
"attackRecover": 0.88,
"attackLeanDegrees": 14,
"attackArmDegrees": 25,
"attackLunge": 0.025,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"anatomyNotes": "Inspected this Hornlet DGXA TokenRig original: 22 bones, same topology as Dashlet but its own rig. Root0, spine1..3 (chest3), neck4/head5; x-positive arm6..9, x-negative arm10..13 from chest3; x-positive leg14/15/16 ankle/17 toe and x-negative 18/19/20/21 from root0. Horn, ears and long tail have no independent bones. Two earlier rigs were degenerate single chains from the local SkinTokens fallback and are kept only in Tools/output/enemy_dgx/Hornlet/diagnostics.",
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/enemy_characters/Hornlet/motions/Idle",
"prompt": "a small bipedal imp stands upright and idles with gentle breathing",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/enemy_characters/Hornlet/motions/Walk",
"prompt": "a small bipedal imp walks forward upright with alternating short steps and gentle arm swings",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/enemy_characters/Hornlet/motions/Attack",
"prompt": "a small bipedal character performs one forward body slam attack and recovers to standing",
"duration": 2.0
}
]
}
+70
View File
@@ -0,0 +1,70 @@
{
"schemaVersion": 1,
"id": "Shellhorn",
"kind": "Enemy",
"usage": "enemy_visual",
"profile": "biped_short",
"boneMappingReady": true,
"height": 0.5,
"maxTriangles": 2000,
"assetRoot": "Assets/Bundles/Characters/Enemy/Shellhorn",
"staticPrefab": "Assets/Bundles/Characters/Enemy/Shellhorn/Shellhorn.prefab",
"approvedMesh": "AIClient/Assets/Bundles/Characters/Enemy/Shellhorn/Shellhorn.fbx",
"rigSource": "Tools/output/enemy_dgx/Shellhorn/high_rig/rigged.glb",
"lowUp": "Y",
"skinOverrides": [],
"outputDir": "Tools/output/enemy_characters/Shellhorn",
"enemyPrefab": "Assets/Bundles/Characters/Enemy/Shellhorn/Shellhorn_Enemy.prefab",
"reviewScene": "Assets/Bundles/Scenes/Review/Enemy_Shellhorn_Review.unity",
"reviewOriginX": 180,
"rootBone": "bone_0",
"chestBone": "bone_3",
"faceRight": "bone_22",
"faceLeft": "bone_26",
"rightFoot": "bone_22",
"leftFoot": "bone_26",
"rightFootTip": "bone_23",
"leftFootTip": "bone_27",
"rightArm": "bone_6",
"leftArm": "bone_13",
"walkStride": 0.055,
"walkLift": 0.016,
"walkSeconds": 1.2,
"walkBindCalibration": true,
"walkSourceWeight": 0.25,
"idleSeconds": 1.8,
"idleBreath": 0.003,
"idleSourceWeight": 0.06,
"attackStyle": "body_slam",
"attackSeconds": 1.0,
"attackSourceWeight": 0.1,
"attackWindup": 0.25,
"attackImpact": 0.45,
"attackRecover": 0.88,
"attackLeanDegrees": 14,
"attackArmDegrees": 25,
"attackLunge": 0.025,
"maxRootTilt": 25,
"groundTolerance": 0.003,
"anatomyNotes": "Inspected this Shellhorn DGXA TokenRig original: 28 bones (same topology as HornCaptain, own rig). Root0, spine1..3 (chest3), neck4/head5; x-positive arm6..8 with hand chain9..12, x-negative arm13..15 with chain16..19 from chest3; x-positive leg20/21/22 ankle/23 toe, x-negative 24/25/26/27 from root0. Back stone shell, brow plate and horn have no independent bones; check the shell stays rigid on the chest/spine at the attack peak.",
"motions": [
{
"name": "Idle",
"sourceDir": "Tools/output/enemy_characters/Shellhorn/motions/Idle",
"prompt": "a stocky small bipedal imp with a heavy stone shell on its back stands upright and idles with slow gentle breathing",
"duration": 2.0
},
{
"name": "Walk",
"sourceDir": "Tools/output/enemy_characters/Shellhorn/motions/Walk",
"prompt": "a stocky small bipedal imp with a heavy stone shell walks forward upright with slow alternating short steps",
"duration": 2.0
},
{
"name": "Attack",
"sourceDir": "Tools/output/enemy_characters/Shellhorn/motions/Attack",
"prompt": "a small bipedal character performs one forward body slam attack and recovers to standing",
"duration": 2.0
}
]
}
@@ -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
}
]
}
+512
View File
@@ -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"
}
]
}
+247
View File
@@ -772,6 +772,253 @@
"boss": true
}
],
"challenges": [
{
"id": 1,
"allyElement": 1,
"element": 2,
"code": "火试炼",
"name": "灼草",
"hint": "仅火元素伙伴可入场。火克制草。",
"badge": "火焰徽章",
"obtain": "用捕捉券在伙伴池结识火元素伙伴",
"shardsPet": 1,
"shards": 10,
"recommendedLevel": 1,
"elementsEnabled": true,
"hpScale": 0.35,
"attackScale": 0.6,
"waveGap": 20,
"spawnGap": 4,
"durability": 12,
"timeout": 120,
"enemyIds": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"enemyLanes": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"lanes": 1,
"reward": {
"coins": 0,
"candy": 0,
"balls": 0
},
"chapter": "属性挑战"
},
{
"id": 2,
"allyElement": 2,
"element": 3,
"code": "草试炼",
"name": "破岩",
"hint": "仅草元素伙伴可入场。草克制岩。",
"badge": "新芽徽章",
"obtain": "用捕捉券在伙伴池结识草元素伙伴",
"shardsPet": 2,
"shards": 10,
"recommendedLevel": 1,
"elementsEnabled": true,
"hpScale": 0.35,
"attackScale": 0.6,
"waveGap": 20,
"spawnGap": 4,
"durability": 12,
"timeout": 120,
"enemyIds": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"enemyLanes": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"lanes": 1,
"reward": {
"coins": 0,
"candy": 0,
"balls": 0
},
"chapter": "属性挑战"
},
{
"id": 3,
"allyElement": 3,
"element": 4,
"code": "岩试炼",
"name": "镇电",
"hint": "仅岩元素伙伴可入场。岩克制电。",
"badge": "岩纹徽章",
"obtain": "用捕捉券在伙伴池结识岩元素伙伴",
"shardsPet": 0,
"shards": 10,
"recommendedLevel": 1,
"elementsEnabled": true,
"hpScale": 0.35,
"attackScale": 0.6,
"waveGap": 20,
"spawnGap": 4,
"durability": 12,
"timeout": 120,
"enemyIds": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"enemyLanes": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"lanes": 1,
"reward": {
"coins": 0,
"candy": 0,
"balls": 0
},
"chapter": "属性挑战"
},
{
"id": 4,
"allyElement": 4,
"element": 5,
"code": "电试炼",
"name": "激流",
"hint": "仅电元素伙伴可入场。电克制水。",
"badge": "雷光徽章",
"obtain": "用捕捉券在伙伴池结识电元素伙伴",
"shardsPet": 3,
"shards": 10,
"recommendedLevel": 1,
"elementsEnabled": true,
"hpScale": 0.35,
"attackScale": 0.6,
"waveGap": 20,
"spawnGap": 4,
"durability": 12,
"timeout": 120,
"enemyIds": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"enemyLanes": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"lanes": 1,
"reward": {
"coins": 0,
"candy": 0,
"balls": 0
},
"chapter": "属性挑战"
},
{
"id": 5,
"allyElement": 5,
"element": 1,
"code": "水试炼",
"name": "熄焰",
"hint": "仅水元素伙伴可入场。水克制火。",
"badge": "潮汐徽章",
"obtain": "用捕捉券在伙伴池结识水元素伙伴",
"shardsPet": 4,
"shards": 10,
"recommendedLevel": 1,
"elementsEnabled": true,
"hpScale": 0.35,
"attackScale": 0.6,
"waveGap": 20,
"spawnGap": 4,
"durability": 12,
"timeout": 120,
"enemyIds": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"enemyLanes": [
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"lanes": 1,
"reward": {
"coins": 0,
"candy": 0,
"balls": 0
},
"chapter": "属性挑战"
}
],
"stages": [
{
"id": 1,