/* ************************************************************************
*  file: structs.h , Structures        .                  Part of DIKUMUD *
*  Usage: Declarations of central data structures                         *
************************************************************************* */

#include <sys/types.h>

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

#define PULSE_ZONE     240
#define PULSE_MOBILE    40 
#define PULSE_VIOLENCE  12
#define WAIT_SEC       4
#define WAIT_ROUND     4

#define LV_IMMORTAL	21
#define LV_DEITY        (LV_IMMORTAL+1)
#define LV_DEMIGOD	(LV_DEITY+1)
#define LV_GOD		(LV_DEMIGOD+1)
#define LV_GREATER	(LV_GOD+1)
#define LV_IMPL         (LV_GREATER+1)
#define LV_ARCHITECT    (LV_IMPL+1)

#define MAX_STRING_LENGTH   4096
#define MAX_INPUT_LENGTH     160 
#define MAX_MESSAGES          60
#define MAX_ITEMS            153

#define MAX_EXP 4000000

#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)

#define SECS_PER_MUD_HOUR  75
#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_BOOK      23
#define ITEM_BATTERY   24
#define ITEM_TELEPORT  25 /* To teleport to specific places */
			/* I'll write the values here before I forget */
			/* value[0]=dest VIRTUAL number */
			/* value[1]=command to trigger teleport "rub ring" */
			/* value[2]=charges left, -1 for infinite */
#define ITEM_TIMER     26 /* for "timer" objects (unimplemented)*/
#define ITEM_STONE     27

/* 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 */

/* Bitvector for 'extra_flags' */

#define ITEM_GLOW            1
#define ITEM_HUM             2
#define ITEM_DARK            4
#define ITEM_LOCK            8
#define ITEM_EVIL           16
#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_SECRET	  4096 /* Can only be found by search command */
#define ITEM_FLOAT        8192 /* Will it float in a liquid */

/* 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

/* for containers  - value[1] */

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

struct ban_t /* Struct to ban certain sites */
{
	char *name;		/* Name of site */
	struct ban_t *next;	/* next in list */
};

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 2         /* 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                     */
	int wear_flags;     /* Where you can wear it            */
	int 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 {
	byte location;      /* Which ability to change (APPLY_XXX) */
	sbyte modifier;     /* How much it changes by              */
};

/* ======================== Structure for object ========================= */
struct obj_data
{
	sh_int item_number;            /* Where in data-base               */
	sh_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  */

	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   */
	struct char_data *equipped_by; /* Who is equipping it?             */

	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    */

/* Bitvector For 'room_flags' */
/* signed short int for these */
#define DARK            1    /* Off really means just lit by Sun/Moon */
#define DEATH           2
#define NO_MOB          4
#define INDOORS         8
#define LAWFULL        16
#define NEUTRAL        32
#define CHAOTIC        64
#define NO_MAGIC      128
#define TUNNEL        256
#define PRIVATE       512
#define ARENA        1024
#define SAFE         2048
#define NO_PRECIP    4096    /* Only applies to outdoor rooms (canopies...) */
#define SINGLE_FILE  8192    /* Only for rooms with 1 or 2 exits */
#define JAIL        16384    /* Incarceration!!! - Can't quit out of room */
#define NO_TELEPORT 32768    /* Don't teleport in */

/* 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_RSCLOSED	8
#define EX_RSLOCKED	16
#define EX_PICKPROOF 32

/* 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_NO_GROUND       8

/* For Alignment of Room Mana Gain */
#define MANA_ALL_ALIGNS      0
#define MANA_GOOD            1
#define MANA_NEUTRAL         2
#define MANA_EVIL            3


struct room_direction_data
{
	char *general_description;       /* When look DIR.                  */ 
	char *keyword;                   /* for open/close                  */	
	sh_int exit_info;                /* Exit info                       */
	sh_int key;	                 /* Key's number (-1 for no key)    */
	sh_int to_room;                  /* Where direction leeds (NOWHERE) */
};

/* ========================= Structure for room ========================== */
struct room_data
{
	sh_int number;               /* Rooms number                       */
	sh_int zone;                 /* Room zone (for resetting)          */
	int sector_type;             /* sector type (move/hide)            */
	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           */
	int room_flags;              /* DEATH,DARK ... etc                 */
	byte light;                  /* Number of lightsources in room     */
	byte chance_fall;            /* % Chance of falling                */
	byte fall_flags;             /* <not defined yet>                  */
	byte minlvl,maxlvl;	     /* For restricting rooms to levels    */
	byte mana;                   /* Room mana gain                     */
	byte mana_alignment;         /* Alignment for room mana gain       */
	int (*funct)();              /* special procedure                  */
         
