From 514790f9d67e6dfffb7f6ed338a53be3eb84faeb Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Thu, 25 Mar 2021 15:05:37 -0400 Subject: tileset: Ensure tile size matches map's --- (limited to 'src/tileset.c') diff --git a/src/tileset.c b/src/tileset.c index 366c925..f63fa0a 100644 --- a/src/tileset.c +++ b/src/tileset.c @@ -293,6 +293,8 @@ _db_tsx_tileset_start(void *pv, const char *name, const char **attr) { XML_Parser p; struct db_tileset *tileset; + int tw; + int th; db_dbg(" <%s> (tileset)", name); @@ -300,8 +302,14 @@ _db_tsx_tileset_start(void *pv, const char *name, const char **attr) tileset = db_xml_node_peek(p); if (db_xml_check_tag(name, "tileset")) { - db_xml_get_int_attr(p, attr, "tilewidth", &tileset->tw, 1); - db_xml_get_int_attr(p, attr, "tileheight", &tileset->th, 1); + db_xml_get_int_attr(p, attr, "tilewidth", &tw, 1); + db_xml_get_int_attr(p, attr, "tileheight", &th, 1); + if (tw != tileset->tw || th != tileset->th) { + db_err("Tileset has %dx%d tiles, not %dx%d like map", + tw, th, tileset->tw, tileset->th); + XML_StopParser(p, XML_FALSE); + return; + } db_xml_get_int_attr(p, attr, "tilecount", &tileset->tc, 1); db_xml_get_int_attr(p, attr, "columns", &tileset->cols, 1); db_dbg(" Tile size: %dx%d px", @@ -315,7 +323,7 @@ _db_tsx_tileset_start(void *pv, const char *name, const char **attr) struct db_tileset * db_tileset_new(const char *game_id, const char *file, int firstgid, - struct db_tileset *prev) + int tilewidth, int tileheight, struct db_tileset *prev) { struct db_tileset *tileset; XML_Parser p; @@ -331,6 +339,13 @@ db_tileset_new(const char *game_id, const char *file, int firstgid, return NULL; } + tileset->firstgid = firstgid; + tileset->tw = tilewidth; + tileset->th = tileheight; + if (prev != NULL) { + prev->next = tileset; + } + tileset->game_id = strdup(game_id); if (tileset->game_id == NULL) { db_err("Failed to allocate memory"); @@ -404,27 +419,10 @@ db_tileset_new(const char *game_id, const char *file, int firstgid, XML_ParserFree(p); fclose(fp); - tileset->firstgid = firstgid; - if (prev != NULL) { - prev->next = tileset; - } - return tileset; } int -db_tileset_tilewidth(struct db_tileset *tileset) -{ - return tileset->tw; -} - -int -db_tileset_tileheight(struct db_tileset *tileset) -{ - return tileset->th; -} - -int db_tileset_tilecount(struct db_tileset *tileset) { return tileset->tc; -- cgit v0.9.1