Melee feel overhaul: SwordCombat anims at heavy cadence, salvage axe, damage-at-contact + buffer + dash law (guidelines forks 1-6)

07-18/19/20 arc: LightCombo01/HeavyCombo01 clips onto Swing1-3/Slam at
~natural speed (26-tick window, 30-tick recover, DPS-held damage retune),
Menacing01 combat idle (InCombat), SM_Wep_Axe_Large_01 rigid-skinned to
Hand_R at x1.25, LANTERN FX retone + blade-smear ribbon. Forks 1-6 per
Combat_Attack_Feel_Guidelines (design review wf_000bc247): cleave resolves
at the CONTACT tick (MeleeCleavePending schedule-and-consume, knob 31,
0=legacy; connect cues moved to contact), MeleeRange 2.2 + reach-only
finisher mult 1.25 (knob 30), BufferedAttackTick GhostField input buffer
(knob 29, unlock-edge validity), dash refused pre-contact (lookup-based).
Tests: MeleeComboTests pin legacy knobs; +3 fork tests (414 green); live
server proof: HP drop exactly at swing+16 under tick batching.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-20 21:03:18 -07:00
parent 2c187a17a9
commit 7b65912f30
22 changed files with 1327 additions and 112 deletions
@@ -1,7 +1,7 @@
fileFormatVersion: 2
guid: f3800f1bd189abc469fcc7c374371a91
ModelImporter:
serializedVersion: 22200
serializedVersion: 24501
internalIDToNameTable: []
externalObjects: {}
materials:
@@ -9,6 +9,7 @@ ModelImporter:
materialName: 0
materialSearch: 1
materialLocation: 1
searchTexturesGlobally: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
@@ -16,8 +17,6 @@ ModelImporter:
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
@@ -580,6 +579,35 @@ ModelImporter:
maskType: 1
maskSource: {fileID: 31900000, guid: ebc8800d7aef22a4aa95591cd452157d, type: 2}
additiveReferencePoseFrame: 1
- serializedVersion: 16
name: A_Attack_HeavyCombo01A_Slam_Sword
takeName: A_Attack_HeavyCombo01A_Sword
internalID: -1787871631005901691
firstFrame: 14.42
lastFrame: 62
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
isReadable: 0
meshes:
lODScreenPercentages: []
@@ -606,6 +634,11 @@ ModelImporter:
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 0
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
importUVs: -1
importVertexColors: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
@@ -625,6 +658,7 @@ ModelImporter:
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
calculateBlendshapeNormalsDeltaFromImportedNormals: 1
referencedClips: []
importAnimation: 1
humanDescription:
@@ -1,7 +1,7 @@
fileFormatVersion: 2
guid: f574f64a099779248beea90d27b2dde0
ModelImporter:
serializedVersion: 22200
serializedVersion: 24501
internalIDToNameTable: []
externalObjects: {}
materials:
@@ -9,6 +9,7 @@ ModelImporter:
materialName: 0
materialSearch: 1
materialLocation: 1
searchTexturesGlobally: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
@@ -16,8 +17,6 @@ ModelImporter:
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
@@ -44,7 +43,7 @@ ModelImporter:
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopTime: 1
loopBlend: 0
loopBlendOrientation: 1
loopBlendPositionY: 1
@@ -195,6 +194,11 @@ ModelImporter:
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 0
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
importUVs: -1
importVertexColors: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
@@ -214,6 +218,7 @@ ModelImporter:
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
calculateBlendshapeNormalsDeltaFromImportedNormals: 1
referencedClips: []
importAnimation: 1
humanDescription: