atd/area/
atd/build/
atd/clans/
atd/log/
atd/player/store/
atd/site/
atd/src/bin/
/***************************************************************************
 *  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.                                                  *
 ***************************************************************************/

#include "warlock.h"
#include "clans.h"
#include "arena.h"
#include "monk.h"
#include "garou.h"
#include "dragon.h"
#include "angel.h"
#include "priest.h"
#include "class.h"

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

#define COMMAND(cmd)		DECLARE_DO_FUN(cmd);
/*
 * 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
#include "player.h"
#include "old.h"


/*
 * Structure types.
 */
typedef struct  clans_data		CLANS_DATA;
typedef struct  clan_data		CLAN_DATA;
typedef struct  leader_data		LEADER_DATA;
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  config_data		CONFIG_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  kingdom_data		KINGDOM_DATA;
typedef struct	help_area_data		HELP_AREA;
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  editing_data            EDITING_DATA;	/* OLC */
typedef struct  disabled_data           DISABLED_DATA;
typedef struct	project_data		PROJECT_DATA;
typedef struct	extended_bitvector	XBV;
typedef struct  room_affect_data        ROOM_AFFECT_DATA;
typedef struct  hour_min_sec            HOUR_MIN_SEC;
typedef struct	quest_data		QUEST_DATA;


/* one disabled command */
struct disabled_data
{
      DISABLED_DATA *next; /* pointer to next node */
      struct cmd_type const *command; /* pointer to the command struct*/
      char *disabled_by; /* name of disabler */
      sh_int level; /* level of disabler */
};

extern       DISABLED_DATA     *disabled_first;
extern	     BAN_DATA	       *ban_first;

/*
 * 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  /* 7096 */
#define MAX_INPUT_LENGTH	 512
#define MSL			(MAX_STRING_LENGTH)
#define MIL			(MAX_INPUT_LENGTH)


#define SCREEN_WIDTH		79
#define LINE_SEPERATOR "{b-------------------------------------------------------------------------------{n\n\r"

/*
 * Colour stuff by Lope of Loping Through The MUD
 */
//#define CLEAR		""		/* Resets Colour	*/
#define CLEAR		""
#define C_RED		""	/* Normal Colours	*/
#define C_GREEN		""
#define C_YELLOW	""
#define C_BLUE		""
#define C_MAGENTA	""
#define C_CYAN		""
#define C_WHITE		""
#define C_D_GREY	""  	/* Light Colors		*/
#define C_B_RED		""
#define C_B_GREEN	""
#define C_B_YELLOW	""
#define C_B_BLUE	""
#define C_B_MAGENTA	""
#define C_B_CYAN	""
#define C_B_WHITE	""

/*
 * Rotains Gobal Procedures
 */
void clear_stats    args( (CHAR_DATA *ch) );
void room_is_total_darkness args( (ROOM_INDEX_DATA *pRoomIndex) );
void improve_wpn    args( (CHAR_DATA *ch,int dtype, bool right_hand) );
void improve_stance args( (CHAR_DATA *ch) );
void skillstance    args( (CHAR_DATA *ch, CHAR_DATA *victim) );
void show_spell     args( (CHAR_DATA *ch, int dtype) );
void fightaction    args( (CHAR_DATA *ch, CHAR_DATA *victim, int actype , \
int dtype, int wpntype) );
void crack_head     args( (CHAR_DATA *ch, OBJ_DATA *obj, char *argument) );
void critical_hit   args( (CHAR_DATA *ch, CHAR_DATA *victim, int dt, int dam) );

void take_item      args( (CHAR_DATA *ch, OBJ_DATA *obj) );
void raw_kill       args( (CHAR_DATA *victim, CHAR_DATA *ch) );
void trip           args( (CHAR_DATA *ch, CHAR_DATA *victim) );
void disarm         args( (CHAR_DATA *ch, CHAR_DATA *victim) );
void one_hit        args( (CHAR_DATA *ch, CHAR_DATA *victim, int dt, \
				int handtype) );
void make_part      args( (CHAR_DATA *ch, char *argument) );

#include "board.h"
#include "changes.h"

/*void clan_table_read        args( ( ) );
void artifact_table_read    args( ( ) );
void clan_table_write       args( ( ) );
void artifact_table_write   args( ( ) );
void home_write             args( ( ) );
void clan_table_powerselect args( (CHAR_DATA *ch, char *power_name) );
void clan_table_namefill    args( (CHAR_DATA *ch) );
void clan_table_bite        args( (CHAR_DATA *ch) );
void clan_table_dec         args( (CHAR_DATA *ch, CHAR_DATA *victim) );
*/
void behead                 args( (CHAR_DATA *victim,CHAR_DATA *ch) );
void paradox                args( (CHAR_DATA *ch) );

void load_bans	args( (void) );
void save_bans	args( (void) );
void load_kingdoms args( (void) );
void save_kingdoms args( (void) );
/*void load_war	args( (void) );
void save_war	args( (void) );*/

/*
 * Godwars Game Parameters
 * By Rotain
 */

#define SKILL_ADEPT               100
#define SKILL_THAC0_32             18
#define SKILL_THAC0_00              6
#define VERSION_NUMBER              2
#define DONATION_ROOM_WEAPON     6641
#define DONATION_ROOM_ARMOR      6643
#define DONATION_ROOM_REST       6644
#define MAX_VAMPIRE_POWER           3
#define MAX_BASE_DAMCAP            40
#define MAX_CLAN                   12
#define MAX_ART                    12
#define MAX_KINGDOM		   11
#define MAX_WAR			   45 /* MAX_KINGDOM-1 * MAX_KINGDOM /2 total combos*/
#define MAX_FORGET		   10
#define MAX_OVALUE                  5

/*CLAN LIST STUFF FROM KaVIr! Once again he comes through :)*/
#define CLAN_NONE		      0
#define CLAN_CAITIFF		      0
#define CLAN_LASOMBRA		      1
#define CLAN_TZIMISCE		      2
#define CLAN_GANGREL		      3
#define CLAN_VENTRUE		      4
#define CLAN_TREMERE		      5
#define CLAN_ASSAMITE		      6
#define CLAN_MALKAVIAN		      7
#define CLAN_CAPPADOCIAN	      8
#define CLAN_TOREADOR		      9
#define CLAN_NOSFERATU		     10
#define CLAN_UNBOUND		     11
/*
 * Game parameters.
 * Increase the max'es if you add more of something.
 * Adjust the pulse numbers to suit yourself.
 */
#define MAX_MEM_LIST               11  // DO NOT TOUCH

#define DAM_MOD                    .8

#define PARADOX_TICK               30
#define MAX_SKILL	 	  202
#define MAX_ROOM_AFF                5
#define MAX_SPELL		   60
#define MAX_LEVEL		   12
#define L_ANG		   MAX_LEVEL - 3
#define NO_WATCH		   10
#define NO_GODLESS		   (MAX_LEVEL - 2)
#define LEVEL_HERO		   (MAX_LEVEL - 9)
#define LEVEL_IMMORTAL		   (MAX_LEVEL - 5)

#define LEVEL_MORTAL		   (MAX_LEVEL - 10)
#define LEVEL_AVATAR		   (MAX_LEVEL - 9)
#define LEVEL_APPRENTICE	   (MAX_LEVEL - 8)
#define LEVEL_MAGE		   (MAX_LEVEL - 7)
#define LEVEL_ARCHMAGE		   (MAX_LEVEL - 6)
#define LEVEL_NINJA                (MAX_LEVEL - 6)
#define LEVEL_MONK                 (MAX_LEVEL - 6)
#define LEVEL_BUILDER		   (MAX_LEVEL - 5)
#define LEVEL_QUESTMAKER	   (MAX_LEVEL - 4)
#define LEVEL_ENFORCER		   (MAX_LEVEL - 3)
#define LEVEL_JUDGE		   (MAX_LEVEL - 2)
#define LEVEL_HIGHJUDGE		   (MAX_LEVEL - 1)
#define LEVEL_IMPLEMENTOR	   (MAX_LEVEL)


#define L_UNK	0
#define L_CIT	1
#define L_LEG	2
#define L_MYT	3
#define L_TIT	4
#define L_ORA	5
#define L_IMM	6
#define L_DEM	7
#define L_DEI	8
#define L_DUK   9
#define L_KNG   10
#define L_LRD   11
#define L_SEN   12
#define L_KGT   13
#define L_WRL   14
#define L_ALM	15
#define L_RM    16
#define L_RL    17
#define L_CL    18
#define L_LM    19
#define L_GL    20


#define PULSE_PER_SECOND	    4
#define PULSE_GAIN_EXP		   PULSE_PER_SECOND
#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)
#define PULSE_WW                  ( 4 * PULSE_PER_SECOND)
#define PULSE_HINT                (240 * PULSE_PER_SECOND)
#define PULSE_SAVE                (15 * PULSE_PER_SECOND)
#define PULSE_ROOMS		  (2 * PULSE_PER_SECOND )

#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
#define bb    	 	 134217728
#define cc     		 268435456
#define dd     		 536870912
#define ee		1073741824


/*
 * Defines for extended bitvectors
 */
#ifndef INTBITS
  #define INTBITS	32
#endif
#define XBM		31	/* extended bitmask   ( INTBITS - 1 )	*/
#define RSV		5	/* right-shift value  ( sqrt(XBM+1) )	*/
#define XBI		4	/* integers in an extended bitvector	*/
#define MAX_BITS	XBI * INTBITS

/*
 * Structure for extended bitvectors -- Thoric
 */
struct extended_bitvector
{
    int		bits[XBI];
};


/*
 * The functions for these prototypes can be found in handler.c
 * They are up here because they are used by the macros below
 */
bool	ext_is_empty		args( ( XBV *bits ) );
void	ext_clear_bits		args( ( XBV *bits ) );
int	ext_has_bits		args( ( XBV *var, XBV *bits) );
bool	ext_same_bits		args( ( XBV *var, XBV *bits) );
void	ext_set_bits		args( ( XBV *var, XBV *bits) );
void	ext_remove_bits		args( ( XBV *var, XBV *bits) );
void	ext_toggle_bits		args( ( XBV *var, XBV *bits) );

/*
 * Here are the extended bitvector macros:
 */
#define xIS_SET(var, bit)	((var).bits[(bit) >> RSV] & 1 << ((bit) &XBM))
#define xSET_BIT(var, bit)	((var).bits[(bit) >> RSV] |= 1 << ((bit) &XBM))
#define xSET_BITS(var, bit)	(ext_set_bits(&(var), &(bit)))
#define xREMOVE_BIT(var, bit)	((var).bits[(bit) >> RSV] &= ~(1 << ((bit)& XBM)))
#define xREMOVE_BITS(var, bit)	(ext_remove_bits(&(var), &(bit)))
#define xTOGGLE_BIT(var, bit)	((var).bits[(bit) >> RSV] ^= 1 << ((bit) &XBM))
#define xTOGGLE_BITS(var, bit)	(ext_toggle_bits(&(var), &(bit)))
#define xCLEAR_BITS(var)	(ext_clear_bits(&(var)))
#define xIS_EMPTY(var)		(ext_is_empty(&(var)))
#define xHAS_BITS(var, bit)	(ext_has_bits(&(var), &(bit)))
#define xSAME_BITS(var, bit)	(ext_same_bits(&(var), &(bit)))

#define PLR_FLAGS(ch, bit )     ( !IS_NPC(ch) && xIS_SET( PC(ch,plr_flags), bit ) )
/*
 * Clan structure.
 */
struct clans_data
{
    int         members;        /* Number of members */
    char *      clan_head;      /* Name of clan head */
    char *      primogen;       /* Name of primogen */
};


/*
 * Rotains Clan Table Structure
 *
struct clan_table_type
{
  char * clan_name;
  char * clan_leader;
  char * clan_powers_1;
  char * clan_powers_2;
  char * clan_powers_3;
  int    clan_kills [MAX_CLAN];
  int    lvnum;
  int    uvnum;
  int    clan_recall;
};
*/

/*
 * Ban Types --- Shaddai
 */
#define BAN_SITE        1
#define BAN_CLASS       2
#define BAN_RACE        3
#define BAN_WARN        -1

/*
 * Site ban structure.
 */
struct	ban_data
{
    BAN_DATA *next;
    BAN_DATA *prev;
    char     *name;     /* Name of site/class/race banned */
    char     *note;     /* Why it was banned */
    char     *ban_by;   /* Who banned this site */
    char     *ban_time; /* Time it was banned */
    int      flag;      /* Class or Race number */
    int      unban_date;/* When ban expires */
    sh_int   duration;  /* How long it is banned for */
    sh_int   level;     /* Level that is banned */
    bool     warn;      /* Echo on warn channel */
    bool     prefix;    /* Use of *site */
    bool     suffix;    /* Use of site* */
};



/*
 * Store types of char logged in.
 */

#define LOGIN_NONE		    0
#define LOGIN_NEWBIE		    1
#define LOGIN_MORTAL		    2
#define LOGIN_GOD		    4
#define LOGIN_VAMPIRE		    8
#define LOGIN_WEREWOLF		   16
#define LOGIN_MAGE		   32
#define LOGIN_DEMON		   64
#define LOGIN_HIGHLANDER	   128
#define LOGIN_DROW		   256
#define LOGIN_NINJA		   512
#define LOGIN_MONK		   1024
#define LOGIN_ABOMINATION	   2048
/*
 * Time and weather stuff.
 */
#define SUN_DARK		    0
#define SUN_RISE		    1
#define SUN_LIGHT		    2
#define SUN_SET			    3

#define MOON_RISE		    0
#define MOON_UP			    1
#define MOON_SET		    2
#define MOON_DOWN	   	    3

#define MORNING			    0
#define DAY			    1
#define EVENING			    2
#define NIGHT			    3

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

#define MOON_NEW		    0
#define MOON_CRESCENT		    1
#define MOON_HALF		    2
#define MOON_GIBBOUS		    3
#define MOON_FULL		    4
#define MOON_WANING		    5

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

struct hour_min_sec
{
    int hour;
    int min;
    int sec;
    int manual;
};

struct	weather_data
{
    int		mmhg;
    int		change;
    int		sky;
    int		sunlight;
    int		moonlight;
    int		moonphase;
    int		time_of_day;
};


/* Auction System, Added by Tracker */
typedef struct	auction_data		AUCTION_DATA;


