www.pudn.com > mercwsrc.zip > MERC.H, change:1994-12-28,size:55442b


/*************************************************************************** 
 *  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.                              * 
 *                                                                         * 
 *  In order to use any part of this Merc Diku Mud, you must comply with   * 
 *  both the original Diku license in 'license.doc' as well the Merc       * 
 *  license in 'license.txt'.  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.                                                  * 
 ***************************************************************************/ 
 
 
 
/* 
 * 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				sh_int; 
typedef int				bool; 
#define unix 
#else 
typedef short    int			sh_int; 
typedef unsigned char			bool; 
#endif 
 
#ifdef WIN32 
struct host_and_name_lookup *host_and_name; 
typedef unsigned int    u_int; 
typedef u_int           SOCKET; 
#endif 
 
 
 
/* 
 * Structure types. 
 */ 
typedef struct	affect_data		AFFECT_DATA; 
typedef struct	area_data		AREA_DATA; 
typedef struct	ban_data		BAN_DATA; 
typedef struct	char_data		CHAR_DATA; 
typedef struct	descriptor_data		DESCRIPTOR_DATA; 
typedef struct	exit_data		EXIT_DATA; 
typedef struct	extra_descr_data	EXTRA_DESCR_DATA; 
typedef struct	help_data		HELP_DATA; 
typedef struct	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_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;         /* MOBprogram */ 
typedef struct  mob_prog_act_list       MPROG_ACT_LIST;     /* MOBprogram */ 
 
 
/* 
 * 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		 1024 
#define MAX_STRING_LENGTH	 4096 
#define MAX_INPUT_LENGTH	  160 
 
 
 
/* 
 * Game parameters. 
 * Increase the max'es if you add more of something. 
 * Adjust the pulse numbers to suit yourself. 
 */ 
#define MAX_SKILL		  190 
//#define MAX_SKILL		  120 
#define MAX_CLASS		    5 
//#define MAX_CLASS		    4 
#define MAX_RACE		    5 
#define MAX_LEVEL		   40 
#define LEVEL_HERO		   (MAX_LEVEL - 4) 
#define LEVEL_IMMORTAL		   (MAX_LEVEL - 3) 
 
#define PULSE_PER_SECOND	    4 
#define PULSE_VIOLENCE		  ( 3 * PULSE_PER_SECOND) 
#define PULSE_MOBILE		  ( 4 * PULSE_PER_SECOND) 
#define PULSE_TICK		  (30 * PULSE_PER_SECOND) 
#define PULSE_AREA		  (60 * PULSE_PER_SECOND) 
 
 
 
/* 
 * Site ban structure. 
 */ 
struct	ban_data 
{ 
    BAN_DATA *	next; 
    char *	name; 
}; 
 
 
 
/* 
 * Time and weather stuff. 
 */ 
#define SUN_DARK		    0 
#define SUN_RISE		    1 
#define SUN_LIGHT		    2 
#define SUN_SET			    3 
 
#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; 
}; 
 
 
 
/* 
 * 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 
 
 
/* 
 * Descriptor (channel) structure. 
 */ 
struct	descriptor_data 
{ 
    DESCRIPTOR_DATA *	next; 
    DESCRIPTOR_DATA *	snoop_by; 
    CHAR_DATA *		character; 
    CHAR_DATA *		original; 
    char *		host; 
#ifdef WIN32 
    SOCKET		descriptor; 
    // This gets players site and user name 
    struct     host_and_name_lookup *host_and_name; 
#else 
    sh_int		descriptor; 
#endif 
    sh_int		connected; 
    bool		fcommand; 
    char		inbuf		[4 * MAX_INPUT_LENGTH]; 
    char		incomm		[MAX_INPUT_LENGTH]; 
    char		inlast		[MAX_INPUT_LENGTH]; 
    int			repeat; 
    char *              showstr_head; 
    char *              showstr_point; 
    char *		outbuf; 
    int			outsize; 
    int			outtop; 
}; 
 
/* 
   descriptor_data(SOCKET desc) { 
      descriptor	= desc; 
      connected	= CON_GET_NAME; 
      showstr_head  = (char *) 0; 
      showstr_point = (char *) 0; 
      outsize	= 2000; 
      outbuf	= new char[outsize]; 
 
      next = (descriptor_data *) 0; 
      snoop_by = (descriptor_data *) 0; 
      host = 0; 
      fcommand = FALSE; 
      repeat = 0; 
      outtop = 0; 
 
      incomm[0] = '\0'; 
      } 
   ~descriptor_data() { 
      delete[] outbuf; 
      delete[] host; 
    } 
*/ 
 
/* 
 * Attribute bonus structures. 
 */ 
struct	str_app_type 
{ 
    sh_int	tohit; 
    sh_int	todam; 
    sh_int	carry; 
    sh_int	wield; 
}; 
 
struct	int_app_type 
{ 
    sh_int	learn; 
}; 
 
