You are viewing a potentially older version of this package. View all versions.
ChorusReef-Bifrost_Breakout-0.1.0 icon

Bifrost Breakout

Roaming monsters, migrating wildlife, warbands, unexpected encounters, and a world whose ecology changes as you progress.

Date uploaded 3 hours ago
Version 0.1.0
Download link ChorusReef-Bifrost_Breakout-0.1.0.zip
Downloads 16
Dependency string ChorusReef-Bifrost_Breakout-0.1.0

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2202 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured and includes unstripped Unity DLLs.

Preferred version: 5.4.2202
ASharpPen-Spawn_That-1.2.18 icon
ASharpPen-Spawn_That

Advanced tool for customizing mob spawners throughout the world with configuration files.

Preferred version: 1.2.18

README

Bifrost Breakout 0.1.0 — Public Alpha

“The creatures of Valheim no longer stay politely inside their biomes.”

Roaming monsters, migrating wildlife, warbands, unexpected encounters, and a world whose ecology changes as you progress.

Bifrost Breakout adds rare biome-inappropriate creatures without modifying any of Valheim's 85 existing world-spawner entries. Its mixed ecology remains a supplemental Spawn That configuration. The independent BifrostBreakout.dll owns Mountain Dvergr outpost cloning, the one-time warband mechanic, Project Snake Eyes, and a conservative shoreline Bonemaw ecology. This public-alpha identity packages the gameplay implementation previously tested as internal Hellworld 0.4.0; the identity pass itself changes no gameplay balance.

Spawn That is a third-party dependency and spawning framework. Its source and implementation are not part of Bifrost Breakout.

Public-alpha testing status

Runtime-tested in normal play:

  • core cross-biome spawning and gameplay;
  • warbands and special squads that occurred naturally during testing;
  • shoreline Bonemaw spawning and vanilla shoreline combat;
  • the two-star Sea Disturbance Serpent spawning and fighting with vanilla AI.

Implemented and statically/runtime-table validated, but not yet naturally encountered during gameplay testing:

  • the five post-Bonemass Ocean flyer spawners.

The Ocean flyers remain enabled. This is an alpha because broader combinations, long-session density, multiplayer behavior, and progression-edge cases still need more play.

The runtime baseline used to build it is preserved under exports/baseline-0.221.12/.

Design

  • Vanilla biome ecology remains intact.
  • Added intruders use all current land biomes: Meadows, Black Forest, Swamp, Mountain, Plains, Mistlands, Ashlands, and Deep North.
  • Land intruders exclude Ocean. Five independent post-Bonemass flyer entries use Ocean only.
  • Ground intruders may appear from Day 1 and at the world center. Dedicated hostile flyers require the vanilla defeated_bonemass global key.
  • Intruder stars are inverted by primary native-biome progression: Black Forest creatures are always starred, Swamp/Mountain creatures have bounded chances, and Plains/Mistlands/Ashlands creatures are always unstarred.
  • Prefab factions and normal AI are retained.
  • HuntPlayer and SetRelentless are false for every entry.
  • Other progression gates remain empty, and world-age/distance gates remain zero.
  • Greydwarves may appear in pairs; each Bifrost Breakout Lox check now produces one Lox. Other intruder groups remain solitary.
  • Vanilla entries 0-84 are untouched; Bifrost Breakout uses supplemental IDs 9000-9049 without replacing native rows.

Project Snake Eyes

Project Snake Eyes is not a Spawn That entry and does not modify the vanilla Serpent prefab globally. Server-side Bifrost Breakout instantiates the current vanilla Serpent and retains its standard prefab display name, model, animations, water movement, faction, native attacks, drops, and MonsterAI behavior. The project calls the system Snake Eyes, but Bifrost Breakout deliberately assigns no special name to the creature seen by the player. Internal files and compatibility identifiers remain unchanged: WhiteWhaleSystem, Hellworld_WhiteSerpent, the White Whale config section, and defeated_hellworld_white_whale.

The marked instance is always assigned internal Character level 3. Inspection of Valheim 0.221.12 confirms that level 3 activates the enemy HUD's level_3 display, so it is always a visible two-star, regularly named Serpent. The level is written to its ZDO and corrected by the server if it ever drifts. Ordinary Serpent level rolls are untouched.

Every five seconds, a lightweight server-authoritative check updates per-player Sea Disturbance:

  • swimming or treading water: +10 per second;
  • aboard/controlling a ship: +1 per second;
  • wading: +2 per second;
  • moving near sampled shoreline water: +0.08 per second;
  • placing a piece near sampled shoreline water: +10;
  • quiet inland activity: -0.25 per second.

Woodcutting itself is not hooked and adds no build burst. In the v0.3.0 test log, repeated shoreline piece placements had already raised disturbance past 100; chopping wood merely coincided with the next five-second encounter tick. Shoreline construction disturbance remains intentional in v0.3.3. It may prime an encounter, but the encounter now waits until that player is swimming or aboard a boat before spawning.

At the default threshold of 100, sustained swimming/treading takes roughly 10 seconds, wading roughly 50 seconds, boat travel roughly 100 seconds, and shoreline work is intentionally slower. Character.IsSwimming() depends on Valheim's swim state rather than horizontal velocity, so stationary treading counts. Briefly touching bottom, stepping ashore, or boarding/leaving a vessel does not clear the stored value. Genuinely quiet/inland time subtracts 0.25 per second. Death/disconnection, a world change, or a successful encounter spawn clears the relevant transient state; a successful spawn resets only its selected player.

All active rates, threshold, tick, water depth, spawn distances, retry delay, and encounter lifetime are generated in BepInEx/config/Elwood.Hellworld.cfg and may be tuned for testing. The retired ReturnCooldownSeconds, DeathCooldownSeconds, InlandEscapeDistance, and RetreatDurationSeconds entries may remain in an older generated file but are no longer bound or used.

Once an eligible player is actively swimming or aboard a boat, the server performs at most 24 water samples. The v0.3.8 close-range test defaults are 10-15 metres from the player and at least 1.5 metres deep. A candidate is still rejected unless its actual spawn point is below the water surface and unblocked. It uses the same underwater ground offset as the normal Serpent world spawner. Failure waits 30 seconds before another bounded attempt.

With WhiteWhaleDebugLogging=true, concise attempt diagnostics distinguish a threshold trigger, failed-water retry delay, an existing marked encounter, water-candidate success or failure, and final spawn success. The success line includes straight-line and horizontal distance from the selected player. Repeated block messages are limited to once per 30 seconds.

Bifrost Breakout performs no combat or targeting operations on the spawned Serpent. It does not call SetHuntPlayer, Alert, SetFollowTarget, SetTarget, sensing, target-field reflection, or patrol methods. It also uses vanilla's identity spawn rotation rather than pointing the creature toward the player. The unmodified MonsterAI must acquire something it can naturally sense and then select, range, face, and execute the prefab's normal attack.

This deliberately gives up guaranteed offshore stalking. A player who reaches land or breaks sight may be forgotten; the Serpent remains constrained by m_avoidLand and may instead attack a naturally selected reachable boat/static target. After the configured five-minute lifetime, Bifrost Breakout directly destroys the marked loaded creature or unloaded ZDO without changing its AI. Duplicate markers are still removed. Any pre-v0.3.3 marked encounter is retired once on upgrade because older builds may have persisted HuntPlayer=true in its ZDO.

There is no return or post-kill cooldown. A successful spawn resets the selected player's disturbance to zero. Periodic swimming/wading/ship sampling pauses while that single encounter remains active, although explicit shoreline build events can still add their normal burst. Once it dies, expires, is cleaned up, or its ZDO disappears, normal periodic accumulation resumes immediately. The old compatibility key defeated_hellworld_white_whale is removed once when a world loads and is never written. A per-ZDO death marker only stops a defeated instance from being mistaken for an active encounter; it no longer starts any timer.

Deliberate dock/structure targeting is absent. The encounter-start log reports the prefab's native HuntPlayer, alert, avoid-land, and player-object settings without changing them.

Shoreline Bonemaw ecology

Bifrost Breakout adds a separate, server-authoritative coastal ecology check. It does not use Sea Disturbance and does not alter Project Snake Eyes. Once per 60 seconds, the server samples water 15-30 metres from active living players. A candidate must be unblocked, at least 5 metres deep, below the water surface, and within 30 metres of sampled land or very shallow water. An eligible check has a 20% chance to instantiate one stock BonemawSerpent at ground + 0.5m, the same offset used by its native world-spawner.

Each shoreline Bonemaw remains internal Character level 1 (unstarred). Its stock Demon faction, HuntPlayer=false, bite, spit, taunt, sensing, swimming, and MonsterAI are left untouched. Bifrost Breakout neither chooses nor forces a target. Ordinary vanilla Bonemaws have no Bifrost Breakout ownership marker and do not count against this system's cap. Only one marked Bonemaw may exist within 150 metres of the selected player or actual candidate point.

A marked Bonemaw is removed after 600 seconds. It is also removed early after no living player has remained within 200 metres for a continuous 60 seconds. The absence timer and absolute expiry are stored in the creature ZDO, so cleanup survives unloading and reload. Concise logs report spawns, cap blocks, expiry or distance cleanup, and save/reload recovery. All rates, ranges, and limits are available under the generated Bifrost Shoreline Bonemaws config section.

Both Bifrost Breakout aquatic systems record their created ZDO IDs immediately. On a world load, prefab-specific ZDOMan enumeration rebuilds each tracker only from ZDOs carrying that system's ownership marker. Tracked IDs are then resolved via ZDOMan.GetZDO, while loaded instances are resolved through ZNetScene. This replaces the player-only ZNet.GetAllCharacterZDOS() path and makes duplicate prevention and cleanup work for loaded and unloaded mod-owned monsters without capturing ordinary vanilla instances.

Mountain Dvergr strongholds