struct auction_data
{
	OBJ_DATA *	item;
	CHAR_DATA *	owner;
	CHAR_DATA *	high_bidder;
	sh_int		status;
	long		current_bid;
        long		minbid;
	long		silver_held;
	long		gold_held;
};


extern          AUCTION_DATA            auction_info;

#define PULSE_AUCTION             (20 * PULSE_PER_SECOND)

#define MINIMUM_BID			100
#define AUCTION_LENGTH			  5

/*
 * 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_NOT_PLAYING			 9
#define CON_GET_NEW_ANSI                 10
#define CON_COPYOVER_RECOVER            11
#define CON_EDITING			12


/*
 * Connected states for OLC.
 *
#define CON_AEDITOR                     -1
#define CON_REDITOR                     -2
#define CON_MEDITOR                     -3
#define CON_OEDITOR                     -4
*/
/*
 * Timers
 */

#define MAX_TIMER 10
#define TIMER(ch, tmr)		((ch)->pcdata->tick_timer[(tmr)])
#define SET_TIMER(ch, tmr, tm)  ((ch)->pcdata->tick_timer[(tmr)] = (tm))
#define ADD_TIMER(ch, tmr, tm)  ((ch)->pcdata->tick_timer[(tmr)] += (tm))
#define SUB_TIMER(ch, tmr, tm)  ((ch)->pcdata->tick_timer[(tmr)] -= (tm))
#define TIME_UP(ch, tmr)	((ch)->pcdata->tick_timer[(tmr)] == 0 ? TRUE : FALSE )



// add timers here.. #define TIMER_WHATEVER  0...

#define TIMER_THIRD_ARM_GOING	0
#define TIMER_FOURTH_ARM_GOING	1

/*
Extra global's done by KaVir
*/
extern		int			world_affects;
/*
 * Online editing structure.
 */
struct  editing_data	/* OLC */
{
    void *              pIndex;
    int                 vnum;
    int                 type;
    int                 command;
    char *              text;
    char **             destination;
};




/*
 * Area flags. OLC
 */
#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_UNLINKED	8	// Sage- unlinked zone
#define         AREA_SANCTUARY  16
#define         AREA_QUEST      32

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



/*
 * 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;
    HELP_DATA * next_area;
    sh_int	level;
    char *	keyword;
    char *	text;
};

struct help_area_data
{
	HELP_AREA *	next;
	HELP_DATA *	first;
	HELP_DATA *	last;
	AREA_DATA *	area;
	char *		filename;
	bool		changed;
};


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




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

struct	project_data
{
    PROJECT_DATA * next;		/* Next project in list*/
    PROJECT_DATA * prev;		/* Previous project in list*/
    NOTE_DATA *  first_log;		/* First log on project*/
    NOTE_DATA *  last_log;		/* Last log  on project*/
    char *name;
    char *owner;
    char *coder;
    char *status;
    char *date;
    char *description;
    bool taken;				/* Has someone taken project?*/
};


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


struct  room_affect_data
{
    ROOM_AFFECT_DATA *	next;
    sh_int		duration;
    sh_int		level;
    int	  	        type;
    int		        bitvector;
    int                 applies_spell;
    sh_int              modifier;
    sh_int              location;
    CHAR_DATA        *  caster;
};

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

struct base_dam_cap
{
    int     exp;
    int     cps;
    int     qps;
};



/***************************************************************************
 *                                                                         *
 *                   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_CANNIBAL	   30069
#define MOB_VNUM_GYPSY             2

/*
 * Immunities, for players.  KaVir.
 */
#define IMM_SLASH	      1	/* Resistance to slash, slice. 		*/
#define IMM_STAB	      2	/* Resistance to stab, pierce. 		*/
#define IMM_SMASH	      4	/* Resistance to blast, pound, crush. 	*/
#define IMM_ANIMAL	      8	/* Resistance to bite, claw. 		*/
#define IMM_MISC	     16	/* Resistance to grep, suck, whip. 	*/
#define IMM_CHARM	     32	/* Immune to charm spell. 		*/
#define IMM_HEAT	     64	/* Immune to fire/heat spells. 		*/
#define IMM_COLD	    128	/* Immune to frost/cold spells.		*/
#define IMM_LIGHTNING	    256	/* Immune to lightning spells.		*/
#define IMM_ACID	    512	/* Immune to acid spells.		*/
#define IMM_SUMMON	   1024	/* Immune to being summoned.		*/
#define IMM_VOODOO	   2048	/* Immune to voodoo magic.		*/
#define IMM_VAMPIRE	   4096	/* Allow yourself to become a vampire.	*/
#define IMM_STAKE	   8192	/* Immune to being staked (vamps only). */
#define IMM_SUNLIGHT	  16384	/* Immune to sunlight (vamps only).	*/
#define IMM_SHIELDED	  32768 /* For Obfuscate. Block scry, etc.	*/
#define IMM_HURL	  65536 /* Cannot be hurled.			*/
#define IMM_BACKSTAB	 131072 /* Cannot be backstabbed.		*/
#define IMM_KICK	 262144 /* Cannot be kicked.			*/
#define IMM_DISARM	 524288 /* Cannot be disarmed.			*/
#define IMM_STEAL	1048576 /* Cannot have stuff stolen.		*/
#define IMM_SLEEP	2097152 /* Immune to sleep spell.		*/
#define IMM_DRAIN	4194304 /* Immune to energy drain.		*/
#define IMM_DEMON	8388608 /* Allow yourself to become a demon.	*/
#define IMM_TRANSPORT  16777216 /* Objects can't be transported to you.	*/
#define IMM_TRAVEL     33554432 /*so demons can turn travel off*/

/*
 * 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	*/
#define ACT_MOUNT		   2048		/* Can be mounted	*/
#define ACT_NOPARTS		   4096		/* Dead = no body parts	*/
#define ACT_NOEXP		   8192		/* No exp for killing	*/
#define ACT_NOAUTOKILL		  16384
#define ACT_SKILLED		  32768
#define ACT_COMMANDED		  65536		/* Can't attack newbies */
#define ACT_NOASTRAL             131072
#define ACT_SHOPQUEST            262144
#define ACT_QUESTMASTER          524288

/*
 * Thingers for Demon Warps
 */

#define WARP_CBODY				1
#define WARP_SBODY				2
#define WARP_STRONGARMS				4
#define WARP_STRONGLEGS				8
#define WARP_VENOMTONG				16
#define WARP_SPIKETAIL				32
#define WARP_BADBREATH				64
#define WARP_QUICKNESS				128
#define WARP_STAMINA				256
#define WARP_HUNT				512
#define WARP_DAMCAP				1024
#define WARP_TERROR				2048
#define WARP_REGEN				4096
#define WARP_STEED				8192
#define WARP_WEAPON				16384
#define WARP_INFIRMITY				32768
#define WARP_GBODY				65536
#define WARP_SCARED				131072
#define WARP_MAGMA				262144
#define WARP_WEAK				524288
#define WARP_SLOW				1048576
#define WARP_VULNER				2097152
#define WARP_SHARDS				4194304
#define WARP_WINGS				8388608
#define WARP_CLUMSY				16777216
#define WARP_STUPID				33554432
#define WARP_SPOON				67108864
#define WARP_FORK				134217728
#define WARP_KNIFE				268435456
#define WARP_SALADBOWL				536870912



/*
 * 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_SHADOWPLANE		     64 /* Creatures in shadow plane - KaVir */
#define AFF_SANCTUARY		    128
#define AFF_FAERIE_FIRE		    256
#define AFF_INFRARED		    512
#define AFF_CURSE		   1024
#define AFF_FLAMING		   2048 /* For burning creatures - KaVir */
#define AFF_POISON		   4096
#define AFF_PROTECT		   8192
#define AFF_ETHEREAL		  16384 /* For ethereal creatures - KaVir */
#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
#define AFF_POLYMORPH		2097152 /* For polymorphed creatures - KaVir */
#define AFF_SHADOWSIGHT		4194304 /* Can see between planes - KaVir */
#define AFF_WEBBED		8388608 /* Cannot move - KaVir */
#define AFF_TOTALBLIND      16777216 /* Cannot get pregnant - KaVir */
#define AFF_DARKNESS           33554432 /* Drow Darkness - Rotain */
#define AFF_DROWFIRE	       67108864
#define AFF_SAFE              134217728
#define AFF_SHIFT	      268435456
#define AFF_HOLYAURA          536870912 /* Monk and Paladin Bless */
#define AFF_STEELSHIELD	      1073741824

/*
 * The Affs Strike Back
 * 'flag2'
 */
#define AFF2_BLINK_1ST_RD		(A)
#define AFF2_BLINK_2ND_RD		(B)
#define AFF2_SPIRITGUARD                (C)
#define VAMP_ASHES			(D)
#define VAMP_CLONE			(E)
#define VAMP_OBJMASK			(F)
#define AFF2_ROT			(G)
#define AFF2_CONTRACEPTION	        (H)
#define AFF2_TENDRILS		        (I)
#define EXTRA_AFK		        (J)
#define AFF2_AFK		        (K)
#define AFF2_REIMB		        (L)
#define AFF2_CHALLENGED			(M)
#define AFF2_CHALLENGER			(N)
#define AFF2_INARENA			(O)
#define AFF2_BALOR			(P)
#define AFF2_IMP			(Q)
#define AFF2_HELPER                     (R)
#define AFF2_ANONYMOUS                  (T)
#define AFF2_BARKSKIN					(U)
#define AFF2_SPECIES_RANGER				(V)
#define AFF2_SPECIES_ANGEL				(W)
#define AFF2_SPECIES_VAMPIRE			(X)
#define AFF2_SPECIES_WEREWOLF			(Y)
#define AFF2_SPECIES_HIGHLANDER			(Z)
#define AFF2_SPECIES_DEMON				(aa)
#define AFF2_SPECIES_DROW				(bb)
#define AFF2_SPECIES_PRIEST				(cc)
#define AFF2_SPECIES_NINJA				(dd)
#define AFF2_SARENA					(ee)
/*
 * Bits for 'itemaffect'.
 * Used in #MOBILES.
 */
#define ITEMA_SHOCKSHIELD	      1
#define ITEMA_FIRESHIELD	      2
#define ITEMA_ICESHIELD		      4
#define ITEMA_ACIDSHIELD	      8
#define ITEMA_DBPASS                 16
#define ITEMA_CHAOSSHIELD            32
#define ITEMA_ARTIFACT               64
#define ITEMA_REGENERATE            128
#define ITEMA_SPEED                 256
#define ITEMA_VORPAL                512
#define ITEMA_PEACE                1024
#define ITEMA_RIGHT_SILVER         2048
#define ITEMA_LEFT_SILVER          4096
#define ITEMA_REFLECT              8192
#define ITEMA_RESISTANCE          16384
#define ITEMA_VISION              32768
#define ITEMA_STALKER             65536
#define ITEMA_VANISH             131072
#define ITEMA_RAGER              262144
#define ITEMA_HIGHLANDER         524288
#define ITEMA_PALADIN           1048576
#define ITEMA_SUNSHIELD         2097152
#define ITEMA_MAGE		4194304
#define ITEMA_ANGHALO           8388608
#define ITEMA_CHAOSHANDS       16777216
#define ITEMA_MASTERY          33554432
#define ITEMA_CRITICALS        67108864

/*
 * Rune, Glyph and Sigil bits.
 */
#define RUNE_FIRE	      1
#define RUNE_AIR	      2
#define RUNE_EARTH	      4
#define RUNE_WATER	      8
#define RUNE_DARK	      16
#define RUNE_LIGHT	      32
#define RUNE_LIFE	      64
#define RUNE_DEATH	      128
#define RUNE_MIND	      256
#define RUNE_SPIRIT	      512
#define RUNE_MASTER	      1024
#define GLYPH_CREATION	      1
#define GLYPH_DESTRUCTION     2
#define GLYPH_SUMMONING	      4
#define GLYPH_TRANSFORMATION  8
#define GLYPH_TRANSPORTATION  16
#define GLYPH_ENHANCEMENT     32
#define GLYPH_REDUCTION	      64
#define GLYPH_CONTROL	      128
#define GLYPH_PROTECTION      256
#define GLYPH_INFORMATION     512
#define SIGIL_SELF	      1
#define SIGIL_TARGETING       2
#define SIGIL_AREA	      4
#define SIGIL_OBJECT	      8


/*
 * Advanced spells.
 */
#define ADV_DAMAGE	      1
#define ADV_AFFECT	      2
#define ADV_ACTION	      4
#define ADV_AREA_AFFECT       8
#define ADV_VICTIM_TARGET    16
#define ADV_OBJECT_TARGET    32
#define ADV_GLOBAL_TARGET    64
#define ADV_NEXT_PAGE       128
#define ADV_PARAMETER       256
#define ADV_SPELL_FIRST     512
#define ADV_NOT_CASTER     1024
#define ADV_NO_PLAYERS     2048
#define ADV_SECOND_VICTIM  4096
#define ADV_SECOND_OBJECT  8192
#define ADV_REVERSED      16384
#define ADV_STARTED	  32768
#define ADV_FINISHED	  65536
#define ADV_FAILED	 131072
#define ADV_MESSAGE_1	 262144
#define ADV_MESSAGE_2	 524288
#define ADV_MESSAGE_3	1048576
#define ADV_COLORED	    (V)

/*
 * Advanced spell actions.
 */
#define ACTION_NONE	      0
#define ACTION_MOVE	      1
#define ACTION_MOB	      2
#define ACTION_OBJECT	      3

/*
 * Advanced spell affects.
 */
#define ADV_STR			      1
#define ADV_DEX			      2
#define ADV_INT			      4
#define ADV_WIS			      8
#define ADV_CON			     16
#define ADV_SEX			     32
#define ADV_MANA		     64
#define ADV_HIT			    128
#define ADV_MOVE		    256
#define ADV_AC			    512
#define ADV_HITROLL		   1024
#define ADV_DAMROLL		   2048
#define ADV_SAVING_SPELL	   4096



/* Colour scale macros - added 12th Aug 1995 by Calamar */

#define NO_COLOUR	""		/* Blank */
#define GREY		""	/* Dark Grey */
#define D_RED		""	/* Dark Red */
#define L_RED		""	/* Light Red */
#define D_GREEN		""	/* Dark Green */
#define L_GREEN		""	/* Light Green */
#define BROWN		""	/* Brown */
#define YELLOW		""	/* Yellow */
#define D_BLUE		""	/* Dark Blue */
#define L_BLUE		""	/* Light Blue */
#define MAGENTA		""	/* Magenta */
#define PINK		""	/* Pink */
#define D_CYAN		""	/* Dark Cyan */
#define L_CYAN		""	/* Light Cyan */
#define NORMAL		""	/* Light Grey */
#define WHITE		""	/* White */

