empiremud/cnf/
empiremud/doc/
empiremud/lib/boards/
empiremud/lib/etc/
empiremud/lib/misc/
empiremud/lib/plralias/F-J/
empiremud/lib/plralias/K-O/
empiremud/lib/plralias/P-T/
empiremud/lib/plralias/U-Z/
empiremud/lib/plrobjs/
empiremud/lib/plrobjs/F-J/
empiremud/lib/plrobjs/K-O/
empiremud/lib/plrobjs/P-T/
empiremud/lib/plrobjs/U-Z/
empiremud/lib/world/
empiremud/lib/world/mob/
empiremud/lib/world/obj/
empiremud/log/
/* ************************************************************************
*   File: structs.h                                      EmpireMUD AD 1.0 *
*  Usage: header file for central structures and contstants               *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Code base by Paul Clarke.  EmpireMUD Project, a tbgMUD Production.     *
*  Based upon CircleMUD 3.0, beta patch level 17, by Jeremy Elson.        *
*                                                                         *
*  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
************************************************************************ */

/*
 * EmpireMUD now features an expandable world, though you WILL have to
 * delete and recreate your map and zone files to change the size.  A
 * standard 500 x 500 creates a map of 250000 rooms.  If you don't have
 * a lot of memory, you might consider less.  It need not be square, you
 * could use 200 x 400 or 300 x 350.  The world IS round, you know.
 *
 * SIZE_MAP_ZONES is the number of rooms to store in each .wld file
 * NUM_MAP_ZONES is the total number of map zones, and is equal to the
 *  building zone.
 */

#define MAP_HEIGHT			350
#define MAP_WIDTH			350
#define MAP_SIZE			(MAP_WIDTH * MAP_HEIGHT)
#define SIZE_MAP_ZONES		(MAP_WIDTH * 5)
#define NUM_MAP_ZONES		((MAP_WIDTH * MAP_HEIGHT) / SIZE_MAP_ZONES)

/* So years don't always start at 1: */
#define YEAR_ADD			1150

/* preamble *************************************************************/

#define SPECIAL(name)		void (name)(void *me)
#define LOOK_SPECIAL(name)	int (name)(Creature ch, void *me, int mode)


/*
 * Eventually we want to be able to redefine the below to any arbitrary
 * value.  This will allow us to use unsigned data types to get more
 * room and also remove the '< 0' checks all over that implicitly
 * assume these values. -gg 12/17/99
 */
#define NOWHERE		-1	/* nil reference for room-database	*/
#define NOTHING		-1	/* nil reference for objects		*/
#define NOBODY		-1	/* nil reference for mobiles		*/


/* room-related defines *************************************************/

/* The cardinal directions */
#define NORTH			0
#define EAST			1
#define SOUTH			2
#define WEST			3
#define NUM_SIMPLE_DIRS	4		/* number of dirs n,e,s,w			*/

#define NORTHWEST		4
#define NORTHEAST		5
#define SOUTHWEST		6
#define SOUTHEAST		7
#define NUM_2D_DIRS		8		/* number of dirs - up/down			*/

#define UP				8
#define DOWN			9
#define NUM_OF_DIRS		10		/* number of directions in a room	*/


/* Crops */
#define CROP_FRUIT			0
#define CROP_WHEAT			1
#define CROP_CORN			2
#define NUM_CROPS			3	/* Total number of crops */


/* Exit info */
#define EX_ISDOOR		(1 << 0)   /* Exit is a door		*/
#define EX_CLOSED		(1 << 1)   /* The door is closed	*/


/* Sector types */
#define SECT_FIELD			0		/*	....					*/
#define SECT_FOREST_1		1		/*	.^..					*/
#define SECT_FOREST_2		2		/*	^.^.					*/
#define SECT_FOREST_3		3		/*	^^.^					*/
#define SECT_FOREST_4		4		/*	^^^^					*/
#define SECT_RIVER			5		/*	~~~~					*/
#define SECT_OCEAN			6		/*	~~~~					*/
#define SECT_CROP			7		/*	:::: ;;;; ^^^^			*/
#define SECT_MOUNTAIN		8		/*	/\/\					*/
#define SECT_ROAD			9		/*	----					*/
#define SECT_BUILDING		10		/* For buildings			*/
#define SECT_INSIDE			11		/* Inside a building		*/
#define SECT_SHRINE			12		/*	.{}.					*/
#define SECT_SEEDED			13		/*	....					*/
#define SECT_WELL			14		/*	(~~)					*/
#define SECT_FOUNTAIN		15		/*	{~~}					*/
#define SECT_MULTI			16		/* For castles and forts	*/
#define SECT_TRENCH			17		/*	\__/					*/
#define SECT_TOWER_OF_SOULS	18		/*   /\ 					*/
#define SECT_WASTELAND		19		/*	....					*/
#define SECT_DESERT			20		/*	....					*/
#define SECT_OASIS			21		/*	.~~.					*/
#define SECT_BARRIER		22		/*	VVVV or vvvv			*/
#define SECT_MONUMENT_OPEN	23		/*	for monuments			*/
#define SECT_MONUMENT_CLOSED	24	/*	for monuments			*/
#define NUM_SECTS			25		/* Total number of room sectors	*/


/* Castle/fort parts */
#define MULTI_UL			0		/*	/===	*/
#define MULTI_UR			1		/*	===\	*/
#define MULTI_LL			2		/*	\===	*/
#define MULTI_LR			3		/*	===/	*/
#define MULTI_HORIZ			4		/*	====	*/
#define MULTI_VERT_L		5		/*	|   	*/
#define MULTI_VERT_R		6		/*	   |	*/
#define MULTI_VERT_DOOR_R	7		/*	   =	*/
#define MULTI_VERT_DOOR_L	8		/*	=   	*/
#define MULTI_HORIZ_DOOR	9		/*	=||=	*/
#define MULTI_UL_DOOR		10		/*	/=||	*/
#define MULTI_LR_DOOR		11		/*	||=/	*/
#define MULTI_CENTER		12		/*	    	*/


/* Building types */
#define BUILDING_HUT			0	/*	.().	*/
#define BUILDING_CABIN			1	/*	(--)	*/
#define BUILDING_HOUSE			2	/*	(==)	*/
#define BUILDING_STONE_HOUSE	3	/*	[--]	*/
#define BUILDING_LARGE_HOUSE	4	/*	[==]	*/
#define BUILDING_GUARD_TOWER	5	/*	./\.	*/
#define BUILDING_TUNNEL			6	/*	/OO\	*/
#define BUILDING_MINE			7	/*	/[]\	*/
#define BUILDING_MILL			8	/*	(MM)	*/
#define BUILDING_POTTER			9	/*	(PP)	*/
#define BUILDING_FORGE			10	/*	(FF)	*/
#define BUILDING_STABLE			11	/*	(SS)	*/
#define BUILDING_BAKER			12	/*	(BB)	*/
#define BUILDING_GLASS			13	/*	(GG)	*/
#define BUILDING_GUARD_TOWER2	14	/*	'/\'	*/
#define BUILDING_GUARD_TOWER3	15	/*	"/\"	*/
#define BUILDING_SHIPYARD		16	/*	????	*/
#define BUILDING_SHIPYARD2		17	/*	????	*/
#define BUILDING_DOCKS			18	/*	????	*/
#define BUILDING_CARPENTER		19	/*	(CC)	*/
#define BUILDING_GATEHOUSE		20	/*	????	*/
#define BUILDING_TREE_HOUSE		21	/*	^()^	*/
#define BUILDING_WATCH_TOWER	22	/*	^TT^	*/
#define BUILDING_TREE_COMPLEX	23	/*	^[]^	*/
#define BUILDING_MUD_HUT		24	/*	.().	*/
#define BUILDING_PUEBLO			25	/*	.[].	*/
#define BUILDING_UNDERGROUND_COMPLEX	26	/*	.().	*/
#define BUILDING_CLIFF_DWELLING	27			/*	[==]	*/
#define BUILDING_MOUNTAIN_OUTPOST	28		/*	./\.	*/
#define BUILDING_MINE_COMPLEX	29	/*	/[]\	*/
#define BUILDING_LUMBER_YARD	30	/*	{LL}	*/
#define BUILDING_GRAVEL_PIT		31	/*	{PP}	*/
#define BUILDING_GRANARY	    32	/*	{GG}	*/
#define BUILDING_CANNERY		33	/*	{CC}	*/
#define BUILDING_FOUNDRY		34	/*	{FF}	*/
#define BUILDING_HAVEN_HOUSE	35	/*	.[].	*/
#define BUILDING_HAVEN_BURROW	36	/*	^[]^	*/
#define BUILDING_HAVEN_PUEBLO	37	/*	.[].	*/
#define BUILDING_HAVEN_CAVE		38	/*	/()\	*/
#define BUILDING_ARSENAL		39	/*	{AA}	*/
#define BUILDING_TUNNEL2		40	/*	/OO\	*/
#define BUILDING_TANNERY		41	/*	{TT}	*/
#define BUILDING_APIARY			42	/*	{AA}	*/
#define BUILDING_BATHS			43	/*	[~~]	*/
#define BUILDING_TOOLS			44	/*	{UU}	*/

