
OdinBet ForgeOfPotential
Full control over the Refinement Forge: percentage success chance, what failure does, cost, duration, level cap, 16 Idol recipes and server-wide chat announcements.π‘οΈ ODINBET β FORGE OF POTENTIAL
Gamble on your gear. Or lose it.
π¬ Join the Discord
What this mod does
Forge of Potential turns the Refinement Forge into a real gambling table. In vanilla Valheim, refining is a button that sometimes works, and you control almost none of it. With this mod, you set every number: the odds, what happens when you lose, what it costs, how long it takes, how far it can go, and what the whole server gets to hear about it.
Eight systems, each one switchable on its own:
| System | What it gives you |
|---|---|
| βοΈ The gamble | Success chance as a percentage, plus separate control over what a failure does: drop levels, destroy the item, or hand it back at level 1. |
| π Recipes | All 16 Idols (Protection and Battle, tier 0 through 7) get craft recipes, each one requiring the boss trophy for that biome. Cost scales with item level. |
| π’ Global Notifications | Every refinement becomes a line in every player's chat. Separate text for success, failure and destruction. |
| ποΈ Forge area | Optional exemption that lets you build inside the protected zone around the Refinement Forge. |
| βοΈ Lightning storm | An optional night-time show: lightning and other sky effects around the Refinement Forge. Off by default. |
| π« 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. |
π‘ Out of the box, nothing fails. UpgradeSuccessChance defaults to 100, so
refinements always succeed until you lower it. See the ready-made presets near
the end for setups that actually gamble.
Multiplayer: with the mod installed on a dedicated server, the server
enforces its config values on every client that connects (in memory β nobody's
local .cfg is overwritten on disk). The server also makes sure every player who
has the mod runs the same version (see Version lock). Without the mod on the
server, every player just uses their own .cfg.
β οΈ Read this before installing
- A large part of the code was reviewed with AI assistance, including
validating every patch target against the metadata and IL of the game's
assembly_valheim.dll. That caught real bugs, but it is not a substitute for real testing by real players. - In other words: there may be bugs. If you hit one, please report it.
- π Report bugs on Discord: https://discord.gg/aMkN89Cuas
- When reporting, it helps a lot to include your
.cfg, the BepInExLogOutput.log, and what you expected to happen. If you can, turn onVerboseLogging = true(theDebugsection) 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:
- Install BepInExPack Valheim.
- Copy
OdinBet_ForgeOfPotential.dlland theTranslationsfolder intoBepInEx/plugins/(side by side β theTranslationsfolder is what drives the per-player message language, see below). - Run the game once.
BepInEx/config/OdinBet.ForgeOfPotential.cfgis generated with every option commented. - Edit it and restart.
Dedicated server: same DLL, same BepInEx/plugins/ folder. Installing on
both sides is recommended β that way the server enforces the config and nobody
plays with different numbers.
How the game resolves a refinement (and where the mod steps in)
Worth understanding, because the settings make far more sense afterwards.
target = item's current level + 1
roll = random number between 0 and 1
if (idol's upgrade chance >= roll) -> SUCCESS: item comes back at the target level
else if (idol's break chance >= 1 - roll) -> BROKE: item is gone, some ingredients come back
else -> FAILED: item comes back one level LOWER
Note this: losing a level is already what a normal failure does in Valheim. "Destroying the item" is a separate, rarer branch. The mod does not rewrite that logic β it writes your configured numbers into the right fields before the craft and restores them afterwards. That is the safest possible approach: no game code is rewritten.
π Every setting
File: BepInEx/config/OdinBet.ForgeOfPotential.cfg
Everything is server-synced except VerboseLogging and the two server-only Multiplayer options.
π Feature Toggles section
Master switches. Turn a whole system off here if you only want the others.
| Setting | Default | What it does |
|---|---|---|
EnableRefinementForge |
true |
Turns the Refinement Forge on or off as a whole. With false, nobody can open it, refine gear, or repair anything there, and the craft buttons are greyed out. See π« Turning the forge off, further down. |
EnableHallOfFame |
true |
Turns the eight Hall of Fame statues on or off. With false, they stop responding β no hover text, no panel. The database behind the rankings keeps recording every refinement regardless; nothing is ever lost while this is false. See π Hall of Fame, further down. |
EnableCustomRecipes |
true |
Adds the craft recipes for all 16 Idols. With false, the mod touches no recipes at all β use this if you only want the gambling, or only the announcements. |
EnableUpgradeChanceAndCostTweaks |
true |
Master switch for the entire Upgrade Settings section (chance, failure, cost, cap). With false, the mod touches none of it and the game's own prefab values are used. |
EnableCraftDurationTweaks |
true |
With false, UpgradeBaseDuration and UpgradeDurationIncreasePerLevel are ignored and the game's own duration is used. |
π² Upgrade Settings section β the gamble
This whole section only applies while
EnableUpgradeChanceAndCostTweaks = true.
The odds
| Setting | Default | Range | What it does |
|---|---|---|---|
UpgradeSuccessChance |
100 |
0β100 or -1 |
Chance, in percent, that a refinement succeeds. 100 = never fails. 0 = always fails. 65 = succeeds roughly 65 out of 100 attempts. -1 = leave the idol's own chance untouched. |
FailureBreaksItemChance |
0 |
0β100 or -1 |
When an attempt fails, what percentage of those failures destroys the item instead of only lowering its level. 0 = never destroys. 100 = every failure destroys. -1 = use the game's own value. |
β οΈ FailureBreaksItemChance is a share of the failures, not of all attempts.
With UpgradeSuccessChance = 80 and FailureBreaksItemChance = 50, the real
outcome is: 80% success, 10% destroyed, 10% level lost.
What a failure does
| Setting | Default | Range | What it does |
|---|---|---|---|
LevelsLostOnFailure |
1 |
0β20 | How many levels the item drops on a failure that does not destroy it. 1 = vanilla (level 5 becomes level 4). 0 = the item keeps its level and the attempt only costs the ingredients. 2 or more = a harsher penalty. |
MinimumLevelOnFailure |
1 |
1β20 | Floor the item can never drop below through failure. Leave this at 1. Without this guard, the game hands back a level 0 item when a level 1 item fails β a bug in Valheim itself. |
FailureAtMinimumLevelBreaksItem |
false |
β | What to do when the item is already at the floor and there is no level left to take. false = it survives and the attempt only cost the ingredients. true = the failure is promoted to a break, and then BreakReturnsItemAtLevel1 / BreakReturnIngredientsPercent decide what the player gets. Ignored while LevelsLostOnFailure = 0. |
What happens when an item is destroyed
| Setting | Default | Range | What it does |
|---|---|---|---|
BreakReturnsItemAtLevel1 |
false |
β | false = vanilla: the item is destroyed and part of the ingredients is refunded. true = the item is not destroyed; the player gets the same item back at level 1 and no materials. |
BreakReturnIngredientsPercent |
-1 |
0β100 or -1 |
How much of the recipe's recoverable ingredients comes back when the item IS destroyed. 0 = nothing, 100 = everything. -1 = use the game's own value. Only matters if something actually breaks. |
π‘ Why you probably want BreakReturnsItemAtLevel1 = true:
refunded materials are metals and ores, and those cannot go through a
portal. A player who fails a refinement far from home is stranded with a pile
of metal and no way back. Handing the finished item back at level 1 keeps the
loss real while letting them portal home.
π Useful combination: FailureAtMinimumLevelBreaksItem = true +
BreakReturnsItemAtLevel1 = true β a level 1 item can never be lost outright;
it just comes back at level 1 and the idol is gone.
Level cap
| Setting | Default | Range | What it does |
|---|---|---|---|
MaxUpgradeLevel |
0 |
0β100 | Highest level an item can be refined to. 0 = no limit. |
MaxLevelReachedMessage |
(text) | β | Centre-screen warning shown only to the player who tried. Not broadcast. Empty = no message. |
Valheim deliberately skips its own max-quality check when the station is an upgrader, so without this mod there is no ceiling at all at the Refinement Forge.
β οΈ Honest caveat: the craft button in the UI stays enabled. The block happens on the click β nothing is consumed, but the button is not greyed out. Greying it out would mean patching the game's crafting UI, which breaks far more easily on a game update.
MaxLevelReachedMessage placeholders: {ItemName}, {Level} (the item's
current level), {MaxLevel}.
Ingredient cost scaling
The idol cost can grow as the item gets higher.
| Setting | Default | What it does |
|---|---|---|
CostStart |
1 |
Base idol cost per refinement. (Game default: 1) |
CostIncreasePerInterval |
1 |
How much the cost goes up each time the interval is reached. |
CostIncreaseInterval |
2 |
Number of levels between each cost increase. 0 disables scaling. |
CostScalingLevelStart |
6 |
Level at which scaling starts. Anything below 1 is set to 1. |
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 | What it does |
|---|---|---|
UpgradeBaseDuration |
2 |
Base refinement duration, in seconds. (Game default: 8) |
UpgradeDurationIncreasePerLevel |
1 |
Extra seconds per item level. (Game default: 1) |
π¨ Crafting section
| Setting | Default | What it does |
|---|---|---|
GlobalStation |
$piece_forge |
Station required to craft all the Idols. Accepts the station's m_name (e.g. $piece_workbench) or its prefab name. Empty = craftable by hand. |
BlacklistedItems |
(empty) | Comma-separated list of item PrefabNames (same format as the recipes below) that can never be refined at the Refinement Forge β no matter the level, the chance settings, or anything else. Checked before every other rule. Empty = nothing blacklisted. |
π« How the blacklist works: it is checked first, before MaxUpgradeLevel
or any other setting gets a chance to allow the attempt. If an item's prefab
name is on the list, the craft is blocked outright and nothing is consumed.
The player sees ItemBlacklistedMessage (under Local Messages) in the middle
of their screen. Example:
BlacklistedItems = SwordBronze,ArmorIronChest
π Recipes section β the 16 Idols
The 16 Idols (Upgrader0Armor β¦ Upgrader7Weapon) already exist in Valheim 1.0.
This mod only adds craft recipes for them.
Format for each recipe: PrefabName:Amount, comma-separated.
| Tier | Idol | Default recipe | Boss / Biome |
|---|---|---|---|
| 0 | Wooden Protection / Battle Idol | FineWood:20, Tin:10, GreydwarfEye:10, TrophyEikthyr:1 |
Eikthyr β Meadows |
| 1 | Bronze Protection / Battle Idol | Bronze:10, SurtlingCore:1, TrophyTheElder:1 |
The Elder β Black Forest |
| 2 | Iron Protection / Battle Idol | Iron:10, ElderBark:5, TrophyBonemass:1 |
Bonemass β Swamp |
| 3 | Silver Protection / Battle Idol | Silver:10, FreezeGland:5, Obsidian:5, TrophyDragonQueen:1 |
Moder β Mountain |
| 4 | Black Metal Protection / Battle Idol | BlackMetal:10, Needle:2, Tar:5, TrophyGoblinKing:1 |
Yagluth β Plains |
| 5 | Black Marble Protection / Battle Idol | BlackMarble:20, BugMeat:10, Carapace:10, TrophySeekerQueen:1 |
The Queen β Mistlands |
| 6 | Flametal Protection / Battle Idol | FlametalNew:10, CharredBone:15, TrophyFader:1 |
Fader β Ashlands |
| 7 | Bloodgold Protection / Battle Idol | Gold:10, Coins:40, FrozenKingDrop:1 |
Kall β Deep North |
That is 16 entries in the .cfg, one per idol: Wooden Protection Idol,
Wooden Battle Idol, Bronze Protection Idol, and so on through
Bloodgold Battle Idol.
π― Every tier requires the boss trophy. That is on purpose: refining gear of a given tier should mean you beat the boss of that tier.
β οΈ About tier 7: Valheim 1.0 ships no head trophy for the Deep North boss
(Kall). What he drops reliably is FrozenKingDrop (Sacrificial Blood), and that
is what went into the recipe. If a future update adds a TrophyFrozenKing, just
swap it in the .cfg.
π‘ Two practical notes:
- Boss trophies also unlock powers at the Sacrificial Stones. Spending one on an idol consumes it β but bosses can be summoned again and trophies stack to 20.
- If a prefab name does not exist in your build, the mod logs a warning and builds the recipe without that ingredient instead of cancelling the whole recipe. Worth checking the BepInEx log the first time you run it.
ποΈ Refinement Forge Area section
| Setting | Default | Range | What it does |
|---|---|---|---|
AllowBuildingNearRefinementForge |
false |
β | Lifts the no-build restriction around the Refinement Forge β the one that answers "a mystical force prevents building". |
RefinementForgeBuildRadius |
32 |
1β256 | How far the exemption reaches, in metres, from an upgrader crafting station. |
How the exemption works, and why it is safe: it is not based on the location's name. The mod checks whether a crafting station flagged as an upgrader exists within the radius of the spot being built on. That is exactly the Refinement Forge and never a boss altar. Altars, crypts and every other protected location keep their protection.
β οΈ Two honest caveats:
- This also allows terrain modification in that area (the game uses the same check for both).
- If the Refinement Forge can be built by players, a large radius turns into a portable "build anywhere" bubble. That is why the default is 32, not 200.
π« Turning the forge off
Want to close the Refinement Forge β for an event, for a while, or for good? Set
EnableRefinementForge = false (in the Feature Toggles section).
- Nobody can open the forge, refine, or repair there. The craft buttons are
greyed out, and a player who tries to use it sees a message in the middle of
the screen (
ForgeDisabledMessage, underLocal Messages). - Changed in-game (for example with Configuration Manager) or received from the
server, it applies right away, even for someone who already has the forge
window open. If you edit the
.cfgfile 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.
π 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.
| # | Statue | Ranking | Tracks |
|---|---|---|---|
| 1 | Standing alone | The Forge Master | Highest refinement level ever reached on a single item |
| 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 single best item ever produced, 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.
Tracked by Steam ID, not by character. The same person keeps the same record across characters, and across worlds hosted on the same server. A player on a platform without a Steam ID is still tracked (so they still show up and still get credit), just without a profile link.
The database is never the thing that gets switched off. EnableHallOfFame
(Feature Toggles section, on by default) only controls the statues:
with false they go silent β no hover text, no panel. Every refinement keeps
being recorded underneath regardless, so switching the Hall off for a while (an
event, a break from the feature) never loses data; set it back to true and
the rankings are complete again immediately.
π Security detail, same principle as the rest of this mod's networking: a client only ever asks the server for the ten rows of the ranking currently open, over the same authenticated per-connection channel the server config uses β never a broadcast. The server checks the request before answering, and refuses outright while the feature is off, so a modified client cannot get rankings that way either. Every name and item that reaches the panel is cleaned first (no formatting tags, capped length). On a single-player game, or the game hosting the world, there is no network round-trip: the database is read directly.
Fully translated, the same way every other message in this mod is: the
panel's text lives in the Translations/*.json files (not the .cfg β around
forty strings for wording alone would have meant that many new synced
settings) and shows up in each player's own Valheim language automatically.
β οΈ Two honest caveats:
- The panel is built for a mouse. With a gamepad, Esc / B still closes it, but a row's name and the profile-link button cannot be selected.
- Which statue guards which ranking is fixed β matched to the ring around the
Forge itself, not to any particular world, so it holds on every save, but it
is not currently configurable from the
.cfg.
βοΈ Lightning storm
An optional show for 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.
- 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.
- Off by default. Three settings, and that's all there is to set up.
- Starts when you get close. The show plays while you are within about 200 metres of the Refinement Forge, during the hours you choose.
- Independent of everything else. It keeps running whether or not the forge is disabled.
Section Forge Storm in the .cfg:
| Setting | Default | Range | What it does |
|---|---|---|---|
Enabled |
false |
β | Turns the storm on or off. Applies right away when changed in-game or by the server; after editing the .cfg by hand, restart the game. |
StartHour |
22 |
0β23 | In-game hour the show starts (24-hour clock: 0 = midnight, 6 = sunrise, 12 = noon). |
EndHour |
4 |
0β23 | In-game hour the show ends. It can be lower than StartHour: with the defaults it runs from 22:00, across midnight, until 04:00. |
π‘ Set StartHour and EndHour to the same number and the show runs all day
and all night β handy for testing, or for a forge that never sleeps.
β οΈ 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 three values apply to everyone connected.
β οΈ Flashing lights: the show has bright, rapid flashes. If you or your players are sensitive to flashing light, leave it off (the default) β and remember that a server's setting applies to everyone connected, who can't switch it off individually.
π 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.
RequireModToJoinkeeps them out β and everyone without the mod too. It's on by default for that reason; turn it off only if you're fine with some players playing by different rules. - Without the mod on the server, nothing is checked.
π¬ Local Messages section β centre-screen text
These are the messages only the player involved sees, in the middle of the screen β the player who refined, or the player who tried to use a disabled forge.
| Setting | Default | What it does |
|---|---|---|
ReplaceGameUpgradeMessages |
true |
Swallows the game's own text and shows one from the mod instead. false = leave the game's text exactly as it is. |
LocalSuccessMessage |
(text) | Success. |
LocalFailedMessage |
(text) | Failed and the item lost levels. |
LocalBrokenMessage |
(text) | Failed and the item was destroyed. |
LocalResetMessage |
(text) | Failed, but the item came back at level 1. |
ForgeDisabledMessage |
(text) | Shown when someone tries to use the Refinement Forge while EnableRefinementForge is false. Default: "The Refinement Forge is disabled." Empty = no message. |
ItemBlacklistedMessage |
(text) | Shown when someone tries to refine an item listed in BlacklistedItems (see the Crafting section). Default: "This item cannot be refined here." Empty = no message. |
Placeholders: {ItemName}, {Level} (the level that was attempted),
{PreviousLevel}, {ResultLevel} (the level the item actually ended up at).
Why this is worth leaving on, even if you like the game's wording:
- 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. - The game writes its text before the mod has finished deciding the
outcome. With
BreakReturnsItemAtLevel1or aLevelsLostOnFailureother than 1, the game's wording no longer matches the item the player actually received. The mod's text does.
π’ Global Notifications section β server-wide
Every refinement becomes a line in every player's chat.
| Setting | Default | What it does |
|---|---|---|
EnableGlobalUpgradeNotifications |
true |
Turns the whole system on or off. |
NotifyOnSuccess |
true |
Announce successful refinements. |
NotifyOnFailure |
true |
Announce failures where the item only lost levels. |
NotifyOnBreak |
true |
Announce failures that destroyed the item (or returned it at level 1). |
MinimumLevelToNotify |
1 |
Only announce if the attempted level is at least this. 1 announces everything; raise it to 4, say, to keep low-level refinements out of chat. |
SuccessMessage |
(text) | Chat line on success. |
FailedMessage |
(text) | Chat line on a failure with level loss. |
BrokenMessage |
(text) | Chat line when the item is destroyed. |
ResetMessage |
(text) | Chat line when the item came back at level 1. |
Placeholders: {PlayerName}, {ItemName}, {Level} (attempted level),
{ResultLevel} (final level).
π¬ Heads-up: each announcement also opens the chat window for every player, so
nobody misses it. On a busy server, raise MinimumLevelToNotify or turn
EnableGlobalUpgradeNotifications off if that gets noisy.
π Security detail: what travels over the network is structured data only
(player name, item token, levels, outcome) β never a finished sentence. Every
client renders the text locally. That means two good things: the item name shows
up in each player's own language, and nobody can broadcast arbitrary text
by editing their own .cfg.
π Multi-language messages
All eleven message templates above β the six Local Messages (including
ForgeDisabledMessage and ItemBlacklistedMessage), the four
Global Notifications, and MaxLevelReachedMessage β can show up in each
player's own language, with zero .cfg changes required.
How it decides what to show, for each message:
- Customized wording always wins. If the
.cfgvalue differs from its compiled English default β whether you edited it yourself, or a synced server enforced a custom value β that exact text is shown to everyone, in whatever language you wrote it in. This is exactly how every version before this one behaved. - Otherwise, it's translated per player. If a message was never touched (still at its English default), each player sees it in whatever language their own Valheim client is currently set to β automatically, nothing to configure.
- Fallback chain if a translation is missing: the player's language β
English β the English text already baked into the
.cfgdefault. Never an empty message, never a crash β just a warning in the log.
Included out of the box (15 languages): English, German, French, Spanish, Italian, Japanese, Korean, Chinese (Simplified), Polish, Portuguese (Brazil), Portuguese (Europe), Russian, Turkish, Dutch, Swedish.
Where it lives: BepInEx/plugins/.../Translations/<LanguageName>.json β
one flat file per language, using the same eleven keys as the .cfg settings
(SuccessMessage, FailedMessage, BrokenMessage, ResetMessage,
LocalSuccessMessage, LocalFailedMessage, LocalBrokenMessage,
LocalResetMessage, MaxLevelReachedMessage, ForgeDisabledMessage,
ItemBlacklistedMessage). File names match Valheim's own
internal language names exactly (Portuguese_Brazilian, Portuguese_European,
etc.) β that's also how the mod knows which file corresponds to a given
player's game language.
π‘ Adding a language yourself: drop a new <LanguageName>.json in
Translations/ with the same eleven keys, matching the exact language name
Valheim itself uses internally. No recompiling, no code changes.
π Debug section
| Setting | Default | What it does |
|---|---|---|
VerboseLogging |
false |
[Local β the one setting the server does NOT sync] Writes two lines to the BepInEx log per refinement, with the levels before and after, the outcome, and the chances that were applied. |
Turn this on if a result does not match what your .cfg says. The log shows:
Refine start: 'SwordIron' level 4 -> 5, upgraderResource=True, successChance=50%, ...
Refine result: 'SwordIron' 4 -> 3 (LevelLost) [game text replaced: "..."]
If the Refine result line does not appear, the mod's hooks are not running
at all β the problem is the patch, not the config. Those two lines are the most
useful thing you can attach to a bug report on Discord.
π§© Ready-made config presets
Hardcore (a real gamble):
UpgradeSuccessChance = 50
FailureBreaksItemChance = 25
LevelsLostOnFailure = 1
BreakReturnsItemAtLevel1 = true
FailureAtMinimumLevelBreaksItem = true
Painless (only the cost matters):
UpgradeSuccessChance = 100
FailureBreaksItemChance = 0
LevelsLostOnFailure = 0
Risky, but I never lose the item:
UpgradeSuccessChance = 70
FailureBreaksItemChance = 0
LevelsLostOnFailure = 1
MinimumLevelOnFailure = 1
Forge closed (nobody can refine or repair):
EnableRefinementForge = false
Some items are off-limits, everything else refines normally:
BlacklistedItems = SwordBronze,ArmorIronChest
Just the Idol recipes, nothing else touched:
EnableUpgradeChanceAndCostTweaks = false
EnableCraftDurationTweaks = false
EnableGlobalUpgradeNotifications = false
EnableCustomRecipes = true
Compatibility and known limitations
- Valheim 1.0 with BepInEx 5.
- Client and server need the same mod version. On a server with the mod, the
version lock (see Version lock) disconnects players who have a different
version. Where it cannot act β the lock switched off, or a version older than
1.1.0 that cannot answer β a mismatched player is not disconnected: their game
ignores the server's sync packet (with a log warning) and uses its own
.cfg. MaxUpgradeLeveldoes not grey out the craft button; it blocks on the click.EnableRefinementForge = falseonly 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. - 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, an optional night-time lightning storm, a switch to shut the forge down completely, and its own server-side configuration synchronization.
Found a bug? Got an idea? Want to show off a refinement that went horribly wrong?
π¬ https://discord.gg/aMkN89Cuas