Skip to content

Commit

Permalink
ZVISION: Add a new command, "dumpimage", to dump any game image to BMP
Browse files Browse the repository at this point in the history
  • Loading branch information
bluegr committed Jan 7, 2015
1 parent 6dbdf03 commit 5352493
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
59 changes: 59 additions & 0 deletions engines/zvision/core/console.cpp
Expand Up @@ -53,6 +53,7 @@ Console::Console(ZVision *engine) : GUI::Debugger(), _engine(engine) {
registerCmd("location", WRAP_METHOD(Console, cmdLocation));
registerCmd("dumpfile", WRAP_METHOD(Console, cmdDumpFile));
registerCmd("dumpfiles", WRAP_METHOD(Console, cmdDumpFiles));
registerCmd("dumpimage", WRAP_METHOD(Console, cmdDumpImage));
}

bool Console::cmdLoadVideo(int argc, const char **argv) {
Expand Down Expand Up @@ -269,4 +270,62 @@ bool Console::cmdDumpFiles(int argc, const char **argv) {
return true;
}

bool Console::cmdDumpImage(int argc, const char **argv) {
if (argc != 2) {
debugPrintf("Use %s <TGA/TGZ name> to dump a ZVision TGA/TGZ image into a regular BMP image\n", argv[0]);
return true;
}

Common::String fileName = argv[1];
if (!fileName.hasSuffix(".tga")) {
debugPrintf("%s is not an image file", argv[1]);
}

Common::File f;
if (!_engine->getSearchManager()->openFile(f, argv[1])) {
warning("File not found: %s", argv[1]);
return true;
}

Graphics::Surface surface;
_engine->getRenderManager()->readImageToSurface(argv[1], surface, false);

// Open file
Common::DumpFile out;

fileName.setChar('b', fileName.size() - 3);
fileName.setChar('m', fileName.size() - 2);
fileName.setChar('p', fileName.size() - 1);

out.open(fileName);

// Write BMP header
out.writeByte('B');
out.writeByte('M');
out.writeUint32LE(surface.h * surface.pitch + 54);
out.writeUint32LE(0);
out.writeUint32LE(54);
out.writeUint32LE(40);
out.writeUint32LE(surface.w);
out.writeUint32LE(surface.h);
out.writeUint16LE(1);
out.writeUint16LE(16);
out.writeUint32LE(0);
out.writeUint32LE(0);
out.writeUint32LE(0);
out.writeUint32LE(0);
out.writeUint32LE(0);
out.writeUint32LE(0);

// Write pixel data to BMP
out.write(surface.getPixels(), surface.pitch * surface.h);

out.flush();
out.close();

surface.free();

return true;
}

} // End of namespace ZVision
1 change: 1 addition & 0 deletions engines/zvision/core/console.h
Expand Up @@ -47,6 +47,7 @@ class Console : public GUI::Debugger {
bool cmdLocation(int argc, const char **argv);
bool cmdDumpFile(int argc, const char **argv);
bool cmdDumpFiles(int argc, const char **argv);
bool cmdDumpImage(int argc, const char **argv);
};

} // End of namespace ZVision
Expand Down

0 comments on commit 5352493

Please sign in to comment.