Eos/
Eos/player/
Eos/src/
Eos/src/tmp/lcc/
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  Envy Diku Mud improvements copyright (C) 1994 by Michael Quan, David   *
 *  Love, Guilherme 'Willie' Arnold, and Mitchell Tse.                     *
 *                                                                         *
 *  In order to use any part of this Envy Diku Mud, you must comply with   *
 *  the original Diku license in 'license.doc', the Merc license in        *
 *  'license.txt', as well as the Envy license in 'license.nvy'.           *
 *  In particular, you may not remove either of these copyright notices.   *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/

/* To turn on and off certain features off the mud */
#define NEW_MONEY

#include "colors.h"   /* Include the ansi color routines. */

/*
 * Accommodate old non-Ansi compilers.
 */
#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 )	void 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



/*
 * Short scalar types.
 * Diavolo reports AIX compiler has bugs with short types.
 */
#if	!defined( FALSE )
#define FALSE	 0
#endif

#if	!defined( TRUE )
#define TRUE	 1
#endif

#if	defined( _AIX )
#if	!defined( const )
#define const
#endif
typedef int				bool;
#define unix
#else
typedef unsigned char			bool;
#endif



/*
 * Structure types.
 */
typedef struct	affect_data		AFFECT_DATA;
typedef struct	area_data		AREA_DATA;
typedef struct	arena_data		ARENA_DATA;
typedef struct  	new_clan_data     CLAN_DATA;
typedef struct	ban_data		BAN_DATA;
/*typedef struct  userl_data         USERL_DATA;*/
typedef struct  	gskill_data       GSPELL_DATA;
typedef struct	char_data		CHAR_DATA;
typedef struct  	social_data		SOCIAL_DATA;
typedef struct  	race_data		RACE_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	kill_data		KILL_DATA;
typedef struct	mob_index_data		MOB_INDEX_DATA;
typedef struct	note_data		NOTE_DATA;
typedef struct	obj_data		OBJ_DATA;
typedef struct	obj_index_data		OBJ_INDEX_DATA;
typedef struct	pc_data			PC_DATA;
typedef struct	reset_data		RESET_DATA;
typedef struct	room_affect_data	ROOM_AFFECT_DATA;
typedef struct	powered_data		POWERED_DATA;
typedef struct	room_index_data		ROOM_INDEX_DATA;
typedef struct	shop_data		SHOP_DATA;
typedef struct	time_info_data		TIME_INFO_DATA;
typedef struct	weather_data		WEATHER_DATA;
typedef struct  mob_prog_data           MPROG_DATA;
typedef struct  mob_prog_act_list       MPROG_ACT_LIST;
typedef struct	guild_data		GUILD_DATA;	/* XOR */
typedef struct  quest_data              QUEST_DATA;     /* Angi */
typedef struct  alias_data              ALIAS_DATA;     /* Altrag */
/*typedef struct  phobia_data             PHOBIA_DATA; */   /* Altrag */
typedef struct  trap_data               TRAP_DATA;      /* Altrag */
typedef struct	playerlist_data		PLAYERLIST_DATA; /*Decklarean*/
typedef struct skill_type		SKILL_TYPE;
typedef struct newbie_data		NEWBIE_DATA; 	 /* Angi */

#ifdef NEW_MONEY
typedef struct money_data	 	MONEY_DATA;

#define S_PER_G				10
#define C_PER_S				10
#define C_PER_G				(S_PER_G * C_PER_S)

#define SILVER_PER_GOLD			10
#define COPPER_PER_SILVER		10
#define COPPER_PER_GOLD			(SILVER_PER_GOLD*COPPER_PER_SILVER)
#endif


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

/*
 * String and memory management parameters.
 */
#define	MAX_KEY_HASH		 8192/*1024*/
#define MAX_STRING_LENGTH	 8192
#define MAX_INPUT_LENGTH	  256



/*
 * Game parameters.
 * Increase the max'es if you add more of something.
 * Adjust the pulse numbers to suit yourself.
 */
#define MAX_SKILL		   334
#define MAX_GSPELL                 2
#define MAX_CLASS		   13
#define MAX_RACE                   16
#define MAX_CLAN                   21 /*max 20 clans + 1 for clan 0*/
#define MAX_LEVEL		   113
#define STUN_MAX                   5
#define L_IMP                      MAX_LEVEL
#define L_CON                     ( L_IMP - 1 )
#define L_DIR		          ( L_CON - 1 )
#define L_SEN		          ( L_DIR - 1 )
#define L_GOD                     ( L_SEN - 1 )
#define L_DEM                     ( L_GOD - 1 )
#define L_JUN	        	  ( L_DEM - 1 )
#define L_APP                     ( L_JUN - 1 )
#define L_CHAMP5		  ( L_APP - 1 )
#define L_CHAMP4		  ( L_CHAMP5 - 1 )
#define L_CHAMP3		  ( L_CHAMP4 - 1 )
#define L_CHAMP2		  ( L_CHAMP3 - 1 )
#define L_CHAMP1		  ( L_CHAMP2 - 1 )
#define LEVEL_HERO		  1100

#define LEVEL_IMMORTAL		  1106
#define LEVEL_MORTAL 		  1105

#define PULSE_PER_SECOND	    6
#define PULSE_VIOLENCE		  (  3 * PULSE_PER_SECOND )
#define PULSE_MOBILE		  (  4 * PULSE_PER_SECOND )
#define PULSE_TICK		  ( 40 * PULSE_PER_SECOND )
#define PULSE_AREA		  ( 80 * PULSE_PER_SECOND )

/* Save the database - OLC 1.1b */
#define PULSE_DB_DUMP		  (1800* PULSE_PER_SECOND ) /* 30 minutes  */

/* Not used -Deck
#define SIZE_TINY                 0
#define SIZE_SMALL                1
#define SIZE_MEDIUM               2
#define SIZE_LARGE                3
#define SIZE_GIANT                4
#define SIZE_HUGE                 5
#define SIZE_GARGANTUAN           6
#define SIZE_TITANIC              7
*/

/*
 *  User list structure
 */

/* is not used -Deck
struct  userl_data
{
    USERL_DATA *  next;
    char *        name;
    int           level;
    char *        user;
    char *        host;
    char *        lastlogin;
    char *        desc;
}; */


#ifdef NEW_MONEY
struct money_data
{
  int           gold;
  int           silver;
  int           copper;
};
#endif

struct arena_data
{
  AREA_DATA *area;	/* Arena area */
  CHAR_DATA *cch;	/* Challenger char */
  CHAR_DATA *och;	/* optional challengee char */
  CHAR_DATA *fch;	/* First char in arena */
  CHAR_DATA *sch;	/* Second char in arena */
  int award;		/* Money in the pot */
  int count;		/* Update ticker */
};


struct wiznet_type
{
    char *      name;
    long        flag;
    int         level;
};

/*
 * Site ban structure.
 */
struct	ban_data
{
    BAN_DATA *	next;
    char	type;
    char *	name;
    char *      user;
};


bool    MOBtrigger;

#define ERROR_PROG        -1
#define IN_FILE_PROG       0
#define ACT_PROG           1
#define SPEECH_PROG        2
#define RAND_PROG          4
#define FIGHT_PROG         8
#define DEATH_PROG        16
#define HITPRCNT_PROG     32
#define ENTRY_PROG        64
#define GREET_PROG       128
#define ALL_GREET_PROG   256
#define GIVE_PROG        512
#define BRIBE_PROG      1024

/*
 * Time and weather stuff.
 */
#define SUN_EVENING	 	    0
#define SUN_MIDNIGHT		    1
#define SUN_DARK		    2
#define SUN_DAWN		    3
#define SUN_MORNING		    4
#define SUN_NOON		    5
#define SUN_AFTERNOON		    6
#define SUN_DUSK		    7

#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
{
    int		mmhg;
    int		change;
    int		sky;
    int		sunlight;
};


/*
 * WIZnet flags
 */
#define WIZ_ON			      1
#define WIZ_TICKS		      2
#define WIZ_LOGINS		      4
#define WIZ_SITES		      8
#define WIZ_LINKS		     16
#define WIZ_DEATHS		     32
#define WIZ_RESETS		     64
#define WIZ_MOBDEATHS		    128
#define WIZ_FLAGS		    256
#define WIZ_PENALTIES		    512
#define WIZ_SACCING		   1024
#define WIZ_LEVELS		   2048
#define WIZ_SECURE		   4096
#define WIZ_SWITCHES		   8192
#define WIZ_SNOOPS		  16384
#define WIZ_RESTORE	          32768
#define WIZ_LOAD		  65536
#define WIZ_NEWBIE		 131072
#define WIZ_PREFIX		 262144
#define WIZ_SPAM		 524288
#define WIZ_GENERAL		1048576
#define WIZ_OLDLOG		2097152


/*
 * Connected state for a channel.
 */
#define CON_PLAYING			0
#define CON_GET_NAME			1
#define CON_GET_OLD_PASSWORD		2
#define CON_CONFIRM_NEW_NAME		3
#define CON_GET_NEW_PASSWORD		4
#define CON_CONFIRM_NEW_PASSWORD	5
#define CON_GET_NEW_SEX			6
#define CON_GET_NEW_CLASS		7
#define CON_READ_MOTD			8
#define CON_GET_NEW_RACE	        9
#define CON_CONFIRM_RACE               10
#define CON_CONFIRM_CLASS              11
#define CON_CHECK_AUTHORIZE   	       12
#define CON_GET_2ND_CLASS	       13
#define CON_CONFIRM_2ND_CLASS	       14
#define CON_WANT_MULTI		       15
#define CON_GET_3RD_CLASS	       16
#define CON_CONFIRM_3RD_CLASS	       17
#define CON_WANT_MULTI_2	       18

#define CON_GET_ANSI			105
#define CON_AUTHORIZE_NAME		100
#define CON_AUTHORIZE_NAME1		101
#define CON_AUTHORIZE_NAME2		102
#define CON_AUTHORIZE_NAME3		103
#define CON_AUTHORIZE_LOGOUT		104
#define CON_CHATTING                    200

/*
 * Descriptor (channel) structure.
 */
struct	descriptor_data
{
    DESCRIPTOR_DATA *	next;
    DESCRIPTOR_DATA *	snoop_by;
    CHAR_DATA *		character;
    CHAR_DATA *		original;
    char *		host;
    char *              user;
    int		        descriptor;
    int		        connected;
    bool		fcommand;
    char		inbuf		[ MAX_INPUT_LENGTH*4 ];
    char		incomm		[ MAX_INPUT_LENGTH   ];
    char		inlast		[ MAX_INPUT_LENGTH   ];
    int			repeat;
    char *              showstr_head;
    char *              showstr_point;
    char *		outbuf;
    int			outsize;
    int			outtop;
    void *              pEdit;		/* OLC */
    void *              inEdit;         /* Altrag, for nested editors */
    char **             pString;	/* OLC */
    int			editor;		/* OLC */
    int                 editin;         /* Altrag, again for nesting */
    bool		ansi;
};



/*
 * Attribute bonus structures.
 */
struct	str_app_type
{
    int 	        tohit;
    int         	todam;
    int                 carry;
    int         	wield;
};

struct	int_app_type
{
    int         	learn;
};

struct	wis_app_type
{
    int         	practice;
};

struct	dex_app_type
{
    int         	defensive;
};

struct	con_app_type
{
    int         	hitp;
    int         	shock;
};



/*
 * TO types for act.
 */
#define TO_ROOM		    0
#define TO_NOTVICT	    1
#define TO_VICT		    2
#define TO_CHAR		    3
#define TO_COMBAT           4



/*
 * Help table types.
 */
struct	help_data
{
    HELP_DATA * 	next;
    /*AREA_DATA *		area;*/		/* OLC 1.1b */
    int 	        level;
    char *      	keyword;
    char *      	text;
};


/*
 * Structure for social in the socials list.
 */
struct  social_data
{
    SOCIAL_DATA	*	next;
    char *              name;
    char *              char_no_arg;
    char *  	        others_no_arg;
    char * 	        char_found;
    char * 	        others_found;
    char * 	        vict_found;
    char * 	        char_auto;
    char * 	        others_auto;
};

struct  newbie_data
{
    NEWBIE_DATA *	next;
    char *		keyword;
    char *		answer1;
    char * 		answer2;
};


/*
 * Shop types.
 */
#define MAX_TRADE	 5

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

/*
 *   Player list structer.
 */
struct playerlist_data
{
  PLAYERLIST_DATA * next;
  char * name;
  unsigned char level;
  char * clan_name;
  unsigned char clan_rank;
  char * guild_name;
  unsigned char guild_rank;
};

#define CLASS_MAGE           0
#define CLASS_CLERIC         1
#define CLASS_THIEF          2
#define CLASS_WARRIOR        3
#define CLASS_PSIONICIST     4
#define CLASS_DRUID          5
#define CLASS_RANGER         6
#define CLASS_PALADIN        7
#define CLASS_BARD           8
#define CLASS_VAMPIRE        9
#define CLASS_NECROMANCER   10
#define CLASS_WEREWOLF      11
#define CLASS_MONK	    12

#define RACE_HUMAN           0
#define RACE_ELF             1
#define RACE_DWARF           2
#define RACE_PIXIE           3
#define RACE_HALFLING        4
#define RACE_DROW            5
#define RACE_ELDER           6
#define RACE_OGRE            7
#define RACE_LIZARDMAN       8
#define RACE_DEMON           9
#define RACE_GHOUL          10
#define RACE_ILLITHID       11
#define RACE_MINOTAUR       12
#define RACE_TROLL	    13
#define RACE_SHADOW         14
#define RACE_TABAXI	    15
/*
 * Per-class stuff.
 */


struct	class_type
{
    char 	who_name	[ 4 ];	/* Three-letter name for 'who'	*/
    char        who_long        [ 15 ]; /* Long name of Class           */
    int 	attr_prime;		/* Prime attribute		*/
    int 	weapon;			/* First weapon			*/
    int 	guild;			/* Vnum of guild room		*/
    int 	skill_adept;		/* Maximum skill level		*/
    int 	thac0_00;		/* Thac0 for level  0		*/
    int 	thac0_97;		/* Thac0 for level 47		*/
    int  	hp_min;			/* Min hp gained on leveling	*/
    int	        hp_max;			/* Max hp gained on leveling	*/
    bool	fMana;			/* Class gains mana on level	*/
    bool	races[ MAX_RACE ];	/* Can a race be a class?	*/
    bool	multi[ MAX_CLASS ];	/* Which classes can multiclass */
    bool	objtype[ 14 ];		/* Which classes can wield what types of weapons */
};
#if 0
struct  race_type
{
    char        race_name      [ 4 ];
    char        race_full      [ 20 ];
    int		mstr;
    int		mint;
    int		mwis;
    int		mdex;
    int		mcon;
/*  int         atribmod1;
    int         atribmod2;     OLD VERSION.
    int         modamount1;
    int         modamount2; */
};
#endif

struct  race_data
{
    RACE_DATA * next;
    int		vnum;
    char *     	race_name;
    char *     	race_full;
    int		mstr;
    int		mint;
    int		mwis;
    int		mdex;
    int		mcon;
};

/* not used - Decklarean
struct  nrace_type
{
    char        lname  [20];
    char        sname  [4];
    int         size;
    int         mstr;
    int         mdex;
    int         mint;
    int         mwis;
    int         mcon;
    int         mods [5];
    long        res_flags;
    long        vul_flags;
    long        affects;
    int         hplev;
    int         manalev;
    int         movelev;
};
*/
/*
 * Data structure for notes.
 */
struct	note_data
{
    NOTE_DATA *	next;
    char *	sender;
    char *	date;
    char *	to_list;
    char *	subject;
    char *	text;
    time_t      date_stamp;
    bool        protected;
    int         on_board;
};



/*
 * An affect.
 */
struct	affect_data
{
    AFFECT_DATA *	next;
    int 		type;
    int			level;
    int 		duration;
    int 		location;
    int 		modifier;
    int			bitvector;
    bool                deleted;
};



/*
 * A kill structure (indexed by level).
 */
struct	kill_data
{
    int                 number;
    int                 killed;
};

/* Bitvector values.. replaces the old A,B,C system. */
#define BV00    0x00000001
#define BV01    0x00000002
#define BV02    0x00000004
#define BV03    0x00000008
#define BV04    0x00000010
#define BV05    0x00000020
#define BV06    0x00000040
#define BV07    0x00000080
#define BV08    0x00000100
#define BV09    0x00000200
#define BV10    0x00000400
#define BV11    0x00000800
#define BV12    0x00001000
#define BV13    0x00002000
#define BV14    0x00004000
#define BV15    0x00008000
#define BV16    0x00010000
#define BV17    0x00020000
#define BV18    0x00040000
#define BV19    0x00080000
#define BV20    0x00100000
#define BV21    0x00200000
#define BV22    0x00400000
#define BV23    0x00800000
#define BV24    0x01000000
#define BV25    0x02000000
#define BV26    0x04000000
#define BV27    0x08000000
#define BV28    0x10000000
#define BV29    0x20000000
#define BV30    0x40000000
#define BV31	0x80000000

/* RT ASCII conversions -- used so we can have letters in this file */

#define A		  	1
#define B			2
#define C			4
#define D			8
#define E			16
#define F			32
#define G			64
#define H			128

#define I			256
#define J			512
#define K		        1024
#define L		 	2048
#define M			4096
#define N		 	8192
#define O			16384
#define P			32768

#define Q			65536
#define R			131072
#define S			262144
#define T			524288
#define U			1048576
#define V			2097152
#define W			4194304
#define X			8388608

#define Y			16777216
#define Z			33554432
#define aa			67108864 	/* doubled due to conflicts */
#define bb			134217728
#define cc			268435456
#define dd			536870912
#define ee			1073741824