/* Room types */
#define RTYPE_NONE				0
#define RTYPE_ARMORY			1
#define RTYPE_BEDROOM			2
#define RTYPE_DINING			3
#define RTYPE_FORGE				4
#define RTYPE_GREATHALL			5
#define RTYPE_HALL				6
#define RTYPE_KITCHEN			7
#define RTYPE_SITTING			8
#define RTYPE_STUDY				9
#define RTYPE_THRONE			10
#define RTYPE_STORAGE			11
#define RTYPE_VAULT				12
#define RTYPE_B_HELM			13	/* boat */
#define RTYPE_B_ONDECK			14	/* boat */
#define RTYPE_B_STORAGE			15	/* boat */
#define RTYPE_B_BELOWDECK		16	/* boat */
#define RTYPE_TUNNEL			17	/* for mine complex */
#define RTYPE_SKY_BRIDGE		18	/* for sky places	*/
#define RTYPE_BATHS				19	/* for castles		*/
#define RTYPE_SHIELD_RACKS		20
#define RTYPE_ARMOR_STORAGE		21
#define RTYPE_CLOSET			22
#define NUM_RTYPES				23		/* Total number of room types	*/

/* Designate flags */
#define DES_NEVER			(1 << 0)
#define DES_VAULT			(1 << 1)
#define DES_FORGE			(1 << 2)
#define DES_TUNNEL			(1 << 3)
#define DES_NO_HALL			(1 << 4)
#define DES_SKYBRIDGE		(1 << 5)
#define DES_THRONE			(1 << 6)
#define DES_ARMORY			(1 << 7)
#define DES_GREATHALL		(1 << 8)
#define DES_BATHS			(1 << 9)

/* Open Monument types */
#define MONUMENT_O_STATUE		0
#define MONUMENT_O_HENGE_UL		1
#define MONUMENT_O_HENGE_UR		2
#define MONUMENT_O_HENGE_LL		3
#define MONUMENT_O_HENGE_LR		4
#define MONUMENT_O_MEGALITH		5
#define MONUMENT_O_CEMETARY		6
#define MONUMENT_O_PARK			7
#define NUM_OPEN_MONUMENTS		8		/* Total number of open monuments */

/* Closed Monument types */
#define MONUMENT_C_TOMB				0
#define MONUMENT_C_SHRINE			1
#define MONUMENT_C_TEMPLE_UL		2
#define MONUMENT_C_TEMPLE_UR		3
#define MONUMENT_C_TEMPLE_LL		4
#define MONUMENT_C_TEMPLE_LR		5
#define MONUMENT_C_HIGHTEMPLE_UL	6
#define MONUMENT_C_HIGHTEMPLE_UC	7
#define MONUMENT_C_HIGHTEMPLE_UR	8
#define MONUMENT_C_HIGHTEMPLE_CL	9
#define MONUMENT_C_HIGHTEMPLE_CC	10
#define MONUMENT_C_HIGHTEMPLE_CR	11
#define MONUMENT_C_HIGHTEMPLE_LL	12
#define MONUMENT_C_HIGHTEMPLE_LC	13
#define MONUMENT_C_HIGHTEMPLE_LR	14
#define MONUMENT_C_PYRAMID_CORNER_L		15
#define MONUMENT_C_PYRAMID_CORNER_R		16
#define MONUMENT_C_PYRAMID_HORIZ		17
#define MONUMENT_C_PYRAMID_VERT_L		18
#define MONUMENT_C_PYRAMID_VERT_R		19
#define MONUMENT_C_PYRAMID_HORIZ_DOOR	20
#define MONUMENT_C_PYRAMID_VERT_DOOR_L	21
#define MONUMENT_C_PYRAMID_VERT_DOOR_R	22
#define MONUMENT_C_PYRAMID_CENTER_UL	23
#define MONUMENT_C_PYRAMID_CENTER_UR	24
#define MONUMENT_C_PYRAMID_CENTER_LL	25
#define MONUMENT_C_PYRAMID_CENTER_LR	26
#define NUM_CLOSED_MONUMENTS		27		/* Total number of closed monuments */


/* Room affects */
#define ROOM_AFF_DARK				(1 << 0)	/* Torches don't work		*/
#define ROOM_AFF_SILENT				(1 << 1)	/* Can't speak/hear			*/
#define ROOM_AFF_CHAMELEON_FOREST	(1 << 2)	/* Appears to be forest		*/
#define ROOM_AFF_CHAMELEON_DESERT	(1 << 3)	/* Appears to be desert		*/
#define ROOM_AFF_CHAMELEON_MOUNTAIN	(1 << 4)	/* Appears to be mountain	*/
#define ROOM_AFF_NO_GROW			(1 << 5)	/* Trees won't grow here	*/
#define NUM_ROOM_AFFS			6

/* char and mob-related defines *****************************************/

/* Experience costs */
#define DISC_COST_NEW		10
#define DISC_COST_HAVE		5
#define ABILITY_COST		2
#define ABILITY_COST_NEW	3
#define ATTRIBUTE_COST		4
#define PATH_COST_SECONDARY	6
#define PATH_COST_NEW		7


/* Sex */
#define SEX_NEUTRAL		0
#define SEX_MALE		1
#define SEX_FEMALE		2
#define NUM_GENDERS		3	/* Total number of genders.  Redundant, I know	*/


/* Positions */
#define POS_DEAD		0	/* dead				*/
#define POS_MORTALLYW	1	/* mortally wounded	*/
#define POS_INCAP		2	/* incapacitated	*/
#define POS_STUNNED		3	/* stunned/bashed	*/
#define POS_SLEEPING	4	/* sleeping			*/
#define POS_RESTING		5	/* resting			*/
#define POS_SITTING		6	/* sitting			*/
#define POS_FIGHTING	7	/* fighting			*/
#define POS_STANDING	8	/* standing			*/


/* Player flags: used by char_data.char_specials.act */
#define PLR_FROZEN		(1 << 0)	/* Player is frozen						*/
#define PLR_WRITING		(1 << 1)	/* Player writing (board/mail)			*/
#define PLR_MAILING		(1 << 2)	/* Player is writing mail				*/
#define PLR_DONTSET		(1 << 3)	/* Don't EVER set (ISNPC bit)			*/
#define PLR_SITEOK		(1 << 4)	/* Player has been site-cleared			*/
#define PLR_MUTED		(1 << 5)	/* Player not allowed to use pub_comm	*/
#define PLR_NOTITLE		(1 << 6)	/* Player not allowed to set title		*/
#define PLR_DELETED		(1 << 7)	/* Player deleted - space reusable		*/
#define PLR_LOADROOM	(1 << 8)	/* Player uses nonstandard loadroom		*/
#define PLR_NOWIZLIST	(1 << 9)	/* Player shouldn't be on wizlist		*/
#define PLR_NODELETE	(1 << 10)	/* Player shouldn't be deleted			*/
#define PLR_INVSTART	(1 << 11)	/* Player should enter game wizinvis	*/
#define PLR_IPMASK		(1 << 12)	/* Player is IP-masked					*/
#define PLR_GHOUL		(1 << 13)	/* Player is a ghoul					*/
#define PLR_VAMPIRE		(1 << 14)	/* Player is a vampire					*/
#define PLR_MULTIOK		(1 << 15)	/* Player can multiplay					*/
#define PLR_SLAIN		(1 << 16)	/* HC player has been killed			*/
#define PLR_UNRESTRICT	(1 << 17)	/* !walls, !buildings					*/
#define PLR_NOSLEEP		(1 << 18)	/* Does not fall asleep in the sun		*/
#define PLR_WEREWOLF	(1 << 19)	/* Player is a werewolf					*/
#define PLR_HARDCORE	(1 << 20)	/* Is hardcore							*/
#define PLR_PIRATE	(1 << 21)	/* Player is a pirate */


/* Injury flags */
#define INJ_TIED		(1 << 0)	/* Bound and gagged						*/
#define INJ_STAKED		(1 << 1)	/* Stake thru heart						*/
#define INJ_TORPOR		(1 << 2)	/* In torpor							*/
#define NUM_INJURIES	3


/* Skin colors */
#define SKIN_FAIR			0
#define SKIN_REDDENED		1
#define SKIN_YELLOWISH		2
#define SKIN_TAN_LIGHT		3
#define SKIN_TAN_DARK		4
#define SKIN_LIGHT_BROWN	5
#define SKIN_DARK_BROWN		6
#define NUM_SKINS			7

/* Hair colors */
#define HAIR_BLACK		0
#define HAIR_BROWN		1
#define HAIR_BLONDE		2
#define HAIR_RED		3
#define HAIR_WHITE		4
#define HAIR_GREEN		5
#define HAIR_BLUE		6
#define NUM_HAIRS		7

/* Eye colors */
#define EYES_BLACK		0
#define EYES_BROWN		1
#define EYES_BLUE		2
#define EYES_GREEN		3
#define EYES_VIOLET		4
#define EYES_RED		5
#define NUM_EYES		6


/* Languages */
#define LANG_ENGLISH		0
#define LANG_SPANISH		1
#define LANG_FRENCH			2
#define LANG_ITALIAN		3
#define LANG_LATIN			4		/* unchoosable */
#define LANG_GERMAN			5
#define LANG_RUSSIAN		6
#define LANG_ARABIC			7
#define LANG_INDIAN			8
#define LANG_FERAL_SPEECH	9		/* unchoosable */
#define LANG_HIGH_TONGUE	10		/* unchoosable */
#define NUM_LANGS			11
/* technically a util, but.. this needs to be done somewhere! */
#define LANGUAGE_BIT(bit)	(1 << ((int) (bit)))


/* Mobile flags */
#define MOB_SPEC			(1 << 0)	/* a. Mob has a callable spec-proc		*/
#define MOB_SENTINEL		(1 << 1)	/* b. Mob should not move				*/
#define MOB_AGGRESSIVE		(1 << 2)	/* c. Mob hits players in the room		*/
#define MOB_ISNPC			(1 << 3)	/* d. (R) Auto-set on all mobs			*/
#define MOB_MOUNTABLE		(1 << 4)	/* e. Can be ridden						*/
#define MOB_MILKABLE		(1 << 5)	/* f. May be milked						*/
#define MOB_SCAVENGER		(1 << 6)	/* g. Eats corpses						*/
#define MOB_UNDEAD			(1 << 7)	/* h. Undead :)							*/
#define MOB_TIED			(1 << 8)	/* i. (R) Mob is tied up				*/
#define MOB_FLYING			(1 << 9)	/* j. Mob flies							*/
#define MOB_MOUNTAINWALK	(1 << 10)	/* k. Walks on mountains				*/
#define MOB_AQUATIC			(1 << 11)	/* l. Mob lives in the water only		*/
#define MOB_PLURAL			(1 << 12)	/* m. Mob represents 2+ creatures		*/
#define MOB_RANDOM_ENCOUNTER (1 << 13)	/* n. Mob which doesn't normally exist	*/
#define NUM_MOB_FLAGS		14			/* Total number of MOB_flags			*/


/* Mobile types */
#define MTYPE_ANIMAL		0		/* Mob is an animal			*/
#define MTYPE_HUMAN			1		/* Mob is human				*/


/* Preference flags */
#define PRF_HIDEEMAIL	(1 << 0)	/* Hides an e-mail address			 	*/
#define PRF_COMPACT		(1 << 1)	/* No extra CRLF pair before prompts	*/
#define PRF_DEAF		(1 << 2)	/* Can't hear shouts					*/
#define PRF_NOTELL		(1 << 3)	/* Can't receive tells					*/
#define PRF_POLITICAL	(1 << 4)	/* Changes map to political colors		*/
#define PRF_RP			(1 << 5)	/* RP-only								*/
#define PRF_MORTLOG		(1 << 6)	/* Views mortlogs, default: ON			*/
#define PRF_NOREPEAT	(1 << 7)	/* No repetition of comm commands		*/
#define PRF_HOLYLIGHT	(1 << 8)	/* Can see in dark						*/
#define PRF_COLOR		(1 << 9)	/* Color								*/
#define PRF_NOWIZ		(1 << 10)	/* Can't hear wizline					*/
#define PRF_NOMAPCOL	(1 << 11)	/* Map is not colored					*/
#define PRF_NOGOSS		(1 << 12)	/* Can't hear gossip channel			*/
#define PRF_NOOOC		(1 << 13)	/* Can't hear ooc channel				*/
#define PRF_MAPPC		(1 << 14)	/* Can see players on the map			*/
#define PRF_NOCLEAR		(1 << 15)	/* Map does not clear					*/
#define PRF_AUTOKILL	(1 << 16)	/* Stops from knocking players out		*/
#define PRF_SCROLLING	(1 << 17)	/* Turns off page_string				*/
#define PRF_BRIEF		(1 << 18)	/* Cuts map size, removes room descs	*/
#define PRF_BITEABLE	(1 << 19)	/* May be drunk from					*/
#define PRF_FEEDABLE	(1 << 20)	/* May be fed blood						*/
#define PRF_TEACHABLE	(1 << 21)	/* May be taught						*/
#define PRF_NOGODNET	(1 << 22)	/* Can't hear godnet					*/


/* Affect bits */
/* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */
#define AFF_BLIND			(1 << 0)	/* a. (R) Char is blind				*/
#define AFF_PARTY			(1 << 1)	/* b. (R) Char is in a party		*/
#define AFF_INFRAVISION		(1 << 2)	/* c. Char can see full in dark		*/
#define AFF_SNEAK			(1 << 3)	/* d. Char can move quietly			*/
#define AFF_HIDE			(1 << 4)	/* e. Char is hidden				*/
#define AFF_CHARM			(1 << 5)	/* f. Char is charmed				*/
#define AFF_INVISIBLE		(1 << 6)	/* g. Char is invisible				*/
#define AFF_IMMUNE_BASH		(1 << 7)	/* h. Immunity to bash				*/
#define AFF_SENSE_HIDE		(1 << 8)	/* i. See hidden people				*/
#define AFF_IMMUNE_PHYSICAL	(1 << 9)	/* j. Immune to physical damage		*/
#define AFF_NO_TARGET_IN_ROOM	(1 << 10)	/* k. no-target					*/
#define AFF_NO_SEE_IN_ROOM	(1 << 11)	/* l. don't see on look				*/
#define AFF_FLY				(1 << 12)	/* m. person can fly				*/
#define AFF_NO_ATTACK		(1 << 13)	/* n. can't be attacked				*/
#define NUM_AFF_FLAGS		14			/* Total number of AFF_flags		*/


/* Discipline bits, aff-type flags for vampire powers */
#define DSC_HEIGHTENED_SENSES		(1 << 0)	/* a. see in dark				*/
#define DSC_UNSEEN_PRESENCE			(1 << 1)	/* b. unseen presence			*/
#define DSC_CANT_SPEND_WILLPOWER	(1 << 2)	/* c. cowing beast, etc			*/
#define DSC_WITNESS_OF_DARKNESS		(1 << 3)	/* d. perfect nightvis			*/
#define DSC_TALONS_OF_THE_BEAST		(1 << 4)	/* e. claws						*/
#define DSC_EARTHMELD				(1 << 5)	/* f. interred in the earth		*/
#define DSC_AWE						(1 << 6)	/* g. awe						*/
#define DSC_ENTRANCEMENT			(1 << 7)	/* h. entranced					*/
#define DSC_MAJESTY					(1 << 8)	/* i. majesty					*/
#define DSC_ARMS_OF_AHRIMAN			(1 << 9)	/* j. arms counter				*/
#define DSC_TONGUE_OF_THE_ASP		(1 << 10)	/* k. snake tongue				*/
#define DSC_BITUMENOUS_FLESH		(1 << 11)	/* l. mummified					*/
#define DSC_MASQUE_OF_DEATH			(1 << 12)	/* m. masqued					*/
#define DSC_BLIGHT					(1 << 13)	/* n. blight					*/
#define DSC_DEATHS_WHISPER			(1 << 14)	/* o. death's whisper			*/
#define DSC_ARMOR_OF_VITALITY		(1 << 15)	/* p. armor of vitality			*/
#define DSC_MASK					(1 << 16)	/* q. mask of 1000 faces		*/
#define DSC_SOUL_MASK				(1 << 17)	/* r. soul mask					*/
#define DSC_CANT_SPEND_BLOOD		(1 << 18)	/* s. hinder vitae				*/


/* Vampire Clans */
#define CLAN_ASSAMITE			0	/* To add a clan						*/
#define CLAN_BRUJAH				1	/*  1. add a #define here				*/
#define CLAN_CAPPADOCIAN		2	/*  2. add a line in the clan struct	*/
#define CLAN_FOLLOWER_OF_SET	3	/*     in vampire.c						*/
#define CLAN_GANGEL				4	/*  3. add a discipline(s)				*/
#define CLAN_LASOMBRA			5
#define CLAN_MALKAVIAN			6
#define CLAN_NOSFERATU			7
#define CLAN_RAVNOS				8
#define CLAN_TOREADOR			9
#define CLAN_TREMERE			10
#define CLAN_TZIMISCE			11
#define CLAN_VENTRUE			12
#define CLAN_CAITIFF			13
#define NUM_CLANS				14	/* Total number of clans				*/


