Default grace window is 1.0 s, configurable from 0 to 3 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 SPEED AnimationEvents in Dual Mastery clips.
SPEED can use float, string, or integer event parameters.
Multiple SPEED events 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 balronddualmastery AssetBundle and dualwield.png skill 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.MountedAttacks surface 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_hip can 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.UnequipAllItems an 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.CreateTombStone and 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 Hit event.
Attack clips can copy normalized Hit timing 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.