diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-02 13:01:35 -0500 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-02 13:01:35 -0500 |
commit | 7166c9b831f9c6a50ba42272682b776d01e5703e (patch) | |
tree | b27c4b695a8cd5f64c680e358bb919e86ef7cd74 /tools | |
parent | 362c332000a65acc060660dcb6bb0ec6f99cbafe (diff) | |
download | tanetane-7166c9b831f9c6a50ba42272682b776d01e5703e.tar.gz tanetane-7166c9b831f9c6a50ba42272682b776d01e5703e.tar.bz2 tanetane-7166c9b831f9c6a50ba42272682b776d01e5703e.zip |
Map rendering Works but I don't want to use Tileson so I'm gonna change that
Mainly bc Tileson requires std::filesystem, which my clang is too old for apparently, and while I can use gcc instead I just want to not, I suppose. Also Tileson's API is very weird RE const correctness? Idk. And also being able to parse the tmx files rather than exporting to json would be preferable.
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); |