annotate doc/docs/specs/map.md @ 295:aec448037320

rpg: add support for compressed tilesets/maps
author David Demelier <markand@malikania.fr>
date Wed, 10 Mar 2021 16:40:02 +0100
parents 8ef7fb7f14ad
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
239
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 # Spec: map
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 Maps are probably the most important files within the game, it provides the map
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 definition, structure, actions and player interactions.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 It consists of:
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 - A tileset to use (only one),
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 - A size in terms of number of rows and columns,
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 - 3 layers (background, foreground and above),
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 - 1 layer of actions.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 Just like [tileset](tileset.md), maps are defined in a custom map file format in
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 plain text.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 Maps have an extension of ``.map``.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 ## File format
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
19
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 The file format is a simple plain text where each each line consist of a
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 directive.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 !!! caution
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 Order is important. You must make sure that every directives are listed in
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 the same order.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 The file format must be defined as following where each ``<>`` must be replaced
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 by the appropriate C type name.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 title|<const char *>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 columns|<unsigned int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 rows|<unsigned int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 tileset|<const char *>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 origin|<int>|<int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 layer|background
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 <int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 <int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 ...
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 layer|foreground
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 <int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 <int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 ...
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 layer|above
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 <int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 <int>
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 ...
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 layer|actions
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
48 <int>|<int>|<unsigned int>|<unsigned int>|<int>|<const char *>
239
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 Description of directives:
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 title
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 : Map title, must not exceed 64 bytes.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 columns
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 : Number of columns.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 rows
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 : Number of rows.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 tileset
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 : The tileset to use given as a string name. The path must be relative.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 origin
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 : (Optional) Position in where the player starts bt specifying ``x``, ``y``
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 respectively.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 layer
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 : (Optional) For layers of type ``background``, ``foreground`` and ``above``,
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 defines the tiles to use in order from top-left to bottom-right starting
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 from 1, a value of 0 means no tile to render. If a map has a dimensions of
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 4 columns and 6 the number of tiles must not exceed 24.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 For the layer action, defines an object to be implemented in the API. The
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
75 first 4 integers define the `x`, `y`, `width`, `height` dimensions of the
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
76 action rectangle respectively. The fifth integer argument should be set to 1
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
77 if it must collide with the player or 0 otherwise. The final string is an
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
78 argument to pass to the action and may be omitted.
239
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 ## Examples
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
82 Some examples of valid maps.
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
83
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
84 ### Example of basic map
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
85
239
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 The following file is a map with 4 columns and 2 rows (it is probably small for
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 a real game but at least it is readable for this example). The player starts at
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 10, 10, the background is using the same tile while the foreground is using
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 different tiles.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 title|Small map
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 columns|4
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 rows|2
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 origin|10|10
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 layer|background
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 1
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 1
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 1
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 1
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 1
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 1
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 1
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 1
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 layer|foreground
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 0
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 0
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 2
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 2
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 0
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 0
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 3
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 3
250
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
113
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
114 ### Example of actions
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
115
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
116 !!! note
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
117 For simplicity, we only focus on the `layer|actions` and assume that the
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
118 beginning of the map is valid.
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
119
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
120 This layer of actions contains two blocking regions and one non-blocking action
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
121 that is named "game-over".
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
122
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
123 layer|actions
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
124 100|100|50|50|1
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
125 200|200|50|50|1
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
126 1680|2855|48|48|0|game-over
8ef7fb7f14ad rpg: add support for collisions with actions
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
127