#define ADD_COLOUR(_player,_str,_col) {char swh_temp[255]; \
if (!IS_NPC(_player) && IS_SET(_player->act, PLR_ANSI)) {swh_temp[0] = '\0'; \
strcpy(swh_temp, _col); strcat(swh_temp, _str); strcat(swh_temp, NORMAL); \
strcpy(_str, swh_temp);}}

#define SCALE_COLS 4

#define COL_SCALE(_swh_str,_swh_ch,_swh_curr,_swh_max) \
	ADD_COLOUR(_swh_ch, _swh_str, \
	(_swh_curr < 1) ? L_RED : \
	(_swh_curr < _swh_max) ? \
	scale[(SCALE_COLS * _swh_curr) / ((_swh_max > 0) \
	? _swh_max : 1)] : L_CYAN)

extern char *scale[SCALE_COLS];

/*
 * Bits for 'vampire'.
 * Used for player vampires.
 */
#define VAM_FANGS		      1
#define VAM_CLAWS		      2
#define VAM_NIGHTSIGHT		      4
#define VAM_FLYING		      8 /* For flying creatures */
#define VAM_SONIC		     16 /* For creatures with full detect */
#define VAM_CHANGED		     32 /* Changed using a vampire power */

#define VAM_PROTEAN		     64 /* Claws, nightsight, and change */
#define VAM_CELERITY		    128 /* 66%/33% chance 1/2 extra attacks */
#define VAM_FORTITUDE		    256 /* 5 hp less per hit taken */
#define VAM_POTENCE		    512 /* Deal out 1.5 times normal damage */
#define VAM_OBFUSCATE		   1024 /* Disguise and invis */
#define VAM_AUSPEX		   2048 /* Truesight, etc */
#define VAM_OBTENEBRATION	   4096 /* Shadowplane/sight and shadowbody */
#define VAM_SERPENTIS		   8192 /* Eyes/serpent, heart/darkness, etc */

#define VAM_DISGUISED		  16384 /* For the Obfuscate disguise ability */
#define VAM_MORTAL		  32768 /* For Obfuscate mortal ability. */

#define VAM_DOMINATE		  65536 /* Evileye, command */

#define VAM_EVILEYE		 131072 /* Evileye, command */

#define VAM_PRESENCE		 262144 /* Presence discipline */

#define VAM_VICISSITUDE          524288

/* New vamp defines*/
#define VAM_ANIM	0
#define VAM_AUSP	1
#define VAM_DAIM	2
#define VAM_DOMI	3
#define VAM_FORT	4
#define VAM_OBFU	5
#define VAM_OBTE	6
#define VAM_PRES	7
#define VAM_PROT	8
#define VAM_QUIE	9
#define VAM_SERP	10
#define VAM_THAU	11
#define VAM_VICI	12
#define VAM_CELE	13
#define VAM_CHIM	14
#define VAM_POTE	15
#define VAM_OBEA	16
#define VAM_MELP	17
#define VAM_THAN 	18
#define VAM_NECR	19

#define DISC_MAX        19
/*end new vamp section*/


#define RES_ANIMALISM		      1
#define RES_AUSPEX		      2
#define RES_DOMINATE		      4
#define RES_PRESENCE		      8
#define RES_TOGGLE		     16
#define RES_CELERITY		     32

#define WILL_ANIMALISM		      1
#define WILL_AUSPEX		      2
#define WILL_DOMINATE		      3
#define WILL_PRESENCE		      4


/*Define new vamp powers*/

/*
 * Bits for 'polymorph'.
 * Used for players.
 */
#define POLY_BAT		      1
#define POLY_WOLF		      2
#define POLY_MIST		      4
#define POLY_SERPENT		      8
#define POLY_RAVEN		     16
#define POLY_FISH		     32
#define POLY_FROG		     64
#define POLY_ZULO                   128
#define POLY_SPIDERFORM		    256
#define POLY_HAGS		    512
#define POLY_FLESHCRAFT		   1024
#define POLY_ANGELFORM		   2048
#define POLY_PFORM                 4096
/*
 * Languages.
 */
#define LANG_COMMON		      0
#define DIA_OLDE		      1
#define DIA_BAD			      2
#define LANG_DARK		      4



/*
 * Score.
 */
#define SCORE_TOTAL_XP		      0
#define SCORE_HIGH_XP		      1
#define SCORE_TOTAL_LEVEL	      2
#define SCORE_HIGH_LEVEL	      3
#define SCORE_QUEST		      4
#define SCORE_NUM_QUEST		      5



/*
 * Zombie Lord.
 */
#define ZOMBIE_NOTHING		      0
#define ZOMBIE_TRACKING		      1
#define ZOMBIE_ANIMATE		      2
#define ZOMBIE_CAST		      3
#define ZOMBIE_REST		      4



/*
 * Damcap values.
 */
#define DAM_CAP		      0
#define DAM_CHANGE	      1

/*
 * Bits for Demonic Champions.
 *
 * new demon fields in player.h and old ones in old.h
 */


/*
 * Mounts
 */
#define IS_ON_FOOT		      0
#define IS_MOUNT		      1
#define IS_RIDING		      2
#define IS_CARRIED		      4
#define IS_CARRYING		      8

//Embrace shit to fix a bug! WHEEEEEEEE!

#define ARE_NONE		      0
#define ARE_EMBRACING		      1
#define ARE_EMBRACED		      2


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

#define IS_FEMALE( ch )  ( ch->sex == SEX_FEMALE )
#define IS_MALE( ch )    ( ch->sex == SEX_MALE   )

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

#define OBJ_VNUM_MUSHROOM	     20
#define OBJ_VNUM_LIGHT_BALL	     21
#define OBJ_VNUM_SPRING		     22
#define OBJ_VNUM_BLOOD_SPRING	     23

#define OBJ_VNUM_MIN_QUEST           30
#define OBJ_VNUM_MAX_QUEST           33

#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
#define OBJ_VNUM_KHRONE		   30055
/* For KaVir's stuff */
#define OBJ_VNUM_SOULBLADE	  30000
#define OBJ_VNUM_PORTAL		  30001
#define OBJ_VNUM_EGG		  30002
#define OBJ_VNUM_EMPTY_EGG	  30003
#define OBJ_VNUM_SPILLED_ENTRAILS 30004
#define OBJ_VNUM_QUIVERING_BRAIN  30005
#define OBJ_VNUM_SQUIDGY_EYEBALL  30006
#define OBJ_VNUM_SPILT_BLOOD      30007
#define OBJ_VNUM_VOODOO_DOLL      30010
#define OBJ_VNUM_RIPPED_FACE      30012
#define OBJ_VNUM_TORN_WINDPIPE    30013
#define OBJ_VNUM_CRACKED_HEAD     30014
#define OBJ_VNUM_SLICED_EAR	  30025
#define OBJ_VNUM_SLICED_NOSE	  30026
#define OBJ_VNUM_KNOCKED_TOOTH	  30027
#define OBJ_VNUM_TORN_TONGUE	  30028
#define OBJ_VNUM_SEVERED_HAND	  30029
#define OBJ_VNUM_SEVERED_FOOT	  30030
#define OBJ_VNUM_SEVERED_THUMB	  30031
#define OBJ_VNUM_SEVERED_INDEX	  30032
#define OBJ_VNUM_SEVERED_MIDDLE	  30033
#define OBJ_VNUM_SEVERED_RING	  30034
#define OBJ_VNUM_SEVERED_LITTLE	  30035
#define OBJ_VNUM_SEVERED_TOE	  30036
#define OBJ_VNUM_PROTOPLASM	  30037
#define OBJ_VNUM_QUESTCARD	  30039
#define OBJ_VNUM_QUESTMACHINE	  30040
#define OBJ_VNUM_GATE		  30053
#define OBJ_VNUM_MOONGATE	  30052
#define MOB_VNUM_GUARDIAN	  30001
#define MOB_VNUM_MOUNT		  30006
#define MOB_VNUM_FROG		  30007
#define MOB_VNUM_RAVEN		  30008
#define MOB_VNUM_CAT		  30009
#define MOB_VNUM_DOG		  30010
#define MOB_VNUM_EYE		  30012
#define MOB_VNUM_STEED		  30075


/*
 * 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
#define ITEM_PORTAL		     27
#define ITEM_EGG		     28
#define ITEM_VOODOO		     29
#define ITEM_STAKE		     30
#define ITEM_MISSILE		     31 /* Ammo vnum, cur, max, type */
#define ITEM_AMMO		     32 /* ???, dam min, dam max, type */
#define ITEM_QUEST		     33
#define ITEM_QUESTCARD		     34
#define ITEM_QUESTMACHINE	     35
#define ITEM_SYMBOL		     36
#define ITEM_BOOK		     37
#define ITEM_PAGE		     38
#define ITEM_TOOL		     39
#define ITEM_DTOKEN		     40
#define ITEM_WALL		     41
#define ITEM_WGATE		     42
#define ITEM_WARD		     43
#define ITEM_RESOURCE		     44
#define ITEM_CREATURE		     45
#define ITEM_GRENADE                 46

/*
 * Weapon flags
 * field = 'weapflags'
 * For Flaming\Icing\Shitty weapons
 */
#define WEAPON_FLAMING		      1
#define WEAPON_POISON		      2
#define WEAPON_FROST		      4
#define WEAPON_HOLY                   8
/*
 * Extra flags.
 * Used in #OBJECTS.
 */
#define ITEM_GLOW		    (A)
#define ITEM_HUM		    (B)
#define ITEM_THROWN		    (C)
#define ITEM_KEEP		    (D)
#define ITEM_VANISH		    (E)
#define ITEM_INVIS		    (F)
#define ITEM_MAGIC		    (G)
#define ITEM_NODROP		    (H)
#define ITEM_BLESS		    (I)
#define ITEM_ANTI_GOOD		    (J)
#define ITEM_ANTI_EVIL		    (K)
#define ITEM_ANTI_NEUTRAL	    (L)
#define ITEM_NOREMOVE		    (M)
#define ITEM_INVENTORY		    (N)
#define ITEM_LOYAL		    (O)
#define ITEM_SHADOWPLANE	    (P)
#define ITEM_DARK		    (Q)
#define ITEM_MENCHANT		    (R)
#define ITEM_NOCLAIM                (S)
#define ITEM_NOCOPY                 (T)
#define ITEM_SATANIC	            (U)
#define ITEM_CLOAKED                (V)
#define ITEM_PRICELESS              (X)

/*
 * Wear flags.
 * Used in #OBJECTS.
 */
#define ITEM_WEAR_NONE                0
#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_FACE		  32768
#define ITEM_WEAR_ANKLE           65536
#define ITEM_WEAR_EAR            131072
#define ITEM_WEAR_NOSE           262144
#define ITEM_WEAR_MASTERY        524288


/*
 * Special types.
 * Used in #OBJECTS for special items - KaVir.
 */
#define SITEM_ACTIVATE		      1
#define SITEM_TWIST		      2
#define SITEM_PRESS		      4
#define SITEM_PULL		      8
#define SITEM_TARGET		      16
#define SITEM_SPELL		      32
#define SITEM_TRANSPORTER	      64
#define SITEM_TELEPORTER	      128
#define SITEM_DELAY1		      256
#define SITEM_DELAY2		      512
#define SITEM_OBJECT		     1024
#define SITEM_MOBILE		     2048
#define SITEM_ACTION		     4096
#define SITEM_MORPH		     8192
#define SITEM_SILVER		    16384
#define SITEM_WOLFWEAPON	    32768
#define SITEM_DROWWEAPON	    65536
#define SITEM_CHAMPWEAPON	   131072
#define SITEM_DEMONIC		   262144
#define SITEM_HIGHLANDER	   524288
#define SITEM_NINJA               1048576
#define SITEM_MAGE		  2097152
#define SITEM_DROW		  4194304
#define C_TWITCHING		  8388608
#define SITEM_VAMP		 33554432
#define SITEM_WEREWOLF		 67108864
#define SITEM_MONK		134217728

/*
 * Apply types (for quest affects).
 * Used in #OBJECTS.
 */
#define QUEST_STR		      1
#define QUEST_DEX		      2
#define QUEST_INT		      4
#define QUEST_WIS		      8
#define QUEST_CON		     16
#define QUEST_HITROLL		     32
#define QUEST_DAMROLL		     64
#define QUEST_HIT		    128
#define QUEST_MANA		    256
#define QUEST_MOVE		    512
#define QUEST_AC		   1024
#define QUEST_NAME		   2048
#define QUEST_SHORT		   4096
#define QUEST_LONG		   8192
#define QUEST_FREENAME		  16384
#define QUEST_ENCHANTED		  32768
#define QUEST_SPELLPROOF	  65536
#define QUEST_ARTIFACT		 131072
#define QUEST_IMPROVED		 262144
#define QUEST_MASTER_RUNE	 524288
#define QUEST_RELIC             1048576
#define QUEST_ZOMBIE		2097152
#define QUEST_CLONED     	4194304
#define QUEST_BLOODA		8388608
#define ITEM_EQUEST	       16777216
#define QUEST_MAGEENCHANT	    (Z)
#define QUEST_MALLEABLE		   (aa)
#define QUEST_MAGE                 (bb)
#define QUEST_MASTERY              (cc)
/*
 * Tool types.
 */
#define TOOL_PEN		      1
#define TOOL_PLIERS		      2
#define TOOL_SCALPEL		      4



/*
 * 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_POLY		     25
#define APPLY_BLOOD_MAX		     26
#define APPLY_BLOOD_POT		     27


/*
 * 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
#define ROOM_VNUM_HELL		  30000
#define ROOM_VNUM_HEAVEN          30010
#define ROOM_VNUM_CRYPT		  30001
#define ROOM_VNUM_DISCONNECTION	  30002
#define ROOM_VNUM_IN_OBJECT	  30008
#define ROOM_VNUM_MORGUE           3060
#define ROOM_VNUM_ESCAPE           3005

/*
 * Room flags.
 * Used in #ROOMS.
 */
