Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | pmbaty | 1 | /* |
2 | * src/maps.h |
||
3 | * |
||
4 | * Copyright (C) 1998-2002 BigOrno (bigorno@bigorno.net). All rights reserved. |
||
5 | * |
||
6 | * The use and distribution terms for this software are contained in the file |
||
7 | * named README, which can be found in the root of this distribution. By |
||
8 | * using this software in any fashion, you are agreeing to be bound by the |
||
9 | * terms of this license. |
||
10 | * |
||
11 | * You must not remove this notice, or any other, from this software. |
||
12 | */ |
||
13 | |||
14 | #ifndef _MAPS_H |
||
15 | #define _MAPS_H |
||
16 | |||
17 | #include "system.h" |
||
18 | |||
19 | #define MAP_NBR_MAPS 0x05 |
||
20 | #define MAP_NBR_SUBMAPS 0x2F |
||
21 | #define MAP_NBR_CONNECT 0x99 |
||
22 | #define MAP_NBR_BNUMS 0x1FD8 |
||
23 | #define MAP_NBR_BLOCKS 0x0100 |
||
24 | #define MAP_NBR_MARKS 0x020B |
||
25 | #define MAP_NBR_EFLGC 0x0020 |
||
26 | |||
27 | /* |
||
28 | * map row definitions, for three zones : hidden top, screen, hidden bottom |
||
29 | * the three zones compose map_map, which contains the definition of the |
||
30 | * current portion of the submap. |
||
31 | */ |
||
32 | #define MAP_ROW_HTTOP 0x00 |
||
33 | #define MAP_ROW_HTBOT 0x07 |
||
34 | #define MAP_ROW_SCRTOP 0x08 |
||
35 | #define MAP_ROW_SCRBOT 0x1F |
||
36 | #define MAP_ROW_HBTOP 0x20 |
||
37 | #define MAP_ROW_HBBOT 0x27 |
||
38 | |||
39 | extern U8 map_map[0x2c][0x20]; |
||
40 | |||
41 | /* |
||
42 | * main maps |
||
43 | */ |
||
44 | typedef struct |
||
45 | { |
||
46 | U16 x, y; /* initial position for rick */ |
||
47 | U16 row; /* initial map_map top row within the submap */ |
||
48 | U16 submap; /* initial submap */ |
||
49 | char *tune; /* map tune */ |
||
50 | } map_t; |
||
51 | |||
52 | extern map_t map_maps[MAP_NBR_MAPS]; |
||
53 | |||
54 | /* |
||
55 | * sub maps |
||
56 | */ |
||
57 | typedef struct |
||
58 | { |
||
59 | U16 page; /* tiles page */ |
||
60 | U16 bnum; /* first block number */ |
||
61 | U16 connect; /* first connection */ |
||
62 | U16 mark; /* first entity mark */ |
||
63 | } submap_t; |
||
64 | |||
65 | extern submap_t map_submaps[MAP_NBR_SUBMAPS]; |
||
66 | |||
67 | /* |
||
68 | * connections |
||
69 | */ |
||
70 | typedef struct |
||
71 | { |
||
72 | U8 dir; |
||
73 | U8 rowout; |
||
74 | U8 submap; |
||
75 | U8 rowin; |
||
76 | } connect_t; |
||
77 | |||
78 | extern connect_t map_connect[MAP_NBR_CONNECT]; |
||
79 | |||
80 | /* |
||
81 | * blocks - one block is 4 by 4 tiles. |
||
82 | */ |
||
83 | typedef U8 block_t[0x10]; |
||
84 | |||
85 | extern block_t map_blocks[MAP_NBR_BLOCKS]; |
||
86 | |||
87 | /* |
||
88 | * flags for map_marks[].ent ("yes" when set) |
||
89 | * |
||
90 | * MAP_MARK_NACT: this mark is not active anymore. |
||
91 | */ |
||
92 | #define MAP_MARK_NACT (0x80) |
||
93 | |||
94 | /* |
||
95 | * mark structure |
||
96 | */ |
||
97 | typedef struct |
||
98 | { |
||
99 | U8 row; |
||
100 | U8 ent; |
||
101 | U8 flags; |
||
102 | U8 xy; /* bits XXXX XYYY (from b03) with X->x, Y->y */ |
||
103 | U8 lt; /* bits XXXX XNNN (from b04) with X->trig_x, NNN->lat & trig_y */ |
||
104 | } mark_t; |
||
105 | |||
106 | extern mark_t map_marks[MAP_NBR_MARKS]; |
||
107 | |||
108 | /* |
||
109 | * block numbers, i.e. array of rows of 8 blocks |
||
110 | */ |
||
111 | extern U8 map_bnums[MAP_NBR_BNUMS]; |
||
112 | |||
113 | /* |
||
114 | * flags for map_eflg[map_map[row][col]] ("yes" when set) |
||
115 | * |
||
116 | * MAP_EFLG_VERT: vertical move only (usually on top of _CLIMB). |
||
117 | * MAP_EFLG_SOLID: solid block, can't go through. |
||
118 | * MAP_EFLG_SPAD: super pad. can't go through, but sends entities to the sky. |
||
119 | * MAP_EFLG_WAYUP: solid block, can't go through except when going up. |
||
120 | * MAP_EFLG_FGND: foreground (hides entities). |
||
121 | * MAP_EFLG_LETHAL: lethal (kill entities). |
||
122 | * MAP_EFLG_CLIMB: entities can climb here. |
||
123 | * MAP_EFLG_01: |
||
124 | */ |
||
125 | #define MAP_EFLG_VERT (0x80) |
||
126 | #define MAP_EFLG_SOLID (0x40) |
||
127 | #define MAP_EFLG_SPAD (0x20) |
||
128 | #define MAP_EFLG_WAYUP (0x10) |
||
129 | #define MAP_EFLG_FGND (0x08) |
||
130 | #define MAP_EFLG_LETHAL (0x04) |
||
131 | #define MAP_EFLG_CLIMB (0x02) |
||
132 | #define MAP_EFLG_01 (0x01) |
||
133 | |||
134 | extern U8 map_eflg_c[MAP_NBR_EFLGC]; /* compressed */ |
||
135 | extern U8 map_eflg[0x100]; /* current */ |
||
136 | |||
137 | /* |
||
138 | * map_map top row within the submap |
||
139 | */ |
||
140 | extern U8 map_frow; |
||
141 | |||
142 | /* |
||
143 | * tiles offset |
||
144 | */ |
||
145 | extern U8 map_tilesBank; |
||
146 | |||
147 | extern void map_expand (void); |
||
148 | extern void map_init (void); |
||
149 | extern U8 map_chain (void); |
||
150 | extern void map_resetMarks (void); |
||
151 | |||
152 | #endif |