This is a outfit unlocker for Scrap Mechanic. It simply lets you to unlock any outfits introduced in game after survival update (version 0.4.0 and newer). Normally, you would unlock those outfits by unpacking garment boxes in survival mode (which requires some cotton and a dress bot), which will give you a random outfit from tier matching with the tier of the garment box you've unpacked. This tool allows you to unlock any outfit you want, without the need of looking for the garment boxes in survival mode and spending cotton to unbox them. There is another way to quickly unlock clothes in game, by enabling developer mode and spawning as many garment boxes as you want, but it doesn't let you choose what to unlock and also it takes much more time.
The progress of unlocking outfits is saved in game inside unlock
file, placed in %appdata%/Axolot Games/Scrap Mechanic/User/User_YOUR_STEAM_ID/
(Replace YOUR_STEAM_ID with your 64-bit Steam ID) directory and it is global for the whole game, which means it is independent on the survival world you're playing. In other words, unlocking an outfit in one survival world / save game, will unlock it in other ones too. After unlocking outfits inside survival mode, you can use them in other modes too (you can customize your character in main menu of the game).
This unlock
file is what this tool is aimed after. It can simply modify / generate this file. That's it!
There are five tiers of clothing and three tiers of garment boxes in game...
~ What? Are you sure? ~
Yes, let me explain. First tier of clothes is the initial tier, which contains burned / crash version of full Mechanic set (technically the "no outfit" option is also considered an outfit by game, so those are included in the initial tier too, but they are not visible in this tool). Initial clothes are always unlocked in game and their unlock status is not being saved in the unlock
file. So, if you want to just remove those burned outfits from your dressbot / character customization menu, this tool is not the way to do it. That's why those outfits are grayed out / disabled in the tool. You cannot lock or unlock them using unlock
file. I've kept them in this tool just to remind about that.
Remember how I said that you need to unbox garment boxes to unlock outfits? Well, I lied... not for all the clothes... And here comes the next tier.
~ OH, hidden clothes? ~
No.
~ Secrets? ~
No.
~ Some special clothes? ~
No!
~ So what is this???? ~
Ehh.. I'm explaining it, be patient! This next tier of clothes I call just the basic clothes, as there is no name for this tier inside game (for the initial tier there is no name too, this is also something I've named by myself). This tier just contains the unburned / normal Mechanic set that you know from before the survival update. And you unlock this whole tier of clothes just by using dress bot. That's it. If you press e
key when looking at your dress bot, those clothes will unlock for you automatically, if they are not yet unlocked.
~ Oh, I was sooo hyped... ~
Not my fault. You should've listened patiently instead of interrupting me.
Okay, next three tier of clothes are just as three types of garment boxes: common, rare and epic.
I've marked each outfit with the corresponding color of the tier. There is also an option to select all outfits from specific tier in global or in specific outfit category (requires JS to be enabled) and it is also colored accordingly.
As you may have seen already, each outfit has a name in this tool, but there are no names in the game. That's correct! And not correct at all, because there are names inside game files! Just not being used for anything :) And they are not really complete / correct. I've used those names to show the tier for each outfit and just so everyone can easily reference to specific outfit. As I said, names in the game were totally not 100% completed, so for example shirts are not named inside game files, so I had to be somewhat creative with that. If you have better suggestions for shirt names, please DM me. Some other clothes had invalid names, like gloves named as shoes, spelling mistakes and some _
stuck at the end of name, just because. There were also some unnamed clothes not being a shirt, but they clearly were a part of a set in which other clothes had names, so I've just fixed it. I also changed name of crash / burned outfits, their original name was Crash Mechanic X (replace X with outfit category, like Shoes) but those names were too long to fit inside small 100x100px boxes, so I've shortened them to just Crash X.
Well, that's no longer true. From version 0.4.8 Scrap Mechanic is displaying name of selected item at the top of the outfits list in character customization window. They've also fixed typos in names and added names for items that didn't have them before, so I've just copied those names without any modification, but I'm still displaying them below item pictures, because selection in this tool doesn't work in the same way as in game (you can select more than one thing from the category). Also, instead of trying to shorten long ones to fit in the tiny space below the photos (as I've done before with the crashed outfit set), now I'm just truncating them if they are too long (adding ellipsis at the end of truncated name to visualize that there is something more to be seen). This truncation shouldn't be a problem as at the end of each outfit name there is outfit type and only this part is truncated, so for example if you see "Back..." instead of "Backpack" in outfit name when being in the "Backpack" category, I think you can figure out what was truncated ;)
To use this tool, simply select all the outfits you want to unlock (don't forget to check all categories of clothing), type in your 64 bit Steam ID 2 and click generate. Your browser should start downloading unlock
file. After download finished (it shouldn't take long, file is very small), open file explorer and go to %appdata%/Axolot Games/Scrap Mechanic/User/User_YOUR_STEAM_ID/
(Replace YOUR_STEAM_ID with your 64-bit Steam ID) directory. Put freshly downloaded file in here, replacing existing one, if exists (an unlock file will exist if you've unlocked at least one outfit, even the basic, unburned ones. That's it! After launching your game, you can use all the outfits you've selected in the tool.
Also, instead of selecting items by hand (or in addition to selecting items by hand), you can upload existing unlock file to modify it... Or just see it's contents. File upload has 2 different modes. If you click "Replace", your current selection will be replaced with contents of the file. This way you don't have to clear the selection when you want to load the contents of the file into the empty outfits list. If you click "Add" button, your current selection of outfits will be preserved and all items from uploaded file will be added into your selection. You can use this mode to merge multiple files together, just upload first one (choosing whichever mode fits what you're doing) and then upload another file, making sure to click "Add" this time. You can of course repeat this step to merge more than 2 files together.
So, let's talk about how this whole thing works, starting with the unlock
file format and then we will talk about how this tool operates.
unlock
So, unlock
file is a binary file containing list of UUIDs of outfits, that you've unlocked. Whole file is eig endian encoded (aka network endian) and the structure of this file looks as follows:
Looks easy enough, right? Not really... Figuring it out took some time... Let's explain then how I did that then!
~ Oh no ~
Oooooh yes!
~ No, please don't ~
STORY TIME!
~ I knew it.... I f&%!@*g knew it...~
Once upon a time, Axolot updated their fancy game, called Scrap Mechanic, adding a survival update to it. I was very hyped to play that game, and as a Linux user, I've already had a setup to run this game. Nothing fancy, just a Steam client with enabled the possibility to run any game using Proton. But... after the game updated, it won't work anymore. It was crashing on world loading screen. I did some digging and found that I'm not the only one with that issue and the only workaround right now is to run whole Steam client under Wine. That was no go for me, as steam under Wine is very glitchy and community is not working on it, I decided to switch to Windows for a while, until the fix it ready.
So, I booted my Windows and started playing Scrap Mechanic. I've found some garment boxes and opened them, yay outfits! In the meantime, some people figured out that there is an issue in proton itself: it misses an implementation of one of the versions of Steam network protocol that games may use to allow serverless multiplayer. And, of course, Scrap Mechanic switched to this exact version of that protocol after this update. So, I was still playing survival on Windows, still waiting for the fix... 2 days after that, someone made a patch that implements this version of Steam network protocol, yey!
I switched back to my Linux and tried out that patch, it worked! I don't have to switch operating systems between gaming and doing some other things! And my survival world is already there, due to Steam Cloud synchronization! Wohoo!
I continued playing, this time on Linux and I've found some more garment boxes. Yey, another outfits! Got back to my base, grabbed some cotton, got to the dress bot and started unpacking my new outfits. After unpacking the first one I didn't realize that something is wrong, so I began to unpack 2nd one and 3rd one. After unpacking all of them, I've realized that all other outfits I had unlocked... are... gone! Okay then, let's see in my Windows drive what is different. I started digging and found an unlock
file inside the SM's appdata directory. It has different size between my Linux and Windows, so I suspected that this may be the file I'm looking for. And indeed, after switching them around, I had all my clothes unlocked on Windows back on my Linux!
But I've opened some garment boxes on Linux, I don't want that to go to waste! I need to merge my progress somehow.
And that's when the fun begins.
So... It was really obvious that this file is some binary blob, not a handy dandy json, not even an SQLIte database, just an almost minimal amount of bytes to encode the information needed. Okay, I have some experience with binary data, let's dig into it!
It didn't took me long, roughly 10 minutes, to discover the file structure mentioned above. As I knew from looking into the game files that each outfit has an UUID identifying it, it was really obvious what to look for. Remaining 12 bytes were almost as obvious: from 2 unlock files I got, I was able to find out that 4 of those are just information of how many UUIDs are in the file, 4 of them are probably always constant (and it is very common practice to put some constant bytes, called "magic number", at the beginning of the file or network packet, just to be sure that we are reading the correct file or packet. It can also be used to mark which version of the file it is, so if anything new will be added that will force you to change format of the file, new version of your software can convert on the fly the old version to new one. So last 4 bytes... It is also common to put some checksum in binary file, is this the checksum? Probably crc32, judging by its length (32 bits, duh!).
So... Let's try to change something, just to check if game reads that checksum. And unfortunately, it does. After adding another UUID to the file and changing the count bytes accordingly, game refused to load the file and I was in the state of no outfits unlocked. I've checked also what happens when I visit dress bot. And, no surprise, game just unlocked the basic mechanic clothing for me and saved it to file, replacing the one I prepared. At least I have yet another file with valid checksum to experiment on.
So I tried to recreate the checksum, it was easier for this one file that game just gave me, as it had only 5 UUIDs inside. So I tried just grabbing all data after the checksum (so the length and UUIDs) and running it through crc32. No luck... I tried without the length, still nothing. Tried with different order of UUIDs, different format (as a string containing hex value, with or without dashes), encoded in little endian, basically every single combination of tweaks and changes to it that I could think of. I've even tried adding UUIDs of always unlocked parts, in different combinations, still nothing.
So there may be some secret that Axolot is adding to the data before calculating this checksum. It may also be connected to users Steam account (I've ruled out chance to calculating something from specific scrap mechanic installation, ID of your PC components or your OS installation, as I swapped files between Windows and Linux and all of those things are different between them). So... may probably be the 64 bit Steam ID, as game is also using this ID in the name of directory containing this file.
Basically, I need this file from some different steam account to confirm that. But I need the exact same clothing set in the exact same order (I discovered that order of basic clothes between those 3 files I've got was different, so it may be random in some way). I've asked on Scrap Mechanic Mods discord for files containing only basic outfits, providing also instruction how to create one if you have something more already unlocked (basically, move your precious unlock file somewhere else, run the game, use dressbot, quit the game, give me newly created unlock file and restore your old one to it's original location) and started praying for somebody to respond with the file that will have either different order, but same checksum as one of mine, same order and same checksum or different checksum and same order as either of those will tell me if order matters and if Steam account matters. File with different order of outfits and different checksum will only tell me that either of those 2 things matters (or both), but not which one. After some time, I've got a file from one guy (THANKS A LOT!!, if he is okay with that, I will put his discord name here, to give him full kudos!) and fortunately, it was the third case, so I confirmed that your Steam account is somehow connected to this checksum! Now only to figure out how.
At first I thought I need more files to do some statistical analysis, but then I've realised that there are not so many things I can try and maybe succeed. You can have different order of outfits (they may be reordered in some consistent way before calculating checksum), you can have different formats of SteamID attached in different spots with or without a size attached to it and that's basically it. So I wrote some simple script that will try every single combination of those (I calculated that there are only 17280 combinations to be checked, script can check like 50-100 combinations in a second at minimum, so this should take few minutes at maximum) and run it.
It got the results!
So, this is how the checksum is calculated: you take a 64bit Steam ID, encode it as a 64 bit number (little endian), after that binary data you attach the list of all the UUIDs in file, in the exact form that they appear inside the file and generate a crc32 checksum from that. Done! It is that easy!
So after succeeding with the file and finally merging those 2 files, I decided to share this with the world somehow. Creating a tool that will let you simply generate or modify the unlock
file was the best way of that. As I wanted to make this tool as accessible as possible, it ended up being a website. This website.
It is written in Python, powered by Django, creating initial version of it took me roughly 12 hours of my free time. And there it is! If you want to know more about how it's done or need some advice about creating something similar on your own, or just want to know more about Django and Python, DM me! I may release a source code of this website in the future.
When I was making this tool, I had to get all available outfits list from somewhere... And the obvious place is: game files. All you see on this website right now was at some point fetched directly from game files. You can even see one of the files from game when you use developer tools on this website... Yes, I've copied the "sheet" of outfit icons from game files and used it "as is".
But I've encountered one problem... There is a list of all outfits in game files, together with their UUIDs, paths to actual outfit files in game directory, it's tier etc. It is located in Data/Character/customization_options.json
. But it is not complete... I mean... For some outfits there is no tier defined. It is not a problem for Mechanic outfits and Crash Mechanic outfits, but those aren't the only ones with missing tiers. And I assumed without properly testing it that all other unlabeled outfits are just common. I didn't question this assumption, because I've heard from someone that you can unlock lower tier outfits with higher tier garment boxes...
And at some point I've seen ScrapMan video on youtube in which he couldn't unlock any more common outfits, because he unlocked them all... And then he opened epic garment box and... he got an outfit that I've remembered being not categorized in game files... Yes, this was the moment that I facepalmed myself. My assumption was wrong. All uncategorized outfits (outside of Mechanic and Crash Mechanic sets) are epic, not common!
So... If you've relied on the information about tiers of outfits provided in this tool in the past (especially, before 0.4.8 Scrap Mechanic update), I'm really sorry, but that information was wrong. Now it is correct, so you can check it again now to make sure nothing unexpected happened because of that.
The obvious use case of this tool is just to unlock every single outfit in your game. You can also use it to recreate your progress of unlocking files after some bad accident in which you lost it. You can use this tool to merge progress from two different files (that was my case!) or to test some modding ideas (if you for example want to change one outfit to something else and quickly test if it works or you want to create a completely new part and you need to add it's id to your unlock file so it is unlocked 1). The sky is the limit! :) Maybe you're just curious what there is yet to be unlocked in game and just looking for some handy list? Or you want to check which outfit requires which garment box? Everything is in here, kinda... ;)
It generates unlock files with any set of unlocked clothes you want!
Just enter the URL above, select clothes that you want to be unlocked, type in your SteamID64 and click generate!
unlock files are tied to the steam account on which Scrap Mechanic is running. This means that your file won't work on your friend steam account and vice versa. To generate correctly tied file, generator needs your Steam ID 2.
Put it in %appdata%/Axolot Games/Scrap Mechanic/User/User_YOUR_STEAM_ID/ directory, replacing old unlock file if it's already there
Nothing. It's done. Clothes are unlocked!
Color of the name of clothing corresponds to garment box you need to unbox to unlock this outfit: common, rare and epic. White name means those clothes will be unlocked on first use of dress bot.
Initial release Yup... Nothing more to say!
Add this description Well... If you're reading this, that means it's already there, right?
Add ability to read existing unlock file Of course to read already unlocked outfits from it. With the possibility to both replace what you've already selected or add content of the file to your current selection. This may be handy for people, who want to merge two files together, add something to existing file without re-clicking everything or just to read what's inside
Add handy dandy select all / select tier Both for each category and for the whole thing.
Optimize background loading for smaller screens Currently this is an 8k resolution image! That's crazy! I need to make scaled down versions and add some rules to load smaller ones if your screen isn't big enough to make advantage from 8k one
Add ability to put a custom UUID This may be useful for people in need to test their new outfits in game. If adding new outfits is even possible.
Yes, this is just a screenshot from main menu in Scrap Mechanic, but without an actual menu or Dwarf standing in the foreground. But... It's in 8k!!!!
Yes, 8k! If you want to use it, go ahead! Here are the links to this image in various resolutions, up to mentioned 8k:
You can contact me at Discord. My Discord handle is GwynBleidd#1337
. You can DM me on find me on Scrap Mechanic Mods discord server. If you want to DM me, but Discord won't let you, join this server, so we will have at least one in common. Then you will able to DM.