TheSageMod
Smooshbound Amulet summons Sage and grants a 50-adrenaline movement and regeneration blessing. Initial integration test build.The Sage Mod — 0.1.0 test build
Smooshbound Amulet summons Sage while equipped in Valheim's trinket slot.
Items and recipe
Craft Smooshbound Amulet by hand, without a crafting station:
- 5 Silver
- 3 Fenris hair (the game's prefab name is
WolfHairBundle) - 1 Best Friend's Love
Best Friend's Love is console-only for now. With the game's developer console enabled, use:
spawn SageBestFriendsLove 1
For direct amulet testing:
spawn SmooshboundAmulet 1
Normal recipe discovery still applies: a character must discover the ingredients.
The amulet and Best Friend's Love do not retain the game's cheating item tag. Existing copies are cleaned when loaded or updated in an inventory; the cleared flag is saved normally. This applies only to these two items, not character or world cheat history.
Adrenaline effect
The trinket grants no passive stat bonuses: no armor, resistances, regeneration, speed, or stamina-cost modifiers. Equipping it summons Sage; all stat bonuses below belong only to the timed adrenaline effect.
At 50 adrenaline, the normal trinket system activates Smooshbound Love for 45 seconds:
| Bonus | Amount |
|---|---|
| Eitr regeneration | +15% |
| Stamina regeneration | +15% |
| Jump height | +0.75 metres |
| Running speed | +4% |
The jump effect converts extra height to launch velocity using the current gravity and jump velocity. Running speed applies only while running, not while walking or swimming. Regeneration uses Valheim's normal additive buff rules. Reaching the threshold again refreshes the existing effect instead of stacking copies, and consumes adrenaline through the game's normal handling. The triggered buff lasts its normal duration if the amulet is removed.
Companion behavior implemented
- Orange and dark-violet clouds on summon, dismissal, and recovery.
- One Sage per wearer. No combat, health, collision with the player, food requirements, or persistent stray cats.
- Sage waits until the wearer is more than 1.25 metres ahead in their direction of travel, then follows a target 1.25 metres behind. Starting to move or turning nearby does not send her circling behind them. When the wearer stops, she settles to their right. FollowDistance controls the stationary side spacing (default 0.75 metres).
- At half the configured recall distance, Sage attempts a safe catch-up leap toward her follow target. Catch-up leaps prioritize distant dry landings, check the full arc, and have a recovery cooldown. Normal recall remains the fallback if she cannot keep up.
- Movement tracks the wearer's actual speed, including other movement bonuses, with 30% catch-up headroom. Animation pace follows movement speed; short ground-following steps preserve pace at lower frame rates.
- Ground probes follow hills and small steps, trying walking detours before obstacle leaps.
- Jump capability is derived from the wearer's jump force, skill, active jump effects, and observed upward velocity. Obstacle and river leaps check the arc and landing before starting.
- Occasional upward looks while standing nearby.
- Long horizontal separation, drops beyond the wearer's jump capability, portals, and prolonged obstruction trigger a poof. Ground reappearance requires a dry, clear landing and at least 0.2 seconds of stable owner grounding.
- Ground, chair, and throne sitting use LieDown then LieIdle on the lap.
- Bed attachment uses CurlUp then CurlSleep, randomly choosing the stomach or beside the head once per rest.
- Small water gaps use dry-bank leaps. While the owner swims, larger crossings use a jump onto their back. Sage returns to dry ground or a deck when possible.
- Boat contact uses the boat's local coordinates so standing Sage moves with the deck. Boat landing targets move with the boat during a leap.
- The owning player's client computes movement and publishes state; other modded clients render that state. Install the same build on all participating clients and the server for the custom items. Multiplayer is not yet certified by a two-client test.
Installation
Use a separate test profile with BepInExPack_Valheim 5.4.2333 or a compatible newer version. Jotunn is not required.
Copy the TheSageMod folder containing both TheSageMod.dll and sageassets into that profile's BepInEx/plugins directory. Alternatively, import the packaged local zip in r2modman. Do not copy the SmokeProbe test plugin from work or tools into your play profile.
The mod creates BepInEx/config/com.smooshbound.sage.cfg on first launch. This includes following/recall distances, base pace, and lap, back, stomach, and head offsets. Furniture and armor vary, so pose offsets are exposed for in-game fitting. Restart the game after editing the configuration.
Validation and remaining work
This is a first integration build, not a claim that every gameplay case is finished. The build report in dist/VALIDATION.md records the checks actually performed.
Before regular play, complete TESTING.md, particularly furniture fitting, loaded interiors, moving boats, grappling, and multiplayer. Movement currently uses collision probes, short detours, and stuck recovery rather than a full navigation mesh. It will poof around obstacles it cannot solve. Custom chair/bed poses may need configuration adjustments. Rest exits currently blend into a departure leap rather than playing the full stand-up/uncurl sequence.
The model has roughly 40,512 imported vertices. An optimized LOD remains worthwhile for groups with several companions. The initial idle uses a paused standing locomotion pose; a dedicated breathing idle, petting interaction, and optional purring are good next polish items.
Building
Run tools/Build.ps1 from PowerShell. It accepts -UnityEditor, -GameDir, and -BepInExDir overrides. The Unity project imports copies of the existing approved source assets; the original files in outputs are preserved. The default available editor is Unity 6000.3.7f1; the installed game uses 6000.0.75f1. Prefer a matching editor for release builds and repeat runtime validation whenever changing editor or game versions.
The test project checks pure movement decisions and jump-height arithmetic. The isolated SmokeProbe verifies startup/item registration when loaded through BepInEx; it does not enter a world or exercise companion movement.
