Valheim
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
2 days ago
Downloads
5.7K
Size
209KB
ADDatHost Valheim hosting
€1

EpicLoot Progression Fix

An unofficial compatibility add-on for EpicLoot 0.14.12. 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

Shift tooltips, tempering eligibility, tempering rows and previews, and rune extraction use the explicit value override when present, then the named item's override, then the effect's normal rarity range. Missing effect definitions cannot acquire invented tempering ranges. Augmentation's existing/keep option uses the item's range; new choices retain their ordinary rarity rolls. Fixed natural rolls remain hidden as ranges and may still be tempered when they have a positive increment.

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.

Tempering binds its countdown to the selected item and effect, cancels when selection changes, and rechecks the item, range and full material costs before payment. EpicLoot's own reselection when a temper completes is not treated as a change, so the finish effect plays out. Invalid or unresolved required materials block the recipe. A failed temper never raises an effect that is already below its normal minimum. Success probabilities, increments, over-tempering and critical outcomes keep their configured rules.

Rune etching consumes its displayed material cost and rechecks the target and rune at completion, including that both are still the selections visible in their lists. If the search box hides either one, the operation cancels without consuming anything. Extraction preserves remaining sockets, named/set identity and unrelated effect history, including when the final rolled enchantment is removed. Removing an effect remaps augmentation/tempering indices; replacing a roll clears its old temper marker. 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. Nothing above 100 counted. 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, and EpicLoot capped its own skill bonuses there too. The add-on continues the same line 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%, where every level from 100 up rolled 85–115% before. 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 its old ceiling, 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, only to the skill factor that damage, costs, movement and stealth read. Where the game reads the skill level itself they did nothing at any level, while the game's own set and trinket bonuses counted there. The add-on counts them in those levels as well:

  • The Staff of Protection's shield absorbs damage in proportion to the Blood Magic level of the hit that casts it. That level now includes the caster's EpicLoot bonus, and so does the level any other hit or parry gives its status effect.
  • Summons are stronger the higher the caster's skill, by 2% of their damage per level: the Dead Raiser's skeletons and Trollstav's troll with Blood Magic, and the Staff of the Wild's roots with Elemental Magic, which also keeps more roots at once from 20, 40, 60 and 80. The bonus now counts toward both, from the items equipped when the summon appears.
  • 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.
  • Tooltips show those status effects with the bonus, for a weapon not in hand as if equipped.

The skills panel already showed these bonuses. Each level is worked out on the game of the player it belongs to. Startup fails with an explicit error if one of these readers changes.

Combat effect fixes

The add-on corrects these EpicLoot 0.14.12 combat effects. Their configured values are unchanged.

  • Executioner: an enemy counts as executed only after a hit that applied the bonus. Before, any of your hits on an enemy below 20% health used up its one execution, even without Executioner.
  • 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: the refund for a killing hit judges the kill from the damage the hit deals after the target's resistances, armor and the game's damage scaling, whichever player's game controls the target. Before, it compared the raw hit with the target's health, and on your own game the hit counted twice. When another game controls the target, a block or a LifeLink boss passing on part of the hit cannot be foreseen.
  • 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.
  • Projectiles: arrows, bolts and thrown weapons use the weapon effects of the hands that fired them, including a thrown weapon's own, instead of whatever is in hand when they land. So do the area effects a projectile leaves behind, such as explosions, whenever they deal damage, and projectiles that deal area damage in flight.
  • 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 Damage value 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 cut only the weapon's base damage, so the upgrades and the ammunition kept their full damage on every projectile, and it did that by editing the damage every weapon of that kind shares during the shot, which an error mid-shot left cut until restart.
  • 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.
  • Damage-taken effects: hits the game discards (dodge invincibility, PvP off, a dead or teleporting target) no longer trigger EpicLoot's damage-taken effects such as Feint, Reflect or Coinplated. A hit Feint avoided no longer triggers adrenaline, Bloodrage, Forest's Aid or Icy Retribution.
  • Falls and the Blood Block cost: 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.
  • Bonus hits: Reflect, chain lightning, the Yagluth meteor, the frost cone, Eikthyr's charge, Icy Retribution, Corpse Rot, Trailblazer fire and the Blood Block cost no longer act as weapon strikes. They do not roll crit, double damage or Opportunist, trigger lifesteal, eitr leech, health on hit or on-hit effects such as Paralyze, Slow, stagger, chain lightning, Strike Causes Lightning or Eikthyr's charge, pay Wager's, Mercenary's or Eitr Imbue's costs, or execute. Effects that reward a damage type or a kill, such as Conduit or Stamina on Kill, still count them. The Yagluth meteor and Eikthyr's charge take their share from a hit before crit and double damage, so a crit no longer multiplies them too.
  • LifeLink: the share of a hit that a StarLevelSystem LifeLink boss passes on to a creature nearby gets none of EpicLoot's hit effects, since the hit it came from already had them. It used to roll crit and lifesteal again, charge Mercenary twice and lose the hit's Wager refund.
  • Reflect: the returned damage no longer depends on whose game controls the attacker. When yours did, it read weapon effects from the attacker's attack in progress.
  • Parry tooltip: the parry bonus shows the multiplier a parry really gets over a normal block. It added EpicLoot's parry bonus instead of multiplying it: a 2.5x shield with +24% showed 2.7x but parried at 3.1x.
  • 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.
  • Eitr Shield: absorbs its share of the damage that gets past the Staff of Protection bubble, your block, resistances and body armor. It no longer spends eitr on damage the bubble or a block stopped, and each hit costs less eitr.
  • Immovable: a block with an Immovable shield holds while you have stamina, even with a full stagger bar. Before, blocks failed without any sign for several seconds once the bar filled.
  • Physical-to-elemental conversion on block: a blocked hit adds only the on-block share, before resistances and armor. EpicLoot added the general share a second time.
  • 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 within Facing 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.

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. Once the wearer has hit every loaded creature of a bounty, the ring stays quiet about it, as EpicLoot's does, until those creatures unload and load again. Opened chests and completed bounties are no longer tracked. The wishbone is unchanged.

