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 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.
