diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/sprite_dumper/tileset_dumper.cpp | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/tools/sprite_dumper/tileset_dumper.cpp b/tools/sprite_dumper/tileset_dumper.cpp index d8997a5..f09fbd9 100644 --- a/tools/sprite_dumper/tileset_dumper.cpp +++ b/tools/sprite_dumper/tileset_dumper.cpp | |||
@@ -264,15 +264,32 @@ int main(int argc, char** argv) { | |||
264 | itemised.push_back(std::move(newLayer)); | 264 | itemised.push_back(std::move(newLayer)); |
265 | } | 265 | } |
266 | 266 | ||
267 | constexpr int TILES_PER_ROW = 10; | ||
268 | int sheetWidth; | ||
269 | int sheetHeight; | ||
267 | 270 | ||
271 | if (metatiles.size() < TILES_PER_ROW) { | ||
272 | sheetWidth = metatiles.size() * 16; | ||
273 | sheetHeight = 16; | ||
274 | } else { | ||
275 | sheetWidth = TILES_PER_ROW * 16; | ||
276 | sheetHeight = (metatiles.size() / TILES_PER_ROW + 1) * 16; | ||
277 | } | ||
268 | 278 | ||
279 | // Generate map datafile. | ||
269 | std::ofstream mapfile("out.tmx"); | 280 | std::ofstream mapfile("out.tmx"); |
270 | mapfile << R"(<map version="1.0" orientation="orthogonal" renderorder="right-down" width=")"; | 281 | mapfile << R"(<map version="1.0" orientation="orthogonal" renderorder="right-down" width=")"; |
271 | mapfile << width; | 282 | mapfile << width; |
272 | mapfile << R"(" height=")"; | 283 | mapfile << R"(" height=")"; |
273 | mapfile << height; | 284 | mapfile << height; |
274 | mapfile << R"(" tilewidth="16" tileheight="16">)" << std::endl; | 285 | mapfile << R"(" tilewidth="16" tileheight="16">)" << std::endl; |
275 | mapfile << R"( <tileset firstgid="0" source="out.tsx" />)" << std::endl; | 286 | mapfile << R"( <tileset firstgid="1" name="fromRom" tilewidth="16" tileheight="16" tilecount=")"; |
287 | mapfile << metatiles.size(); | ||
288 | mapfile << R"(" columns=")"; | ||
289 | mapfile << TILES_PER_ROW; | ||
290 | mapfile << R"(">)" << std::endl; | ||
291 | mapfile << R"( <image source="tiles.png" />)" << std::endl; | ||
292 | mapfile << R"( </tileset>)" << std::endl; | ||
276 | 293 | ||
277 | for (int layer=itemised.size()-1; layer>=0; layer--) { | 294 | for (int layer=itemised.size()-1; layer>=0; layer--) { |
278 | mapfile << R"( <layer id=")"; | 295 | mapfile << R"( <layer id=")"; |
@@ -294,7 +311,7 @@ int main(int argc, char** argv) { | |||
294 | mapfile << ","; | 311 | mapfile << ","; |
295 | } | 312 | } |
296 | 313 | ||
297 | unsigned int outChar = tu.id; | 314 | unsigned int outChar = tu.id + 1; |
298 | if (tu.tflipx) outChar |= 0x80000000; | 315 | if (tu.tflipx) outChar |= 0x80000000; |
299 | if (tu.tflipy) outChar |= 0x40000000; | 316 | if (tu.tflipy) outChar |= 0x40000000; |
300 | mapfile << outChar; | 317 | mapfile << outChar; |
@@ -306,6 +323,7 @@ int main(int argc, char** argv) { | |||
306 | 323 | ||
307 | mapfile << R"(</map>)" << std::endl; | 324 | mapfile << R"(</map>)" << std::endl; |
308 | 325 | ||
326 | // Render map to image. | ||
309 | for (int layer=itemised.size()-1; layer>=0; layer--) { | 327 | for (int layer=itemised.size()-1; layer>=0; layer--) { |
310 | for (int mapy = 0; mapy < height; mapy++) { | 328 | for (int mapy = 0; mapy < height; mapy++) { |
311 | for (int mapx = 0; mapx < width; mapx++) { | 329 | for (int mapx = 0; mapx < width; mapx++) { |
@@ -319,27 +337,7 @@ int main(int argc, char** argv) { | |||
319 | image.magick("png"); | 337 | image.magick("png"); |
320 | image.write("out.png"); | 338 | image.write("out.png"); |
321 | 339 | ||
322 | constexpr int TILES_PER_ROW = 10; | 340 | // Render tileset image. |
323 | int sheetWidth; | ||
324 | int sheetHeight; | ||
325 | |||
326 | if (metatiles.size() < TILES_PER_ROW) { | ||
327 | sheetWidth = metatiles.size() * 16; | ||
328 | sheetHeight = 16; | ||
329 | } else { | ||
330 | sheetWidth = TILES_PER_ROW * 16; | ||
331 | sheetHeight = (metatiles.size() / TILES_PER_ROW + 1) * 16; | ||
332 | } | ||
333 | |||
334 | std::ofstream tilesetfile("out.tsx"); | ||
335 | tilesetfile << R"(<tileset name="fromRom" tilewidth="16" tileheight="16" tilecount=")"; | ||
336 | tilesetfile << metatiles.size(); | ||
337 | tilesetfile << R"(" columns=")"; | ||
338 | tilesetfile << TILES_PER_ROW; | ||
339 | tilesetfile << R"(">)" << std::endl; | ||
340 | tilesetfile << R"( <image source="tiles.png" />)" << std::endl; | ||
341 | tilesetfile << R"(</tileset>)" << std::endl; | ||
342 | |||
343 | Magick::Image tilesetImage(Magick::Geometry(sheetWidth, sheetHeight), "transparent"); | 341 | Magick::Image tilesetImage(Magick::Geometry(sheetWidth, sheetHeight), "transparent"); |
344 | for (int i=0; i<metatiles.size(); i++) { | 342 | for (int i=0; i<metatiles.size(); i++) { |
345 | Magick::Image tileRender = renderTile(metatiles.get(i), false, false, palettes, mapTiles, tilesets); | 343 | Magick::Image tileRender = renderTile(metatiles.get(i), false, false, palettes, mapTiles, tilesets); |