summaryrefslogtreecommitdiff
path: root/tools/nitrogfx/json.c
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2021-03-04 17:14:04 -0500
committerGitHub <noreply@github.com>2021-03-04 17:14:04 -0500
commitd20df80576fa38292c5157db06c86e15e8542be8 (patch)
tree73322c66efb9c2a040ecbc9ce27c08316bd83a64 /tools/nitrogfx/json.c
parent1d422e734eeec12d64cd965baa9aac310876a480 (diff)
parentd290ce10aaa6c9a8d3ba5198ad786d43e0c9b1e5 (diff)
Merge pull request #324 from red031000/master
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..53f83ceb 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;
@@ -185,6 +196,11 @@ struct JsonToScreenOptions *ParseNSCRJson(char *path)
int tileInt = GetInt(tile) - 1;
if (tileInt != -1)
{
+ if (tilesetSize != 0)
+ {
+ palette = tileInt / tilesetSize;
+ tileInt %= tilesetSize;
+ }
bool vFlip = tileInt >> 30;
bool hFlip = tileInt >> 31;
tileInt |= vFlip << 11;
@@ -194,7 +210,6 @@ struct JsonToScreenOptions *ParseNSCRJson(char *path)
}
i++;
}
- palette++;
}
cJSON_Delete(json);