PEAK
Install with App

Details

Latest version
0.12.0
Last Updated
First Uploaded
Downloads
2.3K
Likes
0
Size
170KB
Dependants

Categories

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.


🔥 Strongly recommended companion: ModConfig

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.

⚠️ Upgrading from an older HappyPeak version?

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.)


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.
[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

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.

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).

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 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.

Tuning recipes

  • Default (balanced): leave everything alone. Events fire roughly every 1–2 minutes per type, loot is tripled, traps are rare.
  • Chill mode: bump every IntervalMin/IntervalMax to 180–300s, set LootMultiplier = 1, traps at 1–2%.
  • Party chaos: drop intervals back to 10–30s across the board.
  • Pure loot mode: set every EnableXxx (except EnableItemRandomization and EnableLootScaling) to false.
  • All-traps, no events: disable Tornado/BananaPeel/Tumbleweed/Dynamite/Eruption, leave ChestTraps + Randomizer + LootScaling on.
  • Demolition mode: LightDynamiteOnSpawn = true, DynamiteForwardDistance = 0, DynamiteDropHeight = 0 — bombs detonate exactly where the player is standing.

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. Disable LootScaling if you want ItemMultiplier to be authoritative.
  • Coexists fine with PeakRandomizedChaos if you turn off the overlapping events on either side.

Build from source

Requires:

  • .NET SDK 8 or newer (brew install dotnet on macOS, winget install Microsoft.DotNet.SDK.8 on 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 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

Recent changes

Full history in CHANGELOG.md. Top-level summary:

  • 0.12.0 — Big quality-of-life release.

    • MarkerSpawn now drops a real Mesa pickaxe (鹤嘴锄) instead of a piton, captured instantly via Harmony Postfix, attached precisely to whatever surface the ping crosshair landed on. Spawned pickaxes don't crack. Up to 2 per player, evicts the one farthest from you so the held / freshly-spawned ones are always safe.
    • Dynamite redesigned as a "face-drop": spawns in front of the player's head from head height, default unlit (so the player can pick it up and use it).
    • New events: Tumbleweed rain, Chest traps (Scoutmaster summon + Mushroom Zombies).
    • New SafeZones section: standing near a campfire makes you immune to all hazardous events and (optionally) to all status damage.
    • Fix: bushes no longer get randomized items (was a side effect of patching LootData instead of Spawner.SpawnItems).
    • Fix: held items no longer accidentally destroyed by marker eviction.
    • All networked spawns now properly replicate destroy to clients (no ghost objects).
    • README + cfg descriptions fully bilingual (English + Chinese).
  • 0.11.5 — First public Thunderstore release: chest randomization, loot multiplier, Tornado, BananaPeel (trail-style), Dynamite (lit), MarkerSpawn (piton), Eruption.

Credits

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.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.