/***************************************************************************
 *                                                                         *
 *                   VALUES OF INTEREST TO AREA BUILDERS                   *
 *                   (Start of section ... start here)                     *
 *                                                                         *
 ***************************************************************************/

/*
 * Well known mob virtual numbers.
 * Defined in #MOBILES.
 */
#define MOB_VNUM_CITYGUARD	   127
#define MOB_VNUM_DEMON1 	   4
#define MOB_VNUM_DEMON2            4
#define MOB_VNUM_SUPERMOB          7
#define MOB_VNUM_ULT               3160

#define MOB_VNUM_AIR_ELEMENTAL     8914
#define MOB_VNUM_EARTH_ELEMENTAL   8915
#define MOB_VNUM_WATER_ELEMENTAL   8916
#define MOB_VNUM_FIRE_ELEMENTAL    8917
#define MOB_VNUM_DUST_ELEMENTAL    8918

/* XOR */
#define MOB_VNUM_DEMON		   80
#define MOB_VNUM_INSECTS	   81
#define MOB_VNUM_WOLFS		   82

/*ELVIS*/
#define MOB_VNUM_ANGEL             83
#define MOB_VNUM_SHADOW            84
#define MOB_VNUM_BEAST             85
#define MOB_VNUM_TRENT             86

/* BILL GATES */
#define GUILD_NORMAL		0
#define GUILD_PKILL		BV00
#define GUILD_CHAOS		BV01

/* CLANS */
#define CLAN_PKILL              BV00
#define CLAN_CIVIL_PKILL	BV01
#define CLAN_CHAMP_INDUCT	BV02
#define CLAN_LEADER_INDUCT	BV03
#define CLAN_FIRST_INDUCT	BV04
#define CLAN_SECOND_INDUCT	BV05

/*
 * ACT bits for mobs.
 * Used in #MOBILES.
 */
#define ACT_IS_NPC		BV00		/* Auto set for mobs */
#define ACT_SENTINEL		BV01		/* Stays in one room	*/
#define ACT_SCAVENGER		BV02		/* Picks up objects	*/

#define ACT_AGGRESSIVE		BV05		/* Attacks PC's		*/
#define ACT_STAY_AREA		BV06		/* Won't leave area	*/
#define ACT_WIMPY		BV07		/* Flees when hurt	*/
#define ACT_PET			BV08		/* Auto set for pets	*/
#define ACT_TRAIN		BV09		/* Can train PC's	*/
#define ACT_PRACTICE		BV10		/* Can practice PC's	*/
#define ACT_GAMBLE              BV11            /* Runs a gambling game */
#define ACT_PROTOTYPE           BV12            /* Prototype flag       */
#define ACT_UNDEAD              BV13            /* Can be turned        */
#define ACT_TRACK               BV14            /* Track players        */
#define ACT_QUESTMASTER		BV15            /* Autoquest giver      */
#define ACT_POSTMAN		BV16		/* Hello Mr. Postman!   */
#define ACT_NODRAG		BV17		/* No drag mob		*/
#define ACT_NOPUSH		BV18		/* No push mob		*/
#define ACT_NOSHADOW		BV19		/* No shadow mob	*/
#define ACT_NOASTRAL		BV20		/* No astral mob	*/
#define ACT_NEWBIE		BV21		/* Newbie Helper	*/

/*
 * Bits for 'affected_by'.
 * Used in #MOBILES.
 */
#define AFF_BLIND		BV00
#define AFF_INVISIBLE		BV01
#define AFF_DETECT_EVIL		BV02
#define AFF_DETECT_INVIS	BV03
#define AFF_DETECT_MAGIC	BV04
#define AFF_DETECT_HIDDEN	BV05
#define AFF_HASTE		BV06
#define AFF_SANCTUARY		BV07
#define AFF_FAERIE_FIRE		BV08
#define AFF_INFRARED		BV09
#define AFF_CURSE		BV10
#define AFF_FLAMING             BV11
#define AFF_POISON		BV12
#define AFF_PROTECT		BV13
#define AFF_VIBRATING		BV14		/* Unused	*/
#define AFF_SNEAK		BV15
#define AFF_HIDE		BV16
#define AFF_SLEEP		BV17
#define AFF_CHARM		BV18
#define AFF_FLYING		BV19
#define AFF_PASS_DOOR		BV20
#define AFF_STUN                BV21
#define AFF_SUMMONED            BV22
#define AFF_MUTE                BV23
#define AFF_PEACE              	BV24
#define AFF_FIRESHIELD         	BV25
#define AFF_SHOCKSHIELD        	BV26
#define AFF_ICESHIELD         	BV27
#define AFF_CHAOS             	BV28
#define AFF_SCRY              	BV29
#define AFF_ANTI_FLEE        	BV30
#define AFF_DISJUNCTION      	BV31

#define AFF_POLYMORPH		1
#define CODER			2
#define AFF_NOASTRAL            4
#define AFF_TRUESIGHT          16
#define AFF_BLADE              32
#define AFF_DETECT_GOOD        64
#define AFF_PROTECTION_GOOD    128
#define AFF_BERSERK            256
#define AFF_CONFUSED          1024
#define AFF_FUMBLE            2048
#define AFF_DANCING           4096
#define AFF_PHASED           16384
#define AFF_FIELD	     32768
#define AFF_RAGE	     65536
#define AFF_RUSH	    131072
#define AFF_INERTIAL	    262144
#define AFF_GOLDEN	    524288
#define AFF_PLOADED     1073741824

/* damage classes */
#define DAM_NONE                0
#define DAM_BASH                1
#define DAM_PIERCE              2
#define DAM_SLASH               3
#define DAM_FIRE                4
#define DAM_COLD                5
#define DAM_LIGHTNING           6
#define DAM_ACID                7
#define DAM_POISON              8
#define DAM_NEGATIVE            9
#define DAM_HOLY                10
#define DAM_ENERGY              11
#define DAM_MENTAL              12
#define DAM_DISEASE             13
#define DAM_DROWNING            14
#define DAM_LIGHT		15
#define DAM_OTHER               16
#define DAM_HARM		17
#define DAM_CHARM		18
#define DAM_SOUND		19

/* return values for check_imm */
#define IS_NORMAL		0
#define IS_IMMUNE		1
#define IS_RESISTANT		2
#define IS_VULNERABLE		3

/* IMM bits for mobs */
#define IMM_SUMMON              (A)
#define IMM_CHARM               (B)
#define IMM_MAGIC               (C)
#define IMM_WEAPON              (D)
#define IMM_BASH                (E)
#define IMM_PIERCE              (F)
#define IMM_SLASH               (G)
#define IMM_FIRE                (H)
#define IMM_COLD                (I)
#define IMM_LIGHTNING           (J)
#define IMM_ACID                (K)
#define IMM_POISON              (L)
#define IMM_NEGATIVE            (M)
#define IMM_HOLY                (N)
#define IMM_ENERGY              (O)
#define IMM_MENTAL              (P)
#define IMM_DISEASE             (Q)
#define IMM_DROWNING            (R)
#define IMM_LIGHT		(S)
#define IMM_SOUND		(T)
#define IMM_WOOD                (X)
#define IMM_SILVER              (Y)
#define IMM_IRON                (Z)
#define IMM_NERVE		(aa)

/* RES bits for mobs */
#define RES_SUMMON		(A)
#define RES_CHARM		(B)
#define RES_MAGIC               (C)
#define RES_WEAPON              (D)
#define RES_BASH                (E)
#define RES_PIERCE              (F)
#define RES_SLASH               (G)
#define RES_FIRE                (H)
#define RES_COLD                (I)
#define RES_LIGHTNING           (J)
#define RES_ACID                (K)
#define RES_POISON              (L)
#define RES_NEGATIVE            (M)
#define RES_HOLY                (N)
#define RES_ENERGY              (O)
#define RES_MENTAL              (P)
#define RES_DISEASE             (Q)
#define RES_DROWNING            (R)
#define RES_LIGHT		(S)
#define RES_SOUND		(T)
#define RES_WOOD                (X)
#define RES_SILVER              (Y)
#define RES_IRON                (Z)

/* VULN bits for mobs */
#define VULN_SUMMON		(A)
#define VULN_CHARM		(B)
#define VULN_MAGIC              (C)
#define VULN_WEAPON             (D)
#define VULN_BASH               (E)
#define VULN_PIERCE             (F)
#define VULN_SLASH              (G)
#define VULN_FIRE               (H)
#define VULN_COLD               (I)
#define VULN_LIGHTNING          (J)
#define VULN_ACID               (K)
#define VULN_POISON             (L)
#define VULN_NEGATIVE           (M)
#define VULN_HOLY               (N)
#define VULN_ENERGY             (O)
#define VULN_MENTAL             (P)
#define VULN_DISEASE            (Q)
#define VULN_DROWNING           (R)
#define VULN_LIGHT		(S)
#define VULN_SOUND		(T)
#define VULN_WOOD               (X)
#define VULN_SILVER             (Y)
#define VULN_IRON		(Z)


/* weapon class */
#define WEAPON_EXOTIC		0
#define WEAPON_SWORD		1
#define WEAPON_DAGGER		2
#define WEAPON_SPEAR		3
#define WEAPON_MACE		4
#define WEAPON_AXE		5
#define WEAPON_FLAIL		6
#define WEAPON_WHIP		7
#define WEAPON_POLEARM		8

/* weapon types */
#define WEAPON_FLAMING		(A)
#define WEAPON_FROST		(B)
#define WEAPON_VAMPIRIC		(C)
#define WEAPON_SHARP		(D)
#define WEAPON_VORPAL		(E)
#define WEAPON_TWO_HANDS	(F)
#define WEAPON_SHOCKING		(G)
#define WEAPON_POISON		(H)

/* gate flags */
#define GATE_NORMAL_EXIT	(A)
#define GATE_NOCURSE		(B)
#define GATE_GOWITH		(C)
#define GATE_BUGGY		(D)
#define GATE_RANDOM		(E)


/*
 * Types of attacks.
 * Must be non-overlapping with spell/skill types,
 * but may be arbitrary beyond that.
 */
#define TYPE_UNDEFINED               -1
#define TYPE_HIT                     1000


/*
 * Sex.
 * Used in #MOBILES.
 */
#define SEX_NEUTRAL		      0
#define SEX_MALE		      1
#define SEX_FEMALE		      2



/*
 * Well known object virtual numbers.
 * Defined in #OBJECTS.
 */
#define OBJ_VNUM_MONEY_ONE	      2
#define OBJ_VNUM_MONEY_SOME	      3

#define OBJ_VNUM_BLOOD		      9
#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_FINAL_TURD	     16
#define OBJ_VNUM_PORTAL              17
#define OBJ_VNUM_DOLL                18
#define OBJ_VNUM_BERRY               19

#define OBJ_VNUM_MUSHROOM	     20
#define OBJ_VNUM_LIGHT_BALL	     21
#define OBJ_VNUM_SPRING		     22
#define OBJ_VNUM_SOULGEM	     23
#define OBJ_VNUM_PARCHMENT        25050
#define OBJ_VNUM_QUILL            25051
#define OBJ_VNUM_FLASK            25052
#define OBJ_VNUM_CAULDRON         25053
#define OBJ_VNUM_MFIRE            25054
#define OBJ_VNUM_MINK             25055
/* Added for use in Ravenwood - Angi */
#define OBJ_VNUM_RWPARCHMENT	   1339
#define OBJ_VNUM_RWQUILL	   1341
#define OBJ_VNUM_RWFLASK	   1343
#define OBJ_VNUM_RWCAULDRON	   1344
#define OBJ_VNUM_RWFIRE	   	   1345
#define OBJ_VNUM_RWINK		   1346

#define OBJ_VNUM_PAPER		  25062
#define OBJ_VNUM_LETTER		  25063
#define OBJ_VNUM_SMOKEBOMB	  25064
#define OBJ_VNUM_TO_FORGE_A	  25065 /* armor */
#define OBJ_VNUM_TO_FORGE_W	  25066 /* weapon */
#define OBJ_VNUM_WARD_PHYS	  25067
#define OBJ_VNUM_SMITHY_HAMMER	    713
#define OBJ_VNUM_SCHOOL_MACE	   3001
#define OBJ_VNUM_SCHOOL_DAGGER	   138
#define OBJ_VNUM_SCHOOL_SWORD	   3003
#define OBJ_VNUM_SCHOOL_VEST	   136
#define OBJ_VNUM_SCHOOL_SHIELD	   3005
#define OBJ_VNUM_SCHOOL_BANNER     144
#define OBJ_VNUM_SCHOOL_CLUB       3007
/* 15001 - 15007 */

#define OBJ_VNUM_BLACK_POWDER      8903
#define OBJ_VNUM_FLAMEBLADE        8920


/*
 * Item types.
 * Used in #OBJECTS.
 */
#define ITEM_LIGHT		      1
#define ITEM_SCROLL		      2
#define ITEM_WAND		      3
#define ITEM_STAFF		      4
#define ITEM_WEAPON		      5
#define ITEM_TREASURE		      8
#define ITEM_ARMOR		      9
#define ITEM_POTION		     10
#define ITEM_NOTEBOARD               11
#define ITEM_FURNITURE		     12
#define ITEM_TRASH		     13
#define ITEM_CONTAINER		     15
#define ITEM_DRINK_CON		     17
#define ITEM_KEY		     18
#define ITEM_FOOD		     19
#define ITEM_MONEY		     20
#define ITEM_BOAT		     22
#define ITEM_CORPSE_NPC		     23
#define ITEM_CORPSE_PC		     24
#define ITEM_FOUNTAIN		     25
#define ITEM_PILL		     26
#define ITEM_LENSE                   27
#define ITEM_BLOOD                   28
#define ITEM_PORTAL                  29
#define ITEM_VODOO		     30
#define ITEM_BERRY                   31
//#define ITEM_POTION_BAG		     32

/*
 * Extra flags.
 * Used in #OBJECTS.
 */
#define ITEM_GLOW		      1		/*	1	*/
#define ITEM_HUM		      2
#define ITEM_DARK		      4
#define ITEM_LOCK		      8
#define ITEM_EVIL		     16
#define ITEM_INVIS		     32
#define ITEM_MAGIC		     64
#define ITEM_NODROP		    128
#define ITEM_BLESS		    256
#define ITEM_ANTI_GOOD		    512		/*	10	*/
#define ITEM_ANTI_EVIL		   1024
#define ITEM_ANTI_NEUTRAL	   2048
#define ITEM_NOREMOVE		   4096
#define ITEM_INVENTORY		   8192
#define ITEM_POISONED             16384
#define ITEM_DWARVEN              32768
#define ITEM_FREE_FLAG_2          65536
#define ITEM_FREE_FLAG_3          131072
#define ITEM_FREE_FLAG_4          262144
#define ITEM_FREE_FLAG_5          524288		/*	20	*/
#define ITEM_FREE_FLAG_6         1048576
#define ITEM_FREE_FLAG_7         2097152
#define ITEM_FREE_FLAG_8         4194304
#define ITEM_FREE_FLAG_9         8388608
#define ITEM_FREE_FLAG_10       16777216
#define ITEM_FLAME              33554432
#define ITEM_CHAOS              67108864
#define ITEM_NO_LOCATE		(cc)
#define ITEM_NO_DAMAGE          (dd)
#define ITEM_PATCHED            (ee)
#define ITEM_ICY                (bb)

/* ANTI_CLASS flags, FOR NEW FLAGS */
#define ITEM_ANTI_MAGE			1
#define ITEM_ANTI_CLERIC         	2
#define ITEM_ANTI_THIEF          	4
#define ITEM_ANTI_WARRIOR        	8
#define ITEM_ANTI_PSI                  16
#define ITEM_ANTI_DRUID                32
#define ITEM_ANTI_RANGER               64
#define ITEM_ANTI_PALADIN             128
#define ITEM_ANTI_BARD                256
#define ITEM_ANTI_VAMP                512
#define ITEM_ANTI_NECRO		     1024
#define ITEM_ANTI_WWF		     2048
#define ITEM_ANTI_MONK		     4096
/* ANTI_RACE flags, FOR NEW FLAGS */

#define ITEM_ANTI_HUMAN			1
#define ITEM_ANTI_ELF			2
#define ITEM_ANTI_DWARF			4
#define ITEM_ANTI_PIXIE			8
#define ITEM_ANTI_HALFLING	       16
#define ITEM_ANTI_DROW		       32
#define ITEM_ANTI_ELDER		       64
#define ITEM_ANTI_OGRE		      128
#define ITEM_ANTI_LIZARDMAN	      256
#define ITEM_ANTI_DEMON		      512
#define ITEM_ANTI_GHOUL		     1024
#define ITEM_ANTI_ILLITHID	     2048
#define ITEM_ANTI_MINOTAUR	     4096
#define ITEM_ANTI_TROLL              8192
#define ITEM_ANTI_SHADOW            16384
#define ITEM_ANTI_TABAXI	    32768

/*
 * Wear flags.
 * Used in #OBJECTS.
 */
#define ITEM_TAKE		      1
#define ITEM_WEAR_FINGER	      2
#define ITEM_WEAR_NECK		      4
#define ITEM_WEAR_BODY		      8
#define ITEM_WEAR_HEAD		     16
#define ITEM_WEAR_LEGS		     32
#define ITEM_WEAR_FEET		     64
#define ITEM_WEAR_HANDS		    128
#define ITEM_WEAR_ARMS		    256
#define ITEM_WEAR_SHIELD	    512
#define ITEM_WEAR_ABOUT		   1024
#define ITEM_WEAR_WAIST		   2048
#define ITEM_WEAR_WRIST		   4096
#define ITEM_WIELD		   8192
#define ITEM_HOLD		  16384
#define ITEM_WEAR_ORBIT           32768
#define ITEM_WEAR_FACE            65536
#define ITEM_WEAR_CONTACT        131072
#define ITEM_PROTOTYPE           262144
#define ITEM_WEAR_EARS           524288
#define ITEM_WEAR_ANKLE         1048576