#define ROOM_DARK		      1
#define ROOM_NO_MOB		      4
#define ROOM_TOTAL_DARKNESS       	8
#define ROOM_PRIVATE		    512
#define ROOM_SAFE		   1024
#define ROOM_SOLITARY		   2048
#define ROOM_PET_SHOP		   4096
#define ROOM_NO_RECALL		   8192
#define ROOM_NO_TELEPORT	  16384
#define ROOM_INDOORS  		32768
#define ROOM_BLADE_BARRIER        65536
#define ROOM_SILENCE		 131072
#define ROOM_FLAMING		 262144
#define ROOM_CASTLE1             524288
#define ROOM_CASTLE2            1048576
#define ROOM_CASTLE3            2097152
#define ROOM_CASTLE4            4194304
#define ROOM_CASTLE5            8388608
#define ROOM_CASTLE6           16777216
#define ROOM_CASTLE7           33554432
#define ROOM_CASTLE8           67108864
#define ROOM_CASTLE9          134217728
#define ROOM_CASTLE10         268435456

#define ROOM2_SILENCE		      1
#define ROOM2_CASTLE                  4
/*
 * Room text flags (KaVir).
 * Used in #ROOMS.
 */
#define RT_LIGHTS		      1 /* Toggles lights on/off */
#define RT_SAY			      2 /* Use this if no others powers */
#define RT_ENTER		      4
#define RT_CAST			      8
#define RT_THROWOUT		     16 /* Erm...can't remember ;) */
#define RT_OBJECT		     32 /* Creates an object */
#define RT_MOBILE		     64 /* Creates a mobile */
#define RT_LIGHT		    128 /* Lights on ONLY */
#define RT_DARK			    256 /* Lights off ONLY */
#define RT_OPEN_LIFT		    512 /* Open lift */
#define RT_CLOSE_LIFT		   1024 /* Close lift */
#define RT_MOVE_LIFT		   2048 /* Move lift */
#define RT_SPELL		   4096 /* Cast a spell */
#define RT_PORTAL		   8192 /* Creates a one-way portal */
#define RT_TELEPORT		  16384 /* Teleport player to room */

#define RT_ACTION		  32768
#define RT_BLANK_1		  65536
#define RT_BLANK_2		 131072

#define RT_RETURN		1048576 /* Perform once */
#define RT_PERSONAL		2097152 /* Only shows message to char */
#define RT_TIMER		4194304 /* Sets object timer to 1 tick */



/*
 * 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
#define MAX_DIR			      6	/* OLC */



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


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



/*
 * Equipment 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 WEAR_THIRD		     18
#define WEAR_FOURTH		     19
#define WEAR_FACE		     20
#define WEAR_SCABBARD_L		     21
#define WEAR_SCABBARD_R		     22
#define WEAR_ANKLE_L                 23
#define WEAR_ANKLE_R                 24
#define WEAR_EAR_R                   25
#define WEAR_EAR_L                   26
#define WEAR_NOSE                    27
#define WEAR_MASTERY                 28
#define MAX_WEAR		     29




/*
 * Locations for damage.
 */
#define LOC_HEAD		      0
#define LOC_BODY		      1
#define LOC_ARM_L		      2
#define LOC_ARM_R		      3
#define LOC_LEG_L		      4
#define LOC_LEG_R		      5

/*
 * For Head
 */
#define LOST_EYE_L		       1
#define LOST_EYE_R		       2
#define LOST_EAR_L		       4
#define LOST_EAR_R		       8
#define LOST_NOSE		      16
#define BROKEN_NOSE		      32
#define BROKEN_JAW		      64
#define BROKEN_SKULL		     128
#define LOST_HEAD		     256
#define LOST_TOOTH_1		     512 /* These should be added..... */
#define LOST_TOOTH_2		    1024 /* ...together to caculate... */
#define LOST_TOOTH_4		    2048 /* ...the total number of.... */
#define LOST_TOOTH_8		    4096 /* ...teeth lost.  Total..... */
#define LOST_TOOTH_16		    8192 /* ...possible is 31 teeth.   */
#define LOST_TONGUE		   16384

/*
 * For Body
 */
#define BROKEN_RIBS_1		       1 /* Remember there are a total */
#define BROKEN_RIBS_2		       2 /* of 12 pairs of ribs in the */
#define BROKEN_RIBS_4		       4 /* human body, so not all of  */
#define BROKEN_RIBS_8		       8 /* these bits should be set   */
#define BROKEN_RIBS_16		      16 /* at the same time.          */
#define BROKEN_SPINE		      32
#define BROKEN_NECK		      64
#define CUT_THROAT		     128
#define CUT_STOMACH		     256
#define CUT_CHEST		     512

/*
 * For Arms
 */
#define BROKEN_ARM		       1
#define LOST_ARM		       2
#define LOST_HAND		       4
#define LOST_FINGER_I		       8 /* Index finger */
#define LOST_FINGER_M		      16 /* Middle finger */
#define LOST_FINGER_R		      32 /* Ring finger */
#define LOST_FINGER_L		      64 /* Little finger */
#define LOST_THUMB		     128
#define BROKEN_FINGER_I		     256 /* Index finger */
#define BROKEN_FINGER_M		     512 /* Middle finger */
#define BROKEN_FINGER_R		    1024 /* Ring finger */
#define BROKEN_FINGER_L		    2048 /* Little finger */
#define BROKEN_THUMB		    4096

/*
 * For Legs
 */
#define BROKEN_LEG		       1
#define LOST_LEG		       2
#define LOST_FOOT		       4
#define LOST_TOE_A		       8
#define LOST_TOE_B		      16
#define LOST_TOE_C		      32
#define LOST_TOE_D		      64 /* Smallest toe */
#define LOST_TOE_BIG		     128
#define BROKEN_TOE_A		     256
#define BROKEN_TOE_B		     512
#define BROKEN_TOE_C		    1024
#define BROKEN_TOE_D		    2048 /* Smallest toe */
#define BROKEN_TOE_BIG		    4096

/*
 * For Bleeding
 */
#define BLEEDING_HEAD		       1
#define BLEEDING_THROAT		       2
#define BLEEDING_ARM_L		       4
#define BLEEDING_ARM_R		       8
#define BLEEDING_HAND_L		      16
#define BLEEDING_HAND_R		      32
#define BLEEDING_LEG_L		      64
#define BLEEDING_LEG_R		     128
#define BLEEDING_FOOT_L		     256
#define BLEEDING_FOOT_R		     512


/*
 * For Spec powers on players
 */
#define EYE_SPELL		       1 /* Spell when they look at you */
#define EYE_SELFACTION		       2 /* You do action when they look */
#define EYE_ACTION		       4 /* Others do action when they look */




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



/*
 * Stats - KaVir.
 */
#define STAT_STR		      0
#define STAT_END		      1
#define STAT_REF		      2
#define STAT_FLE		      2

/*
 * Interpretor commands show..
 */
#define CSHOW_NEVER                   1
#define CSHOW_VAMPIRE                 2
#define CSHOW_WEREWOLF                4
#define CSHOW_MONK                    8
#define CSHOW_DEMON                  16
#define CSHOW_PRIEST                 32
#define CSHOW_DROW                   64
#define CSHOW_MAGE                  128
#define CSHOW_ANGEL                 256
#define CSHOW_NINJA                 512
#define CSHOW_MUDCOP               1024
/*
 * Positions.
 */
#define POS_DEAD		      0
#define POS_MORTAL		      1
#define POS_INCAP		      2
#define POS_STUNNED		      3
#define POS_SLEEPING		      4
#define POS_MEDITATING		      5
#define POS_SITTING		      6
#define POS_RESTING		      7
#define POS_FIGHTING		      8
#define POS_STANDING		      9


// Bits for Areas ((area)->bits)
#define WASTE (A)
#define UPDATEWASTE (B)
// World bits (config_info->world)
/*
 * ACT bits for players.
 */
#define PLR_IS_NPC		      1		/* Don't EVER set.	*/
#define PLR_DEMON		      2
#define PLR_CHAMPION		      4
#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_ANSI		  16384
#define PLR_COLOUR		  16384

#define	PLR_SILENCE		  32768
#define PLR_NO_EMOTE		  65536
#define PLR_INCOG                131072
#define PLR_NO_TELL		 262144
#define PLR_LOG			 524288
#define PLR_DENY		1048576
#define PLR_FREEZE		2097152
#define PLR_GODLESS	       16777216
#define PLR_WATCHER	       33554432
#define PLR_DROWSIGHT		67108864
#define PLR_EMBRACING          134217728
#define PLR_EMBRACED           268435456
#define PLR_ACID               536870912
#define PLR_LAST_AGG	      1073741824
#define PLR_AUTOCRACK              (dd)


#define PLR_BATTLEOTHER         1
#define PLR_CHIDE               2
#define PLR_AUTOHEAD            30
#define PLR_AUTOLEVEL		31
#define PLR_COUNTED             32
#define PLR_SPEAKSLOW           33
#define PLR_BATTLESELF          34
#define PLR_AUTOMAPPER          35

/* grenades */
#define GRENADE_NOTPULLED   0
#define GRENADE_PULLED      1

/*NEWBITS FOR PLAYERS..(added by sage)10/17/98*/
#define NEWBIE_PACK	1
#define THIRD_HAND	2
#define FOURTH_HAND	4
#define NEW_DROWHATE    8
#define NEW_DARKNESS    16
#define NEW_TIDE	32
#define NEW_COIL	64
#define NEW_MONKFLAME	128
#define NEW_MONKCLOAK   256
#define NEW_MONKADAM    512
#define NEW_MONKSKIN    1024
#define NEW_MONKFAVOR   2048
#define NEW_POWER	4096
#define NEW_CLANNABLE   8192
#define NEW_NATURAL     16384
#define NEW_QUILLS      32768
#define NEW_OBEAH	65536
#define NEW_PAIN        131072
#define NEW_REINA       262144
#define NEW_NEUTRAL     524288
#define NEW_CALM	1048576
#define NEW_NOPAIN	2097152
#define NEW_SILENCE	4194304
#define NEW_COURAGE     8388608
#define NEW_VIOLATION  16777216
#define NEW_FTALK	33554432
#define NEW_VISCERAL	67108864
#define NEW_HOLYANGER  134217728
#define NEW_BLASTRAGE  268435456
#define NEW_FULLBORE   536870912
#define NEW_HOLY      1073741824
#define NEW_ARCHMAGE	(aa)
#define NEW_MUDCOP	(bb)
#define NEW_MCR 	(cc)
#define NEW_MASTERY     (dd)

// exactly like newbits wheeeeee!
#define MORE_ANIMAL_MASTER 1
#define MORE_SPIRIT	2
#define MORE_GUARDIAN   4
/*
 * World affect bits.
 */
#define WORLD_FOG		      1
#define WORLD_RAIN		      2
#define WORLD_ECLIPSE		      4
#define WORLD_NICE		      8 // No swearing while frenzied
#define WORLD_DOUBLEXP		     16
#define WORLD_VOTING                 32
#define WIZLOCKED                    64
#define WORLD_COPYOVER              128
#define WORLD_REBOOT                256
#define WORLD_SHUTDOWN              512
#define WORLD_RANDOMIZEDAM         1024
#define WORLD_STATUSARENA          2048
#define WORLD_DEATHMATCH           4096

/*
 * EXTRA bits for players. (KaVir)
 */
				/*    1 */
				/*    2 */
#define EXTRA_TRUSTED		      4
#define EXTRA_NEWPASS		      8
#define EXTRA_OSWITCH		     16
#define EXTRA_SWITCH		     32
#define EXTRA_FAKE_CON		     64
#define TIED_UP			    128
#define GAGGED			    256
#define BLINDFOLDED		    512
#define EXTRA_MAPPER	           1024
#define EXTRA_DONE		   2048
#define EXTRA_EXP		   4096
#define EXTRA_PREGNANT		   8192
#define EXTRA_LABOUR		  16384
#define EXTRA_BORN		  32768
#define EXTRA_PROMPT		  65536
#define EXTRA_MARRIED		 131072
		        /*	 262144 */
#define FROUND			 524288

#define EXTRA_CALL_ALL		1048576
#define EXTRA_ASH	        2097152
#define EXTRA_NOTE_TRUST       4194304
#define EXTRA_STANCE           8388608
#define EXTRA_ANTI_GODLESS    16777216
#define EXTRA_ZOMBIE	      33554432
#define EXTRA_POTENCY	      67108864
#define EXTRA_AWE	     134217728
#define EXTRA_DRAGON	     268435456
#define EXTRA_PLASMA	     536870912
#define EXTRA_EARTHMELD     1073741824
#define EXTRA_ROT	    2147483648
#define EXTRA_AXE	    4294967296
#define EXTRA_CAN_SEE	    8589934592 /* You can't see, but familiar can*/

/*
 * AGE Bits.
 */
#define AGE_CHILDE		      0
#define AGE_NEONATE		      1
#define AGE_ANCILLA		      2
#define AGE_ELDER		      3
#define AGE_METHUSELAH		      4

/*
 * Ninja Ranks
 */
#define BELT_ONE		2
#define BELT_TWO                3
#define BELT_THREE              4
#define BELT_FOUR               5
#define BELT_FIVE               6
#define BELT_SIX                7
#define BELT_SEVEN              8
#define BELT_EIGHT              9
#define BELT_NINE              10
#define BELT_TEN               11

/*
 * Stances for combat
 */
#define STANCE_NONE		     -1
#define STANCE_NORMAL		      0
#define STANCE_VIPER		      1
#define STANCE_CRANE		      2
#define STANCE_CRAB		      3
#define STANCE_MONGOOSE		      4
#define STANCE_BULL		      5
#define STANCE_MANTIS		      6
#define STANCE_DRAGON		      7
#define STANCE_TIGER		      8
#define STANCE_MONKEY		      9
#define STANCE_SWALLOW		     10
#define STANCE_RABBIT		     11
#define STANCE_COBRA		     12
#define STANCE_BEAR		     13
#define STANCE_COUGAR		     14
#define STANCE_EAGLE		     15

