sighsorry-DropNSpawn icon

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.

Last updated 2 hours ago
Total downloads 5166
Total rating 2 
Categories Mods Tools Server-side Client-side World Generation AI Generated Deep North Update
Dependency string sighsorry-DropNSpawn-1.3.12
Dependants 5 other packages depend on this package

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
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.2350
JereKuusela-Expand_World_Data-1.71.0 icon
JereKuusela-Expand_World_Data

Allows adding new biomes and changing most of the world generation.

Preferred version: 1.71.0

README

DropNSpawn

Configure object and creature drops, object loot, spawners, and world spawning. Add stacked drops, level-scaled trophies, VNEI support, and location-scoped spawner rules.

Version 1.3.12 targets Valheim 1.0.15, Expand World Data's 1.71 API and the reviewed 1.72 hotfix build, and BepInExPack Valheim 5.4.2350. See compatibility notes for the prior 1.3.11 verification scope, dedicated-server result, and the one SpawnSystem value update that existing YAML may need.

Domains

Domain What it controls
character CharacterDrop loot, one-per-player drop counting, and drop-in-stack
object Containers, pickables, pickable items, fish, destructibles, mine rocks, trees, and object drop tables
spawner SpawnArea and CreatureSpawner tables, intervals, caps, level ranges, and location-scoped spawner rules
spawnsystem World SpawnSystem rows, biome rules, time-of-day rules, global-key gates, and extended spawn data

spawnsystem is a full replacement domain for SpawnSystem.m_spawnLists: keep every row you still want in that table. Valheim 1.0.15's separate AltBiome spawn lists continue through the game's native path. spawnSystem.requiredPersistentEvent preserves a row's native persistent-event requirement; use the event's internal name, or '' for no requirement.

Location

DropNSpawn no longer owns a user-editable DNS_location.yml domain. Boss altar, altar ItemStand, same-boss duplicate blocking, boss despawn, and boss-tamed pressure rules live in the standalone BossRules mod. DropNSpawn keeps internal location lookup helpers for object and spawner locations: selectors.

RuneStone global pins and Vegvisir rewards live in the standalone UsefulRunestones mod.

Character

  • configure creature loot
  • merge multiple conditional loot rows for the same creature
  • VNEI-compatible character drop display
  • drop creature loot in one stack when configured
  • onePerPlayer can count nearby living players within the configured range

Omitting characterDrop.drops (or setting it to null) leaves the existing drops unchanged. An explicit drops: [] replaces them with an empty list when that rule matches. Matching rules still merge their valid drop rows; a nonempty list containing only invalid items does not clear existing drops.

Object

  • chest loot replacement
  • tool-tier and health changes for trees and rocks
  • tree or rock drop changes
  • pickable loot changes (bone piles, fish, berries)
  • destructible health and spawn-on-destroy changes
  • DNS_object.locations.reference.yml exists because many objects are dependent on locations

Spawner

  • change spawn tables
  • change spawn intervals, trigger distance, caps, level range, respawn time
  • apply location-scoped spawner overrides with top-level locations
  • ExpandWorldData compatible
  • DNS_spawner.locations.reference.yml exists because many spawners are dependent on locations

SpawnSystem

The vertical lines in the spawner image are world SpawnSystem checks.

  • biome/world spawn rules
  • global-key-gated spawning
  • time-of-day spawn rules
  • world-level conditional behavior
  • ExpandWorldData compatible
  • SpawnSystem rows and event spawns use the same flat spawnSystem block; nested spawn conditions and modifiers blocks are not supported.
  • This domain is authoritative and replaces the live SpawnSystem table with the rows you define.
  • Above image explains how Valheim world spawning works.

Each loaded SpawnSystem override file can independently scale the intervals of all rows in that file by putting an optional header first:

- spawnIntervalMultiplier: 2.0

- prefab: Deer
  spawnSystem:
    spawnInterval: 36

The example produces an effective interval of 72 seconds. The header is not a SpawnSystem row and does not change the order of the prefab rows. The multiplier must be a finite number greater than zero; omitting it means 1.0. A value of 0.5 halves intervals and makes checks more frequent, while 2.0 doubles intervals and makes checks less frequent. Rows without an explicit spawnInterval scale the native 4 second default. Invalid headers reject the reload and keep the previous authoritative configuration. Event spawns in DNS_events.yml are not affected.

Workflow

  1. Open BepInEx/config/DropNSpawn/.
  2. Use the generated .reference.yml files to find real prefab names and current values.
  3. Copy only the rows you want to change into DNS_<domain>.yml or DNS_<domain>_*.yml.
  4. Save the YAML file. DropNSpawn reloads loaded YAML at runtime.

Generated samples live in BepInEx/config/DropNSpawn/examples/. They are safe examples until you copy them into an active override file or rename them to a loaded DNS_<domain>_*.yml file.

YAML Files

Loaded override files:

  • DNS_<domain>.yml
  • DNS_<domain>.yaml
  • DNS_<domain>_*.yml
  • DNS_<domain>_*.yaml

Generated helper files:

  • DNS_<domain>.reference.yml shows current game data and prefab names.
  • DNS_object.locations.reference.yml shows which location roots contain object prefabs.
  • DNS_spawner.locations.reference.yml shows location context for spawner rules.
  • DNS_<domain>.full.yml is an exhaustive scaffold written by dns:full; it is not loaded.

