annotate mlk-map/mlk-map.c @ 445:773a082f0b91

misc: update copyright years
author David Demelier <markand@malikania.fr>
date Wed, 01 Feb 2023 13:08:54 +0100
parents 556c8e2ff995
children 4607eea0eabc
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 *
445
773a082f0b91 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
4 * Copyright (c) 2020-2023 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
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
20 #include <limits.h>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <stdarg.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <stdbool.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <stdio.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <stdlib.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <string.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
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 <jansson.h>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
432
38cf60f5a1c4 util: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 420
diff changeset
29 #include <mlk/util/util.h>
315
3bfaaf5342a9 cmake: add support for Visual Studio 2019
David Demelier <markand@malikania.fr>
parents: 314
diff changeset
30
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 static void
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 die(const char *fmt, ...)
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 {
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 assert(fmt);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 va_list ap;
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 va_start(ap, fmt);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 vfprintf(stderr, fmt, ap);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 va_end(ap);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 exit(1);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 }
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
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
44 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
45 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
46 {
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 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
48 strcmp(name, "foreground") == 0 ||
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
49 strcmp(name, "above") == 0 ||
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
50 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
51 }
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
93
d4a72fa16225 misc: miscellaneous issues
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
53 static const json_t *
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
54 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
55 {
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
56 const json_t *obj;
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
57 size_t index;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
58
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
59 json_array_foreach(props, index, obj) {
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
60 if (!json_is_object(obj))
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
61 continue;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
62
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
63 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
64 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
65
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
66 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
67 return value;
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
68 }
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 return NULL;
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
71 }
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
72
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
73 static void
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
74 write_title(const json_t *props)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
75 {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
76 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
77
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
78 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
79 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
80 }
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 static void
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
83 write_origin(const json_t *props)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
84 {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
85 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
86 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
87
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
88 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
89 !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
90 return;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
91
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
92 printf("origin|%d|%d\n",
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
93 (int)json_integer_value(prop_origin_x),
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
94 (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
95 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
96
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
97 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
98 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
99 {
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
100 write_title(props);
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
101 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
102 }
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 static void
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
105 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
106 {
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
107 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
108 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
109
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
110 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
111 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
112 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
113 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
114
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
115 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
116 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
117 }
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 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
120 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
121 {
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 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
123
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 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
125 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
126 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
127 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
128 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
129 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
130
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
131 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
132 die("invalid 'x' property in object\n");
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
133 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
134 die("invalid 'y' property in object\n");
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
135 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
136 die("invalid 'width' property in object\n");
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
137 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
138 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
139
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
140 /* 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
141 block = find_property(props, "block");
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
142
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
143 /* 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
144 printf("%d|%d|%d|%d|%d",
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
145 (int)json_integer_value(x),
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
146 (int)json_integer_value(y),
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
147 (int)json_integer_value(width),
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
148 (int)json_integer_value(height),
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
149 (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
150 );
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
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
152 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
153 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
154
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
155 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
156 }
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 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
159 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
160 {
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 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
162 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
163 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
164 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
165 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
166
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 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
168 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
169 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
170 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
171
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 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
173
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 /* 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
175 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
176 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
177 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
178 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
179
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
180 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
181 }
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 /* 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
185 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
186 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
187 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
188 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
189
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 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
191 }
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 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
196 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
197 {
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 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
199 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
200
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 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
202 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
203
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 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
205 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
206 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
207
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 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
209 }
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 static void
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
213 write_tileset(const json_t *tilesets)
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
214 {
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
215 char path[PATH_MAX];
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
216 char filename[FILENAME_MAX] = {0}, *ext;
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
217 const json_t *tileset, *source;
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
218
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
219 if (json_array_size(tilesets) != 1)
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
220 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
221
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
222 tileset = json_array_get(tilesets, 0);
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
223 source = json_object_get(tileset, "source");
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
224
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
225 if (!json_is_string(source))
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
226 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
227
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
228 /* 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
229 snprintf(path, sizeof (path), "%s", json_string_value(source));
420
7d2ebc334c8c misc: rename core to util
David Demelier <markand@malikania.fr>
parents: 414
diff changeset
230 snprintf(filename, sizeof (filename), "%s", util_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
231
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
232 if (!(ext = strstr(filename, ".json")))
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
233 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
234
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
235 *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
236
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
237 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
238 }
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
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 int
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 main(void)
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 {
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
243 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
244 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
245
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 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
247
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 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
249 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
250
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
251 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
252 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
253 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
254 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
255
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
256 json_decref(document);
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 }