/*
 * Apply types (for affects).
 * Used in #OBJECTS.
 */
#define APPLY_NONE		      0
#define APPLY_STR		      1
#define APPLY_DEX		      2
#define APPLY_INT		      3
#define APPLY_WIS		      4
#define APPLY_CON		      5
#define APPLY_SEX		      6
#define APPLY_CLASS		      7
#define APPLY_LEVEL		      8
#define APPLY_AGE		      9
#define APPLY_HEIGHT		     10
#define APPLY_WEIGHT		     11
#define APPLY_MANA		     12
#define APPLY_HIT		     13
#define APPLY_MOVE		     14
#define APPLY_GOLD		     15
#define APPLY_EXP		     16
#define APPLY_AC		     17
#define APPLY_HITROLL		     18
#define APPLY_DAMROLL		     19
#define APPLY_SAVING_PARA	     20
#define APPLY_SAVING_ROD	     21
#define APPLY_SAVING_PETRI	     22
#define APPLY_SAVING_BREATH	     23
#define APPLY_SAVING_SPELL	     24
#define APPLY_BP                     25
#define APPLY_ANTI_DIS               26

/* X */
#define PERM_SPELL_BEGIN	100
#define APPLY_INVISIBLE		(PERM_SPELL_BEGIN + 0)
#define APPLY_DETECT_EVIL	(PERM_SPELL_BEGIN + 1)
#define APPLY_DETECT_INVIS	(PERM_SPELL_BEGIN + 2)
#define APPLY_DETECT_MAGIC	(PERM_SPELL_BEGIN + 3)
#define APPLY_DETECT_HIDDEN	(PERM_SPELL_BEGIN + 4)
#define APPLY_SANCTUARY		(PERM_SPELL_BEGIN + 5)

#define APPLY_INFRARED		(PERM_SPELL_BEGIN + 6)
#define APPLY_PROTECT		(PERM_SPELL_BEGIN + 7)
#define APPLY_SNEAK		(PERM_SPELL_BEGIN + 8)
#define APPLY_HIDE		(PERM_SPELL_BEGIN + 9)
#define APPLY_FLYING		(PERM_SPELL_BEGIN + 10)

#define APPLY_PASS_DOOR		(PERM_SPELL_BEGIN + 11)
#define APPLY_HASTE		(PERM_SPELL_BEGIN + 12)

#define APPLY_FIRESHIELD        (PERM_SPELL_BEGIN + 13)
#define APPLY_SHOCKSHIELD       (PERM_SPELL_BEGIN + 14)

#define APPLY_ICESHIELD         (PERM_SPELL_BEGIN + 15)
#define APPLY_CHAOS             (PERM_SPELL_BEGIN + 16)
#define APPLY_SCRY              (PERM_SPELL_BEGIN + 17)
#define APPLY_FAERIE_FIRE	(PERM_SPELL_BEGIN + 19)
#define APPLY_POISON		(PERM_SPELL_BEGIN + 20)
#define APPLY_BLESS		(PERM_SPELL_BEGIN + 21)
#define APPLY_GIANT_STRENGTH	(PERM_SPELL_BEGIN + 22)
#define APPLY_COMBAT_MIND       (PERM_SPELL_BEGIN + 23)
#define APPLY_HEIGHTEN_SENSES   (PERM_SPELL_BEGIN + 24)
#define APPLY_BIO_ACCELERATION  (PERM_SPELL_BEGIN + 25)
/* END */

/*
 * Values for containers (value[1]).
 * Used in #OBJECTS.
 */
#define CONT_CLOSEABLE		      1
#define CONT_PICKPROOF		      2
#define CONT_CLOSED		      4
#define CONT_LOCKED		      8



/*
 * Well known room virtual numbers.
 * Defined in #ROOMS.
 */
#define ROOM_VNUM_LIMBO		      2
#define ROOM_VNUM_CHAT		      1
#define ROOM_VNUM_TEMPLE	   25000
#define ROOM_VNUM_ALTAR		   25000
#define ROOM_VNUM_JEZ		   25001
#define ROOM_VNUM_LAIK		   1301
#define ROOM_VNUM_SCHOOL	   800   /* Used to be 101 - Angi */
#define ROOM_VNUM_RW_SCHOOL	   1251
#define ROOM_VNUM_GRAVEYARD_A      25000
#define ROOM_VNUM_MORGUE           25130
#define ROOM_VNUM_DON_1		   25129
#define ROOM_VNUM_DON_2		   25127
#define ROOM_VNUM_DON_3		   25126
#define ROOM_VNUM_DON_4		   25128
#define ROOM_VNUM_HELL		      8
#define ROOM_VNUM_RJAIL		   1497
#define ROOM_VNUM_ARTIFACTOR	   25097
#define ROOM_VNUM_SMITHY	713
#define ROOM_ARENA_VNUM		7350
#define ROOM_ARENA_ENTER_F	7368
#define ROOM_ARENA_ENTER_S	7369
#define ROOM_ARENA_HALL_SHAME	7370


/*
 * Room flags.
 * Used in #ROOMS.
 */
#define ROOM_NONE		      0
#define ROOM_DARK		      1
#define ROOM_NO_MOB		      4
#define ROOM_INDOORS		      8
#define ROOM_NO_SHADOW	             16
#define ROOM_PRIVATE		    512
#define ROOM_SAFE		   1024
#define ROOM_SOLITARY		   2048
#define ROOM_PET_SHOP		   4096
#define ROOM_NO_RECALL		   8192
#define ROOM_CONE_OF_SILENCE      16384
#define ROOM_NO_MAGIC             32768
#define ROOM_NO_PKILL             65536
#define ROOM_NO_ASTRAL_IN        131072
#define ROOM_NO_ASTRAL_OUT       262144
#define ROOM_TELEPORT_AREA       524288
#define ROOM_TELEPORT_WORLD     1048576
#define ROOM_NO_OFFENSIVE       2097152
#define ROOM_NO_FLEE            4194304
#define ROOM_SILENT             8388608
#define ROOM_BANK		16777216
#define ROOM_NOFLOOR            33554432
#define ROOM_SMITHY             67108864
#define ROOM_NOSCRY		134217728
#define ROOM_DAMAGE             268435456
#define ROOM_PKILL              536870912
#define ROOM_MARK              1073741824

/*
 * Directions.
 * Used in #ROOMS.
 */
#define DIR_MAX			      5

#define DIR_NORTH		      0
#define DIR_EAST		      1
#define DIR_SOUTH		      2
#define DIR_WEST		      3
#define DIR_UP			      4
#define DIR_DOWN		      5


/*
 * Exit flags.
 * Used in #ROOMS.
 */
#define EX_ISDOOR		      1
#define EX_CLOSED		      2
#define EX_LOCKED		      4
#define EX_BASHED                     8
#define EX_BASHPROOF                 16
#define EX_PICKPROOF		     32
#define EX_PASSPROOF                 64
#define EX_RANDOM                   128
#define EX_MAGICLOCK		    256

/*
 * Sector types.
 * Used in #ROOMS.
 */
#define SECT_INSIDE		      0
#define SECT_CITY		      1
#define SECT_FIELD		      2
#define SECT_FOREST		      3
#define SECT_HILLS		      4
#define SECT_MOUNTAIN		      5
#define SECT_WATER_SWIM		      6
#define SECT_WATER_NOSWIM	      7
#define SECT_UNDERWATER  	      8
#define SECT_AIR		      9
#define SECT_DESERT		     10
#define SECT_BADLAND                 11
#define SECT_MAX		     12



/*
 * Equpiment wear locations.
 * Used in #RESETS.
 */
#define WEAR_NONE		     -1
#define WEAR_LIGHT		      0
#define WEAR_FINGER_L		      1
#define WEAR_FINGER_R		      2
#define WEAR_NECK_1		      3
#define WEAR_NECK_2		      4
#define WEAR_BODY		      5
#define WEAR_HEAD		      6
#define WEAR_IN_EYES		      7
#define WEAR_ON_FACE		      8
#define WEAR_ORBIT                    9
#define WEAR_ORBIT_2                 10
#define WEAR_LEGS		     11
#define WEAR_FEET		     12
#define WEAR_HANDS		     13
#define WEAR_ARMS		     14
#define WEAR_SHIELD		     15
#define WEAR_ABOUT		     16
#define WEAR_WAIST		     17
#define WEAR_WRIST_L		     18
#define WEAR_WRIST_R		     19
#define WEAR_WIELD		     20
#define WEAR_WIELD_2		     21
#define WEAR_HOLD		     22
#define WEAR_EAR_R                   23
#define WEAR_EAR_L		     24
#define WEAR_ANKLE_L                 25
#define WEAR_ANKLE_R                 26
#define MAX_WEAR		     27



/***************************************************************************
 *                                                                         *
 *                   VALUES OF INTEREST TO AREA BUILDERS                   *
 *                   (End of this section ... stop here)                   *
 *                                                                         *
 ***************************************************************************/

/*
 * Conditions.
 */
#define COND_DRUNK		      0
#define COND_FULL		      1
#define COND_THIRST		      2
/*
 *  Maxes for conditions.
 */
#define MAX_FULL		     50
#define MAX_THIRST		     50
#define MAX_DRUNK		     50


/*
 * Positions.
 */
#define POS_DEAD		      0
#define POS_MORTAL		      1
#define POS_INCAP		      2
#define POS_STUNNED		      3
#define POS_SLEEPING		      4
#define POS_RESTING		      5
#define POS_FIGHTING		      6
#define POS_STANDING		      7
#define POS_MEDITATING                8


/*
 * ACT bits for players.
 */
#define PLR_IS_NPC		BV00		/* Don't EVER set.	*/
#define PLR_BOUGHT_PET		BV01
#define PLR_AFK			BV02
#define PLR_AUTOEXIT		BV03
#define PLR_AUTOLOOT		BV04
#define PLR_AUTOSAC             BV05
#define PLR_BLANK		BV06
#define PLR_BRIEF		BV07
#define PLR_FULLNAME            BV08
#define PLR_COMBINE		BV09
#define PLR_PROMPT		BV10
#define PLR_TELNET_GA		BV11
#define PLR_HOLYLIGHT		BV12
#define PLR_WIZINVIS		BV13
#define PLR_QUEST		BV14
#define	PLR_SILENCE		BV15
#define PLR_NO_EMOTE		BV16
#define PLR_CLOAKED		BV17
#define PLR_NO_TELL		BV18
#define PLR_LOG			BV19
#define PLR_DENY		BV20
#define PLR_FREEZE		BV21
#define PLR_THIEF		BV22
#define PLR_KILLER		BV23
#define PLR_ANSI                BV24
#define PLR_AUTOCOINS           BV25
#define PLR_AUTOSPLIT           BV26
#define PLR_UNDEAD              BV27
#define PLR_QUESTOR             BV28
#define PLR_COMBAT              BV29
#define PLR_OUTCAST             BV30
#define PLR_PKILLER		BV31

/*
 * Obsolete bits.
 */
#if 0
#define PLR_AUCTION		      4	/* Obsolete	*/
#define PLR_CHAT		    256	/* Obsolete	*/
#define PLR_NO_SHOUT		 131072	/* Obsolete	*/
#endif


#define STUN_TOTAL            0   /* Commands and combat halted. Normal stun */
#define STUN_COMMAND          1   /* Commands halted. Combat goes through */
#define STUN_MAGIC            2   /* Can't cast spells */
#define STUN_NON_MAGIC        3   /* No weapon attacks */
#define STUN_TO_STUN          4   /* Requested. Stop continuous stunning */


/*
 * Channel bits.
 */
#define CHANNEL_NONE                  0
#define	CHANNEL_AUCTION		      1
#define	CHANNEL_CHAT		      2
#define CHANNEL_OOC		      4
#define	CHANNEL_IMMTALK	              8
#define	CHANNEL_MUSIC		     16
#define	CHANNEL_QUESTION	     32
#define	CHANNEL_SHOUT		     64
#define	CHANNEL_YELL		    128
#define CHANNEL_CLAN                256
#define CHANNEL_CLASS               512
#define CHANNEL_HERO               1024

/*
 * Log Channels
 * Added by Altrag.
 */
#define CHANNEL_LOG		   2048
#define CHANNEL_BUILD		   4096
#define CHANNEL_GOD                8192
#define CHANNEL_GUARDIAN          16384
#define CHANNEL_GUILD		  32768
#define CHANNEL_CODER             65536
#define CHANNEL_INFO		 131072
#define CHANNEL_CHALLENGE        262144


/* Master Channels
 * Added by Decklarean
 */
#define CHANNEL_GUILD_MASTER     524288
#define CHANNEL_CLASS_MASTER    1048576
#define CHANNEL_CLAN_MASTER     2097152

/* IMC channel.. -- Altrag */
#define CHANNEL_IMC		4194304

/* Vent and Arena --Angi */
#define CHANNEL_VENT            8388608
#define CHANNEL_ARENA 	       16777216

/*
 * Prototype for a mob.
 * This is the in-memory version of #MOBILES.
 */
struct	mob_index_data
{
    MOB_INDEX_DATA *	next;
    SPEC_FUN *		spec_fun;
    SHOP_DATA *		pShop;
    AREA_DATA *		area;			/* OLC */
    MPROG_DATA *        mobprogs;
    char *		player_name;
    char *		short_descr;
    char *		long_descr;
    char *		description;
    int 		vnum;
    int			progtypes;
    int 		count;
    int 		killed;
    short 		sex;
    short		class;
    int		 	level;
    int			act;
    long		affected_by;
    long		affected_by2;
    long		imm_flags;	/* XOR */
    long		res_flags;
    long		vul_flags;	/* XOR */
    int 		alignment;
    int 		hitroll;		/* Unused */
    int 		ac;			/* Unused */
    int 		hitnodice;		/* Unused */
    int 		hitsizedice;		/* Unused */
    int 		hitplus;		/* Unused */
    int 		damnodice;		/* Unused */
    int 		damsizedice;		/* Unused */
    int 		damplus;		/* Unused */
#ifdef NEW_MONEY
    MONEY_DATA		money;
#else
    int			gold;			/* Unused */
#endif
};

/*
 * -- Altrag
 */
struct  gskill_data
{
    int                 sn;
    void *              victim;
    int                 level;
    int                 timer;
};

/*
 * One character (PC or NPC).
 */
struct	char_data
{
    CHAR_DATA *		next;
    CHAR_DATA *		next_in_room;
    CHAR_DATA *		master;
    CHAR_DATA *		leader;
    CHAR_DATA *		fighting;
    CHAR_DATA *         hunting;
    CHAR_DATA *		reply;
    CHAR_DATA *         questgiver;
    CHAR_DATA *         questmob;
    SPEC_FUN *		spec_fun;
    MOB_INDEX_DATA *	pIndexData;
    DESCRIPTOR_DATA *	desc;
    AFFECT_DATA *	affected;
    AFFECT_DATA *	affected2;
    NOTE_DATA *		pnote;
    OBJ_DATA *		carrying;
    OBJ_DATA *          questobj;
    ROOM_INDEX_DATA *	in_room;
    ROOM_INDEX_DATA *	was_in_room;
    POWERED_DATA *	powered;
    PC_DATA *		pcdata;
    MPROG_ACT_LIST *    mpact;
    GSPELL_DATA *       gspell;
/*    PHOBIA_DATA *       phobia;*/
    char *		name;
    char *		short_descr;
    char *		long_descr;
    char *		description;
    char *              prompt;
    int                 cquestpnts;    /* for clan quests */
    int                 questpoints;   /* for autoquests  */
    int                 nextquest;
    int                 countdown;
    short 		sex;
/* FOR MULTICLASS BELOW */
    short 		class[ MAX_CLASS ];
/* FOR MULTICLASS ABOVE */
    int                 mpactnum;
    short 		race;
    short               clan;
    char                clev;
    int                 ctimer;
    int                 wizinvis;
    int			cloaked;
    int			level;
    int                 antidisarm;
    int  		trust;
    bool                wizbit;
    int			played;
    time_t		logon;
    time_t		save_time;
    time_t              last_note;
    int 		timer;
    int 		wait;
    int                 race_wait;
    int 		hit;
/*    int 		max_hit; */
    int			perm_hit;
    int			mod_hit;
    int 		mana;
/*    int 		max_mana;*/
    int			perm_mana;
    int			mod_mana;
    int 		move;
/*    int 		max_move; */
    int			perm_move;
    int			mod_move;
    int                 bp;
/*    int                 max_bp;*/
    int			perm_bp;
    int		 	mod_bp;
    int			charisma;
#ifdef NEW_MONEY
    MONEY_DATA		money;
#else
    int			gold;
#endif
    int			exp;
    int			act;
    long		affected_by;
    long		affected_by2;
    long		imm_flags;
    long		res_flags;
    long		vul_flags;
    int 		position;
    int 		practice;
    int 		carry_weight;
    int 		carry_number;
    int 		saving_throw;
    short 		alignment;
    char		start_align;
    int 		hitroll;
    int 		damroll;
    int 		armor;
    int 		wimpy;
    int 		deaf;
    bool                deleted;
    int			combat_timer;	/* XOR */
    int			summon_timer;	/* XOR */
    char		guild_rank;
    GUILD_DATA *	guild;
    int                 stunned[STUN_MAX];
    int			wiznet;
};


struct guild_data
{
  char *	name;
  char *	deity;
  int		color;
  int		type;
};

struct quest_data
{
  char *        name;
  int           vnum;
  int           qp;
  int           level;
};

