You are viewing a potentially older version of this package. View all versions.
sighsorry-Dive_In-1.1.9 icon

Dive In

Diving underwater with configurable controls, Fast Swim, surface/midwater stamina regen, and depth drain. Configured creatures can chase and navigate underwater. Includes water combat/equipment, localized key hints, and improved underwater visuals.

Date uploaded 5 hours ago
Version 1.1.9
Download link sighsorry-Dive_In-1.1.9.zip
Downloads 126
Dependency string sighsorry-Dive_In-1.1.9

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2333 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2333

README

DiveIn

DiveIn adds configurable diving and swimming for players and configured creatures in Valheim.

Normally, creatures cannot follow a diving player far below the surface. DiveIn lets configured creatures chase, patrol, and attack underwater while adding player depth controls, resource tuning, water combat, key hints, and underwater visuals.

Serpent chase

Underwater serpent chase

Player diving

  • Ascend and descend with configurable keyboard shortcuts or the corresponding gamepad controls.
  • Surface and midwater stamina regeneration are configured separately.
  • Idle underwater stamina drain and moving swim drain can scale with liquid depth.
  • Fast Swim supports press or toggle input, with separate speed and stamina multipliers.
  • Swim skill and encumbrance have independent speed multipliers.
  • Surface swimming retains the vanilla swim depth; DiveIn changes depth only while diving.
  • Attacking, secondary attacking, and guarding temporarily take priority over swim movement.
  • Player-owned underwater projectiles can use synchronized lifetime, speed, and damage multipliers.
  • Equipment is usable in water by default; a synchronized prefab blacklist keeps restrictions on listed items without propagating armor or accessory entries to hand equipment. Listed hand items retain vanilla hand-item hiding.
  • Swimming key hints use the active keyboard or gamepad bindings and supported Valheim languages.

Creature diving

  • Configured creature prefabs stop avoiding water and can navigate underwater.
  • Passive creatures patrol within per-group minimum, center, and maximum depths.
  • Alerted creatures follow targets within their active depth limits.
  • Optional spawn-depth preservation prevents underwater spawns from first floating to the surface.
  • Optional shallow-water flee behavior makes a creature retreat until it clears the configured depth buffer.
  • Per-group avoidance steering can be disabled for prefabs that jitter with angled obstacle sampling.
  • Serpent movement retains the vanilla stopping distance and swoop movement while using DiveIn depth navigation.

DiveIn.yaml

The server/source-of-truth instance creates BepInEx/config/DiveIn.yaml when it is missing. Clients use the synchronized server value while connected.

# Unknown or duplicate keys are errors and keep the previous applied settings.
surface_patrol:
  passive_min_depth: 0
  passive_center_depth: 10
  passive_max_depth: 20
  active_min_depth: 0.25
  active_depth_adjust_speed: 2
  shallow_water_flee_depth: 0
  preserve_spawn_depth: false
  avoidance_steering: true
  prefabs:
    - Leech
    - Abomination
    - Serpent
    - BonemawSerpent

# Disable angled avoidance only for prefabs that need it.
mods_surface_nosteering:
  passive_min_depth: 0
  passive_center_depth: 10
  passive_max_depth: 20
  active_min_depth: 0.25
  active_depth_adjust_speed: 2
  shallow_water_flee_depth: 0
  preserve_spawn_depth: false
  avoidance_steering: false
  prefabs:
    - SA_WhiteShark

Rules:

  • A prefab may be assigned only once; the first assignment wins.
  • Missing optional fields use DiveIn defaults.
  • Negative and out-of-range depths are normalized and logged.
  • NaN, infinity, malformed YAML, unknown keys, and duplicate keys are rejected without replacing the last valid configuration.
  • A local YAML change is ignored while remote synchronized values are active.

BepInEx configuration

DiveIn creates BepInEx/config/sighsorry.DiveIn.cfg. That generated file is the source of truth for the complete setting list, descriptions, defaults, ranges, and synchronization markers. The README intentionally does not duplicate the generated configuration block, so code and documentation cannot drift independently.

The configuration is grouped into:

  • General server locking
  • Player controls and water equipment
  • Surface and midwater stamina/eitr regeneration
  • Idle, depth, base, and Fast Swim stamina drain
  • Swim skill, Fast Swim, and encumbered swim speed
  • Underwater projectile lifetime, speed, and damage
  • Underwater darkness and murkiness

