Valheim
Install with App

Details

Latest version
1.2.10
Last Updated
First Uploaded
Downloads
3.9K
Likes
1
Size
120KB
Dependants
ADDatHost Valheim hosting
30% off

PPR — Perfect Parry & Reflect

A skill-based parry mod for Valheim. Block with precise timing to trigger a Perfect Parry — then counter, reflect projectiles, and take reduced damage. Every setting is configurable.


⚠️ Updating from 1.2.9 — please read

  • Nothing to do. The new [Guard Sprint] config section (see Features below) is added automatically with its defaults.

⚠️ Updating from 1.2.8 — please read

  • Nothing to do. Your existing Back Shield / Auto-Equip Shield assignments are kept as-is. A new 4th cycle stage (Back + Auto-Equip, one shield holding both roles at once) is available if you want it — see Features below.

⚠️ Updating from 1.2.7 — please read

  • Shields need re-assigning once: the old automatic "last-used shield" tracking is gone, replaced by explicit Shield Assignment (see Features below). After updating, your Back Shield and Auto-Equip Shield will show as unassigned — open your inventory and wheel-click each shield once to re-assign it.
  • All other settings are kept. One setting was renamed ([Auto Shield Equip] (Enable) Auto-Equip Assigned Shield, was (Enable) Auto-Equip Last Shield) — only that one setting resets to its default (on) once, since BepInEx identifies settings by name.

⚠️ Updating from 1.2.6 or earlier — please read

  • Mod manager users (Thunderstore Mod Manager / r2modman / Gale): just update PPR. The old files are replaced automatically.
  • Manual install users: before installing 1.2.7, delete the old PPR.dll (and the folder that contains it) from BepInEx/plugins. If you skip this, two copies of PPR will load at the same time and effects will be doubled or break.
  • Settings reset once: the plugin ID changed to LJS.PPR, so a new config file LJS.PPR.cfg is created and your previous PPR settings are not carried over. Please set them again once. The old PPR config file in BepInEx/config can be deleted.

Features

⚔️ Perfect Parry

