Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/tps-kick-sequence-audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
- app/**
- src/game/**
- scripts/capture-tps-kick-sequence-audit.mjs
- scripts/capture-tps-combat-feel-audit.mjs
- scripts/capture-tps-kick-spam-audit.mjs
- scripts/capture-tps-kick-link-audit.mjs
- .github/workflows/tps-kick-sequence-audit.yml
Expand All @@ -19,6 +20,7 @@ on:
- app/**
- src/game/**
- scripts/capture-tps-kick-sequence-audit.mjs
- scripts/capture-tps-combat-feel-audit.mjs
- scripts/capture-tps-kick-spam-audit.mjs
- scripts/capture-tps-kick-link-audit.mjs
- .github/workflows/tps-kick-sequence-audit.yml
Expand Down Expand Up @@ -75,6 +77,7 @@ jobs:
WEBDRIVER_BIN="$DRIVER" AUDIT_URL="http://127.0.0.1:3000/" TPS_AUDIT_DIR="artifacts/tps-kick-sequence" node scripts/capture-tps-kick-sequence-audit.mjs
WEBDRIVER_BIN="$DRIVER" AUDIT_URL="http://127.0.0.1:3000/" TPS_AUDIT_DIR="artifacts/tps-kick-sequence" node scripts/capture-tps-kick-spam-audit.mjs
WEBDRIVER_BIN="$DRIVER" AUDIT_URL="http://127.0.0.1:3000/" TPS_AUDIT_DIR="artifacts/tps-kick-sequence" node scripts/capture-tps-kick-link-audit.mjs
WEBDRIVER_BIN="$DRIVER" AUDIT_URL="http://127.0.0.1:3000/" TPS_AUDIT_DIR="artifacts/tps-kick-sequence" node scripts/capture-tps-combat-feel-audit.mjs
for move in kick lowkick risingkick dashkick; do
for stage in startup contact recovery; do
image="artifacts/tps-kick-sequence/tps-kick-${move}-${stage}.png"
Expand Down
32 changes: 32 additions & 0 deletions docs/COMBAT_FEEL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Readable combat and paired reactions

- Enemy aim is committed when its telegraph enters REACT. The visible attack
and spatial contact use that same direction. Its short weight shift continues
down the committed lane; an active strike cannot turn after a sidestep.
- A STEP records the threatening move until its active window. It grants no
invulnerability. A perfect evade requires an actual lateral miss, and the
player's position before STEP must have been inside that attack's lane.
Early movement outside REACT and out-of-range whiffs do not award a reversal.
- Straight punches/front kicks cover a narrower lateral lane than backfists
and low kicks. Their startup tracking is also lower. Existing startup,
damage, recovery, hit-confirm and combo rules retain their separate roles.
- Close/far opener selection has hysteresis. Direction is captured with an
ATTACK tap during STEP, so releasing the stick before the buffered attack
begins does not erase the intended branch.
- Ordinary BRAWLER pressure repeats jab/straight/power; SKIRMISHER spacing
favors kicks and a short retreat afterwards. Tactical adaptation retains
priority. Heavy BRAWLER attacks leave a brief open reset beat.
- Resolved contact selects a head/body/leg or braced guard response and
restarts it on repeated contacts. Each real target skeleton receives baked
clips with early upper-body recoil, delayed hip transfer and a recovery step.
These use the existing stun clock and single animation mixer. Attacker and
defender presentation share the same contact tick and effect height.
Legacy host recoil/guard tilts yield to these complete clips, and inertial
transitions preserve their complete pelvis/leg solutions rather than mixing
part of an outgoing stance into the planted feet.

Regression coverage includes actual fixed-step cue/STEP/contact behavior,
standing/early/far controls, touch selection, CPU phrases and both male/female
rigs' finite transforms, constant leg lengths and grounded support.
The existing kick WebGL audit additionally captures real evade/retaliation and
head/body/leg/block frames through `capture-tps-combat-feel-audit.mjs`.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
115fce482fdcae5cec74ff38f503687a057f21a6cab5ed87cd305acf9c80e38b
b1a8a49ba9eb618c8c902e4e9b22a5ffaa6e8bdbbd355c177d6d654f1bfe085b
Binary file modified public/models/quaternius/blender-cross-core.glb
Binary file not shown.
62 changes: 62 additions & 0 deletions public/models/quaternius/blender-cross-core.metrics.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,67 @@
"boneCount": 65,
"meshCount": 2,
"sharedRig": "MOTION_FOUNDRY_V2_SHARED_STRIKE_RIG",
"motionPriorProvider": "UAL_AUTHORED_STRIKE_V2",
"naturalnessPass": "AUTHORED_SOURCE_V2",
"unimateInbetweenVersion": "UNIMATE_INSPIRED_REPLACEMENT_INBETWEEN_V1",
"unimateInbetweenAnchors": [
1,
6,
16,
21,
24,
33,
42
],
"unimateInbetweenSmoothedBones": 16,
"unimateInbetweenPreservedBones": [
"pelvis",
"thigh_l",
"calf_l",
"foot_l"
],
"unimateRotationAccelerationRmsBefore": 0.18402951713198326,
"unimateRotationAccelerationRmsAfter": 0.16844692555505267,
"unimateMaxRotationStepBefore": 2.2506339095000554,
"unimateMaxRotationStepAfter": 2.1210758237739955,
"unimateMaximumAnchorRotationError": 0.0,
"unimateMaximumAnchorLocationError": 0.0,
"unimateInbetweenAccepted": true,
"referenceImpactNormalizedTime": null,
"referenceTimeWarpKnots": [
[
0.0,
0.0
],
[
0.13,
0.06
],
[
0.27,
0.17
],
[
0.4,
0.36
],
[
0.5,
0.66
],
[
0.57,
0.78
],
[
0.76,
0.91
],
[
1.0,
1.0
]
],
"pipeline": [
"Punch_Cross source body motion",
"move-specific nonlinear whole-body retiming",
Expand All @@ -31,6 +92,7 @@
"world-space L support-foot position IK lock",
"world-space L support-foot orientation lock",
"Blender native NLA visual-keying bake",
"UniMate-inspired replacement in-between cleanup with immutable combat anchors",
"glTF Action export"
],
"rightHandTravel": 0.4906242518662258,
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
f0911cd68642c69f6cd6537677db77c7f84cc15f18bb01f153602c074adea2d6
f676043ded98d101a66faa06987662a419d18eae5c3f491146c437f6f9675222
Binary file modified public/models/quaternius/blender-fight-core.glb
Binary file not shown.
26 changes: 26 additions & 0 deletions public/models/quaternius/blender-fight-core.metrics.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,38 @@
"constrainedFootLockMaxDrift": 4.702727150338739e-07,
"boneCount": 65,
"meshCount": 2,
"motionPriorProvider": "UAL_AUTHORED_POWER_V1",
"unimateInbetweenVersion": "UNIMATE_INSPIRED_REPLACEMENT_INBETWEEN_V1",
"unimateInbetweenAnchors": [
1,
9,
24,
30,
34,
43,
52
],
"unimateInbetweenSmoothedBones": 16,
"unimateInbetweenPreservedBones": [
"pelvis",
"thigh_l",
"calf_l",
"foot_l"
],
"unimateRotationAccelerationRmsBefore": 0.1234864492702557,
"unimateRotationAccelerationRmsAfter": 0.11096091799728582,
"unimateMaxRotationStepBefore": 1.7447990095183712,
"unimateMaxRotationStepAfter": 1.6646196038180803,
"unimateMaximumAnchorRotationError": 0.0,
"unimateMaximumAnchorLocationError": 0.0,
"unimateInbetweenAccepted": true,
"pipeline": [
"Punch_Cross source body motion",
"nonlinear whole-body retiming",
"right-hand two-bone IK contact control",
"world-space left support-foot IK lock",
"Blender native NLA visual-keying bake",
"UniMate-inspired replacement in-between cleanup with immutable combat anchors",
"glTF Action export"
]
}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
d6cf687884e7a5f5f5dde2514bd84d8d2954eabc66229d703f957fa674edba7e
058f6816f046c2a6d6742d20abb18bc131399eaeb0bb9156493c6a9f74b23c5a
Binary file modified public/models/quaternius/blender-strikes-core.glb
Binary file not shown.
Loading
Loading