Bifrost Breakout clones the three intact current-game locations Mistlands_GuardTower1_new, Mistlands_GuardTower2_new, and Mistlands_GuardTower3_new during ZoneSystem.SetupLocations. The clones use the original SoftReference prefabs, so their vanilla buildings, loot, Dvergr spawners, and other contents are not rebuilt or replaced. Only placement rules change:

  • biome: Mountain, all biome-area bands;
  • requested quantity: 120 per tower variant;
  • shared group: Hellworld_Mountain_DvergrOutposts;
  • shared minimum separation: 300 metres;
  • prioritized placement, non-unique, no center-distance or forest gate;
  • altitude: 20-1000 metres above the world water reference;
  • original footprint, terrain-delta, vegetation, rotation, and clearing rules remain attached to each source tower.

Quantity is deliberately an upper request, not a guaranteed result. The common 300m group separation and each tower's inherited terrain footprint are expected to be the practical limits. Defaults are configurable under Mountain Strongholds in Elwood.Hellworld.cfg.

Valheim persists a completed location table in the world save. Bifrost Breakout does not force-reset that table: a newly created world is the clean test path. An existing world whose location table is already generated will not gain these outposts merely by exploring new terrain unless a separate world-upgrade tool regenerates locations. No Jotunn dependency was added; cloning an unchanged vanilla SoftReference location is supported directly by the current ZoneSystem API.

Added spawners

Intervals are seconds. Chance is the independent chance on each interval. A successful chance roll can still fail because no valid terrain point is found or because the local prefab cap has already been reached.

Creature Prefab Tier Chance Interval Max nearby Group
Greydwarf Greydwarf Common 18% 180 2 1-2
Skeleton Skeleton Common 15% 240 2 1
Draugr Draugr Common 12% 300 1 1
Blob Blob Common 10% 360 1 1
Surtling Surtling Common 0.8% 420 1 1
Wolf Wolf Common 10% 300 1 1
Charred Twitcher Charred_Twitcher Common 0.6% 480 1 1
Bear Bjorn Dangerous 5% 600 1 1
Troll Troll Dangerous 4% 720 1 1
Abomination Abomination Dangerous 3% 900 1 1
Fuling Goblin Dangerous 5% 600 1 1
Fuling Berserker warband GoblinBrute Apex squad 2% 1200 1 1
Lox Lox Dangerous 3% 900 3 1
Deathsquito Deathsquito Dangerous 4% 600 1 1
Wraith Wraith Dangerous 4% 720 1 1
Stone Golem StoneGolem Dangerous 2% 900 1 1
Seeker Seeker Dangerous 4% 720 1 1
Asksvin Asksvin Dangerous 0.3% 900 1 1
Charred Warrior Charred_Melee Dangerous 0.3% 900 1 1
Vile Unbjorn Apex 2% 1200 1 1
Seeker Soldier SeekerBrute Apex 2% 1200 1 1
Gjall Gjall Apex 2% 1200 1 1
Morgen Morgen_NonSleeping Apex 0.2% 1200 1 1
Ghost archer squad Ghost Apex squad 2% 1200 1 1
Dvergr patrol leader Dverger Stronghold patrol 30% 300 2 1
Wolf Alpha Wolf Mountain squad 12% 600 6 1
Fenring leader Fenring Mountain elite squad 8% 900 2 1

Skeletons, Wraiths, and Viles retain night-only spawning. The other Bifrost Breakout entries can spawn during day or night.

The squad/warband rows use one-creature Spawn That groups; the DLL creates their followers. The Dvergr patrol requires defeated_bonemass and can appear in all land biomes. Wolf Alpha and Fenring hunting-party leaders are Mountain-only. Ghost and Fuling Berserker are rare all-land outdoor leaders. Their exact compositions are documented under Warbands.

Bifrost Breakout's Deathsquito, Wraith, and Gjall entries additionally require defeated_bonemass on land. The separate Ocean flyer layer uses the same key for all five entries while leaving these land rows and every native row intact.

Post-Bonemass Ocean flyers

Creature Runtime prefab Chance Interval Cap Time
Deathsquito Deathsquito 4% 600s 1 day/night
Wraith Wraith 4% 720s 1 night only
Drake Hatchling 4% 720s 1 day/night
Gjall Gjall 2% 1200s 1 day/night
Volture Volture 0.4% 900s 1 day/night

These are independent one-creature, level-1 spawners in Ocean, all requiring defeated_bonemass. HuntPlayer=false, the faction override is blank, and SetRelentless=false. They use a 50m terrain offset over Ocean ground 5-40m below sea level, placing them approximately 10-45m above the water instead of on the seabed. The Volture chance retains Bifrost Breakout's 10% Ashlands-intruder frequency rule. No squad, coordination, or DLL combat behavior is involved.

Bifrost Breakout-added creatures that also belong to the current native Ashlands roster use exactly 10% of their previous independent chance: Surtling 8% to 0.8%, Charred Twitcher 6% to 0.6%, Asksvin 3% to 0.3%, Charred Warrior 3% to 0.3%, and Morgen 2% to 0.2%. Intervals, caps, groups, stats, and native Ashlands spawners are unchanged.

Balance model

Before terrain failures and local caps, the independent chance rolls average:

  • Common: about 8.48 successful checks per hour, or one every 7.1 minutes.
  • Dangerous: about 1.34 per hour before Bonemass and 1.68 afterward, or one every 44.6/35.6 minutes respectively.
  • Apex: about 0.216 per hour before Bonemass and 0.276 afterward, or one every 4.6/3.6 hours respectively.

The new conditional squad-leader checks add raw averages of 3.6 Dvergr patrol leaders per hour after Bonemass across land, 0.72 Wolf Alphas per hour while in Mountains, and 0.32 Fenring hunting parties per hour while in Mountains, before terrain failures, prefab caps, and spawn-distance checks.

The rare Ghost and Fuling Berserker leader checks each add 0.06 raw successful checks per hour across land before terrain failures and caps.

The calculation treats day and night as equal-duration windows for night-only entries. Actual populations should be lower because Spawn That must find valid terrain and respects each prefab's local cap. The theoretical maximum is higher than the intended routine population, so the first playtest should specifically watch for accumulation after remaining near one base for several in-game days.

Install

Spawn That 1.2.18 and BepInEx must already be installed. Copy spawn_that.world_spawners.hellworld.cfg into the active profile's BepInEx/config/ directory. Copy BifrostBreakout.dll into its own directory under BepInEx/plugins/, then restart Valheim and enter a world.

For the current Zelwood profile the destination is:

C:\Users\eldth\AppData\Roaming\r2modmanPlus-local\Valheim\profiles\Zelwood\BepInEx\config\spawn_that.world_spawners.hellworld.cfg

The DLL destination used by the current workflow is:

C:\Users\eldth\AppData\Roaming\r2modmanPlus-local\Valheim\profiles\Zelwood\BepInEx\plugins\Bifrost-Breakout\BifrostBreakout.dll

Disable

Quit Valheim and rename the file to:

spawn_that.world_spawners.hellworld.cfg.disabled

Disable the DLL by renaming BifrostBreakout.dll to BifrostBreakout.dll.disabled, then restart the game. Vanilla spawners were never overwritten. Creatures that already exist may remain until they die or naturally despawn, but no new Bifrost Breakout intruders, entourages, or Project Snake Eyes encounters will be created.

Standalone development workflow

The editable source project lives at:

C:\Users\eldth\Documents\ValheimMods\Hellworld

Run build-local.ps1 to compile into dist/build/BifrostBreakout.dll. Run package.ps1 to create the clean Thunderstore-rooted staging directory under dist/public-alpha/. A final upload ZIP is created only when a valid 256x256 project-root icon.png exists. Run deploy-zelwood.ps1 -ProfilePath <profile> only while Valheim is closed; it backs up the exact installed DLL, metadata, legacy plugin folder, and Spawn That config before copying. It deliberately retains the generated Elwood.Hellworld.cfg tuning file and the legacy Spawn That config filename for compatibility. validate.ps1 -ProfilePath <profile> -PackagePath <staging> verifies source/build/install/package hashes and core invariants.

Machine-specific paths are held in ignored local.paths.ps1; use local.paths.example.ps1 on another machine. Build/package output and deployment backups are ignored by local Git. The small tools/roslyn/ bundle contains the compiler runtime and its third-party notices, so builds do not depend on the retired Codex experiment or an installed Visual Studio SDK.

Diagnostics

The Zelwood spawn_that.cfg currently enables:

  • WriteSpawnTablesToFileBeforeChanges
  • WriteSpawnTablesToFileAfterChanges
  • WriteConfigsToFile

Spawn That writes the results into BepInEx/Debug/ whenever a world is entered. The last gameplay-verified v0.1.2 export contained 107 entries: 85 vanilla plus 22 Hellworld entries. Bifrost Breakout 0.1.0 contains the unchanged 32 supplemental entries from internal 0.4.0, so the next expected post-change total is 117: 85 vanilla plus 32 Bifrost Breakout entries. That fresh runtime export still requires a Valheim launch.

Inverted star difficulty

Ordinary supplemental Bifrost Breakout intruders use these rules. Vanilla/native spawners are not overridden. Fixed squads are explicit exceptions: Dvergr and Stone Golem leaders are level 1, Wolf Alpha and Fenring are level 2, Ghost is level 3, and the new Plains-native GoblinBrute source is level 1.

Primary native biome LevelMin LevelMax LevelUpChance Result
Meadows 3 3 0 Always 2-star
Black Forest 2 3 50 Always 1-star; 50% become 2-star
Swamp 1 2 50 50% unstarred; 50% become 1-star
Mountain 1 2 25 75% unstarred; 25% become 1-star
Plains 1 1 0 Always unstarred
Mistlands 1 1 0 Always unstarred
Ashlands 1 1 0 Always unstarred

The ordinary roster contains no Meadows-native intruder. Applied primary-biome classifications are:

  • Black Forest: Greydwarf, Skeleton, Bjorn, Troll
  • Swamp: Draugr, Blob, Surtling, Abomination, Wraith
  • Mountain: Wolf; StoneGolem is normalized to level 1 for its fixed squad
  • Plains: Goblin, GoblinBrute, Lox, Deathsquito, Unbjorn
  • Mistlands: Seeker, SeekerBrute, Gjall
  • Ashlands: Charred_Twitcher, Asksvin, Charred_Melee, Morgen_NonSleeping

