/
lib/objects/
lib/rooms/
lib/scripts/
lib/security/
src/banner/
src/util/
/*
 *	DaleMUD structs, originated from SillyMUD variant of DIKU
 *
 *	vr 3.5
*/



#include <sys/types.h>
#include <assert.h>

typedef char sbyte;
typedef unsigned char ubyte;
typedef short int sh_int;
typedef unsigned short int ush_int;
typedef char bool;
typedef char byte;

/*  
   my new stuff
*/

#define ALL_DARK        1
#define FOREST_DARK     2
#define NO_DARK         3


#define PULSE_COMMAND   0
#define PULSE_TICK      1
#define EVENT_DEATH     2
#define EVENT_SUMMER    3
#define EVENT_SPRING    4
#define EVENT_FALL      5
#define EVENT_WINTER    6
#define EVENT_GATHER    7
#define EVENT_ATTACK    8
#define EVENT_FOLLOW    9
#define EVENT_MONTH    10
#define EVENT_BIRTH    11  /* birth event for the mob.  */
#define EVENT_FAMINE   12
#define EVENT_DWARVES_STRIKE 13 /* fitting number, eh? -DM */
#define EVENT_END_STRIKE  14
#define EVENT_END_FAMINE  15
#define EVENT_WEEK        16
#define EVENT_GOBLIN_RAID 17
#define EVENT_END_GOB_RAID 18

#define DWARVES_STRIKE 1
#define FAMINE         2

#define SEASON_WINTER  1
#define SEASON_SPRING  2
#define SEASON_SUMMER  4
#define SEASON_FALL    8

typedef struct alias_type {
  char *com[10]; /* 10 aliases */
} Alias;

#define MAX_CLASS 11
#define OLD_MAX_CLASS 4

#define ABS_MAX_CLASS 20   	  /* USER FILE, DO NOT CHANGE! */
#define ABS_MAX_EXP   2000000000  /* used in polies/switching  */

#define MAX_STAT 6  /* s i, w, d, co (ch) */

/*  the poofin and poofout shit.  Dm gave this to Parallax, and the
    other gods are demanding it, so I'll install it :-) */

#define BIT_POOF_IN  1
#define BIT_POOF_OUT 2

/*
  Quest stuff
*/


struct QuestItem {
  int item;
  char *where;
};

#define VERSION "3.5msw"
/*
  tailoring stuff
*/
		/* I define all these as TRUE, see makefile for more info */
		
#define LIMITED_ITEMS 1
#define SITELOCK      1
#define NODUPLICATES  1
#define EGO           1 
#define LEVEL_LOSS	1
#define NEWEXP		1
#define NEWGAIN		1

#define LOW_GOLD	1
#define ZONE_COMM_ONLY	1
#define PREVENT_PKILL	1
#define PERSONAL_PERM_LOCKOUTS	1

#define LAG_MOBILES     1

/*
 efficiency stuff
*/
#define MIN_GLOB_TRACK_LEV 31   /* mininum level for global track */
/*
**  Site locking stuff.. written by Scot Gardner
*/
#define MAX_BAN_HOSTS 15

/*
**  Newbie authorization stuff
*/

#define NEWBIE_REQUEST 1
#define NEWBIE_START   100
#define NEWBIE_AXE     0
#define NEWBIE_CHANCES 3

/*
**  Limited item Stuff
*/

#define LIM_ITEM_COST_MIN  10000    /* mininum rent cost of a lim. item */
				    /*  makes it a limited item... */

#define MAX_LIM_ITEMS 18 /* max number of limited items you can rent with */

/*
**  distributed monster stuff
*/

#define TICK_WRAP_COUNT 3   /*  PULSE_MOBILE / PULSE_TELEPORT */
                            /*
			      Note:  This stuff is all code dependent,
			      Don't change it unless you know what you
			      are doing.  comm.c and mobact.c hold the
	                      stuff that you will HAVE to rewrite if you
			      change either of those constants.
                            */
#define PLR_TICK_WRAP   24  /*  this should be a divisor of 24 (hours) */


/*
**  multiclassing stuff
*/

#define MAGE_LEVEL_IND      0
#define CLERIC_LEVEL_IND    1
#define WARRIOR_LEVEL_IND   2
#define THIEF_LEVEL_IND     3
#define DRUID_LEVEL_IND     4
#define MONK_LEVEL_IND      5
#define BARBARIAN_LEVEL_IND 6
#define SORCERER_LEVEL_IND  7
#define PALADIN_LEVEL_IND   8
#define RANGER_LEVEL_IND    9
#define PSI_LEVEL_IND	    10

/* user flags */
#define NO_DELETE	1	/* do not delete me, well until 6 months pass! */
#define USE_ANSI	2	/* we use ANSI color, yeah! */
#define RACE_WAR	4	/* if enabled they can be hit by opposing race */
#define UN_DEFINED_2	8
#define SHOW_EXITS     16	/* for auto display exits	*/

#define MURDER_1	32	/* actually killed someone! */
#define STOLE_1		64	/* caught stealing form someone! */
#define MURDER_2	128	/* rumored killed someone */
#define STOLE_2		256	/* rumored stole from someone */

#define STOLE_X		512	/* saved for later */
#define MURDER_X	1024	/* saved for later */
#define USE_PAGING	2048	/* pause screens?  */
#define CAN_OBJ_EDIT	4096	/* this user can use oedit to edit objects */
#define CAN_MOB_EDIT	8192	/* this user can use medit to edit mobs */
#define FAST_AREA_EDIT  16384	/* immort is using fast online mapping */
/* end user flags */

/* system flags defined on the fly and by wizards for this boot */
#define SYS_NOPORTAL	1	/* no one can portal */
#define SYS_NOASTRAL	2	/* no one can astral */
#define SYS_NOSUMMON	4	/* no one can summon */
#define SYS_NOKILL	8	/* NO PC (good side or bad side) can fight */
#define SYS_LOGALL	16	/* log ALL users to the system log */
#define SYS_ECLIPS	32	/* the world is in constant darkness! */
#define SYS_SKIPDNS	64	/* skips DNS name searches on connects */
#define SYS_REQAPPROVE	128	/* force god approval for new char	*/
#define SYS_NOANSI	256	/* disable ansi colors world wide */
/* end sys flags */

#define SPEAK_COMMON		1
#define SPEAK_ELVISH		2
#define SPEAK_HALFLING		3
#define SPEAK_DWARVISH		4
#define SPEAK_ORCISH		5
#define SPEAK_GIANTISH		6	
#define SPEAK_OGRE		7
#define SPEAK_GNOMISH		8


#define FIRE_DAMAGE 1
#define COLD_DAMAGE 2
#define ELEC_DAMAGE 3
#define BLOW_DAMAGE 4
#define ACID_DAMAGE 5

#define HATE_SEX   1
#define HATE_RACE  2
#define HATE_CHAR  4
#define HATE_CLASS 8
#define HATE_EVIL  16
#define HATE_GOOD  32
#define HATE_VNUM  64

#define FEAR_SEX   1
#define FEAR_RACE  2
#define FEAR_CHAR  4
#define FEAR_CLASS 8
#define FEAR_EVIL  16
#define FEAR_GOOD  32
#define FEAR_VNUM  64

#define OP_SEX   1
#define OP_RACE  2
#define OP_CHAR  3
#define OP_CLASS 4
#define OP_EVIL  5
#define OP_GOOD  6
#define OP_VNUM  7

#define ABS_MAX_LVL  70
#define MAX_MORT     50
#define LOW_IMMORTAL 51
#define IMMORTAL     51
#define CREATOR      52
#define SAINT        53
#define DEMIGOD      54
#define LESSER_GOD   55
#define GOD          56
#define GREATER_GOD  57
#define SILLYLORD    58
#define IMPLEMENTOR  59
#define BIG_GUY      60
#define MAX_IMMORT   60

	/* Immune flags... */

#define IMM_FIRE        1
#define IMM_COLD        2
#define IMM_ELEC        4
#define IMM_ENERGY      8
#define IMM_BLUNT      16
#define IMM_PIERCE     32
#define IMM_SLASH      64
#define IMM_ACID      128
#define IMM_POISON    256
#define IMM_DRAIN     512
#define IMM_SLEEP    1024
#define IMM_CHARM    2048
#define IMM_HOLD     4096
#define IMM_NONMAG   8192
#define IMM_PLUS1   16384
#define IMM_PLUS2   32768
#define IMM_PLUS3   65536
#define IMM_PLUS4  131072

#define PULSE_RIVER    15
#define PULSE_TELEPORT      10

#define MAX_ROOMS   5000

struct nodes
{
  int visited;
  int ancestor;
};

struct room_q
{
#if 0
  int room_nr;
#else
 long room_nr;
#endif
  struct room_q *next_q;
};

struct string_block {
  int	size;
  char	*data;
};


/*
  memory stuff 
*/

struct char_list {
  struct char_data *op_ch;
  char name[50];
  struct char_list *next;
};

typedef struct {
       struct char_list  *clist;
       int    sex;   /*number 1=male,2=female,3=both,4=neut,5=m&n,6=f&n,7=all*/
       int    race;  /*number */
       int    class; /* 1=m,2=c,4=f,8=t */
       int    vnum;  /* # */
       int    evil;  /* align < evil = attack */
       int    good;  /* align > good = attack */
}  Opinion;




/*
   old stuff.
*/

#define PULSE_ZONE     240

 #define PULSE_MOBILE    30 
#define PULSE_VIOLENCE  16   
#define WAIT_SEC       4
#define WAIT_ROUND     4


/* We were getting purify hits on MAX_STRING_LENGTH */
#define MAX_STRING_LENGTH   20480
#define MAX_INPUT_LENGTH     160

#define SMALL_BUFSIZE	512
#define LARGE_BUFSIZE	MAX_STRING_LENGTH*2

#define MAX_MESSAGES          60
#define MAX_ITEMS            153

#define MESS_ATTACKER 1
#define MESS_VICTIM   2
#define MESS_ROOM     3

#define SECS_PER_REAL_MIN  60
#define SECS_PER_REAL_HOUR (60*SECS_PER_REAL_MIN)
#define SECS_PER_REAL_DAY  (24*SECS_PER_REAL_HOUR)
#define SECS_PER_REAL_YEAR (365*SECS_PER_REAL_DAY)

/* Lowered to 65 from 75 as a test */
#define SECS_PER_MUD_HOUR  65
#define SECS_PER_MUD_DAY   (24*SECS_PER_MUD_HOUR)
#define SECS_PER_MUD_MONTH (35*SECS_PER_MUD_DAY)
#define SECS_PER_MUD_YEAR  (17*SECS_PER_MUD_MONTH)

/* The following defs are for obj_data  */

/* For 'type_flag' */

#define ITEM_LIGHT      1
#define ITEM_SCROLL     2
#define ITEM_WAND       3
#define ITEM_STAFF      4
#define ITEM_WEAPON     5
#define ITEM_FIREWEAPON 6
#define ITEM_MISSILE    7
#define ITEM_TREASURE   8
#define ITEM_ARMOR      9
#define ITEM_POTION    10 
#define ITEM_WORN      11
#define ITEM_OTHER     12
#define ITEM_TRASH     13
#define ITEM_TRAP      14
#define ITEM_CONTAINER 15
#define ITEM_NOTE      16
#define ITEM_DRINKCON  17
#define ITEM_KEY       18
#define ITEM_FOOD      19
#define ITEM_MONEY     20
#define ITEM_PEN       21
#define ITEM_BOAT      22
#define ITEM_AUDIO     23
#define ITEM_BOARD     24
#define ITEM_TREE      25
#define ITEM_ROCK      26

/* Bitvector For 'wear_flags' */

#define ITEM_TAKE              1 
#define ITEM_WEAR_FINGER       2
#define ITEM_WEAR_NECK         4
#define ITEM_WEAR_BODY         8
#define ITEM_WEAR_HEAD        16
#define ITEM_WEAR_LEGS        32
#define ITEM_WEAR_FEET        64
#define ITEM_WEAR_HANDS      128 
#define ITEM_WEAR_ARMS       256
#define ITEM_WEAR_SHIELD     512
#define ITEM_WEAR_ABOUT     1024 
#define ITEM_WEAR_WAISTE    2048
#define ITEM_WEAR_WRIST     4096
#define ITEM_WIELD          8192
#define ITEM_HOLD          16384
#define ITEM_THROW         32768
/* UNUSED, CHECKS ONLY FOR ITEM_LIGHT #define ITEM_LIGHT_SOURCE  65536 */
#define ITEM_WEAR_BACK   131072
#define ITEM_WEAR_EAR	 262144
#define ITEM_WEAR_EYE  524288

/* Bitvector for 'extra_flags' */