/*
 * 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_AUCHN		      1
#define	CHANNEL_CHAT		      2
#define	CHANNEL_HACKER		      4
#define	CHANNEL_IMMTALK		      8
#define CHANNEL_OOC                   9
#define CHANNEL_NEWBIE               10
#define CHANNEL_NHT		     11
#define CHANNEL_HINT                 12
#define	CHANNEL_MUSIC		     16
#define CHANNEL_GSOCIAL              24
#define	CHANNEL_QUESTION	     32
#define	CHANNEL_SHOUT		     64
#define	CHANNEL_YELL		    128
#define	CHANNEL_VAMPTALK	    256
#define	CHANNEL_HOWL		    512
#define	CHANNEL_LOG		   1024
#define	CHANNEL_PRAY		   2048
#define	CHANNEL_INFO		   4096
#define	CHANNEL_SPARE		   8192
#define	CHANNEL_TELL		  16384
#define	CHANNEL_MAGETALK          32768
#define CHANNEL_HIGHTALK	  65536
#define CHANNEL_CLANTALK	 131072
#define CHANNEL_SIGN		262144
#define CHANNEL_MIKTALK        524288
#define CHANNEL_MIKT		(CHANNEL_MIKTALK)
#define	CHANNEL_PALADIN    1048576
#define CHANNEL_KTALK       4194304
#define CHANNEL_BUILD       8388608
#define CHANNEL_FTALK	    16777216
#define CHANNEL_ANGTALK     33554432
#define CHANNEL_QTALK       67108864
#define CHANNEL_MONK       134217728
#define CHANNEL_PTALK       268435456
#define CHANNEL_BITCH		536870912

struct clan_type
{
    int		members;	/* Number of members */
    char *	clan_head;	/* Name of clan head */
    char *	primogen;	/* Name of primogen */
};


#define	RANK_EXILED		      1		/* Exiled from a clan   */
#define	RANK_CLANSMAN		      2		/* Foot soldier         */
#define	RANK_CLANHERO		      3		/* Knight               */
#define	RANK_SUBCHIEF		      4		/* Knight Lord          */
#define	RANK_CHIEFTAIN		      5		/* Second in command    */
#define	RANK_OVERLORD		      6		/* Head clan leader     */

struct  clan_data
{
    CLAN_DATA *	next;           /* next clan in list                    */
    char *	filename;       /* Clan filename                        */
    char *	who_name;       /* Clan who name                        */
    char *	name;           /* Clan name                            */
    char *	motto;          /* Clan motto                           */
    char *	description;    /* A brief description of the clan      */
    char *	overlord;       /* Head clan leader                     */
    char *	chieftain;      /* Second in command                    */
    int		pkills;         /* Number of pkills on behalf of clan   */
    int		pdeaths;        /* Number of pkills against clan        */
    int		subchiefs;      /* Number of subchiefs                  */
    int		clanheros;      /* Number of clanheros                  */
    int		members;        /* Number of clan members               */
    int		clanobj1;       /* Vnum of first clan obj (ring)        */
    int		clanobj2;       /* Vnum of second clan obj (shield)     */
    int		clanobj3;       /* Vnum of third clan obj (weapon)      */
    int		recall;         /* Vnum of clan's recall room           */
};

struct kingdom_data
{
	int num;
	char *name;
	char *who_name;
	char *leader_name;
	int pk;
	int pd;
	int recall;
        int altar;
};

/*
struct war_data
{
	int one;
	int two;
};*/


/*
 * 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 */
    CHAR_DATA *		mount;
    CHAR_DATA *		wizard;
    char *		hunting;
    char *		player_name;
    char *		short_descr;
    char *		long_descr;
    char *		description;
    char *		lord;
    char *		clan;
    char *		morph;
    char *		createtime;
    char *		pload;
    char *		lasttime;
    char *		lasthost;
    char *		powertype;
    char *		poweraction;
    char *		prompt;
    char *		cprompt;
    sh_int		spectype;
    sh_int		specpower;
    int		        loc_hp	[7];
    sh_int		vnum;
    sh_int		count;
    sh_int		killed;
    sh_int		sex;
    sh_int		mounted;
    sh_int		home;
    int		        level;
    int			immune;
    int			polyaff;
    int			vampaff;
    int			itemaffect;
    int			vamppass;
    int			form;
    int			fatal;
    int			act;
    unsigned long int	extra;
    //int	        	more;
    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 */
};

/*
struct clan_data
{
    int	kills[6];
    int deaths[6];
};
*/
struct leader_data
{
    char name[40];
    int kills;
    int deaths;
};


struct  config_data
{
    int world;
    sh_int drows;
    sh_int monks;
    sh_int demons;
    sh_int mages;
    sh_int werewolfs;
    sh_int vampires;
    sh_int ninjas;
    sh_int angels;
    sh_int priests;
    sh_int ban_site_level;      /* Level to ban sites */
    sh_int ban_class_level;     /* Level to ban classes */
    sh_int save_frequency;      /* How old to autosave someone */
    sh_int dodge_mod;           /* Divide dodge chance by */
    sh_int parry_mod;           /* Divide parry chance by */
    sh_int level_getobjnotake;     /* Get objects without take flag */
    sh_int level_forcepc;          /* The level at which you can use force */
    sh_int level_mset_player;   /* Level to mset a player */
    sh_int level_override_private;      /* override private flag */
    sh_int log_level;           /* Level of log channel LEVEL LOG*/
    int	   maxplayers;		/* Maximum players this boot   */
    int	   alltimemax;		/* Maximum players ever	  */
    char * time_of_max;		/* Time of max ever */
    bool   NO_NAME_RESOLVING;	/* Hostnames are not resolved  */
    sh_int	dam_plr_vs_plr;		/* Damage mod player vs. player */
    sh_int	dam_plr_vs_mob;		/* Damage mod player vs. mobile */
    sh_int	dam_mob_vs_plr;		/* Damage mod mobile vs. player */
    sh_int	dam_mob_vs_mob;		/* Damage mod mobile vs. mobile */
    time_t      down_time;
    bool   CLEANPFILES;
    sh_int      newbie_purge;
    sh_int      regular_purge;
};


struct   form_type
{
    char *	desc;
    char *	name;
    bool        claws;
    bool	fangs;
    bool	tail;
    bool	wings;
    int         hitplus;
    int		damplus;
};



/*
 * 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 *		reply;
    CHAR_DATA *		mount;
    CHAR_DATA *		wizard;
    SPEC_FUN *		spec_fun;
    MOB_INDEX_DATA *	pIndexData;
    DESCRIPTOR_DATA *	desc;
    AFFECT_DATA *	affected;
    NOTE_DATA *		pnote;
    OBJ_DATA *		carrying;
    ROOM_INDEX_DATA *	in_room;
    ROOM_INDEX_DATA *	was_in_room;
    PC_DATA *		pcdata;
    char *		hunting;
    char *		name;
    char *	        pload;
    char *		short_descr;
    char *		long_descr;
    char *		description;
    char *		lord;
    char *		clan;
    char *            kingdom;
    CHAR_DATA *		unveil;
    char *		objdesc;
    char *		morph;
    char *		createtime;
    char *		lasttime;
    char *		lasthost;
    char *		poweraction;
    char *		powertype;
    char *		prompt;
    char *		cprompt;
    char *		prefix;
    sh_int		sex;
    sh_int		race;
    sh_int		class;
    int			immune;
    int			polyaff;
    int			vampaff_a;
    int			warp;
    sh_int		warpcount;
    int			fight_timer;
    int			obeah_timer;
    int			reina_timer;
    int			silence_timer;
    int			darkness_timer;
    int			arena_timer;
    int			majesty_timer;
    int			cobra_timer;
    int			wyld_timer;
    CHAR_DATA *		embraced;
    CHAR_DATA *		embracing;
    int			itemaffect;
    int			vamppass_a;
/*    int			vampgen;*/
    int			form;
    int			fatal;
    sh_int		vampgen_a;
    sh_int		spectype;
    sh_int		specpower;
    sh_int		loc_hp	[7];
    sh_int		wpn	[13];
    sh_int		spl	[5];
    sh_int		cmbt	[8];
    sh_int		stance	[17];
    sh_int		beast;
    sh_int		mounted;
    sh_int		home;
    sh_int		level;
    sh_int		trust;
    int			played;
    time_t		logon;
    time_t		save_time;
    sh_int		timer;
    sh_int		wait;
    int			pkill;
    int			pdeath;
    int			mkill;
    int			mdeath;
     sh_int		agg;
    long		hit;
    long		max_hit;
    long		mana;
    long		max_mana;
    long		move;
    long		max_move;
    int			gold;
    int			exp;
    int			act;
    int			extra;
    int                 newbits;
    int                 special;
    int   		more;
    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;
    int	  	        num_hits, tot_dam;
    sh_int		armor;
    sh_int		wimpy;
    sh_int		deaf;
    sh_int		x;
    sh_int		y;
    sh_int		room;
    sh_int		paradox		[3];
    sh_int		damcap		[2];
    int			monkstuff;
    int			monkcrap;
    int			monkab [4];
    sh_int		chi [2];
    CHAR_DATA *		blinkykill;
    CHAR_DATA *		bridgekill;
    int			flag2;
    sh_int		spheres[10];
    int			mflags;
    sh_int		quint[3];
    sh_int              mageshields[mMAX][2];
    sh_int		imms[3];
    CHAR_DATA *		challenged;
    int			awins;
    int			alosses;
    sh_int		monkblock;
    sh_int		focus[2];
    int                 gifts[21];
    int                 garou1;
    int                 garou2;
    sh_int              gnosis[2];
    sh_int		lstatus;
    int			version;
};



/*
 * Data which only PC's have.
 */
struct	pc_data
{
    PC_DATA *		next;
    QUEST_DATA *        aquest;
    CHAR_DATA *		familiar;
    CHAR_DATA *		partner;
    CHAR_DATA *		propose;
    OBJ_DATA *		chobj;
    OBJ_DATA *		memorised;
    BOARD_DATA *        board; /* The current board */
    time_t              last_note[MAX_BOARD]; /* last note for the boards */
    NOTE_DATA *         in_progress;
    char *		pwd;
    char *		bamfin;
    char *		bamfout;
    char *		title;
    int			wizinvis;
    char *		conception;
    char *		parents;
    char *		cparents;
    char *		marriage;
    char *		email;
     char *		forget[MAX_FORGET];
     char *		love;
    sh_int		voted;
    sh_int		perm_str;
    sh_int		perm_int;
    sh_int		perm_wis;
    sh_int		perm_dex;
    sh_int		perm_con;
    sh_int              perm_luk;
    sh_int		mod_str;
    sh_int		mod_int;
    sh_int		mod_wis;
    sh_int		mod_dex;
    sh_int		mod_con;
    sh_int              base_str;
    sh_int              base_int;
    sh_int              base_wis;
    sh_int              base_dex;
    sh_int              base_con;
    sh_int		willpower[2];
    sh_int		resist[5];
    int			quest;
    int 		kingdom;
    int			bounty;
    int			powers[20];
    int 		stats[12];
    sh_int		wolf;
    sh_int		rank;
    sh_int		demonic_a;
    int			language[2];
    sh_int		stage[3];
    sh_int		wolfform[2];
    int			score[6];
    sh_int		runes[4];
    sh_int		disc_a[11];
    int			genes[10];
    sh_int		fake_skill;
    sh_int		fake_stance;
    sh_int		fake_hit;
    sh_int		fake_dam;
    sh_int		fake_hp;
    sh_int		fake_mana;
    sh_int		fake_move;
    int			fake_ac;
    sh_int		obj_vnum;
    sh_int		condition	[3];
    sh_int		learned		[MAX_SKILL];
    sh_int		stat_ability	[4];
    sh_int		stat_amount	[4];
    sh_int		stat_duration	[4];
    sh_int		exhaustion;
    sh_int              followers;
    sh_int		tick_timer[MAX_TIMER];
    int                 security;	/* OLC */
    sh_int		autostance;
    sh_int              pagelen;
     char *             entermsg; /* Custom Entrance */
     char *             exitmsg; /* Custom Exit */
    XBV                 plr_flags;
    CLAN_DATA *		clan;
    sh_int              clan_rank;
    int                 wiznet;
   sh_int              basedamcap;
};





/*
 * 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;
    AREA_DATA *         area;	/* OLC */
    char *		name;
    char *		short_descr;
    char *		description;
    char *		real_name;
    char *		chpoweron;
    char *		chpoweroff;
    char *		chpoweruse;
    char *		victpoweron;
    char *		victpoweroff;
    char *		victpoweruse;
    char *		questmaker;
    char *		questowner;
    sh_int		vnum;
    int			item_type;
    int	       	        extra_flags;
    unsigned int	wear_flags;
    sh_int		count;
    sh_int		weight;
    int			spectype;
    int			specpower;
    sh_int		condition;
    sh_int		toughness;
    sh_int		resistance;
    int			quest;
    sh_int		points;
    int			cost;			/* Unused */
    int			value [MAX_OVALUE];
};



/*
 * 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 *		chobj;
    EXTRA_DESCR_DATA *	extra_descr;
    AFFECT_DATA *	affected;
    OBJ_INDEX_DATA *	pIndexData;
    ROOM_INDEX_DATA *	in_room;
    char *		name;
    char *		short_descr;
    char *		real_name;
    char *		description;
    char *		chpoweron;
    char *		chpoweroff;
    char *		chpoweruse;
    char *		victpoweron;
    char *		victpoweroff;
    char *		victpoweruse;
    char *		questmaker;
    char *		questowner;
    sh_int		item_type;
    int	         	extra_flags;
    unsigned int        wear_flags;
    sh_int		wear_loc;
    sh_int		weight;
    int			spectype;
    int			specpower;
    sh_int		condition;
    sh_int		toughness;
    sh_int		resistance;
    int			quest;
    sh_int		points;
    int			cost;
    sh_int		level;
    sh_int		timer;
    int			weapflags;
    int			value	[MAX_OVALUE];
};



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



/*
 * Room text checking data.
 */
typedef struct roomtext_data
{
    int				type;
    int				power;
    int				mob;
    char *			input;
    char *			output;
    char *			choutput;
    char *			name;
    struct roomtext_data	*next;
} ROOMTEXT_DATA;



/*
 * 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;
    HELP_AREA *		helps;
    char *		name;
    sh_int		age;
    sh_int		start;
    sh_int		nplayer;
    char *		filename;	/* OLC */
    char *		builders;	/* OLC */ /* Listing of */
    int			security;	/* OLC */ /* Value 1-9  */
    int			lvnum;		/* OLC */ /* Lower vnum */
    int			uvnum;		/* OLC */ /* Upper vnum */
    int			vnum;		/* OLC */ /* Area vnum  */
    int			area_flags;	/* OLC */
    int			bits;
    int                 mod;
    int			mkills;
    int			mdeaths;
    int			pkills;
    int			pdeaths;
};


/*
 * Room type.
 */