	struct obj_data *contents;   /* List of items in room              */
	struct char_data *people;    /* List of NPC / PC in room           */
};
/* ======================================================================== */

/* 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


/* For 'char_payer_data' */

#define MAX_TOUNGE  3     /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
#define MAX_SKILLS  53    /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
#define MAX_WEAR    18
#define MAX_AFFECT  25    /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */

/* Predifined  conditions */
#define DRUNK        0
#define FULL         1
#define THIRST       2

/* Bitvector for 'affected_by' */
#define AFF_BLIND             1
#define AFF_INVISIBLE         2
#define AFF_DETECT_EVIL       4
#define AFF_DETECT_INVISIBLE  8
#define AFF_DETECT_MAGIC      16
#define AFF_SENSE_LIFE        32
#define AFF_HOLD              64
#define AFF_SANCTUARY         128

#define AFF_GROUP             256
#define AFF_CURSE             1024
#define AFF_FLAMING           2048
#define AFF_POISON            4096
#define AFF_PROTECT_EVIL      8192
#define AFF_PARALYSIS         16384
#define AFF_MORDEN_SWORD      32768
#define AFF_FLAMING_SWORD     65536

#define AFF_SLEEP             131072
#define AFF_DODGE             262144
#define AFF_SNEAK             524288
#define AFF_HIDE              1048576
#define AFF_FEAR              2097152
#define AFF_CHARM             4194304
#define AFF_FOLLOW            8388608
#define AFF_WIMPY            16777216

#define AFF_INFRARED         33554432
#define AFF_LEVITATE         67108864
#define AFF_FLY             134217728
#define AFF_AWARE           268435456

/* 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_SEX               6
#define APPLY_CLASS             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


/* 'class' for PC's */
#define CLASS_MAGIC_USER  1
#define CLASS_CLERIC      2
#define CLASS_THIEF       3
#define CLASS_WARRIOR     4

/* 'class' for NPC's */
#define CLASS_OTHER       0 /* These are not yet used!   */
#define CLASS_UNDEAD      1 /* But may soon be so        */
#define CLASS_HUMANOID    2 /* Idea is to use general    */
#define CLASS_ANIMAL      3 /* monster classes           */
#define CLASS_DRAGON      4 /* Then for example a weapon */
#define CLASS_GIANT       5 /* of dragon slaying is pos. */
#define CLASS_DEMON       6
#define CLASS_BIRD        7
#define CLASS_INSECT      8

/* 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 /* Need to add POSITION_VEHICLE before standing*/
#define POSITION_FIGHTING   7
#define POSITION_STANDING   8   /*---SWIM should be before STAND */
#define POSITION_SWIMMING   9 /* Able to swim in SECT_SWIM rooms */
#define POSITION_LEVITATED 10 /* Just a bit above the ground */
#define POSITION_FLYING    11 /* Able to go upwards without support */


/* for mobile actions: specials.act */
#define ACT_SPEC         1     /* special routine to be called if exist   */
#define ACT_SENTINEL     2     /* this mobile not to be moved             */
#define ACT_SCAVENGER    4     /* pick up stuff lying around              */
#define ACT_ISNPC        8     /* This bit is set for use with IS_NPC()   */
#define ACT_NICE_THIEF  16     /* Set if a thief should NOT be killed     */
#define ACT_AGGRESSIVE  32     /* Set if automatic attack on NPC's        */
#define ACT_STAY_ZONE   64     /* MOB Must stay inside its own zone       */
#define ACT_WIMPY      128     /* MOB Will flee when injured, and if      */
                               /* aggressive only attack sleeping players */
/*
 * For ACT_AGGRESSIVE_XXX, you must also set ACT_AGGRESSIVE
 * These switches can be combined, if none are selected, then
 * the mobile will attack any alignment (same as if all 3 were set)
 */
#define ACT_AGGRESSIVE_EVIL 256  /* auto attack evil PC's only */
#define ACT_AGGRESSIVE_GOOD 512  /* auto attack good PC's only */
#define ACT_AGGRESSIVE_NEUTRAL 1024 /* auto attack neutral PC's only */
#define ACT_MEMORY             2048 /* remember your attackers */
                                    /* only if you are struck first */
#define ACT_ISHUMANOID		4096	/* Is humanoid */
#define ACT_ISDRAGON		8192	/* Is dragon-like */
#define ACT_ISDEMON		16384	/* Is demon-like */
#define ACT_ISANIMAL		32768	/* Is animal-like */
#define ACT_ISINSECT		65536	/* Is insect-like */
#define ACT_CANFLY		131072	/* Can fly */
#define ACT_CANSWIM		262144	/* Can swim */
#define ACT_HAS_CL		524288	/* Has cleric's spells */
#define ACT_HAS_MU		1048576	/* Has Magic User's spells */
#define ACT_HAS_TH		2097152 /* Has Thief skills */
#define ACT_HAS_WA		4194304 /* Has Warrior skills */

#define ACT_SPEC_DIE            8388608 /* Overrides corpse-making, calls */
                                        /* Spec_proc instead (only when   */
                                        /* ACT_SPEC is true) -Sman        */

#define NPC_OUTLAW              16777216 /* For NPC Outlaws, Be careful  */
                                         /* Setting this is the mob file */
					 /* Different prefix, because    */
					 /* There is a PLR version below */
#define ACT_BREAK_CHARM         33554432 /* Will break charm... */

/* For players : specials.act */
#define PLR_BRIEF        1
#define PLR_NOSHOUT      2
#define PLR_COMPACT      4
#define PLR_DONTSET      8   /* Dont EVER set */
#define PLR_NOTELL      16
#define PLR_ISTHIEF     32   /* Marks you as thief */
#define PLR_ISKILLER    64   /* Marks you as a PC Killer */
#define PLR_ISTRUSTED	128  /* May become an immortal */
#define PLR_ISMULTITH	256  /* Is a multi-classed char thief*/
#define PLR_ISMULTIWA	512  /* warrior		*/
#define PLR_ISMULTICL	1024 /* cleric		*/
#define PLR_ISMULTIMU	2048 /* magic user 	*/
#define PLR_ISDWEEB	4096 /* total dork that doesn't need to play */
#define PLR_NOSUMMON	8192 /* Toggle allowing player to BE summoned or not */
#define PLR_TAG_FLAG    16384/* For the playing the game of tag - you're it! */
#define PLR_AUCTION     32768/* For the auction channel */
#define PLR_OUTLAW      65536/* For jailing pc's */
#define PLR_WIZMUFFED   131072 /* Won't hear wizmsgs */
#define PLR_MRTLNOSHOUT 262144 /* Mortal noshout */
#define PLR_MSG_ECHO    524288 /* For those who wish to hear what they say */
#define PLR_NOEMOTE     1048576 /* Ignore emotes */

typedef struct MEMtMemoryRec {
   char name[80];    /* This must be large enuf for player name. */  
   struct MEMtMemoryRec *next;
} MEMtMemoryRec;


/* 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;
};

/* 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
{
	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                     */
	byte sex;           /* PC / NPC s sex                       */
	byte class;         /* PC s class or NPC alignment          */
	byte level;         /* PC / NPC s level                     */
	int hometown;       /* PC s Hometown (zone)                 */
	bool talks[MAX_TOUNGE]; /* PC s Tounges 0 for NPC           */
 	struct time_data time; /* PC s AGE in days                 */
	ubyte weight;       /* PC / NPC s weight                    */
	ubyte height;       /* PC / NPC s height                    */
};


