HarnessForceJade
Harness Force gives you a full charge on every perfect parry, with no need to hold attack beforehand. It waits for your next attack.
模組介紹 作者原文
Harness Force Jade
Reworks the Harness Force jade so a perfect parry gives you a full charge on its own,
instead of only finishing a charge you were already holding.
What changed
Stock, the jade runs on every perfect parry, but the charge it grants bails out immediately
unless the attack button happens to be held at that moment:
public void ChargeAttackFullCharge()
{
if (isCharged) return;
if (!actions.Attack.IsPressed) return; // "hold it before the parry"
isCharged = true;...
}
So the jade is really "finish the charge you already started". With this mod it becomes
"every perfect parry hands you a full charge", banked and glowing, waiting for you to use it.
Nothing else about parrying changes. The jade was already perfect-parry-only - it fires from
PlayerParryState.AccurateParry, the accurate branch of Parried - and that is left alone.
Why it needs two patches
Granting the charge is one line. Keeping it is the harder half. The game's release test is:
isReleasingChargeAttack => (!actions.Attack.IsPressed || releaseBuffered) && IsAttackCharged;!IsPressed is the release signal, so a charge handed over while the button is up reads as
"charged and released". Player.AttackCheck is polled every frame from sixteen player states
and would fire the charged attack on its own, a frame after the parry, with no input from you.
The second patch holds that release back until you actually press attack.
A banked charge is dropped the same ways a normal one is: taking a hit, dying, drawing the
weapon, or leaving gameplay.
Configuration
BepInEx/config/custom.HarnessForceJade.cfg, or F1 in-game with ConfigurationManager
installed. Everything applies live.
| Setting | Default | What it does |
| --- | --- | --- |
| Enabled | true | Off restores the stock jade without removing the mod. |
| RequireJadeEquipped | true | Off gives you the effect without spending the jade slot. |
| FireOnAttackPress | true | On, the banked charge comes out the moment you press attack. Off, pressing attack does a normal swing and the charged attack comes out on release, the way charging normally works. |
| BankSeconds | 0 | How long a banked charge waits. 0 means until you use it. When it does expire the charge is dropped, not fired. |
| LogChargeBank | false | Logs every charge banked and released. Noisy; for investigating only. |
Compatibility
Works alongside Perfect Parry - widening the perfect window widens what triggers this jade,
since both hang off the same accurate-parry branch. No interaction with Any Direction Parry or
Counter Charge Tuner.
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:
Built against Nine Sols with BepInEx 5.4.23.5 and HarmonyX 2.9.
安裝與使用 安裝:BepInEx 外掛
- 本站下載的壓縮包就是模組本體,通常是 BepInEx 外掛(解壓後得到 .dll 或外掛資料夾)。
- 建議流程:用社群模組管理器(如 r2modman)選中本遊戲後匯入該模組,管理器會自動裝好 BepInEx 前置並處理依賴。
- 手動流程:先在遊戲目錄裝好 BepInEx 載入器,再把解壓出的 .dll 或外掛資料夾放進 BepInEx/plugins/。
- 啟動遊戲,BepInEx 控制台會列印載入日誌;確認這個模組出現在日誌裡即為安裝成功。
帶「前置依賴」的模組需要一併安裝,否則不會載入。功能開關通常在遊戲內或外掛自帶的設定檔裡調整。
下面這些內容需要先安裝,否則該模組不會生效: