You are viewing a potentially older version of this package. View all versions.
Igao-OdinBet_ForgeOfPotential-1.4.2 icon

OdinBet ForgeOfPotential

Gamble on your gear. Or lose it. Set the odds at the Refinement Forge, choose what a failure costs, announce every win and wreck. Plus an in-game settings panel, a Hall of Fame, Elemental Infusions on Thunder Nights and Odin's visit.

Date uploaded a week ago
Version 1.4.2
Download link Igao-OdinBet_ForgeOfPotential-1.4.2.zip
Downloads 492
Dependency string Igao-OdinBet_ForgeOfPotential-1.4.2

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
Igao-Ultimate_Server_Configuration_Manager-1.0.4 icon
Igao-Ultimate_Server_Configuration_Manager

βœ… The LAST config mod you'll ever need. Edit ANY mod in-game with F1 β€” changes hit every player instantly. Admin-only controls, auto-translated descriptions, 15 languages, one-click undo. No more .cfg problems.

Preferred version: 1.0.4

README

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

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

Version 1.4.2 15 languages Multiplayer, server synced Discord

πŸ” Click the pictures to see them bigger β€” click again to close.

ODINBET – Forge of Potential
ODINBET β€” Forge of Potential
The lightning storm over the Refinement Forge on a Thunder Night
Thunder Night β€” a lightning storm over the forge

ODINBET – Forge of Potential

The lightning storm over the Refinement Forge on a Thunder Night

Odin's visit at the Refinement Forge
Odin's visit β€” a cutscene on Thunder Nights
Elemental Infusion effects
Elemental Infusions β€” fire, frost, lightning, poison, spirit

Odin's visit at the Refinement Forge

Elemental Infusion effects

The in-game settings panel
In-game settings panel β€” every option explained, in 15 languages
Shift + E at the Refinement Forge opens the settings
Shift + E at the Refinement Forge opens it

The in-game settings panel

Shift + E at the Refinement Forge opens the settings

The Statistics page of the settings panel
Statistics β€” your numbers, your place in the Hall of Fame, your history
The Server log page of the settings panel
Server log β€” every change to the server's settings, kept for good

The Statistics page of the settings panel

The Server log page of the settings panel


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.

Fourteen 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.
πŸ“’Β Notifications Every refinement becomes a line in every player's chat, and the player who refined gets a clear message on screen. You choose what gets announced (success, failure, destruction) and from which level. Every text is translated in 15 languages.
πŸ—οΈΒ 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.
πŸ‘οΈΒ Odin's visit On a Thunder Night, a short cutscene each time you arrive at the Refinement Forge: Odin waits there with his ravens, calls the storm, and Thor's lightning strikes the forge. Local switch EnableOdinScene.
🚫 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.
βš™οΈΒ Settings panel New in 1.4.0. Every setting in one in-game panel (Shift + E at the Refinement Forge): each one explained, with live examples and alerts when two settings conflict, in 15 languages. An admin with devcommands changes the server's settings while it runs β€” saved, applied and sent to every player at once, no restart. Every player can change their own options there too. New in 1.4.2: a Statistics page for every player (their numbers, their place in every Hall of Fame ranking, their full refinement history) and a Server log page for admins (who changed which setting, when, from what to what β€” kept for good).
πŸ’ͺΒ Refinement power New in 1.4.0. Decide how much each forge level really adds: weapon damage, shield Block Power and armour, each as a percentage of what the game itself adds per level.
🧩 Items from other mods New in 1.4.0. Choose whether items added by other mods can be refined (with a list of exceptions) and whether they can be infused, plus a list of items that are never infused.
⚑ 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 bonus (weapon damage; shield Block Power and a strike-back on block; armour resistance and an elemental perk). 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). An admin can change the server's settings while it runs, from the settings panel: the new values reach every connected player at once. 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 (with the ConfigPanel folder inside it) into BepInEx/plugins/ (side by side β€” the Translations folder is what drives each player's language, see below).
  3. Run the game once. BepInEx/config/OdinBet.ForgeOfPotential.cfg is generated with every option commented.
  4. Change the settings in the game with the settings panel (Shift + E at the Refinement Forge, see βš™οΈ The settings panel) β€” no restart needed β€” or edit the .cfg 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.

Updating from 1.4.0: just update and play β€” every setting, the Hall of Fame and every Infusion stay as they are, and nothing in the .cfg changes. Update the server and every player together (the version lock keeps a 1.4.0 player out of a 1.4.2 server, see Compatibility). Copy the Translations folder again: the new pages' texts are in its ConfigPanel folder. The Statistics page and the Server log start recording from the moment the server runs 1.4.2.

Updating from 1.3.0 (or older): just update and play. Update the server and every player together (the version lock keeps a 1.3.0 player out of a 1.4.0 server). Keep your .cfg: the new 1.4.0 settings are added with values that change nothing (every multiplier at 100 %, items from other mods allowed), and a .cfg from 1.2.1 still updates itself as described in the changelog. Items keep their Infusions and the Hall of Fame keeps every record. Copy the whole Translations folder again: it has the new ConfigPanel folder.


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.


βš™οΈ The settings panel

New in 1.4.0. Every setting of the mod, in the game, in your own language.

The in-game settings panel
The settings panel: every setting with its explanation, its default and its .cfg key.

Shift + E at the Refinement Forge opens the settings
The forge's hover text shows the combination: Shift + E opens the panel, E alone the forge.

Opening it: stand at the Refinement Forge and press Shift + E (its hover text shows the combination; E alone still opens the forge as usual). Or type odinbet_config in the console (F5), anywhere in the world. Esc or Close closes it; if you have unsaved changes it asks first.

Who can change what:

The server's settings, and the Server log Your options Statistics
Single player, or the host of the world, with devcommands on see and change change see your own
A player in the dedicated server's adminlist.txt, with devcommands on see and change change see your own
Everybody else β€” including the host or an admin without devcommands hidden change see your own

Without devcommands, the panel shows only Your options (and Statistics): the odds, the costs and every other server setting stay hidden. The host or an admin gets a notice there: type devcommands in the console (F5) and open the panel again to see the full panel. The server checks every request again itself: the player must be in its admin list, every setting must be one of this mod's, and every value must have the right type and be inside its allowed range β€” a modified client gets exactly the same answer.

The pages: Overview (the main switches and a status box) Β· The bet Β· Cost and time Β· Refinement power Β· Idol recipes Β· Notifications Β· Thunder Night Β· Infusions Β· Infusion effects Β· Allowed items Β· Server Β· Server log Β· Your options Β· Statistics (the last two for everybody, see πŸ“Š Statistics and πŸ“œ Server log below). A page with unsaved changes shows their number in the list; a dot marks a page with a warning (orange) or an error (red).

Every setting shows its name and its .cfg key, what it does, its default and its allowed range, and a live example where one helps β€” computed from what you are typing, for instance:

  • The bet: "Out of 100 refinements: 80 succeed, 15 fail and lose 1 level(s), 5 destroy the item."
  • Cost and time: a small table with the idol cost and the crafting time for several item levels.
  • Refinement power: what a real item of the game gains per forge level with the value you picked.
  • Thunder Night: how often one comes, and the exact in-game hours its effects run.
  • Infusions: how the bonus grows with the Infusion level; Notifications: a preview of the chat line with your chat name.

Alerts tell you when settings get in each other's way:

  • grey No effect now: another setting makes this one irrelevant (the failure settings while the success chance is 100 %, the cost growth while the interval is 0...). It can still be changed.
  • orange Warning: allowed, but probably not what you want (Thunder Night hours that contain no night time, a chance of 0, a lowest level after a failure that is not below the level cap, an item in both the blacklist and the exceptions...).
  • red Error: blocks saving until it is fixed (a recipe with more than 4 ingredients, a number outside its range).

No item names to type: every setting that takes items β€” the blacklist, the exceptions for items from other mods, the items that are never infused, and the ingredients of the 16 idol recipes β€” has a picker: search by the item's name in your language or by its prefab name, filter by category (weapons, shields, armour, tools, materials, trophies, food, other, other mods), click to add, click again to remove. Items come with their icons; items from other mods are marked. A recipe holds up to 4 ingredients, with βˆ’ / + for the amounts (hold Shift for 10 at a time). The crafting station of the idols is picked from the game's stations, with their icons.

Saving: nothing changes while you edit. Save and apply first shows a summary of every change (old Β» new). Then:

  • the server's settings are applied at once on the server (or on your game, in single player or as the host), written to its .cfg, the idol recipes are rebuilt, and the new values are sent to every connected player β€” no restart, nobody has to reconnect;
  • the change is written to the server's log (LogOutput.log) with the admin's name and every old and new value, and (1.4.2) to the permanent Server log, which survives restarts;
  • your own options are written to your own .cfg.

Other buttons: Discard changes, Page defaults (the whole page back to its defaults, as a draft you still have to save), Default and Undo on each setting, and, for admins, Reload .cfg: after editing the .cfg by hand, the server reads it again and applies it to everyone, without a restart.

While the panel is open you cannot move or act, the inventory, the map and the chat stay closed, and the mouse wheel scrolls the panel instead of the camera. The panel's texts are in Translations/ConfigPanel/<Language>.json, 15 languages, apart from the message files.


πŸ“Š Statistics and πŸ“œ Server log

New in 1.4.2. Two more pages in the settings panel (Shift + E at the Refinement Forge). Everything they show is kept on the server and read from there, so it is the same whichever computer you play from.

πŸ“Š Statistics β€” every player

The Statistics page of the settings panel
The Statistics page: this character's numbers, your place in the Hall of Fame and your history.

  • This character: refinements, success rate, successes, failures, items destroyed (and items sent back to level 1, if the server uses that), the best success streak and the worst failure streak, the highest level reached (and its Infusion), the last refinement, and the idols used, per idol.
  • Hall of Fame β€” your account: your record and your place in each of the eight rankings, even far outside the top 10 the statues show (gold = in that top 10). All your characters together, counted exactly as the statues count them.
  • History: every refinement, newest first, one card each: the date and time (in your own time zone and date format), the item and its levels (level 5 β†’ 6), the result (success, fell to level 4, kept level 5, destroyed, back to level 1), the Infusion the item carries after a success, and the idols it used (3 Γ— Silver Battle Idol). 50 at a time: scroll down and the next ones load. Refresh reads it again; opening the panel always shows it fresh.
  • Per world and per character: another world, or another character, has its own history β€” a single-player test world never mixes with the server's. The server keeps the last 500 refinements of each character; the numbers count all of them.
  • Private: the server works out who is asking from the connection itself (the Steam ID, like the Hall of Fame, and the character's name). Nobody can read anyone else's history.
  • Recorded from 1.4.2 on (the Hall of Fame keeps counting everything, as before). The history is built from the same report the Hall of Fame already gets, so a player whose game is still on 1.4.0 is recorded too when the server runs 1.4.2 (with the version lock off). The idols used are worked out on the server with its own rules β€” the same numbers the refining game used (none on a world with the no crafting cost modifier, where the game takes none).

πŸ“œ Server log β€” admins with devcommands

The Server log page of the settings panel
The Server log page: when, who, which setting, and the value before and after.

Every change to the server's settings, newest first: when (in your local time), who (the admin's name; the file also has their Steam ID), which setting (its name in your language and its .cfg key) and the value before β†’ after. It catches:

