Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
RustyHeathensWarSaddle
Animated leather saddlebags for tamed moose. Persistent storage, configurable up to 32 slots, server-controlled capacity, safe resizing, and normal death drops. Press K to open.
| Date uploaded | a day ago |
| Version | 1.0.1 |
| Download link | RustyLaserGaming-RustyHeathensWarSaddle-1.0.1.zip |
| Downloads | 15 |
| Dependency string | RustyLaserGaming-RustyHeathensWarSaddle-1.0.1 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2351README
Rusty Heathens War Saddle
Give your tamed moose leather saddlebags with persistent storage. Rounded bags, stitched flaps, leather straps and metal buckles follow the saddle as your moose walks, runs and bends to eat.
Uses the ordinary moose saddle. Built for the Rusty Heathens community.
Features
- Configurable storage: 16 slots by default; up to 32 slots in an 8-column, 4-row layout.
- Server-controlled capacity: multiplayer clients receive the host/server's storage settings automatically.
- Safe size reductions: loaded bags retain their existing size until emptied and closed.
- Persistent contents: items stay with the moose across saves and restarts and drop on normal death.
- Animated leather bags: rounded bodies, stitched flaps and open metal buckles.
- Cosmetic appearance: no changes to defense, health, damage, movement speed or hitboxes.
- Saddle protection: empty and close the bags before removing the saddle.
Controls
| Control | Action |
|---|---|
| K | Look at a saddled moose while dismounted to open its bags. Nobody can be riding it. |
| E | Ride the moose as usual. |
| Shift + E | Remove the saddle after emptying and closing the bags. |
K is configurable. G remains available for your backpack.
Installation
Install BepInExPack Valheim and RustyHeathensWarSaddle through your mod manager. Install the same version on the server and every client, then restart both. No Jotunn or external ServerSync dependency is required.
For manual installation, put RustyHeathensWarSaddle.dll in BepInEx/plugins/RustyHeathensWarSaddle/.
Upgrading from a manual test build: replace/remove the old manually installed DLL so only one copy remains. Keep your existing config and world. Existing saddlebag contents use the same saved item format. Back up the world before upgrading. Empty expanded bags before downgrading to a version without configurable capacity.
Set the number of slots
Start once to generate:
BepInEx/config/com.rustyheathens.warsaddle.cfg
In multiplayer, edit this file on the server. In single-player, edit your local file. Stop the server/game before editing, then restart.
Default: 16 slots:
[Storage]
Columns = 4
Rows = 4
Maximum: 32 slots:
[Storage]
Columns = 8
Rows = 4
| Setting | Default | Allowed range |
|---|---|---|
| Columns | 4 | 1–8 |
| Rows | 4 | 1–4 |
Total slots = Columns × Rows. For example, 6 columns and 4 rows gives 24 slots. Bounds are enforced to keep the layout within 8×4; no extra inventory window rows are added. A player changing their local storage settings cannot override the server's capacity.
Increasing both dimensions, or increasing one while keeping the other unchanged, preserves all existing item positions. Reducing either dimension waits until that moose's bags are empty and closed. Until then, the hover text shows the current capacity and a reminder to empty the bags. No items are discarded or pushed into hidden slots to meet a smaller setting.
If the bags say they are waiting for settings, confirm that the server and clients all have version 1.0.1, then reconnect. Capacity synchronization is required to open bags in multiplayer.
Appearance settings
Appearance / BagScale and BagOffset adjust the fit; restart after changing them. Shoulder and chest armor are removed. An older experimental headpiece remains available through ShowHeadArmor, but is disabled by default and is not part of the finished bag appearance.
Compatibility and item safety
- Applies to the normal moose only; excludes spiritcaller and other creature types.
- Do not combine with another mod that attaches a storage container to the same moose. This mod refuses that combination to avoid conflicting container handlers.
- Normal death drops the stored items. Failed drops are retried before death cleanup.
- If saved items cannot be read, the original saved bytes are retained and access is blocked; check the log and restore the missing item/mod dependency.
- Empty the bags before uninstalling. Vanilla Valheim cannot access their contents.
- Do not console-delete a moose carrying items. Keep ordinary world backups.
For servers running ModGuard, allow the plugin GUID com.rustyheathens.warsaddle. Existing allow-lists for this mod still work. No private server/admin configuration is included in this package.
Release verification
The 0.1.6 baseline was confirmed in-game by the server owner: bag appearance, animation, storage, restart/rejoin persistence and normal death drops. Version 1.0.0 preserves that appearance and adds configurable capacity and synchronization.
The release compiles against supplied game references with no warnings/errors. Automated mesh/capacity checks and simulated server/client handshake tests pass. The new configurable sizes and synchronization still need an in-game check: use 8×4, save/rejoin, then reduce the size with items present and verify it applies after emptying and closing.
Source, build scripts and tests are distributed in a separate source archive. This release ZIP contains only the runtime DLL, icon and package documentation. No game or third-party DLLs are redistributed.
When reporting a problem, include your mod version, server/client configs, BepInEx/LogOutput.log, and screenshots. Fitting messages start with WarSaddle fit: and WarSaddle attachment:.
CHANGELOG
1.0.2 — Jo-bags
- Rename the storage window, interaction prompt and bag messages to Jo-bags.
- Keep existing saved items, capacity settings and bag appearance unchanged.
1.0.1 — release package cleanup
- Remove source code, build scripts and test files from the Thunderstore installation ZIP to follow the package rules.
- Provide development files in a separate source archive.
- Clarify the version-matching message. Storage capacity, item format, bags and animations are unchanged.
1.0.0 — configurable storage and public release
- Add server-controlled Storage / Columns (1–8) and Rows (1–4); retain 4×4 by default.
- Cap supported layout at 8×4 (32 slots).
- Synchronize capacity over the direct server connection; ignore other peers and invalid settings.
- Retain loaded bag dimensions when either dimension is reduced; apply the smaller layout after emptying and closing.
- Preserve item positions during growth, saved item data, and inventory change callbacks.
- Save dimensions with the moose; show actual capacity and pending size changes in hover text.
- Verify loaded item counts and positions before replacing inventory; preserve original saved bytes if loading fails.
- Preserve the owner-tested 0.1.6 bag appearance, animations and death-drop behavior.
- Add Thunderstore manifest, branded icon, installation/configuration instructions and source.
0.1.6 — follow the animated saddle rig
- Replace parenting to the static Sadle interaction object with parenting to an animated back bone.
- Prefer the saddle mesh's spine influences near the riding seat; fall back to body influences or the nearest spine when needed.
- Detect saddle renderers outside the interaction hierarchy by mesh/material name.
- Retain fitted world position and scale on attachment; let the animator drive movement directly.
- Log the chosen bone and selection source; sample mesh data only during visual initialization.
- Preserve 0.1.5 geometry/materials and all storage/grid/interaction rules. Clean compilation; feeding animation still requires live verification.
0.1.5 — rounded leather saddlebags
- Replace rigid boxes with smoothly shaded pouches, rounded bottoms and tapered mouths.
- Add folded leather flaps with curved stitched hems.
- Fit dark leather straps over the pouch surfaces; use open metal buckle frames and pins.
- Preserve attachment, bag centers, size controls, storage and inventory grid.
- Keep body armor removed and head armor disabled by default.
- Clean compile and 10,778 policy/mesh checks; live appearance check pending.
0.1.4 — remove leftover armor
- Remove shoulder plates, chest plate and the floating horizontal strip above the bags.
- Keep visible bag bodies, flaps, vertical straps, buckles and fitting unchanged from 0.1.3.
- Retire body armor offset/scale settings; head armor remains disabled by default.
- Storage and grid source remain unchanged; 16 slots and the K shortcut are retained.
- User confirmed slots in 0.1.2 and visible bags in 0.1.3. This cosmetic cleanup needs an in-game check.
0.1.3 — fix model scale and attachment
- Fix the logged oversized moose measurement: explicitly compensate renderer scale when baking the skinned mesh.
- Compare baked dimensions with live renderer bounds; reject implausible results and use rendered bounds as a conservative fallback.
- Retain the real saddle/riding anchor instead of replacing it with a mesh-bound estimate.
- Parent the bag/body visual to the active vanilla saddle attachment while preserving world size and rotation.
- Log renderer scale and measurement checks for fitting verification.
- Preserve the working grid and storage source unchanged. Head armor remains disabled by default.
- Zero compile warnings/errors; 386 automated checks pass. Placement still needs an in-game check.
0.1.2 — saddlebag slots and fitting
- Fix initial blank 4×4 inventory: invalidate the native layout cache when dimensions match but slot elements are missing, then let the original grid code build the controls.
- Patch applies only to this mod's active saddlebag inventory.
- Sample all available moose skinned meshes and remove the fixed maximum flank width; position bag inner edges beyond the measured body surface.
- Separate shoulder measurement from bag measurement; log sampling counts and both widths.
- Brighter brown leather with subtle procedural grain and muted blue straps.
- Disable the experimental head armor by default while bag functionality/fit is tested.
- Storage serialization, slot count, K shortcut, and cosmetic-only stats unchanged.
- Clean compile; 378 policy/mesh checks pass. Live verification pending.
0.1.1 — visual initialization fix
- Fix confirmed
No supported opaque shader foundfailure: clone a loaded opaque saddle/moose material instead of depending on named shader lookup. - Preserve original materials; give custom geometry plain tinted surfaces.
- Retry failed visual initialization at five-second intervals, up to six attempts.
- Log selected material and shader for fitting diagnostics.
- Storage format, 16-slot capacity, cosmetic-only behavior, and K shortcut unchanged.
- Builds cleanly against supplied game references; live visual verification pending.
0.1.0 — test build
- Existing normal moose saddle receives 16-slot persistent storage.
- K opens bags; shortcut configurable. G stays available for backpack use.
- Brown leather bags, blue trim, shoulder/chest plates, and animated open-face head armor.
- Cosmetics only; no character stats or hitboxes changed.
- Loaded/open bags block saddle removal; ridden moose block storage access.
- Native container interaction and separate inventory save key.
- Normal death transfers contents to world drops; failed drops defer cleanup and retry.
- Automatic fitting with configuration offsets and diagnostic bone logging.