
HappyPeak
Tired of a plain old climb? Spice up every PEAK run with a bunch of toggleable chaos events — random tornadoes, banana rain, lit dynamite, chests that hatch zombies or summon the Scoutmaster, and more.HappyPeak
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.
Features
| 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. Configurable drop height. |
[Tumbleweed] |
Tumbleweed rain: same pattern as the banana rain but with PEAK's native tumbleweed prefab. |
[Dynamite] |
Drops a stick of lit dynamite somewhere near a random player every wave. Configurable distance and an option to drop unlit (for harvesting). |
[MarkerSpawn] |
Press middle-click to drop a ping → spawns a pickaxe at the marker location, attached to the nearest surface when possible. One per player at a time — re-pinging moves it. |
[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%). |
Nothing fires while you're at the airport / lobby — events only run inside an actual mountain run.
Install
Install via Thunderstore Mod Manager or r2modman, or drop HappyPeak.dll into <PEAK install>/BepInEx/plugins/ manually.
Requires the BepInExPack for PEAK.
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 + Chinese) right above it.
Full config reference
[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 |
2.0 |
Flat multiplier. 1 = vanilla, 2 = double, 3 = triple. Rounded to integer internally. |
[Tornado]
| Key | Default | Description |
|---|---|---|
EnableRandomTornadoes |
true |
Toggle. |
TornadoIntervalMin |
10 |
Min seconds between waves. |
TornadoIntervalMax |
30 |
Max seconds between waves. |
TornadoesPerWave |
1 |
How many tornadoes per wave. |
TornadoLifetime |
60 |
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 |
10 |
Min seconds between waves. |
BananaPeelIntervalMax |
30 |
Max seconds. |
BananaPeelsPerPlayerMin |
2 |
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 |
10 |
Min seconds between waves. |
TumbleweedIntervalMax |
30 |
Max seconds. |
TumbleweedsPerPlayerMin |
2 |
Min tumbleweeds rained per player. |
TumbleweedsPerPlayerMax |
5 |
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 |
15 |
Min seconds between drops. |
DynamiteIntervalMax |
30 |
Max seconds. |
DynamiteCountPerWave |
1 |
Sticks per wave. |
DynamiteOffsetMin |
20 |
Min meters from chosen player. Below ~5 = nuke them. |
DynamiteOffsetMax |
100 |
Max meters. |
DynamiteLifetime |
30 |
Hard cleanup if the fuse fizzles. |
LightDynamiteOnSpawn |
true |
If false, drops as an unlit stick the player can pick up. |
[MarkerSpawn]
| Key | Default | Description |
|---|---|---|
EnableMarkerSpawn |
true |
Toggle. |
MarkerSpawnLifetime |
0 |
Seconds before the spawned pickaxe is removed. 0 = persist forever. |
[Eruption]
| Key | Default | Description |
|---|---|---|
EnableRandomEruptions |
true |
Toggle. Silently skipped on biomes without an EruptionSpawner. |
EruptionIntervalMin |
15 |
Min seconds between eruptions. |
EruptionIntervalMax |
30 |
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 |
60 |
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. |
Tuning recipes
- Chill mode: bump every
IntervalMin/IntervalMaxto 60–180s, setLootMultiplier = 1, keep traps at default. - Party chaos: leave defaults (10–30s intervals).
- Pure loot mode: set every
EnableXxx(exceptEnableItemRandomizationandEnableLootScaling) tofalse. - All-traps, no events: disable Tornado/BananaPeel/Tumbleweed/Dynamite/Eruption, leave ChestTraps + Randomizer + LootScaling on.
Switching languages
Each config description is written on two ## lines: English on the first, Chinese on the second. No language toggle needed — read whichever you understand.
Compatibility
- Targets BepInExPack PEAK 5.4.2403.
- Should coexist with most cosmetic / QoL mods.
- Likely conflicts with mods that also patch
Spawner.SpawnItems(e.g.ItemMultiplier) — Harmony will let one of them win on each call. DisableLootScalingif you wantItemMultiplierto be authoritative. - Coexists fine with
PeakRandomizedChaosif you turn off the overlapping events on either side.
Build from source
Requires:
- .NET SDK 8 or newer (
brew install dotneton macOS,winget install Microsoft.DotNet.SDK.8on Windows). - A local PEAK install — the build pulls game DLLs from
<PeakGameRootDir>/PEAK_Data/Managed/. If your install isn't at the default Steam path, you can either copy theManaged/folder into the project root (auto-detected) or set<PeakGameRootDir>inConfig.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
Credits
Implementation patterns adapted from:
PeakRandomizedChaosby DoggyDentures — Tornado, BananaPeel, Eruption event templates.ItemMultiplierby IceMods —Spawner.SpawnItemspatching shape.HazardChaosby Bananegame —Dynamite.LightFlareinsight.TrappedLuggageby tony4twenty — chest trap pattern (Scoutmaster + Zombie spawning, RPC names).RayMarkerModby NanJu —PointPingpolling for the marker spawn event.PeakStrandingby lnkr — verified0_Items/ClimbingSpikeHammeredprefab name for embedded pitons.BetterPreplacedPitonsby Gabriel — confirmedShittyPitonis PEAK's internal name for the wooden Mesa pickaxe.ItemBrowserby cherrycove — project structure / build setup template.