Troublemaker Capacity Management
Spawning.MaxZombie)Spawning.MaxBeeSwarm)Spawning.MaxScorpion)Scorpion Improvements
Troublemaker.Scorpion.SpawnDelay (1-3 seconds, default: 1.5s)
Challenge Tornado Fix
UI/Display Fixes
Behavior Changes
Configuration
Troublemaker.Scorpion.SpawnDelay (float, 1-3s range)Spawning section:
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
SpawnScorpionsWithDelay)New — Troublemaker Mode
Game Modes (expanded)
TroublemakerOnly mode (only Troublemaker entities spawn)All mode (Normal + Challenge + Troublemaker combined)Off, NormalOnly, ChallengeOnly, BothSequential spawn guarantee
Spawn distance improvements
Configuration
Troublemaker.* sectionsUI/Settings
Technical improvements
Known limitations
NullReferenceException in CharacterVoiceHandler (can be ignored)New — Challenge: Tornado
Scale (visual), SpeedMult, RetargetSeconds (1.5–3.0)PullRadius (up to 100), PullForce (up to 100)LiberateKinematic, LiberateMaxMass (up to 150)New — Host proximity gate (optional)
Challenge.RequireHostNear (default true) + Challenge.HostNearMeters (default 150).Performance
Fixes
Tornado.PickTarget) fixed by always providing a valid targetParent (fallback parent and reparenting) and keeping transform sync.UI
Scale: 2–5PullRadius: up to 100RetargetSeconds: 1.5–3.0PullForce: up to 100LiberateMaxMass: up to 150Game 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.
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)
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
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
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).
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.
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.
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.
Fixes & logging: Better diagnostics and safer instantiation paths.
Initial release