/* Vampire Disciplines */
#define DISC_ANIMALISM			0	/* To add a disc						*/
#define DISC_AUSPEX				1	/*  1. add a #define here				*/
#define DISC_CELERITY			2	/*  2. add a line in the disc struct	*/
#define DISC_CHIMERSTRY			3	/*     in vampire.c						*/
#define DISC_DEMENTATION		4	/*  3. code powers						*/
#define DISC_DOMINATE			5	/*	4. wipe/convert player file			*/
#define DISC_FORTITUDE			6
#define DISC_MORTIS				7
#define DISC_OBFUSCATE			8
#define DISC_OBTENEBRATION		9
#define DISC_POTENCE			10
#define DISC_PRESENCE			11
#define DISC_PROTEAN			12
#define DISC_QUIETUS			13
#define DISC_SERPENTIS			14
#define DISC_THAUMATURGY		15
#define DISC_VICISSITUDE		16
#define NUM_DISCS				17	/* Total number of disciplines			*/


/* Thaumaturgical Paths */
#define PATH_REGO_VITAE			0
#define PATH_CREO_IGNEM			1
#define PATH_REGO_MOTUS			2
#define PATH_REGO_TEMPESTAS		3
#define PATH_REGO_AQUAM			4
#define PATH_REGO_ELEMENTUM		5
#define PATH_WAY_OF_LEVINBOLT	6
#define PATH_PATH_OF_WARDING	7
#define NUM_PATHS				8	/* The total number of paths			*/


/* Werewolf tribes */
#define TRIBE_BLACK_FURIES			0
#define TRIBE_BONE_GNAWERS			1
#define TRIBE_CHILDREN_OF_GAIA		2
#define TRIBE_FENRIR				3
#define TRIBE_FIANNA				4
#define TRIBE_RED_TALONS			5
#define TRIBE_SHADOW_LORDS			6
#define TRIBE_SILENT_STRIDERS		7
#define TRIBE_SILVER_FANGS			8
#define TRIBE_WARDERS				9
#define NUM_TRIBES					10


/* Werewolf auspices */
#define AUSPICE_RAGABASH			0
#define AUSPICE_THEURGE				1
#define AUSPICE_PHILODOX			2
#define AUSPICE_GALLIARD			3
#define AUSPICE_AHROUN				4


/* Werewolf breed forms */
#define BREED_HOMID					0
#define BREED_METIS					1
#define BREED_LUPUS					2


/* Morph forms */
#define MORPH_NONE					0
#define MORPH_PROTEAN_BAT			1
#define MORPH_PROTEAN_WOLF			2
#define MORPH_ZULO_SHAPE			3
#define MORPH_CHIROPTERAN_MARAUDER	4
#define MORPH_PROTEAN_MIST			5
#define MORPH_PLASMA_FORM			6
#define MORPH_FORM_OF_THE_COBRA		7
#define MORPH_GLABRO				8
#define MORPH_CRINOS				9
#define MORPH_HISPO					10
#define MORPH_LUPUS					11
#define NUM_MORPHS					12

/* flags for morphs */
#define MORPH_FLAG_NO_TALONS		(1 << 0)	/* can't use talons			*/
#define MORPH_FLAG_NPC				(1 << 1)	/* treated like an npc		*/


#define MORPH_STRING_NAME		0
#define MORPH_STRING_DESC		1

/* Damage types */
#define DAM_BASHING				0		/* Blunt damage		*/
#define DAM_LETHAL				1		/* Sharp damage		*/
#define DAM_AGGRAVATED			2		/* Super damage		*/

/* Modes of connectedness */
#define CON_PLAYING				0		/* Playing - Nominal state	*/
#define CON_CLOSE				1		/* Disconnecting			*/
#define CON_GET_NAME			2		/* By what name ..?			*/
#define CON_NAME_CNFRM			3		/* Did I get that right, x?	*/
#define CON_PASSWORD			4		/* Password:				*/
#define CON_NEWPASSWD			5		/* Give me a password for x	*/
#define CON_CNFPASSWD			6		/* Please retype password:	*/
#define CON_QSEX				7		/* Sex?						*/
#define CON_QCOLOR				8		/* Color, anyone?			*/
#define CON_RMOTD				9		/* PRESS RETURN after MOTD	*/
#define CON_MENU				10		/* Your choice: (main menu)	*/
#define CON_EXDESC				11		/* Enter a new description:	*/
#define CON_CHPWD_GETOLD		12		/* Changing passwd: get old	*/
#define CON_CHPWD_GETNEW		13		/* Changing passwd: get new	*/
#define CON_CHPWD_VRFY			14		/* Verify new password		*/
#define CON_DELCNF1				15		/* Delete confirmation 1	*/
#define CON_DELCNF2				16		/* Delete confirmation 2	*/
#define CON_DISCONNECT			17		/* In-game disconnection	*/
#define CON_QHAIR				18		/* Hair color, please?		*/
#define CON_QEYES				19		/* My, what lovely eyes..	*/
#define CON_QWEIGHT				20		/* Never ask a woman..		*/
#define CON_QHEIGHT				21		/* How tall are you?		*/
#define CON_QLAST_NAME			22		/* Do you have a last..		*/
#define CON_SLAST_NAME			23		/* And what is it?			*/
#define CON_CLAST_NAME			24		/* Did I get that right?	*/
#define CON_CHOOSE_ATTRIBUTES	25		/* Assigning Attributes		*/
#define CON_TEDIT				26		/* Text editing				*/
#define CON_ADVANTAGES_V		27		/* Vampire Advantages		*/
#define CON_CHOOSE_ABILITIES	28		/* Assigning Abilities 		*/
#define CON_QHARDCORE			29		/* Hardcore player?			*/
#define CON_EDIT_DESCRIPTION	30		/* Edit a description with OLC	*/
#define CON_CHOOSE_VIRTUES		31		/* Choose Virtues			*/
#define CON_CHOOSE_STATUS		32		/* Pick a "race"			*/
#define CON_CHOOSE_DISCIPLINES	33		/* Choose Disciplines		*/
#define CON_QCLAN				34		/* Get Clan					*/
#define CON_AUTOAUTH			35		/* Autoauth?				*/
#define CON_QEMAIL				36		/* Email?					*/
#define CON_FINISH_CREATION		37		/* Done!					*/
#define CON_APPEARANCE			38		/* hair/eyes/etc?			*/
#define CON_QEQUIPMENT			39		/* Choose eq set			*/
#define CON_QPREV_HARDCORE		40		/* Have you ever...			*/
#define CON_LOAD_HARDCORE_NAME	41		/* Name of hc:				*/
#define CON_LOAD_HARDCORE_PWORD	42		/* Pword of hc:				*/
#define CON_PROMPT_STATUS		43		/* break from hc filter		*/
#define CON_LANGUAGE			44		/* Choose language(s)		*/
#define CON_GOODBYE				45		/* Close on <enter>			*/
#define CON_LANGUAGE_MENU		46		/* Buy discipline			*/
#define CON_CUSTOMIZE			47		/* Want to customize?		*/
#define CON_CHOOSE_AGE			48		/* What age (vampire)		*/
#define CON_BREED_FORM			49		/* Choose breed form		*/
#define CON_AUSPICE				50		/* Choose auspice			*/
#define CON_TRIBE				51		/* Choose tribe				*/
#define CON_ADVANTAGES_W		52		/* Choose advantages		*/
#define CON_QSKIN				53		/* Choose skin tone			*/
#define CON_EMPIRE_EDIT			54		/* Editing an empire		*/
#define CON_PATH				55		/* Choose path				*/

/* Corpse flags */
#define CORPSE_EATEN	(1 << 0)	/* The corpse is part-eaten			*/
#define CORPSE_SKINNED	(1 << 1)	/* The corpse has been skinned		*/
#define CORPSE_FLAGS	2			/* Total number of CORPSE_flags		*/


/* Automatic Actions */
#define ACT_NONE			0
#define ACT_DIGGING			1
#define ACT_GATHERING		2
#define ACT_CHOPPING		3
#define ACT_BUILDING		4
#define ACT_DISMANTLING		5
#define ACT_HARVESTING		6
#define ACT_PLANTING		7
#define ACT_MINING			8
#define ACT_MILLING			9
#define ACT_BAKING			10
#define ACT_FORGING			11
#define ACT_FISHING			12
#define ACT_MELTING			13
#define ACT_GLASS			14
#define ACT_CRAFTING		15
#define ACT_MANUFACTURING	16
#define ACT_CHIPPING		17
#define ACT_PANNING			18
#define ACT_MUSIC			19
#define ACT_EXCAVATING		20
#define ACT_EMBRACE			21
#define ACT_PICKING			22
#define ACT_MORPHING		23
#define ACT_SCRAPING		24
#define ACT_BATHING			25


/* Fight modes */
#define FMODE_MELEE			0		/* Hand-to-hand combat					*/
#define FMODE_MISSILE		1		/* Ranged combat						*/
#define FMODE_WAITING		2		/* Fighting someone in ranged combat	*/