How the setting changed What the log shows
Save and apply in the settings panel the admin's name (settings panel)
Reload .cfg after editing the file by hand the admin who pressed it (Reload .cfg)
The .cfg edited while the server was off .cfg changed while the server was off β€” noticed at the next start
Configuration Manager or another mod, while it runs changed outside the panel (a slider being dragged gives one line, once it settles)

Unlike LogOutput.log, it survives restarts, has no size limit (a change is a few hundred bytes) and cannot be erased or reset from the game. Only admins see the page, and the server checks its admin list again on every request. A player's own options (Your options) are never logged.

Both pages have a Refresh button. A Server log that is already open (and scrolled to the top) shows a change you just saved by itself. If the server does not answer, the page says so and offers Refresh: "The server did not answer" (the server runs an older version), "This server does not run OdinBet 1.4.2 or newer" or "The server is not ready to answer yet" (no world loaded yet β€” try again in a moment).

The files

All in BepInEx/config/OdinBet_ForgeOfPotential_HallOfFame/, next to the Hall of Fame database, on whichever game is the server:

File What it holds
History_<world>/<SteamID>_<character>_<code>.json One per character and world: the totals and the last 500 refinements
ServerSettingsLog.jsonl The server log: one line per change, only ever added to
ServerSettingsLog_state.json The last value seen for each setting, to notice what changed while the server was off

Every entry carries its time twice: "utc": "2026-09-26T21:50:30Z" to read by hand, and "time" (a Unix timestamp) that the panel turns into each player's own local time. A line of the log looks like this:

{"n": 12, "utc": "2026-09-26T21:50:30Z", "time": 1790459430, "by": "Ragnar", "byId": "76561198000000000", "source": "panel", "section": "Upgrade Settings", "key": "UpgradeSuccessChance", "old": "85", "new": "75"}

They are saved the same careful way as the Hall of Fame: through a temporary file, with the previous version kept as .bak. A damaged file is kept as .corrupt and the .bak is used; a file that another program is holding open (an antivirus, a backup) is left alone and tried again, with the new refinements waiting in memory until then.


πŸ“– Every setting

File: BepInEx/config/OdinBet.ForgeOfPotential.cfg

Everything is server-synced except the settings marked local (VerboseLogging, EnableInfusionEffects, EnableThunderNightMessage, EnableThor, EnableOdinScene) and the two server-only Multiplayer options.

The file only holds switches and numbers. Every text the mod shows (messages, chat lines, tooltip lines) lives in the Translations/ folder, in 15 languages β€” see 🌍 Multi-language messages.

Every setting below can also be changed in the game, with explanations and examples, in the settings panel (see βš™οΈ The settings panel).


πŸ”Œ 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. The player who tries to go past it gets a warning in the middle of the screen (only them, never broadcast).

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.

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)

πŸ’ͺ Refinement Power section

New in 1.4.0. How much each Refinement Forge level really adds to an item.

Setting Default Range What it does
RefinementStatMultiplierWeapons 100 0–500 What each forge level adds to a weapon's combat damage, in percent of what the game itself adds per level. 100 = the game's own, 200 = twice as much, 0 = forge levels add no damage.
RefinementStatMultiplierShields 100 0–500 The same for shields: their Block Power and their parry force (deflection).
RefinementStatMultiplierArmor 100 0–500 The same for the Armor of helmets, chest and leg pieces, gloves and capes.

How it works:

  • The game adds a fixed amount for every quality level of an item. Only the levels above the item's normal maximum quality β€” the ones only the Refinement Forge can give β€” are scaled. The workbench levels stay exactly as in the game.
  • Example: a sword that gains 6 damage per level in the game gains 9 per forge level at 150, and nothing at 0. After 10 forge levels: +60 in the game, +90 at 150.
  • Weapons: only combat damage (blunt, slash, pierce, the elements, spirit). Chop and pickaxe damage are not scaled, so tools do not turn into super-axes.
  • Durability never changes. The item's Tier (which decides who can reach immunity with an Infusion) is based on its base stat and does not change either.
  • An Infusion adds its percentage on top of the scaled value.
  • Nothing is stored on the items: the value is applied live, so lowering it also lowers items that were refined before. The tooltip shows the real numbers.
  • Items from other mods are scaled the same way.

πŸ”¨ 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.
AllowRefiningModdedItems true New in 1.4.0. false = items added by other mods cannot be refined at the Refinement Forge (nothing is consumed, and a message says so β€” key ModdedItemBlockedMessage), except the ones in RefinableModdedItems. The game's own items are never affected.
RefinableModdedItems (empty) New in 1.4.0. Comma-separated prefab names of items from other mods that can still be refined while AllowRefiningModdedItems is false. An item that is also in BlacklistedItems stays blocked.

🚫 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 a message in the middle of their screen (key ItemBlacklistedMessage in the Translations/ files). Example:

BlacklistedItems = SwordBronze,ArmorIronChest

🧩 How the mod tells the game's items from other mods' items: when the game builds its item list, the mod records the items that ship with the game, before any other mod adds its own. If that list could not be recorded (another mod adding items in an unusual way), every item counts as a game item, so AllowRefiningModdedItems and InfusionAllowModdedItems block nothing: the log says so once, and the settings panel's overview shows how many game items were recognised. In the settings panel you do not need to know any prefab name: the item picker lists every item with its icon and can show only the items from other mods.


πŸ“œ 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 (key ForgeDisabledMessage in the Translations/ files).
  • 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 the five (capes: from Fire, Frost and Poison), 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, and strikes back with its element when you block (see Element effects below).
Armour (helmet, chest, legs β€” and gloves, if a mod adds them) Raises Armor by a small percentage, gives a resistance to its element and a small secondary bonus. Armour never deals damage.
Cape Raises Armor, gives the same resistance, and a biome bonus instead of the secondary one. Capes only draw Fire, Frost or Poison.

Other item types (tools, torches, capes with no armour…) are never infused.

Element effects on armour, capes and shields

All of this lives in the new [Infusion Effects] config section and is synced by the server. Everything grows with the Infusion level on the same flattening curve as the main bonus (InfusionHalfLevel) and never passes its cap.

Resistance (armour and capes). Fire β†’ fire, Frost β†’ frost, Poison β†’ poison, Spirit β†’ spirit, Lightning β†’ lightning. Resistant below ArmorResistanceLevelForVeryResistant (default 5), Very Resistant from it on. Two pieces with the same element don't add up β€” the best one counts. A piece that is already weak to that type is never turned resistant by its own Infusion. Immune is off by default: set ImmuneMinInfusionLevel above 0 and a Tier 6 armour piece (base Armor 19 or more) whose Infusion level reaches it makes you immune to its element.

Good to know: in vanilla Valheim any frost resistance removes both Freezing and Cold in the Mountains and the Deep North. So a single Frost-infused piece keeps you warm there, the way wolf armour does.

Secondary bonus (helmet, chest, legs; not capes).

Element Effect Cap (default)
Fire Less heat penalty (Ashlands heat, lava heat, the boiling Ashlands ocean) 35%
Frost Wet / Frost / Freezing wear off sooner 35%
Poison Poison on you wears off sooner (fewer ticks) 20%
Lightning Less stagger build-up when hit 22%
Spirit Less damage from Undead monsters 15%

Cape biome bonus. Frost: faster in the Mountains and the Deep North. Poison: faster in the Swamp. Fire: faster in the Ashlands and less lava damage (up to FireCapeLavaDamageReductionMaxPercent, default 55%, hard limit 95% β€” lava always hurts). Speed: walking and running up to CapeBiomeSpeedBonusPercent faster (default 10%). It is pure speed: the stamina cost of running, jumping and dodging is not touched.

Shield procs. When you block, the shield hits the attacker with its element: Fire burns, Frost slows it for 2–4 seconds (3–6 on a parry), Poison poisons, Lightning staggers on the spot, Spirit burns it with spirit fire (Undead only β€” a Spirit shield also gets its Block Power bonus twice against the Undead). A monster that resists frost is not slowed, as in the base game. A parry with a shield that can parry always triggers it; any other block rolls ShieldBlockProcChance (default 25%, growing towards 50% with the level). Strength = Block Power Γ— the shield's Infusion bonus, with the same small minimums as weapons. The same element can't hit the same attacker again for 5 seconds.

Frost smoke. When a Frost Infusion takes hold on a monster β€” a hit of your Frost weapon or the strike-back of your Frost shield β€” a white, icy smoke pours off its body and sinks to the ground for as long as the chill lasts. Only the player who hit sees it, and EnableInfusionEffects = false turns it off with the rest.

Every infused armour piece, cape and shield shows a "Bonus: …" line under the Infusion line in its tooltip (translated; the InfusionSecondaryTooltip_* keys of the Translations/ files).

Infusion Effects section (synced by the server; every setting takes effect immediately):

Setting Default Range What it does
EnableArmorElementalResistance true true / false Resistance to the element on infused armour and capes.
ArmorResistanceLevelForVeryResistant 5 1 – 1000 Infusion level from which the resistance becomes Very Resistant.
ImmuneMinInfusionLevel 0 0 – 100000000 Infusion level at which a Tier 6 piece makes you Immune to its element. 0 = never.
EnableArmorSecondaryEffects true true / false The secondary bonus of helmets, chests and legs.
FireBodyBonusMaxPercent 35 0 – 100 Most the heat penalty can be reduced.
FrostBodyBonusMaxPercent 35 0 – 100 Most Wet / Frost / Freezing can be shortened.
PoisonBodyBonusMaxPercent 20 0 – 100 Most the poison you receive can be shortened.
LightningBodyBonusMaxPercent 22 0 – 100 Most the stagger build-up can be reduced (also while blocking).
SpiritBodyBonusMaxPercent 15 0 – 100 Most the damage from Undead can be reduced.
CapeBiomeSpeedBonusPercent 10 0 – 50 Most walking / running speed a cape adds in its biome. 0 = off.
FireCapeLavaDamageReductionMaxPercent 55 0 – 95 Most lava damage a Fire cape removes. Never 100. 0 = off.
EnableShieldBlockProcs true true / false Shields strike back with their element when you block.
ShieldBlockProcChance 25 0 – 100 Chance on a normal block (grows up to twice this with the level). A parry always triggers.

The thirteen "Bonus: …" texts are not in the .cfg: they live in the Translations/ files (InfusionSecondaryTooltip_* keys).

πŸ”„ Coming from 1.2.1: this section is new and is added to your .cfg with the defaults above. Armour and capes that were infused in 1.2.1 start giving their resistance and bonus right away β€” worth knowing for your server's balance.

The real bonus is calculated separately from the level:

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

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 (key InfusionTooltip in the Translations/ files) names the element and level.

Every item gets the same percentage; a stronger item still gets a larger absolute bonus, because the percentage applies to a larger stat.

