
CombatFlow
Client-side. Cuts sword, berserker-axe and dodge recovery right after the hit, like the emote cancel. Max combo (auto, on by default) and Auto perfect parry (off by default) change how the game counts attacks and blocks: check your server's rules.CombatFlow
Cuts the recovery of your sword and Berserker axe attacks, and of the dodge roll, right after the hit lands, so you attack faster. It does what the emote animation-cancel does (bind an emote and spam it while holding attack), but automatically and with perfect timing. You just hold attack.
Client-side only. The server does not need it, and it will not stop you joining a server that does not have it.
Read this before using it on a server. Two options go beyond timing. Max combo (auto) exploits how the game counts the current attack: the damage multiplier of one swing is carried into other swings, and stamina is paid once. Auto perfect parry forces the game's own perfect-block path. Both run on your client and can change the balance on multiplayer servers, so check the server's rules first. Both can be switched off in the config (Auto perfect parry is off by default).
What it does
- Sword, primary combo: cancels the recovery after each blow, right after the hit.
- Sword, secondary: cancels the recovery after the blow.
- Sword, max combo (on by default, optional): when the secondary attack lands, the
mod plays the second and third swings of the primary combo straight after it, on your
own animator, then cancels the recovery as usual. The game counts those swings as part of
the secondary attack. Stamina is spent once, for the secondary. Only for weapons whose
primary is the three-blow sword combo.
Max combo modepicks what follows the third swing:Loop(default) keeps alternating the second and third swings while the secondary button is held, and cancels at the current swing's hit once it is released (or afterMax combo loop capextra swings, no cap by default).Cyclecancels after the third swing instead. - Berserker axes: cancels after the last hit of a blow, and only when that is faster than the game's own chain point. The last blow of the combo and Cleave are always eligible.
- Berserker axes, max combo (on by default, optional): after the second hit of the
combo's last blow, the mod plays the third and fourth blows again straight after it, on
your own animator. The game counts them as part of the last blow, so they keep its bonus
damage and cost no extra stamina. It shares
Max combo modeandMax combo loop capwith the sword:Loopkeeps alternating the third and fourth blows while the primary button is held and cancels at the end of the current blow once it is released;Cyclecancels after one extra third and fourth blow. - Dodge roll: ends the roll as soon as its invincibility window is over. The roll covers a shorter distance.
Other weapons are not touched.
How to use
Hold the attack button; the game chains the next blow as soon as the recovery is cut. Tapping attack is not the goal: a tap during a cancel may be swallowed, as with the manual emote cancel. Release attack and your character returns to normal movement, with no stuck pose.
While a Max combo loop runs, blocking and dodging wait until you release the button and the current swing's hit lands (vanilla refuses them during an attack).
F8 turns animation cancelling on or off in game and shows a short message.
Swap attack buttons (Sword section, off by default): with a sword, the primary button starts the secondary attack, so holding it runs the Max combo loop, and the secondary button plays the light combo. Only the two attack buttons change (keyboard, mouse and gamepad); other weapons, tools and build mode keep the game's layout, and the swap is off whenever the mod is.
Auto perfect parry (Combat section, off by default): a blockable hit from the front is parried as a perfect block, even mid-attack and without the block button. It blocks with what the game blocks with (shield, weapon or bare hands); hits from behind and hits during a dodge are taken as usual. The rest is the game's own block: stamina cost, guard break when out of stamina, attacker stagger, skill and effects. It applies to every attacker, creatures and players alike, and is off whenever the mod is. Only the block button and the mid-attack rule are skipped: as in vanilla, there is no block while staggered, encumbered, in build mode or during a minor action.
Configuration
Edit BepInEx/config/I3_rett.CombatFlow.cfg, or use BepInEx ConfigurationManager.
| Section | Key | Default | What it does |
|---|---|---|---|
| General | Enabled | true | Master switch. |
| General | Toggle key | F8 | Turns cancelling on or off in game. |
| Sword | Max combo (auto) | true | While the secondary attack plays, chain the second and third primary swings into it, then cancel or loop. The final cancel honours Delay after hit. |
| Sword | Max combo mode | Loop | Used with Max combo (auto) of the sword and of the Berserker axes. Cycle: cancel after the chained swings. Loop: keep alternating the chained swings while the button is held (secondary for the sword, primary for the axes; only the first attack costs stamina); releasing takes effect at the next hit. |
| Sword | Max combo loop cap | 0 | Loop mode only, both weapons: extra swings chained past the first pass before the run ends with a cancel, 0 to 1000. A still-held button then starts a new attack, which costs stamina again. 0 means no cap. |
| Sword | Swap attack buttons | false | With a sword only, swap the primary and secondary attack buttons (press and hold). Block, dodge, jump, movement, other weapons, tools and build mode are unchanged. Needs Enabled on. |
| Berserker axes | Max combo (auto) | true | After the combo's last blow, chain the third and fourth blows into it, then cancel or loop (Max combo mode and loop cap of the Sword section). |
| Dodge | Cancel after invincibility | true | End the roll once invincibility is over. |
| Combat | Auto perfect parry | false | Parry a blockable hit from the front as a perfect block, even mid-attack and without the block button. Blocks with the shield, weapon or bare hands, as the game does; hits from behind and during a dodge are unchanged. Applies to all attackers. Needs Enabled on. |
| Advanced | Cancel emote | NoNoNo | The emote played under the hood, NoNoNo or Cheer. |
| Advanced | Delay after hit (s) | 0 | Seconds to wait after the hit before cancelling, 0 to 0.3. |
| Advanced | Debug log | false | Log the time of every damage event and cancel. While it is off, the mod writes nothing to the log apart from its startup line and errors. |
| Advanced | Combo lab log | false | Detailed measurement log for bug reports. Needs Debug log on as well. |
How much faster
Measured in game on the dev profile (sword, solo, hitting a target; base-damage units per second, counting each swing's damage multiplier; factor against the vanilla secondary):
| Setup | Units/s | vs vanilla secondary |
|---|---|---|
| Vanilla combo | 1.51 | x0.92 |
| Vanilla secondary | 1.64 | x1.00 |
| Cancel, combo | 2.46 | x1.50 |
| Cancel, secondary | 2.68 | x1.63 |
| Max combo, Cycle | 5.01 | x3.05 |
| Max combo, Loop | 7.63 (peak 8.56) | x4.65 |
Berserker axes, same method: vanilla 2.57, cancel 3.2 to 3.4, Max combo Loop about 6.4 once the loop runs (5.1 on average, counting the ramp-up).
The sword loop carries the secondary (a narrow 10 degree hit, one target); the axes loop carries the finisher (90 degrees, several targets). Weapon durability drops fast while looping, so repair often.
Stamina: Cycle spends stamina on every relaunched secondary. Loop only charges the first
secondary (the chain swings are part of it), so stamina stays flat while you hold the button. After Max combo loop cap extra swings a
still-held button starts a new secondary, which costs stamina again.
To measure it yourself, turn on Debug log and Combo lab log (Advanced), turn General / Enabled off
(or press the toggle key) for a vanilla run, and compare the timestamps of the swing and damage
lines: the combo lab lines keep logging while Enabled is off, the other review lines do not. It
writes much more detail, so it is a debugging aid for bug reports, not something to leave on.
Multiplayer
Client-only. The cancel only touches your own character's animation on your own machine. The game never sends an emote, so other players see your attacks but no emote. Animation speed is synced by the game, so they may see your recoveries finish faster. Nothing is installed server-side. The mod appears in the plugin list like any other.
Compatibility
It patches these game methods, so other mods that patch the same ones may conflict:
Humanoid.OnAttackTrigger, Humanoid.StartAttack, Humanoid.UnequipItem, Humanoid.IsBlocking,
Player.OnDodgeMortal, Player.SetControls, Character.RPC_Damage and CharacterAnimEvent.Speed.
The Combo lab log also observes ZSyncAnimation.SetTrigger and Character.Damage.
Known limitations
Not yet verified in game:
- Auto perfect parry against real creatures (only tested on the training dummy so far).
- Swap attack buttons.
- What other players see in multiplayer.
Reporting a bug
Set Debug log to true under Advanced, reproduce the problem, and attach
BepInEx/LogOutput.log to an issue at https://github.com/I3-rett-valheim-mods/CombatFlow/issues.
Say which weapon was in your hands and whether you were holding or tapping attack.