struct  mob_prog_act_list
{
    MPROG_ACT_LIST * next;
    char *           buf;
    CHAR_DATA *      ch;
    OBJ_DATA *       obj;
    void *           vo;
};

struct  mob_prog_data
{
    MPROG_DATA *next;
    int         type;
    char *      arglist;
    char *      comlist;
};

/*
 * Data which only PC's have.
 */
struct	pc_data
{
    PC_DATA *		next;
    ALIAS_DATA *        alias_list;
    char *		pwd;
    char *              afkchar;
    char *		bamfin;
    char *		bamfout;
    char *		bamfusee;
    char *              transto;
    char *              transfrom;
    char *              transvict;
    char *              slayusee;
    char *              slayroom;
    char *              slayvict;
    char *		whotype;
    char *		title;
    char *              lname;
    char *		empowerments;
    char *		detractments;
    int 		perm_str;
    int 		perm_int;
    int 		perm_wis;
    int 		perm_dex;
    int 		perm_con;
    int 		mod_str;
    int 		mod_int;
    int 		mod_wis;
    int 		mod_dex;
    int 		mod_con;
    int 		condition	[ 3 ];
    int                 pagelen;
    int 		learned		[ MAX_SKILL ];
    bool                switched;
    int 		security;	/* OLC - Builder security */
#ifdef NEW_MONEY
    MONEY_DATA		bankaccount;
#else
    int                 bankaccount;
#endif
    OBJ_DATA          * storage;
    int                 storcount;
    int                 corpses;
    char *		plan;
    char *		email;
};

struct  alias_data
{
    ALIAS_DATA *next;
    char       *old;
    char       *new;
};

/* Not used -Deck
#define PHOBIA_FIRE      0
#define PHOBIA_LIGHTNING 1
#define PHOBIA_WATER     2
#define PHOBIA_MAGIC     3
#define PHOBIA_NONMAGIC  4
#define PHOBIA_PSI       5
#define PHOBIA_DRAGON    6
#define PHOBIA_MAX       7

struct  phobia_data
{
    PHOBIA_DATA *next;
    int          type;
    int          duration;
    int          strength;
};
*/

/*
 * heh.. were discussing obj/room progs.. and then these triggers started
 * looking a helluva lot like em.. :).. so what the hell..? :).. main
 * difference between this struct and the mobprog stuff is that this is
 * implemented as traps.  ie.. the disarmable stuff..
 * also, these are a little more global.. :)
 * -- Altrag
 */

/*
 * The object triggers.. quite a few of em.. :)
 */
#define OBJ_TRAP_ERROR           0  /* error! */
#define OBJ_TRAP_GET             A  /* obj is picked up */
#define OBJ_TRAP_DROP            B  /* obj is dropped */
#define OBJ_TRAP_PUT             C  /* obj is put into something */
#define OBJ_TRAP_WEAR            D  /* obj is worn */
#define OBJ_TRAP_LOOK            E  /* obj is looked at/examined */
#define OBJ_TRAP_LOOK_IN         F  /* obj is looked inside (containers) */
#define OBJ_TRAP_INVOKE          G  /* obj is invoked */
#define OBJ_TRAP_USE             H  /* obj is used (recited, zapped, ect) */
#define OBJ_TRAP_CAST            I  /* spell is cast on obj - percent */
#define OBJ_TRAP_CAST_SN         J  /* spell is cast on obj - by slot */
#define OBJ_TRAP_JOIN            K  /* obj is joined with another */
#define OBJ_TRAP_SEPARATE        L  /* obj is separated into two */
#define OBJ_TRAP_BUY             M  /* obj is bought from store */
#define OBJ_TRAP_SELL            N  /* obj is sold to store */
#define OBJ_TRAP_STORE           O  /* obj is stored in storage boxes */
#define OBJ_TRAP_RETRIEVE        P  /* obj is retrieved from storage */
#define OBJ_TRAP_OPEN            Q  /* obj is opened (containers) */
#define OBJ_TRAP_CLOSE           R  /* obj is closed (containers) */
#define OBJ_TRAP_LOCK            S  /* obj is locked (containers) */
#define OBJ_TRAP_UNLOCK          T  /* obj is unlocked (containers) */
#define OBJ_TRAP_PICK            U  /* obj is picked (containers) */
#define OBJ_TRAP_RANDOM          V  /* random trigger */
#define OBJ_TRAP_THROW           W  /* obj is thrown */
#define OBJ_TRAP_GET_FROM        X  /* to allow secondary obj's in get */
#define OBJ_TRAP_GIVE            Y  /* give an obj away */
#define OBJ_TRAP_FILL            Z  /* obj is filled (drink_cons) */

/*
 * Note that entry/exit/pass are only called if the equivilant exit
 * trap for the exit the person went through failed.
 * Pass is only called if the respective enter or exit trap failed.
 */
#define ROOM_TRAP_ERROR          0  /* error! */
#define ROOM_TRAP_ENTER          A  /* someone enters the room */
#define ROOM_TRAP_EXIT           B  /* someone leaves the room */
#define ROOM_TRAP_PASS           C  /* someone enters or leaves */
#define ROOM_TRAP_CAST           D  /* a spell was cast in room - percent */
#define ROOM_TRAP_CAST_SN        E  /* a spell was cast in room - by slot */
#define ROOM_TRAP_SLEEP          F  /* someone sleeps in the room */
#define ROOM_TRAP_WAKE           G  /* someone wakes up in the room */
#define ROOM_TRAP_REST           H  /* someone rests in the room */
#define ROOM_TRAP_DEATH          I  /* someone dies in the room */
#define ROOM_TRAP_TIME           J  /* depends on the time of day */
#define ROOM_TRAP_RANDOM         K  /* random trigger */

/*
 * enter/exit/pass rules are the same as those for room traps.
 * note that look trap is only called if scry trap fails.
 */
#define EXIT_TRAP_ERROR          0  /* error! */
#define EXIT_TRAP_ENTER          A  /* someone enters through the exit */
#define EXIT_TRAP_EXIT           B  /* someone leaves through the exit */
#define EXIT_TRAP_PASS           C  /* someone enters/leaves through exit */
#define EXIT_TRAP_LOOK           D  /* someone looks through exit */
#define EXIT_TRAP_SCRY           E  /* someone scrys through the exit */
#define EXIT_TRAP_OPEN           F  /* someone opens the exit (door) */
#define EXIT_TRAP_CLOSE          G  /* someone closes the exit (door) */
#define EXIT_TRAP_LOCK           H  /* someone locks the exit (door) */
#define EXIT_TRAP_UNLOCK         I  /* someone unlocks the exit (door) */
#define EXIT_TRAP_PICK           J  /* someone picks the exit (locked door) */

struct trap_data
{
    TRAP_DATA *next;
    TRAP_DATA *next_here;
    OBJ_INDEX_DATA *on_obj;
    ROOM_INDEX_DATA *in_room;
    EXIT_DATA *on_exit;
    int type;
    char *arglist;
    char *comlist;
    bool disarmable;
    bool disarmed;
    int disarm_dur;
};


/*
 * Liquids.
 */
#define LIQ_WATER        0
#define LIQ_MAX		16

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



/*
 * Extra description data for a room or object.
 */
struct	extra_descr_data
{
    EXTRA_DESCR_DATA *next;	   /* Next in list                     */
    char             *keyword;     /* Keyword in look/examine          */
    char             *description; /* What to see                      */
    bool              deleted;
};



/*
 * Prototype for an object.
 */
struct	obj_index_data
{
    OBJ_INDEX_DATA *	next;
    EXTRA_DESCR_DATA *	extra_descr;
    AFFECT_DATA *	affected;
    AREA_DATA *		area;			/* OLC */
    TRAP_DATA *         traps;
    int                 traptypes;
    char *		name;
    char *		short_descr;
    char *		description;
    int 		vnum;
    int 		item_type;
    int 		extra_flags;
/* FOR NEW FLAGS */
    int                 anti_race_flags;
    int                 anti_class_flags;

    int 		wear_flags;
    int 		count;
    int 		weight;
#ifdef NEW_MONEY
    MONEY_DATA		cost;
#else
    int			cost;			/* Unused */
#endif
    int                 level;
    int			value	[ 4 ];
    int                 ac_type;
    int                 ac_vnum;
    char *              ac_spell;
    int                 ac_charge [ 2 ];
    int                 join;
    int                 sep_one;
    int                 sep_two;
};



/*
 * One object.
 */
struct	obj_data
{
    OBJ_DATA *		next;
    OBJ_DATA *		next_content;
    OBJ_DATA *		contains;
    OBJ_DATA *		in_obj;
    CHAR_DATA *		carried_by;
    CHAR_DATA *         stored_by;
    EXTRA_DESCR_DATA *	extra_descr;
    AFFECT_DATA *	affected;
    OBJ_INDEX_DATA *	pIndexData;
    ROOM_INDEX_DATA *	in_room;
    char *		name;
    char *		short_descr;
    char *		description;
    int 		item_type;
    int 		extra_flags;
/* FOR NEW FLAGS */
    int			anti_race_flags;
    int			anti_class_flags;
    int 		wear_flags;
    int 		wear_loc;
    int 		weight;
#ifdef NEW_MONEY
    MONEY_DATA		cost;
#else
    int			cost;
#endif
    int 		level;
    int 		timer;
    int			value	[ 4 ];
    int                 ac_type;
    int                 ac_vnum;
    char *              ac_spell;
    int                 ac_charge [ 2 ];
    bool                deleted;
};



/*
 * Exit data.
 */
struct	exit_data
{
    ROOM_INDEX_DATA *	to_room;
    EXIT_DATA *		next;		/* OLC */
    TRAP_DATA *         traps;
    int                 traptypes;
    int			rs_flags;	/* OLC */
    int 		vnum;
    int 		exit_info;
    int 		key;
    char *		keyword;
    char *		description;
};



/*
 * 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;
    char		command;
    int 		arg1;
    int 		arg2;
    int 		arg3;
};



/*
 * Area definition.
 */
struct	area_data
{
    AREA_DATA *		next;
    char *		name;
    int                 recall;
    int 		age;
    int 		nplayer;
    char *		filename;	/* OLC */
    char *		builders;	/* OLC - Listing of builders */
    int			security;	/* OLC - Value 0-infinity  */
    int			lvnum;		/* OLC - Lower vnum */
    int			uvnum;		/* OLC - Upper vnum */
    int			vnum;		/* OLC - Area vnum  */
    int			area_flags;	/* OLC */
    char *              reset_sound;    /* Altrag */
    int			windstr;
    int			winddir;
    short		llevel;		/* lowest player level suggested */
    short		ulevel;		/* upper player level suggested */
    int			def_color;
};

struct  new_clan_data
{
    CLAN_DATA *         next;
    MONEY_DATA 		bankaccount;
    char *              name;
    char *              diety;
    char *              description;
    char *              leader;
    char *              first;
    char *              second;
    char *              champ;
    bool                isleader;
    bool                isfirst;
    bool                issecond;
    bool                ischamp;
    int                 vnum;
    int                 recall;
    int                 pkills;
    int                 mkills;
    int                 members;
    int                 pdeaths;
    int                 mdeaths;
    int                 obj_vnum_1;
    int                 obj_vnum_2;
    int                 obj_vnum_3;
    int                 settings;
};
/*
 * ROOM AFFECT type
 */
struct	room_affect_data
{
    ROOM_AFFECT_DATA *	next;
    ROOM_INDEX_DATA *	room;
    CHAR_DATA * 	powered_by;
    OBJ_DATA *		material;
    int 		type;
    int 		location;
};
struct	powered_data
{
    POWERED_DATA *	next;
    ROOM_INDEX_DATA *	room;
    ROOM_AFFECT_DATA *	raf;
    int			type;
    int			cost;
};
/*
 * Room type.
 */
struct	room_index_data
{
    ROOM_INDEX_DATA *	next;
    ROOM_AFFECT_DATA *  rAffect;
    CHAR_DATA *		people;
    OBJ_DATA *		contents;
    EXTRA_DESCR_DATA *	extra_descr;
    AREA_DATA *		area;
    EXIT_DATA *		exit	[ 6 ];
    RESET_DATA *	reset_first;	/* OLC */
    RESET_DATA *	reset_last;	/* OLC */
    TRAP_DATA *         traps;
    int                 traptypes;
    char *		name;
    char *		description;
    int 		vnum;
    int 		room_flags;
    int 		light;
    char 		sector_type;
    int                 rd;    /* TRI ( Room damage ) */
};



/*
 * Types of attacks.
 * Must be non-overlapping with spell/skill types,
 * but may be arbitrary beyond that.
 */
#define TYPE_UNDEFINED             -1
#define TYPE_HIT                 1000



/*
 *  Target types.
 */
#define TAR_IGNORE		    0
#define TAR_CHAR_OFFENSIVE	    1
#define TAR_CHAR_DEFENSIVE	    2
#define TAR_CHAR_SELF		    3
#define TAR_OBJ_INV		    4
#define TAR_GROUP_OFFENSIVE         5
#define TAR_GROUP_DEFENSIVE         6
#define TAR_GROUP_ALL               7
#define TAR_GROUP_OBJ               8
#define TAR_GROUP_IGNORE            9



/*
 * Skills include spells as a particular case.
 */
struct	skill_type
{
    char *	name;			   /* Name of skill		 */
    int 	skill_level [ MAX_CLASS+3 ]; /* Level needed by class */
    SPELL_FUN *	spell_fun;		   /* Spell pointer (for spells) */
    int 	target;			   /* Legal targets		 */
    int 	minimum_position;	   /* Position for caster / user */
    int *	pgsn;			   /* Pointer to associated gsn	 */
    int 	min_mana;		   /* Minimum mana used		 */
    int 	beats;			   /* Waiting time after use	 */
    char *	noun_damage;		   /* Damage message		 */
    char *	msg_off;		   /* Wear off message		 */
    char *      room_msg_off;		   /* Room Wear off message	 */
    bool	dispelable;
    int         slot;                      /* For object loading         */
};

/*
 * -- Altrag
 */
struct gskill_type
{
    int         wait;                      /* Wait for casters in ticks  */
    int         slot;                      /* Matching skill_table sn    */
    int         casters[MAX_CLASS];        /* Casters needed by class    */
};


/*
 * These are skill_lookup return values for common skills and spells.
 */
extern  int	gsn_trip;
extern  int	gsn_dirt_kick;
extern  int	gsn_track;
extern  int	gsn_shield_block;
extern  int	gsn_drain_life;
extern  int	gsn_mental_drain;
extern  int	gsn_turn_evil;
extern  int     gsn_bash_door;
extern  int     gsn_stun;
extern  int     gsn_berserk;

extern  int	gsn_backstab;
extern	int	gsn_backstab_2;
extern	int	gsn_palm;
extern  int	gsn_dodge;
extern  int     gsn_dual;
extern  int	gsn_hide;
extern  int	gsn_peek;
extern  int	gsn_pick_lock;
extern  int     gsn_punch;
extern  int     gsn_jab_punch;
extern  int     gsn_cross_punch;
extern  int     gsn_kidney_punch;
extern  int     gsn_roundhouse_punch;
extern  int     gsn_uppercut_punch;
extern  int	gsn_sneak;
extern  int	gsn_steal;
extern  int	gsn_disarm;
extern  int     gsn_poison_weapon;

extern  int     gsn_bash;
extern	int	gsn_enhanced_damage;
extern  int     gsn_enhanced_two;
extern  int     gsn_enhanced_hit;
extern   int	gsn_flury;
extern	int	gsn_kick;
extern  int	gsn_high_kick;
extern  int	gsn_spin_kick;
extern  int	gsn_jump_kick;
extern  int     gsn_circle;
extern  int     gsn_throw;
extern  int     gsn_feed;
extern	int	gsn_parry;
extern	int	gsn_rescue;
extern  int     gsn_patch;
extern	int	gsn_second_attack;
extern	int	gsn_third_attack;
extern  int     gsn_fourth_attack;
extern  int     gsn_fifth_attack;
extern  int     gsn_sixth_attack;
extern  int     gsn_seventh_attack;
extern  int     gsn_eighth_attack;
extern  int     gsn_gouge;
extern  int     gsn_alchemy;
extern  int     gsn_scribe;
extern	int	gsn_blindness;
extern	int	gsn_charm_person;
extern	int	gsn_curse;
extern	int	gsn_invis;
extern	int	gsn_mass_invis;
extern	int	gsn_poison;
extern	int	gsn_sleep;
extern  int     gsn_prayer;
extern  int     gsn_soulstrike;
extern	int	gsn_scrolls;
extern	int	gsn_staves;
extern	int	gsn_wands;
extern  int	gsn_spellcraft;
extern  int	gsn_gravebind;
extern  int	gsn_multiburst;
extern	int	gsn_enhanced_claw;
extern	int	gsn_dualclaw;
extern	int	gsn_fastheal;
extern	int	gsn_rage;
extern	int	gsn_bite;
extern	int	gsn_rush;
extern	int	gsn_howlfear;
extern	int	gsn_scent;
extern	int	gsn_frenzy;
extern	int	gsn_reflex;
extern	int	gsn_rake;
extern  int     gsn_headbutt;
extern	int	gsn_flamehand;
extern	int	gsn_frosthand;
extern	int	gsn_chaoshand;
extern	int	gsn_bladepalm;
extern	int	gsn_flykick;
extern	int	gsn_anatomyknow;
extern	int	gsn_blackbelt;
extern	int	gsn_nerve;
extern	int	gsn_ironfist;
extern	int	gsn_globedark;
extern	int	gsn_drowfire;
extern	int	gsn_snatch;
extern	int	gsn_enhanced_three;
extern	int	gsn_retreat;
extern	int	gsn_antidote;
extern	int	gsn_haggle;
extern	int	gsn_dodge_two;
extern	int	gsn_blindfight;
extern	int	gsn_shriek;
extern	int	gsn_spit;
extern	int	gsn_ward_safe;
extern	int	gsn_ward_heal;
extern  int     gsn_incinerate;
extern  int     gsn_grip;


