toc/
toc/account/a/
toc/area/backup/
toc/area/imc/
toc/caste/
toc/caste/backup/
toc/clans/
toc/classes/
toc/crash/
toc/gods/
toc/guilds/
toc/lname/s/
toc/maps/backup/
toc/player/a/
toc/src/
toc/system/backup/
toc/tableprog/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |   \\._.//   *
 * -----------------------------------------------------------|   (0...0)   *
 * SMAUG 1.4 (C) 1994, 1995, 1996, 1998  by Derek Snider      |    ).:.(    *
 * -----------------------------------------------------------|    {o o}    *
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |   / ' ' \   *
 * Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek,      |~'~.VxvxV.~'~*
 * Tricops and Fireblade                                      |             *
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.     *
 * Win32 port by Nick Gammon                                                *
 * ------------------------------------------------------------------------ *
 *			    Main mud header file			    *
 ****************************************************************************/

#include <stdarg.h>
#include <stdlib.h>
#include <limits.h>
#ifdef MCCP
  #include <zlib.h>
#endif
#ifdef MTRACE
#include <mcheck.h> /* get the mtrace definitions */
#endif

/* Tracker arrangements, for greping code changes fast -- Xerves
 * Tracker1 - Imm Structure Changes
 * Tracker2 - Caste Changes
 */

/* force the who command to require an argument (should use cset) */
/* #define REQWHOARG */
#ifdef WIN32
#include <winsock.h>
#include <sys/types.h>
#pragma warning( disable: 4018 4244 4761)
 /* #define NOCRYPT */
#define index strchr
#define rindex strrchr
#else
#include <unistd.h>
#ifndef SYSV
#include <sys/cdefs.h>
#else
#include <re_comp.h>
#endif
#include <sys/time.h>
#endif

typedef int ch_ret;
typedef int obj_ret;

/*
 * 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 )	ch_ret fun( )
#else
#define args( list )			list
#define DECLARE_DO_FUN( fun )		DO_FUN    fun
#define DECLARE_SPEC_FUN( fun )		SPEC_FUN  fun
#define DECLARE_SPELL_FUN( fun )	SPELL_FUN fun
#endif


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

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

#if	!defined(BERR)
#define BERR	 255
#endif

#if	defined(_AIX)
#if	!defined(const)
#define const
#endif
typedef int sh_int;
typedef int bool;

#define unix
#else
typedef int sh_int;
typedef unsigned char bool;
#endif

/*
 * Structure types.
 */
typedef struct channel_history CHANNEL_HISTORY;
typedef struct affect_data AFFECT_DATA;
typedef struct authorize_data AUTHORIZE_DATA; // Keeps Auth data
typedef struct area_data AREA_DATA;
typedef struct introduction_data INTRO_DATA; //introduction area
typedef struct kingdom_data KINGDOM_DATA;
typedef struct town_data TOWN_DATA;
typedef struct door_list DOOR_LIST;
typedef struct door_data DOOR_DATA;
typedef struct npcrace_data NPCRACE_DATA;
typedef struct quest_mob_data QMOB_DATA;
typedef struct quest_obj_data QOBJ_DATA;
typedef struct quest_data QUEST_DATA;
typedef struct trap_data TRAP_DATA;
typedef struct key_data KEY_DATA;
typedef struct market_data MARKET_DATA;
typedef struct schedule_data SCHEDULE_DATA;
typedef struct training_data TRAINING_DATA;
typedef struct ship_data SHIP_DATA;
typedef struct buy_holdingbin_data BUYKBIN_DATA;
typedef struct buy_kmob_data BUYKMOB_DATA;
typedef struct buy_kobj_data BUYKOBJ_DATA;
typedef struct buy_ktrainer_data BUYKTRAINER_DATA;
typedef struct bought_trainer_data BTRAINER_DATA;
typedef struct wilderblock_data WBLOCK_DATA; //Mob blocks in Wilderness
typedef struct wilderinfo_data WINFO_DATA; //Char/Time info
typedef struct auction_data AUCTION_DATA; /* auction data */
typedef struct watch_data WATCH_DATA;
typedef struct ban_data BAN_DATA;
typedef struct front_data FRONT_DATA; //front node
typedef struct tornado_data TORNADO_DATA;
typedef struct trade_data TRADE_DATA;
typedef struct imbue_data IMBUE_DATA;
typedef struct kingdom_chest_data KCHEST_DATA;
typedef struct wilderness_bin_data BIN_DATA;
typedef struct battle_arena_data BARENA_DATA;
typedef struct gem_data GEM_DATA;
typedef struct box_data BOX_DATA;
typedef struct forge_data FORGE_DATA;
typedef struct depo_ore_data DEPO_ORE_DATA;
typedef struct conquer_data CONQUER_DATA;
typedef struct depo_weapon_data DEPO_WEAPON_DATA;
typedef struct slab_data SLAB_DATA;    
typedef struct char_map_data CMAP_DATA;
typedef struct obj_map_data OMAP_DATA;
typedef struct stable_data STABLE_DATA;
typedef struct extracted_char_data EXTRACT_CHAR_DATA;
typedef struct char_data CHAR_DATA;
typedef struct midata MI_DATA;
typedef struct kingdom_military_list MLIST_DATA;
typedef struct clan_member_list CMEMBER_DATA;
typedef struct kingdom_member_list KMEMBER_DATA;
typedef struct trainer_data TRAINER_DATA;
typedef struct save_arena_data SARENA_DATA;
typedef struct hunt_hate_fear HHF_DATA;
typedef struct aggression_data AGGRO_DATA;
typedef struct mpsleep_data MPSLEEP_DATA;
typedef struct fighting_data FIGHT_DATA;
typedef struct descriptor_data DESCRIPTOR_DATA;
typedef struct account_data ACCOUNT_DATA;
typedef struct account_name ACCOUNT_NAME;
typedef struct exit_data EXIT_DATA;
typedef struct extra_descr_data EXTRA_DESCR_DATA;
typedef struct help_index_data HINDEX_DATA;
typedef struct help_data_pointer HINDEX_POINTER;
typedef struct help_index_pointer HINDEX_IPOINTER;
typedef struct help_index_name HINDEX_NAME;
typedef struct help_data HELP_DATA;
typedef struct menu_data MENU_DATA;
typedef struct mob_index_data MOB_INDEX_DATA;
typedef struct char_morph CHAR_MORPH;
typedef struct morph_data MORPH_DATA;
typedef struct nuisance_data NUISANCE_DATA;
typedef struct note_data NOTE_DATA;
typedef struct comment_data COMMENT_DATA;
typedef struct board_data BOARD_DATA;
typedef struct obj_data OBJ_DATA;
typedef struct obj_index_data OBJ_INDEX_DATA;
typedef struct pc_data PC_DATA;
typedef struct plane_data PLANE_DATA;
typedef struct reset_data RESET_DATA;
typedef struct map_index_data MAP_INDEX_DATA; /* maps */
typedef struct map_data MAP_DATA; /* maps */
typedef struct room_index_data ROOM_INDEX_DATA;
typedef struct shop_data SHOP_DATA;
typedef struct race_type RACE_TYPE;
typedef struct repairshop_data REPAIR_DATA;
typedef struct reserve_data RESERVE_DATA;
typedef struct time_info_data TIME_INFO_DATA;
typedef struct hour_min_sec HOUR_MIN_SEC;
typedef struct clan_data CLAN_DATA;
typedef struct council_data COUNCIL_DATA;
typedef struct tourney_data TOURNEY_DATA;
typedef struct mob_prog_data MPROG_DATA;
typedef struct mob_prog_act_list MPROG_ACT_LIST;
typedef struct editor_data EDITOR_DATA;
typedef struct teleport_data TELEPORT_DATA;
typedef struct timer_data TIMER;
typedef struct godlist_data GOD_DATA;
typedef struct system_data SYSTEM_DATA;
typedef struct smaug_affect SMAUG_AFF;
typedef struct who_data WHO_DATA;
typedef struct skill_type SKILLTYPE;
typedef struct social_type SOCIALTYPE;
typedef struct cmd_type CMDTYPE;
typedef struct killed_data KILLED_DATA;
typedef struct pkilled_data PKILLED_DATA;
typedef struct deity_data DEITY_DATA;
typedef struct wizent WIZENT;
typedef struct ignore_data IGNORE_DATA;
typedef struct immortal_host IMMORTAL_HOST;
typedef struct project_data PROJECT_DATA;
typedef struct extended_bitvector EXT_BV;
typedef struct lcnv_data LCNV_DATA;
typedef struct lang_data LANG_DATA;


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

#define DUR_CONV	23.333333333333333333333333
#define HIDDEN_TILDE	'*'

/* 32bit bitvector defines */
#define BV00		(1 <<  0)
#define BV01		(1 <<  1)
#define BV02		(1 <<  2)
#define BV03		(1 <<  3)
#define BV04		(1 <<  4)
#define BV05		(1 <<  5)
#define BV06		(1 <<  6)
#define BV07		(1 <<  7)
#define BV08		(1 <<  8)
#define BV09		(1 <<  9)
#define BV10		(1 << 10)
#define BV11		(1 << 11)
#define BV12		(1 << 12)
#define BV13		(1 << 13)
#define BV14		(1 << 14)
#define BV15		(1 << 15)
#define BV16		(1 << 16)
#define BV17		(1 << 17)
#define BV18		(1 << 18)
#define BV19		(1 << 19)
#define BV20		(1 << 20)
#define BV21		(1 << 21)
#define BV22		(1 << 22)
#define BV23		(1 << 23)
#define BV24		(1 << 24)
#define BV25		(1 << 25)
#define BV26		(1 << 26)
#define BV27		(1 << 27)
#define BV28		(1 << 28)
#define BV29		(1 << 29)
#define BV30		(1 << 30)
#define BV31		(1 << 31)
/* 32 USED! DO NOT ADD MORE! SB */

/*
 * String and memory management parameters.
 */
#define MAX_KEY_HASH		 2048
#define MAX_STRING_LENGTH	 4096*2 /* buf */
#define MAX_INPUT_LENGTH	 1024*2 /* arg */
#define MAX_INBUF_SIZE		 1024*2
#define MSL                  MAX_STRING_LENGTH
#define MIL                  MAX_INPUT_LENGTH
#define MAX_VNUM                 300000
#define MAX_IMM_VNUM             100000
#define MAX_HPMANA               100000
#define MAX_QUEST_DIFF       13 //Maximum quest difficulty
#define LAST_FILE_SIZE       500  //maximum entries in the last file
#define MAX_LOADED_MOBS      100000 //maximum serials for mobs...if for some reason you have more than 100k, increase in 100k incriments, this
                                    //will increase RAM 12.5K a shot, but force another 100k item loop in db.c, so don't make it too high
#define START_QUEST_VNUM     100000
#define END_QUEST_VNUM       199999
#define START_STATICQUEST_VNUM 200000
#define END_STATICQUEST_VNUM   299999
#define GAME_RESET_VALUE       1 // Set to 1 for reset games, 0 for normal games
          
#define HINDEX_GENERAL_NAME "General"
//Uncomment this below to turn on MXP support for hindex code
#define HINDEX_MXP 
//#define HASHSTR /* use string hashing */

#define	MAX_LAYERS		 8 /* maximum clothing layers */
#define MAX_NEST	       100 /* maximum container nesting */

#define MAX_KILLTRACK		25 /* track mob vnums killed */
#define MAX_PKILLTRACK       10 /* track players who are killed */

#define MAX_QDIFF           13
#define MAX_QDIFF_VALUE     130

/*
 * Game parameters.
 * Increase the max'es if you add more of something.
 * Adjust the pulse numbers to suit yourself.
 */
#define MAX_REXITS		   20 /* Maximum exits allowed in 1 room */
/* Below two are used in the new skill system.  It takes a point ranking and
a mastery ranking.  The higher the better -- Xerves 00*/
#define MAX_SKPOINTS               20
#define MAX_RANKING                6
#define MAX_GROUP                  18 /* The top number of skill groups -- Xerves 1/00 */
#define MAX_SPHERE                 5 //Spheres of Groups
#define MAX_TIER                   5 //Maximum tier, 5 for now
#define MAX_SKILL		  400
#define MAX_NPC_CLASS		   26
#define START_INV_TRAP             10000000 //First uid for inventory traps
/*#define MAX_RACE                 20  Trying to fix a bunch of problems-- Scryn*/
#define MAX_RACE                   6 /* 6 Races now -- Xerves */
#define LAST_H_RACE                     22 //Last humanoid npc race
#define MAX_KINGDOM                20
#define MAX_PEACEVALUE             4
#define MAX_NPCRACE_TABLE      200
#define MAX_LEVEL		   7 /* Tracker1 -- Xerves 4/10/99 */
#define MAX_CLAN		   50
#define MAX_DEITY		   50
#define MAX_TOHITAC        50
#define MAX_CPD			    4 /* Maximum council power level difference */
#define	MAX_HERB		   20
#define	MAX_DISEASE		   20
#define MAX_PERSONAL		    5 /* Maximum personal skills */
#define MAX_WHERE_NAME             29
#define MAX_MOB_COUNT              10
#define TOHIT_SYS          50 //Value that is rolled in the tohit system.  Making this a larger margin will increase hits and
                              //making this smaller will decrease it.  Want to keep this around 30-70 due to how values are
                              //applied from spells/skills
#define MAX_PC_ENDURANCE      74
#define TRAINING_TIME 6480   //6480 - 3 days GT   1.8 Hours RL time Time for 1 session of training time, max on stock is 36

#define LEVEL_PC                   (MAX_LEVEL - 6) //1
#define LEVEL_NPC                  (MAX_LEVEL - 7) //0
#define LEVEL_GUEST                (MAX_LEVEL - 5) //2
#define LEVEL_IMM                  (MAX_LEVEL - 4) //3
#define LEVEL_HI_IMM               (MAX_LEVEL - 3) //4
#define LEVEL_STAFF                (MAX_LEVEL - 2) //5
#define LEVEL_HI_STAFF             (MAX_LEVEL - 1) //6
#define LEVEL_ADMIN                (MAX_LEVEL)     //7
#define LEVEL_IMMORTAL		     (MAX_LEVEL - 5) //2

#define LEVEL_LOG		          LEVEL_STAFF
#define LEVEL_HIGOD		        LEVEL_HI_IMM

/* Caste numbers...Each Set gets 10 */

#define caste_Serf         1
#define caste_Peasant      2
#define caste_Laborer      3
#define caste_Apprentice   4
#define caste_Journeymen   5
#define caste_Master       6
#define caste_Merchant     7
#define caste_Trader       8
#define caste_Businessman  9
#define caste_Mayor       10

#define caste_Page        11
#define caste_Squire      12
#define caste_Knight      13
#define caste_Baronet     14
#define caste_Baron       15
#define caste_Earl        16
#define caste_Viscount    17
#define caste_Count       18
#define caste_Duke        19
#define caste_Marquis     20

#define caste_Vassal      21
#define caste_LordVassal  22
#define caste_Lord        23
#define caste_HiLord      24
#define caste_Captain     25
#define caste_Minister    26
#define caste_Prince      27
#define caste_King        28
#define caste_Avatar      29
#define caste_Legend      30


#define caste_Ascender    31
#define caste_Immortal    32
#define caste_God         33
#define caste_Staff       34
#define caste_Admin       35

#define MAX_CASTE         caste_Admin


/*
 * Include .h section to help break up the mud.h file
 */
#include "color.h"
#include "bank.h"
#include "pfiles.h"
#include "finger.h"
#include "board.h"
#include "alias.h"
#include "slay.h"
#include "overland.h"
#include "dns.h"

#define is_full_name is_name

#define	SECONDS_PER_TICK			 70

#define PULSE_PER_SECOND			  4
#define PULSE_VIOLENCE				  2
#define PULSE_MOBILE				 (4 * PULSE_PER_SECOND)
#define PULSE_TICK		    (SECONDS_PER_TICK * PULSE_PER_SECOND)
#define PULSE_AREA				 (60 * PULSE_PER_SECOND)
#define PULSE_AUCTION				 (20 * PULSE_PER_SECOND)
#define PULSE_WEATHER                 (8 * PULSE_PER_SECOND)
#define PULSE_ARENA                              (60 * PULSE_PER_SECOND)


/*
 * Stuff for area versions --Shaddai
 */
int area_version;

#define HAS_SPELL_INDEX     -1

/*
 * Increment with every major format change.
 */

#define TRAINERLISTVERSION 2
/**************************************
  Version Write History
  1 - Pre SN Fix
  2 - Post SN FIX
 **************************************/ 
 
#define CASTEBUYVERSION 2
/**************************************
  Version Write History
  1 - Pre SN Fix
  2 - Post SN FIX
 **************************************/
 
#define SAVEVERSION	5
/**************************************
  Version Write History
  3 - Stock SMAUG
  4 - Added the aff mods for sanctify, hpgen, etc 
  5 - For gemnum affect to save on fwrite_obj
 **************************************/

#define AREA_VERSION_WRITE 53
/**************************************
  Version Write History
  1 - Stock SMAUG
  11 - Added Cvnum
  12 - Add goldmin goldmax goldlim
       levelmin levelmax
  13 - Added caste slot on mobs/obj to
       see what kinda of mob/obj it is.
  14 - Version write for new room extends
  15 - goldmin, etc changed to m1 to m5
       while m6 was added for this version
  16 - Fields for Mining/etc
  17 - Adding quad (Quadrants) for wilderness
  18 - Added movement save for mobs
  19 - Solan Maps
  20 - Mob Coord Resets
  21 - Obj Coord Resets
  22 - V6 added for levels for all items
  23 - Kingdom variable in the area file
  24 - v7 and v8 added for do_connect -- altered to do_setgem
  25 - Population Variable in Areas
  26 - m7, m8, m9.  Used for variable things
  27 - miflags for mobs
  28 - x,y,map for Areas (weather)
  29 - Element for ch/mob
  30 - v9 added for objects, probably will not use do_connect (altered to do_setgem, WILL be used!)
  31 - v10 added for weapon durability (man it is getting full)
  32 - Spells on weapons (staves)
  33 - Added the Forging Resets
  34 - Added ac back in, kind of need it....
  35 - Fixed Forging REsets
  36 - Tohit values added to mobs
  37 - Agility added to mobs :-)
  38 - Mana nodes
  39 - bless value for weapons
  40 - New Time based Resets added into the reset code (there is no area_version for the serial)
  41 - LastTaxChange for Hometowns (should of done this years ago)
  42 - v11 added for more FUN!!!
  43 - Reset value added for race on an object (G only)
  44 - kpid on areas
  45 - m10-m12 Added, More Kingdom related fun
  46 - v12-v13 Added for Parry on weapons, god I am running out of room, rofl
  47 - A Reset added for new Trap code
  48 - Weight on objects changed to a floating value
  49 - New Sworth Restrictions for Equipment
  50 - New Resist percent values for players/mobs
  51 - New Value for imbueslots
  52 - Damadd for mobs, REALLY need this bad to keep up with damage output
  53 - GEM ID on an affect
  **************************************/
  /*************************************
    Cident values

    1 - Manuel
    2 - Shopkeeper
    3 - Shells Gambler
    4 - Flipcoin Gambler
    5 - Blackjack Gambler
    ***********************************/

/*
 * Command logging types.
 */
typedef enum
{
   LOG_NORMAL, LOG_ALWAYS, LOG_NEVER, LOG_BUILD, LOG_HIGH, LOG_COMM,
   LOG_WARN, LOG_ALL
}
log_types;

/*
 * Return types for move_char, damage, greet_trigger, etc, etc
 * Added by Thoric to get rid of bugs
 */
/* Chewed used for mount food -- Xerves 11/99 */
typedef enum
{
   rNONE, rCHAR_DIED, rVICT_DIED, rBOTH_DIED, rCHAR_QUIT, rVICT_QUIT,
   rBOTH_QUIT, rSPELL_FAILED, rOBJ_SCRAPPED, rOBJ_EATEN, rOBJ_EXPIRED,
   rOBJ_TIMER, rOBJ_SACCED, rOBJ_QUAFFED, rOBJ_USED, rOBJ_EXTRACTED,
   rOBJ_DRUNK, rCHAR_IMMUNE, rVICT_IMMUNE, rCHAR_AND_OBJ_EXTRACTED = 128,
   rERROR, rSTOP = 255, rOBJ_CHEWED
}
ret_types;

/* Echo types for echo_to_all */
#define ECHOTAR_ALL	0
#define ECHOTAR_PC	1
#define ECHOTAR_IMM	2

/* defines for new do_who */
#define WT_MORTAL	0
#define WT_DEADLY	1
#define WT_IMM		2
#define WT_GROUPED	3
#define WT_GROUPWHO	4

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

/*
 * Structure for a morph -- Shaddai
 */
/*
 *  Morph structs.
 */

#define ONLY_PKILL  	1
#define ONLY_PEACEFULL  2

struct char_morph
{
   MORPH_DATA *morph;
   EXT_BV affected_by; /* New affected_by added */
   int immune; /* Immunities added */
   EXT_BV no_affected_by; /* Prevents affects from being added */
   int no_immune; /* Prevents Immunities */
   int no_resistant; /* Prevents resistances */
   int no_suscept; /* Prevents Susceptibilities */
   int resistant; /* Resistances added */
   int suscept; /* Suscepts added */
   int timer; /* How much time is left */
   sh_int ac;
   sh_int blood;
   sh_int cha;
   sh_int con;
   sh_int damroll;
   sh_int dex;
   sh_int dodge;
   sh_int hit;
   sh_int hitroll;
   sh_int inte;
   sh_int lck;
   sh_int mana;
   sh_int move;
   sh_int parry;
   sh_int saving_breath;
   sh_int saving_para_petri;
   sh_int saving_poison_death;
   sh_int saving_spell_staff;
   sh_int saving_wand;
   sh_int str;
   sh_int tumble;
   sh_int wis;
};

struct morph_data
{
   MORPH_DATA *next; /* Next morph file */
   MORPH_DATA *prev; /* Previous morph file */
   char *blood; /* Blood added vamps only */
   char *damroll;
   char *deity;
   char *description;
   char *help; /* What player sees for info on morph */
   char *hit; /* Hitpoints added */
   char *hitroll;
   char *key_words; /* Keywords added to your name */
   char *long_desc; /* New long_desc for player */
   char *mana; /* Mana added not for vamps */
   char *morph_other; /* What others see when you morph */
   char *morph_self; /* What you see when you morph */
   char *move; /* Move added */
   char *name; /* Name used to polymorph into this */
   char *short_desc; /* New short desc for player */
   char *no_skills; /* Prevented Skills */
   char *skills;
   char *unmorph_other; /* What others see when you unmorph */
   char *unmorph_self; /* What you see when you unmorph */
   EXT_BV affected_by; /* New affected_by added */
   int class; /* Classes not allowed to use this */
   int defpos; /* Default position */
   int immune; /* Immunities added */
   EXT_BV no_affected_by; /* Prevents affects from being added */
   int no_immune; /* Prevents Immunities */
   int no_resistant; /* Prevents resistances */
   int no_suscept; /* Prevents Susceptibilities */
   int obj[3]; /* Object needed to morph you */
   int race; /* Races not allowed to use this */
   int resistant; /* Resistances added */
   int suscept; /* Suscepts added */
   int timer; /* Timer for how long it lasts */
   int used; /* How many times has this morph been used */
   int vnum; /* Unique identifier */
   sh_int ac;
   sh_int bloodused; /* Amount of blood morph requires Vamps only */
   sh_int cha; /* Amount Cha gained/Lost */
   sh_int con; /* Amount of Con gained/Lost */
   sh_int dayfrom; /* Starting Day you can morph into this */
   sh_int dayto; /* Ending Day you can morph into this */
   sh_int dex; /* Amount of dex added */
   sh_int dodge; /* Percent of dodge added IE 1 = 1% */
   sh_int favourused; /* Amount of favour to morph */
   sh_int gloryused; /* Amount of glory used to morph */
   sh_int hpused; /* Amount of hps used to morph */
   sh_int inte; /* Amount of Int gained/lost */
   sh_int lck; /* Amount of Lck gained/lost */
   sh_int level; /* Minimum level to use this morph */
   sh_int manaused; /* Amount of mana used to morph */
   sh_int moveused; /* Amount of move used to morph */
   sh_int parry; /* Percent of parry added IE 1 = 1% */
   sh_int pkill; /* Pkill Only, Peacefull Only or Both */
   sh_int saving_breath; /* Below are saving adjusted */
   sh_int saving_para_petri;
   sh_int saving_poison_death;
   sh_int saving_spell_staff;
   sh_int saving_wand;
   sh_int sex; /* The sex that can morph into this */
   sh_int str; /* Amount of str gained lost */
   sh_int timefrom; /* Hour starting you can morph */
   sh_int timeto; /* Hour ending that you can morph */
   sh_int tumble; /* Percent of tumble added IE 1 = 1% */
   sh_int wis; /* Amount of Wis gained/lost */
   bool no_cast; /* Can you cast a spell to morph into it */
   bool objuse[3]; /* Objects needed to morph */
};

/*
 * Tongues / Languages structures
 */

struct lcnv_data
{
   LCNV_DATA *next;
   LCNV_DATA *prev;
   char *old;
   int olen;
   char *new;
   int nlen;
};

struct wilderblock_data
{
   WBLOCK_DATA *next;
   WBLOCK_DATA *prev;
   int stx;
   int sty;
   int endx;
   int endy;
   int map;
   int kills;
   int timecheck;
   WINFO_DATA *first_player;
   WINFO_DATA *last_player;
   int lvl;
};

struct wilderinfo_data
{
   WINFO_DATA *next;
   WINFO_DATA *prev;
   int pid; //Player pid value, to uniquely track players
   int time; //Time last in, so players just cannot walk back/forth to clear out an area.  
};

struct buy_kobj_data
{
   BUYKOBJ_DATA *next;
   BUYKOBJ_DATA *prev;
   int tree;
   int corn;
   int grain;
   int iron;
   int gold;
   int stone;
   int coins;
   int vnum;
   EXT_BV flags;
   int mincaste;
};

typedef enum
{
   KOBJ_HOMETOWN, KOBJ_WILDERNESS, KOBJ_CONTAINER, KOBJ_SIGIL, KOBJ_NOTEBOARD, KOBJ_TOROOM,
   KOBJ_TOCHAR, KOBJ_ADDRESET, KOBJ_BIN, KOBJ_WALLREPAIR
}
kobj_type;

struct bought_trainer_data
{
   BTRAINER_DATA *next;
   BTRAINER_DATA *prev;
   int rvnum;
   int x;
   int y;
   int map;
   int pid;
};

struct buy_ktrainer_data
{
   BUYKTRAINER_DATA *next;
   BUYKTRAINER_DATA *prev;
   int sn[20];
   int mastery[20];
   char *name;
   int pid;
   int cost;
};

struct buy_holdingbin_data
{
   BUYKBIN_DATA *next;
   BUYKBIN_DATA *prev;
   char *name;
   int stone;
   int coins;
   int hold;
   int mincaste;
};

struct buy_kmob_data
{
   BUYKMOB_DATA *next;
   BUYKMOB_DATA *prev;
   int tree;
   int corn;
   int grain;
   int iron;
   int gold;
   int stone;
   int coins;
   int vnum;
   EXT_BV flags;
   int mincaste;
};

typedef enum
{
   KMOB_WILDERNESS, KMOB_MILITARY, KMOB_HOUR, KMOB_4MONTH, KMOB_ADDRESET, KMOB_REPAIR, KMOB_FORGE, KMOB_CLERIC,
   KMOB_WORKER, KMOB_GUARD, KMOB_SOLDIER, KMOB_SCOUT, KMOB_MAGE, KMOB_SOLDIERAGI, KMOB_SOLDIERMOVE, KMOB_SOLDIERDAM,
   KMOB_SOLDIERUNARMED, KMOB_MOUNTED, KMOB_SOLDIERADDAGI, KMOB_SOLDIERADDMOVE, KMOB_SOLDIERONEMOVE,
   KMOB_TOHIT1, KMOB_TOHIT2, KMOB_TOHIT3, KMOB_TOHIT4, KMOB_AC1, KMOB_AC2, KMOB_AC3, KMOB_AC4, KMOB_DAM1,
   KMOB_DAM2, KMOB_DAM3, KMOB_DAM4, KMOB_CURELIGHT, KMOB_CURESERIOUS, KMOB_CURECRITICAL, KMOB_HEAL, KMOB_DIVINITY,
   KMOB_POWERHEAL, KMOB_BLESS, KMOB_ARMOR, KMOB_STONESKIN, KMOB_SANCTIFY, KMOB_FLEETARMS, KMOB_SANCTUARY,
   KMOB_HARM, KMOB_CLERICDAMAGE, KMOB_LEATHERONLY, KMOB_LIGHTONLY, KMOB_MEDIUMONLY, KMOB_SHIELD, KMOB_KINDRED,
   KMOB_SLINK, KMOB_FIRESHIELD, KMOB_ICESHIELD, KMOB_SHOCKSHIELD, KMOB_ANTIMAGICSHELL, KMOB_MAGEDAMAGE1,
   KMOB_MAGEDAMAGE2, KMOB_MAGEDAMAGE3, KMOB_MAGEDAMAGE4, KMOB_ARCHER
   
}
kmob_type;

struct conquer_data
{
   CONQUER_DATA *next;
   CONQUER_DATA *prev;
   int time;
   int akingdom;
   int rkingdom;
   TOWN_DATA *town;
   char *ntown;
   int occupied;
};

struct door_list  //really don't need this, but I will leave it in.....
{
   DOOR_LIST *next;
   DOOR_LIST *prev;
   DOOR_DATA *first_door;
   DOOR_DATA *last_door;
};

//Note:  There is a 30 point hardcount per room, if you wish to change this, change these
//values int roomcoordx[30]  int roomcoordy[30]   int roomcoordmap[30] in mud.h to whatever
//value you want, and make sure to change it below to search more than 30.  Also, don't
//set it higher than you need, it is to keep players from screwing things up
#define MAX_HPOINTS 30

struct key_data
{
   KEY_DATA *next;
   KEY_DATA *prev;
   int flag;
   char *name;
};

struct door_data
{
   DOOR_DATA *next;
   DOOR_DATA *prev;
   int doorvalue[10]; //max of 10 doors
   int roomcoordx[30]; //30 rooms max per "room"
   int roomcoordy[30];
   int roomcoordmap[30];
   int cansee; //0 - can't see  1 - can see
   int cannotsee;
};

struct training_data
{
   TRAINING_DATA *next;
   TRAINING_DATA *prev;
   BUYKMOB_DATA *kmob;
   int speed;
   int kingdom;
   int town;
   int stime;
   int etime;
   int x;
   int y;
   int map;
   int bin;
   int resource;
};

struct schedule_data
{
   SCHEDULE_DATA *next;
   SCHEDULE_DATA *prev;
   int start_period;
   int end_period;
   int resource;
   int reoccur;
   int ran;
   int x;
   int y;
   int map;
};
   


struct town_data
{
   TOWN_DATA *next;
   TOWN_DATA *prev;
   SCHEDULE_DATA *first_schedule;
   SCHEDULE_DATA *last_schedule;
   KEY_DATA *first_key;
   KEY_DATA *last_key;
   char *name;
   char *mayor;
   int kingdom;
   int kpid;
   int tpid;
   int corn;
   int grain;
   int coins;
   int gold;
   int iron;
   int lumber;
   int stone;
   int fish;
   int hold;
   int recall[3];
   int death[3];
   int poptax;
   int ctax;
   int salestax;
   int size;
   int rooms;
   int maxsize;
   int moral;
   int month;
   int growthcheck;
   int growth;
   int startx;
   int starty;
   int units;
   int unitstraining;
   int startmap;
   int foodconsump;
   int stoneconsump;
   int lumberconsump;
   int coinconsump;
   int barracks[3]; //Vnum used to store soldiers
   int roomcoords[151][3]; //x, y, map
   char roomtitles[151][80]; //title
   EXT_BV roomflags[151]; //flags
   int minhappoint;
   int minwithdraw;
   int lasttaxchange;
   int allowexpansions;
   int expansions; //expansions allowed per year
   DOOR_LIST *first_doorlist;
   DOOR_LIST *last_doorlist;
   int doorstate[8][100]; //max 100 doors, 0 - open/close, 1 - locked, 2 - unique key value, 3 - master door, 4 - unique door value
                          //5 - x coord, 6 - y coord, 7 - map coord
   int max_dvalue; //it is possible to have "made" more than 100 doors, just in case they all get destroyed or something...
   int usedpoint[60][60]; //Check to see if a point is already connected to a room, make sure there are no overlaps.
   int bincoords[60][60]; //For bins...
   int banksize; //Adding in banks for towns, allows storage of player gold and other crap
   OBJ_DATA *first_bankobj;
   OBJ_DATA *last_bankobj;
   int balance; //Gold in the bank...
};

struct kingdom_data
{
   TOWN_DATA *first_town;
   TOWN_DATA *last_town;
   char *name;
   char *ruler;
   char *logfile;
   char *dtown;
   char *number1;
   char *number2;
   int num;
   int kpid;
   sh_int tree_tax;
   sh_int corn_tax;
   sh_int grain_tax;
   sh_int iron_tax;
   sh_int gold_tax;
   sh_int stone_tax;
   sh_int fish_tax;
   int salestax;
   int ctax;
   int poptax;
   int minbuild;
   int minplace;
   int minappoint;
   int minhappoint;
   int mintoperate;
   int minwithdraw;
   int mincommand; //Minimum level to command local troops
   int mingeneral; //Minimum level to command all troops
   int minreadlog;
   int mindepository;
   int minlogsettings;
   int mintrainertax;
   int minswitchtown;
   int minbooktax;
   int tier1;
   int tier2;
   int tier3;
   int tier4;
   int tvisitor;
   int tier1book;
   int tier2book;
   int tier3book;
   int tier4book;
   int bvisitor;
   int allowjoin; //Allow players to join?
   sh_int mob_que[26]; //26 ALWAYS needs to be 0
   sh_int obj_que[26]; //26 ALWAYS needs to be 0
   sh_int trainer_que[26]; //26 ALWAYS needs to be 0
   sh_int peace[MAX_KINGDOM]; //At peace/war with other kingdoms?
   sh_int cpeace[MAX_KINGDOM]; //For changing peace with other kingdoms
   int lasttaxchange;
   int race;
   int raceset;
   EXT_BV logsettings; //What things are being logged (flag on means it is not logged)
   DEPO_ORE_DATA *first_ore;
   DEPO_ORE_DATA *last_ore;
   INTRO_DATA *first_introduction;
   INTRO_DATA *last_introduction;
   int lastintrocheck;
   int maxlinelog;
   int maxtimelog;
};

struct trade_data
{
   TRADE_DATA *prev;
   TRADE_DATA *next;
   int offering_kingdom; //kingdom offering (starting) the trade
   int receiving_kingdom; //kingdom receiving the trade
   int offering_res_tree;
   int offering_res_corn;
   int offering_res_grain;
   int offering_res_iron;
   int offering_res_gold;
   int offering_res_stone;
   int offering_res_fish;
   int offering_gold;
   int receiving_res_tree;
   int receiving_res_corn;
   int receiving_res_grain;
   int receiving_res_iron;
   int receiving_res_gold;
   int receiving_res_stone;
   int receiving_res_fish;
   int receiving_gold;
   int offering_read;   //marks the deal as read, so kingdoms know they have received trade offers/counter offers
   int receiving_read;  //marks the deal as read, so kingdoms know they have received trade offers/counter offers 
   int time;            //time it was posted, trades are removed after so much time has been spent
   int posted;          //rather it has been sent or not.
};

struct lang_data
{
   LANG_DATA *next;
   LANG_DATA *prev;
   char *name;
   LCNV_DATA *first_precnv;
   LCNV_DATA *last_precnv;
   char *alphabet;
   LCNV_DATA *first_cnv;
   LCNV_DATA *last_cnv;
};



/*
 * do_who output structure -- Narn
 */
struct who_data
{
   WHO_DATA *prev;
   WHO_DATA *next;
   char *text;
   int type;
};

/*
 * Player watch data structure  --Gorog
 */
struct watch_data
{
   WATCH_DATA *next;
   WATCH_DATA *prev;
   sh_int imm_level;
   char *imm_name; /* imm doing the watching */
   char *target_name; /* player or command being watched   */
   char *player_site; /* site being watched     */
};

/*
 * Nuisance structure
 */

#define MAX_NUISANCE_STAGE 10 /* How many nuisance stages */
struct nuisance_data
{
   long int time; /* The time nuisance flag was set */
   long int max_time; /* Time for max penalties */
   int flags; /* Stage of nuisance */
   int power; /* Power of nuisance */
};

/*
 * 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 *user; /* Name of user from site */
   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* */
};



/*
 * Yeesh.. remind us of the old MERC ban structure? :)
 */
struct reserve_data
{
   RESERVE_DATA *next;
   RESERVE_DATA *prev;
   char *name;
};



/*
 * Time and weather stuff.
 */
typedef enum
{
   SUN_DARK, SUN_RISE, SUN_LIGHT, SUN_SET
}
sun_positions;

typedef enum
{
   SKY_CLOUDLESS, SKY_CLOUDY, SKY_RAINING, SKY_LIGHTNING
}
sky_conditions;

struct time_info_data
{
   int sunlight;
};

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

/* Define maximum number of climate settings - FB */
#define MAX_CLIMATE 5

/*
 * Structure used to build wizlist
 */
struct wizent
{
   WIZENT *next;
   WIZENT *last;
   char *name;
   sh_int level;
};

/*
 * Structure to only allow immortals domains to access their chars.
 */
struct immortal_host
{
   IMMORTAL_HOST *next;
   IMMORTAL_HOST *prev;
   char *name;
   char *host;
   bool prefix;
   bool suffix;
};

struct authorize_data
{
   AUTHORIZE_DATA *next;
   AUTHORIZE_DATA *prev;
   char *name;
   char *lastname;
   char *authedby;
   char *authdate;
   char *host;
};

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;
   char *rewardee;
   int points;
   int rewardedpoints;
   int time;
   int type;
   bool taken; /* Has someone taken project?      */
};


/*
 * Connected state for a channel.
 */
typedef enum
{
   CON_PLAYING, CON_GET_ACCOUNT, CON_CONFIRM_NEW_ACCOUNT, CON_GET_EMAIL,
   CON_CONFIRM_EMAIL, CON_CONFIRM_ACCOUNT_PASSWORD, CON_SHOW_ACCOUNT_MENU,
   CON_IMPORT_MENU, CON_NEWPASS_MENU, CON_NEWEMAIL_MENU, CON_DELETEACCOUNT_MENU,
   CON_DELETEPLAYER_MENU, CON_RELEASEPLAYER_MENU,
   CON_GET_NAME, CON_CREATE_NAME, CON_LAST_MENU_OPTION, 
   CON_CONFIRM_NEW_NAME, CON_GET_NEW_PASSWORD, CON_CONFIRM_NEW_PASSWORD,
   CON_GET_NEW_SEX, CON_GET_NEW_CLASS, CON_READ_MOTD,
   CON_GET_NEW_RACE, CON_GET_EMULATION, CON_EDITING,
   CON_GET_WANT_RIPANSI, CON_TITLE, CON_PRESS_ENTER,
   CON_WAIT_1, CON_WAIT_2, CON_WAIT_3,
   CON_ACCEPTED, CON_GET_PKILL, CON_READ_IMOTD,
   CON_GET_HOMETOWN, CON_BEGIN_REMORT,
   CON_ROLL_STATS, CON_GET_ALIGNMENT, CON_NOTE_TO,
   CON_NOTE_SUBJECT, CON_NOTE_EXPIRE, CON_NOTE_FINISH,
   CON_LOGIN_MENU, CON_FIRST_SCREEN, CON_FIRST_SKILLS,
   CON_COPYOVER_RECOVER, CON_GETDNS, CON_HAND, CON_ELEMENT, CON_SOURCE,
   CON_SKIN, CON_HAIRCOLOR, CON_HAIRLENGTH, CON_HAIRSTYLE, CON_EYECOLOR,
   CON_HEIGHT, CON_WEIGHT, CON_GET_LAST_NAME, CON_CONFIRM_LAST_NAME,
   CON_BYPASS_LOGIN, CON_CHANGE_EDIT_STATUS, CON_CHOOSE_EMAIL,
   CON_CHANGE_EMAILSTATUS, CON_USE_RESET_CHAR
}
connection_types;

/*
 * Character substates
 */
typedef enum
{
   SUB_NONE, SUB_PAUSE, SUB_PERSONAL_DESC, SUB_BAN_DESC, SUB_OBJ_SHORT,
   SUB_OBJ_LONG, SUB_OBJ_EXTRA, SUB_MOB_LONG, SUB_MOB_DESC, SUB_ROOM_DESC,
   SUB_ROOM_EXTRA, SUB_ROOM_EXIT_DESC, SUB_WRITING_NOTE, SUB_MPROG_EDIT,
   SUB_HELP_EDIT, SUB_WRITING_MAP, SUB_PERSONAL_BIO, SUB_REPEATCMD,
   SUB_RESTRICTED, SUB_DEITYDESC, SUB_MORPH_DESC, SUB_MORPH_HELP,
   SUB_PROJ_DESC, SUB_SLAYCMSG, SUB_SLAYVMSG, SUB_SLAYRMSG, SUB_WRITING_EMAIL,
   SUB_CHANGES,
   /* timer types ONLY below this point */
   SUB_TIMER_DO_ABORT = 128, SUB_TIMER_CANT_ABORT
}
char_substates;

struct account_name
{
   ACCOUNT_NAME *next;
   ACCOUNT_NAME *prev;
   char *name;
};

#define ABAN_BAN 1
#define ABAN_ALLOW 0

struct account_data
{
   ACCOUNT_NAME *first_player;
   ACCOUNT_NAME *last_player;
   int editing;
   int changes; //changes you made in the last hour...
   int lasttimereset; //Last time reset on an account...
   int timesave;
   int ban;
   int skiplmenu;
   int noemail;
   char *name;
   char *passwd;
   char *email;
   char *qplayer1;
   char *qplayer2;
   char *qplayer3;
   char *qplayer4;
   //Hrm it kind of hit me I need these 4 on the accounts so they don't get written over by another account
   int passvalue;
   char *pbuffer;
   char pbuf[150];
   char nbuf[100];
};

/*
 * Descriptor (channel) structure.
 */
struct descriptor_data
{
   DESCRIPTOR_DATA *next;
   DESCRIPTOR_DATA *prev;
   DESCRIPTOR_DATA *snoop_by;
   CHAR_DATA *character;
   CHAR_DATA *original;
   ACCOUNT_DATA *account;
   SARENA_DATA *arena;
#ifndef   DNS_SLAVE
   char *host;
#endif
   int port;
   int descriptor;
   sh_int connected;
   sh_int idle;
   sh_int lines;
   sh_int scrlen;
   sh_int  mxp;
   char *mxpclient;
   float mxpversion;
   bool fcommand;
   char inbuf[MAX_INBUF_SIZE];
   char incomm[MAX_INPUT_LENGTH];
   char inlast[MAX_INPUT_LENGTH];
   int repeat;
   char *outbuf;
   unsigned long outsize;
   int outtop;
   char *pagebuf;
   unsigned long pagesize;
   int pagetop;
   char *pagepoint;
   char pagecmd;
   char pagecolor;
   char *user;
   int newstate;
   unsigned char prevcolor;
   #ifdef MCCP
    unsigned char	compressing;
    z_stream *          out_compress;
    unsigned char *     out_compress_buf;
   #endif     
   char *run_buf;
   char *run_head;
   sh_int speed; /* descriptor speed settings */
#ifdef DNS_SLAVE
   int wait; /*wait for how many loops */
   long site_info;
   char host[60];
   u_long addr;
   time_t contime;
#endif
   int ifd;
   pid_t ipid;
};

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

struct int_app_type
{
   sh_int learn;
   sh_int lore; /* Lore Int bonus */
};

struct wis_app_type
{
   sh_int practice;
   sh_int lore;
};

struct dex_app_type
{
   sh_int defensive;
};

struct con_app_type
{
   sh_int hitp;
   sh_int shock;
};

struct cha_app_type
{
   sh_int charm;
};

struct lck_app_type
{
   sh_int luck;
};

/* the races */
typedef enum
{
   RACE_HUMAN, RACE_ELF, RACE_DWARF, RACE_OGRE, RACE_HOBBIT, RACE_FAIRY, MAX_PC_RACE
}
race_types;

/* npc races */
#define	RACE_DRAGON	    31

/*
 * Languages -- Altrag
 */
#define LANG_COMMON      BV00 /* Human base language */
#define LANG_ELVEN       BV01 /* Elven base language */
#define LANG_DWARVEN     BV02 /* Dwarven base language */
#define LANG_OGRE        BV03 /* Ogre base language */
#define LANG_HOBBIT      BV04 /* Hobbit language */
#define LANG_FAIRY       BV05 /* Fairy language */
#define LANG_TROLLISH    BV06 /* Troll base language */
#define LANG_RODENT      BV07 /* Small mammals */
#define LANG_INSECTOID   BV08 /* Insects */
#define LANG_MAMMAL      BV09 /* Larger mammals */
#define LANG_REPTILE     BV10 /* Small reptiles */
#define LANG_DRAGON      BV11 /* Large reptiles, Dragons */
#define LANG_SPIRITUAL   BV12 /* Necromancers or undeads/spectres */
#define LANG_MAGICAL     BV13 /* Spells maybe?  Magical creatures */
#define LANG_GOBLIN      BV14 /* Goblin base language */
#define LANG_GOD         BV15 /* Clerics possibly?  God creatures */
#define LANG_ANCIENT     BV16 /* Prelude to a glyph read skill? */
#define LANG_HALFLING    BV17 /* Halfling base language */
#define LANG_CLAN	    BV18 /* Clan language */
#define LANG_GITH	    BV19 /* Gith Language */
#define LANG_UNKNOWN        0 /* Anything that doesnt fit a category */
#define VALID_LANGS    ( LANG_COMMON | LANG_ELVEN | LANG_DWARVEN | LANG_HOBBIT  \
		       | LANG_OGRE | LANG_FAIRY  )
/* 18 Languages */

/*
 * TO types for act.
 */
/* CAUTION!!!  Using allmud on anything else in the code might cause crashes or
   problems, consult Xerves before using -- XERVES */
typedef enum
{ TO_ROOM, TO_NOTVICT, TO_VICT, TO_CHAR, TO_CANSEE, TO_MUD, TO_ALLMUD, TO_FIGHT }
to_types;

/*
 * Real action "TYPES" for act.
 */
/*
#define AT_BLACK	    0
#define AT_BLOOD	    1
#define AT_DGREEN           2
#define AT_ORANGE	    3
#define AT_DBLUE	    4
#define AT_PURPLE	    5
#define AT_CYAN	  	    6
#define AT_GREY		    7
#define AT_DGREY	    8
#define AT_RED		    9
#define AT_GREEN	   10
#define AT_YELLOW	   11
#define AT_BLUE		   12
#define AT_PINK		   13
#define AT_LBLUE	   14
#define AT_WHITE	   15
#define AT_BLINK	   16
#define AT_PLAIN	   AT_GREY
#define AT_ACTION	   AT_GREY
#define AT_SAY		   AT_LBLUE
#define AT_GOSSIP	   AT_LBLUE
#define AT_YELL	           AT_GREEN
#define AT_TELL		   AT_WHITE
#define AT_WHISPER	   AT_YELLOW
#define AT_HIT		   AT_WHITE
#define AT_HITME	   AT_LBLUE
#define AT_IMMORT	   AT_YELLOW
#define AT_HURT		   AT_RED
#define AT_FALLING	   AT_WHITE + AT_BLINK
#define AT_DANGER	   AT_RED + AT_BLINK
#define AT_MAGIC	   AT_BLUE
#define AT_CONSIDER	   AT_GREY
#define AT_REPORT	   AT_GREY
#define AT_POISON	   AT_GREEN
#define AT_SOCIAL	   AT_CYAN
#define AT_DYING	   AT_YELLOW
#define AT_DEAD		   AT_RED
#define AT_SKILL	   AT_GREEN
#define AT_CARNAGE	   AT_BLOOD
#define AT_DAMAGE	   AT_WHITE
#define AT_FLEE		   AT_YELLOW
#define AT_RMNAME	   AT_WHITE
#define AT_RMDESC	   AT_LBLUE
#define AT_OBJECT	   AT_GREEN
#define AT_PERSON	   AT_PINK
#define AT_LIST		   AT_BLUE
#define AT_BYE		   AT_GREEN
#define AT_GOLD		   AT_YELLOW
#define AT_GTELL	   AT_BLUE
#define AT_NOTE		   AT_GREEN
#define AT_HUNGRY	   AT_ORANGE
#define AT_THIRSTY	   AT_BLUE
#define	AT_FIRE		   AT_RED
#define AT_SOBER	   AT_WHITE
#define AT_WEAROFF	   AT_YELLOW
#define AT_EXITS	   AT_WHITE
#define AT_SCORE	   AT_LBLUE
#define AT_RESET	   AT_DGREEN
#define AT_LOG		   AT_PURPLE
#define AT_DIEMSG	   AT_WHITE
#define AT_WARTALK         AT_RED
#define AT_RACETALK	   AT_DGREEN
#define AT_IGNORE	   AT_GREEN
#define AT_DIVIDER	   AT_PLAIN
#define AT_MORPH           AT_GREY
*/

#define INIT_ARMOR_CONDITION     1000
#define MAX_ITEM_IMPACT		 30

/*
 * Help Index Table
 */
struct help_index_data
{
   char *keyword;
   HINDEX_DATA *next; //Next index
   HINDEX_DATA *prev; //Prev index
   HINDEX_DATA *fnext; //next flat index
   HINDEX_DATA *fprev; //prev flat index
   HINDEX_DATA *tnext; //Next index at the top level
   HINDEX_DATA *tprev; //Prev index at the top level
   HINDEX_DATA *first_hindex; //First index below this one
   HINDEX_DATA *last_hindex; //Last index below this one
   HINDEX_DATA *first_top_hindex; //First index above this one
   HINDEX_DATA *last_top_hindex; //Last index below this one
   HINDEX_IPOINTER *first_help;  //First helpfile in this index
   HINDEX_IPOINTER *last_help;  //Last helpfile in this index
};

//Points back to help index data since I need to store this data on every helpfile....
struct help_data_pointer
{
   HINDEX_POINTER *next;
   HINDEX_POINTER *prev;
   HINDEX_DATA *pointer;
};

//Points back to the help data since I need to store this data on every index....
struct help_index_pointer
{
   HINDEX_IPOINTER *next;
   HINDEX_IPOINTER *prev;
   HELP_DATA *pointer;
};

//Used to store the actual groups on a helpfile since it is really hard to track them back...
struct help_index_name
{
    HINDEX_NAME *next;
    HINDEX_NAME *prev;
    char *name;
};

/*
 * Help table types.
 */
struct help_data
{
   HELP_DATA *next;
   HELP_DATA *prev;
   HINDEX_POINTER *first_hindex; //First index structure helpfile is in
   HINDEX_POINTER *last_hindex; //Last index structure helpfile is in
   sh_int level;
   char *keyword;
   HINDEX_NAME *first_iname;
   HINDEX_NAME *last_iname;
   char *text;
};



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

struct shop_data
{
   SHOP_DATA *next; /* Next shop in list  */
   SHOP_DATA *prev; /* Previous shop in list */
   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  */
};

#define MAX_FIX		3
#define SHOP_FIX	1
#define SHOP_RECHARGE	2

struct repairshop_data
{
   REPAIR_DATA *next; /* Next shop in list  */
   REPAIR_DATA *prev; /* Previous shop in list */
   int keeper; /* Vnum of shop keeper mob */
   sh_int fix_type[MAX_FIX]; /* Item types shop will fix */
   sh_int profit_fix; /* Cost multiplier for fixing */
   sh_int shop_type; /* Repair shop type  */
   sh_int open_hour; /* First opening hour  */
   sh_int close_hour; /* First closing hour  */
};


/* Mob program structures */
/* Mob program structures and defines */
/* Moved these defines here from mud_prog.c as I need them -rkb */
#define MAX_IFS 20 /* should always be generous */
#define IN_IF 0
#define IN_ELSE 1
#define DO_IF 2
#define DO_ELSE 3

#define MAX_PROG_NEST 20

struct act_prog_data
{
   struct act_prog_data *next;
   void *vo;
};

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

struct mob_prog_data
{
   MPROG_DATA *next;
   sh_int type;
   bool triggered;
   int resetdelay;
   char *arglist;
   char *comlist;
};

/* Used to store sleeping mud progs. -rkb */
typedef enum
{ MP_MOB, MP_ROOM, MP_OBJ }
mp_types;
struct mpsleep_data
{
   MPSLEEP_DATA *next;
   MPSLEEP_DATA *prev;

   int timer; /* Pulses to sleep */
   mp_types type; /* Mob, Room or Obj prog */
   ROOM_INDEX_DATA *room; /* Room when type is MP_ROOM */

   /* mprog_driver state variables */
   int ignorelevel;
   int iflevel;
   bool ifstate[MAX_IFS][DO_ELSE + 1]; //bug fix 

   /* mprog_driver arguments */
   char *com_list;
   CHAR_DATA *mob;
   CHAR_DATA *actor;
   OBJ_DATA *obj;
   void *vo;
   bool single_step;
};

bool MOBtrigger;

/*
 * Per-class stuff.
 */
struct class_type
{
   char *who_name; /* Name for 'who'  */
   sh_int attr_prime; /* Prime attribute  */
   int weapon; /* First weapon   */
   int guild; /* Vnum of guild room  */
   sh_int thac0_00; /* Thac0 for level  0  */
   sh_int thac0_32; /* Thac0 for level 32  */
   sh_int hp_min; /* Min hp gained on leveling */
   sh_int hp_max; /* Max hp gained on leveling */
   bool fMana; /* Class gains mana on level */
   int exp_base; /* Class base exp  */
   bool remort_class;
};

/* race dedicated stuff */
struct race_type
{
   char race_name[16]; /* Race name   */
   EXT_BV affected; /* Default affect bitvectors */
   sh_int str_plus; /* Str bonus/penalty  */
   sh_int dex_plus; /* Dex      "   */
   sh_int wis_plus; /* Wis      "   */
   sh_int int_plus; /* Int      "   */
   sh_int con_plus; /* Con      "   */
   sh_int cha_plus; /* Cha      "   */
   sh_int lck_plus; /* Lck      "   */
   sh_int agi_plus; // Agi      "
   sh_int agi_start; // Agi Start
   sh_int agi_range; // Range of values + and - for agility
   sh_int str_range; // Range of values + and - for str
   sh_int dex_range; // Range of values + and - for dex
   sh_int int_range; // Range of values + and - for int
   sh_int wis_range; // Range of values + and - for wis
   sh_int con_range; // Range of values + and - for con
   sh_int hit;
   sh_int mana;
   int resist;
   int suscept;
   int class_restriction; /* Flags for illegal classes */
   int language; /* Default racial language      */
   sh_int ac_plus;
   sh_int alignment;
   EXT_BV attacks;
   EXT_BV defenses;
   sh_int minalign;
   sh_int maxalign;
   sh_int exp_multiplier;
   sh_int height;
   sh_int weight;
   sh_int weaponmin; /* Weapon size Min -- Xerves */
   sh_int weaponstd; /* Weapon size Standard (not Used) -- Xerves */
   sh_int weaponmax; /* Weapon sise Max -- Xerves */
   bool remort_race;
   sh_int hunger_mod;
   sh_int thirst_mod;
   sh_int saving_poison_death;
   sh_int saving_wand;
   sh_int dodge_bonus;
   sh_int saving_para_petri;
   sh_int saving_breath;
   sh_int saving_spell_staff;
   char *where_name[MAX_WHERE_NAME];
   sh_int mana_regen;
   sh_int hp_regen;
   sh_int race_recall;
};

typedef enum
{
   CLAN_PLAIN, CLAN_VAMPIRE, CLAN_WARRIOR, CLAN_DRUID, CLAN_MAGE, CLAN_CELTIC,
   CLAN_THIEF, CLAN_CLERIC, CLAN_UNDEAD, CLAN_CHAOTIC, CLAN_NEUTRAL, CLAN_LAWFUL,
   CLAN_NOKILL, CLAN_ORDER, CLAN_GUILD
}
clan_types;

typedef enum
{
   GROUP_CLAN, GROUP_COUNCIL, GROUP_GUILD
}
group_types;


struct clan_data
{
   CLAN_DATA *next; /* next clan in list   */
   CLAN_DATA *prev; /* previous clan in list  */
   char *filename; /* Clan filename   */
   char *name; /* Clan name    */
   char *motto; /* Clan motto    */
   char *description; /* A brief description of the clan */
   char *deity; /* Clan's deity    */
   char *leader; /* Head clan leader   */
   char *number1; /* First officer   */
   char *number2; /* Second officer   */
   char *badge; /* Clan badge on who/where/to_room      */
   int pkills[7]; /* Number of pkills on behalf of clan */
   int pdeaths[7]; /* Number of pkills against clan */
   int mkills; /* Number of mkills on behalf of clan */
   int mdeaths; /* Number of clan deaths due to mobs */
   int illegal_pk; /* Number of illegal pk's by clan */
   int score; /* Overall score   */
   sh_int clan_type; /* See clan type defines  */
   sh_int favour; /* Deities favour upon the clan  */
   sh_int strikes; /* Number of strikes against the clan */
   sh_int members; /* Number of clan members  */
   sh_int mem_limit; /* Number of clan members allowed */
   sh_int alignment; /* Clan's general alignment  */
   int board; /* Vnum of clan board   */
   int clanobj1; /* Vnum of first clan obj  */
   int clanobj2; /* Vnum of second clan obj  */
   int clanobj3; /* Vnum of third clan obj  */
   int clanobj4; /* Vnum of fourth clan obj  */
   int clanobj5; /* Vnum of fifth clan obj  */
   int recall; /* Vnum of clan's recall room  */
   int storeroom; /* Vnum of clan's store room  */
   int guard1; /* Vnum of clan guard type 1  */
   int guard2; /* Vnum of clan guard type 2  */
   int class; /* For guilds    */
};

struct council_data
{
   COUNCIL_DATA *next; /* next council in list   */
   COUNCIL_DATA *prev; /* previous council in list  */
   char *filename; /* Council filename   */
   char *name; /* Council name    */
   char *description; /* A brief description of the council */
   char *head; /* Council head    */
   char *head2; /* Council co-head                      */
   char *powers; /* Council powers   */
   sh_int members; /* Number of council members  */
   int board; /* Vnum of council board  */
   int meeting; /* Vnum of council's meeting room */
};

struct deity_data
{
   DEITY_DATA *next;
   DEITY_DATA *prev;
   char *filename;
   char *name;
   char *description;
   sh_int alignment;
   sh_int worshippers;
   sh_int scorpse;
   sh_int sdeityobj;
   sh_int savatar;
   sh_int srecall;
   sh_int flee;
   sh_int flee_npcrace;
   sh_int flee_npcfoe;
   sh_int kill;
   sh_int kill_magic;
   sh_int kill_npcrace;
   sh_int kill_npcfoe;
   sh_int sac;
   sh_int bury_corpse;
   sh_int aid_spell;
   sh_int aid;
   sh_int backstab;
   sh_int steal;
   sh_int die;
   sh_int die_npcrace;
   sh_int die_npcfoe;
   sh_int spell_aid;
   sh_int dig_corpse;
   int race;
   int race2;
   int class;
   int element;
   int sex;
   EXT_BV affected;
   int npcrace;
   int npcfoe;
   int suscept;
   int susceptnum;
   int elementnum;
   int affectednum;
   int objstat;
};


struct tourney_data
{
   int open;
   int low_level;
   int hi_level;
};

/*
 * Data structure for notes.
 */
struct note_data
{
   NOTE_DATA *next;
   NOTE_DATA *prev;
   char *sender;
   char *date;
   char *to_list;
   char *subject;
   int voting;
   char *yesvotes;
   char *novotes;
   char *abstentions;
   char *text;
   time_t expire;
   time_t date_stamp;
};

struct board_data
{
   BOARD_DATA *next; /* Next board in list     */
   BOARD_DATA *prev; /* Previous board in list    */
   NOTE_DATA *first_note; /* First note on board     */
   NOTE_DATA *last_note; /* Last note on board     */
   char *note_file; /* Filename to save notes to    */
   char *read_group; /* Can restrict a board to a       */
   char *post_group; /* council, clan, guild etc        */
   char *extra_readers; /* Can give read rights to players */
   char *extra_removers; /* Can give remove rights to players */
   int board_obj; /* Vnum of board object     */
   sh_int num_posts; /* Number of notes on this board   */
   sh_int min_read_level; /* Minimum level to read a note    */
   sh_int min_post_level; /* Minimum level to post a note    */
   sh_int min_remove_level; /* Minimum level to remove a note  */
   sh_int max_posts; /* Maximum amount of notes allowed */
   int type; /* Normal board or mail board? */
};


/*
 * An affect.
 *
 * So limited... so few fields... should we add more?
 */
struct affect_data
{
   AFFECT_DATA *next;
   AFFECT_DATA *prev;
   sh_int type;
   sh_int duration;
   sh_int location;
   int modifier;
   EXT_BV bitvector;
   int gemnum;
};


/*
 * A SMAUG spell
 */
struct smaug_affect
{
   SMAUG_AFF *next;
   char *duration;
   sh_int location;
   char *modifier;
   int bitvector; /* this is the bit number */
};


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

/*
 * Well known mob virtual numbers.
 * Defined in #MOBILES.
 */
#define MOB_VNUM_VAMPIRE	   80
#define MOB_VNUM_ANIMATED_CORPSE   5
#define MOB_VNUM_POLY_WOLF	   10
#define MOB_VNUM_POLY_MIST	   11
#define MOB_VNUM_POLY_BAT	   12
#define MOB_VNUM_POLY_HAWK	   13
#define MOB_VNUM_POLY_CAT	   14
#define MOB_VNUM_POLY_DOVE	   15
#define MOB_VNUM_POLY_FISH	   16
#define MOB_VNUM_DEITY		   17
#define MOB_VNUM_TRAINER           30
#define MOB_BEGIN_LUMBERJACK       16201
#define MOB_INTER_LUMBERJACK       16202
#define MOB_ADVAN_LUMBERJACK       16203
#define MOB_EXPERT_LUMBERJACK      16204
#define MOB_MASTER_LUMBERJACK      16205
#define MOB_CORN_WORKER            16206
#define MOB_CORN_T_WORKER          16207
#define MOB_CORN_M_WORKER          16208
#define MOB_WHEAT_WORKER           16209
#define MOB_WHEAT_T_WORKER         16210
#define MOB_WHEAT_M_WORKER         16211
#define MOB_IRON_WORKER            16212
#define MOB_IRON_T_WORKER          16213
#define MOB_IRON_M_WORKER          16214
#define MOB_GOLD_WORKER            16215
#define MOB_GOLD_T_WORKER          16216
#define MOB_GOLD_M_WORKER          16217
//Start Mobs that can be used to attack/defend
#define MOB_KWARRIOR               16218
#define MOB_KCLERIC                16219
#define MOB_KMAGE                  16220
#define MOB_KARCHER                16221
#define MOB_KBARBARIAN             16222
#define MOB_KHORSEMAN              16223
#define MOB_KHORSE                 16224
#define MOB_KGUARD                 16225
#define MOB_KKNIGHT                16226
#define MOB_KSLINGER               16227
#define MOB_KCHAPLAIN              16228
#define MOB_KCROSSBOW              16229
#define MOB_KTHIEF                 16230
#define MOB_KMOB_HORSE             16300
#define MOB_PEASANT_START          20
#define MOB_PEASANT_END            25

/*
 * ACT bits for mobs.
 * Used in #MOBILES.
 */
 /* Due to mob flags being shared with other flags on the act, don't use the
    R# flags -- Xerves */
/*typedef enum
{
  ACT_IS_NPC, ACT_SENTINEL, ACT_SCAVENGER, ACT_BANKER, ACT_CASTEMOB, ACT_AGGRESSIVE,
  ACT_STAY_AREA, ACT_WIMPY, ACT_PET, ACT_TRAIN, ACT_PRACTICE, ACT_IMMORTAL,
  ACT_NOQUEST, ACT_POLYSELF, ACT_META_AGGR, ACT_GUARDIAN, ACT_RUNNING, ACT_NOWANDER,
  ACT_MOUNTABLE, ACT_MOUNTED, ACT_SCHOLAR, ACT_SECRETIVE, ACT_NOTRACK, ACT_MOBINVIS,
  ACT_NOASSIST, ACT_AUTONOMOUS, ACT_PACIFIST, ACT_NOATTACK, ACT_ANNOYING, ACT_HEALER,
  ACT_PROTOTYPE, ACT_R1, ACT_PROTECT, ACT_SCARED
} mob_act_types; */

//Fight states for players, just a reason to lag :-)
#define FSTATE_GRIP    BV01
#define FSTATE_LIMB    BV02
#define FSTATE_WIELD   BV03

//Elemental types for mobiles/players
#define ELEMENT_AIR    BV00
#define ELEMENT_EARTH  BV01
#define ELEMENT_WATER  BV02
#define ELEMENT_FIRE   BV03
#define ELEMENT_ENERGY BV04
#define ELEMENT_UNHOLY BV05
#define ELEMENT_DIVINE BV06
#define ELEMENT_UNDEAD BV07

#define INTRO_ATTACKER   BV00
#define INTRO_KILLER     BV01
#define INTRO_MYATTACKER BV02
#define INTRO_MYKILLER   BV03
#define INTRO_THIEF      BV04
#define INTRO_MYTHIEF    BV05


#define ACT_IS_NPC		  0 /* Auto set for mobs */
#define ACT_SENTINEL		  1 /* Stays in one room */
#define ACT_SCAVENGER		  2 /* Picks up objects */
#define ACT_BANKER                3 /* Can store money      */
#define ACT_CASTEMOB              4 /* Can change caste     */
#define ACT_AGGRESSIVE		  5 /* Attacks PC's  */
#define ACT_STAY_AREA		  6 /* Won't leave area */
#define ACT_WIMPY		  7 /* Flees when hurt */
#define ACT_PET			  8 /* Auto set for pets */
#define ACT_TRAIN		  9 /* Can train PC's */
#define ACT_PRACTICE		 10 /* Can practice PC's */
#define ACT_IMMORTAL		 11 /* Cannot be killed */
#define ACT_NOQUEST		 12 /* Deadly removed because it was not used  */
#define ACT_POLYSELF		 13
#define ACT_META_AGGR		 14 /* Attacks other mobs */
#define ACT_GUARDIAN		 15 /* Protects master */
#define ACT_RUNNING		 16 /* Hunts quickly */
#define ACT_NOWANDER		 17 /* Doesn't wander */
#define ACT_MOUNTABLE		 18 /* Can be mounted */
#define ACT_MOUNTED		 19 /* Is mounted  */
#define ACT_SCHOLAR              20 /* Can teach languages  */
#define ACT_SECRETIVE		 21 /* actions aren't seen */
#define ACT_NOTRACK            22 /* Cannot Track --Xerves */
#define ACT_MOBINVIS		 23 /* Like wizinvis */
#define ACT_NOASSIST		 24 /* Doesn't assist mobs */
#define ACT_AUTONOMOUS		 25 /* Doesn't auto switch tanks */
#define ACT_PACIFIST             26 /* Doesn't ever fight   */
#define ACT_NOATTACK		 27 /* No physical attacks */
#define ACT_ANNOYING		 28 /* Other mobs will attack */
#define ACT_HEALER             29 /* Sell spells */
#define ACT_PROTOTYPE		 30 /* A prototype mob */
#define ACT_R1                   31 /* DO NOT USE!!!! DO NOT REPLACE!!! */
#define ACT_PROTECT              32 /* Protects against lower level changes */
#define ACT_SCARED               33 /* Scared flag, flipside of nowander -- Xerves */
#define ACT_TRAINER              34 /* Can teach skills/groups, part of new system */
#define ACT_ONMAP                35 /* Solon Map */
#define ACT_MOUNTSAVE            36 /* Saveable Mount */
#define ACT_WATERMOB             37 /* Mob only loads in the water areas of Rafermand */
#define ACT_EXTRACTMOB		 38 // Can Hire this mob to do work -- Xerves
#define ACT_DUMPGOODS		 39 // Is in the process of dumping goods -- Xerves
#define ACT_NOUPDN		 40 // Cannot automatically move up or down. -- Xerves
#define ACT_MOVEMAP		 41 // Can move on the map -- Xerves
#define ACT_UNDEAD		42 //Only hurt by blessed/sanctified weapons... noblood -- SKAN
#define ACT_KINGDOMMOB     43 //To keep track of number of mobs loading in a kingdom
#define ACT_MILITARY       44 //Soldier mob buyable by kingdoms
#define ACT_SBSELLER       45 //Sells Spell Books
#define ACT_RESTORELIMBS   46 //Mob that can restore limbs
#define ACT_LIVING_DEAD	   47 //Unblessed/sanctified weapons do 1/2 damage, blessed/sanct'd weapons do 2x dmg -- SKAN
#define ACT_NORESET        48 //Flag that is added to a mob that does not reset, do not set manually....
#define ACT_TIMERESET      49 //Flag that is added to a mob that is a time based reset, do not set manually....
#define ACT_EXTRACTGOODS   50 //Is in the process of extracting goods -- Xerves
#define ACT_REPAIR         51 //Repair mobile, only really needed for kingdom purchased repair mobiles
#define ACT_NOINSTA        52 //No Instant kill
#define ACT_NOMERCY        53 //Ha ha show nomercy to a player and kill them if they are wounded!!!!
#define ACT_FORGEMOB       54 //More for mxp than anything, the flag isn't need (it is in the room)
#define ACT_EXTRACTTOWN    55 //Will dump goods into a town instead of a bin
#define ACT_GRABBED        56 //Has had a grab attempt done, will not allow more than 1
#define ACT_CAPTAIN        57 //Mob is a captain in a quest
#define ACT_BOSS           58 //Mob is a boss in a quest
#define ACT_QUESTMOB       59 //Mob hands out quests
#define ACT_ALLOWRIDE      60 //Mob allows itself to be piggybacked

/* Used in portalloc for PCs, able to go to portal locations using it */
typedef enum
{
   PT_P1, PT_P2, PT_P3, PT_P4, PT_P5, PT_P6, PT_P7, PT_P8, PT_P9, PT_P10,
   PT_P11, PT_P12, PT_P13, PT_P14, PT_P15, PT_P16, PT_P17, PT_P18, PT_P19, PT_P20,
   PT_P21, PT_P22, PT_P23, PT_P24, PT_P25, PT_P26, PT_P27, PT_P28, PT_P29, PT_P30,
   PT_P31, PT_P32, PT_P33, PT_P34, PT_P35, PT_P36, PT_P37, PT_P38, PT_P39, PT_P40,
   PT_P41, PT_P42, PT_P43, PT_P44, PT_P45, PT_P46, PT_P47, PT_P48, PT_P49, PT_P50,
   PT_P51, PT_P52, PT_P53, PT_P54, PT_P55, PT_P56, PT_P57, PT_P58, PT_P59, PT_P60,
   PT_P61, PT_P62, PT_P63, PT_P64, PT_P65, PT_P66, PT_P67, PT_P68, PT_P69, PT_P70,
   PT_P71, PT_P72, PT_P73, PT_P74, PT_P75, PT_P76, PT_P77, PT_P78, PT_P79, PT_P80,
}
portal_types;

typedef enum
{
   KM_STATIONARY, KM_PATROL, KM_WARN, KM_ATTACKE, KM_ATTACKN, KM_ATTACKA,
   KM_NOPASS, KM_REPORT, KM_INVITE, KM_NOASSIST, KM_SENTINEL, KM_CONQUER,
   KM_NOCLOAK, KM_NOHOOD, KM_ATTACKH, KM_ATTACKC, KM_NEEDINTRO, KM_KEQUIPED
}
kmob_types;

//KLOG_LASTENTRY Needs to be the last flag
typedef enum
{
   KLOG_SETJOB, KLOG_TRADEGOODS, KLOG_RESOURCES, KLOG_PLACEOBJ, KLOG_KREMOVE_TRAINER, KLOG_KREMOVE_OBJ, KLOG_PLACETRAINER,
   KLOG_PLACEMOB, KLOG_PLANTGRAIN, KLOG_PLANTCORN, KLOG_PLANTGRASS, KLOG_PLANTTREE, KLOG_STOPFIRE, KLOG_PLAINS, KLOG_SURVEY,
   KLOG_SURVEY_STRIKES, KLOG_LEAVEKINGDOM, KLOG_TKICKOUT, KLOG_KICKOUT, KLOG_TINDUCT, KLOG_KINDUCT, KLOG_JOINKINGDOM,
   KLOG_DECLARE, KLOG_COMMAND, KLOG_GIVEORDERS, KLOG_USELICENSE, KLOG_GRANTLICENSE, KLOG_ROADS, KLOG_FIRE, KLOG_CUTPATH,
   KLOG_MAKEWORKER, KLOG_GETRESOURCES, KLOG_DEPOSIT, KLOG_WITHDRAW, KLOG_CREATE_ROOM, KLOG_EDIT_ROOM, KLOG_POP_VICTIM,
   KLOG_POP_ATTACKER, KLOG_MIL_VICTIM, KLOG_MIL_ATTACKER, KLOG_MIL_COLLECTION, KLOG_TAX, KLOG_POPULATION, KLOG_EXTRACTION,
   KLOG_TRAINERTAX, KLOG_BOOKTAX, KLOG_CASTEVALUES, KLOG_TOWNVALUES, KLOG_KREMOVE_MOB, KLOG_WARLOSSES, KLOG_UNKNOWN,
   KLOG_SCHEDULE, KLOG_ARMMILITARY, KLOG_LASTENTRY
}
klog_types;
/*
 * Bits for 'affected_by'.
 * Used in #MOBILES.
 *
 * hold and flaming are yet uncoded
 */
 
//Aqua Breath - 32, everything after must use APPLY_EXT_AFFECT to apply the affect
typedef enum
{
   AFF_BLIND, AFF_INVISIBLE, AFF_DETECT_EVIL, AFF_DETECT_INVIS,
   AFF_DETECT_MAGIC, AFF_DETECT_HIDDEN, AFF_HOLD, AFF_SANCTUARY,
   AFF_FAERIE_FIRE, AFF_INFRARED, AFF_CURSE, AFF_FLAMING, AFF_POISON,
   AFF_PROTECT, AFF_PARALYSIS, AFF_SNEAK, AFF_HIDE, AFF_SLEEP, AFF_CHARM,
   AFF_FLYING, AFF_PASS_DOOR, AFF_FLOATING, AFF_TRUESIGHT, AFF_DETECTTRAPS,
   AFF_SCRYING, AFF_FIRESHIELD, AFF_SHOCKSHIELD, AFF_HAUS1, AFF_ICESHIELD,
   AFF_POSSESS, AFF_BERSERK, AFF_AQUA_BREATH, AFF_RECURRINGSPELL,
   AFF_CONTAGIOUS, AFF_WIZARDEYE, AFF_E_WIZARDEYE, AFF_M_WIZARDEYE, AFF_BALANCE, 
   AFF_NOHUNGER, AFF_NOTHIRST, AFF_GAGGED, AFF_REZ, AFF_WEB, AFF_SNARE, 
   AFF_NERVEPINCH, AFF_NYIJI, AFF_STALK, MAX_AFFECTED_BY
}
affected_by_types;

typedef enum
{
   TALENT_HP1, TALENT_HP2, TALENT_HP3, TALENT_HP4, TALENT_HP5, TALENT_MP1, TALENT_MP2,
   TALENT_MP3, TALENT_MP4, TALENT_MP5, TALENT_STR1, TALENT_STR2, TALENT_STR3, TALENT_CON1,
   TALENT_CON2, TALENT_CON3, TALENT_INT1, TALENT_INT2, TALENT_INT3, TALENT_WIS1, TALENT_WIS2,
   TALENT_WIS3, TALENT_DEX1, TALENT_DEX2, TALENT_DEX3, TALENT_AGI1, TALENT_AGI2, TALENT_AGI3,
   TALENT_END1, TALENT_END2, TALENT_END3, TALENT_SP1, TALENT_SP2, TALENT_SP3, TALENT_SP4,
   TALENT_SP5, TALENT_DAMCAP1, TALENT_DAMCAP2, TALENT_DAMCAP3, TALENT_MAX
}
talent_types;

/*
 * Resistant Immune Susceptible flags
 */
#define RIS_FIRE		  BV00
#define RIS_WATER   	  BV01
#define RIS_EARTH	     BV02
#define RIS_ENERGY		BV03
#define RIS_BLUNT		 BV04
#define RIS_PIERCE		BV05
#define RIS_SLASH		 BV06
#define RIS_ACID		  BV07 //Not used
#define RIS_POISON		BV08
#define RIS_DRAIN		 BV09 //Not used
#define RIS_SLEEP		 BV10
#define RIS_CHARM		 BV11
#define RIS_HOLD		  BV12 //Not used
#define RIS_NONMAGIC	  BV13
#define RIS_PLUS1		 BV14
#define RIS_PLUS2		 BV15
#define RIS_PLUS3		 BV16
#define RIS_PLUS4		 BV17
#define RIS_PLUS5		 BV18
#define RIS_PLUS6		 BV19
#define RIS_MAGIC		 BV20
#define RIS_PARALYSIS	 BV21 //Stun
#define RIS_AIR           BV22
#define RIS_UNHOLY        BV23
#define RIS_HOLY          BV24
#define RIS_UNDEAD        BV25
/* 26 RIS's*/

/* 
 * Attack types
 */
typedef enum
{
   ATCK_BITE, ATCK_CLAWS, ATCK_TAIL, ATCK_STING, ATCK_PUNCH, ATCK_KICK,
   ATCK_TRIP, ATCK_BASH, ATCK_STUN, ATCK_GOUGE, ATCK_BACKSTAB, ATCK_FEED,
   ATCK_DRAIN, ATCK_FIREBREATH, ATCK_FROSTBREATH, ATCK_ACIDBREATH,
   ATCK_LIGHTNBREATH, ATCK_GASBREATH, ATCK_POISON, ATCK_NASTYPOISON, ATCK_GAZE,
   ATCK_BLINDNESS, ATCK_CAUSESERIOUS, ATCK_EARTHQUAKE, ATCK_CAUSECRITICAL,
   ATCK_CURSE, ATCK_FLAMESTRIKE, ATCK_HARM, ATCK_FIREBALL, ATCK_COLORSPRAY,
   ATCK_WEAKEN, ATCK_SPIRALBLAST, MAX_ATTACK_TYPE
}
attack_types;

/*
 * Defense types
 */
typedef enum
{
   DFND_PARRY, DFND_DODGE, DFND_HEAL, DFND_CURELIGHT, DFND_CURESERIOUS,
   DFND_CURECRITICAL, DFND_DISPELMAGIC, DFND_DISPELEVIL, DFND_SANCTUARY,
   DFND_FIRESHIELD, DFND_SHOCKSHIELD, DFND_SHIELD, DFND_BLESS, DFND_STONESKIN,
   DFND_TELEPORT, DFND_MONSUM1, DFND_MONSUM2, DFND_MONSUM3, DFND_MONSUM4,
   DFND_DISARM, DFND_ICESHIELD, DFND_GRIP, DFND_TRUESIGHT, MAX_DEFENSE_TYPE
}
defense_types;

/*
 * Body parts
 */
#define PART_HEAD		  BV00
#define PART_ARMS		  BV01
#define PART_LEGS		  BV02
#define PART_HEART		  BV03
#define PART_BRAINS		  BV04
#define PART_GUTS		  BV05
#define PART_HANDS		  BV06
#define PART_FEET		  BV07
#define PART_FINGERS		  BV08
#define PART_EAR		  BV09
#define PART_EYE		  BV10
#define PART_LONG_TONGUE	  BV11
#define PART_EYESTALKS		  BV12
#define PART_TENTACLES		  BV13
#define PART_FINS		  BV14
#define PART_WINGS		  BV15
#define PART_TAIL		  BV16
#define PART_SCALES		  BV17
/* for combat */
#define PART_CLAWS		  BV18
#define PART_FANGS		  BV19
#define PART_HORNS		  BV20
#define PART_TUSKS		  BV21
#define PART_TAILATTACK		  BV22
#define PART_SHARPSCALES	  BV23
#define PART_BEAK		  BV24

#define PART_HAUNCH		  BV25
#define PART_HOOVES		  BV26
#define PART_PAWS		  BV27
#define PART_FORELEGS		  BV28
#define PART_FEATHERS		  BV29

/*
 * Autosave flags
 */
#define SV_DEATH		  BV00 /* Save on death */
#define SV_KILL			  BV01 /* Save when kill made */
#define SV_PASSCHG		  BV02 /* Save on password change */
#define SV_DROP			  BV03 /* Save on drop */
#define SV_PUT			  BV04 /* Save on put */
#define SV_GIVE			  BV05 /* Save on give */
#define SV_AUTO			  BV06 /* Auto save every x minutes (define in cset) */
#define SV_ZAPDROP		  BV07 /* Save when eq zaps */
#define SV_AUCTION		  BV08 /* Save on auction */
#define SV_GET			  BV09 /* Save on get */
#define SV_RECEIVE		  BV10 /* Save when receiving */
#define SV_IDLE			  BV11 /* Save when char goes idle */
#define SV_BACKUP		  BV12 /* Make backup of pfile on save */
#define SV_QUITBACKUP		  BV13 /* Backup on quit only --Blod */

/*
 * Pipe flags
 */
#define PIPE_TAMPED		  BV01
#define PIPE_LIT		  BV02
#define PIPE_HOT		  BV03
#define PIPE_DIRTY		  BV04
#define PIPE_FILTHY		  BV05
#define PIPE_GOINGOUT		  BV06
#define PIPE_BURNT		  BV07
#define PIPE_FULLOFASH		  BV08

/*
 * Flags for act_string -- Shaddai
 */
#define STRING_NONE               0
#define STRING_IMM                BV01


/*
 * old flags for conversion purposes -- will not conflict with the flags below
 */
#define OLD_SF_SAVE_HALF_DAMAGE	  BV18 /* old save for half damage */
#define OLD_SF_SAVE_NEGATES	  BV19 /* old save negates affect */

/*
 * Skill/Spell flags	The minimum BV *MUST* be 11!
 */
#define SF_WATER		    BV00
#define SF_EARTH		    BV01
#define SF_AIR			  BV02
#define SF_ASTRAL	 	  BV03
#define SF_AREA			 BV04 /* is an area spell  */
#define SF_DISTANT		  BV05 /* affects something far away */
#define SF_REVERSE		  BV06
#define SF_NOSELF		   BV07 /* Can't target yourself! */
#define SF_UNUSED2		  BV08 /* free for use!  */
#define SF_ACCUMULATIVE     BV09 /* is accumulative  */
#define SF_RECASTABLE 	  BV10 /* can be refreshed  */
#define SF_NOSCRIBE		 BV11 /* cannot be scribed  */
#define SF_NOBREW		   BV12 /* cannot be brewed  */
#define SF_GROUPSPELL 	  BV13 /* only affects group members */
#define SF_OBJECT		   BV14 /* directed at an object */
#define SF_CHARACTER	    BV15 /* directed at a character */
#define SF_SECRETSKILL	  BV16 /* hidden unless learned */
#define SF_PKSENSITIVE	  BV17 /* much harder for plr vs. plr */
#define SF_STOPONFAIL	   BV18 /* stops spell on first failure */
#define SF_NOFIGHT		  BV19 /* stops if char fighting       */
#define SF_NODISPEL         BV20 /* stops spell from being dispelled */
#define SF_DEQ              BV21 /* Spell damages equipment */
#define SF_NOAPPLYSTACK     BV22 /* Won't allow an affect to stack, such if there are 3 strengths of a spell */
typedef enum
{ SS_NONE, SS_POISON_DEATH, SS_ROD_WANDS, SS_PARA_PETRI,
   SS_BREATH, SS_SPELL_STAFF
}
save_types;

#define ALL_BITS		INT_MAX
#define SDAM_MASK		ALL_BITS & ~(BV00 | BV01 | BV02)
#define SACT_MASK		ALL_BITS & ~(BV03 | BV04 | BV05)
#define SCLA_MASK		ALL_BITS & ~(BV06 | BV07 | BV08)
#define SPOW_MASK		ALL_BITS & ~(BV09 | BV10)
#define SSAV_MASK		ALL_BITS & ~(BV11 | BV12 | BV13)

typedef enum
{ SD_NONE, SD_FIRE, SD_WATER, SD_EARTH, SD_ENERGY, SD_AIR,
   SD_HOLY, SD_UNHOLY, SD_UNDEAD
}
spell_dam_types;

typedef enum
{ SA_NONE, SA_CREATE, SA_DESTROY, SA_RESIST, SA_SUSCEPT,
   SA_DIVINATE, SA_OBSCURE, SA_CHANGE
}
spell_act_types;

typedef enum
{ SP_NONE, SP_MINOR, SP_GREATER, SP_MAJOR }
spell_power_types;

typedef enum
{ SC_NONE, SC_LUNAR, SC_SOLAR, SC_TRAVEL, SC_SUMMON,
   SC_LIFE, SC_DEATH, SC_ILLUSION
}
spell_class_types;

typedef enum
{ SE_NONE, SE_NEGATE, SE_EIGHTHDAM, SE_QUARTERDAM, SE_HALFDAM,
   SE_3QTRDAM, SE_REFLECT, SE_ABSORB
}
spell_save_effects;

/*
 * Sex.
 * Used in #MOBILES.
 */
typedef enum
{ SEX_NEUTRAL, SEX_MALE, SEX_FEMALE }
sex_types;

typedef enum
{
   TRAP_TYPE_POISON_GAS = 1, TRAP_TYPE_POISON_DART, TRAP_TYPE_POISON_NEEDLE,
   TRAP_TYPE_POISON_DAGGER, TRAP_TYPE_POISON_ARROW, TRAP_TYPE_BLINDNESS_GAS,
   TRAP_TYPE_SLEEPING_GAS, TRAP_TYPE_FLAME, TRAP_TYPE_EXPLOSION,
   TRAP_TYPE_ACID_SPRAY, TRAP_TYPE_ELECTRIC_SHOCK, TRAP_TYPE_BLADE,
   TRAP_TYPE_SEX_CHANGE
}
trap_types;

#define MAX_TRAPTYPE		   TRAP_TYPE_SEX_CHANGE

//Normal trap flags, DO NOT add any new flags here unless you want to use old trap code
#define TRAP_ROOM      		   BV00
#define TRAP_OBJ	      	   BV01
#define TRAP_ENTER_ROOM		   BV02
#define TRAP_LEAVE_ROOM		   BV03
#define TRAP_OPEN		   BV04
#define TRAP_CLOSE		   BV05
#define TRAP_GET		   BV06
#define TRAP_PUT		   BV07
#define TRAP_PICK		   BV08
#define TRAP_UNLOCK		   BV09
#define TRAP_N			   BV10
#define TRAP_S			   BV11
#define TRAP_E	      		   BV12
#define TRAP_W	      		   BV13
#define TRAP_U	      		   BV14
#define TRAP_D	      		   BV15
#define TRAP_EXAMINE		   BV16
#define TRAP_NE			   BV17
#define TRAP_NW			   BV18
#define TRAP_SE			   BV19
#define TRAP_SW			   BV20

//New trap flags for the Linked list system using the trap command.  Add new flags here.
typedef enum
{
  NEW_TRAP_ROOM, NEW_TRAP_OBJ, NEW_TRAP_ENTER_ROOM, NEW_TRAP_LEAVE_ROOM, NEW_TRAP_OPEN, NEW_TRAP_CLOSE, 
  NEW_TRAP_GET, NEW_TRAP_PUT, NEW_TRAP_PICK, NEW_TRAP_UNLOCK, NEW_TRAP_N, NEW_TRAP_S, NEW_TRAP_E, NEW_TRAP_W, 
  NEW_TRAP_U, NEW_TRAP_D, NEW_TRAP_EXAMINE, NEW_TRAP_NE, NEW_TRAP_NW, NEW_TRAP_SE, NEW_TRAP_SW,
  NEW_TRAP_GETOBJ, NEW_TRAP_PUTOBJ, NEW_TRAP_WEAROBJ, NEW_TRAP_DROPOBJ, NEW_TRAP_IDENTOBJ, NEW_TRAP_GIVEOBJ,
  NEW_TRAP_SACOBJ, NEW_TRAP_REMOVEOBJ
}
new_trap_flags;

/*
 * 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_SPILLED_GUTS	     16
#define OBJ_VNUM_BLOOD		     17
#define OBJ_VNUM_BLOODSTAIN	     18
#define OBJ_VNUM_SCRAPS		     19

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

#define OBJ_VNUM_SKIN		     23
#define OBJ_VNUM_SLICE		     24
#define OBJ_VNUM_SHOPPING_BAG	     25

#define OBJ_VNUM_BLOODLET	     26

#define OBJ_VNUM_FIRE		     30
#define OBJ_VNUM_TRAP		     31
#define OBJ_VNUM_PORTAL		     32
#define OBJ_VNUM_IDOL            88
#define OBJ_VNUM_TINDER          89

#define OBJ_VNUM_BLACK_POWDER	       33
#define OBJ_VNUM_SCROLL_SCRIBING       34
#define OBJ_VNUM_FLASK_BREWING         35
#define OBJ_VNUM_NOTE		           36
#define OBJ_VNUM_FLASK_BREWING_TIER2   38
#define OBJ_VNUM_FLASK_BREWING_TIER3   39
#define OBJ_VNUM_SCROLL_SCRIBING_TIER2 40
#define OBJ_VNUM_SCROLL_SCRIBING_TIER3 41
#define OBJ_EXTRADIMENSIONAL_PORTAL    63
#define OBJ_VNUM_DEITY		           64
#define OBJ_VNUM_QUESTOBJ              66

//Kingdom vnums
#define OBJ_KINGDOM_MERCHANT      9114
#define OBJ_KINGDOM_MAYOR         9113
#define OBJ_KINGDOM_QUIVER        16175
#define OBJ_KINGDOM_KEY           16128
#define OBJ_MIL_CROSSBOW          91
#define OBJ_MIL_QUIVER            21326
//forge shit
#define OBJ_FORGE_COPPERSLAB		      21101
#define OBJ_FORGE_BRONZESLAB		      21103
#define OBJ_FORGE_IRONSLAB                    21105
#define OBJ_FORGE_STEELSLAB                   21107
#define OBJ_FORGE_D_STEELSLAB                 21109
#define OBJ_FORGE_MITHRILSLAB                 21111
#define OBJ_FORGE_D_MITHRIL                   21113
#define OBJ_FORGE_BRASS                       21115
#define OBJ_FORGE_COBALT                      21117
#define OBJ_FORGE_TITANIUM                    21119
#define OBJ_FORGE_TUNGSTEN                    21121

#define OBJ_FORGE_MAEGLUIN                    21123
#define OBJ_FORGE_GURTHNAI                    21125
#define OBJ_FORGE_DARGLIN                     21127
#define OBJ_FORGE_VALTHRAN                    21129
#define OBJ_FORGE_SARNOS                      21131

#define OBJ_FORGE_ANGANAR                     21133
#define OBJ_FORGE_FALASIN                     21135
#define OBJ_FORGE_KHELEKIR                    21137
#define OBJ_FORGE_URVAAL                      21139
#define OBJ_FORGE_RAUKONAR                    21141

#define OBJ_FORGE_HAND_AXE                    21000
#define OBJ_FORGE_AXE                         21001
#define OBJ_FORGE_WARAXE                      21002
#define OBJ_FORGE_DOUBLE_AXE                  21003
#define OBJ_FORGE_MATTOCK                     21004
#define OBJ_FORGE_GREAT_AXE                   21005
#define OBJ_FORGE_BATTLE_AXE                  21006
#define OBJ_FORGE_SHORT_SWORD                 21007
#define OBJ_FORGE_CUTLASS                     21008
#define OBJ_FORGE_RAPIER                      21009
#define OBJ_FORGE_KATANA                      21010
#define OBJ_FORGE_BROAD_SWORD                 21011
#define OBJ_FORGE_LONG_SWORD                  21012
#define OBJ_FORGE_BASTARD_SWORD               21013
#define OBJ_FORGE_CLAYMORE                    21014
#define OBJ_FORGE_FLAMBERGE                   21015
#define OBJ_FORGE_KNIFE                       21016
#define OBJ_FORGE_DAGGER                      21017
#define OBJ_FORGE_DIRK                        21018
#define OBJ_FORGE_KRIS                        21019
#define OBJ_FORGE_CLEAVER                     21020
#define OBJ_FORGE_MAIN_GAUCHE                 21021
#define OBJ_FORGE_STILETTO                    21022
#define OBJ_FORGE_PILUM                       21023
#define OBJ_FORGE_LANCE                       21024
#define OBJ_FORGE_SPEAR                       21025
#define OBJ_FORGE_HALBERD                     21026
#define OBJ_FORGE_GLAIVE                      21027
#define OBJ_FORGE_GUISARME                    21028
#define OBJ_FORGE_TRIDENT                     21029
#define OBJ_FORGE_CLUB                        21030
#define OBJ_FORGE_HAMMER                      21031
#define OBJ_FORGE_MACE                        21032
#define OBJ_FORGE_WAR_HAMMER                  21033
#define OBJ_FORGE_FLAIL                       21034
#define OBJ_FORGE_GREAT_FLAIL                 21035
#define OBJ_FORGE_MORNING_STAR                21036
#define OBJ_FORGE_MAUL                        21037
#define OBJ_FORGE_SCEPTRE                     21038
#define OBJ_FORGE_ROD                         21039
#define OBJ_FORGE_WEIGHTED_ROD                21040
#define OBJ_FORGE_STAFF                       21041
#define OBJ_FORGE_QUARTER_STAFF               21042
#define OBJ_FORGE_BATTLE_STAFF                21043
#define OBJ_FORGE_BLADED_STAFF                21044

#define OBJ_FORGE_STUDDED_LEATHER_ARMOR       21206
#define OBJ_FORGE_STUDDED_LEATHER_GAUNTLET    21207
#define OBJ_FORGE_STUDDED_LEATHER_GREAVE      21208
#define OBJ_FORGE_STUDDED_LEATHER_NECK        21209
#define OBJ_FORGE_STUDDED_LEATHER_HEAD        21210

#define OBJ_FORGE_CHAIN_MAIL                  21045
#define OBJ_FORGE_CHAIN_HAUBERK               21046
#define OBJ_FORGE_RING_MAIL                   21047
#define OBJ_FORGE_DOUBLE_RING_MAIL            21048
#define OBJ_FORGE_BREASTPLATE                 21049
#define OBJ_FORGE_CUIRASS                     21050
#define OBJ_FORGE_CHAIN_GAUNTLET              21051
#define OBJ_FORGE_RING_GAUNTLET               21052
#define OBJ_FORGE_GAUNTLET                    21053
#define OBJ_FORGE_VAMBRACE                    21054
#define OBJ_FORGE_CHAIN_GREAVE	              21055
#define OBJ_FORGE_RING_GREAVE	              21056
#define OBJ_FORGE_GREAVE                      21057
#define OBJ_FORGE_CUISS                       21058
#define OBJ_FORGE_AVENTAIL                    21059
#define OBJ_FORGE_COIF                        21060
#define OBJ_FORGE_DOUBLE_COIF                 21061
#define OBJ_FORGE_GORGET                      21062
#define OBJ_FORGE_CABASSET	              21063
#define OBJ_FORGE_CASQUE 	              21064
#define OBJ_FORGE_ARMET 	              21065
#define OBJ_FORGE_HEAUME                      21066
#define OBJ_FORGE_BUCKLER                     21067
#define OBJ_FORGE_ROUNDSHIELD                 21068
#define OBJ_FORGE_HEATER                      21069
#define OBJ_FORGE_KITESHIELD                  21070
#define OBJ_FORGE_TOWERSHIELD                 21071
#define OBJ_FORGE_PAVIS                       21072
#define OBJ_FORGE_ARROW                       21073

//spellbooks
#define OBJ_FIRST_SBOOK           4100
#define OBJ_LAST_SBOOK            4399


/*
 * Item types.
 * Used in #OBJECTS.
 */
/* 66 at Holdresource -- Xerves 12/99 */
typedef enum
{
   ITEM_NONE, ITEM_LIGHT, ITEM_SCROLL, ITEM_WAND, ITEM_STAFF, ITEM_WEAPON,
   ITEM_FIREWEAPON, ITEM_MISSILE, ITEM_TREASURE, ITEM_ARMOR, ITEM_POTION,
   ITEM_WORN, ITEM_FURNITURE, ITEM_TRASH, ITEM_OLDTRAP, ITEM_CONTAINER,
   ITEM_NOTE, ITEM_DRINK_CON, ITEM_KEY, ITEM_FOOD, ITEM_MONEY, ITEM_PEN,
   ITEM_BOAT, ITEM_CORPSE_NPC, ITEM_CORPSE_PC, ITEM_FOUNTAIN, ITEM_PILL,
   ITEM_BLOOD, ITEM_BLOODSTAIN, ITEM_SCRAPS, ITEM_PIPE, ITEM_HERB_CON,
   ITEM_HERB, ITEM_INCENSE, ITEM_FIRE, ITEM_BOOK, ITEM_SWITCH, ITEM_LEVER,
   ITEM_PULLCHAIN, ITEM_BUTTON, ITEM_DIAL, ITEM_RUNE, ITEM_RUNEPOUCH,
   ITEM_MATCH, ITEM_TRAP, ITEM_MAP, ITEM_PORTAL, ITEM_PAPER,
   ITEM_TINDER, ITEM_LOCKPICK, ITEM_SPIKE, ITEM_DISEASE, ITEM_OIL, ITEM_FUEL,
   ITEM_EMPTY1, ITEM_EMPTY2, ITEM_MISSILE_WEAPON, ITEM_PROJECTILE, ITEM_QUIVER,
   ITEM_SHOVEL, ITEM_SALVE, ITEM_COOK, ITEM_KEYRING, ITEM_ODOR, ITEM_MOUNTFOOD,
   ITEM_HOLDRESOURCE, ITEM_EXTRACTOBJ, ITEM_SPELLBOOK, ITEM_SHEATH, ITEM_NOTEBOARD,
   ITEM_REPAIR, ITEM_MCLIMB, ITEM_GAG, ITEM_FLINT, ITEM_TRAPTOOL, ITEM_TGEM,
   ITEM_QTOKEN,
   ITEM_LASTTYPE
}
item_types;
#define MAX_ITEM_TYPE		     ITEM_LASTTYPE-1

//Different kind of "hits/misses"
#define DM_MISS                  -1
#define DM_HIT                   0
#define DM_COUNTER               1
#define DM_PENETRATE_PERCUSSION  2
#define DM_CRITICAL              3
#define DM_DEATH                 4
#define DM_UNDEAD		 5
#define DM_BLOCK                 6
#define DM_SLICEDLIMB            7

//Defines Armor Size types
#define ASIZE_LEATHER            1
#define ASIZE_LIGHT              2
#define ASIZE_MEDIUM             3
#define ASIZE_HEAVY              4
#define ASIZE_HEAVIEST           5

//Different limbs that you can target
#define LM_BODY                  0
#define LM_RARM		         1
#define LM_LARM			 2
#define LM_RLEG			 3
#define LM_LLEG			 4
#define LM_HEAD			 5
#define LM_NECK			 6


/*
 * Extra flags.
 * Used in #OBJECTS.
 */
typedef enum
{
   ITEM_GLOW, ITEM_HUM, ITEM_DARK, ITEM_LOYAL, ITEM_EVIL, ITEM_INVIS, ITEM_MAGIC,
   ITEM_NODROP, ITEM_BLESS, ITEM_ANTI_GOOD, ITEM_ANTI_EVIL, ITEM_ANTI_NEUTRAL,
   ITEM_NOREMOVE, ITEM_INVENTORY, ITEM_ANTI_MAGE, ITEM_ANTI_THIEF,
   ITEM_ANTI_WARRIOR, ITEM_ANTI_CLERIC, ITEM_ORGANIC, ITEM_METAL, ITEM_DONATION,
   ITEM_CLANOBJECT, ITEM_CLANCORPSE, ITEM_ANTI_VAMPIRE, ITEM_ANTI_DRUID,
   ITEM_HIDDEN, ITEM_POISONED, ITEM_COVERING, ITEM_DEATHROT, ITEM_BURIED,
   ITEM_PROTOTYPE, ITEM_NOLOCATE, ITEM_GROUNDROT, ITEM_NOGIVE, ITEM_NOPURGE,
   ITEM_ANTI_MONK, ITEM_ANTI_PALADIN, ITEM_ANTI_RANGER, ITEM_ANTI_AUGURER,
   ITEM_NODISARM, ITEM_NOBREAK, ITEM_ONMAP, ITEM_LODGED, ITEM_PIECE, ITEM_ARTIFACT,
   ITEM_FORGEABLE, ITEM_COAL, ITEM_ORE, ITEM_SLAB, ITEM_TWOHANDED,ITEM_IMBUABLE,
   ITEM_GEM, ITEM_GEM_SETTING, ITEM_SANCTIFIED, ITEM_NORESET, ITEM_TIMERESET,
   ITEM_CLOAK, ITEM_MORTAR, ITEM_POWREAG, ITEM_AFFREAG, ITEM_MIXED, ITEM_PERMREAG, ITEM_HIDEIDENTITY, 
   ITEM_REPAIRWALL, ITEM_KINGDOMKEY, ITEM_KINGDOMEQ, ITEM_GAGREMOVE, 
   ITEM_CORPSEREVIVE, ITEM_UNIQUE, ITEM_QUESTOBJ, ITEM_TYPE_SWORD, ITEM_TYPE_AXE, ITEM_TYPE_DAGGER,
   ITEM_TYPE_POLEARM, ITEM_TYPE_STAVES, ITEM_TYPE_BLUNT, ITEM_QTOKEN_LOOTED, 
   ITEM_MONKWEAPON,
   ITEM_MAX_ITEM_FLAG
}
item_extra_flags;

/* Magic flags - extra extra_flags for objects that are used in spells */
#define ITEM_RETURNING		BV00
#define ITEM_BACKSTABBER  	BV01
#define ITEM_BANE		BV02
#define ITEM_MAGIC_LOYAL	BV03
#define ITEM_HASTE		BV04
#define ITEM_DRAIN		BV05
#define ITEM_LIGHTNING_BLADE  	BV06
#define ITEM_PKDISARMED		BV07 /* Maybe temporary, not a perma flag */

/* Lever/dial/switch/button/pullchain flags */
#define TRIG_UP			BV00
#define TRIG_UNLOCK		BV01
#define TRIG_LOCK		BV02
#define TRIG_D_NORTH		BV03
#define TRIG_D_SOUTH		BV04
#define TRIG_D_EAST		BV05
#define TRIG_D_WEST		BV06
#define TRIG_D_UP		BV07
#define TRIG_D_DOWN		BV08
#define TRIG_DOOR		BV09
#define TRIG_CONTAINER		BV10
#define TRIG_OPEN		BV11
#define TRIG_CLOSE		BV12
#define TRIG_PASSAGE		BV13
#define TRIG_OLOAD		BV14
#define TRIG_MLOAD		BV15
#define TRIG_TELEPORT		BV16
#define TRIG_TELEPORTALL	BV17
#define TRIG_TELEPORTPLUS	BV18
#define TRIG_DEATH		BV19
#define TRIG_CAST		BV20
#define TRIG_FAKEBLADE		BV21
#define TRIG_RAND4		BV22
#define TRIG_RAND6		BV23
#define TRIG_TRAPDOOR		BV24
#define TRIG_ANOTHEROOM		BV25
#define TRIG_USEDIAL		BV26
#define TRIG_ABSOLUTEVNUM	BV27
#define TRIG_SHOWROOMDESC	BV28
#define TRIG_AUTORETURN		BV29

#define TELE_SHOWDESC		BV00
#define TELE_TRANSALL		BV01
#define TELE_TRANSALLPLUS	BV02

// Grip flags, used for how you hold a weapon, example: slash

#define GRIP_BASH   BV00
#define GRIP_STAB   BV01
#define GRIP_SLASH  BV02

/*
 * Wear flags.
 * Used in #OBJECTS.
 */

#define ITEM_TAKE		     BV00
#define ITEM_WEAR_FINGER      BV01
#define ITEM_WEAR_NECK 	   BV02
#define ITEM_WEAR_BODY 	   BV03
#define ITEM_WEAR_HEAD 	   BV04
#define ITEM_WEAR_LEGS	    BV05
#define ITEM_WEAR_ARMS 	   BV06
#define ITEM_WEAR_SHIELD      BV07
#define ITEM_WEAR_WAIST       BV08
#define ITEM_WIELD		    BV09
#define ITEM_DUAL_WIELD       BV10
#define ITEM_MISSILE_WIELD    BV11
#define ITEM_LODGE_RIB	    BV12
#define ITEM_LODGE_ARM	    BV13
#define ITEM_LODGE_LEG	    BV14
#define ITEM_WEAR_ABOUT_NECK  BV15
#define ITEM_WEAR_NOCKED      BV16
#define ITEM_WEAR_BACK        BV17 //added back in for backpacks, etc

/*
 * Apply types (for affects).
 * Used in #OBJECTS.
 */
//94 at arrowcatch
typedef enum
{
   APPLY_NONE, APPLY_STR, APPLY_DEX, APPLY_INT, APPLY_WIS, APPLY_CON,
   APPLY_SEX, APPLY_CLASS, APPLY_LEVEL, APPLY_AGE, APPLY_HEIGHT, APPLY_WEIGHT,
   APPLY_MANA, APPLY_HIT, APPLY_MOVE, APPLY_GOLD, APPLY_EXP, APPLY_AC,
   APPLY_HITROLL, APPLY_DAMROLL, APPLY_SAVING_POISON, APPLY_SAVING_ROD,
   APPLY_SAVING_PARA, APPLY_SAVING_BREATH, APPLY_SAVING_SPELL, APPLY_CHA,
   APPLY_AFFECT, APPLY_RESISTANT, APPLY_IMMUNE, APPLY_SUSCEPTIBLE,
   APPLY_WEAPONSPELL, APPLY_LCK, APPLY_BACKSTAB, APPLY_PICK, APPLY_TRACK,
   APPLY_STEAL, APPLY_SNEAK, APPLY_HIDE, APPLY_PALM, APPLY_DETRAP, APPLY_DODGE,
   APPLY_PEEK, APPLY_SCAN, APPLY_GOUGE, APPLY_SEARCH, APPLY_MOUNT, APPLY_DISARM,
   APPLY_KICK, APPLY_PARRY, APPLY_BASH, APPLY_STUN, APPLY_PUNCH, APPLY_CLIMB,
   APPLY_GRIP, APPLY_SCRIBE, APPLY_BREW, APPLY_WEARSPELL, APPLY_REMOVESPELL,
   APPLY_EMOTION, APPLY_MENTALSTATE, APPLY_STRIPSN, APPLY_REMOVE, APPLY_DIG,
   APPLY_FULL, APPLY_THIRST, APPLY_DRUNK, APPLY_BLOOD, APPLY_COOK,
   APPLY_RECURRINGSPELL, APPLY_CONTAGIOUS, APPLY_EXT_AFFECT, APPLY_ODOR,
   APPLY_ROOMFLAG, APPLY_SECTORTYPE, APPLY_ROOMLIGHT, APPLY_TELEVNUM,
   APPLY_TELEDELAY, APPLY_AGI, APPLY_ARMOR, APPLY_SHIELD, APPLY_STONE,
   APPLY_SANCTIFY, APPLY_TOHIT, APPLY_MANATICK, APPLY_HPTICK, APPLY_WMOD,
   APPLY_MANAFUSE, APPLY_FASTING, APPLY_MANASHELL, APPLY_MANASHIELD, APPLY_MANAGUARD,
   APPLY_MANABURN, APPLY_WEAPONCLAMP, APPLY_ARROWCATCH, APPLY_BRACING,
   APPLY_HARDENING, APPLY_RFIRE, APPLY_RWATER, APPLY_RAIR, APPLY_REARTH,
   APPLY_RENERGY, APPLY_RMAGIC, APPLY_RNONMAGIC, APPLY_RBLUNT, APPLY_RPIERCE,
   APPLY_RSLASH, APPLY_RPOISON, APPLY_RPARALYSIS, APPLY_RHOLY, APPLY_RUNHOLY, APPLY_RUNDEAD,
   MAX_APPLY_TYPE
}
apply_types;

#define REVERSE_APPLY		   1000

/*
 * Values for containers (value[1]).
 * Used in #OBJECTS.
 */
#define CONT_CLOSEABLE		   BV00
#define CONT_PICKPROOF		   BV01
#define CONT_CLOSED		   BV02
#define CONT_LOCKED		   BV03
#define CONT_EATKEY		   BV04

/*
 * Sitting/Standing/Sleeping/Sitting on/in/at Objects - Xerves
 * Used for furniture (value[2]) in the #OBJECTS Section
 */
#define SIT_ON     BV00
#define SIT_IN     BV01
#define SIT_AT     BV02

#define STAND_ON   BV03
#define STAND_IN   BV04
#define STAND_AT   BV05

#define SLEEP_ON   BV06
#define SLEEP_IN   BV07
#define SLEEP_AT   BV08

#define REST_ON     BV09
#define REST_IN     BV10
#define REST_AT     BV11

/*
 * Weapon weight type, used for weapons at V4
 * Defined in #OBJECTS.  -- Xerves 5-31-99
 */
#define WEIGHT_TINY      1
#define WEIGHT_LITTLE    2
#define WEIGHT_SMALL     3
#define WEIGHT_LIGHT     4
#define WEIGHT_MODERATE  5
#define WEIGHT_HEAVY     6
#define WEIGHT_LARGE     7
#define WEIGHT_HUGE      8
#define WEIGHT_MASSIVE   9
#define WEIGHT_GIGANTIC  10

/*
 * Well known room virtual numbers.
 * Defined in #ROOMS.
 */
#define ROOM_VNUM_LIMBO		    2
#define ROOM_VNUM_POLY		     3
#define ROOM_VNUM_CHAT		     9003
#define ROOM_VNUM_TEMPLE           21303
#define ROOM_VNUM_ALTAR            21303
#define ROOM_VNUM_SCHOOL	       21303
#define ROOM_AUTH_START		    21300
#define ROOM_VNUM_PORTAL           21034
#define ROOM_VNUM_STOWN            60000
#define ROOM_VNUM_ETOWN            90000
#define VNUM_ROOM_MORGUE           21101
/*
 * Room flags.           Holy cow!  Talked about stripped away..
 * Used in #ROOMS.       Those merc guys know how to strip code down.
 *			 Lets put it all back... ;)
 */

typedef enum
{
   ROOM_DARK, ROOM_DEATH, ROOM_NO_MOB, ROOM_INDOORS, ROOM_LAWFUL, ROOM_NEUTRAL,
   ROOM_CHAOTIC, ROOM_NO_MAGIC, ROOM_TUNNEL, ROOM_PRIVATE, ROOM_SAFE, ROOM_SOLITARY,
   ROOM_PET_SHOP, ROOM_NO_RECALL, ROOM_DONATION, ROOM_NODROPALL, ROOM_SILENCE,
   ROOM_LOGSPEECH, ROOM_NODROP, ROOM_CLANSTOREROOM, ROOM_NO_SUMMON, ROOM_NO_ASTRAL,
   ROOM_TELEPORT, ROOM_TELESHOWDESC, ROOM_NOFLOOR, ROOM_NOSUPPLICATE, ROOM_ARENA,
   ROOM_NOMISSILE, ROOM_NOEXIT, ROOM_IMP, ROOM_PROTOTYPE, ROOM_CASTEROOM, ROOM_MARK,
   ROOM_WILDERNESS, ROOM_KEEPDESC, ROOM_MAP, ROOM_MOUNT_SHOP, ROOM_PORTAL, ROOM_FREEKILL,
   ROOM_ANITEM, ROOM_NOLOOT, ROOM_TSAFE, ROOM_NOWDAM, ROOM_FORGEROOM, ROOM_MANANODE,
   ROOM_NOMILITARY, ROOM_MARKETPLACE, ROOM_PERMDEATH
}
eroom_flags;

/* 32 defines Maxed, do not add anymore till it is extended!!! --Xerves */
//#define ROOM_DARK        BV00
//#define ROOM_DEATH  BV01
//#define ROOM_NO_MOB  BV02
//#define ROOM_INDOORS  BV03
//#define ROOM_LAWFUL  BV04
//#define ROOM_NEUTRAL  BV05
//#define ROOM_CHAOTIC  BV06
//#define ROOM_NO_MAGIC  BV07
//#define ROOM_TUNNEL  BV08
//#define ROOM_PRIVATE  BV09
//#define ROOM_SAFE        BV10
//#define ROOM_SOLITARY  BV11
//#define ROOM_PET_SHOP  BV12
//#define ROOM_NO_RECALL  BV13
//#define ROOM_DONATION  BV14
//#define ROOM_NODROPALL  BV15
//#define ROOM_SILENCE  BV16
//#define ROOM_LOGSPEECH  BV17
//#define ROOM_NODROP  BV18
//#define ROOM_CLANSTOREROOM BV19
//#define ROOM_NO_SUMMON  BV20
//#define ROOM_NO_ASTRAL  BV21
//#define ROOM_TELEPORT  BV22
//#define ROOM_TELESHOWDESC BV23
//#define ROOM_NOFLOOR  BV24
//#define ROOM_NOSUPPLICATE     BV25
//#define ROOM_ARENA  BV26
//#define ROOM_NOMISSILE  BV27
//#define ROOM_NOEXIT           BV28
//#define ROOM_IMP              BV29
//#define ROOM_PROTOTYPE       BV30
//#define ROOM_CASTEROOM        BV31
/* The above group is Maxed, do not add anymore till it is EXTENDED --Xerves */

/*
 * Directions.
 * Used in #ROOMS.
 */
typedef enum
{
   DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_UP, DIR_DOWN,
   DIR_NORTHEAST, DIR_NORTHWEST, DIR_SOUTHEAST, DIR_SOUTHWEST, DIR_SOMEWHERE
}
dir_types;

#define PT_WATER	100
#define PT_AIR		200
#define PT_EARTH	300
#define PT_FIRE		400

/*
 * Push/pull types for exits					-Thoric
 * To differentiate between the current of a river, or a strong gust of wind
 */
typedef enum
{
   PULL_UNDEFINED, PULL_VORTEX, PULL_VACUUM, PULL_SLIP, PULL_ICE, PULL_MYSTERIOUS,
   PULL_CURRENT = PT_WATER, PULL_WAVE, PULL_WHIRLPOOL, PULL_GEYSER,
   PULL_WIND = PT_AIR, PULL_STORM, PULL_COLDWIND, PULL_BREEZE,
   PULL_LANDSLIDE = PT_EARTH, PULL_SINKHOLE, PULL_QUICKSAND, PULL_EARTHQUAKE,
   PULL_LAVA = PT_FIRE, PULL_HOTAIR
}
dir_pulltypes;


#define MAX_DIR			DIR_SOUTHWEST /* max for normal walking */
#define DIR_PORTAL		DIR_SOMEWHERE /* portal direction   */


/*
 * Exit flags.			EX_RES# are reserved for use by the
 * Used in #ROOMS.		SMAUG development team
 */
#define EX_ISDOOR		  BV00
#define EX_CLOSED		  BV01
#define EX_LOCKED		  BV02
#define EX_SECRET		  BV03
#define EX_SWIM			  BV04
#define EX_PICKPROOF		  BV05
#define EX_FLY			  BV06
#define EX_CLIMB		  BV07
#define EX_DIG			  BV08
#define EX_EATKEY		  BV09
#define EX_NOPASSDOOR		  BV10
#define EX_HIDDEN		  BV11
#define EX_PASSAGE		  BV12
#define EX_PORTAL 		  BV13
#define EX_RES1			  BV14
#define EX_RES2			  BV15
#define EX_xCLIMB		  BV16
#define EX_xENTER		  BV17
#define EX_xLEAVE		  BV18
#define EX_xAUTO		  BV19
#define EX_NOFLEE	  	  BV20
#define EX_xSEARCHABLE		  BV21
#define EX_BASHED                 BV22
#define EX_BASHPROOF              BV23
#define EX_NOMOB		  BV24
#define EX_WINDOW		  BV25
#define EX_xLOOK		  BV26
#define EX_OVERLAND               BV27
#define MAX_EXFLAG		  27

/*
 * Sector types.
 * Used in #ROOMS.
 */
typedef enum
{
   SECT_INSIDE, SECT_CITY, SECT_FIELD, SECT_FOREST, SECT_HILLS, SECT_MOUNTAIN,
   SECT_WATER_SWIM, SECT_WATER_NOSWIM, SECT_UNDERWATER, SECT_AIR, SECT_DESERT,
   SECT_DUNNO, SECT_OCEANFLOOR, SECT_UNDERGROUND, SECT_ROAD, SECT_ENTER,
   SECT_MINEGOLD, SECT_MINEIRON, SECT_HCORN, SECT_HGRAIN, SECT_STREE, SECT_NTREE,
   SECT_SGOLD, SECT_NGOLD, SECT_SIRON, SECT_NIRON, SECT_SCORN, SECT_NCORN,
   SECT_SGRAIN, SECT_NGRAIN, SECT_RIVER, SECT_JUNGLE, SECT_SHORE, SECT_TUNDRA,
   SECT_ICE, SECT_OCEAN, SECT_LAVA, SECT_TREE, SECT_NOSTONE, SECT_QUICKSAND,
   SECT_WALL, SECT_GLACIER, SECT_EXIT, SECT_SWAMP, SECT_PATH, SECT_PLAINS,
   SECT_PAVE, SECT_BRIDGE, SECT_VOID, SECT_STABLE, SECT_FIRE, SECT_BURNT,
   SECT_STONE, SECT_SSTONE, SECT_NSTONE, SECT_DWALL, SECT_NBWALL, 
   SECT_DOOR, SECT_CDOOR, SECT_LDOOR, SECT_HOLD, SECT_QEXIT, 
   SECT_SHIP, SECT_MAX
}
sector_types;

#define KRES_UNKNOWN -1
#define KRES_GOLD 1
#define KRES_IRON 2
#define KRES_CORN 3
#define KRES_GRAIN 4
#define KRES_LUMBER 5
#define KRES_STONE 6
#define KRES_FISH 7

/* Job defines, mostly for bug checks -- Xerves 12/99 */
#define MAX_RTYPE         KRES_FISH
/*
 * Equpiment wear locations.
 * Used in #RESETS.
 */
 
#define SPOWER_MIN      1001
#define SPOWER_LOW      1002
#define SPOWER_MED      1003
#define SPOWER_HI       1004
#define SPOWER_GREAT    1005
#define SPOWER_GREATER  1006
#define SPOWER_GREATEST 1007

typedef enum
{
   WEAR_NONE = -1, WEAR_LIGHT = 0, WEAR_FINGER_L, WEAR_FINGER_R, WEAR_NECK,
   WEAR_ABOUT_NECK, WEAR_BODY, WEAR_HEAD, WEAR_LEG_L, WEAR_LEG_R, WEAR_ARM_L,
   WEAR_ARM_R, WEAR_SHIELD, WEAR_WAIST, WEAR_WIELD, WEAR_DUAL_WIELD, WEAR_MISSILE_WIELD,
   WEAR_LODGE_RIB, WEAR_LODGE_ARM, WEAR_LODGE_LEG, WEAR_NOCKED, WEAR_BACK, MAX_WEAR
}
wear_locations;

/* Board Types */
typedef enum
{ BOARD_NOTE, BOARD_MAIL }
board_types;

/* Auth Flags */
#define FLAG_WRAUTH		      1
#define FLAG_AUTH		      2

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

/*
 * Conditions.
 */
typedef enum
{
   COND_DRUNK, COND_FULL, COND_THIRST, COND_BLOODTHIRST, MAX_CONDS
}
conditions;

/*
 * Positions.
 */
typedef enum
{
   POS_DEAD, POS_MORTAL, POS_INCAP, POS_STUNNED, POS_SLEEPING, POS_BERSERK,
   POS_RESTING, POS_AGGRESSIVE, POS_SITTING, POS_FIGHTING, POS_DEFENSIVE,
   POS_EVASIVE, POS_STANDING, POS_MOUNTED, POS_SHOVE, POS_DRAG, POS_RIDING
}
positions;

/*
 * Styles.
 */
typedef enum
{
   STYLE_BERSERK, STYLE_AGGRESSIVE, STYLE_FIGHTING, STYLE_DEFENSIVE,
   STYLE_EVASIVE, STYLE_DIVINE, STYLE_WIZARDRY
}
styles;

/*
 * ACT bits for players.
 */
typedef enum
{
   PLR_IS_NPC, PLR_BOUGHT_PET, PLR_SHOVEDRAG, PLR_AUTOEXIT, PLR_AUTOLOOT,
   PLR_AUTOSAC, PLR_BLANK, PLR_OUTCAST, PLR_BRIEF, PLR_COMBINE, PLR_PROMPT,
   PLR_TELNET_GA, PLR_HOLYLIGHT, PLR_WIZINVIS, PLR_ROOMVNUM, PLR_SILENCE,
   PLR_NO_EMOTE, PLR_ATTACKER, PLR_NO_TELL, PLR_LOG, PLR_DENY, PLR_FREEZE,
   PLR_THIEF, PLR_KILLER, PLR_LITTERBUG, PLR_ANSI, PLR_RIP, PLR_NICE, PLR_FLEE,
   PLR_AUTOGOLD, PLR_AUTOMAP, PLR_AFK, PLR_INVISPROMPT, PLR_QUESTOR, PLR_REMORT,
   PLR_STATQUESTOR, PLR_OSET, PLR_MSET, PLR_REDIT, PLR_GAMBLER, PLR_NOTRANS,
   PLR_ONMAP, PLR_MAPEDIT, PLR_BOUGHT_MOUNT, PLR_POV, PLR_PORTALHUNT, PLR_ARENACHAR, PLR_AWAY,
   PLR_PKRESET, PLR_WARNED, PLR_NOWEATHER, PLR_TARGET, PLR_CARRYBIN, PLR_MXP, PLR_RPSETUP,
   PLR_SHOWASIMM, PLR_SHOWNAMES, PLR_UKNOWN, PLR_SHOWPC, PLR_HASLASTNAME, PLR_ONDUTY,
   PLR_NOSIMILIAR, PLR_KRESET, PLR_MMOBILES, PLR_PARRY, PLR_DODGE, PLR_TUMBLE,
   PLR_MAPWINDOW, PLR_AUTOSPLIT, PLR_WILDERTILES, PLR_NORIDERS, PLR_NOTOHIT,
   PLR_QUESTLOOT, PLR_COUNTER
}
player_flags;

/* Bits for pc_data->flags. */
#define PCFLAG_R1                  BV00
#define PCFLAG_DEADLY              BV01
#define PCFLAG_UNAUTHED		   BV02
#define PCFLAG_NORECALL            BV03
#define PCFLAG_NOINTRO             BV04
#define PCFLAG_GAG		   BV05
#define PCFLAG_RETIRED             BV06
#define PCFLAG_GUEST               BV07
#define PCFLAG_NOSUMMON		   BV08
#define PCFLAG_PAGERON		   BV09
#define PCFLAG_NOTITLE             BV10
#define PCFLAG_GROUPWHO		   BV11
#define PCFLAG_DIAGNOSE		   BV12
#define PCFLAG_HIGHGAG		   BV13
#define PCFLAG_WATCH		   BV14 /* see function "do_watch" */
#define PCFLAG_HELPSTART	   BV15 /* Force new players to help start */
#define PCFLAG_NOBEEP              BV16 /* Added by Samson 2-15-98 */
#define PCFLAG_NOFINGER            BV17 /* Finger at will? -- Xerves */
#define PCFLAG_NOFOLLOW	           BV18 /* Follow at will -- Xerves */
#define PCFLAG_AUTOPROTO       BV19 //Will treat all objs/mobs as if they are prototype
#define PCFLAG_CNOASSIST       BV20 //Charmee will not auto assist


typedef enum
{
   TIMER_NONE, TIMER_RECENTFIGHT, TIMER_SHOVEDRAG, TIMER_DO_FUN,
   TIMER_APPLIED, TIMER_PKILLED, TIMER_ASUPRESSED, TIMER_NUISANCE,
   TIMER_FORGE, TIMER_COOLING, TIMER_AUCTION
}
timer_types;

struct timer_data
{
   TIMER *prev;
   TIMER *next;
   DO_FUN *do_fun;
   int value;
   sh_int type;
   int count;
};


/*
 * Channel bits.
 */
#define	CHANNEL_AUCTION		   BV00
#define	CHANNEL_CHAT		   BV01
#define	CHANNEL_TALKQUEST		   BV02
#define	CHANNEL_IMMTALK		   BV03
#define	CHANNEL_MUSIC		   BV04
#define	CHANNEL_ASK		   BV05
#define	CHANNEL_SHOUT		   BV06
#define	CHANNEL_YELL		   BV07
#define CHANNEL_MONITOR		   BV08
#define CHANNEL_LOG		   BV09
#define CHANNEL_HIGHGOD		   BV10
#define CHANNEL_CLAN		   BV11
#define CHANNEL_BUILD		   BV12
#define CHANNEL_HIGH		   BV13
#define CHANNEL_AVTALK		   BV14
#define CHANNEL_PRAY		   BV15
#define CHANNEL_COUNCIL 	   BV16
#define CHANNEL_GUILD              BV17
#define CHANNEL_COMM		   BV18
#define CHANNEL_TELLS		   BV19
#define CHANNEL_ORDER              BV20
#define CHANNEL_NEWBIE             BV21
#define CHANNEL_WARTALK            BV22
#define CHANNEL_RACETALK           BV23
#define CHANNEL_WARN               BV24
#define CHANNEL_WHISPER		   BV25
#define CHANNEL_AUTH		   BV26
#define CHANNEL_INFO		   BV27
#define CHANNEL_GSOCIAL          BV28
#define CHANNEL_IMMREMINDER        BV29
#define CHANNEL_KINGDOM		   BV30

struct channel_history
{
   CHANNEL_HISTORY *next;
   CHANNEL_HISTORY *prev;
   int channel;
   char *sender;
   char *text;
   int pid;
   int flags;
   int level;
   int kpid;
};

#define CHISTORY_CLOAKED       BV00
#define CHISTORY_INVIS         BV01
#define CHISTORY_WIZINVIS      BV02
#define CHISTORY_FAMOUS        BV03

/* Area defines - Scryn 8/11
 *
 */
#define AREA_DELETED		   BV00
#define AREA_LOADED                BV01

/* Area flags - Narn Mar/96 */
#define AFLAG_NOKILL               BV00 // S in FANS
#define AFLAG_FREEKILL		      BV01 // F in FANS
#define AFLAG_NOTELEPORT	        BV02
#define AFLAG_NOQUEST               BV03 /* No mob/obj Quest in area -- Xerves 9/14/99 */
#define AFLAG_CHANGED               BV04
#define AFLAG_RESOURCE              BV05 /* Save some processing, check to see if the area
                                            even has natural resources -- Xerves 10/27/99 */
#define AFLAG_CARPENTER             BV06 /* Editable by carpenter job -- Xerves 12/99 */
#define AFLAG_NOAREA	 	       BV07 // No Area Attacks like hitall in the area
#define AFLAG_ANITEM                BV08 // A in FANS
#define AFLAG_NOLOOT                BV09 // N in FANS
#define AFLAG_NOWDAM                BV10 // No damage from weather received


struct npcrace_data //Linked list for NPC Race Data, used with quest system too
{
   NPCRACE_DATA *next;
   NPCRACE_DATA *prev;
   int racenum;
   char *racename;
   int willload[MAX_QUEST_DIFF];
   char *description[MAX_QUEST_DIFF];
   int sex[MAX_QUEST_DIFF];
   int fulldescription[MAX_QUEST_DIFF];
   EXT_BV flags[MAX_QUEST_DIFF];
   EXT_BV nflags[MAX_QUEST_DIFF];
};

//119 Flags at DETECTHIDDEN, if more than 128 is needed add another flag variable
typedef enum
{
   QMOB_HP, QMOB_AGI, QMOB_STR, QMOB_STR2, QMOB_INT, QMOB_INT2, QMOB_LINT, QMOB_LINT2,
   QMOB_LHP, QMOB_LAGI, QMOB_LSTR, QMOB_LSTR2, QMOB_DEX, QMOB_LDEX, QMOB_CON, QMOB_LCON,
   QMOB_WIS, QMOB_WIS2, QMOB_LWIS, QMOB_LWIS2,
   QMOB_LCK, QMOB_LLCK, QMOB_ARMOR, QMOB_ARMOR2, QMOB_LARMOR, QMOB_LARMOR2, QMOB_BASH,
   QMOB_LBASH, QMOB_SLASH, QMOB_LSLASH, QMOB_STAB, QMOB_LSTAB, QMOB_DAM, QMOB_DAM2,
   QMOB_LDAM, QMOB_LDAM2, QMOB_NOGOLD, QMOB_GOLD1, QMOB_GOLD2, QMOB_LGOLD1, QMOB_LGOLD2,
   QMOB_NOAGGRO, QMOB_RUNNING, QMOB_UNDEAD, QMOB_LIVINGDEAD, QMOB_SENTINEL, QMOB_DODGE, QMOB_PARRY,
   QMOB_LIGHT, QMOB_SERIOUS, QMOB_CRITICAL, QMOB_HEAL, QMOB_SANCTUARY, QMOB_FSHIELD,
   QMOB_SSHIELD, QMOB_ISHIELD, QMOB_STONESKIN, QMOB_DISARM, QMOB_TRIP, QMOB_ABASH,
   QMOB_STUN, QMOB_GOUGE, QMOB_BACKSTAB, QMOB_BLINDNESS, QMOB_LBREATH, QMOB_GBREATH,  
   QMOB_FIREBREATH, QMOB_FROSTBREATH, QMOB_ACIDBREATH, QMOB_CURSE, QMOB_HARM, QMOB_FIREBALL,
   QMOB_WEAKEN, QMOB_POISON, QMOB_SFIRE, QMOB_SCOLD, QMOB_SELECT, QMOB_SENERGY, QMOB_SBLUNT,
   QMOB_SPIERCE, QMOB_SSLASH, QMOB_SSLEEP, QMOB_SCHARM, QMOB_SNONMAGIC, QMOB_SMAGIC,
   QMOB_SPARALYSIS, QMOB_SAIR, QMOB_RFIRE, QMOB_RCOLD, QMOB_RELECT, QMOB_RENERGY, QMOB_RBLUNT,
   QMOB_RPIERCE, QMOB_RSLASH, QMOB_RSLEEP, QMOB_RCHARM, QMOB_RNONMAGIC, QMOB_RMAGIC,
   QMOB_RPARALYSIS, QMOB_RAIR, QMOB_IFIRE, QMOB_ICOLD, QMOB_IELECT, QMOB_IENERGY, QMOB_IBLUNT,
   QMOB_IPIERCE, QMOB_ISLASH, QMOB_ISLEEP, QMOB_ICHARM, QMOB_INONMAGIC, QMOB_IMAGIC,
   QMOB_IPARALYSIS, QMOB_IAIR, QMOB_INVISIBLE, QMOB_DETECTINVIS, QMOB_HIDE,
   QMOB_TRUESIGHT, QMOB_SNEAK, QMOB_DETECTHIDDEN
}
qmob_types;

struct quest_mob_data //Structure for quest mobs
{
   QMOB_DATA *next;
   QMOB_DATA *prev;
   char *name;
   int lowdiff;
   int hidiff;
   int race;
   int sex;
   int boss;
   EXT_BV flags;
};

//FULL 128 FLAGS, DO NOT ADD MORE!!!
typedef enum
{
   QOBJ_FINGER, QOBJ_NECK, QOBJ_BODY, QOBJ_HEAD, QOBJ_LEGS, QOBJ_ARMS, QOBJ_WSHIELD,
   QOBJ_ANECK, QOBJ_WAIST, QOBJ_WIELD, QOBJ_MAGIC, QOBJ_NODROP, QOBJ_BLESS, QOBJ_INVENTORY,
   QOBJ_ORGANIC, QOBJ_METAL, QOBJ_POISONED, QOBJ_DEATHROT, QOBJ_NOLOCATE, QOBJ_GROUNDROT,
   QOBJ_NOGIVE, QOBJ_NODISARM, QOBJ_NOBREAK, QOBJ_ARTIFACT, QOBJ_TWOHANDED, QOBJ_IMBUABLE,
   QOBJ_GEM, QOBJ_GEM_SETTING, QOBJ_SANCTIFIED, QOBJ_CLOAK, QOBJ_UNIQUE, QOBJ_STR, QOBJ_STR2,
   QOBJ_STR3, QOBJ_LSTR, QOBJ_LSTR2, QOBJ_DEX, QOBJ_DEX2, QOBJ_DEX3, QOBJ_LDEX, QOBJ_LDEX2,
   QOBJ_INT, QOBJ_INT2, QOBJ_INT3, QOBJ_LINT, QOBJ_LINT2, QOBJ_WIS, QOBJ_WIS2, QOBJ_WIS3,
   QOBJ_LWIS, QOBJ_LWIS2, QOBJ_CON, QOBJ_CON2, QOBJ_CON3, QOBJ_LCON, QOBJ_LCON2,
   QOBJ_HP, QOBJ_HP2, QOBJ_HP3, QOBJ_HP4, QOBJ_HP5, QOBJ_HP6, QOBJ_HP7, QOBJ_LHP, QOBJ_LHP2,
   QOBJ_LHP3, QOBJ_MP, QOBJ_MP2, QOBJ_MP3, QOBJ_MP4, QOBJ_MP5, QOBJ_MP6, QOBJ_MP7, QOBJ_LMP,
   QOBJ_LMP2, QOBJ_LMP3, QOBJ_DAM, QOBJ_DAM2, QOBJ_DAM3, QOBJ_DAM4, QOBJ_DAM5, QOBJ_LDAM,
   QOBJ_LDAM2, QOBJ_TOHIT, QOBJ_TOHIT2, QOBJ_TOHIT3, QOBJ_LTOHIT, QOBJ_LTOHIT2, QOBJ_SSKIN,
   QOBJ_SSKIN2, QOBJ_SSKIN3, QOBJ_SSKIN4, QOBJ_SSKIN5, QOBJ_LSSKIN, QOBJ_LSSKIN2, QOBJ_SAVE,
   QOBJ_SAVE2, QOBJ_SAVE3, QOBJ_SAVE4, QOBJ_SAVE5, QOBJ_LSAVE, QOBJ_LSAVE2, QOBJ_LSAVE3,
   QOBJ_RBLUNT, QOBJ_RSLASH, QOBJ_RPIERCE, QOBJ_RFIRE, QOBJ_RCOLD, QOBJ_RELECT, QOBJ_RENERGY,
   QOBJ_RAIR, QOBJ_RNONMAGIC, QOBJ_RMAGIC, QOBJ_SBLUNT, QOBJ_SSLASH, QOBJ_SPIERCE, QOBJ_SFIRE,
   QOBJ_SCOLD, QOBJ_SELECT, QOBJ_SENERGY, QOBJ_SAIR, QOBJ_SNONMAGIC, QOBJ_SMAGIC,
   QOBJ_IBLUNT, QOBJ_ISLASH, QOBJ_IPIERCE, QOBJ_IFIRE, QOBJ_ICOLD
}
qobj_types;   
   
//36 Flags at LMPGEN2, ADD HERE!
//71 at LWMOD3
//73 at NOTHIRST
typedef enum
{
   QOBJ_IELECT, QOBJ_IENERGY, QOBJ_IAIR, QOBJ_INONMAGIC, QOBJ_IMAGIC, QOBJ_INVISIBLE, QOBJ_DETECT_INVIS, QOBJ_DETECT_MAGIC,
   QOBJ_DETECT_HIDDEN, QOBJ_SANCTUARY, QOBJ_FLYING, QOBJ_PASS_DOOR, QOBJ_FLOATING, QOBJ_TRUESIGHT,
   QOBJ_DETECT_TRAPS, QOBJ_SCRYING, QOBJ_FIRESHIELD, QOBJ_SHOCKSHIELD, QOBJ_ICESHIELD, QOBJ_AQUA_BREATH,
   QOBJ_WIZARDEYE, QOBJ_EWIZARDEYE, QOBJ_MWIZARDEYE, QOBJ_HPGEN, QOBJ_HPGEN2, QOBJ_HPGEN3, QOBJ_HPGEN4,
   QOBJ_HPGEN5, QOBJ_LHPGEN, QOBJ_LHPGEN2, QOBJ_MPGEN, QOBJ_MPGEN2, QOBJ_MPGEN3, QOBJ_MPGEN4, QOBJ_MPGEN5,
   QOBJ_LMPGEN, QOBJ_LMPGEN2, QOBJ_SHIELD, QOBJ_SHIELD2, QOBJ_SHIELD3, QOBJ_SHIELD4, QOBJ_SHIELD5,
   QOBJ_LSHIELD, QOBJ_LSHIELD2, QOBJ_AGI, QOBJ_AGI2, QOBJ_AGI3, QOBJ_AGI4, QOBJ_AGI5, QOBJ_LAGI, QOBJ_LAGI2,
   QOBJ_LAGI3, QOBJ_LCK, QOBJ_LCK2, QOBJ_LCK3, QOBJ_LLCK, QOBJ_LLCK2, QOBJ_WMOD, QOBJ_WMOD2, QOBJ_WMOD3,
   QOBJ_WMOD4, QOBJ_WMOD5, QOBJ_LWMOD, QOBJ_LWMOD2, QOBJ_LWMOD3, QOBJ_NOHUNGER, QOBJ_NOTHIRST, QOBJ_STAT,
   QOBJ_STAT2, QOBJ_STAT3, QOBJ_STAT4, QOBJ_STAT5, QOBJ_LSTAT, QOBJ_LSTAT2, QOBJ_BATTLE, QOBJ_BATTLE2, QOBJ_BATTLE3,
   QOBJ_BATTLE4, QOBJ_LBATTLE, QOBJ_LBATTLE2, QOBJ_BACK
}
qobj_types2;

struct quest_obj_data //Structure for quest objs
{
   QOBJ_DATA *next;
   QOBJ_DATA *prev;
   int value[14];
   int type;
   int gold;
   float weight;
   char *name;
   int lowdiff;
   int hidiff;
   int race; //If set the object will modify itself based on race
   int boss;
   int qps;
   EXT_BV flags;
   EXT_BV flags2;
};

struct quest_data //Structure for the actual quests
{
   QUEST_DATA *next;
   QUEST_DATA *prev;
   int player[6];
   int qp[6];
   int timeleft;
   int traveltime;
   int tillnew;
   int mission;
   int tokill;
   int killed;
   int x;
   int y;
   int map;
   int difficulty;
   AREA_DATA *questarea;
};   

/*
 * Prototype for a mob.
 * This is the in-memory version of #MOBILES.
 */
struct mob_index_data
{
   MOB_INDEX_DATA *next;
   MOB_INDEX_DATA *next_sort;
   SPEC_FUN *spec_fun;
   SHOP_DATA *pShop;
   REPAIR_DATA *rShop;
   MPROG_DATA *mudprogs;
   EXT_BV progtypes;
   char *player_name;
   char *short_descr;
   char *long_descr;
   char *description;
   sh_int vnum;
   sh_int count;
   sh_int killed;
   sh_int sex;
   sh_int level;
   EXT_BV act;
   EXT_BV affected_by;
   sh_int alignment;
   sh_int mobthac0; /* Unused */
   sh_int ac;
   sh_int hitnodice;
   sh_int hitsizedice;
   sh_int hitplus;
   sh_int damnodice;
   sh_int damsizedice;
   sh_int damplus;
   sh_int damaddlow;
   sh_int damaddhi;
   sh_int max_move; /* Will save movement on mobs now -- Xerves */
   int gold;
   int xflags;
   int resistant;
   int immune;
   int susceptible;
   int elementb;
   int mover; //move rating
   EXT_BV attacks;
   EXT_BV defenses;
   int speaks;
   int speaking;
   sh_int position;
   sh_int defposition;
   int height;
   int weight;
   sh_int race;
   sh_int class;
   sh_int hitroll;
   sh_int damroll;
   /* Going to change these to m1 to m6 -- Xerves */
   int m1; /* goldmin */
   int m2; /* goldmax */
   int m3; /* goldlim */
   sh_int m4; /* levelmin */
   sh_int m5; /* levelmax */
   sh_int m6; /* 3rd sh_int */
   int m7; /* For whatever */
   int m8; /* For whatever */
   int m9; // For whatever
   int m10;
   int m11;
   int m12;
   //For Perm applies
   int apply_res_fire;
   int apply_res_water;
   int apply_res_air;
   int apply_res_earth;
   int apply_res_energy;
   int apply_res_magic;
   int apply_res_nonmagic;
   int apply_res_blunt;
   int apply_res_pierce;
   int apply_res_slash;
   int apply_res_poison;
   int apply_res_paralysis;
   int apply_res_holy;
   int apply_res_unholy;
   int apply_res_undead;
   EXT_BV miflags;
   sh_int cident; /* Used to identify the Caste Mob --Xerves */
   sh_int perm_str;
   sh_int perm_int;
   sh_int perm_wis;
   sh_int perm_dex;
   sh_int perm_con;
   sh_int perm_cha;
   sh_int perm_lck;
   sh_int perm_agi;
   sh_int tohitbash;
   sh_int tohitslash;
   sh_int tohitstab;
   sh_int saving_poison_death;
   sh_int saving_wand;
   sh_int saving_para_petri;
   sh_int saving_breath;
   sh_int saving_spell_staff;
};


struct hunt_hate_fear
{
   char *name;
   CHAR_DATA *who;
};

struct fighting_data
{
   CHAR_DATA *who;
   int xp;
   int twinkpoints;
   sh_int align;
   sh_int duration;
   sh_int timeskilled;
};

/*
struct	editor_data
{
    sh_int		numlines;
    sh_int		on_line;
    sh_int		size;
    char		line[49][81];
};  */

struct char_map_data
{
   CMAP_DATA *next;
   CMAP_DATA *prev;
   CHAR_DATA *mapch;
};

struct obj_map_data
{
   OMAP_DATA *next;
   OMAP_DATA *prev;
   OBJ_DATA *mapobj;
};

struct kingdom_chest_data
{
   KCHEST_DATA *next;
   KCHEST_DATA *prev;
   OBJ_DATA *obj;
};

struct tornado_data
{
   TORNADO_DATA *next;
   TORNADO_DATA *prev;
   sh_int x;
   sh_int y;
   sh_int map;
   sh_int power;
   sh_int turns;
   sh_int dir;
};

struct front_data
{
   FRONT_DATA *next;
   FRONT_DATA *prev;
   sh_int type;
   sh_int typec;
   sh_int x;
   sh_int y;
   sh_int map;
   sh_int speed;
   sh_int size;
   sh_int f[35];
};


struct wilderness_bin_data
{
   BIN_DATA *next;
   BIN_DATA *prev;
   int bin1;
   int bin2;
   int x;
   int y;
   int map;
   int room;
   int vnum;
   int serial;
};

struct battle_arena_data
{
   BARENA_DATA *next;
   BARENA_DATA *prev;
   char *name;
   int wins;
   int losses;
   int ties;
   int games;
   int numavg;
   int kills;
   int pranking;
   int pkills;
   int pdeaths;
};

struct gem_data
{
   GEM_DATA *next;
   GEM_DATA *prev;
   int cost;
   int vnum;
   int rarity;
};

struct box_data
{
   BOX_DATA *next;
   BOX_DATA *prev;
   int vnum;
};

struct stable_data
{
   STABLE_DATA *next;
   STABLE_DATA *prev;
   sh_int vnum;
   char *name;
   char *short_descr;
   char *long_descr;
   char *description;
   sh_int level;
   sh_int exp;
   sh_int hit;
   sh_int max_hit;
   sh_int move;
   sh_int max_move;
};

struct extracted_char_data
{
   EXTRACT_CHAR_DATA *next;
   CHAR_DATA *ch;
   ROOM_INDEX_DATA *room;
   ch_ret retcode;
   bool extract;
};

struct clan_member_list
{
   CMEMBER_DATA *next;
   CMEMBER_DATA *prev;
   char *name;
   char *rank;
   char *clan;
   int level;
   int class;
   int race;
   int sex;
};

struct kingdom_member_list
{
   KMEMBER_DATA *next;
   KMEMBER_DATA *prev;
   char *name;
   int caste;
   int kingdom;
   int kpid;
   int level;
   int class;
   int race;
   int sex;
};

struct trainer_data
{
   TRAINER_DATA *next;
   TRAINER_DATA *prev;
   int vnum;
   sh_int sn[20]; //Up to 20 skills/groups
   sh_int mastery[20];
};

struct military_eq
{
   sh_int obj1;
   sh_int obj2;
   sh_int obj3;
   sh_int obj4;
   sh_int obj5;
   sh_int obj6;
};

//Saves some critical info for putting back into the character.
struct save_arena_data
{
   int pflags;
   EXT_BV act;
   sh_int perm_str;
   sh_int perm_int;
   sh_int perm_wis;
   sh_int perm_dex;
   sh_int perm_con;
   sh_int perm_cha;
   sh_int perm_lck;
   sh_int perm_agi;
   sh_int mod_str;
   sh_int mod_int;
   sh_int mod_wis;
   sh_int mod_dex;
   sh_int mod_con;
   sh_int mod_cha;
   sh_int mod_lck;
   sh_int mod_agi;
   sh_int hit;
   sh_int mana;
   sh_int move;
   sh_int max_hit;
   sh_int max_move;
   sh_int max_mana;
   int resistant;
   int susceptible;
   int immune;
   sh_int pcondition[MAX_CONDS];
   sh_int pwizinvis;
   sh_int mental_state;
   sh_int saving_poison_death;
   sh_int saving_wand;
   sh_int saving_para_petri;
   sh_int saving_breath;
   sh_int saving_spell_staff;
   sh_int style;
   int wimpy;
   EXT_BV affected_by;
   CHAR_DATA *ppet;
   CHAR_DATA *pmount;
   char *pbamfin;
   char *pbamfout;
   char *prank;
   char *pbestowments;
   sh_int level;
   sh_int trust;
   sh_int hitroll;
   sh_int damroll;
   sh_int armor;
   sh_int plearned[MAX_SKILL];
   sh_int pranking[MAX_SKILL];
   sh_int pspellgroups[MAX_GROUP + 1];
   sh_int pspellpoints[MAX_GROUP + 1];
};
struct forge_data
{
   FORGE_DATA *next;
   FORGE_DATA *prev;
   sh_int vnum;
   int slabnum;
   char *name;
   int type;
};
struct slab_data
{
   SLAB_DATA *next;
   SLAB_DATA *prev;
   sh_int vnum;
   sh_int kmob; //Used by the armmilitary routine for default eq.
   char *name;
   char *adj;
   int qps;
};

struct depo_ore_data
{
   DEPO_ORE_DATA *next;
   DEPO_ORE_DATA *prev;
   int vnum; //just for a bit of checking
   int count; //amount of raw slabs
   DEPO_WEAPON_DATA *first_weapon;
   DEPO_WEAPON_DATA *last_weapon;
};

struct depo_weapon_data
{
   DEPO_WEAPON_DATA *next;
   DEPO_WEAPON_DATA *prev;
   int vnum; //match the vnum
   int count; //number in kingdom
};   

struct kingdom_military_list
{   
   char *name;
   char *short_descr;
   char *long_descr;
   sh_int race;
   sh_int str;
   sh_int intelligence;
   sh_int wis;
   sh_int lck;
   sh_int dex;
   sh_int agi;
   sh_int con;
   sh_int vnum;
   sh_int room;
   sh_int kingdom;
   sh_int cost;
   sh_int x;
   sh_int y;
   sh_int map;
   int speed;
   int time;
   EXT_BV miflags;
   sh_int irange;
   sh_int warange;
   sh_int prange;
   sh_int px;
   sh_int py;
};

//For military mobiles, contains some important info.  Done to save memory
struct midata
{
   char *command; //Command buffer, works like the run for players
   sh_int x;
   sh_int y;
   sh_int map;
   ROOM_INDEX_DATA *in_room;
   sh_int mspeed;
   sh_int mtick;
};

struct aggression_data
{
   AGGRO_DATA *next;
   AGGRO_DATA *prev;
   AGGRO_DATA *next_global;
   AGGRO_DATA *prev_global;
   CHAR_DATA *ch;
   CHAR_DATA *owner;
   int value;
};

/*
 * One character (PC or NPC).
 * (Shouldn't most of that build interface stuff use substate, dest_buf,
 * spare_ptr and tempnum?  Seems a little redundant)
 */
struct char_data
{
   CHAR_DATA *next;
   CHAR_DATA *prev;
   CHAR_DATA *next_in_room;
   CHAR_DATA *prev_in_room;
   CHAR_DATA *next_ship;
   CHAR_DATA *prev_ship;
   CHAR_DATA *master;
   CHAR_DATA *leader;
   FIGHT_DATA *fighting;
   CHAR_DATA *reply;
   CHAR_DATA *retell;
   CHAR_DATA *switched;
   CHAR_DATA *mount;
   SHIP_DATA *ship;
   HHF_DATA *hunting;
   HHF_DATA *fearing;
   HHF_DATA *hating;
   AGGRO_DATA *first_aggro;
   AGGRO_DATA *last_aggro;
   SPEC_FUN *spec_fun;
   TOWN_DATA *dumptown; //Used by extraction workers to make sure they extract to a town...
   MPROG_ACT_LIST *mpact;
   int mpactnum;
   sh_int mpscriptpos;
   MOB_INDEX_DATA *pIndexData;
   DESCRIPTOR_DATA *desc;
   AFFECT_DATA *first_affect;
   AFFECT_DATA *last_affect;
   NOTE_DATA *pnote;
   NOTE_DATA *comments;
   OBJ_DATA *first_carrying;
   OBJ_DATA *last_carrying;
   OBJ_DATA *on;
   ROOM_INDEX_DATA *in_room;
   ROOM_INDEX_DATA *was_in_room;
   PC_DATA *pcdata;
   MI_DATA *midata; //for moving or anything else military needed.  Save memory
   DO_FUN *last_cmd;
   DO_FUN *prev_cmd; /* mapping */
   void *dest_buf; /* This one is to assign to differen things */
   char *alloc_ptr; /* Must str_dup and free this one */
   void *spare_ptr;
   int tempnum;
   int fight_state; // Used for different fight lags...
   sh_int fight_timer; // Timer in rounds
   EDITOR_DATA *editor;
   TIMER *first_timer;
   TIMER *last_timer;
   CHAR_MORPH *morph;
   char *name;
   char *short_descr;
   char *long_descr;
   char *description;
   sh_int num_fighting;
   sh_int substate;
   sh_int sex;
   sh_int class;
   sh_int race;
   sh_int level;
   sh_int trust;
   int managen;
   int hpgen;
   int begatt; //Begging attemps, to prevent someone getting rich by doing this for 12 hours...
   int apply_armor;
   int apply_stone;
   int apply_tohit;
   int apply_sanctify;
   int apply_shield;
   int apply_wmod;
   int apply_fasting;
   int apply_manafuse;
   int apply_manashell;
   int apply_manashield;
   int apply_managuard;
   int apply_manaburn;
   int apply_weaponclamp;
   int apply_arrowcatch;
   int apply_bracing;
   int apply_hardening;
   int apply_res_fire[2];
   int apply_res_water[2];
   int apply_res_air[2];
   int apply_res_earth[2];
   int apply_res_energy[2];
   int apply_res_magic[2];
   int apply_res_nonmagic[2];
   int apply_res_blunt[2];
   int apply_res_pierce[2];
   int apply_res_slash[2];
   int apply_res_poison[2];
   int apply_res_paralysis[2];
   int apply_res_holy[2];
   int apply_res_unholy[2];
   int apply_res_undead[2];
   int elementb;
   sh_int speed; /* descriptor speed settings */
   int played;
   sh_int timer;
   sh_int wait;
   sh_int hit;
   sh_int max_hit;
   sh_int mana;
   sh_int max_mana;
   sh_int move;
   sh_int max_move;
   //Below 4 are health on limbs, increases by time/curing
   sh_int con_rarm;
   sh_int con_larm;
   sh_int con_lleg;
   sh_int con_rleg;
   sh_int practice;
   int gold;
   int grip;
   EXT_BV act;
   EXT_BV affected_by;
   EXT_BV no_affected_by;
   int carry_weight;
   int carry_number;
   int xflags;
   int resistant;
   int mover; //Move rating
   int no_resistant;
   int immune;
   int no_immune;
   int susceptible;
   int no_susceptible;
   EXT_BV attacks;
   EXT_BV defenses;
   int speaks;
   int speaking;
   sh_int saving_poison_death;
   sh_int saving_wand;
   sh_int saving_para_petri;
   sh_int saving_breath;
   sh_int saving_spell_staff;
   sh_int alignment;
   sh_int barenumdie;
   sh_int baresizedie;
   sh_int mobthac0;
   sh_int hitroll;
   sh_int damroll;
   sh_int hitplus;
   sh_int damplus;
   sh_int damaddlow;
   sh_int damaddhi;
   sh_int position;
   sh_int defposition;
   sh_int style;
   sh_int height;
   sh_int weight;
   sh_int armor;
   sh_int wimpy;
   int deaf;
   /* Going to change these to m1 to m6 -- Xerves */
   int m1; /* goldmin */
   int m2; /* goldmax */
   int m3; /* goldlim */
   sh_int m4; /* levelmin */
   sh_int m5; /* levelmax */
   sh_int m6; /* 3rd sh_int */
   int m7; /* For whatever */
   int m8; /* For whatever */
   int m9; // For whatever
   int m10; // Speed of the unit
   int m11; // Extra
   int m12; // Extra
   EXT_BV miflags;
   sh_int cident; /* Caste Identify -- Xerves */
   sh_int perm_str;
   sh_int perm_int;
   sh_int perm_wis;
   sh_int perm_dex;
   sh_int perm_con;
   sh_int perm_cha;
   sh_int perm_lck;
   sh_int perm_agi;
   sh_int mod_str;
   sh_int mod_int;
   sh_int mod_wis;
   sh_int mod_dex;
   sh_int mod_con;
   sh_int mod_cha;
   sh_int mod_lck;
   sh_int mod_agi;
   sh_int agi_meter;
   sh_int tohitbash;
   sh_int tohitslash;
   sh_int tohitstab;
   sh_int mental_state; /* simplified */
   sh_int emotional_state; /* simplified */
   int retran;
   int retran_x;
   int retran_y;
   int retran_map;
   int regoto;
   int regoto_x;
   int regoto_y;
   int regoto_map;
   int tcount; //For mprogs, can be used for any kind of things, mainly counting or TRUE/FALSE check on ifchecks
   sh_int mobinvis; /* Mobinvis level SB */
   sh_int resx;
   sh_int resy;
   sh_int resmap;
   sh_int stx;
   sh_int sty;
   sh_int stmap;
   COORD_DATA *coord; /* Coordinates on the overland map - Samson 7-31-99 */
   sh_int map; /* Which map are they on? - Samson 8-3-99 */
   sh_int fightm; /* Fighting map - Xerves 5-13-00 */
   sh_int fcounter;
   sh_int cmd_recurse;
   sh_int hit_regen_counter;
   sh_int mana_regen_counter;
   sh_int move_regen_counter;
   sh_int hburn_regen_counter;
   sh_int mburn_regen_counter;
   int serial;
   char *last_name;
   int fame;
   char *  tone;
   char *  movement;
   CHAR_DATA *rider;   //Person who is being rode
   CHAR_DATA *riding;  //Person you are riding
};


struct killed_data
{
   sh_int vnum;
   char count;
};

struct pkilled_data
{
   PKILLED_DATA *next;
   PKILLED_DATA *prev;
   char *name;
};

/* Structure for link list of ignored players */
struct ignore_data
{
   IGNORE_DATA *next;
   IGNORE_DATA *prev;
   char *name;
};

/* Max number of people you can ignore at once */
#define MAX_IGN		6

struct introduction_data
{
   INTRO_DATA *next;
   INTRO_DATA *prev;
   int pid;
   int lastseen;
   int flags;
   int value;
};

/*
 * Data which only PC's have.
 */
struct pc_data
{
   CHAR_DATA *pet;
   CHAR_DATA *mount;
   CHAR_DATA *aimtarget; //Target for the aim command
   CLAN_DATA *clan;
   COUNCIL_DATA *council;
   AREA_DATA *area;
   TOWN_DATA *town;
   DEITY_DATA *deity;
   STABLE_DATA *first_stable;
   STABLE_DATA *last_stable;
   PKILLED_DATA *first_pkilled;
   PKILLED_DATA *last_pkilled;
   INTRO_DATA *first_introduction;
   INTRO_DATA *last_introduction;
   CHANNEL_HISTORY *first_messagehistory;
   CHANNEL_HISTORY *last_messagehistory;
   OBJ_DATA *first_bankobj;
   OBJ_DATA *last_bankobj;
   int banksize;
   int gprompt;
   int xsize;
   int ysize;
   int consent;
   char *sendmail; //buffer used to send an email
   char *homepage;
   char *offeredlname;
   char *clan_name;
   char *council_name;
   char *deity_name;
   char *pwd;
   char *bamfin;
   char *bamfout;
   char *filename; /* For the safe mset name -Shaddai */
   char *rank;
   char *title;
   char *bestowments; /* Special bestowed commands    */
   char *autocommand; //For auto-target skills/spells/etc.. Will parse the command into this pointer.
   int quest_curr; //Quest points left
   int quest_accum; //Quest points earned lifetime
   int reward_curr; //Reward points, for reporting bugs/typos/bringing newbies
   int reward_accum; //Total reward points accumulated in lifetime of player
   QUEST_DATA *quest; //Pointer to the quest data
   int quest_wins; //Quest wins
   int quest_losses; //Quest losses
   int twink_points; //Twink points, 100 and delete!
   int timeout_login; //Login timeout, default 3 minutes
   int timeout_notes; //Notes/Menu timeout, default 10 minutes
   int timeout_idle; //Playing the game, default 20 minutes
   int balance; /*Balance of money in the bank   */
   int lastinterest; //Checks when the last time interest was done on the account
   int lastintrocheck; //Last time introductions on a player where checked   
   int lastprankingcheck; //Last Power Ranking check   
   int caste; /* Caste, for caste - Xerves */
   int lostcon; //Con lost after death, for resurrections
   int rezpercent; //Resurrection percentage
   int duel_offer_time;
   int duel_receive_time;
   int duel_offer_name;
   int dual_receive_name;
   int duel_offer_pranking; 
   int duel_receive_pranking;
   int spar_offer_name;
   int spar_receive_name;
   ROOM_INDEX_DATA *rezroom; //Vnum of the room the rez will happen in
   OBJ_DATA *rezcorpse; //Pointer to which corpse the rez will work on
   int rezx;
   int rezy;
   int rezmap;
   EXT_BV talent; /* Flags for talents */
   sh_int hometown; /* Hometown - Xerves */
   sh_int kingdompid; //Unique pid for their kingdom, mainly used in error checking
   char *pretit; /* Pretitle -- Xerves 8/1/99 */
   sh_int train; /* Training point */
   sh_int incarnations;
   sh_int gt_remort;
   sh_int tier;
   int pid; //Unique Indentifier for each player
   sh_int pkpower; //Power level in the pkill range
   sh_int colors[MAX_COLORS];
   sh_int job; /* What job are they?? -- Xerves 12/99 */
   sh_int authwait;
   sh_int mapdir; /* What direction are they facing on the map, used for the view -- Xerves */
   int flevel; /* For commands so level 55s can do some level 60 stuff */
   int lore;
   int spoints; //Skill points gained from winning a fight
   int animate; //num of mobs animated, to keep track :-)
   int power_ranking; //Power Ranking for ToC
   sh_int target;
   sh_int target_limb;
   sh_int stable; /* Stable vnum */
   sh_int stablenum; /* Amount your stable can hold in it */
   sh_int stablecurr; /* Amount you have in your stable ATM */
   int whonum; /* Which Who?  Config option --Xerves */
   int flags; /* Whether the player is deadly and whatever else we add.      */
   int pkills; /* Number of pkills on behalf of clan */
   int pdeaths; /* Number of times pkilled (legally)  */
   int pranking;
   int mkills; /* Number of mobs killed     */
   int mdeaths; /* Number of deaths due to mobs       */
   int illegal_pk; /* Number of illegal pk's committed   */
   long int outcast_time; /* The time at which the char was outcast */
   NUISANCE_DATA *nuisance; /* New Nuisance structure */
   EXT_BV portalfnd; /* Portal list for the player */
   long int restore_time; /* The last time the char did a restore all */
   sh_int r_range_lo; /* room range */
   sh_int r_range_hi;
   sh_int m_range_lo; /* mob range  */
   sh_int m_range_hi;
   sh_int o_range_lo; /* obj range  */
   sh_int o_range_hi;
   sh_int per_str; //percent in str
   sh_int per_int; //percent in int
   sh_int per_wis; //percent in wis
   sh_int per_dex; //percent in dex
   sh_int per_con; //percent in con
   sh_int per_lck; //percent in luck
   sh_int per_agi; //percent in agility
   sh_int per_hp;  //percent in hp
   sh_int per_mana;//percent in mana
   sh_int per_move;//percent in movement
   sh_int hit_cnt; //so players don't go out naked and ramp up hp/con
   sh_int mana_cnt;
   sh_int keeper; /* PC's Shop Keeper */
   sh_int wizinvis; /* wizinvis level */
   sh_int min_snoop; /* minimum snoop level */
   sh_int snum[5]; /* Used to hold the number of skills they can get in the beginning -- Xer */
   sh_int condition[MAX_CONDS];
   sh_int learned[MAX_SKILL];
   sh_int ranking[MAX_SKILL]; /* Mastery ranking -- Xerves */
   sh_int spercent[MAX_SKILL]; //Percent of a point earned for a skill/spell
   sh_int spellgroups[MAX_GROUP + 1]; /* Not used anymore*/
   sh_int spellpoints[MAX_GROUP + 1]; /* Not used anymore*/
   int spherepoints[MAX_SPHERE+1];
   int grouppoints[MAX_GROUP+6];
   /* Please note use above 2 only for spells unless you change the system -- Xerves */
   KILLED_DATA killed[MAX_KILLTRACK];
   int pkilled; //keep track of how many pkilled
   sh_int favor; /* deity favor */
   int auth_state;
   time_t release_date; /* Auto-helling.. Altrag */
   char *helled_by;
   char *bio; /* Personal Bio */
   char *came_from; //Where did they come from anyway?
   char *authed_by; /* what crazy imm authed this name ;) */
   SKILLTYPE *special_skills[MAX_PERSONAL]; /* personalized skills/spells */
   char *prompt; /* User config prompts */
   char *fprompt; /* Fight prompts */
   char *subprompt; /* Substate prompt */
   sh_int pagerlen; /* For pager (NOT menus) */
   bool openedtourney;
   bool righthanded;
   bool slastname; //used to see if they have saved their lastname yet -- for newbies
   IGNORE_DATA *first_ignored; /* keep track of who to ignore */
   IGNORE_DATA *last_ignored;
   char **tell_history; /* for immortal only command lasttell */
   sh_int lt_index; /* last_tell index */
   char *email; /* Email address for finger - Samson */
   int icq; /* ICQ# for finger - Samson 1-4-99 */

   long imc_deaf; /* IMC channel def flags */
   long imc_allow; /* IMC channel allow flags */
   long imc_deny; /* IMC channel deny flags */
   char *rreply; /* IMC reply-to */
   char *rreply_name; /* IMC reply-to shown to char */
   char *ice_listen; /* ICE channels */
   ALIAS_DATA *first_alias;
   ALIAS_DATA *last_alias;
   GLOBAL_BOARD_DATA *board;
   time_t last_note[MAX_BOARD];
   int secedit; /* Overland Map OLC - Samson 8-1-99 */
   NOTE_DATA *in_progress;
   int battletype; //Arena
   CHAR_DATA *challenged; /* Arena *///pcdata - dump
   CHAR_DATA *betted_on; /* Arena *///pcdata - dump
   int bet_amt; /* Arena */
   int resource; //Pcdata-dump
   sh_int resourcetype; //Pcdata-dump
   time_t logon; //pcdata -Dump 
   time_t save_time; //pcdata -Dump
   sh_int forget[5];
   sh_int nolearn[5];
   char stackbuf[MAX_STRING_LENGTH];
   sh_int skincolor;
   sh_int haircolor;
   sh_int hairlength;
   sh_int hairstyle;
   sh_int eyecolor;
   sh_int cheight;
   sh_int cweight;
};



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

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


/*
 * Damage types from the attack_table[]
 * 24 types for new weapon types -- Xerves
 */
typedef enum
{
   DAM_HIT
}
damage_types;

#define MAX_DAM 1;


/*
 * Extra description data for a room or object.
 */
struct extra_descr_data
{
   EXTRA_DESCR_DATA *next; /* Next in list                     */
   EXTRA_DESCR_DATA *prev; /* Previous 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;
   OBJ_INDEX_DATA *next_sort;
   EXTRA_DESCR_DATA *first_extradesc;
   EXTRA_DESCR_DATA *last_extradesc;
   AFFECT_DATA *first_affect;
   AFFECT_DATA *last_affect;
   MPROG_DATA *mudprogs; /* objprogs */
   EXT_BV progtypes; /* objprogs */
   char *name;
   char *short_descr;
   char *description;
   char *action_desc;
   int vnum;
   sh_int level;
   sh_int item_type;
   EXT_BV extra_flags;
   int magic_flags; /*Need more bitvectors for spells - Scryn */
   int wear_flags;
   sh_int count;
   float weight;
   int cost;
   int value[14];
   int serial;
   int imbueslots;
   sh_int layers;
   int rent; /* Unused */
   int cvnum; /* Copy of a Obj?  Used for merchants */
   sh_int cident; /* Identify the Caste Obj */
   int bless_dur;
   int sworthrestrict; //Minimum sworth restriction
};

//Trap data
struct trap_data
{
   TRAP_DATA *next;
   TRAP_DATA *prev;
   int uid; //Unique id for the trap
   int charges;
   int maxcharges;
   int type;
   int damlow;
   int damhigh;
   int room;  // 0 - Single target  1 - Damage all in room
   int difficulty;  //0 - 300.  Sets the difficulty to disarm without the tool set.  Use tool negate to set the value with the kit
   int toolkit; //Unique ID set in v0 of the tool kit.  Can use 1 vnum for all tool kits if wanted
   OBJ_DATA *obj; 
   AREA_DATA *area; //Save us some time of finding the reset this way.
   int onetime;
   int disarmed;
   EXT_BV trapflags;
   int resetvalue; //-1 Reset every time area resets, 0 - Reset everytime obj resets, 1 > reset every minute (if obj exists)
   int toolnegate; //How much of the difficulty does the tool negate, 100 = all 50 = half 0 = none (tool must be set/found)
   int frag;  //Destroy obj if triggered.
   int sworthrestrict; //Minimum sworth restriction
};

struct imbue_data
{
   IMBUE_DATA *next;
   IMBUE_DATA *prev;
   int type;
   int sworth;
   int lowvalue;
   int highvalue;
   int value;
   int type2;
   int sworth2;
   int lowvalue2;
   int highvalue2;
   int value2;
   int type3;
   int sworth3;
   int lowvalue3;
   int highvalue3;
   int value3;
   int plevel;
   int gemnum;
};

/*
 * One object.
 */
struct obj_data
{
   OBJ_DATA *next;
   OBJ_DATA *prev;
   OBJ_DATA *next_content;
   OBJ_DATA *prev_content;
   OBJ_DATA *first_content;
   OBJ_DATA *last_content;
   OBJ_DATA *in_obj;
   CHAR_DATA *carried_by;
   CHAR_DATA *possessed_by;
   EXTRA_DESCR_DATA *first_extradesc;
   EXTRA_DESCR_DATA *last_extradesc;
   AFFECT_DATA *first_affect;
   AFFECT_DATA *last_affect;
   OBJ_INDEX_DATA *pIndexData;
   ROOM_INDEX_DATA *in_room;
   TIMER *first_timer;
   TIMER *last_timer;
   TRAP_DATA *trap;
   IMBUE_DATA *first_imbue;
   IMBUE_DATA *last_imbue;
   int imbueslots;
   char *name;
   char *short_descr;
   char *description;
   char *action_desc;
   sh_int item_type;
   sh_int mpscriptpos;
   EXT_BV extra_flags;
   int magic_flags; /*Need more bitvectors for spells - Scryn */
   int wear_flags;
   MPROG_ACT_LIST *mpact; /* mudprogs */
   int mpactnum; /* mudprogs */
   sh_int wear_loc;
   float weight;
   int cost;
   sh_int level;
   sh_int timer;
   int value[14];
   sh_int count; /* support for object grouping */
   int serial; /* serial number        */
   int cvnum; /* Copy of Obj?  Merchant use LP1 */
   sh_int cident; /* Used to identify Caste Objs */
   COORD_DATA *coord; /* Object coordinates on overland maps - Samson 8-21-99 */
   sh_int map; /* Which map is it on? - Samson 8-21-99 */
   sh_int fightm;
   int bless_dur;
   int sworthrestrict; //Minimum sworth restriction
};


/*
 * Exit data.
 */
struct exit_data
{
   EXIT_DATA *prev; /* previous exit in linked list */
   EXIT_DATA *next; /* next exit in linked list */
   EXIT_DATA *rexit; /* Reverse exit pointer  */
   ROOM_INDEX_DATA *to_room; /* Pointer to destination room */
   char *keyword; /* Keywords for exit or door */
   char *description; /* Description of exit  */
   int vnum; /* Vnum of room exit leads to */
   int rvnum; /* Vnum of room in opposite dir */
   int exit_info; /* door states & other flags */
   int key; /* Key vnum   */
   sh_int vdir; /* Physical "direction"  */
   sh_int distance; /* how far to the next room */
   sh_int pull; /* pull of direction (current) */
   sh_int pulltype; /* type of pull (current, wind) */
   COORD_DATA *coord; /* Coordinates to Overland Map - Samson 7-31-99 */

};



/*
 * 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
 *   'H': hide an object
 *   'B': set a bitvector
 *   'T': trap an object
 *   'D': set state of door
 *   'R': randomize room exits
 *   'S': stop (end of list)
 */

/*
 * Area-reset definition.
 */
struct reset_data
{
   RESET_DATA *next;
   RESET_DATA *prev;
   char command;
   int extra;
   int arg1;
   int arg2;
   int arg3;
   /* New Three are for new Wilderness/Overland..x, y, map */
   int arg4;
   int arg5;
   int arg6;
   int arg7; //for Forge Item Resets
   int serial; //For mobile Resets, removing the "numbered" crap for resets.
   int resetlast;
   int resettime;
};

/* Constants for arg2 of 'B' resets. */
#define	BIT_RESET_DOOR			0
#define BIT_RESET_OBJECT		1
#define BIT_RESET_MOBILE		2
#define BIT_RESET_ROOM			3
#define BIT_RESET_TYPE_MASK		0xFF /* 256 should be enough */
#define BIT_RESET_DOOR_THRESHOLD	8
#define BIT_RESET_DOOR_MASK		0xFF00 /* 256 should be enough */
#define BIT_RESET_SET			BV30
#define BIT_RESET_TOGGLE		BV31
#define BIT_RESET_FREEBITS	  0x3FFF0000 /* For reference */


// Ship structure, for ships.  Rejoice
struct ship_data
{
   SHIP_DATA *next;
   SHIP_DATA *prev;
   CHAR_DATA *first_char;
   CHAR_DATA *last_char;
   int uid;
   int x;
   int y;
   int map;
   int tx;
   int ty;
   int occupants;
   int tmap;
   int direction;
   int size;
   int ticket;
   char *travelroute;
   int routeplace;
   int routedir;
   int routetime; //Amount of ticks (5 seconds a tick) to wait before running back down route
   int routetick;
};

/*
 * Area definition.
 */
struct area_data
{
   AREA_DATA *next;
   AREA_DATA *prev;
   AREA_DATA *next_sort;
   AREA_DATA *prev_sort;
   AREA_DATA *next_sort_name; /* Used for alphanum. sort */
   AREA_DATA *prev_sort_name; /* Ditto, Fireblade */
   RESET_DATA *first_reset;
   RESET_DATA *last_reset;
   char *name;
   char *filename;
   int flags;
   sh_int status; /* h, 8/11 */
   sh_int age;
   sh_int nplayer;
   int res_tree;
   int res_corn;
   int res_grain;
   int res_iron;
   int res_gold;
   int res_stone;
   int gold;
   int salestax;
   int poptax;
   char *kowner;
   int recall;
   int death;
   int minhappoint;
   int minwithdraw;
   int lasttaxchange;
   sh_int reset_frequency;
   int low_r_vnum;
   int hi_r_vnum;
   int low_o_vnum;
   int hi_o_vnum;
   sh_int low_m_vnum;
   sh_int hi_m_vnum;
   int low_soft_range;
   int hi_soft_range;
   int low_hard_range;
   int hi_hard_range;
   char *author; /* Scryn */
   char *resetmsg; /* Rennard */
   RESET_DATA *last_mob_reset;
   RESET_DATA *last_obj_reset;
   sh_int max_players;
   int population; //For Kingdoms, actual peasant population
   int numroom; //Number of rooms, for population control
   int mload; //Number of "population" mobs loaded
   int mloadtop; //Max number of "population" loadable
   int mkills;
   int mdeaths;
   int pkills;
   int pdeaths;
   int gold_looted;
   int illegal_pk;
   int high_economy;
   int low_economy;
   int kingdom;
   int kpid;
   sh_int map;
   sh_int x;
   sh_int y;
};



/*
 * Load in the gods building data. -- Altrag
 */
struct godlist_data
{
   GOD_DATA *next;
   GOD_DATA *prev;
   int level;
   int low_r_vnum;
   int hi_r_vnum;
   int low_o_vnum;
   int hi_o_vnum;
   sh_int low_m_vnum;
   sh_int hi_m_vnum;
};

int start_marketpid;
//Market data
struct market_data
{
   MARKET_DATA *next;
   MARKET_DATA *prev;
   int cost;
   char *name;
   int pid;
   int mpid;
   int count;
   int scount;
   OBJ_DATA *obj;
};
/*
 * Used to keep track of system settings and statistics		-Thoric
 */
struct system_data
{
   int maxplayers; /* Maximum players this boot   */
   int alltimemax; /* Maximum players ever   */
   int global_looted; /* Gold looted this boot */
   int upill_val; /* Used pill value */
   int upotion_val; /* Used potion value */
   int brewed_used; /* Brewed potions used */
   int scribed_used; /* Scribed scrolls used */
   int start_calender; //RL start time of the calender
   int lastrescheck; //Last time a resource was checked, again real time
   int lastpopcheck; //Last time a population was checked, again real time
   int lasttaxcheck; //Last time a population tax was checked
   int accounts; //Accounts made this hour
   int max_accounts; //Maximum accounts allowed per hour
   int max_account_changes; //Maximum amount of account changes per hour
   int lastaccountreset; //Last time the account per hour time was reset
   char *time_of_max; /* Time of max ever */
   char *mud_name; /* Name of mud */
   char *mversion; //Version of the mud (The version of your code, can change to whatever you like)
   char *cversion; //Version of the code used (the original code, like Fear 1.0.1)
   int firstrun;
   bool NO_NAME_RESOLVING; /* Hostnames are not resolved  */
   bool DENY_NEW_PLAYERS; /* New players cannot connect  */
   bool WAIT_FOR_AUTH; /* New players must be auth'ed */
   sh_int read_all_mail; /* Read all player mail(was 54) */
   sh_int read_mail_free; /* Read mail for free (was 51) */
   sh_int write_mail_free; /* Write mail for free(was 51) */
   sh_int take_others_mail; /* Take others mail (was 54)   */
   sh_int imc_mail_vnum; /* Board vnum for IMC mail     */
   sh_int imc_mail_level; /* Min level to send IMC mail  */
   sh_int muse_level; /* Level of muse channel */
   int timeout_login; //Login timeout, default 3 minutes
   int timeout_notes; //Notes/Menu timeout, default 10 minutes
   int timeout_idle; //Playing the game, default 20 minutes
   int gem_vnum; // Default gem vnum
   sh_int think_level; /* Level of think channel LEVEL_HIGOD */
   sh_int build_level; /* Level of build channel LEVEL_BUILD */
   sh_int log_level; /* Level of log channel LEVEL LOG */
   sh_int level_modify_proto; /* Level to modify prototype stuff LEVEL_LESSER */
   sh_int level_override_private; /* override private flag */
   sh_int level_mset_player; /* Level to mset a player */
   sh_int bash_plr_vs_plr; /* Bash mod player vs. player */
   sh_int bash_nontank; /* Bash mod basher != primary attacker */
   sh_int gouge_plr_vs_plr; /* Gouge mod player vs. player */
   sh_int gouge_nontank; /* Gouge mod player != primary attacker */
   sh_int stun_plr_vs_plr; /* Stun mod player vs. player */
   sh_int stun_regular; /* Stun difficult */
   sh_int dodge_mod; /* Divide dodge chance by */
   sh_int parry_mod; /* Divide parry chance by */
   sh_int tumble_mod; /* Divide tumble chance by */
   sh_int max_kingdom; // Max kingdoms, don't adjust unless you know what you are doing.
   sh_int last_portal;
   sh_int last_trap_uid;
   sh_int last_invtrap_uid;
   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 */
   sh_int level_getobjnotake; /* Get objects without take flag */
   sh_int level_forcepc; /* The level at which you can use force on players. */
   sh_int bestow_dif; /* Max # of levels between trust and command level for a bestow to work --Blodkai */
   sh_int max_sn; /* Max skills */
   int    top_pid; //Top pid
   int    top_kpid; //Top Kingdom pid
   int    top_tpid; //Top Town Pid
   char *guild_overseer; /* Pointer to char containing the name of the */
   char *guild_advisor; /* guild overseer and advisor. */
   int save_flags; /* Toggles for saving conditions */
   sh_int save_frequency; /* How old to autosave someone */
   sh_int check_imm_host; /* Do we check immortal's hosts? */
   sh_int morph_opt; /* Do we optimize morph's? */
   sh_int save_pets; /* Do pets save? */
   sh_int ban_site_level; /* Level to ban sites */
   sh_int ban_class_level; /* Level to ban classes */
   sh_int ban_race_level; /* Level to ban races */
   sh_int ident_retries; /* Number of times to retry broken pipes. */
   sh_int newbie_purge; /* Level to auto-purge newbies at - Samson 12-27-98 */
   sh_int regular_purge; /* Level to purge normal players at - Samson 12-27-98 */
   bool CLEANPFILES; /* Should the mud clean up pfiles daily? - Samson 12-27-98 */
   time_t purgetime; /* Time at which to purge the files - Samson 5-9-99 */
   int top_gem_num; //Top number for a gem;
   sh_int exp_percent; /* Now adjusts spoints gained in a victory, is a percentage.  Also affects learn_from_succ */
   sh_int stat_gain; // Adjusts the stat gain formulas for the game, search the variable for values */
   sh_int quest_item1; //No longer used, really need to delete sometime soon.
   sh_int quest_value1;
   sh_int quest_item2;
   sh_int quest_value2;
   sh_int quest_item3;
   sh_int quest_value3;
   sh_int quest_item4;
   sh_int quest_value4;
   sh_int quest_item5;
   sh_int quest_value5;
   sh_int quest_item6;
   sh_int quest_value6;
   sh_int quest_item7;
   sh_int quest_value7;
   sh_int quest_item8;
   sh_int quest_value8;
   sh_int quest_item9;
   sh_int quest_value9;
   sh_int quest_item10;
   sh_int quest_value10;
   sh_int quest_item11;
   sh_int quest_value11;
   sh_int quest_item12;
   sh_int quest_value12;
   //number of spheres by number of groups by Tier 2 and up.
   sh_int toadvance[MAX_SPHERE][MAX_GROUP][MAX_TIER-1]; //Stores the toadvance values used in listgroups and learn.
   int accountemail;
   int resetgame; //Reset game or not...
};



struct plane_data
{
   PLANE_DATA *next;
   PLANE_DATA *prev;
   char *name;
};



/*
 * Room type.
 */
struct room_index_data
{
   ROOM_INDEX_DATA *next;
   ROOM_INDEX_DATA *next_sort;
   CHAR_DATA *first_person; /* people in the room */
   CHAR_DATA *last_person; /*  ..  */
   OBJ_DATA *first_content; /* objects on floor  */
   OBJ_DATA *last_content; /*  ..  */
   EXTRA_DESCR_DATA *first_extradesc; /* extra descriptions */
   EXTRA_DESCR_DATA *last_extradesc; /*  ..  */
   AREA_DATA *area;
   EXIT_DATA *first_exit; /* exits from the room */
   EXIT_DATA *last_exit; /*  ..  */
   AFFECT_DATA *first_affect; /* effects on the room */
   AFFECT_DATA *last_affect; /*  ..  */
   MAP_DATA *map; /* maps */
   PLANE_DATA *plane; /* do it by room rather than area */
   MPROG_ACT_LIST *mpact; /* mudprogs */
   int mpactnum; /* mudprogs */
   MPROG_DATA *mudprogs; /* mudprogs */
   sh_int mpscriptpos;
   char *name;
   char *description;
   int vnum;
   EXT_BV room_flags;
   EXT_BV progtypes; /* mudprogs */
   sh_int light; /* amount of light in the room */
   sh_int sector_type;
   int tele_vnum;
   sh_int tele_delay;
   sh_int tunnel; /* max people that will fit */
   int resource; /* For Mining and Fielding --Xerves */
   int quad; /* Used for Quadrants in the Wilderness */
   int node_mana; /* if room is a node, how much mana is stored there */

};

/*
 * Delayed teleport type.
 */
struct teleport_data
{
   TELEPORT_DATA *next;
   TELEPORT_DATA *prev;
   ROOM_INDEX_DATA *room;
   sh_int timer;
};


/*
 * Types of skill numbers.  Used to keep separate lists of sn's
 * Must be non-overlapping with spell/skill types,
 * but may be arbitrary beyond that.
 */
#define TYPE_UNDEFINED               -1
#define TYPE_PROJECTILE              999 //Projectile hit
#define TYPE_HIT                     1000 /* allows for 1000 skills/spells */
#define TYPE_HERB		     2000 /* allows for 1000 attack types  */
#define TYPE_PERSONAL		     3000 /* allows for 1000 herb types    */
#define TYPE_RACIAL		     4000 /* allows for 1000 personal types */
#define TYPE_DISEASE		     5000 /* allows for 1000 racial types  */

/*
 *  Target types.
 */
typedef enum
{
   TAR_IGNORE, TAR_CHAR_OFFENSIVE, TAR_CHAR_DEFENSIVE, TAR_CHAR_SELF,
   TAR_OBJ_INV, TAR_OBJ_ROOM
}
target_types;

typedef enum
{
   SKILL_UNKNOWN, SKILL_SPELL, SKILL_SKILL, SKILL_WEAPON, SKILL_TONGUE,
   SKILL_HERB, SKILL_RACIAL, SKILL_DISEASE
}
skill_types;



struct timerset
{
   int num_uses;
   struct timeval total_time;
   struct timeval min_time;
   struct timeval max_time;
};



/*
 * Skills include spells as a particular case.
 */
struct skill_type
{
   char *name; /* Name of skill  */
   sh_int bookv; // Vnum of book if it exists */
   sh_int race_level[MAX_RACE]; /* Racial abilities: level      */
   sh_int race_adept[MAX_RACE]; /* Racial abilities: adept      */
   /* The below's values are in handler.c in add_group */
   sh_int group[1]; /* In a group, 0 is no          */
   sh_int stype; //Sphere Type, Warrior, Mage, etc
   sh_int masterydiff[1]; /* At what mastery can they learn it? */
   sh_int mastery[1]; /* not really used anymore */
   sh_int bookinfo[1]; /* Who sells the spell book */
   SPELL_FUN *spell_fun; /* Spell pointer (for spells) */
   DO_FUN *skill_fun; /* Skill pointer (for skills) */
   sh_int target; /* Legal targets  */
   sh_int minimum_position; /* Position for caster / user */
   sh_int slot; /* Slot for #OBJECT loading */
   sh_int min_mana; /* Minimum mana used  */
   sh_int beats; /* Rounds required to use skill */
   sh_int targetlimb;
   char *noun_damage; /* Damage message  */
   char *msg_off; /* Wear off message  */
   sh_int guild; /* Which guild the skill belongs to */
   sh_int min_level; /* Minimum level to be able to cast */
   sh_int type; /* Spell/Skill/Weapon/Tongue */
   sh_int range; /* Range of spell (rooms) */
   int info; /* Spell action/class/etc */
   int flags; /* Flags   */
   char *hit_char; /* Success message to caster */
   char *hit_vict; /* Success message to victim */
   char *hit_room; /* Success message to room */
   char *hit_dest; /* Success message to dest room */
   char *miss_char; /* Failure message to caster */
   char *miss_vict; /* Failure message to victim */
   char *miss_room; /* Failure message to room */
   char *die_char; /* Victim death msg to caster */
   char *die_vict; /* Victim death msg to victim */
   char *die_room; /* Victim death msg to room */
   char *imm_char; /* Victim immune msg to caster */
   char *imm_vict; /* Victim immune msg to victim */
   char *imm_room; /* Victim immune msg to room */
   char *dice; /* Dice roll   */
   char *made_char; /* Made by??? -- Xerves 8/7/99 */
   sh_int prototype; /* Check for new spells/skills -- Xerves */
   int value; /* Misc value   */
   char saves; /* What saving spell applies */
   char difficulty; /* Difficulty of casting/learning */
   SMAUG_AFF *affects; /* Spell affects, if any */
   char *components; /* Spell components, if any */
   char *teachers; /* Skill requires a special teacher */
   char participants; /* # of required participants */
   struct timerset userec; /* Usage record   */
};


/* how many items to track.... prevent repeat auctions */
//This removes this function, I really don't care much for it anyway
#define AUCTION_MEM 0

struct auction_data
{
   OBJ_DATA *item; /* a pointer to the item */
   CHAR_DATA *seller; /* a pointer to the seller - which may NOT quit */
   CHAR_DATA *buyer; /* a pointer to the buyer - which may NOT quit */
   int bet; /* last bet - or 0 if noone has bet anything */
   sh_int going; /* 1,2, sold */
   sh_int pulse; /* how many pulses (.25 sec) until another call-out ? */
   int starting;
   OBJ_INDEX_DATA *history[AUCTION_MEM]; /* store auction history */
   sh_int hist_timer; /* clear out history buffer if auction is idle */
};

/*
 * So we can have different configs for different ports -- Shaddai
 */
extern int port;

/*
 * These are skill_lookup return values for common skills and spells.
 */
//New 2.1 skills, should be a lot :-)
extern sh_int gsn_combatart; 
extern sh_int gsn_weapon_axe;
extern sh_int gsn_weapon_sword;
extern sh_int gsn_weapon_polearm;
extern sh_int gsn_weapon_blunt;
extern sh_int gsn_weapon_staff;
extern sh_int gsn_weapon_projectile;
extern sh_int gsn_weapon_dagger;
extern sh_int gsn_roar;
extern sh_int gsn_bash;
extern sh_int gsn_inhuman_strength;
extern sh_int gsn_krundo_style;
extern sh_int gsn_rwundo_style;
extern sh_int gsn_krundi_style;
extern sh_int gsn_rwundi_style;
extern sh_int gsn_pincer;
extern sh_int gsn_weaponbreak;
extern sh_int gsn_powerslice;
extern sh_int gsn_deshield;
extern sh_int gsn_perfect_shot;
extern sh_int gsn_drive;
extern sh_int gsn_insult;
extern sh_int gsn_draw_aggression;
extern sh_int gsn_greater_draw_aggression;
extern sh_int gsn_focus_aggression;
extern sh_int gsn_greater_focus_aggression;
extern sh_int gsn_weapon_twohanded;

extern sh_int gsn_escapism;
extern sh_int gsn_prawl;
extern sh_int gsn_nightprawl;
extern sh_int gsn_lightprawl;
extern sh_int gsn_shadowfoot;
extern sh_int gsn_strongfoot;
extern sh_int gsn_swimming;
extern sh_int gsn_retreat;
extern sh_int gsn_gag;
extern sh_int gsn_climbwall;
extern sh_int gsn_vanish;
extern sh_int gsn_begging;
extern sh_int gsn_thiefeye;
extern sh_int gsn_cutpurse;
extern sh_int gsn_grab;
extern sh_int gsn_haggling;
extern sh_int gsn_swindling;
extern sh_int gsn_assassinate;
extern sh_int gsn_forage;
extern sh_int gsn_kickdirt;
extern sh_int gsn_weapon_daggerstudy;
extern sh_int gsn_weapon_daggerstrike;
extern sh_int gsn_startfire;
extern sh_int gsn_featherfoot;
extern sh_int gsn_cleansing;
extern sh_int gsn_concentration;
extern sh_int gsn_manafuse;
extern sh_int gsn_fasting;
extern sh_int gsn_nervepinch;
extern sh_int gsn_featherback;
extern sh_int gsn_manashot;
extern sh_int gsn_manaburst;
extern sh_int gsn_quickcombo;
extern sh_int gsn_nervestrike;

extern sh_int gsn_style_evasive;
extern sh_int gsn_style_wizardry;
extern sh_int gsn_style_divine;
extern sh_int gsn_style_defensive;
extern sh_int gsn_style_standard;
extern sh_int gsn_style_aggressive;
extern sh_int gsn_style_berserk;

extern sh_int gsn_detrap;
extern sh_int gsn_backstab;
extern sh_int gsn_circle;
extern sh_int gsn_cook;
extern sh_int gsn_study; /* Samson */
extern sh_int gsn_mountain_climb;
extern sh_int gsn_dodge;
extern sh_int gsn_hide;
extern sh_int gsn_peek;
extern sh_int gsn_pick_lock;
extern sh_int gsn_scan;
extern sh_int gsn_sneak;
extern sh_int gsn_steal;
extern sh_int gsn_gouge;
extern sh_int gsn_track;
extern sh_int gsn_search;
extern sh_int gsn_dig;
extern sh_int gsn_bashdoor;
extern sh_int gsn_berserk;
extern sh_int gsn_hitall;
extern sh_int gsn_stun;
extern sh_int gsn_daze;
extern sh_int gsn_repair;

extern sh_int gsn_balance;

extern sh_int gsn_unsheath;
extern sh_int gsn_disarm;
extern sh_int gsn_enhanced_damage;
extern sh_int gsn_parry;
extern sh_int gsn_rescue;
extern sh_int gsn_dual_wield;
extern sh_int gsn_shieldblock;
extern sh_int gsn_battle_knowledge;

/* Attack Skills -- Xerves */
extern sh_int gsn_roundhouse;
extern sh_int gsn_spinkick;
extern sh_int gsn_tornadokick;
extern sh_int gsn_niburo;
extern sh_int gsn_neckpinch;
extern sh_int gsn_neckchop;
extern sh_int gsn_neckrupture;
extern sh_int gsn_emeru;
extern sh_int gsn_elbowjab;
extern sh_int gsn_elbowstab;
extern sh_int gsn_elbowbreak;
extern sh_int gsn_amberio;
extern sh_int gsn_sidekick;
extern sh_int gsn_kneestrike;
extern sh_int gsn_kneecrusher;
extern sh_int gsn_lembecu;
extern sh_int gsn_blitz;
extern sh_int gsn_spear;
extern sh_int gsn_ribpuncture;
extern sh_int gsn_timmuru;

/* Swordsman new skills -- Xerves */
extern sh_int gsn_kick_back;
extern sh_int gsn_deadly_accuracy;
extern sh_int gsn_attack_frenzy;
extern sh_int gsn_critical;
extern sh_int gsn_counter;
extern sh_int gsn_possess;
extern sh_int gsn_lore;
extern sh_int gsn_aid;

/* used to do specific lookups */
extern sh_int gsn_first_spell;
extern sh_int gsn_first_skill;
extern sh_int gsn_first_weapon;
extern sh_int gsn_first_tongue;
extern sh_int gsn_top_sn;

/* spells */
extern sh_int gsn_blindness;
extern sh_int gsn_charm_person;
extern sh_int gsn_aqua_breath;
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_wizardeye;
extern sh_int gsn_eye_of_god;
extern sh_int gsn_summon_corpse;
extern sh_int gsn_lesser_resurrection;
extern sh_int gsn_resurrection;
extern sh_int gsn_greater_resurrection;
extern sh_int gsn_web;
extern sh_int gsn_snare;
extern sh_int gsn_extradimensional_portal;
extern sh_int gsn_revitalize_spirit;
extern sh_int gsn_holy_cleansing;

//extern sh_int gsn_fireball; /* for fireshield  */
//extern sh_int gsn_chill_touch; /* for iceshield   */
//extern sh_int gsn_lightning_bolt; /* for shockshield */

/* newer attack skills */
extern sh_int gsn_poison_weapon;
extern sh_int gsn_scribe;
extern sh_int gsn_brew;
extern sh_int gsn_climb;
extern sh_int gsn_manatap;
extern sh_int gsn_stalk;

extern sh_int gsn_hit;
extern sh_int gsn_grip;
extern sh_int gsn_slice;
extern sh_int gsn_tumble;
/* Language gsns. -- Altrag */
extern sh_int gsn_common;
extern sh_int gsn_elven;
extern sh_int gsn_dwarven;
extern sh_int gsn_pixie;
extern sh_int gsn_ogre;
extern sh_int gsn_orcish;
extern sh_int gsn_trollish;
extern sh_int gsn_goblin;
extern sh_int gsn_halfling;

/*
 * Cmd flag names --Shaddai
 */
extern char *const cmd_flags[];

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


/*
 * Old-style Bit manipulation macros
 *
 * The bit passed is the actual value of the bit (Use the BV## defines)
 */
#define IS_SET(flag, bit)	((flag) & (bit))
#define SET_BIT(var, bit)	((var) |= (bit))
#define REMOVE_BIT(var, bit)	((var) &= ~(bit))
#define TOGGLE_BIT(var, bit)	((var) ^= (bit))
#define CH(d)                  ((d)->original ? (d)->original : (d)->character)


/*
 * Macros for accessing virtually unlimited bitvectors.		-Thoric
 *
 * Note that these macros use the bit number rather than the bit value
 * itself -- which means that you can only access _one_ bit at a time
 *
 * This code uses an array of integers
 */

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

/*
 * Here are the extended bitvector macros:
 */
#define wIS_SET(ch, bit)        (is_set_wilderness((ch), (bit), (ch->coord->x), (ch->coord->y), (ch->map)))
#define wREMOVE_BIT(ch, bit)    (remove_bit_wilderness((ch), (bit)))
#define wSET_BIT(ch, bit)       (set_bit_wilderness((ch), (bit)))
#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)))

/*
 * Memory allocation macros.
 */

#define CREATE(result, type, number)				\
do								\
{								\
    if (!((result) = (type *) calloc ((number), sizeof(type))))	\
    {								\
	perror("malloc failure");				\
	fprintf(stderr, "Malloc failure @ %s:%d\n", __FILE__, __LINE__ ); \
	abort();						\
    }								\
} while(0)

#define RECREATE(result,type,number)				\
do								\
{								\
    if (!((result) = (type *) realloc ((result), sizeof(type) * (number))))\
    {								\
	perror("realloc failure");				\
	fprintf(stderr, "Realloc failure @ %s:%d\n", __FILE__, __LINE__ ); \
	abort();						\
    }								\
} while(0)


#define DISPOSE(point) 						\
do								\
{								\
  if (!(point))							\
  {								\
	bug( "Freeing null pointer %s:%d", __FILE__, __LINE__ ); \
	fprintf( stderr, "DISPOSEing NULL in %s, line %d\n", __FILE__, __LINE__ ); \
  }								\
  else free(point);						\
  point = NULL;							\
} while(0)

#ifdef HASHSTR
#ifdef MTRACE
#define STRALLOC(point)		_str_alloc((point), __FILE__, __FUNCTION__, __LINE__)
#else
#define STRALLOC(point)		str_alloc((point))
#endif
#define QUICKLINK(point)	quick_link((point))
#define QUICKMATCH(p1, p2)	(int) (p1) == (int) (p2)
#define STRFREE(point)						\
do								\
{								\
  if (!(point))							\
  {								\
	bug( "Freeing null pointer %s:%d", __FILE__, __LINE__ ); \
	fprintf( stderr, "STRFREEing NULL in %s, line %d\n", __FILE__, __LINE__ ); \
  }								\
  else if (str_free((point))==-1) 				\
    fprintf( stderr, "STRFREEing bad pointer in %s, line %d\n", __FILE__, __LINE__ ); \
  point = NULL;							\
} while(0)
#else
#ifdef MTRACE
#define STRALLOC(point)		_str_dup((point), __FILE__, __FUNCTION__, __LINE__)
#define QUICKLINK(point)	_str_dup((point), __FILE__, __FUNCTION__, __LINE__)
#else
#define STRALLOC(point)		str_dup((point))
#define QUICKLINK(point)	str_dup((point))
#endif
#define QUICKMATCH(p1, p2)	strcmp((p1), (p2)) == 0
#define STRFREE(point)						\
do								\
{								\
  if (!(point))							\
  {								\
	bug( "Freeing null pointer %s:%d", __FILE__, __LINE__ ); \
	fprintf( stderr, "STRFREEing NULL in %s, line %d\n", __FILE__, __LINE__ ); \
  }								\
  else free((point));						\
  point = NULL;							\
} while(0)
#endif

/* double-linked list handling macros -Thoric */

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

#define MLINK(link, list, first, last, next, prev)			\
do								\
{								\
    if ( !(first) )						\
      (first)			= (link);			\
    else							\
      (list)->next		= (link);			\
    (list)->next		= NULL;				\
    (list)->prev		= (last);			\
    (last)			= (link);			\
} while(0)


//link - Item being inserted (the new pointer being added in)
//insert - Spot that is being inserted (the link is inserted before the insert) (the old pointer being shifted)
#define INSERT(link, insert, first, next, prev)			\
do								\
{								\
    (link)->prev		= (insert)->prev;		\
    if ( !(insert)->prev )					\
      (first)			= (link);			\
    else							\
      (insert)->prev->next	= (link);			\
    (insert)->prev		= (link);			\
    (link)->next		= (insert);			\
} while(0)        
     
//Shifts a link down one spot...       
#define SHIFT_DOWN(slink, olink, last)                                  \
do                                                                      \
{                                                                       \
   if ( (last) == (olink) )                                             \
      (last) = (slink);                                                 \
                                                                        \
    (olink)->prev = (slink)->prev;                                      \
    if ((olink)->prev)                                                  \
       (olink)->prev->next = (olink);                                   \
    (slink)->next = (olink)->next;                                      \
    if ((slink)->next)                                                  \
       (slink)->next->prev = (slink);                                   \
                                                                        \
    (olink)->next = (slink);                                            \
    (slink)->prev = (olink);                                            \
} while(0)      
             
//Shifts a link up one spot... 
#define SHIFT_UP(slink, olink, first)                                   \
do                                                                      \
{                                                                       \
   if ((first) == (olink))                                              \
      (first) = (slink);                                                \
                                                                        \
    (slink)->prev = (olink)->prev;                                      \
    if ((slink)->prev)                                                  \
       (slink)->prev->next = (slink);                                   \
    (olink)->next = (slink)->next;                                      \
    if ((olink)->next)                                                  \
       (olink)->next->prev = (olink);                                   \
                                                                        \
    (slink)->next = (olink);                                            \
    (olink)->prev = (slink);                                            \
} while(0)
   
          

#define UNLINK(link, first, last, next, prev)			\
do								\
{								\
    if ( !(link)->prev )					\
      (first)			= (link)->next;			\
    else							\
      (link)->prev->next	= (link)->next;			\
    if ( !(link)->next )					\
      (last)			= (link)->prev;			\
    else							\
      (link)->next->prev	= (link)->prev;			\
} while(0)

#define CHECK_LINKS(first, last, next, prev, type)		\
do {								\
  type *ptr, *pptr = NULL;					\
  if ( !(first) && !(last) )					\
    break;							\
  if ( !(first) )						\
  {								\
    bug( "CHECK_LINKS: last with NULL first!  %s.",		\
        __STRING(first) );					\
    for ( ptr = (last); ptr->prev; ptr = ptr->prev );		\
    (first) = ptr;						\
  }								\
  else if ( !(last) )						\
  {								\
    bug( "CHECK_LINKS: first with NULL last!  %s.",		\
        __STRING(first) );					\
    for ( ptr = (first); ptr->next; ptr = ptr->next );		\
    (last) = ptr;						\
  }								\
  if ( (first) )						\
  {								\
    for ( ptr = (first); ptr; ptr = ptr->next )			\
    {								\
      if ( ptr->prev != pptr )					\
      {								\
        bug( "CHECK_LINKS(%s): %p:->prev != %p.  Fixing.",	\
            __STRING(first), ptr, pptr );			\
        ptr->prev = pptr;					\
      }								\
      if ( ptr->prev && ptr->prev->next != ptr )		\
      {								\
        bug( "CHECK_LINKS(%s): %p:->prev->next != %p.  Fixing.",\
            __STRING(first), ptr, ptr );			\
        ptr->prev->next = ptr;					\
      }								\
      pptr = ptr;						\
    }								\
    pptr = NULL;						\
  }								\
  if ( (last) )							\
  {								\
    for ( ptr = (last); ptr; ptr = ptr->prev )			\
    {								\
      if ( ptr->next != pptr )					\
      {								\
        bug( "CHECK_LINKS (%s): %p:->next != %p.  Fixing.",	\
            __STRING(first), ptr, pptr );			\
        ptr->next = pptr;					\
      }								\
      if ( ptr->next && ptr->next->prev != ptr )		\
      {								\
        bug( "CHECK_LINKS(%s): %p:->next->prev != %p.  Fixing.",\
            __STRING(first), ptr, ptr );			\
        ptr->next->prev = ptr;					\
      }								\
      pptr = ptr;						\
    }								\
  }								\
} while(0)


#define ASSIGN_GSN(gsn, skill)					\
do								\
{								\
    if ( ((gsn) = skill_lookup((skill))) == -1 )		\
	fprintf( stderr, "ASSIGN_GSN: Skill %s not found.\n",	\
		(skill) );					\
} while(0)

#define CHECK_SUBRESTRICTED(ch)					\
do								\
{								\
    if ( (ch)->substate == SUB_RESTRICTED )			\
    {								\
	send_to_char( "You cannot use this command from within another command.\n\r", ch );	\
	return;							\
    }								\
} while(0)


/*
 * Character macros.
 */
/* Skill routines...Some are new, see skillmacros in /doc folder for more info */
#define GET_POINTS(ch, sn, isobj, lv)      (get_point_value((ch), (sn), (isobj), (lv)))
#define POINT_LEVEL(points, mastery)   (UMIN(100, (10*(mastery-1))+(3*(points))))
#define GET_MASTERY(ch, sn, isobj, lv)     (get_mastery_value((ch), (sn), (isobj), (lv)))
#define MASTERED(ch, sn)           (get_mastered_value((ch), (sn)))
#define LEARNED(ch,sn)            (get_learned_value((ch), (sn)))  
#define IS_VALID_COORDS(x, y)    ((x) > 0 && (y) > 0 && (x) <= MAX_X && (y) <= MAX_Y)
#define IN_WILDERNESS(ch)       ((ch)->coord->x > 0 && (ch)->coord->y > 0 && (ch)->map > -1)
#define IN_WILDERNESS_OBJ(obj)       ((obj)->coord->x > 0 && (obj)->coord->y > 0 && (obj)->map > -1)
#define IN_SAME_ROOM(ch, victim) ((ch)->in_room && (victim)->in_room && (ch)->in_room->vnum == (victim)->in_room->vnum && \
                                 (ch)->coord->x == (victim)->coord->x && (ch)->coord->y == (victim)->coord->y && (ch)->map == (victim)->map)
#define IN_SAME_ROOM_OBJ(ch, obj) ((ch)->in_room && (obj)->in_room && (ch)->in_room->vnum == (obj)->in_room->vnum && \
                                 (ch)->coord->x == (obj)->coord->x && (ch)->coord->y == (obj)->coord->y && (ch)->map == (obj)->map)
#define IS_NPC(ch)		(xIS_SET((ch)->act, ACT_IS_NPC))
#define IS_WILDERMOB(ch)        ((ch)->pIndexData->vnum >= OVERLAND_LOW_MOB && (ch)->pIndexData->vnum <= OVERLAND_HI_MOB)
#define IS_IMMORTAL(ch)		(get_trust((ch)) >= LEVEL_IMMORTAL)
#define IS_HERO(ch)		(get_trust((ch)) >= LEVEL_IMMORTAL)
#define IS_AFFECTED(ch, sn)	(xIS_SET((ch)->affected_by, (sn)))
#define HAS_BODYPART(ch, part)	((ch)->xflags == 0 || IS_SET((ch)->xflags, (part)))
#define IS_STAFF(ch)            (!IS_NPC(ch)                                \
                                && (get_trust((ch)) >= LEVEL_STAFF  \
                                || (ch)->pcdata->caste >= caste_Staff)) /* Staff check -- Xerves */

#define CAN_CAST(ch)		(1)

#define IS_VAMPIRE(ch)		(0)
#define IS_QUESTOR(ch)     (xIS_SET((ch)->act, PLR_QUESTOR)) /* Questor -- Xerves */

#define IS_AWAKE(ch)		((ch)->position > POS_SLEEPING)
#define GET_AC(ch)		((ch)->armor				    \
				    + ( IS_AWAKE(ch)			    \
				    ? dex_app[get_curr_dex(ch)].defensive   \
				    : 0 )				    \
				    + VAMP_AC(ch))
/* Thanks to Chriss Baeke for noticing damplus was unused */
/* Hitroll/Damroll was changed into a function due to checking based on mastery */

/* A bunch of flag checking functions from Samson's code   */

/* Problems with mobs/players, so make a finding routine -- Xerves */
#define IS_ONMAP_FLAG(ch)           (IS_NPC(ch) ? xIS_SET((ch)->act, ACT_ONMAP) \
                                                : xIS_SET((ch)->act, PLR_ONMAP))
#define REMOVE_ONMAP_FLAG(ch)       (IS_NPC(ch) ? xREMOVE_BIT((ch)->act, ACT_ONMAP) \
                                                : xREMOVE_BIT((ch)->act, PLR_ONMAP))
#define SET_ONMAP_FLAG(ch)          (IS_NPC(ch) ? xSET_BIT((ch)->act, ACT_ONMAP) \
                                                : xSET_BIT((ch)->act, PLR_ONMAP))


#define REMOVE_PLR_FLAG(ch, flag)   (xREMOVE_BIT((ch)->act, flag))
#define IS_PLR_FLAG(ch, flag)       (xIS_SET((ch)->act, flag))
#define SET_PLR_FLAG(ch, flag)      (xSET_BIT((ch)->act, flag))

#define REMOVE_ACT_FLAG(ch, flag)   (xREMOVE_BIT((ch)->act, flag))
#define IS_ACT_FLAG(ch, flag)       (xIS_SET((ch)->act, flag))
#define SET_ACT_FLAG(ch, flag)      (xSET_BIT((ch)->act, flag))

#define REMOVE_OBJ_STAT(obj, flag)  (xREMOVE_BIT((obj)->extra_flags, flag))
#define SET_OBJ_STAT(obj, flag)     (xSET_BIT((obj)->extra_flags, flag))

#define GET_DAMROLL(ch)         (get_dam_roll(ch))
#define GET_HITROLL(ch)         (get_hit_roll(ch))
#define IN_SECTOR(ch, sect)     (find_sector(ch, sect))

#define IS_OUTSIDE(ch)          (IS_ONMAP_FLAG((ch)) ? !IN_SECTOR((ch), SECT_INSIDE) \
                                                     : !xIS_SET((ch)->in_room->room_flags, ROOM_INDOORS) \
                                                    && !xIS_SET((ch)->in_room->room_flags, ROOM_TUNNEL))

#define NO_WEATHER_SECT(sect)  (  sect == SECT_UNDERWATER ||                         \
                                  sect == SECT_OCEANFLOOR ||                         \
                                  sect == SECT_SGOLD || sect == SECT_NGOLD ||        \
                                  sect == SECT_SIRON || sect == SECT_NIRON ||        \
                                  sect == SECT_MINEGOLD || sect == SECT_MINEIRON ||  \
                                  sect == SECT_UNDERGROUND )
                                  
#define IS_MOUNTAIN(sect)      (  sect == SECT_MOUNTAIN || sect == SECT_SGOLD || \
                                  sect == SECT_NGOLD || sect == SECT_SIRON || sect == SECT_NIRON || \
                                  sect == SECT_MINEGOLD || sect == SECT_MINEIRON )
                                  
#define IS_NOSWIM(sect)         ( sect == SECT_WATER_NOSWIM || sect == SECT_RIVER)                                  

#define IS_DRUNK(ch, drunk)     (number_percent() < \
			        ( (ch)->pcdata->condition[COND_DRUNK] \
				* 2 / (drunk) ) )

#define IS_CLANNED(ch)		(!IS_NPC((ch))				    \
				&& (ch)->pcdata->clan			    \
				&& (ch)->pcdata->clan->clan_type != CLAN_ORDER  \
				&& (ch)->pcdata->clan->clan_type != CLAN_GUILD)

#define IS_ORDERED(ch)		(!IS_NPC((ch))				    \
				&& (ch)->pcdata->clan			    \
				&& (ch)->pcdata->clan->clan_type == CLAN_ORDER)

#define IS_GUILDED(ch)		(!IS_NPC((ch))				    \
				&& (ch)->pcdata->clan			    \
				&& (ch)->pcdata->clan->clan_type == CLAN_GUILD)

#define IS_DEADLYCLAN(ch)	(!IS_NPC((ch))				    \
				&& (ch)->pcdata->clan			    \
				&& (ch)->pcdata->clan->clan_type != CLAN_NOKILL) \
				&& (ch)->pcdata->clan->clan_type != CLAN_ORDER)  \
				&& (ch)->pcdata->clan->clan_type != CLAN_GUILD)

#define IS_DEVOTED(ch)		(!IS_NPC((ch))				    \
				&& (ch)->pcdata->deity)

#define IS_ROOM_SAFE(ch)         (ch->in_room && (xIS_SET(ch->in_room->room_flags, ROOM_SAFE) \
                                              || IS_SET(ch->in_room->area->flags, AFLAG_NOKILL)))

#define IS_ROOM_NOLOOT(ch)       (ch->in_room && (xIS_SET(ch->in_room->room_flags, ROOM_NOLOOT) \
                                              || IS_SET(ch->in_room->area->flags, AFLAG_NOLOOT)))

#define IS_ROOM_ANITEM(ch)       (ch->in_room && (xIS_SET(ch->in_room->room_flags, ROOM_ANITEM) \
                                              || IS_SET(ch->in_room->area->flags, AFLAG_ANITEM)))

#define IS_ROOM_FREEKILL(ch)     (ch->in_room && (xIS_SET(ch->in_room->room_flags, ROOM_FREEKILL) \
                                              || IS_SET(ch->in_room->area->flags, AFLAG_FREEKILL)))

#define IS_PKILL(ch)            (ch->pcdata)

#define CAN_PKILL(ch)           (ch->pcdata)

/* Addition to make people with nuisance flag have more wait */

#define HAS_WAIT(ch)            (ch->pcdata && ch->wait && ch->fighting)

#define WAIT_STATE(ch, npulse) ((ch)->wait=(!IS_NPC(ch)&&ch->pcdata->nuisance&&\
			      (ch->pcdata->nuisance->flags>4))?UMAX((ch)->wait,\
			      (npulse+((ch)->pcdata->nuisance->flags-4)+ \
               		      ch->pcdata->nuisance->power)): \
			      UMAX((ch)->wait, (IS_IMMORTAL(ch) ? 0 :(npulse))))


#define EXIT(ch, door)		( get_exit( (ch)->in_room, door ) )

#define CAN_GO(ch, door)	(EXIT((ch),(door))			 \
				&& (EXIT((ch),(door))->to_room != NULL)  \
                          	&& !IS_SET(EXIT((ch), (door))->exit_info, EX_CLOSED))

#define IS_FLOATING(ch)		( IS_AFFECTED((ch), AFF_FLYING) || IS_AFFECTED((ch), AFF_FLOATING) )

#define IS_VALID_SN(sn)		( (sn) >=0 && (sn) < MAX_SKILL		     \
				&& skill_table[(sn)]			     \
				&& skill_table[(sn)]->name )

#define IS_VALID_HERB(sn)	( (sn) >=0 && (sn) < MAX_HERB		     \
				&& herb_table[(sn)]			     \
				&& herb_table[(sn)]->name )

#define IS_VALID_DISEASE(sn)	( (sn) >=0 && (sn) < MAX_DISEASE	     \
				&& disease_table[(sn)]			     \
				&& disease_table[(sn)]->name )

#define IS_PACIFIST(ch)		(IS_NPC(ch) && xIS_SET(ch->act, ACT_PACIFIST))
#define IS_WITHIN(num, diff)    ( ((num) <= (num)+(diff)) && ((num) >= (num)-(diff)))

#define SPELL_FLAG(skill, flag)	( IS_SET((skill)->flags, (flag)) )
#define SPELL_DAMAGE(skill)	( ((skill)->info      ) & 7 )
#define SPELL_ACTION(skill)	( ((skill)->info >>  3) & 7 )
#define SPELL_CLASS(skill)	( ((skill)->info >>  6) & 7 )
#define SPELL_POWER(skill)	( ((skill)->info >>  9) & 3 )
#define SPELL_SAVE(skill)	( ((skill)->info >> 11) & 7 )
#define SET_SDAM(skill, val)	( (skill)->info =  ((skill)->info & SDAM_MASK) + ((val) & 7) )
#define SET_SACT(skill, val)	( (skill)->info =  ((skill)->info & SACT_MASK) + (((val) & 7) << 3) )
#define SET_SCLA(skill, val)	( (skill)->info =  ((skill)->info & SCLA_MASK) + (((val) & 7) << 6) )
#define SET_SPOW(skill, val)	( (skill)->info =  ((skill)->info & SPOW_MASK) + (((val) & 3) << 9) )
#define SET_SSAV(skill, val)	( (skill)->info =  ((skill)->info & SSAV_MASK) + (((val) & 7) << 11) )

/* Retired and guest imms. */
#define IS_RETIRED(ch) (ch->pcdata && IS_SET(ch->pcdata->flags,PCFLAG_RETIRED))
#define IS_GUEST(ch) (ch->pcdata && IS_SET(ch->pcdata->flags,PCFLAG_GUEST))

/* RIS by gsn lookups. -- Altrag.
   Will need to add some || stuff for spells that need a special GSN. */

#define IS_FIRE(dt)		( IS_VALID_SN(dt) &&			     \
				SPELL_DAMAGE(skill_table[(dt)]) == SD_FIRE )
#define IS_WATER(dt)		( IS_VALID_SN(dt) &&			     \
				SPELL_DAMAGE(skill_table[(dt)]) == SD_WATER )
#define IS_UNDEAD(dt)	( IS_VALID_SN(dt) &&			     \
				SPELL_DAMAGE(skill_table[(dt)]) == SD_UNDEAD )
#define IS_EARTH(dt)	( IS_VALID_SN(dt) &&			     \
				SPELL_DAMAGE(skill_table[(dt)]) == SD_EARTH)
#define IS_AIR(dt)      ( IS_VALID_SN(dt) &&                \
                SPELL_DAMAGE(skill_table[(dt)]) == SD_AIR )
#define IS_ENERGY(dt)		( IS_VALID_SN(dt) &&			     \
				SPELL_DAMAGE(skill_table[(dt)]) == SD_ENERGY )

#define IS_HOLY(dt)		( IS_VALID_SN(dt) &&			     \
				SPELL_DAMAGE(skill_table[(dt)]) == SD_HOLY )

#define IS_UNHOLY(dt)		( IS_VALID_SN(dt) &&			     \
				SPELL_DAMAGE(skill_table[(dt)]) == SD_UNHOLY )


#define NOT_AUTHED(ch)		(!IS_NPC(ch) && ch->pcdata->auth_state <= 4  \
			      && IS_SET(ch->pcdata->flags, PCFLAG_UNAUTHED) )

#define IS_WAITING_FOR_AUTH(ch) (!IS_NPC(ch) && ch->desc		     \
			      && ch->pcdata->auth_state == 1		     \
			      && IS_SET(ch->pcdata->flags, PCFLAG_UNAUTHED) )

/*
 * Object macros.
 */
#define CAN_WEAR(obj, part)	(IS_SET((obj)->wear_flags,  (part)))
#define IS_OBJ_STAT(obj, stat)	(xIS_SET((obj)->extra_flags, (stat)))
#define IS_UNIQUE(ch, obj)  (get_obj_on_char((ch), (obj)))

/*
 * MudProg macros.						-Thoric
 */
#define HAS_PROG(what, prog)	(xIS_SET((what)->progtypes, (prog)))

/*
 * Description macros.
 */
#define PERS(ch, looker)        ( show_pers_output((ch), (looker), 0, -1)) //Has to be in the same room
#define PERS_MAP(ch, looker)    ( show_pers_output((ch), (looker), 1, -1)) //Global
#define PERS_KINGDOM(ch, kingdom) ( show_pers_output((ch), NULL, 2, (kingdom))) //For Kingdoms
#define PERS_MAP_NAME(ch, looker) ( show_pers_output((ch), (looker), 3, -1)) //Forces ch->name for NPCs
#define MORPHPERS(ch, looker)   ( can_see( (looker), (ch) ) ?           \
                                (ch)->morph->morph->short_desc       \
                                : "someone" )
                                
#define IN_VALID_KINGDOM(num)   ( (num) >= 0 && (num)< sysdata.max_kingdom)                                
#define IN_PLAYER_KINGDOM(num)  ( (num) >= 2 && (num) < sysdata.max_kingdom)


#define log_string(txt)		( log_string_plus( (txt), LOG_NORMAL, LEVEL_LOG ) )

/*
 *  Defines for the command flags. --Shaddai
 */
#define	CMD_FLAG_POSSESS	BV00
#define CMD_FLAG_POLYMORPHED	BV01
#define CMD_WATCH		BV02 /* FB */

/*
 * Structure for a command in the command lookup table.
 */
struct cmd_type
{
   CMDTYPE *next;
   char *name;
   DO_FUN *do_fun;
   int flags; /* Added for Checking interpret stuff -Shaddai */
   sh_int position;
   sh_int level;
   sh_int log;
   sh_int fcommand; //Fight command 1 - Cannot use if timered, 0 Can
   struct timerset userec;
   int lag_count; /* count lag flags for this cmd - FB */
};



/*
 * Structure for a social in the socials table.
 */
struct social_type
{
   SOCIALTYPE *next;
   char *name;
   char *char_no_arg;
   char *others_no_arg;
   char *char_found;
   char *others_found;
   char *vict_found;
   char *char_auto;
   char *others_auto;
};



/*
 * Global constants.
 */
extern time_t last_restore_all_time;
extern time_t boot_time; /* this should be moved down */
extern HOUR_MIN_SEC *set_boot_time;
extern struct tm *new_boot_time;
extern time_t new_boot_time_t;
extern time_t copyover_time;
extern int global_eworth;
extern int global_sworth;
extern int global_plevel;

extern const struct str_app_type str_app[26];
extern const struct int_app_type int_app[26];
extern const struct wis_app_type wis_app[26];
extern const struct dex_app_type dex_app[26];
extern const struct con_app_type con_app[26];
extern const struct cha_app_type cha_app[26];
extern const struct lck_app_type lck_app[26];
//extern const struct agi_app_type agi_app[201];

extern char *const sector_message[SECT_MAX];

extern const struct sect_color_type sect_show[];
extern PORTAL_DATA *portal_show[LAST_PORTAL];
extern struct race_type *race_table[MAX_RACE];
extern const struct liq_type liq_table[LIQ_MAX];

/* 24 New attacks, much more exact -- Xerves */
extern char *const attack_table[1];
extern char **const s_message_table[1];
extern char **const p_message_table[1];

extern char *const skill_tname[];
extern sh_int const movement_loss[SECT_MAX];
extern char *const dir_name[];
extern char *const where_name[MAX_WHERE_NAME];
extern const sh_int rev_dir[];
extern const int trap_door[];
extern char *const r_flags[];
extern char *const ex_flags[];
extern char *const w_flags[];
extern char *const o_flags[];
extern char *const talent_flags[];
extern char *const buykobj_types[];
extern char *const buykmob_types[];
extern char *const a_flags[];
extern char *const qmob_flags[];
extern char *const o_types[];
extern char *const a_types[];
extern char *const act_flags[];
extern char *const mi_flags[];
extern char *const plr_flags[];
extern char *const pc_flags[];
extern char *const trap_flags[];
extern char *const element_flags[];
extern char *const ris_flags[];
extern char *const trig_flags[];
extern char *const part_flags[];
extern char *const npc_class[];
extern char *const defense_flags[];
extern char *const attack_flags[];
extern char *const area_flags[];
extern char *const ex_pmisc[];
extern char *const ex_pwater[];
extern char *const ex_pair[];
extern char *const ex_pearth[];
extern char *const ex_pfire[];

extern int const lang_array[];
extern char *const lang_names[];

extern char *const temp_settings[]; /* FB */
extern char *const precip_settings[];
extern char *const wind_settings[];
extern char *const preciptemp_msg[6][6];
extern char *const windtemp_msg[6][6];
extern char *const precip_msg[];
extern char *const wind_msg[];

/*
 * Global variables.
 */
extern MPSLEEP_DATA *first_mpwait; /* Storing sleeping mud progs */
extern MPSLEEP_DATA *last_mpwait; /* - */
extern MPSLEEP_DATA *current_mpwait; /* - */
extern char *bigregex;
extern char *preg;
extern int max_npc_race;

extern char *target_name;
extern char *ranged_target_name;
extern int file_ver;
extern int numobjsloaded;
extern int nummobsloaded;
extern int physicalobjects;
extern int last_pkroom;
extern int num_descriptors;
extern struct system_data sysdata;
extern int top_sn;
extern int top_vroom;
extern int top_herb;
extern int top_map_mob;
extern int global_x[1];
extern int global_y[1];
extern int global_map[1];
extern int gem_num;
extern int box_num;
extern int globaltownload; //Set to 1 when loading an object to a town bank
extern TOWN_DATA *globaltownptr;
extern MARKET_DATA *globalmarketptr;
extern int saving_mount_on_quit; //so you don't get the extraction message, etc
extern int global_drop_equip_message; //Drops equip unequip message if set...used for static quests to stop the spam

extern unsigned char battle_descriptions[7][3][100][60]; //7 types of hits, 3 messages, 6 weapons, with 100 possibilities with up to 100 characters
extern int high_value[7][3];

extern CMDTYPE *command_hash[126];

extern struct class_type *class_table[1];
extern KINGDOM_DATA *kingdom_table[MAX_KINGDOM];
extern NPCRACE_DATA *npcrace_table[MAX_NPCRACE_TABLE];

extern SKILLTYPE *skill_table[MAX_SKILL];
extern SOCIALTYPE *social_index[27];
extern CHAR_DATA *cur_char;
extern ROOM_INDEX_DATA *cur_room;
extern bool cur_char_died;
extern ch_ret global_retcode;
extern SKILLTYPE *herb_table[MAX_HERB];
extern SKILLTYPE *disease_table[MAX_DISEASE];

extern int blockdam;

extern int cur_obj;
extern int cur_obj_serial;
extern int forge_num;
extern int slab_num;
extern bool cur_obj_extracted;
extern obj_ret global_objcode;
extern bool serial_list[MAX_LOADED_MOBS];
extern int serialmobsloaded; //not quite the same as nummobsloaded, it has the ability to use past serials for "reset mobs" to reset mobs properly.
extern int cur_ship_uid;

extern HELP_DATA *first_help;
extern HELP_DATA *last_help;
extern HINDEX_DATA *first_hindex;
extern HINDEX_DATA *last_hindex;
extern HINDEX_DATA *first_fhindex; //Flat help index
extern HINDEX_DATA *last_fhindex; //Flag help index
extern SHOP_DATA *first_shop;
extern SHOP_DATA *last_shop;
extern REPAIR_DATA *first_repair;
extern REPAIR_DATA *last_repair;
extern WATCH_DATA *first_watch;
extern WATCH_DATA *last_watch;
extern CMEMBER_DATA *first_clanmember;
extern CMEMBER_DATA *last_clanmember;
extern KMEMBER_DATA *first_kingdommember;
extern KMEMBER_DATA *last_kingdommember;
extern TRAINER_DATA *first_trainer;
extern TRAINER_DATA *last_trainer;
extern GEM_DATA *first_gem;
extern GEM_DATA *last_gem;
extern AGGRO_DATA *first_global_aggro;
extern AGGRO_DATA *last_global_aggro;
extern TRADE_DATA *first_trade;
extern TRADE_DATA *last_trade;
extern TRAP_DATA *first_trap;
extern TRAP_DATA *last_trap;
extern BOX_DATA *first_box;
extern BOX_DATA *last_box;
extern FORGE_DATA *first_forge;
extern FORGE_DATA *last_forge;
extern WBLOCK_DATA *first_wblock;
extern WBLOCK_DATA *last_wblock;
extern SLAB_DATA *first_slab;
extern SLAB_DATA *last_slab;
extern KCHEST_DATA *first_kchest;
extern KCHEST_DATA *last_kchest;
extern BAN_DATA *first_ban;
extern BAN_DATA *last_ban;
extern BAN_DATA *first_ban_class;
extern BAN_DATA *last_ban_class;
extern BAN_DATA *first_ban_race;
extern BAN_DATA *last_ban_race;
extern RESERVE_DATA *first_reserved;
extern RESERVE_DATA *last_reserved;
extern CHAR_DATA *first_char;
extern CHAR_DATA *last_char;
extern MARKET_DATA *first_market;
extern MARKET_DATA *last_market;
extern SHIP_DATA *first_ship;
extern SHIP_DATA *last_ship;
extern CMAP_DATA *first_wilderchar;
extern CMAP_DATA *last_wilderchar;
extern OMAP_DATA *first_wilderobj;
extern OMAP_DATA *last_wilderobj;
extern DESCRIPTOR_DATA *first_descriptor;
extern DESCRIPTOR_DATA *last_descriptor;
extern BOARD_DATA *first_board;
extern BOARD_DATA *last_board;
extern PLANE_DATA *first_plane;
extern PLANE_DATA *last_plane;
extern PROJECT_DATA *first_project;
extern PROJECT_DATA *last_project;
extern AUTHORIZE_DATA *first_authorized;
extern AUTHORIZE_DATA *last_authorized;
extern BARENA_DATA *first_barena;
extern BARENA_DATA *last_barena;
extern BIN_DATA *first_bin;
extern BIN_DATA *last_bin;
extern OBJ_DATA *first_object;
extern OBJ_DATA *last_object;
extern CLAN_DATA *first_clan;
extern CLAN_DATA *last_clan;
extern COUNCIL_DATA *first_council;
extern COUNCIL_DATA *last_council;
extern DEITY_DATA *first_deity;
extern DEITY_DATA *last_deity;
extern AREA_DATA *first_area;
extern AREA_DATA *last_area;
extern QMOB_DATA *first_qmob;
extern QMOB_DATA *last_qmob;
extern QOBJ_DATA *first_qobj;
extern QOBJ_DATA *last_qobj;
extern NPCRACE_DATA *first_npcrace;
extern NPCRACE_DATA *last_npcrace;
extern QUEST_DATA *first_quest;
extern QUEST_DATA *last_quest;
extern AREA_DATA *first_build;
extern AREA_DATA *last_build;
extern FRONT_DATA *first_front;
extern FRONT_DATA *last_front;
extern CONQUER_DATA *first_conquer;
extern CONQUER_DATA *last_conquer;
extern TORNADO_DATA *first_tornado;
extern TORNADO_DATA *last_tornado;
extern AREA_DATA *first_asort;
extern AREA_DATA *last_asort;
extern AREA_DATA *first_bsort;
extern AREA_DATA *last_bsort;
extern AREA_DATA *first_area_name; /*alphanum. sort */
extern AREA_DATA *last_area_name; /* Fireblade */

extern LANG_DATA *first_lang;
extern LANG_DATA *last_lang;
extern BUYKBIN_DATA *first_buykbin;
extern BUYKBIN_DATA *last_buykbin;
extern BUYKMOB_DATA *first_buykmob;
extern BUYKMOB_DATA *last_buykmob;
extern BUYKOBJ_DATA *first_buykobj;
extern BUYKOBJ_DATA *last_buykobj;
extern BUYKTRAINER_DATA *first_buyktrainer;
extern BUYKTRAINER_DATA *last_buyktrainer;
extern BTRAINER_DATA *first_boughttrainer;
extern BTRAINER_DATA *last_boughttrainer;
extern TRAINING_DATA *first_training;
extern TRAINING_DATA *last_training;
extern CHANNEL_HISTORY *first_channelhistory;
extern CHANNEL_HISTORY *last_channelhistory;
/*
extern		GOD_DATA	  *	first_imm;
extern		GOD_DATA	  *	last_imm;
*/
extern TELEPORT_DATA *first_teleport;
extern TELEPORT_DATA *last_teleport;
extern OBJ_DATA *extracted_obj_queue;
extern EXTRACT_CHAR_DATA *extracted_char_queue;
extern OBJ_DATA *save_equipment[MAX_WEAR][MAX_LAYERS];
extern CHAR_DATA *quitting_char;
extern CHAR_DATA *loading_char;
extern CHAR_DATA *saving_char;
extern OBJ_DATA *all_obj;

extern char bug_buf[];
extern time_t current_time;
extern bool fLogAll;
extern FILE *fpReserve;
extern FILE *fpLOG;
extern char log_buf[];
extern TIME_INFO_DATA time_info;
extern IMMORTAL_HOST *immortal_host_start;
extern IMMORTAL_HOST *immortal_host_end;
extern int weath_unit;
extern int rand_factor;
extern int climate_factor;
extern int neigh_factor;
extern int max_vector;
extern int top_area;

extern AUCTION_DATA *auction;
extern struct act_prog_data *mob_act_list;


/*
 * Command functions.
 * Defined in act_*.c (mostly).
 */
DECLARE_DO_FUN(skill_notfound);
/*//T5*/
DECLARE_DO_FUN( do_aassign                     );
DECLARE_DO_FUN( do_accept                      );
DECLARE_DO_FUN( do_accounts                    );
DECLARE_DO_FUN( do_add_imm_host                );
DECLARE_DO_FUN( do_addbox                      );
DECLARE_DO_FUN( do_addforge                    );
DECLARE_DO_FUN( do_addgem                      );
DECLARE_DO_FUN( do_addslab                     );
DECLARE_DO_FUN( do_advance                     );
DECLARE_DO_FUN( do_advanceclock                );
DECLARE_DO_FUN( do_affected                    );
DECLARE_DO_FUN( do_afk                         );
DECLARE_DO_FUN( do_ahall                       );
DECLARE_DO_FUN( do_ahelp                       );
DECLARE_DO_FUN( do_aid                         );
DECLARE_DO_FUN( do_aim                         );
DECLARE_DO_FUN( do_allow                       );
DECLARE_DO_FUN( do_amberio                     );
DECLARE_DO_FUN( do_ansi                        );
DECLARE_DO_FUN( do_answer                      );
DECLARE_DO_FUN( do_apply                       );
DECLARE_DO_FUN( do_appraise                    );
DECLARE_DO_FUN( do_areas                       );
DECLARE_DO_FUN( do_arena                       );
DECLARE_DO_FUN( do_armmilitary                 );
DECLARE_DO_FUN( do_aset                        );
DECLARE_DO_FUN( do_ask                         );
DECLARE_DO_FUN( do_assassinate                 );
DECLARE_DO_FUN( do_astat                       );
DECLARE_DO_FUN( do_at                          );
DECLARE_DO_FUN( do_attack                      );
DECLARE_DO_FUN( do_atmob                       );
DECLARE_DO_FUN( do_atobj                       );
DECLARE_DO_FUN( do_auction                     );
DECLARE_DO_FUN( do_authorize                   );
DECLARE_DO_FUN( do_avtalk                      );
DECLARE_DO_FUN( do_awho                        );
DECLARE_DO_FUN( do_backstab                    );
DECLARE_DO_FUN( do_balzhur                     );
DECLARE_DO_FUN( do_bamfin                      );
DECLARE_DO_FUN( do_bamfout                     );
DECLARE_DO_FUN( do_ban                         );
DECLARE_DO_FUN( do_bash                        );
DECLARE_DO_FUN( do_bashdoor                    );
DECLARE_DO_FUN( do_bcard                       );
DECLARE_DO_FUN( do_beep                        );
DECLARE_DO_FUN( do_begging                     );
DECLARE_DO_FUN( do_berserk                     );
DECLARE_DO_FUN( do_bestow                      );
DECLARE_DO_FUN( do_bestowarea                  );
DECLARE_DO_FUN( do_bet                         );
DECLARE_DO_FUN( do_bhold                       );
DECLARE_DO_FUN( do_bio                         );
DECLARE_DO_FUN( do_bite                        );
DECLARE_DO_FUN( do_blackjack                   );
DECLARE_DO_FUN( do_blitz                       );
DECLARE_DO_FUN( do_blockmove                   );
DECLARE_DO_FUN( do_bloodlet                    );
DECLARE_DO_FUN( do_boards                      );
DECLARE_DO_FUN( do_bodybag                     );
DECLARE_DO_FUN( do_brandish                    );
DECLARE_DO_FUN( do_break                       );
DECLARE_DO_FUN( do_breakwall                   );
DECLARE_DO_FUN( do_brew                        );
DECLARE_DO_FUN( do_broach                      );
DECLARE_DO_FUN( do_bset                        );
DECLARE_DO_FUN( do_bstat                       );
DECLARE_DO_FUN( do_bug                         );
DECLARE_DO_FUN( do_build                       );
DECLARE_DO_FUN( do_buildroom                   );
DECLARE_DO_FUN( do_bury                        );
DECLARE_DO_FUN( do_buy                         );
DECLARE_DO_FUN( do_buycaste                    );
DECLARE_DO_FUN( do_cache                       );
DECLARE_DO_FUN( do_calmmount                   );
DECLARE_DO_FUN( do_carrybin                    );
DECLARE_DO_FUN( do_cast                        );
DECLARE_DO_FUN( do_caste                       );
DECLARE_DO_FUN( do_castevalues                 );
DECLARE_DO_FUN( do_cedit                       );
DECLARE_DO_FUN( do_challenge                   );
DECLARE_DO_FUN( do_changes                     );
DECLARE_DO_FUN( do_channels                    );
DECLARE_DO_FUN( do_chaos                       );
DECLARE_DO_FUN( do_chat                        );
DECLARE_DO_FUN( do_check_vnums                 );
DECLARE_DO_FUN( do_chistory                    );
DECLARE_DO_FUN( do_circle                      );
DECLARE_DO_FUN( do_cityvalues                  );
DECLARE_DO_FUN( do_clans                       );
DECLARE_DO_FUN( do_clantalk                    );
DECLARE_DO_FUN( do_cleansing                   );
DECLARE_DO_FUN( do_clearques                   );
DECLARE_DO_FUN( do_clearstack                  );
DECLARE_DO_FUN( do_climate                     );
DECLARE_DO_FUN( do_climb                       );
DECLARE_DO_FUN( do_climbwall                   );
DECLARE_DO_FUN( do_cloak                       );
DECLARE_DO_FUN( do_clones                      );
DECLARE_DO_FUN( do_close                       );
DECLARE_DO_FUN( do_cmdtable                    );
DECLARE_DO_FUN( do_command                     );
DECLARE_DO_FUN( do_commands                    );
DECLARE_DO_FUN( do_comment                     );
DECLARE_DO_FUN( do_compare                     );
DECLARE_DO_FUN( do_compress                    );
DECLARE_DO_FUN( do_config                      );
DECLARE_DO_FUN( do_conquer                     );
DECLARE_DO_FUN( do_consent                     );
DECLARE_DO_FUN( do_consider                    );
DECLARE_DO_FUN( do_cook                        );
DECLARE_DO_FUN( do_coords                      );
DECLARE_DO_FUN( do_copyover                    );
DECLARE_DO_FUN( do_council_induct              );
DECLARE_DO_FUN( do_council_outcast             );
DECLARE_DO_FUN( do_councils                    );
DECLARE_DO_FUN( do_counciltalk                 );
DECLARE_DO_FUN( do_counter                     );
DECLARE_DO_FUN( do_credits                     );
DECLARE_DO_FUN( do_cset                        );
DECLARE_DO_FUN( do_cutgag                      );
DECLARE_DO_FUN( do_cutpurse                    );
DECLARE_DO_FUN( do_daze                        );
DECLARE_DO_FUN( do_declare                     );
DECLARE_DO_FUN( do_decline                     );
DECLARE_DO_FUN( do_deities                     );
DECLARE_DO_FUN( do_delay                       );
DECLARE_DO_FUN( do_delet                       );
DECLARE_DO_FUN( do_delete                      );
DECLARE_DO_FUN( do_deny                        );
DECLARE_DO_FUN( do_depository                  );
DECLARE_DO_FUN( do_description                 );
DECLARE_DO_FUN( do_deshield                    );
DECLARE_DO_FUN( do_destro                      );
DECLARE_DO_FUN( do_destroy                     );
DECLARE_DO_FUN( do_detrap                      );
DECLARE_DO_FUN( do_devote                      );
DECLARE_DO_FUN( do_diagnose                    );
DECLARE_DO_FUN( do_dig                         );
DECLARE_DO_FUN( do_disarm                      );
DECLARE_DO_FUN( do_disconnect                  );
DECLARE_DO_FUN( do_dislodge                    );
DECLARE_DO_FUN( do_dismiss                     );
DECLARE_DO_FUN( do_dismount                    );
DECLARE_DO_FUN( do_dmesg                       );
DECLARE_DO_FUN( do_dodge                       );
DECLARE_DO_FUN( do_down                        );
DECLARE_DO_FUN( do_drag                        );
DECLARE_DO_FUN( do_draw                        );
DECLARE_DO_FUN( do_drink                       );
DECLARE_DO_FUN( do_drive                       );
DECLARE_DO_FUN( do_drop                        );
DECLARE_DO_FUN( do_duel                        );
DECLARE_DO_FUN( do_dumpgoods                   );
DECLARE_DO_FUN( do_east                        );
DECLARE_DO_FUN( do_eat                         );
DECLARE_DO_FUN( do_echo                        );
DECLARE_DO_FUN( do_elbowbreak                  );
DECLARE_DO_FUN( do_elbowjab                    );
DECLARE_DO_FUN( do_elbowstab                   );
DECLARE_DO_FUN( do_emeru                       );
DECLARE_DO_FUN( do_emote                       );
DECLARE_DO_FUN( do_empty                       );
DECLARE_DO_FUN( do_emptycorpses                );
DECLARE_DO_FUN( do_enter                       );
DECLARE_DO_FUN( do_enhance					   );
DECLARE_DO_FUN( do_entership                   );
DECLARE_DO_FUN( do_equipment                   );
DECLARE_DO_FUN( do_examine                     );
DECLARE_DO_FUN( do_exits                       );
DECLARE_DO_FUN( do_extract                     );
DECLARE_DO_FUN( do_feedmount                   );
DECLARE_DO_FUN( do_fightoutput                 );
DECLARE_DO_FUN( do_fill                        );
DECLARE_DO_FUN( do_findnote                    );
DECLARE_DO_FUN( do_fire                        );
DECLARE_DO_FUN( do_fix                         );
DECLARE_DO_FUN( do_fixchar                     );
DECLARE_DO_FUN( do_fixed                       );
DECLARE_DO_FUN( do_fixgemslots                 );
DECLARE_DO_FUN( do_flee                        );
DECLARE_DO_FUN( do_flevel                      );
DECLARE_DO_FUN( do_flipcoin                    );
DECLARE_DO_FUN( do_foldarea                    );
DECLARE_DO_FUN( do_foldqarea                   );
DECLARE_DO_FUN( do_follow                      );
DECLARE_DO_FUN( do_for                         );
DECLARE_DO_FUN( do_forage                      );
DECLARE_DO_FUN( do_force                       );
DECLARE_DO_FUN( do_forceclose                  );
DECLARE_DO_FUN( do_forecast                    );
DECLARE_DO_FUN( do_forge                       );
DECLARE_DO_FUN( do_forgealter                  );
DECLARE_DO_FUN( do_forget                      );
DECLARE_DO_FUN( do_form_password               );
DECLARE_DO_FUN( do_fprompt                     );
DECLARE_DO_FUN( do_fquit                       );
DECLARE_DO_FUN( do_free_vnums                  );
DECLARE_DO_FUN( do_freerooms                   );
DECLARE_DO_FUN( do_freeze                      );
DECLARE_DO_FUN( do_gag                         );
DECLARE_DO_FUN( do_gamereset                   );
DECLARE_DO_FUN( do_gaso                        );
DECLARE_DO_FUN( do_gathertinder                );
DECLARE_DO_FUN( do_gem                         );
DECLARE_DO_FUN( do_generatename                );
DECLARE_DO_FUN( do_get                         );
DECLARE_DO_FUN( do_getresources                );
DECLARE_DO_FUN( do_gfighting                   );
DECLARE_DO_FUN( do_give                        );
DECLARE_DO_FUN( do_givecrown                   );
DECLARE_DO_FUN( do_giveorders                  );
DECLARE_DO_FUN( do_giveup                      );
DECLARE_DO_FUN( do_glance                      );
DECLARE_DO_FUN( do_goauth                      );
DECLARE_DO_FUN( do_gold                        );
DECLARE_DO_FUN( do_goldgive                    );
DECLARE_DO_FUN( do_goldtake                    );
DECLARE_DO_FUN( do_goto                        );
DECLARE_DO_FUN( do_gouge                       );
DECLARE_DO_FUN( do_gprompt                     );
DECLARE_DO_FUN( do_grab                        );
DECLARE_DO_FUN( do_grantlicense                );
DECLARE_DO_FUN( do_grip                        );
DECLARE_DO_FUN( do_group                       );
DECLARE_DO_FUN( do_grub                        );
DECLARE_DO_FUN( do_gscore                      );
DECLARE_DO_FUN( do_gsocial                     );
DECLARE_DO_FUN( do_gtell                       );
DECLARE_DO_FUN( do_guilds                      );
DECLARE_DO_FUN( do_guildtalk                   );
DECLARE_DO_FUN( do_gwhere                      );
DECLARE_DO_FUN( do_heal                        );
DECLARE_DO_FUN( do_hedit                       );
DECLARE_DO_FUN( do_hell                        );
DECLARE_DO_FUN( do_help                        );
DECLARE_DO_FUN( do_helpcheck                   );
DECLARE_DO_FUN( do_helpweb                     );
DECLARE_DO_FUN( do_hide                        );
DECLARE_DO_FUN( do_hindex                      );
DECLARE_DO_FUN( do_hitall                      );
DECLARE_DO_FUN( do_hl                          );
DECLARE_DO_FUN( do_hlist                       );
DECLARE_DO_FUN( do_holylight                   );
DECLARE_DO_FUN( do_homepage                    );
DECLARE_DO_FUN( do_hset                        );
DECLARE_DO_FUN( do_huntportals                 );
DECLARE_DO_FUN( do_ide                         );
DECLARE_DO_FUN( do_idea                        );
DECLARE_DO_FUN( do_ignore                      );
DECLARE_DO_FUN( do_imbue		       );
DECLARE_DO_FUN( do_imm_morph                   );
DECLARE_DO_FUN( do_imm_unmorph                 );
DECLARE_DO_FUN( do_immreminder                 );
DECLARE_DO_FUN( do_immtalk                     );
DECLARE_DO_FUN( do_induct                      );
DECLARE_DO_FUN( do_installarea                 );
DECLARE_DO_FUN( do_instaroom                   );
DECLARE_DO_FUN( do_instazone                   );
DECLARE_DO_FUN( do_insult                      );
DECLARE_DO_FUN( do_insults                     );
DECLARE_DO_FUN( do_introduce                   );
DECLARE_DO_FUN( do_inventory                   );
DECLARE_DO_FUN( do_invis                       );
DECLARE_DO_FUN( do_ipcompare                   );
DECLARE_DO_FUN( do_jog                         );
DECLARE_DO_FUN( do_joinkingdom                 );
DECLARE_DO_FUN( do_junk                        );
DECLARE_DO_FUN( do_keeperset                   );
DECLARE_DO_FUN( do_keeperstat                  );
DECLARE_DO_FUN( do_keys                        );
DECLARE_DO_FUN( do_khistory                    );
DECLARE_DO_FUN( do_kick_back                   );
DECLARE_DO_FUN( do_kickdirt                    );
DECLARE_DO_FUN( do_kickout                     );
DECLARE_DO_FUN( do_kinduct                     );
DECLARE_DO_FUN( do_kingdomlog                  );
DECLARE_DO_FUN( do_kingdomtalk                 );
DECLARE_DO_FUN( do_kneecrusher                 );
DECLARE_DO_FUN( do_kneestrike                  );
DECLARE_DO_FUN( do_kremove                     );
DECLARE_DO_FUN( do_languages                   );
DECLARE_DO_FUN( do_last                        );
DECLARE_DO_FUN( do_lastname                    );
DECLARE_DO_FUN( do_laws                        );
DECLARE_DO_FUN( do_learn                       );
DECLARE_DO_FUN( do_leave                       );
DECLARE_DO_FUN( do_leavekingdom                );
DECLARE_DO_FUN( do_leaveship                   );
DECLARE_DO_FUN( do_lembecu                     );
DECLARE_DO_FUN( do_light                       );
DECLARE_DO_FUN( do_list                        );
DECLARE_DO_FUN( do_listgroups                  );
DECLARE_DO_FUN( do_listportals                 );
DECLARE_DO_FUN( do_litterbug                   );
DECLARE_DO_FUN( do_loadarea                    );
DECLARE_DO_FUN( do_loadgem                     );
DECLARE_DO_FUN( do_loadquest                   );
DECLARE_DO_FUN( do_loadup                      );
DECLARE_DO_FUN( do_lock                        );
DECLARE_DO_FUN( do_log                         );
DECLARE_DO_FUN( do_logsettings                 );
DECLARE_DO_FUN( do_look                        );
DECLARE_DO_FUN( do_lookaround                  );
DECLARE_DO_FUN( do_loop                        );
DECLARE_DO_FUN( do_lore                        );
DECLARE_DO_FUN( do_low_purge                   );
DECLARE_DO_FUN( do_mailroom                    );
DECLARE_DO_FUN( do_make                        );
DECLARE_DO_FUN( do_make_wilderness_exits       );
DECLARE_DO_FUN( do_make_wilderness_exits2      );
DECLARE_DO_FUN( do_makeboard                   );
DECLARE_DO_FUN( do_makeclan                    );
DECLARE_DO_FUN( do_makecouncil                 );
DECLARE_DO_FUN( do_makedeity                   );
DECLARE_DO_FUN( do_makeguild                   );
DECLARE_DO_FUN( do_makekeeper                  );
DECLARE_DO_FUN( do_makerepair                  );
DECLARE_DO_FUN( do_makeroom                    );
DECLARE_DO_FUN( do_makeshop                    );
DECLARE_DO_FUN( do_makestable                  );
DECLARE_DO_FUN( do_makewizlist                 );
DECLARE_DO_FUN( do_makeworker                  );
DECLARE_DO_FUN( do_manaburst                   );
DECLARE_DO_FUN( do_manashot                    );
DECLARE_DO_FUN( do_manatap                     );
DECLARE_DO_FUN( do_map                         );
DECLARE_DO_FUN( do_mapat                       );
DECLARE_DO_FUN( do_mapedit                     );
DECLARE_DO_FUN( do_mapline                     );
DECLARE_DO_FUN( do_market                      );
DECLARE_DO_FUN( do_markportal                  );
DECLARE_DO_FUN( do_massgoto                    );
DECLARE_DO_FUN( do_massign                     );
DECLARE_DO_FUN( do_mcreate                     );
DECLARE_DO_FUN( do_mdelete                     );
DECLARE_DO_FUN( do_memory                      );
DECLARE_DO_FUN( do_mfind                       );
DECLARE_DO_FUN( do_minfo                       );
DECLARE_DO_FUN( do_minvoke                     );
DECLARE_DO_FUN( do_mistwalk                    );
DECLARE_DO_FUN( do_mixpotion				   );
DECLARE_DO_FUN( do_mlist                       );
DECLARE_DO_FUN( do_moblog                      );
DECLARE_DO_FUN( do_morgue                      );
DECLARE_DO_FUN( do_morphcreate                 );
DECLARE_DO_FUN( do_morphdestroy                );
DECLARE_DO_FUN( do_morphset                    );
DECLARE_DO_FUN( do_morphstat                   );
DECLARE_DO_FUN( do_mortalize                   );
DECLARE_DO_FUN( do_mount                       );
DECLARE_DO_FUN( do_movement                    );
DECLARE_DO_FUN( do_mp_close_passage            );
DECLARE_DO_FUN( do_mp_damage                   );
DECLARE_DO_FUN( do_mp_deposit                  );
DECLARE_DO_FUN( do_mp_fill_in                  );
DECLARE_DO_FUN( do_mp_log                      );
DECLARE_DO_FUN( do_mp_open_passage             );
DECLARE_DO_FUN( do_mp_practice                 );
DECLARE_DO_FUN( do_mp_restore                  );
DECLARE_DO_FUN( do_mp_slay                     );
DECLARE_DO_FUN( do_mp_withdraw                 );
DECLARE_DO_FUN( do_mpadvance                   );
DECLARE_DO_FUN( do_mpapply                     );
DECLARE_DO_FUN( do_mpapplyb                    );
DECLARE_DO_FUN( do_mpasound                    );
DECLARE_DO_FUN( do_mpasupress                  );
DECLARE_DO_FUN( do_mpat                        );
DECLARE_DO_FUN( do_mpbodybag                   );
DECLARE_DO_FUN( do_mpdelay                     );
DECLARE_DO_FUN( do_mpdream                     );
DECLARE_DO_FUN( do_mpecho                      );
DECLARE_DO_FUN( do_mpechoaround                );
DECLARE_DO_FUN( do_mpechoat                    );
DECLARE_DO_FUN( do_mpechozone                  );
DECLARE_DO_FUN( do_mpedit                      );
DECLARE_DO_FUN( do_mpfavor                     );
DECLARE_DO_FUN( do_mpforce                     );
DECLARE_DO_FUN( do_mpgive                      );
DECLARE_DO_FUN( do_mpgoto                      );
DECLARE_DO_FUN( do_mpinvis                     );
DECLARE_DO_FUN( do_mpjunk                      );
DECLARE_DO_FUN( do_mpkill                      );
DECLARE_DO_FUN( do_mpmload                     );
DECLARE_DO_FUN( do_mpmorph                     );
DECLARE_DO_FUN( do_mpmset                      );
DECLARE_DO_FUN( do_mpmusic                     );
DECLARE_DO_FUN( do_mpmusicaround               );
DECLARE_DO_FUN( do_mpmusicat                   );
DECLARE_DO_FUN( do_mpnothing                   );
DECLARE_DO_FUN( do_mpnuisance                  );
DECLARE_DO_FUN( do_mpoload                     );
DECLARE_DO_FUN( do_mposet                      );
DECLARE_DO_FUN( do_mppardon                    );
DECLARE_DO_FUN( do_mppeace                     );
DECLARE_DO_FUN( do_mppkset                     );
DECLARE_DO_FUN( do_mppurge                     );
DECLARE_DO_FUN( do_mpscatter                   );
DECLARE_DO_FUN( do_mpsound                     );
DECLARE_DO_FUN( do_mpsoundaround               );
DECLARE_DO_FUN( do_mpsoundat                   );
DECLARE_DO_FUN( do_mpstat                      );
DECLARE_DO_FUN( do_mptake                      );
DECLARE_DO_FUN( do_mpteach                     );
DECLARE_DO_FUN( do_mptransfer                  );
DECLARE_DO_FUN( do_mpunmorph                   );
DECLARE_DO_FUN( do_mpunnuisance                );
DECLARE_DO_FUN( do_mpvalue                     );
DECLARE_DO_FUN( do_mrange                      );
DECLARE_DO_FUN( do_mset                        );
DECLARE_DO_FUN( do_mstat                       );
DECLARE_DO_FUN( do_muse                        );
DECLARE_DO_FUN( do_music                       );
DECLARE_DO_FUN( do_mwhere                      );
DECLARE_DO_FUN( do_mxp                         );
DECLARE_DO_FUN( do_name                        );
DECLARE_DO_FUN( do_neckchop                    );
DECLARE_DO_FUN( do_neckpinch                   );
DECLARE_DO_FUN( do_neckrupture                 );
DECLARE_DO_FUN( do_nervepinch                  );
DECLARE_DO_FUN( do_nervestrike                 );
DECLARE_DO_FUN( do_newbiechat                  );
DECLARE_DO_FUN( do_newbieset                   );
DECLARE_DO_FUN( do_news                        );
DECLARE_DO_FUN( do_newscore                    );
DECLARE_DO_FUN( do_newzones                    );
DECLARE_DO_FUN( do_niburo                      );
DECLARE_DO_FUN( do_nock                        );
DECLARE_DO_FUN( do_noemote                     );
DECLARE_DO_FUN( do_noresolve                   );
DECLARE_DO_FUN( do_north                       );
DECLARE_DO_FUN( do_northeast                   );
DECLARE_DO_FUN( do_northwest                   );
DECLARE_DO_FUN( do_notell                      );
DECLARE_DO_FUN( do_noteroom                    );
DECLARE_DO_FUN( do_notitle                     );
DECLARE_DO_FUN( do_npcrace                     );
DECLARE_DO_FUN( do_nuisance                    );
DECLARE_DO_FUN( do_oassign                     );
DECLARE_DO_FUN( do_ocreate                     );
DECLARE_DO_FUN( do_odelete                     );
DECLARE_DO_FUN( do_offered                     );
DECLARE_DO_FUN( do_offername                   );
DECLARE_DO_FUN( do_offers                      );
DECLARE_DO_FUN( do_ofind                       );
DECLARE_DO_FUN( do_ogrub                       );
DECLARE_DO_FUN( do_oinvoke                     );
DECLARE_DO_FUN( do_oldscore                    );
DECLARE_DO_FUN( do_olist                       );
DECLARE_DO_FUN( do_opedit                      );
DECLARE_DO_FUN( do_open                        );
//DECLARE_DO_FUN( do_opentourney                 );
DECLARE_DO_FUN( do_opstat                      );
DECLARE_DO_FUN( do_orange                      );
DECLARE_DO_FUN( do_order                       );
DECLARE_DO_FUN( do_orders                      );
DECLARE_DO_FUN( do_ordertalk                   );
DECLARE_DO_FUN( do_oscatter                    );
DECLARE_DO_FUN( do_oset                        );
DECLARE_DO_FUN( do_ostat                       );
DECLARE_DO_FUN( do_ot                          );
DECLARE_DO_FUN( do_outcast                     );
DECLARE_DO_FUN( do_owhere                      );
DECLARE_DO_FUN( do_pager                       );
DECLARE_DO_FUN( do_pardon                      );
DECLARE_DO_FUN( do_parry                       );
DECLARE_DO_FUN( do_password                    );
DECLARE_DO_FUN( do_pcrename                    );
DECLARE_DO_FUN( do_pcshops                     );
DECLARE_DO_FUN( do_peace                       );
DECLARE_DO_FUN( do_peasant                     );
DECLARE_DO_FUN( do_perfectshot                 );
DECLARE_DO_FUN( do_pick                        );
DECLARE_DO_FUN( do_piggyback                   );
DECLARE_DO_FUN( do_pincer                      );
DECLARE_DO_FUN( do_pkillcheck                  );
DECLARE_DO_FUN( do_placemob                    );
DECLARE_DO_FUN( do_placeobj                    );
DECLARE_DO_FUN( do_placetrainer                );
DECLARE_DO_FUN( do_plist                       );
DECLARE_DO_FUN( do_poison_weapon               );
DECLARE_DO_FUN( do_portal                      );
DECLARE_DO_FUN( do_pose                        );
DECLARE_DO_FUN( do_powerslice                  );
DECLARE_DO_FUN( do_pretitle                    );
DECLARE_DO_FUN( do_project                     );
DECLARE_DO_FUN( do_prompt                      );
DECLARE_DO_FUN( do_pset                        );
DECLARE_DO_FUN( do_pstat                       );
DECLARE_DO_FUN( do_pstatus                     );
DECLARE_DO_FUN( do_pull                        );
DECLARE_DO_FUN( do_purge                       );
DECLARE_DO_FUN( do_push                        );
DECLARE_DO_FUN( do_put                         );
DECLARE_DO_FUN( do_qmob                        );
DECLARE_DO_FUN( do_qobj                        );
DECLARE_DO_FUN( do_qpset                       );
DECLARE_DO_FUN( do_qpstat                      );
DECLARE_DO_FUN( do_quaff                       );
DECLARE_DO_FUN( do_qui                         );
DECLARE_DO_FUN( do_quickcombo                  );
DECLARE_DO_FUN( do_quit                        );
DECLARE_DO_FUN( do_racetalk                    );
DECLARE_DO_FUN( do_rank                        );
DECLARE_DO_FUN( do_rankings                    );
DECLARE_DO_FUN( do_rap                         );
DECLARE_DO_FUN( do_rassign                     );
DECLARE_DO_FUN( do_rat                         );
DECLARE_DO_FUN( do_rdelete                     );
DECLARE_DO_FUN( do_reboo                       );
DECLARE_DO_FUN( do_reboot                      );
DECLARE_DO_FUN( do_recall                      );
DECLARE_DO_FUN( do_recho                       );
DECLARE_DO_FUN( do_recite                      );
DECLARE_DO_FUN( do_redit                       );
DECLARE_DO_FUN( do_regoto                      );
DECLARE_DO_FUN( do_remains                     );
DECLARE_DO_FUN( do_remove                      );
DECLARE_DO_FUN( do_removekingdom               );
DECLARE_DO_FUN( do_removetown                  );
DECLARE_DO_FUN( do_rent                        );
DECLARE_DO_FUN( do_repair                      );
DECLARE_DO_FUN( do_repairset                   );
DECLARE_DO_FUN( do_repairshops                 );
DECLARE_DO_FUN( do_repairstat                  );
DECLARE_DO_FUN( do_repairwall                  );
DECLARE_DO_FUN( do_repeat                      );
DECLARE_DO_FUN( do_reply                       );
DECLARE_DO_FUN( do_report                      );
DECLARE_DO_FUN( do_rescue                      );
DECLARE_DO_FUN( do_reserve                     );
DECLARE_DO_FUN( do_reset                       );
DECLARE_DO_FUN( do_resetkeeper                 );
DECLARE_DO_FUN( do_rest                        );
DECLARE_DO_FUN( do_restore                     );
DECLARE_DO_FUN( do_restorelimbs                );
DECLARE_DO_FUN( do_restoretime                 );
DECLARE_DO_FUN( do_restrict                    );
DECLARE_DO_FUN( do_resurrection                );
DECLARE_DO_FUN( do_retell                      );
DECLARE_DO_FUN( do_retire                      );
DECLARE_DO_FUN( do_retran                      );
DECLARE_DO_FUN( do_return                      );
DECLARE_DO_FUN( do_revert                      );
DECLARE_DO_FUN( do_reward                      );
DECLARE_DO_FUN( do_rgrub                       );
DECLARE_DO_FUN( do_ribpuncture                 );
DECLARE_DO_FUN( do_rip                         );
DECLARE_DO_FUN( do_rlist                       );
DECLARE_DO_FUN( do_roar                        );
DECLARE_DO_FUN( do_roll                        );
DECLARE_DO_FUN( do_roomstat                    );
DECLARE_DO_FUN( do_roundhouse                  );
DECLARE_DO_FUN( do_rpedit                      );
DECLARE_DO_FUN( do_rpstat                      );
DECLARE_DO_FUN( do_rreset                      );
DECLARE_DO_FUN( do_rset                        );
DECLARE_DO_FUN( do_rstat                       );
DECLARE_DO_FUN( do_rub                         );
DECLARE_DO_FUN( do_run                         );
DECLARE_DO_FUN( do_sacrifice                   );
DECLARE_DO_FUN( do_save                        );
DECLARE_DO_FUN( do_savearea                    );
DECLARE_DO_FUN( do_say                         );
DECLARE_DO_FUN( do_say_to_char                 );
DECLARE_DO_FUN( do_sbook                       );
DECLARE_DO_FUN( do_scan                        );
DECLARE_DO_FUN( do_scatter                     );
DECLARE_DO_FUN( do_schedule                    );
DECLARE_DO_FUN( do_score                       );
DECLARE_DO_FUN( do_scribe                      );
DECLARE_DO_FUN( do_search                      );
DECLARE_DO_FUN( do_sedit                       );
DECLARE_DO_FUN( do_seeorders                   );
DECLARE_DO_FUN( do_sell                        );
DECLARE_DO_FUN( do_sendmail                    );
DECLARE_DO_FUN( do_set_boot_time               );
DECLARE_DO_FUN( do_setcaste                    );
DECLARE_DO_FUN( do_setclan                     );
DECLARE_DO_FUN( do_setcouncil                  );
DECLARE_DO_FUN( do_setdeity                    );
DECLARE_DO_FUN( do_setfree                     );
DECLARE_DO_FUN( do_setgambler                  );
DECLARE_DO_FUN( do_setgem		       );
DECLARE_DO_FUN( do_setjob                      );
DECLARE_DO_FUN( do_setkingdom                  );
DECLARE_DO_FUN( do_setrace                     );
DECLARE_DO_FUN( do_settoadvance                );
DECLARE_DO_FUN( do_setweather                  );
DECLARE_DO_FUN( do_setwilderness               );
DECLARE_DO_FUN( do_sheath                      );
DECLARE_DO_FUN( do_shells                      );
DECLARE_DO_FUN( do_ships                       );
DECLARE_DO_FUN( do_shops                       );
DECLARE_DO_FUN( do_shopset                     );
DECLARE_DO_FUN( do_shopstat                    );
DECLARE_DO_FUN( do_shout                       );
DECLARE_DO_FUN( do_shove                       );
DECLARE_DO_FUN( do_show                        );
DECLARE_DO_FUN( do_showascii                   );
DECLARE_DO_FUN( do_showclan                    );
DECLARE_DO_FUN( do_showcontrol                 );
DECLARE_DO_FUN( do_showcouncil                 );
DECLARE_DO_FUN( do_showdeity                   );
DECLARE_DO_FUN( do_showentrances               );
DECLARE_DO_FUN( do_showgambler                 );
DECLARE_DO_FUN( do_showhouse                   );
DECLARE_DO_FUN( do_showkingdoms                );
DECLARE_DO_FUN( do_showlayers                  );
DECLARE_DO_FUN( do_showlist                    );
DECLARE_DO_FUN( do_showpic                     );
DECLARE_DO_FUN( do_showrace                    );
DECLARE_DO_FUN( do_showresources               );
DECLARE_DO_FUN( do_showweather                 );
DECLARE_DO_FUN( do_shutdow                     );
DECLARE_DO_FUN( do_shutdown                    );
DECLARE_DO_FUN( do_sidekick                    );
DECLARE_DO_FUN( do_silence                     );
DECLARE_DO_FUN( do_sing                        );
DECLARE_DO_FUN( do_sit                         );
DECLARE_DO_FUN( do_skills                      );
DECLARE_DO_FUN( do_skin                        );
DECLARE_DO_FUN( do_sla                         );
DECLARE_DO_FUN( do_slay                        );
DECLARE_DO_FUN( do_sleep                       );
DECLARE_DO_FUN( do_slice                       );
DECLARE_DO_FUN( do_slist                       );
DECLARE_DO_FUN( do_slookup                     );
DECLARE_DO_FUN( do_smoke                       );
DECLARE_DO_FUN( do_sneak                       );
DECLARE_DO_FUN( do_snoop                       );
DECLARE_DO_FUN( do_sober                       );
DECLARE_DO_FUN( do_socials                     );
DECLARE_DO_FUN( do_south                       );
DECLARE_DO_FUN( do_southeast                   );
DECLARE_DO_FUN( do_southwest                   );
DECLARE_DO_FUN( do_spar                        );
DECLARE_DO_FUN( do_speak                       );
DECLARE_DO_FUN( do_spear                       );
DECLARE_DO_FUN( do_speed                       );
DECLARE_DO_FUN( do_spinkick                    );
DECLARE_DO_FUN( do_split                       );
DECLARE_DO_FUN( do_sset                        );
DECLARE_DO_FUN( do_sslist                      );
DECLARE_DO_FUN( do_stable                      );
DECLARE_DO_FUN( do_stack                       );
DECLARE_DO_FUN( do_stalk                       );
DECLARE_DO_FUN( do_stand                       );
DECLARE_DO_FUN( do_startarena                  );
DECLARE_DO_FUN( do_startfire                   );
DECLARE_DO_FUN( do_startkingdom                );
DECLARE_DO_FUN( do_startroom                   );
DECLARE_DO_FUN( do_starttourney                );
DECLARE_DO_FUN( do_stat                        );
DECLARE_DO_FUN( do_statreport                  );
DECLARE_DO_FUN( do_status                      );
DECLARE_DO_FUN( do_steal                       );
DECLARE_DO_FUN( do_steership                   );
DECLARE_DO_FUN( do_stepback                    );
DECLARE_DO_FUN( do_strew                       );
DECLARE_DO_FUN( do_strip                       );
DECLARE_DO_FUN( do_study                       );
DECLARE_DO_FUN( do_stun                        );
DECLARE_DO_FUN( do_style                       );
DECLARE_DO_FUN( do_supplicate                  );
DECLARE_DO_FUN( do_survey                      );
DECLARE_DO_FUN( do_switch                      );
DECLARE_DO_FUN( do_talent                      );
DECLARE_DO_FUN( do_talkquest                   );
DECLARE_DO_FUN( do_tamp                        );
DECLARE_DO_FUN( do_target                      );
DECLARE_DO_FUN( do_tcreate                     );
DECLARE_DO_FUN( do_tdelete                     );
DECLARE_DO_FUN( do_tell                        );
DECLARE_DO_FUN( do_terraform                   );
DECLARE_DO_FUN( do_think                       );
DECLARE_DO_FUN( do_throw                       );
DECLARE_DO_FUN( do_time                        );
DECLARE_DO_FUN( do_timecmd                     );
DECLARE_DO_FUN( do_timmuru                     );
DECLARE_DO_FUN( do_tinduct                     );
DECLARE_DO_FUN( do_title                       );
DECLARE_DO_FUN( do_tkickout                    );
DECLARE_DO_FUN( do_tone                        );
DECLARE_DO_FUN( do_tornadokick                 );
DECLARE_DO_FUN( do_toss                        );
DECLARE_DO_FUN( do_track                       );
DECLARE_DO_FUN( do_tradegoods                  );
DECLARE_DO_FUN( do_traderoutes                 );
DECLARE_DO_FUN( do_training                    );
DECLARE_DO_FUN( do_transfer                    );
DECLARE_DO_FUN( do_trap                        );
DECLARE_DO_FUN( do_trust                       );
DECLARE_DO_FUN( do_tset                        );
DECLARE_DO_FUN( do_tstat                       );
DECLARE_DO_FUN( do_tumble                      );
DECLARE_DO_FUN( do_typo                        );
DECLARE_DO_FUN( do_unfoldarea                  );
DECLARE_DO_FUN( do_unhell                      );
DECLARE_DO_FUN( do_unloadqarea                 );
DECLARE_DO_FUN( do_unlock                      );
DECLARE_DO_FUN( do_unnuisance                  );
DECLARE_DO_FUN( do_unsilence                   );
DECLARE_DO_FUN( do_up                          );
DECLARE_DO_FUN( do_updatearea                  );
DECLARE_DO_FUN( do_updateskills                );
DECLARE_DO_FUN( do_uselicense                  );
DECLARE_DO_FUN( do_users                       );
DECLARE_DO_FUN( do_value                       );
DECLARE_DO_FUN( do_vassign                     );
DECLARE_DO_FUN( do_version                     );
DECLARE_DO_FUN( do_victories                   );
DECLARE_DO_FUN( do_viewmount                   );
DECLARE_DO_FUN( do_viewskills                  );
DECLARE_DO_FUN( do_visible                     );
DECLARE_DO_FUN( do_vnums                       );
DECLARE_DO_FUN( do_vsearch                     );
DECLARE_DO_FUN( do_wake                        );
DECLARE_DO_FUN( do_warn                        );
DECLARE_DO_FUN( do_wartalk                     );
DECLARE_DO_FUN( do_watch                       );
DECLARE_DO_FUN( do_wblock                      );
DECLARE_DO_FUN( do_weaponbreak                 );
DECLARE_DO_FUN( do_wear                        );
DECLARE_DO_FUN( do_weather                     );
DECLARE_DO_FUN( do_webstats                    );
DECLARE_DO_FUN( do_west                        );
DECLARE_DO_FUN( do_where                       );
DECLARE_DO_FUN( do_whisper                     );
DECLARE_DO_FUN( do_who                         );
DECLARE_DO_FUN( do_whois                       );
DECLARE_DO_FUN( do_whonumber                   );
DECLARE_DO_FUN( do_wimpy                       );
DECLARE_DO_FUN( do_wizhelp                     );
DECLARE_DO_FUN( do_wizlist                     );
DECLARE_DO_FUN( do_wizlock                     );
DECLARE_DO_FUN( do_wizzap                      );
DECLARE_DO_FUN( do_worth                       );
DECLARE_DO_FUN( do_yell                        );
DECLARE_DO_FUN( do_zap                         );
DECLARE_DO_FUN( do_zones                       );
/*//T6*/

/*
 * Spell functions.
 * Defined in magic.c.
 */
DECLARE_SPELL_FUN(spell_null);
DECLARE_SPELL_FUN(spell_notfound);
DECLARE_SPELL_FUN(spell_animate_dead);
DECLARE_SPELL_FUN(spell_astral_walk);
DECLARE_SPELL_FUN(spell_bless_weapon);
DECLARE_SPELL_FUN(spell_blindness);
DECLARE_SPELL_FUN(spell_cause_critical);
DECLARE_SPELL_FUN(spell_restore_limb);
DECLARE_SPELL_FUN(spell_revitalize_limb);
DECLARE_SPELL_FUN(spell_cause_light);
DECLARE_SPELL_FUN(spell_cause_serious);
DECLARE_SPELL_FUN(spell_charm_person);
DECLARE_SPELL_FUN(spell_create_food);
DECLARE_SPELL_FUN(spell_create_water);
DECLARE_SPELL_FUN(spell_cure_blindness);
DECLARE_SPELL_FUN(spell_cure_poison);
DECLARE_SPELL_FUN(spell_curse);
DECLARE_SPELL_FUN(spell_detect_poison);
DECLARE_SPELL_FUN(spell_dispel_magic);
DECLARE_SPELL_FUN(spell_disenchant_weapon);
DECLARE_SPELL_FUN(spell_earthquake);
DECLARE_SPELL_FUN(spell_enchant_weapon);
DECLARE_SPELL_FUN(spell_faerie_fire);
DECLARE_SPELL_FUN(spell_faerie_fog);
DECLARE_SPELL_FUN(spell_farsight);
DECLARE_SPELL_FUN(spell_knock);
DECLARE_SPELL_FUN(spell_harm);
DECLARE_SPELL_FUN(spell_holy_food);
DECLARE_SPELL_FUN(spell_identify);
DECLARE_SPELL_FUN(spell_invis);
DECLARE_SPELL_FUN(spell_knowenemy);
DECLARE_SPELL_FUN(spell_locate_object);
DECLARE_SPELL_FUN(spell_pass_door);
DECLARE_SPELL_FUN(spell_poison);
DECLARE_SPELL_FUN(spell_polymorph);
DECLARE_SPELL_FUN(spell_possess);
DECLARE_SPELL_FUN(spell_recharge);
DECLARE_SPELL_FUN(spell_remove_curse);
DECLARE_SPELL_FUN(spell_remove_invis);
DECLARE_SPELL_FUN(spell_remove_trap);
DECLARE_SPELL_FUN(spell_sleep);
DECLARE_SPELL_FUN(spell_smaug);
DECLARE_SPELL_FUN(spell_summon);
DECLARE_SPELL_FUN(spell_wizard_eye);
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_portal);
DECLARE_SPELL_FUN(spell_bethsaidean_touch);
DECLARE_SPELL_FUN(spell_expurgation);
DECLARE_SPELL_FUN(spell_sacral_divinity);
DECLARE_SPELL_FUN(spell_eye_of_god);
DECLARE_SPELL_FUN(spell_resurrection);
DECLARE_SPELL_FUN(spell_summon_corpse);
DECLARE_SPELL_FUN(spell_greater_resurrection);
DECLARE_SPELL_FUN(spell_lesser_resurrection);
DECLARE_SPELL_FUN(spell_web);
DECLARE_SPELL_FUN(spell_snare);
DECLARE_SPELL_FUN(spell_extradimensional_portal);
DECLARE_SPELL_FUN(spell_revitalize_spirit);
DECLARE_SPELL_FUN(spell_holy_cleansing);

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

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

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

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

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

#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).
 */
#define PLAYER_DIR	"../player/" /* Player files   */
#define RESET_DIR   "../reset/" // Player Reset Files
#define LNAME_DIR       "../lname/" /* Player Lastname/Family Files */
#define ACCOUNT_DIR     "../account/" //Account Files
#define WEBDIR_DIR    "../../public_html/"  //Webpage, if you want to publish a file, well dump it here :-)
#define PLAYERSTAT_DIR    WEBDIR_DIR "toc/playerstat/"

#define SKILLOUT_DIR  WEBDIR_DIR "skillout/" //Skill output to the web
#define CASTE_DIR     "../caste/" // Caste related info
#define PPAGE_DIR       "../../../public_html/" /*  File who statement    */
#define KINGDOM_DIR     "../kingdom/" /* Kingdom files                */
#define BACKUP_DIR	"../backup/" /* Backup Player files  */
#define GOD_DIR		"../gods/" /* God Info Dir   */
#define BOARD_DIR	"../boards/" /* Board data dir  */
#define CLAN_DIR	"../clans/" /* Clan data dir  */
#define COUNCIL_DIR  	"../councils/" /* Council data dir  */
#define GUILD_DIR       "../guilds/" /* Guild data dir               */
#define DEITY_DIR	"../deity/" /* Deity data dir  */
#define NAMESET_DIR "../nameset/" /* Directory for name building files for quests */
#define BUILD_DIR       "../building/" /* Online building save dir     */
#define SYSTEM_DIR	"../system/" /* Main system files  */
#define PROG_DIR	"mudprogs/" /* MUDProg files  */
#define CORPSE_DIR	"../corpses/" /* Corpses   */
#ifdef WIN32
#define NULL_FILE	"nul" /* To reserve one stream        */
#else
#define NULL_FILE	"/dev/null" /* To reserve one stream        */
#endif

#define	CLASS_DIR	"../classes/" /* Classes   */
#define WATCH_DIR	"../watch/" /* Imm watch files --Gorog      */
/*
 * The watch directory contains a maximum of one file for each immortal
 * that contains output from "player watches". The name of each file
 * in this directory is the name of the immortal who requested the watch
 */

#define TOCSTAT_FILE       WEBDIR_DIR "toc/modules/GameStats/pntemplates/latest.htm"
#define AREA_LIST	        "area.lst" /* List of areas  */
#define WATCH_LIST              "watch.lst" /* List of watches              */
#define BAN_LIST                "ban.lst" /* List of bans                 */
#define RESERVED_LIST	        "reserved.lst" /* List of reserved names */
#define CLAN_LIST	        "clan.lst" /* List of clans  */
#define COUNCIL_LIST	        "council.lst" /* List of councils  */
#define GUILD_LIST              "guild.lst" /* List of guilds               */
#define GOD_LIST	        "gods.lst" /* List of gods   */
#define TRAP_FILE           "trap.lst" // List of traps, area independent now
#define SHIP_FILE               SYSTEM_DIR "ship.dat" //Ship files
#define BDESCRIPTION_LIST       SYSTEM_DIR "bdesc.lst" //List of battle descriptions for every weapon
#define EMAIL_FILE              SYSTEM_DIR "email.dat" //Email file for sending out email
#define CHISTORY_FILE           SYSTEM_DIR "chistory.dat" //Channel history file
#define MARKET_FILE             SYSTEM_DIR "market.dat" //Market data file
#define DEITY_LIST	        "deity.lst" /* List of deities  */
#define	CLASS_LIST	        "class.lst" /* List of classes  */
#define CONQUER_FILE            "conquer.lst" //Conquer list
#define	RACE_LIST	        "race.lst" /* List of races  */
#define KINGDOM_LIST            "kingdom.lst" /* List of kingdoms             */
#define BIN_LIST                MAP_DIR "bins.lst" /* Resource Bins for Kingdoms */
#define TRAINER_LIST            "trainer.lst" /* List of trainers */
#define PORTAL_FILE             "portals.lst" /* List of portals */
#define TRADE_FILE              "trade.lst" // List of trades in process
#define GEM_LIST		"gem.lst" /* List of gems */
#define BOX_LIST		"box.lst" /* List of boxes */
#define MORPH_FILE      "morph.dat" /* For morph data */
#define BOARD_FILE	"boards.txt" /* For bulletin boards  */
#define SHUTDOWN_FILE	"shutdown.txt" /* For 'shutdown'  */
#define IMM_HOST_FILE   SYSTEM_DIR "immortal.host" /* For stoping hackers */
#define ACCOUNT_LOG     SYSTEM_DIR "accounts.log" //Logs Account Creation/Usage
#define LAST_LIST       SYSTEM_DIR "last.lst" //last list
#define CHANGES_LIST    WEBDIR_DIR "changes.txt" //changes list
#define CCHANGES_LIST   WEBDIR_DIR "cchanges.txt" //file the new change list is written to when a post is done
#define LAST_TEMP_LIST  SYSTEM_DIR "ltemp.lst" //temp file for the last list so the data can be copyover over
#define KCHEST_FILE     "kchest.dat" //Kingdom Chest File
#define KINGDOM_MLOG_FILE   KINGDOM_DIR "kmlog.txt"
#define MILIST_FILE     KINGDOM_DIR "milist.dat" //Military mob listing file :-)
#define EXTRACTION_FILE KINGDOM_DIR "extract.dat" //Extraction mob listing file :-)
#define BUYK_FILE       KINGDOM_DIR "buykingdom.dat" //Items you can buy in a kingdom
#define TRAINING_LIST   KINGDOM_DIR "training.dat" //Training List :-)
#define RIPSCREEN_FILE	SYSTEM_DIR "mudrip.rip"
#define RIPTITLE_FILE	SYSTEM_DIR "mudtitle.rip"
#define ANSITITLE_FILE	SYSTEM_DIR "mudtitle.ans"
#define ASCTITLE_FILE	SYSTEM_DIR "mudtitle.asc"
#define AUTHLIST_FILE   SYSTEM_DIR "authlist.dat"
#define NPCRACE_FILE    RACEDIR "npcrace.lst"
#define WEBHELP_FILE    WEBDIR_DIR "webhelp.txt"
#define SKILLOUT_FILE   SKILLOUT_DIR "skillout.htm"
#define BARENA_FILE     SYSTEM_DIR "barena.dat" /* Battle ARena data, replaces hall of fame */
#define HALL_FAME_FILE  SYSTEM_DIR "halloffame.lst" /* Arena hall of fame */
#define BOOTLOG_FILE	SYSTEM_DIR "boot.txt" /* Boot up error file  */
//#define BUG_FILE	SYSTEM_DIR "bugs.txt"
#define PBUG_FILE	SYSTEM_DIR "pbugs.txt" /* For 'bug' command   */
#define IDEA_FILE	SYSTEM_DIR "ideas.txt" /* For 'idea'   */
#define TYPO_FILE	SYSTEM_DIR "typos.txt" /* For 'typo'   */
#define FIXED_FILE	SYSTEM_DIR "fixed.txt" /* For 'fixed' command */
#define LOG_FILE	SYSTEM_DIR "log.txt" /* For talking in logged rooms */
#define MOBLOG_FILE	SYSTEM_DIR "moblog.txt" /* For mplog messages  */
#define WIZLIST_FILE	SYSTEM_DIR "WIZLIST" /* Wizlist   */
#define WHO_FILE	SYSTEM_DIR "WHO" /* Who output file  */
#define WEBWHO_FILE	SYSTEM_DIR "WEBWHO" /* WWW Who output file */
#define REQUEST_PIPE	SYSTEM_DIR "REQUESTS" /* Request FIFO  */
#define SKILL_FILE	SYSTEM_DIR "skills.dat" /* Skill table  */
#define HERB_FILE	SYSTEM_DIR "herbs.dat" /* Herb table   */
#define TONGUE_FILE	SYSTEM_DIR "tongues.dat" /* Tongue tables  */
#define SOCIAL_FILE	SYSTEM_DIR "socials.dat" /* Socials   */
#define COMMAND_FILE	SYSTEM_DIR "commands.dat" /* Commands   */
#define USAGE_FILE	SYSTEM_DIR "usage.txt" /* How many people are on 
                                             every half hour - trying to
                                             determine best reboot time */
#define ECONOMY_FILE	SYSTEM_DIR "economy.txt" /* Gold looted, value of
                                                 used potions/pills  */
#define FORGE_LIST      "forge.lst" /* List of forge items */
#define WBLOCK_FILE     MAP_DIR "wblock.dat" //Wilderness Mob Blocks File 
#define SLAB_LIST             "slab.lst" /* List of Slab items */
#define PROJECTS_FILE	SYSTEM_DIR "projects.txt" /* For projects  */
#define PLANE_FILE	SYSTEM_DIR "planes.dat" /* For planes   */
#define COPYOVER_FILE  SYSTEM_DIR "copyover.dat" /* for warm reboots */
#define PIGGYBACK_FILE  SYSTEM_DIR "piggyback.dat" /* for warm reboots recording riding status */
#define QMOB_FILE      SYSTEM_DIR "qmob.dat" //Quest mob Data, lots of it
#define QOBJ_FILE      SYSTEM_DIR "qobj.dat" //Quest obj Data
#define QUEST_FILE     SYSTEM_DIR "quest.dat" //Saved data from a copyover
#define QUEST_MFILE    SYSTEM_DIR "questmob.dat" //Saved mobs from a copyover
#define QUEST_OFILE    SYSTEM_DIR "questobj.dat" //Saved objs from a copyover
#define QUEST_LAREA    "qarea.lst" //Areas that need to be loaded up
#define EXE_FILE       "../src/fear" /* executable path */
#define CLASSDIR	"../classes/"
#define RACEDIR 	"../races/"
#define HELP_FILE "help.txt" /* For undefined helps */

/*
 * 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 BD	BOARD_DATA
#define CL	CLAN_DATA
#define EDD	EXTRA_DESCR_DATA
#define RD	RESET_DATA
#define ED	EXIT_DATA
#define	ST	SOCIALTYPE
#define	CO	COUNCIL_DATA
#define DE	DEITY_DATA
#define SK	SKILLTYPE


// Forging shit, too lazy to put in right file --Xerves
void add_obj_timer args((OBJ_DATA * obj, sh_int type, sh_int count, DO_FUN * fun, int value));
TIMER *get_obj_timeptr args((OBJ_DATA * obj, sh_int type));
sh_int get_obj_timer args((OBJ_DATA * obj, sh_int type));
void extract_obj_timer args((OBJ_DATA * obj, TIMER * timer));
void remove_obj_timer args((OBJ_DATA * obj, sh_int type));
void load_forge_data args((void));
void save_forge_data args((void));
void load_slab_data args((void));
void save_slab_data args((void));

/* forge.c */
void ore_alter args((CHAR_DATA * ch, OBJ_DATA * obj, OBJ_DATA * slab));
void alter_forge_obj args((CHAR_DATA * ch, OBJ_DATA *fobj, OBJ_DATA *first_obj, SLAB_DATA *slab));

/* editor.c cronel new editor */
/* All Cronel Stuff, wow nice list */
#define start_editing( ch, data ) \
	start_editing_nolimit( ch, data, MAX_STRING_LENGTH )
void start_editing_nolimit args((CHAR_DATA * ch, char *data, sh_int max_size));
void stop_editing args((CHAR_DATA * ch));
void edit_buffer args((CHAR_DATA * ch, char *argument));
char *copy_buffer args((CHAR_DATA * ch));
void set_editor_desc args((CHAR_DATA * ch, char *desc));
void editor_desc_printf args((CHAR_DATA * ch, char *desc_fmt, ...));
void talk_info args((sh_int AT_COLOR, char *argument)); /* Rantic's info channel */
void char_quit args((CHAR_DATA * ch, bool broadcast));

/* raferquest.c */
void load_quest_contents args((void));
void save_quest_data args((void));
void load_quest_data args((void));
void disposequestarea args((AREA_DATA *tarea, int difficulty));
void load_qobj_data args((void));
void load_qmob_data args((void));

/* caste.c */
void remove_all_towns args((int kingdom));
int get_kingdom_units args((int tpid));
int get_banksize args((int size));
bool is_valid_movement args((int *px, int *py, char *arg, CHAR_DATA *ch));
void process_movement_value args((CHAR_DATA *ch, int dir));
int get_truedir args((char *txt));
bool proper_resources_mobs_town args((TOWN_DATA *town, BUYKMOB_DATA *kmob));
void remove_resources_mobs_town args((TOWN_DATA *town, BUYKMOB_DATA * kmob));
void remove_town args((TOWN_DATA *town, int type));
int get_maxunits args((int size));
int klog_linecount args((char *logfile));
int search_logname args((char *logname));
char *return_logname args((int flag));
TOWN_DATA *get_town_tpid args((int kingdom, int pid));
int get_current_hold args((TOWN_DATA *town));
void update_master_stat args((CHAR_DATA *ch, int x, int y));
bool is_made_room args((int x, int y, int map, TOWN_DATA *town));
bool in_town_range args((TOWN_DATA *town, int x, int y, int map));
bool build_onmap args((int sector));
TOWN_DATA *get_town args((char *townname));
void remove_kingdom args((int kingdom));
char *get_resources_traded args((TRADE_DATA *trade, int type));
void write_kingdom_logfile args((int ht, char *buf, int flag));
void resetkeeper args((AREA_DATA * pArea, ROOM_INDEX_DATA * pRoom, bool dodoors));
bool can_kmodify args((CHAR_DATA * ch, ROOM_INDEX_DATA * room));
int get_resourcetype args((int sector, int type));
int alt_dir args((CHAR_DATA * ch, int x, int y, int dir));
void layroad args((CHAR_DATA * ch, char *argument));
void digstone args((CHAR_DATA * ch, char *argument));
void torchland args((CHAR_DATA * ch, char *argument));
void cutpath args((CHAR_DATA * ch, char *argument));
void change_plains args((CHAR_DATA * ch, char *argument));
void stopfire args((CHAR_DATA * ch, char *argument));
void planttree args((CHAR_DATA * ch, char *argument));
void plantgrass args((CHAR_DATA * ch, char *argument));
void plantgrain args((CHAR_DATA * ch, char *argument));
void plantcorn args((CHAR_DATA * ch, char *argument));
void scan_players args((void));
void add_player_list args((CHAR_DATA * ch, int type));
void remove_player_list args((CHAR_DATA * ch, int type));

/* act_comm.c */
void read_pfile2 args((char *dirname, char *filename));
int get_heightweight_percent args((int value));
bool circle_follow args((CHAR_DATA * ch, CHAR_DATA * victim));
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 send_rip_screen args((CHAR_DATA * ch));
void send_rip_title args((CHAR_DATA * ch));
void send_ansi_title args((CHAR_DATA * ch));
void send_ascii_title args((CHAR_DATA * ch));
void to_channel args((const char *argument, int channel, const char *verb, sh_int level));
void talk_auction args((char *argument));
int knows_language args((CHAR_DATA * ch, int language, CHAR_DATA * cch));
bool can_learn_lang args((CHAR_DATA * ch, int language));
int countlangs args((int languages));
char *translate args((int percent, const char *in, const char *name));
char *obj_short args((OBJ_DATA * obj));
void init_profanity_checker args((void));

/* act_info.c */
int get_talent_increase args((CHAR_DATA *ch, int stat));
char *add_wspace args((int length, int maxlength));
OBJ_DATA *get_wear_hidden_cloak args((CHAR_DATA *ch));
OBJ_DATA *get_wear_cloak args((CHAR_DATA *ch));
char *show_pers_output args((CHAR_DATA *ch, CHAR_DATA *looker, int type, int kingdom));
bool check_blind args((CHAR_DATA * ch));

//Time functions
char *getgametime args((void));
char *getdayofweek args((void));
char *getampm args((int hour));
int get12hour args((int hour));
char *getmonth args((int day));
int getdayofmonth args((int day));
int getyear args((void));
int get_value_month args((void));
int getday args((void));
int gethour args((void));
int getmin args((void));

//End time Functions
char *punct args((int foo)); /* Punctuate for numbers */
int get_door args((char *arg));
bool is_player_kingdom args((int ht));
char *format_obj_to_char args((OBJ_DATA * obj, CHAR_DATA * ch, bool fShort, bool colors));
void show_list_to_char args((OBJ_DATA * list, CHAR_DATA * ch, bool fShort, bool fShowNothing, const int iDefaultAction));
bool is_ignoring args((CHAR_DATA * ch, CHAR_DATA * ign_ch));
void show_race_line args((CHAR_DATA * ch, CHAR_DATA * victim));

/* act_move.c */
int is_nighttime args((void));
int check_stalk_move args((CHAR_DATA *ch, ROOM_INDEX_DATA *room));
int check_hide_move args((CHAR_DATA *ch, int sector, ROOM_INDEX_DATA *room));
void update_indoor_status args((int doornum, CHAR_DATA *ch, TOWN_DATA *town, int x, int y, int map, int type));
char *grab_word args((char *argument, char *arg_first));
char *wordwrap args((char *txt, sh_int wrap));
void clear_vrooms args((void));
int get_hunt_cost args((ROOM_INDEX_DATA *room));
ED *find_door args((CHAR_DATA * ch, char *arg, bool quiet));
ED *get_exit args((ROOM_INDEX_DATA * room, sh_int dir));
ED *get_exit_to args((ROOM_INDEX_DATA * room, sh_int dir, int vnum));
ED *get_exit_num args((ROOM_INDEX_DATA * room, sh_int count));
ch_ret move_char args((CHAR_DATA * ch, EXIT_DATA * pexit, int fall));
void teleport args((CHAR_DATA * ch, sh_int room, int flags));
sh_int encumbrance args((CHAR_DATA * ch, sh_int move));
bool will_fall args((CHAR_DATA * ch, int fall));
ch_ret pullcheck args((CHAR_DATA * ch, int pulse));
char *rev_exit args((sh_int vdir));

/* act_obj.c */

void wear_obj args((CHAR_DATA * ch, OBJ_DATA * obj, bool fReplace, sh_int wear_bit));
bool remove_obj args((CHAR_DATA * ch, int iWear, sh_int fReplace));
bool can_layer args((CHAR_DATA * ch, OBJ_DATA * obj, sh_int wear_loc));
bool could_dual args((CHAR_DATA * ch));
bool can_dual args((CHAR_DATA * ch));
obj_ret damage_obj args((OBJ_DATA * obj, CHAR_DATA * attacker, int proj, int dam));
sh_int get_obj_resistance args((OBJ_DATA * obj, CHAR_DATA *ch));
void save_clan_storeroom args((CHAR_DATA * ch, CLAN_DATA * clan));
void obj_fall args((OBJ_DATA * obj, bool through));

/* act_wiz.c */
TRAP_DATA *copy_trap args((TRAP_DATA *otrap, OBJ_DATA *obj));
RID *find_location args((CHAR_DATA * ch, char *arg));
void echo_to_all args((sh_int AT_COLOR, char *argument, sh_int tar));
void get_reboot_string args((void));
struct tm *update_time args((struct tm * old_time));
void free_social args((SOCIALTYPE * social));
void add_social args((SOCIALTYPE * social));
void free_command args((CMDTYPE * command));
void unlink_command args((CMDTYPE * command));
void add_command args((CMDTYPE * command));
void ld_punt args((CHAR_DATA * ch)); //--Critt

/* arena.c */
CD *switch_arena_char args((CHAR_DATA * ch));
void update_barena args((CHAR_DATA * ch, int type));

//bank.c
int get_townbank_weight args((TOWN_DATA *town));

/* boards.c */
void load_boards args((void));
BD *get_board args((OBJ_DATA * obj));
void free_note args((NOTE_DATA * pnote));

//archery.c
ch_ret ranged_attack args((CHAR_DATA * ch, char *argument, OBJ_DATA * weapon, OBJ_DATA * projectile, sh_int dt, sh_int range));
int find_sqrt args((int dist));

/* gboard.c */
NOTE_DATA *note_free;
void free_global_note args((NOTE_DATA * note));
char *add_space args((int size, int tsize));

/* build.c */
float adjust_weight args((char *argument));
TOWN_DATA *find_town args((int x, int y, int map));
void write_area_list args((void));
int get_cmdflag args((char *flag));
char *flag_string args((int bitvector, char *const flagarray[]));
char *ext_flag_string args((EXT_BV * bitvector, char *const flagarray[]));
int get_npc_race args((char *type));
char *print_npc_race args((int race));
int get_exflag args((char *flag));
int get_rflag args((char *flag));
int get_mpflag args((char *flag));
int get_qmobflag args((char *flag));
int get_dir args((char *txt));
int get_new_dir args((char *txt, int type));
char *strip_cr args((char *str));
void fdarea args((CHAR_DATA * keeper, char *argument));
OBJ_DATA *shop_ocreate args((CHAR_DATA * keeper, OBJ_DATA * obj));
OBJ_DATA *shop_oclean args((CHAR_DATA * keeper, OBJ_DATA * obj));
void odelete args((CHAR_DATA * ch, char *argument));


/* clans.c */
CL *get_clan args((char *name));
void load_clans args((void));
void save_clan args((CLAN_DATA * clan));

CO *get_council args((char *name));
void load_councils args((void));
void save_council args((COUNCIL_DATA * council));

/* deity.c */
DE *get_deity args((char *name));
void load_deity args((void));
void save_deity args((DEITY_DATA * deity));

/* comm.c */
void read_pfiles_for_stats args((char *filename));
void close_socket args((DESCRIPTOR_DATA * dclose, bool force));
void write_to_buffer args((DESCRIPTOR_DATA * d, const char *txt, int length));
void write_to_pager args((DESCRIPTOR_DATA * d, const char *txt, int length));
void send_to_char args((const char *txt, CHAR_DATA * ch));
void send_to_char_color args((const char *txt, CHAR_DATA * ch));
void send_to_pager args((const char *txt, CHAR_DATA * ch));
void send_to_pager_color args((const char *txt, CHAR_DATA * ch));
void set_char_color args((sh_int AType, CHAR_DATA * ch));
void set_pager_color args((sh_int AType, CHAR_DATA * ch));
void ch_printf args((CHAR_DATA * ch, char *fmt, ...));
void ch_printf_color args((CHAR_DATA * ch, char *fmt, ...));
void log_printf args((char *fmt, ...));
void pager_printf args((CHAR_DATA * ch, char *fmt, ...));
void pager_printf_color args((CHAR_DATA * ch, char *fmt, ...));
void act args((sh_int AType, const char *format, CHAR_DATA * ch, const void *arg1, const void *arg2, int type));
void copyover_recover args((void));
void actns args((sh_int AType, const char *format, CHAR_DATA * ch, const void *arg1, const void *arg2, int type));
char *myobj args((OBJ_DATA * obj));
char *obj_short args((OBJ_DATA * obj));
void free_runbuf args((DESCRIPTOR_DATA * d));


/* reset.c */
RD *make_reset args((char letter, int extra, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int resetlast, int resettime));
RD *add_reset args((AREA_DATA * tarea, char letter, int extra, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int resetlast, int resettime));
RD *place_reset args((AREA_DATA * tarea, char letter, int extra, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int resetlast, int resettime));
void reset_area args((AREA_DATA * pArea, int ttype));
bool is_room_reset args((RESET_DATA * pReset, ROOM_INDEX_DATA * aRoom, AREA_DATA * pArea));
void add_obj_reset args((AREA_DATA * pArea, char cm, OBJ_DATA * obj, int v2, int v3));
void delete_reset args((AREA_DATA * pArea, RESET_DATA * pReset));
void instaroom args((CHAR_DATA * ch, AREA_DATA * pArea, ROOM_INDEX_DATA * pRoom, bool dodoors, bool allmap));
void edit_reset args((CHAR_DATA * ch, char *argument, AREA_DATA * pArea, ROOM_INDEX_DATA * aRoom));
void kupkeep args((AREA_DATA * pArea, ROOM_INDEX_DATA * pRoom));
void rsmob args((AREA_DATA * pArea, ROOM_INDEX_DATA * pRoom));

/* db.c */
float fread_float args((FILE * fp));
void delete_area args((AREA_DATA *tarea));
int parse_helpfile_index args((FILE *fp, HELP_DATA *pHelp, char *argument));
void show_file args((CHAR_DATA * ch, char *filename));
#ifdef MTRACE
#define str_dup( str ) (_str_dup( (str), __FILE__, __FUNCTION__, __LINE__ ))
char *_str_dup args( ( const char *str, char *file_n, char *funct_n, int line_n ) );
#else
char *str_dup args((char const *str));
#endif
void boot_db args((bool fCopyOver));
void area_update args((void));
void add_char args((CHAR_DATA * ch));
CD *create_mobile args((MOB_INDEX_DATA * pMobIndex));
OD *create_object args((OBJ_INDEX_DATA * pObjIndex, int level));
void clear_char args((CHAR_DATA * ch));
void free_char args((CHAR_DATA * ch));
char *get_extra_descr args((const char *name, EXTRA_DESCR_DATA * ed));
MID *get_mob_index args((sh_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));
EXT_BV fread_bitvector args((FILE * fp));
void fwrite_bitvector args((EXT_BV * bits, FILE * fp));
char *print_bitvector args((EXT_BV * bits));
char *fread_string args((FILE * fp));
char *fread_string_nohash args((FILE * fp));
void fread_to_eol args((FILE * fp));
char *fread_word args((FILE * fp));
char *fread_line args((FILE * fp));
int number_fuzzy args((int number));
int number_range args((int from, int to));
sh_int snumber_range args((sh_int from, sh_int to));
int number_percent args((void));
int number_door args((void));
int number_bits args((int width));
int number_mm args((void));
sh_int snumber_mm args((void));
int dice args((int number, int size));
sh_int sdice args((sh_int number, sh_int size));
int interpolate args((int level, int value_00, int value_32));
void smash_tilde args((char *str));
void hide_tilde args((char *str));
char *show_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));
char *strlower args((const char *str));
char *strupper args((const char *str));
char *aoran args((const char *str));
void append_file args((CHAR_DATA * ch, char *file, char *str));
void append_to_file args((char *file, char *str));
void bug args((const char *str, ...));
void log_string_plus args((const char *str, sh_int log_type, sh_int level));
RID *make_room args((int vnum));
OID *make_object args((int vnum, int cvnum, char *name, int cprog));
MID *make_mobile args((sh_int vnum, sh_int cvnum, char *name));
ED *make_exit args((ROOM_INDEX_DATA * pRoomIndex, ROOM_INDEX_DATA * to_room, sh_int door));
void add_help args((HELP_DATA * pHelp));
void fix_area_exits args((AREA_DATA * tarea));
void load_area_file args((AREA_DATA * tarea, char *filename));
void randomize_exits args((ROOM_INDEX_DATA * room, sh_int maxdir));
void make_wizlist args((void));
void tail_chain args((void));
bool delete_room args((ROOM_INDEX_DATA * room));
bool delete_obj args((OBJ_INDEX_DATA * obj));
bool delete_mob args((MOB_INDEX_DATA * mob));

/* Functions to add to sorting lists. -- Altrag */
/*void	mob_sort	args( ( MOB_INDEX_DATA *pMob ) );
void	obj_sort	args( ( OBJ_INDEX_DATA *pObj ) );
void	room_sort	args( ( ROOM_INDEX_DATA *pRoom ) );*/
void sort_area args((AREA_DATA * pArea, bool proto));
void sort_area_by_name args((AREA_DATA * pArea)); /* Fireblade */
void write_projects args((void));

/* editor.c */
void discard_editdata(EDITOR_DATA * edd);

/* build.c */
/*
void	start_editing	args( ( CHAR_DATA *ch, char *data ) );
void	stop_editing	args( ( CHAR_DATA *ch ) );
void	edit_buffer	args( ( CHAR_DATA *ch, char *argument ) );
char *	copy_buffer	args( ( CHAR_DATA *ch ) );  */
bool can_rmodify args((CHAR_DATA * ch, ROOM_INDEX_DATA * room));
bool can_omodify args((CHAR_DATA * ch, OBJ_DATA * obj));
bool can_mmodify args((CHAR_DATA * ch, CHAR_DATA * mob));
bool can_medit args((CHAR_DATA * ch, MOB_INDEX_DATA * mob));
void free_reset args((AREA_DATA * are, RESET_DATA * res));
void free_area args((AREA_DATA * are));
void assign_area args((CHAR_DATA * ch));
EDD *SetRExtra args((ROOM_INDEX_DATA * room, char *keywords));
bool DelRExtra args((ROOM_INDEX_DATA * room, char *keywords));
EDD *SetOExtra args((OBJ_DATA * obj, char *keywords));
bool DelOExtra args((OBJ_DATA * obj, char *keywords));
EDD *SetOExtraProto args((OBJ_INDEX_DATA * obj, char *keywords));
bool DelOExtraProto args((OBJ_INDEX_DATA * obj, char *keywords));
void fold_area args((AREA_DATA * tarea, char *filename, bool install, int message));
int get_otype args((char *type));
int get_atype args((char *type));
int get_aflag args((char *flag));
int get_oflag args((char *flag));
int get_wflag args((char *flag));
int get_talentflag args((char *flag));
void init_area_weather args((void));
void save_weatherdata args((void));
void do_addgem args((CHAR_DATA * ch, char *argument));
void do_addbox args((CHAR_DATA * ch, char *argument));

/* fight.c */
int check_powerlevel args((CHAR_DATA *ch, CHAR_DATA *victim));
int get_player_statlevel args((CHAR_DATA *ch));
int player_equipment_worth args((CHAR_DATA *ch));
int get_fightingstyle_dam args((CHAR_DATA *ch, int dam, CHAR_DATA *victim, int type, int learn));
void adjust_aggression_list args((CHAR_DATA *victim, CHAR_DATA *ch, int dam, int type, int sn));
bool legal_loot_coins args((CHAR_DATA * ch, CHAR_DATA * victim));
int player_stat_worth args((CHAR_DATA *ch));
int wielding_skill_weapon args((CHAR_DATA *ch, int missile));
int get_sore_rate args((int race, int maxhp));
int get_hit_or_miss args((CHAR_DATA *ch, CHAR_DATA *victim, int ac, int grip, int limb, int noarmor, OBJ_DATA *wield, int sn));
bool can_see_intro args((CHAR_DATA *ch, CHAR_DATA *victim));
int max_fight args((CHAR_DATA * ch));
int npcrace_agi args((int race));
int get_btimer args((CHAR_DATA *ch, int sn, CHAR_DATA *victim));
void violence_update args((void));
ch_ret one_hit args((CHAR_DATA * ch, CHAR_DATA * victim, int dt, int limb));
ch_ret projectile_hit args((CHAR_DATA * ch, CHAR_DATA * victim, OBJ_DATA * wield, OBJ_DATA * projectile, sh_int dist, int dt));
sh_int ris_damage args((CHAR_DATA * ch, sh_int dam, int ris));
ch_ret damage args((CHAR_DATA * ch, CHAR_DATA * victim, int dam, int dt, int spec, int limb));
void update_pos args((CHAR_DATA * victim));
void set_fighting args((CHAR_DATA * ch, CHAR_DATA * victim));
void stop_fighting args((CHAR_DATA * ch, bool fBoth));
void free_fight args((CHAR_DATA * ch));
CD *who_fighting args((CHAR_DATA * ch));
void check_killer args((CHAR_DATA * ch, CHAR_DATA * victim));
void check_attacker args((CHAR_DATA * ch, CHAR_DATA * victim));
void death_cry args((CHAR_DATA * ch));
void stop_hunting args((CHAR_DATA * ch));
void stop_hating args((CHAR_DATA * ch));
void stop_fearing args((CHAR_DATA * ch));
void start_hunting args((CHAR_DATA * ch, CHAR_DATA * victim));
void start_hating args((CHAR_DATA * ch, CHAR_DATA * victim));
void start_fearing args((CHAR_DATA * ch, CHAR_DATA * victim));
bool is_hunting args((CHAR_DATA * ch, CHAR_DATA * victim));
bool is_hating args((CHAR_DATA * ch, CHAR_DATA * victim));
bool is_fearing args((CHAR_DATA * ch, CHAR_DATA * victim));
bool is_safe args((CHAR_DATA * ch, CHAR_DATA * victim));
bool legal_loot args((CHAR_DATA * ch, CHAR_DATA * victim));
sh_int VAMP_AC args((CHAR_DATA * ch));
bool check_illegal_pk args((CHAR_DATA * ch, CHAR_DATA * victim));
void raw_kill args((CHAR_DATA * ch, CHAR_DATA * victim));
bool in_arena args((CHAR_DATA * ch));
bool can_astral args((CHAR_DATA * ch, CHAR_DATA * victim));

/* treasure.c */
OBJ_DATA *generate_tbox args((CHAR_DATA *ch));
OBJ_DATA *generate_treasure args((CHAR_DATA * mob));

/* makeobjs.c */
void update_container args((OBJ_DATA * corpse, int x, int y, int map, int fx, int fy, int fmap));
void make_corpse args((CHAR_DATA * ch, CHAR_DATA * killer));
void make_blood args((CHAR_DATA * ch));
void make_bloodstain args((CHAR_DATA * ch));
void make_scraps args((OBJ_DATA * obj, CHAR_DATA *ch));
void make_fire args((ROOM_INDEX_DATA * in_room, sh_int timer));
OD *make_trap args((int v0, int v1, int v2, int v3));
OD *create_money args((int amount));

/* misc.c */
void set_bit_wilderness args((CHAR_DATA *ch, int bits));
void remove_bit_wilderness args((CHAR_DATA *ch, int bits));
bool is_set_wilderness args((CHAR_DATA *ch, int bits, int x, int y, int map));
void actiondesc args((CHAR_DATA * ch, OBJ_DATA * obj, void *vo));
EXT_BV meb args((int bit));
EXT_BV multimeb args((int bit, ...));

/* newarena.c */
void load_hall_of_fame args((void));

/* deity.c */
void adjust_favor args((CHAR_DATA * ch, int field, int mod));

/* mud_comm.c */
char *mprog_type_to_name args((int type));

/* mud_prog.c */
#ifdef DUNNO_STRSTR
char *strstr args((const char *s1, const char *s2));
#endif

void mprog_wordlist_check args((char *arg, CHAR_DATA * mob, CHAR_DATA * actor, OBJ_DATA * object, void *vo, int type));
void mprog_percent_check args((CHAR_DATA * mob, CHAR_DATA * actor, OBJ_DATA * object, void *vo, int type));
void mprog_act_trigger args((char *buf, CHAR_DATA * mob, CHAR_DATA * ch, OBJ_DATA * obj, void *vo));
void mprog_bribe_trigger args((CHAR_DATA * mob, CHAR_DATA * ch, int amount));
void mprog_entry_trigger args((CHAR_DATA * mob));
void mprog_give_trigger args((CHAR_DATA * mob, CHAR_DATA * ch, OBJ_DATA * obj));
void mprog_greet_trigger args((CHAR_DATA * mob));
void mprog_fight_trigger args((CHAR_DATA * mob, CHAR_DATA * ch));
void mprog_hitprcnt_trigger args((CHAR_DATA * mob, CHAR_DATA * ch));
void mprog_death_trigger args((CHAR_DATA * killer, CHAR_DATA * mob));
void mprog_random_trigger args((CHAR_DATA * mob));
void mprog_speech_trigger args((char *txt, CHAR_DATA * mob));
void mprog_script_trigger args((CHAR_DATA * mob));
void mprog_hour_trigger args((CHAR_DATA * mob));
void mprog_time_trigger args((CHAR_DATA * mob));
void progbug args((char *str, CHAR_DATA * mob));
void rset_supermob args((ROOM_INDEX_DATA * room));
void release_supermob args(());
void mpsleep_update args(());

/* planes.c */
PLANE_DATA *plane_lookup args((const char *name));
void load_planes args((void));
void save_planes args((void));
void check_planes args((PLANE_DATA * p));

/* player.c */
char *get_rating args((int stat, int base));
void set_title args((CHAR_DATA * ch, char *title));

/* polymorph.c */
void fwrite_morph_data args((CHAR_DATA * ch, FILE * fp));
void fread_morph_data args((CHAR_DATA * ch, FILE * fp));
void clear_char_morph args((CHAR_MORPH * morph));
CHAR_MORPH *make_char_morph args((MORPH_DATA * morph));
void free_char_morph args((CHAR_MORPH * morph));
CHAR_MORPH *make_char_morph args((MORPH_DATA * morph));
char *race_string args((int bitvector));
char *class_string args((int bitvector));
void setup_morph_vnum args((void));
void unmorph_all args((MORPH_DATA * morph));
MORPH_DATA *get_morph args((char *arg));
MORPH_DATA *get_morph_vnum args((int arg));
int do_morph_char args((CHAR_DATA * ch, MORPH_DATA * morph));
MORPH_DATA *find_morph args((CHAR_DATA * ch, char *target, bool is_cast));
void do_unmorph_char args((CHAR_DATA * ch));
void send_morph_message args((CHAR_DATA * ch, MORPH_DATA * morph, bool is_morph));
bool can_morph args((CHAR_DATA * ch, MORPH_DATA * morph, bool is_cast));
void do_morph args((CHAR_DATA * ch, MORPH_DATA * morph));
void do_unmorph args((CHAR_DATA * ch));
void save_morphs args((void));
void fwrite_morph args((FILE * fp, MORPH_DATA * morph));
void load_morphs args((void));
MORPH_DATA *fread_morph args((FILE * fp));
void free_morph args((MORPH_DATA * morph));
void morph_defaults args((MORPH_DATA * morph));
void sort_morphs args((void));


/* skills.c */
int check_twohand_shield args((CHAR_DATA *ch));
int get_skillflux_value args((CHAR_DATA *ch, int ssn));
bool can_use_skill args((CHAR_DATA * ch, int percent, int gsn));
bool check_skill args((CHAR_DATA * ch, char *command, char *argument));
void learn_from_success args((CHAR_DATA * ch, int sn, CHAR_DATA *target));
void learn_from_failure args((CHAR_DATA * ch, int sn, CHAR_DATA *target));
int check_parry args((CHAR_DATA * ch, CHAR_DATA * victim));
bool check_dodge args((CHAR_DATA * ch, CHAR_DATA * victim, int limb));
bool check_grip args((CHAR_DATA * ch, CHAR_DATA * victim));
void disarm args((CHAR_DATA * ch, CHAR_DATA * victim));
void trip args((CHAR_DATA * ch, CHAR_DATA * victim));
bool mob_fire args((CHAR_DATA * ch, char *name, int vdir));
CD *scan_for_victim args((CHAR_DATA * ch, EXIT_DATA * pexit, char *name));

/* overland.c */
void steer_ship args((CHAR_DATA *ch, SHIP_DATA *ship, int dir));
void set_ship_sector args((SHIP_DATA *ship, int reset, int save));
void adjust_wildermob args((CHAR_DATA *mob, int lvl, int wilderness));
int get_wilder_weapon args((int lvl, int dual));
int get_slab_vnum args((int lvl, int num));
void update_objects args((CHAR_DATA * ch, sh_int map, sh_int x, sh_int y));
void update_players_map args((CHAR_DATA * ch, int x, int y, int map, int who, ROOM_INDEX_DATA * room));
void add_entrance args((int tomap, int onmap, int hereX, int hereY, int thereX, int thereY, int vnum));
void save_map args((char *name, int map));
int find_mob_level args((int x, int y, int map));
void save_resources args((char *name, int map));
char *get_map_name args((int map));
int get_wilderness_hunt_cost args((CHAR_DATA *ch, int x, int y));

/* ban.c */
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((DESCRIPTOR_DATA *d, CHAR_DATA * ch, int type, int nban));

/* imm_host.c */
bool check_immortal_domain args((CHAR_DATA * ch, char *host));
int load_imm_host args((void));
int fread_imm_host args((FILE * fp, IMMORTAL_HOST * data));
void do_write_imm_host args((void));
void do_add_imm_host args((CHAR_DATA * ch, char *argument));

/* track */
void hunt_victim_map args((CHAR_DATA * ch));
int get_x args((int currx, int dir));
int get_y args((int curry, int dir));

/* name_gen.c */
void generate_randomname args((int race, int sex, char *buffer));

/* handler.c */
char *showgemaff args((CHAR_DATA * ch, OBJ_DATA *obj, int passbuf, IMBUE_DATA *imbue));
ch_ret pre_spring_trap args((CHAR_DATA * ch, OBJ_DATA * obj, TRAP_DATA *trap, OBJ_DATA *trapobj));
void check_aff_learn args((CHAR_DATA *ch, char *skillname, int sn, CHAR_DATA *victim, int success));
char *get_group_name2 args((int group));
int is_part_sphere args((int sphere, int group));
sh_int issphere args((char *argument));
OBJ_DATA *bank_to_char args((OBJ_DATA * obj, CHAR_DATA *ch));
OBJ_DATA *obj_to_bank args((OBJ_DATA * obj, CHAR_DATA *ch));
OBJ_DATA *obj_to_townbank args((OBJ_DATA * obj, TOWN_DATA *town));
OBJ_DATA *townbank_to_char args((OBJ_DATA * obj, TOWN_DATA *town, CHAR_DATA *ch));
int get_obj_on_char args((CHAR_DATA *ch, OBJ_DATA * pobj));
int get_ch_carry_number args((CHAR_DATA *ch));
float get_ch_carry_weight args((CHAR_DATA *ch));
bool room_is_private_wilderness args((CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex, int x, int y, int map));
bool check_npc args((CHAR_DATA *ch));
sh_int get_learned_value args((CHAR_DATA *ch, int sn));
sh_int get_mastered_value args((CHAR_DATA *ch, int sn));     
void find_next_target args((CHAR_DATA * ch));
char *get_wplevel args((int power));
char *get_tier_name args((int mastery));
void update_pkpower args((CHAR_DATA * ch));
void add_pkill args((CHAR_DATA * ch, CHAR_DATA * victim));
void update_pranking args((CHAR_DATA * ch, CHAR_DATA * victim));
int check_room_pk args((CHAR_DATA * ch));
bool is_room_safe args((CHAR_DATA * ch));
char *get_caste_name args((int caste, int sex));
char *get_caste_color args((int caste));
void update_movement_points args((CHAR_DATA *ch, int move));
int calculate_movement_cost args((int move, CHAR_DATA *ch));
int movement_lag args((CHAR_DATA *ch, int beats));
int get_dam_roll args((CHAR_DATA * ch));
int get_hit_roll args((CHAR_DATA * ch));
bool in_hellmaze args((CHAR_DATA * ch));
void find_next_hunt args((CHAR_DATA * ch, int type));
bool find_sector args((CHAR_DATA * ch, int sector));
char *get_sphere_name args((int sphere));
char *get_sphere_name2 args((int sphere));
int get_mastery_num args((char *mastery));
char *get_mastery_name args((int mastery));
sh_int get_mastery_value args((CHAR_DATA * ch, int sn, int isobj, int lv));
sh_int get_point_value args((CHAR_DATA * ch, int sn, int isobj, int lv));
sh_int group_high args((CHAR_DATA * ch, char *group));
sh_int isgroup args((char *argument));
bool in_same_room args((CHAR_DATA * ch, CHAR_DATA * victim));
void give_chase args((CHAR_DATA * ch, int oldmap));
char *get_group_name args((int group));
bool enough_resources args((CHAR_DATA * ch, int hometown, int needed, int ctype));
int strlen_color args((char *argument));
sh_int get_trust args((CHAR_DATA * ch));
sh_int get_ftrust args((CHAR_DATA * ch));
sh_int get_age args((CHAR_DATA * ch));
sh_int get_curr_str args((CHAR_DATA * ch));
sh_int get_curr_int args((CHAR_DATA * ch));
sh_int get_curr_wis args((CHAR_DATA * ch));
sh_int get_curr_dex args((CHAR_DATA * ch));
sh_int get_curr_con args((CHAR_DATA * ch));
sh_int get_curr_cha args((CHAR_DATA * ch));
sh_int get_curr_lck args((CHAR_DATA * ch));
sh_int get_curr_agi args((CHAR_DATA * ch));
int count_users args((OBJ_DATA * obj));
int max_weight args((OBJ_DATA * obj));
bool can_take_proto 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));
bool is_name_prefix args((const char *str, char *namelist));
bool nifty_is_name args((char *str, char *namelist));
bool nifty_is_name_prefix args((char *str, char *namelist));
void affect_modify args((CHAR_DATA * ch, AFFECT_DATA * paf, sh_int fAdd));
void affect_to_char args((CHAR_DATA * ch, AFFECT_DATA * paf));
void affect_remove args((CHAR_DATA * ch, AFFECT_DATA * paf));
void affect_strip args((CHAR_DATA * ch, int sn));
bool is_affected args((CHAR_DATA * ch, int sn));
void affect_join args((CHAR_DATA * ch, AFFECT_DATA * paf));
void char_from_room args((CHAR_DATA * ch));
void char_to_room args((CHAR_DATA * ch, ROOM_INDEX_DATA * pRoomIndex));
OD *obj_to_char args((OBJ_DATA * obj, CHAR_DATA * ch));
void obj_from_char args((OBJ_DATA * obj));
int apply_ac args((OBJ_DATA * obj, int iWear));
OD *get_eq_char args((CHAR_DATA * ch, int iWear));
void equip_char args((CHAR_DATA * ch, OBJ_DATA * obj, int iWear));
void unequip_char args((CHAR_DATA * ch, OBJ_DATA * obj));
int count_obj_list args((OBJ_INDEX_DATA * obj, OBJ_DATA * list));
int count_mob_in_room args((MOB_INDEX_DATA * mob, ROOM_INDEX_DATA * list));
void obj_from_room args((OBJ_DATA * obj));
OD *obj_to_room args((OBJ_DATA * obj, ROOM_INDEX_DATA * pRoomIndex, CHAR_DATA * ch));
OD *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_exit args((ROOM_INDEX_DATA * room, EXIT_DATA * pexit));
void extract_room args((ROOM_INDEX_DATA * room));
void clean_room args((ROOM_INDEX_DATA * room));
void clean_obj args((OBJ_INDEX_DATA * obj));
void clean_mob args((MOB_INDEX_DATA * mob));
void clean_resets args((AREA_DATA * tarea));
void extract_char args((CHAR_DATA * ch, bool fPull));
CD *get_char_room args((CHAR_DATA * ch, char *argument));
CD *get_char_room_new args((CHAR_DATA * ch, char *argument, int type));
CD *get_char_wilder args((CHAR_DATA * ch, char *argument));
CD *get_char_world args((CHAR_DATA * ch, char *argument));
OD *get_obj_type args((OBJ_INDEX_DATA * pObjIndexData));
OD *get_obj_list args((CHAR_DATA * ch, char *argument, OBJ_DATA * list));
OD *get_obj_list_rev args((CHAR_DATA * ch, char *argument, OBJ_DATA * list));
OD *get_obj_carry args((CHAR_DATA * ch, char *argument));
OD *get_obj_wear args((CHAR_DATA * ch, char *argument));
OD *get_obj_vnum args((CHAR_DATA * ch, int vnum));
OD *get_obj_here args((CHAR_DATA * ch, char *argument));
OD *get_obj_world args((CHAR_DATA * ch, char *argument));
OD *get_obj_mobworld args((CHAR_DATA * ch, char *argument));
int get_obj_number args((OBJ_DATA * obj));
float get_obj_weight args((OBJ_DATA * obj));
int get_real_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_see_map args((CHAR_DATA * ch, CHAR_DATA * victim));
bool can_see_index args((MOB_INDEX_DATA *ch, CHAR_DATA *victim));
bool can_see_obj_map args((CHAR_DATA * ch, OBJ_DATA * obj));
bool can_drop_obj args((CHAR_DATA * ch, OBJ_DATA * obj));
char *item_type_name args((OBJ_DATA * obj));
char *affect_loc_name args((int location));
char *affect_bit_name args((EXT_BV * vector));
char *extra_bit_name args((EXT_BV * extra_flags));
char *magic_bit_name args((int magic_flags));
char *pull_type_name args((int pulltype));
ch_ret check_for_trap args((CHAR_DATA * ch, OBJ_DATA * obj, int flag, int newflag));
ch_ret check_room_for_traps args((CHAR_DATA * ch, int flag));
bool is_trapped args((OBJ_DATA * obj));
OD *get_trap args((OBJ_DATA * obj));
ch_ret spring_trap args((CHAR_DATA * ch, OBJ_DATA * obj, TRAP_DATA *trap));
void name_stamp_stats args((CHAR_DATA * ch));
void fix_char args((CHAR_DATA * ch));
char* showaffect args((CHAR_DATA * ch, AFFECT_DATA * paf, int passbuf));
void set_cur_obj args((OBJ_DATA * obj));
bool obj_extracted args((OBJ_DATA * obj));
void queue_extracted_obj args((OBJ_DATA * obj));
void clean_obj_queue args((void));
void set_cur_char args((CHAR_DATA * ch));
bool char_died args((CHAR_DATA * ch));
void queue_extracted_char args((CHAR_DATA * ch, bool extract));
void clean_char_queue args((void));
void add_timer args((CHAR_DATA * ch, sh_int type, sh_int count, DO_FUN * fun, int value));
TIMER *get_timerptr args((CHAR_DATA * ch, sh_int type));
sh_int get_timer args((CHAR_DATA * ch, sh_int type));
void extract_timer args((CHAR_DATA * ch, TIMER * timer));
void remove_timer args((CHAR_DATA * ch, sh_int type));
bool in_soft_range args((CHAR_DATA * ch, AREA_DATA * tarea));
bool in_hard_range args((CHAR_DATA * ch, AREA_DATA * tarea));
bool chance args((CHAR_DATA * ch, sh_int percent));
bool chance_attrib args((CHAR_DATA * ch, sh_int percent, sh_int attrib));
OD *clone_object args((OBJ_DATA * obj));
OD *split_obj args((OBJ_DATA * obj, int num));
OD *separate_obj args((OBJ_DATA * obj));
bool empty_obj args((OBJ_DATA * obj, OBJ_DATA * destobj, ROOM_INDEX_DATA * destroom));
OD *find_obj args((CHAR_DATA * ch, char *argument, bool carryonly));
bool ms_find_obj args((CHAR_DATA * ch));
void worsen_mental_state args((CHAR_DATA * ch, int mod));
void better_mental_state args((CHAR_DATA * ch, int mod));
void boost_economy args((AREA_DATA * tarea, int gold));
void lower_economy args((AREA_DATA * tarea, int gold));
void economize_mobgold args((CHAR_DATA * mob));
bool economy_has args((AREA_DATA * tarea, int gold));
void add_kill args((CHAR_DATA * ch, CHAR_DATA * mob));
int times_killed args((CHAR_DATA * ch, CHAR_DATA * mob));
void update_aris args((CHAR_DATA * ch));
AREA_DATA *get_area args((char *name)); /* FB */
OD *get_objtype args((CHAR_DATA * ch, sh_int type));

/* interp.c */
bool check_pos args((CHAR_DATA * ch, sh_int position));
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));
char *one_argument2 args((char *argument, char *arg_first));
ST *find_social args((char *command));
CMDTYPE *find_command args((char *command));
void hash_commands args(());
void displayFightTimer args((CHAR_DATA *ch));
void start_timer args((struct timeval * stime));
time_t end_timer args((struct timeval * stime));
void send_timer args((struct timerset * vtime, CHAR_DATA * ch));
void update_userec args((struct timeval * time_used, struct timerset * userec));

/* magic.c */
bool is_immune args((CHAR_DATA * ch, sh_int damtype, int othertypes));
void gain_mana_per args((CHAR_DATA *ch, CHAR_DATA *victim, int mana));
int code_identify args((CHAR_DATA *ch, OBJ_DATA *obj, CHAR_DATA *victim, int sn, char *dbuf));
bool process_spell_components args((CHAR_DATA * ch, int sn));
int ch_slookup args((CHAR_DATA * ch, const char *name));
int find_spell args((CHAR_DATA * ch, const char *name, bool know));
int find_skill args((CHAR_DATA * ch, const char *name, bool know));
int find_weapon args((CHAR_DATA * ch, const char *name, bool know));
int find_tongue args((CHAR_DATA * ch, const char *name, bool know));
int skill_lookup args((const char *name));
bool can_use_portal args((CHAR_DATA * ch, int type));
int herb_lookup args((const char *name));
int personal_lookup args((CHAR_DATA * ch, const char *name));
int slot_lookup args((int slot));
int bsearch_skill args((const char *name, int first, int top));
int bsearch_skill_exact args((const char *name, int first, int top));
int bsearch_skill_prefix args((const char *name, int first, int top));
bool saves_poison_death args((int level, CHAR_DATA * victim));
bool saves_wand args((int level, CHAR_DATA * victim));
bool saves_para_petri args((int level, CHAR_DATA * victim));
bool saves_breath args((int level, CHAR_DATA * victim));
bool saves_spell_staff args((int level, CHAR_DATA * victim));
ch_ret obj_cast_spell args((int sn, int level, CHAR_DATA * ch, CHAR_DATA * victim, OBJ_DATA * obj));
int dice_parse args((CHAR_DATA * ch, int level, char *exp, int sn));
SK *get_skilltype args((int sn));

/* request.c */
void init_request_pipe args((void));
void check_requests args((void));

/* save.c */
/* object saving defines for fread/write_obj. -- Altrag */
#define OS_CARRY	0
#define OS_CORPSE	1
#define OS_KINGDOM  2
#define OS_BANK     3
#define OS_GROUND   4
#define OS_MARKET   5
void save_account args((DESCRIPTOR_DATA *d, int editing));
bool load_account args((DESCRIPTOR_DATA * d, char *name, bool preload));
char *fread_lastname_line args((FILE *fp));
void remove_from_lastname_file args((char *lastname, char *firstname));
void write_lastname_file args((char *lastname, char *firstname));
void save_char_obj args((CHAR_DATA * ch));
bool load_char_obj args((DESCRIPTOR_DATA * d, char *name, bool preload));
void set_alarm args((long seconds));
void requip_char args((CHAR_DATA * ch));
void fwrite_obj args((CHAR_DATA * ch, OBJ_DATA * obj, FILE * fp, int iNest, sh_int os_type));
void fread_obj args((CHAR_DATA * ch, FILE * fp, sh_int os_type));
void de_equip_char args((CHAR_DATA * ch));
void re_equip_char args((CHAR_DATA * ch));
void read_char_mobile args((char *argument));
void write_char_mobile args((CHAR_DATA * ch, char *argument));
CHAR_DATA *fread_mobile args((FILE * fp));
void fwrite_mobile args((FILE * fp, CHAR_DATA * mob));

/* shops.c */

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

/* tables.c */
void save_market_data args((void));
void load_market_data args((void));
void fwrite_ship_data args((void));
void load_ship_data args((void));
void load_npcrace_file args((void));
void save_npcrace_file args((void));
TRAP_DATA *load_trap_file args((FILE *sfp));
void save_trap_file args((TRAP_DATA *strap, FILE *sfp));
void save_portal_file args((void));
void read_channelhistory_file args((void));
void write_channelhistory_file args((void));
void fread_training_list args((void));
void fwrite_training_list args((void));
int get_control_size args((int size));
void fread_battle_descriptions args((void));
void fwrite_battle_descriptions args((void));
void save_conquer_file args((void));
void load_conquer_file args((void));
char *parse_save_file args((char *name));
void load_buykingdom_data args((void));
void load_default_depo args((void));
void load_trade_file args((void));
void save_trade_file args((void));
void write_depo_list args((void));
void load_kingdom_depo args((void));
void save_buykingdom_data args((void));
void load_portal_file args((void));
void write_portal_file args((void));
void save_extraction_data args((void));
void load_extraction_data args((void));
void load_mlist_data args((void));
void save_mlist_data args((void));
void load_wblock_data args((void));
void save_wblock_data args((void));
void load_trainer_data args((void));
void save_trainer_data args((void));
void load_kchest_file args((void));
void read_last_file args((CHAR_DATA *ch, int count, char *name));
void write_last_file args((char *entry));
void save_kingdom_chests args((CHAR_DATA * ch));
int get_skill args((char *skilltype));
char *spell_name args((SPELL_FUN * spell));
char *skill_name args((DO_FUN * skill));
void save_bin_data args((void));
void load_bin_data args((void));
void load_skill_table args((void));
void save_skill_table args((void));
void sort_skill_table args((void));
void remap_slot_numbers args((void));
void load_socials args((void));
void save_socials args((void));
void load_commands args((void));
void load_barena_data args((void));
void save_barena_data args((void));
void load_gem_data args((void));
void save_gem_data args((void));
void load_box_data args((void));
void save_box_data args((void));
void save_commands args((void));
SPELL_FUN *spell_function args((char *name));
DO_FUN *skill_function args((char *name));
void load_kingdoms args((void));
bool load_class_file args((char *fname));
void write_class_file args((int cl));
void write_kingdom_list args((void));
void write_kingdom_file args((int cl));
void fwrite_authlist args((void));
void load_authlist args((void));
void save_classes args((void));
void load_classes args((void));
void load_herb_table args((void));
void save_herb_table args((void));
void load_races args((void));
void load_tongues args((void));

/* track.c */
void found_prey args((CHAR_DATA * ch, CHAR_DATA * victim));
void hunt_victim args((CHAR_DATA * ch));

/* treasure.c */
OBJ_DATA *generate_treasure args(());
bool tchance args((int num));

/* update.c */
void auth_update args((void));
int cvttime args((int time));
void copyover_check args((void));
int totalrooms args((int size));
int max_allowedunits args((int size));
void weather_update args((void));
void update_interest args((CHAR_DATA * ch));
void gain_condition args((CHAR_DATA * ch, int iCond, int value));
void update_handler args((void));
void reboot_check args((time_t reset));

#if 0
void reboot_check args((char *arg));
#endif
void auction_update args((void));
void remove_portal args((OBJ_DATA * portal));
void weather_update args((void));

/* hashstr.c */
#ifdef MTRACE
#define str_alloc( str ) (_str_alloc( (str), __FILE__, __FUNCTION__, __LINE__ ) )
char *_str_alloc args( ( const char *str, char *file_n, char *funct_n, int line_n ) );
#else
char *str_alloc args((char *str));
#endif
char *quick_link args((char *str));
int str_free args((char *str));
void show_hash args((int count));
char *hash_stats args((void));
char *check_hash args((char *str));
void hash_dump args((int hash));
void show_high_hash args((int top));

/* newscore.c */
char *get_class args((CHAR_DATA * ch));
char *get_race args((CHAR_DATA * ch));

#undef	SK
#undef	CO
#undef	ST
#undef	CD
#undef	MID
#undef	OD
#undef	OID
#undef	RID
#undef	SF
#undef	BD
#undef	CL
#undef	EDD
#undef	RD
#undef	ED

/*
 *
 *  New Build Interface Stuff Follows
 *
 */


/*
 *  Data for a menu page
 */
struct menu_data
{
   char *sectionNum;
   char *charChoice;
   int x;
   int y;
   char *outFormat;
   void *data;
   int ptrType;
   int cmdArgs;
   char *cmdString;
};

#define SH_INT 1
#define INT 2
#define CHAR 3
#define STRING 4
#define SPECIAL 5

/*
#define NO_PAGE    0
#define MOB_PAGE_A 1
#define MOB_PAGE_B 2
#define MOB_PAGE_C 3
#define MOB_PAGE_D 4
#define MOB_PAGE_E 5
#define MOB_PAGE_F 17
#define MOB_HELP_PAGE 14
#define ROOM_PAGE_A 6
#define ROOM_PAGE_B 7
#define ROOM_PAGE_C 8
#define ROOM_HELP_PAGE 15
#define OBJ_PAGE_A 9
#define OBJ_PAGE_B 10
#define OBJ_PAGE_C 11
#define OBJ_PAGE_D 12
#define OBJ_PAGE_E 13
#define OBJ_HELP_PAGE 16
#define CONTROL_PAGE_A 18
#define CONTROL_HELP_PAGE 19 */

#define NO_TYPE   0
#define MOB_TYPE  1
#define OBJ_TYPE  2
#define ROOM_TYPE 3
#define CONTROL_TYPE 4

#define SUB_NORTH DIR_NORTH
#define SUB_EAST  DIR_EAST
#define SUB_SOUTH DIR_SOUTH
#define SUB_WEST  DIR_WEST
#define SUB_UP    DIR_UP
#define SUB_DOWN  DIR_DOWN
#define SUB_NE    DIR_NORTHEAST
#define SUB_NW    DIR_NORTHWEST
#define SUB_SE    DIR_SOUTHEAST
#define SUB_SW    DIR_SOUTHWEST

/*
 * defines for use with this get_affect function
 */

#define RIS_000		BV00
#define RIS_R00		BV01
#define RIS_0I0		BV02
#define RIS_RI0		BV03
#define RIS_00S		BV04
#define RIS_R0S		BV05
#define RIS_0IS		BV06
#define RIS_RIS		BV07

#define GA_AFFECTED	BV09
#define GA_RESISTANT	BV10
#define GA_IMMUNE	BV11
#define GA_SUSCEPTIBLE	BV12
#define GA_RIS          BV30



/*
 *   Map Structures
 */

DECLARE_DO_FUN(do_mapout);
DECLARE_DO_FUN(do_lookmap);

struct map_data /* contains per-room data */
{
   int vnum; /* which map this room belongs to */
   int x; /* horizontal coordinate */
   int y; /* vertical coordinate */
   char entry; /* code that shows up on map */
};


struct map_index_data
{
   MAP_INDEX_DATA *next;
   int vnum; /* vnum of the map */
   int map_of_vnums[49][81]; /* room vnums aranged as a map */
};


MAP_INDEX_DATA *get_map_index(int vnum);
void init_maps();


/*
 * mudprograms stuff
 */
extern CHAR_DATA *supermob;

void oprog_speech_trigger(char *txt, CHAR_DATA * ch);
void oprog_random_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_wear_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
bool oprog_use_trigger(CHAR_DATA * ch, OBJ_DATA * obj, CHAR_DATA * vict, OBJ_DATA * targ, void *vo);
void oprog_remove_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_sac_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_damage_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_repair_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_drop_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_zap_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
char *oprog_type_to_name(int type);

/*
 * MUD_PROGS START HERE
 * (object stuff)
 */
void oprog_greet_trigger(CHAR_DATA * ch);
void oprog_speech_trigger(char *txt, CHAR_DATA * ch);
void oprog_random_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_random_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_remove_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_sac_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_get_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_damage_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_repair_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_drop_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_examine_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_zap_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_pull_trigger(CHAR_DATA * ch, OBJ_DATA * obj);
void oprog_push_trigger(CHAR_DATA * ch, OBJ_DATA * obj);


/* mud prog defines */

#define ERROR_PROG        -1
#define IN_FILE_PROG      -2

typedef enum
{
   ACT_PROG, SPEECH_PROG, RAND_PROG, FIGHT_PROG, DEATH_PROG, HITPRCNT_PROG,
   ENTRY_PROG, GREET_PROG, ALL_GREET_PROG, GIVE_PROG, BRIBE_PROG, HOUR_PROG,
   TIME_PROG, WEAR_PROG, REMOVE_PROG, SAC_PROG, LOOK_PROG, EXA_PROG, ZAP_PROG,
   GET_PROG, DROP_PROG, DAMAGE_PROG, REPAIR_PROG, RANDIW_PROG, SPEECHIW_PROG,
   PULL_PROG, PUSH_PROG, SLEEP_PROG, REST_PROG, LEAVE_PROG, SCRIPT_PROG,
   USE_PROG
}
prog_types;

/*
 * For backwards compatability
 */
#define RDEATH_PROG DEATH_PROG
#define ENTER_PROG  ENTRY_PROG
#define RFIGHT_PROG FIGHT_PROG
#define RGREET_PROG GREET_PROG
#define OGREET_PROG GREET_PROG

void rprog_leave_trigger(CHAR_DATA * ch);
void rprog_enter_trigger(CHAR_DATA * ch);
void rprog_sleep_trigger(CHAR_DATA * ch);
void rprog_rest_trigger(CHAR_DATA * ch);
void rprog_rfight_trigger(CHAR_DATA * ch);
void rprog_death_trigger(CHAR_DATA * killer, CHAR_DATA * ch);
void rprog_speech_trigger(char *txt, CHAR_DATA * ch);
void rprog_random_trigger(CHAR_DATA * ch);
void rprog_time_trigger(CHAR_DATA * ch);
void rprog_hour_trigger(CHAR_DATA * ch);
char *rprog_type_to_name(int type);

#define OPROG_ACT_TRIGGER
#ifdef OPROG_ACT_TRIGGER
void oprog_act_trigger(char *buf, OBJ_DATA * mobj, CHAR_DATA * ch, OBJ_DATA * obj, void *vo);
#endif
#define RPROG_ACT_TRIGGER
#ifdef RPROG_ACT_TRIGGER
void rprog_act_trigger(char *buf, ROOM_INDEX_DATA * room, CHAR_DATA * ch, OBJ_DATA * obj, void *vo);
#endif


/* Structure and macros for using long bit vectors */
#define CHAR_SIZE sizeof(char)

typedef char *LONG_VECTOR;

#define LV_CREATE(vector, bit_length)					\
do									\
{									\
	int i;								\
	CREATE(vector, char, 1 + bit_length/CHAR_SIZE);			\
									\
	for(i = 0; i <= bit_length/CHAR_SIZE; i++)			\
		*(vector + i) = 0;					\
}while(0)

#define LV_IS_SET(vector, index)					\
	(*(vector + index/CHAR_SIZE) & (1 << index%CHAR_SIZE))

#define LV_SET_BIT(vector, index)					\
	(*(vector + index/CHAR_SIZE) |= (1 << index%CHAR_SIZE))

#define LV_REMOVE_BIT(vector, index)					\
	(*(vector + index/CHAR_SIZE) &= ~(1 << index%CHAR_SIZE))

#define LV_TOGGLE_BIT(vector, index)					\
	(*(vector + index/CHAR_SIZE) ^= (1 << index%CHAR_SIZE))

/* mxp stuff - added by Nick Gammon - 18 June 2001 */

/*
To simply using MXP we'll use special tags where we want to use MXP tags
and then change them to <, > and & at the last moment.

  eg. MXP_BEG "send" MXP_END    becomes: <send>
      MXP_AMP "version;"        becomes: &version;

*/

/* strings */
#define MXP_BEG "\x03"    /* becomes < */
#define MXP_END "\x04"    /* becomes > */
#define MXP_AMP "\x05"    /* becomes & */
 
/* characters */
#define MXP_BEGc '\x03'    /* becomes < */
#define MXP_ENDc '\x04'    /* becomes > */
#define MXP_AMPc '\x05'    /* becomes & */

// constructs an MXP tag with < and > around it
#define MXPTAG(arg) MXP_BEG arg MXP_END

// All this MXPTAG crap seemed redundant, it now is all in one macro
#define MXPFTAG(arg, string, endarg)  MXP_BEG arg MXP_END string MXP_BEG endarg MXP_END

#define ESC "\x1B"  /* esc character */

#define MXPMODE(arg) ESC "[" #arg "z"

/* flags for show_list_to_char */

enum {
  eItemNothing,   /* item is not readily accessible */
  eItemGet,     /* item on ground */
  eItemDrop,    /* item in inventory */
  eItemBid     /* auction item */
  };

#define MXP_open 0   /* only MXP commands in the "open" category are allowed.  */
#define MXP_secure 1 /* all tags and commands in MXP are allowed within the line.  */
#define MXP_locked 2 /* no MXP or HTML commands are allowed in the line.  The line is not parsed for any tags at all.   */
#define MXP_reset 3  /* close all open tags */
#define MXP_secure_once 4  /* next tag is secure only */
#define MXP_perm_open 5   /* open mode until mode change  */
#define MXP_perm_secure 6 /* secure mode until mode change */
#define MXP_perm_locked 7 /* locked mode until mode change */

#ifdef WIN32
void gettimeofday(struct timeval *tv, struct timezone *tz);
void kill_timer();

/* directory scanning stuff */

typedef struct dirent
{
   char *d_name;
};

typedef struct
{
   HANDLE hDirectory;
   WIN32_FIND_DATA Win32FindData;
   struct dirent dirinfo;
   char sDirName[MAX_PATH];
} DIR;


DIR *opendir(char *sDirName);
struct dirent *readdir(DIR * dp);
void closedir(DIR * dp);

/* --------------- Stuff for Win32 services ------------------ */
/*

   NJG:

   When "exit" is called to handle an error condition, we really want to
   terminate the game thread, not the whole process.

 */

#define exit(arg) Win32_Exit(arg)
void Win32_Exit(int exit_code);

#endif



#define send_to_char send_to_char_color
#define send_to_pager send_to_pager_color

/* Hometown Code by Ivan, Adjusted by Xerves -- 4/23/99 */
struct hometown_type
{

   char *name;

   int recall;

   int death;

};



extern const struct hometown_type hometown_table[];

int get_hometown args((char *argument));

/* For Arena -- Xerves 6/4/99 Thanks LrdElder */
#define GET_BETTED_ON(ch)    ((ch)->pcdata->betted_on)
#define GET_BET_AMT(ch) ((ch)->pcdata->bet_amt)
#define IN_ARENA(ch)            (in_arena(ch))