Users browsing this thread: 1 Guest(s)
Ripping Monolith, need assistance with conversion
#1
Question 
Joined here since I have found that an indie game I'd like to have sprites of hasn't already been ripped, and decided to do so myself.

I already have all the files decompiled, I just need to convert them into a readable file format (ideally PNG) that does not require the proprietary software used the create the game (its a GameMaker Studio game).

The game in question, if you're curious: https://store.steampowered.com/app/603960/Monolith/ - it's a retro, top-down, twinstick bullet hell/SHMUP roguelike.

Problem is, I don't have GMS myself (and I'm not going to pirate it, obvs). And since the files appear as having no extension, it won't be opened by any editing software I have. Does anyone have a solution for this? Will post the unconverted rips in a reply if having someone with GMS convert them is needed.

Thanks.

If it would help, here's a pic of some of the sprite files extracted from the data.win for the game.
   
Reply
Thanked by:
#2
Have you tried UndertaleModTool? I've had success ripping both the GameMaker games I have (Hyper Light Drifter and Wandersong) with it. https://github.com/krzys-h/UndertaleModTool/releases

The latest release includes a script to extract all the sprites at once, but I wouldn't recommend using it because it has an issue with extracting the sprites: it'll crop them instead of exporting the sprites in an animation with equal dimensions. The previous release, 0.2.0, does not have this issue though and here's the modified script that will work with it:

Code:
using System.Text;
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using UndertaleModLib.Util;

int progress = 0;
string texFolder = GetFolder(FilePath) + "Export_Textures" + Path.DirectorySeparatorChar;
TextureWorker worker = new TextureWorker();

Directory.CreateDirectory(texFolder);

UpdateProgress();
await DumpSprites();
HideProgressBar();
ScriptMessage("Export Complete.\n\nLocation: " + texFolder);

void UpdateProgress() {
    UpdateProgressBar(null, "Sprites", progress++, Data.Sprites.Count);
}

string GetFolder(string path) {
    return Path.GetDirectoryName(path) + Path.DirectorySeparatorChar;
}


async Task DumpSprites() {
    await Task.Run(() => Parallel.ForEach(Data.Sprites, DumpSprite));
}

void DumpSprite(UndertaleSprite sprite) {
    for (int i = 0; i < sprite.Textures.Count; i++)
        if (sprite.Textures[i]?.Texture != null)
            worker.ExportAsPNG(sprite.Textures[i].Texture, texFolder + sprite.Name.Content + "_" + i + ".png");

    UpdateProgress();
}

Paste this code into notepad and make sure you save it as a csx file; otherwise it won't work. Open your data.win in UndertaleModTool; then click "Scripts", "Run other script", and select the csx file you just made. The tool will make a new folder and dump all the sprites in it (This might take a while depending on how many sprites the game has)
Reply
Thanked by:
#3
(05-22-2020, 11:49 AM)Sei Bellissima Wrote: Have you tried UndertaleModTool? I've had success ripping both the GameMaker games I have (Hyper Light Drifter and Wandersong) with it. https://github.com/krzys-h/UndertaleModTool/releases

The latest release includes a script to extract all the sprites at once, but I wouldn't recommend using it because it has an issue with extracting the sprites: it'll crop them instead of exporting the sprites in an animation with equal dimensions. The previous release, 0.2.0, does not have this issue though and here's the modified script that will work with it:

Code:
using System.Text;
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using UndertaleModLib.Util;

int progress = 0;
string texFolder = GetFolder(FilePath) + "Export_Textures" + Path.DirectorySeparatorChar;
TextureWorker worker = new TextureWorker();

Directory.CreateDirectory(texFolder);

UpdateProgress();
await DumpSprites();
HideProgressBar();
ScriptMessage("Export Complete.\n\nLocation: " + texFolder);

void UpdateProgress() {
    UpdateProgressBar(null, "Sprites", progress++, Data.Sprites.Count);
}

string GetFolder(string path) {
    return Path.GetDirectoryName(path) + Path.DirectorySeparatorChar;
}


async Task DumpSprites() {
    await Task.Run(() => Parallel.ForEach(Data.Sprites, DumpSprite));
}

void DumpSprite(UndertaleSprite sprite) {
    for (int i = 0; i < sprite.Textures.Count; i++)
        if (sprite.Textures[i]?.Texture != null)
            worker.ExportAsPNG(sprite.Textures[i].Texture, texFolder + sprite.Name.Content + "_" + i + ".png");

    UpdateProgress();
}

Paste this code into notepad and make sure you save it as a csx file; otherwise it won't work. Open your data.win in UndertaleModTool; then click "Scripts", "Run other script", and select the csx file you just made. The tool will make a new folder and dump all the sprites in it (This might take a while depending on how many sprites the game has)
Thanks a lot! Since I have notepad++ that should be as easy as pie.
Reply
Thanked by:


Forum Jump: