#ifndef __DEFS_H #define __DEFS_H // MACROS #define MAXOF(a,b) (a > b ? a : b) // save/load #define MAPDIR "data/maps" #define SAVEDIR "data/save" // SPECIAL NUMBERS/CONSTANTS #define UNLIMITED (-9876) #define ALL (-9875) #define NA (-9874) // STRINGS #define BUFLENSMALL 64 #define BUFLEN 128 #define HUGEBUFLEN 1024 #define MORESTRING "--More--" // LIMITS #define SCREENW 80 #define SCREENH 24 #define MAXPILEOBS 52 #define MAXRANDOMOBCANDIDATES 100 #define MAX_MAPW 80 #define MAX_MAPH 50 //#define MAX_MAPROOMS 10 #define MIN_ROOMH 4 #define MIN_ROOMW 4 #define MAX_ROOMW (MAX_MAPW / 5) #define MAX_ROOMH (MAX_MAPH / 5) #define MAXDIR_ORTH 4 #define MAXDIR_COMPASS 8 // MAP BUILDING #define DEF_TURNPCT 40 #define DEF_SPARSENESS 14 //#define DEF_SPARSENESS 0 #define DEF_LOOPPCT 70 //#define DEF_LOOPPCT 0 #define MINROOMS 15 #define MAXROOMS 25 #define DEF_WINDOWPCT 5 // #define ANIMDELAY (1000000 / 100) // 1/100 of a second // CONTROLLERS #define C_AI 0 #define C_PLAYER 1 // speed settings (lower is faster) #define SPEED_ATTACK 10 #define SPEED_DEAD 50 #define SPEED_MOVE 10 #define SPEED_DROP 5 #define SPEED_PICKUP 5 #define SPEED_THROW 10 #define SPEED_WAIT 10 // DIRECTION TYPES #define DT_ORTH 0 #define DT_COMPASS 1 // DIRECTIONS #define D_NONE -1 #define D_UNKNOWN -2 // Orthogonal directions #define D_N 0 #define D_E 1 #define D_S 2 #define D_W 3 // Compass directions #define DC_N 4 #define DC_NE 5 #define DC_E 6 #define DC_SE 7 #define DC_S 8 #define DC_SW 9 #define DC_W 10 #define DC_NW 11 // Cell types #define CT_WALL 0 #define CT_ROOMWALL 1 #define CT_CORRIDOR 2 #define CT_ROOM 3 #define CT_DOOROPEN 4 #define CT_DOORCLOSED 5 #define CT_LOOPCORRIDOR 6 // Object Classes enum OBCLASS { OC_MONEY, OC_WEAPON, OC_ARMOUR, OC_SCROLL, OC_POTION, OC_FOOD, OC_ROCK, OC_MISC, OC_NULL = -999 }; enum BLESSTYPE { B_UNCURSED = 0, B_BLESSED = 1, B_CURSED = -1 }; enum HABITAT { H_DUNGEON = 1, H_ALL = 999 }; enum RARITY { RR_NEVER = 6, RR_VERYRARE = 5, RR_RARE = 4, RR_UNCOMMON = 3, RR_COMMON = 2, RR_FREQUENT = 1, }; enum RACE { R_BAT, R_GIANTFLY, R_GIANTBLOWFLY, R_HUMAN, R_GOBLIN, }; // Object Materials enum MATERIAL { MT_STONE, MT_FIRE, MT_PLASTIC, MT_METAL, MT_FLESH, MT_WOOD, MT_GOLD }; // Object Types enum OBTYPE { // rocks OT_GOLD, OT_STONE, // corpses OT_CORPSEHUMAN, OT_CORPSEGOBLIN, OT_CORPSEBAT, OT_CORPSEFLY, }; enum FLAG { // object flags F_STACKABLE, // can stack multiple objects togethr F_NO_PLURAL, // this obname doesn't need an 's' for plurals (eg. gold, money) F_NO_A, // this obname doesn't need to start with 'a' for singular (eg. gold) F_EDIBLE, // you can eat this. val2 = nutrition // lifeform flags F_CORPSETYPE, // text field specifies what corpse obtype to leave F_FLYING, // lf is flying F_HOSTILE, // lf will attack anything the player if in sight F_NODEATHANNOUNCE, // don't say 'the xx dies' if this lf dies F_TARGET, // lf will attack this lf id F_ATTACKSPEED, // override default attack speed F_MOVESPEED, // override default move speed F_RARITY, // val[0] = habitat, val[1] = rarity F_NUMAPPEAR, // when randomly appearing, can have > 1. val[0] = min, val[1] = max // F_NULL = -1 }; // probabilities //#define CH_DEADENDOB 35 //#define CH_EMPTYCELLOB 3 #define CH_PILLAR 5 // Booleans #define B_FALSE (0) #define B_TRUE (-1) #define B_NOSTACK (0) #define B_STACK (-1) #define B_STACKOK (-1) #define NOOWNER (NULL) #define NOLOC (NULL) #define B_NOTSOLID (0) #define B_EMPTY (0) #define B_SOLID (-1) #define B_OPAQUE (0) #define B_TRANSPARENT (-1) #define B_TRANS (-1) // errors enum ERROR { E_OK = 0, E_WALLINWAY = 1, E_LFINWAY = 2, E_NOSPACE = 3 }; typedef struct map_s { int id; char *name; // name of this map enum HABITAT habitat; // eg. dungeon, forest, etc unsigned int seed; int w,h; // width/height of this map struct cell_s *cell[MAX_MAPW*MAX_MAPH]; // list of cells in this map int nextmap[MAXDIR_ORTH]; // which map is in each direction long nextlfid; struct lifeform_s *lf,*lastlf; struct map_s *next, *prev; } map_t; //////////////// remember to modify save/load for new props!! typedef struct cell_s { map_t *map; // pointer back to map int x,y; // map coords int roomid; struct celltype_s *type; struct obpile_s *obpile; // lifeform pile struct lifeform_s *lf; // known to player? int known; // FOR CONSTRUCTION int visited; } cell_t; typedef struct celltype_s { int id; // eg. dungeonfloor, wall, door char glyph; // how to display it int solid; // can you walk through it? int transparent; // can you see through it? struct celltype_s *next, *prev; } celltype_t; typedef struct race_s { enum RACE id; char *name; char glyph; struct flagpile_s *flags; // speed modifiers // hit dice struct race_s *next, *prev; } race_t; typedef struct lifeform_s { int id; int controller; struct race_s *race; int hp,maxhp; int alive; char *lastdam; int timespent; int sorted; struct obpile_s *pack; struct flagpile_s *flags; // for loading long oblist[MAXPILEOBS]; int x,y; struct cell_s *cell; struct lifeform_s *next, *prev; } lifeform_t; typedef struct obpile_s { lifeform_t *owner;// } Only one of these cell_t *where; // } should be filled in struct object_s *first,*last; // for loading long oblist[MAXPILEOBS]; } obpile_t; typedef struct flagpile_s { struct flag_s *first,*last; } flagpile_t; typedef struct flag_s { enum FLAG id; int nvals; int val[3]; char *text; struct flagpile_s *pile; struct flag_s *next, *prev; } flag_t; typedef struct material_s { int id; char *name; struct material_s *next,*prev; } material_t; typedef struct objectclass_s { enum OBCLASS id; char *name; char glyph; struct objectclass_s *next, *prev; } objectclass_t; typedef struct objecttype_s { enum OBTYPE id; char *name; char *desc; struct objectclass_s *obclass; material_t *material; float weight; // in kilograms struct flagpile_s *flags; struct objecttype_s *next, *prev; } objecttype_t; typedef struct object_s { long id; // unique for every ob in the game! struct objecttype_s *type; struct obpile_s *pile; // reverse pointer back to pile // these variables are initially // inherited from objecttype: material_t *material; float weight; // in kilograms // flags // these variables are NOT inherited char *inscription; char letter; enum BLESSTYPE blessed; int blessknown; int amt; // for stackable objects flagpile_t *flags; struct object_s *next, *prev; } object_t; #endif