struct	wis_app_type 
{ 
    sh_int	practice; 
}; 
 
struct	dex_app_type 
{ 
    sh_int	defensive; 
}; 
 
struct	con_app_type 
{ 
    sh_int	hitp; 
    sh_int	shock; 
}; 
 
 
 
/* 
 * TO types for act. 
 */ 
#define TO_ROOM		    0 
#define TO_NOTVICT	    1 
#define TO_VICT		    2 
#define TO_CHAR		    3 
 
 
 
/* 
 * Help table types. 
 */ 
struct	help_data 
{ 
    HELP_DATA *	next; 
    sh_int	level; 
    char *	keyword; 
    char *	text; 
}; 
 
 
 
/* 
 * Shop types. 
 */ 
#define MAX_TRADE	 5 
 
struct	shop_data 
{ 
    SHOP_DATA *	next;			/* Next shop in list		*/ 
    sh_int	keeper;			/* Vnum of shop keeper mob	*/ 
    sh_int	buy_type [MAX_TRADE];	/* Item types shop will buy	*/ 
    sh_int	profit_buy;		/* Cost multiplier for buying	*/ 
    sh_int	profit_sell;		/* Cost multiplier for selling	*/ 
    sh_int	open_hour;		/* First opening hour		*/ 
    sh_int	close_hour;		/* First closing hour		*/ 
}; 
 
 
 
/* 
 * Per-class stuff. 
 */ 
struct	class_type 
{ 
    char 	who_name	[4];	/* Three-letter name for 'who'	*/ 
    sh_int	attr_prime;		/* Prime attribute		*/ 
    sh_int	weapon;			/* First weapon			*/ 
    sh_int	guild;			/* Vnum of guild room		*/ 
    sh_int	skill_adept;		/* Maximum skill level		*/ 
    sh_int	thac0_00;		/* Thac0 for level  0		*/ 
    sh_int	thac0_32;		/* Thac0 for level 32		*/ 
    sh_int	hp_min;			/* Min hp gained on leveling	*/ 
    sh_int	hp_max;			/* Max hp gained on leveling	*/ 
    bool	fMana;			/* Class gains mana on level	*/ 
}; 
 
/* 
 * Per-race stuff. 
 */ 
struct	race_type 
{ 
    char 	who_name	[4];	/* Three-letter name for 'who'	*/ 
    char    long_name[20]; 
    sh_int	mod_str; 
    sh_int	mod_int; 
    sh_int	mod_wis; 
    sh_int	mod_dex; 
    sh_int	mod_con; 
    sh_int  city_vnum;     /* Racial city */ 
    sh_int  city_temple;   /* Racial temple */ 
    int     class_flags;   /* Classes allowed */ 
    int		bitvector;     /* Permanent magical ability */ 
}; 
 
 
 
/* 
 * 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; 
}; 
 
 
 
/* 
 * An affect. 
 */ 
struct	affect_data 
{ 
    AFFECT_DATA *	next; 
    sh_int		type; 
    sh_int		duration; 
    sh_int		location; 
    sh_int		modifier; 
    int			bitvector; 
}; 
 
 
 
/* 
 * A kill structure (indexed by level). 
 */ 
struct	kill_data 
{ 
    sh_int		number; 
    sh_int		killed; 
}; 
 
 
 
/*************************************************************************** 
 *                                                                         * 
 *                   VALUES OF INTEREST TO AREA BUILDERS                   * 
 *                   (Start of section ... start here)                     * 
 *                                                                         * 
 ***************************************************************************/ 
 
/* 
 * Well known mob virtual numbers. 
 * Defined in #MOBILES. 
 */ 
#define MOB_VNUM_CITYGUARD	   3060 
#define MOB_VNUM_VAMPIRE	   3404 
#define MOB_VNUM_WALKING_DEAD 20 
 
 
 
/* 
 * ACT bits for mobs. 
 * Used in #MOBILES. 
 */ 
#define ACT_IS_NPC		      1		/* Auto set for mobs	*/ 
#define ACT_SENTINEL		      2		/* Stays in one room	*/ 
#define ACT_SCAVENGER		      4		/* Picks up objects	*/ 
#define ACT_AGGRESSIVE		     32		/* Attacks PC's		*/ 
#define ACT_STAY_AREA		     64		/* Won't leave area	*/ 
#define ACT_WIMPY		    128		/* Flees when hurt	*/ 
#define ACT_PET			    256		/* Auto set for pets	*/ 
#define ACT_TRAIN		    512		/* Can train PC's	*/ 
#define ACT_PRACTICE		   1024		/* Can practice PC's	*/ 
 
 
 
/* 
 * Bits for 'affected_by'. 
 * Used in #MOBILES. 
 */ 
