Yoke
Bigger stacks, earned biome by biome.
- Features
- How stacks are earned
- Installation
- Configuration
- The item list
- Multiplayer
- Compatibility
- Troubleshooting
- Bug reports
- Discord
- Server
- Building
- Design notes
- Part of Longhouse
- Author
Yoke raises stack sizes one biome at a time. Kill a biome's boss and the things that biome gives you start stacking higher; everything else stays at vanilla until its own boss falls.
Which biome an item belongs to is worked out from the game's own vegetation, spawn, conversion and recipe tables rather than from a list in the mod, so items added by other mods are placed too.
Built against Valheim 1.0.7, Unity 6000.0.75, BepInEx 5.4.23.5, Harmony 2.9.
Features
- Stacks start at vanilla. Each boss raises one biome's items to 2x, capped at 200.
- Weight is untouched by default, so carry weight still decides what comes home.
- Equipment is never made stackable.
- Ore and bars wait for the boss of the biome they come from.
- Stacks move the moment a boss dies, including what is already in your pack.
- A generated item list beside the config names every item, what happened to it, and why.
- Everything is a config entry: the tier table, the multipliers, the cap, per-item exclusions.
How stacks are earned
Stack sizes sit at vanilla (ProgressionBase = 1) until a boss key is set in the world. Each
row of ProgressionTiers names a boss, a biome and a multiplier. The default table:
| Boss | Global key | Raises |
|---|---|---|
| Eikthyr | defeated_eikthyr |
Meadows |
| The Elder | defeated_gdking |
Black Forest |
| Bonemass | defeated_bonemass |
Swamp and Ocean |
| Moder | defeated_dragon |
Mountain |
| Yagluth | defeated_goblinking |
Plains |
| The Queen | defeated_queen |
Mistlands |
| Fader | defeated_fader |
Ashlands |
The highest earned row naming a biome wins, so rows never compound, and one boss may name several biomes. Bonemass carries the Ocean because no boss lives in the water; without that row every fish, chitin and bait would sit at vanilla all game.
Deep North has no row in the default table, so its items stay at the base multiplier however many bosses fall. Yoke logs one line at startup saying so.
The change lands when the boss dies, not at the next login. Item prefabs, the stacks in your inventory and the stacks in a container are all rewritten (a container catches up the moment you open it).
Any global key works in ProgressionTiers, not just boss keys, so a modded boss can be added
as a row.
How an item's biome is decided
Six routes, all reading the game's own data:
- Vegetation table. A copper deposit is placed in the Black Forest and the deposit drops copper ore, so copper ore is a Black Forest item.
- Spawn tables. Fulings are Plains and the Fuling's drop list has black metal scrap, so black metal is Plains.
- Spawners. A greydwarf nest or a surtling geyser is what the tables know about, not the creature it makes.
- Recipes, smelters, cooking stations and fermenters. Anything made takes the biome of its latest ingredient. Barley is Plains, so flour is, so dough is, so bread is.
- Boss drops. A boss prefab knows the global key its death sets and the tier table knows which biome that key belongs to, so Moder's trophy is a Mountain item without either side naming it.
BiomeOverrides, for the roots none of that reaches: ore deposits inside locations, dungeon loot, fish, and trophies of creatures that only appear inside a location. Roots only; the recipe pass turns each one into everything made from it.
An item found in several biomes takes the earliest. A crafted one takes the latest of its ingredients: found is about where it turns up, made is about when you can make it.
Anything no route can place stays at vanilla and shows as none in the item list, which is
where you find candidates for BiomeOverrides. On a current 1.0 install that is around 80
stackable items out of roughly 1,500 in the database.
Ore and bars
Items the game marks as non-teleportable (ore, bars, and a handful of others) are held at
vanilla until the boss of their own biome falls: copper and tin at the Elder, iron at Bonemass,
silver at Moder, black metal at Yagluth, flametal at Fader. IncludeNonTeleportable = true
gives them their bigger stacks straight away.
Yoke does not read or write what may go through a portal. The no-portal flag is only how it finds the metals; the rule being applied is about stack size.
The load guard
Inventory.Load clamps every stored stack to the item's current maximum. For a moment after
login, before the server's global keys have arrived, those maximums are briefly vanilla again,
and a stack clamped during that window is saved clamped and permanently smaller. Yoke removes
the clamp from the load path only, so pickup, crafting and splitting keep vanilla's rules.
That patch is a transpiler, and a game update can move the IL out from under it. If it cannot install, Yoke holds every stack at its vanilla size and logs an error rather than raising stacks it cannot protect. See Troubleshooting.
Installation
Yoke is a single DLL with no assets.
Requires BepInEx 5.4.2350. BepInEx 5 only; this does not run on BepInEx 6.
Mod manager: install Yoke from Thunderstore.
Manual: drop Yoke.dll into BepInEx\plugins\.
Install it on the dedicated server and on every client, at the same version. It loads fine on
valheim_server.exe.
Configuration
BepInEx\config\ezomic.valheim.yoke.cfg, written on first run.
Stacks
| Key | Default | Effect |
|---|---|---|
StackMultiplier |
2 |
Flat multiplier on vanilla stack size. Used only when ScaleWithProgression is off. |
StackCap |
200 |
Ceiling on stack growth. An item whose vanilla stack is already above it keeps its vanilla stack, so coins stay at 999. |
WeightMultiplier |
1 |
Multiplies item weight. 1 leaves weight alone. |
IncludeNonTeleportable |
false |
Give ore and bars their bigger stacks immediately instead of waiting for their own biome's boss. |
IncludeTrophies |
true |
Also affect trophies. |
ExcludeItems |
empty | Comma-separated prefab names to leave completely alone. |
Progression
| Key | Default | Effect |
|---|---|---|
ScaleWithProgression |
true |
Each boss raises one biome. Off falls back to StackMultiplier for everything. |
ProgressionBase |
1 |
Multiplier for a biome no boss has unlocked. 1 is vanilla. |
ProgressionTiers |
the eight rows above | boss:biome:multiplier, comma separated. Biomes: meadows, blackforest, ocean, swamp, mountain, plains, mistlands, ashlands, deepnorth, all. |
ProgressionOrder |
the seven bosses | The order bosses come in, which is what makes ProgressionStep mean "later". Idle while ProgressionStep is 0. |
ProgressionStep |
0 |
How much every boss after the one that unlocked a biome raises it again, compounding. 0.1 makes Meadows 2x at Eikthyr, 2.2x after the Elder, 3.54x with all seven dead. |
BiomeOverrides |
~100 entries | prefab:biome, comma separated, for items the tables cannot place. The shipped list is the roots (ore deposits, dungeon loot, fish, location-only trophies); everything made from them is derived. |
DeferToUtangard |
true |
When Utangard is installed, ask it whether the group has earned a boss instead of reading the world key. No effect otherwise. |
Diagnostics
| Key | Default | Effect |
|---|---|---|
WriteItemList |
true |
Write ezomic.valheim.yoke.items.txt beside the config. |
Verbose |
false |
Log every item whose stack size or weight changed. |
A malformed ProgressionTiers or BiomeOverrides entry is logged and dropped; the rest of the
line still applies.
With ScaleWithProgression = false, metals are held at vanilla permanently unless you also set
IncludeNonTeleportable = true. There is no biome tier left for them to wait for.
BepInEx writes every entry to disk on first run and the saved value beats a new default in
code, so a default that changes in a later version does nothing on a machine that has already
run the mod. Edit the .cfg.
The item list
BepInEx\config\ezomic.valheim.yoke.items.txt, rewritten whenever the numbers change.
ExcludeItems takes prefab names, and prefab names are not guessable: copper ore is
CopperOre but raspberries are Raspberry and a draugr's arrow is draugr_arrow. So the mod
writes down every item it saw, what it did to each one, and which rule stopped it when it did
nothing.
Prefab Name Type Biome Stack Weight Status
Wood Wood Material meadows 50 -> 100 2
CopperOre Copper Ore Material blackforest 30 -> 60 10
Barley Barley Material plains 100 0.2 awaiting defeated_goblinking
BlackMetal Black Metal Material plains 30 12 metal-held until defeated_goblinking
SwordIron Iron Sword OneHanded swamp 1 0.8 equipment
An arrow means Yoke changed that value. A single number means it did not, and the Status column
says why: a rule that refused the item, or the boss whose death will raise that biome. Rows are
sorted by biome, which puts the unplaced none rows at the bottom.
The header carries the settings that pass ran under, what each biome is currently worth, how many items the biome index placed, and a count per reason:
Earned so far: meadows 2x, blackforest 2x, ocean 2x, swamp 2x, mountain 2x, plains 1x, ...
1522 items: 219 raised above vanilla, 200 waiting on a boss, 978 left alone by a rule, 125 unchanged
(equipment 966, metal-held 12, trophy 0, excluded 0, unguarded 0)
unguarded is the one reason in that list that means the mod is not doing its job rather than
that it decided not to. On a healthy run it is 0.
Multiplayer
Progression is the world's, not the character's. Stack size lives on the item prefab, so per-player stacks would mean two clients holding different item databases: one drops a hundred wood in a shared chest, the other opens it holding a slot over its own maximum, and the next move writes back through the smaller rules. Global keys are world state the server pushes to every client, so everyone computes the same answer. A fresh character joining a Mistlands-era world gets Mistlands-era stacks.
Install the same version on the server and on all clients. A client rebuilds its item database from the server's copy when it joins, and Yoke re-applies its own numbers after that copy.
With Longhouse Core installed, Yoke registers with the version check and the host's Yoke settings are applied on connected clients in memory, without writing to the client's own config file.
Compatibility
Longhouse Core is an optional soft dependency. Installed, Yoke joins the version check (clients whose mod versions or build ids do not match the server are rejected on connect) and follows the host's config. Absent, Yoke installs and runs on its own with none of that. In single player it makes no difference.
Utangard opens a biome only when
every member of the group was personally present at that boss's death, which is not the same as
the boss having died in the world. When Utangard is installed, Yoke asks it instead of reading
the key, so stacks do not arrive for a biome Utangard is still holding shut. Soft in both
directions: neither mod needs the other, and DeferToUtangard = false turns it off.
Other stack mods. Do not run a second one. Yoke captures each item's original stack size and weight the first time it sees the item, so whatever another mod wrote before that point becomes what Yoke treats as vanilla.
If you are coming from Hoard (Yoke's old name), the old .cfg is copied over on first run
so settings carry across, including a hand-edited BiomeOverrides.
Troubleshooting
Everything is at vanilla size. Look in BepInEx\LogOutput.log for UNGUARDED or
LoadGuard could not find Inventory.AddItem. The load guard failed to install, and Yoke holds
stacks at vanilla rather than raising stacks it cannot protect through a world load. It needs
retargeting against the current game version; report it.
One item did not change. Open ezomic.valheim.yoke.items.txt and find its row. The Status
column gives the reason: equipment, metal-held, trophy, excluded, or the boss it is
waiting on.
A whole biome's items never grow. Either no ProgressionTiers row names that biome (the
startup log says which), or the items came out with no biome at all and need a
BiomeOverrides entry. The none rows at the bottom of the item list are the candidates.
A setting I changed did nothing. Check the .cfg on the machine in question. On a server,
Core applies the host's values to clients, so a client-side edit to a synced setting is
overwritten while connected.
A stack reads 100/50. That is a stack that was legal when it was made and is now over its own limit, usually after a biome reclassification in a mod update. The game tolerates it: the slot refuses to grow and shrinks as it is spent. Nothing is lost.
Bug reports
Discord is the fastest route, and the right one if you are not sure whether what you are seeing is a bug. Issues on the repo work too and suit anything long.
Attach:
BepInEx\LogOutput.logBepInEx\config\ezomic.valheim.yoke.items.txtand the.cfgbeside it- whether you were on a server or in single player
- the prefab name of the item, if it is about one item
AppData\LocalLow\IronGate\Valheim\Player.logif a vanilla mechanic broke, since exceptions thrown mid-frame land there rather than in the BepInEx log
Discord
discord.gg/hJzAVaZ5wb is used for mod information, updates, support, bug reports, and compatibility questions.
Server
There is also a small EU server running the pack if you want somewhere to play: hard combat difficulty, resources at 1x, everything else vanilla, no application and no activity requirements. Connection details are in the Discord.
Building
dotnet build
Targets net462 and references the game's managed assemblies directly, so no NuGet restore is
needed. The build deploys to the repo-local testprofile\; override with
-p:ProfileDir=<path>.
Design notes
Why both ObjectDB entry points are patched, why every value is computed from the item's
captured original, where the biome routes stop, and the bugs that shaped the load guard and the
live-inventory sweep: DESIGN.md.
Part of Longhouse
Yoke is part of the Longhouse modpack, which pins exact versions of the Ezomic mods. You do not need the pack to use Yoke, and it behaves the same on its own.
Author
Yoke is an original mod by Robbin Thijssen (Thijssen Software).
Copyright (c) 2026 Robbin Thijssen. MIT licensed. See LICENSE.
Changelog
1.2.1 in Longhouse
Changed
Rewritten README. Same mod, clearer documentation: what it does and how to install it come first, then configuration, multiplayer behaviour, compatibility and troubleshooting. Every config table was checked against the plugin's own Config.Bind calls, so the settings, sections and defaults listed are the ones actually bound. No code changed in this release.
discuss
1.2.0
Rebuilt for Valheim 1.0. This version does not run on pre-1.0 Valheim, and the previous one does not run on 1.0.
Fixed
Stacks above the vanilla limit are no longer destroyed when a world loads. The load-path guard targets one exact method, and Valheim 1.0 moved the clamp onto a different overload - the string-keyed one became a two-line forwarder holding no clamp at all. So the guard silently stopped guarding, and stored stacks were clamped on load and saved clamped, which destroys the excess permanently. Retargeted, and the guard still covers only the load path, so pickup, crafting and splitting keep vanilla's rules exactly as before.
discuss
Added
A group carrying items no boss will ever raise is now reported at startup, once, naming the group. Deep North is the first case: nothing in
discussProgressionTiersnames it, so its items sit at the base multiplier however many bosses fall - and the progression summary deliberately omits tierless groups, so that was the one thing nothing would have mentioned.
1.1.0
Changed
Metals wait for their own biome now, like everything else does. Ore and bars are held out of the ramp on purpose, because hauling metal is pacing rather than an oversight - but which boss lifted that was a single global switch, and it cut the wrong way at both ends. Black metal got a bigger stack the moment Bonemass died, before the Plains had been seen; copper and tin sat at their vanilla thirty through the entire bronze age with the Elder long dead. Metals were the one thing in this mod not following the mod's own rule.
Each metal now waits for the boss of the biome it comes from: copper and tin at the Elder, iron at Bonemass, silver at Moder, black metal at Yagluth. It asks the same question the multiplier already asks of the same item, so the two cannot drift apart. The pacing survives - never a bigger stack of a metal before you are established where it is mined - and in practice only copper, tin and iron move, since Bonemass is always down long before silver is worth carrying.
discuss
discussLiftPortalRuleAtis removed. Naming one biome for every metal was exactly what was wrong, so there is nothing left for it to say. An orphan line in an existing config file is harmless.The item list says
discussmetal-heldinstead ofportal-blocked, and names that metal's own boss rather than one answer copied across all of them. The old word described the flag used to FIND the metals rather than the rule being applied, and it read as though the mod had opinions about portals. It does not: nothing here reads or writes what may go through one, andIncludeNonTeleportablenow says so plainly - it is about stack size and nothing else.
1.0.5
Fixed
Stack sizes were wrong for a lot of items, permanently, and quietly. The biome index was lying three ways.
discussBlackMetalsat in the plains whileBoltBlackmetalsat in the meadows, in the same file: the bolt is black metal, wood and feathers, and on the first pass the bar had not been mapped yet - it is a blast furnace conversion rather than a drop - so the recipe answered from the wood alone. Nineteen recipe outputs were frozen that way. Separately the meadows tier carried Mistlands and Ashlands drops - carapace, charred bone, entrails, the Draugr, Seeker and Fuling trophies - because vanilla ships rows whose biome mask says Meadows and whose spawn is gated behind a global key, and the mask was read without the gate. Twelve rows do this. Both were permanent rather than transient because every writer took the earliest answer and refused every later one, so a wrong first pass could never be corrected.
Changed
discussBiomeIndexmoves to Longhouse Core's shared source rather than being owned here. It is compiled into this mod, not into Core's DLL, so Core is unchanged and remains a soft dependency.
1.0.4
Fixed
1.0.3's package contained 1.0.2's DLL. The publish zipped a stale staging folder, so the load-guard fix below never actually shipped under that number. This version is the same code, packaged from a fresh build. 1.0.3 should not be installed.
discuss
1.0.3
Fixed
Stored stacks survive loading. Seen on live: a chest holding 100 greydwarf eyes read 50/100 after a relog, the other 50 destroyed. For a moment after login - before the server's progression keys arrive - every stack limit is briefly vanilla again, the relogging player owns the chests around them, and the game's inventory loader clamps every stored stack to the limit of that moment. The clamp is now removed from the load path, and only there: an over-limit stack shows as 100/50 for a few seconds and normalises when the real limits land, where the clamped half of a stack was simply gone.
discuss
1.0.2
Fixed
The stack cap no longer shrinks items whose vanilla stack already exceeds it. It was written as a ceiling on the multiplied result, which quietly cut coins from their vanilla 999 to the default cap of 200 - the one item in the game above the cap. The cap now limits growth only; anything at or above it keeps its vanilla stack.
discuss
1.0.1
Stack sizes could revert to vanilla for a boss the group had already killed, and stay there for the rest of the session.
ZoneSystem.RPC_GlobalKeys clears the world's key list and re-adds it one key at a time,
on every client, every time anybody sets any key. This mod's hook is on GlobalKeyAdd - the
right place, because it is the only one that catches the bulk list a server sends on connect -
but it acted there, which meant asking "what has the group earned?" once per key against a
dictionary that was still filling up.
With Utangard installed that question goes to its roster, built from the same half-filled dictionary. On the live server it answered "not earned" mid-refill, this mod wrote vanilla stack sizes off the back of it, and no further key ever arrived to trigger a correction.
Fixed
The key hook marks rather than acts. The flag is drained in
discussUpdate, which is the first moment the whole list is certainly in. As a side effect a connect's worth of keys is now one walk of the item database instead of one walk per key.
1.0.0
First release.
Yoke raises the stacks of a biome's own goods when you kill that biome's boss. Meadows timber doubles when Eikthyr falls, Black Forest ore when The Elder does, and so on to Fader and the Ashlands. Nothing else changes: weight is untouched, equipment never stacks, and until the Swamp is earned a portal still refuses ore.
What makes it different from the rest of its category is that nothing is listed. Which biome an item belongs to is worked out from the game's own tables, so an item a content mod adds lands in the right place by itself:
- the world's vegetation table, where a copper deposit is Black Forest and the deposit says it drops copper ore;
- the spawn tables and spawners, down to the nest that makes the creature rather than the creature itself;
- recipes, smelters, cooking stations and fermenters, where a made thing takes the biome of its latest ingredient, so bread is Plains because barley is;
- each boss's own drops, matched through the global key its death sets;
- and a short override list for the roots that only exist inside locations.
That places 665 of 671 stackable items. The six it does not are crafting oddities, left alone rather than guessed at.
The generated item list beside the config names every item, what was done to it, and which rule or which boss it is waiting on.
Verified in play
Wood at 100 and blueberries at 50 on a world with Eikthyr down, with copper ore still portal-blocked. The biome index, the tier ramp, the portal rule and the retune when a world's keys arrive were all confirmed on a real client.
Not yet seen: a boss dying mid-session and the stacks moving without a restart. The path is exercised on every world load; what is unproven is that one arrival.
0.13.0
Hoard is now Yoke
The plugin GUID is now
discussezomic.valheim.yoke, so the config file is renamed with it. Hoard's config is adopted automatically on the first run under the new name, before anything binds, so settings carry over unchanged. That matters more than it sounds:BiomeOverridesruns to about a hundred entries, and a silent reset would drop the mod back to derived-only placement with nothing in the log to explain why the ore stopped stacking.The assembly, namespace and plugin class follow the name.
discussThe icon is redrawn: two stacks under a notched bar, rendered through the suite's shared icon script so it sits correctly beside the others.
discuss
0.12.1
Everything is placed
Spawners. A greydwarf nest, a surtling geyser, the skeleton piles in a crypt: the creature is not in the world's spawn table, the thing that makes it is. Walking
discussSpawnAreafinds them, which is where most of the missing trophies were.Bosses place their own drops. A boss stands in a location so nothing else can see it, but the boss prefab knows the global key its death sets and the tier table knows which biome that key belongs to. Moder's trophy is a Mountain item because Moder's key is the Mountain's key, since neither side names an item, and a modded boss added to
discussProgressionTiersbrings its drops with it.
discussBiomeOverridesnow ships the roots that live inside locations: ore deposits, dungeon loot, dvergr and charred material, fish, and the trophies of creatures that only appear in a location. Roots, not a full list: the recipe pass turns each one into everything made from it, so cooked fish, chicken, spices and meads all placed themselves from these.
0.12.0
A boss raises the biome it guards
discussZoneSystem.m_vegetation: a copper deposit is Black Forest and the deposit says it drops copper ore, so copper ore is Black Forest.The spawn tables plus
discussCharacterDrop: Fulings are Plains, so black metal scrap is Plains.Recipes, smelters, cooking stations and fermenters, where a made thing takes the biome of its latest ingredient. Barley is Plains, so flour is, so dough is, so bread is, across a mill, a recipe and an oven. Every mead lands off the fermenter the same way.
discuss
discussBiomeOverrides, for what none of that reaches.
Fixed
The index rebuilt once per item while incomplete, walking every prefab in the scene a thousand times per pass. It is built once per pass now.
discuss
discussSpawnSystem.Awakefires more than once in a loaded world; the rebuild is guarded so it happens on the first one only.Overrides were applied after the conversions, so copper bars came out unplaced. The smelter pass went looking for copper ore before the override had put it on the map. They are applied before the derivation as well as after.
discussConversions and recipes ran in sequence, which left bread unplaced whatever the pass count, because the step it waited on lived in the other list. They interleave until it settles.
discuss
0.11.1
Progression finishes at Bonemass
Ten percent is imperceptible. Wood going 100 to 110 is not a reward anyone feels, and it lands at the moment a boss dies, when there is a great deal else to notice.
discussThe numbers read as a bug. Vanilla stacks are round: 20, 30, 50, 100. Compounding produces 121, 133, 146, 177, which look like a fault rather than a design.
discussIt drifts past the honest amount. Building ended at 3.54x, well beyond the flat 2x this mod ships and defends. A narrow table that quietly widens forever is the x10 mod taking the long way round.
discuss
0.11.0
Every later boss adds ten percent (off by default since 0.11.1)
discussProgressionOrderis new, because "later" needs an order and the tier table never had one. A key that is not listed still unlocks its own group; it simply never counts as before or after anything, which is the honest answer for a modded boss key somebody added to the tiers and not the order.A group still at the base multiplier does not compound. Untouched is untouched, not "unlocked at zero percent".
discuss
0.10.1
The table is shorter on purpose
The portal rule now says when it lifts. Ore read
discussportal-blocked, which is a half-truth once a metal tier exists. It now readsportal-blocked until defeated_bonemass. Tallies match on the rule, so a qualified note still counts under it."Earned so far" lists only groups a tier can reach. Printing the others at 1x read as a promise that some boss would come for them, and with this table none will.
discuss
0.10.0
Each boss raises one kind of stack
The groups are read off the game's own systems. Building material is whatever appears as a build cost on the Hammer's piece table, crops are the Cultivator's, metal is whatever a portal refuses. So an item a content mod adds lands in the right group by itself, and there is no list here to go stale.
discussAn earned metal tier lifts the portal rule. The haul is real pacing during the first copper runs and paid off by the boss that hands you the iron age.
discussIncludeNonTeleportablestays for anyone who wants it sooner.The item list names the boss each group is waiting for, so "why is my wood still 50" is answered in the file rather than by reading the tier table.
discuss
It hangs on the world's progress, not each player's
Stack size lives on the item prefab, so per-player stacks would mean two clients holding different item databases. One drops a hundred wood in a shared chest, the other opens it holding a slot over its own maximum, and the next move writes back through the smaller rules. Global keys are world state pushed to every client, so everyone computes the same answer with no new networking, and since keys only accumulate the multiplier only ever rises.
Read through the string global-key lookup, not the GlobalKeys enum: that enum stops at
defeated_goblinking in this build, with no defeated_queen or defeated_fader member, so
the enum route would have silently capped the ramp at the Plains.
Utangard decides what counts, when it is installed
Utangard opens a biome only when every member of the group was personally at that boss's
death, which is not the same as the boss having died in the world. Yoke now asks it rather
than reading the raw key, so stacks never arrive for a biome Utangard still has fenced off.
Soft dependency; DeferToUtangard = false turns it off, and neither mod needs the other.
Changed
The item list gained a Group column, sorts by group, and its header counts describe the state of the database rather than the last pass, so they no longer appear to contradict the
discussRetuned nline in the log, which counts only what that pass moved.
0.9.2
Added
An item list, written beside the config on every run.
ezomic.valheim.yoke.items.txt. Every item in the game, its vanilla stack size and weight, what Yoke made them, and which rule left it alone when it did nothing. Off withWriteItemList = false.ExcludeItemstakes prefab names and prefab names are not guessable: raspberries areRaspberryand a draugr's arrow isdraugr_arrow, so a per-item setting without a list beside it is a setting nobody can spell. It doubles as the answer to "why did this item not change", which is the only question a mod like this ever gets, and it answers it without asking anyone to turn onVerboseand read a log.The rows are built by the tuning pass as it runs rather than by a second walk over the database. A separate walk would be a second copy of the eligibility rules, and the first thing it would do is disagree with the real one.
discuss
Fixed
Weights are written with a decimal point on every machine.
discussfloat.ToStringfollows the machine's locale, so on a Dutch install resin came out as0,3, and a comma in a file whose other numbers come from a.cfgthat uses points, sitting next to a column of integers. Both the item list and theVerboselog now format invariantly.
Changed
The pass logs three counts rather than two: changed, already at those values, and left alone. They add up to the item count now.
discussRetuned 0on the second setup of a session reads like a failure until you know the other items were already at the right numbers.
0.9.1
Core is optional
Core is now a soft dependency rather than a hard one. Yoke installs and runs on its own, and the Thunderstore package no longer drags Core in with it. Present, Core is used; absent, nothing here is degraded.
discussWhat is given up standing alone is the version gate, not the mod. Item data that differs between two ends desyncs inventories, and without Core nothing reports that. The
discussObjectDB.CopyOtherDBpatch still puts a joining client on the server's numbers, which covers the common case on its own. Solo, none of it applies.The registration call sits in its own method that is never inlined, because the JIT resolves the assemblies a method needs when it first compiles that method. A Core call written directly into
discussAwakewould drag the assembly in before the installed-check could prevent it, and the missing-assembly exception would land during plugin load, which is precisely the failure the soft dependency exists to avoid.
0.9.0
First complete build. Carried the number 1.0.0 until the release policy above was settled; it was never published under it.
Stacks
Stacks double. Wood 50 becomes 100, with a hard ceiling of 200 whatever the multiplier says.
discussWeight is untouched by default. The carry limit still decides what comes home, which is the half of the logistics problem worth keeping.
discussOre and metal bars are not modified at all. Metal cannot go through a portal, so hauling it by cart and boat is deliberate pacing rather than an oversight. One config line turns it on if you disagree.
discussEquipment is never made stackable. Only items with a vanilla stack size above 1 are touched, because anything that does not stack in vanilla carries per-item durability and quality, and collapsing several into a count throws all but one of those away silently.
discuss
Why the defaults are low
The usual version of this mod ships x10 stacks and halved weight, which does not make Valheim more convenient so much as remove a system from it. The tedium and the difficulty are the same mechanic seen from two sides, so the defaults here fix the annoying half and leave the interesting half alone. Everything is a knob if you want the easy version.
Correctness
Both
discussObjectDB.AwakeandObjectDB.CopyOtherDBare patched.Awakebuilds the database at startup andCopyOtherDBrebuilds it when a world loads, so patching only the first means untouched values quietly replace yours the moment you join a game.Every value is computed from the item's original, captured the first time it is seen and never overwritten. The database is set up more than once, and a mod that multiplies whatever it currently finds squares its own multiplier on the second pass.
discussLoads on dedicated servers, and declares to Core's version gate so a host and a client cannot disagree about stack sizes.
discuss
Known limits
If another mod changes an item before this one first sees it, that changed value is what gets recorded as the original.
discuss
Every setting · 15
All of it lives in one file, written on first run with each description beside its default. The file is the source of truth; edit it there.
BepInEx/config/ezomic.valheim.yoke.cfg
server On a server, the host's value applies to everyone while they are connected; your own file is left alone and counts again when you leave. yours Keys and personal settings stay as you set them, on any server.
Diagnostics 2
| Setting | What it does | Default | Whose |
|---|---|---|---|
| WriteItemList | Write ezomic.valheim.yoke.items.txt beside this file: every item in the game, what Yoke did to it, and which rule left it alone when it did nothing. On by default because the prefab names ExcludeItems takes are not guessable, and because it answers 'why did this item not change' without anyone having to read a log. | true | server |
| Verbose | Log every item whose stack size or weight was changed. The item list above is usually the better answer; this is for watching a single pass happen. | false | server |
Progression 7
| Setting | What it does | Default | Whose |
|---|---|---|---|
| ScaleWithProgression | Each boss raises one group of stacks instead of everything being multiplied from the first minute. Meadows scarcity is the game teaching you to plan; your ninth trip to the same copper deposit is not teaching you anything, and a flat multiplier cannot tell those two apart. Off falls back to StackMultiplier for everything. | true | server |
| ProgressionBase | The multiplier for a group no boss has unlocked yet. 1 is vanilla, which is the point: the early game is supposed to be tight. | 1 | server |
| ProgressionTiers | boss:biome:multiplier, comma separated. Kill a biome's boss and the things that biome gives you stack better. The highest earned entry naming a biome wins, so entries never compound; one boss may name several biomes. Bonemass carries the Ocean as well as the Swamp, because no boss lives in the water and without a row naming it every fish, and chitin, and bait would sit at vanilla for the whole game. Bonemass rather than an earlier one because the longship is the boat that makes fishing worth hauling. Biomes: meadows, blackforest, ocean, swamp, mountain, plains, mistlands, ashlands, deepnorth, and all. Which biome an item belongs to is worked out from the game's own tables, not a list here: the vegetation table places a copper deposit in the Black Forest and the deposit says it drops copper ore, so copper ore is a Black Forest item. Creatures come through the spawn table and their drops, and bars and cooked food inherit from what they are made of. Items no table reaches stay at vanilla - see BiomeOverrides. An item found in several biomes belongs to the earliest, because that is where you first had to carry it home. Any global key works, not only boss keys, so a modded key can be named. | "defeated_eikthyr:meadows:2, defeated_gdking:blackforest:2, " + "defeated_bonemass:swamp:2, defeated_bonemass:ocean:2, " + "defeated_dragon:mountain:2, " + "defeated_goblinking:plains:2, defeated_queen:mistlands:2, " + "defeated_fader:ashlands:2" | server |
| ProgressionOrder | The order bosses come in, which is what makes ProgressionStep mean 'later'. A key not named here still unlocks its own group; it just never counts as later than anything. Does nothing while ProgressionStep is 0, which is the default. | "defeated_eikthyr, defeated_gdking, defeated_bonemass, defeated_dragon, " + "defeated_goblinking, defeated_queen, defeated_fader" | server |
| ProgressionStep | How much every boss after the one that unlocked a group raises it again, compounding. 0.1 would make building 2x at Eikthyr, 2.2x once The Elder is down, 2.42x after Bonemass, 3.54x with all seven dead. Off, because ten extra wood in a slot is not a reward anyone can feel, and because it produces stack sizes like 133 that read as a bug next to vanilla's round numbers. It also drifts past the flat 2x this mod argues is the honest amount. Progression is meant to finish at Bonemass: by then you have portals, a cart and a longship, which is the game solving hauling by itself. | 0 | server |
| BiomeOverrides | - | // Roots. Everything made from these is placed by the recipe pass | server |
| DeferToUtangard | When Utangard is installed, ask it whether the group has earned a boss rather than reading the world key. Utangard opens a biome only when every member of the group was at that boss's death, so the two answers differ whenever somebody was offline for a kill - and without this, stacks would arrive for a biome Utangard still has fenced off. No effect when Utangard is not installed. | true | server |
Stacks 6
| Setting | What it does | Default | Whose |
|---|---|---|---|
| StackMultiplier | Multiplies the vanilla stack size of anything that already stacks. Always applied to the original value, so raising and lowering it is safe. | 2 | server |
| StackCap | Ceiling on stack GROWTH, whatever the multiplier says. An item whose vanilla stack is already above it keeps its vanilla stack - coins are 999 out of the box and this cap must not cut them. | 200 | server |
| WeightMultiplier | Multiplies item weight. Left at 1 by default: carry weight is the main thing standing between you and hauling a mountain home in one trip, and bigger stacks already ease the inventory-slot half of that problem. | 1 | server |
| IncludeNonTeleportable | Give ore and metal bars their bigger stacks straight away, instead of waiting for the biome they come from. Off by default because hauling metal is a deliberate part of the pacing rather than an oversight. This is only about STACK SIZE. Nothing here changes what may go through a portal - the game's own no-portal flag is simply the cleanest way to find the metals, and is never written to. Left off, metals are not held forever: each stacks once the boss of ITS OWN biome falls, the same rule every other item follows. Copper and tin at the Elder, iron at Bonemass, silver at Moder, black metal at Yagluth. This switch is for wanting all of them sooner than that. | false | server |
| IncludeTrophies | Also affect trophies. Harmless - they are decoration and turn-ins. | true | server |
| ExcludeItems | Comma-separated item prefab names to leave completely alone. | (empty) | server |
Discussion
Nothing said yet.
Sign in or make an account to join in.