Tier. Valheim has no Tier field, so the mod works one out from the item's own base stat before any refinement (estimates for vanilla gear): armour is Tier 6 from 19 base Armor. It only matters for immunity (ImmuneMinInfusionLevel).

Infusion effects

An Infused weapon or shield shows its element's own effect over the whole item β€” in your hands, put away on your back, and lying on the ground:

Element Effect
πŸ”₯ Fire Flames licking along the item, vivid embers rising off it, and a warm flickering light that lights up the surroundings.
❄️ Frost Cold air: a pale-blue vapour breathing off the whole item and sinking, ice glints twinkling on it from grip to tip, and fine frost dust drifting down.
☠️ Poison A sickly green smoke rising off the whole item, toxic bubbles swelling and popping on it, and the odd drop falling off.
⚑ Lightning Tiny violet arcs crackling on the item and, every moment or so, a longer bolt running along it with a burst of sparks and a faint violet flash on the surroundings.
πŸ‘» Spirit Pale-gold souls spiralling close around the item from grip to tip, each with a ghostly trail β€” more on a longer item (about 5 on a sword, 9 on an atgeir).

The new Infusion effects
The new Infusion effects.

  • Only the element effect. The item's own material is never recoloured and nothing pulses. Armour and capes have no visual at all β€” their Infusion shows in the tooltip and works through the element effects above.
  • Made by the mod itself from plain particles and lines (plus the game's fire and soft glow), emitted from the item itself, no external assets. If an effect cannot be built on your game version, that item shows flames in its element's colour instead.
  • On the ground. An Infused weapon or shield that is dropped (or spills out of a broken container) keeps its effect while you are within 40 m.
  • Cheap by design. At most 24 Infused items worn around you (your own always count) and 24 on the ground; other players and ground items farther than 40 m are skipped. The Fire and Lightning lights cast no shadows (at most 8 Fire and 6 Lightning lights at once).
  • Other players who have the mod see your effects too. Purely visual: it never changes the bonus.
  • One setting in the Infusion section, local (never synced from the server, so each player chooses for themselves):
Setting Default Range What it does
EnableInfusionEffects true true / false Turns every Infusion effect off on your screen. (Called EnableInfusionGlow before 1.3.0; your value is kept.)

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.
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
InfusionMaxBonusPercent 12 0 – 100 The most an Infusion can add, as a percentage of the item's own stat. Also sets the strength of a shield's strike-back. 0 = no stat bonus (the element effects have their own settings in Infusion Effects).
InfusionHalfLevel 30 1 – 1000 The Infusion level at which the bonus reaches half of its maximum. Lower = the bonus arrives sooner.
InfusionAllowModdedItems true true / false New in 1.4.0. false = items added by other mods never get a new or stronger Infusion. Infusions they already have keep working.
InfusionBlacklistedItems (empty) item list New in 1.4.0. Comma-separated prefab names of items that never get a new or stronger Infusion. They can still be refined, and an Infusion they already have keeps working.

A new Infusion always draws from all five elements (capes: Fire, Frost or Poison), and a weapon that already deals an element keeps its own. The Thunder Night and Infusion texts live in the Translations/ files (see 🌍 Multi-language messages); their on/off switches are in the Notifications section. Every setting here takes effect immediately and is enforced by the server on every player who has the mod (except the ones marked local).

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, Block Power, resistances and the other armour / cape / shield effects by the defender's.
  • 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 and Infusion element β€” 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.

Your own place in every ranking β€” even outside the top 10 β€” is on the settings panel's Statistics page (see πŸ“Š Statistics and πŸ“œ Server log).

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.


πŸ‘οΈ Odin's visit

Odin's visit cinematic at the Refinement Forge on a Thunder Night
Odin and Thor clash over who is worthy of the forge during a Thunder Night.

On a Thunder Night, the gods come to the forge. Each time you arrive within about 100 metres of the Refinement Forge and no other player is standing at the forge itself, the camera leaves you for about 25 seconds. It starts the moment you arrive β€” also right after coming through a portal next to the forge:

  1. The camera glides to the forge; the HUD hides, black cinema bars slide in, the screen edges darken and the music and wind drop.
  2. Odin is already there, standing beside the forge β€” the game's own Odin, just as you know him, in a soft cold light β€” and his two ravens land at his sides.
  3. Odin calls the storm: a column of light rises from him into the sky, sparks climb it, and the sky answers with flashes and thunder.
  4. He vanishes in his smoke, the ravens fly up and away, and in the silence the camera turns to the sky…
  5. Thor's chariot rushes over your head, hurling bolts at the ground, and a huge bolt strikes the forge: a blinding flash, thunder, the camera shakes, and the forge smokes and glows.
  6. The camera returns to you.
  • You are safe while it plays. It uses the game's own cutscene mode (the one of the arrival intro): you cannot act and you cannot be hurt.
  • Esc skips it. It also ends by itself if an enemy comes close, and it never starts with enemies around, in a menu, in a dungeon, in bed, on a seat or boat, in the water or in build mode.
  • When it plays again. After the scene, it waits until you have been more than 200 metres away from the forge and come back β€” or until the next Thunder Night.
  • Odin and Thor talk. A short, subtitled exchange about who is worthy of the forge, shown in the bottom cinema bar in your language.
  • A calm sky. A snowstorm or blizzard would hide everything, so the weather is clear while the scene plays and goes back to what it was afterwards (only on your screen).
  • The storm steps aside. While the scene plays, the Thunder Night show pauses, so nothing gets lost among its bolts and only one chariot crosses the sky.
  • Everyone sees their own. Each player's own game plays it when that player arrives; players who arrive together, or who are there when a Thunder Night begins, see it at about the same moment. Nothing is sent over the network and nothing in the world changes.
  • Light on the game. Outside a Thunder Night the scene and the lightning show are switched off completely; the mod only glances at the clock at nightfall and once per in-game hour to see whether one begins. During a Thunder Night it checks every 2 seconds, and 4 times a second only when you are close to a forge, so the scene starts right as you arrive.
  • Outdoors only. The mod looks for a camera spot with a clear view of the forge; if the forge is closed inside a building, the scene simply does not play.
  • Its own local switch: EnableOdinScene (Thunder Night section, default true). It also needs EnableStorm, since the scene has bright flashes too.
  • Nothing to download. Odin, the ravens, Thor, the smoke and the thunder are the game's own; the column of light, the glow and the bolt are drawn by the mod.

⚠️ Flashing lights: the strike has a bright flash. EnableOdinScene = false turns the scene off for you.

Testing it: with devcommands on, type odinbet_odin in the console (F5) near a Refinement Forge to play it right away, whatever the night.


πŸ”’ 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.

πŸ“’ Notifications section

Everything the mod tells players: the line in every player's chat, the message in the middle of the screen of the player who refined, and the Thunder Night message. Only switches live here β€” the texts themselves are in the Translations/ folder, in each player's own language (see 🌍 Multi-language messages).

Setting Default What it does
EnableGlobalNotifications true Chat announcements for everyone on the server: refinements, plus new and strengthened Infusions. false = the mod never writes in the chat.
EnableLocalNotifications true The mod's own centre-screen message for the player who refined (success, lost levels, destroyed, back at level 1) and for a new or strengthened Infusion. It replaces the game's own result text. false = leave the game's text exactly as it is.
EnableThunderNightMessage true Local. The message on your screen when a Thunder Night begins. false = no message for you; the storm and the Infusions are not affected.
NotifyOnSuccess true Announce successful refinements in the chat.
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 in the chat if the attempted level is at least this. 1 announces everything; raise it to 4, say, to keep low-level refinements out of the chat.
NotificationPrefix OdinBet The name shown at the start of every chat line (in yellow). Rename it here and every line follows; empty it to show nothing.

NotifyOnSuccess, NotifyOnFailure, NotifyOnBreak and MinimumLevelToNotify only filter the chat. The Infusion announcements follow EnableGlobalNotifications alone. The messages that explain why an attempt was blocked (maximum level reached, blacklisted item, forge disabled) are always shown to the player who tried.

Why EnableLocalNotifications 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.

πŸ’¬ Heads-up: each announcement also opens the chat window for every player, so nobody misses it. On a busy server, raise MinimumLevelToNotify or turn EnableGlobalNotifications 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 text and the item name show up in each player's own language, and nobody can broadcast arbitrary text by editing their own files.

πŸ”„ Coming from 1.2.1 or older: the old Local Messages and Global Notifications sections are merged into this one on the first start, together with EnableThunderNightMessage from Thunder Night. Your switches, MinimumLevelToNotify and the prefix are carried over (ReplaceGameUpgradeMessages β†’ EnableLocalNotifications, EnableGlobalUpgradeNotifications β†’ EnableGlobalNotifications, GlobalNotificationPrefix β†’ NotificationPrefix), and the old text lines are removed from the file. A wording you had customized in the .cfg is not carried over β€” change it in the Translations/ files instead.


🌍 Multi-language messages

Every text the mod shows β€” the centre-screen messages, the chat lines, the tooltip lines, the Hall of Fame panel and the dialogue of Odin's visit β€” lives in the Translations/ folder and shows up in each player's own language, automatically. None of it is in the .cfg: that file only holds the switches.

How it picks the text, for each message: the file of the player's game language β†’ English.json β†’ the English text built into the mod. A missing key or file never leaves a message blank and never crashes anything.

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. File names match Valheim's own internal language names exactly (Portuguese_Brazilian, Portuguese_European, etc.) β€” that's how the mod knows which file belongs to a player's game language. The keys:

  • Chat: SuccessMessage, FailedMessage, BrokenMessage, ResetMessage, InfusionMessage, InfusionStrengthenedMessage.
  • Centre of the screen: LocalSuccessMessage, LocalFailedMessage, LocalBrokenMessage, LocalResetMessage, LocalInfusionMessage, LocalInfusionStrengthenedMessage, MaxLevelReachedMessage, ItemBlacklistedMessage, ModdedItemBlockedMessage, ServerVersionMismatchMessage, ForgeDisabledMessage, ThunderNightMessage.
  • Tooltips: InfusionTooltip and the thirteen InfusionSecondaryTooltip_* "Bonus: …" lines.
  • Hall of Fame: the Hall_… keys. Odin's visit: the OdinScene_… keys.

Placeholders (they are filled in by the mod; keep them as they are):

  • Chat lines: {Prefix} (the NotificationPrefix setting), {PlayerName}, {ItemName}, {Level} (attempted level), {ResultLevel} (final level). The two Infusion lines take {Prefix}, {PlayerName}, {ItemName}, {Element} and {InfusionLevel} instead.
  • Centre-screen results: {ItemName}, {Level}, {PreviousLevel}, {ResultLevel}. The two Infusion messages: {ItemName}, {Element}, {InfusionLevel}, {Level} (the item's new refinement level). MaxLevelReachedMessage: {ItemName}, {Level} (current level), {MaxLevel}. ItemBlacklistedMessage and ModdedItemBlockedMessage: {ItemName}.
  • InfusionTooltip: {Element}, {InfusionLevel}.

The element names (Fire, Frost, Lightning, Poison, Spirit) and the item names come from the game's own translations, so they always appear in each player's own language.

✏️ Changing a wording: edit that key in the file of your language (and in English.json for players whose language has no file). Each player reads their own files β€” on a server, share the edited file with everyone (in your modpack, for example) so they all see it.

πŸ™ˆ Hiding a message: leave its text empty ("InfusionMessage": ""). The mod then shows nothing for it. That works for any message, chat line or tooltip line, in the language files where you empty it.

πŸ’‘ 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. A key you leave out falls back to English.

βš™οΈ The settings panel's texts live apart, in Translations/ConfigPanel/<LanguageName>.json (same 15 languages, same rules: the player's language, then English, then the English built into the mod). Only change them if you want to reword the panel itself.


🐞 Debug section

Setting Default What it does
VerboseLogging false [Local β€” not synced by the server] Writes two lines to the BepInEx log per refinement, with the levels before and after, the outcome, and the chances that were applied. The chances are only written in single player, for the host, and for an admin with devcommands on; other players get the levels and the outcome.

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
EnableGlobalNotifications = 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). From 1.4.0 on, such a player also cannot refine at the Refinement Forge on that server (a message says so and nothing is consumed), so nobody refines by the odds of their own .cfg on a server that has rules of its own.
  • Players always follow the server's settings. On a server with the same version, every setting that affects the game (odds, costs, caps, recipes, Infusions...) comes from the server: changing it on the player's side (in the .cfg, with Configuration Manager or in the settings panel) is refused and put back at once. Only the options on Your options (visual effects, messages, Odin's visit, the log) are each player's own.
  • MaxUpgradeLevel does not grey out the craft button; it blocks on the click. The same goes for BlacklistedItems and for items from other mods while AllowRefiningModdedItems is false.
  • 1.4.0 and 1.4.2 together: by default the version lock keeps them apart (a 1.4.0 player cannot join a 1.4.2 server, and the other way round), so update the server and every player together. With KickDifferentModVersion = false, a 1.4.0 player on a 1.4.2 server still gets a history (the server builds it), and a 1.4.2 player on a 1.4.0 server sees "The server did not answer" on the Statistics and Server log pages β€” nothing breaks.
  • The settings panel changes a dedicated server's settings only when the server runs this same version of the mod, and only for players in its admin list with devcommands on. It draws with Unity's simple IMGUI (like the Hall of Fame panel), not with the game's own menus.
  • 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, an in-game settings panel that changes the server's settings live, 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

CHANGELOG

Changelog

All significant changes to this mod are recorded here. Minor improvements are not listed individually.

Report bugs on Discord: https://discord.gg/aMkN89Cuas


1.4.5 β€” Compatible with the Ultimate Server Configuration Manager panel

What's new

🧩 Ultimate SCM panel compatibility

OdinBet's settings panel is now compatible with Ultimate Server Configuration Manager: when that mod is installed, OdinBet's panel registers itself there and opens from Ultimate SCM's own panel list, the same as any mod built for it.

  • Fully optional: nothing changes if Ultimate SCM is not installed β€” Shift + E at the Refinement Forge and odinbet_config in the console keep opening the panel exactly as before.
  • Added Igao-Ultimate_Server_Configuration_Manager-1.0.4 as a dependency in manifest.json.

Updating from 1.4.4

  • Nothing to migrate: every .cfg value, the Hall of Fame, histories and Infusions stay as they are.

1.4.4 β€” Forge on the map (optional visibility)

Performance Improvements

⚑ Significant optimization across all systems

  1. Item list parsing β€” Cached parsed configuration lists to eliminate re-parsing on every refine check (~50Γ— faster for list lookups on high-traffic servers)
  2. Forge location detection β€” Replaced O(nΒ²) nested loop with HashSet-based lookup (~50% reduction in GC allocations, O(1) performance)
  3. Reflection caching β€” Cached PropertyInfo and MethodInfo lookups in RefreshCraftingUI to avoid repeated reflection (~30% speedup on UI updates)
  4. Per-frame loop optimization β€” Restructured Tick() method with early exits and short-circuit evaluation (~50-70% CPU reduction for infusion glow updates)

Result: Overall mod overhead reduced by 20-40% depending on world size and player count. More noticeable improvement on servers with many items and forge interactions.

What's new

πŸ—ΊοΈ The Refinement Forge icon on everyone's map β€” optional

A new setting in the Overview page: Forge on the map (off by default).

Setting Default What it does
[Feature Toggles] ShowForgeOnMap false On: the Refinement Forge's icon shows on the map for all players. Before the forge spawns in your world, all possible locations appear as hints so you can explore. Once one location is chosen (and built), only that forge shows on the map. Off (default): the game's own behavior β€” players discover the forge by exploring. Nothing is saved in characters: turning it off removes the icon (players already in the world lose it when they reconnect).

How it works:

  • ShowForgeOnMap OFF (default) β†’ Vanilla: players find the forge by exploring, as the game plays.
  • ShowForgeOnMap ON β†’ Shows all possible forge locations before generation; once the forge spawns in one place, only that location is visible on the map for everyone.

Technical detail: The server temporarily flags the forge for display during map updates; nothing is saved. There is always only one Forge per world (as the vanilla Valheim rules say), so hints are only helpful for planning exploration.

Updating from 1.4.3

  • Nothing to migrate: all your .cfg files, Hall of Fame, histories and Infusions stay as they are.
  • New setting is off by default, so vanilla behavior is unchanged unless you turn it on.
  • Update the server and all players together if anyone changes ShowForgeOnMap settings (protocol version bumped from 18 to 19).

1.4.3 β€” Items from other mods enabled in the Refinement Forge, including RandyKnapp's EpicLoot mod

Fixes

🧩 Items from other mods now show up at the Refinement Forge

With Items from other mods can be refined on, items added by other mods still never appeared in the forge's list, so they could not be refined at all. From 1.4.3 on they show up and are refined like the game's own items β€” with any mod that adds equipment (Jotunn, ItemManager and the like) and with RandyKnapp's Epic Loot: an enchanted item from another mod now reaches the forge just like an enchanted item of the game.

Nothing to set up: it works as soon as the game loads.

What's new

πŸ—Ώ The right idol for each item, automatically

Every item from another mod asks for the idol that fits it β€” Protection or Battle, at the tier that matches the item (Wood, Bronze, Iron, Silver, Black Metal, Black Marble, Flametal or Bloodgold) β€” and costs what a comparable item of the game costs, with your own Cost and time rules on top. When the mod is not sure, the item is marked to review so an admin can check it. The item's normal crafting recipe does not change.

πŸ“‹ A new page in the settings panel: Idols of mod items

For admins with devcommands (Shift + E at the Refinement Forge), next to Allowed items. One row per item from another mod, with its icon, its type, its base stat and the idol it asks for:

  • Released / Blocked with one click. It uses the same two lists as the page Allowed items (BlacklistedItems, RefinableModdedItems), so both pages always agree and nothing changes for a .cfg you already have. Items from other mods can be refined decides how items start: released (block the ones you do not want) or blocked (release the ones you want). A blocked item simply does not show up at the forge.
  • Change the idol in a chooser with every idol of the game β€” Protection and Battle, Wood to Bloodgold, each tier with its own colour β€” or go back to Automatic. Default undoes a hand-picked idol.
  • Search, filters (released, blocked, chosen by hand, to review, and by type of item) and actions on everything shown at once: release, block, back to automatic.
  • Items not found: at the bottom, folded away. Choices saved for items that are not in the game any more (a mod removed) are kept, never deleted by themselves: if the mod comes back, the item returns to the list with the same choices. Forget clears one, Forget all every one of them. On a dedicated server, the server says which items it no longer has.

βš™οΈ New setting

Setting Default What it does
[Crafting] ModdedItemIdols (empty) The items from other mods whose idol an admin changed, as ItemPrefab:IdolPrefab (for example BloodHelmet:Upgrader3Armor). Empty = every item on its automatic idol. Easiest to change on the new page.

Good to know

  • The log says what happened: at every start, one line with how many items from other mods were found and how many can be refined. With VerboseLogging on, one line per item with the idol it got.
  • Statistics and the Hall of Fame count the idols an item from another mod used, like any other.
  • Same rules as the game's own items: an item shows up at the forge when it is in your inventory and your character knows how to craft it. Items that cannot be crafted at all (ones that only drop from monsters, for example) and items the game never upgrades (a maximum quality of 1) are not listed.

Updating from 1.4.2

  • Nothing to migrate: the .cfg, the Hall of Fame, the histories and every Infusion stay as they are. The only new setting starts empty (every item on automatic), and the lists you already have keep their meaning.
  • Update the server and every player together: the sync layout changed (ProtocolVersion 18), and the version lock keeps a 1.4.2 player out of a 1.4.3 server.
  • Copy the Translations/ConfigPanel folder again: it has the texts of the new page (47 new keys in every language) and one updated text (Page_Items_Intro). The message files did not change.

1.4.2 β€” Your statistics and a permanent server log

What's new

πŸ“Š Statistics β€” a page for every player

The new Statistics page of the settings panel
The Statistics page: your numbers, your place in the Hall of Fame and your history.

A new page in the settings panel (Shift + E at the Refinement Forge), for every player, admin or not:

  • This character: refinements, success rate, successes, failures, items destroyed (and items sent back to level 1, if the server uses BreakReturnsItemAtLevel1), the best success streak and the worst failure streak, the highest level reached (with its Infusion), the last refinement and the idols used, per idol, with the game's own icons and names.
  • Hall of Fame β€” your account: your record and your place in each of the eight rankings, even far outside the top 10 the statues show (gold = in that top 10).
  • History: every refinement as a card, newest first β€” date and time in your own time zone and date format, the item and its levels (level 5 β†’ 6), the result (success, fell to level 4, kept level 5, destroyed, back to level 1), the Infusion after a success and the idols it used (3 Γ— Silver Battle Idol). 50 at a time: scroll down and the next ones load. Nothing yet? The page says so.
  • Per world and per character: switch character and you see that character's history; a single-player test world never mixes with the server's. The server keeps the last 500 refinements of each character; the totals count all of them.
  • Kept on the server and read from there: the same on any computer, and private β€” the server works out who is asking from the connection itself (Steam ID and character name, like the Hall of Fame), so nobody can read someone else's history.

πŸ“œ Server log β€” for admins with devcommands

The new Server log page of the settings panel
The Server log page: every change to the server's settings, newest first.

A new page next to Server: every change to the server's settings, newest first β€” when (in your local time), who (the admin's name, and their Steam ID in the file), which setting (its name in your language, with its .cfg key) and before β†’ after. It records:

  • Save and apply in the settings panel, and Reload .cfg, with the admin who pressed it;
  • a .cfg edited while the server was off (noticed at the next start);
  • changes made while the server runs by Configuration Manager or another mod (changed outside the panel; a slider being dragged gives one line, once it settles).

