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.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.
Combat style — the Pearlbird's opposite stance
Each species has a combatStyle axis in its manifest (data/species/<Name>.json →
CombatStyleTable): chase (default — close to melee on the target) or opposite (the Pearlbird:
station on the FAR side of the target so the mob sits between you and the bird, then hold there).
The stationing itself is CompanionKit's — the deadband, the far rule and the cap are documented
in the CompanionKit README; the knobs are bound HERE (BepInEx/config/cobalt.beastwhispering.cfg,
[Combat]: StationRingFraction = 0.6, StationLineAngleDeg = 20, StationRestationMeters = 3,
StationRestationSeconds = 2, StationArriveMeters = 0.8, StationMaxRestations = 6,
StationFarMeters = 3, StationProgressMeters = 1 — the real defaults; the last one is the
converge-or-chase gate: two far re-stations in a row that close less than this much ground on the
station mean the mob is dragging it away faster than the bird can walk, so the bird gives up the
stance and plainly chases). Beastwhispering adds the station-pin: once the
bird is planted and the mob is at its reach, a short taunt pins the mob onto the bird so you can
kite. Same file, [Combat] (defaults shown):
[Combat]
## Opposite stance: briefly pin the enemy's attention onto the pet once it reaches its station.
StationPin = true
## Opposite stance: how long (s) one station pin holds the enemy's attention on the pet.
StationPinSeconds = 3
## Opposite stance: minimum seconds between station pins.
StationPinCooldownSeconds = 3
[Brace] EnableTaunt = false silences the pin too (it is the one taunt kill-switch). In co-op a
GUEST's bird has no local anchor (the master's proxy anchor is its body), so the pin skips the
anchor and "already locked on the bird" rungs there and routes anchor-less to the master
([TAUNT] … routed to the master). Verbs: petstyle [chase|opposite] (print or override the live
body's style — a re-formed body goes back to the table) and stationdump (knobs → table → live
station / corridor angle → pin state). Log tag [STATION] (set: why=first / restation #n why=… / planted / cap fallback / pin #n); plan docs/pearlbird-station-testplan.md.
Converge (the "mob moves itself" half). The planted pin only arms after the bird has reached
its station — i.e. after the chase already succeeded, and against a mob that keeps repositioning
it never does (the why=far churn). Two additive pieces close that: the converge pin arms the
same taunt while the bird is still walking to its station, once the mob is within
StationConvergeReachMultiplier × AttackRange (7.8 m by default) — shorter hold, wider cooldown —
so the mob turns onto the bird's anchor and walks into the corridor the bird is building; and the
fast hold stops the body from re-stationing for "the enemy left me" while the enemy is running
faster than StationEnemyFastMetersPerSecond (off by default: a running mob drags the station away
as fast as the bird walks). The gate ladder is pure (Beastwhispering.Core.ConvergePin,
ConvergePinTests); StationPin.cs only gathers the inputs. Same file, [Combat] (defaults shown):
[Combat]
## Opposite stance: also pin the enemy's attention onto the pet while it is still WALKING to its station.
StationConvergePin = true
## Opposite stance: the converge pin arms when the enemy is within AttackRange x this of the pet.
StationConvergeReachMultiplier = 3
## Opposite stance: how long (s) one converge pin holds the enemy's attention on the pet.
StationConvergePinSeconds = 1.5
## Opposite stance: minimum seconds between converge pins.
StationConvergePinCooldownSeconds = 5
## Opposite stance: while the enemy moves faster than this (m/s) the pet does NOT re-station for "the enemy left me". 0 = off.
StationEnemyFastMetersPerSecond = 0
Converge pins log under their own tag, [CONVERGE] pin #n: … (walking to station, reach …), and a
walking-phase refusal is [CONVERGE] pin held back: moving to station (converge: …) — the planted
[STATION] literals and every existing why string are untouched. stationdump adds a
[CONVERGE] config: line, fastHolds= on the live line and (converge n) in the pin tally.
Backpedal / strafe — the allowsBackpedal species axis
Each species may declare "allowsBackpedal": true in its manifest (data/species/<Name>.json →
bwspecies build → embedded SpeciesBackpedal.txt → BackpedalTable). It means "this rig ships
back/strafe clips", and lets CompanionKit feed the animator the body-frame blend (a signed
moveForward + moveSide) instead of an unsigned forward speed — the fix for the Pearlbird's
moonwalk (docs/pearlbird-movement-handoff.md). Only the Pearlbird opts in today; everything else
stays forward-only. Per-species override without a rebuild — BepInEx/config/SpeciesBackpedal.txt,
same Species=true|false format, reloadbackpedal re-reads it live (effigies next frame, the local
pet on its next body stamp):
# BepInEx/config/SpeciesBackpedal.txt
Pearlbird=true
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.
Credits
Artwork by Proboina — the skill and passive icons, the item icons, and the paw-shaped companion status badges.
Beastwhispering requires SideLoader by sinai-dev at runtime, and runs on BepInEx.