Post-boss foreign-biome vanilla entries do not redefine a creature's primary biome. Skeleton is treated as Black Forest progression despite later world-spawner coverage; Surtling is treated as Swamp because that is its first normal progression encounter, despite also spawning natively in Ashlands. LevelUpMinCenterDistance remains zero.

Lox encounters

Bifrost Breakout Lox use GroupSizeMin = 1 and GroupSizeMax = 1, so each successful check produces exactly one unstarred Lox. MaxSpawned = 3 remains unchanged; up to three Lox may accumulate through separate successful checks. Chance, interval, biome scope, level rules, group radius, AI, faction, and every other Lox field are unchanged. Lox are not part of the custom warband mapping.

Warbands

Warbands are owned by BifrostBreakout.dll, not Spawn That. The owning peer processes each exact leader prefab once and writes the persistent ZDO marker Elwood.Hellworld.WarbandSpawned before creating followers.

Leader prefab Follower prefab Normal One-star Two-star
Troll Greydwarf 3 4 5
Abomination Draugr 3 4 5
Ghost Skeleton with skeleton_bow n/a n/a 3 fixed
StoneGolem Greydwarf_Shaman + Greydwarf_Elite 2 Shamans + 1 Brute fixed n/a n/a
GoblinBrute Goblin 3 4 5
SeekerBrute Seeker 3 4 5
Morgen Charred_Twitcher 3 4 5
Morgen_NonSleeping Charred_Twitcher 3 4 5

Stone Golem is intentionally removed from the generic star-count rule. A newly processed Golem is fixed to internal level 1 (unstarred) and receives two level-1 Greydwarf_Shaman plus one level-1 Greydwarf_Elite (the Greydwarf Brute), for exactly four creatures requested in the squad. The former Bat and older Wolf entourages are gone. The Shamans are untouched vanilla prefabs; their normal faction AI decides when to heal. The other rows retain the configurable generic base count plus one follower per visible leader star.

A newly processed Ghost is fixed to internal level 3 (two stars) and receives three level-3/two-star Skeleton followers, for four two-star creatures total. Current Valheim assets do not contain a Skeleton_Archer character prefab: the normal archer is the Skeleton prefab equipped with skeleton_bow. Bifrost Breakout stores that weapon-loadout marker and restricts those three followers to the verified vanilla bow before Humanoid.Start; native inventory setup, faction, targeting, movement, and attacks remain unchanged. No generic star bonus is consulted.

Complete warband and squad spawn audit

All land means Meadows, Black Forest, Swamp, Mountain, Plains, Mistlands, Ashlands, and Deep North; Ocean is excluded. Chance is an independent percentage per interval, and cap is the nearby leader-prefab cap from Spawn That.

Encounter / exact prefabs Outdoor leader source and scope Chance / interval / cap Leader level Followers or group Ordinary gameplay?
Troll: Troll + Greydwarf 9011, all land 4% / 720s / 1 level 2; 50% level 3 4 unstarred Greydwarves at ★; 5 at ★★ Yes
Abomination: Abomination + Draugr 9012, all land 3% / 900s / 1 level 1; 50% level 2 3 unstarred Draugr; 4 if leader becomes ★ Yes
Fuling Berserker: GoblinBrute + Goblin 9044, all land 2% / 1200s / 1 level 1 3 unstarred Fulings Yes; added by v0.3.6
Seeker Soldier: SeekerBrute + Seeker 9031, all land 2% / 1200s / 1 level 1 3 unstarred Seekers Yes
Morgen: Morgen_NonSleeping + Charred_Twitcher 9034, all land 0.2% / 1200s / 1 level 1 3 unstarred Twitchers Yes
Stone Golem: StoneGolem, Greydwarf_Shaman, Greydwarf_Elite 9017, all land 2% / 900s / 1 fixed level 1 2 unstarred Shamans + 1 unstarred Brute Yes
Wolf Alpha: Wolf + Wolf 9041, Mountain 12% / 600s / 6 fixed level 2 (★) 3 unstarred Wolves Yes
Fenring hunt: Fenring, Fenring_Cultist, Ulv 9042, Mountain 8% / 900s / 2 Fenring level 2 (★) 1 level-2/★ Cultist + 3 unstarred Ulvs Yes
Dvergr patrol: Dverger, DvergerMageFire, DvergerMageIce, DvergerMageSupport 9040, all land; defeated_bonemass 30% / 300s / 2 level 1 1 unstarred mage of each role Yes after Bonemass
Ghost archers: Ghost, Skeleton, skeleton_bow 9043, all land 2% / 1200s / 1 fixed level 3 (★★) 3 level-3/★★ bow Skeletons Yes; added by v0.3.6
Lox encounter: Lox 9014, all land 3% / 900s / 3 level 1 Spawn That group fixed at 1 Lox; no DLL followers Yes

The audit used the current 0.221.12 SoftReference manifest, the last loaded Spawn That export, the source supplemental config, and the exact DLL definitions. The last loaded export confirms every pre-v0.3.6 row. IDs 9043 and 9044, plus the Stone Golem level normalization, require the next Valheim world load to appear in a newly generated runtime export.

Three exact tagged squads are also owned by the same one-time system:

Tagged leader Fixed leader level Fixed followers Total
Dverger / HellWorld_Mountain_DvergrPatrol 1 one level-1 DvergerMageFire, one DvergerMageIce, one DvergerMageSupport 4
Wolf / HellWorld_Mountain_WolfAlpha 2 (one-star) three level-1 Wolf 4
Fenring / HellWorld_Mountain_FenringHunt 2 (one-star) one level-2 Fenring_Cultist, three level-1 Ulv 5

Spawn That's spawn_template_id ZDO value selects these leaders. Ordinary Wolves, Fenrings, Dvergr outpost defenders, and the existing universal Wolf intruder do not qualify. Every created follower receives a persistent follower marker before its first Start, which prevents same-prefab Wolf recursion. The generic star bonus is never consulted for fixed squads.

Followers are not tethered, replaced, or reinforced. All use their unchanged vanilla factions and AI.

An already-existing qualifying leader has no Bifrost Breakout marker from older saves, so the first time that individual is loaded with the plugin it will receive one warband. This is lifecycle-driven; Bifrost Breakout does not scan the world.

Technical warnings and exclusions

  • Bosses are not included. In Valheim 0.221.12, Character.OnDeath reads the boss prefab's m_defeatSetGlobalKey and passes it to ZoneSystem.SetGlobalKey. Spawn That has no config field that clears this prefab behavior. A wandering boss could therefore advance progression and change raids merely by dying. Avoiding that would require a code patch, which is outside this config-only experiment.
  • Additional ordinary Spawn That Serpent/Bonemaw spawners are not included. Project Snake Eyes and the code-owned shoreline Bonemaw ecology leave vanilla Ocean Serpents and native Ashlands Bonemaws unchanged.
  • The current asset manifest exposes one ordinary Serpent attack prefab, Assets/Characters/Serpent/misc/Serpent_attack.prefab; do not expect a separate Bonemaw-style spit/projectile move from this creature.
  • Leeches, fish, and all other water creatures are excluded.
  • Fenring_Cultist is still not an independent Bifrost Breakout world-spawner entry; it appears only as the single fixed one-star follower in a tagged Fenring hunting party. The current vanilla runtime has no ordinary Cultist world spawner to override.
  • Better Continents may alter geography, but Spawn That evaluates the biome at the selected runtime spawn point. This config does not modify geography.
  • Seasonality can suppress creature availability if its spawn tweaks are later changed. The inspected Zelwood Seasonality settings currently allow the selected creatures in every season.
  • Fallen Valkyrie remains a valid vanilla Ashlands prefab, but its Bifrost Breakout cross-biome entry is removed. Already-existing individuals are not scanned or deleted.
  • Supplemental Ocean Hatchling and Volture entries are isolated IDs 9047 and 9049. Their native Mountain/Ashlands spawners remain untouched.
  • Mountain outposts require a fresh/generated location table. Bifrost Breakout does not silently invalidate and rewrite an existing world's location layout.
  • The reused tower assets are verified current-game SoftReference names. If a later Valheim update renames one, Bifrost Breakout logs a warning and safely skips only that variant.
  • The current SoftReference manifest verifies Ghost, Skeleton, and skeleton_bow; it contains no dedicated Skeleton_Archer character prefab. The Ghost squad therefore uses the ordinary Skeleton with its native bow loadout instead of inventing a creature or attack.

First playtest

Travel through Meadows and Black Forest for 30-60 minutes, including one night. Record:

  • approximate time to the first foreign spawn;
  • total foreign creatures visible near one location;
  • whether any prefab repeatedly fails to navigate on ordinary terrain;
  • whether native creatures still clearly outnumber routine intruders;
  • any frame-time spike coinciding with world-spawner checks or a particular creature appearing.

In a world without defeated_bonemass, verify that no Bifrost Breakout Ocean flyer rows load as eligible. Then repeat in a Bonemass-defeated test world and confirm Deathsquito, nighttime Wraith, Hatchling, Gjall, and Volture are all eligible over Ocean without changing their existing land/native rows.

For warbands, spawn one normal Troll and verify 3 Greydwarves appear. Kill one, leave and return, then save/reload; no follower should be replaced and the same Troll should never receive a second entourage. Repeat with GoblinBrute or SeekerBrute after the basic test.

For the Mountain pass, use a new world. Confirm startup logs register all three guard-tower variants, then reveal or travel through a large Mountain and count outposts/separation. Before Bonemass, confirm no tagged Dvergr patrol leaders appear away from outposts; after setting defeated_bonemass, confirm a patrol is exactly one Dvergr plus Fire/Ice/Support mages. Confirm a tagged Wolf Alpha is one-star with exactly three unstarred Wolves, a tagged Fenring is one-star with one one-star Fenring_Cultist and three unstarred Ulv. Confirm a newly processed Stone Golem becomes unstarred and receives exactly two unstarred Greydwarf Shamans plus one unstarred Greydwarf Brute, with no Bats. Damage the Golem or another allied target and observe whether the Shamans use their normal healing behavior without Bifrost Breakout intervention.

