CounterChargeTuner
Retimes the Unbounded Counter charge: shorter hold to trigger, and it loops instead of expiring until you release parry.
| Last updated | an hour ago |
| Total downloads | 0 |
| Total rating | 1 |
| Categories | Mods |
| Dependency string | Supidowagon-CounterChargeTuner-1.5.2 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305README
CounterChargeTuner
Retimes the Unbounded Counter (ParryCounter). By default it triggers after holding parry
for 0.2s instead of 0.33333s, and stays available for as long as you keep holding
instead of expiring after 1.4s.
How it works
Player.ParryCounterCheck decides whether holding parry enters the counter:
if (IsSlowWalk) return false;
if (IsAirBorne || !mainAbilities.ParryCounterAbility.IsActivated) return false;
if (actions.Parry.IsPressed
&& parryIsPressCondition.TrueTimer > 0.33333f
&& parryIsPressCondition.TrueTimer < 1.4f)
{
ChangeState(PlayerStateType.ParryCounter);
return true;
}
Both bounds are ldc.r4 constants. A Harmony transpiler swaps each one for a call to a
config-backed getter, so the values stay editable at runtime rather than being baked in
when the patch is applied.
Removing the upper bound works because the press timer resets when the button is released, so "no maximum" means the counter stays armed exactly as long as parry is held.
Nothing else about the counter changes - it still requires the ParryCounterAbility
unlock, still requires being grounded, and still resolves the same way once it fires.
Configuration
Editable in-game with BepInEx ConfigurationManager (F1), or in
BepInEx/config/custom.CounterChargeTuner.cfg.
| Setting | Default | Vanilla | Effect |
|---|---|---|---|
MinHoldSeconds |
0.2 |
0.33333 |
How long parry must be held before the counter triggers. |
MaxHoldSeconds |
0 |
1.4 |
How long it stays available. 0 or less means no limit. |
Verifying it took effect
On startup the log should show:
Patched method: Player.ParryCounterCheck
ParryCounterCheck retimed: min hold 0.33333s -> 0.2s, max hold 1.4s -> unlimited (until parry is released)
If the game ever changes those constants the transpiler logs an error instead of silently doing nothing.
Built with AI
Written with Anthropic's Claude (Claude Code, Opus 5) - the decompilation work, the C#, the tests and these docs. Design decisions and in-game testing are supidowagon's.
There is a behaviour test suite that runs the compiled DLL against a transcription of the game code it patches, and every patch is commented with the decompiled method it targets. Source and tests: https://github.com/supidowagon/parrymodifiers
Built against Nine Sols with BepInEx 5.4.23.5 and HarmonyX 2.9.