/*
* $Id: map.h,v 1.2 2005/06/22 15:08:04 av1-op Exp $
*
* Last modified: Sat Jun 6 20:30:40 1998 fingon
*
* Original authors:
* 4.8.93- rdm created
* 6.16.93- jb modified, added hex_struct
* Since that modified by:
* '95 - '97: Markus Stenberg <fingon@iki.fi>
* '98 - '02: Thomas Woutes <thomas@xs4all.net>
*/
#ifndef _MAP_H
#define _MAP_H
/*
map.h
Structure definitions and what not for the maps for the mechs.
*/
#define MAX_MECHS_PER_MAP 250
/* map links */
#define MAP_UP 0
#define MAP_DOWN 1
#define MAP_RIGHT 2
#define MAP_LEFT 3
/* Map size */
#define MAPX 1000
#define MAPY 1000
#define MAP_NAME_SIZE 30
#define NUM_MAP_LINKS 4
#define DEFAULT_MAP_WIDTH 21
#define DEFAULT_MAP_HEIGHT 11
#define MAP_DISPLAY_WIDTH 21
#define MAP_DISPLAY_HEIGHT 14
#define MAX_ELEV 9
#define GRASSLAND ' '
#define HEAVY_FOREST '"'
#define LIGHT_FOREST '`'
#define WATER '~'
#define HIGHWATER '?'
#define ROUGH '%'
#define MOUNTAINS '^'
#define ROAD '#'
#define BUILDING '@'
#define FIRE '&'
#define TFIRE '>'
#define SMOKE ':'
#define WALL '='
#define BRIDGE '/'
#define SNOW '+'
#define ICE '-'
#define UNKNOWN_TERRAIN '$'
#define MAPFLAG_MAPO 1 /* We got mapobjs */
#define MAPFLAG_SPEC 2 /* We're using special rules - gravity/temp */
#define MAPFLAG_VACUUM 4 /* We're in vacuum */
#define MAPFLAG_FIRES 8 /* We have eternal fires */
#define MAPFLAG_UNDERGROUND 16 /* We're underground. No ejecting, jumping, VTOL taking off */
#define MAPFLAG_DARK 32 /* We can't see map beyond sensor range */
#define MAPFLAG_BRIDGESCS 64 /* We can't destroy bridges on this map */
#define MAPFLAG_NOBRIDGIFY 128 /* We shouldn't convert roads into bridges */
#define TYPE_FIRE 0 /* Fire - datas = counter until next spread, datac = stuff to burn */
#define TYPE_SMOKE 1 /* Smoke - datas = time until it gets lost */
#define TYPE_DEC 2 /* Decoration, like those 2 previous ones. obj = obj# of DS it is related to, datac = char it replaced */
#define TYPE_LAST_DEC 2
#define TYPE_MINE 3 /* datac = type, datas = damage it causes, datai = extra */
#define TYPE_BUILD 4 /* Building obj=# of the internal map */
#define TYPE_LEAVE 5 /* Reference to what happens when U leave ; obj=# of new map */
#define TYPE_ENTRANCE 6 /* datac = dir of entry (0=dontcare), x/y */
#define TYPE_LINKED 7 /* If this exists, we got a maplink propably */
#define TYPE_BITS 8 /* hangar / mine bit array, if any (in datai) */
#define TYPE_B_LZ 9 /* Land-block */
#define NUM_MAPOBJTYPES 10
#define BUILDFLAG_CS 1 /* Externally CS */
#define BUILDFLAG_CSI 2 /* Internally CS */
#define BUILDFLAG_DSS 4 /* DontShowStep when someone steps on the base */
#define BUILDFLAG_NOB 8 /* No way to break in */
#define BUILDFLAG_HID 16 /* Really hidden */
#define MapIsCS(map) (map->buildflag & BUILDFLAG_CSI)
#define BuildIsCS(map) (map->buildflag & BUILDFLAG_CS)
#define BuildIsHidden(map) (map->buildflag & (BUILDFLAG_DSS|BUILDFLAG_HID))
#define BuildIsSafe(map) (map->buildflag & BUILDFLAG_NOB)
#define BuildIsInvis(map) (map->buildflag & BUILDFLAG_HID)
#define MapUnderSpecialRules(map) ((map)->flags & MAPFLAG_SPEC)
#define MapGravityMod(map) (map)->grav
#define MapGravity MapGravityMod
#define MapIsVacuum(map) ((map)->flags & MAPFLAG_VACUUM)
#define MapTemperature(map) (map)->temp
#define MapCloudbase(map) (map)->cloudbase
#define MapIsUnderground(map) ((map)->flags & MAPFLAG_UNDERGROUND)
#define MapIsDark(map) ((map)->flags & MAPFLAG_DARK)
#define MapBridgesCS(map) ((map)->flags & MAPFLAG_BRIDGESCS)
#define MapNoBridgify(map) ((map)->flags & MAPFLAG_NOBRIDGIFY)
typedef struct mapobj_struct {
short x, y;
dbref obj;
char type;
char datac;
short datas;
int datai;
struct mapobj_struct *next;
} mapobj;
#define MECHMAPFLAG_MOVED 1 /* mech has moved since last LOS update */
#define MECHLOSFLAG_SEEN 0x0001 /* x <mech> has seen <target> (before) */
#define MECHLOSFLAG_SEESP 0x0002 /* x <mech> sees <target> now w/ primary */
#define MECHLOSFLAG_SEESS 0x0004 /* x <mech> sees <target> now w/ secondary */
#define MECHLOSFLAG_SEEC2 0x0008 /* The terrain flag has been calculated */
#define MECHLOSFLAG_MNTN 0x0010 /* Intervening mountain hexes? */
#define MECHLOSFLAG_WOOD 0x0020 /* The number of intervening woods hexes */
#define MECHLOSFLAG_WOOD2 0x0040 /* Heavywood = 2, Light = 1 */
#define MECHLOSFLAG_WOOD3 0x0080
#define MECHLOSFLAG_WOOD4 0x0100
#define MECHLOSBYTES_WOOD 4
#define MECHLOSMAX_WOOD 16 /* No sensors penetrate this far */
#define MECHLOSFLAG_WATER 0x0200 /* The number of intervening water hexes */
#define MECHLOSFLAG_WATER2 0x0400
#define MECHLOSFLAG_WATER3 0x0800
#define MECHLOSBYTES_WATER 3
#define MECHLOSMAX_WATER 8 /* No sensors penetrate this far */
#define MECHLOSFLAG_PARTIAL 0x1000 /* The target's in partial cover for
da shooter */
#define MECHLOSFLAG_FIRE 0x2000 /* Fire between mech and target */
#define MECHLOSFLAG_SMOKE 0x4000 /* Smoke between mech and target */
#define MECHLOSFLAG_BLOCK 0x8000 /* Something blocks vision
(elevation propably) */
typedef struct {
dbref mynum; /* My dbref */
unsigned char **map; /* The map */
char mapname[MAP_NAME_SIZE + 1];
short map_width; /* Width of map <MAPX */
short map_height; /* Height of map */
char temp; /* Temperature, in
celsius degrees */
unsigned char grav; /* Gravity, if any ;
in 1/100 G's */
short cloudbase;
char unused_char;
char mapvis; /* Visibility on the map,
used as base for most sensor
types */
short maxvis; /* maximum visibility
(usually mapvis * n) */
char maplight;
short winddir, windspeed;
/* Now, da wicked stuff */
byte flags;
mapobj *mapobj[NUM_MAPOBJTYPES];
short cf, cfmax;
dbref onmap;
char buildflag;
unsigned char first_free; /* First free on da map */
dbref *mechsOnMap; /* Mechs on the map */
unsigned short **LOSinfo; /* Line of sight info */
/* 1 = mech has moved recently
2 = mech has possible-LOS event ongoing */
char *mechflags;
short moves; /* Cheat to prevent idle CPU hoggage */
short movemod;
int sensorflags;
} MAP;
/* Used by navigate_sketch_map */
#define NAVIGATE_LINES 13
#include "p.map.bits.h"
#include "p.map.h"
#include "p.map.obj.h"
#include "p.map.dynamic.h"
extern void newfreemap(dbref key, void **data, int selector);
extern void map_update(dbref obj, void *data);
#define set_buildflag(a,b) silly_atr_set((a), A_BUILDFLAG, tprintf("%d", (b)))
#define get_buildflag(a) atoi(silly_atr_get((a), A_BUILDFLAG))
#define set_buildcf(a,b) silly_atr_set((a), A_BUILDCF, tprintf("%d %d", (b), (b)))
#endif