For the Ghost squad, create or encounter a new unprocessed Ghost on ordinary outdoor terrain. Confirm it is two-star and receives exactly three two-star Skeletons carrying bows. Confirm all three fire normal arrows and that saving and reloading does not change their loadout or create another entourage.

Tune interval, chance, and caps only after reviewing the post-change export and one play session.

For the shortest Project Snake Eyes test, retain the default threshold 100 and enter water at least 1.5m deep. Tread water without horizontal input for about 10 seconds. Confirm exactly one regularly named two-star Serpent appears about 10-15m away and the log reports vanillaAIUntouched=true. Kill it, then tread water for another approximately 10 seconds; a later encounter should be eligible without a death/return cooldown. Setting EncounterDurationSeconds=30 provides the same short recurrence check through hard expiry instead of death.

For a quick Ocean-flyer eligibility test, temporarily change IDs 9045-9049 to SpawnChance=100 and SpawnInterval=30, enter an Ocean biome after Bonemass, and test both day and night (Wraith is night-only). Confirm all spawn singly and above the surface. Remove defeated_bonemass and repeat long enough for at least one check: none of those five supplemental rows should spawn. Restore the five documented rates after testing.

CHANGELOG

Bifrost Breakout changelog

2026-08-24 — v0.1.0 public alpha identity/package pass

  • Renamed the public plugin display name, assembly/DLL, package metadata, documentation, Spawn That display labels, deployment folder, and user-facing startup log to Bifrost Breakout.
  • Adopted the public-alpha version 0.1.0. This is a release identity change from the tested internal Hellworld 0.4.0 build, not a gameplay rebalance.
  • Retained compatibility-sensitive identities: BepInEx GUID Elwood.Hellworld, namespace/source project location, generated config Elwood.Hellworld.cfg, supplemental config filename, HellWorld_* Spawn That template IDs, Mountain location IDs, warband/ZDO markers, and Project Snake Eyes/White Whale persistence names.
  • Reworked packaging into a clean Thunderstore-rooted staging tree with only manifest.json, README.md, CHANGELOG.md, the install-shaped DLL/config payload, and icon.png when available. Source, validation files, logs, backups, exports, Git data, and intermediates are excluded.
  • Added the supplied Bifrost Breakout artwork as the preserved icon source, created a polished 1254x1254 project master, and produced an exact 256x256 icon.png for Thunderstore. Packaging validates the PNG signature and IHDR dimensions before emitting the final upload ZIP.
  • Updated Zelwood deployment to install BifrostBreakout.dll under BepInEx/plugins/Bifrost-Breakout/, backing up and removing the former Elwood-Hellworld directory to prevent duplicate loads of the preserved GUID.
  • Public-alpha test status records core ecology, naturally encountered warbands/squads, shoreline Bonemaw combat, and the two-star Sea Disturbance Serpent as runtime-tested. Post-Bonemass Ocean flyers remain enabled and validated but have not yet been encountered naturally by the tester.

2026-08-24 — v0.4.0 open-water recurrence and Ocean flyers

  • Fixed Sea Disturbance retention: the update loop now processes every living player instead of skipping and deleting state whenever they are not currently swimming or aboard a ship. Wading, shoreline gain, and inland decay are now reachable.
  • Changed default gain to +10/second while swimming or treading water, +2/second while wading, and +1/second aboard a ship. Moving shoreline gain remains +0.08/second, shoreline construction remains +10, quiet/inland decay remains -0.25/second, and the threshold remains 100.
  • Verified current Character.IsSwimming() uses swim state rather than horizontal velocity, so stationary treading receives the swimming rate.
  • Preserved disturbance across swimming/wading/shore/vessel transitions. It is reset for the selected player only after a successful Serpent spawn; dead or disconnected players and world changes discard transient per-player state.
  • Removed both recurrence delays: ReturnCooldownSeconds and DeathCooldownSeconds are no longer bound or read. A killed, expired, cleaned, or missing encounter permits immediate normal disturbance accumulation. Any old defeated_hellworld_white_whale key is removed once on world load.
  • Preserved the ordinary Serpent, level 3/two stars, normal display name, 10-15m placement, finite lifetime, vanilla MonsterAI, and v0.3.9 ZDO-ID tracking. No hunt, target, alert, follow, pursuit, or combat manipulation was added.
  • Added five independent Ocean-only Spawn That entries gated by defeated_bonemass: Deathsquito 4%/600s, nighttime Wraith 4%/720s, Hatchling 4%/720s, Gjall 2%/1200s, and Volture 0.4%/900s. Every cap and group size is one; every level is fixed at 1.
  • The Ocean entries use a 50m offset over 5-40m-deep Ocean terrain so flyers begin approximately 10-45m above sea level. All have HuntPlayer=false, blank faction overrides, and SetRelentless=false; existing native and Hellworld land spawners are untouched.
  • The shoreline Bonemaw source/config was not changed. Metadata is now 0.4.0.
  • Build, package, Zelwood deployment, hashes, and static validation are recorded in VALIDATION.md. No v0.4.0 gameplay result is claimed.

2026-08-24 — v0.3.9 aquatic ownership and shoreline Bonemaws

  • Replaced the invalid aquatic-monster rediscovery use of ZNet.GetAllCharacterZDOS() with direct ZDOID registration, resolution via ZDOMan.GetZDO, and loaded-instance resolution through ZNetScene.
  • Added bounded save/reload recovery through prefab-specific ZDOMan.GetAllZDOsWithPrefabIterative enumeration plus distinct ownership markers. Ordinary vanilla Serpents and Bonemaws are never adopted by either Hellworld tracker.
  • Project Snake Eyes now uses that tracker for duplicate prevention, expiry, obsolete-instance migration, and loaded/unloaded cleanup. Its spawn rules, level, lifetime, cooldowns, Sea Disturbance, and untouched vanilla AI remain unchanged.
  • Added independent shoreline ecology for the stock BonemawSerpent: server check every 60 seconds, 20% chance after a valid candidate, 15-30m player distance, at least 5m water depth, within 30m of sampled shore, and a strict cap of one marked Bonemaw within 150m.
  • Mod-owned shoreline Bonemaws are level 1 and retain the prefab's vanilla Demon faction, HuntPlayer=false, MonsterAI, movement, bite, spit, and taunt. Hellworld performs no target or aggression manipulation.
  • Added a 600-second hard lifetime and early cleanup after all living players remain farther than 200m for 60 continuous seconds. Expiry and away timing are persisted on the creature ZDO. Spawn, cap, cleanup, and recovery are logged.
  • Spawn That gameplay sections and all unrelated warband, stronghold, intruder, and Serpent-encounter balance remain unchanged. Metadata is now 0.3.9.
  • Build/deployment/package hashes and the result of static validation are recorded in VALIDATION.md. No v0.3.9 gameplay result is claimed.

2026-08-24 — v0.3.8 close-range Serpent spawn diagnostic

  • Changed Project Snake Eyes default horizontal spawn range from 45-55m to 10-15m for a focused vanilla-Serpent sensing/attack test.
  • Reduced the default minimum sampled water depth from 5m to 1.5m. Placement still requires an unblocked point whose ground + 0.5m spawn position is below the world water surface.
  • Added concise logs for threshold reached, death/return/retry cooldown blocks, an existing active encounter, water-candidate success/failure, and successful spawn distance. Repeated block logs are rate-limited to one every 30 seconds.
  • Made the swimming/occupied-ship requirement explicit in final candidate selection as well as disturbance sampling, including after a failed-water retry delay.
  • Preserved the ordinary vanilla Serpent, internal level 3/two stars, Quaternion.identity instantiation, untouched MonsterAI, five-minute hard lifetime, 15-minute death cooldown, Sea Disturbance rates, and all unrelated Hellworld spawners/warbands/strongholds.
  • Updated Zelwood's existing generated Elwood.Hellworld.cfg from 45/55/5 to 10/15/1.5 after preserving its pre-change copy under deploy-backups/20260824-004912/.
  • Assembly/plugin/manifest/package metadata is 0.3.8. Build, deployment, packaging, and source/install validation passed. Built and installed DLL SHA-256 is E3F7FCBDE2BA279969E3AEC363CD6722EF2AA8270F886961174EE4ED5DEEE9EC.
  • The deployed/source Spawn That config remains behaviorally unchanged and matches at 277E37018B3B072DFE5E384D0FDAFB5C838939F2CD637B0B2152C8D3E0B20EC1; its only v0.3.8 change is the package-version comment. Package output is dist/Hellworld-0.3.8.zip.
  • No v0.3.8 gameplay observation is claimed.

2026-08-23 — v0.3.7 single-Lox encounters

  • Changed only Hellworld WorldSpawner 9014 GroupSizeMin and GroupSizeMax from 3 to 1. Each successful Hellworld Lox check now creates exactly one unstarred Lox instead of a three-creature herd.
  • Preserved SpawnChance=3, SpawnInterval=900, all-land biome scope, MaxSpawned=3, level 1-only rules, group radius, terrain conditions, HuntPlayer=false, blank faction override, and every other Lox field.
  • Keeping MaxSpawned=3 means separately successful checks may still accumulate as many as three nearby Lox; it does not make one check spawn three creatures.
  • Lox remains outside the DLL warband system. No C# gameplay logic or other Spawn That entry changed.
  • Assembly/plugin/manifest/package metadata is 0.3.7. Build, static validation, deployment, and source/install validation passed. Built and installed DLL SHA-256 is BCB3CD0ADE55E378F68EDA00044A5B008ECF0A7550DF696586506897E7FB7FF0.
  • The deployed/source Spawn That config matches at 6E8CAD8BF89E93F34AEBA4A7B32D2B509879BAA5FCE48435C76430FA87E9325D. The prior Zelwood copy is preserved under deploy-backups/20260823-222454/; package output is dist/Hellworld-0.3.7.zip.
  • No v0.3.7 gameplay result or fresh runtime export is claimed.

2026-08-23 — v0.3.6 complete warband spawn audit

  • Audited every code-defined warband/fixed squad and the three-Lox group against the source config, the last loaded Spawn That configuration export, current world-spawner data, and Valheim 0.221.12's SoftReference manifest.
  • Verified the runtime prefab corrections GoblinBrute for Fuling Berserker, SeekerBrute for Seeker Soldier, Morgen_NonSleeping for the outdoor Morgen, Greydwarf_Elite for Greydwarf Brute, and all other leader/follower names.
  • Found one intended existing warband without a Hellworld outdoor leader source: GoblinBrute. The ordinary Fuling entry 9013 uses Goblin and cannot trigger the exact Berserker mapping.
  • Added ID 9044, HellWorld_Apex_GoblinBruteWarband: GoblinBrute, all land, 2% per 1200 seconds, cap one, group one, fixed level 1. Its generic warband adds three unstarred Goblin followers.
  • Added the requested rare Ghost source as ID 9043, HellWorld_Apex_GhostSquad: Ghost, all land, 2% per 1200 seconds, cap one, group one, fixed level 3.
  • Changed the fixed Ghost definition to one level-3/two-star leader plus three level-3/two-star Skeleton followers carrying vanilla skeleton_bow. Fixed count and persisted bow loadout remain; no star inflation or combat logic was added.
  • Reconciled ID 9017 Stone Golem's config from level 1-2/25% to level 1 only, matching the fixed unstarred leader already enforced by the DLL. Its 2% chance, 900-second interval, cap one, and every other spawn field are unchanged.
  • Confirmed the other outdoor leader sources and rates remain unchanged: Troll 9011, Abomination 9012, Lox 9014, SeekerBrute 9031, Morgen_NonSleeping 9034, Dvergr 9040, Wolf Alpha 9041, and Fenring 9042.
  • The source supplemental table now contains 27 custom entries and expects 112 post-change runtime rows with the 85 vanilla entries. No vanilla/native entry is modified.
  • Added static audit assertions for every encounter's source, biome scope, chance, interval, cap, levels, group, and follower definition.
  • Assembly/plugin/manifest/package metadata is 0.3.6. Build, static validation, deployment, and source/install validation passed. Built and installed DLL SHA-256 is 3CA2CE2C8F059A29A154DA8AA4D1DBD65E70A0CD757448F61578CFFB74844145.
  • The previous Zelwood DLL/config are preserved under deploy-backups/20260823-193427/. The changed 27-entry Spawn That source was deployed and matches the installed file at D5AE5CE9451C86897156C8557FFE3C159AFBFF41F692AE5BBC7582CA8286E8BF. Package output is dist/Hellworld-0.3.6.zip.
  • No v0.3.6 gameplay result or fresh runtime export is claimed; both require a Valheim world load.

2026-08-23 — v0.3.5 Ghost archer squad

  • Added a fixed Ghost squad: one level-1/unstarred Ghost leader and three level-1/unstarred Skeleton followers, exactly four creatures requested.
  • Verified current runtime/asset identifiers rather than assuming a dedicated archer creature. Valheim exposes Ghost, Skeleton, and the skeleton_bow weapon; no Skeleton_Archer character prefab exists.
  • Added an optional fixed weapon to follower definitions. The Ghost followers instantiate the ordinary Skeleton prefab and restrict its vanilla random weapon loadout to skeleton_bow before Humanoid.Start.
  • Persisted the follower weapon identifier in the follower ZDO and re-applied the instance loadout before normal startup after reload. The ordinary Humanoid.GiveDefaultItems path still creates/equips the weapon.
  • Added no targeting, attack, projectile, faction, or other combat logic. Ghosts and Skeletons retain their normal vanilla faction and AI behavior.
  • The Ghost definition uses fixed leader level 1 and fixed follower count, so neither leader stars nor FollowersPerLeader can inflate the squad.
  • No Ghost world-spawner was added because this focused pass supplied no biome, chance, interval, or cap rule. The squad attaches when another legitimate source creates a Ghost and outdoor follower placement succeeds.
  • Spawn That configuration, other warbands, Project Snake Eyes, Mountain strongholds, and all unrelated systems remain unchanged.
  • Assembly/plugin/manifest/package metadata is 0.3.5. Build, static validation, deployment, and source/install validation passed. Built and installed DLL SHA-256 is 919E2749F4348C646199023D2911398B762D3CC956FF41481975F9BDC71AF723. The previous Zelwood copy is preserved under deploy-backups/20260823-191609/; the byte-identical Spawn That configuration was not recopied. Package output is dist/Hellworld-0.3.5.zip.
  • No v0.3.5 gameplay result is claimed. Exact composition, persisted bow loadouts, and projectile behavior require the user's runtime test.

2026-08-23 — v0.3.4 Stone Golem support squad

  • Replaced the fixed StoneGolem -> 3 Bat entourage with two level-1 Greydwarf_Shaman and one level-1 Greydwarf_Elite (the Greydwarf Brute).
  • Added an explicit fixed leader-level field and set only the Stone Golem definition to internal level 1. Newly processed squad leaders are therefore always unstarred even if their spawner initially rolled a higher level.
  • The squad requests exactly four creatures total: one unstarred Stone Golem, two unstarred Shamans, and one unstarred Brute. It never reads the generic star-scaled follower count.
  • Removed Bat from the active warband definitions. Existing Golems already carrying Elwood.Hellworld.WarbandSpawned are deliberately not rewritten.
  • The two follower prefabs are instantiated unchanged. Hellworld adds no healing, targeting, faction, or other AI behavior; Shamans retain vanilla faction healing naturally.
  • Verified the exact prefab identifiers Greydwarf_Shaman and Greydwarf_Elite in the current Zelwood Spawn That export and runtime log.
  • Spawn That configuration, Project Snake Eyes, other warbands, Mountain strongholds, and all unrelated systems are unchanged.
  • Assembly/plugin/manifest/package metadata is 0.3.4. Build, static validation, deployment, and source/install validation passed. Built and installed DLL SHA-256 is 422F00766E24FF83C63AD546E6B28476E84DCA43630CA5EDF2F21F9E10A47827. The previous Zelwood copy is preserved under deploy-backups/20260823-185945/; the unchanged Spawn That configuration was not recopied. Package output is dist/Hellworld-0.3.4.zip.
  • No v0.3.4 gameplay result is claimed. Exact composition and vanilla Shaman healing require the user's runtime test.

2026-08-23 — v0.3.3 vanilla-AI Project Snake Eyes

  • User runtime testing of v0.3.2 confirmed that the two-star Serpent spawned, noticed/followed the player, and roared but never executed its normal attack.
  • The test log captured the same invalid forced state on three encounters: creatureTarget=Human, preferredCanSense=False, preferredCanSee=False, and weapon=none.
  • Current-game IL inspection confirmed that HuntPlayer lets FindEnemy fall back to an unsensed player within 200m and drives movement/alert behavior, while the actual attack path still requires native visibility, weapon, range, interval, and facing gates. This explains the misleading chase without combat.
  • Removed all Hellworld combat/target manipulation: no private target reflection, SetTarget, SetHuntPlayer, Alert, SetFollowTarget, sensing checks, target maintenance, target player ZDO, or patrol-point writes remain.
  • Removed AI-driven retreat, target replacement, shoreline stalking, and inland leash logic. Encounter expiry now directly removes the marked loaded creature or unloaded ZDO and applies the existing return cooldown.
  • Shore activity may still build Sea Disturbance, but encounter creation now waits until the candidate is swimming or aboard a boat. New default sampling distance is 45-55m, close to vanilla's 50m Serpent distance. Zelwood's active generated configuration was updated from 50-80m to 45-55m for this test.
  • Spawning uses Quaternion.identity, matching vanilla SpawnSystem, and logs the untouched prefab HuntPlayer/alert/avoid-land/player-object values without changing them.
  • Added schema version 1 to new marker ZDOs. Any active pre-v0.3.3 encounter is destroyed once because an older build may have persisted HuntPlayer=true.
  • Added an idempotent per-ZDO death marker so duplicate death callbacks cannot restart or double-log the same 15-minute cooldown.
  • Retained the regular vanilla Serpent, fixed Character level 3/two stars, normal display name, disturbance system, one-active marker, death/return cooldowns, compatibility keys, Spawn That entries, warbands, and Mountain systems.
  • The old generated InlandEscapeDistance and RetreatDurationSeconds config lines may remain as harmless orphans; v0.3.3 no longer binds or reads them.
  • Assembly/plugin/manifest/package metadata is 0.3.3. Build, packaging, deployment, and source/install validation passed. Built and installed DLL SHA-256 is 3CB203F5E4B697236EBAE7846EC5C4CA258811791C35DB3B5A742EFFD41FE5FA. The prior Zelwood copy was preserved under deploy-backups/20260823-185209/; the unchanged Spawn That config was not recopied. Package output is dist/Hellworld-0.3.3.zip.
  • No v0.3.3 gameplay result is claimed. Vanilla Serpent target acquisition and attacks remain for the user's next test.

2026-08-21 — v0.3.2 Project Snake Eyes identity correction

  • Reverted the proposed v0.3.1 Bonemaw identity before its gameplay test. Project Snake Eyes once again instantiates the ordinary vanilla Serpent.
  • Restored the fixed Character level to 3, producing exactly two visible stars.
  • Kept all display/object-name assignments absent. The system and its files remain Project Snake Eyes internally, but the creature displays the normal vanilla Serpent name in game.
  • Preserved the v0.3.1 combat correction: passive SetFollowTarget(player) is still removed, HuntPlayer/alert remain active, the player is seeded into native combat targeting at encounter start, and later ticks do not overwrite an existing native target.
  • Preserved Sea Disturbance, shoreline-building input, water placement, retreat/despawn, recurring 15-minute death cooldown, persistence identifiers, file/class names, Spawn That configuration, warbands, and Mountain systems.
  • A marked v0.3.1 Bonemaw encounter is retired automatically so it cannot be mistaken for the current regular-Serpent encounter after upgrading.
  • Assembly/plugin/manifest/package metadata is 0.3.2. Build, packaging, deployment, and source/install validation passed. Built and installed DLL SHA-256 is 01660FD4868CEB184B8370C6EC5079CAE9BE50A421E03B1E0B1ABB58E909E060. The previous Zelwood copy was preserved under deploy-backups/20260821-172418/; the unchanged Spawn That config was not recopied. Package output is dist/Hellworld-0.3.2.zip.
  • No v0.3.2 gameplay result is claimed. Project Snake Eyes combat remains for the user's next test.

2026-08-21 — v0.3.1 recurring Bonemaw combat correction

  • Replaced the recurring encounter's ordinary Serpent prefab with the native Ashlands BonemawSerpent. This is a Hellworld-owned encounter instance, not a new Spawn That entry and not a global change to either vanilla prefab.
  • Changed its fixed Character level from 3 to 2: it is always one-star, as proposed for the tougher native Bonemaw base creature.
  • Removed every encounter display/object-name override. The player sees the prefab's normal generic Bonemaw name; no special Snake Eyes or White Whale name is assigned by Hellworld.
  • Preserved the older Hellworld_WhiteSerpent, Elwood.Hellworld.WhiteWhale, White Whale config section, and defeated_hellworld_white_whale persistence key internally so existing configuration/cooldown data remains compatible.
  • Diagnosed the passive v0.3.0 behavior against current MonsterAI.UpdateAI: when the AI lacks a usable native combat selection but has m_follow, it runs Follow(...) and returns. Hellworld had reapplied that player-follow target every five seconds, which explains why the Serpent tracked but did not fight.
  • Removed the passive player-follow bridge. Hellworld now clears m_follow, enables native HuntPlayer, alerts the AI, and seeds the player as a native combat target once at the 50–80m offshore spawn. Later ticks only seed when vanilla sensing accepts the player and never replace an existing creature, ship/static, or other valid target. Bonemaw chooses and executes its native bite, ram, spit, and breath attacks.
  • Added migration that retires a still-marked ordinary Serpent from an older encounter instead of accepting it as the new Bonemaw instance.
  • The reported wood-chopping spawn was not caused by chopping. The test log contains repeated Shore build disturbance +10 events that raised the total above the threshold immediately before the encounter tick. Woodcutting has no disturbance hook. Shoreline piece placement remains intentionally unchanged.
  • Kept Sea Disturbance rates, water sampling, spawn distance, recurrence, retreat/despawn, 15-minute death cooldown, Hellworld spawners, stars, warbands, Mountain locations, and squads unchanged.
  • Assembly/plugin/manifest/package metadata is 0.3.1. Build, packaging, deployment, and source/install validation passed. Built and installed DLL SHA-256 is FD0761E8503965CEFA5910B4E52E7FBDA62DD79775302BF4D1F3ADEBBC61F37D. Zelwood's previous installed copy was preserved under deploy-backups/20260821-171117/; the unchanged Spawn That config was not recopied. Package output is dist/Hellworld-0.3.1.zip.
  • Post-fix Bonemaw combat still requires an actual Valheim gameplay test; this pass does not claim one.

2026-08-21 — v0.3.0 Mountain Dvergr strongholds and fixed squads

Mountain locations

  • Added a ZoneSystem.SetupLocations postfix that clones the intact vanilla Mistlands_GuardTower1_new, Mistlands_GuardTower2_new, and Mistlands_GuardTower3_new SoftReference locations for Mountain placement.
  • Preserved each source prefab and its buildings, loot, local Dvergr defenders, terrain footprint, and other internal content. Only the clone's world-placement fields are changed.
  • Each variant requests 120 locations, is prioritized/non-unique, accepts all Mountain biome-area bands at altitude 20-1000, and shares a 300m minimum separation group. Center-distance and forest gates are cleared.
  • Added generated config settings for enabling outposts, requested quantity per variant, and shared minimum separation.
  • Did not add Jotunn: the current game exposes ZoneLocation.Clone, and retaining the original vanilla SoftReference avoids registering a new asset prefab.
  • Did not force Valheim's persisted LocationsGenerated state false. A new world is the clean supported placement path; an already-generated world requires an explicit external location-regeneration workflow.

Dvergr patrols

  • Added Spawn That ID 9040, tagged HellWorld_Mountain_DvergrPatrol: one unstarred Dverger leader, all land biomes, defeated_bonemass, 30% per 300 seconds, maximum two nearby tagged leader prefabs, and a one-creature Spawn That group.
  • The tagged leader receives exactly one unstarred DvergerMageFire, one DvergerMageIce, and one DvergerMageSupport, for four Dvergr total.
  • No faction or aggression override is applied; the patrol retains neutral vanilla Dvergr relations until provoked.

Mountain warbands

  • Replaced StoneGolem -> Wolf with a fixed StoneGolem -> 3 Bat definition. Golem stars no longer inflate that entourage.
  • Added Mountain-only Spawn That ID 9041, HellWorld_Mountain_WolfAlpha: fixed internal level 2, 12% per 600 seconds. The tagged Alpha receives exactly three level-1 Wolves, for four total.
  • Added rarer Mountain-only ID 9042, HellWorld_Mountain_FenringHunt: fixed internal level 2, 8% per 900 seconds. The tagged Fenring receives one level-2 Fenring_Cultist and three level-1 Ulv, for five total.
  • Refactored warband definitions to support mixed fixed-level follower lists while retaining the old generic 3/4/5 formula for Troll, Abomination, GoblinBrute, SeekerBrute, and Morgen variants.
  • Special squads require Spawn That's persisted spawn_template_id; ordinary Wolves, Fenrings, Dvergr defenders, and universal intruders cannot trigger them. Followers are marked before Start to prevent Wolf-to-Wolf recursion.
  • Verified current prefab names from the installed Valheim assets: Bat, Wolf, Fenring, Fenring_Cultist, Ulv, Dverger, DvergerMageFire, DvergerMageIce, and DvergerMageSupport.

Snake Eyes test evidence

  • The latest Zelwood log records Snake Eyes killed: respawn cooldown active for 15 minutes and a persisted expiry at world time 21665. This confirms the kill/death-hook half of v0.2.2 worked in gameplay. Blocking before expiry and renewed eligibility afterward still need a focused runtime check.

Build status

  • Bumped plugin, assembly, manifest, package, and validator metadata to 0.3.0.
  • Static build, package, deployment, and source/install validation passed. The build and installed DLL SHA-256 is EACD1C9ADBEE6AF0B0224B0BF6841043C5A104D85E96BB5E774585FD02345074.
  • Deployed to Zelwood with the previous installed files preserved under deploy-backups/20260821-101917/. The supplemental config was updated because the three new tagged leader entries changed its hash.
  • Final diagnostic-log rebuild was redeployed with backup stamp 20260821-102029; the already-current supplemental config was not recopied.
  • Package output is dist/Hellworld-0.3.0.zip.
  • A fresh Spawn That runtime export requires entering a Valheim world and is not claimed by this build/deploy pass.
  • No v0.3.0 Mountain location or squad behavior is claimed as gameplay-tested.

2026-08-21 — v0.2.2 Snake Eyes death cooldown

  • Replaced permanent Snake Eyes defeat with a recurring respawn rule.
  • Killing Snake Eyes now starts DeathCooldownSeconds, default 900 seconds (15 minutes), measured in persistent Valheim world/network time.
  • Reused the established internal key defeated_hellworld_white_whale as a valued key containing the cooldown expiry. The identifier remains unchanged, while a bare key from v0.2.0/v0.2.1 is treated as a legacy permanent-defeat marker and removed so existing worlds can adopt the new recurrence rule.
  • Clears Character.m_defeatSetGlobalKey on the marked Serpent so vanilla death processing cannot recreate a permanent defeat flag.
  • Death clears accumulated disturbance and overrides the prior encounter return timer with exactly the new death expiry. Maritime activity may rebuild disturbance during the cooldown, but spawning remains blocked until it ends.
  • After expiry, Snake Eyes is merely eligible under the existing Sea Disturbance rules; it is not force-spawned.
  • No combat, spawn-distance, retreat, warband, Spawn That, star, or ordinary Serpent behavior changed in this pass.
  • Built, packaged, and deployed v0.2.2 to Zelwood. Build and installed DLL hashes match at A65A1B71E7A72B4965ECAD3972E104CD1056E875CE9A5C1F09F1662E46369B78; deployment preserved the previous installed copy under deploy-backups/20260821-094557/.
  • Static/API validation passed. The death/expiry/respawn sequence still requires an in-game test and is not claimed as gameplay-verified.

2026-08-21 — v0.2.1 Snake Eyes combat correction

  • Changed the creature's visible Character.m_name from White Whale to Snake Eyes. Compatibility-facing internals remain unchanged: Elwood.Hellworld.WhiteWhale, Hellworld_WhiteSerpent, the existing White Whale config section, and defeated_hellworld_white_whale.
  • Diagnosed the 0.2.0 runtime report: Snake Eyes spawned, held Character level 3, and tracked the player, but performed no attacks.
  • Removed the five-second active-hunt rewrite of MonsterAI.m_targetCreature, m_targetStatic, and m_lastKnownTargetPos. That rewrite could drive the HuntPlayer movement branch even when native sight had not admitted the target; the same AI's attack branch requires a visible native combat target.
  • Persistent stalking now uses MonsterAI.SetFollowTarget. Native MonsterAI retains ownership of creature/static combat targeting, weapon selection, range, angle, and StartAttack. Hellworld seeds the preferred player only after CanSeeTarget accepts it and never overwrites an existing creature or ship target.
  • Added a 30-second debug snapshot of native target, sight/sense, equipped weapon, and alert state for the next gameplay test.
  • Fixed the startup Harmony exception on Player.PlacePiece: its Vector3 postfix parameter is now bound positionally (__1) instead of depending on Valheim's current parameter name pos. This restores shoreline-build disturbance.
  • The complete 0.2.0 test log contained two red error headers, both views of that one Hellworld Harmony patch exception. No other Hellworld exception was present.
  • No Spawn That entry, Sea Disturbance value, spawn distance, level rule, retreat, persistence key, warband behavior, or ordinary Serpent was changed.
  • Built, packaged, and deployed v0.2.1 to Zelwood. Build and installed DLL hashes match at E3852A53A767EDF24B19F0A6C47E7A720DFAE39A7135D87C74AE2C3BF9FCA0EE; the previous test copy is preserved under deploy-backups/20260821-093358/.
  • Build/static validation completed; post-fix Serpent combat still requires an in-game retest and is not claimed as gameplay-verified.

