The DS3 Codex
Chapter VII

Combat

How a swing of the Longsword decides when it hits, where and how hard, traced from the clip's events through four param tables to the victim's reaction.

Four frames at thirty a second: 0.467 to 0.6. That's the whole of the Longsword's first swing that can hurt anyone. The rest is wind-up and recovery.Codex · a023_030000

In short
TAE event 1 AttackBehavior (window, BehaviorJudgeID)
  → BehaviorParam_PC row 100,000,000 + variation·1000 + judge   (stamina cost, refId)
  → AtkParam_Pc row refId                                       (hit shapes on weapon dummy polys, hit-stop, damage level)
  + EquipParamWeapon                                            (base damage, scaling)
  → swept against the victim's hurt capsules (its ragdoll bodies)
  → parried?  guarded? (flag 3 + angle)  flicked?  wall?
  → damage → poise → the victim's W_Damage* / W_GuardDamage* / W_GuardBreak / W_DeathStart, both sides hit-stop

1When: the AttackBehavior window

The Longsword's first R1, frame by frame
The Longsword's R1 (a023_030000), 0.2 s apart in our engine.

TAE event 1 AttackBehavior spans the active window, with fields AttackType (0 standard, 62 plunging, 64 parry), AttackIndex, BehaviorJudgeID and DirectionType. The R1 has one event at 0.467-0.6 s, judge 0. The same clip's flags say what else may happen and when data:

FlagWindowMeaning
7 Disable Turning0-0.167, 0.4-you can aim the swing only in 0.167-0.4 s
87 Common Input Check0.333-presses from here are kept guess
4 Cancel – RH Attack0.667-the next R1 may start (the chain goes 1 → 2 → 3 → 2 → 3…)
26 Cancel – Dodge0.833-a roll or backstep may start
11 Cancel – LS Move1.067-the stick may end the attack

The heavy attack charges: AttackRightHeavy1Start_onUpdate switches to the uncharged end clip when R2 is released while SpEffect 100280 is on (TAE 67 sets it for 0.333-0.867 s). Hold past that and the start clip plays on into its charged swing. The running attack is sprint R2 (a023_030600, a leaping slash), not R1.

2Which attack: BehaviorParam_PC

The weapon's behaviorVariationId (Longsword: 2300) picks a block of rows, and the event's judge picks one: 100,000,000 + 2300 × 1000 + 0 = 102300000, whose stamina is 20 and whose refId is AtkParam_Pc 2300000. Weapons with no row for a judge fall back to their motion category's block, wepmotionCategory × 100. That's how the Ringed Knight Straight Sword swings like a longsword: 113 of the 116 weapons without their own row 0 have one there guess.

3Where and how hard: AtkParam_Pc 2300000

FieldValueMeaning
Hit0_DmyPoly1 / 2, Hit0_Radius100 / 120, 0.45 mA capsule between two of the weapon's dummy polys: near the tip (y −0.802) and the hilt (0)
Hit1_DmyPoly1, Hit1_Radius, hitType120, 0.2 m, 2A sphere at the grip: the shape that bounces off walls
HitStopTime0.08 sBoth fighters freeze on contact
damageLevel1The victim's reaction: small
AtkPhysCorrection, AtkSuperArmorCorrection100 %, 100 %Motion value and poise damage
KnockbackDist0.6 mPush-back, timed by KnockBackParam

What gets hit: the character's ragdoll bodies, one capsule per major bone. They fit the body, sit exactly on the bind pose, and there's no other capsule set in the chrbnd. That they're the hurtboxes is still a guess: the exe's hit test isn't found.

The hit test

Not read yet: whether the sweep is continuous or per frame.

The hit test

Each tick the window is open, every hit shape is swept from where its dummy polys were last tick to where they are now (steps no longer than its radius) against the hurt capsules. The first contact is the swing's only hit.

4Damage, HP and stamina

HP and FP

CalcCorrectGraph 100 at Vigor (five breakpoints, each segment bent by an exponent): the Knight's 12 gives 454 HP. Graph 101 at Attunement 10: 93 FP.

Attack rating

110 × (1 + STR% × graph(13) + DEX% × graph(12)) = 124.8 guess at the formula, × the attack's motion value.

