ChorusReef-Bifrost_Breakout icon

Bifrost Breakout

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

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.