ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/map.h
(Generate patch)

Comparing deliantra/server/include/map.h (file contents):
Revision 1.1 by root, Fri Feb 3 07:12:49 2006 UTC vs.
Revision 1.29 by root, Wed Dec 20 09:14:22 2006 UTC

1/*
2 * static char *rcsid_define_h =
3 * "$Id: map.h,v 1.1 2006/02/03 07:12:49 root Exp $";
4 */
5
6/* 1/*
7 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
8 3
9 Copyright (C) 2002-2005 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002-2005 Mark Wedel & Crossfire Development Team
10 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
21 16
22 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 20
26 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at crossfire@schmorp.de
27*/ 22*/
28 23
29/* 24/*
30 * The mapstruct is allocated each time a new map is opened. 25 * The maptile is allocated each time a new map is opened.
31 * It contains pointers (very indirectly) to all objects on the map. 26 * It contains pointers (very indirectly) to all objects on the map.
32 */ 27 */
33 28
34#ifndef MAP_H 29#ifndef MAP_H
35#define MAP_H 30#define MAP_H
31
32#include "cfperl.h"
36 33
37/* We set this size - this is to make magic map work properly on 34/* We set this size - this is to make magic map work properly on
38 * tiled maps. There is no requirement that this matches the 35 * tiled maps. There is no requirement that this matches the
39 * tiled maps size - it just seemed like a reasonable value. 36 * tiled maps size - it just seemed like a reasonable value.
40 * Magic map code now always starts out putting the player in the 37 * Magic map code now always starts out putting the player in the
45 * map pointers. 42 * map pointers.
46 */ 43 */
47#define MAGIC_MAP_SIZE 50 44#define MAGIC_MAP_SIZE 50
48#define MAGIC_MAP_HALF MAGIC_MAP_SIZE/2 45#define MAGIC_MAP_HALF MAGIC_MAP_SIZE/2
49 46
50
51#define MAP_LAYERS 4 47#define MAP_LAYERS 4
52 48
53/* This is when the map will reset */ 49/* This is when the map will reset */
54#define MAP_WHEN_RESET(m) ((m)->reset_time) 50#define MAP_WHEN_RESET(m) ((m)->reset_time)
55 51
65 */ 61 */
66#define MAP_DARKNESS(m) (m)->darkness 62#define MAP_DARKNESS(m) (m)->darkness
67 63
68#define MAP_WIDTH(m) (m)->width 64#define MAP_WIDTH(m) (m)->width
69#define MAP_HEIGHT(m) (m)->height 65#define MAP_HEIGHT(m) (m)->height
66
70/* Convenient function - total number of spaces is used 67/* Convenient function - total number of spaces is used
71 * in many places. 68 * in many places.
72 */ 69 */
73#define MAP_SIZE(m) ((m)->width * (m)->height) 70#define MAP_SIZE(m) ((m)->width * (m)->height)
74 71
101/* GET_MAP_FLAGS really shouldn't be used very often - get_map_flags should 98/* GET_MAP_FLAGS really shouldn't be used very often - get_map_flags should
102 * really be used, as it is multi tile aware. However, there are some cases 99 * really be used, as it is multi tile aware. However, there are some cases
103 * where it is known the map is not tiled or the values are known 100 * where it is known the map is not tiled or the values are known
104 * consistent (eg, op->map, op->x, op->y) 101 * consistent (eg, op->map, op->x, op->y)
105 */ 102 */
106#define GET_MAP_FLAGS(M,X,Y) ( (M)->spaces[(X) + (M)->width * (Y)].flags ) 103// all those macros are herewith declared legacy
107#define SET_MAP_FLAGS(M,X,Y,C) ( (M)->spaces[(X) + (M)->width * (Y)].flags = C ) 104#define GET_MAP_FLAGS(M,X,Y) (M)->at((X),(Y)).flags
108#define GET_MAP_LIGHT(M,X,Y) ( (M)->spaces[(X) + (M)->width * (Y)].light ) 105#define SET_MAP_FLAGS(M,X,Y,C) (M)->at((X),(Y)).flags = (C)
109#define SET_MAP_LIGHT(M,X,Y,L) ( (M)->spaces[(X) + (M)->width * (Y)].light = L ) 106#define GET_MAP_LIGHT(M,X,Y) (M)->at((X),(Y)).light
110 107#define SET_MAP_LIGHT(M,X,Y,L) (M)->at((X),(Y)).light = (L)
111#define GET_MAP_OB(M,X,Y) ( (M)->spaces[(X) + (M)->width * (Y)].bottom ) 108#define GET_MAP_OB(M,X,Y) (M)->at((X),(Y)).bottom
112#define GET_MAP_TOP(M,X,Y) ( (M)->spaces[(X) + (M)->width * (Y)].top ) 109#define GET_MAP_TOP(M,X,Y) (M)->at((X),(Y)).top
113/* legacy */
114#define get_map_ob GET_MAP_OB
115
116#define SET_MAP_OB(M,X,Y,tmp) ( (M)->spaces[(X) + (M)->width * (Y)].bottom = (tmp) ) 110#define SET_MAP_OB(M,X,Y,tmp) (M)->at((X),(Y)).bottom = (tmp)
117#define SET_MAP_TOP(M,X,Y,tmp) ( (M)->spaces[(X) + (M)->width * (Y)].top = (tmp) ) 111#define SET_MAP_TOP(M,X,Y,tmp) (M)->at((X),(Y)).top = (tmp)
118#define set_map_ob SET_MAP_OB
119
120#define SET_MAP_FACE(M,X,Y,C,L) ( (M)->spaces[(X) + (M)->width * (Y)].faces[L] = C ) 112#define SET_MAP_FACE(M,X,Y,C,L) (M)->at((X),(Y)).faces[L] = (C)
121#define GET_MAP_FACE(M,X,Y,L) ( (M)->spaces[(X) + (M)->width * (Y)].faces[L] ) 113#define GET_MAP_FACE(M,X,Y,L) (M)->at((X),(Y)).faces[L]
122
123#define SET_MAP_FACE_OBJ(M,X,Y,C,L) ( (M)->spaces[(X) + (M)->width * (Y)].faces_obj[L] = C ) 114#define SET_MAP_FACE_OBJ(M,X,Y,C,L) (M)->at((X),(Y)).faces_obj[L] = (C)
124#define GET_MAP_FACE_OBJ(M,X,Y,L) ( (M)->spaces[(X) + (M)->width * (Y)].faces_obj[L] ) 115#define GET_MAP_FACE_OBJ(M,X,Y,L) (M)->at((X),(Y)).faces_obj[L]
125
126#define GET_MAP_MOVE_BLOCK(M,X,Y) ( (M)->spaces[(X) + (M)->width * (Y)].move_block ) 116#define GET_MAP_MOVE_BLOCK(M,X,Y) (M)->at((X),(Y)).move_block
127#define SET_MAP_MOVE_BLOCK(M,X,Y,C) ( (M)->spaces[(X) + (M)->width * (Y)].move_block = C ) 117#define SET_MAP_MOVE_BLOCK(M,X,Y,C) (M)->at((X),(Y)).move_block = (C)
128
129#define GET_MAP_MOVE_SLOW(M,X,Y) ( (M)->spaces[(X) + (M)->width * (Y)].move_slow ) 118#define GET_MAP_MOVE_SLOW(M,X,Y) (M)->at((X),(Y)).move_slow
130#define SET_MAP_MOVE_SLOW(M,X,Y,C) ( (M)->spaces[(X) + (M)->width * (Y)].move_slow = C ) 119#define SET_MAP_MOVE_SLOW(M,X,Y,C) (M)->at((X),(Y)).move_slow = (C)
131
132#define GET_MAP_MOVE_ON(M,X,Y) ( (M)->spaces[(X) + (M)->width * (Y)].move_on ) 120#define GET_MAP_MOVE_ON(M,X,Y) (M)->at((X),(Y)).move_on
133#define SET_MAP_MOVE_ON(M,X,Y,C) ( (M)->spaces[(X) + (M)->width * (Y)].move_on = C ) 121#define SET_MAP_MOVE_ON(M,X,Y,C) (M)->at((X),(Y)).move_on = (C)
134
135#define GET_MAP_MOVE_OFF(M,X,Y) ( (M)->spaces[(X) + (M)->width * (Y)].move_off ) 122#define GET_MAP_MOVE_OFF(M,X,Y) (M)->at((X),(Y)).move_off
136#define SET_MAP_MOVE_OFF(M,X,Y,C) ( (M)->spaces[(X) + (M)->width * (Y)].move_off = C ) 123#define SET_MAP_MOVE_OFF(M,X,Y,C) (M)->at((X),(Y)).move_off = (C)
137 124
138/* You should really know what you are doing before using this - you 125/* You should really know what you are doing before using this - you
139 * should almost always be using out_of_map instead, which takes into account 126 * should almost always be using out_of_map instead, which takes into account
140 * map tiling. 127 * map tiling.
141 */ 128 */
142#define OUT_OF_REAL_MAP(M,X,Y) ((X)<0 || (Y)<0 || (X)>=(M)->width || (Y)>=(M)->height) 129#define OUT_OF_REAL_MAP(M,X,Y) ((X)<0 || (Y)<0 || (X)>=(M)->width || (Y)>=(M)->height)
143 130
144/* These are used in the MapLook flags element. They are not used in 131/* These are used in the MapLook flags element. They are not used in
145 * in the object flags structure. 132 * in the object flags structure.
146 */ 133 */
147
148#define P_BLOCKSVIEW 0x01 134#define P_BLOCKSVIEW 0x01
149#define P_NO_MAGIC 0x02 /* Spells (some) can't pass this object */ 135#define P_NO_MAGIC 0x02 /* Spells (some) can't pass this object */
150 136#define P_PLAYER 0x04 /* a player (or something seeing these objects) is on this mapspace */
151/* AB_NO_PASS is used for arch_blocked() return value. It needs 137#define P_SAFE 0x08 /* If this is set the map tile is a safe space,
152 * to be here to make sure the bits don't match with anything. 138 * that means, nothing harmful can be done,
153 * Changed name to have AB_ prefix just to make sure no one 139 * such as: bombs, potion usage, alchemy, spells
154 * is using the P_NO_PASS. AB_.. should only be used for 140 * this was introduced to make shops safer
155 * arch_blocked and functions that examine the return value. 141 * but is useful in other situations */
156 */
157
158#define AB_NO_PASS 0x04
159/*#define P_PASS_THRU 0x08 *//* */
160#define P_IS_ALIVE 0x10 /* something alive is on this space */ 142#define P_IS_ALIVE 0x10 /* something alive is on this space */
161#define P_NO_CLERIC 0x20 /* no clerical spells cast here */ 143#define P_NO_CLERIC 0x20 /* no clerical spells cast here */
162#define P_NEED_UPDATE 0x40 /* this space is out of date */ 144#define P_NEED_UPDATE 0x40 /* this space is out of date */
163#define P_NO_ERROR 0x80 /* Purely temporary - if set, update_position 145#define P_NO_ERROR 0x80 /* Purely temporary - if set, update_position
164 * does not complain if the flags are different. 146 * does not complain if the flags are different.
165 */ 147 */
148
166/* The following two values are not stored in the MapLook flags, but instead 149/* The following two values are not stored in the MapLook flags, but instead
167 * used in the get_map_flags value - that function is used to return 150 * used in the get_map_flags value - that function is used to return
168 * the flag value, as well as other conditions - using a more general 151 * the flag value, as well as other conditions - using a more general
169 * function that does more of the work can hopefully be used to replace 152 * function that does more of the work can hopefully be used to replace
170 * lots of duplicate checks currently in the code. 153 * lots of duplicate checks currently in the code.
171 */ 154 */
172#define P_OUT_OF_MAP 0x100 /* This space is outside the map */ 155#define P_OUT_OF_MAP 0x10000 /* This space is outside the map */
173#define P_NEW_MAP 0x200 /* Coordinates passed result in a new tiled map */ 156#define P_NEW_MAP 0x20000
157 /* Coordinates passed result in a new tiled map */
174 158
175#if 0 159/* P_NO_PASS is used for ob_blocked() return value. It needs
176/* These go away with new movement code - can't do such simplistic 160 * to be here to make sure the bits don't match with anything.
177 * checks anymore
178 */ 161 */
179#define P_BLOCKED (P_NO_PASS | P_IS_ALIVE) /* convenience macro */ 162#define P_NO_PASS 0x80000
180#define P_WALL P_NO_PASS /* Just to match naming of wall function */
181#endif
182 163
183/* Can't use MapCell as that is used in newserver.h
184 * Instead of having numerous arrays that have information on a 164/* Instead of having numerous arrays that have information on a
185 * particular space (was map, floor, floor2, map_ob), 165 * particular space (was map, floor, floor2, map_ob),
186 * have this structure take care of that information. 166 * have this structure take care of that information.
187 * This puts it all in one place, and should also make it easier 167 * This puts it all in one place, and should also make it easier
188 * to extend information about a space. 168 * to extend information about a space.
189 */ 169 */
190 170struct mapspace
191typedef struct MapSpace { 171{
192 object *bottom; /* lowest object on this space */ 172 object *bottom; /* lowest object on this space */
193 object *top; /* Highest object on this space */ 173 object *top; /* Highest object on this space */
194 New_Face *faces[MAP_LAYERS]; /* faces for the 3 layers */ 174 New_Face *faces[MAP_LAYERS]; /* faces for the 3 layers */
195 object *faces_obj[MAP_LAYERS]; /* face objects for the 3 layers */ 175 object *faces_obj[MAP_LAYERS]; /* face objects for the 3 layers */
196 uint8 flags; /* flags about this space (see the P_ values above) */ 176 uint8 flags; /* flags about this space (see the P_ values above) */
197 sint8 light; /* How much light this space provides */ 177 sint8 light; /* How much light this space provides */
198 MoveType move_block; /* What movement types this space blocks */ 178 uint8 move_block; /* What movement types this space blocks */
199 MoveType move_slow; /* What movement types this space slows */ 179 uint8 move_slow; /* What movement types this space slows */
200 MoveType move_on; /* What movement types are activated */ 180 uint8 move_on; /* What movement types are activated */
201 MoveType move_off; /* What movement types are activated */ 181 uint8 move_off; /* What movement types are activated */
202} MapSpace; 182};
203 183
204/* 184/*
205 * this is an overlay structure of the whole world. It exists as a simple 185 * this is an overlay structure of the whole world. It exists as a simple
206 * high level map, which doesn't contain the full data of the underlying map. 186 * high level map, which doesn't contain the full data of the underlying map.
207 * in this map, only things such as weather are recorded. By doing so, we 187 * in this map, only things such as weather are recorded. By doing so, we
208 * can keep the entire world parameters in memory, and act as a whole on 188 * can keep the entire world parameters in memory, and act as a whole on
209 * them at once. We can then, in a separate loop, update the actual world 189 * them at once. We can then, in a separate loop, update the actual world
210 * with the new values we have assigned. 190 * with the new values we have assigned.
211 */ 191 */
212 192
213typedef struct wmapdef { 193struct weathermap_t
194{
214 sint16 temp; /* base temperature of this tile (F) */ 195 sint16 temp; /* base temperature of this tile (F) */
215 sint16 pressure; /* barometric pressure (mb) */ 196 sint16 pressure; /* barometric pressure (mb) */
216 sint8 humid; /* humitidy of this tile */ 197 sint8 humid; /* humitidy of this tile */
217 sint8 windspeed; /* windspeed of this tile */ 198 sint8 windspeed; /* windspeed of this tile */
218 sint8 winddir; /* direction of wind */ 199 sint8 winddir; /* direction of wind */
219 sint8 sky; /* sky conditions */ 200 sint8 sky; /* sky conditions */
220 sint32 avgelev; /* average elevation */ 201 sint32 avgelev; /* average elevation */
221 uint32 rainfall; /* cumulative rainfall */ 202 uint32 rainfall; /* cumulative rainfall */
222 uint8 darkness; /* indicates level of darkness of map */ 203 uint8 darkness; /* indicates level of darkness of map */
223 uint8 water; /* 0-100 percentage of water tiles */ 204 uint8 water; /* 0-100 percentage of water tiles */
224 /*Dynamic parts*/ 205 /*Dynamic parts */
225 sint16 realtemp; /* temperature at a given calculation step for this tile*/ 206 sint16 realtemp; /* temperature at a given calculation step for this tile */
226} weathermap_t; 207};
227 208
228/* 209/*
229 * Each map is in a given region of the game world and links to a region definiton, so 210 * Each map is in a given region of the game world and links to a region definiton, so
230 * they have to appear here in the headers, before the mapdef 211 * they have to appear here in the headers, before the mapdef
231 */ 212 */
232typedef struct regiondef { 213struct region : zero_initialised
214{
233 struct regiondef *next; /* pointer to next region, NULL for the last one */ 215 struct region *next; /* pointer to next region, NULL for the last one */
234 const char *name; /* Shortend name of the region as maps refer to it */ 216 const char *name; /* Shortend name of the region as maps refer to it */
235 const char *parent_name; /* 217 const char *parent_name; /*
236 * So that parent and child regions can be defined in 218 * So that parent and child regions can be defined in
237 * any order, we keep hold of the parent_name during 219 * any order, we keep hold of the parent_name during
238 * initialisation, and the children get assigned to their 220 * initialisation, and the children get assigned to their
239 * parents later. (before runtime on the server though) 221 * parents later. (before runtime on the server though)
240 * nothing outside the init code should ever use this value. 222 * nothing outside the init code should ever use this value.
241 */ 223 */
242 struct regiondef *parent;/* 224 struct region *parent; /*
243 * Pointer to the region that is a parent of the current 225 * Pointer to the region that is a parent of the current
244 * region, if a value isn't defined in the current region 226 * region, if a value isn't defined in the current region
245 * we traverse this series of pointers until it is. 227 * we traverse this series of pointers until it is.
246 */ 228 */
247 const char *longname; /* Official title of the region, this might be defined 229 const char *longname; /* Official title of the region, this might be defined
248 * to be the same as name*/ 230 * to be the same as name*/
249 const char *msg; /* the description of the region */ 231 const char *msg; /* the description of the region */
250 uint32 counter; /* A generic counter for holding temporary data. */ 232 uint32 counter; /* A generic counter for holding temporary data. */
251 sint8 fallback; /* whether, in the event of a region not existing, 233 sint8 fallback; /* whether, in the event of a region not existing,
252 * this should be the one we fall back on as the default */ 234 * this should be the one we fall back on as the default */
253} region; 235 char *jailmap; /*where a player that is arrested in this region should be imprisoned. */
236 sint16 jailx, jaily; /* The coodinates in jailmap to which the player should be sent. */
237};
254 238
255 239struct shopitems : zero_initialised
256typedef struct shopitem { 240{
257 const char *name; /* name of the item in question, null if it is the default item */ 241 const char *name; /* name of the item in question, null if it is the default item */
258 const char *name_pl; /* plural name */ 242 const char *name_pl; /* plural name */
259 int typenum; /* itemtype number we need to match 0 if it is the default price*/ 243 int typenum; /* itemtype number we need to match 0 if it is the default price */
260 sint8 strength; /* the degree of specialisation the shop has in this item, 244 sint8 strength; /* the degree of specialisation the shop has in this item,
261 * as a percentage from -100 to 100 */ 245 * as a percentage from -100 to 100 */
262 int index; /* being the size of the shopitems array.*/ 246 int index; /* being the size of the shopitems array. */
263} shopitems; 247};
264 248
265/* In general, code should always use the macros 249/* In general, code should always use the macros
266 * above (or functions in map.c) to access many of the 250 * above (or functions in map.c) to access many of the
267 * values in the map structure. Failure to do this will 251 * values in the map structure. Failure to do this will
268 * almost certainly break various features. You may think 252 * almost certainly break various features. You may think
269 * it is safe to look at width and height values directly 253 * it is safe to look at width and height values directly
270 * (or even through the macros), but doing so will completely 254 * (or even through the macros), but doing so will completely
271 * break map tiling. 255 * break map tiling.
272 */ 256 */
273typedef struct mapdef { 257ACC_CLASS (maptile)
274 struct mapdef *next; /* Next map, linked list */ 258struct maptile : zero_initialised, attachable<maptile>
275 char path[HUGE_BUF]; /* Filename of the map */ 259{
260 sint32 ACC (RO, width), ACC (RO, height); /* Width and height of map. */
261 struct mapspace *spaces; /* Array of spaces on this map */
262
263 maptile *ACC (RW, next); /* Next map, linked list */
276 char *tmpname; /* Name of temporary file */ 264 char *ACC (RO, tmpname); /* Name of temporary file */
277 char *name; /* Name of map as given by its creator */ 265 char *ACC (RO, name); /* Name of map as given by its creator */
278 region *region; /* What jurisdiction in the game world this map is ruled by 266 struct region *ACC (RW, region); /* What jurisdiction in the game world this map is ruled by
279 * points to the struct containing all the properties of 267 * points to the struct containing all the properties of
280 * the region */ 268 * the region */
281 uint32 reset_time; /* when this map should reset */ 269 uint32 ACC (RW, reset_time); /* when this map should reset */
282 uint32 reset_timeout; /* How many seconds must elapse before this map 270 uint32 ACC (RW, reset_timeout); /* How many seconds must elapse before this map
283 * should be reset 271 * should be reset
284 */ 272 */
285 uint32 fixed_resettime:1; /* if true, reset time is not affected by 273 bool ACC (RW, fixed_resettime); /* if true, reset time is not affected by
286 * players entering/exiting map 274 * players entering/exiting map
287 */ 275 */
288 uint32 unique:1; /* if set, this is a per player unique map */ 276 bool ACC (RW, unique); /* if set, this is a per player unique map */
289 uint32 template:1; /* if set, this is a template map */ 277 bool ACC (RW, templatemap); /* if set, this is a template map */
290 uint32 nosmooth:1; /* if set the content of this map has smoothlevel=0 forced*/ 278 bool ACC (RW, nosmooth); /* if set the content of this map has smoothlevel=0 forced */
291 sint32 timeout; /* swapout is set to this */ 279 sint32 ACC (RW, timeout); /* swapout is set to this */
292 sint32 swap_time; /* When it reaches 0, the map will be swapped out */ 280 sint32 ACC (RW, swap_time); /* When it reaches 0, the map will be swapped out */
293 sint16 players; /* How many plares are on this level right now */
294 uint32 in_memory; /* If not true, the map has been freed and must 281 uint32 ACC (RW, in_memory); /* If not true, the map has been freed and must
295 * be loaded before used. The map,omap and map_ob 282 * be loaded before used. The map,omap and map_ob
296 * arrays will be allocated when the map is loaded */ 283 * arrays will be allocated when the map is loaded */
297 uint8 compressed; /* Compression method used */ 284 sint16 ACC (RW, players); /* How many players are on this level right now */
298 uint16 difficulty; /* What level the player should be to play here */ 285 uint16 ACC (RW, difficulty); /* What level the player should be to play here */
299 286
300 uint8 darkness; /* indicates level of darkness of map */ 287 uint8 ACC (RW, darkness); /* indicates level of darkness of map */
301 uint16 width,height; /* Width and height of map. */
302 uint16 enter_x; /* enter_x and enter_y are default entrance location */ 288 uint16 ACC (RW, enter_x); /* enter_x and enter_y are default entrance location */
303 uint16 enter_y; /* on the map if none are set in the exit */ 289 uint16 ACC (RW, enter_y); /* on the map if none are set in the exit */
304 uint32 outdoor:1; /* True if an outdoor map */ 290 bool ACC (RW, outdoor); /* True if an outdoor map */
305 oblinkpt *buttons; /* Linked list of linked lists of buttons */ 291 oblinkpt *buttons; /* Linked list of linked lists of buttons */
306 MapSpace *spaces; /* Array of spaces on this map */
307 sint16 temp; /* base temperature of this tile (F) */ 292 sint16 ACC (RW, temp); /* base temperature of this tile (F) */
308 sint16 pressure; /* barometric pressure (mb) */ 293 sint16 ACC (RW, pressure); /* barometric pressure (mb) */
309 sint8 humid; /* humitidy of this tile */ 294 sint8 ACC (RW, humid); /* humitidy of this tile */
310 sint8 windspeed; /* windspeed of this tile */ 295 sint8 ACC (RW, windspeed); /* windspeed of this tile */
311 sint8 winddir; /* direction of wind */ 296 sint8 ACC (RW, winddir); /* direction of wind */
312 sint8 sky; /* sky conditions */ 297 sint8 ACC (RW, sky); /* sky conditions */
313 int wpartx,wparty; /*Highly fasten conversion between worldmap and weathermap*/ 298 int ACC (RW, wpartx), ACC (RW, wparty); /*Highly fasten conversion between worldmap and weathermap */
314 shopitems *shopitems; /* a semi-colon seperated list of item-types the map's shop will trade in */ 299 struct shopitems *shopitems; /* a semi-colon seperated list of item-types the map's shop will trade in */
315 char *shoprace; /* the preffered race of the local shopkeeper */ 300 char *ACC (RO, shoprace); /* the preffered race of the local shopkeeper */
316 double shopgreed; /* how much our shopkeeper overcharges */ 301 double ACC (RW, shopgreed); /* how much our shopkeeper overcharges */
317 uint64 shopmin; /* minimum price a shop will trade for */ 302 sint64 ACC (RW, shopmin); /* minimum price a shop will trade for */
318 uint64 shopmax; /* maximum price a shop will offer */ 303 sint64 ACC (RW, shopmax); /* maximum price a shop will offer */
319 char *msg; /* Message map creator may have left */ 304 char *ACC (RO, msg); /* Message map creator may have left */
305 char *ACC (RO, maplore); /* Map lore information */
320 char *tile_path[4]; /* path to adjoining maps */ 306 char *tile_path[4]; /* path to adjoining maps */
321 struct mapdef *tile_map[4]; /* Next map, linked list */ 307 maptile *tile_map[4]; /* Next map, linked list */
322} mapstruct; 308 char ACC (RW, path)[HUGE_BUF]; /* Filename of the map */
309
310 maptile ();
311 void allocate ();
312
313 mapspace const &at (uint32 x, uint32 y) const { return spaces [x + width * y]; }
314 mapspace &at (uint32 x, uint32 y) { return spaces [x + width * y]; }
315};
323 316
324/* This is used by get_rangevector to determine where the other 317/* This is used by get_rangevector to determine where the other
325 * creature is. get_rangevector takes into account map tiling, 318 * creature is. get_rangevector takes into account map tiling,
326 * so you just can not look the the map coordinates and get the 319 * so you just can not look the the map coordinates and get the
327 * righte value. distance_x/y are distance away, which 320 * righte value. distance_x/y are distance away, which
328 * can be negativbe. direction is the crossfire direction scheme 321 * can be negative. direction is the crossfire direction scheme
329 * that the creature should head. part is the part of the 322 * that the creature should head. part is the part of the
330 * monster that is closest. 323 * monster that is closest.
331 * Note: distance should be always >=0. I changed it to UINT. MT 324 * Note: distance should be always >=0. I changed it to UINT. MT
332 */ 325 */
333typedef struct rv_vector { 326struct rv_vector
327{
334 unsigned int distance; 328 unsigned int distance;
335 int distance_x; 329 int distance_x;
336 int distance_y; 330 int distance_y;
337 int direction; 331 int direction;
338 object *part; 332 object *part;
339} rv_vector; 333};
340 334
341#endif 335#endif
336

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines