

Tired of a plain old climb? Spice up every PEAK run with a bunch of toggleable chaos events.
A host-side PEAK mod that randomizes chest loot, scales loot by a configurable multiplier, and adds a handful of independently-toggleable chaos events designed to make co-op runs more unpredictable.
Every event has its own on/off switch and tuning knobs. Don't like banana rain? Turn it off. Want zombies to come out of every chest? Crank ZombieTrapChance. The defaults aim for "noticeable but not run-ruining"; tweak as you like.
Only the host needs to install this mod. Clients see all the effects without installing anything — every spawn / replacement happens host-side and propagates over Photon.
Install PEAKModding's ModConfig alongside HappyPeak. It opens an in-game GUI where you can flip any config value live — no need to alt-tab, edit text files, or restart the game. Boolean toggles, sliders, etc. all work out of the box with HappyPeak's settings.
It's a separate mod (one-click install from Thunderstore). Without it, you have to edit BepInEx/config/HappyPeak.cfg by hand and BepInEx hot-reloads it.
If you had HappyPeak installed and are updating to a newer version that added/removed/renamed config entries, delete BepInEx/config/HappyPeak.cfg before launching. BepInEx never rewrites descriptions or new entries into an existing cfg, so you'll lose new toggles otherwise. Your custom values get reset — back them up first if you'd tuned anything.
If you're unsure whether the version you're updating to changed configs, just delete the cfg. It costs you a 5-second restart and avoids weirdness. (As of 0.12.0 the safe zone, invincibility, chest trap, and tumbleweed sections are recent additions; 0.11.x doesn't have them.)
| Section | What it does |
|---|---|
[Randomizer] |
Every chest you open returns a random item from PEAK's full item database (minus a small blacklist of cheat / quest / cosmetic-only items). Bushes, vines, ground spawners and other scenery are not affected. |
[LootScaling] |
Multiply chest loot quantity by a flat integer. 1 = vanilla, 2 = double, 3 = triple, etc. |
[Tornado] |
Periodically spawns tornadoes targeting a random player on any biome (vanilla PEAK only spawns them on Mesa). Disabled at the Kiln by default. |
[BananaPeel] |
Banana rain: drops 2–5 banana peels (random color) from above each player every wave. |
[Tumbleweed] |
Tumbleweed rain: same pattern as banana rain but with PEAK's native tumbleweed prefab. |
[Dynamite] |
Drops a stick of dynamite right in front of each player's face (head height, 1m forward). Default is unlit so the player can pick it up and use it; flip LightDynamiteOnSpawn to true for explosive surprises. |
[MarkerSpawn] |
Middle-click ping → spawns a Mesa pickaxe (鹤嘴锄) on the exact surface you aimed at. Up to 2 unclaimed pickaxes per player; a new ping past that destroys the one farthest from you (never yanking one out of your hand). Auto-cleanup at 60s. |
[Eruption] |
Triggers PEAK's native "floor erupts in flames" effect near a random player. Requires the game's EruptionSpawner to exist in the current scene. |
[ChestTraps] |
Each chest opening rolls a small chance to spawn a Mushroom Zombie (default 10%) or teleport the Scoutmaster to hunt the opener (default 5%). |
[SafeZones] |
Standing near a campfire makes you immune to tornadoes / eruptions / banana rain / tumbleweed rain / dynamite drops — and (optional) immune to all status damage (injury, cold, hunger, etc.). Healing still works. |
Events never fire while you're at the airport / lobby — they only run inside an actual mountain run.
Install via the Thunderstore Mod Manager or r2modman, or drop HappyPeak.dll into <PEAK install>/BepInEx/plugins/ manually.
Requires the BepInExPack for PEAK.
Also recommended: PEAKModding/ModConfig for in-game live configuration.
After running the game once with the mod installed, BepInEx generates BepInEx/config/HappyPeak.cfg. Edit it with any text editor — every entry has a bilingual description (English line + Chinese line) right above it.
Or use ModConfig for in-game live editing (see top of this page).
[Randomizer]| Key | Default | Description |
|---|---|---|
EnableItemRandomization |
true |
Master switch for chest randomization. |
AdditionalBlacklist |
"" |
Comma-separated extra item names to exclude (e.g. Dynamite, Scorpion, CactusBall). |
[LootScaling]| Key | Default | Description |
|---|---|---|
EnableLootScaling |
true |
Toggle for the chest loot multiplier. |
LootMultiplier |
3.0 |
Flat multiplier. 1 = vanilla, 2 = double, 3 = triple. Rounded to integer internally. |
[Tornado]| Key | Default | Description |
|---|---|---|
EnableRandomTornadoes |
true |
Toggle. |
TornadoIntervalMin |
90 |
Min seconds between waves. |
TornadoIntervalMax |
120 |
Max seconds between waves. |
TornadoesPerWave |
1 |
How many tornadoes per wave. |
TornadoLifetime |
30 |
Seconds before each tornado is removed. |
EnableTornadoAtKiln |
false |
Allow tornadoes at the Kiln (off because they tend to wreck endgame). |
[BananaPeel]| Key | Default | Description |
|---|---|---|
EnableRandomBananaPeels |
true |
Toggle. |
BananaPeelIntervalMin |
60 |
Min seconds between waves. |
BananaPeelIntervalMax |
90 |
Max seconds. |
BananaPeelsPerPlayerMin |
1 |
Min peels rained per player. |
BananaPeelsPerPlayerMax |
5 |
Max peels rained per player. |
BananaPeelLifetime |
30 |
Seconds before each peel is removed. |
BananaPeelDropHeight |
15 |
Meters above each player to spawn peels (gravity drops them). |
[Tumbleweed]| Key | Default | Description |
|---|---|---|
EnableRandomTumbleweeds |
true |
Toggle. |
TumbleweedIntervalMin |
60 |
Min seconds between waves. |
TumbleweedIntervalMax |
90 |
Max seconds. |
TumbleweedsPerPlayerMin |
1 |
Min tumbleweeds rained per player. |
TumbleweedsPerPlayerMax |
3 |
Max per player. |
TumbleweedLifetime |
15 |
Seconds before each tumbleweed is removed. |
TumbleweedDropHeight |
15 |
Meters above each player to spawn from. |
[Dynamite]| Key | Default | Description |
|---|---|---|
EnableRandomDynamite |
true |
Toggle. |
DynamiteIntervalMin |
60 |
Min seconds between drops. |
DynamiteIntervalMax |
90 |
Max seconds. |
DynamiteCountPerWave |
1 |
Sticks per wave. |
DynamiteForwardDistance |
1 |
Meters in front of the player's head where the stick spawns. |
DynamiteDropHeight |
0 |
Extra meters above the player's head. 0 = level with head. |
DynamiteSidewaysJitter |
0.5 |
Random sideways scatter (meters) so it's not always dead-center. |
DynamiteLifetime |
30 |
Hard cleanup if the fuse fizzles. |
LightDynamiteOnSpawn |
false |
If true, the stick is lit on spawn and explodes after its fuse. Default false = drops unlit so the player can pick it up. |
[MarkerSpawn]| Key | Default | Description |
|---|---|---|
EnableMarkerSpawn |
true |
Toggle. |
Behavior is hardcoded (no extra knobs): up to 2 pickaxes per player, auto-cleanup at 60 seconds. New pings past the cap evict the pickaxe farthest from you so a pickaxe in your hand is never destroyed.
[Eruption]| Key | Default | Description |
|---|---|---|
EnableRandomEruptions |
true |
Toggle. Silently skipped on biomes without an EruptionSpawner. |
EruptionIntervalMin |
60 |
Min seconds between eruptions. |
EruptionIntervalMax |
90 |
Max seconds. |
EruptionOffsetMin |
0 |
Min meters from chosen player (0 = directly under their feet). |
EruptionOffsetMax |
5 |
Max meters. |
[ChestTraps]| Key | Default | Description |
|---|---|---|
EnableScoutmasterTrap |
true |
Toggle for the "open chest → Scoutmaster teleports in" trap. |
ScoutmasterTrapChance |
5 |
Percent chance per chest opened. Keep it low — the Scoutmaster is brutal. |
ScoutmasterChaseTime |
30 |
Seconds the Scoutmaster is forced to hunt the opener. |
EnableZombieTrap |
true |
Toggle for the "open chest → mushroom zombies appear" trap. |
ZombieTrapChance |
10 |
Percent chance per chest opened. |
ZombieCountMin |
1 |
Min zombies per trigger. |
ZombieCountMax |
2 |
Max zombies per trigger. |
ZombieLifetime |
60 |
Seconds before each spawned zombie is removed. |
[SafeZones]| Key | Default | Description |
|---|---|---|
CampfireSafeRadius |
30 |
Radius in meters around any campfire (biome rest + player-lit) that counts as a safe zone. 0 = disable safe zones. |
EnableCampfireInvincibility |
true |
When true, players inside the safe radius take no status damage at all (injury, cold, hot, hunger, poison, etc.). Healing still works. |
Affected events: Tornado, Eruption, BananaPeel, Tumbleweed, Dynamite. Players standing inside the safe radius are skipped by those events.
IntervalMin/IntervalMax to 180–300s, set LootMultiplier = 1, traps at 1–2%.EnableXxx (except EnableItemRandomization and EnableLootScaling) to false.LightDynamiteOnSpawn = true, DynamiteForwardDistance = 0, DynamiteDropHeight = 0 — bombs detonate exactly where the player is standing.Spawner.SpawnItems (e.g. ItemMultiplier) — Harmony will let one of them win on each call. Disable LootScaling if you want ItemMultiplier to be authoritative.PeakRandomizedChaos if you turn off the overlapping events on either side.Requires:
brew install dotnet on macOS, winget install Microsoft.DotNet.SDK.8 on Windows).<PeakGameRootDir>/PEAK_Data/Managed/. If your install isn't at the default Steam path, you can either copy the Managed/ folder into the project root (auto-detected) or set <PeakGameRootDir> in Config.Build.user.props.dotnet restore
dotnet build -c Release
DLL ends up at artifacts/bin/HappyPeak/release/HappyPeak.dll.
To produce a Thunderstore package:
dotnet tool restore
dotnet build -c Release -target:PackTS
Full history in CHANGELOG.md. Top-level summary:
0.12.0 — Big quality-of-life release.
LootData instead of Spawner.SpawnItems).0.11.5 — First public Thunderstore release: chest randomization, loot multiplier, Tornado, BananaPeel (trail-style), Dynamite (lit), MarkerSpawn (piton), Eruption.
Implementation patterns adapted from:
PeakRandomizedChaos by DoggyDentures — Tornado, BananaPeel, Eruption event templates.ItemMultiplier by IceMods — Spawner.SpawnItems patching shape.HazardChaos by Bananegame — Dynamite.LightFlare insight.TrappedLuggage by tony4twenty — chest trap pattern (Scoutmaster + Zombie spawning, RPC names).PeakStranding by lnkr — verified 0_Items/ClimbingSpikeHammered prefab name for embedded pitons.BetterPreplacedPitons by Gabriel — confirmed ShittyPiton is PEAK's internal name for the wooden Mesa pickaxe.RandomEvents by Wesmania — verified 0_Items/PickAxeHammered_Shitty prefab name for spawning the Mesa pickaxe.ItemBrowser by cherrycove — project structure / build setup template.