The ascend key, descend key, and Fast Swim input mode are client-side. Settings marked [Synced with Server] are controlled by the server when configuration locking is enabled.

Building

dotnet build DiveIn.sln -c Debug

For a non-default Valheim installation, pass the game root explicitly:

dotnet build DiveIn.sln -c Debug -p:GamePath="D:\SteamLibrary\steamapps\common\Valheim"

A normal build writes only to the project output directories. To copy the merged DLL to the BepInEx plugin path derived from GamePath, opt in explicitly:

dotnet build DiveIn.sln -c Debug -p:DeployToGame=true

Change the release version with one explicit command:

dotnet msbuild DiveIn.csproj -t:SetVersion -p:ReleaseVersion=1.2.0

This updates both Plugin.cs ModVersion and the tracked Thunderstore/manifest.json. It does not build the project.

On Windows, dotnet build DiveIn.sln -c Release verifies that the compiled assembly, ModVersion, and the tracked manifest have the same version before creating the Thunderstore and Nexus archives. A mismatch fails the build before either ZIP is written.

Credits

The player diving implementation includes code derived and modified from UnderTheSea.

Original DiveIn repository: sighsorry1029/DiveIn

CHANGELOG

Changelog

1.1.9

  • Fixed swimming equipment bypass being disabled by a false branch-target validation failure, which caused repeated startup warnings and left vanilla swimming restrictions active.
  • Changed the synchronized Water Equipment Blacklist to preserve restrictions per listed item: listed armor and accessories no longer stow unrelated hand equipment, while listed hand items retain vanilla hand-item hiding.
  • Improved shallow-water flee behavior so configured creatures keep retreating until they clear the exit-depth buffer without skipping vanilla sleep, riding, event, or despawn processing.
  • Restored vanilla serpent stopping distance and swoop movement while using bounded local steering lookahead for smoother underwater pursuit.
  • Hardened DiveIn.yaml reloads and validation: rapid saves are no longer dropped, duplicate content is ignored, non-finite values keep the last valid configuration, and supported depth limits are normalized with warnings.
  • Improved swimming exception recovery and key-hint stability by reliably restoring temporary movement state, cleaning failed hint clones, and rebuilding layouts only when their content or visibility changes.
  • Improved underwater camera, fog, and surface-material restoration so DiveIn does not overwrite newer environment or mod changes when leaving the water.
  • Improved reload and shutdown cleanup, including restoration of configured creatures' original swim depth and removal of stale per-creature tracking state.
  • Added a synchronized version-update command and fail-fast Release packaging checks; normal builds no longer deploy to the game unless explicitly requested.

1.1.8

  • Fixed Space-only ascent stopping just below the surface unless a movement key was also held.
  • Players now smoothly level their swimming posture when surfacing, without requiring forward movement input.

1.1.7

  • Fixed visible water-zone seams and stale surface material state when viewing waves from underwater.
  • Improved configured monster avoidance steering stability near obstructed routes.
  • Added the per-group avoidance_steering field to DiveIn.yaml; existing files default to true, while false keeps depth behavior and makes the group swim directly toward its target.
  • Moved SA_WhiteShark into the generated mods_surface_nosteering sample group to avoid its underwater left-right jitter.
  • Improved WeaponHolsterOverhaul compatibility by restoring hidden blocking equipment only once on the initial block input and only when no blocker is already equipped.

1.1.6

  • Improved shallow-dive camera behavior by keeping the camera below the water surface while the player's head is submerged, reducing abrupt transitions to raw unstyled water and seabed visuals near the surface.

1.1.5

  • Encumbered players can no longer use Fast Swim; its toggle state is cleared and its key hint is hidden until they are no longer encumbered.
  • Added a synced Encumbered Swim Speed Multiplier setting (default 0.5, range 0.1-1.0) for tuning normal swim speed while encumbered.

1.1.4

  • Fixed occasional flat square water-surface visuals left behind after diving.
  • Improved the view from underwater so the surface keeps wave and water shader details when looking up.

1.1.3

  • Fast Swim can now use Toggle mode, which keeps the existing press-to-toggle behavior, or Press mode, which keeps Fast Swim active only while the vanilla run key is held.