/* Lore types */
#define LORE_JOIN_EMPIRE		0
#define LORE_DEFECT_EMPIRE		1
#define LORE_KICKED_EMPIRE		2
#define LORE_PLAYER_KILL		3
#define LORE_PLAYER_DEATH		4
#define LORE_TOWER_DEATH		5
#define LORE_FOUND_EMPIRE		6
#define LORE_START_VAMPIRE		7
#define LORE_EMBRACE_VAMPIRE	8
#define LORE_MAKE_GHOUL			9
#define LORE_DEATH				10
#define LORE_MAKE_VAMPIRE		11
#define LORE_TORPOR				12


/* object-related defines ********************************************/

/* Item types */
#define ITEM_UNDEFINED	0
#define ITEM_WEAPON		1		/* item is a weapon				*/
#define ITEM_WORN		2		/* wearable equipment			*/
#define ITEM_OTHER		3		/* misc object					*/
#define ITEM_CONTAINER	4		/* item is a container			*/
#define ITEM_DRINKCON	5		/* item is a drink container	*/
#define ITEM_FOOD		6		/* item is food					*/
#define ITEM_BOAT		7		/* a boat						*/
	#define ITEM_TREE		8		/* a tree						*/
#define ITEM_BOARD		9		/* message board				*/
#define ITEM_CORPSE		10		/* a corpse, pc or npc			*/
#define ITEM_ORE		11		/* ore: iron, gold, silver		*/
#define ITEM_CLAY		12		/* clay, for molding			*/
#define ITEM_SKIN		13		/* animal skin, for sewing		*/
#define ITEM_MAIL		14		/* mail							*/
#define ITEM_MONEY		15		/* item counts as money			*/
#define ITEM_CART		16		/* item is a cart/wagon			*/
#define ITEM_SHIP		17		/* large ship					*/
#define ITEM_HELM		18		/* helm of a ship				*/
#define ITEM_WINDOW		19		/* window of a ship				*/
#define ITEM_MISSILE_WEAPON	20	/* bow/crossbow/etc				*/
#define ITEM_ARROW		21		/* for missile weapons			*/
#define ITEM_INSTRUMENT	22		/* item is a musical instrument	*/
#define NUM_ITEM_TYPES	23		/* total number of ITEM_types	*/


/* Item materials: Changing the number of these will corrupt your pfile */
#define ITEM_MAT_WOOD		0	/* Made from wood				*/
#define ITEM_MAT_ROCK		1	/* ...rock						*/
#define ITEM_MAT_IRON		2	/* ...iron						*/
#define ITEM_MAT_SILVER		3	/* ...sparkly stuff				*/
#define ITEM_MAT_GOLD		4	/* ...gold						*/
#define ITEM_MAT_FLINT		5	/* ...flint						*/
#define ITEM_MAT_CLAY		6	/* ...clay						*/
#define ITEM_MAT_FLESH		7	/* ...skin, corpse, etc			*/
#define ITEM_MAT_GLASS		8	/* ...glass						*/
#define ITEM_MAT_WAX		9	/* ...wax						*/
#define NUM_ITEM_MATS		10	/* Total number of matierals	*/


/* Character equipment positions */
/* NOTE: Don't confuse these constants with the ITEM_ bitvectors
   which control the valid places you can wear a piece of equipment */
#define WEAR_HEAD			0
#define WEAR_EARS			1
#define WEAR_NECK			2
#define WEAR_BODY			3
#define WEAR_ARMOR			4
#define WEAR_ABOUT			5
#define WEAR_QUIVER			6
#define WEAR_ARMS			7
#define WEAR_HANDS			8
#define WEAR_FINGER_R		9
#define WEAR_FINGER_L		10
#define WEAR_WAIST			11
#define WEAR_SHEATH_1		12
#define WEAR_IN_SHEATH_1	13
#define WEAR_SHEATH_2		14
#define WEAR_IN_SHEATH_2	15
#define WEAR_SHEATH_3		16
#define WEAR_IN_SHEATH_3	17
#define WEAR_LEGS			18
#define WEAR_FEET			19
#define WEAR_WIELD			20
#define WEAR_HOLD			21
#define NUM_WEARS			22	/* This must be the # of eq positions!! */


/* Take/Wear flags */
#define ITEM_WEAR_TAKE		(1 << 0)	/* a. Item can be taken				*/
#define ITEM_WEAR_FINGER	(1 << 1)	/* b. Can be worn on finger			*/
#define ITEM_WEAR_NECK		(1 << 2)	/* c. Can be worn around neck		*/
#define ITEM_WEAR_BODY		(1 << 3)	/* d. Can be worn on body			*/
#define ITEM_WEAR_HEAD		(1 << 4)	/* e. Can be worn on head			*/
#define ITEM_WEAR_LEGS		(1 << 5)	/* f. Can be worn on legs			*/
#define ITEM_WEAR_FEET		(1 << 6) 	/* g. Can be worn on feet			*/
#define ITEM_WEAR_HANDS		(1 << 7)	/* h. Can be worn on hands			*/
#define ITEM_WEAR_ARMS		(1 << 8)	/* i. Can be worn on arms			*/
#define ITEM_WEAR_QUIVER	(1 << 9)	/* j. Can be used as a quiver		*/
#define ITEM_WEAR_ABOUT		(1 << 10)	/* k. Can be worn about body		*/
#define ITEM_WEAR_WAIST 	(1 << 11)	/* l. Can be worn around waist		*/
#define ITEM_WEAR_EARS		(1 << 12)	/* m. Worn on ears					*/
#define ITEM_WEAR_WIELD		(1 << 13)	/* n. Can be wielded				*/
#define ITEM_WEAR_HOLD		(1 << 14)	/* o. Can be held					*/
#define ITEM_WEAR_SHEATH	(1 << 15)	/* p. Can be worn as a sheath		*/
#define ITEM_WEAR_ARMOR		(1 << 16)	/* q. Can be worn as armor			*/
#define NUM_ITEM_WEARS		17			/* Total number of ITEM_WEAR_flags	*/


/* Extra object flags */
#define ITEM_CHAIR			(1 << 0)	/* a. Item can be sat upon			*/
#define ITEM_PLANTABLE		(1 << 1)	/* b. Uses val 3 to set a crop type	*/
#define ITEM_LIGHT			(1 << 2)	/* c. Lights until timer pops		*/
#define ITEM_SUPERIOR		(1 << 3)	/* d. Item is of superior quality	*/
#define ITEM_LARGE			(1 << 4)	/* e. Item can't be put in bags		*/
#define ITEM_CREATED		(1 << 5)	/* f. Was created by a god			*/
#define NUM_ITEM_FLAGS		6			/* Total number of ITEM_flags		*/


/* Instrument types */
#define INSTR_LYRE			0
#define INSTR_FLUTE			1


/* Modifier constants used with obj affects ('A' fields) */
#define APPLY_NONE				0	/* No effect					*/
#define APPLY_STRENGTH			1	/* Apply to strength			*/
#define APPLY_DEXTERITY			2	/* Apply to dexterity			*/
#define APPLY_STAMINA			3	/* Apply to stamina				*/
#define APPLY_CHARISMA			4	/* Apply to charisma			*/
#define APPLY_MANIPULATION		5	/* Apply to manipulation		*/
#define APPLY_APPEARANCE		6	/* Apply to appearance			*/
#define APPLY_PERCEPTION		7	/* Apply to perception			*/
#define APPLY_INTELLIGENCE		8	/* Apply to intelligence		*/
#define APPLY_WITS				9	/* Apply to wits				*/
#define APPLY_AGE				10	/* Apply to age					*/
#define APPLY_MOVE				11	/* Apply to max move points		*/
#define APPLY_SOAK				12	/* Apply to soak pool			*/
#define APPLY_BLOCK				13	/* Apply to chance to block		*/
#define APPLY_ATTACKS			14	/* Apply to attacks				*/
#define APPLY_FORTITUDE			15	/* Apply to Fortitude			*/
#define NUM_APPLIES				16	/* Total number of applies		*/


/* Container flags - value[1] */
#define CONT_CLOSEABLE		(1 << 0)	/* Container can be closed	*/
#define CONT_CLOSED			(1 << 1)	/* Container is closed		*/
#define NUM_CONT_FLAGS		(1 << 2)	/* Total number of container flags	*/


/* Some different kind of liquids for use in values of drink containers */
#define LIQ_WATER		0
#define LIQ_BEER		1
#define LIQ_WINE		2
#define LIQ_ALE			3
#define LIQ_WHISKY		4
#define LIQ_MILK		5
#define LIQ_BLOOD		6
#define LIQ_HONEY		7
#define NUM_LIQUIDS		8		/* Total number of liquids		*/


/* other miscellaneous defines *******************************************/

/* Player conditions */
#define DRUNK		0
#define FULL		1
#define THIRST		2
#define TIRED		3
#define NUM_CONDS	4


/* Sun state for weather_data */
#define SUN_DARK	0
#define SUN_RISE	1
#define SUN_LIGHT	2
#define SUN_SET		3

/* Sky conditions for weather_data */
#define SKY_CLOUDLESS	0
#define SKY_CLOUDY		1
#define SKY_RAINING		2
#define SKY_LIGHTNING	3