2026-08-20 — v0.2.0 standalone home and Project Snake Eyes

Permanent development home

  • Relocated only Hellworld-owned editable material to C:\Users\eldth\Documents\ValheimMods\Hellworld; the old Codex workspace remains intact as backup.
  • Proved the relocated project before feature work by compiling a byte-identical v0.1.2 DLL with SHA-256 AA16558EC49E6BDE53A887EE5038302CA6B39061C048345F2C64A3253CCBB43F.
  • Added a solution, ignored machine-local path file, one-command local build, install-shaped packaging, guarded Zelwood deployment with exact-file backups, and source/build/install validation.
  • Added only the minimal modern Roslyn C# compiler runtime plus its notices under tools/roslyn/; the build has no compiler path into the old workspace and emits the same single mscorlib 4.0 identity as the known-good DLL.
  • Standardized build output under dist/build, packages under dist/, and the installed test copy under Zelwood. Source and live installation are distinct.
  • Kept Spawn That external. No Spawn That implementation code or DLL was copied into Hellworld.

Snake Eyes prototype

  • Added WhiteWhaleSystem, a periodic server-authoritative encounter controller that instantiates the native Serpent prefab only after per-player Sea Disturbance reaches a configurable threshold.
  • Added disturbance for swimming, occupied boats, wading, moving near shoreline, and verified shoreline placement reports; inland quiet decays disturbance.
  • Added bounded deep-water sampling, delayed failure retries, and configurable spawn distance/depth/attempt limits.
  • Marked the networked instance with Elwood.Hellworld.WhiteWhale; internal implementation identity is Hellworld_WhiteSerpent.
  • Forced and maintains Character level 3. Current EnemyHud code maps level 3 to the two-star display, while level 2 maps to one star.
  • Preserved vanilla Serpent model, animation, water locomotion, combat, faction, and drops. No Jotunn runtime dependency or registered replacement prefab was introduced.
  • Maintains player target and HuntPlayer interest through shore escape while native m_avoidLand keeps the Serpent in water.
  • Added maximum encounter duration, inland escape leash, a stable deeper-water retreat patrol point, network-safe despawn, return cooldown, expired/unloaded ZDO cleanup, and duplicate-marker removal.
  • Added persistent defeat key defeated_hellworld_white_whale; death disables future Snake Eyes encounters in that world across reloads.
  • Deferred custom dock/structure targeting, summoning, taming, saddles, riding, custom models/VFX/attacks, and any mount-mod integration.
  • Did not alter the 22-entry Spawn That intruder config, vanilla world spawners, ordinary Serpent probability, inverted-star rules, or warband behavior.

Required gameplay test

  • Confirm spawn height/buoyancy, two visible stars, player/occupied-boat attack effectiveness, shore prowl, retreat motion/despawn, recurrence, and persistent defeat in Valheim. Compilation and static validation do not establish these runtime behaviors.

Final deployment

  • Final Roslyn-built DLL SHA-256: ABB5E6C7B74D5EEE160E3FD0B224DD7BBE5E4B833CC27AF5DF7C515857CD2F4C.
  • Deployed the exact build to Zelwood on 2026-08-21 after confirming Valheim was closed.
  • Preserved the immediately previous installed files under deploy-backups/20260821-071732/.
  • Source/build/installed DLL hashes match. Source/installed supplemental Spawn That config hashes also match; deployment therefore did not rewrite that already-correct configuration.

2026-08-17 — bootstrap diagnostics

  • Profile inspected: Zelwood
  • Confirmed Valheim 0.221.12 and BepInEx 5.4.23.3 from the active log.
  • Confirmed Spawn That 1.2.18 is installed and loads successfully.
  • Verified Valheim.SpawnThat.dll against the official package SHA-256: 7D5FC2D6378CEB03A1A1CF65E9AFC955DB4B128C47C2937A9A6D3150DA531534.
  • Backed up the generated spawn_that.cfg as spawn_that.cfg.pre-hellworld-20260817-202923.bak.
  • Enabled only the WorldSpawner pre-change, post-change, and merged-config diagnostic exports.
  • No vanilla spawner was changed.
  • No spawn_that.world_spawners.hellworld.cfg has been installed yet.
  • Decision: extra Serpent spawners and artificial Serpent aggression are omitted from v0.1. Vanilla Serpent behavior remains unchanged.

Next test

Launch the Zelwood profile, enter a world, remain loaded for at least 10 seconds, then quit. Inspect BepInEx/Debug/spawn_that.world_spawners_pre_changes.txt before authoring the v0.1 intruder entries.

2026-08-17 — v0.1 authored

  • Preserved the runtime pre-change, loaded-config, and post-change exports under exports/baseline-0.221.12/.
  • Confirmed 85 runtime world-spawner entries with IDs 0-84.
  • Confirmed no custom world-spawner configuration was loaded at baseline.
  • Added spawn_that.world_spawners.hellworld.cfg with 23 supplemental entries using unused IDs 9000-9034.
  • Added seven Common, eleven Dangerous, and five Apex intruders.
  • Included the current Call to Arms Bjorn and Unbjorn prefabs from the runtime export.
  • Limited every HELL WORLD creature to level 1 and groups of one, except Greydwarves which may form pairs.
  • Explicitly excluded Ocean and cleared progression, distance-to-center, and world-age restrictions on all added entries.
  • Explicitly disabled HuntPlayer and SetRelentless; no faction is overridden.
  • Validated all 23 prefab names against the 0.221.12 pre-change export, checked for ID collisions and duplicate keys, and verified all caps are at most two.
  • Investigated wandering bosses in the current game assembly. Boss death runs Character.OnDeath, which applies m_defeatSetGlobalKey through ZoneSystem.SetGlobalKey; bosses are therefore omitted from the config-only v0.1 experiment.

Next test

Install the supplemental file, enter a world, and confirm the post-change export contains exactly 108 entries: 85 baseline plus 23 HELL WORLD entries. Only then begin the 30-60 minute density and behavior playtest.

2026-08-17 — v0.1 runtime verified

  • Spawn That loaded all 23 HELL WORLD configurations without an error.
  • Runtime export counts are exactly 85 pre-change, 23 loaded HELL WORLD, and 108 post-change entries.
  • Compared all critical applied values against the authored file.
  • Compared every exported field of vanilla IDs 0-84 before and after changes; all 85 vanilla entries are unchanged.
  • Preserved the successful exports under exports/hellworld-v0.1-runtime/.
  • First observed result: a Bear, Charred Warrior, and Deathsquito appeared near the starting area during the short verification session.
  • Assessment: the unusually dangerous opening is valid independent-spawner variance, not evidence of a parsing or merge error. No balance change was made because the tester reported that the intended hostile feel was working.

Next test

Run one uninterrupted 30-60 minute travel session, including a night, and note foreign population accumulation and frame-time behavior. Avoid tuning based on the first short high-roll session alone.

2026-08-17 — standalone plugin and warbands

Project and dependency boundary

  • Created the independent BepInEx plugin project under Hellworld/ with GUID Elwood.Hellworld, display name Hellworld, and version 0.1.0.
  • Added an explicit hard BepInEx dependency on Spawn That's verified plugin GUID asharppen.valheim.spawn_that.
  • Kept the working mixed-biome ecology in the supplemental Spawn That config. It was not rewritten in C#.
  • Referenced BepInEx, Harmony, Valheim, and Unity assemblies for compilation. No third-party source or implementation DLL was copied into the project or distributable.
  • Jötunn was not introduced.

Star difficulty correction

  • Verified in Valheim 0.221.12 that SpawnSystem treats a negative override as the ordinary world level-up roll. At the default world modifier this is 10% per level: approximately 10% one-star and 1% two-star.
  • Changed all remaining Hellworld spawners from LevelMax=1 and LevelUpChance=0 to LevelMax=3 and LevelUpChance=-1.
  • Kept LevelUpMinCenterDistance=0, so the normal star roll is available from the starting region.
  • No spawn chance, interval, biome, cap, group, faction, or aggression value was retuned.

Fallen Valkyrie removal

  • Removed Hellworld entry 9033 (FallenValkyrie) from the supplemental config.
  • Left the prefab, stats, drops, faction, and vanilla Ashlands entry untouched.
  • Existing individuals are not scanned or deleted.
  • Hellworld now adds 22 spawners: seven Common, eleven Dangerous, four Apex.

Warband system

  • Added exact leader-prefab mappings for Troll, Abomination, Stone Golem, Fuling Berserker, Seeker Soldier, and both ordinary Morgen prefab identities.
  • Normal leaders request 3 followers; one-star leaders request 4; two-star leaders request 5.
  • Followers are direct vanilla prefab instances and are never leveled, tethered, commanded, replaced, or reinforced by Hellworld.
  • Patched the narrow Character.Start and Humanoid.Start lifecycle methods. Current Valheim overrides the latter without calling the former, so both are required. There is no global or per-frame scan.
  • Resolves leader identity from the ZDO prefab hash; no fuzzy display-name matching is used.
  • Requires a valid owning ZNetView. The owner writes the persistent marker Elwood.Hellworld.WarbandSpawned before any follower instantiation.
  • Added bounded placement attempts, ground/slope/water/vertical checks, and graceful partial spawning.
  • Added startup validation that rejects any mapping whose follower is itself a leader, preventing reinforcement recursion.