#define ITEM_GLOW            1
#define ITEM_HUM             2
#define ITEM_METAL           4  /* undefined...  */
#define ITEM_MINERAL         8  /* undefined?    */
#define ITEM_ORGANIC        16  /* undefined?    */
#define ITEM_INVISIBLE      32
#define ITEM_MAGIC          64
#define ITEM_NODROP        128
#define ITEM_BLESS         256
#define ITEM_ANTI_GOOD     512 /* not usable by good people    */
#define ITEM_ANTI_EVIL    1024 /* not usable by evil people    */
#define ITEM_ANTI_NEUTRAL 2048 /* not usable by neutral people */
#define ITEM_ANTI_CLERIC  4096
#define ITEM_ANTI_MAGE    8192
#define ITEM_ANTI_THIEF   16384
#define ITEM_ANTI_FIGHTER 32768
#define ITEM_BRITTLE      65536 /* weapons that break after 1 hit */
                                /* armor that breaks when hit?    */

#define ITEM_RESISTANT   131072 /* resistant to damage */
#define ITEM_IMMUNE      262144 /* Item is iimmune to scrapping */

#define ITEM_ANTI_MEN    524288  /* men can't wield */
#define ITEM_ANTI_WOMEN  1048576 /* women can't wield */

#define ITEM_ANTI_SUN    2097152 /* item is sensitive to being in the sun */
				 /* anti-sun also not used yet */
#define ITEM_ANTI_BARBARIAN	4194304
#define ITEM_ANTI_RANGER	8388608
#define ITEM_ANTI_PALADIN	16777216
#define ITEM_ANTI_PSI		33554432
#define ITEM_ANTI_MONK		67108864
#define ITEM_ANTI_DRUID		134217728
#define ITEM_ONLY_CLASS		 268435456

/* Some different kind of liquids */
#define LIQ_WATER      0
#define LIQ_BEER       1
#define LIQ_WINE       2
#define LIQ_ALE        3
#define LIQ_DARKALE    4
#define LIQ_WHISKY     5
#define LIQ_LEMONADE   6
#define LIQ_FIREBRT    7
#define LIQ_LOCALSPC   8
#define LIQ_SLIME      9
#define LIQ_MILK       10
#define LIQ_TEA        11
#define LIQ_COFFE      12
#define LIQ_BLOOD      13
#define LIQ_SALTWATER  14
#define LIQ_COKE       15

/* special addition for drinks */
#define DRINK_POISON  (1<<0)
#define DRINK_PERM    (1<<1)


/* for containers  - value[1] */

#define CONT_CLOSEABLE      1
#define CONT_PICKPROOF      2
#define CONT_CLOSED         4
#define CONT_LOCKED         8



struct extra_descr_data
{
	char *keyword;                 /* Keyword in look/examine          */
	char *description;             /* What to see                      */
	struct extra_descr_data *next; /* Next in list                     */
};

#define MAX_OBJ_AFFECT 5         /* Used in OBJ_FILE_ELEM *DO*NOT*CHANGE* */
#define OBJ_NOTIMER    -7000000

struct obj_flag_data
{
	int value[4];       /* Values of the item (see list)    */
	byte type_flag;     /* Type of item                     */
	long wear_flags;     /* Where you can wear it            */
	long extra_flags;    /* If it hums,glows etc             */
	int weight;         /* Weigt what else                  */
	int cost;           /* Value when sold (gp.)            */
	int cost_per_day;   /* Cost to keep pr. real day        */
	int timer;          /* Timer for object                 */
	long bitvector;     /* To set chars bits                */
};

/* Used in OBJ_FILE_ELEM *DO*NOT*CHANGE* */
struct obj_affected_type {
	short location;      /* Which ability to change (APPLY_XXX) */
	long modifier;      /* How much it changes by      */
};

/* ======================== Structure for object ========================*/
struct obj_data
{
	sh_int item_number;            /* Where in data-base             */
	int in_room;                /* In what room -1 when conta/carr  */ 
	struct obj_flag_data obj_flags;/* Object information             */
	struct obj_affected_type
	    affected[MAX_OBJ_AFFECT];  /* Which abilities in PC to change*/

	sh_int sector;                 /* for large rooms      */
        sh_int char_vnum;              /* for ressurection     */
	long   char_f_pos;             /* for ressurection     */
	char *name;                    /* Title of object :get etc.      */
	char *description ;            /* When in room                   */
	char *short_description;       /* when worn/carry/in cont.       */
 	char *action_description;      /* What to write when used        */
 	struct extra_descr_data *ex_description; /* extra descriptions   */
	struct char_data *carried_by;  /* Carried by :NULL in room/conta */
	byte   eq_pos;                 /* what is the equip. pos?        */
	struct char_data *equipped_by; /* equipped by :NULL in room/conta*/
	struct obj_data *in_obj;       /* In what object NULL when none  */
	struct obj_data *contains;     /* Contains objects               */
	struct obj_data *next_content; /* For 'contains' lists           */
	struct obj_data *next;         /* For the object list            */
};
/* ======================================================================*/

/* The following defs are for room_data  */

#define NOWHERE    -1    /* nil reference for room-database      */
#define AUTO_RENT  -2    /* other special room, for auto-renting */

/* Bitvector For 'room_flags' */

#define DARK           1
#define DEATH          2
#define NO_MOB         4
#define INDOORS        8
#define PEACEFUL      16  /* No fighting */
#define NOSTEAL       32  /* No Thieving */
#define NO_SUM        64  /* no summoning */
#define NO_MAGIC     128
#define TUNNEL       256 /* Limited #s of people in room */
#define PRIVATE      512
#define SILENCE      1024
#define LARGE        2048
#define NO_DEATH     4096
#define SAVE_ROOM    8192 /* room will save eq and load at reboot */

/* For 'dir_option' */

#define NORTH          0
#define EAST           1
#define SOUTH          2
#define WEST           3
#define UP             4
#define DOWN           5

#define EX_ISDOOR      	1
#define EX_CLOSED      	2
#define EX_LOCKED      	4
#define EX_SECRET	8
#define EX_RSLOCKED	16
#define EX_PICKPROOF    32
#define EX_CLIMB        64

/* For 'Sector types' */

#define SECT_INSIDE          0
#define SECT_CITY            1
#define SECT_FIELD           2
#define SECT_FOREST          3
#define SECT_HILLS           4
#define SECT_MOUNTAIN        5
#define SECT_WATER_SWIM      6
#define SECT_WATER_NOSWIM    7
#define SECT_AIR             8
#define SECT_UNDERWATER      9
#define SECT_DESERT          10
#define SECT_TREE            11

