You are viewing a potentially older version of this package. View all versions.
GBV-Runemark-0.3.0 icon

Runemark

A Diablo-style loot system for Valheim. Rarities, rolled affixes, ground beams, and a Runestone for breaking down and rerolling gear.

By GBV
Date uploaded a week ago
Version 0.3.0
Download link GBV-Runemark-0.3.0.zip
Downloads 106
Dependency string GBV-Runemark-0.3.0

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
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.2350

README

Runemark

A Diablo-style loot and magic item system for Valheim.

Coloured rarities, randomly rolled affixes, pillars of light over things worth walking to, and a station where the junk you do not want becomes the gear you do. If you have played an ARPG, you already know the shape of it.

This is our own take on the idea, written from scratch for GBV rather than adapted from any existing mod. Every mechanic is built on something Valheim already does — its own damage types, its own status effects, its own item storage — which is why affixes behave like the game rather than like a layer sitting on top of it. It is shared publicly in case it suits your server too, but it is tuned for ours.

This is early, and it is going to change.

Everything here works and nothing is known to be broken, but almost none of it has been balanced against real play yet. Drop rates, what breaking gear pays out, what a throw of the dice costs, how fast a Runestone can be upgraded — those numbers are first guesses, and they will move as we actually play with it.

Expect the feel of the economy to shift between versions. Your saves and your items are safe across those changes: everything lives in the item's own data and in a config file you can edit, so tuning is a number in a file rather than a wipe. If a change in defaults does not suit your server, override it.

Feedback from people actually using it is worth more than any amount of theory, so if something feels too generous, too mean, or just dull, say so.

Named for the rune marks carved into an object to give it power, which is exactly what the mod does: it writes a rarity and a set of affixes onto an otherwise ordinary piece of equipment.

What It Does

Vanilla Valheim drop tables are almost entirely materials, so once you know a recipe the world stops handing you gear. Runemark does four things about that:

  1. Puts equipment into loot. Creatures and chests get a configurable chance to yield a piece of equipment they would never normally drop.
  2. Rolls it. Every such drop gets a rarity tier and a set of affixes.
  3. Makes it matter. Affixes change real stats, and they show up in tooltips, as a frame around the item in your inventory, and as a pillar of light on the ground.
  4. Lets you do something about a bad roll. Break gear you do not want into runes and work them back into gear you do.

The Runestone

A standing stone you build for 20 Stone and 10 Wood. You learn it the first time you pick up anything Runemark made. Press Use to open it.

Five things happen here, unlocked as the stone is raised:

Work Rank What it does
Break I Magic gear into runes of its own tier. Trophies into ochre
Fuse I Four runes of one tier into one of the next
Recarve II Replace one mark with a different one
Deepen II Reroll one mark's value, keeping the mark
Inscribe III Cut fresh marks into anything, for a flat price

Raising the stone is paid for in runes, from the panel itself — the Upgrade button under the rank, top right. There is no mining trip that gets you to rank III; you get there by using the stone you have.

Runes and Ochre

Five runes, one per tier and coloured to match: Fehu, Uruz, Ansuz, Tiwaz, Sowilo. They come from breaking magic gear apart, and four of one make one of the next.

Ochre is untiered and comes from trophies. Runes shape gear; ochre gambles on it. That split is deliberate — hunting and looting each feed a different half of the system.

Breaking pays fewer runes as rarity rises (8/6/4/3/2), which is what makes commons worth grinding: a Marked item is only a handful of Fehu, but you have hundreds of them, while a Storied one pays in runes that are each worth 256 Fehu on their own.

Inscribe

A flat 25 Ochre and the stone picks the standing, revealed on a spinning reel. It works on gear that already carries marks, so a poor result is a reason to come back rather than a dead end. The odds are the same ones the world rolls on, and they are shown before you commit.

Locks

Every row in the panel has a padlock, and locked items also say so in their normal tooltip. Nothing Runemark does will consume a locked item — including runes sitting in a chest.

Nearby Chests

The stone reaches into chests standing near it for runes and ochre, so you do not have to carry three hundred Fehu around. The reach is a slider in the panel. Chests behind someone else's ward, set to private, or open at the time are never counted or touched.

Rarity Tiers

