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.
balrond DualMastery
A simple mod allowing for dual wielding any onehanded weapons with it own skill
| Date uploaded | 3 days ago |
| Version | 0.3.8 |
| Download link | Balrond-balrond_DualMastery-0.3.8.zip |
| Downloads | 628 |
| Dependency string | Balrond-balrond_DualMastery-0.3.8 |
README
⚔️ Balrond Dual Mastery
Current documented version: 0.3.6
Balrond Dual Mastery adds a dedicated dual-wield combat system to Valheim. It allows the player to use two supported one-handed weapons at the same time, with independent weapon calculations, custom paired animations, a dedicated Dual Mastery skill, multiplayer support, and compatibility layers for other animation/skill mods.
Multiplayer: the mod is required on the server and on all clients joining that server.
✨ Key Features
- Dual wield two supported one-handed weapons.
- Dedicated Dual Mastery skill (
SkillTypeID874298). - Independent primary-hand and off-hand weapon calculations.
- Custom paired guard, combo, and secondary/power animations.
- Off-hand damage, force, resource cost, and XP scaling.
- Configurable primary and secondary animation-speed multipliers.
- Animation-authored
SPEEDevents supported by the paired clips. - Primary and secondary paired attacks aim toward the cursor/crosshair.
- Fast pair replacement through a configurable local grace window.
- Configurable local modifier for replacing only the off-hand item.
- Separate holster positioning for paired back weapons.
- ServerSync support for gameplay settings.
- Optional shudnal/ConfigurationManager integration through standard BepInEx config metadata.
- Soft compatibility with BetterArchery, WindstridesBowAnimations, OdinHorse, and SkillsReworked.
- No dependency on BalrondExtraSkills.
Balrond Dual Mastery is not compatible with other mods that implement their own dual-wield ownership for the same player hands.
⚔️ Dual Mastery Skill
The mod registers:
Name: Dual Mastery
Skill ID: 874298
Accepted compatibility aliases include:
DualMastery
Dual Mastery
DualWield
Dual Wield
BalrondDualMastery
874298
By default, successful paired attacks raise the Dual Mastery skill.
When SkillsReworked manages skill 874298, SkillsReworked owns progression and attribute mapping while DualMastery continues to own the combat effects.
BalrondExtraSkills is not required.
⚔️ Combat Behaviour
Primary attack
While a valid pair is active:
- the paired primary animation set is used;
- primary and off-hand damage are calculated independently;
- the off-hand strike receives the configured mastery and balance multipliers;
- attack direction is aligned toward the cursor/crosshair;
- the authored
SPEEDanimation event controls clip cadence, with the configured Primary Animation Speed applied as an additional multiplier.
Secondary attack
The paired secondary attack:
- uses the custom paired secondary/power animation;
- applies its own resource surcharge;
- applies the configured secondary damage multiplier;
- aims toward the cursor/crosshair;
- uses the authored
SPEEDevent plus the configured Secondary Animation Speed multiplier.
The normal weapon-specific alternate attack is therefore replaced while the Dual Mastery pair is active.
🗡 Equipment Rules
Dual Mastery owns only valid supported paired layouts.
A pair normally consists of two compatible one-handed weapons. Spears keep their special handling so vanilla spear throw behaviour is not replaced by the paired system.
Items that are not valid paired weapons — for example bows, crossbows, two-handed weapons, tools, staffs, and similar non-pair items — end the paired state and follow their normal equip behaviour.
Pair Swap Grace
Local setting:
2 - Equipment / Pair Swap Grace Period
Default: 1.0 s
Range: 0-3 s
Example with an active pair A + B:
- select weapon
C-> temporaryA + C; - select weapon
Dbefore the grace window ends -> final pairC + D.
Set the value to 0 to disable the grace behaviour.
This is a local player input setting and is not ServerSync-locked.
Replace Offhand Modifier
Local setting:
2 - Equipment / Replace Offhand Modifier
Default: LeftAlt
Hold the configured modifier while selecting:
- supported one-handed weapon -> replace only the left-hand item;
- shield -> replace only the left-hand item;
- torch -> replace only the left-hand item.
If the selected item is a bow, crossbow, two-handed weapon, tool, or another incompatible item, normal Valheim equip behaviour is used and the paired state ends.
This setting is local and is not ServerSync-locked.
⚙️ Configuration
Balrond Dual Mastery uses normal BepInEx configuration entries.
Gameplay settings are synchronized through ServerSync when appropriate. Local UI/input/visual settings remain client-side.
General
EnabledLock Configuration
Equipment
Allow Mixed Weapon SkillsSeparate Back WeaponsPair Swap Grace PeriodReplace Offhand Modifier
Combat defaults
Offhand Damage At Skill 0 = 0.55
Offhand Damage At Skill 100 = 0.80
Dual Wield Damage Scale = 0.75
Secondary Damage Multiplier = 1.08
Offhand Force At Skill 0 = 0.70
Offhand Force At Skill 100 = 0.95
Primary Extra Resource Ratio = 0.60
Secondary Extra Resource Ratio = 0.75
Resource Discount At Skill 100 = 0.20
Skill defaults
Mastery Progression Enabled = true
Primary Attack XP = 0.12
Secondary Attack XP = 0.18
Mastery XP Multiplier = 1.0
Animation defaults
Primary Animation Speed = 1.0
Secondary Animation Speed = 1.0
The animation-speed values are additional multipliers. Custom Dual Mastery clips can contain SPEED AnimationEvents, and those authored events remain part of the final playback cadence.
🎬 Animation Ownership and Compatibility
DualMastery avoids continuously fighting other animation mods for runtimeAnimatorController.
BetterArchery
BetterArchery is treated as a soft compatibility target. DualMastery only works with the controller that is actually live on the player and does not continually restore a stale BetterArchery controller.
WindstridesBowAnimations
When Windstride owns the bow/draw pose:
- DualMastery stops paired animation/controller writes;
- Windstride keeps ownership of bow-body posing;
- DualMastery does not apply its paired Animator speed while the bow pose is active.
Transitions from a paired loadout to a bow keep the equip transition stable instead of replacing the controller mid-transition.
OdinHorse
Mounted combat has priority over DualMastery animation ownership.
While OdinHorse owns mounted combat, DualMastery does not take over:
- the mounted AnimatorController;
- mounted root/aim rotation;
- OdinHorse attack cadence;
- mounted attack type handling.
OdinHorse 1.8.x lance behaviour is also treated as reserved mounted functionality and is not converted into a Dual Mastery pair.
SkillsReworked
SkillsReworked can be installed without BalrondExtraSkills.
DualMastery owns its SkillDef, combat effects, and attack XP emission. When SkillsReworked manages Dual Mastery, SkillsReworked owns the resulting progression/attribute level and DualMastery reads that effective level for scaling.
shudnal/ConfigurationManager
ConfigurationManager is optional.
DualMastery uses standard BepInEx ConfigEntry, ConfigDescription, AcceptableValueRange, and reflection-compatible ConfigurationManager metadata. No hard reference to ConfigurationManager is required.
💀 Death and Tombstone Behaviour
DualMastery does not replace Valheim's death-loot policy.
Vanilla Player.CreateTombStone and the current world modifiers remain authoritative for:
- normal tombstone transfer;
- Keep Inventory;
- Keep Equipment;
- Delete Items;
- Delete Unequipped.
During the death transaction, DualMastery prevents its off-hand normalization from moving the left weapon back into the right hand while vanilla is processing UnequipAllItems.
After vanilla finishes, DualMastery only repairs hand references based on which items actually remain in the player's inventory.
📂 Installation
Install with a mod manager or place the compiled release in:
BepInEx/plugins
The server and every connecting client must use a compatible DualMastery build.
Restart the game after installation or update.
⚠️ Compatibility Notes
Tested/audited compatibility targets for the current development line include:
- BetterArchery 2.0.2
- WindstridesBowAnimations 1.1.1
- OdinHorse 1.8.x
- SkillsReworked 2.0.2
- shudnal/ConfigurationManager
- standalone DualMastery
These integrations are soft/capability-based. External mods are not compile-time dependencies unless explicitly required by the project itself.
💬 Support & Feedback
Balrond's Den Discord
https://discord.gg/Jfp8T5N7Pv
Support development:
https://ko-fi.com/balrond1020
CHANGELOG
Balrond Dual Mastery — Changelog
v0.3.14
- compatibility fix for SkillsReworked
- hotfixes
v0.3.11
- console spam fix
v0.3.10
- skill save fix
- initial attack lagspike save
v0.3.8
- animation swap and hotfixes
v0.3.7
- tooltip fix
v0.3.6
Equipment / input
- Added configurable local Pair Swap Grace Period.
- Default grace window is
1.0 s, configurable from0to3 s. - While already dual wielding, two quick weapon selections can replace the complete pair in click order.
- Added configurable local Replace Offhand Modifier.
- Default modifier is
LeftAlt. - Modifier + supported one-handed weapon replaces only the left-hand item.
- Modifier + shield or torch replaces only the left-hand item.
- Modifier + bow/crossbow/2H/tool/incompatible item falls back to normal Valheim equip behaviour and ends the pair.
- Pair-swap grace and off-hand modifier are local settings and are not ServerSync-locked.
Animation
- Added runtime handling for authored
SPEEDAnimationEvents in Dual Mastery clips. SPEEDcan use float, string, or integer event parameters.- Multiple
SPEEDevents in one clip are supported. - Primary/Secondary Animation Speed config values now act as additional tuning multipliers on top of authored clip speed.
- OdinHorse mounted cadence and Windstride bow cadence retain ownership when active.
Targeting
- Primary paired attacks now use cursor/crosshair-facing logic.
- Cursor-facing is refreshed immediately before the attack trigger to reduce misses caused by character-facing direction.
- Existing mounted OdinHorse ownership exclusions remain in place.
Documentation / resources
- Clarified that the
balronddualmasteryAssetBundle anddualwield.pngskill icon are required mod resources and must not be removed from the project/build pipeline.
v0.3.5
OdinHorse 1.8.x compatibility
- Updated OdinHorse compatibility for the 1.8.x branch.
- Added capability handling for the new mounted lance/jousting functionality.
- OdinHorse lance states are reserved for OdinHorse and are not treated as Dual Mastery pair weapons.
- Compatibility discovery now prefers the actual
OdinHorse.MountedAttackssurface instead of relying on overly broad reflection matching. - Preserved soft/version-agnostic compatibility where possible.
- Adjusted initialization ordering around OdinHorse/BetterArchery/Windstride animation ownership.
v0.3.4
Equip transition stability
- Unified transitions from a valid pair to non-pair equipment.
- Pair -> bow, crossbow, 2H, tool, Hammer, staff, shield, and similar transitions no longer intentionally replace the runtime AnimatorController merely because pair intent ended.
- Dual Mastery melee overrides are restored in-place so vanilla
EquipItem/equip_hipcan complete on a stable controller. - Corrected the regression that could enter the sitting animation when switching from dual wield to a bow.
Death / tombstone handling
- Made
Humanoid.UnequipAllItemsan atomic operation for Dual Mastery normalization. - Prevented the left-hand weapon from being promoted back to the right hand while vanilla death processing is moving equipment.
- Kept vanilla
Player.CreateTombStoneand world modifiers authoritative. - Added stale off-hand/orphan reference cleanup after inventory ownership changes.
Diagnostics
- Guard/idle clips are no longer incorrectly required to contain a
Hitevent. - Attack clips can copy normalized
Hittiming from another valid captured attack source if the exact source clip has no usable event.
v0.3.3
Bow animation ownership
- Added stronger WindstridesBowAnimations ownership handling.
- Prevented Dual Mastery from continuously rebasing/restoring controllers during active bow posing.
- Added bow ownership grace to avoid one-frame ownership thrashing during draw/release.
- Prevented Dual Mastery Animator-speed control while Windstride owns bow cadence.
- Preserved OdinHorse as the highest-priority mounted animation owner.
v0.3.2
Animation transition fix
- Fixed a regression where ending pair intent could swap the runtime AnimatorController in the middle of an equip transition.
- Restored the stable model of keeping the same controller instance while only enabling/disabling Dual Mastery melee overrides in-place.
- Corrected pair -> Hammer/tool transitions that could fall into the sitting state.
v0.3.1
Compatibility merge
- Merged the stable runtime ownership model with the newer version-agnostic compatibility branch.
- Preserved BetterArchery live-controller sharing.
- Preserved Windstride bow ownership.
- Preserved OdinHorse exclusive mounted ownership.
- Preserved Harmony ordering required by the animation compatibility layer.
- Added/retained ConfigurationManager metadata and BepInEx acceptable ranges.
- Added SkillsReworked attribute-level ownership support.
- Added Skill ID collision protection for Dual Mastery skill
874298.
v0.3.0
Version-agnostic compatibility groundwork
- Added capability-oriented discovery for external compatibility mods.
- Added earlier Dual Mastery skill registration support for SkillsReworked cache initialization.
- Expanded compatibility work for BetterArchery, Windstride, OdinHorse, and SkillsReworked.
v0.2.11
- Improved BetterArchery, Windstride, OdinHorse, and SkillsReworked arbitration.
- Added stronger ConfigurationManager metadata/range support.
- Added additional AnimatorOverrideController nesting safeguards.
- Confirmed DualMastery can operate with SkillsReworked without BalrondExtraSkills.
v0.2.10
- Added SkillsReworked compatibility for Dual Mastery skill
874298. - Added accepted skill aliases including
DualMastery,Dual Wield, and874298. - Kept native Dual Mastery progression when SkillsReworked is absent.
v0.2.9
- Introduced central external animation ownership/arbitration.
- Improved BetterArchery live-controller handling.
- Added OdinHorse and Windstride compatibility groundwork.
v0.2.8
- Fixed skill gain issue.
- Fixed targeting / missed-hit issue.
- Fixed special attack trigger issue.
- Added damage scale configuration.
- Adjusted damage scaling.
- Fixed animation transition issue.
v0.2.7
- Added BetterArchery integration.
- Fixed sitting animation issue.
- Fixed leftover left-hand activation when the pair is no longer valid.
v0.2.6
- Fixed multiplayer animation synchronization.
v0.2.5
- Animation adjustments.
v0.2.4
- Mod rebuild.
v0.2.3
- Deep North fix.
v0.2.2
- Fixed spear usage.
- Fixed animation handling.
- Adjusted damage.
v0.2.1
- Fixed skill gain issue.
v0.2.0
- Initial release.