struct	room_index_data
{
    ROOM_INDEX_DATA *	next;
    CHAR_DATA *		people;
    OBJ_DATA *		contents;
    OBJ_DATA *		to_obj;
    EXTRA_DESCR_DATA *	extra_descr;
    AREA_DATA *		area;
    EXIT_DATA *		exit	  [6];
    ROOMTEXT_DATA *	roomtext;
    RESET_DATA *	reset_first;	/* OLC */
    RESET_DATA *	reset_last;	/* OLC */
    ROOM_AFFECT_DATA *  affected;
    char *		track     [5];
    char *		name;
    char *		description;
    sh_int		vnum;
    sh_int		room_flags;
    int			affected_by;
    sh_int		light;
    sh_int		blood;
    sh_int		passed;
    sh_int		track_dir [5];
    sh_int		sector_type;
    sh_int		wood;
    sh_int		build;
    sh_int		ground;
    sh_int		x;
    sh_int		y;
    sh_int		room;
};


/*
 * 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
#define TYPE_ADD_AGG                 3000
#define TYPE_AGG                     3000


/*
 *  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 TARGET_CHAR                 0
#define TARGET_OBJ                  1
#define TARGET_ROOM                 2
#define TARGET_NONE                 3

#define PURPLE_MAGIC		    0
#define RED_MAGIC		    1
#define BLUE_MAGIC		    2
#define GREEN_MAGIC		    3
#define YELLOW_MAGIC		    4



/*
 * Skills include spells as a particular case.
 */
struct	skill_type
{
    char *	name;			/* Name of skill		*/
    sh_int	skill_level;	        /* 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		*/
};

struct room_aff_type
{
    char *      name;
    char *      msg_off;
    char *      msg_look;
    char *      msg_caster;
    char *      msg_damage;
    int         damage;
};

#define WIZ_TICKS		   (A)
#define WIZ_LOGINS		   (B)
#define WIZ_DEBUG		   (C)
#define WIZ_LOGS                   (D)
#define WIZ_CREATE                 (E)
#define WIZ_COMMANDS               (F)
#define WIZ_MISC                   (G)

struct wiznet_type
{
   char *name;
   int  channel;
   int min_level;
   char *col;
   char *id;
   char *on_name;
   char *off_name;
};

/*
 * These are skill_lookup return values for common skills and spells.
 */
extern  sh_int  gsn_totalblind;
extern	sh_int	gsn_backstab;
extern	sh_int	gsn_hide;
extern	sh_int	gsn_peek;
extern  sh_int  gsn_holystrike;
extern	sh_int	gsn_pick_lock;
extern	sh_int	gsn_sneak;
extern	sh_int	gsn_steal;
extern  sh_int  gsn_inferno;
extern  sh_int  gsn_blinky;
extern	sh_int	gsn_fastdraw;
extern	sh_int	gsn_berserk;
extern	sh_int	gsn_punch;
extern  sh_int  gsn_gham;
extern	sh_int	gsn_elbow;
extern  sh_int  gsn_fangs;
extern  sh_int  gsn_rfangs;
extern  sh_int  gsn_spiket;
extern  sh_int  gsn_venomt;
extern  sh_int  gsn_magma;
extern  sh_int  gsn_waspt;
extern  sh_int	gsn_claws;
extern  sh_int  gsn_shards;
extern	sh_int	gsn_headbutt;
extern  sh_int  gsn_quills;
extern  sh_int  gsn_buffet;
extern  sh_int  gsn_tail;
extern  sh_int  gsn_shiroken;
extern  sh_int  gsn_joust;
extern	sh_int	gsn_sweep;
extern	sh_int	gsn_knee;
extern  sh_int  gsn_spinkick;
extern  sh_int  gsn_backfist;
extern  sh_int  gsn_jumpkick;
extern  sh_int  gsn_monksweep;
extern  sh_int  gsn_thrustkick;
extern  sh_int  gsn_spinkick;
extern  sh_int  gsn_elbow;
extern  sh_int  gsn_palmstrike;
extern  sh_int  gsn_shinkick;
extern  sh_int  gsn_lightningkick;
extern  sh_int  gsn_tornadokick;
extern  sh_int  gsn_spiderform;
extern  sh_int  gsn_garotte;
extern	sh_int	gsn_disarm;
extern	sh_int	gsn_hurl;
extern	sh_int	gsn_kick;
extern  sh_int  gsn_circle;
extern	sh_int	gsn_talon;
extern	sh_int	gsn_rescue;
extern	sh_int	gsn_track;
extern	sh_int	gsn_polymorph;
extern	sh_int	gsn_web;
extern sh_int	gsn_drowfire;
extern  sh_int	gsn_godbless;  /* Vic - Monks */
extern  sh_int  gsn_llothbless;
extern  sh_int	gsn_totalblind; /* Vic - Monks */
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;

extern	sh_int	gsn_paradox;
extern	sh_int	gsn_darkness;
extern  sh_int  gsn_critical;
extern  sh_int  gsn_godbless;
extern  sh_int  gsn_manashield;

/*
 * Limits for CPU time used.
 * Note: ALARM_BOOT_DB should be less than ALARM_FREQUENCY.
 * If the MUD takes longer to boot and you have to increase this
 * value, then the other values should be increased correspondingly.
 * ALARM_BOOT_DB and ALARM_RUNNING are in 1/10ths of seconds.
 */
#define ALARM_FREQUENCY		20	/* checked every 20 seconds	*/
#define ALARM_BOOT_DB		30	/* allow for 15 seconds to boot */
#define ALARM_RUNNING		50	/* 5 sec of CPU time every 20 sec */

/*
 * 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))	/* OLC */
#define GET_GEN(ch)             (PC(ch,stats[UNI_GEN]))
#define STR(dat, field)         (( (dat)->field != NULL                    \
                                             ? (dat)->field                \
                                             : (dat)->pIndexData->field ))
#define NST(pointer)            (pointer == NULL ? "" : pointer)
#define MTD(str)                ((str == NULL || str[0] == '\0' ))
#define MTP(str)                ((str == NULL || *str   == '\0' ))

#define IS_VOWEL(c)             (c == 'A' || c == 'a' || \
                                 c == 'E' || c == 'e' || \
                                 c == 'I' || c == 'i' || \
                                 c == 'O' || c == 'o' || \
                                 c == 'U' || c == 'u'      )
#define PERCENTAGE(amount,max) ( (max>0) ? ((amount*100)/max) : (amount *100) )


#define IS_LEADER(ch)		(!str_cmp((ch)->name, leader[0]->name) || !str_cmp((ch)->name, leader[1]->name) || !str_cmp((ch)->name, leader[2]->name) )
#define IS_FODDER(ch)		(!str_cmp((ch)->name, leader[3]->name) || !str_cmp((ch)->name, leader[4]->name) || !str_cmp((ch)->name, leader[5]->name) )
#define IS_WEAP(obj,stat)	(IS_SET((obj)->weapflags, (stat)))

/*
 * Character macros.
 */
#define IS_BLACK_SPIRAL_DANCER(ch) ((ch)->class == CLASS_BLACK_SPIRAL_DANCER)
#define IS_ABOMINATION(ch)	((ch)->class == CLASS_ABOMINATION)
#define IS_NINJA(ch)		(IS_SET((ch)->class, CLASS_NINJA))
#define IS_MAGE(ch)		(IS_SET((ch)->class, CLASS_MAGE))
#define IS_MONK(ch)             (IS_SET((ch)->class, CLASS_MONK))
#define IS_PRIEST(ch)           (IS_SET((ch)->class, CLASS_PRIEST))
#define IS_SPIRIT(ch)		(IS_SET((ch)->more, MORE_SPIRIT))
#define IS_HIGHLANDER(ch)	(IS_SET((ch)->class, CLASS_HIGHLANDER))
#define IS_DROW(ch)		(IS_SET((ch)->class, CLASS_DROW))
#define IS_DEMON(ch)		(IS_SET((ch)->class, CLASS_DEMON))
#define IS_ANGEL(ch)		(IS_SET((ch)->class, CLASS_ANGEL))
#define IS_WEREWOLF(ch)		(IS_SET((ch)->class, CLASS_WEREWOLF))
#define IS_VAMPIRE(ch)		(IS_SET((ch)->class, CLASS_VAMPIRE))
#define IS_CREATOR(ch)		(!str_cmp((ch)->name, "Cuthbert" ))
#define IS_COMB(ch, sn)		(IS_SET((ch)->monkcrap, (sn)))
#define IS_FS(ch, sn)		(IS_SET((ch)->monkstuff, (sn)))
#define IS_NEWFLAG(ch, sn)      (IS_SET((ch)->flag2, (sn)))
#define IS_NPC(ch)		(IS_SET((ch)->act, ACT_IS_NPC))
#define IS_QUESTSHOP(ch)        (IS_NPC(ch) && IS_SET((ch)->act, ACT_SHOPQUEST))
#define IS_JUDGE(ch)		(get_trust(ch) >= LEVEL_JUDGE)
#define IS_IMMORTAL(ch)		(get_trust(ch) >= LEVEL_IMMORTAL)
#define IS_IMP(ch)              (get_trust(ch) >= LEVEL_IMPLEMENTOR)
#define IMP_EMAIL               "xxcuthbertxx@home.com"

#define IS_HERO(ch)		(get_trust(ch) >= LEVEL_HERO)
#define IN_TROOM(ch)		(ch->in_room->vnum == 3100 && ch->mkill == 1)
#define CAN_PK(ch)		(get_trust(ch) >= 3 && get_trust(ch) <= 6)
#define IS_AFFECTED(ch, sn)	(IS_SET((ch)->affected_by, (sn)))
#define IS_SPEAKING(ch, sn)	(IS_SET((ch)->pcdata->language[0], (sn)))
#define CAN_SPEAK(ch, sn)	(IS_SET((ch)->pcdata->language[1], (sn)))
#define CAN_DANCE(ch, sn)	(IS_SET((ch)->pcdata->powers[1], (sn)))
#define IS_ITEMAFF(ch, sn)	(IS_SET((ch)->itemaffect, (sn)))
#define IS_WILLPOWER(ch, sn)	(IS_SET((ch)->pcdata->resist[0], (sn)))
#define IS_IMMUNE(ch, sn)	(IS_SET((ch)->immune, (sn)))
#define IS_VAMPAFF(ch, sn)	(IS_SET((ch)->pcdata->stats[UNI_AFF], (sn)))
#define IS_VAMPPASS(ch, sn)	(IS_SET((ch)->pcdata->stats[UNI_CURRENT], (sn)))
#define IS_FORM(ch, sn)		(IS_SET((ch)->form, (sn)))
#define IS_POLYAFF(ch, sn)	(IS_SET((ch)->polyaff, (sn)))
#define IS_EXTRA(ch, sn)	(IS_SET((ch)->extra, (sn)))
#define IS_MORE(ch, sn)		(IS_SET((ch)->more, (sn)))
#define IS_STANCE(ch, sn)	(ch->stance[0] == sn)
#define IS_DEMPOWER(ch, sn)	(IS_SET((ch)->pcdata->powers[DPOWER_FLAGS], (sn)))
#define IS_DEMAFF(ch, sn)	(IS_SET((ch)->pcdata->powers[DPOWER_CURRENT], (sn)))
#define IS_MPOWER(ch, sn)	(IS_SET((ch)->pcdata->powers[MPOWER_POWER], (sn)))
#define IS_PPOWER(ch, sn)	(IS_SET((ch)->pcdata->powers[PPOWER_FLAGS], (sn)))  /* Paladin - Loki */
#define IS_PAFF(ch, sn)	(IS_SET((ch)->pcdata->powers[PPOWER_CURRENT], (sn)))   /* Paladin - Loki */
#define IS_CLASS(ch, CLASS)	(IS_SET((ch)->class, CLASS))

#define IS_HEAD(ch, sn)		(IS_SET((ch)->loc_hp[0], (sn)))
#define IS_BODY(ch, sn)		(IS_SET((ch)->loc_hp[1], (sn)))
#define IS_ARM_L(ch, sn)	(IS_SET((ch)->loc_hp[2], (sn)))
#define IS_ARM_R(ch, sn)	(IS_SET((ch)->loc_hp[3], (sn)))
#define IS_LEG_L(ch, sn)	(IS_SET((ch)->loc_hp[4], (sn)))
#define IS_LEG_R(ch, sn)	(IS_SET((ch)->loc_hp[5], (sn)))
#define IS_BLEEDING(ch, sn)	(IS_SET((ch)->loc_hp[6], (sn)))

#define IN_CLAN( ch )           (IS_NPC(ch)?0:ch->clan)
#define IS_PLAYING( d )         (d->connected==CON_PLAYING)

#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 PC(ch,field)            ((ch)->pcdata->field)	/* OLC */
#define GET_PC(ch,field,nopc)   ((ch->pcdata != NULL ? ch->pcdata->field    \
                                                     : (nopc)) )	/* OLC */
#define GET_AC(ch)		((ch)->armor				    \
				    + ( IS_AWAKE(ch)			    \
				    ? dex_app[get_curr_dex(ch)].defensive   \
				    : 0 ))
#define GET_HITROLL(ch)		((ch)->hitroll+ \
			  (get_curr_str(ch) > 25) ? get_curr_str(ch)/2 : \
					str_app[get_curr_str(ch)].tohit)
#define GET_DAMROLL(ch)		((ch)->damroll+ \
			(get_curr_str(ch) > 25) ? get_curr_str(ch)/2 : \
				str_app[get_curr_str(ch)].todam)

#define IS_OUTSIDE(ch)		(!IS_SET(				    \
				    (ch)->in_room->room_flags,		    \
				    ROOM_INDOORS) \
				 || ch->in_room->sector_type !=SECT_INSIDE )

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

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

/*
 * 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)))
#define IS_ARTIFACT( obj )      (IS_SET((obj)->quest, QUEST_ARTIFACT) )


/*
 * Description macros.
 */
#define PERS(ch, looker)  ( can_see( (looker), (ch) ) ?		\
				( IS_NPC(ch) ? (ch)->short_descr	\
				: ( IS_AFFECTED( (ch), AFF_POLYMORPH) ?   \
				(ch)->morph : (ch)->name ) )		\
				: ( IS_IMMORTAL(ch) ? "An Immortal" :  \
				     "Someone" ) )

#define CPERS( ch, vch )        ( can_see( (vch), (ch) ) ?               \
				  ( IS_NPC(ch) ? STR(ch,short_descr)     \
			          : capitalize( (ch)->name ) )           \
				: ( IS_IMMORTAL(ch) ? "An Immortal"      \
				  :  "Someone" )

