Ninex-HappyPeak icon

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.

By Ninex
Last updated a week ago
Total downloads 506
Total rating 0 
Categories Mods
Dependency string Ninex-HappyPeak-0.12.0
Dependants 0 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack_PEAK-5.4.2403 icon
BepInEx-BepInExPack_PEAK

BepInEx pack for PEAK. Preconfigured and ready to use.

Preferred version: 5.4.2403

README

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.