Use one primary file per domain when possible. Supplemental files are useful for splitting large configs by biome, progression tier, or feature.

Reference Updates

Reference files are generated lookup snapshots. Missing reference files are created automatically, and existing reference files are updated automatically when their source game data changes.

Notes:

  • DNS_spawnsystem.reference.yml is generated from vanilla and upstream mod SpawnSystem data. DNS_spawnsystem.yml full overrides are not used as reference source data.
  • DNS_object.locations.reference.yml and DNS_spawner.locations.reference.yml are generated lookup files and are also kept up to date automatically.
  • With More World Locations AIO installed, automatic Object/Spawner exports skip MWL location interiors to avoid loading every MWL bundle on first connection. Already registered prefabs and all override rules remain available. Partial exports are labeled in their headers; existing unmarked/full references are preserved instead of replaced by a partial export.
  • MWL is identified by its plugin GUID and manifest asset IDs, not by a prefab-name prefix. If its manifest is unavailable, automatic interior scanning is deferred for all locations rather than risking a full load. Registered-prefab exports still work.
  • dns:reference object and dns:reference spawner explicitly include all location interiors and replace the corresponding references with full exports. These commands (and dns:full spawner) can still take minutes and use substantial memory with MWL; avoid running them on low-memory clients. Automatic and full exports use different cache signatures.

Console Commands

  • dns:reference [object|character|spawner|spawnsystem|all] Regenerates reference files.
  • dns:full [object|character|spawner|spawnsystem|all] Writes non-loaded full scaffold files.
  • dns:inspect spawner Shows the current or nearest spawner target and resolved location selector context.

Useful Config

Most server-facing settings are synced from the server.

Domain toggles live under 4 - Domains:

  • Enable Object Overrides
  • Enable Character Overrides
  • Enable Spawner Overrides
  • Enable SpawnSystem Overrides
  • Enable Event Overrides

General and character settings include:

  • Lock Configuration
  • Default SpawnArea Max Total Spawns
  • Default zero CreatureSpawner respawn time minutes
  • OnePerPlayer drop check range
  • character loot system
  • disable DNS character loot scaling when CLLC is loaded
  • chance for additional loot per star for creatures
  • chance for additional loot per star for bosses
  • global drop in stack
  • global drop in stack blacklist
  • global trophy level multiplier
  • global trophy level multiplier blacklist

character loot system = CalculateChance keeps each successful non-trophy character-drop chance intact and scales its final item amount by the configured per-star chance only when that drop's levelMultiplier is true. Trophy drops use that linear scaling whenever global trophy level multiplier is on, regardless of their levelMultiplier value.

disable DNS character loot scaling when CLLC is loaded defaults to On. It does not rewrite the config values shown for DNS loot scaling; when Creature Level & Loot Control is installed, DNS treats character loot system, both per-star loot chance options, and global trophy level multiplier as inactive at runtime so CLLC can own loot quantities. YAML overrides, drop-in-stack, instant loot, and OnePerPlayer range still work.

Default zero CreatureSpawner respawn time minutes defaults to 0 and accepts 0~60; 0 disables the option. It changes only CreatureSpawner components whose current respawnTimeMinutes is 0; YAML creatureSpawner.respawnTimeMinutes values keep priority.

Event settings include:

  • Event scheduling mode
  • Default event player base
  • Minimum distance between events
  • Event duration multiplier
  • Random event chance
  • Random event interval

Event scheduling mode supports Vanilla (one active event and one server-wide check), MultipleGlobal (multiple active events and one server-wide check), and MultiplePerPlayer (multiple active events with one independent check per player). Standalone event checks follow the selected global or per-player mode.

Event duration multiplier accepts 0~3. Positive values scale event durations that are not explicitly set by YAML settings[2]; 0.5 halves them, 1 keeps them unchanged, and 2 doubles them. 0 disables every event whose effective duration after YAML is positive, while duration-0 events remain enabled.

Default event player base can globally treat events without YAML conditions.playerBase as Off, Away, Near, or AwayAndNear. YAML event overrides keep priority.

Boss altar rules, same boss duplicate blocking for altars and CreatureSpawner, per-player boss stones, remote Forsaken Power selection, boss despawn, and boss tamed pressure live in BossRules.

Compatibility

If another mod fully owns the same system, disable the overlapping DropNSpawn domain instead of stacking both.

  • VNEI: DropNSpawn character drops are exposed for normal lookup.
  • MonsterDB: overlaps with character and spawnsystem.
  • Drop That!: overlaps with object and character.
  • Spawn That!: overlaps with spawner and spawnsystem.
  • Expand World Spawns: overlaps with spawnsystem.

Helpful Mods

  • ESP for spawners, spawn points, and object info
  • XRayVision for object components
  • Infinity Hammer for placing and removing test objects

Building and validation

See the development guide for build prerequisites, regression checks, and the gameplay verification matrix. For routine work, use dotnet build DropNSpawn.csproj -c Debug -p:DeployToGame=true to build, merge, and update the local game DLL. Ordinary Release builds create Thunderstore/Nexus ZIPs and can trigger automatic uploads from registered watch folders; run them only for an explicitly requested release.

GitHub

https://github.com/sighsorry1029/DropNSpawn