HEAVY FEEL LOCKED: the A/B winner folded into defaults, clips retimed to zero contact drift

recover 36 / dmg 36 (DPS 60 held) / contact 20 (20/12/25 per step) /
grace 28 / buffer 10 / move-commit 0.25; arc 0.8, finisher hold 7,
connect kick 1.1. Clip state speeds retimed 1.0/0.85/0.88 so the VISUAL
blade contact matches the damage tick exactly (audit: zero drift; probe:
gaps 36/36/54, contacts +20/+12/+25 measured). Step-3 contact sits 1
tick under CastFacingTicks 26 (documented coupling). baseline profile =
the locked defaults; heavy-committed kept as the record.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 00:13:49 -07:00
parent 7f032571df
commit ce0faafb72
5 changed files with 61 additions and 32 deletions
@@ -633,7 +633,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Swing3
m_Speed: 1.1
m_Speed: 0.88
m_CycleOffset: 0
m_Transitions:
- {fileID: 7246856984932168808}
@@ -779,7 +779,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Swing2
m_Speed: 1
m_Speed: 0.85
m_CycleOffset: 0
m_Transitions:
- {fileID: -7565464033697258994}
@@ -1050,7 +1050,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Swing1
m_Speed: 1.25
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -1792799526728587842}
@@ -267,7 +267,7 @@ namespace ProjectM.Client
// Combat feel pass (2026-06)
HitFlashBurstCount = 16;
MeleeConnectFovKick = 0.8f;
MeleeConnectFovKick = 1.1f; // 07-21 HEAVY LOCK: meatier bite
MeleeConnectVolume = 0.55f;
KillFlashBurstCount = 20;
FootstepVolume = 0.30f; // 07-15: heavier, more present underwater thud
@@ -287,9 +287,9 @@ namespace ProjectM.Client
ShoulderLampIntensity = 8f; // 07-16e: the suit lamp actually lights (3 got lost in the murk ambient)
ShoulderLampRange = 12f;
CombatIdleHoldSec = 4f; // 07-18: Menacing01 combat-idle hold after the last swing
MeleeArcIntensity = 1f; // 07-19: arc colors are pre-toned dim; this scales from there
MeleeArcIntensity = 0.8f; // 07-21 HEAVY LOCK: the weapon is the read, the arc recedes further
MeleeArcBubbles = 6;
FinisherHoldFrames = 5; // 07-20 G5: the finisher's heavy beat (~83ms), capped well under the 8-frame ladder ceiling
FinisherHoldFrames = 7; // 07-21 HEAVY LOCK: a fatter finisher beat (~117ms, still under the 8-frame ladder cap)
RumbleEnabled = true;
@@ -84,18 +84,18 @@ namespace ProjectM.Simulation
ChargerLungeDurationTicks = 18f,
ChargerWhiffStaggerTicks = 36f,
GruntWindupTicks = Tuning.AttackWindupTicks, // canonical Grunt-windup source (TelegraphTests couples to it)
MeleeDamage = 30f, // 07-19 heavy-weapon retime: bigger hit, slower cadence (DPS ~held: 18/0.27s -> 30/0.50s)
MeleeDamage = 36f, // 07-21 HEAVY LOCK (operator A/B): DPS ~held at 60 (dmg = recover ticks)
MeleeRange = 2.2f, // 07-20 G2.2 reach honesty: axe tip ~1.8m + a 0.4m player-favoring margin (was 2.6)
MeleeConeHalfAngleRad = 0.9f, // ~51.5 deg half-angle (~103 deg cleave arc)
MeleeRecoverTicks = 30f, // heavy-swing lock/recovery (~0.50s; 07-19 weighty-melee retime)
MeleeChainGraceTicks = 24f, // window after the lock to chain the next hit (~0.4s)
MeleeSwingMoveScale = 0.35f, // movement-commit while swinging (0..1)
MeleeRecoverTicks = 36f, // 07-21 HEAVY LOCK: 0.60s light lock (finisher x1.5 = 54t)
MeleeChainGraceTicks = 28f, // 07-21 HEAVY LOCK: ~0.47s chain window after the lock
MeleeSwingMoveScale = 0.25f, // 07-21 HEAVY LOCK: deeper movement commit while swinging
MeleeKnockbackSpeed = 6f,
MeleeFinisherMult = 1.5f, // finisher (last hit) scales dmg/range/recover/knockback (07-19: 1.8 -> 1.5, recover was ballooning at the heavy cadence)
MeleeComboLength = 3f, // light, light, finisher
MeleeFinisherRangeMult = 1.25f, // 07-20 G2.2: finisher REACH (damage/recover/knockback keep MeleeFinisherMult)
MeleeBufferTicks = 8f, // 07-20 G7: attack press remembered in the last ~0.13s of a lock (0 = off)
MeleeContactTicks = 16f, // 07-20 G2.1: blade lands ~0.27s after swing start (per-step via MeleeTiming; 0 = legacy immediate)
MeleeBufferTicks = 10f, // 07-21 HEAVY LOCK: wider buffer fits the slower cadence (0 = off)
MeleeContactTicks = 20f, // 07-21 HEAVY LOCK: blade lands 20/12/25t per step -- clip speeds retuned to MATCH (wire tool 1.0/0.85/0.88; audit must show zero drift). Step-3 (25t) sits 1 tick under CastFacingTicks 26 -- do NOT raise without raising the cast window.
StructureAggroWeight = 0.7f, // EB-1: <1 prefers structures (fortress aggro); live-tunable
StaggerKnockbackSpeed = 7f, // B2 poise: kb.Speed >= this interrupts windups/lunges; below = nudge only
SeparationMaxSpeed = 3f, // B1: max separation push (units/s) so soft-collision can't fling
@@ -1,20 +1,22 @@
{
"name": "baseline-0720",
"notes": "The shipped 07-20 defaults (forks 1-6). Apply to RESET after experiments. DPS ~60 held: dmg = recover ticks.",
"name": "baseline-heavy-0721",
"notes": "THE SHIPPED DEFAULTS (heavy feel locked 07-21 from the operator A/B). Apply to RESET after experiments. DPS 60 held (dmg = recover ticks); clip speeds 1.0/0.85/0.88 match contact 20/12/25.",
"sim": [
{ "k": "MeleeDamage", "v": "30" },
{ "k": "MeleeDamage", "v": "36" },
{ "k": "MeleeRange", "v": "2.2" },
{ "k": "MeleeRecoverTicks", "v": "30" },
{ "k": "MeleeChainGraceTicks", "v": "24" },
{ "k": "MeleeRecoverTicks", "v": "36" },
{ "k": "MeleeChainGraceTicks", "v": "28" },
{ "k": "MeleeFinisherMult", "v": "1.5" },
{ "k": "MeleeFinisherRangeMult", "v": "1.25" },
{ "k": "MeleeBufferTicks", "v": "8" },
{ "k": "MeleeContactTicks", "v": "16" }
{ "k": "MeleeBufferTicks", "v": "10" },
{ "k": "MeleeContactTicks", "v": "20" },
{ "k": "MeleeSwingMoveScale", "v": "0.25" }
],
"feel": [
{ "k": "MeleeArcIntensity", "v": "1" },
{ "k": "MeleeArcIntensity", "v": "0.8" },
{ "k": "MeleeArcBubbles", "v": "6" },
{ "k": "FinisherHoldFrames", "v": "5" },
{ "k": "FinisherHoldFrames", "v": "7" },
{ "k": "MeleeConnectFovKick", "v": "1.1" },
{ "k": "CombatIdleHoldSec", "v": "4" }
]
}
@@ -1,17 +1,44 @@
{
"name": "heavy-committed",
"notes": "Slower, weightier: MonHun-lean. Longer lock + contact, bigger hit + hold, dimmer arc (the weapon is the read). DPS ~60 held.",
"notes": "LOCKED into code defaults 2026-07-21 (kept as the record of the winning A/B candidate). Slower, weightier: MonHun-lean. Longer lock + contact, bigger hit + hold, dimmer arc (the weapon is the read). DPS ~60 held.",
"sim": [
{ "k": "MeleeDamage", "v": "36" },
{ "k": "MeleeRecoverTicks", "v": "36" },
{ "k": "MeleeChainGraceTicks", "v": "28" },
{ "k": "MeleeContactTicks", "v": "20" },
{ "k": "MeleeBufferTicks", "v": "10" },
{ "k": "MeleeSwingMoveScale", "v": "0.25" }
{
"k": "MeleeDamage",
"v": "36"
},
{
"k": "MeleeRecoverTicks",
"v": "36"
},
{
"k": "MeleeChainGraceTicks",
"v": "28"
},
{
"k": "MeleeContactTicks",
"v": "20"
},
{
"k": "MeleeBufferTicks",
"v": "10"
},
{
"k": "MeleeSwingMoveScale",
"v": "0.25"
}
],
"feel": [
{ "k": "MeleeArcIntensity", "v": "0.8" },
{ "k": "FinisherHoldFrames", "v": "7" },
{ "k": "MeleeConnectFovKick", "v": "1.1" }
{
"k": "MeleeArcIntensity",
"v": "0.8"
},
{
"k": "FinisherHoldFrames",
"v": "7"
},
{
"k": "MeleeConnectFovKick",
"v": "1.1"
}
]
}