Mercurial > molko
annotate libmlk-rpg/mlk/rpg/map.h @ 445:773a082f0b91
misc: update copyright years
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 01 Feb 2023 13:08:54 +0100 |
parents | 9c3b3935f0aa |
children | b26dd49f69ff |
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 |
431
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
24 #include <mlk/core/action.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
25 #include <mlk/core/action-stack.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
26 #include <mlk/core/core.h> |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
27 |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
28 #include "walksprite.h" |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
212
diff
changeset
|
30 struct tileset; |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
31 |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
32 union event; |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
34 enum map_layer_type { |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
35 MAP_LAYER_TYPE_BACKGROUND, |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
36 MAP_LAYER_TYPE_FOREGROUND, |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
37 MAP_LAYER_TYPE_ABOVE, |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
38 MAP_LAYER_TYPE_NUM |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
39 }; |
98
c7e993455985
map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
40 |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 struct map_layer { |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
42 unsigned short *tiles; |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 }; |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 |
210
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
45 enum map_flags { |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
46 MAP_FLAGS_NONE = 0, |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
47 MAP_FLAGS_SHOW_GRID = (1 << 0), |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
48 MAP_FLAGS_SHOW_COLLIDE = (1 << 2) |
210
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
49 }; |
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
50 |
250
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
51 struct map_block { |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
52 int x; |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
53 int y; |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
54 unsigned int w; |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
55 unsigned int h; |
250
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
56 }; |
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
57 |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
58 struct map { |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
59 const char *title; /*!< (+) Map title name. */ |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
212
diff
changeset
|
60 unsigned int columns; /*!< (-) Number of columns. */ |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
212
diff
changeset
|
61 unsigned int rows; /*!< (-) Number of rows. */ |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
212
diff
changeset
|
62 |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
212
diff
changeset
|
63 /* Tileset. */ |
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
212
diff
changeset
|
64 struct tileset *tileset; /*!< (+&?) Tileset to use. */ |
210
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
65 |
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
66 /* View options. */ |
70e6ed74940d
rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
67 enum map_flags flags; /*!< (+) View options. */ |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
68 |
250
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
69 /* Extra collisions blocks. */ |
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
70 struct map_block *blocks; /*!< (+&?) Extra collisions. */ |
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
71 size_t blocksz; /*!< (+) Number of collisions. */ |
8ef7fb7f14ad
rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
72 |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
212
diff
changeset
|
73 /* List of actions. */ |
442
9c3b3935f0aa
core: rework allocations
David Demelier <markand@malikania.fr>
parents:
434
diff
changeset
|
74 struct mlk_action_stack astack_par; /*!< (+) Parallel actions. */ |
9c3b3935f0aa
core: rework allocations
David Demelier <markand@malikania.fr>
parents:
434
diff
changeset
|
75 struct mlk_action_stack astack_seq; /*!< (+) Blocking actions. */ |
212
ddfe0a211169
rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents:
211
diff
changeset
|
76 |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
77 /* Player. */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
78 struct sprite *player_sprite; /*!< (+) The sprite to use */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
79 struct walksprite player_ws; /*!< (-) Walking sprite for moving the player. */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
80 int player_x; /*!< (+) Player position in x */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
81 int player_y; /*!< (+) Player position in y */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
82 int player_angle; /*!< (+) Player angle (see walksprite) */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
83 unsigned int player_movement; /*!< (*) Current player movements. */ |
98
c7e993455985
map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
84 |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
85 /* View to zoom/locate. */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
86 int view_x; /*!< (+) Position in x */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
87 int view_y; /*!< (+) Position in y */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
88 unsigned int view_w; /*!< (+) View width */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
89 unsigned int view_h; /*!< (+) View height */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
90 |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
91 /* View margin. */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
92 int margin_x; /*!< (+) View margin in x. */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
93 int margin_y; /*!< (+) View margin in y. */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
94 unsigned int margin_w; /*!< (+) Margin width. */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
95 unsigned int margin_h; /*!< (+) Margin height. */ |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
96 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
97 /* Different tile layers. */ |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
98 struct map_layer layers[MAP_LAYER_TYPE_NUM]; |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 }; |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
250
diff
changeset
|
101 CORE_BEGIN_DECLS |
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
250
diff
changeset
|
102 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
103 int |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
104 map_init(struct map *map); |
124
7b84764741b6
core: allows loading maps from memory, closes #2489
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
105 |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
106 void |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
107 map_handle(struct map *map, const union event *ev); |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
108 |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
109 void |
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
110 map_update(struct map *map, unsigned int ticks); |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 |
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 void |
197
852d0b7817ce
rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
113 map_draw(const struct map *map); |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
114 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
115 void |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
59
diff
changeset
|
116 map_finish(struct map *map); |
27
607bd90aba63
core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
250
diff
changeset
|
118 CORE_END_DECLS |
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
250
diff
changeset
|
119 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
120 #endif /* !MLK_RPG_MAP_H */ |