Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
EpicLoot ProgressionFix
EpicLoot 0.14.13 crafting progression and rune range fixes, StarLevelSystem fixes, blocking after armor, combat effect fixes, long-range Andvaranaut, server-wide chat and optional Discord announcements. Requires server and clients.
By Tenemo
| Last updated | 28 minutes ago |
| Total downloads | 2869 |
| Total rating | 0 |
| Categories | Mods Tweaks Server-side Client-side AI Generated Deep North Update |
| Dependency string | Tenemo-EpicLoot_ProgressionFix-0.1.52 |
| Dependants | 1 other package depends on this package |
This mod requires the following mods to function
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.2350ValheimModding-Jotunn
Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.
Preferred version: 2.30.1RandyKnapp-EpicLoot
Adds loot drops, magic items, and enchanting to Valheim.
Preferred version: 0.14.13README
EpicLoot Progression Fix
An unofficial compatibility add-on for EpicLoot 0.14.13. Keep the original EpicLoot installed. This package applies Harmony patches; it does not replace or redistribute EpicLoot's DLL, assets or configuration.
Enchantment ranges and item operations
Rune extraction caps the extracted value at the effect's own range before applying the rune's power: the explicit value override when present, then the named item's override, then the effect's normal rarity range. EpicLoot caps it at the rarity's ordinary maximum, below the range of many named items' effects. Extracting the last effect from a named or set item without sockets keeps its named or set identity; EpicLoot turns it back into a plain item. Other extractions follow EpicLoot.
Holding Shift over an item in any enchanting-table list shows the same effect details as in the inventory. EpicLoot builds each row's tooltip once, when its list is filled, and reads Shift only then, so the add-on rebuilds the hovered row's tooltip the same way whenever Shift is pressed or released.
An effect whose definition is missing shows as Effect definition unavailable in detailed tooltips and as its name and value elsewhere, where EpicLoot would show an empty line or an invented range. Invalid or unresolved required tempering materials block that rarity's recipe and are reported in the log. Temporary effect removal while computing available replacements is always restored, including on errors. Existing item values are not automatically rerolled or normalized.
Automatic mead consumption
Automatic Mead Consumption checks actual remaining health after damage, including damage-over-time ticks. It consumes at most one eligible health-restoring consumable from the local player's inventory per damage event, only while alive and at EpicLoot's Health Critical threshold (30% by default, adjusted by equipment). Normal cooldown/category restrictions and Instant Mead still apply. Hits that leave health above the threshold or cause no health loss consume nothing. This is healing after a surviving hit, not protection against a lethal hit.
Blocking after armor
The game checks a block or parry against the full incoming hit and applies the player's damage resistances and body armor only afterwards. A hit that armor would reduce to a fraction therefore still filled the stagger bar, broke the guard and cost block stamina at full size. The add-on applies the player's resistances and body armor first, so blocks and parries work against the damage that is left. With pierce-resistant root armor, a 120 pierce hit that the armor reduces to about 30 is now parried as 30.
Resistances and armor still count once. Unblocked hits, hits from behind and broken guards do the same damage as before. A successful block now subtracts from the reduced hit, so what gets through changes: usually less than before, but a strong block against a big hit with light armor can let through somewhat more. EpicLoot's resistance enchantments already applied before the block and are unchanged. EpicLoot's on-block physical-to-elemental conversion runs before the resistances, so elemental resistances apply to the converted part (see combat effect fixes). Only players are affected, and the change runs on each player's own game. Startup fails with an explicit error if Valheim's hit order changes.
Skill above 100
Every attack's damage is multiplied by a roll that depends on the attacker's skill: EpicLoot rolls between 15% below and 15% above a centre that rises from 40% at skill 0 to 100% at skill 100. The game drops the level above 100 when it turns the level into a skill factor, so set and trinket bonuses such as the root armor's +15 Bows did nothing at 100; EpicLoot continues the line above 100 only for its own skill bonuses. The add-on continues it with the whole level, trained plus the game's and EpicLoot's bonuses: each point above 100 adds 0.6% to the centre, so skill 115 rolls 94–124% and 150 rolls 115–145%. Levels up to 100 are unchanged.
This covers every damage roll: melee weapons, bows and crossbows, staffs and their area effects, and tool hits on trees and rocks, which roll with Woodcutting or Pickaxes. Knockback follows the same roll. An area effect that takes an attack's hit, such as an explosion that deals the damage of the projectile that set it off, rolls the skill a second time as the game always has; that second roll keeps the ceiling of skill 100, EpicLoot's bonuses included, so the level above 100 counts once. Stamina and eitr costs and every other skill effect keep the game's factor. Damage tooltips show the new range, and in the skills panel weapon and tool skills include the game's bonuses above 100, which their damage now uses.
The game's bonuses are the root and lox fur sets' +15 Bows, the Fenris set's +15 Unarmed, and +20 from the Wolf Sight (Bows, Spears), Bracelets of the Brave (Clubs) and Jörmundling (Elemental and Blood Magic) trinkets while their adrenaline effect lasts. With EpicLoot's weapon skill enchantments and the melee shard, a trained 100 reaches about 150 to 160 at most, 30% to 36% more average damage than at 100. The roll runs on the attacker's game. Startup fails with an explicit error if EpicLoot's damage range changes.
EpicLoot skill bonuses
EpicLoot adds its skill bonuses, such as +Blood Magic on a staff or +Movement Skills on legs, to the skill factor that damage, costs, movement and stealth read, and to the levels the game reads for hits, parries and summons, such as the Staff of Protection's shield and the Dead Raiser's skeletons. The add-on counts them in two more places:
- SkilledCarryWeight's carry weight: with the pack's settings, each point of +Movement Skills adds 1 kg, 0.25 kg each for Run, Jump, Swim and Sneak, and each point of +Axes or +Pickaxes adds 0.25 kg through Woodcutting or Pickaxes. It is worked out on the player's own game.
- The tooltip of a weapon not in hand shows the status effects it gives, such as the Staff of Protection's shield, with the skill bonuses as if it were equipped.
Startup fails with an explicit error if one of these readers changes.
Combat effect fixes
The add-on corrects these EpicLoot 0.14.13 combat effects. Their configured values are unchanged.
- CoinHoarder: up to 1,000 coins the bonus uses the rolled value and grows with the coin count to the value at 1,000 coins, where the existing curve continues without a jump. Before, every roll gave the same bonus there.
- Wager: when another player's game controls the target, the refund for a killing hit also counts the sneak-attack bonus, weak spots and a player's body armor, which EpicLoot leaves out of its estimate of the damage the hit will deal. A block or a LifeLink boss passing on part of the hit cannot be foreseen there.
- Chain lightning: every jump deals the first strike's damage, which scales with the rolled value; jumps used to deal the full base damage whatever the roll. Jumps also use EpicLoot's chain chance, 80% for the first jump and a fifth less for each further one, which the game ignored.
- Bows and crossbows: the weapon's enchantments and shards also apply to the arrow's or bolt's damage, so percentage bonuses deliver their listed value on the whole shot. This makes enchanted bows noticeably stronger. The coin and dodge bonuses still count once.
- Triple and double shot: each of a triple shot's three arrows or bolts, and each of the two casts of a staff's double shot, deals EpicLoot's configured share of a normal shot, the
Damagevalue in the TripleBowShot or DoubleMagicShot effect's config (0.4 and 0.66 by default), on its whole hit: weapon, upgrades, ammunition and enchantments. Effects a cast spawns with damage of their own, such as the Staff of the Wild's roots, are not cut, as before. EpicLoot cuts only the weapon's base damage, so the upgrades and the ammunition keep their full damage on every projectile. - Weapon tooltips: a weapon you are not holding shows its damage and damage range as if equipped: with your other gear's effects and shards, and without those of the items it would replace.
- Falls: a fall neither triggers nor is reduced by EpicLoot's damage-taken effects: Eitr Shield, Coinplated, night damage reduction, OffSet, adrenaline, Bloodrage, Forest's Aid and Icy Retribution. They used to spend coins and eitr and start cooldowns. EpicLoot's fall damage reduction and automatic mead consumption still apply.
- Yagluth meteor and Eikthyr's charge: they take their share from a hit before crit and double damage, so a crit no longer multiplies them too.
- Shields that cannot parry: tower shields and other blockers without a parry bonus no longer get EpicLoot's parry bonus to block power and block force at the start of every block.
- Feint: does not roll while you block the hit with stamina left, so blocks and parries keep their stagger, experience and adrenaline. Without stamina the guard breaks anyway, so Feint still rolls.
- Physical-to-elemental conversion on block: a blocked hit converts its on-block share before resistances and armor, so elemental resistances apply to the converted part. EpicLoot converts it after the block, which now comes after them (see blocking after armor).
- Bulk Up: the regeneration penalty takes its share of the health regeneration left after Wet, Cold and every other effect, as its tooltip reads. EpicLoot subtracted it from what was left, so −30% turned 50% regeneration into 20% and could stop regeneration entirely; it now turns 50% into 35%. It also takes its share of regeneration bonuses: +30% regeneration with −30% Bulk gives 91%, where it gave 100%.
Each fix runs on the game of the player whose hit or equipment is involved. Startup fails with an explicit error if a patched EpicLoot or Valheim method changes.
Andvaranaut tracking
EpicLoot's Andvaranaut ring pings only within its Andvaranaut Range (20 m by default) of a treasure chest or bounty target, and a world without a map cannot show the circles that treasure maps and bounties mark. The add-on leads the wearer to their nearest unfound treasure map or accepted bounty from farther away, with the ring's far ping:
- Farther than
[Andvaranaut] Search radius(1,000 m by default), it pings when the wearer looks withinFacing angle(30° by default) of the target's direction, no sooner than 1.5 seconds after the previous ping, then every 5 seconds while they keep facing it. - Within the search radius, it checks every 5 seconds and pings when the wearer has come at least 2 m closer, and closer by at least half the distance they walked. Walking within about 60° of the target's direction pings; standing still and teleports never do.
- Within EpicLoot's range of any treasure chest or bounty target, EpicLoot's own pings take over unchanged, faster as the wearer gets closer.
- Targets farther than
Max rangeare ignored, and with none within it the ring stays quiet; one that comes into range can ping straight away. The default, 0, sets no limit.
The ring aims at the centre of the circle EpicLoot would draw on the map, and at the chest or the bounty's creatures once they load nearby. The target nearest by that position wins, so the ring can switch targets as the wearer moves; a new target restarts the walking comparison. EpicLoot removes a bounty creature's beacon when it takes damage, which silenced its ring for the rest of the fight; the add-on keeps the beacon, so EpicLoot's pings continue within its range and the ring keeps leading to a creature that runs off. Opened chests and completed bounties are no longer tracked. The wishbone is unchanged.
All three settings are synchronized from the server; with Search radius and Facing angle at 0 the ring pings only within EpicLoot's range. Tracking runs on the wearer's game while the ring is worn, and nearby players hear the pings as they hear the wishbone's. Startup fails with an explicit error if EpicLoot's finder, its beacon removal or the game's beacon list changes.
Bounty targets
EpicLoot gives a bounty's creatures extra health through StarLevelSystem (SLS) as they spawn: three times as much for a gold bounty's target, twice as much for an iron bounty's and one and a half times for adds (GoldHealthMultiplier, IronHealthMultiplier and AddsHealthMultiplier in its adventure data). SLS kept that bonus only in the stats the spawning player's game worked out, so a bounty creature lost it once it was loaded again or another player's game took it over. EpicLoot also marks a bounty's target as a boss, for its boss health bar, and SLS then scaled it as a boss: +2% damage per star instead of +20%, boss modifiers instead of ordinary ones and, after a reload, +30% health per star instead of +75%.
The add-on puts the bonus back from the bounty the creature carries whenever SLS works out its stats, on every player's game, and SLS scales, modifies and evolves a bounty's target as the ordinary creature it is. The bonus multiplies the creature's base health, and each star adds 75% of the base on top, so a 2-star troll for a gold bounty has 600 × (3 + 0.75 × 2) = 2,700 health, where a reload used to leave it 960, and hits 40% harder than an unstarred troll instead of 4%. The boss health bar stays, and the creature's level and the bounty's rewards are unchanged. Bounty creatures already in the world get their bonus back the next time they load, keeping the damage they have taken and the modifiers SLS already gave them. Without StarLevelSystem the add-on leaves bounties to EpicLoot. Startup fails with an explicit error if the SLS members it uses change.
Personal favorites
With Quick Stack - Store - Sort - Trash - Restock 1.4.15 installed, Alt + left-click favorites only the selected equipment piece, including ordinary equipment that may later be enchanted. EpicLoot objects with rolled effects, such as etched runestones, are also individual favorites. Ordinary ammunition, food, materials and unidentified bundles remain type-wide favorites. Alt + right-click still protects the inventory slot. Existing keybind overrides are respected.
Equipment markers belong to the character that marked them; another player receiving the item does not inherit that favorite. Markers use the item's saved custom data, independent of enchantments, quality or durability. Type-wide favorites, protected slots and trash-type rules are saved in the character, outside Gale's configuration. With ServerCharacters, they follow the loaded server character and its normal save/restore cycle. An individual favorite takes precedence over a trash-type rule. Sorting, storing, restocking, trashing, borders, tooltips and Sacrifice use the same item-aware checks. Reset all favorites invalidates this character's equipment markers even on stored items. Favorites do not introduce a general ban on manual transfers or crafting consumption.
If a character's saved favorites cannot be read, that character gets an on-screen notice, every item counts as favorited and the saved data is left unchanged until corrected. Other characters are unaffected.
Characters without saved personal favorites start with empty item favorites, protected slots and trash rules. Legacy Quick Stack .dat files are intentionally ignored, including malformed files. Existing favorites already saved by this add-on remain intact. Set personal favorites again after the first update; subsequent profile updates and reconnects retain the character-saved choices.
Identifying a type-favorited unidentified bundle creates new, initially unfavorited equipment. Personal choices persist on normal character/world saves, not immediately to disk on every click; restoring an older save also restores its older favorites.
Progression behavior
When EpicLoot's Item Drop Limits is PlayerMustHaveCraftedItem, craftable equipment requires a positive crafting count for the character rolling the item, or a one-time legacy credit described below. Picking up, borrowing, buying, identifying or upgrading equipment does not unlock future rolls. Drops remain shared; this mod does not create personalized loot for each recipient.
On an existing character's first load with 0.1.15 or later, previously held craftable equipment receives permanent legacy credit, including items no longer carried. This intentionally preserves unlocks even when old crafting records are missing or the item was only borrowed. Credits and a completion marker are saved with the character, after ServerCharacters loads its authoritative profile. Later pickups never enter that saved set. New characters start with an empty marker, including ServerCharacters template characters. Genuine crafting statistics and achievements are not changed. Back up character saves before updating; restoring an older save restores its older migration state. Invalid migration data is reported on screen for that character only, whose craftable equipment then stays ineligible until it is corrected; it is not overwritten with newer pickup history. ServerCharacters integration targets 1.4.17 when installed.
Equipment finished at a cooking station, such as Nord gear from the Frost Foundry, counts as crafted by whoever crafted its cast. The station credits its finished item to the player whose game owns the station, which need not be the cast's crafter, so that statistic counts only if the finished item also has its own creation recipe.
The purchased Fishing Rod retains its held-item requirement only while it has no creation recipe. A mod-added creation recipe makes it subject to crafting history. Missing recipes for other equipment do not bypass the gate.
- Identification previews enumerate the same eligible replacements as actual rolls, and the Identify button is available only when that list is not empty.
- Equipment fallbacks and gambling stock use the same crafting/legacy eligibility and original classification ceiling. Unclassified equipment cannot silently bypass the restriction.
- Unidentified conversion retains the selected
TierNequipment pool's ceiling with Meadows as its minimum. Tier-zero drops use original Unidentified Meadows Gear and the normal Meadows identification pool and costs. Ordinary identified drops keep their existing pools. Missing item classification still uses normal item resolution. - Saved
None_<rarity>_UnidentifiedStarter Gear IDs resolve to the original matching Meadows prefab when character, chest or tombstone inventories load; all serialized item data follows the normal game load path. Loose world-item prefab IDs convert during world loading, including unloaded areas. Inventories persist the converted IDs on their next normal save; unopened containers convert when loaded. No custom Starter Gear prefabs or separate costs remain. Other saved unidentified tiers are unchanged. - The standard skills panel combines vanilla status/set bonuses with equipped EpicLoot skill bonuses in its existing bonus label and total bar. Weapon and tool skills include the game's bonuses above 100, which their damage uses (see skill above 100); other skills show at most 100 plus EpicLoot's bonus, the level their effects use. Fractional trained levels no longer make a +15 bonus display as +14. Trained levels and Fortify Skills annotations stay separate; the panel changes no gameplay calculation. Auga retains EpicLoot's own renderer. The pack uses BetterUI with its custom skills panel disabled.
- Unidentified loot saves its network item data through a delegate to the game's private
ItemDrop.Savemethod. - Sacrifice and Augment list only eligible items in your personal inventory, which includes the equipment and quick slots. Items in nearby chests or external inventory providers cannot be selected for either. Other tabs, including Identify, and nearby material access, augment costs included, are unchanged.
- Enchanting-table cost icons show available / required material amounts, with insufficient amounts in red, at 1.5 times EpicLoot's base text size; a count too long for the icon shrinks back toward the base size. Counts of 10,000 or more show whole thousands, rounded down (12480 as 12k); the red color and the tooltip use the exact numbers. Hovering retains the item tooltip and adds the carried/nearby-storage breakdown. Counts use EpicLoot's own inventory-provider path and refresh twice per second while visible, so CraftyBoxes' range, access and pull rules still apply. Item selection, sacrifice inventory restrictions, output quantities and resource consumption are unchanged.
- Quick Stack - Store - Sort - Trash - Restock favorites are protected in Sacrifice, including individual equipment, favorited item types and favorited slots. This integration targets version 1.4.15 and does not require installing that mod if you do not use it. If the mod is present but its favorite state cannot be read, Sacrifice blocks the affected selection and reports an error rather than ignoring favorites.
- The selection is rechecked immediately before sacrifice. If any item was moved, protected, or became otherwise ineligible during the countdown, the whole operation is cancelled without destroying items or awarding materials.
The add-on does not select a gating mode for you, rewrite loot pools or configured drop chances, change rarity/affix settings, or alter crafting costs. Existing configuration patches still control those choices. Recipe-based and boss-based gating modes retain their existing progression behavior.
Crafting gating gives a fresh character no eligible craftable equipment until they craft it. Type-name loot entries such as Swords are supported. If a roll has no local player, the add-on preserves EpicLoot's upstream fallback behavior because no player's crafting history can be evaluated.
Source-tier preservation assumes vanilla equipment tiers: 0 and 1 = Meadows for unidentified gear, 2 = Black Forest/Ocean, 3 = Swamp, 4 = Mountain, 5 = Plains, 6 = Mistlands, 7 = Ashlands, 8 = Deep North. Custom biome orders or differently numbered TierN pools need a compatibility review; they are not automatically inferred from the player's physical location.
Star-dependent creature drops
Vanilla normally uses a countdown for drop chances at or below 30%. That countdown is keyed by item prefab and probability; a different probability resets it. Star-dependent chances can therefore repeatedly reset the countdown when differently starred creatures are killed.
The add-on bypasses that countdown only for native CharacterDrop entries whose level multiplier is enabled, or Drop That entries with an explicit minimum/maximum level condition. Those entries use the game's existing independent random roll at their already-calculated chance. The global NoPseudoDrops setting is not changed. Ordinary unscaled, unconditioned drops retain vanilla behavior, and guaranteed drops remain guaranteed.
This works with the pack's trophy, rare-material and shaman queen-bee rules without copying their chances into this mod. It does not add loot or change quantities. StarLevelSystem (SLS) custom tables already use direct rolls and are unaffected. Drop That support is optional and was checked against version 3.1.6; unsupported metadata produces an explicit startup error.
StarLevelSystem's SoulEater modifier raises a creature's saved damage multiplier for every creature that dies within 5 m, and had no limit. The add-on stops that growth at 0.5 above the creature's base damage multiplier, +50% damage for an ordinary creature, and creatures that already saved more deal damage at that cap. The heal and the growth in size are unchanged. Startup fails with an explicit error if the SLS members it uses change.
StarLevelSystem scales a creature's damage by its stars and saved damage multiplier through the game's per-level attack factor, which only its strikes, area attacks and fired projectiles use. Area effects and projectiles with damage of their own stayed at base damage, although SLS's elemental affixes still added to their hits: those an attack spawns, such as a boss's lingering clouds, the explosions creatures such as lava blobs leave when they blow up or die, Fader's fissures and walls of fire, and effects built into a creature, such as a frost wisp's aura or the damage a lox or an asksvin deals by running into you. The add-on applies the same factor to them, so these effects of starred creatures now hit harder, by +20% per star with the pack's settings. A built-in effect uses the creature's factor at the moment it hits. Other players' copies of a lingering effect use the factor the controlling game saved on it. An effect set up after its creature has died or unloaded stays unscaled. Players' effects are unchanged, and so is StarLevelSystem's DeathNova, whose damage SLS already sets from the creature's level.
With independent rolls, a configured 25% chance means 25% on each kill, with no accumulated guarantee. Long unlucky streaks remain possible.
Optional Rested timing
BepInEx/config/valheim.epiclootprogressionfix.cfg contains [Resting] Rested delay multiplier. The default 1 preserves vanilla timing. Set 0.5 to activate Rested twice as quickly: 10 seconds instead of the installed game's 20 seconds, subject to the normal update tick. The server synchronizes this setting to clients. Fire/shelter/resting requirements, comfort, regeneration and buff duration are unchanged. This affects only the delay for applying Rested, not elapsed time for other status effects.
Crafting skill bonus
Vanilla gives stackable items crafted at a station with a skill a chance of skill level ÷ 100 × 25% per craft to add one extra item. Crafting covers the workbench, forge, black forge, artisan table, galdr table and stonecutter; Cooking covers the cauldron, mead ketill and food preparation table. A successful roll now adds another full craft's output instead: 20 arrows, bolts or bronze nails, 10 iron nails, 5 bronze from the five-bar recipe, 4 sausages. One-item recipes still gain one item, and raw fish gains the yield of the fish used. The chance, stations and eligible items are unchanged, the floating text shows the amount added, and grill/oven cooking keeps its separate one-item bonus.
Every successful roll adds exactly one craft. Vanilla multi-crafting added the running total instead, so a second success in one batch added two bonuses, and AAA_Crafting 2.1.10 replays that escalation across queued crafts by silently adding one more item for each earlier success in the run. Both escalations are removed. If the extra output would not fit in the inventory, the craft completes without its bonus instead of being skipped as in vanilla. If AAA_Crafting's streak patch changes, startup reports an explicit error.
First-join character enrollment
With ServerCharacters 1.4.17, the server can import existing campaign characters automatically for a private list of Steam accounts. Put one Steam_<SteamID> per line in the server save directory's characters_local/enrollment-accounts.txt. Leave Backup only mode off. Accounts outside that list retain ServerCharacters' fresh-character requirement; a saved account is never imported again.
Players select their existing campaign character and join normally. Before the server releases the join handshake, the add-on requests the character's saved profile, checks the authenticated account, selected name and history of this world, and preserves the original serialized data under characters_local/initial-imports/<account>.fch. It then creates the normal server character file and follows ServerCharacters' authoritative load path. Items, skills, crafting history and custom data are not rewritten during import. Dyrr binds the loaded character to the joined world through its usual path. This does not prove the character was never edited on its owner's computer; it is a one-time trusted migration of existing players.
A wrong character, incomplete upload or existing import is refused without replacing an existing server save. The initial backup and the server character file are each written in full to a temporary file and then moved into place without replacing anything, so an interruption never leaves a partial file. A failed write retains the initial backup for owner recovery; restore that file before allowing another attempt. If the enrollment list or character directory cannot be read during a join, the player is refused with a message instead of receiving a fresh character. Include the enrollment list and initial-imports in stopped-server backups.
Persistent world bindings
With Dyrr 1.4.2 installed, bindings live in BepInEx/dyrr-state/homes.dat in each local profile. Gale scans every file inside its config directories and common text extensions elsewhere; this .dat file outside config is excluded from both export and pull cleanup. Existing dyrr-home.txt, threshold-home.txt or boon-home.txt rows are adopted only when durable state is absent, and their original files are archived privately beside it with .dat names. Later imports cannot replace established local bindings. Back up the entire profile, including this directory. Existing accounts can use the first-join enrollment above; after the saved character loads, Dyrr binds it to that campaign through its normal client path. An already conflicting home still needs an owner-approved correction; storage migration does not silently change it. Use dyrr forget or edit homes.dat for an owner-approved correction, even if an upstream message names the old path.
Personal HUD position
With FedoHud 1.0.0, the death/weight/armor block starts 500 UI pixels below its normal automatic position, retaining its minimap-centered horizontal alignment. Dragging it saves the coordinates in local Unity PlayerPrefs outside the Gale-managed config directory, keyed by the local profile path. Later config imports/pulls cannot overwrite that saved position. FedoHud's Reset positions action returns this block to the lower default and saves it again. Existing custom config coordinates are adopted when still present on first load; coordinates already erased by an earlier import cannot be recovered. Preferences are local to this computer/profile, not cloud-synced or character-bound. Other HUD blocks are unchanged.
Render Limits zones
With Render Limits on the server and the client, the server sends each player's objects as far as that player's Render Limits zones. Render Limits 1.16.0 sends them to the server only when a zone setting changes in play; it also tries while joining, but before the character exists, so after a normal join the server kept the game's own 2 zones. The add-on has Render Limits send them each time the player's character spawns, including after death. Checked against Render Limits 1.16.0.
Chest supply switch
AzuCraftyBoxes 1.8.23 takes a chest out of the storage that crafting, building and the enchanting table draw from, or puts it back, on Shift + E, and Shift is also Run, so pressing E while sprinting switched the chest instead of opening it. The add-on moves the switch to Shift + L, the game's place modifier and L, and names that key in the chest's hover text; E opens the chest as usual. Quick Stack's Restock, also on L, skips Shift + L. With a gamepad, AzuCraftyBoxes' own buttons still apply.
Server-wide chat
Normal chat, typed without a /s or /w command, reaches every player on the server wherever they are. The game limits normal chat to nearby players but sends shouts to everyone, so the add-on sends normal chat as a shout. DiscordBot_AWL relays shouts, so it posts normal chat to Discord as well. Shouts, including /s, keep their yellow color and the speaker's name on floating text, but show what was typed instead of capitals. Whispers (/w) stay local and are not relayed.
Daily death leaderboard
With DiscordConnector 3.1.3, the dedicated server can post a Polish death leaderboard at 06:00 Europe/Warsaw through the connector's primary webhook. Enable [Death leaderboard] Enabled in the server's valheim.epiclootprogressionfix.cfg, keeping both connector statistics settings enabled, then restart. The pack's server override enables this feature; the mod default is disabled. Credentials stay in the server's existing connector config.
Reports cover the half-open interval from 24 hours before the scheduled deadline up to that deadline, group by platform identity, display the latest character name in that interval, share ranks for ties, and include the total. Zero-death days get a short message. The post does not print the dates it covers. Large rankings show an omitted-player count to fit Discord's limit; mentions are disabled. Daylight-saving changes keep the post at local 06:00 and the window exactly 24 hours, so adjacent reports overlap or leave a one-hour gap on those two days.
The add-on records the native immediate OnDeath broadcast from the connected player's current character, verifies the sending peer and character identity, and ignores repeated broadcasts for that character. It does not wait for respawn or require the server to have that character loaded nearby. The connector record is timestamped and committed synchronously when the server receives the death, so disconnecting during the ten-second death screen does not lose it. The reporting boundary uses server receipt time, not a client-supplied clock. Historical records are unchanged. The first report waits for a complete window after activation, which takes 24–48 hours. After downtime only the latest missed deadline is reported when the server returns.
Private delivery state is BepInEx/death-leaderboard/<world-id>.dat; include it in rollback backups and do not delete it. Confirmed delivery advances the completed deadline. When Discord certainly did not post the report (it could not be reached, refused it with a 4xx status such as a deleted webhook, or rate limited it), the report is retried after 15 minutes or Discord's retry delay, at least 5 minutes. When it may have posted (a timeout, a lost connection, a 5xx reply, or a server stop during delivery), it is not resent, to avoid a duplicate: the log shows a warning with the full report text to post by hand if Discord lacks it, and the next report continues normally. A report still undelivered at the next 06:00 is replaced by that day's report. No manual state edit is needed.
Dry run = true logs previews without HTTP, using separate -preview.dat state. Isolated test preparation enables it.
DiscordConnector records
With DiscordConnector 3.1.3, the add-on flushes the connector's records log before LiteDB reads it in full. LiteDB 5.0.21 writes each log page through a buffered file stream, and under the game's Mono runtime the last page of every commit stays in that buffer. A checkpoint reads the log through another handle, so it found that page missing, failed an internal check, and LiteDB refused every records call until restart. Checkpoints run automatically once records-log.db passes 1,000 pages (about 8 MB), usually after a day or two of play, and at shutdown. Before this fix the connector then saved no records and sent no first-join or first-death notices until restart, and vdc.log showed Error when trying to find <name> to count!. Shutdown checkpoints failed silently, so the log carried over between restarts. LiteDB's own checkpoints and database settings are otherwise unchanged.
Installation and compatibility
The optional server-synced [Achievements] Discord announcements setting defaults to false. When enabled with DiscordBot_AWL, new in-game achievement unlocks from connected clients are relayed through the server's existing Chat webhook in an ANSI code block: Player earned the achievement "Name" [Requirement]. The name and requirement use the game's English achievement text independently of the player's selected language. Startup checks, Unshamed's retroactive awards and their nested meta-achievements are excluded, and repeated callbacks are deduplicated. Announcements do not change achievement eligibility or unlock anything, and clients do not receive webhook credentials.
If DiscordBot_AWL is installed, the add-on corrects its death-quip text-file search. Pack authors may place their templates in BepInEx/config/DiscordBot/QuipsOverrides; these are read after DiscordBot initialization and survive its default-file writer. Restart after editing that override folder. Without an override folder, the normal Quips folder is read with the corrected *.txt pattern. This compatibility path was checked against DiscordBot_AWL 1.4.7. Player-death reports use the creature's displayed name, including StarLevelSystem affixes and custom names. One to four stars remain symbols; five or more use 5★, 7★, and so on. Death reports appear only in Discord (see below): the joke alone in an ANSI code block, with the player's name marked as >>Name<< for creature and environmental deaths and the creature's name plain. They use no ANSI color codes, because Discord's notifications, its in-game overlay and its mobile app show those codes literally. The "has died" title, killer thumbnail and embed timestamp are omitted. Automated message bodies from DiscordBot_AWL and DiscordConnector use the same ANSI code-block style, including joins, departures, first-time notices, server lifecycle, events, and achievements. Already-boxed messages, such as death reports, are not wrapped twice. Runs of backticks in message text are split with zero-width spaces so they cannot close the code block, and text inside the block is not markdown-escaped because Discord shows it literally. Player chat is not boxed; embed titles, images and routing remain intact while descriptions and field values are boxed.
DiscordBot notifications and Discord/AI message relays are Discord-only: their in-game broadcast and display paths are disabled, including deaths and new-day quips. Outgoing Discord webhooks and player chat are not affected. DiscordConnector already sends its automatic notices only to Discord. This also prevents bot messages from opening the in-game chat window.
DiscordBot_AWL 1.4.7 marks a heartbeat unanswered when it sends one to Discord's gateway and answered when Discord acknowledges it, but never resets that mark for a new connection. After a connection dropped while a heartbeat was unanswered, every later connection gave up before sending its first heartbeat and reconnected, logging Heartbeat not acknowledged, reconnecting... about every half minute until restart. The add-on starts each new connection with no heartbeat outstanding. Webhook posts do not use this connection.
Install through Gale or another Thunderstore-compatible manager on the dedicated server and every client. Dependencies are installed automatically. Restart the game/server after installation. Multiplayer compatibility requires the same add-on version on both sides.
This release targets the original EpicLoot 0.14.13 and was built against Valheim 1.0.15. Legacy Starter Gear migration hooks are installed before the version gate and independently of gameplay patching, so an unrelated gameplay patch failure does not remove save compatibility. Version-specific gameplay hooks remain disabled on other EpicLoot versions. Initialization failures are logged and shown persistently on screen; the separate Sacrifice guards block destruction while initialization is incomplete or failed. Stop and fix the installation before continuing when that error appears. A character whose saved crafting history or favorites cannot be read gets a separate notice instead; only that character's affected feature stays locked, and loading another character clears it. Do not combine this add-on with a replacement/forked EpicLoot DLL. Other mods patching the same identification or loot-resolution methods may conflict.
Removing the mod
Keep this add-on installed while loading and saving every character and container that may still contain legacy Starter Gear. The add-on converts those items to original EpicLoot Meadows gear; loose drops convert when the world loads and persist with its next save. Unloaded inventories and old backups can still contain legacy IDs, so removing the migration support before loading them can lose items. Keep world and character backups before changing mods. Converted Meadows items need only original EpicLoot, but remove this add-on from server and clients together.
Source and credits
The package includes its C# source under src/. Built with AI assistance. EpicLoot is by RandyKnapp; this add-on is an independent project and is not an official EpicLoot release. No personal server configuration is included.