summaryrefslogtreecommitdiff
path: root/tools/nitrogfx/json.c
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2021-03-04 17:07:35 +0000
committerred031000 <rubenru09@aol.com>2021-03-04 17:09:59 +0000
commit450d5ac3f8c631e01d6a56f5507835cfd4272867 (patch)
tree960fec430ce44d7606d7fb27d916bdd9fe565933 /tools/nitrogfx/json.c
parent1d422e734eeec12d64cd965baa9aac310876a480 (diff)
change NSCR palettes to operate based on tilesets and not layers
Diffstat (limited to 'tools/nitrogfx/json.c')
-rw-r--r--tools/nitrogfx/json.c17
1 files changed, 16 insertions, 1 deletions
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);