/*  do not need gsn for imm commands  -Deck
extern  int     gsn_advance;
extern  int     gsn_allow;
extern  int     gsn_at;
extern  int     gsn_bamfin;
extern  int     gsn_bamfout;
extern  int     gsn_ban;
extern  int     gsn_cset;
extern  int     gsn_deny;
extern  int     gsn_disconnect;
extern  int     gsn_echo;
extern  int 	gsn_fighting;
extern  int     gsn_force;
extern  int     gsn_freeze;
extern  int     gsn_goto;
extern  int     gsn_holylight;
extern  int     gsn_immtalk;
extern  int     gsn_log;
extern  int     gsn_memory;
extern  int     gsn_mfind;
extern  int     gsn_mload;
extern  int     gsn_mset;
extern  int     gsn_mstat;
extern  int     gsn_mwhere;
extern  int     gsn_newlock;
extern  int     gsn_noemote;
extern  int     gsn_notell;
extern  int     gsn_numlock;
extern  int     gsn_ofind;
extern  int     gsn_oload;
extern  int     gsn_oset;
extern  int     gsn_ostat;
extern  int     gsn_owhere;
extern  int     gsn_pardon;
extern  int     gsn_peace;
extern  int     gsn_purge;
extern  int     gsn_reboot;
extern  int     gsn_recho;
extern  int     gsn_restore;
extern  int     gsn_return;
extern  int     gsn_rset;
extern  int     gsn_rstat;
extern  int     gsn_shutdown;
extern  int     gsn_silence;
extern  int     gsn_slay;
extern  int     gsn_slookup;
extern  int     gsn_snoop;
extern  int     gsn_sset;
extern  int     gsn_sstime;
extern  int     gsn_switch;
extern  int     gsn_transfer;
extern  int     gsn_trust;
extern  int     gsn_users;
extern  int     gsn_wizhelp;
extern  int     gsn_wizify;
extern  int     gsn_wizinvis;
extern  int     gsn_wizlock;
*/

extern  int     gsn_shadow_walk;
/*
 * Psionicist gsn's.
 */
extern  int     gsn_chameleon;
extern  int     gsn_domination;
extern  int     gsn_heighten;
extern  int     gsn_shadow;

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



/*
 * Character macros.
 */
#define IS_CODER( ch )          ( IS_SET( ( ch )->affected_by2, CODER ) )
#define IS_NPC( ch )		( IS_SET( ( ch )->act, ACT_IS_NPC ) )
#define IS_IMMORTAL( ch )	( get_trust( ch ) >= LEVEL_IMMORTAL )
#define IS_HERO( ch )		( get_trust( ch ) >= LEVEL_HERO     )
#define IS_QUESTOR( ch )        ( IS_SET( ( ch )->act, PLR_QUESTOR ) )

#define IS_AFFECTED( ch, sn )	( IS_SET( ( ch )->affected_by, ( sn ) ) )
#define IS_AFFECTED2(ch, sn)	( IS_SET( ( ch )->affected_by2, (sn)))
#define IS_SIMM(ch, sn)		(IS_SET((ch)->imm_flags, (sn)))
#define IS_SRES(ch, sn)		(IS_SET((ch)->res_flags, (sn)))
#define IS_SVUL(ch, sn)		(IS_SET((ch)->vul_flags, (sn)))

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

#define IS_AWAKE( ch )		( ch->position > POS_SLEEPING )
#define GET_AC( ch )		( ( ch )->armor				     \
				    + ( IS_AWAKE( ch )			     \
				    ? dex_app[get_curr_dex( ch )].defensive  \
				    : 0 ) )
#define GET_HITROLL( ch )      	( ( ch )->hitroll                            \
				 + str_app[get_curr_str( ch )].tohit )
#define GET_DAMROLL( ch )      	( ( ch )->damroll                            \
				 + str_app[get_curr_str( ch )].todam )

#define IS_OUTSIDE( ch )       	( !IS_SET(				     \
				    ( ch )->in_room->room_flags,       	     \
				    ROOM_INDOORS ) )

#define WAIT_STATE( ch, pulse ) ( ( ch )->wait = UMAX( ( ch )->wait,         \
						      ( pulse ) ) )


#define STUN_CHAR( ch, pulse, type ) ( (ch)->stunned[(type)] =               \
				       UMAX( (ch)->stunned[(type)],          \
					     (pulse) ) )

#define IS_STUNNED( ch, type ) ( (ch)->stunned[(type)] > 0 )
#define MANA_COST( ch, sn )     ( IS_NPC( ch ) ? 0 : UMAX (                  \
				skill_table[sn].min_mana,                    \
				100 / ( 2 + ch->level -                      \
			skill_table[sn].skill_level[prime_class(ch)] ) ) )
#define SPELL_COST( ch, sn )	( is_class( ch, CLASS_VAMPIRE ) \
				? MANA_COST( ch, sn ) / 4 		 \
				: MANA_COST( ch, sn ) )

#define MT( ch )		( is_class( ch, CLASS_VAMPIRE ) ? ch->bp \
				  				: ch->mana )
#define MT_MAX( ch )		( is_class( ch, CLASS_VAMPIRE ) \
				? MAX_BP(ch)			\
				: MAX_MANA(ch) )
#define IS_SWITCHED( ch )       ( ch->pcdata->switched )

#define UNDEAD_TYPE( ch )	( IS_NPC( ch ) ? ACT_UNDEAD : PLR_UNDEAD )

#define MAX_HIT( ch ) 		( (ch)->perm_hit + (ch)->mod_hit )
#define MAX_MANA( ch ) 		( (ch)->perm_mana + (ch)->mod_mana )
#define MAX_BP( ch ) 		( (ch)->perm_bp + (ch)->mod_bp )
#define MAX_MOVE( ch ) 		( (ch)->perm_move + (ch)->mod_move )

#define CAN_FLY( ch )		( (ch->race == RACE_PIXIE) || (ch->race == RACE_ELDER) || \
				  (IS_AFFECTED( ch, AFF_FLYING )) )
/*
 * Object macros.
 */
#define CAN_WEAR( obj, part )	( IS_SET( ( obj)->wear_flags,  ( part ) ) )
#define IS_OBJ_STAT( obj, stat )( IS_SET( ( obj)->extra_flags, ( stat ) ) )
/* FOR NEW FLAGS */
#define IS_ANTI_CLASS( obj, stat )( IS_SET( (obj)->anti_class_flags, ( stat ) ) )
#define IS_ANTI_RACE( obj, stat )(IS_SET( (obj)->anti_race_flags, ( stat ) ) )


/*
 * Description macros.
 */
#define PERS( ch, looker )	( can_see( looker, ( ch ) ) ?		     \
				( IS_NPC( ch ) ? ( ch )->short_descr	     \
				               : ( ch )->name ) : "someone" )



/*
 * Arena macro.
 */
#define IS_ARENA(ch)	(!IS_NPC((ch)) && (ch)->in_room && \
			(ch)->in_room->area == arena.area && \
			((ch) == arena.fch || (ch) == arena.sch))

/*
 * Structure for a command in the command lookup table.
 */
struct	cmd_type
{
    char * const	name;
    DO_FUN *		do_fun;
    int 		position;
    int 		level;
    int 		log;
};



/*
 * 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	str_app_type	str_app		[ 31 ];
extern	const	struct	int_app_type	int_app		[ 31 ];
extern	const	struct	wis_app_type	wis_app		[ 31 ];
extern	const	struct	dex_app_type	dex_app		[ 31 ];
extern	const	struct	con_app_type	con_app		[ 31 ];

extern	const	struct	class_type	class_table	[ MAX_CLASS   ];
/*extern	const	struct	race_type	race_table	[ MAX_RACE    ];*/
extern  const   struct  wiznet_type     wiznet_table    [ ];
extern  const   struct  guild_data      guild_table     [ ];
extern  const   struct  quest_data      quest_table     [ ];
extern	struct	cmd_type	cmd_table	[ ];
extern	const	struct	liq_type	liq_table	[ LIQ_MAX     ];
extern	const	struct	skill_type	skill_table	[ MAX_SKILL ];
extern  const   struct  gskill_type     gskill_table    [ MAX_GSPELL  ];
/*extern	const	struct	social_type	social_table	[ ];*/
extern	char *	const			title_table	[ MAX_CLASS+3 ]
							[ MAX_LEVEL+1 ]
							[ 2 ];



/*
 * Global variables.
 */

extern		NEWBIE_DATA	  *	newbie_first;
extern		NEWBIE_DATA	  *	newbie_last;   /* Angi */

extern		PLAYERLIST_DATA	  *	playerlist; /* Decklarean */

extern		SOCIAL_DATA	  *	social_first; /* Decklarean */
extern		SOCIAL_DATA	  *	social_last;

extern		RACE_DATA	  *     first_race; /* Decklarean */

extern		HELP_DATA	  *	help_first;
extern		HELP_DATA	  *	help_last;
extern		HELP_DATA	  *	help_free;

extern		SHOP_DATA	  *	shop_first;

extern		BAN_DATA	  *	ban_list;
/*extern          USERL_DATA        *     user_list;*/  /* finger data/mailing */
extern		CHAR_DATA	  *	char_list;
extern		DESCRIPTOR_DATA   *	descriptor_list;
extern		NOTE_DATA	  *	note_list;
extern		OBJ_DATA	  *	object_list;
extern          TRAP_DATA         *     trap_list;  /* Altech trap stuff */

extern		AFFECT_DATA	  *	affect_free;
extern		BAN_DATA	  *	ban_free;
extern		CHAR_DATA	  *	char_free;
extern		DESCRIPTOR_DATA	  *	descriptor_free;
extern		EXTRA_DESCR_DATA  *	extra_descr_free;
extern		NOTE_DATA	  *	note_free;
extern		OBJ_DATA	  *	obj_free;
extern		PC_DATA		  *	pcdata_free;

extern		char			bug_buf		[ ];
extern		time_t			current_time;
extern		bool			fLogAll;
extern		FILE *			fpReserve;
extern		KILL_DATA		kill_table	[ ];
extern		char			log_buf		[ ];
extern		TIME_INFO_DATA		time_info;
extern		WEATHER_DATA		weather_info;
extern		ARENA_DATA		arena;
extern          char              *     down_time;
extern          char              *     warning1;
extern          char              *     warning2;
extern          int                     stype;
extern          int			prtv;
extern          bool 			quest;
extern          int			qmin;
extern		int			qmax;
extern          int                     port;

/*
 * Command functions.
 * Defined in act_*.c (mostly).
 */