#define AFF_BLIND		      1 
#define AFF_INVISIBLE		      2 
#define AFF_DETECT_EVIL		      4 
#define AFF_DETECT_INVIS	      8 
#define AFF_DETECT_MAGIC	     16 
#define AFF_DETECT_HIDDEN	     32 
#define AFF_HOLD		     64		/* Unused	*/ 
#define AFF_SANCTUARY		    128 
#define AFF_FAERIE_FIRE		    256 
#define AFF_INFRARED		    512 
#define AFF_CURSE		   1024 
#define AFF_FLAMING		   2048		/* Unused	*/ 
#define AFF_POISON		   4096 
#define AFF_PROTECT		   8192 
#define AFF_PARALYSIS		  16384		/* Unused	*/ 
#define AFF_SNEAK		  32768 
#define AFF_HIDE		  65536 
#define AFF_SLEEP		 131072 
#define AFF_CHARM		 262144 
#define AFF_FLYING		 524288 
#define AFF_PASS_DOOR		1048576 
 
 
 
/* 
 * 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_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_MUSHROOM	     20 
#define OBJ_VNUM_LIGHT_BALL	     21 
#define OBJ_VNUM_SPRING		     22 
 
#define OBJ_VNUM_SCHOOL_MACE	   3700 
#define OBJ_VNUM_SCHOOL_DAGGER	   3701 
#define OBJ_VNUM_SCHOOL_SWORD	   3702 
#define OBJ_VNUM_SCHOOL_VEST	   3703 
#define OBJ_VNUM_SCHOOL_SHIELD	   3704 
#define OBJ_VNUM_SCHOOL_BANNER     3716 
 
// The error object is used when a player file has an item that is no longer 
// part of the world--Slash 
#define OBJ_VNUM_ERROR  4 
 
/* 
 * 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_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 
 
 
 
/* 
 * Extra flags. 
 * Used in #OBJECTS. 
 */ 
#define ITEM_GLOW		      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 
#define ITEM_ANTI_EVIL		   1024 
#define ITEM_ANTI_NEUTRAL	   2048 
#define ITEM_NOREMOVE		   4096 
#define ITEM_INVENTORY		   8192 
 
 
 
/* 
 * 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 
 
 
 
/* 
 * 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 
 
// TFC 
#define APPLY_CHARISMA           25 
#define APPLY_LUC               26 /* Luck */ 
#define APPLY_NOSTEAL           27 
#define APPLY_NOSLEEP           28 
#define APPLY_NOSUMMON          29 /* Also called blocking */ 
#define APPLY_NOCHARM           30 /* Also called steadfastness? */ 
#define APPLY_NOSEXCHANGE       31 /* Also called familiarity */ 
#define APPLY_TRUESEE           32 
#define APPLY_NOINFO            33 /* Also called Obscurement */ 
 
 
/* 
 * 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		   1200 
#define ROOM_VNUM_TEMPLE	   3001 
#define ROOM_VNUM_ALTAR		   3054 
#define ROOM_VNUM_SCHOOL	   3700 
 
 
 
/* 
 * Room flags. 
 * Used in #ROOMS. 
 */ 
#define ROOM_DARK		      1 
#define ROOM_NO_MOB		      4 
#define ROOM_INDOORS		      8 
#define ROOM_PRIVATE		    512 
#define ROOM_SAFE		   1024 
#define ROOM_SOLITARY		   2048 
#define ROOM_PET_SHOP		   4096 
#define ROOM_NO_RECALL		   8192 
 
 
 
/* 
 * Directions. 
 * Used in #ROOMS. 
 */ 
#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_PICKPROOF		     32 
 
 
 
/* 
 * 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_UNUSED		      8 
#define SECT_AIR		      9 
#define SECT_DESERT		     10 
#define SECT_MAX		     11 
 
 
 
/* 
 * 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_LEGS		      7 
#define WEAR_FEET		      8 
#define WEAR_HANDS		      9 
#define WEAR_ARMS		     10 
#define WEAR_SHIELD		     11 
#define WEAR_ABOUT		     12 
#define WEAR_WAIST		     13 
#define WEAR_WRIST_L		     14 
#define WEAR_WRIST_R		     15 
#define WEAR_WIELD		     16 
#define WEAR_HOLD		     17 
#define MAX_WEAR		     18 
 
 
 
/*************************************************************************** 
 *                                                                         * 
 *                   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 
 
 
 
/* 
 * 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 
 
 
 
/* 
 * ACT bits for players. 
 */ 
#define PLR_IS_NPC		      1		/* Don't EVER set.	*/ 
#define PLR_BOUGHT_PET		      2 
 
#define PLR_AUTOEXIT		      8 
#define PLR_AUTOLOOT		     16 
#define PLR_AUTOSAC                  32 
#define PLR_BLANK		     64 
#define PLR_BRIEF		    128 
#define PLR_COMBINE		    512 
#define PLR_PROMPT		   1024 
#define PLR_TELNET_GA		   2048 
 
#define PLR_HOLYLIGHT		   4096 
#define PLR_WIZINVIS		   8192 
 
#define	PLR_SILENCE		  32768 
#define PLR_NO_EMOTE		  65536 
#define PLR_NO_TELL		 262144 
#define PLR_LOG			 524288 
#define PLR_DENY		1048576 
#define PLR_FREEZE		2097152 
#define PLR_THIEF		4194304 
#define PLR_KILLER		8388608 
 
 
 
/* 
 * Obsolete bits. 
 */ 
#if 0 
#define PLR_AUCTION		      4	/* Obsolete	*/ 
#define PLR_CHAT		    256	/* Obsolete	*/ 
#define PLR_NO_SHOUT		 131072	/* Obsolete	*/ 
#endif 
 
 
 
/* 
 * Channel bits. 
 */ 
#define	CHANNEL_AUCTION		      1 
#define	CHANNEL_CHAT		      2 
#define	CHANNEL_HACKER		      4 
#define	CHANNEL_IMMTALK		      8 
#define	CHANNEL_MUSIC		     16 
#define	CHANNEL_QUESTION	     32 
#define	CHANNEL_SHOUT		     64 
#define	CHANNEL_YELL		    128 
 
 
 
/* 
 * 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; 
    char *		player_name; 
    char *		short_descr; 
    char *		long_descr; 
    char *		description; 
    sh_int		vnum; 
    sh_int		count; 
    sh_int		killed; 
    sh_int		sex; 
    sh_int		level; 
    int			act; 
    int			affected_by; 
    sh_int		alignment; 
    sh_int		hitroll;		/* Unused */ 
    sh_int		ac;			/* Unused */ 
    sh_int		hitnodice;		/* Unused */ 
    sh_int		hitsizedice;		/* Unused */ 
    sh_int		hitplus;		/* Unused */ 
    sh_int		damnodice;		/* Unused */ 
    sh_int		damsizedice;		/* Unused */ 
    sh_int		damplus;		/* Unused */ 
    int			gold;			/* Unused */ 
    MPROG_DATA *        mobprogs;               /* Used by MOBprogram */ 
    int                 progtypes;              /* Used by MOBprogram */ 
    void       *cargo; // @@@ ### 
}; 
 
 
 
/* 
 * One character (PC or NPC). 
 */ 
struct	char_data 
{ 
    CHAR_DATA *		next;               /* Global chain of all char/mob */ 
    CHAR_DATA *		next_in_room;       /* Chain set by char_to_room() */ 
    CHAR_DATA *		master;             /* Who char follows or is charmed by */ 
    CHAR_DATA *		leader;             /* Leader of a group */ 
    CHAR_DATA *		fighting;           /* Who char is fighting */ 
    CHAR_DATA *		reply;              /* Last person who talked to char */ 
    SPEC_FUN *		spec_fun;           /* Mobile special function*/ 
    MOB_INDEX_DATA *	pIndexData;     /* Mobile class info */ 
    DESCRIPTOR_DATA *	desc;           /* Player socket info */ 
    AFFECT_DATA *	affected;           /* List of stat affects on char */ 
    NOTE_DATA *		pnote;              /* Note writing stuff */ 
    OBJ_DATA *		carrying;           /* Chain of char's inventory/wielded */ 
    ROOM_INDEX_DATA *	in_room;        /* Room char is in */ 
    ROOM_INDEX_DATA *	was_in_room;    /* Room returned to after 'idle void' */ 
    PC_DATA *		pcdata;             /* Data only PCs have */ 
    char *		name; 
    char *		short_descr; 
    char *		long_descr; 
    char *		description; 
    char *              prompt; 
    sh_int		sex; 
    sh_int		class; 
    sh_int		race; 
    sh_int		level; 
    sh_int		trust; 
    bool                wizbit; 
    int			played; 
    time_t		logon; 
    time_t		save_time; 
    time_t              last_note; 
    sh_int		timer; 
    sh_int		wait; 
    sh_int		hit; 
    sh_int		max_hit; 
    sh_int		mana; 
    sh_int		max_mana; 
    sh_int		move; 
    sh_int		max_move; 
    int			gold; 
    int			exp; 
    int			act; 
    int			affected_by; 
    sh_int		position; 
    sh_int		practice; 
    sh_int		carry_weight; 
    sh_int		carry_number; 
    sh_int		saving_throw; 
    sh_int		alignment; 
    sh_int		hitroll; 
    sh_int		damroll; 
    sh_int		armor; 
    sh_int		wimpy; 
    sh_int		deaf; 
    MPROG_ACT_LIST *    mpact;                  /* Used by MOBprogram */ 
    int                 mpactnum;               /* Used by MOBprogram */ 
    void       *cargo; // @@@ ### 
}; 
 
 
 
/* 
 * Data which only PC's have. 
 */ 
struct	pc_data 
{ 
    PC_DATA *		next; 
    char *		pwd; 
    char *		bamfin; 
    char *		bamfout; 
    char *		title; 
    sh_int		perm_str; 
    sh_int		perm_int; 
    sh_int		perm_wis; 
    sh_int		perm_dex; 
    sh_int		perm_con; 
    sh_int		mod_str; 
    sh_int		mod_int; 
    sh_int		mod_wis; 
    sh_int		mod_dex; 
    sh_int		mod_con; 
    sh_int		condition	[3]; 
    sh_int              pagelen; 
    sh_int		learned		[MAX_SKILL]; 
}; 
 