/* 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; 
};


/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_point_data
{
	sh_int mana;         
	sh_int max_mana;     /* Not useable may be erased upon player file renewal */
	sh_int hit;   
	sh_int max_hit;      /* Max hit for NPC                         */
	sh_int move;  
	sh_int max_move;     /* Max move for NPC                        */

	sh_int armor;        /* Internal -100..100, external -10..10 AC */
	int gold;            /* Money carried                           */
	int exp;             /* The experience of the player            */

	sbyte hitroll;       /* Any bonus or penalty to the hit roll    */
	sbyte damroll;       /* Any bonus or penalty to the damage roll */
};

#define OVL_PULSE         18  /* Heartbeat counts for overload prevention */
#define OVL_NORMAL_LIMIT   5  /* Max intrusive acts during ovl period */
#define OVL_DWEEB_LIMIT    1  /* The limit applied to DWEEBS */

struct char_special_data
{
	struct char_data *fighting; /* Opponent                             */
	struct char_data *hunting;  /* Hunting person..                     */

	unsigned long affected_by; /* Bitvector for spells/skills affected by */ 

	byte position;           /* Standing or ...                         */
	byte default_pos;        /* Default position for NPC                */
	unsigned long  act;      /* flags for NPC behavior                  */

	byte spells_to_learn;    /* How many can you learn yet this level   */