Both settings are synchronized from the server; with both 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 or the game's beacon list changes.

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. Identification respects the unidentified item's tier without an additional boss-kill gate. 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.
  • Identification rolls every effect with the identified item power of the enchanting table's Sacrifice upgrade, 100% at level 0 rising to 114% at level 7. EpicLoot applied it only to the fixed effects of named Legendary and Mythic items and rolled every other effect at 100%. An effect rolled above 100% power can exceed its normal maximum, as those fixed effects already could; tempering it succeeds less often under EpicLoot's over-tempering rule, and rune extraction caps its value at the maximum before applying the rune's power. Other rolls, such as drops and enchanting, keep 100%.
  • 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 TierN equipment 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>_Unidentified Starter 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.
  • Identification prepares the requested number of results before taking payment or consuming the selected items. An incomplete batch consumes nothing. The generation loop stops at the requested quantity.
  • Gambling restores its temporary loot-generation flags even if generation throws.
  • 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.Save method.
  • Sacrifice lists only eligible items in your personal inventory. Items in nearby chests or external inventory providers cannot be selected for sacrifice. Other tabs, including Identify, and nearby material access 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.5; unsupported metadata produces an explicit startup error.

When StarLevelSystem and Drop That are both installed, the add-on repairs SLS's lookup of Drop That's character-drop manager using the loaded plugin's actual assembly name, then refreshes SLS's compatibility binding. This was checked against StarLevelSystem 1.18.0 and Drop That 3.1.5. It restores SLS's existing item-modifier integration without changing mining logic, loot tables, quantities or chance settings. The original SLS warning can appear before this add-on loads; startup succeeds only if the repaired method binding is verified.

StarLevelSystem's average damage estimate now uses its existing current-weapon fallback when a creature has no default weapons, as with ordinary skeletons. Previously the empty average became NaN and then an arbitrary 100-damage estimate, inflating Volatile and Poison Nova explosions. Nonempty default-weapon averages, nova multipliers and damage types are unchanged. If no current weapon exists either, SLS's existing no-estimate behavior is retained.

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.

A creature with a death animation dies from an animation event. The game that controls it runs that event and then removes the creature, and another player's game that reaches the same event before the removal arrives runs the death as well. StarLevelSystem's SoulEater and Splitter did not check which game they ran on, so such a death could occasionally heal the soul-eaters around it or split more than once. They now run only on the game that controls the dying creature, where the game does its own death work. As before, a soul-eater keeps its growth only when that same game controls it too, because only the game controlling a creature can change its synced data.

StarLevelSystem's LifeLink boss modifier passes part of each hit on to the first creature within 15 m that is not a player. It also picked tamed creatures, creatures already dying, which lost that share, and creatures the game counts as the boss's enemies, such as animals. The share now goes only to a living, untamed creature with AI that the game does not count as the boss's enemy either way round; when there is none, the boss takes the whole hit.

StarLevelSystem's Alert modifier multiplies a creature's hearing range each time SLS sets the creature up, which it repeats when the creature's level changes or its configuration reloads, so the range kept growing. The multiplier now applies to the creature's original range.

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.

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.12 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.

DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro