Valheim
Install with App

Details

Latest version
1.2.1
Last Updated
First Uploaded
Downloads
1.6K
Likes
2
Size
342KB
Dependants

Categories

ADDatHost Valheim hosting
€1

πŸ›‘οΈ ODINBET – FORGE OF POTENTIAL

ODINBET Banner

Gamble on your gear. Or lose it.
πŸ’¬ Join the Discord


What this mod does

Forge of Potential turns the Refinement Forge into a real gambling table. In vanilla Valheim, refining is a button that sometimes works, and you control almost none of it. With this mod, you set every number: the odds, what happens when you lose, what it costs, how long it takes, how far it can go, and what the whole server gets to hear about it.

Ten systems, each one switchable on its own:

System What it gives you
βš”οΈ The gamble Success chance as a percentage, plus separate control over what a failure does: drop levels, destroy the item, or hand it back at level 1.
πŸ“œ Recipes All 16 Idols (Protection and Battle, tier 0 through 7) get craft recipes, each one requiring the boss trophy for that biome. Cost scales with item level.
πŸ“’ Global Notifications Every refinement becomes a line in every player's chat. Separate text for success, failure and destruction.
πŸ—οΈ Forge area Optional exemption that lets you build inside the protected zone around the Refinement Forge.
β›ˆοΈ Lightning storm The show of Thunder Night: on a Thunder Night, lightning and other sky effects fill the sky around the Refinement Forge. Has its own switch, EnableStorm.
🚫 Forge disable One switch that closes the Refinement Forge for everyone β€” no refining, no repairing. The forge is on by default; set EnableRefinementForge = false to close it.
πŸ”’ Version lock On a server, players with a different mod version than the server are disconnected, so nobody plays by different rules. On by default, server only.
β›” Item blacklist A comma-separated list of items that can never be refined at the Forge, no matter what. Empty by default.
πŸ† Hall of Fame Eight statues around the Refinement Forge, each guarding one server-wide ranking (highest level, most refinements, longest streaks, best item ever made...) with a click-to-open panel. Tracked by Steam ID, translated in all 15 languages. Rankings can be switched off without ever losing the data behind them.
⚑ Thunder Night Some nights are Thunder Nights. On one, a refinement that has already succeeded may also earn an Elemental Infusion: a fire, frost, lightning, poison or spirit affinity that stays with the item and adds a small bonus (weapon damage, shield Block Power, armour). It never changes the refinement odds or a failure. On by default; EnableInfusions = false turns the Infusions off, EnableStorm = false the lightning show.

πŸ’‘ Out of the box, nothing fails. UpgradeSuccessChance defaults to 100, so refinements always succeed until you lower it. See the ready-made presets near the end for setups that actually gamble.

Multiplayer: with the mod installed on a dedicated server, the server enforces its config values on every client that connects (in memory β€” nobody's local .cfg is overwritten on disk). The server also makes sure every player who has the mod runs the same version (see Version lock). Without the mod on the server, every player just uses their own .cfg.


⚠️ Read this before installing

  • A large part of the code was reviewed with AI assistance, including validating every patch target against the metadata and IL of the game's assembly_valheim.dll. That caught real bugs, but it is not a substitute for real testing by real players.
  • In other words: there may be bugs. If you hit one, please report it.
  • πŸ› Report bugs on Discord: https://discord.gg/aMkN89Cuas
  • When reporting, it helps a lot to include your .cfg, the BepInEx LogOutput.log, and what you expected to happen. If you can, turn on VerboseLogging = true (the Debug section) before reproducing it β€” it writes exactly what the mod did on every refinement.

Installation

With a mod manager (recommended): install through Thunderstore Mod Manager, r2modman or Gale. BepInEx comes along as a dependency.

Manually:

  1. Install BepInExPack Valheim.
  2. Copy OdinBet_ForgeOfPotential.dll and the Translations folder into BepInEx/plugins/ (side by side β€” the Translations folder is what drives the per-player message language, see below).
  3. Run the game once. BepInEx/config/OdinBet.ForgeOfPotential.cfg is generated with every option commented.
  4. Edit it and restart.

Dedicated server: same DLL, same BepInEx/plugins/ folder. Installing on both sides is recommended β€” that way the server enforces the config and nobody plays with different numbers.


How the game resolves a refinement (and where the mod steps in)

Worth understanding, because the settings make far more sense afterwards.

target = item's current level + 1
roll   = random number between 0 and 1

if (idol's upgrade chance >= roll)        -> SUCCESS: item comes back at the target level
else if (idol's break chance >= 1 - roll) -> BROKE:   item is gone, some ingredients come back
else                                       -> FAILED:  item comes back one level LOWER

Note this: losing a level is already what a normal failure does in Valheim. "Destroying the item" is a separate, rarer branch. The mod does not rewrite that logic β€” it writes your configured numbers into the right fields before the craft and restores them afterwards. That is the safest possible approach: no game code is rewritten.


πŸ“– Every setting

File: BepInEx/config/OdinBet.ForgeOfPotential.cfg

Everything is server-synced except VerboseLogging and the two server-only Multiplayer options.


πŸ”Œ Feature Toggles section

Master switches. Turn a whole system off here if you only want the others.

Setting Default What it does
EnableRefinementForge true Turns the Refinement Forge on or off as a whole. With false, nobody can open it, refine gear, or repair anything there, and the craft buttons are greyed out. See 🚫 Turning the forge off, further down.
EnableHallOfFame true Turns the eight Hall of Fame statues on or off. With false, they stop responding β€” no hover text, no panel. The database behind the rankings keeps recording every refinement regardless; nothing is ever lost while this is false. See πŸ† Hall of Fame, further down.
EnableCustomRecipes true Adds the craft recipes for all 16 Idols. With false, the mod touches no recipes at all β€” use this if you only want the gambling, or only the announcements.
EnableUpgradeChanceAndCostTweaks true Master switch for the entire Upgrade Settings section (chance, failure, cost, cap). With false, the mod touches none of it and the game's own prefab values are used.
EnableCraftDurationTweaks true With false, UpgradeBaseDuration and UpgradeDurationIncreasePerLevel are ignored and the game's own duration is used.

🎲 Upgrade Settings section β€” the gamble

This whole section only applies while EnableUpgradeChanceAndCostTweaks = true.

The odds

Setting Default Range What it does
UpgradeSuccessChance 100 0–100 or -1 Chance, in percent, that a refinement succeeds. 100 = never fails. 0 = always fails. 65 = succeeds roughly 65 out of 100 attempts. -1 = leave the idol's own chance untouched.
FailureBreaksItemChance 0 0–100 or -1 When an attempt fails, what percentage of those failures destroys the item instead of only lowering its level. 0 = never destroys. 100 = every failure destroys. -1 = use the game's own value.

⚠️ FailureBreaksItemChance is a share of the failures, not of all attempts. With UpgradeSuccessChance = 80 and FailureBreaksItemChance = 50, the real outcome is: 80% success, 10% destroyed, 10% level lost.

What a failure does

Setting Default Range What it does
LevelsLostOnFailure 1 0–20 How many levels the item drops on a failure that does not destroy it. 1 = vanilla (level 5 becomes level 4). 0 = the item keeps its level and the attempt only costs the ingredients. 2 or more = a harsher penalty.
MinimumLevelOnFailure 1 1–20 Floor the item can never drop below through failure. Leave this at 1. Without this guard, the game hands back a level 0 item when a level 1 item fails β€” a bug in Valheim itself.
FailureAtMinimumLevelBreaksItem false β€” What to do when a failure would take the item below the floor, i.e. it has no levels left to lose (with LevelsLostOnFailure = 1 that is an item already at the floor; with 2 or more it also covers items a little above it). false = it survives at the lowest level it is allowed to have and the attempt only costs the ingredients. true = the failure is promoted to a break, and then BreakReturnsItemAtLevel1 / BreakReturnIngredientsPercent decide what the player gets. Ignored while LevelsLostOnFailure = 0.

What happens when an item is destroyed

Setting Default Range What it does
BreakReturnsItemAtLevel1 false β€” false = vanilla: the item is destroyed and part of the ingredients is refunded. true = the item is not destroyed; the player gets the same item back at level 1 and no materials.
BreakReturnIngredientsPercent -1 0–100 or -1 How much of the recipe's recoverable ingredients comes back when the item IS destroyed. 0 = nothing, 100 = everything. -1 = use the game's own value. Only matters if something actually breaks.

πŸ’‘ Why you probably want BreakReturnsItemAtLevel1 = true: refunded materials are metals and ores, and those cannot go through a portal. A player who fails a refinement far from home is stranded with a pile of metal and no way back. Handing the finished item back at level 1 keeps the loss real while letting them portal home.

πŸ“ Useful combination: FailureAtMinimumLevelBreaksItem = true + BreakReturnsItemAtLevel1 = true β†’ a level 1 item can never be lost outright; it just comes back at level 1 and the idol is gone.

Level cap

Setting Default Range What it does
MaxUpgradeLevel 0 0–100 Highest level an item can be refined to. 0 = no limit.
MaxLevelReachedMessage (text) β€” Centre-screen warning shown only to the player who tried. Not broadcast. Empty = no message.

Valheim deliberately skips its own max-quality check when the station is an upgrader, so without this mod there is no ceiling at all at the Refinement Forge.

⚠️ Honest caveat: the craft button in the UI stays enabled. The block happens on the click β€” nothing is consumed, but the button is not greyed out. Greying it out would mean patching the game's crafting UI, which breaks far more easily on a game update.

MaxLevelReachedMessage placeholders: {ItemName}, {Level} (the item's current level), {MaxLevel}.

Ingredient cost scaling

The idol cost can grow as the item gets higher.

Setting Default Range What it does
CostStart 1 0–1000 Base idol cost per refinement. 0 = free. (Game default: 1)
CostIncreasePerInterval 1 0–1000 How much the cost goes up each time the interval is reached.
CostIncreaseInterval 2 0–100 Number of levels between each cost increase. 0 disables scaling.
CostScalingLevelStart 6 1–100 Level at which scaling starts. (A lower value in an older config is corrected to 1.)

The cost can never go below 0, whatever is in the config.

Example with the defaults (starts at 6, +1 every 2 levels): levels 1–5 cost 1 Β· levels 6–7 cost 2 Β· levels 8–9 cost 3 Β· and so on.

Craft duration

Setting Default Range What it does
UpgradeBaseDuration 2 0–600 Base refinement duration, in seconds. (Game default: 8)
UpgradeDurationIncreasePerLevel 1 0–600 Extra seconds per item level. (Game default: 1)

πŸ”¨ Crafting section

Setting Default What it does
GlobalStation $piece_forge Station required to craft all the Idols. Accepts the station's m_name (e.g. $piece_workbench) or its prefab name. Empty = craftable by hand.
BlacklistedItems (empty) Comma-separated list of item PrefabNames (same format as the recipes below) that can never be refined at the Refinement Forge β€” no matter the level, the chance settings, or anything else. Checked before every other rule. Empty = nothing blacklisted.

🚫 How the blacklist works: it is checked first, before MaxUpgradeLevel or any other setting gets a chance to allow the attempt. If an item's prefab name is on the list, the craft is blocked outright and nothing is consumed. The player sees ItemBlacklistedMessage (under Local Messages) in the middle of their screen. Example:

BlacklistedItems = SwordBronze,ArmorIronChest

πŸ“œ Recipes section β€” the 16 Idols

The 16 Idols (Upgrader0Armor … Upgrader7Weapon) already exist in Valheim 1.0. This mod only adds craft recipes for them.

Format for each recipe: PrefabName:Amount, comma-separated.

Tier Idol Default recipe Boss / Biome
0 Wooden Protection / Battle Idol FineWood:20, Tin:10, GreydwarfEye:10, TrophyEikthyr:1 Eikthyr β€” Meadows
1 Bronze Protection / Battle Idol Bronze:10, SurtlingCore:1, TrophyTheElder:1 The Elder β€” Black Forest
2 Iron Protection / Battle Idol Iron:10, ElderBark:5, TrophyBonemass:1 Bonemass β€” Swamp
3 Silver Protection / Battle Idol Silver:10, FreezeGland:5, Obsidian:5, TrophyDragonQueen:1 Moder β€” Mountain
4 Black Metal Protection / Battle Idol BlackMetal:10, Needle:2, Tar:5, TrophyGoblinKing:1 Yagluth β€” Plains
5 Black Marble Protection / Battle Idol BlackMarble:20, BugMeat:10, Carapace:10, TrophySeekerQueen:1 The Queen β€” Mistlands
6 Flametal Protection / Battle Idol FlametalNew:10, CharredBone:15, TrophyFader:1 Fader β€” Ashlands
7 Bloodgold Protection / Battle Idol Gold:10, Coins:40, FrozenKingDrop:1 Kall β€” Deep North

That is 16 entries in the .cfg, one per idol: Wooden Protection Idol, Wooden Battle Idol, Bronze Protection Idol, and so on through Bloodgold Battle Idol.

🎯 Every tier requires the boss trophy. That is on purpose: refining gear of a given tier should mean you beat the boss of that tier.

⚠️ About tier 7: Valheim 1.0 ships no head trophy for the Deep North boss (Kall). What he drops reliably is FrozenKingDrop (Sacrificial Blood), and that is what went into the recipe. If a future update adds a TrophyFrozenKing, just swap it in the .cfg.

πŸ’‘ Two practical notes:

  • Boss trophies also unlock powers at the Sacrificial Stones. Spending one on an idol consumes it β€” but bosses can be summoned again and trophies stack to 20.
  • If a prefab name does not exist in your build, the mod logs a warning and builds the recipe without that ingredient instead of cancelling the whole recipe. Worth checking the BepInEx log the first time you run it.

πŸ—οΈ Refinement Forge Area section

Setting Default Range What it does
AllowBuildingNearRefinementForge false β€” Lifts the no-build restriction around the Refinement Forge β€” the one that answers "a mystical force prevents building".
RefinementForgeBuildRadius 32 1–256 How far the exemption reaches, in metres, from an upgrader crafting station.

How the exemption works, and why it is safe: it is not based on the location's name. The mod checks whether a crafting station flagged as an upgrader exists within the radius of the spot being built on. That is exactly the Refinement Forge and never a boss altar. Altars, crypts and every other protected location keep their protection.

⚠️ Two honest caveats:

  • This also allows terrain modification in that area (the game uses the same check for both).
  • If the Refinement Forge can be built by players, a large radius turns into a portable "build anywhere" bubble. That is why the default is 32, not 200.

🚫 Turning the forge off

Want to close the Refinement Forge β€” for an event, for a while, or for good? Set EnableRefinementForge = false (in the Feature Toggles section).

  • Nobody can open the forge, refine, or repair there. The craft buttons are greyed out, and a player who tries to use it sees a message in the middle of the screen (ForgeDisabledMessage, under Local Messages).
  • Changed in-game (for example with Configuration Manager) or received from the server, it applies right away, even for someone who already has the forge window open. If you edit the .cfg file by hand, restart the game to be safe.
  • Only the Refinement Forge is affected. Other crafting stations work as usual, and so do the lightning storm, building near the forge, and crafting the Idols.
  • On a server with the mod, the server's choice applies to everyone connected.

⚠️ Three honest caveats:

  • The lock is applied by each player's own game, so it only works on players who have the mod installed. Anyone without it can still use the forge.
  • Players running a different version of the mod are disconnected by the version lock (on by default) β€” except versions older than 1.1.0, which cannot be detected (see Version lock).
  • Hovering over the forge still shows the usual "use" hint. The message appears when the player presses the key.

⚑ Thunder Night and Elemental Infusions

An optional reward layer on top of the Refinement Forge. It never changes the refinement itself: the success chance, the cost, failures, levels lost, destruction, resets, the blacklist and the messages all work exactly as you configured them. A Thunder Night only looks at a refinement that has already succeeded and, sometimes, adds an Infusion to the item.

Thunder over the Refinement Forge
Thunder over the Refinement Forge. The lightning storm is the show of a Thunder Night.

⚠️ On by default. A server that updates to this version starts having Thunder Nights with Infusions on its own. Set EnableInfusions = false (Thunder Night section) to opt out of the Infusions. A Thunder Night has two parts, each with its own switch β€” the Infusions (EnableInfusions) and the lightning storm (EnableStorm) β€” and with both off, Thunder Nights do nothing at all.

How it works

  1. Every night is its own draw. When night falls there is a ThunderNightChance (default 20%) that it is a Thunder Night. Each night is independent β€” 20% does not mean "one night in five". The answer is the same for everybody in the world, is not stored anywhere, and does not change when the server restarts; a player who joins in the middle of a Thunder Night sees the same night as everyone else. Players in the world get a message when one begins (ThunderNightMessage); EnableThunderNightMessage = false hides it.
  2. Refine as usual. The forge decides success or failure with your normal settings β€” vanilla odds or any configuration of this mod.
  3. A failure gets nothing. No Infusion, and the failure is handled exactly as before (levels lost, destroyed, back at level 1…). A Thunder Night can never save an item, undo a level loss or change a failure.
  4. A success on a Thunder Night gets a second roll. ThunderNightInfusionChance (default 30%) that the item receives an Infusion. This is a separate roll made after the success; it neither raises nor lowers the chance to succeed.

There is no other hidden chance, luck bonus or pity system.

What an Infusion is

An item can carry one Infusion: an element (Fire, Frost, Lightning, Poison or Spirit) and an Infusion level.

  • First Infusion: the element is picked at random from InfusionElements, and the Infusion level is the item's new refinement level. A weapon that already deals an element of its own (Frostner, for one) keeps that element instead of drawing a new one.
  • Item already infused: the element never changes and is never joined by a second one. The Infusion level grows: new Infusion level = current Infusion level + the item's new refinement level.
Refinement Infusion before Infusion after a successful roll
level 8 β†’ 9 none (random element) level 9
level 9 β†’ 10 Lightning 9 Lightning 19
level 8 β†’ 9 Lightning 6 Lightning 15

If the roll does not succeed, the item keeps its Infusion exactly as it was (Lightning 9 stays Lightning 9 while the item goes from level 9 to 10). The Infusion level has no cap; it is a progression counter, not the bonus itself.

What an Infusion does

Item Effect
Weapon (one-handed, two-handed, bow) Adds damage of the Infusion's element, equal to a small percentage of the weapon's total damage. Vanilla damage β€” including any elemental damage the weapon already has β€” is never removed or replaced.
Shield Raises Block Power by a small percentage. It does not need parry, and it does not need the player to block for anything to "trigger". No lightning attack, no extra effect.
Armour (helmet, chest, legs, cape) Raises Armor by a small percentage. Armour never deals damage.

On shields and armour the element is only a label. Other item types (tools, torches, capes with no armour…) are never infused.

The real bonus is calculated separately from the level:

bonus = item stat Γ— InfusionMaxBonusPercent Γ— level Γ· (level + InfusionHalfLevel) Γ— Tier multiplier

It rises quickly at first and then flattens out towards InfusionMaxBonusPercent, however high the level goes β€” so an uncapped level does not become an uncapped bonus. With the defaults (12% and 30):

Infusion level 9 19 30 60 150
Bonus (% of the item's stat) 2.8% 4.7% 6.0% 8.0% 10.0%

The damage, Armor and Block Power numbers in the item's tooltip already include the bonus, and a line at the bottom (InfusionTooltip) names the element and level.

Tier. Valheim has no Tier field, so the mod works one out from the item's own base stat (total damage, Armor or Block Power, before any refinement) against three editable lists (InfusionTierThresholdsWeapon, …Armor, …Shield), and InfusionTierMultipliers lets you scale the bonus per Tier. With the default multipliers (all 1) every Tier gets the same percentage; a higher-Tier item still gets a larger absolute bonus, because the percentage applies to a larger stat. The default thresholds are estimates for vanilla gear β€” adjust them to your modpack.

Infusion glow

Every Infused item you wear β€” the weapon and shield in your hands and the armour pieces (helmet, chest, legs, cape) β€” gives off a small pulsing coloured light: orange Fire, blue Frost, violet Lightning, green Poison, gold Spirit.

A Bronze Atgeir with a Lightning Infusion, glowing violet
A Bronze Atgeir with a Lightning Infusion (level 5): the violet light comes off the weapon and the infused armour.

  • It is one plain point light without shadows, created once when the item is equipped and removed with it, plus a glow on the item itself (the emission of its material, so it shows in daylight). Light and item pulse together. No particles; the only per-frame work is the pulse. At most 24 glow lights alive at once around you; other players farther than 40 m are skipped. Armour lights are smaller and dimmer than the hand lights.
  • Other players who have the mod see the glow on you too. It is purely visual and never changes the bonus.
  • Settings in the Infusion section (right after Feature Toggles), all local (never synced from the server, so each player chooses their own look): EnableInfusionGlow (true, turns all of it off), EnableInfusionGlowArmor (true, false = only the hands glow), InfusionGlowIntensity (2.2), InfusionGlowRange (4.5 m), InfusionGlowEmission (1.5, how much the item itself lights up; 0 = light only), InfusionGlowPulseDepth (0.35, 0 = steady) and InfusionGlowPulseSpeed (2.5). Whether the item itself lights up depends on its material; the light works regardless.

It stays with the item

  • The Infusion is stored on the item itself, in the per-item data the game already saves. It survives closing the game, restarting the server, chests, dropping and picking the item up, equipping and unequipping. The mod keeps no separate save file or database for Infusions.
  • Refining again keeps it: the mod carries it over to the item the game creates. A failed refinement that only costs levels keeps it too.
  • It is lost only when the item is destroyed, or when BreakReturnsItemAtLevel1 hands back a new level-1 item.
  • Two identical items can carry different Infusions.
  • EnableInfusions = false stops new Infusions only. Existing ones keep working.
  • Without the mod, the item behaves as a normal vanilla item and the Infusion sits unused on it; with the mod back, it works again.

Settings

Thunder Night section:

Setting Default Range What it does
EnableStorm true true / false The lightning storm show over the Refinement Forge on a Thunder Night. See β›ˆοΈ Lightning storm, below. Has no effect on Infusions.
EnableInfusions true true / false New Infusions on a Thunder Night. false = Thunder Nights with the show but no new Infusions. Existing Infusions are untouched.
EnableThunderNightMessage true true / false The message players get when a Thunder Night begins (ThunderNightMessage). false = no message; the storm and the Infusions are not affected.
ThunderNightChance 20 0 – 100 Chance in percent that a given night is a Thunder Night. Independent draw every night. 0 = never, 100 = every night. Used while at least one of the two switches above is on.
ThunderNightInfusionChance 30 0 – 100 Chance in percent that a refinement that already succeeded, on a Thunder Night, also grants an Infusion. Failures never roll. 0 = never, 100 = always.
ThunderNightStartHour 18 0 – 23 In-game hour from which a Thunder Night's effects (the storm and the Infusion draw) are active.
ThunderNightEndHour 6 0 – 23 In-game hour at which they end. It can be lower than the start hour: with the defaults it runs from 18:00, across midnight, until 06:00, the whole night. Same number for both = the whole night.

With both switches false, Thunder Nights do nothing at all: no show, no Infusions, no message. A Thunder Night only exists at night (18:00 to 06:00), so hours outside the night never take effect; use, for example, 22 and 4 to limit both the show and the Infusion draw to the deep night.

Infusion section:

Setting Default Range What it does
InfusionElements Fire,Frost,Lightning,Poison,Spirit any of those five, comma separated Elements a new Infusion can draw from. A weapon that already deals an element keeps its own even if it is not listed. An empty or unreadable list means all five.
InfusionMaxBonusPercent 12 0 – 100 The most an Infusion can add, as a percentage of the item's own stat. 0 = Infusions are only a label.
InfusionHalfLevel 30 1 – 1000 The Infusion level at which the bonus reaches half of its maximum. Lower = the bonus arrives sooner.
InfusionTierMultipliers 1,1,1,1,1,1 six numbers β‰₯ 0 Multiplier on the bonus for Tier 1 to Tier 6. Fewer than six numbers: the last is reused.
InfusionTierThresholdsWeapon 25,45,65,85,105 five ascending numbers Base total damage at which a weapon moves up a Tier.
InfusionTierThresholdsArmor 3,7,11,15,19 five ascending numbers Base Armor at which an armour piece moves up a Tier.
InfusionTierThresholdsShield 20,35,50,70,90 five ascending numbers Base Block Power at which a shield moves up a Tier.

The six texts (ThunderNightMessage, LocalInfusionMessage, LocalInfusionStrengthenedMessage, InfusionTooltip, InfusionMessage, InfusionStrengthenedMessage) are listed under Local Messages and Global Notifications below. Every setting here takes effect immediately and is enforced by the server on every player who has the mod.

Known limitations

  • The Infusion is decided on the player's own game, like the rest of the refinement, and written on the item there. The server enforces the numbers (chances, bonus formula) but cannot verify an item, so a player running a modified game could give themselves an Infusion β€” exactly as they could already edit any item. This is how Valheim is built.
  • Only players with the mod get the bonus. It is calculated by the mod on each player's own game: weapon damage by the attacker's game, Armor and Block Power by the defender's.
  • The default Tier thresholds are estimates for vanilla items. Check a few of your items and adjust them.
  • Other mods that also change the damage, Armor or Block Power the game reports for an item can stack with or override an Infusion. The mod only touches its own three OdinBet_* entries in the item's data and no one else's.
  • The night is judged when the refinement finishes, not when it starts.
  • Nothing to migrate: items refined before this version simply have no Infusion.
  • The Lightning storm is the show of Thunder Night and is limited by the same night and hours, but it has its own switch: you can keep either, both or none.

πŸ† Hall of Fame

Turns the eight standing statues around the Refinement Forge into guardians of eight server-wide rankings. Look at one and, if the feature is on, [E] Consult the Hall of Fame appears β€” press it to open that ranking's panel.

A Hall of Fame statue and its ranking panel
One of the eight statues around the Refinement Forge, and the panel it opens.

# Statue Ranking Tracks
1 Standing alone The Forge Master Highest refinement levels reached, one entry per item type β€” the same player can appear more than once
2 Paired with #3 The Favorite of the Gods Most successful refinements
3 Paired with #2 The Unlucky One Most failed refinements
4 Standing alone The Relic of the Forge The item with the strongest Infusion ever gained here, and who made it
5 Paired with #6 The Unstoppable Longest streak of successes in a row
6 Paired with #5 The Cursed Longest streak of failures in a row
7 Paired with #8 The Tireless Smith Most refinements in total (successes and failures together)
8 Paired with #7 The Destroyer Most items destroyed while refining

The panel: the ranking's name, an italic tag line, a boxed description of what it measures, and always ten rows (unclaimed ones show as β€”). Click a player's name to see their Steam profile link β€” it's copied to the clipboard right away, and a separate "Open profile" button opens it in the browser (clicking a name never opens anything by itself). One OK button closes the panel; so do Esc, pressing E again, walking away from the statue, or EnableHallOfFame being switched to false while it's open.

The Forge Master and The Relic of the Forge share the same underlying records β€” one per player and item type, the best level that combination ever reached β€” but rank them differently, so they no longer show near-identical lists:

  • The Forge Master lists every record, highest item level first. This is the ranking of pure refinement skill: it can (and usually does) show the same player more than once, once per item type they refined far.
  • The Relic of the Forge only lists records that carry an Infusion, ranked by the strongest Infusion first β€” not by item level. It is empty until someone's item is infused on a Thunder Night, and stays a normal, unclaimed β€” row until then, the same as any other ranking with no entries yet.

Both rankings show a line ending with the Infusion the item carried when its record was set, for example Iron Sword - level 20 (Lightning Infusion 45). Only an Infusion this mod gave the item is shown: a Frostner that was refined but never infused stays a plain Frostner - level 13, however much frost damage it has from the game itself, and simply never appears in The Relic of the Forge. If the item later reaches a higher level, or its Infusion grows, the record is replaced, so an older, weaker version never stays in the list. "The same item" means the same item type of the same player (the game gives items no unique id): two different Iron Swords of one player are one record, the best of them. The element name comes from the game's own text, so it appears in each player's language. Records made before 1.2.0 simply have no Infusion, so they can only ever show up in The Forge Master. Players updating from 1.1.0 keep every record they already had β€” nothing is migrated or reset, only how the two panels sort and filter it.

Tracked by Steam ID, not by character. The same person keeps the same record across characters, and across worlds hosted on the same server. A player on a platform without a Steam ID is still tracked (so they still show up and still get credit), just without a profile link.

The database is never the thing that gets switched off. EnableHallOfFame (Feature Toggles section, on by default) only controls the statues: with false they go silent β€” no hover text, no panel. Every refinement keeps being recorded underneath regardless, so switching the Hall off for a while (an event, a break from the feature) never loses data; set it back to true and the rankings are complete again immediately.

πŸ”’ Security detail, same principle as the rest of this mod's networking: a client only ever asks the server for the ten rows of the ranking currently open, over the same authenticated per-connection channel the server config uses β€” never a broadcast. The server checks the request before answering, and refuses outright while the feature is off, so a modified client cannot get rankings that way either. Every name and item that reaches the panel is cleaned first (no formatting tags, capped length). On a single-player game, or the game hosting the world, there is no network round-trip: the database is read directly.

Fully translated, the same way every other message in this mod is: the panel's text lives in the Translations/*.json files (not the .cfg β€” around forty strings for wording alone would have meant that many new synced settings) and shows up in each player's own Valheim language automatically.

⚠️ Two honest caveats:

  • The panel is built for a mouse. With a gamepad, Esc / B still closes it, but a row's name and the profile-link button cannot be selected.
  • Which statue guards which ranking is fixed β€” matched to the ring around the Forge itself, not to any particular world, so it holds on every save, but it is not currently configurable from the .cfg.

β›ˆοΈ Lightning storm

The show of a Thunder Night. While one is under way, the sky above the Refinement Forge comes alive: lightning strikes again and again, joined by a mix of other effects in the air, all within about 70 metres of the forge.

The Lightning storm over the Refinement Forge at night
The Lightning storm show over the Refinement Forge on a Thunder Night.

Thor crossing the night sky over the Refinement Forge
Thor flies by over the Refinement Forge during the show.

  • Purely visual. Everything happens high above the ground, so buildings, players and creatures around the forge are never damaged.
  • Nothing to download. It only uses effects that already exist in Valheim.
  • Only on a Thunder Night. It plays when the night has been drawn as a Thunder Night (ThunderNightChance) and the clock is inside ThunderNightStartHour – ThunderNightEndHour (the whole night by default).
  • Its own switch. EnableStorm (Thunder Night section) turns only the show off; Infusions keep working. Applies right away when changed in-game or by the server; after editing the .cfg by hand, restart the game.
  • Starts when you get close. The show plays while you are within about 200 metres of the Refinement Forge.
  • Independent of the forge switch. It keeps running whether or not the forge is disabled.

⚠️ One caveat: each player's own game draws the show, so only players who have the mod installed see it. On a server with the mod, the server's values apply to everyone connected.

⚠️ Flashing lights: the show has bright, rapid flashes. If you or your players are sensitive to flashing light, set EnableStorm = false β€” and remember that a server's setting applies to everyone connected, who can't switch it off individually.

Coming from 1.1.0? The old Forge Storm section (Enabled, StartHour, EndHour) no longer exists. If it was Enabled = false (the default), the update keeps EnableStorm off for you too. To get back the old every-night behaviour between 22:00 and 04:00, see the last presets below.


πŸ”’ Multiplayer section β€” version lock

Server and players must run the same version of the mod, or they would play by different rules. On a server that has the mod, the version lock makes sure of it. Both settings only matter on the server, live in the server's own .cfg, and are not synced.

Setting Default What it does
KickDifferentModVersion true A player who has the mod but a different version than the server is disconnected a moment after joining.
RequireModToJoin true Also disconnects anyone who does not answer the version check within 30 seconds. Closes the last gap (see below), but it also keeps out players who do not have the mod at all β€” on by default, because a player without the mod would play with vanilla refinement odds/costs while everyone else uses this mod's settings. Turn it off only if you're fine with that.

How it works: when a player with the mod joins, their game tells the server which mod version it runs. The server compares it with its own; if they differ, the player is disconnected and the reason (the player and both versions) is written to the server log.

⚠️ Honest limits:

  • A disconnected player sees the game's normal disconnect screen, with no text about the mod. Tell your players: disconnected right after joining = the mod version differs from the server's.
  • Versions older than 1.1.0 cannot answer the check, so the server cannot tell them apart from players who have no mod. RequireModToJoin keeps them out β€” and everyone without the mod too. It's on by default for that reason; turn it off only if you're fine with some players playing by different rules.
  • Without the mod on the server, nothing is checked.

πŸ’¬ Local Messages section β€” centre-screen text

These are the messages only the player involved sees, in the middle of the screen β€” the player who refined, or the player who tried to use a disabled forge.

Setting Default What it does
ReplaceGameUpgradeMessages true Swallows the game's own text and shows one from the mod instead. false = leave the game's text exactly as it is.
LocalSuccessMessage (text) Success.
LocalFailedMessage (text) Failed and the item lost levels.
LocalBrokenMessage (text) Failed and the item was destroyed.
LocalResetMessage (text) Failed, but the item came back at level 1.
ForgeDisabledMessage (text) Shown when someone tries to use the Refinement Forge while EnableRefinementForge is false. Default: "The Refinement Forge is disabled." Empty = no message.
ItemBlacklistedMessage (text) Shown when someone tries to refine an item listed in BlacklistedItems (see the Crafting section). Default: "This item cannot be refined here." Empty = no message.
ThunderNightMessage (text) Shown to every player in the world when a Thunder Night begins (and to a player who joins during one). Nothing is sent over the network β€” each game works it out itself. Default: "A Thunder Night has begun! The gods have awakened the Forge of Potential." Empty = no message. Can also be switched off with EnableThunderNightMessage (Thunder Night section), which keeps the text in place.
LocalInfusionMessage (text) Shown to the player whose refinement just granted a new Infusion. Empty = no message.
LocalInfusionStrengthenedMessage (text) Shown to the player whose refinement just strengthened an Infusion the item already had. Empty = no message.
InfusionTooltip (text) The extra line at the bottom of an infused item's tooltip. Default: "Infusion: {Element} (level {InfusionLevel})". Empty = hide the line (the bonus still applies).

Placeholders: {ItemName}, {Level} (the level that was attempted), {PreviousLevel}, {ResultLevel} (the level the item actually ended up at). The two Infusion messages and the tooltip also take {Element} (in the player's own language) and {InfusionLevel}; the two Infusion messages take {Level} too (the item's new refinement level).

Why this is worth leaving on, even if you like the game's wording:

  1. Some Valheim 1.0 builds ship without a translation for those tokens and show a raw [msg_upgrader_failed] on screen instead of a sentence.
  2. The game writes its text before the mod has finished deciding the outcome. With BreakReturnsItemAtLevel1 or a LevelsLostOnFailure other than 1, the game's wording no longer matches the item the player actually received. The mod's text does.

πŸ“’ Global Notifications section β€” server-wide

Every refinement becomes a line in every player's chat.

Setting Default What it does
EnableGlobalUpgradeNotifications true Turns the whole system on or off.
NotifyOnSuccess true Announce successful refinements.
NotifyOnFailure true Announce failures where the item only lost levels.
NotifyOnBreak true Announce failures that destroyed the item (or returned it at level 1).
MinimumLevelToNotify 1 (1–100) Only announce if the attempted level is at least this. 1 announces everything; raise it to 4, say, to keep low-level refinements out of chat.
GlobalNotificationPrefix OdinBet The name shown at the start of every chat line (in yellow), through the {Prefix} placeholder. Rename it here and every line follows; empty it to show nothing.
SuccessMessage (text) Chat line on success.
FailedMessage (text) Chat line on a failure with level loss.
BrokenMessage (text) Chat line when the item is destroyed.
ResetMessage (text) Chat line when the item came back at level 1.
InfusionMessage (text) Chat line when a refinement grants a new Infusion. Follows EnableGlobalUpgradeNotifications, but is not filtered by NotifyOnSuccess / NotifyOnFailure / NotifyOnBreak / MinimumLevelToNotify.
InfusionStrengthenedMessage (text) Chat line when a refinement strengthens an Infusion the item already had. Same switches as InfusionMessage.

Placeholders: {Prefix}, {PlayerName}, {ItemName}, {Level} (attempted level), {ResultLevel} (final level). The two Infusion messages take {Prefix}, {PlayerName}, {ItemName}, {Element} and {InfusionLevel} instead.

πŸ’¬ Heads-up: each announcement also opens the chat window for every player, so nobody misses it. On a busy server, raise MinimumLevelToNotify or turn EnableGlobalUpgradeNotifications off if that gets noisy.

πŸ”’ Security detail: what travels over the network is structured data only (player name, item token, levels, outcome) β€” never a finished sentence. Every client renders the text locally. That means two good things: the item name shows up in each player's own language, and nobody can broadcast arbitrary text by editing their own .cfg.


🌍 Multi-language messages

All seventeen message templates above β€” the ten Local Messages (including ForgeDisabledMessage, ItemBlacklistedMessage and the Thunder Night / Infusion texts), the six Global Notifications, and MaxLevelReachedMessage β€” can show up in each player's own language, with zero .cfg changes required.

How it decides what to show, for each message:

  1. Customized wording always wins. If the .cfg value differs from its compiled English default β€” whether you edited it yourself, or a synced server enforced a custom value β€” that exact text is shown to everyone, in whatever language you wrote it in. This is exactly how every version before this one behaved.
  2. Otherwise, it's translated per player. If a message was never touched (still at its English default), each player sees it in whatever language their own Valheim client is currently set to β€” automatically, nothing to configure.
  3. Fallback chain if a translation is missing: the player's language β†’ English β†’ the English text already baked into the .cfg default. Never an empty message, never a crash β€” just a warning in the log.

Included out of the box (15 languages): English, German, French, Spanish, Italian, Japanese, Korean, Chinese (Simplified), Polish, Portuguese (Brazil), Portuguese (Europe), Russian, Turkish, Dutch, Swedish.

Where it lives: BepInEx/plugins/.../Translations/<LanguageName>.json β€” one flat file per language, using the same seventeen keys as the .cfg settings (SuccessMessage, FailedMessage, BrokenMessage, ResetMessage, LocalSuccessMessage, LocalFailedMessage, LocalBrokenMessage, LocalResetMessage, MaxLevelReachedMessage, ForgeDisabledMessage, ItemBlacklistedMessage, ThunderNightMessage, LocalInfusionMessage, LocalInfusionStrengthenedMessage, InfusionTooltip, InfusionMessage, InfusionStrengthenedMessage), plus the Hall_… keys of the Hall of Fame panel. File names match Valheim's own internal language names exactly (Portuguese_Brazilian, Portuguese_European, etc.) β€” that's also how the mod knows which file corresponds to a given player's game language.

The Thunder Night and Infusion texts (ThunderNightMessage, LocalInfusionMessage, LocalInfusionStrengthenedMessage, InfusionTooltip, InfusionMessage, InfusionStrengthenedMessage) are translated in all 15 languages too. The element names themselves (Fire, Frost, Lightning, Poison, Spirit) come from the game's own translations, so they always appear in each player's own language.

πŸ’‘ Adding a language yourself: drop a new <LanguageName>.json in Translations/ with the same keys, matching the exact language name Valheim itself uses internally. No recompiling, no code changes.


🐞 Debug section

Setting Default What it does
VerboseLogging false [Local β€” the one setting the server does NOT sync] Writes two lines to the BepInEx log per refinement, with the levels before and after, the outcome, and the chances that were applied.

Turn this on if a result does not match what your .cfg says. The log shows:

Refine start: 'SwordIron' level 4 -> 5, upgraderResource=True, successChance=50%, ...
Refine result: 'SwordIron' 4 -> 3 (LevelLost) [game text replaced: "..."]

If the Refine result line does not appear, the mod's hooks are not running at all β€” the problem is the patch, not the config. Those two lines are the most useful thing you can attach to a bug report on Discord.


🧩 Ready-made config presets

Hardcore (a real gamble):

UpgradeSuccessChance = 50
FailureBreaksItemChance = 25
LevelsLostOnFailure = 1
BreakReturnsItemAtLevel1 = true
FailureAtMinimumLevelBreaksItem = true

Painless (only the cost matters):

UpgradeSuccessChance = 100
FailureBreaksItemChance = 0
LevelsLostOnFailure = 0

Risky, but I never lose the item:

UpgradeSuccessChance = 70
FailureBreaksItemChance = 0
LevelsLostOnFailure = 1
MinimumLevelOnFailure = 1

Forge closed (nobody can refine or repair):

EnableRefinementForge = false

Some items are off-limits, everything else refines normally:

BlacklistedItems = SwordBronze,ArmorIronChest

Thunder Night every night, every success infused (for testing):

ThunderNightChance = 100
ThunderNightInfusionChance = 100

Thunder Nights with the show, but no Infusions:

EnableInfusions = false

Thunder Nights with Infusions, but no lightning show (existing Infusions keep working either way):

EnableStorm = false

No Thunder Nights at all (existing Infusions keep working):

EnableStorm = false
EnableInfusions = false

Thunder Nights only from 22:00 to 04:00:

ThunderNightStartHour = 22
ThunderNightEndHour = 4

The 1.1.0 storm back: every night, 22:00 to 04:00 (this also makes every night a Thunder Night for Infusions, so add EnableInfusions = false if you only want the show):

ThunderNightChance = 100
ThunderNightStartHour = 22
ThunderNightEndHour = 4

Just the Idol recipes, nothing else touched:

EnableUpgradeChanceAndCostTweaks = false
EnableCraftDurationTweaks = false
EnableGlobalUpgradeNotifications = false
EnableCustomRecipes = true

Compatibility and known limitations

  • Valheim 1.0 with BepInEx 5.
  • Client and server need the same mod version. On a server with the mod, the version lock (see Version lock) disconnects players who have a different version. Where it cannot act β€” the lock switched off, or a version older than 1.1.0 that cannot answer β€” a mismatched player is not disconnected: their game ignores the server's sync packet (with a log warning) and uses its own .cfg.
  • MaxUpgradeLevel does not grey out the craft button; it blocks on the click.
  • EnableRefinementForge = false only stops players who have the mod installed, and the forge's "use" hint still shows on hover β€” the message appears on the key press.
  • The whole refinement is resolved on the client β€” that is how Valheim is built. Config sync makes the server enforce its values in memory, which covers someone editing their .cfg, but not someone running a modified DLL.
  • Infusions (see ⚑ Thunder Night and Elemental Infusions) are decided on the player's own game and only give their bonus to players who have the mod.
  • Cost scaling affects any recipe requirement flagged as an upgrader resource. In practice, only refinement recipes carry that flag.
  • Without the mod on the server, none of this changes: every client just uses its own .cfg.

Inspiration

Inspired by ReforgedPotential by akuichi.

This mod adds a global announcement system with multi-language support, full percentage control over outcomes, a level cap, on-screen message replacement, forge-area build exemption, a lightning storm and Elemental Infusions on Thunder Nights, a switch to shut the forge down completely, and its own server-side configuration synchronization.


Found a bug? Got an idea? Want to show off a refinement that went horribly wrong?
πŸ’¬ https://discord.gg/aMkN89Cuas

DatHost β€” Valheim server hosting, first month for one euro
DatHost β€” Valheim server hosting, first month for one euro
DatHost β€” Valheim server hosting, first month for one euro
DatHost β€” Valheim server hosting, first month for one euro
DatHost β€” Valheim server hosting, first month for one euro