Beastwhispering
Tame wild creatures of Aurai and keep them as real, persistent companions: feed and bond with them, fight alongside them with Hunt as One and For the Kill, manage their comfort and temperature, and grow a lasting bond across saves.
| Date uploaded | 2 weeks ago |
| Version | 0.2.2 |
| Download link | CeruleanCutlass-Beastwhispering-0.2.2.zip |
| Downloads | 21 |
| Dependency string | CeruleanCutlass-Beastwhispering-0.2.2 |
This mod requires the following mods to function
CeruleanCutlass-ForgeKit
Dependency-free dev-tooling for Outward BepInEx mods: file-driven dev command loop, self-test harness, on-screen toasts, player-ready lifecycle wait, embedded/override table loaders, and a shared dev-verb pack (movement/combat/skill/status probes).
Preferred version: 0.4.4CeruleanCutlass-CompanionKit
Persistent-creature companion mechanics for Outward mods: clone/brain-strip body factory, navmesh follower, invisible combat anchor, manual combat. Donor-scene harvesting and template caching moved to DonorKit; aggro control to AggroKit.
Preferred version: 0.4.7CeruleanCutlass-AggroKit
Reusable aggro/threat control tooling for Outward BepInEx mods: per-pair targetability gates, detection veto/redirect, taunt and force-target primitives. Inert until a mod uses it — a library dependency, installed automatically.
Preferred version: 0.1.3CeruleanCutlass-SkillKit
Ship a learnable custom skill for Outward without rediscovering the traps: SideLoader pack-load wiring, effect-bucket routing, the stuck-cast guard, dynamic quickslot icons, native cast sync. Requires SideLoader. Auto-installed as a dependency.
Preferred version: 0.1.3CeruleanCutlass-StoryKit
Add an NPC to Outward as plain data: StoryKit builds the character, spawns it at a fixed spot, wires its dialogue, and compiles a trainer skill tree that sells from the vanilla Trainer UI. Requires SideLoader at runtime. A library dependency.
Preferred version: 0.1.3README
Beastwhispering — tame the wild animals of Aurai
Tame wild creatures and keep them as real, persistent companions. A tamed pet follows you, fights beside you, and survives zone changes and save/reload — it's not a summon, it's a character in your game the same way you are.
⚠ Updating from a build made before 2026-07-30? Your save loses every Beastwhispering item (chow, recipe scrolls, blankets, sigils, feathers), every Beastwhispering skill you have learned, and the fletching enchantment on arrows you already fletched — the mod moved onto its community-allocated item-id range and the old numbers no longer resolve. Your pets are not affected: bonds, loyalty, names and stats are stored by name, not by item id. A fresh character avoids the loss entirely. Full detail in CHANGELOG.md.
⚠ Known issue — taming works in single-player only. Right now the taming itself (using chow on a wild creature to bond it) only succeeds in a single-player session. Once a creature is tamed, it is fully playable in multiplayer: your pet comes with you into co-op, follows, fights, feeds, bonds and persists exactly as it does solo. So the workaround is simply to tame your companion in single-player first, then take it into your co-op session. This is a bug, not a design decision, and we are working diligently to resolve it.
This is actively-developed software. It is playable and it is being tested, but you will find rough edges. Back up your saves before you install. See the release notes for known issues.
Currently tamable: Hyena, Armored Hyena, Veaber, Pearlbird — each with their own diet, combat style, and species-specific bonuses.
- Taming & bonding — win a wild animal over with the right food, then build loyalty over time through feeding, care, and fighting alongside it.
- Combat — Hunt as One and For the Kill give your pet (and you) real combat presence, not a passive follower.
- Care — feed, manage temperature/comfort, and keep your companion alive through the world's hazards. Heating and cooling blankets are crafted; their recipes are also meant to turn up in world loot containers — chests, and the odd containers like broken tents, hollowed trunks and junk piles. (The drop path is new and hasn't been confirmed in a real game yet — craft from a known recipe if you don't see one.)
- Persistence — your pet remembers you. Loyalty, stats, and bond state survive quitting, reloading, and traveling between regions.
- Co-op — play with your companion in a multiplayer session. (Taming itself is single-player only for now — see the known issue above.)
Roadmap
The tameable roster is small right now, and that's deliberate, not a shortcut. Every release keeps adding more of Aurai's creatures — but each one is built as a deep, lore-accurate companion in its own right, not a reskin with a different portrait. We'd rather ship fewer pets that each feel like a real reason to pick that species — a distinct playstyle niche, abilities and stats grounded in how the creature actually behaves in Outward's world — than a long list of interchangeable ones. If your favorite creature isn't tameable yet, it's very likely on the list; it just hasn't gotten its due care yet.
Requires: SkillKit, CompanionKit, ForgeKit, StoryKit and AggroKit — all five declared
[BepInDependency] hard dependencies, installed automatically by a mod manager. Those in turn pull
in NetKit and DonorKit. SideLoader must also be present at runtime. BepInEx refuses to load a
plugin whose hard dependency is missing, so a partial hand-install means Beastwhispering never
starts at all — check BepInEx/LogOutput.log, which names the missing GUID.
Settings
BepInEx/config/cobalt.beastwhispering.cfg, created on first launch. It is a large file; these are
the keys most people want:
[Keys]
## F7 tame · F8 feed · F9 recall · F10 self-test · F12 diagnostics.
TameKey = F7
FeedKey = F8
RecallKey = F9
[Taming]
## Chance a tamable creature drops its taming-food recipe scroll on death (0-1).
RecipeDropChance = 0.33
[Temperature]
## Chance each blanket recipe scroll drops from a placed world loot container (0-1).
BlanketRecipeDropChance = 0.05
Every generated entry carries its own # Default value: comment and a full description. ⚠ BepInEx
never migrates a changed default into an existing cfg, so an install made before a value changed
keeps whatever number is already written in the file — compare against those comments before
reporting a bug. The values above are illustrative of the shape; the file itself is authoritative.
Dev/diagnostic commands are read from BepInEx/config/bw_cmd.txt (write a verb on its own line;
help lists the full set). They exist for debugging, not for play.
Note on Pearlbirds: Pearlbirds live only in Chersonese. If you tame or keep a Pearlbird companion, the game will briefly load into Chersonese and back on its own to fetch their body — a short, automatic loading screen, not a bug.
CHANGELOG
Beastwhispering changelog
0.2.5 — 2026-08-19
- Second-review adjudication: drop a dead dedupe, lift the claim rule into Core
- Review fix: a lower rung's REFUSAL is not the cure rung's invitation
- Review fixes: ck.proxy.status must never read as live when it isn't
- Correction: water DOES douse burning in vanilla — adopt the game's own drink cleanse
- Pet status cures: water douses burning, Antidote cures poison, Bandages stop bleeding
- Pet DoT auras: a burning/poisoned/bleeding/plagued pet visibly wears the status FX
- ck.proxy.status: master streams the proxied anchor's status list to its owner
- Rebuild pearlbird/veaber bundles from the WILD rigs; correct the size prediction
- Vampiric HAO/FTK fix: synthetic strikes now fire Weapon.ProcessAbsorbEffects
- Fix companion locomotion params never reaching the skin-driving animator
- Fix companion locomotion freeze on optimized-rig species (Veaber/Pearlbird)
- Park pet armor: EnablePetArmor default false (Cobalt 2026-08-18)
- Review nits: strip after UID stamp (log names our container), live-retest watchpoints
- PI19 fix: strip the pet cargo container's own interaction components on every path
- Re-assert pet-container keep-alive on the reuse path
- Vampiric overflow heals the pet once player health tops out
- Fill a waterskin that rides in the pet's inventory
- Pearlbird payoff rework: per-stack Synergy bonus + taunt-on-Synergy
- Merge V6b fix (log-level gate: 14 unwrapped sinks retyped + requested-output exemption), peer-reviewed
- Review fixes for V6b: the tab-injector field, and the row keeps its id
- … and 30 more (see git history)
0.2.5 — 2026-08-19
- Second-review adjudication: drop a dead dedupe, lift the claim rule into Core
- Review fix: a lower rung's REFUSAL is not the cure rung's invitation
- Review fixes: ck.proxy.status must never read as live when it isn't
- Correction: water DOES douse burning in vanilla — adopt the game's own drink cleanse
- Pet status cures: water douses burning, Antidote cures poison, Bandages stop bleeding
- Pet DoT auras: a burning/poisoned/bleeding/plagued pet visibly wears the status FX
- ck.proxy.status: master streams the proxied anchor's status list to its owner
- Rebuild pearlbird/veaber bundles from the WILD rigs; correct the size prediction
- Vampiric HAO/FTK fix: synthetic strikes now fire Weapon.ProcessAbsorbEffects
- Fix companion locomotion params never reaching the skin-driving animator
- Fix companion locomotion freeze on optimized-rig species (Veaber/Pearlbird)
- Park pet armor: EnablePetArmor default false (Cobalt 2026-08-18)
- Review nits: strip after UID stamp (log names our container), live-retest watchpoints
- PI19 fix: strip the pet cargo container's own interaction components on every path
- Re-assert pet-container keep-alive on the reuse path
- Vampiric overflow heals the pet once player health tops out
- Fill a waterskin that rides in the pet's inventory
- Pearlbird payoff rework: per-stack Synergy bonus + taunt-on-Synergy
- Merge V6b fix (log-level gate: 14 unwrapped sinks retyped + requested-output exemption), peer-reviewed
- Review fixes for V6b: the tab-injector field, and the row keeps its id
- … and 30 more (see git history)
0.2.4 — 2026-08-11
- Merge petinvincible dev verb: lethal-damage clamp on the pet anchor via the shared BraceReceiveHit choke point (test-automation item 11; PINV1-PINV8 retest owed)
- Merge FTK execute-credit fix: armed ExecuteCreditWindow pays the execute value at death (CL4 FAIL root-caused via decompile; retest CL4b owed)
- petinvincible verb: session-scoped lethal-damage clamp on the pet's anchor
- CL4 fix: For-the-Kill execute credit is armed by the blow, paid by the death
- Species relic HP retune: 1.09 -> 1.05 per-stack (Cobalt's ruling 2026-08-10)
- Breakthrough-synergies master feature flag: [BreakthroughSynergies] Enabled (default false) gates all five Shamanic Pet Resonance legs
- Slope-tilt review wave: pure smoother + hysteresis deadband + per-species axis
- Brace echo: Fable-review fixes (warn key name, dead-attacker Discipline)
- Merge feat/companion-aura: CompanionAura registry (Burning Man fire / Wendigo frost infuse auras) + leg-A VFX fixes
- Companion auras: abstract persistent-visual system + Burning Man/Wendigo infuse auras
- Merge feat/runic-pet-lantern-bolt: CompanionProjectile registry + visible bolt from the pet's lantern
- Leg E: a real bolt from the pet's lantern, via a CompanionKit pet-projectile registry
- Infuse rider audit: no defect found; ship the diagnostics that settle it
- Pet orb: add the gold rim (clone Mana's ManaFrame ring)
- Pet orb: brighter still (#3FD649 -> #66FF6E)
- Pet orb: show HP/MaxHP inside the circle by default (CombatHUD look)
- Pet orb: much more vibrant green tint (#2F7A33 -> #3FD649)
- Merge feat/runic-echo-e: Shamanic Pet Resonance leg E — Runic Lightning lantern bolt (dormant until SR-E0 discovery)
- Leg E: Runic Lightning lantern bolt — discovery-bound driver, runicdump ritual, bw.runicbolt route
- Merge feat/infuse-echo-d: Shamanic Pet Resonance leg D — Infuse Fire/Frost typed pet damage rider
- … and 61 more (see git history)
Unreleased
- Pet thirst (built, NOT live-verified — docs/pet-thirst-testplan.md TH1–TH9): companions now get
thirsty on their own 20-minute clock, mirroring hunger — Thirsty/Dehydrated paw badges
(commissioned Proboina art), hydration rows on the Companion tab, and a full dry day starts
loyalty decay. Hunger and thirst now EACH carry half of the old combined daily loyalty loss, so
a pet both starving and dehydrated loses exactly what a starving pet used to (default 15), and
one axis alone loses half. Only a drink quenches thirst — any waterskin, tea or potion the pet
accepts; meals never do, and a pet can always drink (no satiation gate). Old saves load as
"just drank" (save format v14); config
[Systems] ThirstSecondsPerDay/ThirstyIconFraction; dev verbsetthirst. - New artwork by Proboina: the seven active skill icons, the four passive icons, the heating and cooling blanket icons, and the companion status badges (hunger, cold and heat, scent, synergy, killing favour, and the four fed-buff badges). Pet statuses now read as paw-shaped badges — bronze for a boon, red for a malus — so a companion's state is distinguishable at a glance from your own buffs and debuffs. Same-size drop-in replacements; no settings or saves are affected.
- Diagnostics (built, NOT live-verified): the guest's
[DIAG] player:and[DIAG] pet:position lines gain an appendedpt=shared-clock stamp (PhotonNetwork.time, the identical format the host's[PROXY]position lines carry) so both machines' position forensics align directly; existing tokens stay byte-stable. Also investigated scoping the announce-time stance/target/pos mirror resets to fresh announces only (~85 redundant stance sends/session measured) and deliberately KEPT them on the periodic re-announce: they are the only unconditional re-seed of a master-side proxy row resurrected mid-session (the guest has no reliable resurrect signal — the announce is un-acked andck.proxy.hpclearis lossy), and cutting them could leave a passive pet's resurrected row permanently engaged (the 2026-07-20 stance-desync bug class). The load-bearing comment now says so in code; no behavior change. - Fixed (built, NOT live-verified): as a co-op guest, feeding your pet, taming with a chow,
wrapping a blanket and applying a bandage never actually spent the item — the game only lets
the host destroy items, so the last one in a stack quietly survived. In practice that was an
exploit: infinite feeds and infinite tames from a single chow on a guest. All four now consume
the way the game itself does for a guest (the host is asked to destroy the item, and it
vanishes from your bag immediately), and every consume now re-reads the item afterwards and
logs a loud
consume read-back MISMATCHwarning when the stack count contradicts the consume — this catches the shortfall class of failure (a consume the item's own state refutes); for a single last item a lost host round-trip can still read as consumed, soinvdumpremains the ground truth for "did it really leave the bag". Known limitation, deliberately deferred: a guest's waterskin charge spent on feeding is only decremented locally and can revert on the next sync (the game has no guest-side channel for it; low severity). - Fixed: in co-op, taming a creature the host had spawned could leave your new pet stuck at the
world origin, flickering, until you quit to the main menu. The real cause has been found and
fixed at the source: eating a taming food runs the pet's body-build inside a Unity animation
event, a context where the engine silently refuses to remove components — so the build now waits
one frame before it happens, out of that context entirely. As a safety net, the watchdog that
notices a stuck pet body and quietly rebuilds it in place (bond, health, cargo and save all
untouched) now also catches a mis-built body INSTANTLY rather than waiting ~20 seconds, and the
petunstickdev verb still forces a rebuild on request. And your pet's spell-effect flourish can no longer land on the wrong character in co-op — it had the same underlying bug. Tunable under[Watchdog]incobalt.beastwhispering.cfg. - Your pet can carry for you. A new Pet section sits in your inventory between the pouch and your
backpack, wearing your companion's name; right-click any item for "Move to <name>" (or just drag
it in). Each species has a carry weight — most manage 3 weight, the Phytosaur hauls 8 — and a pet
can't be loaded past it. Cargo stays with the bond through knockouts and loading screens, and if
the bond ever truly ends the pet shakes its load off at your feet (into your backpack, or your
pouch). Configurable under
[Systems] EnablePetInventory/PetCarryWeightDefaultand[Pet] SpeciesCarryWeightsincobalt.beastwhispering.cfg. - Your pet now shows the spells you cast on it. Cast Runic Lantern and its glow floats over your companion; cast Mana Ward and a bubble encases it — and there is a flourish at the moment of the cast, with the creature playing its own animation where one has been set for its species. In co-op everyone sees it, on their own copy of the pet, whether the pet is yours or theirs. The lantern share that only ever worked for the pet's owner has been replaced by this, so a friend finally sees your pet lit up too.
- Which visual belongs to which spell is a small data file you can retune without rebuilding the
mod (
PetSpellFx.jsonin the mod's config folder, plusSpeciesFlourish.txtfor the per-creature animation), reloadable in a running session. The animation table ships empty on purpose — animation names differ per creature and can only be read off a live one, and a creature with no entry simply doesn't animate. - Off-switch:
[SpellFx] EnableSpellFx. The older[Lantern]settings are superseded and no longer read; ward protection itself is unchanged — only its visual moved.
0.2.3 — 2026-08-02
- Reaper fail-safe: never judge a body when no consumer has spoken
0.2.2 — 2026-08-02
- Fixed: installing through r2modman / Thunderstore Mod Manager produced a broken mod. If you
installed Beastwhispering that way, please update — none of the mod's custom skills or items
existed for you. The package was laid out in a way the mod manager rewrites rather than copies:
it flattened the
SideLoader/Items/…folders into a single pile, and SideLoader loads packs only from a folder of that name, so all 14 skill and item packs (Hunt as One, For the Kill, Pet Command, Release Pet, Pet Gift, Communion, Wild Unknown, the four sigils, and the rest) were silently skipped. Nothing errored — the plugin loaded normally and the mod was simply half missing, which is why this went unnoticed. Manual installs and the hand-off bundle were never affected. Updating replaces the whole mod folder, so there is nothing to clean up by hand. - The SideLoader pack now carries a
manifest.txtpinning its name toBeastwhispering, so it no longer inherits whichever folder name the installer happened to use. - Hunt as One and For the Kill now proc your weapon's on-hit effects. An enchantment that explodes
in fire when you hit, a weapon's own on-hit status build-up, an imbue — all of them fired on an
ordinary swing but stayed silent on both signature skills, because the player's half of those
skills is a synthetic hit and the engine fires weapon hit effects from a separate call that
nothing was making. The melee strike now makes it, exactly as the game's own skill-damage
component does. Bows are unchanged: that half is a real arrow and already procs at impact.
New kill-switch
[HuntAsOne] ProcWeaponHitEffects(default on, live viareloadcfg) and ahitfxdumpdev verb showing what your equipped weapon would fire. - Balance: For the Kill cooldown 60s → 35s, Hunt as One stamina 10 → 5.
- Fixed the inverted Appetite bar on the companion tab — it plots satiety, not raw hunger.
- Blanket recipe scrolls now drop from world containers, not creature kills; taming-scroll drop rate cut to 33%.
- Co-op fixes: cross-machine cast replay, taming as the host, and effigy yaw/speed.
- Effigy wave: placement gate, universal agent bind, body census and reaper.
- Pin-session fixes: recall moves the anchor, the replica fuse is defused, glide, swing mirror.
Under the hood: a static-analysis sweep across the mod and its compute layer — null-dereferences, wrong clocks, lying numbers, five silent-normalisation bugs (each with a test), swallowed exceptions and unsent guest requests now report instead of failing quietly.
0.2.1 — 2026-08-01
Documentation only — no code changes from 0.2.0.
- Document the known issue: taming only works in single-player. Using chow on a wild creature currently only succeeds in a solo session. An already-tamed pet is fully playable in multiplayer — it follows, fights, feeds, bonds and persists in co-op exactly as it does solo — so tame your companion in single-player and then bring it into your co-op session. This is a bug, we are working diligently on it, and the note comes out the moment it is fixed.
0.2.0 — 2026-07-30
- Pin BW's direct SideLoader dependency, not just the transitive one
- Thunderstore release prep: changelogs + real category tags for BW
- Fix the passive icons: 84x128, not square — and make the checker catch it
- Regenerate the For the Kill icon: wolf jaws closing on the skull
- Cap all-status build-up resistance below the engine's refusal sentinel
- Release-readiness fixes: a private hostname was shipping into player configs
- Opus review fixes: the changelog the release train would have mangled
- Pre-release review fixes: the public wiki, the unguarded scroll seam
- Close the review items; fix a live double-claim that killed both blankets
- Review fixes: the shared kits must not enforce OUR id allocation
- Fix the id stamper writing "$187000" into all 14 SideLoader packs
- Thunderstore release prep: BW/SkillKit/StoryKit manifests + descriptions
- DonorKit gets a painterly butterfly net; Disengage now reads "return and stay"
- HealPet: bandaged paw + a bold green cross that can't be clipped
- Draw every custom id from the community-allocated pool (87000-87999)
- Lane 3 review fixes: honesty gates on the container + scavenge-sim verbs
- Lane 3: container + caravan queue-unblocker verbs
- Fix pet-sigil V9: Spark now combos off pet circles (ProximityCondition alias)
- Hyena/Pearlbird tuning wave: HAO taunt, gifts, bone relic, feed rule
- Unify the BW iconography: one tan skill field, one item field, vanilla slot aspect
- … and 310 more (see git history)
⚠ Read this before updating from any build made before 2026-07-30
Your existing save loses every Beastwhispering item, skill and enchantment.
The Outward modding community allocates ranges of custom item ids so that no two mods ever ship the same number — a number that lands in your save file permanently the moment you pick the item up. Beastwhispering had been using a range it simply chose for itself, which nobody had granted it and which could have collided with any other mod you install. It now uses 87000-87999, the range allocated to it.
Every id changed, so the game no longer recognises the old ones. On an existing save you will lose:
- every Beastwhispering custom item — chow, recipe scrolls, blankets, pet sigils, Pearlbird feathers;
- every Beastwhispering skill you have learned (re-learn them from Maren — all ten are still in her training tree);
- the fletching enchantment on any arrows you have already fletched.
Your pets are not affected. Their bonds, loyalty, names and stats live in Beastwhispering's own save files, which store species and item names, never item ids. A bonded pet survives the update intact.
Starting a fresh character avoids the loss entirely. There is no migration: the old numbers were never ours to keep, and carrying them forward would have meant shipping a known collision risk into a public release.
Co-op
Host and guest should both run this build. The companion channel's version gate is exact, so a
mismatched pair still joins the Photon room but the ck channel never goes ready — pets desync
rather than the session being refused, and the log carries a handshake-mismatch warning. Matching
builds is the standing rule for co-op and this release does not change that.
Under the hood
- Ids are now recorded one-per-row in a checked-in ledger, generated from that single source into the code, the SideLoader packs and the item registry, and gate-checked in CI — including a scan that fails the build on any hand-typed id.
- A blanket added through the
Blankets.txtconfig drop now needs an explicitly allocated id and is refused with an explanatory message if it has none. Previously it silently invented one by hashing the blanket's name, which could land on another mod's item.