Through defence

Defence from graphs 102, 130, 131: the Knight's is 52.6. The share let through by attack ÷ defence is Elden Ring's curve ER, standing in: DS3's constants aren't in the exe.

Armour

Absorption as the share let through; the pieces multiply to 72.1 %. A Longsword R1 on a Knight: 124.8 × 0.698 × 0.721 ≈ 62. Eight hits kill.

Stamina lives in the character data module (+0xF0/+0xF4). SetStamina clamps it to [−60, max]: it goes into debt, so the action that empties the bar still happens in full exe. Regen per second is rate × TAE 225 % × a modifier. The rate is 45 for players (a constant in the exe, not a param) and staminaRecoverBaseVal (21) for enemies. TAE 225 is 0 % through every Longsword attack, 20 % while guarding and 100 % otherwise. Max stamina from END isn't found: we use 85 + END guess.

Close

DS3's tables and stamina rules. The defence curve and the AR formula are stand-ins until the damage maths is found in the exe (several dead ends are recorded).

5Poise is two systems

Toughness

What everyone calls poise. Players have 100; Cemetery hollows have 0. Every hit takes poise damage × the armour's rate (Knight set 75.1 %). A timer refills it whole after 30 s. But it only stops a stagger inside a hyper-armour window: TAE 795 "DS3Poise", which also rescales poise by a ToughnessParam row. Outside windows, every hit with a damage level staggers. Big weapons get their hyper armour from EquipParamWeapon +0x178 bit 0, set on exactly the greatswords, ultra greatswords, hammers, axes, clubs and greatshields exe.

Super armour

DS1's poise, kept in SprjChrSuperArmorModule. Max from NpcParam.superArmorDurability (Gundyr 185, hollows 0). Recovery 5 s × (1 + correction): 10 s for Gundyr. At 0 it breaks and the enemy plays W_SABreak. A Longsword R1 breaks Gundyr in 14 hits exe.

Faithful

Both traced in the exe and modelled. Open: what a holding window does to the damage level (the caller of 0x1409ee720).

6Guard, parry, flicks

Holding the guard against an attacking target
Guarding with the Knight Shield against the training target (a second Knight run by the same state machine). Bars show HP, stamina and poise.

7Bouncing off walls

About half of AtkParam_Pc's rows have a type-2 shape, almost always a small sphere at the grip. The blade's capsule (type 0) passes through walls, so a swing bounces only when your hands come within 0.2 m of a wall: you can swing along a wall with the blade in it. The script plays W_GuardBreakWall (a023_030150). The clang is the wall material's hit sound, z0000000NN by its HitMtrlParam row: stone sparks, wood "iron-cut-wood". m40's hull of material 29 in front of the walls had to stop characters but not swords, so the swing reaches the cobblestone behind. Enemies don't bounce: no wall shapes in their rows.

Close

The shapes and sounds are DS3's. That any contact of a type-2 shape triggers the bounce is our reading of the names; the exe's wall test isn't read.

8Reactions, knockback, death

ExecDamage picks the clip by damage level (1 small, 2 middle, 3 large, 4 extra large, 5 push…) and side (left, right, front, back). Any level above 0 makes an enemy's AI throw its plan away. Knockback pushes the victim KnockbackDist metres at full speed for KnockBackParam's ContTime, then slows over decTime, but only when the reaction clip doesn't move them itself guess. Death plays W_DeathStart → W_DeathIdle, and enemies go limp at TAE 228 (ragdolls).

9In our engine

Our engine does the same param lookups, each fighter's numbers and what a hit does. Opponents are the hollows, Gundyr, or a practice target: a second Knight that idles, guards, attacks or parries every 2 s. A swing into an open parry window is parried; one flicked off a guard bounces its attacker. Hit-stop pauses both clips and their root motion while input is still buffered. A debug key draws the hit shapes (wall shapes yellow) and hurt capsules.

The super weapon
Our super weapon cheat: the Ringed Knight Straight Sword (DS3's model, dummies and params, with the Longsword's attacks by the fallback above). Everything after that is our own fun: × 25 damage, blasts, fire. not DS3