	int carry_weight;        /* Carried weight                          */
	byte carry_items;        /* Number of items carried                 */
	int timer;             /* Timer for idle check(PC)/action delay(NPC)*/
	sh_int was_in_room;      /* storage of location for linkdead people */
	sh_int apply_saving_throw[5]; /* Saving throw (Bonuses)             */
	sbyte conditions[3];      /* Drunk full etc.                        */

	byte damnodice;           /* The number of damage dice's            */
	byte damsizedice;         /* The size of the damage dice's          */
	byte last_direction;      /* The last direction the monster went    */
	int attack_type;          /* The Attack Type Bitvector for NPC's    */
	int alignment;            /* +-1000 for alignments                  */

	bool dispHp; 		  /* If TRUE, display Hit points in prompt  */
	bool dispMove; 		  /* If TRUE, display Move points in prompt */
	bool dispMana; 		  /* If TRUE, display Mana points in prompt */
  	char *poofIn;		  /* Description on arrival of a god. */
	char *poofOut; 		  /* Description upon a god's exit. */
	bool holyLite;            /* Holy lite mode */
  	bool wizInvis;            /* If on, people can't see you. */
  
        MEMtMemoryRec *memory;    /* List of attackers to remember... */
	sh_int arena;		/* The arena flag */
	int arena_move;		/* Stats to save when entering arena so */
	int arena_mana;		/* we can restore them upon leaving. */
	int arena_hits;
	unsigned long arena_affvector;
	bool nokill;		/* No attack of players unless this is false*/
	int wimpyness;		/* At what level of hit points to auto-flee */

	int spec[4];		/* Some misc values for spec_proc mobs */

	sh_int ovl_timer;	/* For preventing (n)pc's from overloading */
        sh_int ovl_count;	/* the mud from saying, shouting, etc */

	int warmth;		/* So people can protect themselves from */
				/* extreme heat and cold */

