diff options
author | Revo <projectrevotpp@hotmail.com> | 2021-03-04 17:14:04 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-04 17:14:04 -0500 |
commit | d20df80576fa38292c5157db06c86e15e8542be8 (patch) | |
tree | 73322c66efb9c2a040ecbc9ce27c08316bd83a64 /tools/nitrogfx/json.c | |
parent | 1d422e734eeec12d64cd965baa9aac310876a480 (diff) | |
parent | d290ce10aaa6c9a8d3ba5198ad786d43e0c9b1e5 (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.c | 17 |
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); |