#define PERSO(obj, looker)      ( can_see_obj(looker, obj) ? STR(obj,short_descr) : "something" )
#define NAME( ch )              ( IS_NPC(ch) ? STR(ch, short_descr) : ch->name )

#define HE_SHE(ch)           (((ch)->sex == SEX_MALE  ) ? "he"   :  \
                           (  ((ch)->sex == SEX_FEMALE) ? "she"  : "it" ))
#define HIS_HER(ch)          (((ch)->sex == SEX_MALE  ) ? "his"  :  \
                           (  ((ch)->sex == SEX_FEMALE) ? "her"  : "its" ))
#define HIM_HER(ch)          (((ch)->sex == SEX_MALE  ) ? "him"  :  \
                           (  ((ch)->sex == SEX_FEMALE) ? "her"  : "it" ))
#define MAL_FEM(ch)          (((ch)->sex == SEX_MALE  ) ? "male"  :  \
                           (  ((ch)->sex == SEX_FEMALE) ? "female"  : "something" ) )

#define STRING_HITS(ch)         (percent_hit[ URANGE(0, \
                                     PERCENTAGE((ch)->hit, ch->max_hit) \
                                                   ,101)/10 ]  ) \

#define STRING_MOVES(ch)        (percent_tired[ URANGE(0, \
                                     PERCENTAGE((ch)->move, ch->max_move) \
                                                   ,101)/10 ]  )


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



/*
 * Structure for a social in the socials table.
 */
struct	social_type
{
    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;
};


/*
 * Structure for an X-social in the socials table.
 */
struct	xsocial_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;
    sh_int		gender;
    sh_int		stage;
    sh_int		position;
    sh_int		self;
    sh_int		other;
    sh_int              extra;
    bool		chance;
};



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

#ifdef FIRST_BOOT
extern	const	struct	cmd_type	cmd_table	[];
#else
extern          struct  cmd_type      * cmd_table;
#endif
extern  const   struct  wiznet_type     wiznet_table    [];
extern	const	struct	liq_type	liq_table	[LIQ_MAX];
extern	const	struct	skill_type	skill_table	[MAX_SKILL];
extern  const   struct  room_aff_type   room_aff_table  [MAX_ROOM_AFF];
extern  char  * const   percent_hit                     [];

extern		struct	artifact_type	artifact_table	[MAX_ART];

extern          struct  social_type  *  social_table;

extern	const	struct	xsocial_type	xsocial_table	[];
extern  const   char              *     sphere_name     [10];
extern  const   char		  *     dcolor		[10];
extern  const   char		  *     dcolor2		[10];
extern  const   struct  form_type	form_data       [MAX_FORMS];
extern  const   char		  *     transformation_message [7];
extern	const	struct	spec_type	spec_table	[];
extern	char *	const	clan_table	[];		/* List of clans*/
/*
 * Global variables.
 */
extern		HELP_DATA	  *	help_first;
extern		HELP_DATA	  *     help_last;
extern		SHOP_DATA	  *	shop_first;
extern		CLAN_DATA	  *	clan_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		LEADER_DATA	  *     leader[6];
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		ROOMTEXT_DATA     *	roomtext_free;
extern		NOTE_DATA	  *	note_free;
extern		OBJ_DATA	  *	obj_free;
extern		PC_DATA		  *	pcdata_free;
extern		CONFIG_DATA	        sysdata;
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          int			arena;
extern          CLAN_DATA         *     clans_data [MAX_CLAN];

/*
 * online creation externals  OLC
 */
extern          AREA_DATA *             area_first;
extern          AREA_DATA *             area_last;
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                     top_obj_index;
extern          int                     top_reset;
extern          int                     top_room;
extern          int                     top_shop;

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];


//config.c
void save_config args(( void ));

/*
 * Spell functions.
 * Defined in magic.c.
 */
DECLARE_SPELL_FUN(	spell_null		);
DECLARE_SPELL_FUN(      spell_totalblind        );
DECLARE_SPELL_FUN(	spell_spiritkiss	);
DECLARE_SPELL_FUN(	spell_lunasblessing	);
DECLARE_SPELL_FUN(      spell_greaterbless      );
DECLARE_SPELL_FUN(	spell_courage		);
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_darkness		);
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_drowfire	);
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_godbless  );
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_llothbless         );
DECLARE_SPELL_FUN(	spell_lightning_bolt	);
DECLARE_SPELL_FUN(	spell_locate_object	);
DECLARE_SPELL_FUN(	spell_magic_missile	);
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_holyaura          );
DECLARE_SPELL_FUN(	spell_shocking_grasp	);
DECLARE_SPELL_FUN(	spell_shield		);
DECLARE_SPELL_FUN(	spell_legend1		); /* Poseidon's -Dul */
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	);

DECLARE_SPELL_FUN(	spell_guardian		);
DECLARE_SPELL_FUN(	spell_soulblade		);
DECLARE_SPELL_FUN(	spell_mana		);
DECLARE_SPELL_FUN(	spell_frenzy		);
DECLARE_SPELL_FUN(	spell_darkblessing	);
DECLARE_SPELL_FUN(	spell_portal		);
DECLARE_SPELL_FUN(	spell_energyflux	);
DECLARE_SPELL_FUN(	spell_voodoo		);
DECLARE_SPELL_FUN(	spell_transport		);
DECLARE_SPELL_FUN(	spell_regenerate	);
DECLARE_SPELL_FUN(	spell_clot		);
DECLARE_SPELL_FUN(	spell_mend		);
DECLARE_SPELL_FUN(	spell_quest		);
DECLARE_SPELL_FUN(	spell_minor_creation	);
DECLARE_SPELL_FUN(	spell_brew		);
DECLARE_SPELL_FUN(	spell_scribe		);
DECLARE_SPELL_FUN(	spell_carve		);
DECLARE_SPELL_FUN(	spell_engrave		);
DECLARE_SPELL_FUN(	spell_bake		);
DECLARE_SPELL_FUN(	spell_mount		);
DECLARE_SPELL_FUN(	spell_scan		);
DECLARE_SPELL_FUN(	spell_repair		);
DECLARE_SPELL_FUN(	spell_spellproof	);
DECLARE_SPELL_FUN(	spell_preserve		);
DECLARE_SPELL_FUN(	spell_major_creation	);
DECLARE_SPELL_FUN(	spell_copy		);
DECLARE_SPELL_FUN(	spell_insert_page	);
DECLARE_SPELL_FUN(	spell_chaos_blast	);
DECLARE_SPELL_FUN(	spell_resistance	);
DECLARE_SPELL_FUN(	spell_web		);
DECLARE_SPELL_FUN(	spell_polymorph		);
DECLARE_SPELL_FUN(	spell_contraception	);
DECLARE_SPELL_FUN(	spell_remove_page	);
DECLARE_SPELL_FUN(	spell_find_familiar	);
DECLARE_SPELL_FUN(	spell_improve		);
DECLARE_SPELL_FUN(	spell_infirmity		);
DECLARE_SPELL_FUN(      spell_meteor_swarm      );
DECLARE_SPELL_FUN(      spell_warmth            );

/*
 * OS-dependent declarations.
 * These are all very standard library functions,
 *   but some systems have incomplete or non-ansi header files.
 */
#if	defined(_AIX)
char *	crypt		args( ( const char *key, const char *salt ) );
#endif

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

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

#if	defined(interactive)
#endif

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

#if	defined(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, ... ) );
#if 	defined(SYSV)
size_t 	fread		args( ( void *ptr, size_t size, size_t n,
				FILE *stream ) );
#else
int	fread		args( ( void *ptr, int size, int n, FILE *stream ) );
#endif
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 BACKUP_DIR      "../player/backupinfo/"
#define NULL_FILE	"proto.are"	/* To reserve one stream	*/
#endif

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

#if defined(unix)
#define PLAYER_DIR	"../player/"	/* Player files			*/
#define SITE_DIR        "../site/"              /* stuff pertaining only locally */
#define NULL_FILE	"/dev/null"	/* To reserve one stream	*/
#endif

#define AREA_LIST	"area.lst"	/* List of areas		*/
#define BUILD_LIST      "build.lst"
#define SOCIAL_FILE     "social.dat"    /* List of Socials  */
#define ART_LIST	"../data/art1.txt"	/* List of artifacts*/
#define BUILD_DIR       "../build/"
#define DATA_DIR        "../data/"
#define HOME_AREA	"../area/homes.are" /* Mages towers, etc        */
#define CLAN_DIR	"../clans/"
#define BACKUP_DIR	"../player/backupinfo/"

#define LOG_OLC         "../data/olclogs.txt"
#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'		*/
#define COPYOVER_FILE   "copyover.txt"  /* For copyover                 */
#define ARTI_FILE       "artifacts.txt" /* for artis tracking           */
#define EXE_FILE        "../src/merc"
#define MAIN_PORT       1234
#define BAN_FILE        "../area/ban.txt"      /* For perm banned sites */
#define QUEST_FILE      "quest.dat"     /* For quest items */
#define PROJECTS_FILE   "projects.lst"
#define BAN_LIST        "bans.lst"
#define DISABLED_FILE   "disabled.txt"  /* disabled commands */
#define CLAN_LIST       "clans.lst"
#define CLAN_FILE       "clans.txt"

/*
 * 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
#define CLD     CLAN_DATA

void    mage_damage 	args( (CHAR_DATA *ch, CHAR_DATA *victim, int dam, const char *message, int type ) );

/* 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 ) );
void	room_text	args( ( CHAR_DATA *ch, char *argument ) );
char    *strlower       args( ( char * ip ) );
void	excessive_cpu	args( ( int blx ) );
bool	check_parse_name args( ( char *name ) );
void    wiznetf         args( ( CHAR_DATA *ch, int chan, int level,
			        const char *fmt, ... ) );
void    wiznet          args( ( CHAR_DATA *ch, int chan, int level,
			        const char *string ) );
void fire_effect  args(( void *vo, int level, int dam, int target));

/* tracker.c */
int	get_hours_played	args ( (CHAR_DATA *ch) );
void ltf(char *txt, char *file, bool send);

/* arena.c */

void    undo_arena	args( ( CHAR_DATA *ch ) );
void    clean_arena	args( ( CHAR_DATA *loser, CHAR_DATA *winner ) );
bool    is_inarena	args( ( CHAR_DATA *ch, CHAR_DATA *vch ) );

/* act_info.c */
void	set_title	args( ( CHAR_DATA *ch, char *title ) );
void    stc	        args( ( const char *txt, CHAR_DATA *ch ) );
void sta args((const char *txt,AREA_DATA *area));
void    cent_to_char    args( ( char *txt, CHAR_DATA *ch ) );
void    banner_to_char  args( ( char *txt, CHAR_DATA *ch ) );
void    banner2_to_char args( ( char *txt, CHAR_DATA *ch ) );
void    tracker_to_char args( ( char *txt, CHAR_DATA *ch ) );
void    divide_to_char  args( ( CHAR_DATA *ch ) );
void    divide2_to_char args( ( CHAR_DATA *ch ) );
void    divide3_to_char args( ( CHAR_DATA *ch ) );
void    divide4_to_char args( ( CHAR_DATA *ch ) );
void    divide5_to_char args( ( CHAR_DATA *ch ) );
void    divide6_to_char args( ( CHAR_DATA *ch ) );
void	show_list_to_char	args( ( OBJ_DATA *list, CHAR_DATA *ch,
				    bool fShort, bool fShowNothing ) );
int	char_hitroll	args( ( CHAR_DATA *ch ) );
int	char_damroll	args( ( CHAR_DATA *ch ) );
int	char_ac		args( ( CHAR_DATA *ch ) );

/* act_move.c */
void	move_char	args( ( CHAR_DATA *ch, int door ) );
void	open_lift	args( ( CHAR_DATA *ch ) );
void	close_lift	args( ( CHAR_DATA *ch ) );
void	move_lift	args( ( CHAR_DATA *ch, int to_room ) );
void	move_door	args( ( CHAR_DATA *ch ) );
void	thru_door	args( ( CHAR_DATA *ch, int doorexit ) );
void	open_door	args( ( CHAR_DATA *ch, bool be_open ) );
bool	is_open		args( ( CHAR_DATA *ch ) );
bool	same_floor	args( ( CHAR_DATA *ch, int cmp_room ) );
void	check_hunt	args( ( CHAR_DATA *ch ) );

/* act_obj.c */
bool	is_ok_to_wear	args( ( CHAR_DATA *ch, bool wolf_ok, char *argument ) );
void	quest_object	args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool	remove_obj	args( ( CHAR_DATA *ch, int iWear, bool fReplace ) );
void	wear_obj	args( ( CHAR_DATA *ch, OBJ_DATA *obj, bool fReplace ) );

/* act_wiz.c */
void	bind_char	args( ( CHAR_DATA *ch ) );
void	logchan		args( ( char *argument ) );
void	sysmes		args( ( char *argument ) );
ROOM_INDEX_DATA *find_location( CHAR_DATA *ch, char *arg );	/* OLC */
void	call_all	args((CHAR_DATA *ch));

/* config.c */
void    initialise_config args( ( void ) );

/* comm.c */
void	close_socket	args( ( DESCRIPTOR_DATA *dclose ) );

//void	close_socket2	args( ( DESCRIPTOR_DATA *dclose, bool kickoff ) );
void	close_socket2	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	page_to_char	args( ( const char *txt, CHAR_DATA *ch ) );
void    ch_printf       args( ( CHAR_DATA *ch, char *fmt, ... ) );
void    pager_printf    args( ( CHAR_DATA *ch, char *fmt, ... ) );
void	send_to_all_char args( ( const char *text ) );
void    send_to_room    args( ( const char *msg, RID * room ) );
void    send_to_desc    args( ( const char *txt, DESCRIPTOR_DATA *d ) );
#define ptc             page_to_char
void	act		args( ( const char *format, CHAR_DATA *ch,
			    const void *arg1, const void *arg2, int type ) );
void	act2		args( ( const char *format, CHAR_DATA *ch,
			    const void *arg1, const void *arg2, int type ) );
void	act3		args( ( const char *format, CHAR_DATA *ch,
			    const void *arg1, const void *arg2, int type, int min_pos ) );
void	kavitem		args( ( const char *format, CHAR_DATA *ch,
			    const void *arg1, const void *arg2, int type ) );