/* 
 * MOBprogram block 
*/ 
 
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; 
}; 
 
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 
 
 
/* 
 * Liquids. 
 */ 
#define LIQ_WATER        0 
#define LIQ_MAX		16 
 
struct	liq_type 
{ 
    char *	liq_name; 
    char *	liq_color; 
    sh_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                      */ 
}; 
 
 
 
/* 
 * Prototype for an object. 
 */ 
struct	obj_index_data 
{ 
    OBJ_INDEX_DATA *	next; 
    EXTRA_DESCR_DATA *	extra_descr; 
    AFFECT_DATA *	affected; 
    char *		name; 
    char *		short_descr; 
    char *		description; 
    sh_int		vnum; 
    sh_int		item_type; 
    sh_int		extra_flags; 
    sh_int		wear_flags; 
    sh_int		count; 
    sh_int		weight; 
    int			cost;			/* Unused */ 
    int			value	[4]; 
}; 
 
 
 
/* 
 * One object. 
 */ 
struct	obj_data 
{ 
    OBJ_DATA *		next; 
    OBJ_DATA *		next_content; 
    OBJ_DATA *		contains; 
    OBJ_DATA *		in_obj; 
    CHAR_DATA *		carried_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; 
    sh_int		item_type; 
    sh_int		extra_flags; 
    sh_int		wear_flags; 
    sh_int		wear_loc; 
    sh_int		weight; 
    int			cost; 
    sh_int		level; 
    sh_int		timer; 
    int			value	[4]; 
}; 
 
 
 
/* 
 * Exit data. 
 */ 
struct	exit_data 
{ 
    ROOM_INDEX_DATA *	to_room; 
    sh_int		vnum; 
    sh_int		exit_info; 
    sh_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; 
    sh_int		arg1; 
    sh_int		arg2; 
    sh_int		arg3; 
}; 
 
 
 
/* 
 * Area definition. 
 */ 
struct	area_data 
{ 
    AREA_DATA *		next; 
    RESET_DATA *	reset_first; 
    RESET_DATA *	reset_last; 
    char *		name; 
    sh_int		age; 
    sh_int		nplayer; 
}; 
 
 
 
/* 
 * Room type. 
 */ 
struct	room_index_data 
{ 
    ROOM_INDEX_DATA *	next; 
    CHAR_DATA *		people; 
    OBJ_DATA *		contents; 
    EXTRA_DESCR_DATA *	extra_descr; 
    AREA_DATA *		area; 
    EXIT_DATA *		exit	[6]; 
    char *		name; 
    char *		description; 
    sh_int		vnum; 
    sh_int		room_flags; 
    sh_int		light; 
    sh_int		sector_type; 
}; 
 
 
 
/* 
 * 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 
 
 
 
/* 
 * Skills include spells as a particular case. 
 */ 
struct	skill_type 
{ 
    char *	name;			/* Name of skill		*/ 
    sh_int	skill_level[MAX_CLASS];	/* Level needed by class	*/ 
    SPELL_FUN *	spell_fun;		/* Spell pointer (for spells)	*/ 
    sh_int	target;			/* Legal targets		*/ 
    sh_int	minimum_position;	/* Position for caster / user	*/ 
    sh_int *	pgsn;			/* Pointer to associated gsn	*/ 
    sh_int	slot;			/* Slot for #OBJECT loading	*/ 
    sh_int	min_mana;		/* Minimum mana used		*/ 
    sh_int	beats;			/* Waiting time after use	*/ 
    char *	noun_damage;		/* Damage message		*/ 
    char *	msg_off;		/* Wear off message		*/ 
}; 
 
 
 
/* 
 * These are skill_lookup return values for common skills and spells. 
 */ 
extern	sh_int	gsn_backstab; 
extern	sh_int	gsn_dodge; 
extern	sh_int	gsn_hide; 
extern	sh_int	gsn_peek; 
extern	sh_int	gsn_pick_lock; 
extern	sh_int	gsn_sneak; 
extern	sh_int	gsn_steal; 
 
extern	sh_int	gsn_disarm; 
extern	sh_int	gsn_enhanced_damage; 
extern	sh_int	gsn_kick; 
extern	sh_int	gsn_parry; 
extern	sh_int	gsn_rescue; 
extern	sh_int	gsn_second_attack; 
extern	sh_int	gsn_third_attack; 
 
extern	sh_int	gsn_blindness; 
extern	sh_int	gsn_charm_person; 
extern	sh_int	gsn_curse; 
extern	sh_int	gsn_invis; 
extern	sh_int	gsn_mass_invis; 
extern	sh_int	gsn_poison; 
extern	sh_int	gsn_sleep; 
 
