Mercurial > molko
annotate src/tools/tileset/main.c @ 320:8f9937403749
misc: improve loading of data
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 01 Oct 2021 20:30:00 +0200 |
parents | tools/tileset/main.c@d01e83210ca2 |
children | 7d7991f97acf |
rev | line source |
---|---|
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
218
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
2 * main.c -- convert tiled tilesets JSON files into custom files |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
314 | 4 * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr> |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <stdarg.h> |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <stdio.h> |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <stdnoreturn.h> |
218
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
23 #include <string.h> |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <jansson.h> |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 static noreturn void |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 die(const char *fmt, ...) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 { |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 assert(fmt); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 va_list ap; |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 va_start(ap, fmt); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 vfprintf(stderr, fmt, ap); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 va_end(ap); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 exit(1); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 } |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 static void |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 write_dimensions(const json_t *document) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 { |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 const json_t *tilewidth = json_object_get(document, "tilewidth"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 const json_t *tileheight = json_object_get(document, "tileheight"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 if (!json_is_integer(tilewidth)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 die("invalid 'tilewidth' property\n"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 if (!json_is_integer(tileheight)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 die("invalid 'tileheight' property\n"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 printf("tilewidth|%u\n", (unsigned int)json_integer_value(tilewidth)); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 printf("tileheight|%u\n", (unsigned int)json_integer_value(tileheight)); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 } |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 static void |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 write_image(const json_t *document) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 { |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 const json_t *image = json_object_get(document, "image"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 if (!json_is_string(image)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 die("invalid 'image' property\n"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 printf("image|%s\n", json_string_value(image)); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 } |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 |
218
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
66 static const json_t * |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
67 find_property_value(const json_t *array, const char *prop) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
68 { |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
69 const json_t *obj; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
70 size_t i; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
71 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
72 json_array_foreach(array, i, obj) { |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
73 const json_t *name = json_object_get(obj, "name"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
74 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
75 if (!name || !json_is_string(name)) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
76 die("invalid property object\n"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
77 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
78 if (strcmp(json_string_value(name), prop) == 0) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
79 return json_object_get(obj, "value"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
80 } |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
81 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
82 return NULL; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
83 } |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
84 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
85 static void |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
86 write_animation(const json_t *tile) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
87 { |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
88 const json_t *id = json_object_get(tile, "id"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
89 const json_t *properties = json_object_get(tile, "properties"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
90 const json_t *file = find_property_value(properties, "animation-file"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
91 const json_t *delay = find_property_value(properties, "animation-delay"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
92 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
93 /* Animations are completely optional. */ |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
94 if (!json_is_array(properties)) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
95 return; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
96 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
97 if (!json_is_integer(id)) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
98 die("invalid 'id' property in tile\n"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
99 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
100 if (json_is_string(file)) { |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
101 printf("%d|%s|", (int)json_integer_value(id), json_string_value(file)); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
102 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
103 if (json_is_integer(delay)) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
104 printf("%d\n", (int)json_integer_value(delay)); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
105 else |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
106 printf("10\n"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
107 } |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
108 } |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
109 |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 static void |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 write_tiledef(const json_t *tile) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 { |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 const json_t *id = json_object_get(tile, "id"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 const json_t *objectgroup = json_object_get(tile, "objectgroup"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 const json_t *objects = json_object_get(objectgroup, "objects"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 const json_t *first = json_array_get(objects, 0); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 const json_t *x, *y, *w, *h; |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 |
218
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
119 /* Collisions are optional. */ |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
120 if (!json_is_object(objectgroup)) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
121 return; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
122 |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 if (!json_is_integer(id)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 die("invalid 'id' property in tile\n"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 if (!json_is_array(objects)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 die("invalid 'objects' property in tile\n"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 x = json_object_get(first, "x"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 y = json_object_get(first, "y"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 w = json_object_get(first, "width"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 h = json_object_get(first, "height"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 if (!json_is_integer(x) || !json_is_integer(y) || |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 !json_is_integer(w) || !json_is_integer(h)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 die("invalid collide object in tile description\n"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 printf("%d|%d|%d|%d|%d\n", |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 (int)json_integer_value(id), |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 (int)json_integer_value(x), |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 (int)json_integer_value(y), |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 (int)json_integer_value(w), |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 (int)json_integer_value(h)); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 } |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 static void |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 write_tiledefs(const json_t *tiles) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 { |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 size_t index; |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 json_t *object; |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 if (!json_is_array(tiles)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 return; |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 puts("tiledefs"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 json_array_foreach(tiles, index, object) { |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 if (!json_is_object(object)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 die("tile is not an object\n"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 write_tiledef(object); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 } |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 } |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 |
218
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
164 static void |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
165 write_animations(const json_t *tiles) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
166 { |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
167 size_t index; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
168 json_t *object; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
169 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
170 if (!json_is_array(tiles)) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
171 return; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
172 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
173 puts("animations"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
174 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
175 json_array_foreach(tiles, index, object) { |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
176 if (!json_is_object(object)) |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
177 die("tile is not an object\n"); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
178 |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
179 write_animation(object); |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
180 } |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
181 } |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
182 |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 int |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 main(int argc, char *argv[]) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 { |
218
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
186 (void)argc; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
187 (void)argv; |
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
188 |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 json_t *document; |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 json_error_t error; |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 document = json_loadf(stdin, 0, &error); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 if (!document) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 die("%d:%d: %s\n", error.line, error.column, error.text); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 if (!json_is_object(document)) |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 die("root value isn't an object\n"); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 write_dimensions(document); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 write_image(document); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 write_tiledefs(json_object_get(document, "tiles")); |
218
71f989ae8de9
rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
202 write_animations(json_object_get(document, "tiles")); |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 json_decref(document); |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 } |