1.1.2

  • Added per-group DiveIn.yaml monster tuning fields: active_min_depth, shallow_water_flee_depth, and preserve_spawn_depth.
  • Existing DiveIn.yaml files remain compatible; missing new fields use defaults of active_min_depth: 0.25, shallow_water_flee_depth: 0, and preserve_spawn_depth: false.
  • Newly generated DiveIn.yaml files include the new fields for each group, so customized YAML users can copy only the fields they want to tune.
  • Changed the default underwater projectile lifetime, speed, and damage multipliers to 0.5 for player-owned projectiles fired underwater.

1.1.1

  • Added synced underwater projectile multipliers for player-owned projectiles fired underwater, allowing servers to reduce projectile lifetime, speed, and damage in underwater combat.
  • Fixed DiveIn swimming key hints so Fast Swim, Descend, and Ascend labels/keys are refreshed correctly instead of inheriting stale vanilla combat hint text.

1.1.0

  • Added Swim Stamina Drain Base Multiplier so servers can tune vanilla moving swim stamina cost before depth and Fast Swim multipliers.
  • Added Multiplicative Swim Stamina Modifiers so swim stamina status effects such as MeadSwimmer and Eikthyr stack multiplicatively during actual swim stamina consumption.
  • Moving swim stamina drain now scales from the player's actual vanilla swim drain, including Swim skill, equipment, and status effects.
  • Reorganized swim-related config sections into Regen Rate, Stamina Drain, and Swim Speed.
  • Optimized swim resource adjustment, underwater visual state handling, swimming key hints, and configured monster dive lifecycle code for simpler and safer behavior.

1.0.9

  • Added Surface Eitr Regen Rate and Midwater Eitr Regen Rate config options to scale total eitr regeneration while swimming.

1.0.8

  • Added Midwater Idle Stamina Drain Per Depth so idle underwater stamina drain scales with current liquid depth.
  • Minor optimizations and config cleanup.

1.0.7

  • Split water stamina regeneration into separate Surface and Midwater rates so stamina can recover only after surfacing by default.
  • Added depth-scaled idle underwater stamina drain to simulate holding breath.
  • Added Fast Swim Stamina Drain Multiplier so Fast Swim stamina cost can be configured separately from Fast Swim speed.
  • Renamed stamina and Fast Swim config options for clearer per-depth behavior.
  • Grouped stamina and speed config options into Swim Stamina and Swim Speed sections.
  • Underwater visual styling is now always enabled; Darkness and Murkiness moved to Player Diving with softer synced defaults.

1.0.6

  • Improved configured creature underwater AI near the ocean floor.
  • Unified underwater route and steering checks into a single move plan cache.
  • Removed Dive AI Quality config; underwater AI now uses high-quality behavior by default.
  • Improved player ascent when stuck against the ocean floor.
  • Added configurable ascend/descend dive keys and localized swimming key hints, including gamepad-aware key hints and live Fast Swim On/Off hints.
  • Fixed vanilla hide/show weapon input so hidden weapons can be drawn again while underwater.
  • Reworked underwater combat so attack, secondary attack, and guard inputs stop swim movement and take priority.
  • Preserved the player's vanilla surface swim depth instead of replacing it with a DiveIn hardcoded value.
  • Reworked underwater water-surface rendering to preserve above-surface visuals while reducing sky-through-water and waterline clipping issues.
  • Reworked run-swimming so the run key toggles Fast Swim at Swim skill 0, consumes extra stamina, and lets Swim skill speed be configured as a multiplier.
  • Setting Swim Run Speed Multiplier to 1 disables Fast Swim and hides its key hint.
  • Simplified depth stamina drain config to one per-meter multiplier and applied depth/run stamina drain multiplicatively.

1.0.5

  • Added underwater visual config options.

1.0.4

  • Changed the DiveIn.yaml schema. Delete the existing DiveIn.yaml and restart the game to regenerate it.
  • Added more creatures from other mods to the default DiveIn.yaml.

1.0.2

  • Made swim speed increase according to Swim skill level.
  • Final swim speed = base swim speed x [1 + (config value - 1) x (Swim skill level / 100)^1.5].

1.0.1

  • Replaced the incorrect DLL from the initial package.

1.0.0

  • Initial release.