FairTrophies
Vanilla rare-drop rates without the resets: one bad-luck counter per character, saved with the character, shared by all star levels. Client & server.
About this mod Author’s original text
FairTrophies
By Hampus Toft. Client & server mod - install it on the server and on every player.
Valheim already has hidden bad-luck protection for every creature drop of 30% or less (trophies, Jotun armor molds,
Deep North gemstones, Memorial Coal, coins...): a countdown that guarantees the drop within twice the expected number
of kills. FairTrophies keeps vanilla's drop rates exactly, and fixes what makes that countdown unfair:
| Vanilla | FairTrophies |
|---|---|
| Killing a star level whose drop chance differs (e.g. a 1-star Jotun after 0-stars) throws the countdown away and rolls a new one. | One countdown per item, shared by every star level - never a reset. |
| Star-scaled rare drops get the star bonus twice: chance x4 and amount x4, so a 2-star Unbjorn can drop 4 trophies (up to x16 loot). | Stars multiply the loot once (x2 / x4). Trophies, Ancient Gemstones and armor molds drop more often (a 2-star kill counts four times on the countdown), one at a time. Resources (Memorial Coal, coins, meat, hides...) keep the normal chance and drop more per drop. |
| The countdown lives in the memory of whichever player's game is simulating the creature - your kills can use up a friend's countdown. | Every character has their own countdowns. Kills only ever count for the character credited with them. |
| Lost every time the game closes. | Saved in the character file, so it follows the character between sessions, worlds and servers. |
Base drop chances and amounts always come from the game's own drop tables - nothing to configure. The NoPseudoDrops
world modifier is respected (FairTrophies stays out of the way when it is on).
Who gets credit for a kill
- The last player to damage the creature - also when it then dies to something else (fall, fire, drowning, another
creature).
- A creature no player ever hit (mob farms, traps) counts for the player whose game was simulating it - normally the
player standing at the farm.
- A creature the dedicated server simulated on its own counts for the nearest player.
Multiplayer
Valheim rolls a creature's loot on the computer simulating that creature, usually a player's. The server tells that
computer which character gets the kill, that character's client updates its countdown, and the drop appears on the
corpse as usual. The server and every client must run the same FairTrophies version; mismatches and players without
the mod are refused with an "incompatible version" message naming both versions.
Configuration
BepInEx/config/HampusToft.FairTrophies.cfg holds a single debug option:
| Setting | Default | |
|---|---|---|
| Debug.LogCounters | false | Log every counted kill: who was credited, the item, whether it dropped and how many kills are left. |
AI disclaimer
This mod was mostly made using Claude Code, Anthropic's AI coding assistant. The
design and requirements are mine; Claude Code did most of the work: decompiling and analysing Valheim's drop code,
extracting the drop tables, and writing the code, tests and documentation, all under my direction and review. Please
report any problems on GitHub.
Install & use Install: BepInEx plugin
- The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
- Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
- Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
- Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.
Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file. In multiplayer, the host and every client need the same mods installed.
Install these first, or the mod will not work: