You are viewing a potentially older version of this package. View all versions.
Azumatt-Unshamed-1.0.0 icon

Unshamed

Valheim 1.0 blocks achievements for anyone running mods. This unblocks them, and gives back the ones you already earned. No free unlocks.

Date uploaded 7 hours ago
Version 1.0.0
Download link Azumatt-Unshamed-1.0.0.zip
Downloads 1577
Dependency string Azumatt-Unshamed-1.0.0

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2350

README

Unshamed

Valheim 1.0 will not give you achievements if you run mods. Not cheat mods, any mods. BepInEx sets a flag the game reads as "cheated", so a game with nothing but a font fix installed is disqualified the same as one with a cheat menu.

Unshamed removes that one check and nothing else. Real cheating still counts against you exactly like vanilla. It can also hand back what you already earned while the game was refusing to count it.

Client side only. Nothing syncs, nothing is needed on the server.

TL;DR

  1. Drop it in and launch. Achievements work again. That is the whole mod, nothing to configure.
  2. Been playing modded since 1.0 dropped? Open the console with F5 and type unshamed retro. It lists the achievements you already earned but were never given.
  3. unshamed retro apply takes all of them, or unshamed retro apply 2 5 9 takes only the ones you point at. Nothing is granted until you ask.
  4. unshamed status if you just want to check it is working.

Why you were locked out

1.0 decides with Achievements.IsCheatedAtAll():

m_cheatCheckCache = (usedCheats | anyCheatedItem | worldCheated) != 0 || Game.isModded;

Four things, ORed. Three of them are real cheating. The fourth is Game.isModded, and the BepInEx Valheim pack sets that itself through a method called SetIsModdedTrue, for every install, whether or not a single mod asked for it.

Unshamed drops that fourth term and leaves the other three alone. Run a cheat command, pick up a spawned item or load a world with modifiers you cannot set in the World Modifiers menu, and you are still cheated, just like an unmodded game.

It is worse than just losing the unlocks, which is why I bothered with the retroactive half. Your stats live in ten buckets:

this.m_playerStats[0].m_stats.IncrementOrSet(stat, amount);   // always counts
if (!Achievements.CanGetAchievements(cheated)) return;
this.m_playerStats[1].m_stats.IncrementOrSet(stat, amount);   // only if you count as clean

Bucket 0 is everything you ever did. Bucket 1 is what the game was willing to credit, and Achievement.CheckUnlocked() reads that one. So every hour you played modded went into bucket 0 and nowhere else. You were missing the unlocks and building no eligible history at all.

Getting back what you earned

Opt in, look first, pick what you want. Nothing happens on its own unless you deliberately turn it on.

unshamed retro shows you the list:

7 achievement(s) your character already earned:
   1 KillAllCreatures            Hunter
   2 FindAllTrophies             Collector
   3 AllFoodEaten                Gourmand
  ...
'unshamed retro apply' takes all of them.
'unshamed retro apply 1 3 4' or 'unshamed retro apply <id>' takes only those.

I am not guessing at that list. It copies the stats in, asks vanilla's own CheckUnlocked(), then puts your profile back exactly as it was. Iron Gate's criteria decide what you earned, and I would rather it stayed that way than have me writing my own rules about what counts.

Picking is not cosmetic. unshamed retro apply 1 3 copies forward only the stats and entries those two achievements read, gathered the same way Achievements.ResetAchievement gathers them in reverse. The ones you skipped stay genuinely locked, because the numbers behind them never moved.

Only the Any difficulty bucket gets filled. I am not filling the Hard or Hardcore tiers for you, that would be claiming a run you cannot prove you did, and Any is what most achievements ask for anyway.

If you would rather not think about it, the Enable Retroactive config toggle grants everything once on your next load. It is off by default, and you do not need it for the console command to work.

Commands

Press F5 for the console.

Command What it does
unshamed status Are you eligible, and why. Start here
unshamed retro List the achievements you already earned, numbered. Changes nothing
unshamed retro apply Grant all of them
unshamed retro apply 1 3 4 Grant only those, by number off the list
unshamed retro apply <id> Grant one by id, e.g. unshamed retro apply KillAllCreatures
unshamed list [filter] Every achievement, its id and lock state. unshamed list troph filters
unshamed audit The ten stat buckets, and everything a cheat check could read off your character
unshamed clear Clear the cheat flag now and save
unshamed recon Dump the achievement system to BepInEx/config/Unshamed_recon.txt

If retro says you are still cheated

It will name which of the three checks tripped:

  • m_usedCheats is on your character forever once a dev command touches it. Unshamed clears it on load, on save and right after a command sets it, so this usually sorts itself out. unshamed clear does it now.
  • cheated items means something spawned is in your inventory. Drop it or bin it.
  • cheated world is the one you cannot fix from here. 1.0 marks a world permanently if its m_startingGlobalKeys hold anything you could not have set through the World Modifiers menu, which includes anything from setkey. That mark lives in the world file, not your character.

Config

Azumatt.Unshamed.cfg

  • Enabled: master switch. Off means the mod touches nothing.
  • Ignore Modded Flag: the actual fix. On by default. Turn it off and you are back to vanilla behaviour, disqualified for having BepInEx.
  • Clear On Load / Clear On Save / Clear After Command: the three points the cheat flag gets wiped, all on.
  • Clear Cheat Stat: also zero the Cheats counter vanilla bumps alongside the flag.
  • Show Popups: play the vanilla unlock popup for each retroactive grant. Off, because a big backlog is a lot of popups at once.
  • Enable Retroactive: off by default. On means grant everything automatically on next load, without showing you the list. Leave it off and use the console if you want to choose.
  • Force True Methods / Force False Methods: comma separated Type::Method whose bool return gets forced. A hatch for when a patch moves something and the mod stops working.

Caveats

Achievements are not free. If your character genuinely never did the thing, nothing unlocks, because vanilla is the one checking.

Retroactive only fills the Any bucket, so difficulty-gated achievements still want a real run at that difficulty.

The only thing this mod writes into your .fch is the cheat flag going false, the Cheats counter going to zero, and the stats you asked it to copy forward. Vanilla already keeps a .fch.old from every save plus rotating _backup_auto files. Zeroing that counter is not reversible, so copy the file somewhere first if you want the number.

Granting an achievement has no undo in the public build. Preview first, that is what it is for.



Feel free to reach out to me on discord if you need manual help. AzumattDev on Discord.

CHANGELOG

Version Update Notes
1.0.0 - Initial Release