#define TELE_LOOK            1
#define TELE_COUNT           2
#define TELE_RANDOM          4
#define TELE_SPIN            8

#define LARGE_NONE           0
#define LARGE_WATER          1
#define LARGE_AIR            2
#define LARGE_IMPASS         4


struct large_room_data 
{
#if 0
  unsigned int flags[9];
#else
 long flags[9];
#endif 
};

struct room_direction_data
{
	char *general_description;    /* When look DIR.                  */ 
	char *keyword;                /* for open/close                  */

#if 0
	sh_int exit_info;             /* Exit info                       */
	int key;	              /* Key's number (-1 for no key)    */
	int to_room;                  /* Where direction leeds (NOWHERE) */
	int open_cmd;		      /* cmd needed to OPEN/CLOSE door   */
#else
	long exit_info;             /* Exit info                       */
	long key;	              /* Key's number (-1 for no key)    */
	long to_room;                  /* Where direction leeds (NOWHERE) */
	long open_cmd;		      /* cmd needed to OPEN/CLOSE door   */
#endif

};

/* ========================= Structure for room ========================== */
struct room_data
{
	/* sh_int */
#if 0
	sh_int number;               /* Rooms number                       */
	sh_int zone;                 /* Room zone (for resetting)          */
        sh_int continent;            /* Which continent/mega-zone          */
	sh_int sector_type;             /* sector type (move/hide)            */
#else
	long number;               /* Rooms number                       */
	long zone;                 /* Room zone (for resetting)          */
        long continent;            /* Which continent/mega-zone          */
	long sector_type;             /* sector type (move/hide)            */
#endif

        int river_dir;               /* dir of flow on river               */
        int river_speed;             /* speed of flow on river             */

	int  tele_time;              /* time to a teleport                 */
	int  tele_targ;              /* target room of a teleport          */
	char tele_mask;              /* flags for use with teleport        */
	int  tele_cnt;               /* countdown teleports                */

        unsigned char moblim;        /* # of mobs allowed in room.         */

	char *name;                  /* Rooms name 'You are ...'           */
	char *description;           /* Shown when entered                 */
	struct extra_descr_data *ex_description; /* for examine/look       */
	struct room_direction_data *dir_option[6]; /* Directions           */
	long room_flags;             /* DEATH,DARK ... etc                 */ 
	byte light;                  /* Number of lightsources in room     */
        byte dark;
	int (*funct)();              /* special procedure                  */
         
	struct obj_data *contents;   /* List of items in room              */
	struct char_data *people;    /* List of NPC / PC in room           */

	struct large_room_data *large;  /* special for large rooms         */

};
/* ======================================================================== */

/* The following defs and structures are related to char_data   */

/* For 'equipment' */

#define WEAR_LIGHT      0
#define WEAR_FINGER_R   1
#define WEAR_FINGER_L   2
#define WEAR_NECK_1     3
#define WEAR_NECK_2     4
#define WEAR_BODY       5
#define WEAR_HEAD       6
#define WEAR_LEGS       7
#define WEAR_FEET       8
#define WEAR_HANDS      9
#define WEAR_ARMS      10
#define WEAR_SHIELD    11
#define WEAR_ABOUT     12
#define WEAR_WAISTE    13
#define WEAR_WRIST_R   14
#define WEAR_WRIST_L   15
#define WIELD          16
#define HOLD           17
#define WEAR_BACK      18
#define WEAR_EAR_R     19
#define WEAR_EAR_L     20
#define WEAR_EYES      21
#define LOADED_WEAPON  22
#define MAX_WEAR_POS   23

/* For 'char_payer_data' */


/*
**  #2 has been used!!!!  Don't try using the last of the 3, because it is
**  the keeper of active/inactive status for dead characters for ressurection!
*/
#define MAX_TOUNGE  3         /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */

#define MAX_NEW_LANGUAGES 10  /* for new languages DO NOT CHANGE!  */

#define MAX_SKILLS  350   /* Used in CHAR_FILE_U *DO*NOT*CHANGE* 200->350 */
#define MAX_WEAR    (MAX_WEAR_POS+1)
#define MAX_AFFECT  40    /* Used in CHAR_FILE_U *DO*NOT*CHANGE* 25->30*/
#define MAX_SAVES   8     /* number of saving throws types... DO NOT CHANGE*/

/* Predifined  conditions */
#define MAX_CONDITIONS 5  /* USER FILE, DO NOT CHANGE */

#define DRUNK        0
#define FULL         1
#define THIRST       2

/* Bitvector for 'affected_by' */
#define AFF_BLIND             0x00000001
#define AFF_INVISIBLE         0x00000002
#define AFF_DETECT_EVIL       0x00000004
#define AFF_DETECT_INVISIBLE  0x00000008
#define AFF_DETECT_MAGIC      0x00000010
#define AFF_SENSE_LIFE        0x00000020
#define AFF_LIFE_PROT         0x00000040
#define AFF_SANCTUARY         0x00000080
#define AFF_DRAGON_RIDE       0x00000100
#define AFF_GROWTH            0x00000200 /* this was the one that was missing*/

#define AFF_CURSE             0x00000400
#define AFF_FLYING            0x00000800
#define AFF_POISON            0x00001000
#define AFF_TREE_TRAVEL       0x00002000
#define AFF_PARALYSIS         0x00004000
#define AFF_INFRAVISION       0x00008000
#define AFF_WATERBREATH       0x00010000
#define AFF_SLEEP             0x00020000
#define AFF_TRAVELLING        0x00040000  /* i.e. can't be stoned */
#define AFF_SNEAK             0x00080000
#define AFF_HIDE              0x00100000
#define AFF_SILENCE           0x00200000
#define AFF_CHARM             0x00400000
#define AFF_FOLLOW            0x00800000
#define AFF_PROTECT_FROM_EVIL 0x01000000  /*  */
#define AFF_TRUE_SIGHT        0x02000000
#define AFF_SCRYING           0x04000000   /* seeing other rooms */
#define AFF_FIRESHIELD        0x08000000
#define AFF_GROUP             0x10000000
#define AFF_TELEPATHY         0x20000000
#define AFF_UNDEF_AFF_1       0x40000000
#define AFF_UNDEF_AFF_2       0x80000000

/* affects 2 */

#define AFF2_ANIMAL_INVIS     0x00000001
#define AFF2_HEAT_STUFF       0x00000002
#define AFF2_LOG_ME           0x00000004
#define AFF2_BERSERK	      0x00000008
#define AFF2_CON_ORDER	      0x00000010
#define AFF2_AFK              0x00000020

/* modifiers to char's abilities */

#define APPLY_NONE              0
#define APPLY_STR               1
#define APPLY_DEX               2
#define APPLY_INT               3
#define APPLY_WIS               4
#define APPLY_CON               5
#define APPLY_CHR               6
#define APPLY_SEX               7
#define APPLY_LEVEL             8
#define APPLY_AGE               9
#define APPLY_CHAR_WEIGHT      10
#define APPLY_CHAR_HEIGHT      11
#define APPLY_MANA             12
#define APPLY_HIT              13
#define APPLY_MOVE             14
#define APPLY_GOLD             15
#define APPLY_EXP              16
#define APPLY_AC               17
#define APPLY_ARMOR            17
#define APPLY_HITROLL          18
#define APPLY_DAMROLL          19
#define APPLY_SAVING_PARA      20
#define APPLY_SAVING_ROD       21
#define APPLY_SAVING_PETRI     22
#define APPLY_SAVING_BREATH    23
#define APPLY_SAVING_SPELL     24
#define APPLY_SAVE_ALL         25
#define APPLY_IMMUNE           26
#define APPLY_SUSC             27
#define APPLY_M_IMMUNE         28
#define APPLY_SPELL            29
#define APPLY_WEAPON_SPELL     30
#define APPLY_EAT_SPELL        31
#define APPLY_BACKSTAB         32
#define APPLY_KICK             33
#define APPLY_SNEAK            34
#define APPLY_HIDE             35
#define APPLY_BASH             36
#define APPLY_PICK             37
#define APPLY_STEAL            38
#define APPLY_TRACK            39
#define APPLY_HITNDAM          40
#define APPLY_SPELLFAIL        41
#define APPLY_ATTACKS          42
#define APPLY_HASTE            43
#define APPLY_SLOW             44
#define APPLY_BV2              45
#define APPLY_FIND_TRAPS       46
#define APPLY_RIDE             47
#define APPLY_RACE_SLAYER      48
#define APPLY_ALIGN_SLAYER     49
#define APPLY_MANA_REGEN       50
#define APPLY_HIT_REGEN        51
#define APPLY_MOVE_REGEN       52
		/* Set thirst/hunger/drunk to MOD */
#define APPLY_MOD_THIRST	53
#define APPLY_MOD_HUNGER	54
#define APPLY_MOD_DRUNK		55

		/* not implemented */
#define APPLY_T_STR		56
#define APPLY_T_INT		57
#define APPLY_T_DEX		58
#define APPLY_T_WIS		59
#define APPLY_T_CON		60
#define APPLY_T_CHR		61
#define APPLY_T_HPS		62
#define APPLY_T_MOVE		63
#define APPLY_T_MANA		64

/* 'class' for PC's */
#define CLASS_MAGIC_USER  1
#define CLASS_CLERIC      2
#define CLASS_WARRIOR     4
#define CLASS_THIEF       8
#define CLASS_DRUID      16
#define CLASS_MONK       32
#define CLASS_BARBARIAN  64
#define CLASS_SORCERER   128
#define CLASS_PALADIN    256
#define CLASS_RANGER 	 512
#define CLASS_PSI	 1024

/* sex */
#define SEX_NEUTRAL   0
#define SEX_MALE      1
#define SEX_FEMALE    2

/* positions */
#define POSITION_DEAD       0
#define POSITION_MORTALLYW  1
#define POSITION_INCAP      2
#define POSITION_STUNNED    3
#define POSITION_SLEEPING   4
#define POSITION_RESTING    5
#define POSITION_SITTING    6
#define POSITION_FIGHTING   7
#define POSITION_STANDING   8
#define POSITION_MOUNTED    9

/* for mobile actions: specials.act */
#define ACT_SPEC       (1<<0)  /* special routine to be called if exist   */
#define ACT_SENTINEL   (1<<1)  /* this mobile not to be moved             */
#define ACT_SCAVENGER  (1<<2)  /* pick up stuff lying around              */
#define ACT_ISNPC      (1<<3)  /* This bit is set for use with IS_NPC()   */
#define ACT_NICE_THIEF (1<<4)  /* Set if a thief should NOT be killed     */
#define ACT_AGGRESSIVE (1<<5)  /* Set if automatic attack on NPC's        */
#define ACT_STAY_ZONE  (1<<6)  /* MOB Must stay inside its own zone       */
#define ACT_WIMPY      (1<<7)  /* MOB Will flee when injured, and if      */
                               /* aggressive only attack sleeping players */
#define ACT_ANNOYING   (1<<8)  /* MOB is so utterly irritating that other */
                               /* monsters will attack it...              */
#define ACT_HATEFUL    (1<<9)  /* MOB will attack a PC or NPC matching a  */
                               /* specified name                          */
#define ACT_AFRAID    (1<<10)  /* MOB is afraid of a certain PC or NPC,   */
                               /* and will always run away ....           */
#define ACT_IMMORTAL  (1<<11)  /* MOB is a natural event, can't be kiled  */
#define ACT_HUNTING   (1<<12)  /* MOB is hunting someone                  */
#define ACT_DEADLY    (1<<13)  /* MOB has deadly poison                   */
#define ACT_POLYSELF  (1<<14)  /* MOB is a polymorphed person             */
#define ACT_META_AGG  (1<<15)  /* MOB is _very_ aggressive                */
#define ACT_GUARDIAN  (1<<16)  /* MOB will guard master                   */
#define ACT_ILLUSION  (1<<17)  /* MOB is illusionary                      */
#define ACT_HUGE      (1<<18)  /* MOB is too large to go indoors          */
#define ACT_SCRIPT    (1<<19)  /* MOB has a script assigned to it DO NOT SET */
#define ACT_GREET     (1<<20)  /* MOB greets people */

#define ACT_MAGIC_USER	(1<<21)
#define ACT_WARRIOR	(1<<22)
#define ACT_CLERIC	(1<<23)
#define ACT_THIEF	(1<<24)
#define ACT_DRUID	(1<<25)
#define ACT_MONK	(1<<26)
#define ACT_BARBARIAN	(1<<27)
#define ACT_PALADIN	(1<<28)
#define ACT_RANGER	(1<<29)
#define ACT_PSI		(1<<30)

