annotate mlk-map/mlk-map.c @ 610:90ac81e4c190

ui: reorder params
author David Demelier <markand@malikania.fr>
date Sat, 12 Aug 2023 09:44:49 +0200
parents e070fdcc592b
children
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 /*
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
2 * mlk-map.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 <stdio.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <string.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
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
24 #include <jansson.h>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
432
38cf60f5a1c4 util: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 420
diff changeset
26 #include <mlk/util/util.h>
315
3bfaaf5342a9 cmake: add support for Visual Studio 2019
David Demelier <markand@malikania.fr>
parents: 314
diff changeset
27
594
e070fdcc592b misc: various cleanups
David Demelier <markand@malikania.fr>
parents: 592
diff changeset
28 static inline int
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
29 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
30 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
31 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
32 strcmp(name, "foreground") == 0 ||
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
33 strcmp(name, "above") == 0 ||
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
34 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
35 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
36
93
d4a72fa16225 misc: miscellaneous issues
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
37 static const json_t *
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
38 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
39 {
578
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
40 const json_t *obj, *key, *value;
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
41 size_t index;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
42
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
43 json_array_foreach(props, index, obj) {
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
44 if (!json_is_object(obj))
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
45 continue;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
46
578
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
47 key = json_object_get(obj, "name");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
48 value = json_object_get(obj, "value");
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
49
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
50 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
51 return value;
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
52 }
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
53
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
54 return NULL;
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
55 }
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
56
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
57 static void
592
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
58 write_player_origin(const json_t *props)
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
59 {
592
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
60 const json_t *x, *y;
578
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
61
592
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
62 x = find_property(props, "player-origin-x");
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
63 y = find_property(props, "player-origin-y");
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
64
592
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
65 if (!x || !json_is_integer(x) ||
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
66 !y || !json_is_integer(y))
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
67 return;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
68
592
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
69 printf("player-origin|%d|%d\n",
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
70 (int)json_integer_value(x),
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
71 (int)json_integer_value(y));
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
72 }
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
73
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
74 static void
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
75 write_player_sprite(const json_t *props)
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
76 {
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
77 const json_t *sprite, *w, *h;
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
78
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
79 sprite = find_property(props, "player-sprite");
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
80 w = find_property(props, "player-sprite-w");
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
81 h = find_property(props, "player-sprite-h");
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
82
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
83 if (!sprite || !json_is_string(sprite) ||
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
84 !w || !json_is_integer(w) ||
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
85 !h || !json_is_integer(h))
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
86 return;
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
87
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
88 printf("player-sprite|%d|%d|%s\n",
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
89 (int)json_integer_value(w),
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
90 (int)json_integer_value(h),
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
91 json_string_value(sprite)
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
92 );
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
93 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
94
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
95 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
96 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
97 {
592
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
98 write_player_origin(props);
1560ef13146c rpg: map support player sprite
David Demelier <markand@malikania.fr>
parents: 578
diff changeset
99 write_player_sprite(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
100 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
101
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 static void
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
103 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
104 {
578
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
105 json_t *width, *height;
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
106
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
107 width = json_object_get(document, "width");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
108 height = json_object_get(document, "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
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))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
111 mlk_util_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))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
113 mlk_util_die("missing 'height' 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
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
578
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
124 const json_t *x, *y, *width, *height, *props, *exec, *block;
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
125
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
126 x = json_object_get(object, "x");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
127 y = json_object_get(object, "y");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
128 width = json_object_get(object, "width");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
129 height = json_object_get(object, "height");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
130 props = json_object_get(object, "properties");
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))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
133 mlk_util_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))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
135 mlk_util_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))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
137 mlk_util_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))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
139 mlk_util_die("invalid 'height' property in object\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
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 {
578
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
162 json_t *objects, *data, *name, *tile, *object;
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
163 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
164
578
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
165 objects = json_object_get(layer, "objects");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
166 data = json_object_get(layer, "data");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
167 name = json_object_get(layer, "name");
f271681ce015 mlk-map: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
168
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
169 if (!name || !json_is_string(name))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
170 mlk_util_die("invalid 'name' property in layer");
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
171 if (!is_layer(json_string_value(name)))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
172 mlk_util_die("invalid 'name' layer: %s\n", json_string_value(name));
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
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 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
175
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 /* 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
177 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
178 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
179 if (!json_is_integer(tile))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
180 mlk_util_die("invalid 'data' property in layer\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
181
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
182 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
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
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 /* 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
187 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
188 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
189 if (!json_is_object(object))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
190 mlk_util_die("invalid 'objects' property in layer\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
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 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
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
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 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
198 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
199 {
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 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
201 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
202
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 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
204 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
205
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 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
207 if (!json_is_object(layer))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
208 mlk_util_die("layer is not an object\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
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 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
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
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
214 static void
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents: 212
diff changeset
215 write_tileset(const json_t *tilesets)
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
216 {
554
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 524
diff changeset
217 char path[MLK_PATH_MAX], *ext;
215
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)
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
221 mlk_util_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))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
227 mlk_util_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));
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
554
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 524
diff changeset
232 if (!(ext = strstr(path, ".json")))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
233 mlk_util_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
554
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 524
diff changeset
237 printf("tileset|%s.tileset\n", 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
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)
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
249 mlk_util_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 }