From a64c85a3f5641581a19ef52a5c7898ec3cb71754 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sun, 31 Jan 2021 20:04:51 -0500 Subject: Abstracted some of the sprite dumper functionality out --- tools/sprite_dumper/tileset_dumper.cpp | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 tools/sprite_dumper/tileset_dumper.cpp (limited to 'tools/sprite_dumper/tileset_dumper.cpp') diff --git a/tools/sprite_dumper/tileset_dumper.cpp b/tools/sprite_dumper/tileset_dumper.cpp new file mode 100644 index 0000000..10e46fa --- /dev/null +++ b/tools/sprite_dumper/tileset_dumper.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include "common.h" + +int main(int argc, char** argv) { + if (argc < 3) { + std::cout << "Usage: ./tileset_dumper [path to rom] {map ID}" << std::endl; + return -1; + } + + Magick::InitializeMagick(nullptr); + + Rom m3(argv[1]); + + int roomNum = std::stoi(argv[2]); + const unsigned long ROOM_TILES_BASE = 0x104D9CC; + unsigned long metatilesInfoAddr = ROOM_TILES_BASE + 4 + (roomNum << 2); + unsigned long metatilesOffset = m3.buffer().ReadFourBytes(metatilesInfoAddr); + unsigned long metatilesAddr = metatilesOffset + ROOM_TILES_BASE; + std::vector metatiles = m3.buffer().Decompress(metatilesAddr); + std::cout << (metatiles.size()/8) << std::endl; + + for (int i=0; i<10; i++) { + int tile00 = metatiles[i*8+4]; + int tile01 = metatiles[i*8+5]; + int tile10 = metatiles[i*8+6]; + int tile11 = metatiles[i*8+7]; + + int mask = metatiles[i*8+2]; + if ((mask & 0x1) == 0) tile00 = -1; + if ((mask & 0x2) == 0) tile01 = -1; + if ((mask & 0x4) == 0) tile10 = -1; + if ((mask & 0x8) == 0) tile11 = -1; + + std::cout << tile00 << "," << tile01 << "," << tile10 << "," << tile11 << std::endl; + } +} \ No newline at end of file -- cgit 1.4.1