/* For players : specials.act */
#define PLR_BRIEF     (1<<0)
/* (1<<1) */
#define PLR_COMPACT   (1<<2)
#define PLR_DONTSET   (1<<3) /* Dont EVER set */
#define PLR_WIMPY     (1<<4) /* character will flee when seriously injured */
#define PLR_NOHASSLE  (1<<5) /* char won't be attacked by aggressives.      */
#define PLR_STEALTH   (1<<6) /* char won't be announced in a variety of situations */
#define PLR_HUNTING   (1<<7) /* the player is hunting someone, do a track each look */
#define PLR_DEAF      (1<<8) /* The player does not hear shouts */
#define PLR_ECHO      (1<<9) /* Messages (tells, shout,etc) echo back */
#define PLR_NOGOSSIP  (1<<10) /* New, gossip channel */
#define PLR_NOAUCTION (1<<11) /* New AUTCION channel */
#define PLR_NODIMD    (1<<12) /* Cant use DIMD */
#define PLR_NOTHING2  (1<<13)  /* empty */
#define PLR_NOSHOUT   (1<<14)/* the player is not allowed to shout */
#define PLR_FREEZE    (1<<15)/* The player is frozen, must have pissed an immo off */
#define PLR_NOTELL	(1<<16)  /* The player does not hear tells */
#define PLR_MAILING	(1<<17)
#define PLR_EMPTY4	(1<<18)
#define PLR_EMPTY5	(1<<19)
#define PLR_NOBEEP    (1<<20)/* ignore all beeps */

/* This structure is purely intended to be an easy way to transfer */
/* and return information about time (real or mudwise).            */
struct time_info_data
{
	byte hours, day, month;
	sh_int year;
};

/* Data used in the display code checks -DM */
struct last_checked {
   int mana;
   int mmana;
   int hit;
   int mhit;
   int move;
   int mmove;
   int exp;
   int gold;
 };

/* These data contain information about a players time data */
struct time_data
{
  time_t birth;    /* This represents the characters age                */
  time_t logon;    /* Time of the last logon (used to calculate played) */
  int played;      /* This is the total accumulated time played in secs */
};

struct char_player_data
{

  byte sex;           /* PC / NPC s sex                       */
  short weight;       /* PC / NPC s weight                    */
  short height;       /* PC / NPC s height                    */
  bool talks[MAX_TOUNGE]; /* PC s Tounges 0 for NPC/not used for languagesn */
  long user_flags;	/* no delete, ansi etc... */
  int speaks;		/* current language speaking */

  char *name;    	    /* PC / NPC s name (kill ...  )         */
  char *short_descr;  /* for 'actions'                        */
  char *long_descr;   /* for 'look'.. Only here for testing   */
  char *description;  /* Extra descriptions                   */
  char *title;        /* PC / NPC s title                     */
  char *sounds;       /* Sound that the monster makes (in room) */
  char *distant_snds; /* Sound that the monster makes (other) */

  long class;         /* PC s class or NPC alignment          */
  int hometown;       /* PC s Hometown (zone)                 */
  
  long extra_flags;   /* for ressurection in the future , etc */
  
  struct time_data time; /* PC s AGE in days                  */
  
  byte level[ABS_MAX_CLASS];    /* PC / NPC s level         */

};


/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_ability_data
{
  sbyte str; 
  sbyte str_add;      /* 000 - 100 if strength 18             */
  sbyte intel;
  sbyte wis; 
  sbyte dex; 
  sbyte con;
  sbyte chr;
  sbyte extra;
  sbyte extra2;
};


/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_point_data
{
  sh_int mana;         
  sh_int max_mana;
/*   ubyte  mana_gain ; */
  char  mana_gain ;

  sh_int hit;   
  sh_int max_hit;      /* Max hit for NPC                         */
/*   ubyte  hit_gain; */
   char  hit_gain; 

  sh_int move;  
  sh_int max_move;     /* Max move for NPC                        */
/*   ubyte  move_gain; */
  char  move_gain;  
  
  sh_int extra1;  /* extra stuff */
  sh_int extra2;
  ubyte  extra3;
  
  sh_int armor;        /* Internal -100..100, external -10..10 AC */
  int gold;            /* Money carried                           */
  int bankgold;        /* gold in the bank.                       */
  int exp;             /* The experience of the player            */
  int true_exp;        /* gonna be used for dual class		  */
  int extra_dual;      /* case I need an extra duall class bit    */
  
  
  sbyte hitroll;       /* Any bonus or penalty to the hit roll    */
  sbyte damroll;       /* Any bonus or penalty to the damage roll */
  
  sbyte extra_h;       /* extra */
};

struct pc_data
{
	long	plr;		/* plr_* flags */
	int	dimd_credits;	/* credits used in remote comm */
	long 	comm;		/* flags used for remote communications */
};

struct char_special_data
{
  byte spellfail;        /* max # for spell failure (101) */
  byte tick;             /* the tick that the mob/player is on  */
  byte pmask;            /* poof mask                           */
  byte position;         /* Standing or ...                        */
  byte default_pos;      /* Default position for NPC              */
  byte spells_to_learn;    /* How many can you learn yet this level*/
  byte carry_items;        /* Number of items carried              */
  byte last_direction;      /* The last direction the monster went */
  char sev;                  /* log severety level for gods */
  long userpos;
  char *userpwd;
 
  long start_room;  /* so people can be set to start certain places */
  int edit;                /* edit state */

        sbyte mobtype;                        /* mob type simple, A, L, B */ 
        unsigned long exp_flag;                 /* exp flag for this mob */
        sbyte hp_num_dice;			/* number of HPS dice */
        unsigned int hp_size_dice;		/* size of HPS dice */
        unsigned int hp_bonus_hps;		/* bonus hps number */

	byte damnodice;           /* The number of damage dice's         */
	byte damsizedice;         /* The size of the damage dice's       */

        unsigned int dam_bonus;			/* damage bonus */
        byte medit;                           /*  mob edit menu at */
        struct char_data *mobedit;            /*  mob editing */
        
        byte oedit;                            /*  obj editing menu at */
        struct obj_data *objedit;             /*  object editing */

  int tick_to_lag;

  sbyte conditions[MAX_CONDITIONS];      /* Drunk full etc.                     */
  int permissions;
  int zone;   /* zone that an NPC lives in */
  int carry_weight;        /* Carried weight                       */
  int timer;               /* Timer for update                     */
  int was_in_room;         /* storage of location for linkdead people */
  int attack_type;         /* The Attack Type Bitvector for NPC's */
  int alignment;           /* +-1000 for alignments               */
  
  char *poofin;
  char *poofout;
  char *prompt;
  char *email;			/* email address in aux */
  
  char *group_name; /* current group name if any... */  
  
  Alias   *A_list;
  struct char_data *misc;  
  struct char_data *fighting; /* Opponent                          */
	
