Unpacking and decompilation of
Risk of Rain 1 files.
More specifically data.win
(under Windows) and game.unx
(under Linux).
This package includes:
-
Extraction of about every single resource the data file has to offer;
-
Decompilation of the game's interpreted code (stored inside the
CODE
chunk and available only on Windows; Hopoo stopped running YYC-compiled code as it caused crashes).Additionally running
cabal run decompile -- FILE
, whereFILE
is the link to adata.win
file will output game's decompiled source code to stdout.
Kudos to the Undertale datamining squad for sharing their findings. Without them decompiling the game would take even longer than it already did and would not be nearly as successful. Links to Undertale stuff:
-
Data file format and 0xF instruction list: tomat.dev/undertale;
-
Detailed 0xE instruction list: github.com/gm-archive/acolyte/wiki.
-
Corrections to data file format and 0xF instruction list: github.com/krzys-h/UndertaleModTool/wiki.
Q: Can this decompile games other than Risk of Rain 1?
A: I tried like five and all of them seemed to use bytecode 0xE, while
Risk of Rain 1 uses 0xF (if I had to guess people just don't update because
updating GameMaker
breaks
the project). There are major structural differences between the two, therefore even the
naming of the modules in the package is GameMaker.RiskOfRain.*
. So imo if you wanna
decompile a different game, handroll another setup, you're most certainly not
using Haskell either way.
Q: Why is this in a separate package and not inside a game build?
A: Because I feel like it makes for a nice little unit by itself, so even though
it is practically useless outside of a game build, it can still exist as a separate
package. Seeing how I've been experimenting with making a game for the past two years
eternity, I'm not even sure I'll make a working videogame ever,
so perhaps someone can use this to figure out how to unpack a different game.
The only contact channel I have is Github, at least as of the time of writing this.