From 450d5ac3f8c631e01d6a56f5507835cfd4272867 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 4 Mar 2021 17:07:35 +0000 Subject: change NSCR palettes to operate based on tilesets and not layers --- tools/nitrogfx/json.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'tools/nitrogfx/json.c') diff --git a/tools/nitrogfx/json.c b/tools/nitrogfx/json.c index 7804a2ba..7907b515 100644 --- a/tools/nitrogfx/json.c +++ b/tools/nitrogfx/json.c @@ -175,6 +175,17 @@ struct JsonToScreenOptions *ParseNSCRJson(char *path) cJSON *layer = NULL; cJSON *layers = cJSON_GetObjectItemCaseSensitive(json, "layers"); int palette = 0; + cJSON *tilesets = cJSON_GetObjectItemCaseSensitive(json, "tilesets"); + int tilesetSize = 0; + if (cJSON_GetArraySize(tilesets) != 1) + { + cJSON *tileset = cJSON_GetArrayItem(tilesets, 1); + cJSON *firstGid = cJSON_GetObjectItemCaseSensitive(tileset, "firstgid"); + tilesetSize = GetInt(firstGid) - 1; + if (tilesetSize <= 1) + FATAL_ERROR("Wrong tileset index (tileset 0 should be added first)\n"); + } + cJSON_ArrayForEach(layer, layers) { cJSON *tile = NULL; @@ -183,6 +194,11 @@ struct JsonToScreenOptions *ParseNSCRJson(char *path) cJSON_ArrayForEach(tile, data) { int tileInt = GetInt(tile) - 1; + if (tilesetSize != 0) + { + palette = tileInt / tilesetSize; + tileInt %= tilesetSize; + } if (tileInt != -1) { bool vFlip = tileInt >> 30; @@ -194,7 +210,6 @@ struct JsonToScreenOptions *ParseNSCRJson(char *path) } i++; } - palette++; } cJSON_Delete(json); -- cgit v1.2.3 From d290ce10aaa6c9a8d3ba5198ad786d43e0c9b1e5 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 4 Mar 2021 20:17:58 +0000 Subject: only perform modulo if the tile is not -1 --- tools/nitrogfx/json.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'tools/nitrogfx/json.c') diff --git a/tools/nitrogfx/json.c b/tools/nitrogfx/json.c index 7907b515..53f83ceb 100644 --- a/tools/nitrogfx/json.c +++ b/tools/nitrogfx/json.c @@ -194,13 +194,13 @@ struct JsonToScreenOptions *ParseNSCRJson(char *path) cJSON_ArrayForEach(tile, data) { int tileInt = GetInt(tile) - 1; - if (tilesetSize != 0) - { - palette = tileInt / tilesetSize; - tileInt %= tilesetSize; - } if (tileInt != -1) { + if (tilesetSize != 0) + { + palette = tileInt / tilesetSize; + tileInt %= tilesetSize; + } bool vFlip = tileInt >> 30; bool hFlip = tileInt >> 31; tileInt |= vFlip << 11; -- cgit v1.2.3