DECLARE_DO_FUN( do_clanquest    );
DECLARE_DO_FUN( do_quest        );
DECLARE_DO_FUN( do_qecho        );
DECLARE_DO_FUN( do_qset         );
DECLARE_DO_FUN( do_questflag    );
DECLARE_DO_FUN( do_mpasound     );
DECLARE_DO_FUN( do_mpat         );
DECLARE_DO_FUN( do_mpecho       );
DECLARE_DO_FUN( do_mpechoaround );
DECLARE_DO_FUN( do_mpechoat     );
DECLARE_DO_FUN( do_mpforce      );
DECLARE_DO_FUN( do_mpgoto       );
DECLARE_DO_FUN( do_mpjunk       );
DECLARE_DO_FUN( do_mpkill       );
DECLARE_DO_FUN( do_mpmload      );
DECLARE_DO_FUN( do_mpoload      );
DECLARE_DO_FUN( do_mppurge      );
DECLARE_DO_FUN( do_mpstat       );
DECLARE_DO_FUN( do_mpcommands   );
DECLARE_DO_FUN( do_mpteleport   );
DECLARE_DO_FUN( do_mptransfer   );
DECLARE_DO_FUN( do_opstat	);
DECLARE_DO_FUN( do_rpstat	);
DECLARE_DO_FUN( do_accept	);
DECLARE_DO_FUN( do_account      );
DECLARE_DO_FUN(	do_advance	);
DECLARE_DO_FUN( do_affectedby   );
DECLARE_DO_FUN(	do_raffect	);
DECLARE_DO_FUN( do_afk		);
DECLARE_DO_FUN( do_afkmes       );
DECLARE_DO_FUN(	do_allow	);
DECLARE_DO_FUN( do_ansi         );
DECLARE_DO_FUN(	do_answer	);
DECLARE_DO_FUN( do_antidote	);
DECLARE_DO_FUN(	do_areas	);
DECLARE_DO_FUN( do_assasinate   );
DECLARE_DO_FUN( do_astat        );
DECLARE_DO_FUN( do_astrip       );
DECLARE_DO_FUN(	do_at		);
DECLARE_DO_FUN(	do_auction	);
DECLARE_DO_FUN( do_auto         );
DECLARE_DO_FUN( do_autoexit     );
DECLARE_DO_FUN( do_autocoins    );
DECLARE_DO_FUN( do_autoloot     );
DECLARE_DO_FUN( do_autosac      );
DECLARE_DO_FUN( do_autosplit    );
DECLARE_DO_FUN(	do_backstab	);
DECLARE_DO_FUN( do_bamf		);
/*DECLARE_DO_FUN(	do_bamfin	);
DECLARE_DO_FUN(	do_bamfout	); */
DECLARE_DO_FUN(	do_bash 	);
DECLARE_DO_FUN( do_berserk      );
DECLARE_DO_FUN( do_bid          );
DECLARE_DO_FUN( do_blank        );
DECLARE_DO_FUN( do_bodybag      );
DECLARE_DO_FUN(	do_brandish	);
DECLARE_DO_FUN( do_brief        );
DECLARE_DO_FUN(	do_bug		);
DECLARE_DO_FUN(	do_buy		);
DECLARE_DO_FUN( do_challenge	);
DECLARE_DO_FUN( do_chameleon    );
DECLARE_DO_FUN( do_champlist 	);
DECLARE_DO_FUN(	do_cast		);
DECLARE_DO_FUN( do_changes	);
DECLARE_DO_FUN(	do_channels	);
DECLARE_DO_FUN(	do_chat		);
DECLARE_DO_FUN( do_clan         );
DECLARE_DO_FUN( do_clone	);
DECLARE_DO_FUN( do_cinfo        );
DECLARE_DO_FUN( do_circle       );
DECLARE_DO_FUN( do_clans        );
DECLARE_DO_FUN( do_clandesc     );
DECLARE_DO_FUN( do_class        );
DECLARE_DO_FUN( do_cloak	);
DECLARE_DO_FUN(	do_close	);
DECLARE_DO_FUN( do_combat       );
DECLARE_DO_FUN( do_combine      );
DECLARE_DO_FUN(	do_commands	);
DECLARE_DO_FUN(	do_compare	);
DECLARE_DO_FUN( do_conference   );
DECLARE_DO_FUN(	do_config	);
DECLARE_DO_FUN(	do_consider	);
DECLARE_DO_FUN( do_countcommands);
DECLARE_DO_FUN(	do_credits	);
DECLARE_DO_FUN( do_cross_punch	);
DECLARE_DO_FUN(	do_cset		);
DECLARE_DO_FUN( do_darkinvis    );
DECLARE_DO_FUN( do_delet	);
DECLARE_DO_FUN( do_delete	);
DECLARE_DO_FUN(	do_deny		);
DECLARE_DO_FUN( do_deposit      );
DECLARE_DO_FUN( do_desc_check	);
DECLARE_DO_FUN( do_descript_clean );
DECLARE_DO_FUN(	do_description	);
DECLARE_DO_FUN( do_detract	);
DECLARE_DO_FUN(	do_disarm	);
DECLARE_DO_FUN(	do_disconnect	);
DECLARE_DO_FUN( do_donate	);
DECLARE_DO_FUN(	do_down		);
DECLARE_DO_FUN(	do_drink	);
DECLARE_DO_FUN(	do_drop		);
DECLARE_DO_FUN( do_dual         );
DECLARE_DO_FUN(	do_east		);
DECLARE_DO_FUN(	do_eat		);
DECLARE_DO_FUN(	do_echo		);
DECLARE_DO_FUN( do_email	);
DECLARE_DO_FUN(	do_emote	);
DECLARE_DO_FUN( do_empower	);
DECLARE_DO_FUN( do_enter        );
DECLARE_DO_FUN(	do_equipment	);
DECLARE_DO_FUN(	do_examine	);
DECLARE_DO_FUN(	do_exits	);
DECLARE_DO_FUN( do_farsight     );
DECLARE_DO_FUN( do_feed         );
DECLARE_DO_FUN( do_fighting	);
DECLARE_DO_FUN(	do_fill		);
DECLARE_DO_FUN( do_finger       );
DECLARE_DO_FUN(	do_flee		);
DECLARE_DO_FUN( do_flury 	);
DECLARE_DO_FUN(	do_follow	);
DECLARE_DO_FUN(	do_force	);
DECLARE_DO_FUN(	do_freeze	);
DECLARE_DO_FUN( do_fullname     );
DECLARE_DO_FUN(	do_get		);
DECLARE_DO_FUN(	do_give		);
DECLARE_DO_FUN( do_gorge        );
DECLARE_DO_FUN(	do_goto		);
DECLARE_DO_FUN(	do_group	);
DECLARE_DO_FUN(	do_gtell	);
DECLARE_DO_FUN( do_guard        );
DECLARE_DO_FUN( do_heighten     );
DECLARE_DO_FUN(	do_help		);
DECLARE_DO_FUN( do_hero         );
DECLARE_DO_FUN(	do_hide		);
DECLARE_DO_FUN( do_high_kick	);
DECLARE_DO_FUN( do_hlist        );
DECLARE_DO_FUN(	do_holylight	);
#if defined( HOTREBOOT )
DECLARE_DO_FUN(	do_hotreboo	);
DECLARE_DO_FUN(	do_hotreboot	);
#endif
DECLARE_DO_FUN(	do_idea		);
DECLARE_DO_FUN(	do_ideas		);
DECLARE_DO_FUN( do_imc		);
DECLARE_DO_FUN( do_immlist	);
DECLARE_DO_FUN(	do_immtalk	);
DECLARE_DO_FUN( do_indestructable);
DECLARE_DO_FUN( do_induct       );
DECLARE_DO_FUN( do_info		);
DECLARE_DO_FUN(	do_inventory	);
DECLARE_DO_FUN( do_invoke       );
DECLARE_DO_FUN(	do_invis	);
DECLARE_DO_FUN( do_irongrip     );
DECLARE_DO_FUN( do_jab_punch	);
DECLARE_DO_FUN( do_join         );
DECLARE_DO_FUN( do_jump_kick	);
DECLARE_DO_FUN(	do_kick		);
DECLARE_DO_FUN( do_kidney_punch	);
DECLARE_DO_FUN(	do_kill		);
DECLARE_DO_FUN(	do_list		);
DECLARE_DO_FUN(	do_lock		);
DECLARE_DO_FUN(	do_log		);
DECLARE_DO_FUN(	do_look		);
DECLARE_DO_FUN( do_lowrecall );
DECLARE_DO_FUN(	do_memory	);
DECLARE_DO_FUN( do_mental_drain );
DECLARE_DO_FUN(	do_mfind	);
DECLARE_DO_FUN(	do_mload	);
DECLARE_DO_FUN(	do_mset		);
DECLARE_DO_FUN(	do_mstat	);
DECLARE_DO_FUN(	do_mwhere	);
DECLARE_DO_FUN(	do_murde	);
DECLARE_DO_FUN(	do_murder	);
DECLARE_DO_FUN(	do_music	);
DECLARE_DO_FUN( do_newbie	);
DECLARE_DO_FUN( do_newcorpse	);
DECLARE_DO_FUN(	do_newlock	);
DECLARE_DO_FUN(	do_noemote	);
DECLARE_DO_FUN(	do_north	);
DECLARE_DO_FUN(	do_note		);
DECLARE_DO_FUN(	do_notell	);
DECLARE_DO_FUN( do_nukerep	);
DECLARE_DO_FUN(	do_numlock	);
DECLARE_DO_FUN(	do_ofind	);
DECLARE_DO_FUN( do_olist	);
DECLARE_DO_FUN(	do_oload	);
DECLARE_DO_FUN( do_ooc		);
DECLARE_DO_FUN(	do_open		);
DECLARE_DO_FUN(	do_order	);
DECLARE_DO_FUN(	do_oset		);
DECLARE_DO_FUN(	do_ostat	);
DECLARE_DO_FUN( do_outcast      );
DECLARE_DO_FUN(	do_owhere	);
DECLARE_DO_FUN( do_pagelen      );
DECLARE_DO_FUN(	do_pardon	);
DECLARE_DO_FUN(	do_password	);
DECLARE_DO_FUN( do_patch        );
DECLARE_DO_FUN(	do_peace	);
DECLARE_DO_FUN(	do_pick		);
DECLARE_DO_FUN( do_pkill	);
DECLARE_DO_FUN( do_plan		);
DECLARE_DO_FUN( do_playerlist   );
DECLARE_DO_FUN( do_pload        );
DECLARE_DO_FUN(	do_poison_weapon);
DECLARE_DO_FUN(	do_pose		);
DECLARE_DO_FUN(	do_practice	);
DECLARE_DO_FUN( do_pray         );
DECLARE_DO_FUN( do_prompt       );
DECLARE_DO_FUN( do_punch        );
DECLARE_DO_FUN(	do_purge	);
DECLARE_DO_FUN(	do_put		);
DECLARE_DO_FUN( do_pwhere       );
DECLARE_DO_FUN(	do_quaff	);
DECLARE_DO_FUN(	do_question	);
DECLARE_DO_FUN(	do_qui		);
DECLARE_DO_FUN(	do_quit		);
DECLARE_DO_FUN(	do_race_edit	);
DECLARE_DO_FUN( do_racelist	);
DECLARE_DO_FUN(	do_reboo	);
DECLARE_DO_FUN(	do_reboot	);
DECLARE_DO_FUN( do_rebuild	);
DECLARE_DO_FUN(	do_recall	);
DECLARE_DO_FUN(	do_recho	);
DECLARE_DO_FUN(	do_recite	);
DECLARE_DO_FUN( do_remake	);
DECLARE_DO_FUN( do_remote       );
DECLARE_DO_FUN(	do_remove	);
DECLARE_DO_FUN(	do_rent		);
DECLARE_DO_FUN( do_repair       );
DECLARE_DO_FUN(	do_reply	);
DECLARE_DO_FUN(	do_report	);
DECLARE_DO_FUN(	do_rescue	);
DECLARE_DO_FUN(	do_rest		);
DECLARE_DO_FUN( do_restrict     );
DECLARE_DO_FUN(	do_restore	);
DECLARE_DO_FUN( do_retreat	);
DECLARE_DO_FUN( do_retrieve     );
DECLARE_DO_FUN(	do_return	);
DECLARE_DO_FUN( do_roundhouse_punch);
DECLARE_DO_FUN(	do_rset		);
DECLARE_DO_FUN(	do_rstat	);
DECLARE_DO_FUN(	do_sacrifice	);
DECLARE_DO_FUN(	do_save		);
DECLARE_DO_FUN(	do_say		);
DECLARE_DO_FUN(	do_score	);
DECLARE_DO_FUN(	do_sell		);
DECLARE_DO_FUN( do_seize	);
DECLARE_DO_FUN( do_separate     );
DECLARE_DO_FUN( do_setlev       );
DECLARE_DO_FUN( do_shadow       );
DECLARE_DO_FUN( do_shadow_walk  );
DECLARE_DO_FUN(	do_shout	);
DECLARE_DO_FUN(	do_shutdow	);
DECLARE_DO_FUN(	do_shutdown	);
DECLARE_DO_FUN(	do_silence	);
DECLARE_DO_FUN(	do_sla		);
DECLARE_DO_FUN(	do_slay		);
DECLARE_DO_FUN( do_slaymes   	);
DECLARE_DO_FUN(	do_sleep	);
DECLARE_DO_FUN( do_slist        );
DECLARE_DO_FUN(	do_slookup	);
DECLARE_DO_FUN( do_smash        );
DECLARE_DO_FUN( do_snatch	);
DECLARE_DO_FUN(	do_sneak	);
DECLARE_DO_FUN(	do_snoop	);
DECLARE_DO_FUN(	do_socials	);
DECLARE_DO_FUN( do_soulstrike   );
DECLARE_DO_FUN(	do_south	);
DECLARE_DO_FUN( do_spells       );
DECLARE_DO_FUN( do_spin_kick	);
DECLARE_DO_FUN(	do_split	);
DECLARE_DO_FUN(	do_sset		);
DECLARE_DO_FUN( do_sstat        );
DECLARE_DO_FUN(	do_sstime	);
DECLARE_DO_FUN(	do_stand	);
DECLARE_DO_FUN(	do_steal	);
DECLARE_DO_FUN( do_store        );
DECLARE_DO_FUN( do_stun         );
DECLARE_DO_FUN(	do_switch	);
DECLARE_DO_FUN(	do_tell		);
DECLARE_DO_FUN( do_telnetga     );
DECLARE_DO_FUN( do_throw        );
DECLARE_DO_FUN( do_trip		);
DECLARE_DO_FUN(	do_time		);
DECLARE_DO_FUN(	do_title	);
DECLARE_DO_FUN( do_todo         );
DECLARE_DO_FUN( do_track        );
DECLARE_DO_FUN(	do_train	);
DECLARE_DO_FUN(	do_transfer	);
DECLARE_DO_FUN( do_transport    );
DECLARE_DO_FUN(	do_trmes	);
DECLARE_DO_FUN(	do_trust	);
DECLARE_DO_FUN(	do_typo		);
DECLARE_DO_FUN(	do_typos		);
DECLARE_DO_FUN(	do_unlock	);
DECLARE_DO_FUN(	do_up		);
DECLARE_DO_FUN( do_uppercut_punch);
DECLARE_DO_FUN(	do_users	);
DECLARE_DO_FUN(	do_value	);
DECLARE_DO_FUN( do_vent         );
DECLARE_DO_FUN(	do_visible	);
DECLARE_DO_FUN( do_voodo        );
DECLARE_DO_FUN( do_vused        );
DECLARE_DO_FUN(	do_wake		);
DECLARE_DO_FUN( do_ward		);
DECLARE_DO_FUN(	do_wear		);
DECLARE_DO_FUN(	do_weather	);
DECLARE_DO_FUN(	do_west		);
DECLARE_DO_FUN(	do_where	);
DECLARE_DO_FUN(	do_who		);
DECLARE_DO_FUN( do_whotype	);
DECLARE_DO_FUN(	do_wimpy	);
DECLARE_DO_FUN( do_withdraw     );
DECLARE_DO_FUN(	do_wizhelp	);
DECLARE_DO_FUN( do_wizify       );
/*DECLARE_DO_FUN( do_wizlist      ); */
DECLARE_DO_FUN(	do_wizlock	);
DECLARE_DO_FUN( do_wiznet	);
DECLARE_DO_FUN( do_worth        );
DECLARE_DO_FUN( do_wrlist       );
DECLARE_DO_FUN(	do_yell		);
DECLARE_DO_FUN(	do_zap		);
DECLARE_DO_FUN( do_stare        );
/* XOR */
/*DECLARE_DO_FUN( do_vnum		);*/
DECLARE_DO_FUN( do_load		);
DECLARE_DO_FUN( do_push		);
DECLARE_DO_FUN( do_drag		);
DECLARE_DO_FUN( do_guild	);
DECLARE_DO_FUN( do_guilds       );
DECLARE_DO_FUN( do_unguild	);
DECLARE_DO_FUN( do_setrank	);
DECLARE_DO_FUN( do_gdt		);
DECLARE_DO_FUN( do_authorize	);
DECLARE_DO_FUN( do_drain_life	);
DECLARE_DO_FUN( do_gouge        );
DECLARE_DO_FUN( do_alchemy      );
DECLARE_DO_FUN( do_scribe       );
DECLARE_DO_FUN( do_multiburst	);
/* Necro & Werewolf skills by Hannibal */
DECLARE_DO_FUN( do_gravebind	);
DECLARE_DO_FUN( do_rage		);
DECLARE_DO_FUN( do_bite		);
DECLARE_DO_FUN( do_rush		);
DECLARE_DO_FUN( do_howl_of_fear	);
DECLARE_DO_FUN( do_scent	);
DECLARE_DO_FUN( do_frenzy	);
DECLARE_DO_FUN( do_reflex	);
DECLARE_DO_FUN( do_palm		);
DECLARE_DO_FUN(	do_rake		);
/*
 * Racial Skills Start Here -- Hannibal
 */
DECLARE_DO_FUN( do_headbutt 	);  /* Minotaur */
DECLARE_DO_FUN( do_globedarkness);  /* Drow */
DECLARE_DO_FUN( do_drowfire	);  /* Drow */
DECLARE_DO_FUN( do_forge	);  /* Dwarf */
DECLARE_DO_FUN( do_spit		);  /* Liz. */
/* Monk skills -- Hannibal */
DECLARE_DO_FUN( do_flamehand	);
DECLARE_DO_FUN( do_frosthand	);
DECLARE_DO_FUN( do_chaoshand	);
DECLARE_DO_FUN( do_bladepalm	);
DECLARE_DO_FUN( do_flyingkick	);
DECLARE_DO_FUN( do_nerve	);
DECLARE_DO_FUN( do_ironfist	);
/* Bard skill */
DECLARE_DO_FUN( do_shriek	);
/* Ban Functions -- Hannibal */
DECLARE_DO_FUN(	do_permban	);
DECLARE_DO_FUN(	do_tempban	);
DECLARE_DO_FUN(	do_newban	);
DECLARE_DO_FUN( do_banlist	);
/*
 * Spell functions.
 * Defined in magic.c.
 */
DECLARE_SPELL_FUN(	spell_null		);
DECLARE_SPELL_FUN(	spell_acid_blast	);
DECLARE_SPELL_FUN(	spell_aid		);
DECLARE_SPELL_FUN(      spell_animate           );
DECLARE_SPELL_FUN(	spell_armor		);
DECLARE_SPELL_FUN(      spell_astral            );
DECLARE_SPELL_FUN(      spell_aura              );
DECLARE_SPELL_FUN(	spell_bark_skin		);
DECLARE_SPELL_FUN(	spell_bless		);
DECLARE_SPELL_FUN(	spell_blindness		);
DECLARE_SPELL_FUN(      spell_blood_bath        );
DECLARE_SPELL_FUN(	spell_blur		);
DECLARE_SPELL_FUN(	spell_burning_hands	);
DECLARE_SPELL_FUN(	spell_call_lightning	);
DECLARE_SPELL_FUN(	spell_cause_critical	);
DECLARE_SPELL_FUN(	spell_cause_light	);
DECLARE_SPELL_FUN(	spell_cause_serious	);
DECLARE_SPELL_FUN(	spell_change_sex	);
DECLARE_SPELL_FUN(	spell_chant		);
DECLARE_SPELL_FUN(	spell_charm_person	);
DECLARE_SPELL_FUN(	spell_chill_touch	);
DECLARE_SPELL_FUN(	spell_colour_spray	);
DECLARE_SPELL_FUN(	spell_continual_light	);
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_cure_blindness	);
DECLARE_SPELL_FUN(	spell_cure_critical	);
DECLARE_SPELL_FUN(	spell_cure_light	);
DECLARE_SPELL_FUN(	spell_cure_poison	);
DECLARE_SPELL_FUN(	spell_cure_serious	);
DECLARE_SPELL_FUN(	spell_curse		);
DECLARE_SPELL_FUN(	spell_detect_evil	);
DECLARE_SPELL_FUN(	spell_detect_hidden	);
DECLARE_SPELL_FUN(	spell_detect_invis	);
DECLARE_SPELL_FUN(	spell_detect_magic	);
DECLARE_SPELL_FUN(	spell_detect_poison	);
DECLARE_SPELL_FUN(	spell_dispel_evil	);
DECLARE_SPELL_FUN(	spell_dispel_magic	);
DECLARE_SPELL_FUN(	spell_draw_strength	);
DECLARE_SPELL_FUN(	spell_earthquake	);
DECLARE_SPELL_FUN(	spell_enchant_weapon	);
DECLARE_SPELL_FUN(	spell_energy_drain	);
DECLARE_SPELL_FUN(	spell_faerie_fire	);
DECLARE_SPELL_FUN(	spell_faerie_fog	);
DECLARE_SPELL_FUN(	spell_fireball		);
DECLARE_SPELL_FUN(      spell_fireshield        );
DECLARE_SPELL_FUN(	spell_firewall		);
DECLARE_SPELL_FUN(	spell_flamestrike	);
DECLARE_SPELL_FUN(	spell_fly		);
DECLARE_SPELL_FUN(	spell_gate		);
DECLARE_SPELL_FUN(	spell_general_purpose	);
DECLARE_SPELL_FUN(	spell_giant_strength	);
DECLARE_SPELL_FUN(      spell_eternal_intellect );
DECLARE_SPELL_FUN(	spell_golden_aura	);
DECLARE_SPELL_FUN(	spell_group_healing	);
DECLARE_SPELL_FUN(	spell_haste		);
DECLARE_SPELL_FUN(      spell_goodberry         );
DECLARE_SPELL_FUN(	spell_harm		);
DECLARE_SPELL_FUN(	spell_heal		);
DECLARE_SPELL_FUN(	spell_high_explosive	);
DECLARE_SPELL_FUN(	spell_iceshield		);
DECLARE_SPELL_FUN(      spell_icestorm          );
DECLARE_SPELL_FUN(	spell_identify		);
DECLARE_SPELL_FUN(      spell_incinerate        );
DECLARE_SPELL_FUN(	spell_infravision	);
DECLARE_SPELL_FUN(	spell_inspiration 	);
DECLARE_SPELL_FUN(	spell_invis		);
DECLARE_SPELL_FUN(	spell_know_alignment	);
DECLARE_SPELL_FUN(	spell_lightning_bolt	);
DECLARE_SPELL_FUN(	spell_locate_object	);
DECLARE_SPELL_FUN(	spell_magic_missile	);
DECLARE_SPELL_FUN(      spell_mana              );
DECLARE_SPELL_FUN(	spell_mass_invis	);
DECLARE_SPELL_FUN(      spell_mental_block      );
DECLARE_SPELL_FUN(	spell_pass_door		);
DECLARE_SPELL_FUN(      spell_permenancy        );
DECLARE_SPELL_FUN(	spell_poison		);
DECLARE_SPELL_FUN(      spell_portal            );
DECLARE_SPELL_FUN(	spell_protection	);
DECLARE_SPELL_FUN(	spell_refresh		);
DECLARE_SPELL_FUN(	spell_remove_curse	);
DECLARE_SPELL_FUN(	spell_sanctuary		);
DECLARE_SPELL_FUN(      spell_scry              );
DECLARE_SPELL_FUN(	spell_shocking_grasp	);
DECLARE_SPELL_FUN(      spell_shockshield       );
DECLARE_SPELL_FUN(	spell_shield		);
DECLARE_SPELL_FUN(	spell_sleep		);
DECLARE_SPELL_FUN(      spell_spell_bind        );
DECLARE_SPELL_FUN(	spell_stone_skin	);
DECLARE_SPELL_FUN(	spell_summon		);
DECLARE_SPELL_FUN(	spell_teleport		);
DECLARE_SPELL_FUN(	spell_thunder_strike	);
DECLARE_SPELL_FUN(      spell_turn_undead       );
DECLARE_SPELL_FUN(	spell_ventriloquate	);
DECLARE_SPELL_FUN(      spell_vibrate           );
DECLARE_SPELL_FUN(	spell_war_cry		);
DECLARE_SPELL_FUN(	spell_weaken		);
DECLARE_SPELL_FUN(	spell_word_of_recall	);
DECLARE_SPELL_FUN(	spell_acid_breath	);
DECLARE_SPELL_FUN(	spell_fire_breath	);
DECLARE_SPELL_FUN(	spell_frost_breath	);
DECLARE_SPELL_FUN(	spell_gas_breath	);
DECLARE_SPELL_FUN(	spell_lightning_breath	);