Unlike LogOutput.log it survives restarts, has no size limit and cannot be erased or reset from the game. The server checks its admin list on every request. Players' own options (Your options) are never logged.

Both pages have a Refresh button. A Server log that is already open (and scrolled to the top) shows a change you just saved by itself, without pressing anything. If the server does not answer (it runs an older version, or is not ready yet), the page says so instead of staying empty.

Improvements

  • Security: the server's rules are now applied more reliably when you join a server. Nothing to configure.

Good to know

  • Where the files are: in BepInEx/config/OdinBet_ForgeOfPotential_HallOfFame/, on whichever game is the server:
    • History_<world>/<SteamID>_<character>_<code>.json β€” one per character and world;
    • ServerSettingsLog.jsonl β€” the server log, one line per change, only ever added to;
    • ServerSettingsLog_state.json β€” the last value seen of each setting.
  • Readable by hand: every entry has "utc" (for example 2026-09-26T21:50:30Z) next to "time", the Unix timestamp the panel turns into each player's local time.
  • Saved safely: through a temporary file, keeping the previous version as .bak; a damaged file is kept as .corrupt and the .bak is used; a file another program is holding open (an antivirus, a backup) is never overwritten β€” it is tried again, and the new refinements wait in memory until then.
  • Light: a history is loaded only while its owner uses it, the panel asks for 50 cards at a time, and the server answers a player at most a few times per second.
  • Recorded from 1.4.2 on. Refinements made before have no history cards (the Hall of Fame and its rankings are unchanged and keep everything). The history is built from the report the Hall of Fame already receives, and the idols used are worked out on the server with its own rules (none are counted on a world with the no crafting cost modifier, where the game takes none).
  • The texts are in 15 languages; item and idol names come from the game itself.

Updating from 1.4.0

  • Nothing to migrate: the .cfg, the Hall of Fame and every Infusion stay as they are, and no setting was added or changed. The sync layout is the same (ProtocolVersion 17).
  • Update the server and every player together: the version lock keeps a 1.4.0 player out of a 1.4.2 server. With KickDifferentModVersion = false, a 1.4.0 player on a 1.4.2 server still gets a history, and a 1.4.2 player on a 1.4.0 server sees "The server did not answer" on the new pages β€” nothing breaks.
  • Copy the Translations/ConfigPanel folder again: it has the texts of the two new pages (48 new keys in every language) and one updated text (Ui_SubLocalOnly). The message files did not change.

1.4.0 β€” The settings panel, Refinement power and items from other mods

What's new

βš™οΈ An in-game settings panel

The in-game settings panel

Every setting of the mod in one panel, in each player's own language (15 languages): stand at the Refinement Forge and press Shift + E, or type odinbet_config in the console.

  • Twelve pages: Overview Β· The bet Β· Cost and time Β· Refinement power Β· Idol recipes Β· Notifications Β· Thunder Night Β· Infusions Β· Infusion effects Β· Allowed items Β· Server Β· Your options.
  • Every setting explains itself: what it does, its default, its allowed range and its .cfg key, with a live example computed from what you type ("Out of 100 refinements: 80 succeed, 15 fail and lose 1 level(s), 5 destroy the item", the idol cost and crafting time per level, the exact Thunder Night hours, how the Infusion bonus grows, a preview of the chat line...).
  • Alerts when settings get in each other's way: grey No effect now (another setting makes this one irrelevant), orange Warning (allowed, but probably not what you want) and red Error (blocks saving until fixed).
  • No item names to type: the blacklist, the new lists below and the ingredients of the 16 idol recipes use an item picker with icons, a search in your language (or by prefab name) and categories, including one for items from other mods. Recipes take up to 4 ingredients with βˆ’ / + for the amounts; the crafting station is picked from a list with icons.
  • Live, for everyone: an admin with devcommands on β€” in single player, as the host, or in the admin list of a dedicated server β€” presses Save and apply, checks the summary, and the new values take effect at once for every player: the server writes its .cfg, rebuilds the idol recipes and sends the new values to everyone connected. No restart, nobody has to reconnect. The server checks every request itself (admin list, known settings, types and ranges), refuses it whole if anything is wrong, and writes who changed what to its log.
  • Reload .cfg: after editing the .cfg by hand, one button makes the server read it again and apply it to everyone.
  • Everybody else β€” including the host or an admin without devcommands β€” sees only their own options (the last page): the server's odds and settings stay hidden. The host and admins get a notice there: type devcommands in the console (F5) to see the full panel.
  • The detailed log (VerboseLogging) writes the server's odds only for who may see them in the panel.
  • The texts are in the new Translations/ConfigPanel/ folder.

πŸ’ͺ Refinement power

Three new settings (new Refinement Power section) decide how much each Refinement Forge level really adds, in percent of what the game itself adds per level:

  • RefinementStatMultiplierWeapons β€” weapon combat damage (not chop / pickaxe);
  • RefinementStatMultiplierShields β€” shield Block Power and parry force;
  • RefinementStatMultiplierArmor β€” Armor of helmets, chest and leg pieces, gloves and capes.