  struct char_data *hunting;  /* Hunting person..                  */

  struct char_data *ridden_by;
  struct char_data *mounted_on;
  
  struct char_data *charging;	/* we are charging this person */
  int  charge_dir;		/* direction charging */
  
  long affected_by;  /* Bitvector for spells/skills affected by    */
  long affected_by2; /* Other special things                       */

  long act;		/* flags for NPC behavior */  

  sh_int apply_saving_throw[MAX_SAVES]; /* Saving throw (Bonuses)  */

};

/* skill_data flags */
#define SKILL_KNOWN    		1
#define SKILL_KNOWN_CLERIC	2
#define SKILL_KNOWN_MAGE	4
#define SKILL_KNOWN_SORCERER	8
#define SKILL_KNOWN_THIEF	16
#define SKILL_KNOWN_MONK	32
#define SKILL_KNOWN_DRUID	64
#define SKILL_KNOWN_WARRIOR	128

/* need to make byte flags, to long or int flags in char_skill_data */
#define SKILL_KNOWN_BARBARIAN	256
#define SKILL_KNOWN_PALADIN	512
#define SKILL_KNOWN_RANGER	1024
#define SKILL_KNOWN_PSI		2048
/* end */

/* skill_data special */
#define SKILL_SPECIALIZED 	1
#define SKILL_UNDEFINED		2
#define SKILL_UNDEFINED2	4

/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_skill_data
{
	byte learned;           /* % chance for success 0 = not learned   */

	/* change to int or long */
	byte flags;		/* SKILL KNOWN? bit settings  		  */
	byte special;  		/* spell/skill specializations 		  */
	byte nummem; 		/* number of times this spell is memorized*/
};



/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct affected_type
{
	short type;           /* The type of spell that caused this      */
	sh_int duration;      /* For how long its effects will last      */
	long modifier;       /* This is added to apropriate ability     */
	long location;        /* Tells which ability to change(APPLY_XXX)*/
	long bitvector;       /* Tells which bits to set (AFF_XXX)       */
	struct affected_type *next;
};

struct follow_type
{
	struct char_data *follower;
	struct follow_type *next;
};

/* ================== Structure for player/non-player ===================== */
struct char_data
{
	long nr;			/* monster nr */
	long in_room;                    /* Location                    */
        int term;
        int size;
        struct last_checked last;        /* For displays                */
	unsigned immune;                 /* Immunities                  */
	unsigned M_immune;               /* Meta Immunities             */
        unsigned susc;                   /* susceptibilities            */
	float   mult_att;                /* the number of attacks      */
	byte   attackers;
	byte    sector;                 /* which part of a large room
					   am i in?  */
        int generic;                     /* generic int */
        int commandp;                    /* command poitner for scripts */
        int waitp;                       /* waitp for scripts           */
        int commandp2;                   /* place-holder for gosubs, etc. */
        int script;

	sh_int race;
	sh_int hunt_dist;                /* max dist the player can hunt */

	struct pc_data *pc;		/* pcdata */
	
        unsigned short hatefield;
        unsigned short fearfield;

	Opinion hates;
	Opinion fears;

	sh_int  persist;
	int     old_room;

        
	void *act_ptr;    /* numeric argument for the mobile 
					actions */

	struct char_player_data player;       /* Normal data            */
	struct char_ability_data abilities;   /* Abilities              */
	struct char_ability_data tmpabilities;/* The abilities we use  */
	struct affected_type *affected;       /* affected by what spells */	
	struct char_point_data points;        /* Points                 */
	struct char_special_data specials;    /* Special plaing constant */

	/* monitor these three */
	struct char_skill_data *skills;       /* Skills                */
	struct obj_data *equipment[MAX_WEAR]; /* Equipment array         */
	struct obj_data *carrying;            /* Head of list            */
	/* end monitor */
	
	struct descriptor_data *desc;         /* NULL for mobiles        */
	struct char_data *orig;               /* Special for polymorph   */

	struct char_data *next_in_room;     /* For room->people - list   */
	struct char_data *next;             /* all in game list  */
	struct char_data *next_fighting;    /* For fighting list         */

	struct follow_type *followers;        /* List of chars followers */
	struct char_data *master;             /* Who is char following?  */
	int	invis_level;		      /* visibility of gods */

};


/* ======================================================================== */

/* How much light is in the land ? */

#define SUN_DARK	0
#define SUN_RISE	1
#define SUN_LIGHT	2
#define SUN_SET		3
#define MOON_SET        4
#define MOON_RISE       5   /* moon changes -DM 7/16/92  */



/* And how is the sky ? */

#define SKY_CLOUDLESS	0
#define SKY_CLOUDY	1
#define SKY_RAINING	2
#define SKY_LIGHTNING	3

struct weather_data
{
	int pressure;	/* How is the pressure ( Mb ) */
	int change;	/* How fast and what way does it change. */
	int sky;	/* How is the sky. */
	int sunlight;	/* And how much sun. */
};


/* ***********************************************************************
*  file element for player file. BEWARE: Changing it will ruin the file  *
*********************************************************************** */


struct char_file_u
{
	int class;
	byte sex;
	byte level[ABS_MAX_CLASS];
	time_t birth;  /* Time of birth of character     */
	int played;    /* Number of secs played in total */
	int   race;
	unsigned int weight;
	unsigned int height;	
	char title[80];
	char extra_str[255];
	sh_int hometown;
	char description[240];
	bool talks[MAX_TOUNGE];
	long extra_flags;
	sh_int load_room;            /* Which room to place char in  */
	struct char_ability_data abilities;
	struct char_point_data points;
	struct char_skill_data skills[MAX_SKILLS];
	struct affected_type affected[MAX_AFFECT];
	/* specials */
	byte spells_to_learn;  
	int alignment;     
	long affected_by;
	long affected_by2;
	time_t last_logon;  /* Time (in secs) of last logon */
	long    act;        /* ACT Flags                    */

	/* char data */
	char name[20];
	char alias[30];  /* for later use.... */
	char pwd[11];
	sh_int apply_saving_throw[MAX_SAVES];
	int conditions[MAX_CONDITIONS];
	int startroom;  /* which room the player should start in */
	long user_flags;	/* no-delete,use ansi,etc... */
	int speaks;		/* language currently speakin in */

};



/* ***********************************************************************
*  file element for object file. BEWARE: Changing it will ruin the file  *
*********************************************************************** */

struct obj_cost { /* used in act.other.c:do_save as
		     well as in reception2.c */
	int total_cost;
	int no_carried;
	bool ok;
};