	int jail_time;          /* How long left to spend in jail */
	struct char_data *arrest_by; /* Is this person on the way to jail?*/
	struct char_data *arrest_link; /* for lists of arrested people */
/*	char arrest_flags (resist arrest?) For future use */
	struct char_data *witnessing;
	struct char_data *witness_vict;
	int witness_cmd;
};

#define ARENA_NOTPLAYING	0
#define ARENA_BLUE_PLR		1
#define ARENA_BLUE_CAPT		2
#define ARENA_RED_PLR		3
#define ARENA_RED_CAPT		4
#define ARENA_WATCHER		5	/* Unimplemented at this time*/

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



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

	struct aff  *
*********************************************************** */



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_PWDNEW2 13
#define CON_PWDNCNF 14
#define CON_CLOSE   15
#define CON_QHOMETOWN 16

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

struct descriptor_data
{
	int descriptor;	            /* file descriptor for socket */
        char *name; 		   /* Copy of the player name (pw bug) */
	char host[50];                /* hostname                   */
	char pwd[12];                 /* password                   */
	char pwdconf[12];             /* password for confirmation  */
	int pos;                      /* position in player-file    */
	int connected;                /* mode of 'connectedness'    */
	int wait;                     /* wait for how many loops    */
	bool newline;                 /* newlines in input          */
	char *showstr_head;           /* for paging through texts   */
	char *showstr_point;          /*       -                    */
	char **str;                   /* for the modify-str system  */
	int max_str;                  /* -                          */
	char buf[MAX_STRING_LENGTH];  /* buffer for raw input       */
	char last_input[MAX_INPUT_LENGTH];/* the last input         */
	struct txt_q output;          /* q of strings to send       */
	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;
};


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

	struct affftp_game.org100644      0      0        2122  6377450051  11434 0ustar  rootroot =============================================================================
/   ______ _______ ____   _____   ___ __    _ ______    ____  ____   _____   /
\  |  ____|__   __|  _ \ / ____\ / _ \| \  / |  ____|  / __ \|  _ \ / ____\  \
/  | |__     | |  | |_| | |     | |_| | |\/| | |___   | |  | | |_| | |       /
/  | ___|    | |  | ___/| |   __|  _  | |  | | ____|  | |  | |  __/| |   ___ \
\  | |       | |  | |   | |___| | | | | |  | | |____  | |__| | |\ \| |___| | /
/  |_|       |_|  |_|  o \_____/|_| |_|_|  |_|______|o \____/|_| \_|\_____/  \
\                                                                            /
 ============================================================================

------------------------------------------------------------------------------
ftp://ftp.game.org/pub/mud      FTP.GAME.ORG      http://www.game.org/ftpsite/
------------------------------------------------------------------------------

 This archive came from FTP.GAME.ORG, the ultimate source for MUD resources.

------------------------------------------------------------------------------
ected_type *next;
};

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

/* ================== Structure for player/non-player ===================== */
struct char_data
{
	sh_int nr;                            /* monster nr (pos in file)     */
	sh_int in_room;                       /* Location                     */

	struct char_player_data player;       /* Normal data                  */
	struct char_ability_data abilities;   /* Abilities                    */
	struct char_ability_data tmpabilities;/* The abilities we will use    */
	struct char_point_data points;        /* Points                       */
	struct char_special_data specials;    /* Special plaing constants     */
	struct char_skill_data skills[MAX_SKILLS]; /* Skills                  */

	struct affected_type *affected;       /* affected by what spells      */
	struct affected_type *tmp_affected;   /* for arena usage              */
	struct obj_data *equipment[MAX_WEAR]; /* Equipment array              */

	struct obj_data *carrying;            /* Head of list                 */
	struct descriptor_data *desc;         /* NULL for mobiles             */

	struct char_data *next_in_room;     /* For room->people - list        */
	struct char_data *next;             /* For either monster or ppl-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?       */
};


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

/* How much light is in the l