DECLARE_SPELL_FUN(	spell_summon_swarm	);	/* XOR */
DECLARE_SPELL_FUN(	spell_summon_pack	);	/* XOR */
DECLARE_SPELL_FUN(	spell_summon_demon	);	/* XOR */
DECLARE_SPELL_FUN(	spell_cancellation	);	/* XOR */
DECLARE_SPELL_FUN(	spell_detect_good	);	/* XOR */
DECLARE_SPELL_FUN(	spell_protection_good	);	/* XOR */
DECLARE_SPELL_FUN(	spell_enchanted_song	);	/* XOR */
DECLARE_SPELL_FUN(	spell_holy_strength	);	/* XOR */
DECLARE_SPELL_FUN(	spell_curse_of_nature	);	/* XOR */
DECLARE_SPELL_FUN(      spell_holysword        );      /* ELVIS */
DECLARE_SPELL_FUN(      spell_summon_angel      );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_holy_fires        );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_truesight         );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_bladebarrier      );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_flame_blade       );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_chaos_blade       );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_frost_blade       );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_web               );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_entangle          );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_darkbless         );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_confusion         );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_bio_acceleration  );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_mind_probe        );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_chain_lightning   );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_meteor_swarm      );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_psychic_quake     );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_fumble            );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_dancing_lights    );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_summon_shadow     );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_summon_beast      );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_summon_trent      );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_shatter           );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_molecular_unbind  );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_phase_shift       );     /* ELVIS */
DECLARE_SPELL_FUN(      spell_healing_hands     );     /* -- Altrag */
DECLARE_SPELL_FUN(      spell_mist_form         );     /* Lacey */
/*
 * Psi spell_functions, in magic.c.
 */
DECLARE_SPELL_FUN(      spell_adrenaline_control);
DECLARE_SPELL_FUN(      spell_agitation         );
DECLARE_SPELL_FUN(      spell_aura_sight        );
DECLARE_SPELL_FUN(      spell_awe               );
DECLARE_SPELL_FUN(      spell_ballistic_attack  );
DECLARE_SPELL_FUN(      spell_biofeedback       );
DECLARE_SPELL_FUN(      spell_cell_adjustment   );
DECLARE_SPELL_FUN(      spell_chaosfield        );
DECLARE_SPELL_FUN(      spell_combat_mind       );
DECLARE_SPELL_FUN(      spell_complete_healing  );
DECLARE_SPELL_FUN(      spell_control_flames    );
DECLARE_SPELL_FUN(      spell_create_sound      );
DECLARE_SPELL_FUN(      spell_death_field       );
DECLARE_SPELL_FUN(      spell_detonate          );
DECLARE_SPELL_FUN(      spell_disintegrate      );
DECLARE_SPELL_FUN(      spell_displacement      );
DECLARE_SPELL_FUN(      spell_disrupt           );
DECLARE_SPELL_FUN(      spell_domination        );
DECLARE_SPELL_FUN(      spell_ectoplasmic_form  );
DECLARE_SPELL_FUN(      spell_ego_whip          );
DECLARE_SPELL_FUN(      spell_energy_containment);
DECLARE_SPELL_FUN(      spell_enhance_armor     );
DECLARE_SPELL_FUN(      spell_enhanced_strength );
DECLARE_SPELL_FUN(      spell_flesh_armor       );
DECLARE_SPELL_FUN(      spell_inertial_barrier  );
DECLARE_SPELL_FUN(      spell_inflict_pain      );
DECLARE_SPELL_FUN(      spell_intellect_fortress);
DECLARE_SPELL_FUN(      spell_lend_health       );
DECLARE_SPELL_FUN(      spell_levitation        );
DECLARE_SPELL_FUN(      spell_mental_barrier    );
DECLARE_SPELL_FUN(      spell_mind_thrust       );
DECLARE_SPELL_FUN(      spell_project_force     );
DECLARE_SPELL_FUN(      spell_psionic_blast     );
DECLARE_SPELL_FUN(      spell_psychic_crush     );
DECLARE_SPELL_FUN(      spell_psychic_drain     );
DECLARE_SPELL_FUN(      spell_psychic_healing   );
DECLARE_SPELL_FUN(      spell_share_strength    );
DECLARE_SPELL_FUN(      spell_thought_shield    );
DECLARE_SPELL_FUN(      spell_ultrablast        );
DECLARE_SPELL_FUN(     gspell_flamesphere       );
DECLARE_SPELL_FUN(     gspell_mass_shield       );
/* Necromancer & Monk spells by Hannibal. */
DECLARE_SPELL_FUN(	spell_hex		);
DECLARE_SPELL_FUN(	spell_dark_ritual	);
DECLARE_SPELL_FUN(	spell_field_of_decay	);
DECLARE_SPELL_FUN(	spell_stench_of_decay	);
DECLARE_SPELL_FUN(	spell_iron_skin		);
DECLARE_SPELL_FUN(	spell_chi_shield	);
DECLARE_SPELL_FUN(    spell_pass_plant 		); /*Deck*/

DECLARE_SPELL_FUN(    spell_soul_bind 		); /*Malaclypse*/

/*
 * 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( linux )
char *	crypt		args( ( const char *key, const char *salt ) );
#endif

#if	defined( macintosh )
#define NOCRYPT
#if	defined( unix )
#undef	unix
#endif
#endif

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

#if	defined( MSDOS )
#define NOCRYPT
#if	defined( unix )
#undef	unix
#endif
#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

#if	defined( sun )
char *	crypt		args( ( const char *key, const char *salt ) );
int	fclose		args( ( FILE *stream ) );
int	fprintf		args( ( FILE *stream, const char *format, ... ) );
size_t	fread	args( ( void *ptr, size_t size, size_t 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

#if	defined( ultrix )
char *	crypt		args( ( const char *key, const char *salt ) );
#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



/*
 * Data files used by the server.
 *
 * AREA_LIST contains a list of areas to boot.
 * All files are read in completely at bootup.
 * Most output files (bug, idea, typo, shutdown) are append-only.
 *
 * The NULL_FILE is held open so that we have a stream handle in reserve,
 *   so players can go ahead and telnet to all the other descriptors.
 * Then we close it whenever we need to open a file (e.g. a save file).
 */
#if defined( macintosh )
#define PLAYER_DIR	""		/* Player files			*/
#define NULL_FILE	"proto.are"	/* To reserve one stream	*/
#endif

#if defined( MSDOS )
#define PLAYER_DIR	""		/* Player files                 */
#define NULL_FILE	"nul"		/* To reserve one stream	*/
#endif

#if defined( unix )
#define PLAYER_DIR	"../player/"	/* Player files			*/
#define NULL_FILE	"/dev/null"	/* To reserve one stream	*/
#endif

#if defined( linux )
#define PLAYER_DIR	"../player/"	/* Player files			*/
#define NULL_FILE	"/dev/null"	/* To reserve one stream	*/
#endif

#if defined( linux )
#define MOB_DIR		"../MOBProgs/"  	/* MOBProg files	*/
#define NULL_FILE       "/dev/null"
#endif

#define AREA_LIST	"area.lst"	/* List of areas		*/
#define BAN_LIST	"../banned.lst" /* List of banned sites & users */
#define BUG_FILE	"bugs.txt"      /* For 'bug' and bug( )		*/
#define IDEA_FILE	"ideas.txt"	/* For 'idea'			*/
#define TYPO_FILE	"typos.txt"     /* For 'typo'			*/
#define NOTE_FILE	"notes.txt"	/* For 'notes'			*/
#define CLAN_FILE       "clan.dat"      /* For 'clans'                  */
#define SOCIAL_FILE	"social.dat"	/* For 'socials'		*/
#define RACE_FILE		"race.dat"		/* For 'races'		*/
#define SHUTDOWN_FILE	"shutdown.txt"	/* For 'shutdown'		*/
#define DOWN_TIME_FILE  "time.txt"      /* For automatic shutdown       */
#define USERLIST_FILE   "users.txt"     /* Userlist -- using identd TRI */
#define AUTH_LIST       "auth.txt"      /* List of who auth who         */
#define PLAYERLIST_FILE "player.lst"    /* Player List 			*/
#define NEWBIE_FILE     "newbie.dat"    /* Newbie help file		*/
#if defined( HOTREBOOT )
#define HOTREBOOT_FILE 	"hotreboot.dat"  /* temporary data file used 	*/
#endif
/*
 * 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 CID     CLAN_DATA
#define SF	SPEC_FUN
#define BD	BAN_DATA
/* act_comm.c */
void	add_follower	args( ( CHAR_DATA *ch, CHAR_DATA *master ) );
void	stop_follower	args( ( CHAR_DATA *ch ) );
void	die_follower	args( ( CHAR_DATA *ch, char *name ) );
bool	is_same_group	args( ( CHAR_DATA *ach, CHAR_DATA *bch ) );
bool	is_note_to	args( ( CHAR_DATA *ch, NOTE_DATA *pnote ) );

/* act_info.c */
void	set_title	args( ( CHAR_DATA *ch, char *title ) );
bool	check_blind	args( ( CHAR_DATA *ch ) );

#ifdef NEW_MONEY
MONEY_DATA *add_money    args( ( MONEY_DATA *a, MONEY_DATA *b ) );
MONEY_DATA *sub_money	 args( ( MONEY_DATA *a, MONEY_DATA *b ) );
MONEY_DATA *take_money   args( ( CHAR_DATA *ch, int amt, char *type, char *verb ) );
MONEY_DATA *spend_money  args( ( MONEY_DATA *a, MONEY_DATA *b ) );
char       *money_string  args( ( MONEY_DATA *money ) );
#endif

/* act_move.c */
void	move_char	args( ( CHAR_DATA *ch, int door, bool Fall ) );

/* act_obj.c */

/* act_wiz.c */
ROOM_INDEX_DATA *	find_location	args( ( CHAR_DATA *ch, char *arg ) );
void wiznet             args( (char *string, CHAR_DATA *ch, OBJ_DATA *obj,
                               long flag, long flag_skip, int min_level ) );

/* comm.c */
void	close_socket	 args( ( DESCRIPTOR_DATA *dclose ) );
void	write_to_buffer	 args( ( DESCRIPTOR_DATA *d, const char *txt,
				int length ) );
void    send_to_all_char args( ( const char *text ) );
void    send_to_al       args( ( int clr, int level, char *text ) );
/* send to above level---^   TRI */
void	send_to_char	 args( ( int AType, const char *txt, CHAR_DATA *ch ) );
void    set_char_color   args( ( int AType, CHAR_DATA *ch ) );
void    show_string      args( ( DESCRIPTOR_DATA *d, char *input ) );
void	act	         args( ( int AType, const char *format, CHAR_DATA *ch,
				const void *arg1, const void *arg2,
				int type ) );

/* db.c */
void	boot_db		args( ( void ) );
void	area_update	args( ( void ) );
CD *	create_mobile	args( ( MOB_INDEX_DATA *pMobIndex ) );
OD *	create_object	args( ( OBJ_INDEX_DATA *pObjIndex, int level ) );
void	clear_char	args( ( CHAR_DATA *ch ) );
void	free_char	args( ( CHAR_DATA *ch ) );
char *	get_extra_descr	args( ( CHAR_DATA *CH, char *name, EXTRA_DESCR_DATA *ed ) );
MID *	get_mob_index	args( ( int vnum ) );
OID *	get_obj_index	args( ( int vnum ) );
RID *	get_room_index	args( ( int vnum ) );
CID *   get_clan_index  args( ( int vnum ) );
char	fread_letter	args( ( FILE *fp ) );
int	fread_number	args( ( FILE *fp ) );
char *	fread_string	args( ( FILE *fp ) );
void	fread_to_eol	args( ( FILE *fp ) );
char *	fread_word	args( ( FILE *fp ) );
void *	alloc_mem	args( ( int sMem ) );
void *	alloc_perm	args( ( int sMem ) );
void	free_mem	args( ( void *pMem, int sMem ) );
char *	str_dup		args( ( const char *str ) );
void	free_string	args( ( char *pstr ) );
int	number_fuzzy	args( ( int number ) );
int	number_range	args( ( int from, int to ) );
int	number_percent	args( ( void ) );
int	number_door	args( ( void ) );
int	number_bits	args( ( int width ) );
int	number_mm	args( ( void ) );
int	dice		args( ( int number, int size ) );
int	interpolate	args( ( int level, int value_00, int value_32 ) );
void	smash_tilde	args( ( char *str ) );
bool	str_cmp		args( ( const char *astr, const char *bstr ) );
bool	str_cmp_ast	args( ( const char *astr, const char *bstr ) );
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 *	capitalize	args( ( const char *str ) );
void	append_file	args( ( CHAR_DATA *ch, char *file, char *str ) );
void	info		args( ( const char *str, int param1, int param2 ) );
void	challenge	args( ( const char *str, int param1, int param2 ) );
void	bug		args( ( const char *str, int param ) );
void    logch           args( ( char *l_str, int l_type, int lvl ) );
void	log_string	args( ( char *str, int l_type, int level ) );
void	tail_chain	args( ( void ) );
void    clone_mobile    args( ( CHAR_DATA *parent, CHAR_DATA *clone) );
void    clone_object    args( ( OBJ_DATA *parent, OBJ_DATA *clone ) );
void	parse_ban       args( ( char *argument, BAN_DATA *banned ) );
void    arena_chann	args( ( const char *str, int param1, int param2 ) );

/* fight.c */
void	violence_update	args( ( void ) );
void	multi_hit	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt ) );
void	damage		args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam,
			       int dt ) );
void	update_pos	args( ( CHAR_DATA *victim ) );
void	stop_fighting	args( ( CHAR_DATA *ch, bool fBoth ) );
void	raw_kill	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void	death_cry	args( ( CHAR_DATA *ch ) );
bool    is_safe         args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );

/* handler.c */
int	get_trust	args( ( CHAR_DATA *ch ) );
int	get_age		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	can_carry_n	args( ( CHAR_DATA *ch ) );
int	can_carry_w	args( ( CHAR_DATA *ch ) );
int	xp_tolvl	args( ( CHAR_DATA *ch ) );
bool	is_name		args( (  CHAR_DATA *ch, char *str, char *namelist) );
bool    is_exact_name   args( ( char *str, char *namelist ) );
void	affect_to_char	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	affect_to_char2	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	affect_remove	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void    affect_remove2  args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	affect_strip	args( ( CHAR_DATA *ch, int sn ) );
bool	is_affected	args( ( CHAR_DATA *ch, int sn ) );
void	affect_join	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void    affect_join2    args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	char_from_room	args( ( CHAR_DATA *ch ) );
void	char_to_room	args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex ) );
void	obj_to_char	args( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    obj_to_storage  args( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void	obj_from_char	args( ( OBJ_DATA *obj ) );
void    obj_from_storage args(( OBJ_DATA *obj ) );
int	apply_ac	args( ( OBJ_DATA *obj, int iWear ) );
OD *	get_eq_char	args( ( CHAR_DATA *ch, int iWear ) );
void	equip_char	args( ( CHAR_DATA *ch, OBJ_DATA *obj, int iWear ) );
void	unequip_char	args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
int	count_obj_list	args( ( OBJ_INDEX_DATA *obj, OBJ_DATA *list ) );
void	obj_from_room	args( ( OBJ_DATA *obj ) );
void	obj_to_room	args( ( OBJ_DATA *obj, ROOM_INDEX_DATA *pRoomIndex ) );
void	obj_to_obj	args( ( OBJ_DATA *obj, OBJ_DATA *obj_to ) );
void	obj_from_obj	args( ( OBJ_DATA *obj ) );
void	extract_obj	args( ( OBJ_DATA *obj ) );
void	extract_char	args( ( CHAR_DATA *ch, bool fPull ) );
CD *	get_char_room	args( ( CHAR_DATA *ch, char *argument ) );
CD *	get_char_world	args( ( CHAR_DATA *ch, char *argument ) );
CD *	get_pc_world	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_type	args( ( OBJ_INDEX_DATA *pObjIndexData ) );
OD *	get_obj_list	args( ( CHAR_DATA *ch, char *argument,
			       OBJ_DATA *list ) );
OD *	get_obj_carry	args( ( CHAR_DATA *ch, char *argument ) );
OD *    get_obj_storage args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_wear	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_here	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_world	args( ( CHAR_DATA *ch, char *argument ) );

#ifdef NEW_MONEY
OD *  	create_money	args( ( MONEY_DATA *amount ) );
#else
OD *	create_money	args( ( int amount ) );
#endif

int	get_obj_number	args( ( OBJ_DATA *obj ) );
int	get_obj_weight	args( ( OBJ_DATA *obj ) );
bool	room_is_dark	args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool	room_is_private	args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool	can_see		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 *	affect_bit_name	args( ( int vector ) );
char * affect_bit_name2 args( ( int vector ) );
char *	extra_bit_name	args( ( int extra_flags ) );
char *	anticlass_bit_name args( ( int anti_class_flags ) );
char *	antirace_bit_name  args( ( int anti_race_flags ) );
char *  act_bit_name    args( ( int act ) );
char *  imm_bit_name    args( ( int ) );	/* XOR */
CD   *  get_char        args( ( CHAR_DATA *ch ) );
bool    longstring      args( ( CHAR_DATA *ch, char *argument ) );
void    end_of_game     args( ( void ) );
long    wiznet_lookup   args( ( const char *name) );
int	strlen_wo_col	args( ( char *argument ) );
char *	strip_color	args( ( char *argument ) );
/* Multiclass stuff -- Hann */
bool	can_use_skpell	args( ( CHAR_DATA *ch, int sn ) );
bool	is_class	args( ( CHAR_DATA *ch, int class ) );
bool	has_spells	args( ( CHAR_DATA *ch ) );
int	prime_class	args( ( CHAR_DATA *ch ) );
int	number_classes	args( ( CHAR_DATA *ch ) );
char *	class_long	args( ( CHAR_DATA *ch ) );
char *	class_numbers	args( ( CHAR_DATA *ch, bool pSave ) );
char *	class_short	args( ( CHAR_DATA *ch ) );
bool	gets_zapped	args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
/* Room affect stuff (act_room.c) -- Hann */
void    raffect_to_room args( ( ROOM_INDEX_DATA *room, CHAR_DATA *ch,
			ROOM_AFFECT_DATA *raf ) );
void	raffect_remove	args( ( ROOM_INDEX_DATA *room, CHAR_DATA *ch,
			ROOM_AFFECT_DATA *raf ) );
void	raffect_remall	args( ( CHAR_DATA *ch ) );
bool	is_raffected	args( ( ROOM_INDEX_DATA *room, int sn ) );
void	toggle_raffects	args( ( ROOM_INDEX_DATA *room ) );
void	loc_off_raf	args( ( CHAR_DATA *ch, int type, bool rOff ) );
/* interp.c */
void	interpret	args( ( CHAR_DATA *ch, char *argument ) );
bool	is_number	args( ( char *arg ) );
int	number_argument	args( ( char *argument, char *arg ) );
char *	one_argument	args( ( char *argument, char *arg_first ) );
bool    IS_SWITCHED     args( ( CHAR_DATA *ch ) );
void	arena_master	args( ( CHAR_DATA *ch, char *argument, char *arg2 ) );

/* magic.c */
int     slot_lookup     args( ( int slot ) );
bool    is_sn           args( ( int sn ) );
int	skill_lookup	args( ( const char *name ) );
bool	saves_spell	args( ( int level, CHAR_DATA *victim ) );
void	obj_cast_spell	args( ( int sn, int level, CHAR_DATA *ch,
			       CHAR_DATA *victim, OBJ_DATA *obj ) );
void    update_skpell   args( ( CHAR_DATA *ch, int sn ) );
void    do_acspell      args( ( CHAR_DATA *ch, OBJ_DATA *pObj,
			        char *argument ) );

/* save.c */
bool    pstat            args( ( char *name ) );
void	save_char_obj	args( ( CHAR_DATA *ch, bool leftgame ) );
bool	load_char_obj	args( ( DESCRIPTOR_DATA *d, char *name ) );
void    corpse_back     args( ( CHAR_DATA *ch, OBJ_DATA *corpse ) );
void    read_finger	args( ( CHAR_DATA *ch, char *argument ) );
void    save_finger     args( ( CHAR_DATA *ch ) );
void    fwrite_finger   args( ( CHAR_DATA *ch, FILE *fp ) );
void    fread_finger    args( ( CHAR_DATA *ch, FILE *fp ) );
void	save_banlist	args( ( BAN_DATA *ban_list ) );

/* special.c */
SF *	spec_lookup	args( ( const char *name ) );

/* update.c */
void	advance_level	args( ( CHAR_DATA *ch ) );
void	gain_exp	args( ( CHAR_DATA *ch, int gain ) );
void	gain_condition	args( ( CHAR_DATA *ch, int iCond, int value ) );
void	update_handler	args( ( void ) );

/* mob_prog.c */
#ifdef DUNNO_STRSTR
char *  strstr                  args ( (const char *s1, const char *s2 ) );
#endif
void    mprog_wordlist_check    args ( ( char * arg, CHAR_DATA *mob,
                			CHAR_DATA* actor, OBJ_DATA* object,
					void* vo, int type ) );
void    mprog_percent_check     args ( ( CHAR_DATA *mob, CHAR_DATA* actor,
					OBJ_DATA* object, void* vo,
					int type ) );
void    mprog_act_trigger       args ( ( char* buf, CHAR_DATA* mob,
		                        CHAR_DATA* ch, OBJ_DATA* obj,
					void* vo ) );
#ifdef NEW_MONEY
void	mprog_bribe_trigger	args ( ( CHAR_DATA* mob, CHAR_DATA* ch,
					MONEY_DATA *amount ) );
#else
void    mprog_bribe_trigger     args ( ( CHAR_DATA* mob, CHAR_DATA* ch,
		                        int amount ) );
#endif
void    mprog_entry_trigger     args ( ( CHAR_DATA* mob ) );
void    mprog_give_trigger      args ( ( CHAR_DATA* mob, CHAR_DATA* ch,
                		        OBJ_DATA* obj ) );
void    mprog_greet_trigger     args ( ( CHAR_DATA* mob ) );
void    mprog_fight_trigger     args ( ( CHAR_DATA* mob, CHAR_DATA* ch ) );
void    mprog_hitprcnt_trigger  args ( ( CHAR_DATA* mob, CHAR_DATA* ch ) );
void    mprog_death_trigger     args ( ( CHAR_DATA* mob, CHAR_DATA* ch ) );
void    mprog_random_trigger    args ( ( CHAR_DATA* mob ) );
void    mprog_speech_trigger    args ( ( char* txt, CHAR_DATA* mob ) );

/*
 * Lotsa triggers for ore_progs.. (ore_prog.c)
 * -- Altrag
 */
/*
 * Object triggers
 */
void    oprog_get_trigger       args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_get_from_trigger  args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 OBJ_DATA *secondary ) );
void    oprog_give_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 CHAR_DATA *victim ) );
void    oprog_drop_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_put_trigger       args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 OBJ_DATA *secondary ) );
void    oprog_fill_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 OBJ_DATA *spring ) );
void    oprog_wear_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_look_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_look_in_trigger   args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_invoke_trigger    args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 void *vo ) );
void    oprog_use_trigger       args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 void *vo ) );
void    oprog_cast_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_cast_sn_trigger   args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 int sn, void *vo ) );
void    oprog_join_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 OBJ_DATA *secondary ) );
void    oprog_separate_trigger  args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_buy_trigger       args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 CHAR_DATA *vendor ) );
void    oprog_sell_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 CHAR_DATA *vendor ) );
void    oprog_store_trigger     args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_retrieve_trigger  args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_open_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_close_trigger     args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_lock_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 OBJ_DATA *key ) );
void    oprog_unlock_trigger    args ( ( OBJ_DATA *obj, CHAR_DATA *ch,
					 OBJ_DATA *key ) );
void    oprog_pick_trigger      args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void    oprog_random_trigger    args ( ( OBJ_DATA *obj ) );
void    oprog_throw_trigger     args ( ( OBJ_DATA *obj, CHAR_DATA *ch ) );

/*
 * Room triggers
 */
void    rprog_enter_trigger     args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    rprog_exit_trigger      args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    rprog_pass_trigger      args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    rprog_cast_trigger      args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    rprog_cast_sn_trigger   args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch, int sn,
					 void *vo ) );
void    rprog_sleep_trigger     args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    rprog_wake_trigger      args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    rprog_rest_trigger      args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    rprog_death_trigger     args ( ( ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    rprog_time_trigger      args ( ( ROOM_INDEX_DATA *room, int hour ) );
void    rprog_random_trigger    args ( ( ROOM_INDEX_DATA *room ) );

/*
 * Exit triggers
 */
void    eprog_enter_trigger     args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    eprog_exit_trigger      args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    eprog_pass_trigger      args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch, bool fEnter ) );
void    eprog_look_trigger      args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    eprog_scry_trigger      args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    eprog_open_trigger      args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    eprog_close_trigger     args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );
void    eprog_lock_trigger      args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch, OBJ_DATA *obj ) );
void    eprog_unlock_trigger    args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch, OBJ_DATA *obj ) );
void    eprog_pick_trigger      args ( ( EXIT_DATA *pExit,
					 ROOM_INDEX_DATA *room,
					 CHAR_DATA *ch ) );

/*
 * gr_magic.c
 * -- Altrag
 */
void    check_gcast             args ( ( CHAR_DATA *ch ) );
void    group_cast              args ( ( int sn, int level, CHAR_DATA *ch,
					 char *argument ) );
void    set_gspell              args ( ( CHAR_DATA *ch, GSPELL_DATA *gsp ) );
void    end_gspell              args ( ( CHAR_DATA *ch ) );

/*
 * quest.c
 * --Angi
 */
bool    chance                  args ( ( int num ) );

/*
 * track.c
 */
void    hunt_victim             args ( ( CHAR_DATA *ch ) );
bool    can_go                  args ( ( CHAR_DATA *ch, int dir ) );

/*
 * chatmode.c
 */
void    start_chat_mode         args ( ( DESCRIPTOR_DATA *d ) );
void    chat_interp             args ( ( CHAR_DATA *ch, char *argument ) );

#undef	CD
#undef	MID
#undef	OD
#undef	OID
#undef	RID
#undef	SF
#undef  BD

/*****************************************************************************
 *                                    OLC                                    *
 *****************************************************************************/

/*
 * This structure is used in special.c to lookup spec funcs and
 * also in olc_act.c to display listings of spec funcs.
 */
struct spec_type
{
    char *	spec_name;
    SPEC_FUN *	spec_fun;
};



/*
 * This structure is used in bit.c to lookup flags and stats.
 */
struct flag_type
{
    char * name;
    int  bit;
    bool settable;
};



/*
 * Object defined in limbo.are
 * Used in save.c to load objects that don't exist.
 */
#define OBJ_VNUM_DUMMY	1



/*
 * Area flags.
 */
#define         AREA_NONE       0
#define         AREA_CHANGED    1	/* Area has been modified. */
#define         AREA_ADDED      2	/* Area has been added to. */
#define         AREA_LOADING    4	/* Used for counting in db.c */
#define		AREA_VERBOSE	8	/* Used for saving in save.c */
#define	 	AREA_PROTOTYPE 16       /* Prototype area(no mortals) */
#define		AREA_CLAN_HQ   32	/* Area is a CLAN HQ */
#define		AREA_NO_QUEST  64	/* No quests allowed */
#define 	AREA_MUDSCHOOL 128	/* Used for mudschool only */

#define MAX_DIR	6
#define NO_FLAG -99	/* Must not be used in flags or stats. */



/*
 * Interp.c
 */
DECLARE_DO_FUN( do_aedit        );	/* OLC 1.1b */
DECLARE_DO_FUN( do_redit        );	/* OLC 1.1b */
DECLARE_DO_FUN( do_oedit        );	/* OLC 1.1b */
DECLARE_DO_FUN( do_medit        );	/* OLC 1.1b */
DECLARE_DO_FUN( do_cedit        );      /* IchiCode 1.1b */
DECLARE_DO_FUN( do_hedit        );      /* XOR 3.14159265359r^2 */
DECLARE_DO_FUN( do_sedit	);	/* Decklarean */
DECLARE_DO_FUN( do_spedit	);	/* Decklarean */
DECLARE_DO_FUN( do_rename_obj	);	/* Decklarean */
DECLARE_DO_FUN( do_race_edit	);	/* Decklarean */
DECLARE_DO_FUN( do_mreset	);	/* Decklarean */
DECLARE_DO_FUN( do_nedit	);	/* Angi */
DECLARE_DO_FUN( do_asave	);
DECLARE_DO_FUN( do_alist	);
DECLARE_DO_FUN( do_resets	);
DECLARE_DO_FUN( do_alias        );
DECLARE_DO_FUN( do_clear        );      /* Angi */




/*
 * Global Constants
 */
extern	char *	const	dir_name        [];
extern	const	int	rev_dir         [];
extern	const	struct	spec_type	spec_table	[];



/*
 * Global variables
 */
extern          AREA_DATA *             area_first;
extern          AREA_DATA *             area_last;
extern          CLAN_DATA *             clan_first;
extern  	SHOP_DATA *             shop_last;

extern          int                     top_affect;
extern          int                     top_area;
extern          int                     top_ed;
extern          int                     top_exit;
extern          int                     top_help;
extern          int                     top_mob_index;
extern		int			mobs_in_game;
extern          int                     top_obj_index;
extern          int                     top_reset;
extern          int                     top_room;
extern          int                     top_shop;
extern          int                     top_clan;
extern		int			top_social;
extern		int			top_race;
extern		int			top_newbie;
extern		int			top_trap;
extern		int			top_mob_prog;

/*extern          int                     top_vnum_mob;*/
/*extern          int                     top_vnum_obj; */
/*extern          int                     top_vnum_room;*/

extern          char                    str_empty       [1];

extern  MOB_INDEX_DATA *        mob_index_hash  [MAX_KEY_HASH];
extern  OBJ_INDEX_DATA *        obj_index_hash  [MAX_KEY_HASH];
extern  ROOM_INDEX_DATA *       room_index_hash [MAX_KEY_HASH];


/* db.c */
void	reset_area      args( ( AREA_DATA * pArea ) );
void	reset_room	args( ( ROOM_INDEX_DATA *pRoom ) );

/* string.c */
void	string_edit	args( ( CHAR_DATA *ch, char **pString ) );
void    string_append   args( ( CHAR_DATA *ch, char **pString ) );
char *	string_replace	args( ( char * orig, char * old, char * new ) );
void    string_add      args( ( CHAR_DATA *ch, char *argument ) );
char *  format_string   args( ( char *oldstring /*, bool fSpace */ ) );
char *  first_arg       args( ( char *argument, char *arg_first, bool fCase ) );
char *	string_unpad	args( ( char * argument ) );
char *	string_proper	args( ( char * argument ) );
char *	all_capitalize	args( ( const char *str ) );	/* OLC 1.1b */
char *  string_delline  args( ( CHAR_DATA *ch, char *argument, char *old ) );
char * string_insline   args( ( CHAR_DATA *ch, char *argument, char *old ) );
/* olc.c */
bool	run_olc_editor	args( ( DESCRIPTOR_DATA *d ) );
char	*olc_ed_name	args( ( CHAR_DATA *ch ) );
char	*olc_ed_vnum	args( ( CHAR_DATA *ch ) );
AREA_DATA  *get_area_data       args( ( int vnum ) );
void 	purge_area	args( ( AREA_DATA * pArea ) ); /* Angi */

/* special.c */
char *	spec_string	args( ( SPEC_FUN *fun ) );	/* OLC */

/* bit.c */
extern const struct flag_type 	area_flags[];
extern const struct flag_type	sex_flags[];
extern const struct flag_type	exit_flags[];
extern const struct flag_type	door_resets[];
extern const struct flag_type	room_flags[];
extern const struct flag_type	sector_flags[];
extern const struct flag_type	type_flags[];
extern const struct flag_type	extra_flags[];
/* FOR NEW FLAGS */
extern const struct flag_type	anti_race_flags[];
extern const struct flag_type	anti_class_flags[];
extern const struct flag_type	wear_flags[];
extern const struct flag_type	act_flags[];
extern const struct flag_type	affect_flags[];
extern const struct flag_type   affect2_flags[];
extern const struct flag_type	apply_flags[];
extern const struct flag_type	wear_loc_strings[];
extern const struct flag_type	wear_loc_flags[];
extern const struct flag_type	weapon_flags[];
extern const struct flag_type	container_flags[];
extern const struct flag_type	liquid_flags[];
extern const struct flag_type   immune_flags[];
extern const struct flag_type   mprog_types[];
extern const struct flag_type   oprog_types[];
extern const struct flag_type   rprog_types[];
extern const struct flag_type   eprog_types[];

/* olc_act.c */
extern int flag_value       args ( ( const struct flag_type *flag_table,
				     char *argument ) );
extern AFFECT_DATA  *new_affect   args ( ( void ) );
extern OBJ_INDEX_DATA    *new_obj_index          args ( ( void ) );
extern void free_affect		  args ( ( AFFECT_DATA *pAf ) );
extern EXTRA_DESCR_DATA *new_extra_descr args( ( void ) );
extern void free_extra_descr	  args ( ( EXTRA_DESCR_DATA *pExtra ) );
extern void free_obj_data	  args ( ( OBJ_DATA *pObj ) );
extern OBJ_DATA *new_obj_data	  args ( ( void ) );

extern RESET_DATA *new_reset_data args ( ( void ) ) ;

extern void check_nofloor         args ( ( CHAR_DATA *ch ) );
extern char *flag_string     args ( ( const struct flag_type *flag_table,
 				      int bits ) );
extern void save_clans            args ( ( ) );
extern void save_social 	  args ( ( ) );
extern void save_race	 	  args ( ( ) );
extern RACE_DATA *new_race_data	  args ( ( void ) );
extern void race_sort		  args ( ( RACE_DATA *pArea ) );
extern RACE_DATA *get_race_data	args ( ( int vnum ) );
extern void save_helps		  args ( ( ) );
extern void wind_update           args ( ( AREA_DATA *pArea ) );
extern void send_to_area          args ( ( AREA_DATA *pArea, char *txt ) );
extern ALIAS_DATA *new_alias      args ( ( ) );
extern void        free_alias     args ( ( ALIAS_DATA *pAl ) );

extern void save_player_list	  args ( ( ) ); /*Decklarean */
extern void save_newbie		  args ( ( ) ); /* Angi */