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.
Blasted Swimming Tarred Bug Fix
Fixes stale swimming and tar state, LiquidVolume lifetime, ZNetScene cleanup, Character and StatusEffect teardown, EnemyHud cleanup, and optional MagicPlugin projectile, teleport, registry, and cosmetic ZDO issues.
| Last updated | 2 weeks ago |
| Total downloads | 6390 |
| Total rating | 4 |
| Categories | Mods Tweaks Server-side Client-side AI Generated Deep North Update |
| Dependency string | sighsorry-Blasted_Swimming_Tarred_Bug_Fix-1.2.6 |
| Dependants | 5 other packages depend on this package |
This mod requires the following mods to function
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.2350README
BlastedSwimmingTarredBugFix
Defensive runtime fixes for stale liquid state, scene and Character lifecycle cleanup, optional MagicPlugin interoperability, and Korean names in the F2 player list.
The current source targets Valheim 1.0.12. Build with the original 1.0.12 game assemblies; it does not include an older-game compatibility path.
What It Fixes
- Random swimming while nowhere near water.
- Random tarred state after leaving a Plains tar pit.
- Portal, dungeon, or scene transitions leaving old liquid state behind.
- Carts or floating objects keeping water/tar state after a missed trigger exit.
- Unconditional disposal of unallocated
LiquidVolumeraycast arrays. - Scene cleanup failing on missing, destroyed, or mismatched
ZNetViewdata. - Malformed StatusEffect start effects interrupting Character destruction.
- Character registry and EnemyHud entries surviving incomplete destruction.
- MagicPlugin projectile patches repeatedly registering configuration handlers.
- MagicPlugin summon teleport and Character registry patches reading destroyed or incomplete objects.
- MagicPlugin Flame, Thunder, and Arctic staff launch cosmetics, Thunder/Arctic projectile impacts, and shared iceblock destruction creating short-lived peer-owned ZDOs.
- MagicPlugin Ice Scepter Nova rings leaving cosmetic network objects without a destruction path.
- Korean character names rendering as missing glyphs in the F2 player list when its assigned TMP font does not include Hangul.
How It Works
Liquid and scene protection
- Rejects stale positive liquid updates when the source no longer overlaps the target.
- Removes stale entries from
WaterVolumeandLiquidSurfacebefore floater updates. - Clamps water/tar counters so missed exits cannot drive them below zero.
- Clears purged state only when no current liquid trigger overlaps the target.
- Clears player liquid state after a teleport successfully starts.
- Guards
LiquidVolumeraycast array disposal withIsCreated. Valheim 1.0.7 and 1.0.12 already useAllocator.Persistent, so their allocation code is left intact. - Cleans invalid or mismatched
ZNetSceneentries without dereferencing destroyed views.
Character lifecycle protection
- Safely tears down StatusEffect start effects with missing or invalid
ZNetViewcomponents. - Repairs Character registry and EnemyHud bookkeeping when
Character.OnDestroyis incomplete or throws. - Prunes tracked creature-removal state after scene teardown.
Optional MagicPlugin interoperability
When MagicPlugin is installed, each compatible fix is enabled independently only after its expected types, methods, fields, Harmony patch, and cosmetic prefab graph are validated:
- Replaces the affected
Attack.FireProjectileBurstprefix with a guarded implementation. - Moves valid followed summons only after a player teleport succeeds.
- Removes destroyed Characters before MagicPlugin reads the global registry.
- On MagicPlugin 2.1.9 and later, probes each supported prefab graph once per scene and enables only the cosmetic paths whose full suppression/replay structure still matches.
- Keeps gameplay projectiles, Nova AOE, and Arctic iceblocks networked while replaying compatible Flame/Thunder/Arctic launch and impact cosmetics locally.
- Tags existing Staff projectile ZDOs so Flame and Lightning Wands that share those projectile prefabs do not receive Staff-only launch effects.
- Replays Ice Scepter Nova rings locally from the networked Nova AOE and gives each ring the same explicit lifetime as that AOE.
Valheim 1.0.7 and 1.0.12 effects with an explicit gamepad recipient keep their original network objects so the recipient metadata is preserved. Piercing projectiles that only stop on terrain also retain their original impact effect path, since intermediate hits do not send the completion RPC required for cosmetic replay.
The current contract checks were also verified against MagicPlugin 2.2.0. MagicPlugin is optional and is not a Thunderstore package dependency.
F2 player-list font compatibility
- Prepares the actual F2
ConnectPanelname template inStart, before its player rows are created. Name filtering, player identity, and network state stay in vanilla code. - Adds Valheim's bundled dynamic
NotoSansKR-Regular SDFfont after the existing fallbacks. TMP generates missing glyphs during rendering; Latin text keeps its source font. - The fallback also applies to other labels sharing that source font. No font assets, materials, or atlases are cloned or destroyed, and no extra per-frame hook is installed.
- Skips headless graphics paths and removes its own fallback entry on unload while preserving other mods' changes to the active fallback table.
Automatic Compatibility
- MyPitsDontLeak disables the integrated
LiquidVolumedisposal guard. - Scenic disables the integrated scene cleanup module.
- MagicPlugin support stays inactive when the expected plugin or patch structure is absent.
- MagicPlugin versions older than 2.1.9, and individual future-version cosmetic graphs that fail validation, keep their original cosmetic ZDO behavior.
Configuration
[Synchronization]
LockConfiguration = true
[Liquid]
Enabled = true
BoundsPadding = 0.75
Only the liquid settings are synchronized. Character lifecycle and compatibility modules are automatic and have no configuration switches.
The 1.2.0 configuration layout is not migrated from older layouts. Delete
BepInEx/config/sighsorry.blastedswimmingtarredbugfix.cfg once if you want to
remove obsolete entries and regenerate a clean file.
Building
The plugin targets netstandard2.1 and uses C# 12. Build against the Valheim
managed assemblies and BepInEx core files using VALHEIM_MANAGED and
BEPINEX_CORE; the project also detects the default Windows Steam paths.
The embedded ServerSync copy includes the 1.0.7 ZRoutedRpc.Everybody constant
fix; its provenance and reproduction instructions are in
Libs/README.md.
For development on Windows, run dotnet build -c Debug -p:DeployToGame=true.
After ServerSync merging succeeds, the final DLL is copied to the default Steam
Valheim BepInEx/plugins folder. Use DeployToGame=false to skip copying, or
set ValheimPluginDirectory to override the destination.
For an explicitly requested release, dotnet build -c Release merges ServerSync into the plugin and
creates Thunderstore/BlastedSwimmingTarredBugFix-<version>.zip. The packaged
manifest version comes from the built assembly and must have a matching row in
Thunderstore/CHANGELOG.md. Version synchronization only updates the staging
copy under obj/; it does not rewrite Thunderstore/manifest.json.
If Mod Release Manager watches that folder with automatic publishing enabled,
creating the Release ZIP can upload it to the project's selected sites.
Credits
- MyPitsDontLeak by AzumattDev (MIT-0)
- Scenic by ComfyMods (GPL-3.0)
GitHub
https://github.com/sighsorry1029/BlastedSwimmingTarredBugFix