Tier Affixes Frame
Marked 1 thin line
Runed 1-2 double line
Hallowed 2-3 chamfered corners
Jarl's 3-4 chamfered, corner studs
Storied 4-5 studs, runic ticks, outer glow

Higher tiers roll more affixes and roll harder within each affix's range.

Installing

Runemark needs BepInEx 5, and it goes on both the client and the server.

Equipment Mods

Six are recognised, and all of them are optional:

Mod What Runemark does with it
Warfare weapons across every tier
Armory the Vidar, Warrior, Fenrir, Rogue, Vigorous, Hunter, Bold and Legion sets
Wizardry Spellslinger robes and staffs, tiered by the biome in their name
SouthsilArmor around forty armour sets
WeaponAdditions the Elven, Draconic, Giant and Flametal lines
Hugo's Armory greatswords, battleaxes, fists and the Core weapons

Install any of them and their gear appears in the drop tables at the right tier. Leave them all out and nothing changes: every pool is filtered to what your install actually has before a drop is rolled, so the drop rate is the same either way and one table serves everybody.

Gear is placed by the game's own numbers, not by reading its name. Armour goes on its armour value against the vanilla ladder; weapons naming a material go on that; the rest go on damage against the same weapon class in vanilla, never across classes, because a 130-damage axe and a 130-damage sword are not the same tier. Caster robes and capes are the two exceptions, tiered by name instead, because in vanilla a Lox Cape and a Deer Hide Cape are both armour 1.

  • Client: drop Runemark.dll into <Valheim>\BepInEx\plugins\.
  • Server: drop Runemark.dll into <server>\BepInEx\plugins\.

Both sides matter, and for different reasons. The client does the rolling, the stats and the UI. The server owns the loot table and pushes it to every client on connect.

Configuration

BepInEx\config\gbv.valheim.runemark.cfg holds the switches: the master enable, creature and chest drops, verbose logging, and the display options (AffixDescriptions, RarityBorders, GroundBeam, GroundBeamLight, GroundBeamMinRarity).

BepInEx\config\gbv.valheim.runemark.loot.json holds the loot table and the rarity tiers. It is written out with sensible defaults the first time the mod runs. The server's copy is the one that counts — clients replace theirs with the server's on connect, because the roll happens on whichever client owns the dying creature and the tables have to agree.

Loot rules are keyed by prefab name, and keys may be exact (Greydwarf_Elite), a prefix wildcard (Greydwarf*) or the catch-all (*). Exact beats the longest matching wildcard, which beats the catch-all.

The stored file wins over the defaults in the build, which is right for anything you have tuned but means a pool added in a later version never reaches a server that has already run once. runemark_reload defaults rewrites it from the build and keeps the old one as a .bak.

"Greydwarf*": {
  "chance": 0.02,      // odds this source yields Runemark loot at all
  "luck": 1.0,         // bias toward higher rarities; 2.0 doubles the odds at each step up
  "countMin": 1,
  "countMax": 1,
  "items": ["AxeFlint", "ShieldWood"]
}

Star creatures get both a better chance and better luck automatically.