/* Seasons */
#define SEASON_WINTER	0
#define SEASON_SPRING	1
#define SEASON_SUMMER	2
#define SEASON_AUTUMN	3


/* Rent codes */
#define RENT_UNDEF      0
#define RENT_CRASH      1
#define RENT_RENTED     2

/* Player killing */
#define PK_NONE		0
#define PK_WAR		(1 << 0)
#define PK_FULL		(1 << 1)
#define PK_REVENGE	(1 << 2)

/* Level constants *******************************************************
 *
 * How to add immortal levels to your mud:
 *  - Change the level defines here, adding more levels between GOD and IMPL
 *  - Make sure that the levels for commands in interpreter.c are okay
 *  - Unless you have more than three immortal levels, the mud will auto-
 *    magically set the command levels for you.
 *  - Make sure LVL_TOP is no less than 3!
 *  - If LVL_TOP is 3, LVL_APPROVED *MUST* be 1
 *  - If you want more levels than those listed in the chart, you'll have to
 *    make necessary adjustments yourself:
 *    = Add a clause in utils/autowiz.c: level_params[]
 *    = Add a clause in constants.c: level_names[][2]
 *    = Change interpreter.c command levels
 *
 *  = Future plans: An option to turn on mortal levels
 *
 * Quick Reference:
 *  Levels    You'll Have
 *  ------    -----------
 *    4           Unapproved, Approved, God, Implementor
 *    5           Unapproved, Approved, God, Immortal, Implementor
 *    6           Unapproved, Approved, God, Immortal, Assistant, Implementor
 *    7           Unapproved, Approved, God, Immortal, Assistant, Co-Implementor, Implementor
 *       If LVL_APPROVED is 1, ignore "Unapproved" and all the level numbers
 *                                   are 1 less
 */


#define LVL_TOP				7				/* Highest possible level					*/
#define LVL_APPROVED		2				/* Level when players can use commands		*/

#define LVL_IMPL			LVL_TOP
#define LVL_CIMPL			(LVL_ASST < LVL_TOP ? LVL_ASST + 1 : LVL_ASST)
#define LVL_ASST			(LVL_START_IMM < LVL_TOP ? LVL_START_IMM + 1 : LVL_START_IMM)
#define LVL_START_IMM		(LVL_GOD+1)
#define LVL_GOD				(LVL_APPROVED+1)


#define LVL_FREEZE			LVL_CIMPL		/* Level which can freeze					*/
#define LVL_MUTE			LVL_ASST		/* Level which can mute						*/


/* other #defined constants **********************************************/
#define MAGIC_NUMBER	(0x06)	/* Arbitrary number that won't be in a string */

#define OPT_USEC	100000	/* 10 passes per second */
#define PASSES_PER_SEC	(1000000 / OPT_USEC)
#define RL_SEC		* PASSES_PER_SEC

#define PULSE_ZONE			(30 RL_SEC)
#define PULSE_MOBILE		(10 RL_SEC)
#define PULSE_OBJ_SPECIALS	(SECS_PER_MUD_HOUR)
#define PULSE_VIOLENCE		(2 RL_SEC)

/* Variables for the output buffering system */
#define MAX_SOCK_BUF            (12 * 1024)	/* Size of kernel's sock buf   */
#define MAX_PROMPT_LENGTH       128			/* Max length of prompt        */
#define MAX_POOF_LENGTH			80
#define GARBAGE_SPACE			32			/* Space for **OVERFLOW** etc  */
#define SMALL_BUFSIZE			4096		/* Static output buffer size   */
/* Max amount of output that can be buffered */
#define LARGE_BUFSIZE	   (MAX_SOCK_BUF - GARBAGE_SPACE - MAX_PROMPT_LENGTH)

#define HISTORY_SIZE			5		/* Keep last 5 commands. */
#define MAX_STRING_LENGTH		8192
#define MAX_INPUT_LENGTH		256		/* Max length per *line* of input */
#define MAX_RAW_INPUT_LENGTH	512		/* Max size of *raw* input */
#define MAX_MESSAGES			60
#define MAX_ROOM_DESCRIPTION	4000
#define MAX_NAME_LENGTH			20		/* Used in char_file_u DO-NOT-CHANGE */
#define MAX_PWD_LENGTH			10		/* Used in char_file_u DO-NOT-CHANGE */
#define MAX_TITLE_LENGTH		80		/* Used in char_file_u DO-NOT-CHANGE */
#define HOST_LENGTH				30		/* Used in char_file_u DO-NOT-CHANGE */
#define EXDSCR_LENGTH			240		/* Used in char_file_u DO-NOT-CHANGE */
#define MAX_AFFECT				32		/* Used in char_file_u DO-NOT-CHANGE */
#define MAX_OBJ_AFFECT			6		/* Used in obj_file_elem DO-NOT-CHANGE */
#define NUM_ABILITIES			11		/* Used in char_file_u DO-NOT-CHANGE */
#define EXP_CAP					250		/* because of ubyte */
#define MAX_RANKS				20		/* Max levels in an empire			*/
#define NUM_PRIVILEGES			9		/* Total number of all privileges	*/

/*
 * A MAX_PWD_LENGTH of 10 will cause BSD-derived systems with MD5 passwords
 * and GNU libc 2 passwords to be truncated.  On BSD this will enable anyone
 * with a name longer than 5 character to log in with any password.  If you
 * have such a system, it is suggested you change the limit to 20.
 *
 * Please note that this will erase your player files.  If you are not
 * prepared to do so, simply erase these lines but heed the above warning.
 */
#if defined(HAVE_UNSAFE_CRYPT) && MAX_PWD_LENGTH == 10
#error You need to increase MAX_PWD_LENGTH to at least 20.
#error See the comment near these errors for more explanation.
#endif

/**********************************************************************
* Structures                                                          *
**********************************************************************/

typedef char				byte;
typedef signed char			sbyte;
typedef unsigned char		ubyte;
typedef signed short int	sh_int;
typedef unsigned short int	ush_int;
#if !defined(__cplusplus)	/* Anyone know a portable method? */
typedef char			bool;
#endif

typedef int		room_vnum;	/* A room's vnum type */
typedef int		obj_vnum;	/* An object's vnum type */
typedef int		mob_vnum;	/* A mob's vnum type */
typedef int		zone_vnum;	/* A virtual zone number.	*/

typedef int		room_rnum;	/* A room's real (internal) number type */
typedef int		obj_rnum;	/* An object's real (internal) num type */
typedef int		mob_rnum;	/* A mobile's real (internal) num type */
typedef int		zone_rnum;	/* A zone's real (array index) number.	*/

/* For standardization and simplicity.. */
typedef struct char_data *Creature;
typedef struct obj_data *Object;
typedef struct room_data *Room;
typedef struct descriptor_data *Descr;

/*
 * Bitvector type for 32 bit unsigned long bitvectors.
 * 'unsigned long long' will give you at least 64 bits if you have GCC.
 *
 * Since we don't want to break the pfiles, you'll have to search throughout
 * the code for "bitvector_t" and change them yourself if you'd like this
 * extra flexibility.
 */
typedef unsigned long long	bitvector_t;

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


/* object-related structures ******************************************/

/* object flags */
struct obj_flag_data {
	int value[3];		/* 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						*/
	int material;		/* Material this is made out of				*/
	};


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


/* ================== Memory Structure for Objects ================== */
struct obj_data {
	obj_vnum item_number;				/* Where in data-base				*/
	room_rnum 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];	/* affects			*/

	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		*/
	Creature carried_by;				/* Carried by NULL in room/conta	*/
	Creature worn_by;					/* Worn by?							*/
	sh_int worn_on;						/* Worn where?						*/

	Creature sitting;					/* Person in the chair				*/
	Creature pulled_by1;				/* Animal pulling this obj			*/
	Creature pulled_by2;				/* Up to two animals may be needed	*/

	Object in_obj;						/* In what object NULL when none	*/
	Object contains;					/* Contains objects					*/

	Object next_content;				/* For 'contains' lists				*/
	Object next;						/* For the object list				*/
	};
/* ======================================================================= */


/* ====================== File Element for Objects ======================= */
/*                 BEWARE: Changing it will ruin rent files		   */
struct obj_file_elem {
	obj_vnum item_number;

	sh_int location;
	int value[3];
	int extra_flags;
	int weight;
	int timer;
	long bitvector;
	struct obj_affected_type affected[MAX_OBJ_AFFECT];
	};


/* header block for rent files.  BEWARE: Changing it will ruin rent files  */
struct rent_info {
	int time;
	int rentcode;
	int nitems;
	};
/* ======================================================================= */


/* room-related structures ************************************************/

struct room_direction_data {
	char *keyword;				/* for open/close					*/

	sh_int exit_info;			/* Exit info						*/
	room_rnum to_room;			/* Where direction leads (NOWHERE)	*/
	};


struct resource_data {
	ubyte logs;
	ubyte sticks;
	ubyte rocks;
	ubyte iron;
	};


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

	struct affected_type *next;
	};