Block at the exact moment an attack lands (within 0.1s by default) to trigger a Perfect Parry.

  • Counter Window (1s) — After a perfect parry, press your secondary attack to fire a fast counter at 2× animation speed
  • Damage Reduction (50%) — Take half damage for the duration of the counter window
  • Custom VFX — A colored effect appears to confirm the parry (default: blue #4DB8FF)

🎨 Perfect Parry VFX Color

The vanilla white vfx_blocked is replaced on perfect parry with a custom-colored version of the same effect.

  • Color is set via hex code in the config (e.g. #FF4444 red, #FFD700 gold, #44FF88 green)
  • On normal parry, the original white vfx_blocked plays as usual
  • On perfect parry, the white effect is suppressed and only the colored PPR effect is shown

🏹 Projectile Reflection

Block an incoming projectile to reflect it back in the direction you're looking. Reflected damage is based on the attacker's original damage (before block reduction).

Parry Type Damage Config
Perfect Parry 3× (Reflect) Perfect Parry Damage Multiplier
Normal Parry 2× (Reflect) Normal Parry Damage Multiplier
  • Normal Parry Reflect works independently of the Perfect Parry enable toggle
  • Any successful block (shield raised) will reflect projectiles at 2× if enabled
  • Supports all projectile types: arrows, rocks, Greydwarf stones, troll boulders, magic

🛡️ Ranged No Stagger

Ranged attackers are not staggered when their projectile is blocked or reflected.

🔖 Shield Assignment

Wheel-click (middle mouse button by default, configurable) a shield in your inventory — including the hotbar row — to cycle its role:

Normal → Back Shield (orange "B") → Auto-Equip Shield (teal "A") → Back + Auto-Equip Shield (split "B"/"A") → Normal
  • Back + Auto-Equip means one shield plays both roles at once: it's worn on your back (back guard + movement speed penalty) while it's in your inventory, and automatically equipped to your off-hand the moment you draw a one-handed weapon — then it goes back to your back when you put the weapon away.
  • Each role (Back, Auto-Equip) is still held by only one shield at a time. Assigning Back + Auto-Equip to a shield takes over both roles from whichever shields held them. If another shield later takes just one of those two roles away from a Back + Auto-Equip shield, the shield keeps the other role. Cycling a role away always hands it back to whichever shield held it immediately before.
  • Shown as a small badge on the inventory and hotbar slot (split orange/teal for Back + Auto-Equip), plus a line in the item tooltip.
  • The assignment is saved on the item itself, so it survives relogging and moving the shield through chests.

🎯 Auto Shield Equip

Switch to a one-handed weapon with an empty off-hand, and PPR automatically re-equips the shield you've assigned as the Auto-Equip Shield above (this also applies to a shield assigned Back + Auto-Equip).

🔙 Back Shield Guard

While the shield you've assigned as the Back Shield above (or Back + Auto-Equip) is in your inventory but not in your hand, it's shown on your back and passively blocks attacks that land from behind (within a configurable rear cone) — using the same block-power math as a normal front guard. The shield's movement speed penalty (if any) is also applied while worn on your back, same as if it were held in hand.

🧰 Guard Durability

When a guard (front block/parry, or the back guard above) actually reduces incoming damage, you can skip:

  • Your armor's durability loss (helmet/chest/legs/cape) — on by default
  • Your blocker's own durability loss — by category: Weapon/Tool (on by default), Shield (off by default, vanilla-like)

Guard failures (e.g. out of stamina) and hits that weren't guarded at all are always handled exactly like vanilla.

⚡ Equip Motion Cancel

Skip the vanilla "equipping" animation and progress bar for whichever equipment categories you enable (Shield, Helmet, Chest, Legs, Cape, Utility, Trinket, Weapon, Tool — all on by default) — equip/unequip happens instantly instead. Equip sounds/effects and vanilla's equip conditions (e.g. can't swap gear mid-attack) are unchanged. Meant to replace similar standalone "instant equip" mods.

Also covers the Hide key (R) — hiding (sheathing) and showing (drawing) your hand items plays no animation either, so going into/out of the "weapons hidden" state is as instant as swapping with a hotkey. This also applies to vanilla's own automatic use of the same function, such as auto-hiding your weapon while swimming.

🏃 Guard Sprint

Sprint immediately while blocking — with a shield, a weapon, a tool, or your bare fists. Vanilla blocks sprinting entirely while guarding (your normal walking/jogging speed is unaffected); PPR lifts that, at a fixed speed penalty depending on what you're blocking with. The penalty is applied (and removed) the instant you start/stop guarding — no ramp-up, no ramp-down.

  • Speed penalty (configurable) — Buckler-class shields 0%, Normal-class shields 10%, Tower-class shields 20%, anything else (weapon/tool/fists) 0%
  • Stamina — running stamina drain while guard-sprinting is multiplied by a configurable amount (default ×1.1), on top of whatever vanilla would already drain (your Run skill, equipment, status effects, other mods). Blocking a hit, attacking, rolling, and plain (non-guarding) sprinting are untouched.
  • Requirement — Blocking skill 20+ by default (configurable, 0 = no requirement)
  • Leg animation sync — while guard-sprinting, overall animation playback speed is nudged to roughly match your actual movement speed, reducing foot-sliding (configurable, capped at a max multiplier) — automatically disabled while rolling, staggering, or attacking
  • Shield sub-class (Buckler/Normal/Tower) is auto-detected from the shield's parry bonus and name — or force specific shields into a class via the prefab name lists below, for modded shields that get misclassified

Configuration

Edit LJS.PPR.cfg or use an in-game config manager mod.

[Perfect Parry]

Setting Default Range Description
(Enable) Perfect Parry true — Master toggle for the perfect parry system
(Parry) Detection Window (sec) 0.1 0.01–0.24 Timing window for perfect parry
(Counter) Input Window (sec) 1.0 0.1–2.0 Time to trigger counter after parry
(Counter) Animation Speed Multiplier 2.0 1.0–5.0 Speed of counter attack animation

[Perfect Parry - Damage Reduction]

Setting Default Description
(Enable) Damage Reduction true Reduce damage during counter window
(Damage Reduction) Reduction Rate (%) 50 How much damage is reduced

[Perfect Parry - Effect]

Setting Default Description
(Enable) Head Effect true Spawn a VFX on perfect parry
(Effect) VFX Name vfx_blocked Prefab name (must exist in ZNetScene)
(Effect) Offset X/Y/Z 0 / 1.25 / 0 Position offset relative to player
(Effect) Custom Color Enabled true Apply custom color to perfect parry VFX
(Effect) Custom Color (Hex) #4DB8FF Hex color — blue by default

[Perfect Parry - Ranged]

Setting Default Description
(Enable) Ranged No Stagger true Prevent attacker stagger on block
(Enable) Projectile Reflect true Reflect on perfect parry (3×)
(Reflect) Perfect Parry Damage Multiplier 3.0 Multiplier for perfect parry reflect
(Enable) Normal Parry Reflect true Reflect on any block (2×)
(Reflect) Normal Parry Damage Multiplier 2.0 Multiplier for normal parry reflect

[Shield Assignment]

Setting Default Description
(Input) Assign Key Mouse2 Key to press while hovering a shield in the inventory window (including the hotbar row) to cycle its role: Normal → Back Shield → Auto-Equip Shield → Back + Auto-Equip Shield → Normal. "Back + Auto-Equip" means the same shield acts as the Back Shield while it's in your inventory (not in hand) and as the Auto-Equip Shield once you draw a one-handed weapon (auto-equipped to your off-hand). Default is the middle mouse button (mouse wheel click).
(Display) Show Role Icons true Show a small badge on assigned shields in the inventory grid and the bottom hotkey bar (orange "B" = Back Shield, teal "A" = Auto-Equip Shield, split orange/teal "B"+"A" = Back + Auto-Equip Shield)

[Auto Shield Equip]

Setting Default Description
(Enable) Auto-Equip Assigned Shield true Re-equip the shield assigned as the Auto-Equip Shield when switching to a one-handed weapon with empty off-hand

[Back Shield Guard]

Setting Default Description
(Enable) Back Shield Guard true Show the shield assigned as the Back Shield on your back and passively block attacks from behind
(Guard) Rear Cone Half-Angle (deg) 60 Half-angle of the rear cone counted as a back attack
(Visual) Position/Rotation Offset X/Y/Z 0 Local transform offset for the back-worn shield visual

[Guard Durability]

Setting Default Description
(Armor) No Armor Wear On Guard true Skip armor durability loss when a guard actually reduces damage
(Blocker) No Durability Loss - Weapon true Skip the blocker's own durability loss when it's a weapon
(Blocker) No Durability Loss - Tool true Same, for tools (pickaxes, hammers, etc.)
(Blocker) No Durability Loss - Shield false Same, for shields — off by default (vanilla-like)

[Equip Motion Cancel]

Setting Default Description
(Enable) Equip Motion Cancel true Master toggle — turning this off also turns off every category below
(Cancel) Shield / Helmet / Chest / Legs / Cape / Utility / Trinket / Weapon / Tool true Instantly equip/unequip that category, skipping the vanilla queue/animation
(Cancel) Hide/Show Hand Items (R) true Skip the animation when hiding/showing hand items with the Hide key (R) — also applies when vanilla auto-hides your weapon (e.g. while swimming)

[Guard Sprint]

Setting Default Range Description
(Enable) Guard Sprint true — Allow sprinting immediately while blocking with anything (shield, weapon, tool, or bare fists), at the fixed speed penalty and stamina multiplier below
(Requirement) Min Blocking Skill 20 0–100 Minimum Blocking skill required to guard-sprint, shield or weapon/tool/fists alike. 0 = no requirement
(Speed) Buckler Penalty % 0 0–100 Fixed speed penalty for Buckler-class shields
(Speed) Normal Shield Penalty % 10 0–100 Fixed speed penalty for Normal-class shields
(Speed) Tower Shield Penalty % 20 0–100 Fixed speed penalty for Tower-class shields
(Speed) Weapon Penalty % 0 0–100 Fixed speed penalty when blocking with anything other than a shield (weapon, tool, or bare fists)
(Classify) Buckler/Normal/Tower Prefabs `` (empty) — Comma-separated shield prefab names to force a specific class, overriding automatic detection — for modded shields that get misclassified
(Animation) Sync Leg Animation true — While guard-sprinting, nudge overall animation playback speed to roughly match your actual movement speed, reducing foot-sliding
(Animation) Max Leg Speed-Up 2.0 1–5 Upper limit for the animation speed-up multiplier above
(Stamina) Guard Sprint Stamina Multiplier 1.1 0.1–5 Multiplier on the running stamina drain while guard-sprinting (shield or weapon/tool/fists), on top of vanilla's own drain. 1.0 = same as vanilla

Debug

[Debug]

Setting Default Description
(Enable) Verbose Log false Logs detailed [PPR-SHIELD]/[PPR-GUARD]/[PPR-EQUIP]/[PPR-SPRINT] diagnostics as Info-level lines. If you're reporting a bug, please turn this on, reproduce the issue, and send your LogOutput.log (BepInEx console log) along with your report — it makes the cause much easier to track down.

How It Works

Hold block → attack lands within 0.1s → Perfect Parry triggers
  → VFX appears (colored)
  → Press secondary attack within 1s → Counter fires at 2× speed
  → Incoming damage reduced by 50% during counter window

Hold block (any time) → projectile hits → Reflected at 2× damage
Perfect parry a projectile → Reflected at 3× damage

Reflection direction always follows where you are looking.


Requirements

  • Valheim 1.0.20
  • The only required dependency is BepInExPack — nothing else needs to be installed for PPR to work.

Compatibility

  • Compatible with most combat mods
  • Tested alongside Warfare — no conflicts
  • Compatible with Impetus — projectile reflection uses reflection-based setup to avoid conflicts
  • If using SecondaryAttacks, a cooldown indicator may briefly flash on counter — visual only, does not limit re-use
  • Confirmed working with AzuExtendedPlayerInventory 2.6.3's extended main inventory, including its added rows — its separate equipment/quick-slot panels are a different slot system and aren't covered by Shield Assignment
  • Safe to use alongside other mods that also react to the middle mouse button (or whatever key you've set) — Shield Assignment only acts when the hovered item is a shield
  • The small helper library used for the counter attack's speed boost (AnimationSpeedManager) is merged directly into PPR.dll — it ships as part of this mod and does not need to be installed separately, regardless of whether other mods also use it

Troubleshooting

Reporting any bug? Turn on [Debug] (Enable) Verbose Log, reproduce the issue, and send your LogOutput.log along with your report (see the Debug table above).

Game stuck on infinite loading?

This is a rare, intermittent issue we're still tracking down. If it happens to you:

  1. Look in your PPR plugin folder (BepInEx/plugins/LJS-PPR/) for a file named PPR-freeze-report.txt.
  2. This file is only created when the issue actually occurs — if you find it, please send it to us (along with roughly when it happened).
  3. It contains no personal data, just internal diagnostic info (timestamps, stack traces) to help pinpoint the cause.

Changelog

v1.2.10

Update notice: Updating from 1.2.9 — nothing to do, the new [Guard Sprint] config section is added automatically.

  • NEW Guard Sprint — sprint immediately while blocking (shield, weapon, tool, or bare fists), at a fixed speed penalty depending on what you're blocking with, applied/removed instantly. See the Features and Configuration sections above for details and defaults.
  • NEW Guard-sprint running stamina drain multiplier (default ×1.1) and leg animation sync, both configurable.
  • NEW The settings screen (panel titles, setting names, descriptions) and in-game text now follow the game's language (Korean/English) — switches live when you change the game's language, no restart needed.
  • Compatibility (Valheim 1.0.20) Rebuilt against the game's real 1.0.20 DLLs.

v1.2.9

Update notice: Updating from 1.2.8 — your existing assignments are kept, nothing to do. Updating from 1.2.7 or earlier — see "Updating from 1.2.8/1.2.7" above.

  • NEW Back + Auto-Equip — wheel-click cycling gained a 4th stage: Normal → Back Shield → Auto-Equip Shield → Back + Auto-Equip Shield → Normal. See the Shield Assignment section above for details.
  • CHANGED Role rule clarified: if another shield takes just one of the two roles away from a Back + Auto-Equip shield, it keeps the other role; cycling a role away always hands it back to whichever shield held it immediately before.

v1.2.8

Update notice: The old automatic "last-used shield" tracking is gone — see "Updating from 1.2.7" above. All other settings are kept; one setting was renamed ([Auto Shield Equip] (Enable) Auto-Equip Assigned Shield) and resets to its default once.

  • NEW Shield Assignment, Back Shield movement speed penalty — see the Features and Configuration sections above for details and defaults.
  • CHANGED Back Shield Guard and Auto Shield Equip now use the shield you've explicitly assigned instead of automatically tracking the last shield you used.
  • Compatibility (Valheim 1.0.17) Rebuilt against the game's real 1.0.17 DLLs. Confirmed working with AzuExtendedPlayerInventory 2.6.3's extended main inventory.

v1.2.7

Update notice: The plugin ID changed to LJS.PPR, so a new config file LJS.PPR.cfg is created and your previous PPR settings are not carried over — please set them again once (the old PPR config file in BepInEx/config can be deleted). Mod manager users: just update, old files are replaced automatically. Manual install users: delete the old PPR.dll (and its folder) from BepInEx/plugins before installing this version, or two copies will load at once.

  • NEW Auto Shield Equip, Back Shield Guard, Guard Durability, Equip Motion Cancel (including Hide/Show Hand Items on R) — see the Features and Configuration sections above for details and defaults.
  • NEW [Debug] (Enable) Verbose Log — off by default; see Troubleshooting below.
  • Stability (Valheim 1.0.16) Rebuilt against the game's real 1.0.16 DLLs so illegal access to non-public game members is caught at build time instead of crashing at runtime.
  • Stability Every patch is isolated behind a shared exception guard — a problem in one feature only disables that feature for the session, the rest of the mod and the game keep working.
  • Stability AnimationSpeedManager is now merged directly into PPR.dll instead of shipped as a separate file.

v1.2.6

  • Added a dedicated diagnostic report file (PPR-freeze-report.txt, created next to PPR.dll only if the infinite loading issue actually occurs) to make it easier to report and help track down the cause. No gameplay changes.

v1.2.5

  • FIX Fixed another rare cause of the intermittent multiplayer infinite loading issue — in certain timing situations the Perfect Parry effect could fail to clean up completely, which could eventually lead to the same freeze as before.

v1.2.4

  • FIX Blocking a ranged attack too late (outside the parry timing window) no longer triggers a reflect — it's now handled as a normal block, just like it should be.
  • Added extra logging around parries and damage reduction, so it's easier to see what happened in your log file.

v1.2.3

  • Added diagnostic logging to help investigate a rare intermittent multiplayer infinite loading issue. No gameplay changes.

v1.2.2

  • FIX Resolved an intermittent infinite loading issue in multiplayer, caused by a leftover parry effect that wasn't cleaned up properly

v1.2.1

  • FIX Projectile reflection now works for all types: arrows, rocks, Greydwarf stones, troll boulders, magic
  • FIX Resolved conflict with Impetus mod that caused reflection to fail silently
  • NEW Greydwarf rock (Aoe-type projectile) reflection support
  • FIX Look direction fallback when camera vector is zero

v1.2.0

  • NEW Perfect Parry VFX color customization — hex code in config, applied cleanly before particle play
  • NEW Vanilla vfx_blocked is suppressed on perfect parry and replaced with the colored version
  • NEW Projectile reflection on Perfect Parry (3× original damage, configurable)
  • NEW Projectile reflection on Normal Parry — any successful block (2×, configurable)
  • NEW Reflected damage uses attacker's pre-block damage as the base
  • NEW Reflection direction follows player look direction
  • NEW Ranged No Stagger — ranged attackers are not staggered on block/reflect
  • FIX Normal Parry Reflect works independently of the Perfect Parry enable toggle
  • TWEAK Default counter window: 1.0s (was 0.6s)
  • TWEAK Default counter speed: 2.0× (was 2.5×)
  • TWEAK Default VFX Y offset: 1.25 (was 2.5)

v1.0.0

  • Initial release
  • Perfect Parry detection with configurable timing window
  • Counter attack with animation speed boost
  • Damage reduction during counter window
  • VFX effect on successful parry

Made by LJS

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.