The rarities block holds gameplay settings: weight, minAffixes, maxAffixes and powerScale. Presentation (a tier's name, color and sound) lives in the code and is not written to the file, so updating the mod changes those without a fight. You can still override any of them by adding the key by hand, and it will be honoured.

The file carries a version. If it predates a change to the rarity defaults, the rarity block is discarded in favour of the current defaults and the file is rewritten once. Your loot rules are always kept.

The Enchanting Economy

The enchanting block holds every price, yield and rate the Runestone uses. Like the loot rules, the server's copy is the one that counts, and runemark_reload applies changes without anyone restarting. Every field is optional — write only the ones you want to change.

"enchanting": {
  "breakYields": [8, 6, 4, 3, 2],   // runes from breaking, by tier; falls as rarity rises
  "trophyOchre": 3,
  "bossTrophyOchre": 25,
  "bossTrophies": ["TrophyEikthyr", "..."],
  "fuseRatio": 4,                   // runes of one tier per rune of the next
  "ochreFromTier": 2,               // work below this tier costs runes only
  "recarveRunes": 2, "recarveOchre": 15,
  "deepenRunes": 1,  "deepenOchre": 10,
  "recarveEscalation": 1.0,         // price multiplier per repeat on the same item; 1 is flat
  "deepenEscalation": 1.0,
  "recarveChoices": 3,              // replacements offered at rank III
  "inscribeOchre": 25,              // flat price of a throw
  "upgrades": [
    { "rank": 2, "runeTier": 1, "runes": 12, "ochre": 40 },
    { "rank": 3, "runeTier": 2, "runes": 10, "ochre": 120 }
  ],
  "runeDropChance": 0.12,           // loose runes from creatures, separate from the item roll
  "runeDropMin": 1, "runeDropMax": 3,
  "runeDropLuck": 0.55              // under 1 pushes loose runes toward the common tiers
}

Two of these are worth understanding before turning them:

  • breakYields falls as rarity rises, and that is the load-bearing part of the economy. It makes common gear worth collecting while rare gear still pays far more per item. Making it rise instead turns commons into litter and removes any reason to fuse.
  • The escalations default to 1, meaning recutting the same item costs the same every time. Nothing at a Runestone can fail, so the brake is the rune supply rather than a rising price. Turn them up if your server wants rerolling to be self-limiting; the counters are recorded on every item, so raising them takes effect immediately on gear that already exists.

Values are clamped on load rather than trusted, so a hand-edited file with a fuse ratio of zero or a negative cost is corrected instead of breaking the mod.

Console Commands

Command What it does
runemark_spawn <prefab> [rarity] [affix ...] Put a magic item in your inventory. Rarity is an index or a tier name. Naming affixes forces them. Admin only.
runemark_give <material> [count] Give yourself runes or ochre. Takes a rune name, a tier name, or ochre. Admin only.
runemark_station [level|teach] Report or set the rank of the nearest Runestone, or unlock the piece in your build menu. Admin only.
runemark_inspect Dump the raw Runemark data on everything in your inventory.
runemark_items [filter] List every prefab Runemark will mark, grouped by slot, with its armour, damage and max quality. Also written to BepInEx\config\runemark_items.txt, because with a few equipment mods installed it runs to thousands of lines. What you write a loot table from.
runemark_glow Describe the weapon models in your hands and where the elemental effect attaches. For working out why a modded weapon looks wrong.
runemark_validate Check every prefab name in the loot table against the live game and report the ones that do not resolve.
runemark_affixes List every affix, its scope and its roll range.
runemark_reload [defaults] Reload the loot table from disk, and on a server push it to every connected client. defaults rewrites the stored file from this build first, keeping a .bak. Admin only.
runemark_sounds [filter] List the sound effect prefabs this build actually has.
runemark_playsound <prefab> Play a sound prefab at your feet, to audition it.

Drop Sounds

Each rarity names its own sound in the rarities block of the loot table, so the rarer tiers can land harder. The shipped defaults are guesses: sound prefab names live in the game's asset bundles rather than its assemblies, so they cannot be verified without running the game. Pick real ones with runemark_sounds to list, runemark_playsound to audition, then set "sound" on the tier and run runemark_reload. An empty string makes a tier silent.

runemark_validate is worth running once after any edit to the loot table. Item prefab names cannot be checked offline, because they live in the game's asset bundles rather than in its assemblies, so a typo is otherwise invisible until that rule quietly never fires. It checks wildcard keys too, and a wildcard matching nothing is the one worth acting on. When one matches nothing it also lists what a shorter version of the key would have matched, so correcting it does not need guesswork.

Without the equipment mods installed it will list several hundred item names it could not find. That is expected, not a fault: the tables name their gear so that one table serves every install, and a pool is filtered to what you have before anything is rolled.

Magic Item Stored Data

In ItemDrop.ItemData.m_customData, a Dictionary<string, string> the game itself owns, under a single key gbv.runemark holding a compact JSON blob.

That one field covers persistence and networking completely, because the game's own ItemData.Save / ItemData.Load pair is simultaneously the player save format, the container ZDO blob, the world-drop ZDO blob and the network wire format. ItemData.Clone deep-copies the dictionary, so splitting stacks and dropping items preserve it too.

It also means uninstalling is non-destructive. Without Runemark the game reads and rewrites the entry blindly, so items keep their data dormant and get it back if the mod returns.

Credits

Reference behaviour was verified against the game's own assemblies. Runemark reimplements ideas that RandyKnapp's EpicLoot popularised, but none of its code, data or assets.

Drop tables name gear from Therzie's Warfare, Armory and Wizardry, from SouthsilArmor, from WeaponAdditions and from Hugo's Armory, by prefab name only. Nothing is bundled and nothing is required.

CHANGELOG

Changelog

0.4.11

Changed

  • ItemDropMultiplier and RuneDropMultiplier are now settings under Loot, editable from any mod manager's config editor. They used to live only in the loot table file.
  • Config changes on a dedicated server apply straight away and reach everyone connected, with no restart.
  • runemark_droprate now writes to those settings, so the console and the settings screen always agree.
  • runemark_reload defaults resets both multipliers to 1. It used to leave them alone.

Note for servers

  • Set these on the server. A client's own values are ignored while it is connected.
  • If you set itemDropMultiplier or runeDropMultiplier in the loot table file under 0.4.10, set them again in the config. The config wins now, and the log says so on startup if the two disagree.
  • Nothing else in the loot table has moved.

0.4.10

Added

  • itemDropMultiplier and runeDropMultiplier, scaling magic item and rune drops without touching the individual creature rules. 1 is normal, 0.5 is half, 0 turns that half off.
  • runemark_droprate sets either one from the console and takes effect straight away. On its own it prints both, and what they work out to per kill.

Note for servers

  • Nothing changes on update. Both start at 1.
  • If drops feel too frequent, turn runes down first. They come off almost anything you kill and magic items are far rarer.
  • Set these on the server. A client's copy is replaced by the server's on connect.

Thanks to SaSha for asking for this.

0.4.9

Changed

  • Starred creatures no longer raise magic drop rates in a straight line. Each extra star is worth a little less than the one before, so a mod that adds stars past the game's two makes a kill better without multiplying how much falls out of it. Loose runes follow the same curve.

Note for servers

  • levelCurve in the loot table sets what a star is worth. 0 ignores stars entirely.

0.4.8

Changed

  • The Runestone window is readable now. Item names, bonus lines, prices and the explanation on every tab were all too small to read comfortably.
  • A name you are about to cut into an item is shown at full size before you commit to it.
  • The Inscribe reel calls out what it landed on in large letters.

Fixed

  • On a server, reconnecting left you rolling on your own settings instead of the server's. Only the first connection after starting the game received the server's loot table.

0.4.7

Changed

  • Recarving now costs 5 runes and 30 ochre, up from 2 and 15. The price does not rise with repeats, unlike deepening.

Note for servers

  • Prices live in the loot table, and a stored one overrides the defaults in an update. If deepening still costs 1 rune, run runemark_reload defaults once. Your old file is kept as a .bak.

0.4.6

Added

  • Runecrafting, a new skill. Working at a Runestone raises it, and it improves what Inscribe rolls. At 100 a Storied result goes from one throw in 167 to one in 50.

Changed

  • Deepening now costs 3 runes instead of 1, and gets more expensive each time you deepen the same mark.

Fixed

  • The Runestone no longer takes materials from a chest ticked Not For Crafting.
  • The Runestone can now spend from a cart or a ship's chest. It counted what was in them but could never take it.
  • Elemental weapon effects came back a moment after another mod hid them, such as when wearing a disguise.
  • The Upgrade panel would not open from the Fuse tab, or from any tab the stone was not yet ranked for.

0.4.5

Added

  • Drop sounds now ship with the mod, one per rarity. A .wav of the same name in BepInEx\config\Runemark\sounds still replaces the built-in one.

Fixed

  • Upgrading a magic item's quality at a forge wiped its bonuses, its name and its lock. This also covers reforging mods that work through the same upgrade path, such as ReforgedPotential.

0.4.4

Added

  • Breaking gear now asks twice. The first click marks the row, the second breaks it.

Fixed

  • Elemental weapon effects bunched up at your hand on some weapons instead of spreading along the weapon.
  • Crossbows lost their elemental effect as soon as a bolt was loaded.
  • Lightning on a bow or crossbow now runs along the string.
  • Elemental effects doubled after getting into a vehicle and out again.

0.4.3

Changed

  • New hand-drawn icons for the five runes and for Ochre, replacing the generated ones.

0.4.2

Added

  • Magic items lying on the ground now show a star on the map and minimap, in their rarity colour, for when the beam is behind a hill or under trees.
  • MapPins and MapPinMinRarity settings, to turn the stars off or keep them for the good stuff.

Fixed

  • Elemental weapon effects stopped when you put the weapon away. They now follow it onto your back, and other players see them there too.

0.4.1

Documentation only. No gameplay change, and nothing in the mod behaves differently from 0.4.0.

  • Rewrote the README for players instead of maintainers.
  • Rewrote this changelog into actual release notes.

0.4.0

Added

  • Name your Jarl's and Storied gear at a rank III Runestone. One name per item, and permanent.
  • Deep North tier: 82 items, 20 creature rules, and the village and memorial chests.
  • Monstrum's creatures drop loot, tiered by the biome they live in.
  • RenegadeVikings T1 to T7 drop loot, one rung per biome.
  • Predators from SeaAnimals and AirAnimals drop loot. Scenery wildlife does not.
  • Abomination, Serpent, Deer, Hare and Bonemaw Serpent drop loot. They never had rules.
  • runemark_spawns lists every creature the world spawns, its biome, and what covers it.
  • DropSoundMaxDistance, default 48m. A drop further away than this makes no sound.
  • titleMinRarity sets the lowest rarity that can be named. Above your top tier turns naming off.

Fixed

  • Drop chimes could be heard from anywhere on the map. They now fade with distance and stop at 48m.
  • Bjorn, Unbjorn and Writhan dropped Deep North loot in the Black Forest, Plains and Swamp.
  • Lava Blobs dropped Swamp loot and Ashlands Dvergr dropped Mistlands loot.
  • Deep North goblins, skeletons, dvergr and greydwarves dropped their non-Deep-North loot.
  • Ten SouthsilArmor sets above flametal armour dropped in the Ashlands instead of the Deep North.
  • Corrupted Dvergr Mages dropped nothing.
  • The Ask and Embla sets were missing their legs and hoods, and the Berserkir axe variants were missing entirely.

Changed

  • Creature coverage went from 55 of a loaded world's creatures to 98.
  • DropSoundSpatial now defaults to on, so chimes fade with distance and give a direction.
  • runemark_soundcheck reports how far away a drop can be heard.

Upgrading

A server that has run before keeps its stored loot table, so none of the new rules will reach it. Run runemark_reload defaults once. Your old file is kept as a .bak.

0.3.0

Added

  • Wizardry, SouthsilArmor, WeaponAdditions and Hugo's Armory gear in the drop tables. Just over five hundred items across seven tiers. None of the mods are required.
  • runemark_items now prints armour, damage and max quality, and writes the list to a file.
  • runemark_reload defaults rewrites a stored loot table from the build, keeping a .bak.
  • runemark_validate checks wildcard keys and suggests alternatives for ones that match nothing.

Changed

  • Rebuilt the ground beam. Brighter, taller, with a swirling helix and a pool of light at its foot.
  • Beam colours now read as their own colour instead of washing out to white.

Fixed

  • Elemental effects sat off the blade on dual-wield weapons, and lightning arced metres away.
  • Drop rates were quietly cut by up to 44% on installs without the supported mods.
  • Three chest rules matched nothing, so the Mistlands and Ashlands dropped less than intended.
  • A harmless startup error claimed the mod had failed to load.

0.2.0

Added

  • The Runestone. A buildable standing stone with three ranks, upgraded from its own panel.
  • Break magic gear into runes of its tier, and trophies into ochre.
  • Fuse four runes of one tier into one of the next.
  • Recarve replaces a mark. Deepen rerolls a mark's value and keeps the mark.
  • Inscribe cuts fresh marks for a flat price, at a standing the stone rolls.
  • Per-item padlocks. Nothing Runemark does will consume a locked item.
  • The stone spends from chests standing near it, within a range you set.
  • Therzie Warfare and Armory gear in the drop tables, and new Mistlands and Ashlands tiers.

0.1.1

Documentation only. The mod itself is unchanged from 0.1.0.

  • Rewrote the README.
  • Corrected the upgrade instruction. It is the Upgrade button under the rank, not the rank itself.

0.1.0

First release.

  • Equipment drops from creatures and chests, with a rarity and rolled affixes.
  • Five rarities, each with its own colour, frame and drop sound.
  • Affixes change real stats and show in tooltips.
  • Magic items on the ground get a pillar of light in their rarity colour.
  • Elemental affixes give weapons matching sparks while equipped.