/* dragon.c */
char  * dragon_colour	      args( ( sh_int dragtype ) );
void    add_dragon_bonuses    args( ( CHAR_DATA *ch ) );
void    remove_dragon_bonuses args( ( CHAR_DATA *ch ) );
void    set_dragon_form	      args( ( CHAR_DATA *ch ) );
void    remove_dragon_form    args( ( CHAR_DATA *ch ) );


// Color stuff
int     colour	        args( ( char type, CHAR_DATA *ch, char *string ) );
void    colourconv      args( ( char *buffer, const char *txt , CHAR_DATA *ch ) );
bool    write_to_descriptor     args( ( int desc, char *txt, int length ) );
void    init_descriptor args( ( DESCRIPTOR_DATA *dnew, int desc ) );

/* db.c */
void	boot_db		args( ( bool fCopyOver ) );
void	reset_area      args( ( AREA_DATA * pArea ) );		/* OLC */
bool	reset_room	args( ( ROOM_INDEX_DATA *pRoom ) );	/* OLC */
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, bool quiet ) );
char *	get_extra_descr	args( ( const char *name, EXTRA_DESCR_DATA *ed ) );
char *	get_roomtext	args( ( const char *name, ROOMTEXT_DATA    *rt ) );
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    log_clan        args( ( const char *str ) );
void	tail_chain	args( ( void ) );
void	reset_area      args( ( AREA_DATA * pArea ) );	/* OLC */
void	logf	        args( ( CHAR_DATA *ch, char *fmt, ... ) );
void	bugf	        args( ( char *fmt, ... ) );
void    logfl           args( ( const char *fname, char * fmt, ... ) );
void    show_file       args( ( CHAR_DATA *ch, char *filename ) );
void    load_disabled   args( ( void ) );
void    save_disabled   args( ( void ) );
void    save_socials    args( ( void ) );
void    load_socials    args( ( void ) );
void    save_sysdata    args( ( CONFIG_DATA sys ) );
int     add_ban         args( ( CHAR_DATA *ch, char *arg1, char *arg2,
				int time,int type ) );
void    show_bans        args ( ( CHAR_DATA *ch, int type ) );
void    save_banlist     args ( ( void ) );
void    load_banlist     args ( ( void ) );
bool    check_total_bans args ( ( DESCRIPTOR_DATA *d ) );
bool    check_bans       args ( ( CHAR_DATA *ch, int type ) );
CLD  *  new_clan_data    args ( ( void ) );
void    free_clan_data   args ( ( CLAN_DATA *clan ) );
KINGDOM_DATA king_table[MAX_KINGDOM];


/* 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	adv_damage	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam ) );
void	update_pos	args( ( CHAR_DATA *victim ) );
void	stop_fighting	args( ( CHAR_DATA *ch, bool fBoth ) );
void    stop_embrace	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	no_attack	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	is_safe		args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	is_safe_quiet	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void	hurt_person	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam,
   	                        bool agg_dam ) );
int     count_artifacts args( ( CHAR_DATA *ch ) );
bool    has_timer	args( ( CHAR_DATA *ch ) );
void	killperson	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void    death_message   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     get_curr_luk    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 ) );
#define is_full_name is_name
void	affect_to_char	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	affect_remove	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	affect_to_room	args( ( RID *room, ROOM_AFFECT_DATA * raf ) );
void	r_affect_remove	args( ( RID *room, ROOM_AFFECT_DATA * raf ) );
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 ) );
bool	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 ) );
void	unequip_char2	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_obj_quiet args( ( OBJ_DATA *obj ) );
void	extract_char	args( ( CHAR_DATA *ch, bool fPull, bool quiet ) );
CD *	get_char	args( ( CHAR_DATA *ch ) );
CD *	get_char_room	args( ( CHAR_DATA *ch, char *argument ) );
CD *	get_char_world	args( ( CHAR_DATA *ch, char *argument ) );
CD *	get_char_world2	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_in_obj	args( ( CHAR_DATA *ch, char *argument ) );
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_room	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_world	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_world2	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 *	affect_loc_name	args( ( int location ) );
char *	affect_bit_name	args( ( int vector ) );
char *	extra_bit_name	args( ( int extra_flags ) );
void	affect_modify	args( ( CHAR_DATA *ch, AFFECT_DATA *paf, bool fAdd ) );
XBV     fread_bitvector	args( ( FILE *fp ) );
void	fwrite_bitvector args( ( XBV *bits, FILE *fp ) );
char *	print_bitvector	args( ( XBV *bits ) );
char *  strip_colour    args( (  char * txt ) );
bool    is_safe_room    args( ( ROOM_INDEX_DATA *pRoom ) );
#define is_room_safe(room)    is_safe_room( room )
/* 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 ) );
void	stage_update	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int stage ) );
bool    check_social    args( ( CHAR_DATA *ch, char *command,
                            char *argument ) );
/* magic.c */
int     raffect_lookup  args( ( const char *name ) );
int	skill_lookup	args( ( const char *name ) );
int	slot_lookup	args( ( int slot ) );
int	sn_lookup	args( ( int sn ) );
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	enhance_stat	args( ( int sn, int level, CHAR_DATA *ch,
				    CHAR_DATA *victim, int apply_bit,
				    int bonuses, int affect_bit ) );
/* save.c */
void	save_char_obj		args( ( CHAR_DATA *ch ) );
void	save_char_obj_backup	args( ( CHAR_DATA *ch ) );
bool	load_char_obj		args( ( DESCRIPTOR_DATA *d, char *name ) );
bool	load_char_short		args( ( DESCRIPTOR_DATA *d, char *name ) );
unsigned long do_addplayer args (( void ) );

/* special.c */
SF *	spec_lookup	args( ( const char *name ) );
bool    guardian_greet  args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool    guardian_answer args( ( CHAR_DATA *ch, char * arg) );

/* update.c */
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 ) );
void    update_class    args( ( CHAR_DATA *ch ) );

/* auction.c */
void    auction_update  args( ( void ) );
void    auction_channel args( ( char *msg ) );

/* kav_fight.c */
void	special_move	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void    beast_rage      args( ( CHAR_DATA *ch ) );

/* kav_info.c */
void	birth_date	args( ( CHAR_DATA *ch, bool is_self ) );
void	other_age	args( ( CHAR_DATA *ch, int extra, bool is_preg,
				char *argument ) );
int	years_old	args( ( CHAR_DATA *ch ) );
void	centre_text	args( ( char *text, CHAR_DATA *ch ) );
void	page_centre_text args( ( char *text, CHAR_DATA *ch ) );
void    tracker_text    args( ( char *text, CHAR_DATA *ch ) );
void	line2		args( ( CHAR_DATA *ch ) );
void	line		args( ( CHAR_DATA *ch ) );

/* kav_wiz.c */
void oset_affect args( ( CHAR_DATA *ch, OBJ_DATA *obj, int value, int affect, bool is_quest) );

/* clan.c */
void    make_preg       args( ( CHAR_DATA *mother, CHAR_DATA *father ) );
void	werewolf_regen	args( ( CHAR_DATA *ch ) );
void	reg_mend	args( ( CHAR_DATA *ch ) );
void	vamp_rage	args( ( CHAR_DATA *ch ) );
bool	char_exists	args( ( bool backup, char *argument ) );
OD *	get_page	args( ( OBJ_DATA *book, int page_num ) );

/* garou.c */
bool   is_garou		args( ( CHAR_DATA *ch ) );

//vamp.c? some file somewhere?
void	guardian_message args( ( CHAR_DATA *ch ) );

/* string.c */
char *  format_string   args( ( char *oldstring /*, bool fSpace */ ) );	/* OLC */
void	string_edit	args( ( CHAR_DATA *ch, char **pString ) );	/* OLC */
void    string_add      args( ( CHAR_DATA *ch, char *argument ) );	/* OLC */
void    string_append   args( ( CHAR_DATA *ch, char **pString ) );	/* OLC */
char *  first_arg       args( ( char *argument, char *arg_first, bool fCase ) );	/* OLC */
char *	string_replace	args( ( char * orig, char * old, char * new ) );	/* OLC */
char *	string_proper	args( ( char * argument ) );	/* OLC */
char *	string_unpad	args( ( char * argument ) );	/* OLC */
int	arg_count	args( ( char *argument ) );	/* OLC */
char *  smash_article   args( ( char *text ) );
char *  is_are          args( ( char *buf ) );
char *  pluralize       args( ( char *argument ) );
char *  trunc_fit       args( ( char *argument, int length ) );
char *  numberize       args( ( int n ) );
char *  colour_strpad   args( ( char *outstr, const char *str, const int length ) );
char *  kill_colour     args( ( char *outstr, const char *str ) );

void    put_area_vnum           args( ( int vnum ) );

/* bit.c */
char *	room_bit_name		args( ( int room_flags ) );	/* OLC */
int	room_name_bit		args( ( char *buf ) );		/* OLC */
int	sector_number		args( ( char *argument ) );	/* OLC */
char *	sector_name		args( ( int sect ) );		/* OLC */
int	item_name_type		args( ( char *name ) ); 	/* OLC */
char *	item_type_name		args( ( int item_type ) );	/* OLC */
int	extra_name_bit		args( ( char* buf ) );		/* OLC */
char *	extra_bit_name		args( ( int extra_flags ) ); 	/* OLC */
int	wear_name_bit		args( ( char* buf ) );		/* OLC */
char *	wear_bit_name		args( ( int wear ) );		/* OLC */
int	act_name_bit		args( ( char* buf ) );		/* OLC */
int	affect_name_bit		args( ( char* buf ) );		/* OLC */
int	affect_name_loc		args( ( char* name ) );		/* OLC */
int     wear_name_loc   	args( ( char *buf ) );		/* OLC */
char *	wear_loc_name		args( ( int wearloc ) );	/* OLC */
char *	act_bit_name		args( ( int act ) );		/* OLC */
int	get_weapon_type		args( ( char *arg ) );		/* OLC */
char *	get_type_weapon		args( ( int arg ) );		/* OLC */
int	get_container_flags	args( ( char *arg ) );		/* OLC */
char *	get_flags_container	args( ( int arg ) );		/* OLC */
int	get_liquid_type		args( ( char *arg ) );		/* OLC */
char *	get_type_liquid		args( ( int arg ) );		/* OLC */

/* warlock.c */
bool is_mage		args( ( CHAR_DATA *ch ) );
bool is_memb		args( ( CHAR_DATA *ch ) );

/* vic.c */
void reset_weapon   args( (CHAR_DATA *ch, int dtype) );
void reset_spell    args( (CHAR_DATA *ch, int dtype) );

/* act_clan.c */
void	save_clan		args( ( CLAN_DATA *clan ) );
void    save_clan_list          args( ( void ) );
void	clan_update		args( ( void ) );
void	load_clans		args( ( void ) );
void    show_clan       	args( ( CHAR_DATA *ch, CLAN_DATA *clan ) );
void    remove_from_clan	args( ( CHAR_DATA *ch ) );
void    add_to_clan		args( ( CHAR_DATA *ch, CLAN_DATA *clan,
					int rank ) );
CLD  *  get_clan	args( ( const char *name ) );
CLD  *	clan_lookup	args( ( const char *name ) );

/* wizutil.c */
void checkexits args( (ROOM_INDEX_DATA *room, AREA_DATA *pArea, char* buffer) );
void do_rename_obj   args( ( CHAR_DATA *ch, char *argument, char *cmd ) );
#undef	CD
#undef  CLD
#undef	MID
#undef	OD
#undef	OID
#undef	RID
#undef	SF

#define BOLD "#w"
#define NO_COLOR "#n"
#define GREEN "#g"
#define RED "#r"
#define BLUE "#b"

void alter_corpse(OBJ_DATA *obj);
void mageupkeep(CHAR_DATA *ch);
void monkupkeep(CHAR_DATA *ch);
void drowupkeep(CHAR_DATA *ch);
void wwupkeep(CHAR_DATA *ch);

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

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

/*
 * 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 MAX_DIR	6
#define NO_FLAG -99	/* Must not be used in flags or stats. */

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

/*
 * Global variables
 */
extern		AREA_DATA *		area_first;
extern		AREA_DATA *		area_last;
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			top_obj_index;
extern		int			top_reset;
extern		int			top_room;
extern		int			top_shop;

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];

/*
 * OLC Constants
 */
#define MAX_MOB	1		/* Default maximum number for resetting mobs */

/*
 * Utils.
 */
AREA_DATA *	get_vnum_area	args ( ( int vnum ) );
AREA_DATA *	get_area_data	args ( ( int vnum ) );
void		add_reset	args ( ( ROOM_INDEX_DATA *,
					RESET_DATA *, int ) );
bool show_commands		args ( ( CHAR_DATA *ch, char *argument ) );
bool show_help			args ( ( CHAR_DATA *ch, char *argument ) );
void set_editor args ( ( DESCRIPTOR_DATA *, int, void * ) );
bool edit_done  args ( ( CHAR_DATA *ch ) );

RESET_DATA	*new_reset_data		args ( ( void ) );
void		free_reset_data		args ( ( RESET_DATA *pReset ) );


struct spec_type
{
    char     * name;
    SPEC_FUN * spec;
};
#include "commands.h"

struct item_spells
{
    char * name;
    int num;
    char * msg;
};

/*
 * Questing.
 */
#define QUEST_KILL_COMPLETE    -1
#define QUEST_NONE		0
#define QUEST_ITEM		1
#define QUEST_KILL		2

struct quest_data
{
    QUEST_DATA *next;
    int time;
    int reward;
    int type;
    void * target;
};


/*
 * Gem list
 */
struct gem_list_type
{
    char * name;
    char * plural;
};

struct flag_type
{
    char * name;
    int  bit;
    bool settable;
};


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[];
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	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   quest_flags[];
extern const struct flag_type   level_flags[];
extern const struct flag_type   log_flags[];
extern const struct flag_type   newbit_flags[];
extern const struct flag_type   plr_flags[];
extern const struct flag_type   position_flags[];
extern const struct flag_type   world_flags[];
extern const struct flag_type   rt_flags[];
extern const struct flag_type   show_flags[];
extern const struct flag_type   weap_flags[];
extern const struct flag_type   itema_flags[];
extern const struct flag_type   imm_flags[];
/*
 * Command logging types.
 */
#define LOG_NORMAL      0
#define LOG_ALWAYS      1
#define LOG_NEVER       2


struct where_type
{
    char * const name;
    int          place;
    char * const r_name;
};

/*
 * Damage messages
 */
struct damage_message
{
    int max_dam;
    const char *mesg;
};

#include "buffer.h"