watchoutbro-WatchOutBro icon

WatchOutBro

Per-enemy gags + stacking + character cameos (Goobers, Clark, Dexter, DIRCM, ...). Drop voices/images for full effect.

CHANGELOG

Changelog

3.0.1

Fixes

  • Game no longer freezes on level load. Diagnostic Harmony patches were dispatching pickup events on every fire — many "pickup"/"grab"/"collect" methods run every frame (e.g. Unity's OnTriggerEnter, IsPickupable()), which spammed the Goober counter into the thousands and spawned infinite duplicates. Diagnostic patches are now strictly log-only; narrowed keywords (pickup, shoot only); 50-patch cap per kind.
  • Mommy ASMR now plays on the main menu. SceneManager.activeSceneChanged doesn't fire for the scene already active when the plugin attaches — so the ambient loop never triggered on launch. Replaced with a 1Hz poll of SceneManager.GetActiveScene(); scene-name heuristic also recognises main.
  • Plugin compile fix. Config static class shadowed BaseUnityPlugin.Config (the inherited ConfigFile property) — renamed to ModConfig so dotnet build resolves correctly.

Goober — now actually wired

  • New PickupPatch.cs runs Harmony patches on a curated short list of likely method names (PhysGrabber.PickUpValuable, PhysGrabObject.OnGrab*, ValuableObject.OnPickUp, ItemAttributes.PickUp). Whichever resolves at runtime gets postfixed.
  • PickupRouter.OnRealPickup debounces same-instance pickups within a 0.6s window so multiple patched methods firing in one event count once.
  • Hard limits to keep the game playable even if the patch target is wrong:
    • 1s minimum gap between counted pickups
    • 500-pickup lifetime kill-switch with warning log
    • 100-duplicate hard cap per session (even with GooberDuplicate=true)
    • Self-duplicates excluded from re-counting
  • Clark trigger hard limits: 8s minimum gap between cameos, 50-fire lifetime cap.

Config defaults

  • GooberDuplicate default flipped to off — opt in once the pickup hook is verified working for your install.

3.0.0

Fixes

  • Per-enemy reactions actually trigger now. v2 substring-matched on the leaf GameObject name; spawned enemy components live on child objects so the parent prefab name was missed. v3 walks the entire transform-ancestor chain and matches against the joined string. Strips "(Clone)" suffix.
  • Diagnostic flag LogEnemyNames in BepInEx/config/watchoutbro.WatchOutBro.cfg dumps every distinct enemy's full ancestor chain + matched reaction key for tuning.

Features

  • Stacking overlays. Multiple enemies in range now show multiple stacked bubbles in the bottom-left (max 4), sorted by priority. Exclusive layouts (Huntsman shush, Wolters Kluwer modal) suppress the stack.
  • Voice + image drop-in folders. Drop OGG/WAV/MP3 into BepInEx/plugins/WatchOutBro/voices/ and PNG into BepInEx/plugins/WatchOutBro/images/ to override procedural placeholders. No rebuild needed.
  • Character cameos (overlay onto vanilla enemies/items, no new spawnable content):
    • Goobers — every valuable pickup increments a counter, plays goober_N.ogg (1..10) then goober_iquit.ogg, and spawns a visual duplicate of the same valuable at your feet (client-only, not net-synced).
    • Clark — picking up a high-value valuable (diamond / crown / jewel / gold / trophy / ruby / sapphire / emerald) flashes a Clark cameo and plays clark_pickup.ogg.
    • Mommy ASMR — ambient loop in menu / lobby / truck scenes. Drop mommy_asmr_loop.ogg to enable; otherwise silent.
    • Ulfric Stormcloak — random cameo on level load (5% chance, configurable).
    • Klonnku — re-skins the Gnome reaction.
    • Plonko — re-skins the Spewer reaction.
    • Dexter Morgan — re-skins the Chef reaction.
    • DIRCM (enemy) — re-skins the Trudge reaction with a nose-shaver icon.
    • DIRCM (weapon) — firing any gun flashes a cyan IR beam and plays dircm_fire.ogg (or a procedural whistle).
  • New procedural icons: NoseShaver, Beam. New procedural sound: IrBeam.
  • Pickup + gun-fire hooks use a diagnostic candidate-method scan; first launch logs which methods fired so the hook can be locked in a patch update if the heuristic missed.

Config

New BepInEx config keys in [Diagnostics], [Audio], [Gameplay] — see file in BepInEx/config/watchoutbro.WatchOutBro.cfg after first launch.

2.0.0

  • Per-enemy reactions: each enemy type now triggers its own overlay and message.
  • Wolters Kluwer compliance training modal once per level.
  • Procedural icons + sounds.

1.0.0

  • Initial release. Cat appears when enemy within 15 m.