Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
DropNSpawn
Easy way to configure all drops, spawns and events(raid) by reference system. Prevent high tier mobs spawning on low tier biomes. Make dungeon creaturespawners respawn. Multiple trophies and stacked drop instantly from creatures with linear scaling.
| Date uploaded | a day ago |
| Version | 1.4.5 |
| Download link | sighsorry-DropNSpawn-1.4.5.zip |
| Downloads | 41 |
| Dependency string | sighsorry-DropNSpawn-1.4.5 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2351README
DropNSpawn
Customize Valheim's drops, loot, spawners, world spawning, and raids with YAML. Use generated references to find prefab names and values, then edit only what you need.
| Character drops | Object loot | Spawners |
|---|---|---|
![]() |
![]() |
![]() |

What you can change
| Domain | Controls |
|---|---|
character |
Creature drops, quantities, chances, level scaling, and stacked loot |
object |
Chests, pickables, fish, trees, rocks, destructibles, and their loot |
spawner |
SpawnArea and CreatureSpawner tables, intervals, limits, levels, and location rules |
spawnsystem |
World spawn tables, biomes, time of day, and progression requirements |
events |
Raid definitions, spawn lists, conditions, and scheduling |
Install
Install the same DropNSpawn version and its dependencies on the server and all clients. A mod manager is the simplest option; for manual installation, place DropNSpawn.dll in BepInEx/plugins/.
Requires BepInExPack Valheim 5.4.2351. Expand World Data is optional: DNS's basic drops, spawners, world spawning, raids, and native faction overrides work without it. Install EWD 1.71 or newer on the server and clients to use spawn data/fields/objects, event startCommands/endCommands, or EWD custom biomes. Without EWD, nonempty extension settings reject the affected domain's configuration update and retain its previous accepted configuration; they are not silently ignored. Empty extension fields are allowed.
Character-drop handling has been updated for Valheim 1.0.20. See the earlier compatibility notes for reviewed EWD builds and existing-YAML update notes. Restart after changing the installed mod set; mixed EWD capability between peers is not supported for EWD-dependent configurations.
Quick start
- Start the game or server and load a world once to generate the configuration files.
- Open
BepInEx/config/DropNSpawn/and find the relevantDNS_<domain>.reference.yml. - Copy the entries you want to customize into
DNS_<domain>.yml, or a supplemental file such asDNS_character_wolves.yml. - Save. Loaded YAML files reload at runtime; on a multiplayer server, edit the server's files.
For example, put this in DNS_character.yml to replace Lox loot:
- prefab: Lox
characterDrop:
drops:
- item: LoxMeat
amount: 4~6
- item: LoxPelt
amount: 2~3
- item: TrophyLox
chance: 0.1
levelMultiplier: false
Global options live in BepInEx/config/sighsorry.DropNSpawn.cfg. All five domains start enabled; toggle them under 4 - Domains. Loot scaling, stacked drops, trophy scaling, and event scheduling have their own settings; most server-facing settings sync from the server.
Character drops support levelMultiplierNotAmount (default false). With both levelMultiplier: true and levelMultiplierNotAmount: true, stars increase the drop chance without multiplying its amount. DNS preserves this game policy, including original prefab drops. If multiple rows share that drop prefab, DNS leaves their star scaling to the game as a group, because generated results do not identify which row succeeded. This exception also applies to global trophy scaling and custom stacked/limited drops; other drop prefabs keep their configured DNS scaling. Update the server and all clients together when using this build.
Under 2 - Character, monster instant loot drop blacklist defaults to Dragon, Hatchling. These creature prefabs keep normal ragdoll loot timing even when instant loot is enabled. Use comma-separated names, or leave it empty for no exclusions; changes affect new ragdolls.
With EpicLoot, ordinary CharacterDrop loot can still drop instantly, but EpicLoot's additional rewards (including LuckyLoot bonus rolls) stay at normal ragdoll cleanup time. This avoids rolling those rewards twice. If DNS cannot verify/install the optional EpicLoot guard, instant loot falls back to normal timing without changing your settings. EpicLoot reward amounts and its saved ragdoll data are not changed.
Know before editing
- SpawnSystem replaces the main world spawn table. Keep every row you still want across your loaded SpawnSystem files. Unlike the other domains, it is not a set of small patches to existing rows. Valheim's separate AltBiome lists remain native.
- Custom drop lists replace native loot, not add to it. Matching Character rules merge their custom drops. Put
conditionsat the entry level, not on individual drop items. Omitted ornulldrops leave existing loot unchanged;drops: []explicitly contributes an empty replacement. - Spawner rules select one winner. The most specific passing selector wins; later-loaded entries break ties. Use top-level
locationsto scope a rule to a location. - CreatureSpawner cumulative limits are optional. Use
creatureSpawner.maxTotalSpawnsorDefault CreatureSpawner Max Total Spawnsin the config.0adds no limit and preserves one-time behavior; a positive limit counts successful spawns while enabled and stops the spawner without destroying it. See the spawner guide. - Generated files are lookup material. Do not edit
.reference.ymlor.full.ymlto change gameplay. Generated.sample.ymlfiles inexamples/are inactive until copied or renamed to a loaded override filename.
Both .yml and .yaml are supported. Loaded names are DNS_<domain> and DNS_<domain>_*, with either extension. Use events for raids, for example DNS_events.yml.
DNS_dungeon.yml separately adds periodic ordinary dungeon spawns with per-player probability rolls and shared per-rule/per-dungeon living limits. New files include English instructions and a commented example above the empty active list. Creature entries use prefab; old creature keys must be changed manually. Rules are server-owned; server and clients need the updated DNS build for safe placement checks. The optional CreatureManager 1.2.5 integration honors its boss/Enforcer spawn blockers. See the dungeon spawn guide for the inactive sample, schema and multiplayer behavior.
For dungeon spawn troubleshooting, temporarily set 5 - Diagnostics → Dungeon spawn diagnostics = On in the server's and reproducing clients' local cfg. It defaults to Off, is not synchronized, and logs bounded [DungeonDiag] summaries every 30 seconds without changing spawn conditions. See the diagnostic instructions.
Scale spawn intervals per file
Place this optional header before all prefab entries in a SpawnSystem override file:
- spawnIntervalMultiplier: 2.0
- prefab: Deer
spawnSystem:
spawnInterval: 36
This sets an effective interval of 72 seconds. 0.5 halves intervals; 2.0 doubles them. The multiplier must be finite and greater than zero, defaults to 1.0, and affects only that file—not event spawns. Decimal intervals are preserved. Keep the other world spawn rows you want; this is only a header example.
World-spawn timers use internal content-based IDs: no name or timerId is required, and different rules for the same prefab remain independent. Reordering rows or moving them between files preserves timers when their parsed settings stay the same. New or edited rules use vanilla first-check timing, without an extra full-interval wait; existing saved timers keep their progress. DNS stores these timers together and removes retired records as zones are processed. Old timers are not migrated or deleted, so existing save warnings may remain. Event and AltBiome timers are unchanged; update DNS on both the server and all clients.
References and commands
Reference files are generated automatically and refreshed when source data changes. Object and Spawner also provide .locations.reference.yml files for location lookup.
| Console command | Purpose |
|---|---|
dns:reference [object|character|spawner|spawnsystem|events|all] |
Regenerate reference files |
dns:full [object|character|spawner|spawnsystem|all] |
Write exhaustive, non-loaded .full.yml scaffolds |
dns:inspect spawner |
Inspect the current or nearest spawner and its location context |
Events use DNS_events.reference.yml instead of a separate full scaffold.
Using More World Locations AIO? Automatic Object/Spawner references skip MWL location interiors to avoid loading every bundle. Registered prefabs and override rules remain usable, and partial exports are labeled. If the MWL manifest is unavailable, automatic interior scanning is deferred for all locations.
Manual dns:reference object, dns:reference spawner, and dns:full spawner can load all location interiors, take minutes, and use substantial memory. Avoid these full exports on low-memory clients.
Compatibility
- Expand World Data 1.73: DNS manages normal world spawns, raids, and loot. EWD's corresponding Spawn/Event/Drop features are suppressed at runtime without changing its settings or YAML. World and AltBiome data remain EWD-owned, including AltBiome spawn
data,fields,objects, andfaction. DNS domain Off restores DNS's baseline; it does not enable EWD's overlapping features. Install matching builds on the server and clients and restart after changing the mod set. See the integration notes. - VNEI can display configured character drops. ESP is useful for inspecting spawns and objects.
- Creature Level & Loot Control: DNS's own character loot scaling is inactive by default when CLLC is installed. YAML overrides, stacked drops, instant loot, and OnePerPlayer range still work.
- If another mod owns the same system, disable the overlapping DNS domain: MonsterDB (
character,spawnsystem), Drop That! (object,character), Spawn That! (spawner,spawnsystem), or Expand World Spawns (spawnsystem). - Boss altar and boss-management features belong to BossRules; runestone pins and Vegvisir rewards belong to UsefulRunestones. DropNSpawn retains location lookup for Object and Spawner selectors.
Guides and support
CHANGELOG
1.4.6 — Predictable loot overrides and configurable star chance
- Add server-synchronized
chance-only drop chance scaling, defaultLinear, for original and YAML drops with bothlevelMultiplierandlevelMultiplierNotAmountenabled. The newchance-only drop chance increase per star (%)defaults to 50: a 10% base chance becomes 10%, 15%, 20%, up to 100%. Set the increase to 0 to keep the base chance, or selectVanillato retain exponential chance scaling. Amount settings remain separate, and the existing CLLC handoff disables DNS chance and amount scaling. - Make YAML
dropInStackexplicit: omitted/null inherits the global setting,truerequests stacks, andfalsekeeps separate drops. The stack blacklist still takes priority. Explicit trophylevelMultiplier: falsenow also opts out of global trophy amount scaling; original game rows keep their global eligibility. - Track successful drop rows so failed rolls for duplicate item prefabs cannot transfer their amount limit or stack choice to another row. Apply final amount limits, including zero, and preserve explicit stack choices in newly saved ragdoll loot for delayed and instant delivery. Older ragdolls without policy metadata inherit the global stack default; invalid metadata preserves saved loot. Keep the existing same-prefab chance-only exclusion from DNS amount scaling.
- Preserve omitted event metadata across successive YAML overrides, honor explicit empty condition/command lists, and retain empty message positions. Keep explicit false/zero values and documented tuple defaults.
- Keep all four blacklists and clarify their target prefab types, YAML priority and timing in config descriptions. The trophy blacklist excludes DNS trophy amount scaling only; it does not disable chance-only scaling. Instant-loot and killer-filter exceptions apply to victim creatures and have no per-drop YAML override.
- Update YAML templates and documentation. Existing user YAML is not rewritten: remove
dropInStack: falseor usenullwhere global inheritance is intended. Update the server and all clients to 1.4.6 together and restart.
1.4.5 — Valheim 1.0.20 character loot compatibility
- Preserve the game's new chance-only star-scaling flag when capturing, copying and restoring creature drops, including Vanilla loot mode and disabled character overrides.
- Add optional character-drop YAML
levelMultiplierNotAmount, defaulting tofalse, and preserve it through reference/scaffold output, compiled rules and server synchronization. When combined withlevelMultiplier: true, stars increase chance without multiplying the amount. Existing YAML needs no edits. - Keep same-prefab drop groups containing chance-only rows out of DNS CalculateChance and global trophy amount scaling, since generated results cannot identify which duplicate row succeeded. Apply the same policy to custom stacked/limited drops; other drop prefabs and one-per-player precedence retain their existing behavior.
- Upgrade the character synchronization payload from DTO 10 to 11 and reject incompatible payloads. Update the server and all clients to 1.4.5 together and restart.
- Add regression coverage for optional flag values, copying/restoration, YAML and network round trips, signatures, mixed drop groups and payload-version rejection. Original Valheim 1.0.20 client and dedicated-server managed checks pass; actual item spawning and multiplayer gameplay remain in-game verification steps.
1.4.4 — Dungeon detection in outer rooms
- Fix periodic dungeon rules becoming inactive in rooms outside the entrance's exterior/interior radius. Resolve interior players through the server's registered location for their zone, so outer rooms in the same dungeon retain the same rule matching, timer and shared spawn limit without requiring a loaded server-side dungeon scene.
- Preserve the native interior boundary, exact location names, per-instance identity, spawn radius, height, floor, collision and reachability checks. This does not enable spawning anywhere above the world or add support for relocated, stacked or multi-zone custom interiors. YAML, RPC and saved-data formats are unchanged.
- Extend the existing default-Off dungeon diagnostics with bounded location-detection results, zone and position samples to distinguish outside-interior players, missing zone locations and empty location names from placement failures.
- Add regression checks for outer rooms, adjacent locations, invalid positions, unchanged placement boundaries and diagnostic limits. Actual dungeon physics and multiplayer spawning remain in-game verification steps. Update the server and all clients to 1.4.4 together and restart.
1.4.3 — SpawnSystem first-check timing and dungeon diagnostics
- Restore vanilla first-check timing for new or edited DNS-owned normal SpawnSystem rules. Missing timers use the native zero baseline rather than starting a full-interval wait on first use; the original world-time calculation, catch-up cap, chance and spawn conditions still decide whether a check is due. Align the optional ESP timer reader with that baseline without writing timers.
- Preserve existing saved timer progress, including timestamps written by 1.4.0–1.4.2. This update does not reset active cooldowns, migrate or delete old keys, change timer identities/storage, or alter event and AltBiome timing.
- Add
5 - Diagnostics→Dungeon spawn diagnostics, defaultOff. Enable it separately on the server and reproducing clients for bounded[DungeonDiag]summaries every 30 seconds: scheduling/capacity, request/reply outcomes, floor/range/capsule/path rejection and final server validation. The option is local, live and not synchronized. - Correlate limited samples with existing request tokens. Collision samples are limited to two extra observation queries per reporting window; diagnostic Off does not build per-event strings, measure placement time or issue extra physics queries. Diagnostics do not change spawn conditions, RNG draws, retries, RPC payloads or saved world state.
- Add regression coverage for native first-check timing and diagnostic bounds, cleanup and unchanged placement decisions with diagnostics On/Off. Actual Unity physics, client instantiation and multiplayer reproduction remain in-game checks. Update the server and all clients to 1.4.3 together and restart; turn diagnostics Off after testing.
1.4.2 — Expand World Data 1.75 compatibility
- Support EWD 1.75's renamed constant-value factories. Select and cache the exact
Constant(string/int)or compatibleSimple(string/int)APIs instead of relying on version numbers or missing direct calls. Preserve literal faction values, reflected-field markers, expression parsing and standalone DNS behavior. - Validate the required data-value APIs during dependency setup. An installed incompatible EWD now fails explicitly before DNS initialization instead of silently treating the dependency as absent or discarding normal spawn entries as invalid YAML.
- Reject common dependency failures before strict local SpawnSystem configuration commit, and discard failed staged runtime builds without activating a partial table. Preserve existing live tables and event metadata/payloads when event candidate preparation fails; valid empty configurations and ordinary invalid-prefab filtering remain unchanged.
- Let queued game-data refresh finish other domains after a dependency failure without automatic per-frame retries. Existing network authority, YAML formats, timer storage and RPC schemas are unchanged.
- Add API-shape and isolated Mono regression coverage for EWD 1.75, the pinned 1.71 API and missing EWD, including failure after one successful row. Actual gameplay, coroutine scheduling and multiplayer synchronization remain in-game verification steps. Update the server and all clients to 1.4.2 together and restart.
1.4.1 — Dungeon spawn floor alignment
- Fix dungeon spawn candidates such as BlobElite being rejected because their capsule extends below the prefab pivot and intersects the supporting floor. Raise the actual spawn position just enough to align the capsule's lower edge with the floor; already-clear pivots remain unchanged.
- Keep navigation targeted at the supporting floor and revalidate the corrected position. Wall, ceiling, creature, distance and interior checks remain active; weighted selection, spawn chance, capacity limits, YAML formats and RPC schemas are unchanged.
- Add isolated Mono regression checks using original BlobElite/Skeleton capsule values, including scaling, obstruction rejection and the corrected height limit. These checks cover managed placement logic, not native Unity physics or actual multiplayer spawning.
- Update the server and all clients to 1.4.1 together and restart. Remote dungeon placement is checked in the selected client's loaded scene; actual dungeon and multiplayer behavior still require in-game verification.
1.4.0 — Content-based SpawnSystem timers and consolidated storage
- Store DNS-owned normal SpawnSystem timers in one versioned ZDO table per zone instead of adding a long key for every rule. Remove retired records from the new table when the owning zone next updates; disabled or currently ineligible accepted rules retain their records.
- Derive internal timer identities from normalized prefab and spawn settings. Unchanged rules keep their timers across YAML entry reordering, file moves and reloads. Different conditions for the same prefab remain independent; identical copies use separate duplicate ordinals. Existing YAML needs no changes, unique names or exposed timer IDs.
- Changing spawn settings, including name, interval, chance or the applied file multiplier, starts a new timer at its first eligible check and waits one interval. Toggling an entry's enabled flag does not change its identity.
- Batch timer writes on the zone owner and reject stale writes after ownership or stored-data replacement. Keep non-owner reads read-only, preserve unreadable or newer-format data, and pause that zone's managed normal spawning until valid data is available.
- Update the optional ESP timer reader to use the new table. Event, AltBiome and unmanaged SpawnSystem timers retain their native storage and behavior.
- Upgrade note: old timers are not migrated or read, so normal SpawnSystem timer progress restarts on first use. Old saved keys are not scanned or deleted, and existing save warnings may remain. Downgrading or removing DNS does not convert the new table back. Update the server and all clients to 1.4.0 together and restart; configuration and network schemas are unchanged.
- Add regression coverage for unchanged YAML, timer identities, duplicate rules, record cleanup, invalid data and ESP lookup, plus original-game-DLL Mono checks for owner writes, patch installation and single-ZDO save/load. Actual world restart, HUD and multiplayer ownership behavior remain in-game verification steps.
1.3.22 — Dungeon RPC shutdown and reconnect fix
- Fix duplicate dungeon RPC registration after world shutdown, including failed connections and lobby transitions. Keep registration tied to the existing RPC instance instead of clearing its record with world state; register normally when a new connection creates a new instance.
- Skip dungeon updates while ZNet or ZNetScene is disabled during shutdown. Preserve pending-request cleanup, stale/duplicate reply protection, spawn rules and configuration formats.
- Add isolated Mono regression checks for repeated resets, disabled network/scene state, new-instance registration and same-instance reactivation. The pre-fix build reproduces the reported duplicate key; actual connection failure and multiplayer rejoining remain in-game verification steps.
- Network schemas and RPC identifiers are unchanged. Update the server and all clients to 1.3.22 together and restart.
1.3.21 — Damage-over-time drop credit and EpicLoot compatibility
- When the player-aligned killer requirement is enabled, allow drops from lethal poison, fire or spirit pools with a confirmed player-aligned contribution, even when mixed with hostile or unknown damage. Unknown-only damage and unrelated active effects still do not qualify direct or environmental deaths. Preserve poison replacement and actual fire/spirit hit-channel rules.
- Capture DoT contribution before damage callbacks can change the pool, and defer source-ledger lookups until actual damage ticks rather than every status-effect update.
- Prevent DNS instant loot from rolling EpicLoot additional rewards twice. Ordinary CharacterDrop loot can remain instant, while EpicLoot rewards, including LuckyLoot bonus rolls, keep their normal ragdoll cleanup timing. Saved EpicLoot metadata is unchanged.
- Detect the optional EpicLoot callback by its installed API, not a version number. If its guard cannot be verified or installed, keep normal delayed loot timing without changing saved settings. Add isolated Mono coverage for contribution tracking, the supplied EpicLoot callback, nested calls, exceptions and safe fallback.
- Configuration keys/defaults, YAML formats and network schemas are unchanged. Update the server and all clients together; actual item spawning and multiplayer ownership remain gameplay checks. Partial item-spawning exception recovery is outside this compatibility fix.
1.3.20 — StartupAccelerator and Expand World Data compatibility
- Fix DNS startup failing with an EWD patch-ownership error when StartupAccelerator delays Harmony patch application. Apply only the EWD handoff gates immediately, including the earlier integrated EWD layout.
- Preserve StartupAccelerator's saved settings, existing passthrough entries and batching for unrelated patches. Temporary exemptions are restored after both successful and failed initialization; EWD world/AltBiome features and DNS ownership checks remain intact.
- Add isolated checks using the actual StartupAccelerator DLL for deferred initialization, rollback and batch-flush behavior. Configuration formats and network schemas are unchanged. Update DNS to 1.3.20 on the server and all clients together and restart; full mod-pack startup and gameplay still require in-game verification.
1.3.19 — Dungeon prefab keys and configuration guidance
- Rename dungeon
creaturesentries fromcreaturetoprefab. The old key is rejected without an alias or automatic migration; manually update existing dungeon rules and copied samples. Other domains, including fixed-spawnercreaturefields, are unchanged. - Include English instructions and a commented example when first creating
DNS_dungeon.yml. Keep the active list empty ([]) until rules are enabled, and explain removing[]before uncommenting or pasting the example. Existing configuration and sample files are preserved. - Share the example between the default header and inactive sample, and update validation messages and documentation. Add checks for the empty default, the uncommented example, prefab selection and rejection of the old key, including mixed-key entries.
- Preserve spawn scheduling, limits, placement checks, saved attribution and CreatureManager integration. Update DNS to 1.3.19 on the server and all clients together. Actual game and multiplayer execution remain separate verification steps.
1.3.18 — Periodic dungeon encounters
- Added server-owned
DNS_dungeon.ymlrules for location-based dungeon encounters: interval, per-player chance, weighted creature selection, spawn radius and a sharedmaxAlivelimit per rule ID and dungeon instance. Each living player gets one roll per interval while capacity remains; installing the update creates an empty configuration and an inactive sample. - Count this feature's living creatures and pending placements toward the shared limit, including unloaded creatures through persistent ZDO tags. Preserve attribution across saves, release slots on death, and count revived identities again. Vanilla, EWP, Enforcer and other rule spawns do not consume this rule's limit.
- Validate floor, clearance and reachability in the selected client's loaded dungeon, then validate the peer, character, current dungeon, distances and capacity on the server before creation. Reject duplicate/expired replies and simultaneous same-point placements; cancel reservations on departure, reload and world shutdown.
- Honor CreatureManager's existing boss/Enforcer ordinary-spawn blockers through the optional API added in CreatureManager 1.2.5. Without CM, encounters run standalone; an installed incompatible CM pauses dungeon spawning with a warning. Spawned creatures retain ordinary level, modifier, loot and Karma policies.
- Added scheduling, reservation, persistent-count and placement-response regression checks plus configuration documentation. Existing five-domain network schemas are unchanged. Update DNS to 1.3.18 on the server and all clients together; update CM to 1.2.5 too when installed. Actual dungeon physics, save/restart and multiplayer gameplay still require in-game verification.
1.3.17 — Expand World Data 1.74 compatibility
- Fixed startup failure with EWD 1.74 after its Spawn/Event managers and loading APIs were reorganized. Added support for its shared patch registry and independent Drop domain while retaining existing EWD 1.71/1.73 and standalone DNS paths.
- Select compatibility patches by actual types and method signatures instead of EWD version numbers. Equivalent APIs remain accepted when version labels change; missing required APIs fail explicitly rather than silently allowing conflicting owners.
- Keep EWD's overlapping Spawn/Event/Drop features disabled across initialization, reload and synchronization, even with enabled settings or nonempty tables. EWD world/AltBiome systems, spawn data/fields/objects/faction, and user configuration files remain unchanged.
- Added version-variant, missing-API and isolated Mono regression checks. YAML formats and network schemas are unchanged; update DNS on the server and all clients to 1.3.17 together and restart. Actual gameplay and multiplayer remain in-game verification steps.
1.3.16 — CreatureSpawner cumulative spawn limits
- Added the synchronized
Default CreatureSpawner Max Total Spawnsconfig and per-entrycreatureSpawner.maxTotalSpawnsYAML field. Omitted/null values inherit the config default;0adds no cumulative limit, and1–1000limits successful spawns per spawner instance. - Stored owner-counted successes in the spawner's ZDO while a positive limit is active. Reloading or disabling the limit preserves its saved count; earlier unlimited/pre-feature spawns are not counted retroactively. Reaching the limit stops spawning without destroying the CreatureSpawner, and raising the limit can allow spawning to resume under native rules.
- Preserved native one-time behavior, respawn timing, spawn connections and living-group limits. Exhausted group members are excluded from both candidate selection and the weight sum, so they cannot consume eligible members' spawn opportunities. Existing SpawnArea destruction behavior is unchanged.
- Updated generated templates, full scaffolds, cloning and synchronized payloads for the new field. The Spawner network schema is now 8; existing YAML remains valid, but update the server and all clients to 1.3.16 together and restart.
- Added original-game-DLL contract checks and isolated Mono coverage for counters, ownership, live default changes, one-time YAML values, patch installation and weighted group selection. Actual world-save/restart, ownership-transfer and multiplayer gameplay checks remain in-game verification steps.
1.3.15 — Standalone support and optional Expand World Data
- Made Expand World Data a soft dependency and removed it from the required package dependencies. Basic drops, spawners, world spawning, raids and faction overrides now work without EWD; existing optional CreatureManager faction integration is retained.
- Preserved spawn
data/fields/objects, eventstartCommands/endCommands, custom biomes, AltBiome metadata and overlapping-feature protection when EWD 1.71 or newer is installed. EWD is not bundled or modified. - Without EWD, nonempty EWD-only settings reject the affected domain's configuration update and retain its previous accepted configuration instead of silently ignoring those settings. Empty extension fields and disabled spawn rows remain valid.
- Kept YAML formats and all five domain network schemas unchanged. Added standalone loading, configuration rejection and EWD-present regression coverage using original client/server assemblies and isolated Unity Mono checks; actual gameplay and multiplayer still require in-game verification.
- Updated the BepInExPack Valheim package dependency to 5.4.2351. Update DNS on the server and all clients together and restart; install EWD on all participating peers when using EWD-dependent configurations.
1.3.14 — Expand World Data 1.73 compatibility
- Added runtime compatibility for EWD 1.73's integrated Spawn/Event/Drop features. DNS retains control of normal world spawns, raids and loot even when EWD's overlapping options are enabled, without rewriting EWD configuration values or YAML files. EWD's Multiple events and Check per player modes are also suppressed through the event feature gate.
- Preserved EWD's world, biome and AltBiome systems. AltBiome spawn
data,fields,objectsandfactionnow use the existing DNS spawn payload path, and these extension fields are retained when EWD exports AltBiome data for server synchronization. - Stopped retaining discarded AltBiome spawn metadata across reloads while preserving payloads still used by live heightmaps. No per-frame reflection or scene scanning was added.
- Prevented numeric global-key consumption from custom-data spawns when the DNS SpawnSystem domain is Off. DNS domain Off remains baseline restoration, not a handoff to EWD.
- Added official EWD DLL contract checks and isolated Mono coverage for patch installation, reload/sync entrypoint suppression, setting preservation and AltBiome metadata lifetime. Actual host/dedicated multiplayer spawning and synchronization remain in-game verification steps.
- Kept the existing EWD dependency minimum, YAML formats and DNS network schemas. Update the server and all clients to 1.3.14 together and restart. Legacy standalone EWS/EWE installations are outside this compatibility patch's supported scope.
1.3.13 — Instant loot exclusions and documentation cleanup
- Added the synced
monster instant loot drop blacklistsetting, defaulting toDragon, Hatchling. Matching creature prefabs keep their normal ragdoll loot timing while instant loot remains enabled for other creatures; drop contents, amounts and existing duplicate prevention are unchanged. - Made blacklist matching case-insensitive and live-updatable. Commas, semicolons and newlines are accepted, and an empty value removes all exclusions. Changes apply to newly created ragdolls.
- Simplified the README around installation, generated references, active YAML files, authoritative SpawnSystem behavior, MWL export safety and the most important override rules while keeping all existing images.
- Removed duplicate Character baseline storage and made config reload comparison use the existing domain-toggle map, reducing maintenance paths without changing YAML, network or public integration contracts.
- Added managed coverage for instant-loot defaults, exact prefab matching, live edits, cache invalidation and empty-list behavior. Actual ragdoll timing and multiplayer execution still require in-game verification; update all peers together for the mod version check.
1.3.12 — MWL reference generation safety
- Automatic Object/Spawner reference generation now skips More World Locations AIO location interiors before loading their assets. MWL is identified by its plugin GUID and manifest asset IDs; already registered prefab references and override behavior remain unchanged.
- Preserved existing full references instead of replacing them with partial automatic exports. New partial references are labeled and use distinct cache signatures. If the MWL manifest cannot be read, automatic location-interior scanning is deferred rather than force-loading all locations.
- Balanced location-scan soft-reference loads with releases, including failed loads, exceptions and early iterator disposal. Reused Spawner location results across its two reference outputs and stopped retaining every conflicting Object reference variant.
- Kept explicit
dns:reference objectanddns:reference spawnerfull exports available, with an MWL memory/time warning. Manual full exports can still be expensive on low-memory systems. - Added managed regression coverage for MWL asset exclusion, reference preservation, partial-export metadata, load/release structure and Object reference ambiguity. Steam Deck performance and gameplay with MWL have not been verified. YAML and network schemas are unchanged; update all peers together for the mod version check.
1.3.11 — Valheim 1.0.12 / Expand World Data 1.71
- Updated the Expand World Data dependency to 1.71.0 and the vendored ServerSync to the reviewed
valheim-1.0.7-r1reference, including its RPC constant and connection-buffer fixes. - Switched to original game assembly references and cached Harmony accessors for nonpublic game members. Updated location zone keys, the location-spawn patch signature, and event environment selection for the new biome sectors.
- Preserved the native persistent-event spawn requirement in YAML, reference/scaffold output, clones, signatures, and network payloads.
spawnSystem.requiredPersistentEventaccepts the event's internal name; an empty string clears the requirement. SpawnSystem DTO is now 4 and Event DTO is 3; update all peers to 1.3.11 together. Existing YAML remains valid. - Preserved the game's
cheateditem provenance in custom and stacked character drops. Matched parent-owned SpawnArea networking for total-spawn caps and persisted location selectors. - Added checks against both client and dedicated-server original assemblies, plus isolated tests using the game's Mono runtime and Harmony. Actual gameplay and multiplayer sessions have not been verified.
1.3.10
- Fixed explicit character
drops: []being ignored. Omitted/null lists still preserve existing drops; matching rules still combine their valid rows, and invalid-only lists do not clear loot. - Released event metadata and custom spawn payloads when their owning events/rows are no longer referenced, while retaining data for live clones.
- Added VNEI callback/coroutine cleanup and refresh failure recovery without discarding queued work on temporary indexing-readiness failures.
- Reduced redundant configuration/drop cloning and location reference scans, removed unreachable branches and forwarding methods, and moved related preparation/application code into existing files.
- Kept package generation out of Debug builds and retained ordinary Release ZIP packaging. Added managed regression checks and a separate gameplay validation guide.
1.3.9
- Added disabled-by-default synced
require player-aligned killer for character dropsand victim-prefab blacklist settings. When enabled, vanilla and YAML-driven non-playerCharacterDroploot requires a lethal source from a Player, tamed character, or thePlayers/PlayerSpawnedfactions. - Preserved player-aligned poison, fire, and spirit kill credit with low-overhead attribution across ragdoll and direct custom-drop paths; hostile, environmental, self, unknown, and mixed player-aligned/hostile lethal sources are suppressed.
1.3.8
- Deep-cloned static, snapshot, and conditional character-drop templates when assigning them to prefabs and live creatures, preventing in-place changes by other drop modifiers from leaking across same-prefab deaths or corrupting cached drop state.
1.3.7
- Fixed custom-handled and stacked character drops being snapped to the highest solid or terrain surface; they now use vanilla spherical placement around the character or ragdoll origin, preserving indoor, dungeon, structure, and airborne heights.
1.3.6
- Fixed
MultiplePerPlayerevent scheduling on dedicated servers by restoring the periodic current-event broadcast, keeping clients synchronized so event creature spawners can activate. - Added an optional per-file
spawnIntervalMultiplierheader for SpawnSystem override YAML, scaling explicit and native-default intervals before synchronized live application without changing prefab row order.
1.3.5
- Fixed a float-precision bug that could stop queued runtime work after about nine hours of uninterrupted uptime, preventing server-sync manifest publication, client payload application, and SpawnSystem live table updates.
- Extended the double-precision frame deadline to object and spawner reconciliation, object and character snapshot work, SpawnSystem and ESP refresh work, and VNEI refreshes.
- Added an ESP 1.37 SpawnSystem hover guard and cleared stale marker references during marker replacement to avoid invalid ZNetView/ZDO reads.
1.3.4
- Hardened correctness across hot reloads, temporary object overrides, delayed spawner activation, and synchronized payload worker shutdown.
- Reduced runtime and maintenance complexity by removing redundant state, forwarding layers, wrappers, and duplicated domain-specific paths while keeping related behavior co-located.
- Added Expand World Data 1.66-1.68 readiness compatibility, aligned the runtime and compile-time minimum with EWD 1.66, and retained support for the latest cloned-location and custom-biome behavior.
1.3.3
- Added optional CreatureManager faction integration so registered custom factions can be resolved, applied, listed in validation guidance, and restored from spawned-creature ZDO data.
- Preserved native and ExpandWorldFactions handling while adding a soft dependency to ensure CreatureManager's faction API is available before DropNSpawn initializes.
1.3.2
- Fixed
character loot system = CalculateChanceso non-trophy drops participate in linear per-star amount scaling only when their native or YAMLlevelMultiplieristrue. - Kept
global trophy level multiplieras an explicit exception: enabled, non-blacklisted trophy drops use linear per-star amount scaling regardless oflevelMultiplier; disabled or blacklisted trophies retain their native or YAML behavior.
1.3.1
- Replaced the separate synced
Multiple eventsandCheck per playersettings withEvent scheduling mode:Vanilla,MultipleGlobal, orMultiplePerPlayer. The former config keys are no longer read. - Changed multiple-event collision handling so a new attempt inside
Minimum distance between eventsis discarded while the existing event continues, instead of stopping and replacing the existing event. - Fixed per-player event scheduling so the global timer advances correctly, non-positive standalone intervals remain disabled, and each matured standalone event evaluates every player before its timer resets once.
- Added synced
Event duration multiplierwith a0~3range. Positive values scale durations not explicitly set by YAMLsettings[2];0disables every event whose effective duration is positive while leaving duration-0events enabled. - Preserved positional
''placeholders in eventsettings, allowing later fields to be overridden while an earlier field is omitted, and documented the syntax in generated override YAML. - Canonicalized the known duplicate vanilla
army_moderandarmy_theeldervariants in event references, applied same-name overrides to every original variant, and collapsed equivalent overridden variants to avoid duplicate selection weight.
1.3.0
- Breaking: SpawnSystem override rows now accept only one flat
spawnSystemblock inDNS_spawnsystem.yml, supplementalDNS_spawnsystem_*.yml/.yamlfiles, and eventspawns. The former nested spawnconditionsandmodifiersblocks are no longer supported. - Back up edited overrides, then either regenerate the SpawnSystem/Event override YAML from the new templates and reapply your entries, or manually remove each nested
conditions:andmodifiers:header and move those fields underspawnSystem:as shown below. Event-levelconditionsremains unchanged. - Unified SpawnSystem and event-spawn models, clone paths, generated reference/full output, and synchronized payloads. Event spawns now expose the same custom-data fields, including
objects. - SpawnSystem schema and full output now show the native effective
spawnRadiusdefault as40~80;0endpoints still use the native40/80fallback.
Before:
- prefab: Boar
spawnSystem:
level: 1~3
groupRadius: 5
conditions:
noSpawnRadius: 64
biomes: [Meadows]
modifiers:
faction: Demon
After:
- prefab: Boar
spawnSystem:
level: 1~3
groupRadius: 5
noSpawnRadius: 64
biomes: [Meadows]
faction: Demon
Version |
Update Notes |
|---|---|
| 1.2.8 | - Hardened synchronized payload handling with strict SHA-256 manifest validation, bounded compressed/decompressed sizes, chunk-count checks, and safe cache paths. - Simplified spawner selector matching and cache state while preserving exact Expand World Data cloned-location matching. - Removed unused compatibility and transport forwarding layers, runtime aliases, stale helpers, and obsolete design documents. - Co-located small state implementations with the code that owns them to reduce source-file count and navigation without adding new abstractions. |
| 1.2.7 | - Added synced disable DNS character loot scaling when CLLC is loaded, which treats DNS character loot system, both per-star loot chance options, and global trophy level multiplier as inactive at runtime when Creature Level & Loot Control is loaded, while leaving YAML overrides, drop-in-stack, instant loot, and OnePerPlayer behavior active. - Added a synced general option to set zero-minute CreatureSpawner respawn timers to a default 0-60 minute value unless YAML specifies creatureSpawner.respawnTimeMinutes; the default is 0, so the option is off until configured. - Changed event reference generation to use the pre-DNS baseline event list and group entries by resolved spawn prefab owner, so removed event-providing mods disappear from generated references and mod-added events are easier to scan. |
| 1.2.6 | - Added synced events domain support with YAML-driven random event overrides, event spawns, global event settings, and reference output. - Added character loot system with Vanilla and CalculateChance; CalculateChance keeps successful drop chances intact and scales final item amounts with separate creature/boss per-star chances. - Kept global trophy level multiplier as the toggle that lets trophies join DNS linear level scaling, while avoiding vanilla exponential level multiplier stacks. - Fixed EWD cloned location selectors by preserving exact clone prefab names through spawner provenance and shared location condition resolution. - Added a synced global-key safety option that globally disables SpawnSystem entries with requiredGlobalKey in Meadows, BlackForest, Swamp, Mountain, or Plains. |
| 1.2.5 | - Breaking: DNS_location.yml is no longer generated, loaded, synchronized, or exposed through dns:reference / dns:full; BossRules and UsefulRunestones own the former location-domain features. - Breaking: DNS_character.yml no longer supports despawn or bossTamedPressure; boss despawn rules, boss-tamed pressure, per-player boss stones, remote Forsaken Power selection, and CreatureSpawner same-boss duplicate blocking moved to BossRules. - Added synced monster instant loot drop config that spawns monster loot immediately while ragdolls keep their vanilla lifetime. - Changed global trophy level multiplier to scale successful trophy drops by 50% per extra creature level while avoiding vanilla exponential trophy stack scaling. - Removed runtime work profiler/debug hot-path logging and the Debug Runtime Work Profiling config to reduce overhead. - Updated Thunderstore description; DropNSpawn still keeps internal location lookup helpers for object/spawner locations: selectors. |
| 1.2.4 | - Fixed RuneStone global pins on dedicated servers by resolving location targets on the authoritative server and returning the selected pin to clients. - Fixed Same Boss Duplicate Block for CreatureSpawner so duplicate-blocked bosses do not finish their respawn delay while the previous boss is still alive. - CharacterDrop now supports non-item prefabs, such as monster prefabs, in reference/override YAML and VNEI display. Non-item drops default levelMultiplier to false; item drops keep the vanilla-style default of true. |
| 1.2.3 | - Added Vegvisir global effects with biome-based weighted status rewards, optional FX, localization, and DNS_ClearStatus. - Breaking: removed location vegvisirs pin-edit fields and location runestones edit/reference fields; Vegvisirs keep vanilla pins and RuneStone location reveals use runestoneGlobalPins. - Historical note for 1.2.3 users: regenerate DNS_location.yml on a new profile, or regenerate the current file if it was not edited. - Breaking: spawner location filters now use locations: [] instead of location: and can match multiple locations. - Added global trophy level multiplier config with blacklist support. - Reference files now auto-update; SpawnSystem reference is generated from vanilla and upstream mod data, not DNS override YAML. - Removed manual reference update mode, old diagnostics logging options, afternoon timeOfDay support, and the OnePerPlayer living-player toggle; nearby OnePerPlayer checks now count living players only. - Cleaned config ordering, transport sync, and runtime queue performance. |
| 1.2.2 | - Refactoring and optimizations |
| 1.2.1 | - Added RuneStone global pins, allowing pinless RuneStones to reveal a saved map pin for a configured location. - Added SpawnArea total spawn limits, allowing spawners to automatically break after a set number of successful spawns. |
| 1.2.0 | - VNEI shows fish's random loot with DNS installed |
| 1.1.9 | - Vegvisir supports weighted random location pinning. Put weight: n on vevgisir.locations in locations.yml |
| 1.1.8 | - Boss despawn when no player is near(configurable) - Boss despawn refund offerings when they are stated in the character.yml Block summon and spawn of more than one boss wihtin the area(configurable) - Organized configs and refactored some codes for better performance - Better support for EWD fields |
| 1.1.7 | - Fixed boss trophy sacrificing - Fixed forsaken rotation making UI too often |
| 1.1.6 | - Optimized objectdrop hotpath - Fixed bossstone reset command not working on host self |
| 1.1.5 | - Refactored huge amount of codes - Removed cllc fields since it can be done with ewd field - Added rotation of forsaken powers - Added per player bossstones option |
| 1.1.4 | - Fixed destructibleType field casuing framedrop when it is in object override.yml |
| 1.1.3 | - Fixed EWD clone locations not working as conditions for character,object and spawner domain |
| 1.1.2 | - Fixed location domain triggering errors related monstrum locs |
| 1.1.1 | - Spawnsystem reference would be generated through command only - Lightened up how spawnsystem domain works - Fixed serversync not working for spawnsystem on dedi for real |
| 1.1.0 | - Ligthened some queue logic for some domains |
| 1.0.9 | - Fixed framedrop with treebase/minerock health override - Fixed spawnsystem reference not generating automatically sometimes |
| 1.0.8 | - Fixed spawnsystem serversync not working on some clients on dedi |
| 1.0.7 | - Fixed creaturespawner edit not working on dedi |
| 1.0.6 | - Fixed cloned location not working with dns location conditions on dedi - Fixed spawners not working with location conditions on dedi |
| 1.0.5 | - Fixed serversync not working on some domains - Fixed cloned location not being applied in override yml - Fixed custom biome spawnsystem lines being not shown through ESP - VNEI compatibility is now always live - Performance and network performance improvement |
| 1.0.4 | - Support for custom EWD biomes on all domains and conditions |
| 1.0.3 | - Improved reference grouping and fps |
| 1.0.2 | - Lightened spawnsystem check and other domains to reolve hitch |
| 1.0.1 | - Resolved hitch that was caused by deleting obsolete spawnsystem lines |
| 1.0.0 | - Initial Release |


