Supidowagon-CounterChargeTuner icon

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-5.4.2305 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2305

README

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.