summaryrefslogtreecommitdiffstats
path: root/src/tileset.c
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-03-25 15:05:37 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-03-25 15:05:37 (EDT)
commit514790f9d67e6dfffb7f6ed338a53be3eb84faeb (patch)
treec1a66e6d4ca47b6556d64f2eb8589c649434c004 /src/tileset.c
parent34ccab84eee6406833b3bbc556301e5f070be2e8 (diff)
downloaddodge-balls-514790f9d67e6dfffb7f6ed338a53be3eb84faeb.zip
dodge-balls-514790f9d67e6dfffb7f6ed338a53be3eb84faeb.tar.gz
dodge-balls-514790f9d67e6dfffb7f6ed338a53be3eb84faeb.tar.bz2
tileset: Ensure tile size matches map's
Diffstat (limited to 'src/tileset.c')
-rw-r--r--src/tileset.c38
1 files changed, 18 insertions, 20 deletions
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;