summary refs log tree commit diff stats
path: root/tools/sprite_dumper/tileset_dumper.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-01-31 20:04:51 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-01-31 20:04:51 -0500
commita64c85a3f5641581a19ef52a5c7898ec3cb71754 (patch)
tree8df10037fa552887966d9f0d5b147e0fd35abbf4 /tools/sprite_dumper/tileset_dumper.cpp
parent66e8f5b7d5d245bb7f5d4c4963e70e6b97e0bd4d (diff)
downloadtanetane-a64c85a3f5641581a19ef52a5c7898ec3cb71754.tar.gz
tanetane-a64c85a3f5641581a19ef52a5c7898ec3cb71754.tar.bz2
tanetane-a64c85a3f5641581a19ef52a5c7898ec3cb71754.zip
Abstracted some of the sprite dumper functionality out
Diffstat (limited to 'tools/sprite_dumper/tileset_dumper.cpp')
-rw-r--r--tools/sprite_dumper/tileset_dumper.cpp39
1 files changed, 39 insertions, 0 deletions
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 @@
1#include <iostream>
2#include <Magick++.h>
3#include <vector>
4#include <string>
5#include "common.h"
6
7int main(int argc, char** argv) {
8 if (argc < 3) {
9 std::cout << "Usage: ./tileset_dumper [path to rom] {map ID}" << std::endl;
10 return -1;
11 }
12
13 Magick::InitializeMagick(nullptr);
14
15 Rom m3(argv[1]);
16
17 int roomNum = std::stoi(argv[2]);
18 const unsigned long ROOM_TILES_BASE = 0x104D9CC;
19 unsigned long metatilesInfoAddr = ROOM_TILES_BASE + 4 + (roomNum << 2);
20 unsigned long metatilesOffset = m3.buffer().ReadFourBytes(metatilesInfoAddr);
21 unsigned long metatilesAddr = metatilesOffset + ROOM_TILES_BASE;
22 std::vector<char> metatiles = m3.buffer().Decompress(metatilesAddr);
23 std::cout << (metatiles.size()/8) << std::endl;
24
25 for (int i=0; i<10; i++) {
26 int tile00 = metatiles[i*8+4];
27 int tile01 = metatiles[i*8+5];
28 int tile10 = metatiles[i*8+6];
29 int tile11 = metatiles[i*8+7];
30
31 int mask = metatiles[i*8+2];
32 if ((mask & 0x1) == 0) tile00 = -1;
33 if ((mask & 0x2) == 0) tile01 = -1;
34 if ((mask & 0x4) == 0) tile10 = -1;
35 if ((mask & 0x8) == 0) tile11 = -1;
36
37 std::cout << tile00 << "," << tile01 << "," << tile10 << "," << tile11 << std::endl;
38 }
39} \ No newline at end of file