Default 100 (exactly the game's numbers), range 0 – 500. Only the levels above an item's normal maximum quality (the ones only the forge gives) are affected. Durability never changes, an Infusion adds its bonus on top, and items from other mods are scaled the same way.

🧩 Items from other mods

  • AllowRefiningModdedItems (Crafting, default true): false = items added by other mods cannot be refined at the forge (nothing is consumed; new message ModdedItemBlockedMessage, in 15 languages), except the ones in RefinableModdedItems.
  • InfusionAllowModdedItems (Infusion, default true): false = items from other mods never get a new or stronger Infusion.
  • InfusionBlacklistedItems (Infusion, empty): items that never get a new or stronger Infusion, but can still be refined.
  • Infusions that items already have always keep working. The mod recognises the game's own items by recording the item list the game starts with, before other mods add theirs; if that ever fails, every item counts as a game item (nothing gets blocked by mistake) and the log says so.

Fixes

  • Frost and Poison armour now also shorten a new effect, not only one that was refreshed. In 1.3.0 one of the hooks pointed at the wrong version of the game method, so the log showed Skipped patch 'SEMan_AddStatusEffect_InfusionPatch' and the first Wet / Frost / Freezing / Poison you received lasted its full time. The hook now finds the right method by itself.
  • A player's own .cfg never receives a server's values. While connected to a server with the mod, changing one of your own options (in the panel, or with Configuration Manager) used to write the whole file, server values included. Now only your own values are written.
  • A setting changed in single player (or on the host) is now also the value a player gets back after leaving a server later in the same game session (before, the value from the start of the game came back until a restart).
  • No refining by your own rules on a server with other rules. A player whose OdinBet version differs from the server's (only possible with KickDifferentModVersion = false) could refine with the odds of their own .cfg. Refining at the forge is now refused for them on that server (new message ServerVersionMismatchMessage, in 15 languages); nothing is consumed.

Updating from 1.3.0

  • Update the server and every player together. The sync layout changed (ProtocolVersion 17), and the version lock keeps a 1.3.0 player out of a 1.4.0 server.
  • Keep your .cfg: the new settings are added with values that change nothing.
  • Copy the whole Translations folder again: it has the new ConfigPanel folder and two new keys (ModdedItemBlockedMessage, ServerVersionMismatchMessage) in every message file.

1.3.0 β€” Odin's visit, Infusions on armour, capes and shields, and a look for every element

What's new

Odin's visit cinematic at the Refinement Forge on a Thunder Night
Odin and Thor clash over who is worthy of the forge during a Thunder Night.

πŸ‘οΈ Odin's visit

On a Thunder Night, each time you arrive within about 100 m of the Refinement Forge and no other player is standing at the forge, a short cutscene of about 25 seconds plays, starting the moment you arrive (a portal next to the forge included):

  • the camera glides to the forge, the HUD hides and cinema bars slide in;
  • Odin is already waiting beside the forge, and his two ravens land at his sides;
  • he calls the storm with a column of light, and the sky answers with flashes and thunder;
  • Odin and Thor have a short, subtitled exchange about who is worthy of the forge;
  • he vanishes in his smoke, the ravens fly up and out of sight, and the camera turns to the sky;
  • Thor's chariot rushes overhead hurling bolts at the ground, and a huge bolt strikes the forge, which then smokes and glows for a while;
  • the camera returns to you.

Good to know about the scene:

  • The weather is calm and clear while it plays (a snowstorm would hide it) and goes back to what it was afterwards, only on your screen. The Thunder Night show pauses meanwhile, so only one chariot crosses the sky.
  • It plays again after you have been more than 200 m away from the forge and come back (walking, sailing or through a portal), or on the next Thunder Night.
  • You cannot be hurt or act while it plays, as in the game's arrival intro. Esc skips it, and it ends by itself if an enemy comes close.
  • Each player sees their own, on their own screen; players who arrive together see it at about the same moment. Nothing is sent over the network and nothing in the world changes.
  • It only plays outdoors, with a clear view of the forge, and never in a menu, a dungeon, a bed, a seat or boat, the water or build mode.
  • New local setting EnableOdinScene (Thunder Night section, default true). The scene also needs EnableStorm. Admins with devcommands on can play it right away near a forge with the console command odinbet_odin.

Infusions now work on armour, capes and shields

  • Armour protects you from its element. An infused helmet, chest, legs or cape makes you Resistant to its element, and Very Resistant from Infusion level 5. Two pieces with the same element don't stack. A piece that is weak to that element stays weak. A Frost piece also protects you from Freezing and Cold in the Mountains and the Deep North, like any frost protection in the game.
  • Each armour element also has a small extra bonus:
    • πŸ”₯ Fire: you suffer less from heat (Ashlands, lava, the boiling ocean).
    • ❄️ Frost: being wet, slowed or frozen wears off sooner.
    • ☠️ Poison: poison on you wears off sooner.
    • ⚑ Lightning: you get staggered less when hit.
    • πŸ‘» Spirit: you take less damage from the Undead.
  • Capes make you faster in their biome. New cape Infusions are always Fire, Frost or Poison. A Fire cape is faster in the Ashlands and also reduces lava damage (never to zero). A Frost cape is faster in the Mountains and the Deep North. A Poison cape is faster in the Swamp. Only your speed changes; running, jumping and dodging cost the same stamina as before.
  • Shields strike back. Blocking with an infused shield can burn, slow (for a few seconds), poison or stagger the attacker, or burn the Undead with spirit fire. A parry always triggers it; a normal block has a chance. The same attacker can only be hit once every 5 seconds. A Spirit shield also blocks harder against the Undead.
  • Tooltips of armour, capes and shields show a "Bonus: …" line, in your language.
  • All of this can be tuned in the new [Infusion Effects] config section, which the server shares with every player.

Weapons

  • Infused weapons now always deal a little elemental damage, even at a low Infusion level, so Fire reliably burns and Frost reliably slows.

Every element has its own look

An infused weapon or shield shows its element's effect over the whole item: in your hands, on your back and lying on the ground.

The new Infusion effects
The new Infusion effects.

  • πŸ”₯ Fire: flames licking the item, bright embers rising off it, and a warm flickering light that lights up the area around you.

  • ❄️ Frost: cold air β€” a pale-blue mist flowing off the whole item and sinking, ice sparkles twinkling on it, and fine frost dust falling.

  • ❄️ Frost smoke: a monster chilled by your Frost weapon or Frost shield gives off a white, icy smoke that sinks to the ground while the chill lasts.

  • ☠️ Poison: green poison smoke rising off the whole item, bubbles swelling and popping on it, and drops dripping off.

  • ⚑ Lightning: tiny sparks crackling on the item and, every moment, a bigger bolt running along it with a burst of sparks and a faint violet flash around you.

  • πŸ‘» Spirit: pale-gold souls spiralling around the item, each leaving a ghostly trail β€” more on a longer item (about 5 on a sword, 9 on an atgeir).

  • Other players who have the mod see your effects too.

  • Armour and capes have no visual effect. Their Infusion shows in the tooltip.

  • The old light on infused items and the pulsing colour on the item are gone; the new effects replace them. EnableInfusionEffects (the old EnableInfusionGlow) turns them all off on your screen.

  • Built to stay light: only a limited number of effects and lights are shown around you at once, and nothing farther than 40 m.

Hall of Fame

  • The Forge Master now keeps a separate row for each Infusion element: a Fire Atgeir and a Frost Atgeir of the same player are two rows.

A cleaner config file

  • The texts left the .cfg. Every message, chat line and tooltip line now comes only from the Translations/ folder, in each player's own language (15 languages). The config file keeps just the switches and numbers. To change a wording, edit the file of your language; to hide a message, leave its text empty there.
  • One Notifications section replaces Local Messages and Global Notifications: EnableGlobalNotifications (chat for everyone), EnableLocalNotifications (the message on the screen of the player who refined), EnableThunderNightMessage (moved here from Thunder Night), NotifyOnSuccess, NotifyOnFailure, NotifyOnBreak, MinimumLevelToNotify and NotificationPrefix.
  • Fewer settings to worry about. InfusionElements and the Tier lists (InfusionTierMultipliers, InfusionTierThresholdsWeapon, …Armor, …Shield) are built in: a new Infusion always draws from the five elements (capes: Fire, Frost or Poison), and every item gets the same percentage of bonus.
  • Shorter descriptions: one or two lines per setting. The default value and the allowed range are still written under each one, and the README explains everything in full.

Fixes

  • A refinement whose recipe has no idol cost is no longer announced or recorded in the Hall of Fame as a destroyed item.
  • A 1.2.1 Hall of Fame no longer shows the same item twice at the same level.
  • When the mod corrects an item's level after a failed refinement, the inventory weight now updates too.
  • The idol's own upgrade chances are always put back exactly as they were.
  • Infused items on the ground no longer flicker in very crowded bases.
  • A Fire or Lightning light is no longer lost when you swap to another infused item.
  • Less work every frame in several places (Hall of Fame panel, statue text, effects, shield blocks, the ground-item scan). It makes little difference to FPS, because the mod was already light.

⬆️ Updating from 1.2.1

Players: just update and play. Update the mod (Thunderstore / r2modman do it in one click) and join. There is nothing to delete, move or configure.

Update the server and every player at the same time. With the version lock on (KickDifferentModVersion, on by default), a player on 1.2.1 cannot join a 1.3.0 server, and the other way round; the server log says why. With the lock off, that player plays with their own settings instead of the server's, and the Hall of Fame statues show "not available" for them.

Do NOT delete your .cfg. It updates itself on the first start:

  • The new settings are added with their default values.
  • Your notification switches, MinimumLevelToNotify, the prefix and the Thunder Night message switch move to the new Notifications section with the values you had, and EnableInfusionGlow becomes EnableInfusionEffects with its value.
  • The message texts are removed from the file (the Translations/ files have them). A wording you had customized in the .cfg is not carried over β€” put it in the Translations/ file of your language instead.
  • Settings that no longer exist are removed: the six old glow settings (EnableInfusionGlowArmor, InfusionGlowIntensity, InfusionGlowRange, InfusionGlowEmission, InfusionGlowPulseDepth, InfusionGlowPulseSpeed), InfusionElements, the Tier lists, and leftovers of the old 1.1.0 Forge Storm section. If you had changed InfusionElements or the Tier multipliers, those choices no longer apply.
  • Everything else you set (chances, costs, recipes, Thunder Night…) stays exactly as it was. On a server, deleting the .cfg would only throw away the admin's own settings.

A few settings you may already have now do a little more:

  • EnableInfusionGlow is now called EnableInfusionEffects: if you turned it off in 1.2.1, it stays off, and the new element effects are off too.
  • InfusionMaxBonusPercent: it also sets how hard a shield strikes back. At 0, weapons also lose the small minimum elemental damage.
  • EnableLocalNotifications (the old ReplaceGameUpgradeMessages): off, it now also hides the "infused" message on screen.

The Hall of Fame keeps working, with no reset. The data stays in the same place (BepInEx/config/OdinBet_ForgeOfPotential_HallOfFame/), and every ranking, streak and record is kept. From now on, a player with both a plain and an infused copy of the same item can appear twice in The Forge Master (one row per element).

Your items keep their Infusions. Nothing changes in how items are saved. Weapons and shields work as before, now with their new effect and the small minimum elemental damage. Armour and capes infused in 1.2.1 start giving their protection and bonus right away. Keep this in mind for your server's balance. Capes that got Lightning or Spirit in 1.2.1 keep them and give the protection, but have no speed bonus.

Replace the whole mod folder, not just the .dll. The Translations folder has new texts (the "Bonus: …" lines, Odin's visit). With an old folder those lines show in English. Thunderstore and r2modman do this for you.

Going back to 1.2.1 later? Items are safe. The Hall of Fame is not: 1.2.1 would merge the rows of different elements and lose some. Back up the OdinBet_ForgeOfPotential_HallOfFame folder first. The .cfg would come back with 1.2.1's defaults for the settings that moved or left.

1.2.1 β€” Thor flies by, and a switch for the Thunder Night message

What changed

Thor crossing the night sky over the Refinement Forge
Thor flying by over the Refinement Forge on a Thunder Night.

  • Thor flies by. On Thunder Nights, Thor now passes flying across the night sky.
  • New: a switch for the Thunder Night start message. The message players get when a Thunder Night begins (ThunderNightMessage) can now be turned off with EnableThunderNightMessage (Thunder Night section, on by default). With false, nobody sees the message; the Thunder Night itself is unaffected β€” the storm and the Infusions work exactly as before. Emptying the text already hid the message, but the new switch leaves the text (and its translations) in place, so you can turn the message back on without rewriting anything.
  • Logic improvements. Internal improvements to the mod's logic.

Good to know

  • Nothing changes until you switch it off. The message stays on by default, so a server that updates behaves as before.
  • Server and players should update together, as always: a different version is disconnected by the version lock (on by default), or ignores the server's settings if the lock is off.

βœ… Nothing to migrate

No need to delete your .cfg. BepInEx adds EnableThunderNightMessage to your existing file at its default (true) and changes nothing else you set. Replace OdinBet_ForgeOfPotential.dll and you are done.

1.2.0 β€” Thunder Night and Elemental Infusions

What changed

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

  • New: Thunder Night. Some nights are Thunder Nights. Each night is its own independent draw with a ThunderNightChance (default 20%) β€” not "one night in five". Every game reaches the same answer for the same night on its own, so nothing is stored or sent over the network, it survives restarts, and a player who joins halfway through a Thunder Night sees the same night as everyone else. Players in the world get a centre-screen message when one begins (ThunderNightMessage), that is, when its hours start.

  • New: Elemental Infusions. During a Thunder Night, a refinement that has already succeeded gets a second roll (ThunderNightInfusionChance, default 30%) to give the item an Infusion: an element (Fire, Frost, Lightning, Poison or Spirit) and an Infusion level.

    • A failed refinement never gets the roll and is handled exactly as before. Thunder Night never changes the success chance, the cost, the levels lost, a destruction or a reset β€” it only reads a result that is already decided.
    • No Infusion yet: the level is the item's new refinement level and the element is drawn from InfusionElements (a weapon that already deals an element keeps its own).
    • Already infused: the element never changes and the level grows by the item's new refinement level (Lightning 9, refined to level 10 β†’ Lightning 19).
    • The Infusion level has no cap. It is a progression counter, not the bonus.
  • What an Infusion does. Weapons gain damage of the Infusion's element, shields gain Block Power, armour gains Armor β€” always a small percentage of the item's own stat that flattens out towards InfusionMaxBonusPercent (default 12%), however high the level goes. A Tier multiplier is available for tuning. The numbers in the item's tooltip already include the bonus, and one extra line names the Infusion.

  • It stays with the item. The Infusion is saved by the game itself, on the item, so it survives restarts, chests, dropping and picking up, and equipping. The mod keeps no save file or database for it. Refining an infused item again keeps the Infusion (the mod carries it over to the item the game creates), and so does a failure that only costs levels. It is lost only if the item is destroyed or handed back as a new level-1 item (BreakReturnsItemAtLevel1).

  • New: Infusion glow. Every Infused item you wear β€” the weapon and shield in your hands and the armour pieces β€” gives off a small pulsing coloured light: orange for Fire, blue for Frost, violet for Lightning, green for Poison, gold for Spirit. It is one plain light without shadows per item, made once when the item is equipped and gone when it is put away, plus a glow on the item itself (its material's emission, through a property block, so the shared material is never edited). Light and item pulse together. No particles; the only per-frame work is the pulse, and at most 24 glow lights are alive around you (other players beyond 40 m are skipped). Other players with the mod see it on you too. Purely visual: it never changes the bonus. Local settings, never synced, in the Infusion section: EnableInfusionGlow (turns all of it off), EnableInfusionGlowArmor (only the hands glow), InfusionGlowIntensity (2.2), InfusionGlowRange (4.5 m), InfusionGlowEmission (1.5), InfusionGlowPulseDepth (0.35) and InfusionGlowPulseSpeed (2.5).

  • Chat notices stay open for 4 seconds. When a refinement or Infusion notice arrives, the chat window is opened and now stays open for 4 seconds (it used to close after about 1), so the line can actually be read. Each new notice restarts the time.

  • The [Infusion] section now comes right after [Feature Toggles] in the config file. Because the synced entries are sent in registration order, this changes the config-sync layout: client and server must both run this build.

  • The Forge Master and The Relic of the Forge now rank differently. Both used to show near-identical lists (highest item level, one row per player and item type), which made the two panels feel like the same thing twice. They now read the same underlying records two different ways:

    • The Forge Master lists every record, highest item level first β€” the same thing The Relic of the Forge used to show. This is the only change for players coming from 1.1.0: the panel named "Forge Master" now shows one row per item type instead of one row per player, so the same player can appear more than once.
    • The Relic of the Forge now only lists records with an Infusion, ranked by the strongest Infusion first. It stays empty (normal unclaimed β€” rows, same as any other ranking with nothing in it yet) until a Thunder Night infuses someone's item.
    • A record still keeps one row per player + item type, still replaced when the item reaches a higher level, and now also replaced when the level is the same but the Infusion grew (an item that dropped a level and climbed back with a fresh Infusion roll used to keep showing the old, smaller Infusion).
    • The 100-record safety cap on this list no longer just keeps the top 100 by item level β€” it keeps the top 100 by level and the top 100 by Infusion, so a low-level, heavily Infused item can't be evicted before it gets a chance to show up in The Relic of the Forge.
    • When the ranking file is loaded, a player's old personal best is also written into the item records if those are missing it or lower, so The Forge Master never shows a lower level than a player actually reached (this covers records made before item records existed at all, older than 1.1.0).
    • Nothing is migrated or reset. Every record from 1.1.0 (and earlier) loads exactly as before; only how the two panels sort and filter that same data changed. A world that already has 1.1.0 data shows both panels correctly the moment it loads on 1.2.0.
  • The Lightning storm is now part of Thunder Night. The storm of 1.1.0 (its own Forge Storm section, every night between two hours) is folded into Thunder Night: it plays over the Refinement Forge only on a Thunder Night, inside the same hours as the Infusion draw. The Forge Storm section (Enabled, StartHour, EndHour) is gone β€” see Settings that changed below.

  • Two independent switches, and the hours. EnableStorm turns only the lightning show off (Infusions keep working); EnableInfusions turns only new Infusions off (the show keeps playing). With both off, Thunder Nights do nothing at all. ThunderNightStartHour / ThunderNightEndHour set the hours inside the night in which both the show and the Infusion draw are active (default 18 to 6, the whole night; the window may wrap midnight, and the same number twice means the whole night). The forge distance for the show is unchanged.

  • New settings (all synced from the server): EnableStorm, EnableInfusions, ThunderNightChance (default 20), ThunderNightInfusionChance (default 30), ThunderNightStartHour and ThunderNightEndHour in the new Thunder Night section; InfusionElements, InfusionMaxBonusPercent, InfusionHalfLevel, InfusionTierMultipliers and three InfusionTierThresholds… lists in the new Infusion section; and six new texts (ThunderNightMessage, LocalInfusionMessage, LocalInfusionStrengthenedMessage, InfusionTooltip, InfusionMessage, InfusionStrengthenedMessage).

  • Infusions in the Hall of Fame. The two rankings that name an item β€” the Forge Master and the Relic of the Forge β€” now end a line with the Infusion the item carried when it reached that level, e.g. Iron Sword - level 20 (Lightning Infusion 45). Only an Infusion this mod granted is shown (a refined Frostner that was never infused stays Frostner - level 13). The Forge Master ranking is still ordered by item level regardless of Infusion; the Relic of the Forge is ordered by Infusion strength instead (see above) and only shows records that have one. Records from 1.1.0 stay valid and simply have no Infusion. The new text (Hall_ValueItemLevelInfused) is in all 15 languages, and a long line shrinks to fit its column.

  • Startup banner on dedicated servers. The server console and log now show a small banner with the mod name and version once the world is up.

  • Safer cost and duration settings. CostStart, CostIncreasePerInterval, CostIncreaseInterval, CostScalingLevelStart, UpgradeBaseDuration and UpgradeDurationIncreasePerLevel now have proper ranges (see the README), and the idol cost can never go below 0 even if a config says so. A value outside its range in an existing .cfg is pulled to the nearest limit when the game loads it.

  • FailureAtMinimumLevelBreaksItem is described correctly. It applies whenever a failure would take the item below MinimumLevelOnFailure β€” with LevelsLostOnFailure of 2 or more that includes items a little above the floor, not only the ones already on it. The behaviour did not change; the description did.

  • Fails safe after a game update. If a future Valheim update ever changes the game method the mod uses to see what happened to a refined item, the mod now leaves the game's own result and messages alone (and grants no Infusion) instead of reporting the wrong thing.

Good to know

  • Thunder Nights and Infusions are on by default, so a server that updates starts having them straight away. Set EnableInfusions to false to opt out of the Infusions; Infusions that items already carry keep working either way.
  • The storm shows up in the same hours as the Infusions. Because both use the same window, narrowing the hours (for example 22 and 4) narrows both.
  • The storm has bright, rapid flashes. If you or your players are sensitive to flashing light, set EnableStorm = false. A server's setting applies to everyone connected.
  • The Infusion is decided on the player's own game, like the rest of the refinement. The server enforces the numbers but cannot verify an item, so a modified game could give itself an Infusion β€” as it could edit any item.
  • Only players with the mod get an Infusion's bonus.
  • The default Tier thresholds are estimates for vanilla gear; adjust them to your modpack.
  • The six new texts are translated in all 15 languages, through the same multi-language system as the others.
  • The Hall of Fame messages between server and player also changed (they now carry the Infusion), so the rankings only work between the same version, like the rest.
  • The new settings change the config sync packet, so the server and every player must update together β€” a different version is disconnected by the version lock (on by default), or ignores the server's settings if the lock is off.

⚠️ Settings that changed (only if you had 1.1.0)

Nothing you must do, but two things are worth a look. BepInEx adds every new setting to your existing .cfg and changes nothing else you set.

  • Forge Storm is gone, and the storm no longer runs every night. The three old keys (Enabled, StartHour, EndHour) are ignored. The storm now plays only on Thunder Nights (20% of nights by default), between ThunderNightStartHour and ThunderNightEndHour.
  • If your storm was off, it stays off. In 1.1.0 the storm was off by default because of its flashing lights, so an old Enabled = false is carried over: your new EnableStorm starts as false, and the update does not switch on flashing lights for anyone. Your .cfg keeps whatever you set afterwards. If it was on, or you had no Forge Storm section at all, EnableStorm starts as true.
  • Your old hours are not carried over, because the same hours now also limit the Infusion draw. The new defaults are the whole night (18 to 6).
  • To get the 1.1.0 storm back exactly (every night, 22:00 to 04:00) set ThunderNightChance = 100, ThunderNightStartHour = 22 and ThunderNightEndHour = 4. Careful: that makes every night a Thunder Night, so successful refinements can be infused every night in those hours. If you only want the show, also set EnableInfusions = false.

Nothing else needs migrating, and items refined before this version simply have no Infusion.

1.1.0 β€” Lightning storm, forge disable, version lock, and the Hall of Fame

What changed

The Lightning storm over the Refinement Forge at night
The Lightning storm show over the Refinement Forge at night.

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

  • New: a lightning storm over the Refinement Forge. At night, the sky above the 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. It is purely a show: everything happens high above the ground, so your buildings are never damaged. It only uses effects Valheim already has, so there is nothing extra to download.
  • You decide if and when. The storm is off by default. In the new Forge Storm section of the .cfg there are just three settings: Enabled to switch it on, and StartHour / EndHour for the hours it runs (game time, 22:00 to 04:00 by default). Set both hours to the same number and it runs all day and night.
  • It starts when you get close. The show plays while you are within about 200 metres of the forge.
  • New: an option to disable the forge completely. With EnableRefinementForge = false, nobody can open the Refinement Forge, refine gear, or repair anything there. The buttons are greyed out, and anyone who tries to use it sees a message in the middle of the screen. It is on by default (the forge works as always), so nothing changes until you switch it off.
  • Your own message. The text shown is ForgeDisabledMessage (under Local Messages), and the default is "The Refinement Forge is disabled." Write anything you like, or leave it empty to show nothing at all.
  • Speaks every language. Left at its default, the message appears in each player's own language across all 15 languages that ship with the mod (now also true for the new ItemBlacklistedMessage below). If you write your own text, everyone sees exactly what you wrote.
  • Only the Refinement Forge is affected. Other crafting stations work as normal, and so do the storm, building near the forge, and crafting the Idols. (With the forge shut down, the Idols simply have nothing to be used on.)
  • On a server with the mod, the server's choice applies to everyone connected.
  • New: version lock for servers. A player who has the mod but a different version than the server is disconnected a moment after joining, so nobody can play with settings that differ from the server's. Controlled by KickDifferentModVersion (new Multiplayer section, on by default, only matters on the server).
  • Optional: RequireModToJoin (on by default). Also disconnects anyone who does not answer the version check within 30 seconds. Every version before this one cannot answer, so this is the only way to keep them out β€” but it also keeps out players who do not have the mod at all. It defaults to on in this mod specifically: since refinement odds and costs are changed by the mod itself, a player without it would gamble by different rules than everyone else on the server. Turn it off only if you're fine with that.
  • Crafting Station section renamed to Crafting. Shorter, and about to hold more than just the station setting (see next point).
  • New: BlacklistedItems, an upgrade blacklist. Some servers want specific items to never be refinable β€” a weapon that's already strong enough, an armor piece kept at its base stats for balance, whatever the reason. The new BlacklistedItems setting (Crafting section) takes a comma-separated list of item PrefabNames (same format as the recipes) that can never be refined at the Forge, checked before every other rule β€” not even MaxUpgradeLevel or anything else gets a say. Empty by default, so nothing changes until you list something. Comes with its own message, ItemBlacklistedMessage (under Local Messages), shown to a player who tries anyway.
  • New: the Hall of Fame. The eight standing statues around the Refinement Forge now guard eight server-wide rankings: highest level ever reached on a single item, most refinements in total, most successes, most failures, most items destroyed, longest streak of successes in a row, longest streak of failures in a row, and the single best item ever produced (with its owner). Look at a statue and, if the feature is on, [E] Consult the Hall of Fame appears β€” press it to open that ranking's panel.
  • The panel, in the game's own look: a title, an italic tag line, a boxed description of what the ranking 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 automatically, and a separate "Open profile" button opens it in the browser (nothing opens on its own from a click on a name). A single OK button closes it, and so do Esc, pressing E again, walking away from the statue, or the toggle below being switched off while it's open.
  • Tracked by Steam ID, not by character. The same person keeps their record across characters and worlds hosted on the same server. A player on a platform without a Steam ID is still tracked, just without a profile to link.
  • New: EnableHallOfFame toggle (Feature Toggles section, on by default). Set it to false and the eight statues stop responding β€” no hover text, no panel β€” while the database underneath keeps recording every refinement exactly as before. Set it back to true and the rankings are there, complete, the moment you do.
  • Persisted per world, next to the mod's own .cfg (BepInEx/config/OdinBet_ForgeOfPotential_HallOfFame/), saved at most every ten seconds while results keep coming in, and always on world unload / game close.
  • Fully translated. Every new string β€” the Hall of Fame panel included β€” ships in all 15 languages, resolved to each player's own Valheim language the same way every other message in this mod is.

Fixes and safety

  • Recipes follow the server. If a server turns the custom Idol recipes off (EnableCustomRecipes = false), players joining it no longer keep the recipes their own game had already loaded β€” they disappear, as the server intends.
  • Your own settings come back when you leave a server. Whichever way you leave β€” Logout, kick or the server shutting down β€” the mod puts your own settings back right away, so a server's choices (forge disabled, storm on, and so on) never follow you into singleplayer or another server.
  • Safer settings sync. Server and players need the same version of the mod. If a player's version is different, the server's settings are never applied halfway: they are ignored completely, the player simply plays with their own .cfg, and a warning is written in the log. (On a server with the version lock on β€” the default β€” that player is disconnected anyway.)
  • A failed refinement can no longer leave odds changed. If something goes wrong in the middle of a refinement, the Idol's own numbers are put back straight away, so later refinements are not affected.
  • Cleaner chat announcements. Player and item names that arrive from other players are cleaned before they are shown β€” no formatting tags and a length limit β€” so a modified game cannot fill everyone's chat with odd formatting or huge names.
  • The player can no longer walk around, swing weapons, or fight the camera behind an open Hall of Fame panel. Movement, actions and the mouse are handed to the panel while it's open, and given back the moment it closes.
  • Esc closes the panel instead of also opening the game's own menu behind it.
  • Every name and item that reaches the Hall of Fame panel is cleaned first β€” no formatting tags, no runaway length β€” same rule the chat announcements already follow.

Good to know

  • Each player's own game draws the storm, so only players with the mod installed see it.
  • 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 on a different version of the mod are disconnected by the version lock (on by default); if the lock is off, their game ignores the server's settings and uses its own .cfg.
  • A player disconnected by the version lock sees the game's normal disconnect screen; the reason is written in the server log. Every version before this one cannot answer the check, so the lock cannot tell an older version from a player without the mod at all.
  • The storm has bright, rapid flashes. If you or your players are sensitive to flashing light, leave it off (the default). A server's setting applies to everyone connected.
  • Hovering over the forge still shows the usual "use" hint. The message appears when the player presses the key.
  • Hall of Fame: the Hall of Fame panel needs a mouse. With a gamepad, Esc / B still closes it, but a row's name and the profile-link button cannot be selected.
  • Hall of Fame: which statue guards which ranking is fixed in this release (see the README) β€” the eight positions were matched to the ring around the Forge itself, not to any particular world, so this holds on every save.
  • Hall of Fame: its text is not synced through the .cfg β€” it lives in the Translations/*.json files (new Hall_* keys) instead, since roughly forty new synced settings for wording alone would have bloated the config file for a purely cosmetic thing.
  • Hall of Fame: on a single-player game, or the game hosting the world, there is no network round-trip β€” the database is read directly. Elsewhere, a client only ever asks the server for the ten rows of the ranking currently open, over the same authenticated per-connection channel the rest of this mod's networking uses β€” never a broadcast β€” and the server refuses to answer at all while EnableHallOfFame is false.

βœ… First release with this feature set β€” nothing to migrate

If you are updating from 1.0.6 or earlier, this is a big jump, but there is still no need to delete your .cfg. BepInEx adds every new setting above to your existing file automatically at the defaults listed (storm off, forge working, nothing blacklisted, Hall of Fame on and unrestricted). Nothing you already set is changed.

Replace OdinBet_ForgeOfPotential.dll and the whole Translations folder β€” every language file gained new lines (the forge-disabled and item-blacklist messages, plus the Hall of Fame panel's ~40 strings). Server and players should update together so everyone runs the same version.

1.0.6 β€” Default crafting station changed to the Forge

What changed

  • GlobalStation now defaults to $piece_forge instead of $piece_artisanstation.

Why

Every Idol recipe already carries its own progression gate: each tier requires the boss trophy for its biome (TrophyEikthyr for the wooden tier, all the way up to FrozenKingDrop for Bloodgold). GlobalStation is a single value shared by all 16 recipes, and it was set to the Artisan Table β€” a station that only unlocks after killing Moder, one of the last bosses before Ashlands.

That put every earlier tier behind a requirement far past its own: the wooden Idol only asks for the Eikthyr trophy and Tin (already a Black Forest material), yet the Artisan Table meant a player could not craft it until deep into the Mountain biome, long after they were meant to. The per-tier trophy requirements were doing the real gatekeeping; the station on top of them was fighting against that instead of matching it.

The Forge is unlocked right after Eikthyr, as soon as Copper and Tin are available β€” exactly the point the wooden tier's own trophy requirement already assumes. Using it as the single shared station lets every tier's own trophy decide when it becomes available, instead of an unrelated, much later requirement overriding all of them at once.

βš™οΈ No forced action, but check your .cfg if you want the new default

BepInEx never overwrites a setting you already have saved, so an existing GlobalStation = $piece_artisanstation in your .cfg is untouched by this update and keeps working exactly as before β€” nothing breaks either way.

If you want the new, better-aligned default, edit the line yourself:

GlobalStation = $piece_forge

Only a fresh install, or a deleted .cfg, picks up the new default automatically.

1.0.4 β€” Multi-language messages (JSON translation files)

What changed

  • All nine message templates can now show up in each player's own language. A new Translations/ folder ships next to the DLL with one JSON file per language, using the same keys as the Local Messages and Global Notifications settings (SuccessMessage, FailedMessage, BrokenMessage, ResetMessage, LocalSuccessMessage, LocalFailedMessage, LocalBrokenMessage, LocalResetMessage, MaxLevelReachedMessage).
  • Ships with 15 languages out of the box: English, German, French, Spanish, Italian, Japanese, Korean, Chinese (Simplified), Polish, Portuguese (Brazil), Portuguese (Europe), Russian, Turkish, Dutch, Swedish. Folder names match Valheim's own internal language names exactly, so adding another one later is just dropping a new <LanguageName>.json file into Translations/ with the same nine keys β€” no code changes needed.
  • Customized wording still always wins. If a message in the .cfg differs from its compiled English default β€” whether you changed it yourself, or a synced server enforced a custom value β€” that exact text is shown to everyone, exactly like every version before this one. Only unmodified defaults get auto-translated, and each player sees those in whatever language their own game client is set to.
  • Missing the Translations folder, or missing a specific language file, quietly falls back to English and then to the .cfg default. A warning is written to the log either way; nothing breaks.

βœ… No action required

Unlike 1.0.3, there is no need to delete your .cfg. No settings were added, renamed or removed β€” existing customized messages keep working exactly as before. Just make sure the Translations folder sits next to OdinBet_ForgeOfPotential.dll in BepInEx/plugins/.

1.0.3 β€” Prefix, open chat, and colored chat lines

What changed

  • Chat window now opens automatically. Global refinement notifications used to sit in the chat buffer unseen until a player manually opened the chat. The mod now forces the window open the same way pressing the chat key would, so nobody misses an announcement.
  • Colored chat lines. Global Notification messages now render with color: the server name in yellow, the refined values (player, item, level) in coral, the rest of the sentence in white.
  • Server name is now configurable. A new setting, GlobalNotificationPrefix (under Global Notifications), controls the name shown at the start of every announcement β€” default OdinBet. Change it once and it updates (and stays colored correctly) everywhere, since the four message templates now use a {Prefix} placeholder instead of the name being typed into each one.

⚠️ Action required: delete your .cfg

If you're updating from an earlier version, delete BepInEx/config/OdinBet.ForgeOfPotential.cfg before starting the game.

Why: BepInEx never overwrites settings you've already saved. Your existing SuccessMessage, FailedMessage, BrokenMessage and ResetMessage templates still have the old hardcoded name typed directly into them β€” they don't contain the new {Prefix} placeholder, so GlobalNotificationPrefix will have nothing to plug into and won't take effect on those lines.

Deleting the file lets the mod regenerate it from scratch with the new templates. It will be recreated automatically on next launch with every option back at default β€” just reapply whatever custom values you had.

1.0.2 β€” Update link discord

1.0.0 β€” First public release

⚠️ About this release

  • This is a first release. There may be bugs.
  • 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 problems before launch β€” among them a patch aimed at Character.Message when the method that actually runs is Player.Message, which made the message replacement fail completely silently, with no error in the log at all.
  • Automated review is not a substitute for testing by real players. If anything behaves differently from what your .cfg says, turn on VerboseLogging = true and report it on Discord with the log.

What's in this release

The gamble (Upgrade Settings section)

  • UpgradeSuccessChance: success chance as a percentage (0–100, or -1 to leave it alone).
  • FailureBreaksItemChance: what share of the failures destroys the item instead of only lowering its level.
  • LevelsLostOnFailure and MinimumLevelOnFailure: how many levels a failure takes, and the floor. The floor also fixes a Valheim bug that hands back a level 0 item when a level 1 item fails.
  • FailureAtMinimumLevelBreaksItem: promotes a failure to a break when the item is already at the floor.
  • BreakReturnsItemAtLevel1: instead of destroying the item and refunding metals (which cannot go through a portal), hand the finished item back at level 1.
  • BreakReturnIngredientsPercent: how much comes back when the item really is destroyed.
  • MaxUpgradeLevel and MaxLevelReachedMessage: a level cap. Vanilla Valheim deliberately has no cap at all at an upgrader station.
  • Cost scaling: CostStart, CostIncreasePerInterval, CostIncreaseInterval, CostScalingLevelStart.
  • Duration: UpgradeBaseDuration, UpgradeDurationIncreasePerLevel.

Recipes (Recipes and Crafting Station sections)

  • Craft recipes for the game's 16 Idols (Upgrader0Armor through Upgrader7Weapon), all configurable in Prefab:Amount format.
  • Every tier requires the boss trophy for its biome.
  • Tier 7 uses FrozenKingDrop (Sacrificial Blood): Valheim 1.0 ships no head trophy for Kall.
  • GlobalStation sets the station required for every recipe.
  • If a prefab does not exist in the build, the mod logs a warning and builds the recipe without that ingredient instead of cancelling the whole recipe.

Local messages (Local Messages section)

  • ReplaceGameUpgradeMessages plus the four corresponding texts.
  • Solves two problems at once: Valheim 1.0 builds that show a raw [msg_upgrader_failed] because the token has no translation, and the fact that the game writes its text before the mod finishes deciding the outcome β€” which made the wording disagree with the item the player received.

Global announcements (Global Notifications section)

  • Every refinement attempt becomes a line in every player's chat.
  • Separate text for success, level loss, destruction, and reset to level 1.
  • MinimumLevelToNotify filters out low-level refinements.
  • Only structured data crosses the network, never a finished sentence: item names appear in each player's own language, and nobody can broadcast arbitrary text by editing their own .cfg.

Forge area (Refinement Forge Area section)

  • AllowBuildingNearRefinementForge and RefinementForgeBuildRadius lift the no-build restriction around the Refinement Forge.
  • The exemption is not name-based: it requires an upgrader crafting station within the radius. Boss altars and other protected locations stay protected.

Server-side config sync

  • Own implementation, no external dependency. When the server has the mod, it enforces its values on every connecting client β€” in memory, without overwriting anyone's .cfg on disk. On disconnect, the client goes back to its own values.
  • All 52 settings are synced except VerboseLogging.

Robustness

  • Patches are applied class by class instead of via PatchAll(). If a target does not exist in your game build, only that one patch drops out (with a log warning) β€” everything else keeps working.

Known limitations

  • MaxUpgradeLevel blocks on the click; it does not grey out the craft button.
  • Refinement is resolved on the client, as in the base game. Config sync covers an edited .cfg, not a modified DLL.
  • Client and server need matching mod versions for sync to apply.