Mud20/accounts/
Mud20/accounts/c/
Mud20/accounts/f/
Mud20/accounts/k/
Mud20/accounts/s/
Mud20/accounts/t/
Mud20/area_current/
Mud20/area_current/newareas/
Mud20/bin/
Mud20/clans/
Mud20/gods/
Mud20/old-sources/
Mud20/player/
Mud20/player/a/del/
Mud20/player/b/
Mud20/player/b/bak/
Mud20/player/b/del/
Mud20/player/f/
Mud20/player/f/bak/
Mud20/player/f/del/
Mud20/player/k/
Mud20/player/k/bak/
Mud20/player/k/del/
Mud20/player/k/dmp/
Mud20/player/m/
Mud20/player/m/bak/
Mud20/player/o/
Mud20/player/o/bak/
Mud20/player/p/
Mud20/player/s/
Mud20/player/s/bak/
Mud20/player/s/del/
Mud20/player/t/
Mud20/player/t/del/
Mud20/player/v/
Mud20/public_html/
Mud20/races/
Mud20/skilltables/
__MACOSX/Mud20/accounts/
__MACOSX/Mud20/accounts/c/
__MACOSX/Mud20/accounts/f/
__MACOSX/Mud20/accounts/k/
__MACOSX/Mud20/accounts/s/
__MACOSX/Mud20/area_current/
__MACOSX/Mud20/area_current/core_areas/
__MACOSX/Mud20/area_current/helps/
__MACOSX/Mud20/area_current/newareas/
__MACOSX/Mud20/backups/
__MACOSX/Mud20/bin/
__MACOSX/Mud20/clans/
__MACOSX/Mud20/gods/
__MACOSX/Mud20/log/
__MACOSX/Mud20/old-sources/
__MACOSX/Mud20/player/
__MACOSX/Mud20/player/a/del/
__MACOSX/Mud20/player/b/
__MACOSX/Mud20/player/b/bak/
__MACOSX/Mud20/player/f/
__MACOSX/Mud20/player/f/bak/
__MACOSX/Mud20/player/f/del/
__MACOSX/Mud20/player/k/
__MACOSX/Mud20/player/k/bak/
__MACOSX/Mud20/player/k/del/
__MACOSX/Mud20/player/k/dmp/
__MACOSX/Mud20/player/m/
__MACOSX/Mud20/player/m/bak/
__MACOSX/Mud20/player/o/
__MACOSX/Mud20/player/o/bak/
__MACOSX/Mud20/player/p/
__MACOSX/Mud20/player/s/
__MACOSX/Mud20/player/s/bak/
__MACOSX/Mud20/player/t/del/
__MACOSX/Mud20/player/v/
__MACOSX/Mud20/public_html/
__MACOSX/Mud20/races/
__MACOSX/Mud20/skilltables/
/***************************************************************************
 * Mud20 1.0 by Todd H. Johnson (Kregor) a derivative of the Open Gaming   *
 * License by Wizards of the Coast. All comments referring to D20, OGL,    *
 * and SRD refer to the System Reference Document for the Open Gaming      *
 * system. Any inclusion of these derivatives must include credit to the   *
 * Mud20 system, the full and complete Open Gaming LIcense, and credit to  *
 * the respective authors. See ../doc/srd.txt for more information.        *
 *                                                                         *
 * Emud  2.2 by Igor van den Hoven, Michiel Lange, and Martin Bethlehem.   *
 *                                                                         *
 * MrMud 1.4 by David Bills, Dug Michael and Martin Gallwey                *
 *                                                                         *
 * Merc  2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael      *
 * Chastain, Michael Quan, and Mitchell Tse.                               *
 *                                                                         *
 * Original Diku Mud copyright (C) 1990 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik St{rfeld, Tom Madsen, and Katje Nyboe.     *
 ***************************************************************************/

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include <time.h>
#include <zlib.h>
#include <math.h>


#define DEVELOPER_MAIL	"kregor@mud20.game-host.org"
#define ADMIN_MAIL		"kregor@mud20.game-host.org"

#define __GLIBC__2__

#if defined(TRADITIONAL)
	#define const
	#define args( list )			( )
	#define DECLARE_DO_FUN( fun )		void fun( )
	#define DECLARE_SPEC_FUN( fun )	bool fun( )
	#define DECLARE_SPELL_FUN( fun )	bool fun( )
#else
	#define args( list )			list
	#define DECLARE_DO_FUN( fun )		DO_FUN    fun
	#define DECLARE_SPEC_FUN( fun )	SPEC_FUN  fun
	#define DECLARE_SPELL_FUN( fun )	SPELL_FUN fun
#endif

#define BV00		(0	 <<  0)
#define BV01		(1   <<  0)
#define BV02		(1   <<  1)
#define BV03		(1   <<  2)
#define BV04		(1   <<  3)
#define BV05		(1   <<  4)
#define BV06		(1   <<  5)
#define BV07		(1   <<  6)
#define BV08		(1   <<  7)
#define BV09		(1   <<  8)
#define BV10		(1   <<  9)
#define BV11		(1   << 10)
#define BV12		(1   << 11)
#define BV13		(1   << 12)
#define BV14		(1   << 13)
#define BV15		(1   << 14)
#define BV16		(1   << 15)
#define BV17		(1   << 16)
#define BV18		(1   << 17)
#define BV19		(1   << 18)
#define BV20		(1   << 19)
#define BV21		(1   << 20)
#define BV22		(1   << 21)
#define BV23		(1   << 22)
#define BV24		(1   << 23)
#define BV25		(1   << 24)
#define BV26		(1   << 25)
#define BV27		(1   << 26)
#define BV28		(1   << 27)
#define BV29		(1   << 28)
#define BV30		(1   << 29)
#define BV31		(1   << 30)
#define BV32		(1LL << 31)
#define BV33		(1LL << 32)
#define BV34		(1LL << 33)
#define BV35		(1LL << 34)
#define BV36		(1LL << 35)
#define BV37		(1LL << 36)
#define BV38		(1LL << 37)
#define BV39		(1LL << 38)
#define BV40		(1LL << 39)
#define BV41		(1LL << 40)
#define BV42		(1LL << 41)
#define BV43		(1LL << 42)
#define BV44		(1LL << 43)
#define BV45		(1LL << 44)
#define BV46		(1LL << 45)
#define BV47		(1LL << 46)
#define BV48		(1LL << 47)


#define MAX_OBJ_REF					20000
#define MAX_STRING_LENGTH		60000
#define MAX_INPUT_LENGTH		2000
#define COMPRESS_BUF_SIZE		60000
#define MAX_QUEST_BYTES			16
#define MAX_NAME_LENGTH			12
#define MAX_HISCORE					50
#define MAX_ALIAS						60
#define MAX_KILL_TRACK			10
#define MAX_MPROG_NEST			5
#define MAX_LAST_LEFT				5
#define MAX_BUFFER_LENGTH		50000
#define MAX_OBJECTS_IN_CONTAINER	75
#define MAX_OBJECTS_IN_ROOM	100
#define MAX_PK_ATTACKS			10
#define DESCRIPTOR_TIMEOUT	600
#define RACE_ENEMY_MAX			41
#define MAX_PC							5


#define COLOR_NO_CHANGE     -1
#define COLOR_TEXT           0
#define COLOR_STAT_BAR       1
#define COLOR_ACCENT		     2
#define COLOR_ALERTS		     3
#define COLOR_YOU_ARE_HIT    4
#define COLOR_YOU_HIT        5
#define COLOR_PROMPT         6
#define COLOR_EXITS          7
#define COLOR_PARTY_HIT      8
#define COLOR_SPEECH         9
#define COLOR_OBJECTS       10
#define COLOR_MOBILES       11
#define COLOR_TACTICAL      12
#define COLOR_TACT_PARTY    13
#define COLOR_TACT_ENEMY    14
#define COLOR_TACT_NEUTRAL  15
#define COLOR_CHAT          16
#define COLOR_TALK          17
#define COLOR_QUESTION      18
#define COLOR_MAX           19

#define VT102_DIM            0
#define VT102_BOLD           1
#define VT102_UNDERLINE      4
#define VT102_FLASHING       5
#define VT102_REVERSE        7

#define VT102_FAST				BV01
#define VT100_BEEP				BV02
#define VT100_HIGHLIGHT		BV03
#define VT100_ECMA48			BV04
#define VT100_BOLD				BV05
#define VT100_UNDERLINE		BV06
#define VT100_FLASH				BV07
#define VT100_REVERSE			BV08


#define FALSE	 			0
#define TRUE	 			1

/*
 * change this value to FALSE if you want
 * players to respawn automatically without
 * needing raising. If TRUE, chars go to
 * Limbo, needing magical raising.
 */
#define PERM_DEATH				TRUE


typedef short	int			sh_int;
typedef long long			lg_int;
typedef unsigned char		bool;

/*
	Structure types.
*/

typedef struct  account_data			ACCOUNT_DATA;
typedef struct  combat_data				COMBAT_DATA;
typedef struct  turn_data					TURN_DATA;
typedef struct 	mud_data					MUD_DATA;
typedef struct	affect_data				AFFECT_DATA;
typedef struct	area_data					AREA_DATA;
typedef struct	char_data					CHAR_DATA;
typedef struct	descriptor_data		DESCRIPTOR_DATA;
typedef struct	exit_data					EXIT_DATA;
typedef struct	extra_descr_data	EXTRA_DESCR_DATA;
typedef struct	help_data					HELP_DATA;
typedef struct	mob_index_data		MOB_INDEX_DATA;
typedef struct	note_data					NOTE_DATA;
typedef struct	topic_data				TOPIC_DATA;
typedef struct	obj_data					OBJ_DATA;
typedef struct	poison_data				POISON_DATA;
typedef struct	disease_data			DISEASE_DATA;
typedef struct	bitvector_type		BITVECTOR_DATA;
typedef struct	obj_index_data		OBJ_INDEX_DATA;
typedef struct	pc_data						PC_DATA;
typedef struct	crime_data				CRIME_DATA;
typedef struct	file_data					FILE_DATA;
typedef struct	bounty_data				BOUNTY_DATA;
typedef struct	help_menu_data		HELP_MENU_DATA;
typedef struct	obj_prog					OBJ_PROG;
typedef struct	npc_data					NPC_DATA;
typedef struct	mob_prog_token		NPC_TOKEN;
typedef struct	reset_data				RESET_DATA;
typedef struct	room_index_data		ROOM_INDEX_DATA;
typedef struct	shop_data					SHOP_DATA;
typedef struct	stable_data				STABLE_DATA;
typedef struct	inn_data					INN_DATA;
typedef struct	time_info_data		TIME_INFO_DATA;
typedef struct	weather_data			WEATHER_DATA;
typedef struct	mob_prog_data			MPROG_DATA;
typedef struct 	player_game				PLAYER_GAME;
typedef struct 	usage_data    	 	USAGE_DATA;
typedef struct 	pvnum_data				PVNUM_DATA;
typedef struct	ban_data					BAN_DATA;
typedef struct	tactical_map  	 	TACTICAL_MAP;
typedef struct 	object_reference 	OBJ_REFERENCE;
typedef struct	clan_data					CLAN_DATA;
typedef struct 	editor_data     	EDITOR_DATA;
typedef struct 	pet_data					PET_DATA;
typedef struct 	hiscore_data			HISCORE_DATA;
typedef struct 	hiscore_list			HISCORE_LIST;
typedef struct 	obj_ref_hash			OBJ_REF_HASH;
typedef struct 	room_timer_data		ROOM_TIMER_DATA;
typedef struct 	junk_data					JUNK_DATA;
typedef struct 	str_hash_data			STR_HASH_DATA;
typedef struct 	math_data         MATH_DATA;
typedef struct 	auth_list 				AUTH_LIST; /* new auth -- Rantic */

/*
	Function types.
*/
typedef void DO_FUN		args( ( CHAR_DATA *ch, char *argument ) );
typedef bool SPEC_FUN	args( ( CHAR_DATA *ch ) );
typedef bool SPELL_FUN	args( ( int sn, int level, CHAR_DATA *ch, void *vo, int target ) );


/*
	Supermob stuff
*/
extern CHAR_DATA *supermob;
extern OBJ_DATA *supermob_obj;
extern ROOM_INDEX_DATA *supermob_room;


/* new auth -- Rantic */
extern AUTH_LIST *first_auth_name;
extern AUTH_LIST *last_auth_name;

/*
	Game parameters.
	Increase the max'es if you add more of something.
*/

#define MAX_EXP_WORTH			1000000
#define MIN_EXP_WORTH			10

typedef enum
{
	SLOT_NONE = 0
} slot_numbers;	

/* gets tallied at skill loading time for actual MAX_SKILL - Kregor */
int MAX_REAL_SKILL;
/*
	Fixed looping thru skill array so that you do not need to
	increase MAX_SKILL when you add skills unless you exceed
	the listed number. Also redefined TYPE_NOFIGHT and TYPE_HIT
	to remove need to redefine if MAX_SKILL changes. - Kregor 4/9/10
*/
#define MAX_SKILL				1998
#define MAX_LANG				21
#define MAX_LEVEL				99
#define MAX_PVNUM				12000
#define MAX_AREA				10000
#define MAX_VNUM				100 * MAX_AREA
#define MAX_TOPIC				7
#define MAX_WAYPOINT		20
#define MAX_LINKPERPORT	750
#define LEVEL_EPIC			21
#define LEVEL_HERO			30
#define LEVEL_IMMORTAL	97
#define MAX_AUTH_WAIT		7 /* max days to auth before deleted */

/*
 * Pulse times are set to be SRD compliant
 * do NOT change them unless you know what you're changing
 */
#define	PULSE_PER_SECOND	4
#define	PULSE_AGGRESSIVE	( 1 * PULSE_PER_SECOND / 2)
#define	PULSE_MOBILE			( 2 * PULSE_PER_SECOND)
#define	PULSE_VIOLENCE		( 6 * PULSE_PER_SECOND)
#define	PULSE_PROGRAM			( 6 * PULSE_PER_SECOND)
#define	PULSE_CHARSAVE		( 6 * PULSE_PER_SECOND)
#define	PULSE_TICK				(60 * PULSE_PER_SECOND)
#define	PULSE_TIME				(10 * PULSE_TICK)
#define	PULSE_AREA				( 1 * PULSE_TICK)
#define	PULSE_SHOPS				(10 * PULSE_TICK)
#define	PULSE_AREASAVE		(20 * PULSE_TICK)
#define	OBJ_SAC_TIME			(25)

#define AREA_VERSION		 4
#define PLAYER_VERSION	 2

#define MOST_KILL_EN			2
#define MOST_KILL_PC			3
#define MOST_KILL_NPC			4
#define MOST_KILL_BY_NPC	5
#define MOST_KILL_BY_EN		6
#define MOST_KILL_BY_PC		7
#define MOST_HP			 			8
#define MOST_MANA					9
#define MOST_MOVE				10
#define MOST_AC					11
#define MOST_DR					12
#define MOST_HR					13
#define MOST_CASTLE			14
#define MOST_HOURS			15
#define MOST_SAVE				16
#define MOST_MOST				17


/*
	some main variables, initialized in main()
*/

#define MUD_EMUD_BOOTING		BV01
#define MUD_EMUD_DOWN				BV02
#define MUD_EMUD_REBOOT			BV03
#define MUD_EMUD_COPYOVER		BV04
#define MUD_EMUD_CRASH			BV05
#define MUD_EMUD_BOOTDB			BV06
#define MUD_EMUD_REALGAME		BV07
#define MUD_WIZLOCK					BV08
#define MUD_CLANRENT				BV09
#define MUD_DUALFLIP				BV10
#define MUD_SKIPOUTPUT			BV11
#define MUD_EQAFFECTING			BV12
#define MUD_LOGALL					BV13
#define MUD_PURGER					BV14
#define MUD_STRAIGHTNUMBERS	BV15

#define TIMER_AREA_SAVE			 0
#define TIMER_SHOP_UPD			 1
#define TIMER_CHAR_UPD			 2
#define TIMER_AREA_UPD			 3
#define TIMER_WEATHER_UPD		 4
#define TIMER_OBJ_UPD				 5
#define TIMER_CHAR_SAVE			 6
#define TIMER_VIOL_UPD			 7
#define TIMER_OBJ_PROG			 8
#define TIMER_MOB_PROG			 9
#define TIMER_MOB_UPD				10
#define TIMER_AGGR_UPD			11
#define TIMER_PURGE					12
#define TIMER_TACTICAL_UPD	13
#define TIMER_SCAN_DESC			14
#define TIMER_PROCESS_INPUT	15
#define TIMER_PROCESS_OUTPUT	16
#define TIMER_TIME_UPD			17
#define TIMER_MAXTIMER			18

#define CMD_NONE			0
#define CMD_HIDE			BV01
#define CMD_IDLE			BV02
#define CMD_BERSERK		BV03
#define CMD_QUIT			BV04
#define CMD_NO_MAGIC	BV05
#define CMD_NOHELP		BV06
#define CMD_DEAD			BV07
#define CMD_ATTACK		BV08
#define CMD_NOFIGHT		BV09
#define CMD_TESTER		BV10
#define CMD_BUILDER		BV11
#define CMD_HELPER		BV12
#define CMD_ENFORCER	BV13

/*
	This structure holds most of the global variables - Scandum 28-04-2003
*/

struct mud_data
{
	DESCRIPTOR_DATA	*	f_desc;
	DESCRIPTOR_DATA	*	l_desc;
	ACCOUNT_DATA		* f_acct;
	ACCOUNT_DATA		* l_acct;
	PLAYER_GAME 		*	f_player;
	PLAYER_GAME 		*	l_player;
	AREA_DATA			*	f_area;
	AREA_DATA			*	l_area;
	CHAR_DATA			*	f_char;
	CHAR_DATA			*	l_char;
	SHOP_DATA			*	f_shop;
	SHOP_DATA			*	l_shop;
	STABLE_DATA		*	f_stable;
	STABLE_DATA		*	l_stable;
	INN_DATA			*	f_inn;
	INN_DATA			*	l_inn;
	OBJ_DATA			*	f_obj;
	OBJ_DATA			*	l_obj;
	CLAN_DATA			*	f_clan;
	CLAN_DATA			*	l_clan;
	JUNK_DATA			*	f_junk;
	JUNK_DATA			*	l_junk;
	ROOM_TIMER_DATA	*	f_room_timer;
	ROOM_TIMER_DATA	*	l_room_timer;
	PET_DATA			*	f_pet;
	PET_DATA			*	l_pet;
	NOTE_DATA			*	f_note;
	NOTE_DATA			*	l_note;
	BOUNTY_DATA		*	f_bounty;
	BOUNTY_DATA		*	l_bounty;
	BAN_DATA			*	f_ban;
	BAN_DATA			*	l_ban;
	BAN_DATA			*	f_nban;
	BAN_DATA			*	l_nban;
	FILE_DATA			*	f_open_file;
	FILE_DATA			*	l_open_file;
	MATH_DATA			*	f_math;
	MATH_DATA			*	l_math;
	DESCRIPTOR_DATA	*	update_gld;
	CHAR_DATA			*	update_wch;
	CHAR_DATA			*	update_ich;
	CHAR_DATA			*	update_rch;
	OBJ_DATA			*	update_obj;
	CHAR_DATA			*	mp_group_greeter;
	CHAR_DATA			*	mp_group_greeted;
	OBJ_DATA			*	mp_group_greet_obj;
	HISCORE_LIST		*	high_scores[MOST_MOST];
	TIME_INFO_DATA		*	time_info;
	USAGE_DATA		*	usage;
	TACTICAL_MAP		*	tactical;
	struct tm 			time;
	time_t				current_time;
	time_t				boot_time;
	lg_int 			total_io_bytes;
	lg_int			total_io_ticks;
	lg_int 			total_io_delay;
	lg_int			total_io_exec;
	int					bitvector_ref[26];
	int					command_ref[26];
	int					social_ref[26];
	int					port;
	int					control;
	int					flags;
	int					total_mob;
	int					total_obj;
	int					total_plr;
	int					total_desc;
	int					total_acct;
	int					top_exit;
	int					top_affect;
	int					top_area;
	int					top_ed;
	int					top_help;
	int					top_mob_index;
	int					top_obj_index;
	int					top_room;
	int					top_reset;
	int					top_shop;
	int					top_inn;
	int					top_stable;
	int					top_mprog;
	int					top_oprog;
	bool					sunlight;
	bool					str_hash_size;
	char				*	last_player_cmd;
	unsigned char		*	mccp_buf;
};

/*
	Time and weather stuff.
*/

typedef enum
{
	LIGHT_DEEP_DARK = 0,
	LIGHT_DARKNESS,
	LIGHT_DIM,
	LIGHT_NORMAL,
	LIGHT_BRIGHT
} light_flags;

#define SUN_DARK			0
#define SUN_RISE			1
#define SUN_NOON			2
#define SUN_LIGHT			3
#define SUN_SET				4

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

struct time_info_data
{
	int		hour;
	int		day;
	int		month;
	int		year;
};


struct weather_data
{
	bool		sky;
	sh_int	temperature;
	sh_int	change;
	bool		wind_dir;
	sh_int	wind_speed;

	sh_int	temp_summer;	/* Summer temperature			*/
	sh_int	temp_winter;	/* Winter temperature			*/
	sh_int	temp_daily;	/* Daily  temperature change		*/
	bool		wet_scale;	/* Wetness scale   0 - 10		*/
	bool		wind_scale;	/* Windyness scale 0 - 10		*/
};

struct player_game
{
	PLAYER_GAME * next;
	PLAYER_GAME * prev;
	CHAR_DATA   * ch;
};


/*
 * This is the structure for a single battle.
 */
struct combat_data
{
	COMBAT_DATA *	next;
	CHAR_DATA 	*	unit_list;
	TURN_DATA 	*	turn_list;
	int						turn_count;
};

/*
 * This is the structure for a single turn.
 */
struct turn_data
{
	TURN_DATA 	*	next;
	COMBAT_DATA *	in_battle;
	CHAR_DATA 	*	unit;
	long					roundtime;
	sh_int				timer;
};


/*
	Connected state for a channel.
*/

#define	CON_GET_NAME							-30
#define	CON_GET_OLD_PASSWORD			-29
#define	CON_GET_ACCOUNT						-28
#define	CON_GET_NEW_ACCOUNT				-27
#define	CON_ACCOUNT_MENU					-26
#define	CON_GET_NEW_NAME					-21
#define	CON_GET_NEW_PASSWORD			-20
#define	CON_CONFIRM_NEW_PASSWORD	-19
#define	CON_GET_NEW_AGE						-18
#define	CON_ANSI									-17
#define	CON_VT100									-16
#define	CON_GET_NEW_SEX						-15
#define	CON_GET_NEW_RACE					-14
#define	CON_GET_NEW_CLASS					-13
#define	CON_REROLL								-12
#define	CON_GET_LANGS							-11
#define	CON_GET_DEITY							-10
#define	CON_GET_ALIGNMENT					-9
#define	CON_READ_MOTD				 			-2
#define	CON_COPYOVER_RECOVER			-1
#define	CON_PLAYING				  			0
#define	CON_EDITING				  			1

/*
	These keep track of what a person is editing
*/

#define	MODE_NONE						0
#define	MODE_RESTRICTED			1
#define	MODE_WRITING_NOTE		2
#define	MODE_PERSONAL_DESC	3
#define	MODE_ROOM_DESC			4
#define	MODE_MOB_DESC				5
#define	MODE_DISGUISE_DESC	6
#define	MODE_CLAN_DOCTRINE	7	/* Unused */
#define	MODE_HELP_EDIT			8
#define	MODE_MPROG_EDIT			9
#define	MODE_REPEATCMD			10
#define	MODE_OBJ_DESC				11
#define	MODE_OBJ_ID_DESC		12
#define	MODE_OBJ_EXTRA			13
#define	MODE_MOB_EXTRA			14
#define	MODE_ROOM_EXTRA			15
#define	MODE_CRIME_RECORD		16
#define	MODE_OPROG_EDIT			17
#define	MODE_PERSONAL_BIO 	18
#define	MODE_ROOM_LISTEN		19
#define	MODE_RPROG_EDIT			20
#define	MODE_ROOM_NIGHT			21
#define	MODE_EDIT_NOTE			22


#define EDIT_TYPE_NONE		0
#define EDIT_TYPE_ROOM		1
#define EDIT_TYPE_MOB			2
#define EDIT_TYPE_OBJ			3
#define EDIT_TYPE_HELP		4
#define EDIT_TYPE_RESET		5
#define EDIT_TYPE_SHOP		6
#define EDIT_TYPE_AREA		7
#define EDIT_TYPE_MPROG		8
#define EDIT_TYPE_OPROG		9
#define EDIT_TYPE_RPROG		10
#define EDIT_TYPE_STABLE	11
#define EDIT_TYPE_INN			12
#define EDIT_TYPE_RACE		13
#define EDIT_TYPE_GOD			14
#define EDIT_TYPE_CLASS		15


#define INTERP_ALIAS		BV01
#define INTERP_OPROG		BV02
#define INTERP_FORCE		BV03
#define INTERP_DUMP			BV04
#define INTERP_SCROLL		BV05
#define INTERP_PAGE			BV06
#define INTERP_PAUSE		BV07
#define INTERP_AUTO			BV08
#define INTERP_HELP			BV09
#define INTERP_TACT_UPDATE	BV10
#define INTERP_MPROG		BV11

#define TRACK_NORTH			BV01
#define TRACK_SOUTH			BV02
#define TRACK_EAST			BV03
#define TRACK_WEST			BV04
#define TRACK_UP			BV05
#define TRACK_DOWN			BV06
#define TRACK_FLY			BV07
#define TRACK_BLOOD			BV08


#define TO_ROOM			0
#define TO_NOTVICT	1
#define TO_VICT			2
#define TO_CHAR			3
#define TO_CAN_SEE	4
#define TO_SEEHEAR	5
#define TO_ALL			6

typedef enum
{
	ATTK_BITE = 0,
	ATTK_CLAW,
	ATTK_GORE,
	ATTK_HOOF,
	ATTK_KICK,
	ATTK_PINCERS,
	ATTK_PUNCH,
	ATTK_RAKE,
	ATTK_SLAM,
	ATTK_STING,
	ATTK_TAIL,
	ATTK_TALON,
	ATTK_TENTACLE,
	ATTK_WING,
	ATTK_OTHER,
	ATTK_TOUCH,
	ATTK_MAX
} attack_flags;

/* racial body types */
typedef enum
{
	BTYPE_BIPEDAL = 0,
	BTYPE_AMORPHOUS,
	BTYPE_AQUATIC,
	BTYPE_ARTHROPOD,
	BTYPE_ARTHROPOD_HYBRID,
	BTYPE_AVIAN,
	BTYPE_MULTI_ARMED,
	BTYPE_QUADRUPED,
	BTYPE_QUADRUPED_HYBRID,
	BTYPE_RADIAL,
	BTYPE_SERPENTINE,
	BTYPE_SERPENTINE_HYBRID,
	BTYPE_MAX
} body_type_flags;

/* bitvector flags for faerun gods */
typedef enum
{
	GOD_NEUTRAL = 0,
	GOD_AKADI,
	GOD_AURIL,
	GOD_AZUTH,
	GOD_BANE,
	GOD_BESHABA,
	GOD_CHAUNTEA,
	GOD_CYRIC,
	GOD_DENEIR,
	GOD_ELDATH,
	GOD_FINDER_WYVERNSPUR,
	GOD_GARAGOS,
	GOD_GARGAUTH,
	GOD_GOND,
	GOD_GRUMBAR,
	GOD_GWAERON_WINDSTROM,
	GOD_HELM,
	GOD_HOAR,
	GOD_ILMATER,
	GOD_ISTISHIA,
	GOD_JERGAL,
	GOD_KELEMVOR,
	GOD_KOSSUTH,
	GOD_LATHANDER,
	GOD_LEIRA,
	GOD_LLIIRA,
	GOD_LOVIATAR,
	GOD_LURUE,
	GOD_MALAR,
	GOD_MASK,
	GOD_MIELIKKI,
	GOD_MILIL,
	GOD_MYSTRA,
	GOD_OGHMA,
	GOD_RED_KNIGHT,
	GOD_SAVRAS,
	GOD_SELUNE,
	GOD_SHAR,
	GOD_SHARESS,
	GOD_SHAUNDAKUL,
	GOD_SHIALLIA,
	GOD_SIAMORPHE,
	GOD_SILVANUS,
	GOD_SUNE,
	GOD_TALONA,
	GOD_TALOS,
	GOD_TEMPUS,
	GOD_TORM,
	GOD_TYMORA,
	GOD_TYR,
	GOD_UMBERLEE,
	GOD_VALKUR,
	GOD_VELSHAROON,
	GOD_WAUKEEN,
	
	GOD_AERDRIE_FAENYA,
	GOD_ANGARRADH,
	GOD_CORELLON_LARETHIAN,
	GOD_EREVAN_ILESERE,
	GOD_FENMAREL_MESTARINE,
	GOD_HANALI_CELANIL,
	GOD_LABELAS_ENORETH,
	GOD_RILLFANE_RALLATHIL,
	GOD_SEHANINE_MOONBOW,
	GOD_SHEVARASH,
	GOD_SOLONOR_THELANDIRA,
	
	GOD_EILISTRAEE,
	GOD_KIRANSALEE,
	GOD_GHAUNADAUR,
	GOD_LOLTH,
	GOD_SEVELTARM,
	GOD_VHAERAUN,
	
	GOD_ABBATHOR,
	GOD_BERRONAR_TRUESILVER,
	GOD_CLANGEDDIN_SILVERBEARD,
	GOD_DEEP_DUERRA,
	GOD_DUGMAREN_BRIGHTMANTLE,
	GOD_DUMATHOIN,
	GOD_GORM_GULTHYN,
	GOD_HAELA_BRIGHTAXE,
	GOD_LADUGUER,
	GOD_MARTHAMMOR_DUIN,
	GOD_MORADIN,
	GOD_SHARINDLAR,
	GOD_THARD_HARR,
	GOD_VERGADAIN,
	
	GOD_BAERVAN_WILDWANDERER,
	GOD_BARAVAR_CLOAKSHADOW,
	GOD_CALLARDURAN_SMOOTHHANDS,
	GOD_FLANDAL_STEELSKIN,
	GOD_GAERDAL_IRONHAND,
	GOD_GARL_GLITTERGOLD,
	GOD_SEGOJAN_EARTHCALLER,
	GOD_URDLEN,
	
	GOD_ARVOREEN,
	GOD_BRANDOBARIS,
	GOD_CYRROLLALEE,
	GOD_SHEELA_PERYROYL,
	GOD_UROGALAN,
	GOD_YONDALLA,
	
	GOD_BAHGTRU,
	GOD_GRUUMSH,
	GOD_ILNEVAL,
	GOD_LUTHIC,
	GOD_SHARGAAS,
	GOD_YURTRUS,


	GOD_BAHAMUT,
	GOD_BAPHOMET,
	GOD_BLIBDOOLPOOLP,
	GOD_HRUGGEK,
	GOD_KURTULMAK,
	GOD_MAGLUBIYET,
	GOD_SEMUANYA,
	GOD_SSETH,
	GOD_TIAMAT,
	GOD_VAPRAK,
	GOD_YEENOGHU,
	MAX_GOD
} god_flags;


typedef enum
{
	STYPE_NONE = 0,
	STYPE_ATTACK,
	STYPE_BUFF,
	STYPE_CURSE,
	STYPE_DEBUFF,
	STYPE_DEFENSE,
	STYPE_HEAL
} spell_type_flags;

typedef enum
{
	STAT_STR = 0,
	STAT_DEX,
	STAT_CON,
	STAT_INT,
	STAT_WIS,
	STAT_CHA
} stat_locations;

typedef enum
{
	APPLY_NONE = 0,
	APPLY_STR,
	APPLY_DEX,
	APPLY_INT,
	APPLY_WIS,
	APPLY_CON,
	APPLY_CHA,
	APPLY_SEX,
	APPLY_RACE,
	APPLY_LEVEL,
	APPLY_AGE,
	APPLY_SIZE,
	APPLY_MANA,
	APPLY_HIT,
	APPLY_MOVE,
	APPLY_SAVING_FORT,
	APPLY_SAVING_REFL,
	APPLY_SAVING_WILL,
	APPLY_SAVES,
	APPLY_DEFLECT,
	APPLY_DODGE,
	APPLY_SHIELD,
	APPLY_ARMOR,
	APPLY_COMP_SKILL,
	APPLY_COMP_TOHIT,
	APPLY_COMP_DAMG,
	APPLY_COMP_FORT,
	APPLY_COMP_REFL,
	APPLY_COMP_WILL,
	APPLY_COMP_SAVES,
	APPLY_ENHANCE_AC,
	APPLY_HITROLL,
	APPLY_DAMROLL,
	APPLY_INS_AC,
	APPLY_INS_TOHIT,
	APPLY_INS_FORT,
	APPLY_INS_REFL,
	APPLY_INS_WILL,
	APPLY_INS_SAVES,
	APPLY_INS_SKILL,
	APPLY_LUCK_SKILL,
	APPLY_LUCK_TOHIT,
	APPLY_LUCK_DAMG,
	APPLY_LUCK_FORT,
	APPLY_LUCK_REFL,
	APPLY_LUCK_WILL,
	APPLY_LUCK_SAVES,
	APPLY_MOR_TOHIT,
	APPLY_MOR_DAMG,
	APPLY_MOR_FORT,
	APPLY_MOR_REFL,
	APPLY_MOR_WILL,
	APPLY_MOR_SAVES,
	APPLY_MOR_SKILL,
	APPLY_NATURAL_AC,
	APPLY_RES_GOOD,
	APPLY_RES_EVIL,
	APPLY_RES_LAW,
	APPLY_RES_CHAOS,
	APPLY_RES_SAVES,
	APPLY_RES_SPELL,
	APPLY_APPRAISE,
	APPLY_BLUFF,
	APPLY_CLIMB,
	APPLY_CONCENTRATE,
	APPLY_DECIPHER,
	APPLY_DIPLOMACY,
	APPLY_DISABLE,
	APPLY_DISGUISE,
	APPLY_ESCAPE,
	APPLY_FIRST_AID,
	APPLY_GATHER_INFO,
	APPLY_HANDLE_ANIM,
	APPLY_INTIMIDATE,
	APPLY_JUMP,
	APPLY_LISTEN,
	APPLY_MOUNT,
	APPLY_OPEN_LOCK,
	APPLY_PERFORM,
	APPLY_SEARCH,
	APPLY_STEALTH,
	APPLY_SENSE_MOT,
	APPLY_SLEIGHT,
	APPLY_SPELLCRAFT,
	APPLY_SIGHT,
	APPLY_SURVIVAL,
	APPLY_SWIM,
	APPLY_TUMBLE,
	APPLY_USE_MAGIC,
	APPLY_CRAFT_ALCHEMY,
	APPLY_CRAFT_ARMOR,
	APPLY_CRAFT_BOWS,
	APPLY_CRAFT_COOKING,
	APPLY_CRAFT_FLETCHING,
	APPLY_CRAFT_JEWELRY,
	APPLY_CRAFT_LEATHER,
	APPLY_CRAFT_MINING,
	APPLY_CRAFT_POISON,
	APPLY_CRAFT_TAILOR,
	APPLY_CRAFT_TRAPS,
	APPLY_CRAFT_WEAPONS,
	APPLY_DR_BASH,
	APPLY_DR_PIERCE,
	APPLY_DR_SLASH,
	APPLY_DR_MAGIC,
	APPLY_DR_GOOD,
	APPLY_DR_EVIL,
	APPLY_DR_LAW,
	APPLY_DR_CHAOS,
	APPLY_DR_IRON,
	APPLY_DR_SILVER,
	APPLY_DR_ADAMANTINE,
	APPLY_DR_NONE,
	APPLY_DR_ACID,
	APPLY_DR_COLD,
	APPLY_DR_ELECTRIC,
	APPLY_DR_FIRE,
	APPLY_DR_SONIC,
	APPLY_SPELL_RES,
	APPLY_WEAPON_FLAG,
	APPLY_OBJVAL_0,
	APPLY_OBJVAL_1,
	APPLY_OBJVAL_2,
	APPLY_OBJVAL_3,
	APPLY_OBJVAL_4,
	APPLY_OBJVAL_5,
	APPLY_OBJVAL_6,
	APPLY_OBJVAL_7,
	APPLY_SPELL_SLOTS_1,
	APPLY_SPELL_SLOTS_2,
	APPLY_SPELL_SLOTS_3,
	APPLY_SPELL_SLOTS_4,
	APPLY_SPELL_SLOTS_5,
	APPLY_STR_DAMAGE,
	APPLY_DEX_DAMAGE,
	APPLY_CON_DAMAGE,
	APPLY_INT_DAMAGE,
	APPLY_WIS_DAMAGE,
	APPLY_CHA_DAMAGE,
	APPLY_STR_DRAIN,
	APPLY_DEX_DRAIN,
	APPLY_CON_DRAIN,
	APPLY_INT_DRAIN,
	APPLY_WIS_DRAIN,
	APPLY_CHA_DRAIN,
	APPLY_SAVE_ACID,
	APPLY_SAVE_AIR,
	APPLY_SAVE_CHAOTIC,
	APPLY_SAVE_CHARM,
	APPLY_SAVE_COLD,
	APPLY_SAVE_COMPULSION,
	APPLY_SAVE_DARKNESS,
	APPLY_SAVE_DEATH,
	APPLY_SAVE_DISEASE,
	APPLY_SAVE_EARTH,
	APPLY_SAVE_ELECTRIC,
	APPLY_SAVE_EVIL,
	APPLY_SAVE_FEAR,
	APPLY_SAVE_FIRE,
	APPLY_SAVE_FORCE,
	APPLY_SAVE_GOOD,
	APPLY_SAVE_ILLUSION,
	APPLY_SAVE_LAWFUL,
	APPLY_SAVE_LIGHT,
	APPLY_SAVE_MAGIC,
	APPLY_SAVE_MIND,
	APPLY_SAVE_NEGATIVE,
	APPLY_SAVE_PARALYSIS,
	APPLY_SAVE_PETRI,
	APPLY_SAVE_POISON,
	APPLY_SAVE_POLYMORPH,
	APPLY_SAVE_HEALING,
	APPLY_SAVE_SLEEP,
	APPLY_SAVE_SONIC,
	APPLY_SAVE_WATER,
	APPLY_IMM_ACID,
	APPLY_IMM_AIR,
	APPLY_IMM_CHAOTIC,
	APPLY_IMM_CHARM,
	APPLY_IMM_COLD,
	APPLY_IMM_COMPULSION,
	APPLY_IMM_DARKNESS,
	APPLY_IMM_DEATH,
	APPLY_IMM_DISEASE,
	APPLY_IMM_EARTH,
	APPLY_IMM_ELECTRIC,
	APPLY_IMM_EVIL,
	APPLY_IMM_FEAR,
	APPLY_IMM_FIRE,
	APPLY_IMM_FORCE,
	APPLY_IMM_GOOD,
	APPLY_IMM_ILLUSION,
	APPLY_IMM_LAWFUL,
	APPLY_IMM_LIGHT,
	APPLY_IMM_MAGIC,
	APPLY_IMM_MIND,
	APPLY_IMM_NEGATIVE,
	APPLY_IMM_PARALYSIS,
	APPLY_IMM_PETRI,
	APPLY_IMM_POISON,
	APPLY_IMM_HEALING,
	APPLY_IMM_POLYMORPH,
	APPLY_IMM_SLEEP,
	APPLY_IMM_SONIC,
	APPLY_IMM_WATER,
	APPLY_SR_CHAOS,
	APPLY_SR_EVIL,
	APPLY_SR_GOOD,
	APPLY_SR_LAW,
	APPLY_FAST_HEALING,
	APPLY_REGENERATION,
	APPLY_TURN_RESIST,
	APPLY_DARKVISION,
	APPLY_LOWLIGHT_VISION,
	APPLY_CONCEALMENT,
	APPLY_FORTIFICATION,
	APPLY_ROOM_SECTOR,
	APPLY_ROOM_LIGHT,
	APPLY_MATERIAL,
	MAX_APPLY
} apply_flags;


typedef enum
{
	DOMAIN_AIR 					= 0,
	DOMAIN_ARTIFICE,
	DOMAIN_ANIMAL,
	DOMAIN_CAVERN,
	DOMAIN_CHAOS,
	DOMAIN_CHARM,
	DOMAIN_COMMUNITY,
	DOMAIN_DARKNESS,
	DOMAIN_DEATH,
	DOMAIN_DESTRUCTION,
	DOMAIN_EARTH,
	DOMAIN_EVIL,
	DOMAIN_FIRE,
	DOMAIN_GOOD,
	DOMAIN_HEALING,
	DOMAIN_ILLUSION,
	DOMAIN_KNOWLEDGE,
	DOMAIN_LAW,
	DOMAIN_LIBERATION,
	DOMAIN_LUCK,
	DOMAIN_MADNESS,
	DOMAIN_MAGIC,
	DOMAIN_METAL,
	DOMAIN_MOON,
	DOMAIN_NOBILITY,
	DOMAIN_PLANNING,
	DOMAIN_PLANT,
	DOMAIN_PROTECTION,
	DOMAIN_RENEWAL,
	DOMAIN_REPOSE,
	DOMAIN_RETRIBUTION,
	DOMAIN_SCALYKIND,
	DOMAIN_STRENGTH,
	DOMAIN_SUFFERING,
	DOMAIN_SUN,
	DOMAIN_TRADE,
	DOMAIN_TRAVEL,
	DOMAIN_TRICKERY,
	DOMAIN_WAR,
	DOMAIN_WATER,
	DOMAIN_WEATHER,
	DOMAIN_WRATH,
	MAX_DOMAIN
} domain_flags;


#define GOD_NEUTRAL			0
#define GOD_ALPHA				1
#define GOD_BRAVO				2
#define GOD_CHARLIE			3
#define GOD_DELTA				4
#define GOD_ECHO				5
#define GOD_FOXTROT			6

/*
	Descriptor (channel) structure.
*/

struct descriptor_data
{
	DESCRIPTOR_DATA *	next;
	DESCRIPTOR_DATA *	prev;
	DESCRIPTOR_DATA *	snoop_by;
	CHAR_DATA 			* character;
	CHAR_DATA 			* original;
	ACCOUNT_DATA 		* account; // player account data
	char 						* host;
	char						* terminal_type;
	sh_int					descriptor;
	sh_int					connected;
	char						inbuf		[MAX_INPUT_LENGTH];
	char						incomm		[MAX_INPUT_LENGTH];
	char						* back_buf;    /* Used for aliasses */
	char						* inlast;
	int							repeat;
	char						outbuf		[MAX_STRING_LENGTH];
	int							outtop;
	int							intop;
	int							port_size;
	time_t						connecting_time;
	sh_int					comm_flags;
	bool						lookup_acct;
	bool						lookup;
	sh_int					timeout;
	z_stream				*	mccp;
};

struct account_data
{
	DESCRIPTOR_DATA	* desc;
	ACCOUNT_DATA		* next;
	ACCOUNT_DATA		* prev;
	CHAR_DATA				*	ch; 						//ptr to char_data
	char						*	player_name;
	char						*	pwd;
	lg_int					password; 				// take over password from pfile
	int							flags;						// for banning and other flags
	int							rp_points;        // RP rating as modifier to XP
	int							strikes;					// Count strikes - 3 and you're out!
	time_t					last_connect; 		// mirror from pfile
	time_t					last_time; 				// mirror from pfile
	time_t					last_saved; 			// mirror from pfile
	int							played; 					// mirror from pfile
	int							functions; 				// take over from pfile
	int							character[MAX_PC]; //character list by pvnum
	sh_int					vt100;
	sh_int					ansi;
	bool						consent;  				// take over from pfile
};

struct  editor_data
{
	sh_int			numlines;
	sh_int			on_line;
	int				size;
	char			*	line[600];
};


struct pet_data
{
	PET_DATA		*	next;
	PET_DATA		*	prev;
	CHAR_DATA		*	ch;
};


/*
 * Armor table - Kregor
 */
struct armor_type
{
	char name[20];
	short type;
	short material;
	int cost;
	short ac_bonus;
	short dex_max;
	short armor_check;
	short spell_fail;
	short max_spd;
	short weight;
};

/*
 * weapon table - Kregor
 */
struct weapon_type
{
	char *name;
  int cost;
  sh_int damnodice;
  sh_int damsizedice;
  sh_int dam_type;
  sh_int threat;
  sh_int critical;
  sh_int range;
  sh_int weight;
  sh_int class;
  sh_int size;
  int		 weap_spec;
  sh_int material;
  sh_int craft_skill;
};

/*
 * Tool table - Kregor
 */
struct tool_type
{
	char name[20];
	char trade[36];
	int cost;
	short weight;
};


/*
 * poison table - Kregor
 */
struct poison_type
{
	char name[20];
	sh_int type;
	sh_int dc;
	sh_int inst_nodice;
	sh_int inst_sizedice;
	sh_int inst_loc;
	sh_int sec_nodice;
	sh_int sec_sizedice;
	sh_int sec_loc;
	sh_int cost;
};
	
/*
 * disease table - Kregor
 */
struct disease_type
{
	char name[20];
	sh_int	type;
	sh_int	dc;
	sh_int	incubation;
	sh_int	damdice;
	sh_int	location;
	sh_int	saves_cure;
	char	*	echo_char;
	char	*	echo_room;
};
	
/*
 * unarmed attacks
 */
struct attack_type
{
	char			*	message;
	int				dam_type;
};

struct attack_part_type
{
	sh_int	size[10];
};


struct obj_prog
{
	OBJ_PROG		*	next;
	OBJ_PROG		*	prev;
	OBJ_PROG		*	true;
	OBJ_PROG		*	false;
	char			*	unknown;
	char			*	argument;
	int				trigger;
	int				if_value;
	sh_int			cmd;
	bool				obj_command;
	bool				if_check;
	bool				if_symbol;
	bool				if_true;
	bool				if_false;
	bool				quest_offset;
	bool				quest_bits;
	bool				index;
	bool				percentage;
};

/*
	Help table types.
*/

struct help_data
{
	HELP_DATA		*	next;
	HELP_DATA 	*	prev;
	sh_int			level;
	char 		*	keyword;
	char 		*	title;
	char 		*	text;
	AREA_DATA 	*	area;
	HELP_MENU_DATA *	first_menu;
	HELP_MENU_DATA *	last_menu;
};


struct help_menu_data
{
	HELP_MENU_DATA	*	next;
	HELP_MENU_DATA *	prev;
	char				option;
	HELP_DATA		*	help;
};


/*
	Shop types.
*/

#define MAX_TRADE	 4

struct shop_data
{
	SHOP_DATA		*	next;
	SHOP_DATA		*	prev;
	int					keeper;				/* Vnum of shop keeper mob	*/
	bool				buy_type[MAX_TRADE];/* Item types shop will buy	*/
	int					shop_flags;
	sh_int			profit_buy;		/* Cost multiplier for buying	*/
	sh_int			profit_sell;	/* Cost multiplier for selling*/
	bool				open_hour;		/* First opening hour		*/
	bool				close_hour;		/* First closing hour		*/
};

/*
 * Stable stuff
 */
struct stable_data
{
	STABLE_DATA		*	next;
	STABLE_DATA		*	prev;
	int					keeper;			/* Vnum of stable keeper mob	*/
	int					room;				/* Vnum of stable storage room	*/
	int					shop_flags;	/* Uses shop flags to configure	*/
	sh_int			rent;				/* Cost to stable	*/
	bool				open_hour;	/* First opening hour		*/
	bool				close_hour;	/* First closing hour		*/
};


/*
 * Inn rental stuff
 */
#define MAX_INN_ROOMS	 5

struct inn_data
{
	INN_DATA		*	next;
	INN_DATA		*	prev;
	int					keeper;			/* Vnum of inn keeper mob	*/
	int					room[MAX_INN_ROOMS];	/* Vnums of sleeping rooms	*/
	sh_int			rent[MAX_INN_ROOMS];	/* Cost of each room	*/
	int					shop_flags;	/* Uses shop flags to configure	*/
	bool				open_hour;	/* First opening hour		*/
	bool				close_hour;	/* First closing hour		*/
};

/*
	Per-class stuff.
*/

struct class_type
{
	char		who_name[4];	/* Three-letter name for 'who'	*/
	char		who_name_long[40];	/* Actual title  Chaos 11/7/93  */
	sh_int	fort_save;		/* Which fort save scale to use	*/
	sh_int	refl_save;		/* Which reflex save scale to use	*/
	sh_int	will_save;		/* Which will save scale to use	*/
	sh_int	hp_max;				/* Max hp gained on leveling		*/
	sh_int	pc_class;			/* can PC take class?	*/
	sh_int	mana_table;		/* Mana table used	*/
	sh_int	attr_prime;		/* Prime attribute				*/
	sh_int	attr_second;	/* Second attribute				*/
	sh_int	prime_mod;		/* Modifier for main attribute	*/
	sh_int	sec_mod;			/* Modifier for second attribute	*/
	sh_int	base_attack;	/* Which base attack bonus scale to use	*/
	sh_int	skill_pts;		/* Skill points (practices) per level	*/
	sh_int	max_level;		/* Max level in the class	*/
	sh_int	first_bonus;	/* first level bonus feat is earned */
	sh_int	bonus_lvl;		/* level increment for each bonus feat */
};


struct god_type
{
	char		god_name[30];
	char		logout_msg[80];	/* faithful see this msg on logout */
	char		*ranking[5];		/* faith rank titles */
  int			domain1;				/* NPC clerical 1st domain */
  int			domain2;				/* NPC clerical 2nd domain */
  int			domain[MAX_DOMAIN];	/* clerical domains NEW array */
  int			favored_weapon;	/* deity's favored weapon */
  lg_int	race;						/* racial pantheon of diety */
  lg_int	paladin_multi;	/* what classes can a paladin multiclass with? */
  lg_int	monk_multi;			/* what classes can a monk multiclass with? */
  int			align;					/* god's own alignment axes */
  int			ethos;
  int			align_hi;				/* range allowed for followers' alignments */
  int			align_lo;
  int			ethos_hi;
  int			ethos_lo;
  int			faith_enemy[MAX_GOD];	/* gods who this god opposes */
  int			faith_ally[MAX_GOD];	/* gods who this god is aligned with */
};

struct sector_type
{
	char		sector_name[20];
	sh_int	movement;
	sh_int	color;
	sh_int	flags;
	sh_int	light;
	sh_int	sight;
};

struct race_type
{
	char		race_name[24];		/* Race Names */
	sh_int	race_mod[6];			/* Attribute modifiers */
	sh_int	nonability[6];		/* Non-abilities 0 stats */
	sh_int	hit_dice;					/* monster levels of race */
	sh_int	land_speed;				/* land speed in feet */
	sh_int	burrow_speed;			/* burrow speed in feet */
	sh_int	climb_speed;			/* climb speed in feet */
	sh_int	fly_speed;				/* fly speed in feet */
	sh_int	swim_speed;				/* swim speed in feet */
	sh_int	nat_armor;				/* Natural armor bonus */
	sh_int	deflection;				/* Deflection AC bonus */
	bool		pcrace;						/* 1 = allowed for PC */
	int			parent_race;			/* parent race of subrace */
	sh_int	size;							/* size of race */
	sh_int	weight;						/* weight in pounds */
	sh_int	height;						/* height in inches */
	int			lvl_adj;					/* Level Adjustment */
	int			apply[MAX_APPLY];	/* Racial Applies */
	int			vulnerability;		/* Vulnerability to dam type */
	int			speaks;						/* native language */
	int			understands;			/* known languages */
	int			bonus_langs;			/* bonus langs */
	int 		type;							/* race type */
	int			body_type;				/* body type */
	lg_int	flags;						/* specialties */
	lg_int	sectors;					/* native sector types */
	lg_int	attack_parts;			/* body parts race attacks with DEPRECATED */
	lg_int	wear_locs;				/* Wear locations of race */
	lg_int	affected_by;			/* permanent affect vectors */
	sh_int	attacks[ATTK_MAX];/* NEW universal monster rules attack parts */
	int     poison;						/* Poison type for those w/poison */
	int 		poison_part;			/* What body part has posion */
	int     disease;					/* Disease type for those w/disease */
	int 		disease_part;			/* What body part has disease */
	int			favored_class;		/* favored class for race */
	int			alignment;				/* typical align for race */
	int			ethos;						/* typical ethos for race */
	int			material;					/* body composition */
};

struct race_type_type
{
	char		name[20];				/* Race Type Names */
	sh_int	hit_die;				/* size of hit dice */
	sh_int	skill_pts;			/* skill points per level */
	int			immunity;				/* Immunities to descriptor types */
	int			vulnerability;	/* Vulnerabilities to dam type */
	lg_int	wear_locs;			/* Wear locs typical to rtype */
	sh_int	fort_save;			/* Which fort save scale to use	*/
	sh_int	refl_save;			/* Which reflex save scale to use	*/
	sh_int	will_save;			/* Which will save scale to use	*/
	sh_int	base_attack;		/* Which base attack bonus scale to use	*/
	bool		natural_weap;		/* Automatically possesses natural weapons */
	bool		eats;						/* Does the race type eat? */
	bool		breathes;				/* Does the race type breathe? */
	bool		can_crit;				/* Can critical hit? */
	bool		can_flank;			/* Can be flanked? */
};

/*
	Data structures for notes.
*/

struct note_data
{
	NOTE_DATA *	next;
	NOTE_DATA *	prev;
	char 	*	sender;
	char		*	date;
	char 	*	to_list;
	char 	*	subject;
	int			topic;
	char 	*	text;
	time_t		time;				/* encoded format for dates */
	int			room_vnum;	/* Room based note boards */
};

struct topic_data
{
	char		*	name;
	int			min_level;
};

struct affect_data
{
	AFFECT_DATA *	next;
	AFFECT_DATA *	prev;
	sh_int		type;
	sh_int		duration;
	int				location;
	int				modifier;
	bool			bittype;
	lg_int		bitvector;
	sh_int		level;
	char			*	caster;
};

struct material_type
{
	int parent;			/* parent material */
	int hardness;		/* DR/adamantine */
	int hit;				/* hitpoints per inch */
	int resist_lo;	/* takes 1/2 dam from dam_type */
	int resist_hi;	/* takes 1/4 dam from dam_type */
	int immune;			/* takes no dam from dam_type */
	int vulnerable;	/* takes 2x dam from dam_type and ignore hardness */
};

struct component_type
{
	char *name;			/* name of component */
	int cost;				/* cost per use (val1) */
};

/*
	Well known mob virtual numbers.
*/

#define MOB_VNUM_TOTEM						4
#define MOB_VNUM_ILLUSION					25
#define MOB_VNUM_WINGED_CALL			30
#define MOB_VNUM_WIZARD_EYE				26
#define MOB_VNUM_ZOMBIE						27

#define MOB_VNUM_WARHORSE				19
#define MOB_VNUM_SHADOW_BEAST		22
#define MOB_VNUM_COMP_BADGER		31
#define MOB_VNUM_COMP_BEAR			32
#define MOB_VNUM_COMP_DOG				33
#define MOB_VNUM_COMP_CAMEL			34
#define MOB_VNUM_COMP_HAWK			35
#define MOB_VNUM_COMP_RAVEN			47
#define MOB_VNUM_COMP_HORSE			37
#define MOB_VNUM_COMP_OWL				38
#define MOB_VNUM_COMP_WEASEL		39
#define MOB_VNUM_COMP_WOLF			40
#define MOB_VNUM_COMP_BOAR			41
#define MOB_VNUM_COMP_TIGER			42
#define MOB_VNUM_COMP_BAT				43
#define MOB_VNUM_COMP_CAT				44
#define MOB_VNUM_COMP_LIZARD		45
#define MOB_VNUM_COMP_RAT				48
#define MOB_VNUM_COMP_SNAKE			46
#define MOB_VNUM_COMP_TOAD			47
#define MOB_VNUM_COMPANION			49
#define MOB_VNUM_SUMMONS				50


#define AFLAG_NODEBUG			BV01
#define AFLAG_NOTELEPORT	BV02
#define AFLAG_NEWHELPS		BV03
#define AFLAG_NORECALL		BV04
#define AFLAG_NOCASTLE		BV05
#define AFLAG_NORIP				BV06
#define AFLAG_FREEQUIT		BV07
#define AFLAG_NOSUMMON		BV08
#define AFLAG_AUTOSAVE		BV09
#define AFLAG_MODIFIED		BV10
#define AFLAG_WEATHER			BV11
#define AFLAG_CONVERTED		BV12
#define AFLAG_VILLAGE			BV13
#define AFLAG_TOWN				BV14
#define AFLAG_CITY				BV15
#define AFLAG_METROPOLIS	BV16
#define AFLAG_NO_PVP			BV17
#define AFLAG_WILDERNESS	BV18
#define AFLAG_FK					BV19

#define	CRIME_NONE					0
#define	CRIME_MUGGING				1
#define	CRIME_ASSAULT				2
#define	CRIME_LOW_MURDER		3
#define	CRIME_HIGH_MURDER		4
#define	CRIME_MAX						5

#define	PUNISHMENT_NOT_ENFORCED	0
#define	PUNISHMENT_DEATH				1
#define	PUNISHMENT_SEVER				2
#define	PUNISHMENT_JAIL					3
#define	PUNISHMENT_CONFISCATE		4

#define SFLAG_NONE				0
#define SFLAG_INDOORS			BV01
#define SFLAG_NOWEATHER		BV02
#define SFLAG_SWIM				BV03

#define LANG_NONE					0
#define LANG_ABYSSAL			BV01
#define LANG_AQUAN				BV02
#define LANG_AURAN				BV03
#define LANG_CELESTIAL		BV04
#define LANG_COMMON				BV05
#define LANG_DWARVEN			BV06
#define LANG_ELVEN				BV07
#define LANG_GIANT				BV08
#define LANG_GNOLL				BV09
#define LANG_GNOME				BV10
#define LANG_GOBLIN				BV11
#define LANG_HALFLING			BV12
#define LANG_IGNAN				BV13
#define LANG_INFERNAL			BV14
#define LANG_ORCISH				BV15
#define LANG_SYLVAN				BV16
#define LANG_TERRAN				BV17
#define LANG_UNDERCOMMON	BV18
#define LANG_DRACONIC			BV19
#define LANG_DRUIDIC			BV20
#define LANG_THIEVESCANT	BV21
#define LANG_ANIMAL				0

/* legacy bitvector names for compatibility */
#define ACT_IS_NPC				0
#define ACT_PRACTICE			0		/* Can practice PC's - replaced with ACT_TRAIN	*/
#define ACT_STAY_SECTOR		BV07

#define ACT_NONE					0
#define ACT_STAY_AREA			BV01		/* Stays in the Area it resets */
#define ACT_SENTINEL			BV02		/* Stays in one room */
#define ACT_SCAVENGER			BV03		/* Picks up objects */
#define ACT_DRUNK					BV04		/* is drunk and talks so 	*/
#define ACT_SUMMONED			BV05		/* summoned by spell, dispelable, held by prot */
#define ACT_AGGRESSIVE		BV06		/* Attacks and hunts PC's	*/
#define ACT_NOWANDER			BV07		/* Stays in same sector type  */
#define ACT_WIMPY					BV08		/* Flees when hurt */
#define ACT_PET						BV09		/* Auto set for pets */
#define ACT_TRAIN					BV10		/* Can train PC's */
#define ACT_BANK					BV11		/* Mobile is a banker */
#define ACT_WEAK					BV12		/* Cannot carry anything */
#define ACT_SECRETIVE			BV13		/* Does not echo actions */
#define ACT_NOCORPSE			BV14		/* Disappears after fight */
#define ACT_DAY						BV15		/* Mobile only repops in daytime */	 // Thanks to Rhythmic for the idea - Kregor
#define ACT_NIGHT					BV16		/* Mobile only repops at night */  // Thanks to Rhythmic for the idea - Kregor
#define ACT_COMPANION			BV17		/* Animal Companion */
#define ACT_AVAILABLE1		BV18		
#define ACT_IS_HEALER			BV19		/* Sells healing services	*/
#define ACT_WILL_DIE			BV20		/* Purely Internal */
#define ACT_NOFIGHT				BV21		/* Doesn't attack */
#define ACT_AVAILABLE2		BV22
#define ACT_GUARD					BV23		/* Carries out guard functions */
#define ACT_FAMILIAR			BV24		/* is a familiar, and conveys benefits	*/
#define ACT_AVAILABLE3		BV25		
#define ACT_SUBDUAL				BV26		/* Does subdual damage instead of lethal */
#define ACT_CITIZEN				BV27		/* Is a citizen of the are, affects legal status in area - MUST CODE	*/
#define ACT_NOASSIST			BV28		/* Will not autoassist others */
#define ACT_REQUEST 			BV29		/* Will honor the REQUEST command */
#define ACT_MOBINVIS			BV30		/* is invisible to mortals like AFF_ETHEREAL	*/
#define ACT_WARHORSE			BV31		/* Paladin's mount	*/


#define AFF_NONE						0
#define AFF_BLIND						BV01
#define AFF_CURSE						BV02
#define AFF_DEAF						BV03
#define AFF_DETECT_HIDDEN		BV04
#define AFF_DETECT_INVIS		BV05
#define AFF_DETECT_TRAPS		BV06
#define AFF_DOMINATE				BV07
#define AFF_FEATHER_FALL		BV08
#define AFF_FLYING					BV09
#define AFF_FREEDOM					BV10
#define AFF_GASEOUS					BV11
#define AFF_HASTE						BV12
#define AFF_HIDE						BV13
#define AFF_HOODED					BV14
#define AFF_IMMUNE_SPELL		BV15
#define AFF_INVISIBLE				BV16
#define AFF_MIND_BLANK			BV17
#define AFF_NONDETECTION		BV18
#define AFF_POISON					BV19
#define AFF_SANCTUARY				BV20
#define AFF_SEE_DARKNESS		BV21
#define AFF_SLEEP						BV22
#define AFF_SNEAK						BV23
#define AFF_SUSTAIN					BV24
#define AFF_TELEPATHY				BV25
#define AFF_TONGUES					BV26
#define AFF_TRUESIGHT				BV27
#define AFF_UNDERSTAND			BV28
#define AFF_WATER_BREATH		BV29
#define AFF_WATER_WALK			BV30
#define AFF_ETHEREAL				BV31

#define AFF2_ASTRAL					-BV01
#define AFF2_BERSERK				-BV02
#define AFF2_BLEEDING				-BV03
#define AFF2_CALMED					-BV04
#define AFF2_CAMPING				-BV05
#define AFF2_CONFUSION			-BV06
#define AFF2_DAZED					-BV07
#define AFF2_DAZZLED				-BV08
#define AFF2_ENTANGLED			-BV09
#define AFF2_ETHEREAL				-BV10
#define AFF2_EXHAUSTED			-BV11
#define AFF2_FALLING				-BV12
#define AFF2_FASCINATED			-BV13
#define AFF2_FATIGUED				-BV14
#define AFF2_FEAR						-BV15
#define AFF2_HALLUCINATE		-BV16
#define AFF2_LONGTERM_CARE	-BV17
#define AFF2_NAUSEATED			-BV18
#define AFF2_PARALYSIS			-BV19
#define AFF2_PETRIFICATION	-BV20
#define AFF2_POSSESS				-BV21
#define AFF2_SICKENED				-BV22
#define AFF2_SILENCE				-BV23
#define AFF2_STAGGERED			-BV24
#define AFF2_STUNNED				-BV25
#define AFF2_UNCONSCIOUS		-BV26
#define AFF2_CHARMED				-BV27
#define AFF2_DROWNING				-BV28
#define AFF2_TIED_UP				-BV29
#define AFF2_AVAIL2					-BV30
#define AFF2_AVAIL3					-BV31

/* physical damage - D20 */
#define DAM_NONE				0
#define DAM_PIERCE			BV01
#define DAM_SLASH				BV02
#define DAM_BASH				BV03
#define DAM_MAGICAL			BV04	
#define DAM_GOOD				BV05	
#define DAM_EVIL				BV06	
#define DAM_LAWFUL			BV07	
#define DAM_CHAOTIC			BV08	
#define DAM_IRON				BV09	
#define DAM_SILVER			BV10	
#define DAM_ADAMANTINE	BV11	
#define MAX_PHYSICAL		11
/* nonlethal damage - D20 */
#define DAM_NONLETHAL		BV12
/* energy damage - D20 */
#define MIN_ENERGY			12
#define DAM_ACID				BV13	
#define DAM_COLD				BV14	
#define DAM_ELECTRIC		BV15			
#define DAM_FIRE				BV16	
#define DAM_SONIC				BV17
#define DAM_DIVINE			BV18
#define DAM_FORCE				BV19
#define MAX_ENERGY			19
#define DAM_MAX					19

#define DAM_PHYSICAL		DAM_PIERCE|DAM_SLASH|DAM_BASH|DAM_MAGICAL|DAM_GOOD|DAM_EVIL|DAM_LAWFUL|DAM_CHAOTIC|DAM_IRON|DAM_SILVER|DAM_ADAMANTINE
#define DAM_ENERGY			DAM_ACID|DAM_COLD|DAM_ELECTRIC|DAM_FIRE|DAM_SONIC|DAM_DIVINE|DAM_FORCE

/* Damage type flags */
typedef enum
{
	DAM_TYPE_NONE = 0,
	DAM_TYPE_PIERCE,
	DAM_TYPE_SLASH,
	DAM_TYPE_BASH,
	DAM_TYPE_MAGICAL,	
	DAM_TYPE_GOOD,	
	DAM_TYPE_EVIL,	
	DAM_TYPE_LAWFUL,	
	DAM_TYPE_CHAOTIC,	
	DAM_TYPE_IRON,	
	DAM_TYPE_SILVER,	
	DAM_TYPE_ADAMANTINE,	
	DAM_TYPE_NONLETHAL,
	DAM_TYPE_ACID,
	DAM_TYPE_COLD,
	DAM_TYPE_ELECTRIC,
	DAM_TYPE_FIRE,
	DAM_TYPE_SONIC,
	DAM_TYPE_DIVINE,
	DAM_TYPE_FORCE,
	DAM_TYPE_MAX
} dam_type_flags;

/* spell descriptors - D20 */
#define SDESC_NONE				0
#define SDESC_ACID				BV01
#define SDESC_AIR					BV02
#define SDESC_CHAOTIC			BV03		
#define SDESC_CHARM				BV04		
#define SDESC_COLD				BV05		
#define SDESC_COMPULSION	BV06		
#define SDESC_DARKNESS		BV07			
#define SDESC_DEATH				BV08			
#define SDESC_DISEASE			BV09			
#define SDESC_EARTH				BV10	
#define SDESC_ELECTRIC		BV11	
#define SDESC_EVIL				BV12	
#define SDESC_FEAR				BV13	
#define SDESC_FIRE				BV14	
#define SDESC_FORCE				BV15	
#define SDESC_GOOD				BV16	
#define SDESC_HEALING			BV17	
#define SDESC_ILLUSION		BV18			
#define SDESC_LAWFUL			BV19		
#define SDESC_LIGHT				BV20	
#define SDESC_MAGIC				BV21	
#define SDESC_MIND				BV22	
#define SDESC_NEGATIVE		BV23
#define SDESC_PARALYSIS		BV24		
#define SDESC_PETRI				BV25		
#define SDESC_POISON			BV26		
#define SDESC_SONIC				BV27		
#define SDESC_SLEEP				BV28	
#define SDESC_WATER				BV29
#define SDESC_POLYMORPH		BV30
#define SDESC_SUMMONING		BV31
#define SDESC_MAX					31

#define ACTION_FREE				0
#define ACTION_SWIFT			BV01
#define ACTION_MOVE				BV02
#define ACTION_STANDARD		BV03
#define ACTION_FULL				BV02|BV03

/*
 * Attack flags govern how many ch gets in a round
 * and what gets modified based on these actions
 */
#define ATTACK_DISARM					BV01
#define ATTACK_TRIP						BV02
#define ATTACK_WHIRL					BV03
#define ATTACK_STUNNING_FIST	BV04
#define ATTACK_SHIELD_BASH		BV05
#define ATTACK_CHARGE					BV06
#define ATTACK_MIRROR					BV07
#define ATTACK_TRAMPLE				BV08
#define ATTACK_OPPORTUNITY		BV08
#define ATTACK_CLEAVE					BV10
#define ATTACK_RIPOSTE				BV11
#define ATTACK_DEFLECT				BV12
#define ATTACK_MELEE					BV13
#define ATTACK_CAST						BV14
#define ATTACK_SUNDER					BV15
#define ATTACK_PARRY					BV16
#define ATTACK_DEF_ROLL				BV17
#define ATTACK_DELAY					BV18
#define ATTACK_SHOOT					BV19

#define SEX_NEUTRAL				0
#define SEX_MALE					1
#define SEX_FEMALE				2


#define OBJ_VNUM_MONEY_ONE		 2
#define OBJ_VNUM_MONEY_SOME		 3
#define OBJ_VNUM_TOTEM				 4
#define OBJ_VNUM_CORPSE_NPC		10
#define OBJ_VNUM_CORPSE_PC		11
#define OBJ_VNUM_SEVERED_HEAD	12
#define OBJ_VNUM_TORN_HEART		13
#define OBJ_VNUM_SLICED_ARM		14
#define OBJ_VNUM_SLICED_LEG		15
#define OBJ_VNUM_MUSHROOM			20
#define OBJ_VNUM_LIGHT_BALL		21
#define OBJ_VNUM_SPRING				22
#define OBJ_VNUM_GATE					23
#define OBJ_VNUM_ICE_ARROW		24
#define OBJ_VNUM_BOUNTY_HEAD	25

#define OBJ_VNUM_SLICE				26
#define OBJ_VNUM_SKIN					27
#define OBJ_VNUM_FIRE					31
#define OBJ_VNUM_FISHCATCH		32
#define OBJ_VNUM_CRAFT				34
#define OBJ_VNUM_ARMOR				35
#define OBJ_VNUM_WEAPON				36
#define OBJ_VNUM_AMMO					37

#define OBJ_VNUM_SPELLBOOK			50
#define OBJ_VNUM_CLERIC_WEAPON	51
#define OBJ_VNUM_STARTING_ARMOR	52
#define OBJ_VNUM_STARTING_HELM	56


typedef enum
{
	TOOL_NONE = 0,
	TOOL_ALCHEMY_KIT,
	TOOL_CLIMBERS_KIT,
	TOOL_DISGUISE_KIT,
	TOOL_FIRSTAID_KIT,
	TOOL_JEWELERS_TOOLS,
	TOOL_MAGNIFYING_GLASS,
	TOOL_MINERS_PICK,
	TOOL_MERCHANTS_SCALE,
	TOOL_PEN,
	TOOL_ROPE,
	TOOL_SHOVEL,
	TOOL_SMITH_TOOLS,
	TOOL_SURVIVAL_TOOLS,
	TOOL_TANNING_TOOLS,
	TOOL_THIEVES_TOOLS,
	TOOL_WOODWORKERS_TOOLS,
	TOOL_SEAL,
	TOOL_FISHING_POLE,
	TOOL_TAILORS_TOOLS,
	TOOL_ANVIL,
	TOOL_FURNACE,
	TOOL_LATHE,
	TOOL_COOKING_POT,
	TOOL_TINDER,
	TOOL_SHACKLES
} tool_flags;

typedef enum
{
	ITEM_NOTHING = 0,
	ITEM_LIGHT,
	ITEM_SCROLL,
	ITEM_WAND,
	ITEM_STAFF,
	ITEM_WEAPON,
	ITEM_SYMBOL,
	ITEM_SPELLBOOK,
	ITEM_TREASURE,
	ITEM_ARMOR,
	ITEM_POTION,
	ITEM_SPELLPOUCH,
	ITEM_FURNITURE,
	ITEM_TRASH,
	ITEM_SHEATH,
	ITEM_CONTAINER,
	ITEM_QUIVER,
	ITEM_DRINK_CON,
	ITEM_KEY,
	ITEM_FOOD,
	ITEM_MONEY,
	ITEM_COMPONENT,
	ITEM_BOAT,
	ITEM_CORPSE_NPC,
	ITEM_CORPSE_PC,
	ITEM_FOUNTAIN,
	ITEM_PILL,
	ITEM_PORTAL,
	ITEM_WINDOW,
	ITEM_TOOLS,
	ITEM_AMMO,
	ITEM_TOTEM,
	ITEM_CRAFT,
	ITEM_PIECE,
	ITEM_PAPER,
	ITEM_BOOK,
	ITEM_TRAP,
	ITEM_MAP,
	ITEM_FIRE,
	ITEM_CART
} item_flags;

/* SHOP flags - need to code for shop conditions */
#define SHOP_NONE						0
#define SHOP_IDENTIFY				BV01 /* shop identifies items */
#define SHOP_TEMPLE					BV02 /* only sells to faith members */
#define SHOP_CLAN_STORE			BV03 /* only sells to clan members */
#define SHOP_BANK						BV04 /* offers banking services */
#define SHOP_AVAIL5					BV05

#define ITEM_NONE							0
#define ITEM_GLOW							BV01	/* Item glows */
#define ITEM_RESIZE						BV02	/* Item resizes to first person to wear it */
#define ITEM_LOYAL						BV03	/* Item does not fall when disarmed */
#define ITEM_AVAILABLE1				BV04
#define ITEM_INVIS						BV05	/* Item is invisible */
#define ITEM_MAGIC						BV06	/* Item is magic, has magial aura */
#define ITEM_NODROP						BV07	/* Cannot be dropped, for plot items and hi level eq */
#define ITEM_AVAILABLE2				BV08
#define ITEM_EVIL							BV09	/* Zaps good chars */
#define ITEM_GOOD							BV10	/* Zaps evil chars */
#define ITEM_NEUTRAL					BV11	/* Zaps evil/good chars */
#define ITEM_CHAOTIC					BV12	/* Zaps lawful chars */
#define ITEM_LAWFUL						BV13	/* zaps chaotic chars */
#define ITEM_UNCONCERNED			BV14	/* zaps lawful/chaotic chars */
#define ITEM_NOREMOVE					BV15	/* Can't be removed, cursed */
#define ITEM_INVENTORY				BV16	/* Stays in PCs inventory, even when dead */
#define ITEM_BURNING					BV17	/* Sheds light, adds fire damage to hit */
#define ITEM_NOT_VALID				BV18	/* internal use only */
#define ITEM_AUTO_ENGRAVE			BV19	/* item auto tags itself to wearer */
#define ITEM_NO_RAISE					BV20	/* system use for badly mangled or death effect corpses */
#define ITEM_ETHEREAL					BV21	/* cannot be seen by mortals */
#define ITEM_MODIFIED					BV22	/* internal use for spells and renames */
#define ITEM_HIDDEN						BV23	/* Item is hidden in room */
#define ITEM_MASTERWORK				BV24	/* masterwork item */
#define ITEM_NOSCRY						BV25	/* cannot be scried with spells */
#define ITEM_CONCEALED				BV26	/* concealed on a PCs person */
#define ITEM_BROKEN						BV27	/* item is broken and cannot be used unless repaired */
#define ITEM_BURIED						BV28	/* buried underground - MUST CODE */
#define ITEM_TRANSPARENT			BV29	/* items under this one can be seen on same wear loc */

/*
 * Weapon Flags, per D20 Weapon Abilities
 * Place on value[1] of weapon - Kregor 7/7/07
 */
#define WFLAG_NONE					0
#define WFLAG_ANARCHIC			BV01	/* +dmg lawful 2d6, negative level if lawful wields CODED */
#define WFLAG_AXIOMATIC			BV02	/* +dmg chaotic 2d6, negative level if lawful wields CODED*/
#define WFLAG_BANE					BV03	/* set race on value[2] +dmg 2d6 CODED */
#define WFLAG_DISRUPTION		BV05	/* Undead will save vs. 14 or destroyed CODED*/
#define WFLAG_DISTANCE			BV06	/* double range missile weapon CODED*/
#define WFLAG_FLAMING				BV07	/* +1d6 fire damage CODED*/
#define WFLAG_FLAMING_BURST	BV08	/* +1d6 * crit mod fire damage CODED*/
#define WFLAG_FROST					BV09	/* +1d6 cold damage CODED*/
#define WFLAG_GHOST_TOUCH		BV10	/* can hit incorporeal creatures CODED*/
#define WFLAG_HOLY					BV11	/* +dmg evil 2d6, negative level if evil wields CODED*/
#define WFLAG_ICY_BURST			BV12	/* +1d6 * crit mod cold damage CODED*/
#define WFLAG_KEEN					BV13	/* double threat range of weapon  CODED*/
#define WFLAG_KI_FOCUS			BV14	/* use monk ki strike with weapon CODED*/
#define WFLAG_MERCIFUL			BV15	/* all dmg is nonlethal w/o penalty + 1d6 damage CODED*/
#define WFLAG_RETURNING			BV16	/* weapon returns after thrown on next round CODED*/
#define WFLAG_SEEKING				BV17	/* strike unerringly at target CODED*/
#define WFLAG_SHOCK					BV18	/* +1d6 electric damage CODED*/
#define WFLAG_SHOCK_BURST		BV19	/* +1d6 * crit mod elec damage CODED*/
#define WFLAG_SPEED					BV20	/* extra attack in lieu of haste CODED*/
#define WFLAG_SPELL_STORING	BV21	/* casts spell up to level 3 stored in value[2] with value [3] caster level CODED*/
#define WFLAG_THUNDERING		BV22	/* +1d8 * crit mod sonic dmg on crit hit CODED*/
#define WFLAG_THROWING			BV23	/* Can throw otherwise unthrowable weapon CODED*/
#define WFLAG_UNHOLY				BV24	/* +dmg good 2d6, neg level evil wielder CODED*/
#define WFLAG_VENOMOUS			BV25	/* AFF_POISON upon hit */
#define WFLAG_VICIOUS				BV26	/* +2d6 damage target, 1d6 damage wielder CODED*/
#define WFLAG_VAMPIRIC			BV27	/* heals up to value[2] of target damage to wielder CODED*/
#define WFLAG_VORPAL				BV28	/* beheads target on crit hit (dead!) CODED*/
#define WFLAG_WOUNDING			BV29	/* causes bleeding wound on crit hit CODED*/
#define WFLAG_SLAYING				BV30	/* victim->race matches value[2], save or die */
#define WFLAG_CAUSTIC				BV31	/* +1d6 acid damage CODED */
#define WFLAG_MAX						31


/*
 * Armour flags, per D20 armor qualities armor value[1]
 * Most other qualities are accomplished through applies. - Kregor 10/5/07
 */
#define ARMORFLAG_NONE							0
#define ARMORFLAG_ARROW_DEFLECTION	BV01	/* deflects arrows like arrow deflection */
#define ARMORFLAG_BASHING						BV02	/* does additional bash damage, +1 hit dam */
#define ARMORFLAG_GHOST_TOUCH				BV03	/* protects against incorporeal attacks */
#define ARMORFLAG_REFLECTING				BV04	/* reflects like spell turning, value[2] = charges = spell levels reflected*/
#define ARMORFLAG_WILD							BV05	/* retains bonuses with shapechanged */
#define ARMORFLAG_HOODED						BV06	/* CODED!*/ /* armor piece has a hood (cloaks, robes, etc) */
#define ARMORFLAG_MAX								6


/*
 * Treasure flags, for wondrous items/rings etc.
 * must be set on type TREASURE value[0] - Kregor 10/5/07
 */
#define TFLAG_NONE						0
#define TFLAG_SPELL_STORING		BV01		/* CODED!*/ /* stores value[1], value[2] and value[3] as spells */
#define TFLAG_COUNTERSPELL		BV02		/* CODED!*/ /* store value[1], counters same spell and discharges */
#define TFLAG_SPELL_RECAST		BV03		/* CODED!*/ /* casts spell on value[3] up to value[1] times per day, tracked with value[2] */
#define TFLAG_SPELL_CHARGES		BV04		/* CODED!*/ /* holds value[2] of value[1] charges of value[3] spell */
#define TFLAG_ABSORPTION			BV05		/* absorbs value[2] mana to value[1] limit, applies to holder's points */


/*   All new trap stuff */
typedef enum
{
	TRAP_TYPE_UNKNOWN = 0,
	TRAP_TYPE_SLEEP, 		/* sleep trap */
	TRAP_TYPE_SPELL, 		/* effect spell of value X on victim(s) */
	TRAP_TYPE_FIRE, 		/* value 4 d6 fire damage */
	TRAP_TYPE_COLD, 		/* value 4 d6 cold damage */
	TRAP_TYPE_ACID, 		/* value 4 d6 acid damage */
	TRAP_TYPE_ELECTRIC, /* value 4 d6 electric damage */
	TRAP_TYPE_BLUNT,  	/* value 4 d6 bashing damage */
	TRAP_TYPE_PIERCE, 	/* value 4 d6 piercing damage */
	TRAP_TYPE_SLASH,  	/* value 4 d6 slashing damage */
	TRAP_TYPE_RANGED, 	/* value 4 d6 ranged pierce damage */
	TRAP_TYPE_MLOAD,  	/* loads mobile of value 4 in room */
	TRAP_TYPE_OLOAD,  	/* loads object of value 4 in room */
	TRAP_TYPE_POISON, 	/* poisons victim with value 4 poison type */
	TRAP_TYPE_TELEPORT, /* teleport to value 4 room vnum or random */
	TRAP_TYPE_MPROG			/* triggers a mobprog coded on trap */
} trap_flags;


#define TRAP_TRIG_MOVE       BV01 /* trigger on movement */
#define TRAP_TRIG_MOVE_NORTH BV02 /* movement in this direction */
#define TRAP_TRIG_MOVE_EAST  BV03    
#define TRAP_TRIG_MOVE_SOUTH BV04
#define TRAP_TRIG_MOVE_WEST  BV05
#define TRAP_TRIG_MOVE_UP    BV06
#define TRAP_TRIG_MOVE_DOWN  BV07
#define TRAP_TRIG_OPEN_NORTH BV08 /* open door in this direction */
#define TRAP_TRIG_OPEN_EAST  BV09    
#define TRAP_TRIG_OPEN_SOUTH BV10
#define TRAP_TRIG_OPEN_WEST  BV11
#define TRAP_TRIG_OPEN_UP    BV12
#define TRAP_TRIG_OPEN_DOWN  BV13
#define TRAP_TRIG_OPEN_OBJ   BV14 /* trigger on open obj */
#define TRAP_TRIG_GET_PUT    BV15 /* trigger on get or put obj */
#define TRAP_TRIG_ROOMAFFECT BV16 /* affect all in room */
#define TRAP_TRIG_MAGIC      BV17 /* magical trigger */

#define TRAP_RESET_NONE      0 /* set decay timer after trigger */
#define TRAP_RESET_MANUAL    1 /* reset using settrap reset */
#define TRAP_RESET_AUTO      2 /* resets automatically in resets */

#define TRAP_UNARMED    	  0 /* trap is not set */
#define TRAP_ARMED				  1 /* trap is set */

#define CAN_WEAR_TAKE				BV01
#define CAN_WEAR_FLOAT			BV02
#define CAN_WEAR_HEAD				BV03
#define CAN_WEAR_FACE				BV04
#define CAN_WEAR_EARS				BV05
#define CAN_WEAR_NECK				BV06
#define CAN_WEAR_ARMS				BV07
#define CAN_WEAR_WRIST			BV08
#define CAN_WEAR_HANDS			BV09
#define CAN_WEAR_FINGER			BV10
#define CAN_WEAR_BODY				BV11
#define CAN_WEAR_ABOUT			BV12
#define CAN_WEAR_BACK				BV13
#define CAN_WEAR_WAIST			BV14
#define CAN_WEAR_BELT				BV15
#define CAN_WEAR_LEGS			  BV16
#define CAN_WEAR_ANKLE			BV17
#define CAN_WEAR_FEET				BV18
#define CAN_WEAR_SHIELD			BV19
#define CAN_WEAR_WIELD			BV20
#define CAN_WEAR_BOTH				BV21
#define CAN_WEAR_HOLD				BV22
#define CAN_WEAR_SADDLE			BV23

typedef enum
{
	WEAR_NONE			= 0,
	WEAR_FLOAT,
	WEAR_HEAD,
	WEAR_FACE,
	WEAR_EARS,
	WEAR_NECK_1,
	WEAR_NECK_2,
	WEAR_ARMS,
	WEAR_WRIST_L,
	WEAR_WRIST_R,
	WEAR_HANDS,
	WEAR_FINGER_L,
	WEAR_FINGER_R,
	WEAR_ABOUT,
	WEAR_BODY,
	WEAR_SADDLE,
	WEAR_BACK,
	WEAR_WAIST,
	WEAR_BELT_1,
	WEAR_BELT_2,
	WEAR_BELT_3,
	WEAR_LEGS,
	WEAR_ANKLE_L,
	WEAR_ANKLE_R,
	WEAR_FEET,
	WEAR_SHIELD,
	WEAR_WIELD,
	WEAR_DUAL_WIELD,
	WEAR_BOTH_HANDS,
	WEAR_HOLD,
	MAX_WEAR
} wear_loc_flags;


typedef enum
{
	LAYER_NONE = 0,
	LAYER_UNDER,
	LAYER_CLOTHES,
	LAYER_OVERCLOTHES,
	LAYER_ARMOR,
	LAYER_OVER,
	LAYER_MAX
} armor_layers;

typedef enum
{
	MATERIAL_UNKNOWN = 0,
	MATERIAL_HARDWOOD,
	MATERIAL_SOFTWOOD,
	MATERIAL_DARKWOOD,
	MATERIAL_OAK,
	MATERIAL_YEW,
	MATERIAL_EBONY,
	MATERIAL_IRONWOOD,
	MATERIAL_CLOTH,
	MATERIAL_SILK,
	MATERIAL_WOOL,
	MATERIAL_FUR,
	MATERIAL_LEATHER,
	MATERIAL_HIDE,
	MATERIAL_DRAGONHIDE,
	MATERIAL_STEEL,
	MATERIAL_TIN,
	MATERIAL_LEAD,
	MATERIAL_BRONZE,
	MATERIAL_COPPER,
	MATERIAL_GOLD,
	MATERIAL_SILVER,
	MATERIAL_PLATINUM,
	MATERIAL_COLD_IRON,
	MATERIAL_MITHRAL,
	MATERIAL_ADAMANTINE,
	MATERIAL_DIAMOND,
	MATERIAL_PEARL,
	MATERIAL_GEM,
	MATERIAL_RUBY,
	MATERIAL_OBSIDIAN,
	MATERIAL_IVORY,
	MATERIAL_EMERALD,
	MATERIAL_SAPPHIRE,
	MATERIAL_MARBLE,
	MATERIAL_STONE,
	MATERIAL_ENERGY,
	MATERIAL_PAPER,
	MATERIAL_PLANT,
	MATERIAL_GLASS,
	MATERIAL_BONE,
	MATERIAL_POWDER,
	MATERIAL_OIL,
	MATERIAL_ICE,
	MATERIAL_FLESH,
	MATERIAL_WATER,
	MATERIAL_MAX
} item_materials;

typedef enum
{
	MATERIAL_TYPE_NONE = 0,
	MATERIAL_TYPE_WOOD,
	MATERIAL_TYPE_CLOTH,
	MATERIAL_TYPE_HIDE,
	MATERIAL_TYPE_METAL,
	MATERIAL_TYPE_GEM,
	MATERIAL_TYPE_ROCK,
	MATERIAL_TYPE_FIBER,
	MATERIAL_TYPE_CRYSTAL,
	MATERIAL_TYPE_FLESH,
	MATERIAL_TYPE_LIQUID
} parent_materials;

typedef enum
{
	COMP_NONE = 0,
	COMP_ADDERS_TONGUE,
	COMP_BAT_GUANO,
	COMP_DIAMOND_LARGE, //25,000gp
	COMP_DIAMOND_MEDIUM, //10,000gp
	COMP_DIAMOND_SMALL, //5,000gp
	COMP_DIRT,
	COMP_FEATHERS,
	COMP_BRANCH,
	COMP_ARROWHEAD,
	COMP_FUR,
	COMP_NUT_SHELLS,
	COMP_SAND,
	COMP_SULPHUR,
	COMP_CHARCOAL,
	COMP_METAL_ORE,
	COMP_METAL_INGOT
} component_types;


typedef enum
{
	AFFECT_TO_NONE	=		0,
	AFFECT_TO_CHAR,
	AFFECT_TO_OBJ
} aff_bittypes;


#define SENSE_SIGHT					1
#define SENSE_SMELL					2
#define SENSE_SOUND					3
#define SENSE_TASTE					4
#define SENSE_TOUCH					5

#define DRUNK_SOBER					0
#define DRUNK_TIPSY					1
#define DRUNK_MERRY					2
#define DRUNK_DRUNK					3
#define DRUNK_HAMMERED			4
#define DRUNK_PLASTERED			5
#define DRUNK_TOTALLED			6

/* Determine which BAB/SAVE progression to use - Kregor 11/26/06 */
#define BAB_POOR				 	1
#define BAB_GOOD					2
#define BAB_BEST					3
#define SAVE_LOW					4
#define SAVE_MED					5
#define SAVE_HIGH					6
#define BAB_EPIC					7

/* Determine which mana table to use - Kregor 11/31/06 */
#define MANA_NONE							0
#define MANA_BARD							1
#define MANA_WIZ_PRIEST				2
#define MANA_WARRIOR	 				3
#define MANA_SORCERER	 				4
#define MANA_PRESTIGE	 				5
#define MANA_PRESTIGE_ARC		 	6
#define MANA_PRESTIGE_DIV			7
#define MANA_PRESTIGE_EITHER	8
#define MANA_PRESTIGE_BOTH		9
#define MANA_PREST_ARC_HALF		10
#define MANA_PREST_DIV_HALF		11

/* weapon proficiency flags - set in learned[weaponskill] */
#define WSKILL_PROFICIENT			BV01
#define WSKILL_FOCUS					BV02
#define WSKILL_GREATER_FOCUS	BV03
#define WSKILL_EPIC_FOCUS			BV04
#define WSKILL_SPECIALIZED		BV05
#define WSKILL_GREATER_SPEC		BV06
#define WSKILL_EPIC_SPEC			BV07
#define WSKILL_IMP_CRITICAL		BV08
#define WSKILL_PWR_CRITICAL		BV09
#define WSKILL_DVS_CRITICAL		BV10

#define DR_OR							0
#define DR_AND						1

/*
 * Whether a scribed scroll is arcane or divine, on value[2]
 */
#define SCROLL_ARCANE			0
#define SCROLL_DIVINE			1


/*
	ITEM_CONTAINER value[1]
*/
#define CONT_NONE						0
#define CONT_CLOSEABLE			BV01
#define CONT_PICKPROOF			BV02
#define CONT_CLOSED					BV03
#define CONT_LOCKED					BV04
#define CONT_MAGICAL_LOCK		BV05
#define CONT_BASHPROOF			BV06
#define CONT_WEAK						BV07
#define CONT_STRONG					BV08
#define CONT_EASY_PICK			BV09
#define CONT_HARD_PICK			BV10
#define CONT_AMAZING_PICK		BV11
#define CONT_HOLDING				BV12
#define CONT_KNOCKED				BV13

/*
	ITEM_PORTAL value[2]
*/

#define PORTAL_RANDOM					BV01
#define PORTAL_GOWITH					BV02
#define PORTAL_NOFLEE					BV03	/* Uncoded untill today */
#define PORTAL_STEP_THROUGH		BV04
#define PORTAL_STEP_INTO			BV05
#define PORTAL_RANDOM_AREA		BV06
#define PORTAL_CLOSEABLE			BV07
#define PORTAL_CLOSED					BV08
#define PORTAL_LOCKED					BV08
#define PORTAL_NO_ENTER				BV09
#define PORTAL_PICKPROOF			BV10
#define PORTAL_EASY_PICK			BV11
#define PORTAL_HARD_PICK			BV12
#define PORTAL_AMAZING_PICK		BV13
#define PORTAL_KNOCKED				BV14

/*
	ITEM_FURNITURE value[2]
*/
#define FURN_SLEEP_IN			BV01
#define FURN_SLEEP_ON			BV02
#define FURN_REST_IN			BV03
#define FURN_REST_ON			BV04
#define FURN_SIT_IN				BV05
#define FURN_SIT_ON				BV06
#define FURN_SIT_AT				BV07
#define FURN_STAND_IN			BV08
#define FURN_STAND_ON			BV09
#define FURN_KNEEL_AT			BV10
#define FURN_PLACE_ON			BV11
#define FURN_COVER_10			BV12
#define FURN_COVER_25			BV13
#define FURN_COVER_50			BV14
#define FURN_COVER_TOTAL	BV15

#define ROOM_VNUM_LIMBO				2
#define ROOM_VNUM_JUNK				3
#define ROOM_VNUM_TOTEM				4
#define ROOM_VNUM_DEATH				5
#define ROOM_VNUM_SKILLS			10
#define ROOM_VNUM_FEATS				11
#define ROOM_VNUM_DOMAINS			12
#define ROOM_VNUM_HOLDING			99
#define ROOM_VNUM_SCHOOL			3700
#define ROOM_VNUM_TEMPLE			9755
#define ROOM_VNUM_ARENA				10500
#define ROOM_VNUM_ABYSS				12000
#define ROOM_VNUM_CLANHALLS		90000
#define ROOM_VNUM_RIFT				70000
#define ROOM_VNUM_WILDERNESS	99000
#define ROOM_VNUM_HOUSING			990000

/* deprecated room flags */
#define ROOM_BANK						0
#define ROOM_CLAN_DONATION	BV07

#define ROOM_ALTAR					0
#define ROOM_NONE						0
#define ROOM_DARK						BV01
#define ROOM_FOG						BV02
#define ROOM_NO_MOB					BV03
#define ROOM_INDOORS				BV04
#define ROOM_BLACKLIGHT			BV05
#define ROOM_NO_ASTRAL			BV06
#define ROOM_CLANSTOREROOM	BV07
#define ROOM_SWARM					BV08
#define ROOM_NO_MAGIC				BV09
#define ROOM_PRIVATE				BV10
#define ROOM_SAFE						BV11
#define ROOM_SOLITARY				BV12
#define ROOM_PET_SHOP				BV13
#define ROOM_NO_RECALL			BV14
#define ROOM_RIP						BV15
#define ROOM_BLOCK					BV16
#define ROOM_NO_SAVE				BV17
#define ROOM_MORGUE					BV18
#define ROOM_INN						BV19
#define ROOM_NOFLOOR				BV20
#define ROOM_NOSCRY					BV21
#define ROOM_NO_COVER				BV22
#define ROOM_ENTANGLE				BV23
#define ROOM_DAYLIGHT				BV24
#define ROOM_LIGHT					BV25
#define ROOM_NO_AIR					BV26
#define ROOM_CLANHALL				BV27
#define ROOM_AUDIENCE				BV28
#define ROOM_NOTE_BOARD			BV29
#define ROOM_AVAILABLE1			BV30
#define ROOM_NO_RIP					BV31
#define ROOM_MAZE						BV32
#define ROOM_ICE						BV33
#define ROOM_DYNAMIC				BV34
#define ROOM_WILDERNESS			BV35
#define ROOM_HASH						BV36
#define ROOM_NOT_VALID			BV37

typedef enum
{
	DIR_NORTH = 0,
	DIR_EAST,
	DIR_SOUTH,
	DIR_WEST,
	DIR_UP,
	DIR_DOWN
} dir_bits;

typedef enum
{
	SPEED_HALF = 0,
	SPEED_NORMAL,
	SPEED_HUSTLE,
	SPEED_RUN,
	SPEED_HASTE,
	SPEED_BLAZE
} move_speed_flags;

#define EX_NONE						0
#define EX_ISDOOR					BV01
#define EX_CLOSED					BV02
#define EX_LOCKED					BV03
#define EX_HIDDEN					BV04
#define EX_RIP						BV05
#define EX_PICKPROOF			BV06
#define EX_BASHPROOF			BV07
#define EX_MAGICPROOF			BV08
#define EX_BASHED					BV09
#define EX_CLIMB					BV10
#define EX_FLY						BV11
#define EX_BARRED					BV12
#define EX_PASSPROOF			BV13
#define EX_MAGICAL_LOCK		BV14
#define EX_EASY_PICK			BV15
#define EX_HARD_PICK			BV16
#define EX_AMAZING_PICK		BV17
#define EX_WEAK_DOOR			BV18
#define EX_HEAVY_DOOR			BV19
#define EX_IRON_DOOR			BV20
#define EX_JUMP						BV21
#define EX_KNOCKED				BV22
#define EX_WINDOW					BV23

typedef enum
{
	SECT_INSIDE		=		0,
	SECT_CITY,
	SECT_FIELD,
	SECT_FOREST,
	SECT_HILLS,
	SECT_MOUNTAIN,
	SECT_LAKE,
	SECT_RIVER,
	SECT_OCEAN,
	SECT_AIR,
	SECT_DESERT,
	SECT_LAVA,
	SECT_ETHEREAL,
	SECT_ASTRAL,
	SECT_UNDER_WATER,
	SECT_UNDER_GROUND,
	SECT_DEEP_EARTH,
	SECT_ROAD,
	SECT_SWAMP,
	SECT_BEACH,
	SECT_TUNDRA,
	SECT_BARREN,
	SECT_MAX
} sect_flags;

#define COND_DRUNK				0
#define COND_FULL					1
#define COND_THIRST				2
#define COND_AIR					3

typedef enum
{
	POS_DEAD		=		0,
	POS_MORTAL,
	POS_INCAP,
	POS_STUNNED,
	POS_SLEEPING,
	POS_RESTING,
	POS_SITTING,
	POS_KNEELING,
	POS_CROUCHING,
	POS_FIGHTING,
	POS_STANDING
} position_flags;

typedef enum
{
	ENCUMBERED = 1,
	VERY_ENCUMBERED,
	OVERLOADED
} encumberance_flags;

#define ACCT_DENIED				BV01

#define PVNUM_SILENCED		BV01
#define PVNUM_DENIED			BV02
#define PVNUM_MUTED				BV03
#define PVNUM_FROZEN			BV04
#define PVNUM_LOGGED			BV05
#define PVNUM_ARRESTED		BV06
#define PVNUM_DELETED			BV07
#define PVNUM_AUTH_NAME		BV09	/* Name must be authed */
#define PVNUM_AUTH_ADJ		BV10	/* Adjective must be authed */
#define PVNUM_AUTH_DESC		BV11	/* Desc must be authed */
#define PVNUM_CHNG_NAME		BV12	/* Name must be changed */
#define PVNUM_CHNG_ADJ		BV13	/* Adjective must be changed */
#define PVNUM_CHNG_DESC		BV14	/* Desc must be changed */
#define PVNUM_UNAUTHED		PVNUM_AUTH_NAME|PVNUM_AUTH_ADJ|PVNUM_AUTH_DESC|PVNUM_CHNG_NAME|PVNUM_CHNG_ADJ|PVNUM_CHNG_DESC

#define PLR_SEARCH				BV01	/* Allows self to be searched */
#define PLR_EXP_TO_LEVEL	BV03
#define PLR_AUTOEXIT			BV04
#define PLR_DEAD					BV05	/* Dead and in limbo */
#define PLR_BUILDWALK			BV06  /* Walk a direction to create a room. */
#define PLR_BLANK					BV07
#define PLR_BRIEF					BV08
#define PLR_REPEAT				BV09
#define PLR_SOULBIND			BV10 /* Affected by Soul Bind */
#define PLR_HOLYLIGHT			BV13
#define PLR_WIZINVIS			BV14
#define PLR_WIZTIME				BV15
#define PLR_OUTCAST				BV17
#define PLR_WIZCLOAK			BV19
#define PLR_THIEF					BV23
#define PLR_KILLER				BV24
#define PLR_DAMAGE				BV25
#define PLR_AUTO_SPLIT		BV26
#define PLR_QUIET					BV27
#define PLR_PAGER					BV28
#define PLR_AFK						BV31
#define PLR_HEARLOG				BV34
#define PLR_BUILDLIGHT		BV35

#define	SPAM_YOU_HIT					BV01
#define	SPAM_YOU_MISS					BV02
#define	SPAM_THEY_HIT					BV03
#define	SPAM_THEY_MISS				BV04
#define	SPAM_PARTY_HIT				BV05
#define	SPAM_PARTY_MISS				BV06
#define	SPAM_THEY_HIT_PARTY		BV07
#define	SPAM_THEY_MISS_PARTY	BV08
#define	SPAM_OTHER_HIT				BV09
#define	SPAM_OTHER_MISS				BV10
#define	SPAM_DICE_ROLLS				BV11
#define	SPAM_PARTY_MOVE				BV12
#define	SPAM_HEAR_UTTER				BV13

/*
	Channel bits.
*/
#define	CHANNEL_CHAT				BV01
#define	CHANNEL_FOS					BV01
#define	CHANNEL_ALERTS			BV02
#define	CHANNEL_IMMTALK			BV03
#define	CHANNEL_QUESTION		BV04
#define	CHANNEL_LOGSPEECH		BV05
#define	CHANNEL_PLAYER			BV06

typedef enum
{
	CLASS_MONSTER = 0,
	CLASS_BARBARIAN,
	CLASS_BARD,
	CLASS_CLERIC,
	CLASS_DRUID,
	CLASS_FIGHTER,
	CLASS_MONK,
	CLASS_PALADIN,
	CLASS_RANGER,
	CLASS_ROGUE,
	CLASS_SORCERER,
	CLASS_WIZARD,
	CLASS_ARCANE_ARCHER,
	CLASS_ARCANE_TRICKSTER,
	CLASS_ASSASSIN,
	CLASS_BLACKGUARD,
	CLASS_CHEVALIER,
	CLASS_DIVINE_CHAMPION,
	CLASS_DIVINE_TRICKSTER,
	CLASS_DUELIST,
	CLASS_DWARVEN_DEFENDER,
	CLASS_ELDRITCH_KNIGHT,
	CLASS_HALFLING_SLINGER,
	CLASS_LOREMASTER,
	CLASS_MYSTIC_THEURGE,
	CLASS_SHADOW_ADEPT,
	CLASS_SHADOWDANCER,
	CLASS_ADEPT,
	CLASS_NOBLE,
	CLASS_COMMONER,
	CLASS_EXPERT,
	CLASS_WARRIOR,
	MAX_CLASS
} class_flags;

#define MAX_CORE_CLASS			12
#define MAX_PRESTIGE_CLASS	22

typedef enum
{
	RACE_NONE = 0,
	RACE_AASIMAR,
	RACE_ALLIP,
	RACE_ARANEA,
	RACE_DEVA,
	RACE_PLANETAR,
	RACE_SOLAR,
	RACE_ANIMATED_OBJ,
	RACE_ANKHEG,
	RACE_ARCHON_HOUND,
	RACE_ARCHON_LANTERN,
	RACE_ARCHON_TRUMPET,
	RACE_ARROWHAWK,
	RACE_BASILISK,
	RACE_BEHIR,
	RACE_BLINK_DOG,
	RACE_BODAK,
	RACE_BUGBEAR,
	RACE_BULLETTE,
	RACE_CATFOLK,
	RACE_CENTAUR,
	RACE_CHIMERA,
	RACE_CLOAKER,
	RACE_COCKATRICE,
	RACE_COUATL,
	RACE_BABAU,
	RACE_BALOR,
	RACE_BEBLITH,
	RACE_DRETCH,
	RACE_GLABREZU,
	RACE_HEZROU,
	RACE_MARILITH,
	RACE_NALFESHNEE,
	RACE_QUASIT,
	RACE_RETRIEVER,
	RACE_SUCCUBUS,
	RACE_VROCK,
	RACE_DERRO,
	RACE_HAMATULA,
	RACE_BARBAZU,
	RACE_OSYLUTH,
	RACE_KYTON,
	RACE_ERINYES,
	RACE_HELLCAT,
	RACE_CORNUGON,
	RACE_GELUGON,
	RACE_IMP,
	RACE_LEMURE,
	RACE_PIT_FIEND,
	RACE_DIRE_APE,
	RACE_DIRE_BADGER,
	RACE_DIRE_BAT,
	RACE_DIRE_BEAR,
	RACE_DIRE_BOAR,
	RACE_DIRE_LION,
	RACE_DIRE_RAT,
	RACE_DIRE_TIGER,
	RACE_DIRE_WEASEL,
	RACE_DIRE_WOLF,
	RACE_DRAGON,
	RACE_DRAGON_BLACK,
	RACE_DRAGON_BLUE,
	RACE_DRAGON_GREEN,
	RACE_DRAGON_RED,
	RACE_DRAGON_WHITE,
	RACE_DRAGON_BRASS,
	RACE_DRAGON_BRONZE,
	RACE_DRAGON_COPPER,
	RACE_DRAGON_GOLD,
	RACE_DRAGON_SILVER,
	RACE_DRAGONNE,
	RACE_DRIDER,
	RACE_DROW,
	RACE_DRYAD,
	RACE_DUERGAR,
	RACE_DWARF,
	RACE_EAGLE_GIANT,
	RACE_ELEMENTAL_AIR,
	RACE_ELEMENTAL_EARTH,
	RACE_ELEMENTAL_FIRE,
	RACE_ELEMENTAL_WATER,
	RACE_ELF,
	RACE_ELF_AQUATIC,
	RACE_ETTERCAP,
	RACE_ETTIN,
	RACE_FAERIE_DRAGON,
	RACE_GARGOYLE,
	RACE_DJINNI,
	RACE_EFREETI,
	RACE_JANNI,
	RACE_MARID,
	RACE_SHAITAN,
	RACE_GHAST,
	RACE_GHOST,
	RACE_GHOUL,
	RACE_GIANT,
	RACE_GIANT_CLOUD,
	RACE_GIANT_FIRE,
	RACE_GIANT_FROST,
	RACE_GIANT_HILL,
	RACE_GIANT_STONE,
	RACE_GIANT_STORM,
	RACE_GIBBERLING,
	RACE_GNOLL,
	RACE_GNOME,
	RACE_GOBLIN,
	RACE_GOLEM_ADAMANTINE,
	RACE_GOLEM_CLOCKWORK,
	RACE_GOLEM_CLAY,
	RACE_GOLEM_FLESH,
	RACE_GOLEM_GEM,
	RACE_GOLEM_IRON,
	RACE_GOLEM_MITHRIL,
	RACE_GOLEM_STONE,
	RACE_GOLEM_WOOD,
	RACE_GRAY_RENDER,
	RACE_GRICK,
	RACE_GRIG,
	RACE_GRIFFON,
	RACE_HAG_GREEN,
	RACE_HAG_SEA,
	RACE_HALFDROW,
	RACE_HALFELF,
	RACE_HALFLING,
	RACE_HALFORC,
	RACE_HARPY,
	RACE_HELL_HOUND,
	RACE_HIPPOGRIFF,
	RACE_HOBGOBLIN,
	RACE_HOMONCULUS,
	RACE_HYDRA,
	RACE_HUMAN,
	RACE_INTELLECT_DEVOURER,
	RACE_KOBOLD,
	RACE_KRAKEN,
	RACE_KRENSHAR,
	RACE_LAMIA,
	RACE_LAMMASU,
	RACE_LICH,
	RACE_LIZARDMAN,
	RACE_LOCATHAH,
	RACE_MEDUSA,
	RACE_MEPHIT_AIR,
	RACE_MEPHIT_EARTH,
	RACE_MEPHIT_FIRE,
	RACE_MEPHIT_WATER,
	RACE_MEPHIT,
	RACE_MERFOLK,
	RACE_MINOTAUR,
	RACE_MUMMY,
	RACE_NAGA_GUARDIAN,
	RACE_NAGA_SPIRIT,
	RACE_NAGA_WATER,
	RACE_NIGHT_HAG,
	RACE_NIGHTMARE,
	RACE_NIXIE,
	RACE_NYMPH,
	RACE_OGRE,
	RACE_OGRE_MAGE,
	RACE_ORC,
	RACE_OTYUGH,
	RACE_OWLBEAR,
	RACE_PEGASUS,
	RACE_PHASE_SPIDER,
	RACE_PLANETOUCHED_AIR,
	RACE_PLANETOUCHED_EARTH,
	RACE_PLANETOUCHED_FIRE,
	RACE_PLANETOUCHED_SHADOW,
	RACE_PLANETOUCHED_WATER,
	RACE_PSEUDODRAGON,
	RACE_PURPLE_WORM,
	RACE_PIXIE,
	RACE_RAKSHASA,
	RACE_RATKIN,
	RACE_REDCAP,
	RACE_REMORHAZ,
	RACE_REVENANT,
	RACE_ROC,
	RACE_ROPER,
	RACE_RUST_MONSTER,
	RACE_SAHUAGIN,
	RACE_SALAMANDER,
	RACE_SATYR,
	RACE_SCORPIONFOLK,
	RACE_SERPENTFOLK,
	RACE_SHADE,
	RACE_SHADOW_MASTIFF,
	RACE_SHAMBLING_MOUND,
	RACE_SKELETON,
	RACE_SPECTRE,
	RACE_ANDROSPHYNX,
	RACE_CRIOSPHYNX,
	RACE_GYNOSPHYNX,
	RACE_HEIRACOSPHYNX,
	RACE_STIRGE,
	RACE_SVIRFNEBLIN,
	RACE_SWARM_BATS,
	RACE_SWARM_CENTIPEDES,
	RACE_SWARM_WASPS,
	RACE_SWARM_LOCUSTS,
	RACE_SWARM_RATS,
	RACE_SWARM_SPIDERS,
	RACE_TARRASQUE,
	RACE_THOQQUA,
	RACE_TIEFLING,
	RACE_TITAN,
	RACE_TREANT,
	RACE_TRITON,
	RACE_TROGLODYTE,
	RACE_TROLL,
	RACE_UNICORN,
	RACE_VAMPIRE,
	RACE_WEREBEAR,
	RACE_WEREBOAR,
	RACE_WERERAT,
	RACE_WERETIGER,
	RACE_WEREWOLF,
	RACE_WIGHT,
	RACE_WILLOWISP,
	RACE_WINTER_WOLF,
	RACE_WORG,
	RACE_WRAITH,
	RACE_WYVERN,
	RACE_XORN,
	RACE_ZOMBIE,
	RACE_ZOMBIE_ANIMAL,

	RACE_BLACK_PUDDING,
	RACE_GELATINOUS_CUBE,
	RACE_GRAY_OOZE,
	RACE_GREEN_SLIME,
	RACE_OCHRE_JELLY,
	RACE_VIOLET_FUNGUS,

	RACE_APE,
	RACE_BABOON,
	RACE_BADGER,
	RACE_BAT,
	RACE_BEAR,
	RACE_BIRD,
	RACE_BISON,
	RACE_BOAR,
	RACE_CAMEL,
	RACE_CAT,
	RACE_CHEETAH,
	RACE_CROCODILE,
	RACE_DOG,
	RACE_DONKEY,
	RACE_EAGLE,
	RACE_ELEPHANT,
	RACE_FISH,
	RACE_FOX,
	RACE_HAWK,
	RACE_HORSE,
	RACE_HYENA,
	RACE_LEOPARD,
	RACE_LION,
	RACE_LIZARD,
	RACE_MONKEY,
	RACE_OCTOPUS,
	RACE_OWL,
	RACE_PONY,
	RACE_PORPOISE,
	RACE_RODENT,
	RACE_RHINO,
	RACE_SHARK,
	RACE_SNAKE_PYTHON,
	RACE_SNAKE_VIPER,
	RACE_SNAKE,
	RACE_TIGER,
	RACE_TOAD,
	RACE_WEASEL,
	RACE_WHALE,
	RACE_WOLF,
	RACE_WOLVERINE,

	RACE_GIANT_ANT,
	RACE_GIANT_BEE,
	RACE_BOMB_BEETLE,
	RACE_FIRE_BEETLE,
	RACE_STAG_BEETLE,
	RACE_GIANT_WASP,
	RACE_GIANT_CENTIPEDE,
	RACE_GIANT_SCORPION,
	RACE_GIANT_SPIDER,
	MAX_RACE
} race_flags;

#define SIZE_FINE					1
#define SIZE_DIMINUTIVE		2
#define SIZE_TINY					3
#define SIZE_SMALL				4
#define SIZE_MEDIUM				5
#define SIZE_LARGE				6
#define SIZE_HUGE					7
#define SIZE_GARGANTUAN		8
#define SIZE_COLOSSAL			9

typedef enum
{
	DAGE_WYRMLING = 0,
	DAGE_VERY_YOUNG,
	DAGE_YOUNG,
	DAGE_JUVENILLE,
	DAGE_YOUNG_ADULT,
	DAGE_ADULT,
	DAGE_MATURE_ADULT,
	DAGE_OLD,
	DAGE_VERY_OLD,
	DAGE_ANCIENT,
	DAGE_WYRM,
	DAGE_GREAT_WYRM
} dragon_ages;

#define ALIGN_GOOD				1000
#define ALIGN_EVIL				-1000
#define ALIGN_NEUTRAL			0

#define ETHOS_LAWFUL			1000
#define ETHOS_CHAOTIC			-1000
#define ETHOS_NEUTRAL			0

#define RTYPE_NONE						0
#define RTYPE_ABERRATION			1
#define RTYPE_ANIMAL					2
#define RTYPE_CONSTRUCT				3
#define RTYPE_DRAGON					4
#define RTYPE_FEY							5
#define RTYPE_HUMANOID				6
#define RTYPE_MAGICAL					7
#define RTYPE_MONSTROUS				8
#define RTYPE_OOZE						9
#define RTYPE_OUTSIDER				10
#define RTYPE_PLANT						11
#define RTYPE_UNDEAD					12
#define RTYPE_VERMIN					13
#define RTYPE_MAX							14

#define RSPEC_NONE						0
#define RSPEC_AIR							BV01
#define RSPEC_ANGEL						BV02
#define RSPEC_AQUATIC					BV03
#define RSPEC_ARCHON					BV04
#define RSPEC_CHAOTIC					BV05
#define RSPEC_COLD						BV06
#define RSPEC_DEMON						BV07
#define RSPEC_DEVIL						BV08
#define RSPEC_DROW						BV09
#define RSPEC_DWARF						BV10
#define RSPEC_EARTH						BV11
#define RSPEC_ELEMENTAL				BV12
#define RSPEC_ELF							BV13
#define RSPEC_EVIL						BV14
#define RSPEC_EXTRAPLANAR			BV15
#define RSPEC_FIRE				 		BV16
#define RSPEC_GIANT						BV17
#define RSPEC_GNOLL						BV18
#define RSPEC_GNOME						BV19
#define RSPEC_GOBLINOID				BV20
#define RSPEC_GOOD						BV21
#define RSPEC_HALFLING				BV22
#define RSPEC_HUMAN						BV23
#define RSPEC_INCORPOREAL			BV24
#define RSPEC_LAWFUL					BV25
#define RSPEC_NATIVE					BV26
#define RSPEC_ORC							BV27
#define RSPEC_REPTILIAN				BV28
#define RSPEC_SHAPECHANGER		BV29
#define RSPEC_SWARM						BV30
#define RSPEC_WATER						BV31
#define RSPEC_MAX							34


#define WEAPON_SLASH				1
#define WEAPON_CRUSH				2
#define WEAPON_PIERCE				3
#define WEAPON_CRUSH_PIERCE	4
#define WEAPON_PIERCE_SLASH	5
#define WEAPON_ARROW				6
#define WEAPON_BOLT					7
#define WEAPON_BULLET				8

#define WEAPON_CLASS_SIMPLE					1
#define WEAPON_CLASS_MARTIAL				2
#define WEAPON_CLASS_EXOTIC					3

typedef enum
{
	 TRADE_CRAFT_NONE	=	0,
	 TRADE_CRAFT_WEAPON,
	 TRADE_CRAFT_BOW,
	 TRADE_CRAFT_LEATHER
} craft_trade_bits;

typedef enum
{
	 WEAPON_TYPE_WEAPON	=	0,
	 WEAPON_TYPE_KNIFE,
	 WEAPON_TYPE_DAGGER,
	 WEAPON_TYPE_MACE_LIGHT,
	 WEAPON_TYPE_SICKLE,
	 WEAPON_TYPE_CLUB,
	 WEAPON_TYPE_MACE_HEAVY,
	 WEAPON_TYPE_MORNINGSTAR,
	 WEAPON_TYPE_SHORTSPEAR,
	 WEAPON_TYPE_LONGSPEAR,
	 WEAPON_TYPE_QUARTERSTAFF,
	 WEAPON_TYPE_SPEAR,
	 WEAPON_TYPE_CROSSBOW_HEAVY,
	 WEAPON_TYPE_CROSSBOW_LIGHT,
	 WEAPON_TYPE_DART,
	 WEAPON_TYPE_JAVELIN,
	 WEAPON_TYPE_SLING,
	 WEAPON_TYPE_AXE_THROWING,
	 WEAPON_TYPE_HAMMER_LIGHT,
	 WEAPON_TYPE_HANDAXE,
	 WEAPON_TYPE_KUKRI,
	 WEAPON_TYPE_PICK_LIGHT,
	 WEAPON_TYPE_SAP,
	 WEAPON_TYPE_SWORD_SHORT,
	 WEAPON_TYPE_BATTLEAXE,
	 WEAPON_TYPE_FLAIL,
	 WEAPON_TYPE_SWORD_LONG,
	 WEAPON_TYPE_PICK_HEAVY,
	 WEAPON_TYPE_RAPIER,
	 WEAPON_TYPE_SCIMITAR,
	 WEAPON_TYPE_TRIDENT,
	 WEAPON_TYPE_WARHAMMER,
	 WEAPON_TYPE_FALCHION,
	 WEAPON_TYPE_GLAIVE,
	 WEAPON_TYPE_GREATAXE,
	 WEAPON_TYPE_GREATCLUB,
	 WEAPON_TYPE_FLAIL_HEAVY,
	 WEAPON_TYPE_GREATSWORD,
	 WEAPON_TYPE_GUISARME,
	 WEAPON_TYPE_HALBERD,
	 WEAPON_TYPE_LANCE,
	 WEAPON_TYPE_RANSEUR,
	 WEAPON_TYPE_SCYTHE,
	 WEAPON_TYPE_LONGBOW,
	 WEAPON_TYPE_LONGBOW_COMPOSITE,
	 WEAPON_TYPE_SHORTBOW,
	 WEAPON_TYPE_SHORTBOW_COMPOSITE,
	 WEAPON_TYPE_KAMA,
	 WEAPON_TYPE_NUNCHAKU,
	 WEAPON_TYPE_SAI,
	 WEAPON_TYPE_SIANGHAM,
	 WEAPON_TYPE_SWORD_BASTARD,
	 WEAPON_TYPE_WARAXE_DWARVEN,
	 WEAPON_TYPE_ELVEN_THINBLADE,
	 WEAPON_TYPE_WHIP,
	 WEAPON_TYPE_AXE_DOUBLE,
	 WEAPON_TYPE_CHAIN_SPIKED,
	 WEAPON_TYPE_FLAIL_DIRE,
	 WEAPON_TYPE_SWORD_TWO_BLADED,
	 WEAPON_TYPE_URGROSH_DWARVEN,
	 WEAPON_TYPE_BOLA,
	 WEAPON_TYPE_CROSSBOW_HAND,
	 WEAPON_TYPE_CHAKRAM,
	 WEAPON_TYPE_SHURIKEN,
	 WEAPON_TYPE_MAX
} weapon_type_bits;

#define WSPEC_LIGHT						BV01
#define WSPEC_MISSILE					BV02
#define WSPEC_DOUBLE					BV03
#define WSPEC_THROW						BV04
#define WSPEC_BLADED					BV05
#define WSPEC_METAL_HAFTED		BV06
#define WSPEC_WOODEN_HAFTED		BV07
#define WSPEC_MONK						BV08
#define WSPEC_DISARM					BV09
#define WSPEC_TRIP						BV10
#define WSPEC_REACH						BV11
#define WSPEC_NONLETHAL				BV12
#define WSPEC_FINESSE					BV13
#define WSPEC_NOMELEE					BV14
#define WSPEC_RETURNING				BV15

#define ARMOR_NONE			0
#define ARMOR_LIGHT			1
#define ARMOR_MEDIUM		2
#define ARMOR_HEAVY			3

typedef enum
{
	ARMOR_TYPE_CLOTH = 0,
	ARMOR_TYPE_PADDED,
	ARMOR_TYPE_LEATHER,
	ARMOR_TYPE_STUDDED_LEATHER,
	ARMOR_TYPE_ELVEN_CHAIN,
	ARMOR_TYPE_HIDE,
	ARMOR_TYPE_SCALE_MAIL,
	ARMOR_TYPE_CHAINMAIL,
	ARMOR_TYPE_SPLINT_MAIL,
	ARMOR_TYPE_BANDED_MAIL,
	ARMOR_TYPE_FULL_PLATE,
	ARMOR_TYPE_BUCKLER,
	ARMOR_TYPE_LIGHT_SHIELD,
	ARMOR_TYPE_HEAVY_SHIELD,
	ARMOR_TYPE_TOWER_SHIELD,
	MAX_ARMOR_TYPE
} armor_bitvector;

#define FSKILL_NONE						0
#define FSKILL_SKILL					1
#define FSKILL_SPELL					2
#define FSKILL_FEAT						3
#define FSKILL_ABILITY				4
#define FSKILL_WEAPON					5
#define FSKILL_CRAFT					6
#define FSKILL_KNOWLEDGE			7
#define FSKILL_RACEATTACK			8
#define FSKILL_COMMAND				9
#define FSKILL_BARDSONG				10

#define CASTING_INSTANT			0
#define CASTING_SWIFT				2
#define CASTING_STANDARD		8
#define CASTING_ROUND				12
#define CASTING_TURN				120

#define FEAT_NONE						0
#define FEAT_METAMAGIC			BV01
#define FEAT_GENERAL				BV02
#define FEAT_CREATION				BV03
#define FEAT_COMBAT					BV04
#define FEAT_FIGHTER				BV05
#define FEAT_ROGUE					BV06
#define FEAT_ADVANCED				BV07
#define FEAT_MONK_STYLE			BV08
#define FEAT_RANGER_STYLE		BV09
#define FEAT_PALADIN				BV10
#define FEAT_WIZARD					BV11
#define FEAT_SORCERER_BLOODLINE			BV12
#define FEAT_WIZARD_SCHOOL	BV13

#define SF_NONE						0
#define SF_VERBAL					BV01
#define SF_SOMATIC				BV02
#define SF_NONCOMBAT			BV03
#define SF_FOCUS					BV04
#define SF_DIVINEFOCUS		BV05
#define SF_PERSONAL				BV06
#define SF_TOUCH					BV07
#define SF_CLOSE_RANGE		BV08
#define SF_MEDIUM_RANGE		BV09
#define SF_LONG_RANGE			BV10
#define SF_INFINITE				BV11
#define SF_INSTANT				BV12
#define SF_PERMANENCY			BV13
#define SF_SCALABLE				BV14
#define SF_DISMISSABLE		BV15
#define SF_NOVARIABLE			BV16
#define SF_RADIUS					BV17
#define SF_RANGED_TOUCH		BV18
#define SF_AREA_CONE			BV19
#define SF_AREA_BLAST			BV20
#define SF_AREA_LINE			BV21
#define SF_ENEMIES				BV22
#define SF_GROUP					BV23
#define SF_NO_RESIST			BV24
#define SF_EXTRAORDINARY	BV25
#define SF_SUPERNATURAL		BV26
#define SF_NOCORPSE				BV27
#define SF_SPELL_LIKE			BV28
#define SF_LANGUAGE				BV29
#define SF_AUDIBLE				BV30
#define SF_VISUAL					BV31

typedef enum
{
	SAVE_NONE					=	0,
	SAVE_FORT_HALF,
	SAVE_FORT_NONE,
	SAVE_REFL_HALF,
	SAVE_REFL_NONE,
	SAVE_WILL_HALF,
	SAVE_WILL_NONE,
	SAVE_FORT_QUARTER,
	SAVE_WILL_QUARTER,
	SAVE_REFL_QUARTER
} save_types;

#define METAMAGIC_NONE			   0
#define METAMAGIC_EMPOWER		BV01
#define METAMAGIC_ENLARGE		BV02
#define METAMAGIC_EXTEND		BV03
#define METAMAGIC_MAXIMIZE	BV04
#define METAMAGIC_QUICKEN		BV05
#define METAMAGIC_SILENT		BV06
#define METAMAGIC_STILL			BV07
#define METAMAGIC_MERCIFUL	BV08
#define METAMAGIC_DISGUISE	BV09
#define METAMAGIC_ENHANCE		BV10
#define METAMAGIC_PERSIST		BV11
#define METAMAGIC_REACH			BV12
#define METAMAGIC_REPEAT		BV13
#define METAMAGIC_SACRED		BV14

#define COMBAT_NONE			 			 0
#define COMBAT_FLURRY				BV01
#define COMBAT_MANYSHOT	 		BV02
#define COMBAT_RAPIDSHOT		BV03
#define COMBAT_SHIELDBASH		BV04
#define COMBAT_LETHAL	 			BV05
#define COMBAT_NONLETHAL		BV06
#define COMBAT_POWER 				BV07
#define COMBAT_DEFENSIVE		BV08
#define COMBAT_CALLED				BV09
#define COMBAT_UNDEFINED		BV10
#define COMBAT_ARTERIAL			BV11
#define COMBAT_CRIPPLE			BV12

#define SCHOOL_NONE						0
#define SCHOOL_UNIVERSAL			0
#define SCHOOL_ABJURATION			1
#define SCHOOL_CONJURATION		2
#define SCHOOL_DIVINATION			3
#define SCHOOL_ENCHANTMENT		4
#define SCHOOL_EVOCATION			5
#define SCHOOL_ILLUSION				6
#define SCHOOL_NECROMANCY			7
#define SCHOOL_TRANSMUTATION	8
#define SCHOOL_MAX						9

typedef enum
{
	BLOODLINE_NONE = 0,
	BLOODLINE_ABERRANT,
	BLOODLINE_ABYSSAL,
	BLOODLINE_AIR,
	BLOODLINE_ARCANE,
	BLOODLINE_CELESTIAL,
	BLOODLINE_DESTINED,
	BLOODLINE_DRACONIC,
	BLOODLINE_EARTH,
	BLOODLINE_FEY,
	BLOODLINE_FIRE,
	BLOODLINE_INFERNAL,
	BLOODLINE_WATER,
	BLOODLINE_UNDEAD,
	BLOODLINE_MAX
}
bloodline_flags;

/* Support for combat styles */
typedef enum
{
	STYLE_NONE = 0,
	STYLE_MELEE,
	STYLE_ARCHERY,
	STYLE_HORSEBACK,
	STYLE_SKIRMISHING,
	STYLE_STRONGARM,
	STYLE_THROWING,
	STYLE_COBRA_STRIKE,
	STYLE_DENYING_STANCE,
	STYLE_HAND_AND_FOOT,
	STYLE_INVISIBLE_EYE,
	STYLE_PASSIVE_WAY,
	STYLE_SLEEPING_TIGER,
	STYLE_UNDYING_WAY,
	STYLE_MAX
}
combat_style_flags;

#define ROOM_TIMER_SANCTIFY			0
#define ROOM_TIMER_SMOKE				1
#define ROOM_TIMER_BLACKLIGHT		2
#define ROOM_TIMER_BLOCK				3
#define ROOM_TIMER_ICE					4
#define ROOM_TIMER_UNBLOCK			5

typedef enum
{
	DIS_NONE,
	DIS_BLINDING_SICKNESS,
	DIS_CACKLE_FEVER,
	DIS_DEMON_FEVER,
	DIS_DEVIL_CHILLS,
	DIS_FILTH_FEVER,
	DIS_GHOUL_FEVER,
	DIS_MIND_FIRE,
	DIS_MUMMY_ROT,
	DIS_RED_ACHE,
	DIS_THE_SHAKES,
	DIS_SLIMY_DOOM,
	MAX_DISEASE
} disease_bitvectors;

typedef enum
{
	POISON_NONE = 0,
	POISON_NITHARIT,
	POISON_SASSONE_LEAF,
	POISON_MALYSS_ROOT,
	POISON_TERINAV_ROOT,
	POISON_BLACK_LOTUS,
	POISON_DRAGON_BILE,
	POISON_TOADSTOOL,
	POISON_ARSENIC,
	POISON_ID_MOSS,
	POISON_LICH_DUST,
	POISON_UNGOL_DUST,
	POISON_INSANITY_MIST,
	POISON_BLACK_ADDER,
	POISON_CENTIPEDE,
	POISON_BLOODROOT,
	POISON_SPIDER,
	POISON_WYVERN,
	POISON_SCORPION,
	POISON_GIANT_WASP,
	POISON_DEATHBLADE,
	POISON_PURPLE_WORM,
	POISON_SLEEP_POISON,
	MAX_POISON
} poison_types;

#define	POISON_TYPE_CONTACT		1
#define	POISON_TYPE_INGEST		2
#define	POISON_TYPE_INHALE		3
#define	POISON_TYPE_INJURY		4

/*
 * struct for monk bonuses
 */
struct monk_type 
{
   short flurry_mod;
   short damnodice;
   short damsizedice;
};

/*
 * Spell point structures - Kregor
 */
struct mana_type
{
   short nospells;
   short bardspells;
   short wizspells;
   short warspells;
   short sorspells;
   short prcspells;
};

struct slot_bonus_type
{
	sh_int	bonus[10];			/* spell slot bonus, pri_stat vs. spell level	*/
};

struct spell_level_type
{
	sh_int	spell_level[10];			/* spell slot tables	*/
};

struct warrior_spell_type
{
	sh_int	spell_level[5];			/* spells per day - Warrior	*/
};

struct bard_spell_type
{
	sh_int	spell_level[7];			/* Spells known - Bards	*/
};

struct max_spell_type
{
	sh_int	class[MAX_CLASS];			/* Max spell level learnable by class and level	*/
};

struct ingredient_type
{
	sh_int	ingredient[5];			/* ingredients for crafting	*/
};

/*
	Prototype for a mob.
*/

struct mob_index_data
{
	SPEC_FUN			*	spec_fun;
	SHOP_DATA			*	pShop;
	STABLE_DATA		*	pStable;
	INN_DATA			*	pInn;
	AREA_DATA			* area;
	MPROG_DATA		*	first_prog;
	MPROG_DATA		*	last_prog;
	CHAR_DATA			*	first_instance;
	CHAR_DATA			*	last_instance;
	AFFECT_DATA		*	first_affect;
	AFFECT_DATA		*	last_affect;
	EXTRA_DESCR_DATA	*	first_extradesc;
	EXTRA_DESCR_DATA	*	last_extradesc;
	lg_int				progtypes;
	char					*	player_name;
	char					*	short_descr;
	char 					*	long_descr;
	char 					*	description;
	char 					*	reset_msg;
	lg_int				act;
	lg_int				affected_by;
	lg_int				affected2_by;
	int						vnum;
	int						gold;
	int						speaks;						/* native language */
	int						understands;			/* known languages */
	lg_int				wear_locs;				/* wear locs for custom race mobiles */
	int						race_type;				/* race type for unique mobiles */
	lg_int				rspecs;						/* subtypes/rspecs for unique mobiles */		
	int						body_type;				/* body type for unique mobiles */
	int						creator_pvnum;
	sh_int				total_mobiles;
	sh_int				level;
	sh_int				alignment;
	sh_int				ethos;
	sh_int				hitnodice;
	sh_int				hitsizedice;
	int						hitplus;
	bool					sex;
	bool					class;
	bool					position;
	int						race;
	bool					unique;
	int						load_eq[MAX_WEAR];
	sh_int				mclass[MAX_CLASS];
	sh_int				learned[MAX_SKILL];
	sh_int				attacks[ATTK_MAX];/* attack parts for custom race NPCs */
	sh_int				perm_str;
	sh_int				perm_int;
	sh_int				perm_wis;
	sh_int				perm_dex;
	sh_int				perm_con;
	sh_int				perm_cha;
	sh_int				nat_armor;
	sh_int				armor_type;
	sh_int				god;
	sh_int				size;
};


/*
	One character (PC or NPC).
*/

struct char_data
{
	CHAR_DATA			*	next;
	CHAR_DATA			*	prev;
	CHAR_DATA			*	next_in_room;
	CHAR_DATA			*	prev_in_room;
	CHAR_DATA			*	next_instance;
	CHAR_DATA			*	prev_instance;
	CHAR_DATA			*	next_in_battle;
	CHAR_DATA			*	fighting;
	CHAR_DATA			*	last_attacked; /* last hit by char */
	CHAR_DATA			*	last_attacker; /* last to hit char in combat */
	CHAR_DATA			*	tracked_by;
	CHAR_DATA			*	grappling;
	CHAR_DATA			*	grappled_by;
	AFFECT_DATA		*	first_affect;
	AFFECT_DATA		*	last_affect;
	OBJ_DATA			*	first_carrying;
	OBJ_DATA			*	last_carrying;
	CHAR_DATA			*	master;
	CHAR_DATA			*	leader;
	SPEC_FUN			*	spec_fun;
	RESET_DATA		*	reset;
	MOB_INDEX_DATA	*	pIndexData;
	DESCRIPTOR_DATA	*	desc;
	ROOM_INDEX_DATA	*	in_room;
	PC_DATA				*	pcdata;
	NPC_DATA			*	npcdata;
	POISON_DATA		*	poison;
	DISEASE_DATA	*	first_disease;
	DISEASE_DATA	*	last_disease;
	COMBAT_DATA		* in_battle;
	TURN_DATA			* turn;
	char 					*	name;
	char 					*	short_descr;
	char 					*	long_descr;
	char 					*	description;
	lg_int				act;
	lg_int				affected_by;
	lg_int				affected2_by;
	int						affected_sn[MAX_SKILL];
	int						critical_hit_by;  /* The PVNUM of the hitter */
	int						gold;
	int						hit;
	int						max_hit;
	int						nonlethal;
	sh_int				mana[MAX_CLASS];
	sh_int				max_mana[MAX_CLASS];
	sh_int				move;
	sh_int				max_move;
	sh_int				level;
	sh_int				lost_levels;
	sh_int				timer;
	sh_int				wait;
	sh_int				carry_weight;
	sh_int				carry_number;
	sh_int				sex;
	bool					class;
	sh_int				mclass[MAX_CLASS];
	int						race;
	bool					position;
	sh_int				alignment;
	sh_int				ethos;
	int						language;
	int						speak;
	int						initiative;
	bool					speed;
	sh_int				height;
	sh_int				weight;
	sh_int				fear_level;			/* 1 = shaken, 2 = frightened, 3+ = panicked */
	sh_int				distracted;			/* used if distracted */
	sh_int				attack_part;		/* body part used on last attack */
	int						severed;				/* severed body parts */
	int						attack;					/* Used to allow 1 disarm, etc.*/
	int						action;					/* Used to limit actions in a round */
	OBJ_DATA			*	furniture;		/* sit/sleep/stand on object */
	OBJ_DATA			*	hitched;			/* cart hitched to */
	CHAR_DATA			*	mounting;			/* pointer to mount if mounted */
	CHAR_DATA 		* assassinate;	/* target of assasination */
	sh_int				asn_count;			/* countdown to assasination */
	int						apply[MAX_APPLY]; /* caches applies from affects to char */
	sh_int				perm_str;
	sh_int				perm_int;
	sh_int				perm_wis;
	sh_int				perm_dex;
	sh_int				perm_con;
	sh_int				perm_cha;
	sh_int				mod_str;
	sh_int				mod_int;
	sh_int				mod_wis;
	sh_int				mod_dex;
	sh_int				mod_con;
	sh_int				mod_cha;
	sh_int				nat_armor;
	sh_int				armor;
	sh_int				dex_max;
	sh_int				armor_type;
	sh_int				god;
	sh_int				size;
	int						rest;
	int						retran;
	int						regoto;
	int						rewalkto;
	int						walkto;
	int						combatmode;					/* fighting styles set */
	int						metamagic;					/* metamagic feats set */
	int						immunity_sdesc;			/* immunities to spell descriptors */
	int						immunity_energy;		/* immunities to damage types */
	int						absorption[MAX_APPLY];	/* ablative protection against dmg */
	int						learned[MAX_SKILL];	/* does char know a skill */
	int						prepared[MAX_SKILL];/* is the spell prepared and in what class */
	int						imbued[MAX_SKILL];	/* is imbued with spell ability */
	int						uses[MAX_SKILL];		/* uses per day of an ability */
	bool					concentrating;			/* is ch using concentration skill? */
	int						skill_timer;				/* concentration timer */
	DO_FUN				* timer_fun;				/* function timed */
	char					* cmd_argument;			/* command argument for concentration */
	bool 					casting;
	int						casting_time;
	int 					cast_timer;
	int 					cast_sn;
	int 					cast_level;
	int						cast_circle;
	int						cast_class;
	int 					cast_dir;
	int						cast_feats;
	char 					* target_name;
	OBJ_DATA			*	reciting;			/* scroll reciting on do_recite */
	bool					reloaded;
};

/*
	Data which only PC's have.
*/

struct pc_data
{
	CLAN_DATA			*	clan;
	HELP_DATA			*	last_help;
	HELP_DATA			*	prev_help;
	CRIME_DATA		*	first_record;	/* the X-Files :P */
	CRIME_DATA		*	last_record;
	OBJ_DATA			*	corpse;			/* Pointer to player's corpse */
	OBJ_DATA			*	cart;				/* Pointer to player's cart */
	TACTICAL_MAP	*	tactical;		/* The recorded tactical map for comparison */
	EDITOR_DATA		*	editor;
	NOTE_DATA			*	pnote;
	CHAR_DATA			*	reply;
	CHAR_DATA			*	shadowing;
	CHAR_DATA			*	shadowed_by;
	CHAR_DATA			*	tracking;
	DO_FUN			*	last_cmd;
	void				*	temp_ptr;
	void				*	edit_ptr;
	int					edit_race;
	int					edit_god;
	int					edit_class;
	char				*	edit_buf;
	char				*	host;
	char				*	account;  /* text of account name */
	char				*	pwd;
	char				*	bamfin;
	char				*	bamfout;
	char				* authed_by;
	char				*	title;
	char				*	adjective;
	char				*	bio;
	char				*	pose;
	char				*	disguise;
	char				*	disguise_descr;
	char				*	alias		[MAX_ALIAS];
	char				*	alias_c		[MAX_ALIAS];
	char				*	mail_address;
	char				*	html_address;
	char				*	clan_name;
	char				*	clan_pledge;
	char				*	back_buf[26];	/* Change to pointer to string mode */
	char				*	page_buf;
	char				*	prompt_layout;	/* For reconfiguration */
	char				*	subprompt;	/* subprompt for OLC*/
	char				*	auto_command;
	char				*	block_list;	/* list of characters to notell/nobeep */
	char				*	last_command;
	char				*	tattoo[MAX_WEAR];
	bool				*	quest[MAX_AREA];
	char				*	last_pk_attack_name[MAX_PK_ATTACKS];
	int					last_pk_attack_time[MAX_PK_ATTACKS];
	int					last_pk_attack_pvnum[MAX_PK_ATTACKS];
	char				scroll_buf[MAX_BUFFER_LENGTH];
	lg_int			password;
	int					version;
	int					a_range_lo;		/* olc vnum range */
	int					a_range_hi;
	int					created;
	int					played;
	int					bounties;
	int					mdeaths;
	int					mkills;
	int					akills;
	int					previous_hours;
	int					killer_played;
	int					outcast_played;
	long				last_connect;
	long				last_time;
	long				last_improve;
	long				last_saved;
	long				last_combat;
	int					topic_stamp	[MAX_TOPIC];
	int					last_note;
	int					note_topic;
	int					just_died_ctr;
	long				time_of_death;
	int					port_size;
	int					pvnum;						/* Player's virtual number   */
	int					corpse_room;			/* The room of the player's corpse */
	int					cart_room;				/* The room of the player's cart */
	int					clan_position;
	int					scroll_start;
	int					scroll_end;
	int					channel;					/* visible communication channels */
	int					domains;					/* cleric domains */
	int					domain[MAX_DOMAIN]; /* cleric domains array */
	int					death_room;
	int					recall;
	int					waypoint[MAX_WAYPOINT];	/* teleport waypoints */
	int					spam;
	int 				tactical_mode;
	int					last_real_room;
	int					was_in_room;
	int					bank;
	long				jailtime;
	int					jaildate;
	int					functions;
	int					clock;
	int					exp;
	int					faith_rank;		/* rank in church heirarchy */
	int					god_favor;		/* divine favor level */
	int					reputation;		/* new reputation mechanic */
	int					familiar;     /* race of familiar */
	sh_int				class_level[MAX_LEVEL];		/* tracks class taken each level */
	sh_int				hit_level[MAX_LEVEL];			/* tracks hitpoints gained each level */
	sh_int				move_level[MAX_LEVEL];			/* tracks move gained each level */
	sh_int				pract_level[MAX_LEVEL];	/* tracks skill points gained each level */
	int						skill_level[MAX_LEVEL][MAX_SKILL];	/* tracks skills/feats/spells gained each level */
	sh_int				vt100;
	sh_int				vt100_type;
	sh_int				vt100_mode;
	sh_int				vt100_flags;
	sh_int				interp;
	sh_int				idle;
	sh_int				condition[4]; /* thirst, hunger, drunk, air */
	sh_int				practice;     /* skill points - legacy merc name */
	sh_int				stat_pts;			/* stat points every 4 pc levels */
	sh_int				feat_pts;			/* feat every 3 pc levels */
	sh_int				bonus_feat[MAX_CLASS];	/* bonus feat points array by class */
	sh_int				bonus_spells;						/* wizard bonus spells/level */
	sh_int				disguise_roll;					/* caches skill roll when disguised */
	sh_int				request;
	sh_int				arrested;
	sh_int				race_enemy[RACE_ENEMY_MAX];	/* Rangers favored enemy */
	int						greeted[MAX_PVNUM];	/* has a PC greeted char or not */
	int						theft_grudge[MAX_VNUM]; /* what NPCs have caught you stealing */
	int						murder_grudge[MAX_VNUM]; /* NPCs you've killed */
	int						found_dir[MAX_VNUM];		/* Hidden exits you know */
	int						found_pvnum[MAX_PVNUM];	/* Hidden PCs you've seen in this room */
	int						found_vnum[MAX_VNUM];	/* Hidden NPCs you've seen this room */
	int						prepared[MAX_SKILL];		/* Prepared spells */
	bool					color[COLOR_MAX];		/* The color array for ANSI */
	bool					editmode;
	bool					edittype;
	bool					tempmode;
	bool					ansi;
	bool					auto_flags;
	bool					compass_width;
	bool					switched;
};

struct pvnum_data
{
	char			*	name;
	time_t			date;
	int				flags;
	CHAR_DATA	*	ch;
};

struct ban_data
{
	BAN_DATA		*	next;
	BAN_DATA		*	prev;
	char			*	name;
	char			*	banned_by;
	time_t			date;
};

struct hiscore_list
{
	HISCORE_DATA	*	last;
	HISCORE_DATA	*	first;
};

struct hiscore_data
{
	HISCORE_DATA	*	next;
	HISCORE_DATA	*	prev;
	char			*	player;
	int				vnum;
	int				score;
};


struct obj_ref_hash
{
	OBJ_DATA		*	first;
	OBJ_DATA		*	last;
};


struct room_timer_data
{
	ROOM_TIMER_DATA	*	next;
	ROOM_TIMER_DATA	*	prev;
	int					vnum;
	int					type;
	int					location;
	int					modifier;
	int					duration;
	int					level;
	lg_int			bitvector;
	char				* caster;
};


struct junk_data
{
	JUNK_DATA			*	next;
	JUNK_DATA			*	prev;
	OBJ_DATA			*	obj;
	CHAR_DATA			*	mob;
};


struct str_hash_data
{
	STR_HASH_DATA		*	next;
	STR_HASH_DATA		*	prev;
	int					links;
	int					hash;
};

struct math_data
{
	MATH_DATA			*	next;
	MATH_DATA			*	prev;
	char				*	str1;
	char				*	str2;
	char				*	str3;
};

#define MAX_TACTICAL_ROW  20
#define MAX_TACTICAL_COL 160

struct tactical_map
{
	unsigned char   map[MAX_TACTICAL_ROW * MAX_TACTICAL_COL];
	unsigned char color[MAX_TACTICAL_ROW * MAX_TACTICAL_COL];
};


struct crime_data
{
	CRIME_DATA 		*	next;
	CRIME_DATA 		*	prev;
	char 					*	crime_record;	/* reason and stuff */
	char					*	arrester;		/* by whom is the player arrested */
	time_t					date;		/* when was this person arrested */
	char					*	releaser;		/* Who released this person ? */
	sh_int				level;		/* level of the arrester */
	int 					jailtime;		/* How long imprisoned ? */
	bool					released;		/* Is the person released ? */
};


struct file_data
{
	FILE_DATA 		*	next;
	FILE_DATA 		*	prev;
	char 			*	filename;
	char 			*	opentype;
	FILE 			*	fp;
};


struct clan_data
{
	CLAN_DATA		*	next;
	CLAN_DATA		*	prev;
	char				*	name;
	char				*	filename;
	char				*	description;
	char				*	motto;
	char				*	leader[5];
	char				*	email;
	int					pkills[5];
	int					pdeaths[5];
	int					mkills;
	int					mdeaths;
	int					tax;
	lg_int			coffers;
	int					members;
	int					home;
	int					store;
	int					last_saved;
	int					founder_pvnum;
	int					num_guards;
	int					num_healers;
	int					num_trainers;
	int					num_banks;
	int					num_morgues;
	int					num_altars;
	int					num_backdoors;
};

#define REQUEST_VT_SAVE_ON		BV01	/* temp turns off vt102	*/
#define REQUEST_ANSI_SAVE_ON		BV02	/* temp turns off ansi	*/


#define AUTO_OFF				0
#define AUTO_AUTO				1
#define AUTO_QUICK			2

#define FUNCTION_NONE			0
#define FUNCTION_BUILDER		BV01
#define FUNCTION_HELPER					BV02
#define FUNCTION_ENFORCER				BV03
#define FUNCTION_GOD						BV04
#define FUNCTION_BETA_TESTER		BV05
#define FUNCTION_DEVELOPER			BV06
#define FUNCTION_SECRET_AGENT		BV07 /* a cop, of which only the god can see it's one */


/*
	Data which only NPC's have.
*/


struct mob_prog_data
{
	MPROG_DATA		*	next;
	MPROG_DATA		*	prev;
	NPC_TOKEN			*	first_token;
	NPC_TOKEN			*	last_token;
	lg_int				type;
	char					flags;
	char					*	arglist;
	char					*	comlist;
};


struct mob_prog_token
{
	NPC_TOKEN			*	next;
	NPC_TOKEN			*	prev;
	bool					type;
	char					*	string;
	sh_int				value;	/* value of command/social table */
	void					*	function;	/* Which do_fun to use */
	bool					level;	/* The functional IF level */
};

/*
	The following structure is set up so that individual monsters may have
	different stats     -  Chaos 5/25/94
*/

struct npc_data
{
	unsigned char	*	mob_quest;
	char 					*	remember;
	CHAR_DATA			* prog_char;	/* ch intercepted with prog */
	char					* prog_cmd;		/* intercepted command */
	int						pvnum_last_hit;
	sh_int				armor_type;   /* set default armor worn */
	sh_int				sac_timer;
	int						hate_fear;    /* pvnum of hated player */
	char					* sac_string;
	bool					delay_index;
	bool					mob_prog_nest;
	bool					mloaded;      /* loaded by prog */
};

/*
	clanhall costs
*/
#define CLANHALL_CONSTRUCTION 150000000
#define CLANHALL_FLAG		 			100000000

#define RENT_BASIC_CLAN_HALL	25000000
#define RENT_BASIC_ORDER_HALL	25000000
#define RENT_PER_GUARD		  	1000000
#define RENT_PER_HEALER		  	2000000
#define RENT_PER_TRAINER		  1000000
#define RENT_PER_BANK		   		2500000
#define RENT_PER_MORGUE		  	1500000
#define RENT_PER_ALTAR		  	2500000
#define RENT_PER_BACKDOOR	 		5000000

#define ERROR_PROG				-1
#define ACT_PROG					BV01
#define SPEECH_PROG				BV02
#define RAND_PROG					BV03
#define FIGHT_PROG				BV04
#define DEATH_PROG				BV05
#define HITPRCNT_PROG			BV06
#define ENTRY_PROG				BV07
#define GREET_PROG				BV08
#define DO_GREET_PROG			BV09
#define GIVE_PROG					BV10
#define BRIBE_PROG				BV11
#define RANGE_PROG				BV12
#define SOCIAL_PROG				BV13
#define KILL_PROG					BV14
#define GROUP_GREET_PROG	BV15
#define TIME_PROG					BV16
#define REPOP_PROG				BV17
#define DELAY_PROG				BV18
#define EXIT_PROG					BV19
#define TRIGGER_PROG			BV20
#define DESC_PROG					BV21
#define MONTH_PROG				BV22
#define DAY_PROG					BV23
#define INTERCEPT_PROG		BV24
#define WEAR_PROG					BV25
#define REMOVE_PROG				BV26
#define USE_PROG					BV27
#define SAC_PROG					BV28
#define GET_PROG					BV29
#define DROP_PROG					BV30
#define DAMAGE_PROG				BV31
#define HIT_PROG					BV32
#define ARRIVAL_PROG			BV33
#define BUY_PROG					BV34
#define SAYTO_PROG				BV35
#define CAST_PROG					BV36
#define TRAP_PROG					BV37

#define MPTRIGGER_RAND_PLR	BV01


#define MPTOKEN_UNKNOWN		0
#define MPTOKEN_SOCIAL		1
#define MPTOKEN_COMMAND		2
#define MPTOKEN_IF				3
#define MPTOKEN_OR				4
#define MPTOKEN_ELSE			5
#define MPTOKEN_ENDIF			6
#define MPTOKEN_BREAK			7
#define MPTOKEN_SWITCH		8
#define MPTOKEN_CASE		 	9
#define MPTOKEN_DEFAULT		10
#define MPTOKEN_ENDSWITCH	11
#define MPTOKEN_IFNOT			12
#define MPTOKEN_ORNOT			13

/* obsolete MRMud OPROG flags */
#define TRIG_COMMAND				BV01
#define TRIG_VOID						BV02
#define TRIG_UNKNOWN				BV03
#define TRIG_TICK						BV04
#define TRIG_DAMAGE					BV05
#define TRIG_HIT						BV06
#define TRIG_WEAR						BV07
#define TRIG_REMOVE					BV08
#define TRIG_SACRIFICE			BV09
#define TRIG_DROP						BV10
#define TRIG_GET						BV11
#define TRIG_ROOM_COMMAND		BV12
#define TRIG_ROOM_UNKNOWN		BV13
#define TRIG_WEAR_COMMAND		BV14
#define TRIG_WEAR_UNKNOWN		BV15

#define OPROG_ECHO						 0
#define OPROG_GOD_COMMAND			 1
#define OPROG_GOD_ARGUMENT		 2
#define OPROG_COMMAND					 3
#define OPROG_ARGUMENT				 4
#define OPROG_IF_HAS_OBJECT		 5
#define OPROG_IF							 6
#define OPROG_JUNK						 7
#define OPROG_QUEST_SET				 8
#define OPROG_QUEST_ADD				 9
#define OPROG_OBJECT_QUEST_IF	10
#define OPROG_PLAYER_QUEST_IF	11
#define OPROG_APPLY						12

#define OIF_MCLASS_BARBARIAN		0
#define OIF_MCLASS_BARD					1
#define OIF_MCLASS_CLERIC				2
#define OIF_MCLASS_DRUID				3
#define OIF_MCLASS_FIGHTER			4
#define OIF_MCLASS_MONK					5
#define OIF_MCLASS_PALADIN			6
#define OIF_MCLASS_RANGER				7
#define OIF_MCLASS_ROGUE				8
#define OIF_MCLASS_SORCERER			9
#define OIF_MCLASS_WIZARD				10
#define OIF_WEAR_LOC						11
#define OIF_TIME_OF_DAY					12
#define OIF_WEATHER							13
#define OIF_RANDOM_PERCENT			14
#define OIF_USER_PERCENT_HITPT	15
#define OIF_USER_PERCENT_MANA		16
#define OIF_USER_PERCENT_MOVE		17
#define OIF_USER_SECTOR					18
#define OIF_USER_ALIGNMENT			19
#define OIF_USER_GOLD						20
#define OIF_USER_CLASS					21
#define OIF_USER_WHICH_GOD			22
#define OIF_USER_AREA						23
#define OIF_USER_LEVEL					24
#define OIF_USER_POSITION				25
#define OIF_USER_RACE						26
#define OIF_USER_SEX						27
#define OIF_USER_ROOM_NUM				28
#define OIF_USER_FIGHTING				29

/*
	Communication flags for reference during game_loop_unix
*/

#define COMM_FLAG_DISCONNECT	BV01
#define COMM_FLAG_MCCP				BV02
#define COMM_FLAG_COMMAND			BV03
#define COMM_FLAG_NOINPUT			BV04
#define COMM_FLAG_ECHO				BV05
#define COMM_FLAG_PASSWORD		BV06
#define COMM_FLAG_EOR					BV07

/*
	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_STRONG_ALE	8
#define LIQ_STRONG_WINE	9
#define LIQ_MILK				10
#define LIQ_TEA					11
#define LIQ_COFFEE			12
#define LIQ_BLOOD				13
#define LIQ_SALTWATER		14
#define LIQ_OIL					15
#define LIQ_JUICE				16
#define LIQ_BRANDY			17
#define LIQ_ICEWINE			18
#define LIQ_RUM					19
#define LIQ_VODKA				20
#define LIQ_CHAMPAGNE		21
#define LIQ_MAX					22

struct liq_type
{
	char				*	liq_name;
	char				*	liq_color;
	sh_int				liq_affect[3];
};

#define FOOD_BREAD			0
#define FOOD_GARLIC			1
#define FOOD_MAX				2


/* New auth stuff --Rantic */
typedef enum
{
	AUTH_ONLINE = 0, AUTH_OFFLINE, AUTH_LINK_DEAD, AUTH_CHANGE, AUTH_AUTHED
} auth_types;

struct auth_list
{
	AUTH_LIST *next;
	AUTH_LIST *prev;
	char 			*name; 			/* Name of character awaiting authorization */
	char 			*adjective;	/* Adjective of character awaiting authorization */
	char 			*descr;			/* Description of character awaiting authorization */
	int 			sex; 				/* Sex of character awaiting authorization */
	int 			race; 			/* Race of character awaiting authorization */
	int 			pvnum; 			/* PVNUM of character awaiting authorization */
	char 			*authed_by; /* Name of immortal who authorized the name */
	char 			*change_by; /* Name of immortal requesting name change */
	short 		state;			/* Current state of authed */
};

/* bounty stuff */
struct bounty_data
{
	BOUNTY_DATA	*	next;
	BOUNTY_DATA	*	prev;
	char				*	name;		/* name of offender */
	int					pvnum; 		/* pvnum of offender */
	int					amount;		/* amount of bounty */
	int					expires; 	/* charges expire */
	int					area; 		/* lo_r_vnum of the crime */
	int					crime;		/* crime wanted for */
	int					punishment;		/* dead or alive? */
	int					victim; 	/* vnum of the victim */
	int					pcvictim; /* pvnum of PC victim */
};

/*
	Extra description data for a room or object.
*/

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

/*
	Prototype for an object.
*/

struct obj_index_data
{
	OBJ_DATA			*	first_instance;
	OBJ_DATA			*	last_instance;
	EXTRA_DESCR_DATA	*	first_extradesc;
	EXTRA_DESCR_DATA	*	last_extradesc;
	AFFECT_DATA		*	first_affect;
	AFFECT_DATA		*	last_affect;
	DISEASE_DATA	*	first_disease;
	DISEASE_DATA	*	last_disease;
	MPROG_DATA		*	first_prog;
	MPROG_DATA		*	last_prog;
	AREA_DATA			*	area;
	char					*	name;
	char					*	short_descr;
	char					*	long_descr;
	char 					*	description;
	char					*	id_name;
	char					*	id_descr;
	lg_int				progtypes;
	int						vnum;
	sh_int				item_type;
	lg_int				extra_flags;
	int						wear_flags;
	sh_int				weight;
	int						cost;
	int						value[8];
	int						level;
	int						total_objects;	/* Total for resets */
	char					*	attack_string;
	int						class_flags;		/* List of which classes can use obj*/
	int						creator_pvnum;
	sh_int				hardness;				/* d20 stat for damage reduction */
	sh_int				material;				/* uses Mud20 material table */
	sh_int				hit_points;			/* d20 hit points for obj */
	sh_int				size;						/* d20 size category */
	sh_int				scribed[MAX_SKILL];	/* for spellbooks ONLY - records scribed spells */
};


struct poison_data
{
	POISON_DATA		*	next;
	sh_int				type;
	int						constant_duration;	/* In combat rounds */
	sh_int				dc;						/* save DC */
	int						owner;				/* PVNUM of creator of poison */
	int						poisoner;			/* PVNUM of poisoner */
};


struct disease_data
{
	DISEASE_DATA *	next;
	DISEASE_DATA *	prev;
	sh_int		type;
	sh_int		incubation;
	sh_int		dc;
	bool			saves;
};


/*
	One object.
*/

struct obj_data
{
	OBJ_DATA				*	next;
	OBJ_DATA				*	prev;
	OBJ_DATA				*	next_content;
	OBJ_DATA				*	prev_content;
	OBJ_DATA				*	next_instance;
	OBJ_DATA				*	prev_instance;
	OBJ_DATA				*	next_ref;
	OBJ_DATA				*	prev_ref;
	OBJ_DATA				*	first_content;
	OBJ_DATA				*	last_content;
	OBJ_DATA				*	in_obj;
	CHAR_DATA				*	carried_by;
	RESET_DATA			*	reset;
	AFFECT_DATA			*	first_affect;
	AFFECT_DATA			*	last_affect;
	DISEASE_DATA		*	first_disease;
	DISEASE_DATA		*	last_disease;
	OBJ_INDEX_DATA	*	pIndexData;
	ROOM_INDEX_DATA	*	in_room;
	POISON_DATA			* poison;
	char						*	name;
	char 						*	short_descr;
	char 						*	long_descr;
	char						*	description;
	char						*	id_name;
	char						*	id_descr;
	int							affected_sn[MAX_SKILL];
	bool						identified;
	sh_int					item_type;
	lg_int					extra_flags;
	int							wear_flags;
	int							wear_loc;
	sh_int					weight;
	sh_int					hardness;
	sh_int					material;
	sh_int					hit_points;
	sh_int					size;
	sh_int					scribed[MAX_SKILL];							
	int							apply[MAX_APPLY]; /* caches applies from affects to obj */
	int							cost;
	sh_int					level;
	sh_int					timer;
	sh_int					sac_timer;
	int							value[8];
	unsigned char		*	obj_quest;
	int							owned_by;			/*  PVNUM of owner */
	sh_int					content_weight;	/* total weight of container */
	lg_int					obj_ref_key;
};

/*
	Exit data.
*/

struct exit_data
{
	int							to_room;
	int							vnum;
	unsigned short	pvnum;
	int							exit_info;
	int							key;
	char						*	keyword;
	char						*	description;
	int							exit_size;
	int							climb_dc;
	int							fall_dist;
};

/*
	Reset commands:
	'*': comment
	'M': read a mobile
	'O': read an object
	'P': put object in object
	'G': give object to mobile
	'E': equip object to mobile
	'D': set state of door
	'R': randomize room exits
	'S': stop (end of list)
*/

/*
	Area-reset definition.
*/

struct reset_data
{
	RESET_DATA		*	next;
	RESET_DATA		*	prev;
	char					command;
	int						arg1;
	int						arg2;
	int						arg3;
	CHAR_DATA			*	mob;
	OBJ_DATA			*	obj;
	RESET_DATA		*	container;
};

/*
	Area definition.
*/
struct area_data
{
	AREA_DATA			*	next;
	AREA_DATA			*	prev;
	RESET_DATA		*	first_reset;
	RESET_DATA		*	last_reset;
	HELP_DATA			*	first_help;
	HELP_DATA			*	last_help;
	char					*	name;
	char					*	filename;
	bool					*	area_quest;
	WEATHER_DATA	*	weather_info;
	int						average_level;
	sh_int				version;
	sh_int				age;
	sh_int				nplayer;
	sh_int				flags;
	sh_int				tmp;
	sh_int				count;
	sh_int				hi_hard_range;		/* Enforced range */
	sh_int				low_hard_range;
	sh_int				hi_soft_range;		/* Suggested range */
	sh_int				low_soft_range;
	char					*	authors;
	char					*	resetmsg;
	int						dungeon;
	int						courtroom;
	int						storeroom;				/* storeroom for confiscation */
	int						judge;
	int						guard;
	int						punishment[CRIME_MAX];
	int						low_r_vnum;
	int						hi_r_vnum;
	int						low_o_vnum;
	int						hi_o_vnum;
	int						low_m_vnum;
	int						hi_m_vnum;
	int						olc_range_lo;
	int						olc_range_hi;
};

/*
	Room type.
*/

struct room_index_data
{
	CHAR_DATA					*	first_person;
	CHAR_DATA					*	last_person;
	OBJ_DATA					*	first_content;
	OBJ_DATA					*	last_content;
	MPROG_DATA				*	first_prog;
	MPROG_DATA				*	last_prog;
	EXTRA_DESCR_DATA	*	first_extradesc;
	EXTRA_DESCR_DATA	*	last_extradesc;
	DISEASE_DATA			*	first_disease;
	DISEASE_DATA			*	last_disease;
	AREA_DATA					*	area;
	EXIT_DATA					*	exit[6];
	char							*	name;
	char							*	description;
	char							* night_desc;
	char							* listen_desc;
	lg_int						progtypes;
	int								vnum;
	lg_int						room_flags;
	int								light;
	bool							sector_type;
	char							*	last_left[MAX_LAST_LEFT];
	sh_int						last_left_bits[MAX_LAST_LEFT];
	int								last_left_pvnum[MAX_LAST_LEFT];
	bool							content_count;
	unsigned short		creator_pvnum;
	sh_int						nplayer;
};

/*
	System usage information
*/

struct usage_data
{
	int					players[24][7];
};

/*
	Types of attacks.
	Must be non-overlapping with spell/skill types,
	but may be arbitrary beyond that.
*/

#define TYPE_UNDEFINED		-1
#define TYPE_HIT				MAX_SKILL+2
#define TYPE_NOFIGHT		MAX_SKILL+1

/*
	Target types.
*/

#define TAR_IGNORE						0 /* ignores arguments for target */
#define TAR_CHAR_OFFENSIVE		1 /* causes aggression in target */
#define TAR_CHAR_DEFENSIVE		2 /* is nonaggressive to target */
#define TAR_CHAR_SELF					3 /* target affects self only */
#define TAR_OBJ_INV						4 /* target must be in inv */
#define TAR_OBJ_CHAR_OFF			5 /* targets either obj in inv or offensive char */
#define TAR_OBJ_CHAR_DEF			6 /* targets either obj in inv or defensive char */
#define TAR_OBJ_WIELD					7 /* object must be held, dispels if removed */
#define TAR_OBJ_ROOM					8 /* objects in room can be affected also */
#define TAR_UNDEAD_OFF				9 /* offensive if undead, defensive if not */
#define TAR_UNDEAD_DEF				10 /* defensive if undead, offensive if not */

struct bitvector_type	/* table of defines to bitvectors */
{
	char						*	name;	/* name of bit */
	lg_int					value;
};

struct body_type  /* text of particular body parts */
{
	char				*	attack;		/* dam nounce for body part */
	int					dam_type;		/* dam type for part */
	bool				primary;		/* is primary attack part (per PFRPG universal monster rule */
	bool				natural;		/* is natural weapon (per PFRPG universal monster rule */
};

/*
	Skills include spells as a particular case.
*/

struct skill_type
{
	int						spell_class;						/* spell class for NPC ai */
	sh_int				skilltype;							/* skill flags */
	int						spell_school;						/* spell school, feat types */
	int						save;										/* saving throw type */
	int						dam_type;								/* damage type */
	int						spell_desc;							/* spell descriptors, weapon classes */
	lg_int				flags;									/* skill/spell flags */
	char					*	name;									/* Name of skill	*/
	sh_int				skill_level[MAX_CLASS];	/* Level Min for Skill, Spell circle	*/
	sh_int				bonus_feat[MAX_CLASS];	/* Bonus feat for class, at what level	*/
	sh_int				domains[MAX_DOMAIN];		/* Domain Spell circle	*/
	sh_int				race_skill[MAX_RACE];		/* Racial abilities */
	sh_int				styles[STYLE_MAX];			/* Monk/Ranger combat style skills */
	sh_int				bloodline[BLOODLINE_MAX];	/* Sorcerer bloodline skills */
	sh_int				components[5];					/* Components for spells (max 5 per spell) */
	SPELL_FUN			*	spell_fun;						/* Spell pointer (for spells)	*/
	sh_int				target;									/* Legal targets */
	bool					minimum_position;				/* Position for caster / user	*/
	sh_int				*	pgsn;									/* Pointer to associated gsn	*/
	sh_int				native_level;						/* default level of a spell without a spell table	*/
	sh_int				mana_move;							/* Move point cost - max circle of scaleable spell	*/
	sh_int				beats;									/* Casting Time	*/
	char					*	noun_damage;					/* Damage message */
	char					*	msg_off;							/* Wear off message	*/
	char					*	msg_obj_off;					/* Wear off message for obj	*/
	char					*	msg_off_room;					/* Wear off message for room	*/
	char					*	vis_affect;						/* Visible affect on show_char_to_char	*/
};

/*
	These are skill_lookup return values for common skills and spells.
*/
/* racial attacks and abilities */
sh_int	gsn_drain;
sh_int	gsn_con_drain;
sh_int	gsn_cha_drain;
sh_int	gsn_dex_drain;
sh_int	gsn_int_drain;
sh_int	gsn_str_drain;
sh_int	gsn_wis_drain;
sh_int	gsn_bleed_damage;
sh_int	gsn_blindsight;
sh_int	gsn_con_damage;
sh_int	gsn_cha_damage;
sh_int	gsn_dex_damage;
sh_int	gsn_int_damage;
sh_int	gsn_str_damage;
sh_int	gsn_wis_damage;
sh_int	gsn_shapechange;
sh_int	gsn_poison_attack;
sh_int	gsn_disease_attack;
sh_int	gsn_agile_climber;
sh_int	gsn_fear_aura;
sh_int	gsn_fear_gaze;
sh_int	gsn_death_gaze;
sh_int	gsn_death_throes;
sh_int	gsn_petri_gaze;
sh_int	gsn_pounce;
sh_int	gsn_rend;
sh_int	gsn_smaller_weapons;
sh_int	gsn_fearful_howl;
sh_int	gsn_frightful_presence;
sh_int	gsn_light_blindness;
sh_int	gsn_light_invisibility;
sh_int	gsn_light_sensitivity;
sh_int	gsn_light_vulnerability;
sh_int	gsn_paralysis_touch;
sh_int	gsn_stench;
sh_int	gsn_aura_of_menace;
sh_int	gsn_babble;
sh_int	gsn_imp_natural_attack;
sh_int	gsn_acid_touch;
sh_int	gsn_corrosion;
sh_int	gsn_fire_touch;
sh_int	gsn_frost_touch;
sh_int	gsn_shock_touch;
sh_int	gsn_divine_touch;
sh_int	gsn_negative_energy_touch;
sh_int	gsn_web_attack;
sh_int	gsn_wounding_attack;
sh_int	gsn_draconic_resistance;
sh_int	gsn_rock_throwing;
sh_int	gsn_split;

/* non-skills for internal tracking only */
sh_int	gsn_sight_perception;
sh_int	gsn_sound_perception;
sh_int	gsn_smell_perception;
sh_int	gsn_taste_perception;
sh_int	gsn_touch_perception;
sh_int	gsn_speak_languages;
sh_int	gsn_ability_damage;
sh_int	gsn_recite_scroll;

/* generic dam types */
sh_int	gsn_bash_hit;
sh_int	gsn_bullrush;
sh_int	gsn_coup_de_grace;
sh_int	gsn_disarm;
sh_int	gsn_divine_hit;
sh_int	gsn_fire_hit;
sh_int	gsn_force_hit;
sh_int	gsn_frost_hit;
sh_int	gsn_frostbite;
sh_int	gsn_heatstroke;
sh_int	gsn_pierce_hit;
sh_int	gsn_shield_bash;
sh_int	gsn_shock_hit;
sh_int	gsn_sonic_hit;
sh_int	gsn_vorpal_hit;
sh_int	gsn_slash_hit;
sh_int	gsn_sunder;
sh_int	gsn_trip;

/* bard songs */
sh_int	gsn_curse_song;
sh_int	gsn_dirge_of_doom;
sh_int	gsn_song_of_courage;
sh_int	gsn_song_of_freedom;
sh_int	gsn_song_of_soothing;
sh_int	gsn_song_of_sleep;
sh_int	gsn_song_of_suggestion;
sh_int	gsn_song_of_heroism;
sh_int	gsn_song_of_fascination;
sh_int	gsn_song_of_inspiration;

/* spells */
sh_int	gsn_acid_arrow;
sh_int	gsn_acid_breath;
sh_int	gsn_acid_spittle;
sh_int	gsn_acid_hit;
sh_int	gsn_acid_rain;
sh_int	gsn_acid_splash;
sh_int	gsn_admonishing_ray;
sh_int	gsn_aid;
sh_int	gsn_align_weapon;
sh_int	gsn_alter_self;
sh_int	gsn_analyze_dweomer;
sh_int	gsn_animal_growth;
sh_int	gsn_animal_shapes;
sh_int	gsn_animate_dead;
sh_int	gsn_animate_object;
sh_int	gsn_antilife_shell;
sh_int	gsn_antimagic_field;
sh_int	gsn_arcane_eye;
sh_int	gsn_armor;
sh_int	gsn_armor_of_darkness;
sh_int	gsn_astral_projection;
sh_int	gsn_aura_of_retribution;
sh_int	gsn_baleful_polymorph;
sh_int	gsn_banish;
sh_int	gsn_bane;
sh_int	gsn_barkskin;
sh_int	gsn_beast_shape;
sh_int	gsn_bestow_grace;
sh_int	gsn_bears_endurance;
sh_int	gsn_blacklight;
sh_int	gsn_black_tentacles;
sh_int	gsn_blade_barrier;
sh_int	gsn_blasphemy;
sh_int	gsn_bleeding_wounds;
sh_int	gsn_bless;
sh_int	gsn_blindness;
sh_int	gsn_blur;
sh_int	gsn_break_enchantment;
sh_int	gsn_bulls_strength;
sh_int	gsn_burning_hands;
sh_int	gsn_call_lightning_storm;
sh_int	gsn_call_lightning;
sh_int	gsn_calm_animals;
sh_int	gsn_calm_emotions;
sh_int	gsn_cats_grace;
sh_int	gsn_cause_fear;
sh_int	gsn_chain_lightning;
sh_int	gsn_chaos_hammer;
sh_int	gsn_charm_animal;
sh_int	gsn_charm_monster;
sh_int	gsn_charm_person;
sh_int	gsn_charm_plant;
sh_int	gsn_chill_touch;
sh_int	gsn_chill_metal;
sh_int	gsn_circle_against_chaos;
sh_int	gsn_circle_against_evil;
sh_int	gsn_circle_against_good;
sh_int	gsn_circle_against_law;
sh_int	gsn_circle_of_death;
sh_int	gsn_clairvoyance;
sh_int	gsn_cloak_of_chaos;
sh_int	gsn_cloudkill;
sh_int	gsn_color_spray;
sh_int	gsn_command;
sh_int	gsn_comprehend_languages;
sh_int	gsn_cone_of_cold;
sh_int	gsn_confusion;
sh_int	gsn_conjure_elemental;
sh_int	gsn_conjure_lesser_elemental;
sh_int	gsn_conjure_minor_elemental;
sh_int	gsn_conjure_greater_elemental;
sh_int	gsn_create_undead;
sh_int	gsn_create_lesser_undead;
sh_int	gsn_create_minor_undead;
sh_int	gsn_create_greater_undead;
sh_int	gsn_contagion;
sh_int	gsn_cont_light;
sh_int	gsn_control_weather;
sh_int	gsn_create_food;
sh_int	gsn_create_spring;
sh_int	gsn_create_water;
sh_int	gsn_creeping_doom;
sh_int	gsn_crushing_despair;
sh_int	gsn_crushing_hand;
sh_int	gsn_cure_critical;
sh_int	gsn_cure_light;
sh_int	gsn_cure_moderate;
sh_int	gsn_cure_serious;
sh_int	gsn_curse;
sh_int	gsn_dancing_lights;
sh_int	gsn_darkness;
sh_int	gsn_darkvision;
sh_int	gsn_daylight;
sh_int	gsn_daze;
sh_int	gsn_death_armor;
sh_int	gsn_death_knell;
sh_int	gsn_death_ward;
sh_int	gsn_deep_slumber;
sh_int	gsn_destruction;
sh_int	gsn_delay_poison;
sh_int	gsn_demand;
sh_int	gsn_detect_chaos;
sh_int	gsn_detect_evil;
sh_int	gsn_detect_good;
sh_int	gsn_detect_invis;
sh_int	gsn_detect_law;
sh_int	gsn_detect_magic;
sh_int	gsn_detect_poison;
sh_int	gsn_detect_secret;
sh_int	gsn_detect_scrying;
sh_int	gsn_detect_shapechanger;
sh_int	gsn_detect_thoughts;
sh_int	gsn_detect_traps;
sh_int	gsn_detect_undead;
sh_int	gsn_dictum;
sh_int	gsn_dimension_door;
sh_int	gsn_dimensional_anchor;
sh_int	gsn_dimensional_lock;
sh_int	gsn_discern_lies;
sh_int	gsn_discern_location;
sh_int	gsn_disintegrate;
sh_int	gsn_disguise_self;
sh_int	gsn_disjunction;
sh_int	gsn_displacement;
sh_int	gsn_dispel_evil;
sh_int	gsn_dispel_good;
sh_int	gsn_dispel_chaos;
sh_int	gsn_dispel_law;
sh_int	gsn_dispel_magic;
sh_int	gsn_disrupt_undead;
sh_int	gsn_divine_favor;
sh_int	gsn_divine_power;
sh_int	gsn_dominate_animal;
sh_int	gsn_dominate_monster;
sh_int	gsn_dominate_person;
sh_int	gsn_drown;
sh_int	gsn_eagles_splendour;
sh_int	gsn_earthquake;
sh_int	gsn_earthwalk;
sh_int	gsn_electric_jolt;
sh_int	gsn_elemental_swarm;
sh_int	gsn_endure_elements;
sh_int	gsn_energy_drain;
sh_int	gsn_enervation;
sh_int	gsn_enlarge_person;
sh_int	gsn_entangle;
sh_int	gsn_entropic_shield;
sh_int	gsn_ethereal_jaunt;
sh_int	gsn_ethereal;
sh_int	gsn_fire_breath;
sh_int	gsn_eyebite;
sh_int	gsn_euphoria_gas;
sh_int	gsn_faerie_fire;
sh_int	gsn_faithful_hound;
sh_int	gsn_fear_gas;
sh_int	gsn_fear;
sh_int	gsn_feather_fall;
sh_int	gsn_feeblemind;
sh_int	gsn_festering_wounds;
sh_int	gsn_finger_of_death;
sh_int	gsn_fire_breath;
sh_int	gsn_fire_shield;
sh_int	gsn_fireball;
sh_int	gsn_firestorm;
sh_int	gsn_flame_arrow;
sh_int	gsn_flame_blade;
sh_int	gsn_flame_tongue;
sh_int	gsn_flamestrike;
sh_int	gsn_flesh_to_stone;
sh_int	gsn_floating_disc;
sh_int	gsn_fog_cloud;
sh_int	gsn_forceful_hand;
sh_int	gsn_foresight;
sh_int	gsn_foxs_cunning;
sh_int	gsn_freedom_of_movement;
sh_int	gsn_frost_breath;
sh_int	gsn_gas_breath;
sh_int	gsn_gate;
sh_int	gsn_gentle_repose;
sh_int	gsn_globe_of_invulnerability;
sh_int	gsn_golem_slam;
sh_int	gsn_good_hope;
sh_int	gsn_grasping_hand;
sh_int	gsn_greater_command;
sh_int	gsn_greater_heroism;
sh_int	gsn_greater_polymorph;
sh_int	gsn_greater_restoration;
sh_int	gsn_greater_teleport;
sh_int	gsn_guidance;
sh_int	gsn_gust_of_wind;
sh_int	gsn_hallucinate;
sh_int	gsn_harden;
sh_int	gsn_harm;
sh_int	gsn_haste;
sh_int	gsn_heal;
sh_int	gsn_heal_mount;
sh_int	gsn_heat_metal;
sh_int	gsn_heroes_feast;
sh_int	gsn_heroism;
sh_int	gsn_hold_animal;
sh_int	gsn_hold_person;
sh_int	gsn_hold_plant;
sh_int	gsn_hold_monster;
sh_int	gsn_holy_aura;
sh_int	gsn_holy_smite;
sh_int	gsn_holy_word;
sh_int	gsn_horrid_wilting;
sh_int	gsn_ice_storm;
sh_int	gsn_identify;
sh_int	gsn_improved_invis;
sh_int	gsn_implosion;
sh_int	gsn_inflict_light;
sh_int	gsn_inflict_minor;
sh_int	gsn_inflict_moderate;
sh_int	gsn_inflict_serious;
sh_int	gsn_inflict_critical;
sh_int	gsn_insanity;
sh_int	gsn_insect_plague;
sh_int	gsn_invis;
sh_int	gsn_iron_body;
sh_int	gsn_irresistible_dance;
sh_int	gsn_knock;
sh_int	gsn_keen_edge;
sh_int	gsn_leap;
sh_int	gsn_lesser_confusion;
sh_int	gsn_lesser_restoration;
sh_int	gsn_light;
sh_int	gsn_lightning_bolt;
sh_int	gsn_lightning_breath;
sh_int	gsn_locate_creature;
sh_int	gsn_locate_object;
sh_int	gsn_magic_fang;
sh_int	gsn_magic_missile;
sh_int	gsn_magic_weapon;
sh_int	gsn_magic_vestment;
sh_int	gsn_major_contraption;
sh_int	gsn_major_image;
sh_int	gsn_make_whole;
sh_int	gsn_mass_bears_endurance;
sh_int	gsn_mass_bulls_strength;
sh_int	gsn_mass_cats_grace;
sh_int	gsn_mass_cure_critical;
sh_int	gsn_mass_cure_light;
sh_int	gsn_mass_cure_moderate;
sh_int	gsn_mass_cure_serious;
sh_int	gsn_mass_death_ward;
sh_int	gsn_mass_eagles_splendour;
sh_int	gsn_mass_enlarge_person;
sh_int	gsn_mass_foxs_cunning;
sh_int	gsn_mass_heal;
sh_int	gsn_mass_hold_animal;
sh_int	gsn_mass_hold_person;
sh_int	gsn_mass_hold_plant;
sh_int	gsn_mass_hold_monster;
sh_int	gsn_mass_inflict_critical;
sh_int	gsn_mass_inflict_light;
sh_int	gsn_mass_inflict_moderate;
sh_int	gsn_mass_inflict_serious;
sh_int	gsn_mass_invis;
sh_int	gsn_mass_owls_wisdom;
sh_int	gsn_mass_refresh;
sh_int	gsn_mass_reduce_person;
sh_int	gsn_mending;
sh_int	gsn_meteor_swarm;
sh_int	gsn_mind_blank;
sh_int	gsn_minor_contraption;
sh_int	gsn_minor_globe;
sh_int	gsn_mirror_image;
sh_int	gsn_mislead;
sh_int	gsn_moment_of_prescience;
sh_int	gsn_missile_deflection;
sh_int	gsn_natures_ally_I;
sh_int	gsn_natures_ally_II;
sh_int	gsn_natures_ally_III;
sh_int	gsn_natures_ally_IV;
sh_int	gsn_natures_ally_V;
sh_int	gsn_natures_ally_VI;
sh_int	gsn_natures_ally_VII;
sh_int	gsn_natures_ally_VIII;
sh_int	gsn_natures_ally_IX;
sh_int	gsn_suffocate;
sh_int	gsn_summon_ally;
sh_int	gsn_summon_monster_I;
sh_int	gsn_summon_monster_II;
sh_int	gsn_summon_monster_III;
sh_int	gsn_summon_monster_IV;
sh_int	gsn_summon_monster_V;
sh_int	gsn_summon_monster_VI;
sh_int	gsn_summon_monster_VII;
sh_int	gsn_summon_monster_VIII;
sh_int	gsn_summon_monster_IX;
sh_int	gsn_sunbeam;
sh_int	gsn_sunburst;
sh_int	gsn_neutralize_poison;
sh_int	gsn_nightmare;
sh_int	gsn_nondetection;
sh_int	gsn_object_rape;
sh_int	gsn_orders_wrath;
sh_int	gsn_owls_widsom;
sh_int	gsn_owls_wisdom;
sh_int	gsn_paralysis_gas;
sh_int	gsn_pass_door;
sh_int	gsn_pass_plant;
sh_int	gsn_pass_without_trace;
sh_int	gsn_permanency;
sh_int	gsn_phantasmal_killer;
sh_int	gsn_poison;
sh_int	gsn_polymorph;
sh_int	gsn_power_word_blind;
sh_int	gsn_power_word_kill;
sh_int	gsn_power_word_sleep;
sh_int	gsn_power_word_stun;
sh_int	gsn_prayer;
sh_int	gsn_private_sanctum;
sh_int	gsn_produce_flame;
sh_int	gsn_protection_chaos;
sh_int	gsn_protection_energy;
sh_int	gsn_protection_evil;
sh_int	gsn_protection_good;
sh_int	gsn_protection_law;
sh_int	gsn_protection_spells;
sh_int	gsn_psionic_shockwave;
sh_int	gsn_purify;
sh_int	gsn_rage;
sh_int	gsn_rainbow_pattern;
sh_int	gsn_raise_dead;
sh_int	gsn_ray_of_enfeeblement;
sh_int	gsn_ray_of_frost;
sh_int	gsn_read_magic;
sh_int	gsn_rebuke;
sh_int	gsn_reduce_animal;
sh_int	gsn_reduce_person;
sh_int	gsn_refresh;
sh_int	gsn_regenerate;
sh_int	gsn_reincarnate;
sh_int	gsn_remove_blindness;
sh_int	gsn_remove_curse;
sh_int	gsn_remove_deafness;
sh_int	gsn_remove_disease;
sh_int	gsn_remove_fear;
sh_int	gsn_remove_paralysis;
sh_int	gsn_repel_metal;
sh_int	gsn_repulsion;
sh_int	gsn_resist_elements;
sh_int	gsn_resistance;
sh_int	gsn_restoration;
sh_int	gsn_resurrection;
sh_int	gsn_revive;
sh_int	gsn_rusting_grasp;
sh_int	gsn_sanctify;
sh_int	gsn_sanctuary;
sh_int	gsn_scare;
sh_int	gsn_scintillating_pattern;
sh_int	gsn_scorching_ray;
sh_int	gsn_scrying;
sh_int	gsn_searing_light;
sh_int	gsn_sending;
sh_int	gsn_secure_shelter;
sh_int	gsn_shadow_walk;
sh_int	gsn_shambler;
sh_int	gsn_shatter;
sh_int	gsn_shield;
sh_int	gsn_shield_of_faith;
sh_int	gsn_shield_of_law;
sh_int	gsn_shillelagh;
sh_int	gsn_shocking_grasp;
sh_int	gsn_shout;
sh_int	gsn_sign_of_wrath;
sh_int	gsn_silence;
sh_int	gsn_simulacrum;
sh_int	gsn_sirocco;
sh_int	gsn_sleep;
sh_int	gsn_slay_living;
sh_int	gsn_sleet_storm;
sh_int	gsn_slow_gas;
sh_int	gsn_slow;
sh_int	gsn_snake_dart;
sh_int	gsn_sonic_blast;
sh_int	gsn_soul_bind;
sh_int	gsn_speak_w_animals;
sh_int	gsn_speak_with_dead;
sh_int	gsn_spell_immunity;
sh_int	gsn_spell_resistance;
sh_int	gsn_spell_turning;
sh_int	gsn_spider_climb;
sh_int	gsn_spirit_of_triumph;
sh_int	gsn_stabilize;
sh_int	gsn_status;
sh_int	gsn_stone_skin;
sh_int	gsn_stone_shower;
sh_int	gsn_stone_fist;
sh_int	gsn_stone_to_flesh;
sh_int	gsn_storm_of_vengeance;
sh_int	gsn_suggestion;
sh_int	gsn_summon_shadow;
sh_int	gsn_summon_swarm;
sh_int	gsn_summon;
sh_int	gsn_symbol_of_pain;
sh_int	gsn_symbol_of_insanity;
sh_int	gsn_telepathic_bond;
sh_int	gsn_teleport_object;
sh_int	gsn_teleport;
sh_int	gsn_teleportation_circle;
sh_int	gsn_thorn_body;
sh_int	gsn_time_stop;
sh_int	gsn_tongues;
sh_int	gsn_touch_of_fatigue;
sh_int	gsn_touch_of_idiocy;
sh_int	gsn_transformation;
sh_int	gsn_transmute_metal;
sh_int	gsn_tree_stride;
sh_int	gsn_true_resurrection;
sh_int	gsn_true_form;
sh_int	gsn_true_freedom;
sh_int	gsn_true_seeing;
sh_int	gsn_true_strike;
sh_int	gsn_undeath_to_death;
sh_int	gsn_undeath_ward;
sh_int	gsn_undeaths_eternal_foe;
sh_int	gsn_unholy_aura;
sh_int	gsn_unholy_blight;
sh_int	gsn_vampiric_touch;
sh_int	gsn_ventriloquism;
sh_int	gsn_vigilance;
sh_int	gsn_virtue;
sh_int	gsn_wall_of_fire;
sh_int	gsn_wall_of_force;
sh_int	gsn_wall_of_iron;
sh_int	gsn_wall_of_ice;
sh_int	gsn_wall_of_stone;
sh_int	gsn_water_breathing;
sh_int	gsn_water_walk;
sh_int	gsn_water_to_wine;
sh_int	gsn_waves_of_exhaustion;
sh_int	gsn_waves_of_fatigue;
sh_int	gsn_weakness_gas;
sh_int	gsn_web;
sh_int	gsn_weird;
sh_int	gsn_word_of_chaos;
sh_int	gsn_word_of_recall;
sh_int	gsn_wraith_form;

/* feats and abilities */
sh_int	gsn_aberrant_bloodline;
sh_int	gsn_abyssal_bloodline;
sh_int	gsn_arcane_bloodline;
sh_int	gsn_air_bloodline;
sh_int	gsn_earth_bloodline;
sh_int	gsn_fire_bloodline;
sh_int	gsn_water_bloodline;
sh_int	gsn_celestial_bloodline;
sh_int	gsn_destined_bloodline;
sh_int	gsn_draconic_bloodline;
sh_int	gsn_fey_bloodline;
sh_int	gsn_infernal_bloodline;
sh_int	gsn_undead_bloodline;

sh_int	gsn_celestial_affinity;
sh_int	gsn_elemental_affinity;
sh_int	gsn_fiendish_affinity;
sh_int	gsn_shadow_affinity;

sh_int	gsn_school_abj;
sh_int	gsn_school_conj;
sh_int	gsn_school_div;
sh_int	gsn_school_ench;
sh_int	gsn_school_evoc;
sh_int	gsn_school_illus;
sh_int	gsn_school_necro;
sh_int	gsn_school_trans;
sh_int	gsn_school_univ;
sh_int	gsn_distance_arrow;
sh_int	gsn_keen_arrow;
sh_int	gsn_imbue_arrow;
sh_int	gsn_hail_of_arrows;
sh_int	gsn_enhance_arrow;
sh_int	gsn_seeker_arrow;
sh_int	gsn_energy_arrow;
sh_int	gsn_death_arrow;
sh_int	gsn_abundant_step;
sh_int	gsn_acrobatic;
sh_int	gsn_active_shield_defense;
sh_int	gsn_agile_combatant;
sh_int	gsn_agile_feint;
sh_int	gsn_alertness;
sh_int	gsn_align_ki;
sh_int	gsn_animal_affinity;
sh_int	gsn_arcane_armor_training;
sh_int	gsn_arcane_armor_mastery;
sh_int	gsn_arcane_weapon;
sh_int	gsn_armor_mastery;
sh_int	gsn_armor_proficiency_heavy;
sh_int	gsn_armor_proficiency_light;
sh_int	gsn_armor_proficiency_medium;
sh_int	gsn_armor_training;
sh_int	gsn_arterial_strike;
sh_int	gsn_assassinate;
sh_int	gsn_athletic;
sh_int	gsn_augment_summoning;
sh_int	gsn_aura_of_courage;
sh_int	gsn_aura_of_devotion;
sh_int	gsn_aura_of_faith;
sh_int	gsn_aura_of_nobility;
sh_int	gsn_aura_of_resolve;
sh_int	gsn_aura_of_righteousness;
sh_int	gsn_aura_of_cowardice;
sh_int	gsn_aura_of_tyranny;
sh_int	gsn_aura_of_blasphemy;
sh_int	gsn_aura_of_profanity;
sh_int	gsn_secret_of_avoidance;
sh_int	gsn_secret_of_health;
sh_int	gsn_secret_of_resolve;
sh_int	gsn_secret_of_stamina;
sh_int	gsn_secret_of_truth;
sh_int	gsn_newfound_arcana;
sh_int	gsn_serpents_tongue;
sh_int	gsn_unholy_champion;
sh_int	gsn_backstab;
sh_int	gsn_barbed_touch;
sh_int	gsn_bardic_song;
sh_int	gsn_battle_cry;
sh_int	gsn_barbarian_rage;
sh_int	gsn_between_the_eyes;
sh_int	gsn_blind_fight;
sh_int	gsn_bold_rage;
sh_int	gsn_blood_rage;
sh_int	gsn_bravery;
sh_int	gsn_brew_potion;
sh_int	gsn_called_shot;
sh_int	gsn_camouflage;
sh_int	gsn_canny_defense;
sh_int	gsn_channeling_attack;
sh_int	gsn_cleave;
sh_int	gsn_cloud_of_cleaves;
sh_int	gsn_combat_archery;
sh_int	gsn_combat_casting;
sh_int	gsn_combat_expertise;
sh_int	gsn_combat_rearing;
sh_int	gsn_combat_reflexes;
sh_int	gsn_command_undead;
sh_int	gsn_companion;
sh_int	gsn_constrict;
sh_int	gsn_corrupt_touch;
sh_int	gsn_countersong;
sh_int	gsn_crack_shot;
sh_int	gsn_craft_magic_arms;
sh_int	gsn_craft_staff;
sh_int	gsn_craft_wand;
sh_int	gsn_craft_wondrous;
sh_int	gsn_cripple;
sh_int	gsn_daring_charge;
sh_int	gsn_daylight_adaptation;
sh_int	gsn_dead_shot;
sh_int	gsn_deceitful;
sh_int	gsn_deflect_arrows;
sh_int	gsn_defensive_roll;
sh_int	gsn_defensive_stance;
sh_int	gsn_defensive_training;
sh_int	gsn_deft_hands;
sh_int	gsn_destructive_smite;
sh_int	gsn_diamond_soul;
sh_int	gsn_diehard;
sh_int	gsn_divine_arcana;
sh_int	gsn_divine_charm;
sh_int	gsn_divine_craftsmanship;
sh_int	gsn_divine_defense;
sh_int	gsn_divine_grace;
sh_int	gsn_divine_health;
sh_int	gsn_divine_location;
sh_int	gsn_divine_luck;
sh_int	gsn_divine_mercantilism;
sh_int	gsn_divine_paragon;
sh_int	gsn_divine_refuge;
sh_int	gsn_divine_renewal;
sh_int	gsn_divine_strength;
sh_int	gsn_divine_trickery;
sh_int	gsn_divine_veil;
sh_int	gsn_divine_wrath;
sh_int	gsn_disguise_spell;
sh_int	gsn_dodge;
sh_int	gsn_dweomersight;
sh_int	gsn_elaborate_defense;
sh_int	gsn_empower_curing;
sh_int	gsn_empower_infliction;
sh_int	gsn_empower_song;
sh_int	gsn_empower_spell;
sh_int	gsn_empower_turning;
sh_int	gsn_empty_body;
sh_int	gsn_endurance;
sh_int	gsn_enlarge_spell;
sh_int	gsn_eschew_materials;
sh_int	gsn_extend_song;
sh_int	gsn_extend_spell;
sh_int	gsn_extend_wildshape;
sh_int	gsn_extra_song;
sh_int	gsn_extra_turning;
sh_int	gsn_evasion;
sh_int	gsn_faceless;
sh_int	gsn_familiar;
sh_int	gsn_far_shot;
sh_int	gsn_feint_resistance;
sh_int	gsn_ferocity;
sh_int	gsn_first_strike;
sh_int	gsn_flurry;
sh_int	gsn_fly;
sh_int	gsn_focus_abj;
sh_int	gsn_focus_conj;
sh_int	gsn_focus_div;
sh_int	gsn_focus_ench;
sh_int	gsn_focus_evoc;
sh_int	gsn_focus_illus;
sh_int	gsn_focus_necro;
sh_int	gsn_focus_trans;
sh_int	gsn_foe_hunter;
sh_int	gsn_forge_ring;
sh_int	gsn_furtive_spell;
sh_int	gsn_gouge;
sh_int	gsn_grab;
sh_int	gsn_grace;
sh_int	gsn_grapple;
sh_int	gsn_greater_lore;
sh_int	gsn_great_cleave;
sh_int	gsn_great_fortitude;
sh_int	gsn_greater_rage;
sh_int	gsn_greater_dispel;
sh_int	gsn_greater_feint;
sh_int	gsn_greater_flurry;
sh_int	gsn_greater_sneak_attack;
sh_int	gsn_greater_stability;
sh_int	gsn_greater_two_weapon;
sh_int	gsn_heroes_luck;
sh_int	gsn_high_magic;
sh_int	gsn_hide_plain_sight;
sh_int	gsn_holy_champion;
sh_int	gsn_infinite_wildshape;
sh_int	gsn_imp_bullrush;
sh_int	gsn_imp_counterspell;
sh_int	gsn_imp_critical;
sh_int	gsn_imp_disarm;
sh_int	gsn_imp_evasion;
sh_int	gsn_imp_familiar;
sh_int	gsn_imp_flurry;
sh_int	gsn_imp_grapple;
sh_int	gsn_imp_initiative;
sh_int	gsn_imp_precise_shot;
sh_int	gsn_imp_shield_bash;
sh_int	gsn_imp_sunder;
sh_int	gsn_imp_turning;
sh_int	gsn_twin_sword;
sh_int	gsn_imp_two_weapon;
sh_int	gsn_imp_unarmed_strike;
sh_int	gsn_imp_weapon_finesse;
sh_int	gsn_impenetrable_defense;
sh_int	gsn_impromptu_sneak_attack;
sh_int	gsn_improved_feint;
sh_int	gsn_improved_trip;
sh_int	gsn_unstoppable_rage;
sh_int	gsn_insightful;
sh_int	gsn_iron_will;
sh_int	gsn_jack_of_all_trades;
sh_int	gsn_ki_strike_adamant;
sh_int	gsn_ki_strike_lawful;
sh_int	gsn_ki_strike_magic;
sh_int	gsn_lay_hands;
sh_int	gsn_layhands_blindness;
sh_int	gsn_layhands_curse;
sh_int	gsn_layhands_disease;
sh_int	gsn_layhands_fatigue;
sh_int	gsn_layhands_fear;
sh_int	gsn_layhands_poison;
sh_int	gsn_leadership;
sh_int	gsn_lightning_reflexes;
sh_int	gsn_linguist;
sh_int	gsn_lore_mastery;
sh_int	gsn_lore;
sh_int	gsn_magical_aptitude;
sh_int	gsn_magna_alumnus;
sh_int	gsn_manyshot;
sh_int	gsn_martial_arts;
sh_int	gsn_master_hunter;
sh_int	gsn_master_scribe;
sh_int	gsn_maximize_spell;
sh_int	gsn_merciful_spell;
sh_int	gsn_mettle;
sh_int	gsn_mighty_rage;
sh_int	gsn_mobility;
sh_int	gsn_mounted_archery;
sh_int	gsn_mounted_combat;
sh_int	gsn_mounted_defense;
sh_int	gsn_mounted_onslaught;
sh_int	gsn_negotiator;
sh_int	gsn_nimble;
sh_int	gsn_noble_birth;
sh_int	gsn_opportunist;
sh_int	gsn_oratory;
sh_int	gsn_packrat;
sh_int	gsn_parry;
sh_int	gsn_persistent_spell;
sh_int	gsn_perfect_self;
sh_int	gsn_perfect_two_weapon;
sh_int	gsn_persuasive;
sh_int	gsn_point_blank;
sh_int	gsn_poison_resistance;
sh_int	gsn_poison_use;
sh_int	gsn_protective_touch;
sh_int	gsn_power_attack;
sh_int	gsn_power_critical;
sh_int	gsn_precise_shot;
sh_int	gsn_precise_strike;
sh_int	gsn_purity_of_body;
sh_int	gsn_quick_draw;
sh_int	gsn_quicken_spell;
sh_int	gsn_quicken_song;
sh_int	gsn_quivering_palm;
sh_int	gsn_ranged_parry;
sh_int	gsn_rapid_reload;
sh_int	gsn_rapid_shot;
sh_int	gsn_reach_spell;
sh_int	gsn_repeat_spell;
sh_int	gsn_rescue;
sh_int	gsn_resist_natures_lure;
sh_int	gsn_retributive_strike;
sh_int	gsn_ride_by_attack;
sh_int	gsn_riposte;
sh_int	gsn_sacred_spell;
sh_int	gsn_scent;
sh_int	gsn_scholar;
sh_int	gsn_scribe_scroll;
sh_int	gsn_self_concealment;
sh_int	gsn_self_sufficient;
sh_int	gsn_shadow_adept;
sh_int	gsn_shadow_companion;
sh_int	gsn_shadow_casting;
sh_int	gsn_shadow_bolt;
sh_int	gsn_shadow_illusion;
sh_int	gsn_shadow_infusion;
sh_int	gsn_shadow_jump;
sh_int	gsn_shadow_resistance;
sh_int	gsn_shield_proficiency;
sh_int	gsn_shield_slam;
sh_int	gsn_shield_specialization;
sh_int	gsn_shield_ward;
sh_int	gsn_silent_death;
sh_int	gsn_silent_spell;
sh_int	gsn_silver_palm;
sh_int	gsn_skip_rock;
sh_int	gsn_skill_mastery;
sh_int	gsn_skill_prodigy;
sh_int	gsn_slippery_mind;
sh_int	gsn_slow_fall;
sh_int	gsn_smite;
sh_int	gsn_smite_infidel;
sh_int	gsn_snatch_arrows;
sh_int	gsn_sneaky_spell;
sh_int	gsn_sniper;
sh_int	gsn_spell_mastery;
sh_int	gsn_spell_penetration;
sh_int	gsn_spirited_charge;
sh_int	gsn_spring_attack;
sh_int	gsn_stability;
sh_int	gsn_stealthy;
sh_int	gsn_stealth_mastery;
sh_int	gsn_pilfer_dweomer;
sh_int	gsn_still_spell;
sh_int	gsn_stonecunning;
sh_int	gsn_strongarm_diplomacy;
sh_int	gsn_stubborn_mind;
sh_int	gsn_stunning_fist;
sh_int	gsn_style_cobra_strike;
sh_int	gsn_style_denying_stance;
sh_int	gsn_style_hand_and_foot;
sh_int	gsn_style_invisible_eye;
sh_int	gsn_style_passive_way;
sh_int	gsn_style_sleeping_tiger;
sh_int	gsn_style_undying_way;
sh_int	gsn_style_archery;
sh_int	gsn_style_melee;
sh_int	gsn_style_skirmish;
sh_int	gsn_style_strongarm;
sh_int	gsn_style_throwing;
sh_int	gsn_style_horseback;
sh_int	gsn_swift_death;
sh_int	gsn_swift_stealth;
sh_int	gsn_swift_tracker;
sh_int	gsn_thousand_faces;
sh_int	gsn_thrust_home;
sh_int	gsn_tireless_defense;
sh_int	gsn_tireless_rage;
sh_int	gsn_toughness;
sh_int	gsn_touch_of_courage;
sh_int	gsn_touch_of_grace;
sh_int	gsn_touch_of_profanity;
sh_int	gsn_touch_of_resolve;
sh_int	gsn_touch_of_righteousness;
sh_int	gsn_touch_of_zeal;
sh_int	gsn_tower_shield_prof;
sh_int	gsn_track;
sh_int	gsn_trackless_step;
sh_int	gsn_trample;
sh_int	gsn_trap_guidance;
sh_int	gsn_trap_sense;
sh_int	gsn_trap_spotter;
sh_int	gsn_trapfinding;
sh_int	gsn_true_death;
sh_int	gsn_true_lore;
sh_int	gsn_turn_elemental;
sh_int	gsn_turn_lycanthrope;
sh_int	gsn_turn_outsider;
sh_int	gsn_turn_plants;
sh_int	gsn_turn_reptiles;
sh_int	gsn_turn_undead;
sh_int	gsn_two_weapon_defense;
sh_int	gsn_two_weapon;
sh_int	gsn_uncanny_dodge;
sh_int	gsn_universal_tongue;
sh_int	gsn_urban_tracking;
sh_int	gsn_venom_immunity;
sh_int	gsn_warmage;
sh_int	gsn_warhorse;
sh_int	gsn_well_versed;
sh_int	gsn_whirl;
sh_int	gsn_wild_empathy;
sh_int	gsn_wildshape_elemental;
sh_int	gsn_wildshape_huge;
sh_int	gsn_wildshape_large;
sh_int	gsn_wildshape_plant;
sh_int	gsn_wildshape_tiny;
sh_int	gsn_wildshape;
sh_int	gsn_woodland_stride;

/* skills */
sh_int	gsn_appraise;
sh_int	gsn_bluff;
sh_int	gsn_climb;
sh_int	gsn_concentration;
sh_int	gsn_craft_alchemy;
sh_int	gsn_craft_armor;
sh_int	gsn_craft_bows;
sh_int	gsn_craft_cooking;
sh_int	gsn_craft_fletching;
sh_int	gsn_craft_jewelry;
sh_int	gsn_craft_leather;
sh_int	gsn_craft_mining;
sh_int	gsn_craft_poison;
sh_int	gsn_craft_tailoring;
sh_int	gsn_craft_traps;
sh_int	gsn_craft_weapons;
sh_int	gsn_decipher_script;
sh_int	gsn_diplomacy;
sh_int	gsn_disable_device;
sh_int	gsn_disguise;
sh_int	gsn_escape_artist;
sh_int	gsn_first_aid;
sh_int	gsn_streetwise;
sh_int	gsn_haggle;
sh_int	gsn_handle_animal;
sh_int	gsn_intimidate;
sh_int	gsn_jump;
sh_int	gsn_know_arcana;
sh_int	gsn_know_dungeoneering;
sh_int	gsn_know_geography;
sh_int	gsn_know_history;
sh_int	gsn_know_local;
sh_int	gsn_know_nature;
sh_int	gsn_know_nobility;
sh_int	gsn_know_planes;
sh_int	gsn_know_religion;
sh_int	gsn_mount;
sh_int	gsn_pick_lock;
sh_int	gsn_perception;
sh_int	gsn_perform;
sh_int	gsn_search;
sh_int	gsn_sense_motive;
sh_int	gsn_sleight_of_hand;
sh_int	gsn_stealth;
sh_int	gsn_spellcraft;
sh_int	gsn_survival;
sh_int	gsn_swim;
sh_int	gsn_tumble;
sh_int	gsn_use_magic;

/* weapon proficiency */
sh_int	gsn_unarmed_strike;
sh_int	gsn_weapon_battleaxe;
sh_int	gsn_weapon_bola;
sh_int	gsn_weapon_club;
sh_int	gsn_weapon_chakram;
sh_int	gsn_weapon_crossbow_hand;
sh_int	gsn_weapon_crossbow_heavy;
sh_int	gsn_weapon_crossbow_light;
sh_int	gsn_weapon_dart;
sh_int	gsn_weapon_double_axe;
sh_int	gsn_weapon_falchion;
sh_int	gsn_weapon_finesse;
sh_int	gsn_weapon_flail_dire;
sh_int	gsn_weapon_flail;
sh_int	gsn_weapon_focus;
sh_int	gsn_weapon_glaive;
sh_int	gsn_weapon_greataxe;
sh_int	gsn_weapon_greatclub;
sh_int	gsn_weapon_greatsword;
sh_int	gsn_weapon_guisarme;
sh_int	gsn_weapon_halberd;
sh_int	gsn_weapon_hammer;
sh_int	gsn_weapon_handaxe;
sh_int	gsn_weapon_javelin;
sh_int	gsn_weapon_kama;
sh_int	gsn_weapon_kukri;
sh_int	gsn_weapon_lance;
sh_int	gsn_weapon_longbow_composite;
sh_int	gsn_weapon_longbow;
sh_int	gsn_weapon_mace;
sh_int	gsn_weapon_mastery;
sh_int	gsn_weapon_grandmastery;
sh_int	gsn_weapon_morningstar;
sh_int	gsn_weapon_nunchaku;
sh_int	gsn_weapon_pick;
sh_int	gsn_weapon_prof_exotic;
sh_int	gsn_weapon_prof_martial;
sh_int	gsn_weapon_prof_simple;
sh_int	gsn_weapon_quarterstaff;
sh_int	gsn_weapon_ranseur;
sh_int	gsn_weapon_rapier;
sh_int	gsn_weapon_sai;
sh_int	gsn_weapon_sap;
sh_int	gsn_weapon_scimitar;
sh_int	gsn_weapon_scythe;
sh_int	gsn_weapon_short_blade;
sh_int	gsn_weapon_shortbow_composite;
sh_int	gsn_weapon_shortbow;
sh_int	gsn_weapon_shuriken;
sh_int	gsn_weapon_siangham;
sh_int	gsn_weapon_sickle;
sh_int	gsn_weapon_sling;
sh_int	gsn_weapon_spear;
sh_int	gsn_weapon_specialization;
sh_int	gsn_weapon_spiked_chain;
sh_int	gsn_weapon_sword_bastard;
sh_int	gsn_weapon_sword_double;
sh_int	gsn_weapon_sword_long;
sh_int	gsn_weapon_sword_short;
sh_int	gsn_weapon_thinblade;
sh_int	gsn_weapon_throwing_axe;
sh_int	gsn_weapon_trident;
sh_int	gsn_weapon_urgrosh;
sh_int	gsn_weapon_waraxe_dwarven;
sh_int	gsn_weapon_whip;



/*
	The following special functions are available for mobiles.
*/

DECLARE_SPEC_FUN(	spec_executioner		);
DECLARE_SPEC_FUN(	spec_fido				);
DECLARE_SPEC_FUN(	spec_guard			);
DECLARE_SPEC_FUN(	spec_janitor			);
DECLARE_SPEC_FUN(	spec_thief			);

/*
	Utility macros.
*/

#define UMIN(a, b)						((a) < (b) ? (a) : (b))
#define UMAX(a, b)						((a) > (b) ? (a) : (b))
#define URANGE(a, b, c)				((b) < (a) ? (a) : (b) > (c) ? (c) : (b))
#define LOWER(c)							((c) >= 'A' && (c) <= 'Z' ? (c)+'a'-'A' : (c))
#define UPPER(c)							((c) >= 'a' && (c) <= 'z' ? (c)+'A'-'a' : (c))
#define ROUNDUP(a)						(round(a + 0.5))

#define IS_SET(flag, bit)			((flag)  & (bit))
#define SET_BIT(var, bit)			((var)  |= (bit))
#define REMOVE_BIT(var, bit)	((var)  &= (~(bit)))
#define TOGGLE_BIT(var, bit)	((var)  ^= (bit))
#define IS_SHIFT(val, bit)		((val)   & (1 << (bit)))
#define SET_SHIFT(var, bit)		((var)  |= (1 << (bit)))
#define UNSHIFT( bit ) 				((ffs(bit) - 1))
#define SHIFT( bit )  		    ((1)<<(bit))
#define NOT(val)							((val)^0xFFFFFFFF)

#define get_room_index(vnum)	((vnum) < 0 ? NULL : (vnum) >= MAX_VNUM ? NULL : room_index[vnum])
#define get_mob_index(vnum)		((vnum) < 0 ? NULL : (vnum) >= MAX_VNUM ? NULL :  mob_index[vnum])
#define get_obj_index(vnum)		((vnum) < 0 ? NULL : (vnum) >= MAX_VNUM ? NULL :  obj_index[vnum])

/*
	Character macros.
*/
#define max_air(ch)						(get_curr_con(ch) * 2)
#define max_hunger(ch)				(48)
#define max_thirst(ch)				(24 + get_curr_con(ch))
#define max_drunk(ch)					(get_curr_con(ch) * 7)

#define CH(descriptor)  			(descriptor->original ? descriptor->original : descriptor->character)

#define MP_VALID_MOB(ch)			((ch)->desc == NULL && IS_NPC(ch) && !IS_SET(ch->act, ACT_WILL_DIE) && !IS_AFFECTED(ch, AFF_DOMINATE) && !IS_AFFECTED(ch, AFF2_POSSESS))

#define CAN_CRITICAL(ch)			(race_type_table[race_type(ch)].can_crit && !rspec_req(ch, RSPEC_SWARM))

#define in_area(ch, vnum)			(ch->in_room != NULL \
															&& ch->in_room->area->low_r_vnum == vnum)

#define IS_UNDERWATER(ch)			(ch->in_room != NULL \
															&& !rspec_req(ch, RSPEC_AQUATIC) \
															&& (ch->in_room->sector_type == SECT_UNDER_WATER \
															|| ch->in_room->sector_type == SECT_OCEAN))

#define IS_SILENCED(ch)				(!IS_NPC(ch) && IS_SET(pvnum_index[ch->pcdata->pvnum]->flags, PVNUM_SILENCED))
#define IS_MUTED(ch)					(!IS_NPC(ch) && IS_SET(pvnum_index[ch->pcdata->pvnum]->flags, PVNUM_MUTED))

#define IS_EQ_MELDED(ch)				(is_polymorph(ch) && body_type(ch) != race_table[ch->race].body_type)
#define IS_ENTANGLED(ch)				(IS_AFFECTED(ch, AFF2_ENTANGLED) && !IS_AFFECTED(ch, AFF_FREEDOM))
#define IS_ENCUMBERED(ch)				(encumberance(ch) > 0)
#define IS_OVERLOADED(ch)				(encumberance(ch) >= OVERLOADED)
#define IS_NPC(ch)							((ch)->npcdata != NULL)
#define IS_IMMORTAL(ch)					(get_trust(ch) >= LEVEL_IMMORTAL)
#define PLR_FUNCTION(ch, func)	(ch->desc && ch->desc->account && IS_SET(ch->desc->account->functions, func))
#define IS_GOD(ch)							((!IS_NPC((ch)) && (ch)->pcdata->pvnum < 100) || ((ch)->desc && (ch)->desc->account && (ch)->desc->account->functions & FUNCTION_GOD))
#define IS_CREATOR(ch)					(which_god(ch) == GOD_CREATOR)
#define IS_UNDEAD(ch)						(race_type(ch) == RTYPE_UNDEAD)
#define IS_LIVING(ch)						(get_curr_con(ch) != -1)
#define IS_ANIMAL(ch)						(IS_NPC(ch) && ch->perm_int <= 2 && (race_type(ch) == RTYPE_ANIMAL || race_type(ch) == RTYPE_MAGICAL))

#define IS_RACE(ch, stat)							(ch->race == stat || race_table[ch->race].parent_race == stat)
#define IS_ACT(ch, stat)							(IS_NPC(ch) && IS_SET(ch->act, stat))
#define IS_UNIQUE(ch)									(IS_NPC(ch) && ch->pIndexData->unique)
#define IS_PLR(ch, stat)							(!IS_NPC(ch) && IS_SET(ch->act, stat))
#define IS_AFFECTED(ch, sn)						(sn > 0 ? (IS_SET((ch)->affected_by, (sn)) || IS_SET(race_table[(ch)->race].affected_by, (sn))) : IS_SET((ch)->affected2_by, 0 - (sn)))
#define IS_RACE_AFFECT(ch, sn)				(IS_SET(race_table[(ch)->race].affected_by, (sn)))
#define IS_DEAF(ch)										(IS_AFFECTED(ch, AFF_DEAF))
#define IS_DEAD(ch)										(ch->position == POS_DEAD || IS_PLR(ch, PLR_DEAD))
#define IS_TIED(ch)										(IS_AFFECTED(ch, AFF2_TIED_UP))
#define IS_FALLING(ch)								(IS_AFFECTED(ch, AFF2_FALLING))
#define IS_POISONED(ch)								(IS_AFFECTED(ch, AFF_POISON) || ch->poison != NULL)
#define IS_DISEASED(ch)								(ch->first_disease != NULL)
#define IS_PET(mob, ch)								(mob->master && mob->master == ch && IS_ACT(mob, ACT_PET|ACT_FAMILIAR|ACT_COMPANION|ACT_WARHORSE))
#define IS_GUARD(mob)							(IS_NPC(mob) && mob->in_room && mob->in_room->area == mob->pIndexData->area && (mob->pIndexData->spec_fun == spec_guard || IS_ACT(mob, ACT_GUARD)))
#define IS_CITIZEN(mob)						(IS_ACT(mob, ACT_CITIZEN) && mob->in_room && mob->in_room->area == mob->pIndexData->area)
#define IS_SEVERED(ch, part)					(IS_SET((ch)->severed, (part)))

#define CAN_SWIM(ch)					(rspec_req(ch, RSPEC_AQUATIC) || rspec_req(ch, RSPEC_WATER) || IS_AFFECTED(ch, AFF_WATER_WALK) || race_table[get_race(ch)].swim_speed)
#define CAN_CLIMB(ch)					(race_table[get_race(ch)].climb_speed)
#define CAN_ETHEREAL_WALK(ch)	(IS_AFFECTED(ch, AFF2_ETHEREAL))
#define CAN_ASTRAL_WALK(ch)		(IS_AFFECTED(ch, AFF2_ASTRAL))
#define IS_HIDDEN(ch)					(IS_AFFECTED(ch, AFF_HIDE) || IS_AFFECTED(ch, AFF_INVISIBLE))
#define CAN_SEE_MAGIC(ch)			(is_affected(ch, gsn_detect_magic) || class_ability(ch, gsn_dweomersight))

#define CAN_BREATH_WATER(ch)	(IS_GOD(ch) || IS_AFFECTED(ch, AFF_WATER_BREATH) || domain_apotheosis(ch, DOMAIN_WATER) || rspec_req(ch, RSPEC_AQUATIC) || race_type(ch) == RTYPE_UNDEAD || (class_level(ch, CLASS_SORCERER) >= 20 && get_bloodline(ch) == BLOODLINE_WATER))
#define CAN_FIREWALK(ch)			(IS_GOD(ch) || rspec_req(ch, RSPEC_FIRE) || is_immune(ch, SDESC_FIRE) || (class_level(ch, CLASS_SORCERER) >= 20 && get_bloodline(ch) == BLOODLINE_FIRE))
#define IS_HUMANOID(ch)				(race_type(ch) == RTYPE_HUMANOID || race_type(ch) == RTYPE_MONSTROUS)
#define IS_INCORPOREAL(ch)		(rspec_req(ch, RSPEC_INCORPOREAL))

#define IS_FLYING(ch)					(IS_AFFECTED(ch, AFF_FLYING))
#define CAN_FLY(ch)						(is_affected(ch, gsn_fly) || race_table[get_race(ch)].fly_speed || IS_AFFECTED(ch, AFF2_ETHEREAL) || IS_INCORPOREAL(ch))

#define IS_GOOD(ch)						(ch->alignment >= 350)
#define IS_EVIL(ch)						(ch->alignment <= -350)
#define IS_LAWFUL(ch)					(ch->ethos >= 350)
#define IS_CHAOTIC(ch)				(ch->ethos <= -350)
#define IS_NEUTRAL(ch)				(!IS_GOOD(ch) && !IS_EVIL(ch))
#define IS_UNCONCERNED(ch)		(!IS_LAWFUL(ch) && !IS_CHAOTIC(ch))

#define IS_AWAKE(ch)				(ch->position > POS_SLEEPING && !IS_AFFECTED(ch, AFF2_PETRIFICATION) && !IS_PLR(ch, PLR_DEAD))
#define IS_FLATFOOTED(ch)		(!is_affected(ch, gsn_foresight) && !domain_apotheosis(ch, DOMAIN_PLANNING) && (ch->distracted || is_affected(ch, gsn_bluff) || (ch->position != POS_FIGHTING && !learned(ch, gsn_uncanny_dodge))))
#define IS_HELPLESS(ch)			(ch->position <= POS_SLEEPING || (IS_AFFECTED(ch, AFF2_PARALYSIS) && !IS_AFFECTED(ch, AFF_FREEDOM)) || get_curr_dex(ch) == 0 || drunk_level(ch) >= DRUNK_TOTALLED)

#define IS_OUTSIDE(ch)		(ch->in_room != NULL \
														&& !IS_SET(ch->in_room->room_flags, ROOM_INDOORS) \
														&& ch->in_room->sector_type != SECT_INSIDE    \
														&& ch->in_room->sector_type != SECT_UNDER_GROUND  \
														&& ch->in_room->sector_type != SECT_UNDER_WATER   \
														&& ch->in_room->sector_type != SECT_DEEP_EARTH)

#define IS_INDOORS(ch)		(ch->in_room != NULL \
														IS_SET(ch->in_room->room_flags, ROOM_INDOORS) \
														&& (ch->in_room->sector_type == SECT_INSIDE    \
														|| ch->in_room->sector_type == SECT_UNDER_GROUND  \
														|| ch->in_room->sector_type == SECT_DEEP_EARTH))

#define NO_WEATHER_SECT(sect)	(IS_SET(sector_table[sect].flags, SFLAG_NOWEATHER))

#define WAIT_STATE(ch, npulse)	(ch->wait = UMAX(ch->wait, npulse*3/2))

#define	COMBATMODE(ch, mode)	(IS_SET(ch->combatmode, mode))
#define	METAMAGIC(ch, mode)		(IS_SET(ch->metamagic, mode))

#define combat_mount(ch)			(IS_ACT(ch, ACT_WARHORSE) || learned(ch, gsn_combat_rearing))
#define is_mount(mount, ch)		(IS_NPC(mount) && mount->master && mount->master == ch && ch->mounting == mount)
#define faith_enemies(ch, victim)		 (ch->god && victim->god && god_table[victim->god].faith_enemy[ch->god])
/*
	Object macros.
*/
#define CAN_WEAR(obj, part)				(IS_SET(obj->wear_flags,  part) || ((part == CAN_WEAR_HOLD || part == CAN_WEAR_BOTH) && IS_SET(obj->wear_flags, CAN_WEAR_TAKE)))
#define IS_OBJ_STAT(obj, stat)		(IS_SET(obj->extra_flags, stat))
#define IS_WORN(obj)							((obj)->wear_loc > WEAR_NONE && (obj)->wear_loc < MAX_WEAR)
#define IS_CARRIED(obj)						((obj)->carried_by && (obj)->wear_loc == WEAR_NONE)
#define WEAR_LOC(obj, stat)				((obj)->wear_loc == stat)
#define IS_OBJ_TYPE(obj, stat)		((obj)->item_type == stat)
#define IS_WEAPON(obj)						((obj)->item_type == ITEM_WEAPON)
#define IS_AMMO(obj)							((obj)->item_type == ITEM_AMMO)
#define IS_ARMOR(obj)							((obj)->item_type == ITEM_ARMOR)
#define WEAPON_FLAG(obj, stat)		(((obj)->item_type == ITEM_WEAPON || (obj)->item_type == ITEM_AMMO) && IS_SET((obj)->value[1], stat))
#define ARMOR_FLAG(obj, stat)			((obj)->item_type == ITEM_ARMOR && IS_SET((obj)->value[1], stat))
#define TREASURE_FLAG(obj, stat)	((obj)->item_type == ITEM_TREASURE && IS_SET((obj)->value[0], stat))
#define WEAPON_TYPE(obj, stat)		((obj)->item_type == ITEM_WEAPON && (obj)->value[0] == stat)
#define ARMOR_TYPE(obj, stat)			((obj)->item_type == ITEM_ARMOR && (obj)->value[0] == stat)
#define TOOL_TYPE(obj, stat)			((obj)->item_type == ITEM_TOOLS && (obj)->value[0] == stat)
#define IS_OBJ_GOOD(obj)					(IS_OBJ_STAT(obj, ITEM_GOOD) || WEAPON_FLAG(obj,WFLAG_HOLY))
#define IS_OBJ_EVIL(obj)					(IS_OBJ_STAT(obj, ITEM_EVIL) || WEAPON_FLAG(obj,WFLAG_UNHOLY))
#define IS_OBJ_LAWFUL(obj)				(IS_OBJ_STAT(obj, ITEM_LAWFUL) || WEAPON_FLAG(obj, WFLAG_AXIOMATIC))
#define IS_OBJ_CHAOTIC(obj)				(IS_OBJ_STAT(obj, ITEM_CHAOTIC) || WEAPON_FLAG(obj, WFLAG_ANARCHIC))
#define WSPEC(obj, stat)					((obj) != NULL && (obj)->item_type == ITEM_WEAPON && IS_SET(weapon_table[(obj)->value[0]].weap_spec, stat))
#define IS_OWNER(obj, ch)					((obj)->owned_by && !IS_NPC(ch) && (obj)->owned_by == (ch)->pcdata->pvnum)

#define is_speedy(ch, wield, wield2)		(IS_AFFECTED(ch, AFF_HASTE) || (wield != NULL && WEAPON_FLAG(wield, WFLAG_SPEED)) || (wield2 != NULL && WEAPON_FLAG(wield2, WFLAG_SPEED)))

/*
	Trap macros
*/
#define is_trap_armed(obj)				(IS_OBJ_TYPE(obj, ITEM_TRAP) && (obj)->value[3])
#define TRAP_TRIGGER(obj, stat)		(IS_OBJ_TYPE(obj, ITEM_TRAP) && IS_SET(obj->value[2], stat))
#define TRAP_RESET(obj)						(obj->value[1])
#define TRAP_STATE(obj)						(obj->value[3])
#define TRAP_VALUE(obj)						(obj->value[4])


/*
	Spell macros
*/
#define IS_AREA_SPELL(sn)			(IS_SET(skill_table[sn].flags, SF_AREA_CONE|SF_AREA_BLAST|SF_ENEMIES|SF_AREA_LINE|SF_GROUP))
#define IS_OFFENSIVE(ch, sn)	(skill_table[sn].target == TAR_CHAR_OFFENSIVE || skill_table[sn].target == TAR_OBJ_CHAR_OFF || (IS_UNDEAD(ch) && skill_table[sn].target == TAR_UNDEAD_OFF))


/*
	Structure for a command in the command lookup table.
*/

struct cmd_type
{
	char				*	const name;
	DO_FUN			*	do_fun;
	bool					position;
	sh_int				level;
	int						action;
	bool					log;
	int						flags;
};

/*
	Structure for a social in the socials table.
*/

struct social_type
{
	char				*	const name;
	char				*	const char_no_arg;
	char				*	const others_no_arg;
	char				*	const char_found;
	char				*	const others_found;
	char				*	const vict_found;
	char				*	const char_auto;
	char				*	const others_auto;
};


/*
	Global constants.
*/
extern	const struct	slot_bonus_type slot_bonus_table	[100];
extern	const struct	spell_level_type spell_slot_table	[100];
extern	const struct	spell_level_type sorcerer_spell_table	[100];
extern	const struct	warrior_spell_type warrior_spell_table	[100];
extern	const struct	spell_level_type sorcerer_known_table	[100];
extern	const struct	spell_level_type bard_known_table	[100];
extern	const struct	bard_spell_type bard_spell_table	[100];
extern	const struct	max_spell_type max_spell_table	[21];
extern	const struct	armor_type armor_table	[];
extern	const struct	tool_type tool_table	[];
extern	const struct	component_type component_table	[];
extern	const struct	disease_type disease_table	[MAX_DISEASE];
extern	const struct	poison_type poison_table	[MAX_POISON];
extern	const struct	weapon_type weapon_table	[WEAPON_TYPE_MAX];
extern	const struct	material_type material_table	[MATERIAL_MAX];
extern	const struct	attack_type martial_arts_table	[];
extern	const struct	attack_type brawling_table	[];
extern	const struct	attack_part_type dam_no_dice	[ATTK_MAX];
extern	const struct	attack_part_type dam_size_dice	[ATTK_MAX];

extern	struct	race_type		race_table	[MAX_RACE];
extern	struct	god_type		god_table		[MAX_GOD];
extern	struct	skill_type	skill_table	[];

extern	const	struct	bitvector_type	bitvector_table[];
extern	const	struct	topic_data	topic_table	[MAX_TOPIC];
extern	const	struct	race_type_type	race_type_table	[RTYPE_MAX];
extern	const	struct	sector_type	sector_table	[SECT_MAX];
extern	const	struct	cmd_type		cmd_table		[];
extern	const	struct	liq_type		liq_table		[LIQ_MAX];
extern	const	struct	social_type	social_table	[];
extern	char	*	const	title_table	[MAX_CLASS]	[MAX_LEVEL+1]	[2];
extern	char *	const	dir_name		[];
extern	char *	const	rev_dir_name		[];
extern	const	sh_int	rev_dir		[];
extern	char *	const	wind_dir_name	[];
extern	const int	trap_door[];
extern	const int	trap_dir[];
extern	int		wflag_cost_mod		[];
extern	int		armflag_cost_mod		[];

extern	char *	const	light_levels		[];
extern	char *	const	move_speeds			[];
extern	char *	const	he_she 					[];
extern	char *	const	him_her 				[];
extern	char *	const	his_her 				[];
extern	char *	const	a_flags 				[];
extern	char *	const	a2_flags 				[];
extern	char *	const	a_types 				[];
extern	char *	const	bab_saves				[];
extern	char *	const	act_flags 			[];
extern	char *	const	area_flags			[];
extern	char *	const	arm_types				[];
extern	char *	const	bow_types				[];
extern	char *	const	combat_styles		[];
extern	char *	const	cont_flags			[];
extern	char *	const	domain_types		[];
extern	char *	const	dtype_flags			[];
extern	char *	const	metamagic_flags	[];
extern	char *	const	exit_flags			[];
extern	char *	const	f_flags					[];
extern	char *	const	furn_poses			[];
extern	char *	const	god_types				[];
extern	char *	const	lang_names 			[];
extern	char *	const	liq_types				[];
extern	char *	const	material_types 	[];
extern	char *	const	component_flags [];
extern	char *	const	mprog_flags			[];
extern	char *	const	o_flags 				[];
extern	char *	const	o_types 				[];
extern	char *	const	p_types					[];
extern	char *	const	attack_part_flags [];
extern	char *	const	plr_flags 			[];
extern	char *	const	poison_names		[];
extern	char *	const	disease_names		[];
extern	char *	const	portal_flags		[];
extern	char *	const	r_flags	 				[];
extern	char *	const	r_types					[];
extern	char *	const	class_types			[];
extern	char *	const	body_types			[];
extern	char *	const	race_specs			[];
extern	char *	const	faith_ranks			[];
extern	char *	const	reset_exit_types	[];
extern	char *	const	reset_rand_types	[];
extern	char *	const	rtype_flags			[];
extern	char *	const	race_enemy_names	[];
extern	char *	const	school_types		[];
extern	char *	const	oppschool_types	[];
extern	char *	const	bloodline_types	[];
extern	char *	const	spell_flags			[];
extern	char *	const	save_flags			[];
extern	char *	const	target_types		[];
extern	char *	const	prof_flags			[];
extern	char *	const	sdesc_flags			[];
extern	char *	const	sect_types			[];
extern	char *	const	sex_types				[];
extern	char *	const	size_types 			[];
extern	char *	const	tool_types			[];
extern	char *	const	w_flags 				[];
extern	char *	const	weap_types			[];
extern	char *	const	weapon_flag_descs	[];
extern	char *	const	weapon_flags		[];
extern	char *	const	wear_locs 			[];
extern	char *  const material_types	[];
extern	char *  const trap_triggers		[];
extern	char *  const trap_types			[];
extern	char *  const function_flags	[];
extern	char *	const	crime_titles		[];

/*
	Global variables.
*/
MUD_DATA			*	mud;
COMBAT_DATA		* battle_list;

FILE				*	fpReserve;
FILE				*	fpAppend;

ROOM_INDEX_DATA	*	room_index[MAX_VNUM];
MOB_INDEX_DATA	*	mob_index[MAX_VNUM];
OBJ_INDEX_DATA	*	obj_index[MAX_VNUM];
PVNUM_DATA			*	pvnum_index[MAX_PVNUM];
char						*	str_empty;
char						mpdamstring[MAX_INPUT_LENGTH];


#define NOT_AUTHED(ch) (!IS_NPC((ch)) && get_auth_state((ch)) != AUTH_AUTHED \
								 				&& IS_SET(pvnum_index[(ch)->pcdata->pvnum]->flags, PVNUM_UNAUTHED))

#define NEW_AUTH(ch)	((!IS_NPC((ch)) && (ch)->level == 1) || NOT_AUTHED((ch)))

#define IS_WAITING_FOR_AUTH(ch) (!IS_NPC((ch)) && (ch)->desc && get_auth_state((ch)) == AUTH_ONLINE \
										 						&& IS_SET(pvnum_index[(ch)->pcdata->pvnum]->flags, PVNUM_UNAUTHED))

/*
	Command functions.
	Defined in act_*.c (mostly).
*/
DECLARE_DO_FUN(	do_a			);
DECLARE_DO_FUN(	do_activate);
DECLARE_DO_FUN(	do_abilities);
DECLARE_DO_FUN(	do_adjective);
DECLARE_DO_FUN(	do_advance	);
DECLARE_DO_FUN(	do_affects	);
DECLARE_DO_FUN(	do_afk    	);
DECLARE_DO_FUN(	do_ahelp   	);
DECLARE_DO_FUN(	do_aid	   	);
DECLARE_DO_FUN(	do_alchemy	);
DECLARE_DO_FUN(	do_alias  	);
DECLARE_DO_FUN(	do_alist		);
DECLARE_DO_FUN(	do_appraise );
DECLARE_DO_FUN(	do_area_assign	);
DECLARE_DO_FUN(	do_areas		);
DECLARE_DO_FUN(	do_arrest		);
DECLARE_DO_FUN(	do_assassinate	);
DECLARE_DO_FUN(	do_astat		);
DECLARE_DO_FUN(	do_at		);
DECLARE_DO_FUN(	do_attack		);
DECLARE_DO_FUN(	do_authorize);
DECLARE_DO_FUN(	do_bamfin		);
DECLARE_DO_FUN(	do_bamfout		);
DECLARE_DO_FUN(	do_ban		);
DECLARE_DO_FUN(	do_bank		);
DECLARE_DO_FUN(	do_bash	);
DECLARE_DO_FUN(	do_beep		);
DECLARE_DO_FUN(	do_bio			);
DECLARE_DO_FUN(	do_block  	);
DECLARE_DO_FUN(	do_bluff	);
DECLARE_DO_FUN(	do_feint	);
DECLARE_DO_FUN(	do_taunt	);
DECLARE_DO_FUN(	do_tie	);
DECLARE_DO_FUN(	do_bounty		);
DECLARE_DO_FUN(	do_breath	);
DECLARE_DO_FUN(	do_brew	);
DECLARE_DO_FUN(	do_buffer 	);
DECLARE_DO_FUN(	do_burn 	);
DECLARE_DO_FUN(	do_buy		);
DECLARE_DO_FUN(	do_bullrush	);
DECLARE_DO_FUN(	do_camp		);
DECLARE_DO_FUN(	do_cast		);
DECLARE_DO_FUN(	do_castle 	);
DECLARE_DO_FUN(	do_question);
DECLARE_DO_FUN(	do_answer);
DECLARE_DO_FUN(	do_chat		);
DECLARE_DO_FUN(	do_charge		);
DECLARE_DO_FUN(	do_claim		);
DECLARE_DO_FUN(	do_clan_mssg);
DECLARE_DO_FUN(	do_clans		);
DECLARE_DO_FUN(	do_clanset	);
DECLARE_DO_FUN(	do_clanwhere	);
DECLARE_DO_FUN(	do_showclass		);
DECLARE_DO_FUN(	do_cloak		);
DECLARE_DO_FUN(	do_clock  	);
DECLARE_DO_FUN(	do_close		);
DECLARE_DO_FUN(	do_coffer		);
DECLARE_DO_FUN(	do_color  	);
DECLARE_DO_FUN(	do_combatmode	);
DECLARE_DO_FUN(	do_commands	);
DECLARE_DO_FUN(	do_components);
DECLARE_DO_FUN(	do_compare	);
DECLARE_DO_FUN(	do_conceal	);
DECLARE_DO_FUN(	do_config		);
DECLARE_DO_FUN(	do_connect	);
DECLARE_DO_FUN(	do_consider	);
DECLARE_DO_FUN(	do_context_help	);
DECLARE_DO_FUN(	do_cook	);
DECLARE_DO_FUN(	do_copyover	);
DECLARE_DO_FUN(	do_counterspell	);
DECLARE_DO_FUN(	do_coupdegrace);
DECLARE_DO_FUN(	do_craft_poison	);
DECLARE_DO_FUN(	do_craft_armor	);
DECLARE_DO_FUN(	do_craft_weapons	);
DECLARE_DO_FUN(	do_craft_fletching	);
DECLARE_DO_FUN(	do_cpu		);
DECLARE_DO_FUN(	do_craft	);
DECLARE_DO_FUN(	do_credits	);
DECLARE_DO_FUN(	do_death		);
DECLARE_DO_FUN(	do_delete 	);
DECLARE_DO_FUN(	do_deny		);
DECLARE_DO_FUN(	do_demand		);
DECLARE_DO_FUN(	do_description	);
DECLARE_DO_FUN(	do_destroy	);
DECLARE_DO_FUN(	do_diceroll );
DECLARE_DO_FUN(	do_disarm		);
DECLARE_DO_FUN(	do_disconnect	);
DECLARE_DO_FUN(	do_disguise	);
DECLARE_DO_FUN(	do_dismiss		);
DECLARE_DO_FUN(	do_dismount	);
DECLARE_DO_FUN(	do_divert	);
DECLARE_DO_FUN(	do_domain		);
DECLARE_DO_FUN(	do_donate		);
DECLARE_DO_FUN(	do_disable	);
DECLARE_DO_FUN(	do_discharge	);
DECLARE_DO_FUN(	do_door		);
DECLARE_DO_FUN(	do_down		);
DECLARE_DO_FUN(	do_drag		);
DECLARE_DO_FUN(	do_draw	);
DECLARE_DO_FUN(	do_drink		);
DECLARE_DO_FUN(	do_drop		);
DECLARE_DO_FUN(	do_dump		);
DECLARE_DO_FUN(	do_east		);
DECLARE_DO_FUN(	do_eat		);
DECLARE_DO_FUN(	do_echo		);
DECLARE_DO_FUN(	do_edit		);
DECLARE_DO_FUN(	do_email		);
DECLARE_DO_FUN(	do_emote		);
DECLARE_DO_FUN(	do_empty		);
DECLARE_DO_FUN(	do_enchant	);
DECLARE_DO_FUN(	do_enter		);
DECLARE_DO_FUN(	do_equipment	);
DECLARE_DO_FUN(	do_withdraw	);
DECLARE_DO_FUN(	do_examine	);
DECLARE_DO_FUN(	do_exits		);
DECLARE_DO_FUN(	do_familiar	);
DECLARE_DO_FUN(	do_faveenemy);
DECLARE_DO_FUN(	do_feats 	);
DECLARE_DO_FUN(	do_fight		);
DECLARE_DO_FUN(	do_file		);
DECLARE_DO_FUN(	do_fill		);
DECLARE_DO_FUN(	do_finger		);
DECLARE_DO_FUN(	do_fish		);
DECLARE_DO_FUN(	do_fixpass 	);
DECLARE_DO_FUN(	do_fly			);
DECLARE_DO_FUN(	do_follow		);
DECLARE_DO_FUN(	do_forage 	);
DECLARE_DO_FUN(	do_force		);
DECLARE_DO_FUN(	do_forceren	);
DECLARE_DO_FUN(	do_forcerent	);
DECLARE_DO_FUN(	do_forget		);
DECLARE_DO_FUN(	do_freeze		);
DECLARE_DO_FUN(	do_gaze		);
DECLARE_DO_FUN(	do_get		);
DECLARE_DO_FUN(	do_give		);
DECLARE_DO_FUN(	do_goto		);
DECLARE_DO_FUN(	do_gouge  	);
DECLARE_DO_FUN(	do_grapple	);
DECLARE_DO_FUN(	do_greet		);
DECLARE_DO_FUN(	do_grep   	);
DECLARE_DO_FUN(	do_group		);
DECLARE_DO_FUN(	do_heal		);
DECLARE_DO_FUN(	do_help		);
DECLARE_DO_FUN(	do_hlist		);
DECLARE_DO_FUN(	do_hold			);
DECLARE_DO_FUN(	do_holylight	);
DECLARE_DO_FUN(	do_html		);
DECLARE_DO_FUN(	do_identify	);
DECLARE_DO_FUN(	do_immtalk	);
DECLARE_DO_FUN(	do_initiate	);
DECLARE_DO_FUN(	do_instaroom		);
DECLARE_DO_FUN(	do_instazone		);
DECLARE_DO_FUN(	do_intimidate	);
DECLARE_DO_FUN(	do_inventory	);
DECLARE_DO_FUN(	do_invis		);
DECLARE_DO_FUN(	do_join		);
DECLARE_DO_FUN(	do_jump		);
DECLARE_DO_FUN(	do_junk	);
DECLARE_DO_FUN(	do_kneel		);
DECLARE_DO_FUN(	do_knock		);
DECLARE_DO_FUN(	do_land			);
DECLARE_DO_FUN(	do_languages);
DECLARE_DO_FUN(	do_learn		);
DECLARE_DO_FUN(	do_level  	);
DECLARE_DO_FUN(	do_locate 	);
DECLARE_DO_FUN(	do_list		);
DECLARE_DO_FUN(	do_listen		);
DECLARE_DO_FUN(	do_lock		);
DECLARE_DO_FUN(	do_log		);
DECLARE_DO_FUN(	do_look		);
DECLARE_DO_FUN(	do_lookup		);
DECLARE_DO_FUN(	do_madd		);
DECLARE_DO_FUN(	do_makeclan	);
DECLARE_DO_FUN(	do_makewild	);
DECLARE_DO_FUN(	do_mana		);
DECLARE_DO_FUN(	do_map 		);
DECLARE_DO_FUN(	do_maze		);
DECLARE_DO_FUN(	do_memory		);
DECLARE_DO_FUN(	do_metamagic	);
DECLARE_DO_FUN(	do_mfind		);
DECLARE_DO_FUN(	do_mlist		);
DECLARE_DO_FUN(	do_slist		);
DECLARE_DO_FUN(	do_inn_list		);
DECLARE_DO_FUN(	do_stable_list		);
DECLARE_DO_FUN(	do_mload		);
DECLARE_DO_FUN(	do_mount		);
DECLARE_DO_FUN(	do_move		);
DECLARE_DO_FUN(	do_mpareaecho);
DECLARE_DO_FUN(	do_mpaset		);
DECLARE_DO_FUN(	do_mpasound	);
DECLARE_DO_FUN(	do_mpat   	);
DECLARE_DO_FUN(	do_mpcalculate);
DECLARE_DO_FUN(	do_mpclearfeat);
DECLARE_DO_FUN(	do_mpcommands	);
DECLARE_DO_FUN(	do_mpcommands	);
DECLARE_DO_FUN(	do_mpdamage	);
DECLARE_DO_FUN(	do_mpdelay	);
DECLARE_DO_FUN(	do_mpdo			);
DECLARE_DO_FUN(	do_mpecho 	);
DECLARE_DO_FUN(	do_mpechoaround);
DECLARE_DO_FUN(	do_mpechoat	);
DECLARE_DO_FUN(	do_mpfollow	);
DECLARE_DO_FUN(	do_mpforce	);
DECLARE_DO_FUN(	do_mpgorand	);
DECLARE_DO_FUN(	do_mpgoto 	);
DECLARE_DO_FUN(	do_mpinfect	);
DECLARE_DO_FUN(	do_mpjunk 	);
DECLARE_DO_FUN(	do_mpjunk_person);
DECLARE_DO_FUN(	do_mpkill 	);
DECLARE_DO_FUN(	do_mplock		);
DECLARE_DO_FUN(	do_mplog		);
DECLARE_DO_FUN(	do_mpmadd 	);
DECLARE_DO_FUN(	do_mpmload	);
DECLARE_DO_FUN(	do_mpmset 	);
DECLARE_DO_FUN(	do_mpoadd 	);
DECLARE_DO_FUN(	do_mpoload	);
DECLARE_DO_FUN(	do_mposet 	);
DECLARE_DO_FUN(	do_mppractice 	);
DECLARE_DO_FUN(	do_mppoison	);
DECLARE_DO_FUN(	do_mppurge	);
DECLARE_DO_FUN(	do_mpquiet	);
DECLARE_DO_FUN(	do_mpstat		);
DECLARE_DO_FUN(	do_mpsetfeat);
DECLARE_DO_FUN(	do_mpswap		);
DECLARE_DO_FUN(	do_mptransfer	);
DECLARE_DO_FUN(	do_mptrigger	);
DECLARE_DO_FUN(	do_mpunintercept	);
DECLARE_DO_FUN(	do_mpunlock	);
DECLARE_DO_FUN(	do_mpwalkto	);
DECLARE_DO_FUN(	do_mpzset		);
DECLARE_DO_FUN(	do_mset			);
DECLARE_DO_FUN(	do_mstat		);
DECLARE_DO_FUN(	do_mute			);
DECLARE_DO_FUN(	do_mwhere		);
DECLARE_DO_FUN(	do_nban			);
DECLARE_DO_FUN(	do_nominate	);
DECLARE_DO_FUN(	do_north		);
DECLARE_DO_FUN(	do_nohelps	);
DECLARE_DO_FUN(	do_note			);
DECLARE_DO_FUN(	do_ofind		);
DECLARE_DO_FUN(	do_olist		);
DECLARE_DO_FUN(	do_oload		);
DECLARE_DO_FUN(	do_open			);
DECLARE_DO_FUN(	do_openfiles	);
DECLARE_DO_FUN(	do_opstat		);
DECLARE_DO_FUN(	do_order		);
DECLARE_DO_FUN(	do_osay			);
DECLARE_DO_FUN(	do_oset			);
DECLARE_DO_FUN(	do_ostat		);
DECLARE_DO_FUN(	do_outcast	);
DECLARE_DO_FUN(	do_owhere		);
DECLARE_DO_FUN(	do_pardon		);
DECLARE_DO_FUN(	do_password	);
DECLARE_DO_FUN(	do_peace		);
DECLARE_DO_FUN(	do_peek			);
DECLARE_DO_FUN(	do_pick			);
DECLARE_DO_FUN(	do_plant		);
DECLARE_DO_FUN(	do_pledge		);
DECLARE_DO_FUN(	do_pload		);
DECLARE_DO_FUN(	do_poison  	);
DECLARE_DO_FUN(	do_port   	);
DECLARE_DO_FUN(	do_pose			);
DECLARE_DO_FUN(	do_pounce		);
DECLARE_DO_FUN(	do_pquit		);
DECLARE_DO_FUN(	do_pray			);
DECLARE_DO_FUN(	do_prepare	);
DECLARE_DO_FUN(	do_prompt		);
DECLARE_DO_FUN(	do_purge		);
DECLARE_DO_FUN(	do_put			);
DECLARE_DO_FUN(	do_qui			);
DECLARE_DO_FUN(	do_quit			);
DECLARE_DO_FUN(	do_racecast	);
DECLARE_DO_FUN(	do_showrace	);
DECLARE_DO_FUN(	do_rcreate	);
DECLARE_DO_FUN(	do_rdelete	);
DECLARE_DO_FUN(	do_rdupe		);
DECLARE_DO_FUN(	do_reboo		);
DECLARE_DO_FUN(	do_reboot		);
DECLARE_DO_FUN(	do_recall		);
DECLARE_DO_FUN(	do_recho		);
DECLARE_DO_FUN(	do_refresh	);
DECLARE_DO_FUN(	do_regoto		);
DECLARE_DO_FUN(	do_release	);
DECLARE_DO_FUN(	do_reload		);
DECLARE_DO_FUN(	do_remove		);
DECLARE_DO_FUN(	do_rename		);
DECLARE_DO_FUN(	do_rend			);
DECLARE_DO_FUN(	do_renounce	);
DECLARE_DO_FUN(	do_rent			);
DECLARE_DO_FUN(	do_clan_rent);
DECLARE_DO_FUN(	do_repeat		);
DECLARE_DO_FUN(	do_reply		);
DECLARE_DO_FUN(	do_rpstat		);
DECLARE_DO_FUN(	do_rescale 	);
DECLARE_DO_FUN(	do_respawn	);
DECLARE_DO_FUN(	do_resurrect);
DECLARE_DO_FUN(	do_repair 	);
DECLARE_DO_FUN(	do_request 	);
DECLARE_DO_FUN(	do_rescue 	);
DECLARE_DO_FUN(	do_resetarea	);
DECLARE_DO_FUN(	do_resistances	);
DECLARE_DO_FUN(	do_rest			);
DECLARE_DO_FUN(	do_restore	);
DECLARE_DO_FUN(	do_retran		);
DECLARE_DO_FUN(	do_return		);
DECLARE_DO_FUN(	do_reveal		);
DECLARE_DO_FUN(	do_revert		);
DECLARE_DO_FUN(	do_recover	);
DECLARE_DO_FUN(	do_reward		);
DECLARE_DO_FUN(	do_rlist		);
DECLARE_DO_FUN(	do_rstat		);
DECLARE_DO_FUN(	do_sacrifice);
DECLARE_DO_FUN(	do_save			);
DECLARE_DO_FUN(	do_savearea	);
DECLARE_DO_FUN(	do_savewho	);
DECLARE_DO_FUN(	do_say			);
DECLARE_DO_FUN(	do_sayto		);
DECLARE_DO_FUN(	do_scan			);
DECLARE_DO_FUN(	do_school		);
DECLARE_DO_FUN(	do_score		);
DECLARE_DO_FUN(	do_scribe		);
DECLARE_DO_FUN(	do_search 	);
DECLARE_DO_FUN(	do_sell			);
DECLARE_DO_FUN(	do_setfunc	);
DECLARE_DO_FUN(	do_shadow 	);
DECLARE_DO_FUN(	do_sheath		);
DECLARE_DO_FUN(	do_shoot		);
DECLARE_DO_FUN(	do_shout		);
DECLARE_DO_FUN(	do_shove		);
DECLARE_DO_FUN(	do_show			);
DECLARE_DO_FUN(	do_showbloodline);
DECLARE_DO_FUN(	do_showcurve	); /* in act_wiz.c */
DECLARE_DO_FUN(	do_showdomain	);
DECLARE_DO_FUN(	do_showgod	);
DECLARE_DO_FUN(	do_shutdow	);
DECLARE_DO_FUN(	do_shutdown	);
DECLARE_DO_FUN(	do_shutoff	);
DECLARE_DO_FUN(	do_silence	);
DECLARE_DO_FUN(	do_sing			);
DECLARE_DO_FUN(	do_crouch		);
DECLARE_DO_FUN(	do_sit			);
DECLARE_DO_FUN(	do_skills 	);
DECLARE_DO_FUN(	do_skin			);
DECLARE_DO_FUN(	do_sla			);
DECLARE_DO_FUN(	do_slay			);
DECLARE_DO_FUN(	do_sleep		);
DECLARE_DO_FUN(	do_slice		);
DECLARE_DO_FUN(	do_slookup	);
DECLARE_DO_FUN(	do_songs		);
DECLARE_DO_FUN(	do_pemote		);
DECLARE_DO_FUN(	do_snoop		);
DECLARE_DO_FUN(	do_socials	);
DECLARE_DO_FUN(	do_south		);
DECLARE_DO_FUN(	do_speak  	);
DECLARE_DO_FUN(	do_speed  	);
DECLARE_DO_FUN(	do_spells 	);
DECLARE_DO_FUN(	do_split		);
DECLARE_DO_FUN(	do_spy			);
DECLARE_DO_FUN(	do_sset			);
DECLARE_DO_FUN(	do_sstat		);
DECLARE_DO_FUN(	do_stack		); /* in debug.c */
DECLARE_DO_FUN(	do_stable		);
DECLARE_DO_FUN(	do_stand		);
DECLARE_DO_FUN(	do_steal		);
DECLARE_DO_FUN(	do_stealth	);
DECLARE_DO_FUN(	do_strike 	);
DECLARE_DO_FUN(	do_stun			);
DECLARE_DO_FUN(	do_sunder		);
DECLARE_DO_FUN(	do_swindle	);
DECLARE_DO_FUN(	do_switch		);
DECLARE_DO_FUN(	do_tame			);
DECLARE_DO_FUN(	do_teach		);
DECLARE_DO_FUN(	do_tell			);
DECLARE_DO_FUN(	do_otell		);
DECLARE_DO_FUN(	do_test			);
DECLARE_DO_FUN(	do_think		);
DECLARE_DO_FUN(	do_throw		);
DECLARE_DO_FUN(	do_tick   	);
DECLARE_DO_FUN(	do_time			);
DECLARE_DO_FUN(	do_timemode	);
DECLARE_DO_FUN(	do_title		);
DECLARE_DO_FUN(	do_track  	);
DECLARE_DO_FUN(	do_train		);
DECLARE_DO_FUN(	do_trample	);
DECLARE_DO_FUN(	do_transfer	);
DECLARE_DO_FUN(	do_trip   	);
DECLARE_DO_FUN(	do_unalias	);
DECLARE_DO_FUN(	do_unlock		);
DECLARE_DO_FUN(	do_untie		);
DECLARE_DO_FUN(	do_up				);
DECLARE_DO_FUN(	do_usage		);
DECLARE_DO_FUN(	do_use			);
DECLARE_DO_FUN(	do_value		);
DECLARE_DO_FUN(	do_version	); /* in debug.c */
DECLARE_DO_FUN(	do_visible	);
DECLARE_DO_FUN(	do_mimic		);
DECLARE_DO_FUN(	do_vt100  	);
DECLARE_DO_FUN(	do_delay		);
DECLARE_DO_FUN(	do_warn			);
DECLARE_DO_FUN(	do_wake			);
DECLARE_DO_FUN(	do_waypoint	);
DECLARE_DO_FUN(	do_weapons 	);
DECLARE_DO_FUN(	do_wear			);
DECLARE_DO_FUN(	do_weather	);
DECLARE_DO_FUN(	do_west			);
DECLARE_DO_FUN(	do_where		);
DECLARE_DO_FUN(	do_whirl		);
DECLARE_DO_FUN(	do_whisper	);
DECLARE_DO_FUN(	do_who			);
DECLARE_DO_FUN(	do_wizhelp	);
DECLARE_DO_FUN(	do_wizlock	);
DECLARE_DO_FUN(	do_write		);
DECLARE_DO_FUN(	do_read			);
DECLARE_DO_FUN(	do_seal			);
DECLARE_DO_FUN(	do_unseal		);
DECLARE_DO_FUN(	do_unarrest	);
DECLARE_DO_FUN(	do_link			);
DECLARE_DO_FUN(	do_complaint);
DECLARE_DO_FUN(	do_hitch		);
DECLARE_DO_FUN(	do_unhitch	);


/*
	Spell-like and supernatural ability functions.
	Defined in skills.c.
*/
DECLARE_SPELL_FUN(	ability_arcane_weapon		);		
DECLARE_SPELL_FUN(	ability_channeling_attack);		
DECLARE_SPELL_FUN(	ability_companion				);		
DECLARE_SPELL_FUN(	ability_corrupt_touch		);		
DECLARE_SPELL_FUN(	ability_death_arrow			);		
DECLARE_SPELL_FUN(	ability_death_arrow			);		
DECLARE_SPELL_FUN(	ability_defensive_stance);		
DECLARE_SPELL_FUN(	ability_divine_refuge		);		
DECLARE_SPELL_FUN(	ability_divine_location	);		
DECLARE_SPELL_FUN(	ability_divine_veil			);		
DECLARE_SPELL_FUN(	ability_divine_wrath		);		
DECLARE_SPELL_FUN(	ability_energy_arrow		);		
DECLARE_SPELL_FUN(	ability_hail_of_arrows	);		
DECLARE_SPELL_FUN(	ability_imbue_arrow			);		
DECLARE_SPELL_FUN(	ability_impromptu_sneak_attack);		
DECLARE_SPELL_FUN(	ability_lay_hands				);		
DECLARE_SPELL_FUN(	ability_pilfer_dweomer	);		
DECLARE_SPELL_FUN(	ability_rage						);		
DECLARE_SPELL_FUN(	ability_retributive_strike	);		
DECLARE_SPELL_FUN(	ability_seeker_arrow		);		
DECLARE_SPELL_FUN(	ability_shadow_companion);		
DECLARE_SPELL_FUN(	ability_skip_rock				);		
DECLARE_SPELL_FUN(	ability_smite						);		
DECLARE_SPELL_FUN(	ability_turn_undead			);		
DECLARE_SPELL_FUN(	ability_touch_of_courage);		
DECLARE_SPELL_FUN(	ability_touch_of_grace	);		
DECLARE_SPELL_FUN(	ability_touch_of_resolve);		
DECLARE_SPELL_FUN(	ability_touch_of_zeal		);		
DECLARE_SPELL_FUN(	ability_touch_of_righteousness);		
DECLARE_SPELL_FUN(	ability_touch_of_profanity);		
DECLARE_SPELL_FUN(	ability_warhorse				);		
DECLARE_SPELL_FUN(	ability_web_attack			);		
DECLARE_SPELL_FUN(	ability_wild_empathy		);		
DECLARE_SPELL_FUN(	ability_wildshape				);		

/*
	Song functions.
	Defined in magic.c.
*/
DECLARE_SPELL_FUN(	song_curse_song			);		
DECLARE_SPELL_FUN(	song_song_of_inspiration);		
DECLARE_SPELL_FUN(	song_song_of_suggestion);		
DECLARE_SPELL_FUN(	song_song_of_heroism);		
DECLARE_SPELL_FUN(	song_song_of_fascination);		
DECLARE_SPELL_FUN(	song_song_of_courage);		
DECLARE_SPELL_FUN(	song_song_of_freedom);		
DECLARE_SPELL_FUN(	song_song_of_sleep);		
DECLARE_SPELL_FUN(	song_song_of_soothing);		
DECLARE_SPELL_FUN(	song_dirge_of_doom	);		

/*
	Spell functions.
	Defined in magic.c.
*/
DECLARE_SPELL_FUN(	spell_ray_of_frost				);		
DECLARE_SPELL_FUN(	spell_flame_tongue				);		
DECLARE_SPELL_FUN(	spell_acid_arrow					);		
DECLARE_SPELL_FUN(	spell_acid_breath					);		
DECLARE_SPELL_FUN(	spell_acid_spittle				);		
DECLARE_SPELL_FUN(	spell_acid_splash					);
DECLARE_SPELL_FUN(	spell_admonishing_ray			);		
DECLARE_SPELL_FUN(	spell_aid									);
DECLARE_SPELL_FUN(	spell_align_weapon				);
DECLARE_SPELL_FUN(	spell_animate_dead				);		
DECLARE_SPELL_FUN(	spell_animate_object			);			
DECLARE_SPELL_FUN(	spell_antimagic_field 		);			
DECLARE_SPELL_FUN(	spell_affect 		);			
DECLARE_SPELL_FUN(	spell_arcane_eye					);		
DECLARE_SPELL_FUN(	spell_banish							);	
DECLARE_SPELL_FUN(	spell_blacklight			);			
DECLARE_SPELL_FUN(	spell_black_tentacles			);			
DECLARE_SPELL_FUN(	spell_break_enchantment				);		
DECLARE_SPELL_FUN(	spell_burning_hands				);		
DECLARE_SPELL_FUN(	spell_call_lightning			);			
DECLARE_SPELL_FUN(	spell_calm				);
DECLARE_SPELL_FUN(	spell_cause_fear					);	
DECLARE_SPELL_FUN(	spell_chain_lightning			);			
DECLARE_SPELL_FUN(	spell_charm				);
DECLARE_SPELL_FUN(	spell_chill_touch				);		
DECLARE_SPELL_FUN(	spell_circle_of_death			);		
DECLARE_SPELL_FUN(	spell_cloudkill					);		
DECLARE_SPELL_FUN(	spell_command						);		
DECLARE_SPELL_FUN(	spell_color_spray				);		
DECLARE_SPELL_FUN(	spell_cone_of_cold			);	
DECLARE_SPELL_FUN(	spell_conj_elemental		);		
DECLARE_SPELL_FUN(	spell_contagion					);		
DECLARE_SPELL_FUN(	spell_contraption				);		
DECLARE_SPELL_FUN(	spell_control_weather		);			
DECLARE_SPELL_FUN(	spell_create_food				);		
DECLARE_SPELL_FUN(	spell_create_spring			);		
DECLARE_SPELL_FUN(	spell_create_water			);		
DECLARE_SPELL_FUN(	spell_creeping_doom			);		
DECLARE_SPELL_FUN(	spell_cure							);		
DECLARE_SPELL_FUN(	spell_dancing_lights		);			
DECLARE_SPELL_FUN(	spell_darkness					);			
DECLARE_SPELL_FUN(	spell_daylight					);			
DECLARE_SPELL_FUN(	spell_destruction				);			
DECLARE_SPELL_FUN(	spell_gate       				);		
DECLARE_SPELL_FUN(	spell_death_knell				);		
DECLARE_SPELL_FUN(	spell_demand						);		
DECLARE_SPELL_FUN(	spell_detect_alignment	);		
DECLARE_SPELL_FUN(	spell_detect_poison			);		
DECLARE_SPELL_FUN(	spell_detect_undead			);		
DECLARE_SPELL_FUN(	spell_detect_shapechanger);		
DECLARE_SPELL_FUN(	spell_dimensional_lock	);
DECLARE_SPELL_FUN(	spell_discern_location	);		
DECLARE_SPELL_FUN(	spell_disintegrate			);		
DECLARE_SPELL_FUN(	spell_disjunction				);		
DECLARE_SPELL_FUN(	spell_dispel_alignment	);		
DECLARE_SPELL_FUN(	spell_dispel_magic			);		
DECLARE_SPELL_FUN(	spell_disrupt_undead		);		
DECLARE_SPELL_FUN(	spell_dominate					);		
DECLARE_SPELL_FUN(	spell_earthquake				);		
DECLARE_SPELL_FUN(	spell_electric_jolt			);
DECLARE_SPELL_FUN(	spell_endure_elements		);		
DECLARE_SPELL_FUN(	spell_energy_drain			);		
DECLARE_SPELL_FUN(	spell_enervation				);		
DECLARE_SPELL_FUN(	spell_entangle					);			
DECLARE_SPELL_FUN(	spell_envision					);	
DECLARE_SPELL_FUN(	spell_euphoria_gas			);		
DECLARE_SPELL_FUN(	spell_eyebite						);			
DECLARE_SPELL_FUN(	spell_faerie_fire				);		
DECLARE_SPELL_FUN(	spell_faithful_hound		);		
DECLARE_SPELL_FUN(	spell_faith_hammer			);	
DECLARE_SPELL_FUN(	spell_farheal						);	
DECLARE_SPELL_FUN(	spell_fatigue						);	
DECLARE_SPELL_FUN(	spell_fear_gas					);		
DECLARE_SPELL_FUN(	spell_finger_of_death		);		
DECLARE_SPELL_FUN(	spell_fire_breath				);		
DECLARE_SPELL_FUN(	spell_fireball					);	
DECLARE_SPELL_FUN(	spell_firestorm						);		
DECLARE_SPELL_FUN(	spell_flame_arrow					);		
DECLARE_SPELL_FUN(	spell_flame_blade					);		
DECLARE_SPELL_FUN(	spell_flamestrike					);		
DECLARE_SPELL_FUN(	spell_floating_disc				);		
DECLARE_SPELL_FUN(	spell_fly									);
DECLARE_SPELL_FUN(	spell_fog_cloud						);	
DECLARE_SPELL_FUN(	spell_forceful_hand				);	
DECLARE_SPELL_FUN(	spell_freedom							);	
DECLARE_SPELL_FUN(	spell_frost_breath				);		
DECLARE_SPELL_FUN(	spell_gas_breath					);		
DECLARE_SPELL_FUN(	spell_gentle_repose				);		
DECLARE_SPELL_FUN(	spell_gust_of_wind				);		
DECLARE_SPELL_FUN(	spell_grasping_hand				);	
DECLARE_SPELL_FUN(	spell_greater_teleport		);	
DECLARE_SPELL_FUN(	spell_hallucinatory_terrain);				
DECLARE_SPELL_FUN(	spell_harden							);	
DECLARE_SPELL_FUN(	spell_harm								);	
DECLARE_SPELL_FUN(	spell_heal								);	
DECLARE_SPELL_FUN(	spell_heal_mount					);	
DECLARE_SPELL_FUN(	spell_heat_metal					);	
DECLARE_SPELL_FUN(	spell_heroes_feast				);	
DECLARE_SPELL_FUN(	spell_hold								);	
DECLARE_SPELL_FUN(	spell_horrid_wilting			);	
DECLARE_SPELL_FUN(	spell_ice_storm						);	
DECLARE_SPELL_FUN(	spell_implosion						);			
DECLARE_SPELL_FUN(	spell_inflict							);			
DECLARE_SPELL_FUN(	spell_invis								);			
DECLARE_SPELL_FUN(	spell_improved_invis			);			
DECLARE_SPELL_FUN(	spell_insect_plague				);			
DECLARE_SPELL_FUN(	spell_keen_edge						);		
DECLARE_SPELL_FUN(	spell_knock								);		
DECLARE_SPELL_FUN(	spell_light								);		
DECLARE_SPELL_FUN(	spell_lightning_bolt			);		
DECLARE_SPELL_FUN(	spell_lightning_breath		);			
DECLARE_SPELL_FUN(	spell_locate_creature			);		
DECLARE_SPELL_FUN(	spell_locate_object				);		
DECLARE_SPELL_FUN(	spell_magic_missile				);		
DECLARE_SPELL_FUN(	spell_magic_vestment			);			
DECLARE_SPELL_FUN(	spell_magic_weapon				);			
DECLARE_SPELL_FUN(	spell_major_image    			);		
DECLARE_SPELL_FUN(	spell_make_whole    			);		
DECLARE_SPELL_FUN(	spell_mass_bears_endurance);				
DECLARE_SPELL_FUN(	spell_mass_bulls_strength );				
DECLARE_SPELL_FUN(	spell_mass_cats_grace 		);				
DECLARE_SPELL_FUN(	spell_mass_cure 					);				
DECLARE_SPELL_FUN(	spell_mass_heal 					);				
DECLARE_SPELL_FUN(	spell_mass_inflict 				);				
DECLARE_SPELL_FUN(	spell_mass_invis					);		
DECLARE_SPELL_FUN(	spell_mass_refresh				);	
DECLARE_SPELL_FUN(	spell_mending							);	
DECLARE_SPELL_FUN(	spell_meteor_swarm				);	
DECLARE_SPELL_FUN(	spell_mislead							);		
DECLARE_SPELL_FUN(	spell_neutralize_poison		);		
DECLARE_SPELL_FUN(	spell_nightmare						);		
DECLARE_SPELL_FUN(	spell_nondetection				);		
DECLARE_SPELL_FUN(	spell_null								);
DECLARE_SPELL_FUN(	spell_paralysis_gas				);		
DECLARE_SPELL_FUN(	spell_permanency					);		
DECLARE_SPELL_FUN(	spell_phantasmal_killer		);		
DECLARE_SPELL_FUN(	spell_poison							);	
DECLARE_SPELL_FUN(	spell_polymorph						);	
DECLARE_SPELL_FUN(	spell_possess							);	
DECLARE_SPELL_FUN(	spell_power_word_blind 		);				
DECLARE_SPELL_FUN(	spell_power_word_kill 		);				
DECLARE_SPELL_FUN(	spell_power_word_stun 		);				
DECLARE_SPELL_FUN(	spell_private_sanctum     );		
DECLARE_SPELL_FUN(	spell_produce_flame				);		
DECLARE_SPELL_FUN(	spell_protection_energy		);		
DECLARE_SPELL_FUN(	spell_protection_spells		);		
DECLARE_SPELL_FUN(	spell_psionic_shockwave		);			
DECLARE_SPELL_FUN(	spell_purify							);			
DECLARE_SPELL_FUN(	spell_rainbow_pattern			);	
DECLARE_SPELL_FUN(	spell_raise_dead					);	
DECLARE_SPELL_FUN(	spell_rebuke							);	
DECLARE_SPELL_FUN(	spell_refresh							);	
DECLARE_SPELL_FUN(	spell_reincarnate					);	
DECLARE_SPELL_FUN(	spell_remove_blindness		);			
DECLARE_SPELL_FUN(	spell_remove_curse				);		
DECLARE_SPELL_FUN(	spell_remove_deafness			);			
DECLARE_SPELL_FUN(	spell_remove_disease			);		
DECLARE_SPELL_FUN(	spell_remove_paralysis		);		
DECLARE_SPELL_FUN(	spell_remove_fear					);		
DECLARE_SPELL_FUN(	spell_resist_elements			);		
DECLARE_SPELL_FUN(	spell_restoration					);		
DECLARE_SPELL_FUN(	spell_resurrection				);		
DECLARE_SPELL_FUN(	spell_revive							);		
DECLARE_SPELL_FUN(	spell_rusting_grasp				);		
DECLARE_SPELL_FUN(	spell_sanctify 						);		
DECLARE_SPELL_FUN(	spell_scorching_ray				);		
DECLARE_SPELL_FUN(	spell_scintillating_pattern	);		
DECLARE_SPELL_FUN(	spell_scrying							);		
DECLARE_SPELL_FUN(	spell_searing_light				);		
DECLARE_SPELL_FUN(	spell_sending							);		
DECLARE_SPELL_FUN(	spell_secure_shelter			);		
DECLARE_SPELL_FUN(	spell_shadow_bolt					);	
DECLARE_SPELL_FUN(	spell_shatter							);	
DECLARE_SPELL_FUN(	spell_shillelagh					);	
DECLARE_SPELL_FUN(	spell_shocking_grasp			);			
DECLARE_SPELL_FUN(	spell_shout								);	
DECLARE_SPELL_FUN(	spell_sign_of_wrath				);	
DECLARE_SPELL_FUN(	spell_simulacrum					);	
DECLARE_SPELL_FUN(	spell_sirocco							);	
DECLARE_SPELL_FUN(	spell_slay_living					);	
DECLARE_SPELL_FUN(	spell_sleep								);	
DECLARE_SPELL_FUN(	spell_sleet_storm					);		
DECLARE_SPELL_FUN(	spell_slow_gas						);		
DECLARE_SPELL_FUN(	spell_snake_dart					);		
DECLARE_SPELL_FUN(	spell_sonic_blast					);			
DECLARE_SPELL_FUN(	spell_soul_bind						);			
DECLARE_SPELL_FUN(	spell_speak_with_dead 		);		
DECLARE_SPELL_FUN(	spell_stabilize						);		
DECLARE_SPELL_FUN(	spell_stone_to_flesh			);		
DECLARE_SPELL_FUN(	spell_stone_shower				);		
DECLARE_SPELL_FUN(	spell_storm_of_vengeance	);		
DECLARE_SPELL_FUN(	spell_suffocate       		);		
DECLARE_SPELL_FUN(	spell_suggestion       		);		
DECLARE_SPELL_FUN(	spell_summon							);	
DECLARE_SPELL_FUN(	spell_summon_ally					);	
DECLARE_SPELL_FUN(	spell_summon_creature			);	
DECLARE_SPELL_FUN(	spell_summon_shadow       );		
DECLARE_SPELL_FUN(	spell_sunbeam				      );		
DECLARE_SPELL_FUN(	spell_sunburst			      );		
DECLARE_SPELL_FUN(	spell_telepathic_bond			);		
DECLARE_SPELL_FUN(	spell_teleport						);	
DECLARE_SPELL_FUN(	spell_teleport_object			);		
DECLARE_SPELL_FUN(	spell_time_stop						);		
DECLARE_SPELL_FUN(	spell_tongues     				);		
DECLARE_SPELL_FUN(	spell_totem								);	
DECLARE_SPELL_FUN(	spell_transmute_metal			);		
DECLARE_SPELL_FUN(	spell_true_form						);		
DECLARE_SPELL_FUN(	spell_true_resurrection		);		
DECLARE_SPELL_FUN(	spell_vampiric_touch			);			
DECLARE_SPELL_FUN(	spell_ventriloquate				);		
DECLARE_SPELL_FUN(	spell_wall								);		
DECLARE_SPELL_FUN(	spell_water_breathing			);		
DECLARE_SPELL_FUN(	spell_water_walk					);		
DECLARE_SPELL_FUN(	spell_water_to_wine				);				
DECLARE_SPELL_FUN(	spell_weakness_gas				);		
DECLARE_SPELL_FUN(	spell_winged_call					);		
DECLARE_SPELL_FUN(	spell_word_of_faith				);
DECLARE_SPELL_FUN(	spell_word_of_recall			);

/*
	OS-dependent declarations.
	These are all very standard library functions,
	but some systems have incomplete or non-ansi header files.
*/

#if defined(_AIX)
char	*	crypt	args( ( const char *key, const char *salt ) );
#endif

#if defined(apollo)
int		atoi		args( ( const char *string ) );
void *	calloc	args( ( unsigned nelem, size_t size ) );
char *	crypt	args( ( const char *key, const char *salt ) );
#endif

#if defined(hpux)
char *	crypt	args( ( const char *key, const char *salt ) );
#endif

#if	defined(interactive)
#endif

#if defined(linux)
char *	crypt	args( ( const char *key, const char *salt ) );
#endif

#if	defined(MIPS_OS)
char *	crypt	args( ( const char *key, const char *salt ) );
#endif

#if	defined(NeXT)
char *	crypt	args( ( const char *key, const char *salt ) );
#endif

#if	defined(sequent)
char *	crypt		args( ( const char *key, const char *salt ) );
int	fclose			args( ( FILE *stream ) );
int	fprintf			args( ( FILE *stream, const char *format, ... ) );
int	fread				args( ( void *ptr, int size, int n, FILE *stream ) );
int	fseek				args( ( FILE *stream, long offset, int ptrname ) );
void	perror		args( ( const char *s ) );
int	ungetc			args( ( int c, FILE *stream ) );
#endif

/*
	The crypt(3) function is not available on some operating systems.
	In particular, the U.S. Government prohibits its export from the
	United States to foreign countries.
	Turn on NOCRYPT to keep passwords in plain text.
*/

#if defined(NOCRYPT)
#define crypt(s1, s2)	(s1)
#endif

#define CLASS_DIR			"../skilltables/classes"
#define DOMAIN_DIR		"../skilltables/domains"
#define STYLE_DIR			"../skilltables/styles"
#define RACESKILL_DIR	"../skilltables/races"
#define CLASSES_DIR		"../classes"
#define RACE_DIR			"../races"
#define GOD_DIR				"../gods"
#define PLAYER_DIR		"../player"
#define ACCOUNT_DIR		"../accounts"
#define CLAN_DIR			"../clans"
#define NULL_FILE			"/dev/null"

#define AUTH_FILE 		"data/auth.dat"
#define HELP_FILE			"data/help.txt"
#define DICE_FILE			"data/dice.txt"
#define COMPLAIN_FILE	"data/complaints.txt"
#define AREA_LIST			"data/area.lst"
#define NOTE_FILE			"data/notes.txt"
#define COPYOVER_FILE	"data/copyover.dat"
#define LOCKER_FILE		"data/lockers.txt"
#define SHUTDOWN_FILE	"shutdown.txt"
#define VERSION_FILE	"../src/VERSION"

/*
	redefenitions of the executables. We now have mud and current_mud
*/
#define TEST_FILE "../bin/mud"		/* executable path */
#define REAL_FILE "../bin/current_mud" /* executable path */

/*
	Our function prototypes.
	One big lump ... this is every function in Merc.
*/

#define CD	CHAR_DATA
#define MID	MOB_INDEX_DATA
#define OD	OBJ_DATA
#define OID	OBJ_INDEX_DATA
#define RID	ROOM_INDEX_DATA
#define RD	RESET_DATA
#define AD	AREA_DATA
#define TM	TACTICAL_MAP
#define HD	HELP_DATA
#define BD	BOUNTY_DATA
#define ED	EXIT_DATA
#define RTD	ROOM_TIMER_DATA


/* new auth stuff in addit.c */
int 			get_auth_state( CHAR_DATA * ch );
void 			add_to_auth( CHAR_DATA * ch );
void 			remove_from_auth( char *name );
void 			check_auth_state( CHAR_DATA * ch );
AUTH_LIST	*get_auth_name( char *name );
void 			auth_update( void );
void 			save_auth_list( void );


/*
	act_comm.c
*/
bool 			can_understand			args( ( CHAR_DATA *victim, CHAR_DATA *speaker, bool fChange ) );
bool			new_notes						args( ( CHAR_DATA *ch ) );
bool			tell								args( ( CHAR_DATA *ch, CHAR_DATA *victim, char *argument) );
void			personalize_string	args( ( CHAR_DATA *src, CHAR_DATA *tar, char *emote) );
void			personalize_emote		args( ( CHAR_DATA *src, char *emote) );
void			broadcast_channel		args( ( CHAR_DATA *src, char *txt, int channel) );
int				drunk_level					args( ( CHAR_DATA *ch ) );
void			makedrunk						args( ( CHAR_DATA *ch, char *string) );
void			do_diceroll					args( ( CHAR_DATA *ch, char *argument) );
bool			CAN_TALK						args( ( CHAR_DATA *ch ) );
bool			is_valid_password		args( ( char *pass ) );
bool			is_same_group				args( ( CHAR_DATA *ach, CHAR_DATA *bch ) );
bool			vnum_in_group				args( ( CHAR_DATA *ach, int mobvnum ) );
bool			pvnum_in_group			args( ( CHAR_DATA *ch, int pvnum ) );
void			do_llog							args( ( CHAR_DATA *ch, char *argument) );
char		*	translate_to_char		args( ( CHAR_DATA *ch, CHAR_DATA *victim, char *text ) );


/*
	act_info.c
*/
void		look_scrying			args( ( CHAR_DATA *ch, OBJ_DATA *obj, char *argument ) );
void		sprintf_exits			args( ( char * outbuf, CHAR_DATA *ch, bool fAuto ) );
void		show_examine_string	args( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
char	*	format_duration		args( ( int duration ) );
bool		search_inventory	args( ( CHAR_DATA *ch, OBJ_DATA *search_obj, char *argument ) );
int			obj_conceal_check	args( ( OBJ_DATA *obj ) );
int			bonus_bonus_langs	args( ( CHAR_DATA *ch ) );
int			fave_enemy_max		args( ( CHAR_DATA *ch ) );
int			fave_enemy_count	args( ( CHAR_DATA *ch ) );
int			fave_enemy_bonus	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void		feat_display			args( ( CHAR_DATA *ch, char *argument, bool CanTrain ) );
bool		can_train_feat		args( ( CHAR_DATA *ch, int sn, bool fDisplay ) );
bool		check_blind				args( ( CHAR_DATA *ch ) );
void		sort_alias				args( ( CHAR_DATA *ch ) );
bool		set_title					args( ( CHAR_DATA *ch, char *title ) );
void		format_help_to_char	args( ( CHAR_DATA *ch, HELP_DATA *pHelp ) );
char	*	help_title				args( ( HELP_DATA *pHelp ) );
HD		*	get_help					args( ( CHAR_DATA *ch, char *argument ) );
AD		*	lookup_area				args( ( char *arg ) );
int			lookup_tongue			args( ( char *arg ) );
int			lookup_god				args( ( char *arg ) );
int			lookup_class			args( ( char *arg ) );
int			lookup_race				args( ( char *arg ) );
CD		*	find_char_dir			args( ( CHAR_DATA *ch, bool dir, char *name ) );
bool		can_see_dir				args( ( CHAR_DATA *ch, CHAR_DATA *victim, bool dir ) );
char	*	get_color_string	args( ( CHAR_DATA *ch, int regist, int vt_code ) );
char	*	get_color_code		args( ( CHAR_DATA *ch, int regist, int vt_code ) );
void 	show_char_to_char		args( ( CHAR_DATA *ch, CHAR_DATA *victim, bool fExamine ) );
int			which_god					args( ( CHAR_DATA *ch ) );

/*
	act_move.c
*/

void		user_from_cart		args( ( CHAR_DATA *ch ) );
void		add_follower			args( ( CHAR_DATA *ch, CHAR_DATA *master ) );
void		stop_follower			args( ( CHAR_DATA *ch ) );
void		die_follower			args( ( CHAR_DATA *ch ) );
bool		move_char					args( ( CHAR_DATA *ch, int door, bool forreal, char *argument ) );
bool 		can_move_char			args( ( CHAR_DATA *ch, int door) );
void		add_shadow				args( ( CHAR_DATA *ch, CHAR_DATA *master ) );
bool		move_loss					args( ( CHAR_DATA *ch, CHAR_DATA *mount, int move ) );
void		stop_shadow				args( ( CHAR_DATA *ch ) );
void		check_speed				args( ( CHAR_DATA *ch, RID *room ) );
int			find_door					args( ( CHAR_DATA *ch, char *arg ) );

/*
	act_obj.c
*/
void		drink_obj					args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		get_obj						args( ( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *container, bool fDisplay, bool fReveal ) );
bool		put_obj						args( ( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *container, bool fDisplay, bool fReveal ) );
bool		drop_obj					args( ( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *container, bool fDisplay ) );
bool		wear_obj					args( ( CHAR_DATA *ch, OBJ_DATA *obj, bool fReplace, int location , bool fDisplay) );
bool		hands_full				args( ( CHAR_DATA *ch ) );
bool		class_allowed			args( ( OBJ_DATA *obj, CHAR_DATA *ch, bool fDisplay ) );
bool		is_handy					args( ( CHAR_DATA *ch ) );
bool		remove_obj				args( ( CHAR_DATA *ch, int iWear, bool fReplace, bool fDisplay ) );
bool		can_layer					args( ( CHAR_DATA *ch, OBJ_DATA *object, int iWear, bool fReplace, bool fDisplay ) );
int			get_layer					args( ( OBJ_DATA *object ) );

/*
	shops.c
*/
CD 		* find_keeper				args( ( CHAR_DATA *ch ) );
bool		is_keeper					args( ( CHAR_DATA *ch ) );
char	*	format_coins			args( ( int amount, bool fLong ) );
int			gold_transaction	args( ( CHAR_DATA *ch, int amount ) );
int			get_cost					args( ( CHAR_DATA *keeper, OBJ_DATA *obj, bool fBuy ) );
OD		* find_char_corpse	args( ( CHAR_DATA *ch, bool method ) );
int			haggle						args( ( CHAR_DATA *ch, CHAR_DATA *seller, int cost, bool buy ) );
int			give_gold					args( ( CHAR_DATA *ch, int amount ) );
int			account_max				args( ( CHAR_DATA *ch ) );

/*
	bounty.c
*/
void		post_bounty				args( ( CHAR_DATA *ch, CHAR_DATA *victim, int amount, int crime ) );
void		set_bounty				args( ( CHAR_DATA *ch, CHAR_DATA *victim, int crime ) );
void 		sort_bounty				args( ( BOUNTY_DATA * bptr) );
void 		remove_bounty			args( ( BOUNTY_DATA * bptr) );
BD			* get_bounty			args( ( int pvnum ) );
BD			* get_record			args( ( CHAR_DATA *ch, AREA_DATA *area, int crime ) );
bool		collect_bounty		args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		confiscate				args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );


/*
	act_wiz.c
*/
void		madd_char							args( ( CHAR_DATA *ch, CHAR_DATA *victim, char *argument) );
void		mset_char							args( ( CHAR_DATA *ch, CHAR_DATA *victim, char *argument, bool mpcommand) );
void		oset_obj							args( ( CHAR_DATA *ch, OBJ_DATA *obj, char *argument, bool mpcommand) );
int			find_location					args( ( CHAR_DATA *ch, char *arg ) );
void 		auto_release					args( ( CHAR_DATA *ch ) );
void		add_crime							args( ( CHAR_DATA *ch, PVNUM_DATA *pvnum) );
char 	*	quest_bits_to_string	args( ( unsigned char * ) );

/*
	comm.c
*/
void		delete_player					args( ( CHAR_DATA *ch ) );
bool 		write_to_descriptor 	args( ( DESCRIPTOR_DATA *d, char *txt, int length ) );
void 		force_help						args( ( DESCRIPTOR_DATA *d, char *argument ) );
char		* get_gradient				args( ( bool gradient, int current, int max ) );
int			best_three_of_four		args( ( void ) );
void		swap									args( ( CHAR_DATA *ch, char *argument ) );
void		add_letter						args( ( char *string, char letter ) );
void		roll_race							args( ( CHAR_DATA *ch ) );
void		close_socket					args( ( DESCRIPTOR_DATA *dclose , bool Force) );
void		write_to_buffer				args( ( DESCRIPTOR_DATA *d, char *txt, int length ) );
void 		send_to_room					args( ( char *txt, ROOM_INDEX_DATA *room ) );
void		send_to_char					args( ( const char *txt, CHAR_DATA *ch ) );
void		send_to_char_color		args( ( char *txt, CHAR_DATA *ch ) );
void		act										args( ( const char *format, CHAR_DATA *ch, const void *arg1, const void *arg2, int type ) );
void		log_printf						args( ( char *fmt, ...) );
void		wiz_printf						args( ( char *fmt, ...) );
void 		log_god_printf				args( ( char *fmt, ...) );
void 		log_build_printf			args( ( int vnum, char *fmt, ...) );
void		ch_printf							args( ( CHAR_DATA *ch, const char *fmt, ... ) );
void		ch_printf_color				args( ( CHAR_DATA *ch, const char *fmt, ... ) );
void		wiz_printf_room				args( ( CHAR_DATA *ch, const char *fmt, ... ) );
void		check_bad_desc				args( ( CHAR_DATA *ch ) );
void		remove_bad_desc_name	args( ( char *name ) );
void		set_heartbeat 				args( ( void ) );
void			vt100on							args( ( CHAR_DATA *) );
void			vt100off						args( ( CHAR_DATA *) );
void			vt100prompt					args( ( CHAR_DATA *) );
void			vt100prompter				args( ( CHAR_DATA *) );
CD			*	start_partial_load	args( ( CHAR_DATA *ch, char *argument) );
void 			clear_partial_load	args( ( CHAR_DATA *ch ) );
void			wait_state					args( ( CHAR_DATA *ch, int npulse) );
void			send_goodbye				args( ( DESCRIPTOR_DATA *d ) );
bool			check_parse_name		args( ( char * , bool ) );
void			add_obj_ref_hash		args( ( OBJ_DATA *obj) );
void			rem_obj_ref_hash		args( ( OBJ_DATA *obj) );
void			enter_game					args( ( CHAR_DATA *ch ) );
TM			*	get_tactical_map		args( ( CHAR_DATA *ch ) );
void			clear_tactical_map	args( ( TACTICAL_MAP *tact ) );
TM			*	get_diff_tactical		args( ( CHAR_DATA *ch ) );
char		*	get_tactical_string	args( ( CHAR_DATA *ch, TACTICAL_MAP *tact ) );
int		get_pager_breakpt		args( ( CHAR_DATA *ch ) );
int		get_page_width			args( ( CHAR_DATA *ch ) );

/*
	db.c
*/

char 	*	broken_bits						args( ( lg_int number, char *vector, bool linear ) );
void			fwrite_race					args( ( int race ) );
char *		bits_to_str					args( ( lg_int number, char *vector ) );
void			fwrite_bloodlines		args( ( void ) );
void			fwrite_components		args( ( void ) );
void			save_gods						args( ( void ) );
void			save_classes				args( ( void ) );
void			save_domains      	args( ( void ) );
void			save_races	      	args( ( void ) );
void			save_styles	      	args( ( void ) );
int				find_command				args( ( char *cmd_str, int trust ) );
int				find_social					args( ( char *social_str ) );
void			boot_db							args( ( bool fCopyOver ) );
void			area_update					args( ( void ) );
CD	*			create_mobile				args( ( MOB_INDEX_DATA *pMobIndex ) );
OD	*			create_object				args( ( OBJ_INDEX_DATA *pObjIndex, bool hashed));
void			clear_char					args( ( CHAR_DATA *ch ) );
void 			copyover_recover		args( (void) );
void			free_char						args( ( CHAR_DATA *ch ) );
char *		get_extra_descr			args( ( const char *name, EXTRA_DESCR_DATA *ed ) );
void			fread_area					args( ( FILE *fp, int segment ) );
char			fread_letter				args( ( FILE *fp ) );
lg_int		fread_number				args( ( FILE *fp ) );
char *		fread_string				args( ( FILE *fp ) );
void			fread_to_eol				args( ( FILE *fp ) );
void			oprog_read_programs	args( ( FILE *fp, OBJ_INDEX_DATA *pObjIndex ) );
void			rprog_read_programs	args( ( FILE *fp, ROOM_INDEX_DATA *pRoomIndex ) );
char *		fread_line					args( ( FILE *fp ) );
char *		fread_word					args( ( FILE *fp ) );
int				number_fuzzy				args( ( int number ) );
int				big_number_fuzzy		args( ( int number ) );
int				number_range				args( ( int from, int to ) );
int				number_percent			args( ( void ) );
float			what_percent				args( ( float x, float y ) );
int				number_door					args( ( void ) );
int				load_obj_weight			args( ( OBJ_INDEX_DATA *obj ) );
void			fix_materials				args( ( OBJ_INDEX_DATA *obj ) );
void			fix_sizes						args( ( OBJ_INDEX_DATA *obj ) );
void			load_obj_hit				args( ( OBJ_INDEX_DATA *obj ) );
int				number_bits					args( ( int width ) );
int				dice								args( ( int number, int size ) );
void			append_file					args( ( CHAR_DATA *, char *, FILE *, char * ) );
void			show_file						args( ( CHAR_DATA *ch, char *filename ) );
void			bug									args( ( const char *str, ... ) );
void			log_string					args( ( char *str ) );
void			log_god_string			args( ( char *str ) );
void			log_build_string		args( ( int vnum, char *str ) );
void			log_wiz_string			args( ( char *str ) );
bool			is_valid_save				args( ( char *file_name, char *text_crc ) );
void			advance_mobile			args( ( MOB_INDEX_DATA *mob ) );
void			create_shop					args( ( MOB_INDEX_DATA *mob ) );
void			delete_shop					args( ( MOB_INDEX_DATA *mob ) );
void			create_stable				args( ( MOB_INDEX_DATA *mob ) );
void			delete_stable				args( ( MOB_INDEX_DATA *mob ) );
void			create_inn					args( ( MOB_INDEX_DATA *mob ) );
void			delete_inn					args( ( MOB_INDEX_DATA *mob ) );
void			create_exit					args( ( ROOM_INDEX_DATA *room, int door ) );
void			delete_exit					args( ( ROOM_INDEX_DATA *room, int door ) );
void			create_room					args( ( int vnum ) );
bool			delete_room					args( ( ROOM_INDEX_DATA *room ) );
bool			delete_obj 		    	args( ( OBJ_INDEX_DATA *obj ) );
bool			delete_mob     			args( ( MOB_INDEX_DATA *mob ) );
bool			delete_help					args( ( HELP_DATA *help ) );
RID	*			make_room      			args( ( int vnum ) );
OID	*			make_object    			args( ( int vnum ) );
MID	*			make_mobile					args( ( int vnum ) );
HD	*			make_helpfile				args( ( char *argument, AREA_DATA *area ) );
ED	*			make_exit						args( ( ROOM_INDEX_DATA *pRoomIndex, ROOM_INDEX_DATA *to_room, bool door ) );
void			start_timer					args( ( int timer ) );
void			close_timer					args( ( int timer ) );
long long		display_timer			args( ( CHAR_DATA *ch, int timer ) );
int				get_alloc_size			args( ( unsigned char *str ) );
void			set_block_type			args( ( unsigned char typ, unsigned char *pMem ) );
void *		alloc_mem  		    	args( ( int sMem ) );
void *		alloc_perm  		  	args( ( bool iList ) );
void			free_mem     				args( ( bool *pMem ) );
void			add_char						args( ( CHAR_DATA *ch ) );
AD	*			get_area_from_vnum 	args( (int vnum ));


/*
	string_handler.c
*/

void			smash_tilde						args( ( char *str ) );
bool			str_prefix						args( ( const char *astr, const char *bstr ) );
bool			str_infix							args( ( const char *astr, const char *bstr ) );
bool			str_suffix						args( ( const char *astr, const char *bstr ) );
char *		strlower    					args( ( const char *str ) );
char *		strupper    					args( ( const char *str ) );
char *		str_resize  					args( ( const char *st,char *buf,int length) );
char *		a_an									args( ( const char *argument ) );
char *		format_number					args( ( int num ) );
char *		get_time_string				args( ( long time ) );
char *		numbersuf							args( ( int number ) );
char *		tocivilian						args( ( int hour ) );
char *		get_domain						args( ( const char *str ) );
char *		short_to_name					args( ( const char *str, int amount ) );
char *		capitalize						args( ( const char *str ) );
char *		capitalize_all				args( ( const char *str ) );
char *		lower_all							args( ( const char *str ) );
char *		capitalize_name				args( ( const char *str ) );
char *		capitalize_title			args( ( const char *str ) );
int				str_cat_max						args( ( const char *, const char *, int ) );
int				str_apd_max						args( ( const char *, const char *, int, int ) );
int				str_cpy_max						args( ( const char *, const char *, int ) );
void			act_sprintf						args( ( char *dest, const char *format, CHAR_DATA *ch, const void *arg1, const void *arg2 ) );
void			command								args( ( CHAR_DATA *ch, DO_FUN *command, char *fmt, ...) );
char *		format								args( ( char *fmt, ...) );
void 			cat_sprintf						args( ( char *dest,	const char *fmt, ... ) );
void 			cat_snprintf					args( ( char *dest, size_t leng, char *fmt, ... ) );
int				ansi_strlen						args( (char *txt ) );
bool			is_name								args( ( const char *str, char *namelist ) );
bool			is_name_short					args( ( const char *str, char *namelist ) );
bool 			is_name_list   				args( ( char *str, char *namelist ) );
bool 			is_string		   				args( ( char *str ) );
bool			is_multi_name_list		args( ( char *str, char *namelist ) );
bool			is_multi_name_list_short	args( ( char *str, char *namelist ) );
bool			is_multi_name_short		args( ( char *str, char *namelist ) );
char *		ansi_translate      	args( ( char *txt ) );
char *		ansi_translate_def  	args( ( CHAR_DATA *ch, char *txt, char *def ) );
char *		ansi_translate_text 	args( ( CHAR_DATA *ch, const char *txt ) );
char *		ansi_compress       	args( ( CHAR_DATA *ch, char *txt, bool color, bool code ) );
char *		ansi_strip						args( ( char *txi ) );
char *		center								args( ( char *inp, int length ) );
char *		justify								args( ( char *inp, int length ) );
char *		text_wrap							args( ( char *inp, int columns ) );
char *		ansi_justify					args( ( char *inp, int length ) );
bool			is_number							args( ( char *argument ) );
bool			is_number_argument		args( ( char *argument ) );
int				number_argument				args( ( char *argument, char *arg ) );
char *		one_argument					args( ( char *argument, char *arg_first ) );
char *		two_arguments					args( ( char *argument, char *arg_first, char *arg_second ) );
char *		grab_token						args( ( char *src, char *end_buf, char delimiter ) );
char *		replace_str						args( ( const char *new_str, const char *replace, const char *src ) );
char *		one_argument_nolower	args( ( char *argument, char *arg_first ) );


/*
	data.c
*/

void		load_notes				args( ( void ) );
void		load_bounties   	args( ( void ) );
void		save_bounties  		args( ( void ) );
void 		load_sites				args( ( void ) );
void 		save_sites				args( ( void ) );
void 		load_nsites				args( ( void ) );
void 		save_nsites				args( ( void ) );
void 		load_victors			args( ( void ) );
void 		save_victors			args( ( void ) );
void 		load_players			args( ( void ) );
void		save_players			args( ( void ) );
void		load_timeinfo			args( ( void ) );
void		save_timeinfo			args( ( void ) );
void		load_usage				args( ( void ) );
void		save_usage				args( ( void ) );
void		load_hiscores			args( ( void ) );
void		save_hiscores			args( ( void ) );
void		del_data					args( (CHAR_DATA *ch) );

/*
	mount.c
*/

bool		is_mounting						args( (CHAR_DATA *ch ) );
bool		is_mounted						args( (CHAR_DATA *ch ) );
bool		mounted_combat_check	args( ( CHAR_DATA *ch ) );

/*
	mapper.c
*/

void		sprintf_wilderness_map args( ( CHAR_DATA *ch, char *outbuf, int size, bool room ) ); 
char	* get_dynamic_room_title args( ( ROOM_INDEX_DATA *room ) ); 

/*
	edit.c
*/
int			obj_index_cost 		args( ( OBJ_INDEX_DATA *obj ) );
void		break_bits				args( ( FILE *fp, lg_int number, char *vector , bool linear) );
void		start_editing   	args( ( CHAR_DATA *ch, char *data ) );
void		stop_editing  		args( ( CHAR_DATA *ch ) );
void		stop_olc_editing	args( ( CHAR_DATA *ch, AREA_DATA *area ) );
void		edit_buffer   		args( ( CHAR_DATA *ch, char *argument ) );
char	*	copy_buffer  			args( ( CHAR_DATA *ch ) );
void		assign_area 			args( ( CHAR_DATA *ch ) );
bool		can_olc_modify		args( ( CHAR_DATA *ch, int vnum ) );
bool		show_build_vnum		args( ( CHAR_DATA *ch, int vnum ) );
char	*	flag_string				args( ( lg_int bitvector, char * const flagarray[] ) );
char	*	type_string				args( ( lg_int bitvector, char * const flagarray[] ) );
lg_int	get_flag					args( ( char *flag, char *const array[] ) );
char	*	give_flags				args( ( char *const array[]) );
char	*	fixer							args( ( char *arg ) );
void		save_area					args( ( AREA_DATA *area, bool forreal ) );


/*
	reset.c
*/
RD *			make_reset			args( ( char letter, int arg1, int arg2, int arg3 ) );
void			reset_area 			args( ( AREA_DATA  *pArea ) );
void			delete_reset		args( ( AREA_DATA  *pArea, RESET_DATA * pReset ) );
bool			is_room_reset		args( ( RESET_DATA *reset, ROOM_INDEX_DATA *room) );
bool			is_door_reset		args( ( RESET_DATA *reset, int door             )	);
bool			is_obj_reset		args( ( RESET_DATA *reset, OBJ_INDEX_DATA  *obj ) );
bool			is_mob_reset		args( ( RESET_DATA *reset, MOB_INDEX_DATA  *mob ) );

/*
	str_hash.c
*/
char	*	str_alloc 				args( ( char *str ) );
char	*	str_dupe	 				args( ( char *str ) );
void		str_free					args( ( char *str ) );
char	*	str_hash_status		args( ( char *argument) );

/*
	act_combat.c
*/
int			num_attacks						args( ( CHAR_DATA *ch, int part ) );
void		check_aura						args( ( CHAR_DATA *ch, int sn ) );
void		check_stench					args( ( CHAR_DATA *ch ) );
void		frightful_presence		args( ( CHAR_DATA *ch ) );
int			actual_tohit_bonus		args( ( OBJ_DATA *wield ) );
int			weapon_tohit_bonus		args( ( OBJ_DATA *wield ) );
int			weapon_dam_bonus			args( ( OBJ_DATA *wield ) );
int 		can_miss							args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt, bool fRanged, OBJ_DATA *wield) );
int 		GET_DAMROLL						args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt, OBJ_DATA *wield) );
int 		GET_HITROLL						args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt, OBJ_DATA *wield) );
int			combat_maneuver_check	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn ) );
int			combat_maneuver_bonus	args( ( CHAR_DATA *ch ) );
int			combat_maneuver_defense	args( ( CHAR_DATA *ch, CHAR_DATA *attacker ) );
bool		attack_of_opportunity	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		bash									args( ( CHAR_DATA *ch, CHAR_DATA *victim, int hit_adj ) );
bool		can_attack 			 			args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		can_dodge							args( ( CHAR_DATA *ch, CHAR_DATA *attacker ) );
bool		can_surprise		 			args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		can_backstab		 			args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt ) );
bool		can_melee_attack			args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		check_add_attack			args( ( CHAR_DATA *, CHAR_DATA *) );
bool		check_hit							args( ( CHAR_DATA *ch, CHAR_DATA *victim, int diceroll, int hit_adj, int dt, OBJ_DATA *wield, bool fTouch, bool fRanged) );
bool		deflect_missile				args( ( CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *wield, int dir ) );
bool		sunder								args( ( CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *obj, int hit_adj ) );
bool		disarm								args( ( CHAR_DATA *ch, CHAR_DATA *victim, int hit_adj ) );
bool		feint									args( ( CHAR_DATA *ch, CHAR_DATA *victim, int hit_adj ) );
bool		stun									args( ( CHAR_DATA *ch, CHAR_DATA *victim, int hit_adj ) );
bool		trample								args( ( CHAR_DATA *ch, CHAR_DATA *victim, int hit_adj ) );
bool		rend									args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		throw_rock						args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		pounce								args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		has_natural_weapon		args( ( CHAR_DATA *ch ) );
bool		has_opportunity				args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		is_armed							args( ( CHAR_DATA *ch, bool wield ) );
bool		is_flanking						args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		MISSILE_WIELD					args( ( CHAR_DATA *ch ) );
bool		is_missile_weapon			args( ( OBJ_DATA *obj ) );
bool		is_bow								args( ( OBJ_DATA *obj ) );
bool		reload								args( ( CHAR_DATA *ch, OBJ_DATA *wield ) );
bool		trip									args( ( CHAR_DATA *ch, CHAR_DATA *victim, int hit_adj ) );
int			calc_ac								args( ( CHAR_DATA *ch, CHAR_DATA *victim, bool fTouch ) );
int			damage_modify					args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt, int dam, OBJ_DATA *wield ) );
int			get_body_part					args( ( CHAR_DATA *ch, int dt, int type ) );
int			range_mod							args( ( CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *wield ) );
int			get_damnodice					args( ( CHAR_DATA *ch ) );
int			get_damsizedice				args( ( CHAR_DATA *ch ) );
int			get_exp_worth					args( ( CHAR_DATA *ch ) );
int			get_missile_range			args( ( OBJ_DATA *weapon ) );
OD *		get_ammo							args( ( CHAR_DATA *ch, OBJ_DATA *wield ) );
OD *		get_wield							args( ( CHAR_DATA *ch, bool fDual ) );
bool		attack								args( ( CHAR_DATA *ch, CHAR_DATA *victim) );
bool		check_parry						args( ( CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *weapon, int attack ) );
void		clear_attack_list			args( ( CHAR_DATA * ) );
void		dam_message						args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam, int dt, OBJ_DATA *wield ) );
void		damage								args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam, int dt, OBJ_DATA *wield) );
void		damage_hurt						args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam, int dt) );
void		damage_equipment			args( ( CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *obj, int dam, int dt, OBJ_DATA *wield ) );
int			obj_damage_modify			args( ( OBJ_DATA *obj, OBJ_DATA *wield, int dam, int dam_type ) );
void		death_cry							args( ( CHAR_DATA *ch ) );
void		start_grapple					args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void		stop_grapple					args( ( CHAR_DATA *ch ) );
void		fight									args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void		found_hating 					args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void		group_gain	 					args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void		make_corpse						args( ( CHAR_DATA *victim, int dt ) );
bool		one_hit								args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt, int hit_adj, OBJ_DATA * wield) );
void		raw_kill							args( ( CHAR_DATA *victim, int dt ) );
void		show_party_line				args( ( CHAR_DATA * ) );
void		stat_damage						args( ( CHAR_DATA * ch, CHAR_DATA * victim, int apply, int sn ) );
void		stop_hate_fear				args( ( CHAR_DATA *ch ) );
void		take_opportunity			args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		breath_weapon					args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		gaze_attack						args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		sever_limb						args( ( CHAR_DATA *ch, CHAR_DATA *victim, lg_int part ) );

/*
 * combat_handler.c
 */
int			xp_compute						args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
int			xp_compute_cr					args( ( CHAR_DATA *ch, int challenge ) );
void		free_unit  						args( ( CHAR_DATA *ch ) );
void		check_guard_assist		args( ( CHAR_DATA *ch, CHAR_DATA *attacker ) );
void		stop_fighting					args( ( CHAR_DATA *ch, bool fBoth ) );
void		set_fighting					args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		valid_victim					args( ( CHAR_DATA *ch ) );
bool		valid_fight						args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void		check_killer					args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
CD *		get_next_fighting			args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
CD *		who_fighting 					args( ( CHAR_DATA *ch ) );
CD *		who_grappling					args( ( CHAR_DATA *ch ) );
bool		check_recently_fought	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		in_combat							args( (CHAR_DATA * ch) );
bool		in_same_combat				args( (CHAR_DATA * ch, CHAR_DATA *victim) );
bool		is_active							args( (CHAR_DATA * ch) );
bool		turn_complete					args( (CHAR_DATA * ch) );
bool		can_mass_attack				args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		check_murder		 			args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool		is_safe								args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
TURN_DATA * get_turn_char			args( (CHAR_DATA * ch) );
TURN_DATA * new_turn					args( (void) );
void			char_from_combat		args( (CHAR_DATA * ch) );
void			char_to_combat			args( (CHAR_DATA * ch, COMBAT_DATA * combat) );
void			check_victory				args( (COMBAT_DATA * battle) );
void			clean_combat				args( (COMBAT_DATA * battle) );
void			combat_update				args( (void) );
void			free_combat					args( (COMBAT_DATA * combat) );
void			free_turn						args( (TURN_DATA * turn) );
void			initiate_combat			args( (CHAR_DATA * ch, CHAR_DATA * victim) );
void			insert_turn					args( (COMBAT_DATA * combat, TURN_DATA * nTurn) );
void			linkdead_turn				args( (CHAR_DATA * ch) );
void			mobile_turn					args( (CHAR_DATA * ch) );
void			confused_turn				args( (CHAR_DATA * ch) );
void			nuke_roundtime			args( (COMBAT_DATA * battle) );
void			remove_turn					args( (TURN_DATA * turn) );
void			roundtime						args( (TURN_DATA * turn, int roundtime) );
void			skip_turn						args( (TURN_DATA * turn, bool fWilling) );
void			swap_turn						args( (TURN_DATA * aTurn, TURN_DATA * bTurn) );
void			turn_end						args( (TURN_DATA * turn, int roundtime) );
void			update_pos					args( ( CHAR_DATA *ch, int pos ) );
void			withdraw_combat			args( (CHAR_DATA * ch) );
bool	is_light_weapon					args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
int		get_range								args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
int		weapon_skill						args( ( CHAR_DATA *ch, OBJ_DATA *wield ) );
int		apply_ac								args( ( CHAR_DATA *ch ) );
int		GET_AC									args( ( CHAR_DATA *ch, bool touch ) );
int		apply_shield						args( ( CHAR_DATA *ch ) );
int		shield_bonus						args( ( CHAR_DATA *ch ) );
int		dodge_bonus							args( ( CHAR_DATA *ch ) );
int		dodge_penalty						args( ( CHAR_DATA *ch ) );
bool	can_evade								args( ( CHAR_DATA *ch ) );
bool	has_reach								args( ( CHAR_DATA *ch, OBJ_DATA *wield ) );
int		base_attack							args( ( CHAR_DATA *ch ) );


/*
 * handler.c
 */
int		encumberance				args( ( CHAR_DATA *ch ) );
int		lock_dc				 			args( ( EXIT_DATA *pExit, OBJ_DATA *obj ) );
bool	valid_skill					args( ( int sn ) );
int 	obj_affect_cost			args( ( AFFECT_DATA *paf ) );
int		obj_cost 			args( ( OBJ_DATA *obj ) );
void	poison_attack				args( ( CHAR_DATA *ch, CHAR_DATA *victim, int type ) );
void	poison_to_char			args( ( CHAR_DATA *ch, CHAR_DATA *victim, POISON_DATA *pd ) );
void	poison_to_obj				args( ( CHAR_DATA *ch, OBJ_DATA *obj, POISON_DATA *pd ) );
void	obj_affect_poison		args( ( OBJ_DATA *obj, CHAR_DATA *victim ) );
OD		*	get_hold					args( ( CHAR_DATA *ch ) );
void	TAKE_ACTION					args( ( CHAR_DATA *victim, int action ) );
bool	IS_BURNING					args( ( OBJ_DATA * obj ) );
bool	IS_BLIND						args( ( CHAR_DATA * ch ) );
bool	IS_DAZZLED					args( ( CHAR_DATA * ch ) );
int		armor_weight				args( ( OBJ_INDEX_DATA *obj ) );
void	apply_dex_max				args( ( CHAR_DATA *ch ) );
int		get_apply						args( ( CHAR_DATA *ch, int apply ) );
int		calc_apply					args( ( CHAR_DATA *ch, int apply ) );
int		combine_apply				args( ( CHAR_DATA *ch, int apply1, int apply2 ) );
int		get_obj_apply				args( ( OBJ_DATA *obj, int apply ) );
char 	*	get_god_name			args( ( int god ) );
int		get_trust						args( ( CHAR_DATA *ch ) );
bool	is_master						args( ( CHAR_DATA *ch, CHAR_DATA *master ) );
bool	in_same_room				args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	in_camp							args( ( CHAR_DATA *ch ) );
void	infect_char					args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dis ) );
void	infect_obj					args( ( CHAR_DATA *ch, OBJ_DATA *obj, int dis ) );
void	infect_room					args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *room, int dis ) );
void	disease_from_char		args( ( CHAR_DATA *ch, DISEASE_DATA *paf ) );
void	disease_from_obj		args( ( OBJ_DATA *obj, DISEASE_DATA *paf ) );
void	disease_from_room		args( ( ROOM_INDEX_DATA *room, DISEASE_DATA *paf ) );
int		lookup_disease			args( ( char *arg ) );
int		lookup_poison				args( ( char *arg ) );
void	affect_modify				args( ( CHAR_DATA *ch, AFFECT_DATA *paf, bool fAdd ) );
void	SET_AFFECT					args( ( CHAR_DATA *ch, lg_int bitv ) );
void	REMOVE_AFFECT				args( ( CHAR_DATA *ch, lg_int bitv ) );
void	affect_to_char			args( ( CHAR_DATA *ch, CHAR_DATA *victim, AFFECT_DATA *paf ) );
void	affect_from_char		args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	affect_to_obj				args( ( CHAR_DATA *ch, OBJ_DATA *obj, AFFECT_DATA *paf ) );
void	affect_from_obj			args( ( OBJ_DATA *obj, AFFECT_DATA *paf ) );
void	AFFECT_STRIP				args( ( CHAR_DATA *ch, lg_int bitv ) );
void	affect_strip_desc		args( ( CHAR_DATA *ch, lg_int desc ) );
void	affect_strip				args( ( CHAR_DATA *ch, int sn ) );
void	affect_obj_strip		args( ( OBJ_DATA *obj, int sn ) );
void	affect_room_strip		args( ( ROOM_INDEX_DATA *room, int sn ) );
void	affect_room_strip_desc		args( ( ROOM_INDEX_DATA *room, lg_int desc ) );
bool	is_affected					args( ( CHAR_DATA *ch, int sn ) );
bool	is_obj_affected			args( ( OBJ_DATA *obj, int sn ) );
bool	is_room_affected		args( ( ROOM_INDEX_DATA *room, int sn ) );
RTD		*get_room_affect		args( ( ROOM_INDEX_DATA *room, lg_int flags ) );
RTD		*get_room_affect_vnum		args( ( int vnum, lg_int flags ) );
int	get_highest_ch_aff_level	args( ( CHAR_DATA *ch ) );
int	get_highest_obj_aff_level	args( ( OBJ_DATA *obj ) );
int	get_highest_ch_aff_school	args( ( CHAR_DATA *ch ) );
int	get_highest_obj_aff_school	args( ( OBJ_DATA *obj ) );
void	affect_join					args( ( CHAR_DATA *caster, CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	set_room_timer			args( ( CHAR_DATA *ch, ROOM_TIMER_DATA *rtd ) );
bool	del_room_timer			args( ( int vnum, int type ) );
void	char_from_room			args( ( CHAR_DATA *ch ) );
void	char_to_room				args( ( CHAR_DATA *ch, int vnum, bool forreal ) );
void	set_falling					args( ( CHAR_DATA *ch, int dist ) );
void	obj_to_char					args( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void	obj_from_char				args( ( OBJ_DATA *obj ) );
int		apply_armor_type		args( ( CHAR_DATA *ch ) );
int		armor_check_penalty	args( ( CHAR_DATA *ch ) );
bool	wears_metal					args( ( CHAR_DATA *ch, bool fWeapon ) );
OD 		* get_eq_char				args( ( CHAR_DATA *ch, int iWear ) );
OD 		* get_obj_tflag			args( ( CHAR_DATA *ch, int tflag ) );
void	check_zap						args( ( CHAR_DATA *ch, bool fDisplay ) );
void	equip_char					args( ( CHAR_DATA *ch, OBJ_DATA *obj, int iWear ) );
void	unequip_char				args( ( CHAR_DATA *ch, OBJ_DATA *obj, bool fDisplay ) );
int		count_users					args( ( OBJ_DATA * obj ) );
int		count_mob_list			args( ( MOB_INDEX_DATA *obj, OBJ_DATA *list ) );
int		char_exists    			args( ( char *arg ) );
void	obj_from_room				args( ( OBJ_DATA *obj ) );
void	obj_to_room					args( ( OBJ_DATA *obj, int vnum ) );
void	obj_to_obj					args( ( OBJ_DATA *obj, OBJ_DATA *obj_to ) );
void	obj_from_obj				args( ( OBJ_DATA *obj ) );
bool	can_use_furniture 	args( ( CHAR_DATA *ch, OBJ_DATA *obj, int position ) );
void	user_to_furniture 	args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
void	user_from_furniture	args( ( CHAR_DATA *ch ) );
void	junk_obj						args( ( OBJ_DATA *obj ) );
void	extract_obj					args( ( OBJ_DATA *obj ) );
void	junk_mob						args( ( CHAR_DATA *ch ) );
void	extract_char				args( ( CHAR_DATA *ch ) );
void	extract_exit   			args( ( ROOM_INDEX_DATA *room, EXIT_DATA * pExit, int door ) );
int		get_AFFECT_level		args( ( CHAR_DATA *ch, lg_int bitv ) );
int		get_affect_level		args( ( CHAR_DATA *ch, int sn ) );
int		obj_affect_level		args( ( OBJ_DATA *obj, int sn ) );
char	*	get_name					args( ( CHAR_DATA *ch ) );
CD		*	get_caster				args( ( CHAR_DATA *ch, int sn ) );
CD		*	get_caster_obj		args( ( OBJ_DATA *obj, int sn ) );
CD		*	get_caster_room		args( ( ROOM_TIMER_DATA *rtd ) );
CD		*	get_char_list			args( ( CHAR_DATA *ch, char *argument, CHAR_DATA *list ) );
CD		*	get_char_room			args( ( CHAR_DATA *ch, char *argument ) );
CD		*	get_char_area			args( ( CHAR_DATA *ch, char *argument ) );
CD		*	get_char_world		args( ( CHAR_DATA *ch, char *argument ) );
CD		*	get_player_world	args( ( CHAR_DATA *ch, char *argument ) );
CD		*	get_char_pvnum		args( ( int pvnum ) );
CD		*	get_obj_owner			args( ( OBJ_DATA *obj ) );
char	*	get_name_pvnum		args( ( int pvnum ) );
int		get_pvnum_name			args( ( char *name ) );
OD		*	get_obj_list			args( ( CHAR_DATA *ch, char *argument, OBJ_DATA *list ) );
OD		*	get_obj_carry_even_invis args( ( CHAR_DATA *ch, char *argument ) );
OD		*	get_obj_carry			args( ( CHAR_DATA *ch, char *argument ) );
OD		*	get_obj_carry_type	args( ( CHAR_DATA *ch, int type ) );
OD		*	get_obj_carry_keeper	args( ( CHAR_DATA *keeper, char *argument, CHAR_DATA *ch ) );
OD		*	get_obj_wear			args( ( CHAR_DATA *ch, char *argument ) );
OD		*	get_obj_char_type	args( ( CHAR_DATA *ch, int type ) );
OD		*	get_obj_wear_type	args( ( CHAR_DATA *ch, int type ) );
OD		*	get_obj_wear_vnum	args( ( CHAR_DATA *ch, int vnum ) );
OD		*	get_obj_here			args( ( CHAR_DATA *ch, char *argument ) );
OD		*	get_obj_world			args( ( CHAR_DATA *ch, char *argument ) );
OD		*	get_obj_room			args( ( CHAR_DATA *ch, char *argument ) );
CD		*	get_mob_vnum			args( ( CHAR_DATA *ch, char *argument ) );
OD		*	get_obj_vnum			args( ( CHAR_DATA *ch, char *argument ) );
RID		*	get_random_room_index	args( ( CHAR_DATA *ch, int lo_room, int hi_room ) );
void	check_improve				args( ( CHAR_DATA *ch, int sn ) );
char	*	PERS							args( ( CHAR_DATA *ch, CHAR_DATA *looker ) );
char	*	OBJD							args( ( OBJ_DATA *obj, CHAR_DATA *looker ) );
char	*	adjective					args( ( CHAR_DATA *ch ) );
bool	knows_char					args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
OD 		*	create_money			args( ( int amount ) );
int		get_obj_weight			args( ( OBJ_DATA *obj ) );
int		get_obj_max_hit			args( ( OBJ_DATA *obj ) );
bool	room_is_private			args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool	can_see							args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	can_see_world				args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	can_see_smoke				args( ( CHAR_DATA *ch ) );
bool	can_see_hidden			args( ( CHAR_DATA *ch, int dir ) );
bool	can_see_in_room			args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *room ) );
int		get_sight						args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *room ) );
int		calc_room_light			args( ( CHAR_DATA *ch, OBJ_DATA *object, ROOM_INDEX_DATA *room, bool fAdd ) );
int		get_room_light			args( ( ROOM_INDEX_DATA *room ) );
bool	can_hear						args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	can_see_obj					args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool	can_drop_obj				args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
char 	*	item_type_name		args( ( OBJ_DATA *obj ) );
char 	*	affect_loc_name		args( ( int location ) );
char 	*	affect2_bit_name	args( ( int vector ) );
void	char_reset   		  	args( ( CHAR_DATA *ch) );
sh_int		obj_level_estimate	args( ( OID *objIndex) );
bool	blocking 		       	args( ( CHAR_DATA *victim, CHAR_DATA *ch) );
bool	login_allowed		   	args( ( DESCRIPTOR_DATA *d, CHAR_DATA *ch) );
ED		*	get_exit					args( ( int vnum, bool door) );
bool 	can_use_exit    		args( ( CD *ch, EXIT_DATA *exit ) );
bool	is_valid_exit				args( ( CD *ch, RID *room, bool dir ) );
int		OPPOSITE_ALIGN			args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	is_grudging					args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
int		save_bonus					args( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn, int sdesc ) );
bool	fort_save						args( ( CHAR_DATA *ch, CHAR_DATA *caster, int level, int sn ) );
bool	refl_save						args( ( CHAR_DATA *ch, CHAR_DATA *caster, int level, int sn ) );
bool	will_save						args( ( CHAR_DATA *ch, CHAR_DATA *caster, int level, int sn ) );
AFFECT_DATA		* get_affect_sn			args( ( CHAR_DATA *ch, int sn ) );


/*
	class.c
*/
extern	struct	class_type	class_table	[MAX_CLASS];

bool	IS_CLASSED					args( ( CHAR_DATA *ch ) );
bool	has_domain					args( ( CHAR_DATA *ch, int dom ) );
bool	domain_apotheosis		args( ( CHAR_DATA *ch, int dom ) );
int		get_bloodline				args( ( CHAR_DATA *ch ) );
bool	bloodline_capstone	args( ( CHAR_DATA *ch, int bloodline ) );
int		get_ranger_style		args( ( CHAR_DATA *ch ) );
int		get_monk_style			args( ( CHAR_DATA *ch ) );
int		get_school					args( ( CHAR_DATA *ch ) );
bool	arcane_mastery			args( ( CHAR_DATA *ch, int school ) );
int		class_level					args( ( CHAR_DATA *ch, int class ) );
bool	class_skill					args( ( CHAR_DATA *ch, int sn ) );
bool	class_ability				args( ( CHAR_DATA *ch, int sn ) );
bool	domain_skill				args( ( CHAR_DATA *ch, int sn ) );
bool	bloodline_skill			args( ( CHAR_DATA *ch, int sn ) );
int		multi								args( ( CHAR_DATA *ch, int sn ) );
int		multi_class_level		args( ( CHAR_DATA *ch, int sn ) );
int		multi_skill_level		args( ( CHAR_DATA *ch, int sn ) );

/*
	character.c
*/
char	*faith_rank					args( ( CHAR_DATA *ch ) );
int		get_curr_str				args( ( CHAR_DATA *ch ) );
int		get_curr_int				args( ( CHAR_DATA *ch ) );
int		get_curr_wis				args( ( CHAR_DATA *ch ) );
int		get_curr_dex				args( ( CHAR_DATA *ch ) );
int		get_curr_con				args( ( CHAR_DATA *ch ) );
int		get_curr_cha				args( ( CHAR_DATA *ch ) );
int		can_carry_n					args( ( CHAR_DATA *ch ) );
int		can_carry_w					args( ( CHAR_DATA *ch ) );
int		stat_mods						args( ( CHAR_DATA *ch, int stat ) );
bool	IS_FATIGUED					args( ( CHAR_DATA *victim ) );
bool	IS_EXHAUSTED				args( ( CHAR_DATA *victim ) );
bool	IS_STAGGERED				args( ( CHAR_DATA *victim ) );
int		stat_bonus					args( ( bool fPerm, CHAR_DATA *ch, int stat ) );
int		get_reputation			args( ( CHAR_DATA *ch ) );
int		reputation_bonus		args( ( CHAR_DATA *ch ) );
void	gain_reputation			args( ( CHAR_DATA *ch, int value ) );
int		starting_gold				args( ( CHAR_DATA *ch ) );
int		max_songs						args( ( CHAR_DATA *ch ) );
int		count_songs					args( ( CHAR_DATA *ch ) );
int		max_tongues					args( ( CHAR_DATA *ch ) );
int		count_tongues				args( ( CHAR_DATA *ch ) );
void	height_weight				args( ( CHAR_DATA *ch ) );
int		get_height					args( ( CHAR_DATA *ch ) );
int		get_weight					args( ( CHAR_DATA *ch ) );
int		str_roll						args( ( CHAR_DATA *ch ) );
int		int_roll						args( ( CHAR_DATA *ch ) );
int		wis_roll						args( ( CHAR_DATA *ch ) );
int		dex_roll						args( ( CHAR_DATA *ch ) );
int		con_roll						args( ( CHAR_DATA *ch ) );
int		cha_roll						args( ( CHAR_DATA *ch ) );
int		favored_class				args( ( CHAR_DATA *ch ) );
int		level_diff					args( ( CHAR_DATA *ch ) );
int		base_fort_save			args( ( CHAR_DATA *ch ) );
int		base_refl_save			args( ( CHAR_DATA *ch ) );
int		base_will_save			args( ( CHAR_DATA *ch ) );
int		get_fort_save				args( ( CHAR_DATA *ch ) );
int		get_refl_save				args( ( CHAR_DATA *ch ) );
int		get_will_save				args( ( CHAR_DATA *ch ) );
int		get_max_hit					args( ( CHAR_DATA *ch ) );
int		get_max_move				args( ( CHAR_DATA *ch ) );
int		learned							args( ( CHAR_DATA *ch, int sn ) );
int		dex_bonus_max				args( ( CHAR_DATA *ch ) );
int		spell_failure				args( ( CHAR_DATA *ch ) );
bool	has_armor_penalty		args( ( CHAR_DATA *ch ) );
int		armor_type_worn			args( ( CHAR_DATA *ch ) );
int		get_carry_w					args( ( CHAR_DATA *ch ) );
int		get_race						args( ( CHAR_DATA *ch ) );
int		get_size						args( ( CHAR_DATA *ch ) );
int		get_pets						args( ( CHAR_DATA *ch ) );
int		get_pet_levels			args( ( CHAR_DATA *ch ) );
int		max_pet_levels			args( ( CHAR_DATA *ch ) );
CD		*get_familiar				args( ( CHAR_DATA *ch ) );
CD		*get_companion			args( ( CHAR_DATA *ch ) );
CD		*get_warhorse				args( ( CHAR_DATA *ch ) );
bool	has_familiar				args( ( CHAR_DATA *ch, int race ) );

/*
	mob_handler.c
*/
OD	*	get_obj_here_even_blinded	args( ( CHAR_DATA *ch, char *argument ) );
OD	*	get_obj_wear_even_blinded	args( ( CHAR_DATA *ch, char *argument ) );
OD	*	get_obj_carry_even_blinded	args( ( CHAR_DATA *ch, char *argument ) );
OD	*	get_obj_list_even_blinded	args( ( CHAR_DATA *ch, char *argument, OBJ_DATA *list ) );
OD	*	get_obj_area_even_blinded	args( ( CHAR_DATA *ch, char *argument ) );
OD	*	get_obj_world_even_blinded	args( ( CHAR_DATA *ch, char *argument ) );
CD	*	get_char_room_even_blinded	args( ( CHAR_DATA *ch, char *argument ) );
CD	*	get_char_area_even_blinded	args( ( CHAR_DATA *ch, char *argument ) );
CD	*	get_char_world_even_blinded	args( ( CHAR_DATA *ch, char *argument ) );
CD	*	get_player_world_even_blinded	args( ( char *argument ) );
int		find_mp_location			args( ( CHAR_DATA *ch, char *arg ) );
bool		is_room_good_for_teleport	args( ( CHAR_DATA *victim, int rvnum ) );
void		set_exit					args( ( int room, int door, int dest) );
lg_int	translate_bits				args( ( char *string ) );

/*
	interp.c
*/

void			interpret				args( ( CHAR_DATA *ch, char *argue ) );
bool			check_social_fast		args( ( CHAR_DATA *ch, int cmd, char *argument ) );
bool			check_social				args( ( CHAR_DATA *ch, char *command, char *argument ) );

/*
	magic.c
*/
void		irresistible_dance	args( ( CHAR_DATA *ch ) );
int			casting_class			args( ( CHAR_DATA *ch, int sn, bool fCasting ) );
bool		morph							args( ( CHAR_DATA *ch, CHAR_DATA *victim, int race, int sn, int level ) );
bool		revert_morph			args( ( CHAR_DATA *ch, bool fDisplay ) );
char		*skill_name				args( ( int sn ) );
char		*snarf_skill_name	args( ( char *argument, char *name ) );
int			max_spell_circle	args( ( CHAR_DATA *ch, int class ) );
int			get_max_mana			args( ( CHAR_DATA *ch, int class ) );
void		spell_damage			args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dmg, int sn, int level ) );
int 		get_mana					args( ( CHAR_DATA *ch, int sn, int circle, int class ) );
int 		get_spell_range		args( ( int level, int sn ) );
bool		is_caster					args( ( CHAR_DATA *ch ) );
void		use_spell_item		args( ( CHAR_DATA *ch, OBJ_DATA *item, char *argument ) );
void		use_item					args( ( CHAR_DATA *ch, OBJ_DATA *item, char *argument ) );
void		recite_scroll			args( ( CHAR_DATA *ch, OBJ_DATA *scroll, char *argument ) );
void		finish_reciting		args( ( CHAR_DATA *ch ) );
int			get_metamagic			args( ( CHAR_DATA *ch, int sn, int feats, int circle, int class, bool fCasting ) );
int			item_caster_level	args( ( OBJ_DATA *obj, int sn ) );
int			item_caster_level	args( ( OBJ_DATA *obj, int sn ) );
int			spontaneous_cast	args( ( CHAR_DATA *ch, int sn ) );
int			prepared					args( ( CHAR_DATA *ch, int sn ) );
void		update_casting		args( ( void ) );
void		release_cast			args( ( CHAR_DATA *ch ) );
void		free_cast					args( ( CHAR_DATA *ch ) );
void		say_spell					args( ( CHAR_DATA *ch, int sn ) );
bool		recall						args( ( CHAR_DATA *ch, int vnum ) );
bool		learned_in_class	args( ( CHAR_DATA *ch, int sn, int class ) );
bool		domain_spell			args( ( CHAR_DATA *ch, int sn, int level ) );
bool		school_spell			args( ( CHAR_DATA *ch, int class ) );
int			opp_school				args( ( CHAR_DATA *ch ) );
bool		opposing_school		args( ( CHAR_DATA *ch, int class ) );
bool		opposing_domain		args( ( CHAR_DATA *ch, int class ) );
int			slots_learned			args( ( CHAR_DATA *ch, int class, int level ) );
int			slots_full				args( ( CHAR_DATA *ch, int class, int level ) );
int			get_slot_count		args( ( CHAR_DATA *ch, int class, int level ) );
int			can_learn_spells	args( ( CHAR_DATA *ch, int class, int level ) );
int			multi_caster_level	args( ( CHAR_DATA *ch, int sn ) );
int			get_spell_circle		args( ( CHAR_DATA *ch, int sn ) );
int			get_caster_level		args( ( CHAR_DATA *ch, int sn ) );
int			circle_by_class		args( ( CHAR_DATA *ch, int sn, int class ) );
bool		is_safe_magic			args( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn ) );
int			save_resist				args( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn, int level ) );
bool		counterspell			args( ( CHAR_DATA *ch, CHAR_DATA *caster, int sn, int level, bool CounterSong ) );
bool		can_mass_cast			args( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn ) );
bool		can_see_casting		args( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn ) );
bool		check_spell_resist	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn, int level ) );
bool		check_nondetection	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn ) );
int			skill_lookup			args( ( char *name ) );
bool		obj_cast_spell		args( ( int sn, int level, CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *obj ) );
bool		cast_spell				args( ( CHAR_DATA *ch, char *argument, bool RaceCast ) );
bool		weapon_cast_spell	args( ( int sn, int level, CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *obj ) );
void		totem_cast_spell	args( ( OBJ_DATA *obj ) );
void		show_identify_string	args( ( OBJ_DATA *obj, CHAR_DATA *viewer ) );

/* mob_commands.c */
char		*	mprog_type_to_name		args( ( lg_int type ) );
void			mazegen( CHAR_DATA *, int, int, int, int, int, int, int, int, int, int);
void			transference					args( (CHAR_DATA *victim, int location ) );

/*
	mob_prog.c
*/
void		set_quest_bits					args ( ( unsigned char **,unsigned int, unsigned int, unsigned int) );
int			get_quest_bits					args ( ( unsigned char *, unsigned int, unsigned int ) );
lg_int	mprog_name_to_type			args ( ( char *name ) );
char		*	mprog_type_to_name		args ( ( lg_int type ) );
bool    mprog_act_trigger				args ( ( char* buf, CHAR_DATA *mob, CHAR_DATA* ch, OBJ_DATA* obj, void* vo ) );
bool		mprog_arrival_trigger		args ( ( CHAR_DATA *mob ) );
bool		mprog_bribe_trigger			args ( ( CHAR_DATA *mob, CHAR_DATA *actor, int amount ) );
bool 		mprog_buy_trigger 			args ( ( CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object ) );
bool		mprog_cast_trigger			args ( ( CHAR_DATA *ch, CHAR_DATA *victim, int sn) );
bool		mprog_death_trigger  		args ( ( CHAR_DATA *killer, CHAR_DATA *mob ) );
bool		mprog_delay_trigger			args ( ( CHAR_DATA *mob, bool index) );
bool		mprog_desc_trigger			args ( ( CHAR_DATA *mob, CHAR_DATA *ch, char *txt ) );
bool		mprog_do_greet_trigger 	args ( ( CHAR_DATA *ch, CHAR_DATA *mob ) );
bool		mprog_entry_trigger			args ( ( CHAR_DATA *mob ) );
bool		mprog_exit_trigger			args ( ( CHAR_DATA *mob, int door ) );
bool 		mprog_fight_trigger 		args ( ( CHAR_DATA *mob, CHAR_DATA *ch ) );
bool		mprog_give_trigger			args ( ( CHAR_DATA *mob, CHAR_DATA *ch, OBJ_DATA* obj ) );
bool		mprog_greet_trigger 		args ( ( CHAR_DATA *ch ) );
bool		mprog_hit_trigger				args ( ( CHAR_DATA *mob, CHAR_DATA *actor ) );
bool		mprog_hitprcnt_trigger	args ( ( CHAR_DATA *mob, CHAR_DATA *ch ) );
bool		mprog_intercept_trigger	args ( ( char *txt, CHAR_DATA *mob, CHAR_DATA *ch, char *argument) );
bool		mprog_kill_trigger  		args ( ( CHAR_DATA *mob, CHAR_DATA *victim ) );
bool		mprog_percent_check			args ( ( CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
bool 		mprog_range_trigger  		args ( ( CHAR_DATA *mob, CHAR_DATA *ch, bool shot_from ) );
bool		mprog_repop_trigger			args ( ( CHAR_DATA *mob ) );
bool		mprog_sayto_trigger 		args ( ( char *txt, CHAR_DATA *mob, CHAR_DATA *vmob ) );
bool		mprog_social_trigger		args ( ( char *social, CHAR_DATA *mob, CHAR_DATA *ch) );
bool		mprog_speech_direct_trigger args ( ( char *txt, CHAR_DATA *mob, CHAR_DATA *vmob ) );
bool		mprog_speech_trigger 		args ( ( char *txt, CHAR_DATA *mob ) );
bool 		mprog_time_check 				args ( ( CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
bool		mprog_trap_trigger			args ( ( CHAR_DATA *mob, CHAR_DATA *actor ) );
bool		mprog_trigger_trigger		args ( ( char *txt, CHAR_DATA *mob, CHAR_DATA *ch) );
bool		mprog_wordlist_check		args ( ( char * arg, CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
void		set_supermob						args ( ( OBJ_DATA *obj ) );
void		rset_supermob						args ( ( ROOM_INDEX_DATA *room ) );
void		release_supermob				args ( ( void ) );
bool    oprog_act_trigger				args ( ( char* buf, CHAR_DATA *mob, CHAR_DATA* ch, OBJ_DATA* obj, void* vo ) );
bool		oprog_cast_trigger			args ( ( CHAR_DATA *ch, OBJ_DATA *obj, int sn) );
bool		oprog_damage_trigger 		args ( ( CHAR_DATA *ch ) );
bool		oprog_desc_trigger			args ( ( CHAR_DATA *mob, CHAR_DATA *ch, char *txt ) );
bool		oprog_drop_trigger 			args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		oprog_examine_trigger 	args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool 		oprog_fight_trigger 		args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
bool		oprog_get_trigger 			args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		oprog_give_trigger 			args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		oprog_greet_trigger 		args ( ( CHAR_DATA *ch ) );
bool		oprog_hit_trigger 			args ( ( CHAR_DATA *ch ) );
bool		oprog_intercept_trigger	args ( ( char *txt, CHAR_DATA *ch, char *argument) );
bool		oprog_percent_check			args ( ( CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
bool		oprog_remove_trigger 		args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		oprog_repop_trigger			args ( ( OBJ_DATA *obj ) );
bool		oprog_sac_trigger 			args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		oprog_speech_trigger 		args ( ( char *txt, CHAR_DATA *mob ) );
bool		oprog_trap_trigger 			args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		oprog_trigger_trigger		args ( ( char *txt, OBJ_DATA *obj, CHAR_DATA *ch) );
bool		oprog_use_trigger 			args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		oprog_wear_trigger 			args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		oprog_wordlist_check		args ( ( char * arg, CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
bool 		oprog_time_check 				args ( ( CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
bool		rprog_cast_trigger			args ( ( CHAR_DATA *ch, int sn) );
bool		rprog_death_trigger  		args ( ( CHAR_DATA *killer, CHAR_DATA *mob ) );
bool		rprog_entry_trigger			args ( ( CHAR_DATA *mob ) );
bool		rprog_examine_trigger 	args ( ( CHAR_DATA *ch ) );
bool		rprog_exit_trigger			args ( ( CHAR_DATA *mob, int door ) );
bool		rprog_greet_trigger 		args ( ( CHAR_DATA *ch ) );
bool		rprog_intercept_trigger	args ( ( char *txt, CHAR_DATA *ch, char *argument) );
bool		rprog_kill_trigger  		args ( ( CHAR_DATA *mob, CHAR_DATA *victim ) );
bool		rprog_percent_check			args ( ( CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
bool		rprog_speech_trigger 		args ( ( char *txt, CHAR_DATA *mob ) );
bool		rprog_wordlist_check		args ( ( char * arg, CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
bool 		rprog_fight_trigger 		args ( ( CHAR_DATA *ch ) );
bool 		rprog_time_check 				args ( ( CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, lg_int type ) );
bool    rprog_act_trigger				args ( ( char* buf, CHAR_DATA *mob, CHAR_DATA* ch, OBJ_DATA* obj, void* vo ) );

/*
 * trap_handler.c
 */
int			trap_dc							args ( ( OBJ_DATA *obj ) );
bool		spring_trap 				args ( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool		trig_obj_trap 			args ( ( CHAR_DATA *ch, OBJ_DATA *obj, int type ) );
bool		trig_room_trap	 		args ( ( CHAR_DATA *ch, int type ) );
OD	*		get_room_trap	 			args ( ( ROOM_INDEX_DATA *room, int type ) );
OD	*		get_obj_trap	 			args ( ( OBJ_DATA *obj ) );


/*
 * save.c
 */
lg_int			encrypt64					args( ( char *str ) );
void				add_pvnum					args( ( CHAR_DATA *ch ) );
int					find_free_pvnum		args( ( void ) );
void				save_char_obj			args( ( CHAR_DATA *ch, int which_type ) );
bool				load_char_obj			args( ( DESCRIPTOR_DATA *d, char *name ) );
void				load_clan_pit			args( ( FILE *fp ));
void				save_clan_pit			args( ( CLAN_DATA *clan, FILE *fp ));
int					check_dirs				args( ( void ));
void				load_lockers			args( ( void ) );
void				save_lockers			args( ( void ) );

/*
	skills.c
*/
void	stop_tracking						args( ( CHAR_DATA *ch ) );
void	track_char							args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	CHECK_USES							args( ( CHAR_DATA *ch, int sn ) );
int		get_max_uses						args( ( CHAR_DATA *ch, int sn ) );
int		synergy_bonus						args( ( CHAR_DATA *ch, int sn ) );
bool	check_legal_name				args( ( CHAR_DATA *ch, char *name ) );
int		appraise_roll						args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
int		bluff_roll							args( ( CHAR_DATA *ch ) );
int		climb_roll							args( ( CHAR_DATA *ch ) );
int		concentration_roll			args( ( CHAR_DATA *ch ) );
int		decipher_script_roll		args( ( CHAR_DATA *ch ) );
int		diplomacy_roll					args( ( CHAR_DATA *ch ) );
int		disable_device_roll			args( ( CHAR_DATA *ch ) );
int		disguise_roll						args( ( CHAR_DATA *ch ) );
int		escape_artist_roll			args( ( CHAR_DATA *ch ) );
int		streetwise_roll					args( ( CHAR_DATA *ch ) );
int		feint_roll							args( ( CHAR_DATA *ch ) );
int		first_aid_roll					args( ( CHAR_DATA *ch ) );
int		handle_animal						args( ( CHAR_DATA *ch ) );
int		hide_roll								args( ( CHAR_DATA *ch ) );
int		haggle_roll							args( ( CHAR_DATA *ch ) );
int		handle_animal_roll			args( ( CHAR_DATA *ch ) );
int		intimidate_roll					args( ( CHAR_DATA *ch ) );
int		jump_roll								args( ( CHAR_DATA *ch ) );
int		mount_roll							args( ( CHAR_DATA *ch ) );
int		pick_lock_roll					args( ( CHAR_DATA *ch ) );
int		perform_roll						args( ( CHAR_DATA *ch ) );
int		search_roll							args( ( CHAR_DATA *ch ) );
int		sense_motive_roll				args( ( CHAR_DATA *ch ) );
int		sneak_roll							args( ( CHAR_DATA *ch ) );
int		perception_roll					args( ( CHAR_DATA *ch, int sense ) );
int		sleight_of_hand_roll		args( ( CHAR_DATA *ch ) );
int		spellcraft_roll					args( ( CHAR_DATA *ch ) );
int		survival_roll						args( ( CHAR_DATA *ch ) );
int		swim_roll								args( ( CHAR_DATA *ch ) );
int		tumble_roll							args( ( CHAR_DATA *ch ) );
int		use_magic_roll					args( ( CHAR_DATA *ch ) );
bool	bluff_check							args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
int		climb_check							args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	concentration_check			args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	decipher_script_check		args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	diplomacy_check					args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
int 	disguise_check					args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
int 	disable_device_check		args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	escape_artist_check			args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
int 	first_aid_check					args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	streetwise_check				args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	handle_animal_check			args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
int		haggle_check						args( ( CHAR_DATA *ch, CHAR_DATA *och ) );
bool	hide_check							args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
int		intimidate_check				args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
int 	jump_check							args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	perception_check				args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	mount_check							args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	pick_lock_check					args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	search_check						args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	sense_motive_check			args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	sleight_of_hand_check		args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	sneak_check							args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	spellcraft_check				args( ( CHAR_DATA *ch, CHAR_DATA *och, int sn, int roll, int dc ) );
bool	survival_check					args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	swim_check							args( ( CHAR_DATA *ch, int dc ) );
bool	tumble_check						args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
bool	use_magic_check					args( ( CHAR_DATA *ch, CHAR_DATA *och, int roll, int dc ) );
int		craft_alchemy_roll			args( ( CHAR_DATA *ch ) );
int		craft_armor_roll				args( ( CHAR_DATA *ch ) );
int		craft_bow_roll					args( ( CHAR_DATA *ch ) );
int		craft_cooking_roll			args( ( CHAR_DATA *ch ) );
int		craft_fletch_roll				args( ( CHAR_DATA *ch ) );
int		craft_jewelry_roll			args( ( CHAR_DATA *ch ) );
int		craft_leather_roll			args( ( CHAR_DATA *ch ) );
int		craft_mining_roll				args( ( CHAR_DATA *ch ) );
int		craft_poison_roll				args( ( CHAR_DATA *ch ) );
int		craft_tailor_roll				args( ( CHAR_DATA *ch ) );
int		craft_trap_roll					args( ( CHAR_DATA *ch ) );
int		craft_weapon_roll				args( ( CHAR_DATA *ch ) );
bool	know_arcana_check				args( ( CHAR_DATA *ch, int dc ) );
bool	know_dungeoneering_check	args( ( CHAR_DATA *ch, int dc ) );
bool	know_geography_check		args( ( CHAR_DATA *ch, int dc ) );
bool	know_history_check			args( ( CHAR_DATA *ch, int dc ) );
bool	know_local_check				args( ( CHAR_DATA *ch, int dc ) );
bool	know_nature_check				args( ( CHAR_DATA *ch, int dc ) );
bool	know_nobility_check			args( ( CHAR_DATA *ch, int dc ) );
bool	know_religion_check			args( ( CHAR_DATA *ch, int dc ) );
bool	know_planes_check				args( ( CHAR_DATA *ch, int dc ) );

/*
	mob_ai.c
*/
SPEC_FUN	*		spec_lookup			args( ( const char *name ) );
char 	*		spec_name_lookup 		args( ( SPEC_FUN *fun ) );
bool			has_mana						args( ( CHAR_DATA *ch, int sn ) );
bool			has_affect					args( ( CHAR_DATA *ch, int type ) );
int				get_spell						args( ( CHAR_DATA *ch, int class, int type ) );
bool			caster_AI_combat		args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool			warrior_AI_combat		args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool			hunt_victim					args( ( CHAR_DATA *ch ) );
CD			* check_tanking				args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );

/*
	mccp.c
*/

bool		start_compress			args( ( DESCRIPTOR_DATA *d ) );
void		end_compress			args( ( DESCRIPTOR_DATA *d ) );
void		process_compressed		args( ( DESCRIPTOR_DATA *d ) );
void		write_compressed		args( ( DESCRIPTOR_DATA *d ) );
void		send_compress_on		args( ( DESCRIPTOR_DATA *d ) );
void		send_naws				args( ( DESCRIPTOR_DATA *d ) );
void		send_ttype_on			args( ( DESCRIPTOR_DATA *d ) );
void		send_eor_on			args( ( DESCRIPTOR_DATA *d ) );
void		send_echo_on			args( ( DESCRIPTOR_DATA *d ) );
void		send_echo_off			args( ( DESCRIPTOR_DATA *d ) );
void		send_environ_on		args( ( DESCRIPTOR_DATA *d ) );
void		send_ga				args( ( DESCRIPTOR_DATA *d ) );
void		send_eor				args( ( DESCRIPTOR_DATA *d ) );
int		do_telopts			args( ( DESCRIPTOR_DATA *d, bool *argument ) );

int process_ayt( DESCRIPTOR_DATA *d, bool *argument );
int process_sb_naws( DESCRIPTOR_DATA *d, bool *argument );
int process_will_linemode( DESCRIPTOR_DATA *d, bool *argument );
int process_sb_linemode( DESCRIPTOR_DATA *d, bool *argument );
int process_do_compress2( DESCRIPTOR_DATA *d, bool *argument );
int process_dont_compress2( DESCRIPTOR_DATA *d, bool *argument );
int process_will_ttype( DESCRIPTOR_DATA *d, bool *argument );
int process_sb_ttype( DESCRIPTOR_DATA *d, bool *argument );
int process_will_environ( DESCRIPTOR_DATA *d, bool *argument );
int process_sb_environ( DESCRIPTOR_DATA *d, bool *argument );
int process_do_tm( DESCRIPTOR_DATA *d, bool *argument );
int process_ip( DESCRIPTOR_DATA *d, bool *argument );
int process_do_eor( DESCRIPTOR_DATA *d, bool *argument );
int process_dont_sga( DESCRIPTOR_DATA *d, bool *argument );

/*
	update.c
*/
void		update_skill_timer	args( ( void ) );
void		poison_update				args( ( CHAR_DATA *ch ) );
void		free_skill					args( ( CHAR_DATA *ch ) );
int			exp_level						args( ( CHAR_DATA *ch, int level ) );
int			starting_level			args( ( CHAR_DATA *ch ) );
void		advance_level				args( ( CHAR_DATA *ch, bool fSave ) );
void		monster_levels			args( ( CHAR_DATA *ch, int levels ) );
void		lose_level					args( ( CHAR_DATA *ch, bool fSave ) );
void		gain_exp						args( ( CHAR_DATA *ch, int gain ) );
void		gain_condition			args( ( CHAR_DATA *ch, int iCond, int value ) );
bool		gain_favor					args( ( CHAR_DATA *ch, int Domain, int gain ) );
void		update_handler			args( ( void ) );
bool		continuous_damage		args( ( CHAR_DATA *ch ) );
void		damage_update				args( ( CHAR_DATA *ch ) );
void		affect_update				args( ( CHAR_DATA *ch ) );
void		pray_update					args( ( CHAR_DATA *ch ) );
void		obj_char_update			args( ( CHAR_DATA *ch ) );
void		restore_mana				args( ( CHAR_DATA *ch ) );
void		destroy_mana				args( ( CHAR_DATA *ch ) );
void		mana_gain						args( ( CHAR_DATA *ch, int hour ) );
void		round_update				args( ( void ) );
void		weather_area_update	args( ( AREA_DATA *area ) );


/*
	clans.c
*/

bool			is_clan_leader		args( ( CHAR_DATA *ch ) );
CLAN_DATA *	get_clan			args( ( char *name ) );
CLAN_DATA *	get_clan_from_vnum 	args( ( int vnum ) );
void			load_clans		args( ( void ) );
void 		save_all_clans		args( ( void ) );
void 		save_clan			args( ( CLAN_DATA *clan ) );
void 		destroy_clan		args( ( CLAN_DATA *clan ) );
void 		send_clan_message	args( ( CLAN_DATA *clan, char *message ) );
lg_int		max_coffer		args( ( CLAN_DATA *clan ) );
bool			is_own_clanhall 	args( ( CHAR_DATA *ch ) );
bool			is_in_clanhall 	args( ( CHAR_DATA *ch ) );

/*
	race.c
*/

bool		quadruped						args( ( CHAR_DATA *ch ) );
bool		can_trip						args( ( CHAR_DATA *ch ) );
bool		many_armed					args( ( CHAR_DATA *ch ) );
bool		many_legged					args( ( CHAR_DATA *ch ) );
bool		must_breathe				args( ( CHAR_DATA *ch ) );
bool		must_eat						args( ( CHAR_DATA *ch ) );
int 		spell_resist				args( ( CHAR_DATA *ch ) );
int 		race_type						args( ( CHAR_DATA *ch ) );
int 		body_type						args( ( CHAR_DATA *ch ) );
bool		is_polymorph				args( ( CHAR_DATA *ch ) );
bool		dragon_spell				args( ( CHAR_DATA *ch, int sn ) );
int 		dragon_caster_level	args( ( int sn ) );
bool 		rspec_req						args( ( CHAR_DATA *ch, lg_int attr ) );
bool		has_body_part				args( ( CHAR_DATA *ch, lg_int part ) );
int			race_skill					args( ( CHAR_DATA *ch, int sn ) );
bool 		is_immune						args( ( CHAR_DATA *victim, int sdesc ) );
bool 		is_vulnerable				args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam_type ) );
int			energy_resistance		args( ( CHAR_DATA *victim, int dam, int dam_type ) );
int 		dam_reduction				args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam, int dam_type ) );
int 		energy_immunity			args( ( CHAR_DATA *victim, int dam, int dam_type ) );
void 	apply_immunity_sdesc	args( ( CHAR_DATA *ch ) );
void 	apply_immunity_energy	args( ( CHAR_DATA *ch ) );

/*
	debug.c
*/

void		push_call(char *f, ...);
void		push_call_format(char *f, ...);
void		pop_call(void);

void		dump_stack(void);
void		build_dump_stack( int vnum );
void 	dump_desc_characters(void);
void 	print_errno(int number);
char	*	cut_at_eol(char *string);

void		open_reserve(void);
void		close_reserve(void);
FILE	*	my_fopen(char *filename, char *opentype, bool silent);
void		my_fclose(FILE *which);
void		my_fclose_all();

/*
	purger.c
*/

void		start_purger();
void		update_purger();

/*
	dynamic.c
*/

char	*	get_dynamic_description( CHAR_DATA *ch );

/*
	pathfind.c
*/

int		findpath_search_victim( CHAR_DATA *ch, CHAR_DATA *victim, int range );
int		findpath_room( CHAR_DATA *ch, int vnum, int range );
CD	*	findpath_search_name  ( CHAR_DATA *ch, char *name, int range );

/*
	math.c
*/

lg_int	mathexp(CHAR_DATA *ch, const char *str);
lg_int	mathexp_tokenize(CHAR_DATA *ch, const char *str);
void      mathexp_level(CHAR_DATA *ch, MATH_DATA *node);
void      mathexp_compute(CHAR_DATA *ch, MATH_DATA *node);
lg_int tintoi(const char *str);
lg_int tincmp(const char *left, const char *right);
lg_int tindice(const char *left, const char *right);

#undef	CD
#undef	MID
#undef	OD
#undef	OID
#undef	RID
#undef	RD
#undef	AD
#undef	TM
#undef	HD
#undef	BD
#undef	ED
#undef	RTD





void write_to_port args( ( DESCRIPTOR_DATA *d ) );
bool is_desc_valid( CHAR_DATA *);


void reset_color( CHAR_DATA *);


void add_player( CHAR_DATA *);
void sub_player( CHAR_DATA *);

int direction_door( char *);  /* Returns door# from direction text */
CHAR_DATA *lookup_char( char *);


bool is_spell( int );
bool is_spell_like( int );

lg_int get_game_usec( void );

int compare_obj( OBJ_DATA *, OBJ_DATA *); /* difference of strength if same */

int wear_flags_to_wear_loc( OBJ_DATA *, int ); /* type conversion */
int count_total_objects( OBJ_DATA *);/* determines total objects in cont */




char *get_color_diff( CHAR_DATA *, bool, bool, bool, bool, bool, bool);



#define VICTORY_LIST_SIZE 25

char *victory_list[VICTORY_LIST_SIZE];



/*
	Presto 8/3/98
*/

#define NORMAL_SAVE 0
#define BACKUP_SAVE 1

/*
	Hypnos 20020326: Directory mask for player dirs
*/

#define	XX_DIRMASK	0770

/*
	Allows memory debugging, but allows memory corruptions more easily

#define ALLOCMEM(result, type, number)				\
{											\
	result = calloc(sizeof(type), number);			\
}

#define FREEMEM(point)							\
{											\
	free(point);								\
	point = NULL;								\
}

*/

#define ALLOCMEM(result, type, number)				\
{											\
	result = calloc(1, sizeof(type) * (number));		\
}

#define FREEMEM(point)							\
{											\
	free(point);								\
	point = NULL;								\
}


#define CHECK_EDITMODE(ch)														\
																			\
	if (IS_NPC(ch))															\
	{																		\
		send_to_char( "You cannot use this command.", (ch));							\
		pop_call();															\
		return;																\
	}																		\
																			\
	if ((ch)->pcdata->editmode == MODE_RESTRICTED)									\
	{																		\
		send_to_char( "You cannot use edit commands while editing.\n\r", (ch));			\
		pop_call();															\
		return;																\
	}


#define CHECK_AUTOSAVE(area)					\
{										\
	if (IS_SET((area)->flags, AFLAG_AUTOSAVE))	\
	{									\
		SET_BIT((area)->flags, AFLAG_MODIFIED);	\
	}									\
}


#define NKEY( literal, field, value )		\
{									\
	if (!strcmp(word, literal))			\
	{								\
		field			= value;		\
		fMatch			= TRUE;		\
		break;						\
	}								\
}

#define SKEY( literal, field, value )		\
{									\
	if (!strcmp(word, literal))			\
	{								\
		STRFREE( field );				\
		field  = value;				\
		fMatch = TRUE;					\
		break;						\
	}								\
}

#define AKEY( literal, field, value )		\
{									\
	if (!strcmp(word, literal))			\
	{								\
		cnt = value;					\
		field[cnt] = value;				\
		fMatch = TRUE;					\
		break;						\
	}								\
}

#define RESTRING(point, value)							\
{													\
	STRFREE(point);									\
	point = str_alloc((value));							\
}

#define STRALLOC(point)			str_alloc((point))
#define QUICKMATCH(p1, p2)  (int) (p1) == (int) (p2)
#define STRDUPE(point)			str_dupe((point))



#define STRFREE(point)									\
{													\
	str_free((point));									\
	point = NULL;										\
}

/*
	New link added to the last link
*/

#define LINK(link, first, last, next, prev)					\
{													\
	if (!(first))										\
	{												\
		(first)				= (link);					\
	}												\
	else												\
	{												\
		(last)->next			= (link);					\
	}												\
	(link)->next				= NULL;					\
	(link)->prev				= (last);					\
	(last)					= (link);					\
}


#define INSERT_LEFT(link, rght, first, next, prev)			\
{													\
	(link)->prev				= (rght)->prev;			\
	(rght)->prev				= (link);					\
	(link)->next				= (rght);					\
													\
	if ((link)->prev)									\
	{												\
		(link)->prev->next		= (link);					\
	}												\
	else												\
	{												\
		(first)				= (link);					\
	}												\
}


#define INSERT_RIGHT(link, left, last, next, prev)			\
{													\
	(link)->next				= (left)->next;			\
	(left)->next				= (link);					\
	(link)->prev				= (left);					\
													\
	if ((link)->next)									\
	{												\
		(link)->next->prev		= (link);					\
	}												\
	else												\
	{												\
		(last)				= (link);					\
	}												\
}


#define UNLINK(link, first, last, next, prev)				\
{													\
	if (((link)->prev == NULL && (link) != first)               \
	||  ((link)->next == NULL && (link) != last))               \
	{                                                           \
		log_printf("UNLINK error in file %s on line %d", __FILE__, __LINE__); \
		dump_stack();                                          \
	}                                                           \
	if (!(link)->prev)									\
	{												\
		(first)				= (link)->next;			\
	}												\
	else												\
	{												\
		(link)->prev->next		= (link)->next;			\
	}												\
	if (!(link)->next)									\
	{												\
		(last)				= (link)->prev;			\
	}												\
	else												\
	{												\
		(link)->next->prev		= (link)->prev;			\
	}												\
	(link)->next = NULL;								\
	(link)->prev = NULL;								\
}


#define CHECK_KEEPER(ch, keeper)														\
{																														\
	if (!IS_AWAKE(keeper))																		\
	{																													\
		send_to_char("In their dreams, or what?\n\r", ch);			\
		pop_call();																							\
		return;																									\
	}																													\
	if (is_grudging(keeper, ch))															\
	{																													\
		pop_call();																							\
		return;																									\
	}																													\
	if (!can_see(keeper, ch))																	\
	{																													\
		send_to_char("The shopkeeper can't see you to trade with you!\n\r", ch);			\
		pop_call();																													\
		return ;																													\
	}																													\
	if (mud->time_info->hour < keeper->pIndexData->pShop->open_hour			\
	||  mud->time_info->hour > keeper->pIndexData->pShop->close_hour)		\
	{																													\
		command(keeper, do_say, "Sorry, my shop is closed.");				\
		command(keeper, do_say, "I am open from %d %s till %d %s.",		\
			keeper->pIndexData->pShop->open_hour %12, keeper->pIndexData->pShop->open_hour  < 11 ? "am" : "pm",		\
			keeper->pIndexData->pShop->close_hour%12, keeper->pIndexData->pShop->close_hour < 11 ? "am" : "pm");	\
		pop_call();																													\
		return;																													\
	}																													\
	if (IS_SET(keeper->pIndexData->pShop->shop_flags, SHOP_TEMPLE)			\
	&&  keeper->god != ch->god)		\
	{																													\
		command(keeper, do_say, "Sorry, I only trade with others of my faith.");				\
		pop_call();																													\
		return;																													\
	}																													\
	if (IS_SET(keeper->pIndexData->pShop->shop_flags, SHOP_CLAN_STORE)			\
	&&  (!ch->pcdata->clan || keeper->in_room->creator_pvnum != ch->pcdata->clan->founder_pvnum))		\
	{																													\
		command(keeper, do_say, "Sorry, I only trade with others of this clan.");				\
		pop_call();																													\
		return;																													\
	}																													\
}


// Fix for meddlesome players trying to affect combat without joining - Kregor

#define CHECK_TURN(ch, victim)																\
{																															\
	if (victim != NULL && in_combat(victim))										\
	{																														\
		if (!in_combat(ch))																				\
		{																													\
			char_to_combat(ch, victim->in_battle);									\
			act ("$n rushes headlong into the fray!", ch, NULL, NULL, TO_CAN_SEE); \
			act ("You rush headlong into the fray!", ch, NULL, NULL, TO_CHAR); \
			TAKE_ACTION(ch, ACTION_MOVE); 													\
		}																													\
		if (!can_surprise(ch, victim))				\
		{																													\
			pop_call();																							\
			return;																									\
		}																													\
	}																														\
}

// Alternate code simply keeps ch out of combat
#define CHECK_TURN_NOFIGHT(ch, victim)																\
{																															\
	if (victim != NULL && in_combat(victim))										\
	{																														\
		if (!in_combat(ch))																				\
		{																													\
			send_to_char("You're not involved in this fight!\n\r", ch);			\
			pop_call();																							\
			return;																									\
		}																													\
		if (!can_surprise(ch, victim))				\
		{																													\
			pop_call();																							\
			return;																									\
		}																													\
	}																														\
}

// alternate for BOOL functions
#define BOOL_CHECK_TURN(ch, victim)																\
{																															\
	if (victim != NULL && in_combat(victim))										\
	{																														\
		if (!in_combat(ch))																				\
		{																													\
			char_to_combat(ch, victim->in_battle);									\
			act ("$n rushes headlong into the fray!", ch, NULL, NULL, TO_CAN_SEE); \
			act ("You rush headlong into the fray!", ch, NULL, NULL, TO_CHAR); \
			TAKE_ACTION(ch, ACTION_MOVE); 													\
		}																													\
		if (!can_surprise(ch, victim))				\
		{																													\
			pop_call();																							\
			return FALSE;																									\
		}																													\
	}																														\
}