/* 
 * 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)) 
 
 
 
/* 
 * Character macros. 
 */ 
#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_AFFECTED(ch, sn)	(IS_SET((ch)->affected_by, (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, npulse)	((ch)->wait = UMAX((ch)->wait, (npulse))) 
 
#define MANA_COST(ch, sn)       (IS_NPC(ch) ? 0 : UMAX (                    \ 
				skill_table[sn].min_mana,                   \ 
				100 / (2 + ch->level -                      \ 
				skill_table[sn].skill_level[ch->class] ) ) ) 
 
/* 
 * 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))) 
 
 
 
/* 
 * Description macros. 
 */ 
#define PERS(ch, looker)	( can_see( looker, (ch) ) ?		\ 
				( IS_NPC(ch) ? (ch)->short_descr	\ 
				: (ch)->name ) : "someone" ) 
 
 
 
/* 
 * Structure for a command in the command lookup table. 
 */ 
struct	cmd_type 
{ 
    char * const	name; 
    DO_FUN *		do_fun; 
    sh_int		position; 
    sh_int		level; 
    sh_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		[26]; 
extern	const	struct	int_app_type	int_app		[26]; 
extern	const	struct	wis_app_type	wis_app		[26]; 
extern	const	struct	dex_app_type	dex_app		[26]; 
extern	const	struct	con_app_type	con_app		[26]; 
 
extern	const	struct	class_type	class_table	[MAX_CLASS]; 
extern	const	struct	race_type   race_table	[MAX_RACE]; 
extern	const	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	social_type	social_table	[]; 
extern	char *	const			title_table	[MAX_CLASS] 
							[MAX_LEVEL+1] 
							[2]; 
 
 
 
/* 
 * Global variables. 
 */ 
extern		HELP_DATA	  *	help_first; 
extern		SHOP_DATA	  *	shop_first; 
 
extern		BAN_DATA	  *	ban_list; 
extern		CHAR_DATA	  *	char_list; 
extern		DESCRIPTOR_DATA   *	descriptor_list; 
extern		NOTE_DATA	  *	note_list; 
extern		OBJ_DATA	  *	object_list; 
 
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; 
 
 
 
/* 
 * Command functions. 
 * Defined in act_*.c (mostly). 
 */ 
DECLARE_DO_FUN(	do_advance	); 
DECLARE_DO_FUN(	do_allow	); 
DECLARE_DO_FUN(	do_answer	); 
DECLARE_DO_FUN(	do_areas	); 
DECLARE_DO_FUN(	do_at		); 
DECLARE_DO_FUN(	do_auction	); 
DECLARE_DO_FUN( do_auto         ); 
DECLARE_DO_FUN( do_autoexit     ); 
DECLARE_DO_FUN( do_autoloot     ); 
DECLARE_DO_FUN( do_autosac      ); 
DECLARE_DO_FUN(	do_backstab	); 
DECLARE_DO_FUN(	do_bamfin	); 
DECLARE_DO_FUN(	do_bamfout	); 
DECLARE_DO_FUN(	do_ban		); 
DECLARE_DO_FUN( do_blank        ); 
DECLARE_DO_FUN(	do_brandish	); 
DECLARE_DO_FUN( do_brief        ); 
DECLARE_DO_FUN(	do_bug		); 
DECLARE_DO_FUN(	do_buy		); 
DECLARE_DO_FUN(	do_cast		); 
DECLARE_DO_FUN(	do_channels	); 
DECLARE_DO_FUN(	do_chat		); 
DECLARE_DO_FUN(	do_close	); 
DECLARE_DO_FUN( do_combine      ); 
DECLARE_DO_FUN(	do_commands	); 
DECLARE_DO_FUN(	do_compare	); 
DECLARE_DO_FUN(	do_config	); 
DECLARE_DO_FUN(	do_consider	); 
DECLARE_DO_FUN(	do_credits	); 
DECLARE_DO_FUN(	do_deny		); 
DECLARE_DO_FUN(	do_description	); 
DECLARE_DO_FUN(	do_disarm	); 
DECLARE_DO_FUN(	do_disconnect	); 
DECLARE_DO_FUN(	do_down		); 
DECLARE_DO_FUN(	do_drink	); 
DECLARE_DO_FUN(	do_drop		); 
DECLARE_DO_FUN(	do_east		); 
DECLARE_DO_FUN(	do_eat		); 
DECLARE_DO_FUN(	do_echo		); 
DECLARE_DO_FUN(	do_emote	); 
DECLARE_DO_FUN(	do_equipment	); 
DECLARE_DO_FUN(	do_examine	); 
DECLARE_DO_FUN(	do_exits	); 
DECLARE_DO_FUN(	do_fill		); 
DECLARE_DO_FUN(	do_flee		); 
DECLARE_DO_FUN(	do_follow	); 
DECLARE_DO_FUN(	do_force	); 
DECLARE_DO_FUN(	do_freeze	); 
DECLARE_DO_FUN(	do_get		); 
DECLARE_DO_FUN(	do_give		); 
DECLARE_DO_FUN(	do_goto		); 
DECLARE_DO_FUN(	do_group	); 
DECLARE_DO_FUN(	do_gtell	); 
DECLARE_DO_FUN(	do_help		); 
DECLARE_DO_FUN(	do_hide		); 
DECLARE_DO_FUN(	do_holylight	); 
DECLARE_DO_FUN(	do_idea		); 
DECLARE_DO_FUN(	do_identify	); // @@@ ### 
DECLARE_DO_FUN(	do_immtalk	); 
DECLARE_DO_FUN(	do_inventory	); 
DECLARE_DO_FUN(	do_invis	); 
DECLARE_DO_FUN(	do_kick		); 
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_memory	); 
DECLARE_DO_FUN(	do_mfind	); 
DECLARE_DO_FUN(	do_mload	); 
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_mptransfer   ); 
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_noemote	); 
DECLARE_DO_FUN(	do_north	); 
DECLARE_DO_FUN(	do_note		); 
DECLARE_DO_FUN(	do_notell	); 
DECLARE_DO_FUN(	do_ofind	); 
DECLARE_DO_FUN(	do_oload	); 
DECLARE_DO_FUN(	do_open		); 
DECLARE_DO_FUN(	do_order	); 
DECLARE_DO_FUN(	do_orphans	); 
DECLARE_DO_FUN(	do_oset		); 
DECLARE_DO_FUN(	do_ostat	); 
DECLARE_DO_FUN(	do_owhere	); 
DECLARE_DO_FUN( do_pagelen      ); 
DECLARE_DO_FUN(	do_pardon	); 
DECLARE_DO_FUN(	do_password	); 
DECLARE_DO_FUN(	do_peace	); 
DECLARE_DO_FUN(	do_pick		); 
DECLARE_DO_FUN(	do_pose		); 
DECLARE_DO_FUN(	do_practice	); 
DECLARE_DO_FUN( do_prompt       ); 
DECLARE_DO_FUN(	do_purge	); 
DECLARE_DO_FUN(	do_put		); 
DECLARE_DO_FUN(	do_quaff	); 
DECLARE_DO_FUN(	do_question	); 
DECLARE_DO_FUN(	do_qui		); 
DECLARE_DO_FUN(	do_quit		); 
DECLARE_DO_FUN(	do_reboo	); 
DECLARE_DO_FUN(	do_reboot	); 
DECLARE_DO_FUN(	do_recall	); 
DECLARE_DO_FUN(	do_recho	); 
DECLARE_DO_FUN(	do_recite	); 
DECLARE_DO_FUN(	do_remove	); 
DECLARE_DO_FUN(	do_rent		); 
DECLARE_DO_FUN(	do_reply	); 
DECLARE_DO_FUN(	do_report	); 
DECLARE_DO_FUN(	do_rescue	); 
DECLARE_DO_FUN(	do_rest		); 
DECLARE_DO_FUN(	do_restore	); 
DECLARE_DO_FUN(	do_return	); 
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_shoplist	); 
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_sleep	); 
DECLARE_DO_FUN( do_slist        ); 
DECLARE_DO_FUN(	do_slookup	); 
DECLARE_DO_FUN(	do_sneak	); 
DECLARE_DO_FUN(	do_snoop	); 
DECLARE_DO_FUN(	do_socials	); 
DECLARE_DO_FUN(	do_south	); 
DECLARE_DO_FUN( do_spells       ); 
DECLARE_DO_FUN(	do_split	); 
DECLARE_DO_FUN(	do_sset		); 
DECLARE_DO_FUN(	do_stand	); 
DECLARE_DO_FUN(	do_steal	); 
DECLARE_DO_FUN(	do_switch	); 
DECLARE_DO_FUN(	do_tell		); 
DECLARE_DO_FUN(	do_time		); 
DECLARE_DO_FUN(	do_title	); 
DECLARE_DO_FUN(	do_train	); 
DECLARE_DO_FUN(	do_transfer	); 
DECLARE_DO_FUN(	do_trust	); 
DECLARE_DO_FUN(	do_typo		); 
DECLARE_DO_FUN(	do_unlock	); 
DECLARE_DO_FUN(	do_up		); 
DECLARE_DO_FUN(	do_users	); 
DECLARE_DO_FUN(	do_value	); 
DECLARE_DO_FUN(	do_visible	); 
DECLARE_DO_FUN(	do_wake		); 
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_wimpy	); 
DECLARE_DO_FUN(	do_wizhelp	); 
DECLARE_DO_FUN( do_wizify       ); 
DECLARE_DO_FUN( do_wizlist      ); 
DECLARE_DO_FUN(	do_wizlock	); 
DECLARE_DO_FUN(	do_yell		); 
DECLARE_DO_FUN(	do_zap		); 
 
 
 
