Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
PPR
Perfect parry & counter, projectile reflect, shield roles, guard durability, instant equip, Guard Sprint, and Stagger Reduction (your Blocking skill reduces stagger buildup while guarding). Updating from 1.2.10: nothing to do.
By LJS
CHANGELOG
Changelog
v1.2.11
Update notice: Updating from 1.2.10 — nothing to do. The new [Stagger Reduction] config section is added automatically with its defaults (on). To keep vanilla stagger, set (Enable) Stagger Reduction to false.
- NEW Stagger Reduction — your Blocking skill now slows how fast the stagger gauge fills while you block, whether with a shield, a weapon, a tool, your bare fists, or the Back Shield guard. Scales with your skill: up to 50% less at Blocking 100 (configurable; e.g. Blocking 40 → 20% less). Only affects your own character.
- NEW Optionally apply the same reduction to hits you don't block (off by default).
- Unchanged: the gauge's maximum, how fast it recovers, and the guard break when it fills up — it just fills more slowly. Parry / perfect parry timing and effects are unchanged.
- FIX Settings screen: section titles and setting names now actually show in Korean when the game language is Korean (1.2.10 only translated the descriptions).
- Compatibility (Valheim 1.0.21) Rebuilt against the game's 1.0.21 DLLs.
v1.2.10
Update notice: Updating from 1.2.9 — nothing to do. The new [Guard Sprint] config section is added automatically with its defaults.
- NEW 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, applied (and removed) the instant you start/stop guarding — no ramp-up or ramp-down.
- NEW Speed penalty (configurable) — Buckler-class shields 0%, Normal-class shields 10%, Tower-class shields 20%, anything else (weapon/tool/fists) 0%.
- NEW Guard-sprint running stamina drain is multiplied by a configurable amount (default ×1.1), on top of whatever vanilla would already drain (Run skill, equipment, status effects, other mods).
- NEW Requires Blocking skill 20+ by default to guard-sprint (configurable, 0 = no requirement).
- NEW Leg animation sync (configurable, capped) while guard-sprinting, to reduce foot-sliding — and shield sub-class force-override lists for modded shields that get misclassified.
- NEW The settings screen and in-game text now follow the game's language (Korean/English).
- 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 Back Shield / Auto-Equip Shield assignments are kept as-is, nothing to do. Updating from 1.2.7 or earlier — see the v1.2.8 notice below.
- NEW Back + Auto-Equip — wheel-click cycling now has a 4th stage: Normal → Back Shield → Auto-Equip Shield → Back + Auto-Equip Shield → Normal. A shield assigned to Back + Auto-Equip plays both roles at once: it's worn on your back (with the back guard and 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 goes back to your back when you put the weapon away. Shown with a split badge (left orange "B" / right teal "A"), also reflected in the item tooltip.
- CHANGED Role rule clarified: 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.
v1.2.8
Update notice: The old automatic "last-used shield" tracking is gone. 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 their name.
- NEW 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" badge) → Auto-Equip Shield (teal "A" badge) → Normal. Each role is held by only one shield at a time — assigning a role to a different shield moves it there, and if that shield later cycles the role away, it's handed back to whichever shield held it just before. Shown as a badge on the inventory and hotbar slot, 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. (
[Shield Assignment]— Assign Key default Mouse2, Show Role Icons default on) - CHANGED Back Shield Guard and Auto Shield Equip now use the shield you've explicitly assigned above, instead of automatically tracking whichever shield you used last.
- NEW The movement speed penalty of the shield currently worn on your back is applied to your character, same as if it were held in hand.
- Compatibility (Valheim 1.0.17) Rebuilt against the game's real 1.0.17 DLLs.
- Compatibility 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 — PPR only reacts when the hovered item is a shield.
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 (Thunderstore Mod Manager / r2modman / Gale): just update, old files are replaced automatically. Manual install users: delete the old PPR.dll (and the folder that contains it) from BepInEx/plugins before installing this version, or two copies will load at once and effects will be doubled or break.
- NEW Auto Shield Equip — switch to a one-handed weapon with an empty off-hand and PPR automatically re-equips the last shield you used. (
[Auto Shield Equip] (Enable) Auto-Equip Last Shield, default on) - NEW Back Shield Guard — while your last-used shield is in your inventory but not in hand, it's shown on your back and passively blocks attacks that land from behind, using the same block-power math as a normal front guard. (
[Back Shield Guard], default on — includes rear cone half-angle and back-worn shield position/rotation offsets) - NEW Guard Durability — when a guard (vanilla front block/parry or the back guard above) actually reduces incoming damage, skip your armor's durability loss and/or your blocker's own durability loss, per category. (
[Guard Durability]— armor protection on by default; blocker categories Weapon/Tool on by default, Shield off by default/vanilla-like) - NEW Equip Motion Cancel — instantly equip/unequip items in the categories you enable, skipping vanilla's equip queue animation and progress bar; also applies to hiding/showing hand items with the Hide key (R), including vanilla's own automatic use of the same function (e.g. auto-hiding weapons while swimming). Equip sounds/effects and vanilla's equip conditions (e.g. can't swap mid-attack) are unchanged. (
[Equip Motion Cancel]— master toggle + one toggle per category: Shield/Helmet/Chest/Legs/Cape/Utility/Trinket/Weapon/Tool/Hide-Show, all on by default) - NEW
[Debug] (Enable) Verbose Log— off by default; turn on and send yourLogOutput.logif you're reporting a bug. - Stability (Valheim 1.0.16) Rebuilt against the game's real 1.0.16 DLLs instead of a "publicized" reference, so illegal access to non-public game members is now caught at build time instead of crashing the game at runtime; fixed the access-level issues this uncovered (including a vanilla method overload that gained a parameter in 1.0).
- Stability Every patch is isolated behind a shared exception guard — if one feature hits an unexpected error (including a future game update changing something this mod touches), only that one feature logs an error and turns itself off for the rest of the session; player loading, monster AI, and the rest of the mod keep working normally.
- Stability
AnimationSpeedManager(used for the counter attack's speed boost) is now merged directly into this mod's own DLL instead of shipped as a separate file, so it no longer depends on any other mod being present or on a particular load order.
v1.2.6
- Added a dedicated diagnostic report file (
PPR-freeze-report.txt, created next toPPR.dllonly 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 against all ranged attack types (arrows, rocks, trolls, magic) — previously failed due to mod compatibility issue with Impetus
- FIX Reflection no longer errors when other mods patch
Projectile.Setupwith null item checks - NEW Greydwarf rock (Aoe-type projectile) reflection support added
- FIX Look direction fallback to
transform.forwardwhenGetLookDir()returns zero vector
v1.2.0
- NEW Perfect Parry VFX color customization via hex code in config (default:
#4DB8FFblue) - NEW Vanilla
vfx_blockedsuppressed on perfect parry — replaced with custom-colored version of the same effect; normal parry still shows original white vfx_blocked - NEW Projectile reflection on Perfect Parry — 3× attacker's original damage (configurable)
- NEW Projectile reflection on Normal Parry — any successful block reflects at 2× (configurable)
- NEW Reflected damage uses attacker's pre-block damage as the base value
- NEW Reflection direction follows player look direction
- NEW Ranged No Stagger — ranged attackers are not staggered when projectile is blocked or reflected
- FIX Normal Parry Reflect now works independently of the Perfect Parry enable toggle
- TWEAK Default counter input window: 1.0s (was 0.6s)
- TWEAK Default counter animation 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 (default 0.1s)
- Counter attack triggered by secondary attack within counter window
- Counter animation speed multiplier
- Damage reduction during counter window (default 50%)
- VFX effect above player head on successful parry