/* ================== Memory Structure for room ======================= */
struct room_data {
	room_vnum number;			/* Rooms number	(vnum)					*/
	zone_rnum zone;				/* Room zone (for resetting)			*/
	int sector_type;			/* sector type (move/hide)				*/
	struct room_direction_data *dir_option[NUM_OF_DIRS]; /* Directions	*/

	char *name;					/* Room name may be set					*/
	char *description;			/* So may a description					*/
	char *icon;					/* Same with map icon					*/

	byte type;					/* For growing and building				*/
	byte type2;					/* Additional type flag, for mines		*/
	sh_int build_value;			/* For actions							*/
	byte building_entrance;		/* Dir from which a building is be entered */
	int spare;					/* Shrine id/mine content				*/
	long owner;					/* Whose empire owns me?				*/
	int home_room;				/* For multiroom buildings				*/
	byte inside_rooms;			/* Total rooms inside					*/

	bool dismantling;			/* A small flag, to prevent problems	*/
	byte burning;				/* It's on FIRE! (remapped to home_room)*/
	byte damage;				/* Damage to the building				*/

	sh_int weight;				/* Current weight						*/

	struct resource_data res;	/* Resources for building				*/

	byte light;					/* Number of lightsources in room		*/
	Object boat;				/* A pointer to this room's boat		*/

	struct affected_type *af;	/* Room's affects						*/
	sh_int affects;				/* The room's effect vector				*/
	sh_int base_affects;		/* Standard effects						*/

	Object contents;			/* List of items in room				*/
	Creature people;			/* List of NPC / PC in room				*/
	};
/* ====================================================================== */


/* char-related structures ************************************************/

/* memory structure for characters */
struct memory_rec_struct {
	long id;
	struct memory_rec_struct *next;
	};

typedef struct memory_rec_struct memory_rec;


/* This structure is purely intended to be an easy way to transfer */
/* and return information about time (real or mudwise).            */
struct time_info_data {
	int 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	*/
	};


/* For a person's lore */
struct lore_data {
	int type;
	long value;
	long date;

	struct lore_data *next;
	};


/* general player-related info, usually PC's and NPC's */
struct char_player_data {
	char passwd[MAX_PWD_LENGTH+1];	/* character's password			*/
	char *name;					/* PC / NPC s name (kill ...  )		*/
	char *lastname;				/* Last name						*/
	char *short_descr;			/* for NPC 'actions'				*/
	char *long_descr;			/* for 'look'						*/
	char *title;				/* PC / NPC's title					*/
	char *prompt;				/* Prompt							*/
	char *poofin;				/* Description on arrival of a god	*/
	char *poofout;				/* Description upon a god's exit	*/
	char *email;				/* Character's e-mail address		*/
	byte sex;					/* PC / NPC's sex					*/
	byte level;					/* PC / NPC's level					*/
	struct time_data time;		/* PC's age in days					*/
	ubyte weight;				/* PC / NPC's weight				*/
	ubyte height;				/* PC / NPC's height				*/

	struct lore_data *lore;		/* Fame								*/
	};


/* Char's abilities.  Used in char_file_u *DO*NOT*CHANGE* */
struct char_ability_data {
	/* Physical */
	sbyte strength;
	sbyte dexterity;
	sbyte stamina;

	/* Social */
	sbyte charisma;
	sbyte manipulation;
	sbyte appearance;

	/* Mental */
	sbyte perception;
	sbyte intelligence;
	sbyte wits;
	};


/* Char's points.  Used in char_file_u *DO*NOT*CHANGE* */
struct char_point_data {
	sbyte damage;
	sbyte agg_damage;		/* Aggravated damage		*/

	sh_int move;
	sh_int max_move;		/* Max move for PC/NPC		*/

	ubyte experience;		/* Character's experience	*/

	/* Virtues */
	sbyte conscience;
	sbyte self_control;
	sbyte courage;

	/* Advantages */
	sbyte humanity;
	sbyte willpower;
	sbyte max_willpower;

	/* Werewolf stuff */
	sbyte rage;
	sbyte max_rage;
	sbyte gnosis;
	sbyte max_gnosis;

	byte blood;				/* Blood pool				*/
	byte vamp_blood;		/* For ghouls				*/
	byte soak;				/* Bonus to soak			*/
	byte block;				/* Bonus to block			*/
	};


/* 
 * char_special_data_saved: specials which both a PC and an NPC have in
 * common, but which must be saved to the playerfile for PC's.
 *
 * WARNING:  Do not change this structure.  Doing so will ruin the
 * playerfile.  If you want to add to the playerfile, use the spares
 * in player_special_data.
 */
struct char_special_data_saved {
	long idnum;					/* player's idnum; -1 for mobiles			*/
	long act;					/* act flag for NPC's; player flag for PC's	*/

	bitvector_t injuries;		/* Bitvectors including damage to the player*/

	long affected_by;			/* Bitvector for spells/skills affected by	*/
	bitvector_t dsc_flags;		/* Bitvector for discipline affects			*/
	};


struct fight_data {
	Creature victim;				/* Actual victim						*/
	byte mode;						/* Fight mode, FMODE_x					*/
	byte wait;						/* Time to intercept					*/
	byte attack_bonus;				/* Number of attacks to add				*/
	};


/* Special playing constants shared by PCs and NPCs which aren't in pfile */
struct char_special_data {
	Object chair;					/* Object that this char's sitting in	*/

	struct fight_data fighting;		/* Opponent								*/
	Creature hunting;				/* Char hunted by this char				*/

	Creature feeding_from;			/* Who person is biting					*/
	Creature fed_on_by;				/* Who is biting person					*/

	Creature riding;				/* Person upon whom char is mounted		*/
	Creature ridden_by;				/* Person riding this char				*/

	Creature led_by;				/* A person may lead a mob				*/
	Creature leading;				/* A mob may lead a person				*/

	Object pulling;					/* The mob may be pulling something		*/

	byte position;					/* Standing, fighting, sleeping, etc.	*/

	int	carry_weight;				/* Carried weight						*/
	byte carry_items;				/* Number of items carried				*/
	int	timer;						/* Timer for update						*/

	struct char_special_data_saved saved;	/* constants saved in plrfile	*/
	};


/*
 *  If you want to add new values to the playerfile, do it here.  DO NOT
 * ADD, DELETE OR MOVE ANY OF THE VARIABLES - doing so will change the
 * size of the structure and ruin the playerfile.  However, you can change
 * the names of the spares to something more meaningful, and then use them
 * in your new code.  They will automatically be transferred from the
 * playerfile into memory when players log in.
 */
struct player_special_data_saved {
	sh_int invis_level;			/* level of invisibility				*/
	room_vnum load_room;		/* Which room to place char in			*/
	room_vnum spare_room;		/* Used for systems which store rooms	*/
	long pref;					/* preference flags for PC's.			*/
	ubyte bad_pws;				/* number of bad password attemps		*/
	sh_int conditions[4];		/* Drunk, full, thirsty					*/
	sh_int languages;			/* Languages spoken						*/
	byte speaking;				/* Language currently speaking			*/
	int res[NUM_ITEM_MATS];		/* God resources						*/

	long loyalty;				/* The empire this player follows		*/
	byte rank;					/* Rank in the empire					*/
	long pledge;				/* Empire he's applying to				*/
	int defect_timer;			/* To prevent quick re-entry			*/

	byte hair;
	byte eyes;
	byte skin;
	byte exp_today;
	byte days_since_bathing;
	ubyte apparent_age;

	byte talents[NUM_ABILITIES];			/* Talent Abilities				*/
	byte skills[NUM_ABILITIES];			/* Skill Abilities				*/	
	byte knowledges[NUM_ABILITIES];	/* Knowledge Abilities			*/

	byte mort_skills[25];		/* holder space							*/

	byte imm_lev;

	ubyte morph;
	int last_direction;

	int exp_cycle;				/* Last update cycle registered			*/

	int action;
	int action_timer;
	int action_room;
	int action_vnum[2];
	int action_rotation;

	/* Vampires */
	byte clan;					/* Vampire's clan						*/
	byte generation;			/* Vampire's Generation					*/
	byte discs[NUM_DISCS];		/* Discipline ratings					*/
	byte paths[NUM_PATHS];		/* Thaumaturgy ratings					*/
	byte primary_path;			/* Which path is primary				*/

	/* Werewolves */
	byte tribe;					/* Werewolf's tribe						*/
	byte auspice;				/* Werewolf's auspice					*/
	byte breed;					/* Werewolf's breed form				*/
	byte deformity;				/* Werewolf's deformity					*/

	/* spares below for future expansion.  You can change the names from
	   'sparen' to something meaningful, but don't change the order.  */

	byte spare0;
	ubyte spare1;
	int spare2;
	int spare3;
	long spare4;
	long spare5;
	};


