HazardChaos
Spawns Dynamite, Tornado, and Tumbleweed dynamically near players, optionally hands Tornado control to the game’s AI, and shows per-type spawn timers.
| Date uploaded | 2 weeks ago |
| Version | 0.1.16 |
| Download link | Bananegame-HazardChaos-0.1.16.zip |
| Downloads | 1332 |
| Dependency string | Bananegame-HazardChaos-0.1.16 |
This mod requires the following mods to function
BepInEx-BepInExPack_PEAK
BepInEx pack for PEAK. Preconfigured and ready to use.
Preferred version: 5.4.2403README
HazardChaos (PEAK) — v0.1.16
Spawns Dynamite, Tornado, Tumbleweed, and now Troublemaker entities (Zombies, Scoutmaster, Bees, Scorpions) dynamically near players. Optionally hands Tornado control to the game's AI, and shows per-type spawn timers. Runs only in Level_* scenes (e.g., Level_1) — not in Airport/Title/Pretitle.
Features
Per-type schedulers
Independent intervals, TTLs, and caps for each hazard type.
Smart placement
Forward-cone from the chosen player anchor, ground raycast, collision checks; optional line-of-sight (LoS).
Multiplayer aware
- Only the MasterClient (host) performs spawns → all clients see them.
- Configurable anchor selection modes to decide whose vicinity to target.
- Optional capacity scaling per additional player.
Tornado AI hand-off
If the vanilla TornadoSpawner + RPCA_InitTornado path exists, the game's AI takes over; otherwise the mod's mover is used (reliable fallback with parent-drive).
Burst spawns
Configure how many Dynamite/Tumbleweed to spawn at once per tick.
Grace period
Optional protection window after level load before any timers start.
Overlay / Settings
- Compact overlay with independent timers (per hazard), live counts, and status (F9 toggle).
- In-game Settings window (F11) to edit config live; Save writes to
.cfg.
Performance: Large scales & particles are GPU-heavy. Lower Scale/Radius or enable HardPause if FPS drops.
NEW in v0.1.15
Troublemaker Mode
A new game mode that spawns random hostile entities near players instead of environmental hazards.
Available Troublemaker Entities:
-
Mushroom Zombie (1-2 per spawn)
- Spawns near player and wakes up immediately
- Configurable lifetime (30-300s)
- Spawn chance: 0-100%
-
Scoutmaster
- Teleports 1-2 meters from player
- Note: May run away instead of chasing (vanilla AI behavior)
- Spawn chance: 0-100%
-
Bee Swarm
- Spawns angry bees that chase players
- Configurable anger duration
- Spawn chance: 0-100%
-
Scorpion (1-3 per spawn)
- Multiple scorpions spawn near player
- Automatically "woken up" to start moving
- Spawn chance: 0-100%
Game Modes (updated):
Off— No spawnsNormalOnly— Only environmental hazards (Dynamite, Tornado, Tumbleweed)ChallengeOnly— Only challenge events (Challenge Tornado/Tumbleweed)TroublemakerOnly— Only Troublemaker entitiesBoth— Normal + ChallengeAll— Normal + Challenge + Troublemaker
Behavior:
- One random Troublemaker entity spawns per interval (configurable: 30-300s with jitter)
- Sequential spawn chance: If the first entity fails its spawn chance, the next enabled entity is tried (in random order) until something spawns
- Each entity type can be individually enabled/disabled
- Spawn distances configurable per entity type (closer than normal hazards for better engagement)
Tunables (section Troublemaker.*):
Interval/Random Jitter(global timing)- Per-entity:
Enabled,Spawn Chance (%), spawn distances, counts, lifetimes
How it behaves in multiplayer
- Only the MasterClient schedules/spawns.
- Spawn positions are chosen near an anchor (configurable):
HostOnly|RandomPlayer|RoundRobin|NearestToHostCamera
- With Host proximity enabled, spawns that would land far away from the host are re-anchored to the host's vicinity.
- All players are affected by hazards; spectators are handled via the camera anchor.
Controls (Hotkeys)
| Hotkey | Action | Scope |
|---|---|---|
| F6 | Spawn Tornado near anchor | host only |
| F7 | Spawn Dynamite near anchor | host only |
| F8 | Spawn Tumbleweed near anchor | host only |
| F9 | Toggle overlay UI | local |
| F10 | Toggle version watermark | local |
| F11 | Toggle Settings window | host only |
Default Settings (from code)
Intervals (independent per type)
- Dynamite: 15 s
- Tornado: 90 s
- Tumbleweed: 12 s
- Troublemaker: 90 s
TTLs
- Dynamite: 10 s
- Tornado: 120 s
- Tumbleweed: 20 s
Caps (concurrency limits)
- Global: 6
- Dynamite: 2
- Tornado: 1
- Tumbleweed: 3
Burst counts (per tick)
- Dynamite: 2
- Tumbleweed: 3
Tornado fallback movement
- MoveSpeed: 10 m/s
- RetargetSeconds: 3.0 s
Challenge — Tumbleweed (defaults)
- Scale 4, SpeedMult 3, Retarget 1.5 s
Troublemaker (defaults)
- Interval: 90 s, Jitter: 20 s
- Zombie: 30% chance, 1-2 count, 120s lifetime, 5-12m spawn distance
- Scoutmaster: 15% chance, 60s chase time
- BeeSwarm: 25% chance, 20s anger time, 4-10m spawn distance
- Scorpion: 30% chance, 1-3 count, 3-8m spawn distance
Adjust any of the keys above to fit your session or server rules.
CHANGELOG
Changelog
0.1.16
Troublemaker Capacity Management
- Added per-entity cap limits to prevent queue flooding in "All" mode:
- Max Zombie: 2 concurrent (configurable 1-5 in
Spawning.MaxZombie) - Max BeeSwarm: 1 concurrent (configurable 1-5 in
Spawning.MaxBeeSwarm) - Max Scorpion: 3 concurrent (configurable 1-5 in
Spawning.MaxScorpion)
- Max Zombie: 2 concurrent (configurable 1-5 in
- Troublemaker spawns now respect both global cap and per-entity caps
- Better logging when caps are reached
Scorpion Improvements
- Spawn delay: New config
Troublemaker.Scorpion.SpawnDelay(1-3 seconds, default: 1.5s)- When spawning multiple scorpions, they appear sequentially with delay
- Prevents overwhelming instant spawns
- Cap checks between each spawn
- Lifetime reduced: 45 seconds (was 120s) for faster queue cycling
- Enhanced activation: Stronger physics impulses (2f upward + random horizontal) for more reliable movement
- Second activation attempt after 0.5s to ensure scorpions start moving
Challenge Tornado Fix
- Cap check before announcement: "Tornado incoming" banner now only shows if spawn is actually possible
- Prevents confusing announcements when global/tornado cap is already reached
- Double cap check: once before banner, once after delay
- Better logging for failed spawns due to caps
UI/Display Fixes
- Challenge timer now correctly displays in "All" mode (was only showing in "Both" and "ChallengeOnly")
- Consistent timer display across all game modes
Behavior Changes
- Scorpion spawns are now sequential with delay instead of all at once
- Each scorpion spawn checks caps individually to avoid overshooting limits
- More predictable entity counts in "All" mode with multiple spawn types active
Configuration
- New config entry:
Troublemaker.Scorpion.SpawnDelay(float, 1-3s range) - New cap entries under
Spawningsection:Spawning.MaxZombie(int, 1-5 range, default: 2)Spawning.MaxBeeSwarm(int, 1-5 range, default: 1)Spawning.MaxScorpion(int, 1-5 range, default: 3)
Technical Improvements
- Coroutine-based sequential spawning for scorpions (
SpawnScorpionsWithDelay) - Cap validation before each individual scorpion spawn
- Improved physics-based scorpion wake-up with multiple activation attempts
- Better error messages for troubleshooting cap-related spawn failures
0.1.15
New — Troublemaker Mode
- New game mode that spawns hostile entities instead of environmental hazards.
- 4 entity types available:
- Mushroom Zombie: Spawns 1-2 zombies near player, wakes up immediately, auto-despawns after configurable lifetime (30-300s)
- Scoutmaster: Teleports 1-2 meters from player (note: may run away due to vanilla AI behavior)
- Bee Swarm: Spawns angry bees that chase players for configurable duration (5-60s)
- Scorpion: Spawns 1-3 scorpions that are "woken up" to start moving immediately
Game Modes (expanded)
- Added
TroublemakerOnlymode (only Troublemaker entities spawn) - Added
Allmode (Normal + Challenge + Troublemaker combined) - Existing modes:
Off,NormalOnly,ChallengeOnly,Both
Sequential spawn guarantee
- If first entity's spawn chance fails, tries next enabled entity in random order
- Ensures something spawns each Troublemaker cycle (unless all chances fail)
- Reduces "nothing happened" cycles significantly
Spawn distance improvements
- Troublemaker entities spawn closer to players than normal hazards
- Default ranges optimized for engagement:
- Zombie: 5-12m (was too far before)
- BeeSwarm: 4-10m
- Scorpion: 3-8m
- Scoutmaster: 1-2m offset from player
Configuration
- 25+ new config entries under
Troublemaker.*sections - Per-entity: Enable/disable, spawn chance (%), count ranges, lifetimes, spawn distances
- Global: Interval (30-300s), Random Jitter (0-60s)
UI/Settings
- Settings window (F11) expanded with Troublemaker section
- Nested configuration panels for each entity type
- HUD overlay shows Troublemaker timer and live entity counts
- Slider ranges corrected for better usability
Technical improvements
- Scorpion activation: Physics impulse applied on spawn to wake them up
- Zombie lifecycle: Coroutines for immediate wake-up and lifetime management
- Better error handling and logging for entity spawning
Known limitations
- Scoutmaster may run away instead of chasing (vanilla AI behavior not fully controllable)
- Zombie spawning produces harmless
NullReferenceExceptioninCharacterVoiceHandler(can be ignored)
0.1.14
New — Challenge: Tornado
- Configurable challenge Tornado with banner + optional pre-spawn delay.
- Movement uses the mod's mover (same feel as normal mod Tornado), with:
Scale(visual),SpeedMult,RetargetSeconds (1.5–3.0)PullRadius(up to 100),PullForce(up to 100)LiberateKinematic,LiberateMaxMass(up to 150)
- Safer placement: ring around the selected player, ground-snap, and a small push-out so it doesn't appear too close.
- BothRandom: if a Challenge Tornado is already active when the timer fires, a Challenge Tumbleweed spawns instead.
New — Host proximity gate (optional)
Challenge.RequireHostNear(default true) +Challenge.HostNearMeters(default 150).- If a computed spawn near a chosen player would be farther than the radius from the host, the spawn is re-anchored and recalculated near the host to avoid map-spawn fallbacks.
Performance
- UI throttle now pauses only Normal spawns when an interactive game UI is open. Challenge spawns are not blocked, so events won't stall on menus.
- UI detection refined to avoid false positives from HUD/overlays.
Fixes
- Vanilla Tornado NRE when airborne (
Tornado.PickTarget) fixed by always providing a validtargetParent(fallback parent and reparenting) and keeping transform sync. - Challenge Tornado sometimes spawning too close to the player: additional push-out applied after clamping to the ring.
- Normal timers are correctly paused on ChallengeOnly at level start and resumed when switching back to Normal/Both.
UI
- Settings sliders updated to match intended ranges:
- Challenge Interval: 30–300 s
- Challenge Tornado
Scale: 2–5 PullRadius: up to 100RetargetSeconds: 1.5–3.0PullForce: up to 100LiberateMaxMass: up to 150
0.1.13
Game Mode selector (Off / NormalOnly / ChallengeOnly / Both). Set it in the in-game settings; the active mode is also shown on the overlay.
Challenge: Aggressive Tumbleweed A special Tumbleweed that actively chases players. Tunables under Challenge.Tumbleweed:
Scale (visual size)
SpeedMult (chase speed)
RetargetSeconds (how often it picks a new target)
Next Challenge countdown Overlay and Settings window display time remaining until the next Challenge spawn.
Global Settings window (F11) available in all scenes. Includes a dimmable background (Overlay -> Settings Alpha).
Improvements
Timer reset on mode change Switching Game Mode now resets all internal spawn timers (Normal & Challenge) to prevent immediate spawns after a switch.
UI organization New sections for Mode, Challenge (global), and Challenge — Tumbleweed for clearer configuration.
Fixes
ChallengeOnly no longer "leaks" Normal timers in the background; spawns are aligned with the selected mode.
Default values (changed)
TTL.TumbleweedDespawn 20s
Notes
Challenge Tumbleweed's damage is not scaled by size in this version; difficulty comes from pursuit behavior and speed.
0.1.12
In-game settings window
Press F11 to open the HazardChaos Settings anywhere (title/airport/levels). Independent from the overlay (F9).
Edit config live (sliders/toggles/dropdowns). Click Save to write to the .cfg.
Grouped sections for quick navigation: Intervals, TTL, Spawning & Caps, Tornado, Overlay, Version, Multiplayer, Debug.
UI/UX
Screen dimmer behind the settings window for readability on bright scenes. Configurable via Overlay.SettingsDimAlpha (0–1, default 0.55).
Behavior changes
None to gameplay/spawn logic in this release. Pure QoL for configuration.
Internal / maintenance
Codebase split into multiple files (partials) for readability: Anchors.cs, Spawning.cs, UI.cs, ModTornadoMover.cs (single [BepInPlugin] attribute kept in core)
0.1.11
Optional multi-spawn for Tornados
Tornado.MoreTornados (default: false): when ON, Tornados can spawn in bursts (spread respected, caps still apply).
Tornado.BurstTornado (default: 1, range 1–5): how many Tornados per tick when multi-spawn is enabled.
Config structure — clearer sections & renamed keys
Sections now grouped as: Intervals, Spawning, TTL, Tornado, Overlay, Version, Multiplayer, Debug.
Renamed keys:
TTL.DynamiteDespawn (was TTL.DynamiteTTL)
TTL.TornadoDespawn (was TTL.TornadoTTL)
TTL.TumbleweedDespawn (was TTL.TumbleweedTTL)
Tornado.UseVanillaWhenAvailable (was Tornado.UseVanillaAIWhenAvailable)
UI moved/split:
Overlay.SpawnTimerUI & Overlay.HotkeyOverlay (were UI.SpawnTimerUI & UI.ToggleKey)
Version.WatermarkEnabled, Version.HotkeyVersion, Version.Corner, Version.FontSize, Version.Alpha, Version.Margin (were under UI.Version.*)
Note: Legacy entries remain in the .cfg but are ignored; no migration required.
Default values updated
Intervals: Intervals.IntervalDynamiteSec 15s, Intervals.IntervalTornadoSec 90s, Intervals.IntervalTumbleweedSec 12s.
Bursts & spread: Spawning.BurstDynamite 2, Spawning.BurstTumbleweed 3, Spawning.BurstSpreadSeconds 3.0s.
TTLs: TTL.DynamiteDespawn 10s (was 20), TTL.TornadoDespawn 20s (was 15), TTL.TumbleweedDespawn 10s.
UI defaults: Overlay.SpawnTimerUI false (off by default), Version.WatermarkEnabled false; watermark corner now TopRight, font size 13.
Multiplayer default: Multiplayer.AnchorMode now RandomPlayer (was NearestToHostCamera).
Housekeeping
Old "Weights" entries are no longer used (commented out in code).
Notes
Multi-spawn still respects Spawning.MaxTornado and Spawning.MaxSimultaneousGlobal.
To actually see multiple Tornados, increase those caps accordingly
0.1.10
Reliable Tornado movement in all areas
Drive-the-parent fix: the mod now moves the Tornado's targetParent (Mod_TornadoTargetParent) and reparents the Tornado under it. This avoids vanilla scripts snapping the Tornado back when no TornadoSpawner is present. Fixes the "spawns and stands still" issue outside MESA.
Last-word movement: fallback mover runs in LateUpdate() with DefaultExecutionOrder(10000), ensuring its final transform wins even if other scripts adjust earlier in the frame.
Soft-disable vanilla movers on fallback: TryDisableVanillaMovement() best-effort disables NavMeshAgent / CharacterController, sets Rigidbody kinematic/no-gravity, and turns off common Tornado mover scripts to prevent position resets.
Grounding & glide: continuous ground projection plus a tiny side-step when blocked (spherecast) for smoother drift instead of jitter or sticking.
Networking robustness: ownership hand-off to host when needed and auto-add of PhotonTransformViewClassic if missing to keep movement synced.
Config / Compatibility
No new config keys. Existing options continue to work (Tornado.UseVanillaAIWhenAvailable, Tornado.ForceModMover, Tornado.MoveSpeed, Tornado.RetargetSeconds).
Logging
Clearer logs when the fallback mover is used and which transform is being driven
0.1.9
Tornado AI hand-off: If the vanilla TornadoSpawner + RPCA_InitTornado path is available, the mod now prefers the game's built-in AI. Only falls back to the mod's mover when needed.
Burst spawns (configurable): You can now spawn multiple objects per tick for specific types.
New config keys:
Spawning.BurstCountDynamite (default: 1)
Spawning.BurstCountTumbleweed (default: 1)
Version watermark improvements: Small version label can be shown on the title/start screens and in-game. Position, size, margin, and background alpha are configurable. Toggle with F10.
UI.Version.WatermarkEnabled (bool), Corner (TopLeft|TopRight|BottomLeft|BottomRight), FontSize (int), Margin (int), Alpha (0–1).
0.1.8
Level start grace period: Optional protection window before hazards begin (default: 60s).
Spawning.GracePeriodSeconds (float). Timers start counting after the grace period ends.
UI polish: Watermark added (see 0.1.9 for the full set of options).
Quality: Minor stability/perf tweaks around scene transitions.
0.1.7
Independent per-type scheduling: Each hazard has its own spawn interval and cap:
Intervals (defaults):
Dynamite: 12.5s (Intervals.IntervalDynamiteSec)
Tornado: 40s (Intervals.IntervalTornadoSec)
Tumbleweed: 15s (Intervals.IntervalTumbleweedSec)
TTLs (defaults):
Dynamite: 20s, Tornado: 15s, Tumbleweed: 10s (under TTL.*)
Caps: global + per-type (Spawning.MaxSimultaneousGlobal, MaxDynamite, MaxTornado, MaxTumbleweed)
Multiplayer aware:
Anchor selection modes: HostOnly, RandomPlayer, RoundRobin, NearestToHostCamera (Multiplayer.AnchorMode).
Dynamic scaling: Multiplayer.PerPlayerExtraSlots adds extra concurrent slots per additional player.
Positioning rules: Forward-cone sampling, ground raycast, collision checks; optional Line of Sight (Spawning.RequireLineOfSight).
Tornado movement: Speed and retarget cadence configurable (Tornado.MoveSpeed, Tornado.RetargetSeconds), with a robust fallback if vanilla spawner isn't present.
UI: Compact overlay with three independent timers (one per hazard), live counters, status. Toggle with F9.
Hotkeys (host only): F6 Tornado, F7 Dynamite, F8 Tumbleweed.
0.1.3
Scene gating: Spawning only in Level_* scenes. (Airport/Title/Pretitle are excluded.)
Overlay UI: Spawn timer, status, and live count.
Stronger player tracking: Camera/Character only from the active scene.
Smarter spawn placement: Forward cone, ground raycast, LoS, collision checks.
Tornado movement: Speed/retarget configurable; fallback path without TornadoSpawner.
0.1.2
Fixes & logging: Better diagnostics and safer instantiation paths.
0.1.1
Initial release