Build and deployment

  • Built Hellworld.dll successfully against Valheim 0.221.12, BepInEx 5.4.23.3, and Harmony 2.9.0.0.
  • DLL SHA-256: F3C43DE6DE9D698F5B0F3C83F22200AB993A3CC226CE7D29E74689D22073E8EB.
  • Staged the clean distribution under dist/Hellworld-0.1.0/.
  • Deployed the DLL to the Zelwood test profile under BepInEx/plugins/Elwood-Hellworld/.
  • Backed up the working prototype Spawn That config as spawn_that.world_spawners.hellworld.cfg.pre-warband-20260817-232849.bak before installing the Fallen-free/star-enabled revision.

Runtime status

  • Compilation, static validation, plugin startup, and applied Spawn That export validation passed.
  • Normal three-follower entourages were observed for a Troll and a nearby Morgen during the first gameplay smoke test.
  • Starred entourage counts, persistence after reload, follower non-replacement, and multiplayer behavior still require in-game verification.

2026-08-18 — warband runtime smoke test

  • Confirmed both plugins loaded in the active Zelwood log: Spawn That 1.2.18 and Hellworld 0.1.0. No related exception or error was logged.
  • Confirmed current runtime export counts: 85 pre-change vanilla entries, 22 loaded Hellworld configurations, and 107 post-change entries.
  • Preserved this verified export set under exports/hellworld-v0.1.0-warband-runtime/.
  • Compared every exported field of vanilla IDs 0-84 before and after changes; all 85 vanilla entries remain unchanged.
  • Confirmed the exact 22 intended Hellworld IDs are present. Entry 9033 is absent, and the only remaining FallenValkyrie entry is vanilla ID 71, restricted to Ashlands.
  • Confirmed all 22 applied Hellworld entries use LevelMax=3 and LevelUpChance=-1, preserving Valheim's ordinary repeated star roll.
  • Observed a normal Troll with three Greydwarf followers and a normal Morgen with three Charred Twitcher followers. Both exact warband mappings therefore fired in live gameplay.
  • A separate ten-minute period without a noticed new intruder is not considered a failure. At the configured Common rates, the raw-roll model alone gives about a 19% chance of no Common success in ten minutes; terrain, proximity, and existing-creature caps can make quiet periods more frequent.
  • No density or probability values were changed from this small sample.

Next test

Continue ordinary play long enough to evaluate density over 30-60 minutes. For warband mechanics, test one-star and two-star leaders for 4/5 followers, then verify that killing a follower or reloading the same leader does not create a replacement band.

2026-08-18 — v0.1.1 flyer gate and Ashlands frequency

Hostile-flyer progression

  • Verified the current internal prefab names against the Valheim 0.221.12 runtime table: Hatchling, Deathsquito, Gjall, and Volture.
  • Verified the normal Bonemass global key is defeated_bonemass.
  • The current 22-entry Hellworld file contains Deathsquito and Gjall, but contains no supplemental Hatchling or Volture spawner. No new entries were invented for those two creatures, and their vanilla spawners remain untouched.
  • Identified Wraith as the other current dedicated airborne Hellworld entry.
  • Added RequiredGlobalKey = defeated_bonemass only to Hellworld IDs 9015 (Deathsquito), 9016 (Wraith), and 9032 (Gjall). Their chances, intervals, caps, biome sets, factions, aggression, and other fields are unchanged.
  • Primarily ground-based Seeker remains ungated.

Ashlands intruder reduction

  • Intersected the current vanilla Ashlands prefab roster with the current Hellworld layer. The five matching Hellworld intruders are Surtling, Charred_Twitcher, Asksvin, Charred_Melee, and Morgen_NonSleeping.
  • Reduced only SpawnChance, to exactly 10% of each prior value:
    • Surtling: 8 -> 0.8
    • Charred Twitcher: 6 -> 0.6
    • Asksvin: 3 -> 0.3
    • Charred Warrior: 3 -> 0.3
    • Morgen: 2 -> 0.2
  • Intervals, population caps, group sizes, stars, stats, AI, factions, and native Ashlands spawners are unchanged.
  • Volture is a native Ashlands creature, but there is no Hellworld Volture entry to reduce or gate. Fallen Valkyrie remains absent from Hellworld.

Build and static validation

  • Bumped the package/plugin version to 0.1.1 and rebuilt successfully against Valheim 0.221.12 and BepInEx 5.4.23.3.
  • Built assembly version: 0.1.1.0.
  • DLL SHA-256: 7BA1ED29948A28EDE8EDB64D67367BEE2C7800C01936C2F213117C4896688D9C.
  • Compared the old and new parsed Spawn That files: both contain 22 sections, and the only eight property differences are the five chance reductions and three Bonemass keys listed above.
  • Confirmed all 22 star settings remain LevelMax=3 and LevelUpChance=-1; confirmed zero Hellworld FallenValkyrie sections.
  • No Serpent or warband behavior was changed.

Runtime status

  • Build and static config validation passed.
  • Deployed the package-identical DLL and config to the established Zelwood test profile. The deployed hashes match the staged 0.1.1 distribution.
  • Preserved timestamped pre-0.1.1 backups with stamp 20260818-012127 beside the active DLL and Spawn That config.
  • After a fresh world entry, Spawn That loaded all 22 Hellworld configurations without a related log error and exported exactly 85 pre-change, 22 loaded, and 107 post-change entries.
  • Compared all fields on vanilla IDs 0-84 between fresh pre/post exports; all 85 entries are unchanged.
  • Confirmed the applied post-change table contains the three exact Bonemass keys and five exact decimal chances documented above, with no validation mismatch.
  • Confirmed the only applied FallenValkyrie is unchanged vanilla ID 71. Hatchling ID 48 and Volture ID 75 likewise remain vanilla-only.
  • Preserved the fresh evidence under exports/hellworld-v0.1.1-balance-runtime/.
  • This validates loading and table application only. No claim is made yet about observed pre-/post-Bonemass spawn behavior or long-session ecology balance.

2026-08-18 — v0.1.2 inverted stars and Lox herds

Native-biome classification

  • Classified every current Hellworld prefab against the preserved Valheim 0.221.12 vanilla world-spawner table, using primary progression biome rather than later post-boss foreign-biome spillover entries.
  • Black Forest: Greydwarf, Skeleton, Bjorn, Troll.
  • Swamp: Draugr, Blob, Surtling, Abomination, Wraith.
  • Mountain: Wolf, StoneGolem.
  • Plains: Goblin, Lox, Deathsquito, Unbjorn.
  • Mistlands: Seeker, SeekerBrute, Gjall.
  • Ashlands: Charred_Twitcher, Asksvin, Charred_Melee, Morgen_NonSleeping.
  • No current Hellworld intruder is primarily Meadows-native.
  • Resolved Skeleton as Black Forest because it is Black Forest-era dungeon progression despite later broad world-spawner coverage. Resolved Surtling as Swamp because Swamp geysers are its first normal progression encounter, despite a second native Ashlands world-spawner entry.

Inverted intruder stars

  • Applied Black Forest LevelMin=2, LevelMax=3, LevelUpChance=50.
  • Applied Swamp LevelMin=1, LevelMax=2, LevelUpChance=50.
  • Applied Mountain LevelMin=1, LevelMax=2, LevelUpChance=25.
  • Applied Plains, Mistlands, and Ashlands LevelMin=1, LevelMax=1, LevelUpChance=0.
  • Left LevelUpMinCenterDistance=0 and all spawn-frequency, interval, biome, aggression, faction, stat, and progression-key values unchanged.
  • Did not alter the warband system. It continues to read the resulting leader level and request 3/4/5 followers for unstarred/one-star/two-star leaders.

Three-Lox herds

  • Changed Hellworld Lox ID 9014 to GroupSizeMin=3, GroupSizeMax=3, and MaxSpawned=3.
  • Verified in the installed SpawnSystem.UpdateSpawnList IL that group size is clamped to MaxSpawned - currentCount. Raising the previous cap of one was therefore required for an initial group of three to be possible.
  • Left Lox chance 3, interval 900, group radius 3, biome rules, AI, faction, stars, and other settings unchanged.
  • Lox was not added to the warband mapping; no Lox-to-Lox recursion exists.

Static/build status

  • Parsed comparison against the v0.1.1 source config found exactly 47 intended property changes: 44 level fields plus the three Lox cap/group fields.
  • Both source files contain the same 22 Hellworld section IDs; no unexpected property changed and FallenValkyrie remains absent.
  • Bumped the package/plugin version to 0.1.2 and rebuilt successfully against Valheim 0.221.12 and BepInEx 5.4.23.3.
  • Built assembly version: 0.1.2.0.
  • DLL SHA-256: AA16558EC49E6BDE53A887EE5038302CA6B39061C048345F2C64A3253CCBB43F.
  • Staged dist/Hellworld-0.1.2/ and deployed package-identical DLL/config files to the established Zelwood profile.
  • Preserved timestamped pre-0.1.2 backups with stamp 20260818-014356 beside the active DLL and Spawn That config.
  • After a fresh world entry, BepInEx loaded Hellworld 0.1.2 and Spawn That 1.2.18 without a related error.
  • Fresh export counts are exactly 85 pre-change, 22 loaded Hellworld, and 107 post-change entries.
  • Compared every field on vanilla IDs 0-84 between pre/post exports; all 85 entries are unchanged.
  • Verified every loaded and applied Hellworld level triple against the 22-entry native-biome matrix with zero mismatches.
  • Verified applied Lox ID 9014 uses MaxSpawned=3, GroupSizeMin=3, and GroupSizeMax=3, while chance 3, interval 900, and group radius 3 remain unchanged.
  • Rechecked that the Bonemass flyer gates, reduced Ashlands chances, and vanilla-only Fallen Valkyrie ID 71 remain intact.
  • Preserved the fresh evidence under exports/hellworld-v0.1.2-inverted-stars-lox-runtime/.
  • Runtime table application is validated. No claim is made yet about observed star-frequency distributions or a naturally spawned three-Lox herd.