annotate tools/map/main.c @ 314:d01e83210ca2

misc: update years
author David Demelier <markand@malikania.fr>
date Wed, 22 Sep 2021 07:22:20 +0200
parents 8ef7fb7f14ad
children 3bfaaf5342a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
2 * main.c -- convert tiled tiled JSON files into custom files
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
314
d01e83210ca2 misc: update years
David Demelier <markand@malikania.fr>
parents: 250
diff changeset
4 * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
19 #define _XOPEN_SOURCE 700
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <assert.h>
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
21 #include <libgen.h>
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
22 #include <limits.h>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <stdarg.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <stdbool.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <stdio.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <stdlib.h>
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
27 #include <stdnoreturn.h>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <string.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
30 #include <jansson.h>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 static void
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 die(const char *fmt, ...)
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 {
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 assert(fmt);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 va_list ap;
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 va_start(ap, fmt);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 vfprintf(stderr, fmt, ap);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 va_end(ap);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 exit(1);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 }
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
45 static bool
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
46 is_layer(const char *name)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
47 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
48 return strcmp(name, "background") == 0 ||
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
49 strcmp(name, "foreground") == 0 ||
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
50 strcmp(name, "above") == 0 ||
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
51 strcmp(name, "actions") == 0;
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
52 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
53
93
d4a72fa16225 misc: miscellaneous issues
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
54 static const json_t *
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
55 find_property(const json_t *props, const char *which)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
56 {
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
57 const json_t *obj;
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
58 size_t index;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
59
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
60 json_array_foreach(props, index, obj) {
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
61 if (!json_is_object(obj))
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
62 continue;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
63
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
64 const json_t *key = json_object_get(obj, "name");
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
65 const json_t *value = json_object_get(obj, "value");
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
66
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
67 if (json_is_string(key) && value && strcmp(json_string_value(key), which) == 0)
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
68 return value;
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
69 }
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
70
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
71 return NULL;
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
72 }
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
73
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
74 static void
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
75 write_title(const json_t *props)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
76 {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
77 const json_t *prop_title = find_property(props, "title");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
78
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
79 if (prop_title && json_is_string(prop_title))
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
80 printf("title|%s\n", json_string_value(prop_title));
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
81 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
82
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
83 static void
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
84 write_origin(const json_t *props)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
85 {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
86 const json_t *prop_origin_x = find_property(props, "origin-x");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
87 const json_t *prop_origin_y = find_property(props, "origin-y");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
88
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
89 if (!prop_origin_x || !json_is_integer(prop_origin_x) ||
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
90 !prop_origin_y || !json_is_integer(prop_origin_y))
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
91 return;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
92
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
93 printf("origin|%d|%d\n",
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
94 (int)json_integer_value(prop_origin_x),
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
95 (int)json_integer_value(prop_origin_y));
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
96 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
97
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
98 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
99 write_properties(const json_t *props)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
100 {
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
101 write_title(props);
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
102 write_origin(props);
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
103 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
104
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
105 static void
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
106 write_dimensions(const json_t *document)
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
107 {
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
108 json_t *width = json_object_get(document, "width");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
109 json_t *height = json_object_get(document, "height");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
110
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
111 if (!width || !json_is_integer(width))
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
112 die("missing 'width' property\n");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
113 if (!height || !json_is_integer(height))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
114 die("missing 'height' property\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
115
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
116 printf("columns|%d\n", (int)json_integer_value(width));
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
117 printf("rows|%d\n", (int)json_integer_value(height));
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
118 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
119
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
120 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
121 write_object(const json_t *object)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
122 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
123 assert(json_is_object(object));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
124
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
125 json_t *x = json_object_get(object, "x");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
126 json_t *y = json_object_get(object, "y");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
127 json_t *width = json_object_get(object, "width");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
128 json_t *height = json_object_get(object, "height");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
129 json_t *props = json_object_get(object, "properties");
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
130 const json_t *exec, *block;
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
131
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
132 if (!x || !json_is_number(x))
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
133 die("invalid 'x' property in object\n");
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
134 if (!y || !json_is_number(y))
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
135 die("invalid 'y' property in object\n");
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
136 if (!width || !json_is_number(width))
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
137 die("invalid 'width' property in object\n");
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
138 if (!height || !json_is_number(height))
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
139 die("invalid 'height' property in object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
140
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
141 /* This is optional and set to 0 if not present. */
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
142 block = find_property(props, "block");
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
143
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
144 /* In tiled, those properties are float but we only use ints in MA */
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
145 printf("%d|%d|%d|%d|%d",
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
146 (int)json_integer_value(x),
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
147 (int)json_integer_value(y),
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
148 (int)json_integer_value(width),
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
149 (int)json_integer_value(height),
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
150 (int)json_is_true(block)
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
151 );
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
152
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
153 if ((exec = find_property(props, "exec")) && json_is_string(exec))
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
154 printf("|%s", json_string_value(exec));
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
155
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
156 printf("\n");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
157 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
158
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
159 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
160 write_layer(const json_t *layer)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
161 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
162 json_t *objects = json_object_get(layer, "objects");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
163 json_t *data = json_object_get(layer, "data");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
164 json_t *name = json_object_get(layer, "name");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
165 json_t *tile, *object;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
166 size_t index;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
167
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
168 if (!name || !json_is_string(name))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
169 die("invalid 'name' property in layer");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
170 if (!is_layer(json_string_value(name)))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
171 die("invalid 'name' layer: %s\n", json_string_value(name));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
172
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
173 printf("layer|%s\n", json_string_value(name));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
174
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
175 /* Only foreground/background have 'data' property */
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
176 if (json_is_array(data)) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
177 json_array_foreach(data, index, tile) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
178 if (!json_is_integer(tile))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
179 die("invalid 'data' property in layer\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
180
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
181 printf("%d\n", (int)json_integer_value(tile));
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
182 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
183 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
184
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
185 /* Only objects has 'objects' property */
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
186 if (json_is_array(objects)) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
187 json_array_foreach(objects, index, object) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
188 if (!json_is_object(object))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
189 die("invalid 'objects' property in layer\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
190
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
191 write_object(object);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
192 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
193 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
194 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
195
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
196 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
197 write_layers(const json_t *layers)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
198 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
199 size_t index;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
200 json_t *layer;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
201
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
202 if (!layers)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
203 return;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
204
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
205 json_array_foreach(layers, index, layer) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
206 if (!json_is_object(layer))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
207 die("layer is not an object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
208
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
209 write_layer(layer);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
210 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
211 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
212
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
213 static void
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
214 write_tileset(const json_t *tilesets)
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
215 {
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
216 char path[PATH_MAX];
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
217 char filename[FILENAME_MAX] = {0}, *ext;
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
218 const json_t *tileset, *source;
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
219
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
220 if (json_array_size(tilesets) != 1)
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
221 die("map must contain exactly one tileset");
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
222
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
223 tileset = json_array_get(tilesets, 0);
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
224 source = json_object_get(tileset, "source");
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
225
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
226 if (!json_is_string(source))
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
227 die("invalid 'source' property in tileset\n");
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
228
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
229 /* We need to replace the .json extension to .tileset. */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
230 snprintf(path, sizeof (path), "%s", json_string_value(source));
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
231 snprintf(filename, sizeof (filename), "%s", basename(path));
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
232
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
233 if (!(ext = strstr(filename, ".json")))
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
234 die("could not determine tileset extension");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
235
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
236 *ext = '\0';
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
237
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
238 printf("tileset|%s.tileset\n", filename);
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
239 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
240
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 int
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 main(void)
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 {
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
244 json_t *document;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
245 json_error_t error;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
246
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
247 document = json_loadf(stdin, 0, &error);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
248
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
249 if (!document)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
250 die("%d:%d: %s\n", error.line, error.column, error.text);
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
251
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
252 write_properties(json_object_get(document, "properties"));
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
253 write_dimensions(document);
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
254 write_layers(json_object_get(document, "layers"));
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
255 write_tileset(json_object_get(document, "tilesets"));
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
256
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
257 json_decref(document);
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 }