/*
 * Specials needed only by PCs, not NPCs.  Space for this structure is
 * not allocated in memory for NPCs, but it is for PCs and the portion
 * of it labelled 'saved' is saved in the playerfile.  This structure can
 * be changed freely; beware, though, that changing the contents of
 * player_special_data_saved will corrupt the playerfile.
 */
struct player_special_data {
	struct player_special_data_saved saved;

	struct alias_data *aliases;		/* Character's aliases				*/
	long last_tell;					/* idnum of last tell from			*/

	bool isafk;						/* A character is AFK				*/
	char *afk_msg;					/* Message to send					*/
	char *afk_msgs;					/* Messages received				*/

	byte reboot_conf;				/* Reboot confirmation				*/

	byte hit_regen;					/* Hit regeneration add				*/
	byte move_regen;				/* Move regeneration add			*/

	byte quit_timer;				/* Stops players from quitting		*/

	bool slit_wrist;				/* Vampire has slit wrist			*/

	byte create_points;				/* Used in character creation		*/
	byte eq_set;					/* Used for starter eq				*/

	long vc;						/* The VC this user belongs to		*/
	char *vc_name;					/* The name of the VC				*/
	};


/* Specials used by NPCs, not PCs */
struct mob_special_data {
	byte last_direction;	/* The last direction the monster went		*/

	byte to_hit;			/* Mob's attack dice						*/
	byte to_dodge;			/* Mob's dodge dice							*/
	byte damage;			/* The number of damage dice's				*/
	int	attack_type;		/* The Attack Type Bitvector for NPC's		*/

	byte type;				/* Mob's type								*/
	int sects;				/* Sects that this mob will move through	*/
	byte milk_timer;		/* Ticks since last milking					*/
	ubyte skin;				/* Skin size								*/
	};


/* Structure used for chars following other chars */
struct follow_type {
	Creature follower;
	struct follow_type *next;
	};


/* ===================== Structure for a character ======================= */
struct char_data {
	int pfilepos;						/* playerfile pos					*/
	mob_rnum nr;						/* mob's rnum						*/
	room_rnum in_room;					/* location (real room number)		*/
	room_rnum was_in_room;				/* location for linkdead people		*/
	int wait;							/* wait for how many loops			*/

	struct char_player_data player;		/* normal data						*/
	struct char_ability_data real_abils;/* abilities without modifiers		*/
	struct char_ability_data aff_abils;	/* abils with spells/stones/etc		*/
	struct char_point_data points;		/* points							*/
	struct char_special_data char_specials;	/* PC/NPC specials				*/
	struct player_special_data *player_specials;	/* PC specials			*/
	struct mob_special_data mob_specials;	/* NPC specials					*/

	struct affected_type *affected;		/* affected by what spells			*/
	Object equipment[NUM_WEARS];		/* Equipment array					*/

	Object carrying;					/* head of list						*/
	Descr desc;							/* NULL for mobiles					*/

	Creature next_in_room;				/* For room->people - list			*/
	Creature next;						/* For either monster or ppl-list	*/
	Creature next_fighting;				/* For fighting list				*/

	struct follow_type *followers;		/* List of chars followers			*/
	Creature master;					/* Who is char following?			*/

	char prev_host[HOST_LENGTH+1];		/* Previous host (they're Trills)	*/
	time_t prev_logon;					/* Time (in secs) of prev logon		*/
	};
/* ====================================================================== */


/* ==================== File Structure for Player ======================= */
/*             BEWARE: Changing it will ruin the playerfile		  */
struct char_file_u {
	char name[MAX_NAME_LENGTH+1];		/* first name						*/
	char lastname[MAX_NAME_LENGTH+1];	/* last name						*/
	char title[MAX_TITLE_LENGTH+1];		/* character's title				*/
	char prompt[121];					/* character's prompt				*/
	char poofin[81];					/* message when appearing			*/
	char poofout[81];					/* message when disappearing		*/
	char email[81];						/* e-mail for a character			*/
	byte sex;							/* sex (yes, please)				*/
	byte level;							/* character's level				*/
	time_t birth;						/* time of birth of character		*/
	int	played;							/* number of secs played in total	*/
	ubyte weight;						/* character's weight				*/
	ubyte height;						/* character's height				*/

	char	pwd[MAX_PWD_LENGTH+1];		/* character's password				*/

	struct char_special_data_saved char_specials_saved;
	struct player_special_data_saved player_specials_saved;
	struct char_ability_data abilities;
	struct char_point_data points;
	struct affected_type affected[MAX_AFFECT];

	time_t last_logon;					/* time (in secs) of last logon		*/
	char host[HOST_LENGTH+1];			/* host of last logon				*/
	};
/* ====================================================================== */


/* descriptor-related structures ******************************************/

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


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


/* for the empire editor */
struct empire_edit_data {
	byte mode;		/* editor mode */
	int submode;	/* editor sub-mode */
	bool changed;	/* has anything been changed? */

	long leader;
	char *name;

	sh_int banner_color;
	sh_int banner_flags;

	byte num_ranks;
	char *rank[MAX_RANKS];
	sh_int rank_colors[MAX_RANKS];
	sh_int rank_color_flags[MAX_RANKS];

	byte priv[NUM_PRIVILEGES];
	};


struct descriptor_data {
	socket_t descriptor;				/* file descriptor for socket			*/
	char host[HOST_LENGTH+1];			/* hostname								*/
	byte bad_pws;						/* number of bad pw attemps this login	*/
	byte idle_tics;						/* tics idle at password prompt			*/
	int connected;						/* mode of 'connectedness'				*/
	int desc_num;						/* unique num assigned to desc			*/
	time_t login_time;					/* when the person connected			*/
	char *showstr_head;					/* for keeping track of an internal str	*/
	char **showstr_vector;				/* for paging through texts				*/
	int showstr_count;					/* number of pages to page through		*/
	int showstr_page;					/* which page are we currently showing?	*/
	char **str;							/* for the modify-str system			*/
	char *backstr;						/* for the modify-str aborts			*/
	char *storage;						/* name of where to save a file			*/
	size_t max_str;						/*		-								*/
	long mail_to;						/* name for mail system					*/
	int has_prompt;						/* is the user at a prompt?             */
	char inbuf[MAX_RAW_INPUT_LENGTH];	/* buffer for raw input					*/
	char last_input[MAX_INPUT_LENGTH];	/* the last input						*/
	char small_outbuf[SMALL_BUFSIZE];	/* standard output buffer				*/
	char *output;						/* ptr to the current output buffer		*/
	char **history;						/* History of commands, for ! mostly.	*/
	int history_pos;					/* Circular array position.				*/
	int bufptr;							/* ptr to end of current output			*/
	int bufspace;						/* space left in the output buffer		*/
	struct txt_block *large_outbuf;		/* ptr to large buffer, if we need it	*/
	struct txt_q input;					/* q of unprocessed input				*/
	Creature character;					/* linked to char						*/
	Creature original;					/* original char if switched			*/
	Creature temp_char;					/* for char creation					*/
	Descr snooping;						/* Who is this char snooping			*/
	Descr snoop_by;						/* And who is snooping this char		*/
	struct empire_edit_data *empire;	/* for empire editing					*/
	Descr next;							/* link to next descriptor				*/
	};


/* other miscellaneous structures ***************************************/

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 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 str_app_type {
	sh_int carry_w;		/* Maximum weight that can be carrried	*/
	sh_int wield_w;		/* Maximum weight that can be wielded	*/
	};


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


/* element in monster and object index-tables   */
struct index_data {
	int vnum;				/* virtual number of this mob/obj			*/
	int number;				/* number of existing units of this mob/obj	*/
	SPECIAL(*spec_proc);	/* special procedue							*/
	LOOK_SPECIAL(*look_spec);/* spec proc for looking					*/
	};


/* Vampire Clan Data */
struct clan_data {
	char *name;
	bool hardcore;
	bool can_pick;
	byte disc[3];
	};

/* Vampire Power Data */
struct discipline_data {
	char *name;
	bool hardcore;
	};

struct discipline_power_data {
	char *name;
	byte disc;
	byte level;
	byte min_pos;
	int subcmd;
	void (*command_pointer)	(Creature ch, char *argument, int subcmd);
	};


/* Werewolf tribe Data */
struct tribe_data {
	char *name;
	};


/* For new players */
struct new_eq_set_data {
	char *name;
	obj_vnum head;
	obj_vnum body;
	obj_vnum armor;
	obj_vnum legs;
	obj_vnum feet;
	obj_vnum wield;
	obj_vnum hold;
	obj_vnum quiver;
	};


/* For reboots/shutdowns */
struct reboot_data {
	byte type;
	int time;
	byte pause;
	byte die;
	};


/* special procedure main table */
struct special_procedure_table {
	int number;
	char *name;
	SPECIAL(*spec_proc);
	LOOK_SPECIAL(*look_spec);
	};


/* resource data */
struct resource_data_struct {
	int vnum;
	int amount;
	};
typedef struct resource_data_struct Resource;
#define END_RESOURCE_LIST		{ -1, -1 }