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.
DeathRoulette
When a player dies, a random event fires for everyone. Server-side; players need nothing, admins use Server Devcommands for in-game control.
| Date uploaded | a week ago |
| Version | 1.4.2 |
| Download link | Geckuss-DeathRoulette-1.4.2.zip |
| Downloads | 63 |
| Dependency string | Geckuss-DeathRoulette-1.4.2 |
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.2350JereKuusela-Server_devcommands
Enables devcommands and utilities for server admins.
Preferred version: 1.113.0README
DeathRoulette
Every death remakes the evening. A player falls, and the whole server gets one random event — a gift, a curse, or a cruel cosmic joke.
Server-side only. Install it once on the dedicated server, and every vanilla client plays along. Nobody installs anything, nothing changes about saves, and unmodded players connect and leave without a trace.
Built and verified against game build l-1.0.12 (network 40, world 41), BepInEx 5.4.23.5.
Source: https://github.com/Geckuss/valheim-deathroulette
Why you'll like it
- Zero client install. The server does everything. Your friends need nothing, and you never re-sync a modpack.
- One death, one event. No death goes unremarked; the roll happens automatically and a global cooldown (default 30 s) stops a wipe from piling five events at once.
- 63 events in four personalities. Quick buffs, real raids, wild travel, visible comedy — with a default weight that leans into fun.
- Deadly but never cheap. Damage events cap at a fraction of current health, so the roulette can knock you down but never kill you itself. The fun kills you, not the mod.
- Tune everything from a config file. Change any weight, disable any event, flip raid gating — no rebuild, and admin commands can reload it live.
- Admins stay in control. Trigger any event on demand, see the odds, end raids, and audition effects — all from the in-game console.
Quick start
- On your dedicated server, make sure BepInEx 5 and Server Devcommands are installed (Devcommands is optional but recommended — it's how admins drive the mod).
- Drop
DeathRoulette.dllinto the server'sBepInEx/plugins/directory. - Restart the server. That's it. Players need nothing.
On first run the mod writes BepInEx/config/geckuss.deathroulette.cfg — every event with its weight, ready to tune.
A restart kicks everyone online.
Docker (lloesche/valheim-server)
The image re-syncs plugins from its persistent /config/bepinex/plugins/ bind mount at startup, so install the DLL there (not just into the live container layer) or it silently reverts on the next restart:
docker cp DeathRoulette.dll valheim:/config/bepinex/plugins/Geckuss-DeathRoulette/DeathRoulette.dll
docker restart valheim
The event table
All 63 events and their default weights. Weight 0 disables; changing a weight needs no rebuild. The armour-set and standalone potion events ship disabled (weight 0) so they can be called directly (server dr fire <id>) without rolling on their own — armour fitting and witch's brews dish them out at random instead.
Kind — the gods give back. (29)
| Event | Id | W | What happens |
|---|---|---|---|
| Forsaken Gift | forsaken_gift |
7 | A random forsaken power is granted to everyone. |
| Windfall | windfall |
7 | Scatters a pile of materials on the ground at the corpse. |
| Second Wind | second_wind |
6 | Every surviving player is healed to full. |
| Called to the Grave | corpse_run |
5 | Ten seconds after dying, the fallen player is pulled back to their grave. |
| Adrenaline | adrenaline_rush |
4 | A surge for everyone: full heal, a stamina-regen buff, and Ashlands adrenaline. |
| Fenris Blessing | fenris_blessing |
0 | The fenris set bonus, callable directly: faster on foot for five minutes. |
| Wolf Set | wolf_set |
0 | The wolf set bonus, callable directly: frost resistance and truer blades for five minutes. |
| Root Set | root_set |
0 | The root set bonus, callable directly: arrows and poison slide off for five minutes. |
| Troll Set | troll_set |
0 | The troll set bonus, callable directly: sneaking sharpens for five minutes. |
| Lox Set | lox_set |
0 | The lox set bonus, callable directly: a lox's hide for five minutes. |
| Harvester Set | harvester_set |
0 | The harvester set bonus, callable directly: gathering comes swifter for five minutes. |
| Berserk | berserk_fury |
0 | The berserker set bonus, callable directly: hits land harder for 45 seconds. |
| A Path Revealed | revealed_path |
4 | Pins the nearest landmark on each player's map and turns them to face it. |
| Mercy of Dawn | dawn_mercy |
4 | Time skips to the next morning. |
| Granted Rest | rested |
4 | Rested buff for everyone. |
| The Gods Relent | gods_relent |
4 | Ends the raid that is currently running. |
| Mercy of Dusk | dusk_mercy |
4 | Time skips to the next nightfall. |
| Feather Fall | feather_fall |
4 | Slow Fall on everyone for five minutes: no fall damage. |
| Lessons Held | hold_lessons |
3 | No skill drain for ten minutes. |
| Berserk | berserk_fury |
3 | Berserk on everyone for 45 seconds: hits land harder. |
| Witch's Brews | witches_brews |
3 | A potion for everyone, picked from every potion in the mod — applied once (meads run their full duration), and each player gets one they were not just handed last time. |
| Giant's Strength | giants_strength |
3 | Megingjord for everyone for five minutes: 150 carry weight. |
| Armour Fitting | set_bonus |
3 | One of the seven armour-set bonuses at random, for everyone: fenris, berserk, wolf, root, troll, lox or harvester. |
| Lightfoot | lightfoot |
0 | Lightfoot mead on everyone, given once for its full ten minutes: lighter steps, no fall damage. Callable directly; not rolled on its own. |
| Mistveil | mistveil |
3 | Demister on everyone for five minutes: the mist parts. |
| Mage's Luck | mage_luck |
0 | Minor eitr mead on everyone for three minutes: eitr regens. Callable directly; not rolled on its own. |
| Wolf Sight | wolf_sight |
2 | Wolf Sight on everyone for five minutes: hits land harder. |
| Magic Barrier | magic_barrier |
2 | The staff of protection's barrier wraps everyone. |
| Shaman's Ward | shaman_shield |
2 | The fuling shaman's ward on everyone. |
| Kindred Spirits | animal_friends |
2 | A handful of wild animals (boars, wolves, lox, hens) near every player are tamed on the spot. |
Harmless — theatre, mood, spectacle. (7)
| Event | Id | W | What happens |
|---|---|---|---|
| Odin's Indifference | taunt |
9 | Odin passes comment. Nothing else happens. |
| Lament | gjall_lament |
7 | A gjall's taunt echoes over every player. Unsettling, harmless. |
| Ancient Omen | bossstone_omen |
7 | A boss-stone activation effect fires at everyone's feet. Pure theatre. |
| Phantom Numbers | phantom_numbers |
6 | Floating text appears over every player. Purely cosmetic. |
| Buried Luck | buried_luck |
3 | Wishbone on everyone until toggled off or death: buried riches sing. The buff has no duration, so it stays until death. |
| Angler's Luck | fishing_knot |
2 | Fishing hat set bonus on everyone until toggled off or death: pure luck and triumph. The buff has no duration, so it stays until death. |
| Dvergr Favour | dvergr_ally |
2 | Dvergr power on everyone for 90 seconds: a strange, brief glow. |
Mean — keep your guard up. (18)
| Event | Id | W | What happens |
|---|---|---|---|
| Thunderclap | thunderclap |
7 | Lightning strikes every player, for a little damage. |
| Lurch | stagger_all |
5 | Everyone is staggered, losing control briefly. |
| Blood Tax | blood_tax |
5 | Survivors lose up to a quarter of current health. Never lethal. |
| Pyre | pyre |
4 | Burning and fire damage on everyone for 10 seconds, with flames underfoot. |
| Deep Chill | deep_chill |
4 | Cold and Freezing on everyone for 10 seconds, with a steady frost bite. |
| Tar-Soaked | tar_soaked |
4 | Tared on everyone for 10 seconds: slow and clumsy. |
| Loud Grief | loud_grief |
4 | Everyone is loud for a minute: real noise creatures can hear through walls, waking and aggroing everything within 40 m, and a couple of creatures surface beside each player. |
| Plague | plague |
4 | Poison and poison damage on everyone for 20 seconds. |
| Troll Love | troll_love |
0 | Troll pheromones on everyone for two minutes: trolls warm to people. Callable directly; not rolled on its own. |
| Fog of War | fog_of_war |
3 | The map is hidden from everyone for five minutes. |
| Seasick | seasick |
3 | Puke on everyone, once: food breaks free. |
| Rooted | rooted |
3 | Immobilized on everyone, once: rooted in place. |
| Maddened Beasts | maddened |
3 | Neutral and tamed creatures near every player turn hostile for a minute — then calm down again. |
| Cold Rain | soaked |
3 | A cold downpour: Wet and Cold on everyone, with a splash underfoot. |
| Slimed | slimed |
3 | Slimed on everyone for 20 seconds: slow and clumsy. |
Brutal — the gods have a plan for you. (9)
| Event | Id | W | What happens |
|---|---|---|---|
| Raid | raid |
10 | A real raid: music, banner, spawners. Progression-gated by default. |
| Swarm | swarm |
8 | Spawns a handful of small creatures on the corpse. |
| Grave Guardian | grave_guardian |
7 | One creature is spawned on the corpse to guard it. |
| Scattered | scatter |
7 | Every survivor is thrown a short random distance. |
| Riktig Fuling | riktig_fuling |
6 | A band of goblin_gem — real, undressed Fulings — spawns on the corpse. |
| No Escape | no_escape |
5 | Portals refuse to work for five minutes. |
| Summoned Mourners | summon_mourners |
5 | Every survivor is teleported to the corpse, wherever it is. |
| Swapped | swap_places |
3 | Two random players trade positions. Needs two online. |
| Pilgrimage | pilgrimage |
1 | Sends everyone to the altar of the last boss the world defeated, wakes it up, and returns everyone home 20 seconds after it dies. |
Admin commands
Admins drive the mod from the in-game developer console, through Server Devcommands. Press F5 and prefix commands with server so they run on the server, where the plugin lives:
server dr status # master switch, cooldown, who is online and where
server dr list # every event with its weight
server dr possible # which raids vanilla would allow right now, and where
server dr fire thunderclap # trigger one event
server dr roll # roll the table as if someone died
server dr fx <prefab> # audition any effect prefab
server dr stopraid # end the running raid
server dr reload # re-read the config file in place
server dr help # full list
Only players on the server's adminlist.txt can run these (Server Devcommands enforces that). The command is registered as both deathroulette and the shorter dr. fire refuses when nobody is online, because every effect needs a player to act on.
Configuration
The config file is BepInEx/config/geckuss.deathroulette.cfg, generated on first run.
[General]— masterEnabledswitch, death/effect announcements,CooldownSeconds(default 30), verbose logging.[Weights]— one entry per event id (see the table);0disables that event. Defaults match the table above.[Raids]—UseVanillaGating(default on: raids follow progression, biome and base checks) andPool(empty = whatever vanilla currently permits). Turn gating off for chaos.[Effects]— override the prefab lists behindThunderclap,AncientOmen,Lament, plusThunderclapDamageandAdrenalineBuff.[Events]—PilgrimageSummonsBoss(default on) turns the mass teleport back into a boss fight.LoudGriefDuration(default 60 s),LoudGriefNoisePower(default 40 m),LoudGriefSpawnCount(default 2) andLoudGriefSpawnPrefab(defaultGreyling) tune how long everyone is loud, how wide the wake-and-aggro radius is, and whether extra creatures surface beside each player (set the count to 0 for sound-only).
Safety rails
- Never self-inflicted death.
blood_taxandthunderclapcap their damage at a fraction of current health (a broken trigger can't recurse into more deaths). - One event per death and a global cooldown (default 30 s).
- Graceful declines. Events that can't apply — nobody else online, no raid running, no boss defeated yet — return quietly and are re-rolled rather than wasted.
- World-state ops are reversible. Global keys (
NoPortals,NoMap) are cleared automatically when their duration ends; raids end via vanilla's own system.
FAQ
- Do players need the mod? No. This is server-side only; vanilla clients see everything.
- Will it break existing saves or world files? No. The mod changes no save format and no protocol.
- I rolled an event and nothing happened. Some effects resolve names client-side (status effects, prefabs) and a wrong name fails silently. Drive it deliberately to check:
server dr fire thunderclap, thenserver dr fx <prefab>to audition assets. If it announces but shows nothing, it's a name, not the plumbing — see Name accuracy. - How do I make an event rarer or remove it? Set its
[Weights]entry in the config (0disables), thenserver dr reload. - Can a roulette event kill me? Not directly — see Safety rails. It can absolutely set you up so that something else kills you. That's the point.
Compatibility and limits (be honest)
- Built against
l-1.0.12(network 40, world 41) with BepInEx 5. When the game or BepInEx updates, rebuild against the server's current assemblies. - It can only drive things stock clients already understand. Custom audio, custom VFX, HUD text, and screen shake would need a client-side mod and are intentionally out of scope.
- Status-effect and prefab names must exist in the client's assets (ObjectDB / ZNetScene); the server can't validate them, so bad names fail silently.
How it works (for the curious)
The short version: the server watches for deaths, then tells vanilla clients to do things using their own RPCs. Nothing here requires a client mod.
- Death detection. A player's
ZNetViewis owned by their client, soPlayer.OnDeathnever runs on a server. The broadcast made from inside it —m_nview.InvokeRPC(Everybody, "OnDeath")— is a routed RPC; the server sees it inZRoutedRpc.HandleRoutedRPCbefore relaying it, with the dying player'sZDOID. A postfix there catches every death, and name/position come off the ZDO. - Driving vanilla clients.
ServerActionscalls RPCs the stock client has always registered:RPC_AddStatusEffect,RPC_Heal,RPC_TeleportTo,RPC_AddNoise,RPC_Stagger,RPC_Damage,ChatMessage/ShowMessage,ZNetScene'sSpawnObject,RandEventSystem.SetRandomEventByName, plus ZDO-level backend likeBaseAI.SetAggravatedandRPC_SetTamed. Per-ZDO RPCs are owner-guarded in vanilla, which is exactly why broadcasting them is safe: the owner acts and everyone else no-ops. - Effects are server-authorized, not client-scripted. Sound/VFX prefabs instantiate on every client via
SpawnObject(good for effects, wrong for creatures — spawning N copies is the duplicate-spawn trap the mod carefully avoids). ZNet.IsDedicated()lies in this build (hardcodedfalse); everything uses the realIsServer().- Why commands can't ride chat. Chat is emitted as one RPC per online player, addressed to that player's own peer — a dedicated server has no player of its own, so messages are dropped. Announcements go through the routed
ShowMessageRPC instead (the "ground is shaking" slot).
Name accuracy
Three name pools resolve in different places:
- Raid names come from game prefabs and vary by world and version.
[Raids] Poolis empty by default = "whatever vanilla currently permits". To pin a list, read the world's real names off the running server (logged at startup) and set them in config. - Effect prefabs resolve in the client's
ZNetScene. 1,892 real names from the build's asset manifest are in reference/effect-prefab-names.txt. - Status effects resolve in the client's
ObjectDB. Names used here are long-standing vanilla names but not statically verified — confirm them in play.
Building from source
dotnet build -c Release
netstandard2.1, matching BepInEx 5 on Unity Mono. No publicizer needed. The build needs the assemblies in lib/ (game + BepInEx + 0Harmony + Unity), copied from a local install (valheim_Data/Managed) and your server's BepInEx/core; they're gitignored rather than committed.
src/Plugin.cs BepInEx entry point, config, command-file poll
src/DeathWatcher.cs Harmony patch that detects death server-side
src/ServerActions.cs server -> vanilla client primitives
src/RouletteEvents.cs the weighted event table
src/StartupPatch.cs logs the world's real raid names on start
src/Announce.cs the two announcements (who died, what fired)
src/CommandFile.cs polled command-file admin channel
src/ConsoleCommands.cs 'dr' developer-console command (via Server Devcommands)
src/EffectSustain.cs re-applies status effects over their intended duration
src/EffectSpec.cs effect-prefab layering parser
Changelog
See CHANGELOG.md.
CHANGELOG
Changelog
1.6.0
- Packaging:
manifest.jsonlists theServer_devcommandsdependency again, so a fresh install from Thunderstore or Hexium brings the in-game admin console the package description and the README both promise. - Packaging: dropped the stray UTF-8 BOMs from
manifest.json,thunderstore.toml,DeathRoulette.csprojandsrc/Plugin.cs. A BOM in the manifest breaks the JSON parse on upload. - New
publish.ps1: builds the upload zip and pushes it to Thunderstore and Hexium with the officialtcliCLI, reading the API tokens from the gitignoredapikeysfile. Run./publish.ps1after bumping the four version fields.
1.5.0
- The death announcement now names the cause when the server can see it. A dedicated server
only ever executes server-owned damage (falling trees and rocks, carts, ballistae/turrets,
creature projectiles, environment AOEs), which all flow through
Character.Damage-- a newDeathCauseHarmony prefix records the last such hit per player and the death line becomes e.g. "X has died — crushed by a falling tree" or "X has died — killed by a Fuling". Most causes (melee hits, falls, DoTs) are computed on the victim's own client and stay generic. Tunable withDeathCauseWindowSeconds(default 5; 0 disables cause attribution). - New
CountdownSecondsconfig (default 3): the rolled effect no longer fires instantly. The death is announced, the raid-banner slot walks down 3, 2, 1, and only then the event fires and announces itself. Set it to 0 for the old instant behaviour. The countdown only runs whenAnnounceEffectsis on, since the countdown is the effect's reveal.
1.4.0
-
Removed the
lead_feetevent. -
Removed the
smoked_outevent. -
Removed the
skeweredevent. -
pilgrimagenow remembers where everyone stood, watches the summoned boss, ends the stuck boss-event music the moment the boss dies (vanilla never clears it for a bare spawned boss), and teleports everyone back home 20 seconds after the kill. -
Removed the
shelteredevent: its Shelter/CampFire status names do not resolve on a stock client, so the event announced but did nothing. -
Removed the
shamans_graceevent: vanilla'sSE_Greydwarf_shaman_healonly heals non-player creatures, so a player-targeted "heal aura" did nothing. -
magic_barrierandshaman_shieldno longer sustain their status effects: each is applied once and lasts the vanilla default baked into the client asset. -
Removed the
moment_of_silenceevent: its release-formRPC_FreezeFramedoes not hitch animations on a stock client, so the event announced but did nothing. -
Removed the
royaltyevent. -
Removed the
shared_painevent: a random harmful status effect, redundant with the dedicated status events (pyre, deep_chill, slimed, tar_soaked, etc.). -
Fixed the adrenaline event's stamina-regen buff, which silently no-oped since the 1.0.7 mead rework: the
Effects/AdrenalineBuffdefault (and code fallback) is nowPotion_stamina_medium. Existing configs keep the staleStaminaMediumvalue -- reset that one key to pick up the fix. -
New events using status-effect names verified against a 1.0.7 ObjectDB:
- Kind:
fenris_blessing(5 min),berserk_fury(45 s),hold_lessons(2 min),giants_strength(5 min),witches_brews(5 min),wolf_sight(5 min). - Mean:
seasick(20 s),rooted(12 s). - Harmless:
buried_luck(3 min),dvergr_ally(90 s).
- Kind:
-
New events round two: Kind
lightfoot(5 min),mage_luck(3 min),set_bonus(5 min, random set effect); Meantroll_love(2 min); Harmlessfishing_knot(3 min). -
New events round three: Kind
magic_barrier(90 s, staff shield) andshaman_shield(60 s, fuling shaman heal aura).Slimedis already covered bytar_soaked. -
New event
maddened: neutral and tamed creatures near every player turn hostile, using the same server-authoritativeBaseAI.AggravateAllInAreapath as the vanillaaggravateconsole command. Aggravation is normally permanent in vanilla, so the event now tracks the affected creatures and clears the flag again after 60 s (CalmCreatures), so animal pens recover. -
New event
animal_friends: tames up to 4 untouched tameables (boar, wolf, lox, hen) near every player using the vanilla completion pathMonsterAI.MakeTame()(publicCharacter.SetTamed→RPC_SetTamed, server-as-owner writess_tamed). -
tar_soakednow applies only Tared;Slimedis its own event (slimed, 20 s) so the two can be tuned independently. -
loud_griefis substantially meaner and fully configurable under[Events]:- Lasts 60 s by default instead of 20 (
LoudGriefDuration, 0 disables the noise). - Makes everyone genuinely loud through the client's real noise pipeline (RPC_AddNoise →
Character.m_noiseRange/ itss_noiseZDO), which creature AI hears out to their alert range through walls, instead of a cosmetic ping. - Wakes and aggros every live creature within
LoudGriefNoisePowermetres of each player every few seconds via publicBaseAI.Alert(), so anything nearby stops idling and hunts. Tamed animals and players are spared. - Optionally spawns
LoudGriefSpawnCount(default 2) ofLoudGriefSpawnPrefab(defaultGreyling) next to every player, so a quiet biome still gets something.
- Lasts 60 s by default instead of 20 (
-
New
AttractCreatureshelper inServerActions(server-authoritative wake + aggro within a radius), powering the louderloud_grief. -
Fixed
revealed_pathhanding every player copies of the nearest landmark: vanillaFindClosestLocationreturns the same instance to everyone standing near it, so several players could all be pointed at one cave. Each player now gets a different instance of the chosen landmark while any remain, reusing one only when the world has none left. -
hold_lessonsnow applies theSoftDeathbuff exactly once instead of re-applying it every two seconds for two minutes: the buff's own duration is ten minutes, so the refresh loop was pointless. -
witches_brewsnow picks a brew per player and never hands a player the same resistance mead twice in a row (status effects are client-side, so this is the server's best proxy for "a potion you do not already have"). It also applies once instead of refreshing for five minutes. -
The seven armour sets are now separate, callable events --
fenris_blessing,berserk_fury,wolf_set,root_set,troll_set,lox_set,harvester_set-- all shipped disabled (weight 0) so they never roll on their own, but each can be fired directly withserver dr fire <id>. Armour Fitting (set_bonus) now hands everyone one of the seven at random (45 seconds for the berserker set, five minutes for the rest). Existing configs keep their oldfenris_blessing/berserk_furyweights -- zero them in[Weights]to take them out of the roulette pool too. -
witches_brewsis now the single potion event: its pool is every potion the mod uses (the three resistance brews plus lightfoot mead, eitr mead, troll pheromones and the stamina mead), keeping the per-player "not the same drink twice in a row" rule. The standalone potion events --lightfoot,mage_luck,troll_love-- ship disabled (weight 0) like the armour sets, so they can still be fired directly withserver dr fire <id>but never roll on their own.lightfootnow hands the mead out once and lets it run its full ten minutes instead of a five-minute sustain loop. Existing configs keep the oldlightfoot/mage_luck/troll_loveweights -- zero them in[Weights]to take them out of the roulette pool too. -
buried_luckandfishing_knotapply their buff once and accept it lasts until death: vanilla has no server-side way to expire a status whose asset carries no duration (RPC_AddStatusEffectcarries only item level/skill level, and neitherWishbonenorSetEffect_FishingHatdefines a TTL), so the old re-apply loop just leaked a permanent buff. Descriptions now say so instead of promising "three minutes".
1.3.0
- New event
dusk_mercy: time skips to the next nightfall, mirroringdawn_mercyfor the morning. No vanillaSkipToNightexists, so it replicates EnvMan's smoothed fast-forward by setting the private skip fields to the day-fraction whereIsNightturns true. - New event
riktig_fuling: a band ofGoblin_Gem(the genuine, undressed Fulings) spawns on the corpse. Spawns 2-4 like the swarm event, but these are full goblins. - New event
fog_of_war: the map (minimap and full) is hidden from everyone for five minutes via the vanillaNoMapglobal key, which every client honours and gets re-synced to in real time. - New event
no_escape: portals refuse to work for five minutes via the vanillaNoPortalsglobal key;TeleportWorld.Teleportblocks with the stock "$msg_blocked" message and the key is removed again after the timer.
1.2.0
- Status-effect events now last a set time instead of a vanilla-baked instant. The server cannot set a status duration directly (the RPC has no duration and the TTL lives in the client asset), so these are sustained by re-applying on a short cadence: Feather Fall and Mistveil 5 min; Sheltered, Smoked Out and Deep Chill 3 min; Tar-Soaked, Pyre and Plague 20 s.
- Damage-over-time events (Deep Chill, Pyre, Plague) now deal a small, health-capped tick each interval, since environmental damage from a server-named status does not reliably apply.
- Loud Grief now sustains the noise for 20 seconds so it actually draws creatures in.
- Adrenaline reworked: full-ish heal plus a stamina-regen buff (configurable) plus Ashlands adrenaline, so it does something noticeable pre-Ashlands.
- New event
corpse_run: ten seconds after a real death, the fallen player is pulled back to their grave. - Raised weights for Scatter, Swarm and Grave Guardian.
1.1.0
- Added in-game admin commands through the developer console. With
Server Devcommands
(now a dependency) installed on the server and admin client, run
server dr <command>from the F5 console:list,status,fire <id>,roll,fx <prefab>,stopraid,reload,help. Admin-only, enforced by Server Devcommands and the server adminlist. - The roulette no longer fires the same event twice in a row when an alternative exists.
- Cold Rain now applies Wet + Cold with a water-splash effect, instead of a bare Wet debuff.
- Fixed Lament and Ancient Omen, which were silent: they used prefabs that render as nothing
under a bare server spawn. Lament now layers
sfx_gjall_alerted+sfx_gjall_idle_vocals; Ancient Omen usessfx_frostfoundry_activate.
1.0.0
First public release.
When a player dies on a dedicated server, a random event fires for everyone connected. The mod is server-side only: clients run stock Valheim and install nothing.
- 34 weighted events across four flavours (Harmless, Kind, Mean, Brutal), each independently weighted and disableable in config without a rebuild.
- Death detection via a Harmony postfix on
ZRoutedRpc.HandleRoutedRPC, which is the only place a dedicated server sees a player death. - Announcements through
MessageHud(the raid-banner channel), since chat cannot carry server-originated messages to clients. - Two safety rails: self-inflicted damage is capped below lethal, and a global cooldown stops a party wipe firing multiple raids at once.
- Raids are progression-gated by default, honouring vanilla's global-key, biome and base checks.
- Configurable effect prefab lists, thunderclap damage, raid pool/gating, and pilgrimage boss summoning.
- Admin command channel via a polled command file for live testing without a restart.