/* 
 * Spell functions. 
 * Defined in magic.c. 
 */ 
DECLARE_SPELL_FUN(	spell_null		); 
DECLARE_SPELL_FUN(	spell_acid_blast	); 
DECLARE_SPELL_FUN(	spell_armor		); 
DECLARE_SPELL_FUN(	spell_bless		); 
DECLARE_SPELL_FUN(	spell_blindness		); 
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_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_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_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_harm		); 
DECLARE_SPELL_FUN(	spell_heal		); 
DECLARE_SPELL_FUN(	spell_high_explosive	); 
DECLARE_SPELL_FUN(	spell_identify		); 
DECLARE_SPELL_FUN(	spell_infravision	); 
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_make_purse	);      // @@@ 
DECLARE_SPELL_FUN(	spell_mass_invis	); 
DECLARE_SPELL_FUN(	spell_pass_door		); 
DECLARE_SPELL_FUN(	spell_poison		); 
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_shocking_grasp	); 
DECLARE_SPELL_FUN(	spell_shield		); 
DECLARE_SPELL_FUN(	spell_sleep		); 
DECLARE_SPELL_FUN(	spell_stone_skin	); 
DECLARE_SPELL_FUN(	spell_summon		); 
DECLARE_SPELL_FUN(	spell_teleport		); 
DECLARE_SPELL_FUN(	spell_ventriloquate	); 
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	); 
 
