Mercurial > molko
annotate libmlk-rpg/mlk/rpg/map.h @ 646:7e1eb7f6c049 default tip @
misc: remove .clang
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 04 Feb 2024 15:24:37 +0100 |
parents | cb8ca73f1aa4 |
children |
rev | line source |
---|---|
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * map.h -- game map |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
445
773a082f0b91
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
442
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
19 #ifndef MLK_RPG_MAP_H |
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
20 #define MLK_RPG_MAP_H |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
210
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
22 #include <stddef.h> |
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
23 |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
24 #include "walksprite.h" |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
26 struct mlk_map; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
27 struct mlk_tileset; |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
28 |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
29 union mlk_event; |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
31 enum mlk_map_layer_type { |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
32 MLK_MAP_LAYER_TYPE_BG, |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
33 MLK_MAP_LAYER_TYPE_FG, |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
34 MLK_MAP_LAYER_TYPE_ABOVE, |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
35 MLK_MAP_LAYER_TYPE_LAST |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
36 }; |
98
c7e993455985
map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
37 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
38 struct mlk_map_layer { |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
39 unsigned int *tiles; |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 }; |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
42 enum mlk_map_flags { |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
43 MLK_MAP_FLAGS_NONE = 0, |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
44 MLK_MAP_FLAGS_SHOW_GRID = (1 << 0), |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
45 MLK_MAP_FLAGS_SHOW_COLLIDE = (1 << 2) |
210
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
46 }; |
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
47 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
48 struct mlk_map_block { |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
49 int x; |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
50 int y; |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
51 unsigned int w; |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
52 unsigned int h; |
250
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
53 }; |
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
54 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
55 struct mlk_map_style { |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
56 unsigned long grid_color; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
57 unsigned long collision_color; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
58 }; |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
212
diff
changeset
|
59 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
60 struct mlk_map_delegate { |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
61 void *data; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
62 void (*update)(struct mlk_map_delegate *self, struct mlk_map *map, unsigned int ticks); |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
63 void (*draw)(struct mlk_map_delegate *self, const struct mlk_map *map); |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
64 }; |
210
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
65 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
66 struct mlk_map { |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
67 unsigned int columns; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
68 unsigned int rows; |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
69 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
70 struct mlk_tileset *tileset; |
250
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
71 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
72 enum mlk_map_flags flags; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
73 |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
74 const struct mlk_map_block *blocks; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
75 size_t blocksz; |
212
ddfe0a211169
rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents:
211
diff
changeset
|
76 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
77 struct mlk_sprite *player_sprite; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
78 int player_x; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
79 int player_y; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
80 int player_a; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
81 unsigned int player_movement; |
599
cb8ca73f1aa4
rpg: walksprite -> mlk_walksprite
David Demelier <markand@malikania.fr>
parents:
554
diff
changeset
|
82 struct mlk_walksprite player_ws; |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
83 |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
84 int view_x; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
85 int view_y; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
86 unsigned int view_w; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
87 unsigned int view_h; |
98
c7e993455985
map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
88 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
89 int margin_x; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
90 int margin_y; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
91 unsigned int margin_w; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
92 unsigned int margin_h; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
93 |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
94 struct mlk_map_layer layers[MLK_MAP_LAYER_TYPE_LAST]; |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
95 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
96 struct mlk_button_style *style; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
97 struct mlk_button_delegate *delegate; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
98 }; |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
99 |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
100 extern struct mlk_map_style mlk_map_style; |
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
101 extern struct mlk_map_delegate mlk_map_delegate; |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
468
diff
changeset
|
103 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
468
diff
changeset
|
104 extern "C" { |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
468
diff
changeset
|
105 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
250
diff
changeset
|
106 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
107 int |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
108 mlk_map_init(struct mlk_map *map); |
124
7b84764741b6
core: allows loading maps from memory, closes #2489
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
109 |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
110 void |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
111 mlk_map_handle(struct mlk_map *map, const union mlk_event *ev); |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
112 |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
113 void |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
114 mlk_map_update(struct mlk_map *map, unsigned int ticks); |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 void |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
117 mlk_map_draw(const struct mlk_map *map); |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
118 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
119 void |
554
cdbc13ceff85
rpg: do the same for map
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
120 mlk_map_finish(struct mlk_map *map); |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
468
diff
changeset
|
122 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
468
diff
changeset
|
123 } |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
468
diff
changeset
|
124 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
250
diff
changeset
|
125 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
126 #endif /* !MLK_RPG_MAP_H */ |