#define MAX_OBJ_SAVE 200 /* Used in OBJ_FILE_U *DO*NOT*CHANGE* */

struct obj_file_elem 
{
	sh_int item_number;

	int value[4];
	int extra_flags;
	int weight;
	int timer;
	long bitvector;
	char name[128];  /* big, but not horrendously so */
	char sd[128];
        char desc[256];
        byte wearpos;
        byte depth;
	struct obj_affected_type affected[MAX_OBJ_AFFECT];
};

struct obj_file_u
{
	char owner[20];    /* Name of player                     */
	int gold_left;     /* Number of goldcoins left at owner  */
	int total_cost;    /* The cost for all items, per day    */
	long last_update;  /* Time in seconds, when last updated */
	long minimum_stay; /* For stasis */
	int  number;       /* number of objects */
	struct obj_file_elem objects[MAX_OBJ_SAVE];
};

#if 0

#define MAX_OBJ_SAVE 200 /* Used in OBJ_FILE_U *DO*NOT*CHANGE* */

struct rental_header {
  char	inuse;
  int	length;
  char owner[20];    /* Name of player                     */
};

struct obj_file_elem {
	sh_int item_number;

	int value[4];
	int extra_flags;
	int weight;
	int timer;
	long bitvector;
	struct obj_affected_type affected[MAX_OBJ_AFFECT];
};

struct obj_file_u
{
	int gold_left;     /* Number of goldcoins left at owner  */
	int total_cost;    /* The cost for all items, per day    */
	long last_update;  /* Time in seconds, when last updated */
	long minimum_stay; /* For stasis */
	int nobjects;	   /* how many objects below */
	struct obj_file_elem objects[MAX_OBJ_SAVE];
			   /* We don't always allocate this much space
			      but it is handy for the times when you
			      need a fast one lying around.  */
};

#endif

/* ***********************************************************
*  The following structures are related to descriptor_data   *
*********************************************************** */



struct txt_block
{
	char *text;
	struct txt_block *next;
};

struct txt_q
{
	struct txt_block *head;
	struct txt_block *tail;
};



/* modes of connectedness */

#define CON_PLYNG   0
#define CON_NME	    1
#define CON_NMECNF  2
#define CON_PWDNRM  3
#define CON_PWDGET  4
#define CON_PWDCNF  5
#define CON_QSEX    6
#define CON_RMOTD   7
#define CON_SLCT    8
#define CON_EXDSCR  9
#define CON_QCLASS  10
#define CON_LDEAD   11
#define CON_PWDNEW  12
#define CON_PWDNCNF 13
#define CON_WIZLOCK 14
#define CON_QRACE   15
#define CON_RACPAR  16
#define CON_AUTH    17
#define CON_CITY_CHOICE 18
#define CON_STAT_LIST   19
#define CON_QDELETE     20
#define CON_QDELETE2    21
#define CON_STAT_LISTV  22
#define CON_WMOTD         23
#define CON_EDITING     24
#define CON_DELETE_ME	25
#define CON_CHECK_MAGE_TYPE 26
#define CON_OBJ_EDITING 27
#define CON_MOB_EDITING 28

struct snoop_data
{
	struct char_data *snooping;	
		/* Who is this char snooping */
	struct char_data *snoop_by;
		/* And who is snooping on this char */
};

struct descriptor_data
{
	int descriptor;	            /* file descriptor for socket */

	char *name;		/* ptr to name for mail system */
	
	char host[50];                /* hostname                   */
	char pwd[12];                 /* password                   */
	int pos;                      /* position in player-file    */
	int connected;                /* mode of 'connectedness'    */
	int wait;                     /* wait for how many loops    */
	char *showstr_head;	      /* for paging through texts   */
	char *showstr_point;	      /*       -                    */
	char **str;                   /* for the modify-str system  */
	int max_str;                  /* -                          */
	int prompt_mode;              /* control of prompt-printing */
	char buf[MAX_STRING_LENGTH];  /* buffer for raw input       */
	char last_input[MAX_INPUT_LENGTH];/* the last input         */

	char stat[MAX_STAT];         /* stat priorities            */

		/* for the new write_to_out */
char small_outbuf[SMALL_BUFSIZE];
int bufptr;
int bufspace;
struct txt_block *large_outbuf;
#if BLOCK_WRITE
char *output;	
#else
struct txt_q output;          /* q of strings to send       */
#endif
	struct txt_q input;           /* q of unprocessed input     */
	struct char_data *character;  /* linked to char             */
        struct char_data *original;   /* original char              */
	struct snoop_data snoop;      /* to snoop people.           */
	struct descriptor_data *next; /* link to next descriptor    */
};

struct msg_type 
{
	char *attacker_msg;  /* message to attacker */
	char *victim_msg;    /* message to victim   */
	char *room_msg;      /* message to room     */
};

struct message_type
{
	struct msg_type die_msg;      /* messages when death            */
	struct msg_type miss_msg;     /* messages when miss             */
	struct msg_type hit_msg;      /* messages when hit              */
	struct msg_type sanctuary_msg;/* messages when hit on sanctuary */
	struct msg_type god_msg;      /* messages when hit on god       */
	struct message_type *next;/* to next messages of this kind.*/
};

struct message_list
{
	int a_type;               /* Attack type 						 */
	int number_of_attacks;	  /* How many attack messages to chose from. */
	struct message_type *msg; /* List of messages.				 */
};

struct dex_skill_type
{
	sh_int p_pocket;
	sh_int p_locks;
	sh_int traps;
	sh_int sneak;
	sh_int hide;
};

struct dex_app_type
{
	sh_int reaction;
	sh_int miss_att;
	sh_int defensive;
};

struct str_app_type
{
	sh_int tohit;    /* To Hit (THAC0) Bonus/Penalty        */
	sh_int todam;    /* Damage Bonus/Penalty                */
	sh_int carry_w;  /* Maximum weight that can be carrried */
	sh_int wield_w;  /* Maximum weight that can be wielded  */
};

struct wis_app_type
{
	byte bonus;       /* how many bonus skills a player can */
	                  /* practice pr. level                 */
};

struct int_app_type
{
	byte learn;       /* how many % a player learns a spell/skill */
};

struct con_app_type
{
	sh_int hitp;
	sh_int shock;
};

struct chr_app_type
{
        sh_int num_fol;
        sh_int reaction;
};

/************************************************************/

typedef void (*funcp)();

struct breather {
  int	vnum;
  int	cost;
  funcp	*breaths;
};