// TFC spell functions 
DECLARE_SPELL_FUN(	spell_animate_dead	); 
 
/* 
 * 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_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_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        ); 
 
 
 
/* 
 * 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, ... ) ); 
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(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	*/ 
//#define MOB_DIR         ""              /* MOBProg files                */ 
//#endif 
 
//#if defined(MSDOS) 
#define PLAYER_DIR	""		/* Player files                 */ 
#define NULL_FILE	"nul"		/* To reserve one stream	*/ 
#define MOB_DIR         ""              /* MOBProg files                */ 
//#endif 
 
//#if defined(unix) 
//#define PLAYER_DIR	"../player/"	/* Player files			*/ 
//#define NULL_FILE	"/dev/null"	/* To reserve one stream	*/ 
//#define MOB_DIR         "MOBProgs/"     /* MOBProg files                */ 
//#endif 
 
//#if defined(linux) 
//#define PLAYER_DIR	"../player/"	/* Player files			*/ 
//#define NULL_FILE	"/dev/null"	/* To reserve one stream	*/ 
//#define MOB_DIR         "MOBProgs/"     /* MOBProg files                */ 
//#endif 
 
#define AREA_LIST	"area.lst"	/* List of areas		*/ 
 
#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 SHUTDOWN_FILE	"shutdown.txt"	/* For 'shutdown'		*/ 
 
 
 
/* 
 * 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 SF	SPEC_FUN 
 
/* 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 ) ); 
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 ) ); 
 
/* act_move.c */ 
void	move_char	args( ( CHAR_DATA *ch, int door ) ); 
 
/* act_obj.c */ 
 
/* act_wiz.c */ 
ROOM_INDEX_DATA *	find_location	args( ( CHAR_DATA *ch, char *arg ) ); 
 
/* 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_char	args( ( const char *txt, CHAR_DATA *ch ) ); 
void    show_string     args( ( DESCRIPTOR_DATA *d, char *input ) ); 
void	act	        args( ( 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( ( const 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 ) ); 
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_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	bug		args( ( const char *str, int param ) ); 
void	log_string	args( ( const char *str ) ); 
void	tail_chain	args( ( void ) ); 
 
/* 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	death_cry	args( ( CHAR_DATA *ch ) ); 
void	raw_kill	args( ( 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 ) ); 
bool	is_name		args( ( const char *str, char *namelist ) ); 
void	affect_to_char	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) ); 
void	affect_remove	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	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_from_char	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 ) ); 
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_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 ) ); 
OD *	create_money	args( ( int amount ) ); 
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 *	extra_bit_name	args( ( int extra_flags ) ); 
 
/* 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 ) ); 
 
/* magic.c */ 
int	skill_lookup	args( ( const char *name ) ); 
int	slot_lookup	args( ( int slot ) ); 
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 ) ); 
 
/* 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 ) ); 
void    mprog_bribe_trigger     args( ( CHAR_DATA* mob, CHAR_DATA* ch, 
                        int amount ) ); 
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 ) ); 
void    mprog_random_trigger    args( ( CHAR_DATA* mob ) ); 
void    mprog_speech_trigger    args( ( char* txt, CHAR_DATA* mob ) ); 
 
/* save.c */ 
void	save_char_obj	args( ( CHAR_DATA *ch ) ); 
bool	load_char_obj	args( ( DESCRIPTOR_DATA *d, char *name ) ); 
 
/* 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 ) ); 
 
#undef	CD 
#undef	MID 
#undef	OD 
#undef	OID 
#undef	RID 
#undef	SF 
 
// @@@ 
int SpinTheMessageLoop();