


Version 0.1.0 | BepInEx mod for Valheim | Requires Jotunn
Per-player ship management. Assign a Flagship and a Boat, recall either from anywhere in the world with a single keypress, and track both on the minimap at all times.
WindheimShips-0.1.0.zip.plugins/WindheimShips/Windheim.dll into BepInEx/plugins/WindheimShips/.WindheimShips runs on both client and server. Install the DLL in the server's BepInEx/plugins/ folder. Config sync is handled per-player via ZDO; no additional server-side setup is required.
Config file: BepInEx/config/com.TAIJI.windheim.cfg
Generated automatically on first launch. Open in any text editor or use the BepInEx ConfigurationManager in-game.
| Setting | Default | Description |
|---|---|---|
| Enabled | true | Master switch. Set false to disable all features without uninstalling. |
| LogLevel | info | Log verbosity: none / error / info / debug |
| ShowWelcomeMessage | true | Print version info to BepInEx log on startup. |
| Setting | Default | Description |
|---|---|---|
| EnableFleet | true | Enable the fleet system entirely. |
| EnableSecondaryShip | true | Enable the Boat slot. |
| DefaultSecondaryType | Raft | Prefab used when spawning a new Boat (Raft / Karve / VikingShip / Drakkar). |
| IndestructibleSecondary | true | Boat cannot be destroyed. |
| AutoAssignPrimaryOnHelm | true | Taking any helm auto-assigns it as Flagship. |
| OccupiedShipMode | block | What to do when recalling a ship occupied by another player (block / recall). |
| PersistFleetBetweenSessions | true | Save fleet assignments between game sessions. |
| Setting | Default | Description |
|---|---|---|
| EnableRecall | true | Enable the ship recall feature. |
| RecallKey | K | Hotkey to open the Fleet recall panel. |
| Cooldown | 3 | Seconds between recalls. Range: 0–300. |
| RadiusMin | 10 | Minimum summon radius in meters. Range: 5–50. |
| RadiusMax | 60 | Maximum summon radius in meters. Range: 20–200. |
| MinDepth | 3 | Minimum water depth required to place a ship. Range: 0.5–15. |
| ShowCooldownMessage | true | Show cooldown timer when recall is on cooldown. |
| ShowRecallMessage | true | Show confirmation message when a ship is recalled. |
| Setting | Default | Description |
|---|---|---|
| ShowShipPins | true | Show ship pins on the minimap and large map. |
| ShowPinsOnMinimap | true | Show pins on the minimap. |
| ShowPinsOnLargeMap | true | Show pins on the large map. |
| PrimaryPinLabel | Flagship | Label for the Flagship pin. |
| SecondaryPinLabel | Boat | Label for the Boat pin. |
| UpdatePinsOnMove | true | Update pin positions as ships move. |
| PinUpdateInterval | 5 | How often (in seconds) to update pin positions. Range: 1–60. |
| Setting | Default | Description |
|---|---|---|
| EnableFleetUI | true | Enable the Fleet recall panel UI. |
| UIOpacity | 0.85 | Panel background opacity. Range: 0.1–1.0. |
| UIScale | 1.0 | Panel scale multiplier. Range: 0.5–2.0. |
| ShowShipType | true | Show ship type in the Fleet panel. |
| ShowShipDistance | true | Show distance to each ship in the Fleet panel. |
| AnimateOpen | true | Fade-in animation when opening the panel. |
| AnimationDuration | 0.20 | Fade duration in seconds. Range: 0.05–1.0. |
| Setting | Default | Description |
|---|---|---|
| SaveInterval | 30 | How often (in seconds) fleet data is written to ZDO. Range: 5–300. |
| BackupSaves | false | Keep a backup copy of fleet data before overwriting. |
| MigrateOldSaves | true | Migrate legacy save data from older versions automatically. |
| Setting | Default | Description |
|---|---|---|
| MoreMapPins.Enabled | true | Enable compatibility layer for MoreMapPins. |
| FastTravel.Enabled | true | Enable compatibility layer for FastTravel mods. |
| FastTravel.TeleportWithShip | false | Teleport ship alongside player when using fast travel. |
| OdinArchitect.Enabled | true | Enable compatibility layer for OdinArchitect build pieces. |
| Jotunn.SyncConfigToClients | true | Sync server-side config values to connected clients via Jotunn. |
| Setting | Default | Description |
|---|---|---|
| EnableDiagnosticLogging | false | Verbose diagnostic output. Performance impact — development use only. |
| LogShipRegistration | false | Log each ship registration event. |
| LogZDOUpdates | false | Log every ZDO read and write. |
| LogPinUpdates | false | Log minimap pin changes. |
| EnableWorldScan | true | Allow world ZDO scan to recover stale ship references. |
| LogSaveLoad | false | Log persistence save and load operations. |
| Setting | Default | Description |
|---|---|---|
| EnableAutoRecallOnSpawn | false | Automatically recall Flagship when player spawns. |
| EnableShipNaming | false | Allow players to assign custom names to their ships. |
| EnableShipHealthTracking | false | Show ship health percentage in the Fleet panel. |
| EnableExtendedFleet | false | Allow more than two fleet slots (requires MaxFleetSize). |
| MaxFleetSize | 2 | Maximum number of ships in the fleet. Range: 2–10. |
| EnableDeathRecovery | false | Attempt to recover fleet data after player death. |
| Mod | Status | Notes |
|---|---|---|
| OdinShip | ✅ Compatible | All 7 OdinShip vessels register automatically. |
| Sailing (Smoothbrain) | ✅ Compatible | Speed and health bonuses apply normally. Recall bypasses movement entirely. |
| EpicLoot | ✅ Compatible | No shared patch targets. |
| BetterUI / BetterUI_ForeverMaintained | ✅ Compatible | No UI conflicts with Fleet panel. |
| AzuWearNTearPatches | ✅ Compatible | Boat indestructibility is redundant when AzuWNT disables all boat damage — no conflict. |
| WhereYouAt | ✅ Compatible | Map position sharing does not interfere with ship pins. |
| ProtectiveWards | ✅ Compatible | Ships summoned inside a ward are protected by the ward's damage modifiers. |
| MoreMapPins | ⚠️ Planned | Compatibility layer config exists; full integration not yet implemented. |
| Fast Travel mods | ⚠️ Planned | Config option present; ship-along-player teleport not yet implemented. |
| BiomeLock | ⚠️ Known limitation | BiomeLock's interact block may prevent helm interaction in restricted biomes. Ship pin updates from restricted biomes may be blocked. |
Mods not listed here will fall back to vanilla behavior. If WindheimShips cannot locate a Harmony method (e.g., ShipControlls.Interact vs TryInteract), it skips that patch gracefully via HarmonyPrepare.
WindheimShips is designed for multiplayer from the ground up.
OccupiedShipMode = block to prevent recalling a ship while another player is aboard.Jotunn.SyncConfigToClients = true, server admins can enforce config values for all players.Q: I pressed K but nothing happened.
A: Make sure you're in-game (not in a menu). Check com.TAIJI.windheim.cfg and verify RecallKey is set to your preferred key. Also confirm EnableRecall = true.
Q: My ship says "not found" when I try to recall.
A: The ship's ZDO may have been invalidated (e.g., the ship was destroyed). For the Boat slot, WindheimShips will automatically spawn a replacement. For the Flagship, you need to assign a new ship by taking its helm.
Q: The Boat spawns inside terrain.
A: Increase RadiusMin slightly or move to an area with more open water before recalling. The water scanner requires MinDepth meters of depth.
Q: Will this work on a dedicated server?
A: Yes. Install the DLL on both the server and all clients. Fleet data is stored in ZDOs and synchronized normally.
Q: Does the Boat cost resources?
A: No. The Boat is a persistent utility vessel. Recalling it is free and instant.
Q: Can two players share a Flagship?
A: No. Each player has their own fleet slot. A ship can only be Flagship for one player at a time (first helm interaction wins).
EnableShipNaming, EnableExtendedFleet, and EnableDeathRecovery experimental features are implemented in config but not yet fully functional in gameplay.