/
mudd/docs/html/
mudd/world/
#ifndef WINDOWS
#define false    0
#define true     1
typedef int socket_t;
#else
#include "winsock.h"
#include "windows.h"
typedef SOCKET socket_t;
#define NOCRYPT
#endif
#define FALSE    0 
#define TRUE     1  
#define yes      1
#define no       0 
#define YES      1  
#define NO       0
typedef unsigned char bool;
extern socket_t control;
typedef struct scriptassoc SA;
typedef struct social_type SOCIAL;
typedef struct item_info ITEM_INFO;
typedef struct fight_data FGT;
typedef struct dammsg_data DAM_MSG;
typedef struct power_data POWER;
typedef struct shell_command SHELL;
typedef struct channel_type CHANNEL;
typedef struct society_data SOCIETY_DATA;
typedef struct caste_data CASTE_DATA;
typedef struct auct_data AUCTION;
typedef struct cmd_type COMMAND;
typedef struct to_free TO_FREE;
typedef struct item_book I_BOOK;
typedef struct item_armor I_ARMOR;
typedef struct item_weapon I_WEAPON;
typedef struct item_missile I_MISSILE;
typedef struct item_drink_container I_DRINK;
typedef struct item_light I_LIGHT;
typedef struct item_tool I_TOOL;
typedef struct item_raw I_RAW;
typedef struct item_trap I_TRAP;
typedef struct item_shield I_SHIELD;
typedef struct item_vehicle I_VEHICLE;
typedef struct item_fountain I_FOUNTAIN;
typedef struct item_potion I_POTION;
typedef struct item_food I_FOOD;
typedef struct item_gem I_GEM;
typedef struct item_wand I_WAND;
typedef struct item_furniture I_FURNITURE;
typedef struct item_container I_CONTAINER;
typedef struct item_climbable I_CLIMBABLE;
typedef struct item_siege I_SIEGE;
typedef struct item_ammo I_AMMO;
typedef struct affect_data AFFECT_DATA;
typedef struct area_data AREA_DATA;
typedef struct ban_data BAN_DATA;
typedef struct voting_data VOTING_DATA;
typedef struct spell_data SPELL_DATA;
typedef struct gld_data GUILD_DATA; /* Guild data struct */
typedef struct dam_moves PERCENT_STRUCT;
typedef struct damages_struct DAM_STRUCT;
typedef struct mna_data MANA_DATA;
typedef struct track_data TRACK_DATA;
typedef struct char_data CHAR_DATA;
typedef struct online ONLINE; /* JRAJRA - keep track of who has been online */
typedef struct potion_ingredients POTION_INFO;
typedef struct rank_data RANK_DATA;
typedef struct bid_data BID_DATA;
typedef struct descriptor_data DESCRIPTOR_DATA;
typedef struct exit_data EXIT_DATA;
typedef struct door_data DOOR_DATA;
typedef struct extra_descr_data DESCRIPTION_DATA;
typedef struct playerbase_data PLAYERBASE_DATA;
typedef struct variable_data VARIABLE_DATA;
typedef struct item_check ITEM_CHECK;
typedef struct help_data HELP_DATA;
typedef struct mob_proto_data MOB_PROTOTYPE;
typedef struct script_dat SCRIPT_DAT;
typedef struct note_data NOTE_DATA;
typedef struct obj_data SINGLE_OBJECT;
typedef struct obj_proto_data OBJ_PROTOTYPE;
typedef struct temp_str TEMP_STR;
typedef struct pc_data REALCHAR_DATA;
typedef struct npc_data MOB_DATA;
typedef struct optional_data OPTIONAL_DATA;
typedef struct spec_procs SPEC_PROC;
typedef struct guard_datas GUARD_DATA;
typedef struct room_data ROOM_DATA;
typedef struct sector_data SECTOR_DATA;
typedef struct room_extended ROOM_MORE;
typedef struct reset_data RESET_DATA;
typedef struct shop_data SHOP_DATA;
typedef struct time_info_data TIME_INFO_DATA;
typedef struct weather_data WEATHER_DATA;
typedef struct clan_data CLAN_DATA;
typedef struct bank_item BANK_ITEM;
typedef void CHR_FUNCTION (CHAR_DATA *, CHAR_DATA *, char *argy);
typedef void DO_COMMAND (CHAR_DATA *, char *);
typedef bool SPEC_FUNCTION (CHAR_DATA * ch);

/* ======================================================================== */
/*                       All game-related DEFINES                           */
/* ======================================================================== */

#define HASH_MAX                 6138  /* Max list heads for rooms, objs, mobs */
#define STD_LENGTH               8192  /* Standard length string*/
#define SML_LENGTH               2048  /* Small length string*/
#define BATTLEGROUND_START_VNUM   600  /* Start bground room vnum */
#define BATTLEGROUND_END_VNUM     620  /* End bground room vnum */
#define INDOOR_FLY_HEIGHT          24  /* Things above this height cannot
                                          fly indoors - JRAJRA */ 
#define SKILL_COUNT               600  /* Must be 600 or higher */

#define NUM_ROLLS                   4  /* VERY unlikely to be changed */

#define DESC_CRASHER       0x00000001
#define DESC_ROLLING       0x00000002
#define DESC_ROLLED_YET    0x00000004
#define DESC_TPCOMMAND     0x00000008
#define DESC_WRONG_PWD     0x00000010
#define DESC_INSERT        0x00000020
#define DESC_BAD_LETTER    0x00000040


/* This is how deep bfs tracking goes before it stops. */


#define BFS_DEPTH  1000


#define STR   0  /* Strength raw power */
#define INT   1  /* Intelligence how well you use attack magic/learn */
#define WIS   2  /* Knowledge of ancient things and healing arts */
#define DEX   3  /* Manual dexterity...manipulating small things */
#define CON   4  /* Overall health */
#define LCK   5  /* Luck, affects many things... */
#define WIL   6  /* Willpower, how well you dominate/resist magic */
#define CHA   7  /* Charisma...helps you deal with mobs better. */

#define NUM_STATS                   8  /* 5 stats str int wis dex con
                                          now added luck, willpower, agility,
                                          endurance and charisma */
#define NUM_ALIGNMENTS              5  /* Coding for 4+newbie  
                                          aligments atm*/
#define NUM_ALIGN                   5  /* Cuz I forget what I call it
                                          sometimes */
#define MAX_GROUPSIZE               8  /* This is the base max groupsize. */
#define TOP_LEVEL                 110  /* The maximum level. */
#define MAX_NUM_BG_PRIZES          10  /* Max num of bg prizes */
#define MAX_COLORS                  8  /* Maximum player configurable colors */
#define RACE_COUNT                 25  /* Max races is 25. Don't change! */
#define MAX_CLAN_STORAGE           30  /* How many items can a clan 
                                          have in their clan storage? */
#define MAXST                      15  /* How many items can person
                                          have in person storage? */
#define MAX_IGNORE                 20  /* Max number of ignore
                                          slots a player has */
#define MAX_TROPHY                 20  /* Max number of trophies
                                          that someone has */
#define MAX_SCRIPT_FLAGS          300  /* Max number of scriptflags 
                                          a person can have */
#define MAP_WIDTH                  13  /* Overhead mapping width */
#define MAP_HEIGHT                  7  /* Overhead mapping height */
#define MAX_RANKING_DATA           15  /* Max number listed for ranking */
#define RANKING_INFO               10  /* Types of ranking info */
#define WGT_MULT                   10  /* The number of pebbles per  
                                          stone in weight ratios. */
#define SKILL                       0  /* Spell slot == 0 is skill */
#define SPELL                       1  /* Spell slot == 1 is spell */
#define PROF                        2  /* Spell slot == 2 is prof */
#define PK_QUIT_TIMER               8  /* Number of hours before
                                          you can quit to pk */
#define MOB_QUIT_TIMER              1  /* Number of hours before
                                          you can quit after 
                                          fighting a mob */

#define REMORT_ROOM              1200  /* All must type remort here */


#define WAR_TOKEN_VNUM             8   /* Obj vnum you must have to seize a
					  city */

#define COLOR_CHAT                  0
#define COLOR_CLANTALK              1
#define COLOR_IMMTALK               6
#define COLOR_YELL                  2
#define COLOR_SAY                   3
#define COLOR_TELL                  4
#define COLOR_GODTALK               5

#define MAX_TRADE                   5 /* Don't change this. */

#define MAX_CHAR_NAME_LENGTH       14 /* max name length for a player */

#define STOREDIV                   14 /* item cost is divided by this to
                                         determine the cost it will be to 
                                         store the item */
#define MAX_LEVEL                 110 /* max possible level */
#define LEVEL_BUILDER             103 /* Builder level */
#define LEVEL_IMMORTAL            100 /* Minimum immortal level */
#define IMM_LEVEL                 100 /* New Min immortal level */

/* ======================================================================== */
/*                        Do not change these...                            */
/* ======================================================================== */

#define PULSE_PER_SECOND           10
#define PULSE_VIOLENCE             15
#define PULSE_MOBILE              (6 * PULSE_PER_SECOND)     /* 6 */  
#define PULSE_TICK                (35 * PULSE_PER_SECOND)   /* 35 */
#define PULSE_AREA                (120 * PULSE_PER_SECOND) /* 120 */

/* ======================================================================== */
/*          Time of day defines.  Compatable with diku style muds.          */
/* ======================================================================== */

#define SUN_DARK                    0
#define SUN_RISE                    1
#define SUN_MORNING                 2
#define SUN_MIDDAY                  3
#define SUN_AFTERNOON               4
#define SUN_EVENING                 5
#define SUN_SET                     6


/* ======================================================================== */
/* Weather system model from Theisles, although I cannot guarentee similar  */
/*                            implimentation...                             */
/* ======================================================================== */

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

/* ======================================================================== */
/* Fight option defines. Can be toggled on/off through the 'fight' command. */
/* ======================================================================== */

#define F_HEADBUTT      0x00000001
#define F_JUJI          0x00000002
#define F_ELBOW         0x00000004
#define F_KNEE          0x00000008
#define F_BITE          0x00000010
#define F_CHOKE         0x00000020

#define F_AGGRESSIVE    0x00010000
#define F_POWER         0x00020000
#define F_GROUND        0x00040000

/* ======================================================================== */
/*                POSITIONS for ground_pos.  Many unused.                   */
/* ======================================================================== */

#define FP_CHOKE_1      0x00000001
#define FP_CHOKE_2      0x00000002
#define FP_CHOKE_3      0x00000004
#define FP_STUNNED      0x00000008
#define FP_BLEEDING     0x00000010
#define FP_TOO_HEAVY    0x00000020
#define FP_PUNCHING     0x00000040

/* ======================================================================== */
/*  These bits describe a spell's behavior, for use with the online spell   */
/*                        creation/editing system.                          */
/* ======================================================================== */

         /*+-------------------------------------------------+*/
         /*| These are the spell_bits 2 for "special spells" |*/
         /*+-------------------------------------------------+*/

#define SPELL_ASTRAL          0x00000001

#define SPELL_SUMMON          0x00000002 	/* Summons a mob/character.
						   mob summoning can be toggled
						   on/off in power.dat */
#define SPELL_TELEPORT        0x00000004	/* Teleports the victim */
#define SPELL_CHARM_PERSON    0x00000008	/* Unused for now. */

#define SPELL_MESSAGE         0x00000010	/* Sends a message to another player */
#define SPELL_DISPEL_MAGIC    0x00000020	/* Dispels magic */
#define SPELL_IDENTIFY        0x00000040	/* Behaves as an identify spell */
#define SPELL_LOCATE_OBJECT   0x00000080	/* Behaves as locate object spell */
#define SPELL_SCRY            0x00000100	/* Behaves as scry spell -
						   used to look into the room where
						   someone else in the game is. */
#define SPELL_LOCATE_PERSON   0x00000200	/* Behaves as locate spell -
						   used to see the room name
						   where someone is in. */
#define SPELL_RECALL          0x00000400	/* The recall spell */

#define SPELL_OBJ_TO_ROOM     0x00001000	/* If the spell creates an
						   object, it will go into the
						   room instead of the character's */
#define SPELL_PORTAL          0x00002000        /* Creates a portal from
						   caster to target. */

#define SPELL_MOB_TO_ROOM     0x00004000        /* Spell "creates" a mob */
	
#define SPELL_DETECT_ALIGN    0x00008000        /* Makes opp align show up
						   on "who" list. */

#define SPELL_NECROMANCY      0x00010000        /* Resurrects a corpse to
						   serve the caster */
         /*+------------------------------------------------+*/
         /*| These are the spell_bits 1 for "normal spells" |*/
         /*+------------------------------------------------+*/
			   
#define SPELL_ICE             0x00000001        /* Ice spell */
#define SPELL_SHOCK           0x00000002        /* Electric spell */
#define SPELL_WIND            0x00000004        /* Wind spell */
#define SPELL_SHARD           0x00000020        /* Shard breath */
#define SPELL_VAMPIRIC        0x00000040        /* Drains hps to caster */
#define SPELL_ACID            0x00000080	/* Eats equipment */
#define SPELL_FIRE            0x00000100	/* Burns equipment */
#define SPELL_ADD_MOVE        0x00000200	/* Heals Moves */
#define SPELL_REMOVES_BIT     0x00000400	/* Removes a bit (like poison) */

#define SPELL_TWO_SAVES       0x00000800	/* Victim gets 2 saves, so
						   the possibility of resisting
                                                   is greatly increased. */
 
#define SPELL_HALVED_SAVE     0x00001000	/* If victim "saves", dam is 
						   halved */

#define SPELL_HEALS_DAM       0x00002000	/* Heals Hps */
#define SPELL_MASS_DISTORTION 0x00004000        /* Mass distortion...half */
#define SPELL_LIGHT           0x00008000        /* Light spells */
#define SPELL_NOCAST          0x00010000        /* Can't be cast */
#define SPELL_MULTIMANA       0x00020000        /* Multiple mana used */
#define SPELL_AREA            0x00040000        /* Area Spell */
#define SPELL_RANGED          0x00080000        /* Inherantly Ranged */                                            
/* ======================================================================== */
/*     Connected states, similar to MERC's, used to define what state a     */
/*                           connection is in.                              */
/* ======================================================================== */

#define CON_PLAYING                      0	/* Playing the game */
#define CON_STATE_ONE                    1	/* At login screen */
#define CON_GET_OLD_PASSWORD             2	/* Entering password */
#define CON_CONFIRM_NEW_NAME             3	/* New user, confirming new name */
#define CON_GET_NEW_PASSWORD             4	/* Asking for new password */
#define CON_CONFIRM_NEW_PASSWORD         5	/* Confirming new password */
#define CON_GET_NEW_SEX                  6	/* Get sex of new user */
#define CON_GET_NEW_RACE                 7	/* Get race of new user */
#define CON_CONFIRM_NEW_RACE             8	/* Confirm this race */
#define CON_READ_MOTD                   10	/* Reading the message of the day */
#define CON_CONFIRM_ROLL                11	/* Confirming stat roll */
#define CON_GET_NEW_ANSI                12	/* Asking for ANSI */
#define CON_ASK_MENU                    13	/* Login Menu.  Unused. */
#define CON_SHOW_TITLE                  14	/* Showing the title screen. */
#define CON_GET_PAGELEN                 15	/* Asking page length */
#define CON_CHANNELD                    16	/* Special for mudlink */
#define CON_RWHO			17	/* Executing remote who */

#define CON_AEDITOR                     -1	/* Area Editor */
#define CON_REDITOR                     -2	/* Room Editor */
#define CON_MEDITOR                     -3	/* Mob Editor */
#define CON_OEDITOR                     -4	/* Object Editor */
#define CON_CEDITOR                     -5	/* Clan Editor */
#define CON_FSEDITOR                    -7	/* Fullscreen Editor */
#define CON_PEDITOR                     -8	/* Player editor */
#define CON_SEDITOR                     -9	/* Spell Editor */
#define CON_GODMENU                    -10	/* God Menu */
#define CON_SOCEDIT                    -11	/* Social Editor */
#define CON_SCRIPTEDITOR               -12	/* Script/trigger Editor */
#define CON_SOCIEDITOR                 -13      /* Society Editor */
#define CON_SHELL		       -14	/* Shell */
#define CON_HEDITOR                    -15      /* Help Editor */
/* ======================================================================== */
/*               Used for ACT calls, similar to diku style 'act'            */
/* ======================================================================== */

#define TO_ROOM             0	/* Display to the room, not to char */
#define TO_NOTVICT          1	/* Display to the room, not char or victim */
#define TO_VICT             2	/* Display to the victim */
#define TO_CHAR             3	/* Display to the character */
#define TO_ROOM_SPAM        4	/* Display TO_ROOM only if spam mode off */
#define TO_NOTVICT_SPAM     5	/* Display TO_NOTVICT only if spam mode off */
#define TO_VICT_SPAM        6	/* Display TO_VICT only if spam mode off */
#define TO_CHAR_SPAM        7	/* Display TO_CHAR only if spam mode off */

#define RC_GOODRACE     0x04000000     /* Mask for good race */
#define RC_EVILRACE     0x08000000     /* Mask for evil race */
#define RC_NEUTRALRACE  0x10000000     /* Unused. */

/* ======================================================================== */
/*                             Mob types.                                   */
/* ======================================================================== */

#define MOB_HUMAN                0 
#define MOB_ELF                  1 
#define MOB_DWARF                2 
#define MOB_GNOME                3 
#define MOB_GIANT                4 
#define MOB_DRAGON               5 
#define MOB_CANINE               6
#define MOB_RODENT               7
#define MOB_INSECT               8
#define MOB_UNDEAD               9
#define MOB_GOLEM               10
#define MOB_DEMON               11
#define MOB_TROLL               12
#define MOB_BIRD                13
#define MOB_FISH                14
#define MOB_STATUE              15
#define MOB_FELINE              16
#define MOB_PLANT               17
#define MOB_GENERAL_ANIMAL      18
#define MOB_FAERIE              19
#define MOB_REPTILE             20
#define MOB_GHOST               21	
#define MOB_OTHER               22
#define MOB_OGRE                23	
#define MOB_ELEMENTAL           24	
#define MOB_ORC                 25	
#define MOB_DUMMY               27	
#define MOB_ARACHNID            28
#define MOB_GNOLL               29
#define MOB_BUGBEAR             30
#define MOB_SKAVEN              31
#define MOB_TROGLODYTE          32
#define MOB_GOBLIN              33
#define MOB_ILLITHID            34
#define MOB_KENDER              35
#define MOB_MINOTAUR            36
#define MOB_SPRITE              37
#define MOB_DRACONIAN           38
#define MOB_HOBGOBLIN           39
#define MOB_HOBBIT              40
#define MOB_CENTAUR             41
#define MOB_MUTANT              42
#define MOB_NUKE                43
#define MAX_MOB_TYPE            45

/* ======================================================================== */
/*  Hit types for weapons.  Some unused.  Tried to maintain compatability   */
/*                        with diku type muds...                            */
/* ======================================================================== */

#define TYPE_UNDEFINED               -1
#define TYPE_HIT                     1000	/* Max 1000 dynamic spells */
#define TYPE_SLASH                   1001
#define TYPE_PIERCE                  1002
#define TYPE_WHIP                    1003
#define TYPE_POLEARM                 1004
#define TYPE_POUND                   1005
#define TYPE_SUCTION                 1006
#define TYPE_SHOT                    1090
#define MAX_ATTACK                   17         /* Unused! (?) max index+1 */
#define MAX_ATTACK_TYPES             8

/* ======================================================================== */
/*            Maximum player defined aliases a person can set up            */
/* ======================================================================== */

#define MAXALIAS      35

/* ======================================================================== */
/*                  Color defines and other ANSI codes.                     */
/* ======================================================================== */

#define BLACK      "\x1b[1;30m"
#define RED        "\x1b[31m"
#define GREEN      "\x1b[32m"
#define YELLOW     "\x1b[33m"
#define BLUE       "\x1b[34m"
#define PURPLE     "\x1b[35m"
#define CYAN       "\x1b[36m"
#define GREY       "\x1b[37m"

#define B_BLACK    "\x1b[40m"
#define B_RED      "\x1b[41m"
#define B_GREEN    "\x1b[42m"
#define B_YELLOW   "\x1b[43m"
#define B_BLUE     "\x1b[44m"
#define B_PURPLE   "\x1b[45m"
#define B_CYAN     "\x1b[46m"
#define B_GREY     "\x1b[47m"

#define CLRSCR     "\x1b[2J"
#define CLREOL     "\x1b[K"

#define DOWNARROW  "\x1b[B"
#define RIGHTARROW "\x1b[C"
#define UPARROW    "\x1b[A"
#define LEFTARROW  "\x1b[D"
#define HOMEPOS    "\x1b[H"

#define BOLD       "\x1b[1m"
#define FLASH      "\x1b[5m"
#define INVERSE    "\x1b[7m"
#define NTEXT      "\x1b[0;37m"

#define TAB        "\x9"

/* ======================================================================== */
/*                 The color for items laying on the ground.                */
/* ======================================================================== */

#define ITEMCOLOR  "\x1b[0;36m"

#define ACT_CRASHER         0x00000001

/* ======================================================================== */
/*  Tried to keep things similar to Diku/Merc, for area conversion, but I   */
/*                  don't think it's very possible.. sigh                   */
/* ======================================================================== */

#define ACT_STAY_AREA        0x00000001		
#define ACT_SENTINEL         0x00000002		
#define ACT_SCAVENGER        0x00000004		
#define ACT_AGGRESSIVE       0x00000008		
#define ACT_WIMPY            0x00000010		
#define ACT_KILLSQUISHY      0x00000020  	
#define ACT_PET              0x00000040		
#define ACT_UNTOUCHABLE	     0x00000080		
#define ACT_PRACTICE         0x00000100		
#define ACT_UNVAL            0x00000200		
#define ACT_FASTHUNT         0x00000400  
#define ACT_HUNTED_NOTHERE   0x00000800	
#define ACT_SCRAMBLE         0x00001000		
#define ACT_MOUNTABLE        0x00002000		
#define ACT_ANGRY            0x00008000		
#define ACT_BANK_TELLER      0x00020000		
#define ACT_STAYOFFROAD      0x00020000	
#define ACT_DEALER           0x00040000
/* ======================================================================== */
/*  On all flags from here on, there was no attempt to keep other codebase  */
/*                             value flags.                                 */
/* ======================================================================== */

#define REPAIRS_FREE         0x00080000		/* Repairs items for free */
#define REPAIRS_ONE          0x00100000		/* repairs 1/8 cost */
#define REPAIRS_TWO          0x00200000		/* ditto except 1/4 cost */

#define ACT_ATTITUDE         0x04000000		/* attacks if looked at */
#define ACT_AVENGED          0x08000000         /* Avengers come if killed */
#define ACT_REBOOT_ONLY      0x10000000         /* Dont repop after killed */

/* ======================================================================== */
/*            The following is coins data for 5 types of coins              */
/* ======================================================================== */

#define COPPER          0
#define SILVER          1
#define GOLD            2
#define PLATINUM        3
#define OBSIDIAN        4
#define MAX_COINS       5

/* ======================================================================== */
/*                              Mob acts.                                   */
/* ======================================================================== */

#define ACT3_GUARD_DOOR       0x00000002  /* Set to guard a door */
#define ACT3_GUARD_DOOR_ALIGN 0x00000008  /* Guards door from 'good'*/
#define ACT3_WALL             0x00000010  /* This mob is a wall */
#define ACT3_MIMIC            0x00000020  /* This mob looks like an item */


#define ACT3_AREA_CASTER      0x00000100  /* Mob casts area spells sometimes */
#define ACT3_THIEF            0x00000200  /* Mob steals and backstabs */
#define ACT3_MUTE             0x00010000  /* Can't yell */
#define ACT3_RIDE             0x00020000  /* Rides prev mob reset */
#define ACT3_FOLLOW           0x00040000  /* Will follow " " " " */
#define ACT3_REGENERATE       0x00080000  /* Regenerates fast rate */
#define ACT3_SLEEP            0x00400000  /* Sleeps sometimes*/
#define ACT3_DISABLED         0x01000000  /* Mapping disabled */
#define ACT3_STAYROAD         0x02000000  /* Stays on road */

#define ACT4_ENTERSCRIPT      0x00000001  /* Mob has an assoc enter script */
#define ACT4_LEAVESCRIPT      0x00000002  /* Mob has an assoc leave script */
#define ACT4_COMMANDSCRIPT    0x00000004  /* Mob has command script on it. */
#define ACT4_QUICKTICK        0x00000008  /* Mob has a script every quicktick */
#define ACT4_MOVESCRIPT       0x00000010  /* Mob has a script when it moves. */

     /*+--------------------------------------------------------+*/
     /*| These are the flags to check if the mob attacks anyone |*/
     /*+--------------------------------------------------------+*/

#define ACT4_KILL_OPP         0x00004000  /* spams  */
#define ACT4_KILL_SAME        0x00008000  /* spams KILL EVIL */
#define ACT4_KILL_CLAN        0x00010000  /* Kills members asshole clans */
#define ACT4_PROTECTOR        0x00020000  /* Casts spells at "enemy" */
#define ACT4_KILLALLONE       0x00040000  /* Kills everything flag one */
#define ACT4_KILLALLTWO       0x00080000  /* Kills everything flag two */
#define ACT4_KILLMOPP         0x00100000  /* Kills mobs of diff align */
#define ACT4_KILLMGOOD        0x00200000  /* Kills good mobs */
#define ACT4_SUMMONER         0x00400000  /* Summons help while in combat */
#define ACT4_KILLGLADIATOR    0x00800000  /* kills 'gladiator' */
#define ACT4_SLEEPAGGRO       0x01000000  /* aggro towards sleeping players */
#define ACT4_ASSISTONE        0x02000000  /* assists mobs with name AONE */
#define ACT4_ASSISTTWO        0x04000000  /* assists mobs with name ATWO */
#define ACT4_REST             0x08000000  /* mob rests when no PC's in room */
#define ACT4_RANGER           0x10000000  /* attacks "beast" */
#define ACT4_ASSISTALL        0x20000000  /* Will assist all fighting mobs in room */
#define ACT4_RESCUEONE        0x40000000  /* rescue mobs with name PRTCT */
#define ACT4_RESCUETWO        0x40000000  /* rescue mobs with name CODEONE */

/* ======================================================================== */
/*  Aff flags are COMPLETELY different. Here is the idea. The first aff[0]  */
/* gives the affects on a char (sometimes bad or good, the elemental stuff  */
/* at the end of aff[0] is the shields like from Eye of the storm twinkmuds */
/* and the second aff[1] tells what the char is resistant to. It allows for */
/*  what I feel is cleaner code. aff[2] are beneficial affects aff[3] are   */
/*               detects for things in aff[2] if necessary.                 */
/* ======================================================================== */

                 /*+--------------------------------+*/
                 /*| These are to ref things better |*/
                 /*+--------------------------------+*/

#define HURT 0
#define PROT 1
#define AFF 2
#define DET 3
#define REMOVE 4


/* Mob list 1 less than player list, 
   Player list must be 1 less than total_list */

#define MOB_LIST          80
#define PLAYER_LIST       81
#define TOTAL_LIST        82


/* Split up object list like this... */

#define OBJ_TIMED          0
#define OBJ_UNTIMED        1


/* These are the flags for societies */

#define SOCIETY_EXPLORER       0x00000001
#define SOCIETY_AGGRESSIVE     0x00000002
#define SOCIETY_WARLIKE        0x00000004
#define SOCIETY_SPAWNING       0x00000008
#define SOCIETY_DESTRUCTIBLE   0x00000010
#define SOCIETY_XENOPHOBIC     0x00000020
#define SOCIETY_BUILDERS       0x00000040
#define SOCIETY_EXPANDING      0x00000080



#define CASTE_WARRIOR          0x00000001
#define CASTE_GATHERER         0x00000002
#define CASTE_LEADER           0x00000004
#define CASTE_BUILDER          0x00000008
#define CASTE_MERCHANT         0x00000010
#define CASTE_EXPLORER         0x00000020


/* These are for special combat things mobs do. */

#define TACTICS_BACKSTAB     0x00000001
#define TACTICS_CIRCLE       0x00000002
#define TACTICS_KICK         0x00000004
#define TACTICS_BASH         0x00000008
#define TACTICS_TACKLE       0x00000010
#define TACTICS_FLURRY       0x00000020
#define TACTICS_FLAIL        0x00000040
#define TACTICS_BASHCAST     0x00000080
#define TACTICS_DISARM       0x00000100
#define TACTICS_HEAL         0x00000200 

 /*+----------------------------------------------------------------------+*/
 /*| These are used only in HURT and PROT. Makes it easier to add affects |*/
 /*|        to a person based on their resistances and things.            |*/
 /*+----------------------------------------------------------------------+*/

#define BLIND       0x00000001    /* Cannot see */
#define POISON      0x00000002    /* Poison - harder to regen */
#define PLAGUE      0x00000004    /* Bad sickness spreads */
#define CURSE       0x00000008    /* Cannot recall */
#define CONFUSE     0x00000010    /* Sometimes commands do random things */
#define OUTLINE     0x00000020    /* Easier to hit */    
#define WOUND       0x00000040    /* Loses hps fast. same as leaves blood */
#define LETHARGY    0x00000080    /* Loses moves fast when moving. */
#define MINDSAP     0x00000100    /* Loses mana fast. */
#define PARALYZE    0x00000200    /* Cannot do anything. */
#define CHARM       0x00000400    /* Follows order from its master. */
#define FEAR        0x00000800    /* Harder time attacking - less dam etc */
#define SLOW        0x00001000    /* Fewer attacks, slower casting */
#define FUMBLE      0x00002000    /* More likely to drop stuff. */
#define BEACON      0x00004000    /* You are on where. prot = prot_locate */
#define MUTE        0x00008000    /* You cannot talk or cast */
#define DEAF        0x00010000    /* You cannot hear... */
#define NUMB        0x00020000    /* Hard to pick up and hold things... */
#define SLEEP       0x00040000    /* Character is forced to sleep. */
#define VAMPIRIC    0x00080000    /* No heal, drains hps attacking */
#define LIGHT       0x00100000    /* Creature is hurt by light. */
#define BURNING     0x00200000    /* You're on fire, makes you lose hp. */

/*+------------------------------------------------------------------------+*/
/*|  These things are used under PROT And AFF And HURT under HURT they are |*/
/*|  painful, under PROT they protect, and under AFF they are shields like |*/
/*|                  from Eye of the Storm twinkmuds.                      |*/
/*+------------------------------------------------------------------------+*/

#define GAS         0x00800000      /* Corrosive gas causes poison too */
#define FIRE        0x01000000      /* Fireshield/resist */
#define WIND        0x02000000      /* Air..causes spells to fail */
#define ACID        0x04000000      /* Causes Eq to be broken */
#define CHAOS       0x08000000      /* Chaos changes hps and stuff */
#define SHARDS      0x10000000      /* Shards of rocks spinning around */
#define SHOCK       0x20000000      /* Shockshield */
#define ICE         0x40000000      /* Iceshield/resist */
#define ETHEREAL    0x80000000    /* Ethereal, non_magical weapons pass
				     through*/
           /*+-------------------------------------------+*/
           /*| These are used in DET and AFF for can_see |*/
           /*+-------------------------------------------+*/

#define INVIS       0x00000001      /* Invis */
#define HIDE        0x00000002      /* Hidden */
#define CHAMELEON   0x00000004      /* Chameleoned (super hide) */
#define VANISH      0x00000008      /* Rarer invis */
#define FOGGY       0x00000010      /* Pass through doors, hard to see */
#define DARK        0x00000020      /* Needs infrared to see */
#define COLD        0x00000040      /* In dark, need more than infra to see. */
#define SNEAK       0x00000080      /* Makes no noise entering room */

          /*+-----------------------------------------------+*/
          /*|     These are used in AFF regular affects     |*/
          /*| Don't go above 0x0040000 due to shields here. |*/
          /*+-----------------------------------------------+*/

#define MAGIC         0x00000100    /* Is this person or thing magical? */
#define SANCTUARY     0x00000200    /* Some Dam prot */
#define FLYING        0x00000400    /* Flying or not */
#define REGENERATE    0x00000800    /* Fast hps regen */
#define MINDSHIELD    0x00001000    /* protects from spells */
#define WATER_BREATH  0x00002000    /* Breath underwater */
#define PROT_ALIGN    0x00004000    /* Absorb some dam from other aligns */
#define SPEED         0x00008000    /* More combat attacks */
#define SAFE          0x00010000    /* Safe from attacks */
#define REFLECT       0x00020000    /* Sends spells back at caster */
#define PROTECT       0x00040000    /* Massive reduction in combat damage */

/* ======================================================================== */
/*             Sexflags - specifically follow Diku standard                 */
/* ======================================================================== */

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

/* ======================================================================== */
/*        These loosely follow theisles std and mortal conquest std         */
/* ======================================================================== */

#define OBJ_VNUM_CORPSE_NPC           10   /* vnum of generic mob corpse */
#define OBJ_VNUM_CORPSE_PC            11   /* vnum of generic player corpse */
#define OBJ_VNUM_SEVERED_HEAD         12   /* vnum of severed head */
#define OBJ_VNUM_TORN_HEART           13   /* torn heart */
#define OBJ_VNUM_SLICED_ARM           14   /* sliced arm */
#define OBJ_VNUM_SLICED_LEG           15   /* sliced leg */
#define OBJ_VNUM_INTESTINES           16   /* intestines */
#define OBJ_VNUM_BLOOD                40   /* Blood trails */
#define ROOM_VNUM_ARENA              504   /* Arena room number */
#define VNUM_WAITONE                 508   /* Waiting room 1 for arena */
#define VNUM_WAITTWO                 509   /* Waiting room 2 for arena */
#define ARENA_WAIT_TICK                2   /* Ticks in waiting room before
                                              the arena battle begins */
#define SEARCH_INV_FIRST               1   /* Search inventory first, for use
                                              with find_item_here. */
#define SEARCH_ROOM_FIRST              2   /* Search room first. */

/* ======================================================================== */
/*   Full compatibility with Theisles, but possible additions.  I can't     */
/*   guarentee all flags do exactly the same things.  Ranged weapons are    */
/*   completely disabled, as I lifted the ranged weapon code from an old    */
/*   version of mortal conquest, and feel bad about using it.  I'll code    */
/*                          my own in due time.                             */
/* ======================================================================== */

#define ITEM_ARMOR                  1
#define ITEM_WEAPON                 2
#define ITEM_RAW                    3
#define ITEM_FOOD                   4
#define ITEM_CONTAINER              5
#define ITEM_DRINK_CON              6
#define ITEM_GEM                    7
#define ITEM_LIGHT                  8
#define ITEM_TOOL                   9
#define ITEM_AMMO                  10
#define ITEM_TREASURE              11
#define ITEM_POTION                12
#define ITEM_BOOK                  13
#define ITEM_FURNITURE             14
#define ITEM_TRASH                 15
#define ITEM_KEY                   16
#define ITEM_SCROLL                17
#define ITEM_WAND                  18
#define ITEM_VEHICLE               19
#define ITEM_CORPSE_NPC            20
#define ITEM_CORPSE_PC             21
#define ITEM_FOUNTAIN              22
#define ITEM_PILL                  23
#define ITEM_STAFF                 24
#define ITEM_CLIMBABLE             25
#define ITEM_SCALABLE              26
#define ITEM_SCALE_DEV             27
#define ITEM_MAP                   28
#define ITEM_TRAP                  29
#define ITEM_SHIELD                30
#define ITEM_MISSILE               31
#define ITEM_SIEGE                 32
#define ITEM_NUKE                  33
#define ITEM_MAX                   34

          /*+---------------------------------------------+*/
          /*| Different types of raw materials this is v0 |*/
          /*+---------------------------------------------+*/

#define RAW_MINERAL  1
#define RAW_HERB     2
#define RAW_WOOD     3
#define RAW_FIBER    4
#define RAW_CLOTH    5
#define RAW_HIDE     6
#define RAW_SHARD    7

              /*+-------------------------------------+*/
              /*| Pseudo oop - identifies a structure |*/
              /*+-------------------------------------+*/

#define K_OBJECT         1	/* structure is an object */
#define K_OBJ            1	/* structure is an object */
#define K_CHAR           2	/* structure is a character */
#define K_ROOM           3	/* structure is a room */
#define K_PC             4	/* structure is a player structure */
#define K_ONLINE         5      /* structure is an online spot */


              /*+---------------------------------------+*/
              /*| These values follow Theisles standard |*/
              /*+---------------------------------------+*/

#define CONT_CLOSEABLE                0x01	/* Can container be opened/closed? */
#define CONT_PICKPROOF                0x02	/* Is the container pickproof? */
#define CONT_CLOSED                   0x04	/* Does the container default to closed? */
#define CONT_LOCKED                   0x08	/* Is the container locked? */
#define CONT_INDESTRUCTABLE           0x10      /* This item cannot be 
                                                   destroyed by fire */
#define CONT_WHEELED                  0x20      /* This item can be pulled */
#define CONT_MORTAR                   0x40      /* This item is a mortar for brewing */
#define LIGHT_LIT                     0x01	/* Is the light lit? */
#define LIGHT_FILLABLE                0x02	/* Is the light refillable? */
#define TOOL_TINDERBOX                0x01	/* Is this a tinderbox? */
#define TOOL_LOCKPICK                 0x02	/* Is this a lockpick? */
#define TOOL_FLASH_POWDER             0x04      /* Is this flash powder? */
#define TOOL_FORGING                  0x08      /* This is a forging hammer */
#define TOOL_PICKAXE                  0x10      /* This is pickaxe for mining*/
#define TOOL_NEEDLE                   0x20      /* This is a needle */
#define TOOL_PESTLE                   0x40      /* This is a pestle for brewing */

/* ======================================================================== */
/*  For portals. Value 4 to retain compatibility with mortal conquest code  */
/* ======================================================================== */

#define FURN_EXIT                     4
#define FURN_FORGE                    8         /* This is a forge. */
#define FURN_ANVIL                   16         /* This is an anvil */
#define FURN_LOOM                    32         /* This is a loom for weaving */
#define FURN_PLAYABLE                64         /* This is a playable furniture */

/* ======================================================================== */
/*            I tried to keep compatibility with merc/theisles.             */
/* ======================================================================== */

#define ITEM_GLOW            0x00000001	/* Can hit ghosts if on a weapon */
#define ITEM_HUM             0x00000002	/* Can hit ghosts if on a weapon */
#define ITEM_COMMANDSCRIPT   0x00000004 /* Item has command script on it */
#define ITEM_DROPSCRIPT      0x00000008 /* Item has a script when dropped */
#define ITEM_EVIL            0x00000010	/* Registers with detect evil */
#define ITEM_INVIS           0x00000020	/* Item is invisible */
#define ITEM_MAGIC           0x00000040	/* Item registers with detect magic */
#define ITEM_NODROP          0x00000080	/* Can't drop this item */
#define ITEM_GIVESCRIPT      0x00000100 /* Item has a script when given */
#define ITEM_VAMPIRIC        0x00000400 /* Item drains hps to attacker */
#define ITEM_NOREMOVE        0x00001000	/* Can't unequip this item */
#define ITEM_INVENTORY       0x00002000	/* For shop use, internal */
#define ITEM_NOSAVE          0x00004000	/* Item doesn't save when you quit */
#define ITEM_POWER           0x00008000	/* Item of power.. Eats up sanct */
#define ITEM_UNSEEN          0x00010000 /* Hidden. - cannot search */
#define ITEM_PIERCE          0x00020000	/* Gives a bonus for piercing skill */
#define ITEM_SLASHING        0x00040000	/* slashing */
#define ITEM_CONCUSSION      0x00080000	/* pounding/concussion */
#define ITEM_WHIP            0x00100000	/* whipping */
#define ITEM_HEAVY_SLASH     0x00200000	/* VERY HEAVY - hitroll */
#define ITEM_LIGHT_SLASH     0x00400000	/* Gives a large slashing bonus */
#define ITEM_GOOD            0x00800000 /* Registers with detect good */
#define ITEM_SAVE            0x01000000	/* Item stays on  death. */
#define ITEM_NOSTORE         0x02000000	/* Cannot store this item  */
#define ITEM_POLEARM         0x04000000	/* Polearm */

#define ITEM_ELEMENTAL       0x08000000 /* Item causes elemental effects */
#define ITEM_WOUND           0x10000000 /* Wounding item */
#define ITEM_BLIND           0x20000000 /* Blinding item */
#define ITEM_POISON          0x40000000 /* Poison item */

#define ITEM_TAKE            0x00000001
#define ITEM_FLOATING        0x00000002
#define ITEM_WEAR_HEAD       0x00000004
#define ITEM_WEAR_EYES       0x00000008
#define ITEM_WEAR_EARS       0x00000010
#define ITEM_WEAR_FACE       0x00000020
#define ITEM_WEAR_NECK       0x00000040
#define ITEM_WEAR_ARMS       0x00000080
#define ITEM_WEAR_ELBOW      0x00000100
#define ITEM_WEAR_SHIELD     0x00000200
#define ITEM_WEAR_WRIST      0x00000400
#define ITEM_WEAR_HANDS      0x00000800
#define ITEM_WEAR_FINGER     0x00001000
#define ITEM_WIELD           0x00002000
#define ITEM_WEAR_SHOULDER   0x00004000
#define ITEM_WEAR_BODY       0x00008000
#define ITEM_WEAR_ABOUT      0x00010000
#define ITEM_WEAR_BACK       0x00020000
#define ITEM_WEAR_WAIST      0x00040000
#define ITEM_WEAR_BELT       0x00080000
#define ITEM_WEAR_KNEE       0x00100000
#define ITEM_WEAR_LEGS       0x00200000
#define ITEM_WEAR_ANKLE      0x00400000
#define ITEM_WEAR_FEET       0x00800000

#define MAX_WEAR                     24

/* ======================================================================== */
/*           Theisles/merc compatible, although many are unused             */
/* ======================================================================== */

#define APPLY_NONE                    0
#define APPLY_STR                     1
#define APPLY_DEX                     2
#define APPLY_INT                     3
#define APPLY_WIS                     4
#define APPLY_CON                     5
#define APPLY_LCK                     6
#define APPLY_WIL                     7
#define APPLY_AGI                     8
#define APPLY_END                     9
#define APPLY_CHA                    10
/* 11 */
#define APPLY_MANA                   12
#define APPLY_HIT                    13
#define APPLY_MOVE                   14
/* 15 16 */
#define APPLY_AC                     17	/* Positive is good */
#define APPLY_HITROLL                18	/* Positive is good */
#define APPLY_DAMROLL                19	/* Positive is good */
#define APPLY_SAVING_THROW           20	/* Positive is good */
/* 21 */
#define APPLY_KICK_DAMAGE            22
#define APPLY_SNEAK                  23
#define APPLY_HIDE                   24
#define APPLY_WARMTH                 25
#define APPLY_RANDOM_STAT            26
#define MAX_APPLY                    27

/* ======================================================================== */
/*  Once again, the room flags keep semi-compatibility, although manny are  */
/*                 unused, and some are very different                      */
/* ======================================================================== */

#define R_MARK               0x00000001	/* Room is dark */
#define ROOM_NO_MOB          0x00000002	/* No mobs will wander in. */
#define ROOM_INDOORS         0x00000004	/* Room is indoors */
#define ROOM_LOWMAGIC        0x00000008 /* Room suppresses magic */
#define ROOM_HIGHMAGIC       0x00000010 /* Extra magic power here...*/
#define ROOM_UNDERGROUND     0x00000020 /* This room is underground */
#define ROOM_PET_SHOP        0x00000040	/* Is a pet shop */
#define ROOM_NOHEAR          0x00000080 /* cannot hear from here */
#define ROOM_NOISY           0x00000100 /* Noisy; yells don't go as far */
#define ROOM_DARK            0x00000200	/* Mark a room */
#define ROOM_NOSUMMON        0x00000400	/* Can't summon TO/FROM this room */
#define ROOM_UNTRACKABLE     0x00000800	/* Can't track through this room */
#define ROOM_NOMAGIC         0x00001000	/* No spells allowed here */
#define ROOM_SILENCE         0x00002000	/* Nobody can talk from here */
#define ROOM_NO_RECALL       0x00004000	/* Can't recall from here */
#define ROOM_CLANSTORE       0x00008000	/* This is a clan storage room */
#define ROOM_SHADED          0x00010000 /* Is room shaded or not? */
#define ROOM_LIT             0x00020000 /* Is room ALWAYS lit? */
#define ROOM_MINERALS        0x00040000 /* Room has minerals */
#define ROOM_COMMANDSCRIPT   0x08000000 /* Room has command script. */
#define ROOM_ENTERSCRIPT     0x10000000 /* Room has an enter script. */
#define ROOM_LEAVESCRIPT     0x20000000 /* Room has a leave script. */
#define ROOM_DROPSCRIPT      0x40000000 /* Room has a dropped item script */
#define ROOM_GETSCRIPT       0x01000000 /* Room has a get item script */

/* ======================================================================== */
/*   These are for the transport update routine...to split them off from    */
/* The rest of the types of things which are not checked each second or 2.  */
/* ======================================================================== */

#define ROOM2_FALLSFAST       0x00000001 /* Person falls down if they are in*/
#define ROOM2_EXTRAHEAL       0x00000002 /* Slight healing bonus in this room2 */
#define ROOM2_EXTRAMANA       0x00000004 /* Slight mana bonus in this room2.. buggy */
#define ROOM2_MOVING          0x00000008 /* Room2 has a 'current' */
#define ROOM2_MANADRAIN       0x00000010 /* Drains all mana */
#define ROOM2_POISONTRAP      0x00000040 /* Poison arrows shoot characters */
#define ROOM2_ARROWTRAP       0x00000080 /* Arrows shoot characters */
#define ROOM2_ROCKTRAP        0x00000100 /* Rocks fall on characters */
#define ROOM2_SPIKETRAP       0x00000200 /* Spikes stab characters */
#define ROOM2_GASTRAPONE      0x00000400 /* Unused, not working */
#define ROOM2_GASTRAPTWO      0x00000800 /* Noxious gas poisons characters */

#define ROOM2_GEYSERTRAP      0x00001000 /* Gyser scalds */

#define ROOM2_AVALANCHE       0x00002000 /* Avalanche... goes off once (buggy) */
#define ROOM2_ACIDSPRAY       0x00004000 /* Sprays player with acid */

#define ROOM2_FIRETRAP        0x00008000 /* Fire burns characters */

/* ======================================================================== */
/*             Direction compatibility with all diku-based muds             */
/* ======================================================================== */

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

/* ======================================================================== */
/*                  Mortal Conquest compatible exit flags                   */
/* ======================================================================== */

#define EX_ISDOOR            0x00000001	/* This IS a door */
#define EX_CLOSED            0x00000002	/* Door is closed */
#define EX_LOCKED            0x00000004 /* Door is locked */
#define EX_PICKPROOF         0x00000010	/* Door cannot be picked */
#define EX_BASHPROOF         0x00000020	/* Door cannot be broken */
#define EX_ISWALL            0x00000040 /* Exit is a wall... */
#define EX_HIDDEN            0x00000100	/* Hidden door */
#define EX_RESET             0x00000200	/* Resets on repop if broken */
#define EX_HASTRAP           0x00000400 /* This exit has a trap */
#define EX_EAT_KEY           0x00000800 /* The exit destroys keys used in it */

/* ======================================================================== */
/*                              Sector types.                               */
/*                 Small compatibility with Mortal Conquest                 */
/* ======================================================================== */

                     /*+-----------------------+*/
                     /*| easy movement sectors |*/
                     /*+-----------------------+*/

#define SECT_INSIDE                   0	/* Inside, set INDOORS flag too! */
#define SECT_CITY                     1	/* City, easy moving */
#define SECT_TOWN                     2 /* Town area */
#define SECT_ROAD                     3 /* Road sector */
#define SECT_TRAIL                    4 /* Trail Sector */
#define SECT_PATH                     5 /* A trail through wilderness */
#define SECT_BRIDGE		      6 /* Bridge Sector */
#define SECT_FIELD                    7	/* Field, easy moving */
#define SECT_GRASSLANDS               8 /* Grasslands - open rich */
#define SECT_SAVANNAH                 9 /* Warm, lush grasslands */

 /*+---------------------------------------------------------------------+*/
 /*| End of easy movement sectors begin special sectors which need stuff.|*/
 /*+---------------------------------------------------------------------+*/

#define SECT_WATER_SWIM              10	/* Swimable water */
#define SECT_WATER_NOSWIM            11	/* Unswimable water */
#define SECT_UNDERWATER              12	/* Underwater */
#define SECT_MOUNTAIN                13	/* Need mountain boots-vehicle	 */
#define SECT_AIR                     14	/* Air sector */
#define SECT_CLOUDS                  15 /* Up in the clouds */   
#define SECT_SNOW                    16	/* Hard moving, cold */

       /*+---------------------------------------------------------+*/
       /*| End special sectors that need stuff, now onto the rest. |*/
       /*+---------------------------------------------------------+*/

#define SECT_ICE		     17 /* Ice sector.. slippery footing */
#define SECT_ARCTIC                  18 /* Cold like sect_snow... */
#define SECT_TUNDRA                  19 /* Cold and barren wastes */
#define SECT_TROPICAL                20	/* Tropical, hot */
#define SECT_MARSH		     21 /* Marsh sector.. no blood trails */
#define SECT_SWAMP                   22 /* Swamp area..yeah im scraping */
#define SECT_HOLLOW                  23 /* Cool and dark marsh... */
#define SECT_STEPPE                  24 /* Cool, dry grasslands */
#define SECT_PLAINS                  25 /* Plains sector (big field) */
#define SECT_BRUSH                   26 /* Brush sector... */
#define SECT_FOREST                  27	/* Forest, tough going */
#define SECT_WOODS                   28 /* Another forest type */
#define SECT_CANYON                  29 /* Canyon--dark alot */
#define SECT_HILLS                   30	/* Hills, tough going */
#define SECT_ROCKY                   31 /* Rocky, hard to keep footing */
#define SECT_WASTELAND               32 /* Almost as bad as desert, dry */
#define SECT_DESERT                  33	/* Desert, -2 thirst, hot */
#define SECT_RUINS                   34 /* Ancient, abandoned place */
#define SECT_LAVA                    35 /* Lava Area */
#define SECT_ASTRAL                  36 /* Astral sector...need spell */

               /*+------------------------------------+*/
               /*| These are the underground sectors! |*/
               /*+------------------------------------+*/

#define SECT_CAVE                    37 /* Underground cave */
#define SECT_HOLE                    38 /* A Place over a hole */
#define SECT_CAVERN                  39 /* BIG cave underground */
#define SECT_PASSAGE                 40 /* A type of tunnel */
#define SECT_ALCOVE                  41 /* A Small chamber */
#define SECT_CHAMBER                 42 /* An underground opening */
#define SECT_VAULT                   43 /* MASSIVE cave..can fly */
#define SECT_SUBTERRANIAN            44 /* under the earth area */
#define SECT_SHAFT                   45 /* A shaft...dunno */
#define SECT_PIT                     46 /* Above or in a pit */
#define SECT_TUNNEL                  47 /* Underground path */
#define SECT_TUBE                    48 /* Round formed tunnel */
#define SECT_NUKE                    49 /* This is used to nuke rooms */
#define SECT_MAX                     50 /* End of sectors */

/* ======================================================================== */
/*                     Food/Liquids player state                            */
/* ======================================================================== */

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

/* ======================================================================== */
/*                          Miscellaneous stuff                             */
/* ======================================================================== */

#define AUTH                          2
#define MAX_HOLD                      6  /* Number of hold slots chars get.. */
#define WEAR_NONE                    -1
#define WRITE_AUTH                    1

/* ======================================================================== */
/*                              Guild Flags                                 */
/* ======================================================================== */

#define GUILD_WARRIOR      0 
#define GUILD_WIZARD       1
#define GUILD_HEALER       2 
#define GUILD_THIEF        3
#define GUILD_RANGER       4
#define GUILD_MYSTIC       5
#define GUILD_ASSASSIN     6
#define GUILD_TINKER       7
#define GUILD_BATTLEMASTER 8
#define GUILD_SORCERER     9

#define NUM_GUILDS         10

#define NUM_TIERS          5
#define MAX_TIERS          5

/* ======================================================================== */
/*                               Positions                                  */
/* ======================================================================== */

#define POSITION_DEAD                      0    /* Dead */
#define POSITION_MORTAL                    1	/* Mortally wounded */
#define POSITION_INCAP                     2	/* Incapacitated */
#define POSITION_STUNNED                   3	/* Stunned */
#define POSITION_SLEEPING                  4	/* Sleeping */
#define POSITION_RESTING                   5	/* Resting */
#define POSITION_BASHED                    6	/* Bashed to ground */
#define POSITION_GROUNDFIGHTING            7	/* Groundfighting */
#define POSITION_FIGHTING                  8	/* Fighting */
#define POSITION_CIRCLE                    9	/* Circling */
#define POSITION_FALLING                  10	/* Falling! */
#define POSITION_MEDITATING               11    /* Meditation */
#define POSITION_STANDING                 12	/* Standing, not fighting */
#define POSITION_RUNNING                  13	/* Running */
#define POSITION_SEARCHING                14	/* Searching for exit/item */
#define POSITION_BACKSTAB                 15	/* Backstab preparation */
#define POSITION_INVEST                   16	/* Investigating */
#define POSITION_CASTING                  17	/* Casting a spell */
#define POSITION_SHOOTING                 18    /* Shooting a wpn */
#define POSITION_MINING                   19    /* Mining for chunks */
#define POSITION_FIRING                   20    /* Firing a siege engine */
#define MAX_POSITIONS                     20    /* MAX num positions. */

/* ======================================================================== */
/*                           Player set bits                                */
/* ======================================================================== */

#define PLR_HOLYLIGHT        0x00000004	/* Can see in the dark, invis, etc */
#define PLR_MAPPING          0x80000000 /* is the player mapping */
#define PLR_NOIBM            0x40000000 /* Plr does not use ibm for map */
#define PLR_VIEWMOBS         0x10000000 /* Plr views mobs on map */
#define PLR_VIEWPLAYERS      0x08000000 /* Plr views mobs on map */
#define PLR_MAPSPAM          0x08000000 /* Plr gets spammy updates */
#define PLR_LOG              0x00000010	/* Keep logs of this player's commands */
#define PLR_DENY             0x00000020	/* Deny this character from logging in */
#define PLR_FREEZE           0x00000040	/* Freeze this character */
#define PLR_HOLYPEACE        0x00010000 /* No on can fight in rooms you are */
#define PLR_HOLYWALK         0x00020000	/* Can walk through anything, anywhere */
#define PLR_HOLYLAG          0x00100000	/* Is this immortal delayed on delayed 				   commands like mortals? */
#define PLR_NOCLAN           0x00200000 /* Is this person forbidden to join a clan? */
#define PLR_LAMER            0x00400000 /* Is this person a lamer? */
#define PLR_NOACTION         0x00800000 /* Is player forbidden to auct? */
#define PLR_NOAUCTION        0x02000000 /* Plr cannot auction anymore */ 
#define PLR_HAS_SHOES        0x04000000 /* Players has shoes on */
#define PLR_HAS_MTN_BOOTS    0x08000000 /* Players has mtn boots on*/
#define PLR_HAS_SCUBA        0x10000000 /* Players has scuba on */
#define PLR_HAS_BOAT         0x20000000 /* Players has a boat */
#define PLR_HAS_SNOWSHOES    0x40000000 /* Players snowshoes  */
#define PLR_HAS_SHIELD       0x80000000 /* This player is using a shield */

/* ======================================================================== */
/*    This is the new automatic description system different desc types     */
/*                   set while creating a character.                        */
/* ======================================================================== */

#define DESC_BUILD                    0 /* Character's Build */
#define DESC_FACIAL_FEATURE           1 /* Character's facial feature */
#define DESC_EYES_COLOR               2 /* Character's eyes color */
#define DESC_EYES_ASPECT              3 /* Character's eyes aspect */
#define DESC_SKIN_COMPLEXION          4 /* Character's skin complexion */
#define DESC_HAIR_LENGTH              5 /* Character's hair length */
#define DESC_HAIR_COLOR               6 /* Character's hair color */
#define DESC_HAIR_STYLE               7 /* Character's hair style */
#define DESC_FACIAL_HAIR              8 /* Character's facial hair */
#define DESC_FUR_COLOR                9 /* Character's fur color */

#define NUM_DESC_TYPES                9

/* ======================================================================== */
/*                  Bits for immort notification on events                  */
/* ======================================================================== */

#define WIZ_NOTIFY           0x00000080
#define WIZ_NOTIFY_1         0x00000100
#define WIZ_NOTIFY_2         0x00000200
#define WIZ_NOTIFY_LOGIN     0x00000400
#define WIZ_NOTIFY_DEATH     0x00000800
#define WIZ_NOTIFY_BUG       0x00001000
#define WIZ_NOTIFY_LOG       0x00002000
#define WIZ_NOTIFY_SCRIPT    0x00004000

/* ======================================================================== */
/*                         Internal channel ID's                            */
/* ======================================================================== */

#define CHANNEL_AUCTION      0x00000001
#define CHANNEL_CHAT         0x00000002
#define CHANNEL_CLANTALK     0x00000004
#define CHANNEL_IMMTALK      0x00000008
#define CHANNEL_NOTIFY       0x00000010
#define CHANNEL_YELL         0x00000080
#define CHANNEL_GODTALK      0x00000100

/* ======================================================================== */
/*      Auto's conforming to theisles 1.0 and mortal conquest standards     */
/* ======================================================================== */

#define PLR_AUTOGOLD         0x00000100	/* Gets gold from kills */
#define PLR_AUTOEXIT         0x00000200	/* Displays exits in room desc */
#define PLR_AUTOLOOT         0x00000400	/* Loots all kills */
#define PLR_AUTOSAC          0x00000800	/* Sacs corpses of all kills */
#define PLR_BLANK            0x00001000	/* Blank line before prompt */
#define PLR_BRIEF            0x00002000	/* Brief mode - no long room descs */
#define PLR_COMBINE          0x00004000	/* Combine object listings */
#define PLR_PROMPT           0x00008000	/* Prompt is on/off */
#define PLR_TELNET_GA        0x00010000 /* Non-compat, but same name!  Warning */
#define PLR_ASSIST           0x00020000	/* Auto-assists people in group against
					   mobs.  To assist against other players,
					   you must manually type assist. */
#define PLR_AUTOSPLIT        0x00040000	/* auto-splits any cash looted */
#define PLR_SILENCE          0x00080000	/* Player cannot use channels */
#define PLR_AUTOSCAN         0x00100000 /* You get the scan messages from
                                           players of opp align in adjacent
                                           rooms */
#define PLR_AUTOBLINK        0x00200000 /* Player uses blink skill. */
#define PLR_ANSI             0x00400000	/* Ansi is on/off for this player? */
#define PLR_ANONYMOUS        0x00800000 /* Use the old editors */
#define PLR_DESTROY          0x01000000 /* Player tries to destroy items */
#define PLR_PROMPT_UP        0x08000000	/* Prompt with map or down below? */
#define PLR_NOSUMMON         0x10000000 /* Plr cannot be summoned */
#define PLR_ASCII            0x20000000 /* Internal Ascii (high ibm chars) */

/* ======================================================================== */
/*  Mana types retain full compatibility with Mortal conquest and Theisles  */
/* ======================================================================== */

#define MANA_ANY           0x80
#define MANA_NONE          0x00
#define MANA_EARTH         0x01
#define MANA_AIR           0x02
#define MANA_FIRE          0x04
#define MANA_WATER         0x08
#define MANA_SPIRIT        0x10

#define MANA_TYPES 5

/* ======================================================================== */
/*                           Spelltype targets..                            */
/* ======================================================================== */

#define TAR_IGNORE                  0x00000000	/* No target needed */
#define TAR_CHAR_OFFENSIVE          0x00000001	/* Offensive spell */
#define TAR_CHAR_DEFENSIVE          0x00000002	/* Defensive spell */
#define TAR_CHAR_SELF               0x00000004	/* Self only */
#define TAR_OBJ_INV                 0x00000008	/* Object in inventory */
#define TAR_ALL_IN_ROOM             0x00000010	/* Everyone in room */

#ifdef WINDOWS
#define PLAYER_DIR      "..\\plr\\"
#define PLAYER_DIR_2    "..\\plr\\"
#define NULL_FILE       "..\\src\\LoC"
#else
#define PLAYER_DIR      "../plr/"
#define PLAYER_DIR_2    "../plr/"
#define NULL_FILE       "/dev/null"
#endif

#define AREA_LIST       "playarea.lst"
#define NOTE_FILE       "plnotes.txt"

extern char *globalalias_name[200];
extern char *globalalias_expansion[200];

struct scriptassoc {
	SA	*next;
	char	*flagname;
	char	*flagtext;
};

extern SA *sa_head[27];  /* 1=A, 26=Z */

/* ======================================================================== */
/*                           Auction Data                                   */
/* ======================================================================== */

struct auct_data 
{
  CHAR_DATA *bychar;
  CHAR_DATA *tochar;
  short going;
  int minbid;
  int bid;
  int number;
  char item_name[SML_LENGTH];
  SINGLE_OBJECT *item;
  AUCTION *next;
};

/* ======================================================================== */
/*     This reads from dam.dat.  Allows for configurable damage messages    */
/* ======================================================================== */

struct dammsg_data
  {
    short generic_range[20][2];
    short generic_percent[20][2];
    char *gen_m[20];
    char *gen_m1[20];
    char *gen_m2[20];
};

/* ======================================================================== */
/* This reads from power.dat.  It can be used to configure the entire mud.  */
/* ======================================================================== */

struct power_data
  {
    bool all_newbies_good;	/* Do all newbies start as good? */
    int level_to_choose;        /* Level newbies choose their side */
    int choose_in_room;         /* Which room people choose sides in */
    short initial_hp[2];	/* Initial hit points for newbies */
    short remort_hp[2];		/* Remort initial hit points */
    short initial_mv[2];	/* Initial move points for newbies */
    short remort_mv[2];		/* Remort initial move points */
    short hitgain[10][5];	/* Hit gains in a given level range */
    short rem_hitgain[10][5];	/* Remort hit gains in a given level range */
    short movegain[10][4];  	/* Move gains in a given level range */
    short rem_movegain[10][4];	/* Remort move gains in a given level range */
    bool remort_bonus_fixed;    /* Tells if remort bonus is fixed JRAJRA */
    int remort_in_room;         /* Must be here to "remort" */
    int transform_in_room;	/* Must be in this room to transform */
    bool add_to_stats;		/* Remorts add stats? */
    short max_remorts;		/* Maximum remorts */
    short remorts_for_restart;  /* Number of remorts needed to restart
				   as a "restart race" */
    short remort_level;		/* Level you must be to remort */
    bool vaporize_inv;		/* Vaporize inventory when remorting? */
    bool vaporize_all;		/* Vaporize everything when remorting? */
    int beams_to_room;		/* Jump to this room after remorting? */
    bool weather;		/* Weather effects on/off */
    bool player_prompt;		/* Player defined prompts? */
    bool skill_loss_on_mob_death; /* skills lost on mob death? */
    bool skill_loss_on_pk_death;  /* skills lost on pk death? */
    int amount_lost_on_death;	  /* Actual skill amount lost on death */
    bool arena_on;		/* Arena active? */
    bool arena_good_evil;	/* Good/Evil fights in arena? */
    bool validation;		/* Validation system on/off */
    char email_to[50];		/* Email to here for validation */
    int space_allowed;          /* Space allowed for bootup */
    bool easier_moves;		/* Easier movement method */
    int max_prac_spells;	/* Maximum spell percentage you can practice to */
    int max_prac_skills;	/* Maximum skill percentage you can practice to */
    int newbie_object[10];	/* Newbies start with these objects */
    bool allow_where;		/* Allow use of 'where' command? */
    int space_needed;		/* Shared string space needed on bootup. */
    bool evil_can_cast;		/* Evil can cast spells? */
    short practice_percent;	/* Use to scale practices per level */
    short repair_weapons[3];	/* Costs to repair weapons */
    short repair_armors;	/* Costs to repair armor */
    short tinker_discount;	/* Discount for tinker guild members */
    short resize_divisor;	/* Resize divisor for resize cost */
    short groundfight_stand;	/* Chance of standing in a groundfight */
    bool equip_in_combat;	/* Equip armor in combat? */
    bool remove_while_fighting;	/* Remove armor while fighting? */
    bool score_while_fighting;	/* Use score while fighting? */
    bool give_while_fighting;	/* Give objects while fighting? */
    char *god_names[5];		/* Holds the name of mudgods. */
    int level_to_see_numeric_stats; /* Level to see numeric stats, unused. */
    short base_hp_regen;	/* Base hp regen per heartbeat */
    short base_mp_regen;	/* Base mp regen per heartbeat */
    short hp_bonus_resting;	/* Hp regen bonus for resting */
    short hp_bonus_sleeping;	/* Hp regen bonus for sleeping */
    short mp_bonus_resting;	/* Move bonus for resting */
    short mp_bonus_sleeping;	/* Move bonus for sleeping */
    short med_mana_regen_bonus;	/* Meditating regen for mana */
    short base_mana_regen_bonus; /* Non-meditating regen for mana */
    bool tackle_with_weapon;	/* Allow tackling with a weapon? */
    bool tackle_person_with_weapon; /* Allow tackling a person with a weapon? */
    bool allow_rerolls;		/* Allow rerolls in old creation method? */
    short flurry_mps;		/* Move point cost for flurry */
    char *learned[20];		/* Description of how well you know spells/skills */
    short low_range[20];	/* Range for learned */
    short high_range[20];	/* Range for learned */
    char *exp_to_level;		/* Interpretted exp to level. */
    char *highlev_exp_to_level; /* Interpretted highlevel exp to level */
    short prereq;		/* Minimum you must know a given skill for it
				   to count as a satisfied prerequisite. */
    char *mob_exp;		/* Mob exp to level, interpretted. */
    short armor_lev_min[20];	/* Armor level range */
    short armor_lev_max[20];	/* Armor level range */
    char *armor_lev_word[20];	/* Armor level range descriptions. */
    bool restore_when_level;	/* Free restore when you level? */
    bool can_summon_mobs;	/* Does the game allow mob summoning? */
    bool morts_use_color_chat;	/* Can morts use colors in channels? */
    bool show_race_select_info;	/* Shows race stats to newbies? */
    char flee_chance;		/* Percent chance that fleeing will fail */
    bool bash_slip_to_tackle;	/* Can a bash slip into a groundfight? */
    bool penalize_evil_in_sun;	/* Penalize evil in direct sunlight? */
    bool get_from_corpse_while_in_combat; /* Loot corpses while fighting? */
    char plague_chance;		/* Chance others in the room will catch
				   plague from you, if infected. */
    char *gods;			/* Gods who run the place */
    int  max_level;		/* maximum level, cannot exceed 90 */
    bool can_fight_self;	/* Can fight yourself? */
    char loot_level;		/* What level can you loot a corpse? */
    bool auction_lag;	
    bool good_kill_good;
    bool evil_kill_evil;
    int remort_req[13][6];
    int augment_cost[12][7];
    int big_group_pkill_whore;
    short stats_per_remort;
    short guild_points_per_remort;
    short resistance_points_per_remort;

};

/* ======================================================================== */
/*                       Mob info (used in def.)                            */
/* ======================================================================== */

struct mob_nfo
{
  char *name;
  char *attackname;
  short color;
  char symbol;
};


/* ======================================================================== */
/*                    For use with syslag, sysfinger.                       */
/* ======================================================================== */

struct shell_command
  {
    SHELL *next;
    char caller[50];
    char fname[20];
    int wait;
  };

/* ======================================================================== */
/*                            Banned site data                              */
/* ======================================================================== */

struct ban_data
  {
    BAN_DATA *next;
    char *name;		/* Numeric site ban */
    bool newbie;	/* Newbie banned?  If so, people from this site
			   must go through email validation to play! */
    char *who_banned;   /* Keep a trace of who banned */
    char *ban_time;     /* Time that the *name was sitebanned */
    char *ban_reason;   /* Reason why *name is banned */
  };

/* ======================================================================== */
/*                              Bank item data                              */
/* ======================================================================== */

struct bank_item
   {
     int warpoints;
     int gold;
   };

/* ======================================================================== */
/*                          Combat Field Structure                          */
/* ======================================================================== */

                  /*+----------------------------------+*/
                  /*| Damages.. partially implimented. |*/
                  /*+----------------------------------+*/

struct damages_struct
  {
    char *kick_dam;
  };



/* See society.c for better documentation of this next part. This is
   designed to set up a community of mobs that grows and interacts
   and eventually does things like send out war parties and sends
   out new colonies etc. Very much in the beginning stages... */

#define NUM_CASTES        10
#define MAX_CASTE_RANKS   5   /* Change this if you want more ranks */


struct society_data
{
  SOCIETY_DATA *next;    /* Next society in the list */
  int vnum;              /* What the society number for this is. */
  char *name;            /* The name of the society */
  int room_start_vnum;   /* Society starts in this room */
  int num_start_rooms;   /* How many rooms above this number they start in */
  CASTE_DATA *caste[NUM_CASTES];
  int flags;             /* Flags this society takes. */
};


struct caste_data 
{
  int num_ranks;                    /* How many ranks there are in this. */
  int mob_start_vnum;               /* The vnum where the mobs start */
  char *name;                       /* The caste name */
  short chance_to_advance[MAX_CASTE_RANKS]; /* How likely you are to adv */
  short curr_pop[MAX_CASTE_RANKS];  /* How many of each rank exist.. */
  short max_pop[MAX_CASTE_RANKS];   /* Max population of each rank */
  int flags;                        /* Flags for this caste - goals etc.. */
};




                     /*+------------------------------+*/
                     /*| The key to the spell editor. |*/
                     /*+------------------------------+*/

struct spell_data
{
  SPELL_DATA *next;		/* Next spell, hashed by number */
  SPELL_DATA *next_a;		/* Next spell, hashed by spell name */
  int slot;			/* 0 = skill, 1 = spell, 2 = prof */
  int gsn;			/* General slot number.  internal use */
  int spell_type;		/* Offensive, defensive, etc... */
  int spell_bits;		/* SPELL_SUMMON, etc.. */
  int spell_bits2;            /* More spell bits :P */
  char *spell_name;		/* The spell's name */
  int spell_level;		/* Minimum level to cast this spell */
  char *prereq_1;		/* Spell prereq #1 */
  char *prereq_2;		/* Spell prereq #2 */
  SPELL_DATA *pre1;           /* Prereq1 to be less cpu intensive */
  SPELL_DATA *pre2;             /* Prereq2 to be less cpu intensive */
  int num_prereqs[3];           /* Number of prereqs for spell */
  bool go_to_second;            /* Is there vert line to second prereq? */
  char *noun_damage;		/* Noun damage for offensive combat spells */
  char *act_to_ch_1;		/* Shown to character when he/she casts */
  char *act_to_ch_2;		/* Just another line to show to char */
  char *act_to_vict_1;	        /* To victim */
  char *act_to_vict_2;
  char *act_to_notvict_1;	/* To everyone in room besides char + vict */
  char *act_to_notvict_2;
  int aff[4];                   /* Affect flags added by spell. */
  int location[5];		/* Modifies this location (str, dex, etc) */
  char *duration;		/* Needs to be a string so we can have vars */
  char *modifier[5];		/* Amount to modify location */
  char *damage;	      	        /* If combat spell, how much dam (w/vars) */
  int mana;			/* Minimum Mana cost */
  int mana_type;		/* Mana type */
  int multi_mana_level[MANA_TYPES];      /* Multiple Mana Levels */
  int multi_mana;              /* Is it a Multiple Mana Spell? */
  int casting_time;		/* Casting delay time. 10 = 1 combat round */
  int position;		        /* Position you must be in to cast */
  char *wear_off_msg;		/* When the spell wears off, this msg is disp'd */
  int creates_obj;		/* Creates this object vnum */
  unsigned char min_stat[NUM_STATS];
  unsigned char guilds[NUM_GUILDS];
  int in_room;                /* Must be in this room vnum to cast. */
  int spell_lag;              /* Number of hours between castings */
  int fail_chance;            /* percent chance it fails  */
  int pk_fail_chance;         /* percent chance it succeeds if person has pk                                    noquit timer set > 2 */
};

/* ======================================================================== */
/*                        Where a blow is struck.                           */
/* ======================================================================== */

#define STRIKE_BODY   1
#define STRIKE_HEAD   2
#define STRIKE_LEGS   3
#define STRIKE_ARMS   4

/* ======================================================================== */
/*                        Structure that armor has.                         */
/* ======================================================================== */

struct item_armor
  {
    char tag;
    signed char warmth;		/* v9 */
    signed char protects_legs;	/* v0 */
    signed char protects_body;	/* v1 */
    signed char protects_head;	/* v2 */
    signed char protects_arms;	/* v3 */
    signed char max_condition;	/* v6 */
    signed char condition_now;	/* v7 */
  };

/* ======================================================================== */
/*                       Weapons have these values.                         */
/* ======================================================================== */

struct item_weapon
  {
    char tag;
    signed short damage_p;	/* v0 */
    signed short strength;	/* v1 */
    unsigned short casts_spell; /* v2 */
    signed short attack_type;	/* v3 */
    signed short firstdice;	/* v7 */
    signed short seconddice;	/* v8 */
  };

/* ======================================================================== */
/*                       Missiles have these values.                        */
/* ======================================================================== */

struct item_missile
{
char tag;
signed char damage_p;       /* v0 - How damaged is it */
signed char strength;       /* v1 - How much damage it can absorb */
signed char aiming_time;    /* v2 - How long it takes to aim */
signed char shots_per_use;  /* v3 - Number of ammo released with each shot*/
signed char ammo_type;      /* v4 - must match ammo... */
signed char range;          /* v5 - How far it can shoot */
};

/* ======================================================================== */
/*                         Ammos have these values.                         */
/* ======================================================================== */

struct item_ammo
{
char tag;
signed char firstdice;      /* v7 - damage dice */
signed char seconddice;     /* v8 - damage dice */
signed char ammo_type;      /* v4 what kinds of ammo */
signed char shots_left;     /* v0 */
signed char total_shots;    /* v1 */
};

/* ======================================================================== */
/*                         Shields have these values.                       */
/* ======================================================================== */

struct item_shield
{
char tag;
int current_power;          /* v0 */
int max_power;              /* v1 */
};

/* ======================================================================== */
/*                   Drink Containers have these values.                    */
/* ======================================================================== */

struct item_drink_container
  {
    char tag;
    signed char max_liquid;     /* v1 */
    signed char liquid_now;     /* v0 */
    signed char liquid_type;    /* v2 */
    signed char not_poison;     /* v3 */
  };

/* ======================================================================== */
/*                         Lights have these values.                        */
/* ======================================================================== */

struct item_light
  {
    char tag;
    signed char light_lit;	/* v3 */
    signed char light_now;	/* v0 */
    signed char max_light;	/* v1 */
    signed char light_fillable;	/* v2 */
  };

/* ======================================================================== */
/*                           Tools have these values.                       */
/* ======================================================================== */

struct item_tool
  {
    char tag;
    signed char tool_type;	/* v0 */
    signed char uses;		/* v1 */
    signed char max_uses;	/* v2 */
  };

/* ======================================================================== */
/*                      Raw items have these values.                        */
/* ======================================================================== */

struct item_raw
{
  char tag;
  char type;                    /* v0 Cloth mineral wood herb etc... */
  char rank;                    /* v1 iron, steel, adamantium etc... */
};

/* ======================================================================== */
/*                        Traps have these values.                          */
/* ======================================================================== */

struct item_trap
{
  char tag;
  unsigned char location;     /* v0 */
  unsigned char type;         /* v1 */
};

/* ======================================================================== */
/*                         Vehicules have these values.                     */
/* ======================================================================== */

struct item_vehicle
  {
    char tag;
    signed char sector_use;	/* v0 */
  };

/* ======================================================================== */
/*                         Fountains have these values.                     */
/* ======================================================================== */

struct item_fountain
  {
    char tag;
    signed short liquid;	/* v0 */
    signed short spells[3];	/* v1-> */
  };

/* ======================================================================== */
/*                         Potions have these values.                       */
/* ======================================================================== */

struct item_potion
  {				/* Scrolls/pills/potions */
    char tag;
    unsigned char spell_level;	/* v0 */
    signed short spells[3];	/* v1-> */
  };

/* ======================================================================== */
/*                          Food have these values.                         */
/* ======================================================================== */

struct item_food
  {
    char tag;
    signed char hours;		/* v0 */
    signed char not_poison;	/* v3 */
  };

/* ======================================================================== */
/*                            Gems have these values.                       */
/* ======================================================================== */

struct item_gem
  {
    char tag;
    signed short gem_type;	/* v0 */
    signed short mana_now;	/* v1 */
    signed short max_mana;	/* v2 */
    unsigned short max_level;	/* v3 */
    unsigned short casts_spell; /* v4 */
  };

/* ======================================================================== */
/*                          Wands have these values.                        */
/* ======================================================================== */

struct item_wand
  {                                /* Wands/staffs */
    char tag;
    unsigned char spell_level;     /* v0 */
    signed char max_charges;       /* v1 */
    signed char current_charges;   /* v2 */
    signed short spells[3];        /* v3-> */
  };

/* ======================================================================== */
/*                       Furnitures have these values.                      */
/* ======================================================================== */

struct item_furniture
  {
    char tag;
    signed char type;		/* v0 */
    int to_room_vnum;		/* v1 */
    int gametype;               /* v3 */ /* Used for play command. */
    signed char portal_flags;	/* v5 */ /* OR!!!! if it is an anvil,
                                         this number is the maximum rank of
                                         item that can be forged on it! */
  };
/* ======================================================================== */
/*                    Siege engines have these values.                      */
/* ======================================================================== */

struct item_siege
  {
    char tag;
    signed char type;		/* v0 */
    signed char flags;          /* v1 - usually ammo type */
    signed char ammo_type;      /* v2 - uses ammo just like bows */
    signed char firing_time;    /* v3 - how long it takes to fire */
    signed char range;          /* v4 - how far it can shoot */
    short hps;                  /* v5 - how much damage it has left*/
    short max_hps;              /* v6 - how much damage it can take */
    
  };

/* ======================================================================== */
/*                       Containers have these values.                      */
/* ======================================================================== */

struct item_container
  {
    char tag;
    int max_weight;		/* v0 */
    int flags;   		/* v1 */
    int key_vnum;		/* v2 */
    int money;			/* v8 */
    int trap_type;              /* v3 */
    char reason_for_death[30];
    char looted_by[30];
    char looted_by_two[30];
  };

/* ======================================================================== */
/*                      Climbable items have these values.                  */
/* ======================================================================== */

struct item_climbable
  {
    char tag;
    signed char up_down;	/* v0 */
    int above;			/* v2 */
    int below;			/* v3 */
  };

/* ======================================================================== */
/*                        Books items have these values.                    */
/* ======================================================================== */

struct item_book
  {
    char tag;
    signed short teaches;	/* v0 */
  };

/* ======================================================================== */
/*                               Time info data                             */
/* ======================================================================== */

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



/* ======================================================================== */
/*   Weather compatibility followed from Theisles.. may be different than   */
/*                       expected though... warning!                        */
/* ======================================================================== */

struct weather_data
  {
    int mmhg;		/* Mercury mm */
    short temperature;	/* Farenheight temp */
    int change;		/* Last change */
    short sky;		/* Sky value */
    short sunlight;	/* Sunlight value */
    short winddir;	/* Wind direction */
    short windspeed;	/* Wind speed */
  };

/* ======================================================================== */
/*                            Item infos                                    */
/* ======================================================================== */

struct item_info
{
  char name[20];        /* The name of the item type */
  int  number;          /* The actual type number */
  char desc[200];       /* Brief description of what this type of item does. */
};

/* ======================================================================== */
/* The bidding is messy, but it's a port from long ago when I wrote it for  */
/*                           midpoint void...                               */
/* ======================================================================== */

struct bid_data
  {
    char fighters[2][17];	/*[0] and [1] hold the two fighters' names */
    char bidders[50][17];	/*Character names of bidders (didn't to structs cuz 
                                  of quitting/etc */
    long bids[50];		/*actually monetary bid */
    bool bidfor[50];		/*FALSE for fighter 0, TRUE for fighter 1 */
    bool taking_bids;		/*Are we still up for bidding or has the fight begun? */
    int waitticks;
  };

    /*+------------------------------------------------------------+*/
    /*| Ranking data holds top MAX_RANKING_DATA on multiple topics |*/
    /*+------------------------------------------------------------+*/

struct rank_data
{
  char name[17];
  float value;
  int alignment;
};

/* ======================================================================== */
/*        Semi-compatibility with Theisles, but nothing guarenteed!         */
/* ======================================================================== */

struct descriptor_data
  {
    socket_t descriptor;        /* Actual file descriptor number */
    DESCRIPTOR_DATA *next;
    DESCRIPTOR_DATA *snoop_by;	/* Snooping by another descriptor */
    CHAR_DATA *original;	/* Original, for use in switching into mobs */
    CHAR_DATA *character;	/* player this descriptor is attached to */
    int timeout_counter;	/* Login screen timeout counter */
    short connected;		/* Connect state */
    int atimes;			/* Authorization ident attempts */
    socket_t auth_fd;		/* Authorization ident file desc */
    int auth_state;		/* Authorization state */
    int auth_inc;
    char abuf[100];		/* Authorization buffer for in/out */
    char host[30];		/* Hostname this player comes from */
    char hosttwo[30];		/* Host prefix for extra checking */
    char *hostname;		/* Hostname.  Unused due to slow dns lookups */
    char *username;		/* Username result from ident */
    int max_outbuf;		/* Maximum outbuffer size used so far.  Outbuffer
				   is allocated in 256 byte chunks, and can
				   grow depending on how much text needs to
				   be in the buffer at once. */
    char inbuf[2002];		/* Input buffer */
    char incomm[2004];		/* Input command buffer */
    char inlast[2004];		/* Last Input buffer contents */
    int repeat;			/* Repeat count; catch spammers */
    char *outbuf;		/* Output buffer pointer */
    char *showstr_head;		/* Head of string pausing */
    char *showstr_point;	/* Pointer to showstring string pausing */
    void *pEdit;		/* Pointer to structure currently editing */
    int outsize;		/* Output size */
    int outtop;			/* Output max */
    int location;		/* Location in fullscreen editor */
    char **pString;		/* Pointer to string currently editing */
    int fdpair[2];		/* File desc pair for shelling */
    short roll[NUM_ROLLS];      /* Rolling choice for each option (current = 4) */
    int act;                    /* Combines a lot of other stuff */
  };

/* ======================================================================== */
/*  Theisles and mortal conquest compat.  Yes, I copied their file parsing  */
/*   and general helpfile format ideas! However, since it's not the exact   */
/*           same code, I can't guarentee files will be compat.             */
/* ======================================================================== */

struct help_data
  {
    HELP_DATA *next;
    short level;	/* Minimum level to see this helpfile */
    char *keyword;	/* Keyword list to get this helpfile */
    char *text;		/* Actual help text */
  };

/* ======================================================================== */
/*                           CHANNELS follow..                              */
/* ======================================================================== */

#define TO_ALL -2
#define TO_SAME -1

struct channel_type
  {
    CHANNEL *next;
    bool clan;		/* Clan channel? */
    bool clan2;		/* Sect channel? */
    char *channel_name;	/* Channel name */
    char *commands[3];	/* Commands to use this channel */
    int level;		/* Level to use this channel */
    int to_level;	/* Channel is seen by all higher than this level */
    char *color;	/* Color of this channel for newbies */
    int moves;		/* Takes this amount of moves to use channel */
    char to_align;      /* 1 = same align as you  2 = good  3 = evil
                           4 = both aligns */
  };

/* ======================================================================== */
/*                              Shop Data                                   */
/*                            Not compatible                                */
/* ======================================================================== */

struct shop_data
  {
    SHOP_DATA *next;
    int keeper;			/* Vnum of shopkeeper */
    short buy_type[MAX_TRADE]; 	/* What a shopkeeper will buy */
    short profit_buy;		/* Buying profit, in percent */
    short decrease;		/* Decrease percent for multiple items */
    short items_until_decrease;	/* Decrease percent after this many items */
    short profit_sell;		/* Selling profit, in percent */
    unsigned char open_hour;	/* Time the shop opens */
    unsigned char close_hour;	/* Time the shop closes */
    int creates_vnum;		/* Shopkeeper makes this object */
    short creates_hours;	/* ever creates_hours hours. */
  };

/* ======================================================================== */
/*                              Clan Data                                   */
/* ======================================================================== */

struct clan_data
  {
    CLAN_DATA *next;		/* Next Clan in List */
    short vnum;			/* Clan vnum */
    char leader[20];		/* Name of Clan's Leader/Owner */
    char name[60];		/* Name of Clan Itself */
    int start_vnum;		/* Starting vnum of where clanhouse begins */
    short alignment;		/* 1=good,2=evil,0=neut,3=special */
    short minlev;		/* Minlevel of new members */
    char *members[100];		/* Clan members */
    SINGLE_OBJECT *storage[MAX_CLAN_STORAGE]; /* Clan storage */
    bool shitlist;
    int upgrade_level;          /* How far has this clan upgraded? */
  };

/* ======================================================================== */
/*                      Race data for player races                          */
/*                      And now player aligns too                           */
/* ======================================================================== */

struct race_data
  {
    char name[40];              /* Name of the race */
    short bonus[NUM_STATS];	/* Initial stat bonuses */
    short limits[NUM_STATS];	/* Stat limits */
    int start_room;             /* Starting room,100-110 or so 100 = newbie */
    int max_slots[3];           /* Max skills/spells/profs */
    short height_min;           /* Minimum height */
    short height_max;           /* Maximum height */
    int aff[4];
    int nat_augments;           /* Natural augments for this race...*/

   /*+------------------------------------------------------------------+*/
   /*| This is set only when the player enters the game the first time. |*/
   /*+------------------------------------------------------------------+*/

    int natarmor;               /* Natural skin armor class */
    int regen_hit_percent;      /* Hit point regeneration percent */
    int regen_move_percent;     /* Move point regenration percent */
    bool restart_race;          /* Can this race switch alignment? */

   /*+------------------------------------------------------------------+*/
   /*|  These following things are to differentiate races so that they  |*/
   /*|   are not all clones.  The 100 = normal means its a percent of   |*/
   /*|          normal. 0 = normal means its a straight number.         |*/
   /*+------------------------------------------------------------------+*/

    int attack_spell_percent;   /* Spell power bonus or penalty... 100 = normal */
    int combat_damage_bonus;    /* Natural APB 0 = normal */
    int backstab_percent;       /* Bonus to backstab damage 100 = normal*/
    int heal_percent;           /* Bonus to healing 100 = normal*/
    int hps_bonus;              /* Extra or negative hps per level 0 = normal */
    int mana_percent;           /* Natural extra or less mana 100 = normal */
    int nat_skills[3];          /* Each race has up to three natural skills. */
    short parts[4];             /* 0 = leg pairs, 1 = torsos, 2 = heads, 3 = pairs of arms */
  };

/* ======================================================================== */
/*                              Color data                                  */
/*                       Compat with mortal conquest                        */
/* ======================================================================== */

struct color_data
  {
    char code[10];
    char act_code[5];
    char name[15];
    int number;
  };

/* ======================================================================== */
/*                             Material data                                */
/* ======================================================================== */

struct material_data
  {
    char *name;
    char *colorname;
    short weight;  /* /4 for body, /5 for legs, /6 for arms, /7 for head,
                      /7 for feet, /9 for gloves */

    char strength; /* the armor durability/hp value */
    short armor;
    int cost;     /* /3 for body, /5 for legs, /5 for arms, /6 for head
                     /7 for feet, /8 for gloves, etc */

    short wpn_start_location;
    bool nametype;
    int initflags;
    short bonushit;
    short bonushp;
    short bonusmove;
    short bigbonus;
    short kickbonus;
  };

/* ======================================================================== */
/*                             Forged items                                 */
/* ======================================================================== */

struct forged_items
{
  char *name;          /* For forging of first type */
  char *name2;         /* For items of second type */
  int wear_loc;        /* Not including item_take */
  int item_type;       /* armor wpns tool etc */
  int chunk_cost;      /* How many chunks to forge this? */
  int weight_divisor;  /* Divide chunk wgt by this to make the item */
  int cost_divisor;    /* Divide cost by this */
  int num_wear_slots;  /* 1 or 2 */
  int location;        /* Upper = 0; middle = 1; lower = 2 */
  int adjust;          /* Are armor or wpn values of this type adjusted up or down? */
  int armor_location;  /* Where does this armor give ac bonus? 4 = all */
};

/* ======================================================================== */
/*                 Flag data for online creation flags                      */
/* ======================================================================== */

struct flag_data
  {
    char what_you_type[50];	/* What you type to get the flag toggled */
    char how_it_appears[50];	/* How the flag display appears */
    int flagname;		/* The actual FLAG */
  };

/* ======================================================================== */
/*                             Wearing data                                 */
/* ======================================================================== */

struct wearing_data
{
  short part_of_body;
  char what_you_type[50];
  char how_it_appears[50];
  int flagname;
  char wear_name[50];
  short num_slots;
  short weight;
};

/* ======================================================================== */
/*                               Mana data                                  */
/* ======================================================================== */

struct mna_data
{
  char what_you_type[20];       /* The name of the mana type */
  char how_it_appears[20];      /* What actually shows up */
  char color[20];               /* This is the color seen when accessed */
  char letter[3];               /* The single letter used for this */
  int flagname;                 /* The flagname associated with this mana */
  char colorname[20];           /* What color shows up on created gems */
  
};

/* ======================================================================== */
/*             Note data base is compatible with mortal conquest            */
/* ======================================================================== */

struct note_data
{
  NOTE_DATA *next;
  char *sender;         /* Note's sender */
  char *date;		/* Date it was sent */
  char *to_list;	/* List of people it is to */
  char *subject;	/* Subject of the note */
  char *text;		/* The actual note text */
  int lines;		/* Lines of text in the note */
  time_t date_stamp;	/* Date stamp for unread notes */
  int board_num;	/* Game Board number this note is located on */
  int note_type;
};

/* ======================================================================== */
/*                            Affect Data                                   */
/* ======================================================================== */

struct affect_data
{
  AFFECT_DATA *next;
  short type;		/* Affect type (gsn) */
  int aff[4];           /* Affects from this... */
  short modifier;	/* numeric modified */
  short location;	/* location modified */
  short duration;	/* duration of affect */
};


/* ======================================================================== */
/*                    Sector Data, to keep things neater.                   */
/* ======================================================================== */

struct sector_data
{
  short moves;          /* Moves required to get through this room */
  short track_timer;    /* How many hours tracks last before disappearing */
  char name_seen[40];
  char  name_typed[40];
  char  desc[200];
  char color[40];
  char colort;
};

/* ======================================================================== */
/*      Compat with mortal conquest/Theisles, but not meant for use in      */
/*                             this codebase.                               */
/* ======================================================================== */

struct attack_type
  {
    char *name;
    int hit_type;
  };

struct int_apply_type {
short learn;
};

struct con_apply_type {
short hit;
};

struct str_apply_type {
short dam;
};

struct wis_apply_type {
short practice;
};

struct weapon_damage
{
  short firstdice;
  short seconddice;
};

/* ======================================================================== */
/*                          Useful macros!!                                 */
/* ======================================================================== */

#ifdef NEW_WORLD
#define IS_IN_BOAT(ch)		FALSE
#else
#define IS_IN_BOAT(ch)        ( (ch)->ced->in_boat != NULL )
#endif

            /*+----------------------------------------------+*/
            /*| Is the character builder in a specific area? |*/
            /*+----------------------------------------------+*/

#define IS_BUILDER(ch, area)  ( (LEVEL(ch)>=LEVEL_IMMORTAL && area->open!=1 && \
				(ch->pcdata->security <= area->security \
				|| strstr( area->builders, ch->pcdata->name ) != NULL \
				|| strstr( area->builders, "All" ) != NULL \
				)) \
				|| LEVEL(ch)>=MAX_LEVEL)

#define HUNTING(ch)           ((ch)->fgt ? (ch)->fgt->hunting : NULL)


/* ======================================================================== */
/*             Basic mob prototype used to create mobiles!                  */
/* ======================================================================== */

struct mob_proto_data
  {
    MOB_PROTOTYPE *next;
    char *name;			/* Keywords used to talk about this mob */	
    char *short_descr;		/* short description "a giant cow", etc.. */
    char *long_descr;		/* Long description, shown to room */
    char *description;    	/* Full textual description */
    char *attackname;		/* Attack name, NULL for default attack type */
    SHOP_DATA *pShop;		/* Shop data, if attached to mob */
    AREA_DATA *area;		/* The area this mob saves in */
    OPTIONAL_DATA *opt;		/* Optional mob data */
    GUARD_DATA *guard;          /* Mob Guarding data */
    SPEC_PROC *spec;            /* Mob spec procs for fighting. */
    short max_in_world;		/* Maximum of this mob in the world at once */
    int yeller_number;		/*This is a unique number that
				   can be used to match a help-yeller
                                   with its helper(s) in the area. */
    char will_help;		/*Will this mob set it's hunting
				   string to the char name if another
				   mob with the same yeller_number in
                                   the area recieves a yell_message? */
    int vnum;			/* The vnum of this mob */
    unsigned char sex;		/* Mob's sex */
    short count;		/* How many mobs are there of this type? */
    short killed;		/* How many times has this mob been killed since reboot? */
    short timer;		/* Mob's timer.  Disappears after this many ticks */
    short level;		/* Mob's level */
    int act;
    int act2;
    int act3;
    int act4;
    int race_hate;              /* Races this mob hates and attacks */
    int aff[4];                 /* Standard affects on mob */
    short alignment;		/* Alignment of the mob */
    short money;		/* The amount of copper this mob has */
    short height;		/* The height of this mob, or 0 for
				   default height for mob type */
    signed char mobtype;	/* Mob type for this mob */
    short hpmult;		/* Hit point and experience multiplier. */
    short armcls;		/* Armor class. 101 = default for level */
    int hitroll;	        /* Extra hitroll. */
    int damroll;	        /* Extra damroll.  Can be - or + */
    char symbol;                /* Symbol on overhead map. */
    short color;                /* Mob color from colortable */
  };

/* ======================================================================== */
/*                 Track data for tracking, hunting                         */
/* ======================================================================== */

struct track_data
{
  void *who;		     /* Character whose tracks these are 
                                This is set to CHAR_DATA* in the case of
                                mobs and ONLINE* in the case of pcs */
  unsigned char dir;         /* 0-5 means dir_from, 6 means no from.
				10*(0-5) means dir_to, 60 means no to. */
  unsigned char timer;       /* How many hours till this thing goes poof. */
  TRACK_DATA *next;          /* Linked list in room */
};

/* ======================================================================== */
/*     Temporary fight structure, for use with players or fighting mobs     */
/* ======================================================================== */

struct fight_data
  {
    short ears;			/* Ears left, and internally used */
    char attacks;		/* Internal use */
    bool upd;			/* Internal use */
    signed char challenge;	/* Has this bloke been challenged to arena fight? */
    CHAR_DATA *leader;		/* Leader, for following */
    CHAR_DATA *master;		/* Master, for grouping, charming */
    CHAR_DATA *riding;		/* Riding for mounts */
    CHAR_DATA *mounted_by;	/* Mounted by */
    SINGLE_OBJECT *pulling;     /* Pulling this object */
    int compliance;             /* how compliant this mob is atm. */
    char *hunting;		/* Hunting for/tracking */
    CHAR_DATA *fighting;	/* Currently fighting */
    short combat_delay_count;	/* Delay ticks, internal use */
    CHAR_DATA *attackers[4];    /* Who is currently in combat with char. */
    short ground_pos;           /* Ground position */
  };

/* ======================================================================== */
/*          Internal use flags for list maintenance/checking                */
/* ======================================================================== */

#define ISMOB                 0x01	/* Is this a mob? */
#define IS_IN_FIGHTING_LIST   0x02	/* Is this person in the fighting list? */
#define IS_IN_AGGRO_LIST      0x04	/* Is this mob in the aggro list? */
#define CHAR_MODE             0x10	/* Is this player in character mode? */

/* ======================================================================== */
/*    The main character data for mob characters and player characters!     */
/* ======================================================================== */

struct char_data
  {
    signed char data_type;
    char special;		/* Contains ismob, is_in_fighting_list, etc */
    CHAR_DATA *next_fighting;	/* Next in fighting list */
    DESCRIPTOR_DATA *desc;	/* Descriptor for players, NULL for mobs */
    CHAR_DATA *gen_next;	/* General next, for AGGRO list */
    CHAR_DATA *next;		/* Next in global character list */
    CHAR_DATA *prev;            /* Prev in global character list */
    CHAR_DATA *next_in_room;	/* Next person in room list */
    REALCHAR_DATA *pcdata;	/* Player Character Data pointer */
    MOB_PROTOTYPE *pIndexData;	/* Mob prototype reference.  Kept it like DIKU
				   pIndexData so people can port code easier!
				   grr.. how annoying. */
    AFFECT_DATA *affected;	/* Linked list of affects */
    SINGLE_OBJECT *carrying;	/* Objects carrying */
    SINGLE_OBJECT *hold[MAX_HOLD]; /* Enough info for races with 3 sets of arms.
                                      If you want more arms up this too... */
    ROOM_DATA *in_room;		/* Current room character is in */
    FGT *fgt;			/* Fight data */
    int act;			/* Action bits 1 */
    int aff[4];                 /* Affect bits 0 = evasion, maladictions,
                                   1 = detect/prot_from, 2 = other prots. */
    unsigned char list;         /* Which char list is this thing on? */
    short height;		/* Height */
    short timer;		/* Timer, AFK for players, destroy for mobs */
    short wait;			/* Wait state */
    long max_hit;		/* Maximum hit points */
    long hit;			/* Hit points now */
    short max_move;		/* Maximum move points */
    short move;			/* Move points now */
    short hitroll;		/* Hitroll */
    short damroll;		/* Damroll */
    short armor;		/* General skin armor */
    signed char position;	/* Physical position */
    short coins[MAX_COINS];
    unsigned char society;      /* What if any society does this belong to? */
  };

                /*+------------------------------------+*/
                /*| Is the person in the battleground? |*/
                /*+------------------------------------+*/

#define IN_BATTLE(ch)  ((ch)->pcdata->battleground == BATTLE_FIGHTING ? 1 : 0)

                /*+------------------------------------+*/
                /*|     Is the person in the arena?    |*/
                /*+------------------------------------+*/

#define CHALLENGE(ch)           ((ch)->pcdata ? (ch)->pcdata->arena : 0)

#define IS_OPEN(area)           ((area)->area_flags & AREA_OPEN)

                /*+------------------------------------+*/
                /*|   Long description of this char?   |*/
                /*+------------------------------------+*/

#define LD(ch)                  (IS_PLAYER((ch)) ? (ch)->pcdata->long_descr : (ch)->pIndexData->long_descr)

                /*+------------------------------------+*/
                /*|   Short description of this char?  |*/
                /*+------------------------------------+*/

#define SD(ch)                  (IS_PLAYER((ch)) ? (ch)->pcdata->short_descr : (ch)->pIndexData->short_descr)

                /*+------------------------------------+*/
                /*|      Description of this char?     |*/
                /*+------------------------------------+*/

#define DSC(ch)                 (IS_PLAYER((ch)) ? (ch)->pcdata->description : (ch)->pIndexData->description)

/* ======================================================================== */
/*       Temp_str holds delayed command targets for spells, searching,      */
/*                          backstabbing, etc...                            */
/* ======================================================================== */

struct temp_str
  {
    TEMP_STR *next;		/* List for free temp_str */
    char temp_string[1024];	/* The actual string */
  };

/* ======================================================================== */
/*     JRAJRA - Thing to keep track of who has been online since the mud    */
/*             rebooted. The header will be set at bootup.                  */
/* ======================================================================== */

struct online
{ 
  signed char data_type;
  char *name;
  ONLINE *next;
  int mined;             /* Used to limit the number of mines per reboot */
  int chopped;           /* Used to limit the number of chops per reboot */
  bool located;          /* Have you located recently */
  int pk_since_locate;   /* How many times you pked since last locate */
  int notes_this_reboot; /* How many notes you have written this boot. */
  bool typed_who;
  int alignment;         /* The player's alignment */
};

/* ======================================================================== */
/*                          Potion Ingredients                              */
/* ======================================================================== */

struct potion_ingredients
{
  int gsn;
  int ingredients[10]; /* These are numbers which reference objects 561-602 */
  int timer;
  int equipment_level;
};

/* ======================================================================== */
/*              The main player character data structure!                   */
/*              This is the place to SPLURGE on memory...                   */
/* ======================================================================== */

struct pc_data
  {
    signed char data_type;
    REALCHAR_DATA *next;	/* Next player character data */
    char *pwd;			/* Password */
    char *rpwd;			/* plaintext Password */
    char *title;		/* Character's title */
    SINGLE_OBJECT *storage[MAXST]; /* Storage objects in the bank */
    char *rprompt;		/* Real string prompt */
    char *ignore[MAX_IGNORE];	/* Ignored character list */
    char *beamin;		/* Beam in message (immorts) */
    char *beamout;		/* Beam out message (immorts) */
    char *oldgrep;		/* Last grep'd command (immorts) */
    short security;		/* Security level.. UNUSED */
    short wizinvis;		/* WizInvis level */
    short deaf;			/* Deaf to these channels */
    int chan_ignore;		/* Deaf to these new style channels */
    char chan_color[30][10];	/* Channel colors */
    short pray_points;		/* Pray points, unused. */
    bool kk;			/* Show descripted rooms on maps */
    bool mb;			/* Show mobs on maps */
    bool noibm;			/* No IBM chars on maps */
    bool dbs;			/* Double space on maps? */
    char maxx;			/* Max X display on maps */
    long played;		/* Second played */
    short n_mana;		/* Natural mana */
    short n_max_mana;		/* Natural Max mana */
    short saving_throw;		/* Saving throw for spells */
    int plus_kick;              /* Extra kick bonus value */
    int plus_sneak;             /* Extra sneak bonus value */
    int plus_hide;              /* Extra hide bonus value */

            /*+----------------------------------+*/
            /*| New stuff for combat shortening. |*/
            /*+----------------------------------+*/

    int armor[4];               /* The four armor spots for chars... */

     /*+------------------------------------------------------------+*/
     /*| End of new stuff to try to cut down on combat extra CPU's. |*/
     /*+------------------------------------------------------------+*/

    int donated;		/* Donated value */
    int transport_quest;	/* Unused!!  Used internally */
    bool listen_auction;	/* Listening to the current auction bidding? */
    short colors[MAX_COLORS];	/* Colors for old style channels */
    short practice;		/* Practice sessions left. */
    short learn;		/* Learn points left. */
    bool new_exp;		/* New experience format?  Internal use */
    int voting_on;		/* Unused.. internal use */
    short nat_armor;		/* Natural armor class for skin */
    int nat_aff[4];             /* Natural affects */
    time_t logon;		/* Logon time */
    time_t last_note;           /* Last note read date-time stamp */
    char cursor;                /* Cursor position */
    short pet_move[20];		/* Pets' move points */
    int pet_hps[20];		/* Pets' hit points */
    int pet_temp[20];		/* Pet's temp values */
    short clan;                 /* Clan number */
    short clan2;                /* Sect number */
    bool bgf;			/* Battleground flag, internal use */
    char *script_flags[MAX_SCRIPT_FLAGS];/* Actual new script language flags. */
    char email[45];		/* Email address */
    int questflag;		/* Questflag, internal use */
    char remort_times;		/* Remort times.. */
    short tickcounts;		/* Spell delay, internal use */
    int auction_count;		/* Spell delay, internal use */
    short speedwalk;            /* To stop speedwalking */
    long warpoints;             /* War points */
    long total_wps;             /* Total Wps */
    unsigned long pklevels;     /* Total levels pked */
    unsigned long pkhelpers;    /* Total number of helpers used to pk */
    unsigned long pkers;        /* Total number of people req to pkill */
    int pkills;                 /* Total number of pkills */
    int pkilled;                /* Total number of times pked */
    int warmth;                 /* Warmth of the char */
    bool challenge_on;		/* Arena challenges on/off? */
    int arena_msg;		/* Arena message status */
    bool challenged;		/* Has been challenged? */
    char *challenged_by;	/* Challenged by whom? */
    short challenge_time;	/* Challenge time counter */
    TEMP_STR *temp;		/* Temp string for delay command use */
    char number_pets;		/* Number of current pets */
    short pagelen;		/* Physical page length */
    unsigned char guilds[NUM_GUILDS];
    int guild_points;		/* Guild flags */
    int resist_points;
    char no_quit;		/* No_quit timer values */
    char no_quit_pk;		/* No_quit timer values for PK fight */
    char trophy_name[MAX_TROPHY][18];	/* PKill trophy storage */
    short trophy_times[MAX_TROPHY];	/* Times PKilled these people */
    short trophy_level[MAX_TROPHY];     /* Level of victim */
    short trophy_remorts[MAX_TROPHY];   /* Remorts of victim */
    short trophy_alignment[MAX_TROPHY]; /* Alignment of victim */
    short trophy_race[MAX_TROPHY];      /* Race of victim */
    char stat[NUM_STATS];       /* str, int, wis, dex, con */
    signed char stat_mod[NUM_STATS]; /* Str, int, wis, dex, con */
    short condition[3];		/* Drunk,Thirsty,Hungry stats */
    signed char learned[SKILL_COUNT];	/* Learned level for skills and spells */
    int spell_attack_rank;      /* How well you can use attack spells. */
    int spell_defense_rank;     /* How well you use def/healing spells. */
    int spell_bits_knowledge[8];/* How well you can use each of the kinds
                                   of spell bits associated with casting. 
                                   note that 0-3 are HURT-AFF, and
                                   4-7 are REMOVE HURT - REMOVE AFF. */
    unsigned long bank;		/* Money in the bank, in copper */
    int totalkills;		/* Total kills */
    int killpoints;		/* Kill points */
    int deaths;			/* Times the player has died */
    signed char no_spam;	/* NOspam setting */
    short quiet;		/* In quite mode/busy mode/normal mode */
    char *aliasname[MAXALIAS];	/* Alias names */
    char *alias[MAXALIAS];	/* Alias expansion */

               /*+-------------------------------------+*/
               /*| Unused or disabled for the moment.. |*/
               /*+-------------------------------------+*/

    char *wvar;			/* Word variable */
    int nvar;			/* Number variable */

                           /*+-----------+*/
                           /*| Additions |*/
                           /*+-----------+*/

    char name[50];              /* Name of player */
    char *short_descr;		/* Short description of player */
    char *long_descr;		/* Long description of player */
    char *description;		/* Textual description of player */
    short alignment;		/* Player's alignment */
    int act2;			/* Player's act2, special bits */
    int act3;			/* act3 */
    int act4;			/* act4 */
    short level;		/* Player's level */
    short carry_weight;		/* Player's current carrying weight */
    short carry_number;		/* Carrying this amount of items */
    char sex;			/* Male/female */
    short race;			/* Player race this character is */
    char *last_tells[15];	/* Circular list of last tells */
    short tell_counter;		/* Tell counter "head" */
    ROOM_DATA *temp_room;	/* Temporary room, internal use */
    char maxy;			/* Max Y display on maps */
    ONLINE *online_spot;        /* JRAJRA - Players place in online list */
    char light;                 /* Amt of light the person has. */
    char command_objs;          /* Number of objects the player has that are
                                   command objects (they start command driven
                                   scripts) */
    CHAR_DATA *guarding;        /* The person this one is guarding */
    CHAR_DATA *guarded_by[4];   /* The people who are guarding this person. */
    int faction[MAX_MOB_TYPE];  /* This determines how mobs view you */
    int x;                      /* Plr location in the overhead map */
    int y;                      /* Plr location in the overhead map */
    int augments;               /* Extra augmentations */
    unsigned short board;       /* Which noteboard is this char reading? */
    time_t created;             /* When was the player created? */
    CHAR_DATA *reply;		/* Last person who sent him/her a tell */

    NOTE_DATA *pnote;		/* Writing this temp note */
    CHAR_DATA *original;	/* Original data for switching */
    short wimpy;		/* Flee at this many hit points */
    
    int fight_ops;		/* Fighting options, via 'fight' command */
    int wasroom;                /* Room before bg or arena. */
    unsigned long exp;		/* Experience, or experience worth for mobs */
    unsigned short arena;       /* Arena status */
    unsigned short battleground;/* Battleground status */
    unsigned short play;        /* What kind of betting you are doing. */
    unsigned short play_ticks;  /* How many ticks to end the game. */
    unsigned short play_outcome[10]; /* partial outcomes */
    unsigned int play_bet;    /* How much you bet */
    unsigned int play_dealer_vnum; /* Keep track of the vnum of the dealer for updates */
    unsigned int play_obj_vnum;    /* Keep track of the vnum of the object for updates */
    unsigned int play_room_vnum;   /* Keep track of the vnum of the room your start the game in for updates */

    int recent_deaths;          /* Number of times recently pkilled by*/
  };

#define GAME_DECK     0x0001
#define GAME_ROULETTE 0x0002
#define GAME_SLOTS    0x0004

#define ARENA_CHALLENGE 0x01
#define ARENA_PREPARING 0x02
#define ARENA_FIGHTING  0x04

#define BATTLE_JOINING  0x01
#define BATTLE_FIGHTING 0x02

#define PKF(ch)  (FIGHTING((ch)) && (IS_PLAYER(FIGHTING((ch)))))

#define BLOOD_NORTH      0x00000001
#define BLOOD_EAST       0x00000002
#define BLOOD_SOUTH      0x00000004
#define BLOOD_WEST       0x00000008
#define BLOOD_UP         0x00000010
#define BLOOD_DOWN       0x00000020

/* ======================================================================== */
/*                             Augments                                     */
/* ======================================================================== */

#define AUG_LEG_ARMOR     0x00000001
#define AUG_BODY_ARMOR    0x00000002
#define AUG_HEAD_ARMOR    0x00000004
#define AUG_ARM_ARMOR     0x00000008
#define AUG_BODY_STR      0x00000010
#define AUG_HAND_STR      0x00000020
#define AUG_LEG_STR       0x00000040
#define AUG_ARM_STR       0x00000080
#define AUG_HEAD_INT      0x00000100
#define AUG_HEAD_WIS      0x00000200
#define AUG_FACE_SPIKE    0x00000400
#define AUG_HAND_SPD      0x00000800
#define AUG_FOOT_SPD      0x00001000
#define AUG_LEG_SPD       0x00002000
#define AUG_FOOT_STR      0x00004000
#define AUG_FOOT_ARMOR    0x00008000
#define AUG_MANA_BOOST    0x00010000
#define AUG_CHANNEL       0x00020000
#define AUG_MENTAL_ARMOR  0x00040000
#define AUG_CONCENTRATION 0x00080000

    /*+-------------------------------------------------------------+*/
    /*| This number tells various functions where to stop counting. |*/
    /*+-------------------------------------------------------------+*/

#define MAX_AUGMENT 17

/* ======================================================================== */
/*  These are for determining what kind of a trap a particular trap can be  */
/*  used for. A trap can have more than one of these set meaning it can be  */
/*                 used for more than one kind of trap.                     */
/* ======================================================================== */

#define TRAP_FOR_ROOM          0x01
#define TRAP_FOR_DOOR          0x02
#define TRAP_FOR_OBJECT        0x04




#define SIEGE_CATAPULT        0x0001
#define SIEGE_BALLISTA        0x0002
#define SIEGE_RAM             0x0004
#define SIEGE_TOWER           0x0008
#define SIEGE_TREBUCHET       0x0010





/* ======================================================================== */
/*  These are some minerals flags which tell what kind of mineral we have   */
/*                                found.                                    */
/* ======================================================================== */

#define MINERAL_BRASS       1
#define MINERAL_BRONZE      2
#define MINERAL_COPPER      3
#define MINERAL_QUARTZ      4
#define MINERAL_IRON        5
#define MINERAL_SILVER      6
#define MINERAL_STEEL       7
#define MINERAL_GOLD        8
#define MINERAL_PLATINUM    9
#define MINERAL_OBSIDIAN    10
#define MINERAL_ONYX        11
#define MINERAL_MOLYBDENUM  12
#define MINERAL_MITHRIL     13
#define MINERAL_ADAMANTIUM  14
#define MINERAL_DIAMOND     15

/* ======================================================================== */
/*    These are the various types of hide players can use to make stuff.    */
/* ======================================================================== */

#define HIDE_SQUIRREL     1
#define HIDE_RABBIT       2
#define HIDE_RACCOON      3
#define HIDE_COW          4
#define HIDE_FOX          5
#define HIDE_DEER         6
#define HIDE_BOAR         7
#define HIDE_WOLF         8
#define HIDE_BEAR         9
#define HIDE_CAT         10
#define HIDE_DRAGON      11

/* ======================================================================== */
/*                        Guarding mobs data.                               */
/* ======================================================================== */

struct guard_datas
{
   
  char guarding_door;   /* Bits set for each direction guarded */
  char guarding_clan;   /* FOR this clan - blocks others */
  char guarding_sect;   /* Guards FOR this sect - blocks others */
  int guarding_object;  /* When obj is picked up, mob attacks */
  int guarding_mob;     /* When mob is attacked, this mob assists. */
  int assists;          /* Mob vnum it assists */
  int rescues;          /* Mob vnum it rescues */
};

/* ======================================================================== */
/*                    Optional data for mob_prototypes                      */
/* ======================================================================== */

struct optional_data
{
  short skltaught[10];  /* Skills this mob teaches */
  int guilds;           /* What guildmaster is this mob? */
};

/* ======================================================================== */
/*                       Special procedures for mobs                        */
/* ======================================================================== */

struct spec_procs
{
  int cast_spells[4];           /* Casts up to spells */
  signed char cast_percent;	/* Percent he/she will cast a spell */
  signed char warrior_percent;  /* Percent the mob does warrior stuff */
  int summons;                  /* Mob number this one summons */
  int avenger;                  /* Mob that appears when this one is killed */
  int num_avengers;             /* How many avengers show up */
  int tactics;                  /* Special things mobs can do */
  signed char range;            /* Range mob can cast */
  signed char area_percent;     /* Pct Chance it area spells */
  int switches_vnum;        /* What this mob switches to */
  unsigned char switches_hour; /* What hour this mob switches */
};

/* ======================================================================== */
/*    Liquid idea from mortal conquest, and basic compatibility was kept    */
/* ======================================================================== */

#define LIQ_WATER        0
#define LIQ_MAX         16

struct liq_type
  {
    char *liq_name;
    char *liq_color;
    short liq_affect[3];	/* 1=drunk 2=food 3=thirst */
  };

/* ======================================================================== */
/*               Extra descriptions for objects and rooms!                  */
/* ======================================================================== */

 /*+----------------------------------------------------------------------+*/
 /*| Once again.. I detest structure names like extra_descr_data, but for |*/
 /*| diku coders' sake, I made it the same as diku since the structure is |*/
 /*|          the same (I think).  I woulda called it edd.                |*/
 /*+----------------------------------------------------------------------+*/

struct extra_descr_data
  {
    DESCRIPTION_DATA *next;
    char *description;		/* The actual extra description */
    char *keyword;		/* Keyword list to see this desc */
  };

/* ======================================================================== */
/*                  Evil bits to set.. Aturion muds only                    */
/* ======================================================================== */

#define SUCK_ALL_MANA            1
#define SUCK_HALF_MANA           2
#define REMOVE_ALL_SPELLS        4
#define SUCK_HALF_HITS           8
#define SUCK_HALF_MOVES         16
#define DESTROY_OBJECT          32
#define DESTROY_RANDOM_OBJECT   64

/* ======================================================================== */
/*                    The main object prototype data!                       */
/* ======================================================================== */

struct obj_proto_data
  {
    OBJ_PROTOTYPE *next;
    AFFECT_DATA *affected;		/* Affected by these extra affects */
    AREA_DATA *area;			/* Saves in this area */
    char *name;				/* Keyword list to access object */
    char *short_descr;			/* Short description "a longsword" */
    char *long_descr;			/* Description seen when on ground */
    char *description;                  /* Description seen when looked at */
    int vnum;				/* Object vnum */
    char item_type;			/* The item type */
    char max_in_room;			/* Maximum that will pop in 1 room */
    short timer;			/* Object timer for disappearing objs */
    short level;
    int extra_flags;			/* Extra object flags, bonuses, etc */
    int wear_flags;			/* Where can this be worn? */
    int cost;				/* Cost of the object */
    short count;			/* internal use */
    short weight;			/* Weight of the object */
    int value[10];		 
    int aff[4];                         /* Gives these affects to wearer when worn. */
    char made_of;                       /* Material made of */
  };

/* ======================================================================== */
/*         Playerbase data, to finger old chars, player cleanup, etc        */
/* ======================================================================== */

struct playerbase_data
  {
    PLAYERBASE_DATA *next;
    char player_name[17];	/* Player's name */
    time_t player_last_login;	/* Last login date-time stamp */
    int player_align;           /* What alignment is the player? */
    short player_level;		/* Current player level */
    bool player_nodelete;	/* Nodelete flag? */
    char email_address[45];	/* Player's email addy */
    short player_remort_times;  /* Number of remorts the player has */
    time_t player_created;      /* Time stamp when player created. */
  };

/* ======================================================================== */
/*                        A single object's data.                           */
/* ======================================================================== */

struct obj_data
  {
    signed char data_type;
    SINGLE_OBJECT *next;
    SINGLE_OBJECT *next_content;/* Generic 'next'/containers, etc */
    SINGLE_OBJECT *contains;	/* For containers */
    SINGLE_OBJECT *in_obj;	/* Inside of object reference */
    CHAR_DATA *carried_by;	/* Carried by this player */
    OBJ_PROTOTYPE *pIndexData;	/* Reference to object prototype */
    ROOM_DATA *in_room;		/* On the ground in this room? */
    char *short_descr;		/* Short description of the object */
    char *long_descr;		/* 'On ground' description of the object */
    int extra_flags;		/* Extra object flags */
    int cost;			/* Object cost.  Change to ref back to proto */
    signed char wear_loc;       /* Location object is being worn - this is the same as the wear bits now */
    unsigned char wear_num;     /* The number that this is being worn because of multiple possible arms and legs and things we need to do this. */
    short timer;		/* Timer on this specific object */
    unsigned char size;		/* Size of this specific object */
    void *more;			/* More data.. armor/weapon data, etc */
    AFFECT_DATA *affected;      /* This lets people enchant objects. */
  };


/* ======================================================================== */
/*               An exit.  Very small for low memory usage.                 */
/* ======================================================================== */

struct exit_data
  {
    int vnum;		/* Vnum this exit leads to */
    ROOM_DATA *to_room;	/* Room data this exit leads to */
    DOOR_DATA *d_info;	/* Optional door info structure */
  };

/* ======================================================================== */
/*                Door info structure, optional on exits                    */
/* ======================================================================== */

struct door_data
  {
    unsigned short exit_info;	/* Exit flags, mostly compat with diku */
    int key;                    /* Key required to open the door */
    char *keyword;              /* keyword for exit description */
    char *description;          /* Exit description */
    signed char maxstr;         /* Maximum door strength */
    signed char str;            /* Door strength */
    unsigned short rs_flags;    /* Reset flags for the room reset */
    char trap;                  /* This is the type of trap on the door */
  };

/* ======================================================================== */
/*   A single 'reset'.  SHOULD be compat with merc.. no promises though.    */
/* ======================================================================== */

struct reset_data
  {
    RESET_DATA *next;
    char command;	/* command (Object Mob, etc) */
    int rs_vnum;	/* Reset vnum */
    signed char loc;	/* Location or amount for shopkeeprs */
    char percent;	/* Percent chance of pop */
  };

/* ======================================================================== */
/*     Guild data structure....this is so it is easier to add new guilds.   */
/* ======================================================================== */

struct gld_data
  { 
    char what_you_see[50];      /* Name you see on score */
    char what_you_type[50];     /* What you type in to join/leave */
    int  flag;                  /* The guild bit */
    int stat_modified;          /* Which stat is modified based on
				   STR INT WIS DEX CON */
  };

/* ======================================================================== */
/*   All reset values modelled from mortal conquest/theisles values, as to  */
/*   allow compatibility in converting areas, if annyone so desires to one  */
/*                  day write the program the converts                      */
/* ======================================================================== */

#define RESET_LOC_WORN       0
#define RESET_LOC_INOBJ     -3
#define RESET_LOC_ONOBJ     -4
#define RESET_LOC_INROOM    -5
#define RESET_LOC_PREVOBJ   -6

/* ======================================================================== */
/*                         The basic AREA data                              */
/* ======================================================================== */

struct area_data
  {
    AREA_DATA *next;
    RESET_DATA *reset_first;	/* First reset in this area */
    char *name;			/* Area name */
    char *repop;		/* Repop message */
    char can_quit;		/* Can_quit status; quit rules */
    short desc_rooms;		/* Descripted room count */
    short desc_mobs;            /* Descripted mob count */
    short desc_objs;
    bool clanzone;		/* Is this a clan zone?  unused */
    bool open;			/* Open to mortals? */
    int area_flags;		/* Area flags, changed, etc */
    char *builders;		/* Builder list */
    int lvnum;			/* Lower vnum */
    short security;             /* Zone security level */
    int uvnum;			/* Upper vnum */
    short nplayer;		/* players in area */
    char *filename;		/* Area filename */
    int vnum;			/* Vnum of area */
    int room_count;		/* Rooms in area */
    int mob_count;		/* Mobs in area */
    int obj_count;		/* Objs in area */
    int x;                      /* This will be used for the "map" */
    int y;                      /* This will be used for the "map" */
    int repop_rate;		/* Repop rate in hours */
    int power;                  /* Mob power in the area... */
    int repop_counter;		/* Current repop counter */
    int alignment;              /* Which align owns this... 0 = neutral */
    ONLINE *lastkiller;         /* Who was the last player to kill amob? */
  };

/* ======================================================================== */
/*                       A single room structure                            */
/* ======================================================================== */

struct room_data
  {
    signed char data_type;
    ROOM_DATA *next;		/* Next in hashed room list */
    AREA_DATA *area;		/* Room this area is in */
    EXIT_DATA *exit[MAX_DIR];	/* Exits from this room */
    int vnum;			/* The room's vnum */
    char *name;			/* Name of the room */
    char *description;		/* The room description */
    int room_flags;		/* Room flags */
    int room_flags2;		/* More Room flags and dynamic desc flags */
    unsigned char light;	/* Light value of the room */
    unsigned char sector_type;	/* The type of sector this room is */
    TRACK_DATA *tracks;		/* Tracks in this room */
    char ibm;		        /* Overhead mapping information ibm */
    char noibm;                 /* Overhead mapping information noibm */
    char color;                 /* Room color from the color table. */
    RESET_DATA *resets;         /* Resets in that room... */
    SINGLE_OBJECT *contents;	/* Object contents of room */
    char pcs;			/* Player characters in room */
    CHAR_DATA *people;		/* People list in room */
    short coins[MAX_COINS];
    DESCRIPTION_DATA *extra_descr; /* Extra descriptions in room */
    char trap;                  /* The type of trap (if any) */
    char blood;                 /* Blood info for room... */
    char command_objs;          /* number of command obj/mob in room */
};

                       /*+-----------------------+*/
                       /*| Is a room descripted? |*/
                       /*+-----------------------+*/

#define DESCRIPTED(room)   ((room->description && room->description[0]!='\0') )

/* ======================================================================== */
/*                         A single command link                            */
/* ======================================================================== */

struct cmd_type
  {
    char *name;		/* Name of the command */
    char *help;		/* Help text on the command */
    DO_COMMAND *do_fun; /* Command executes this function */
    short level;	/* Minimum level you must be to execute command */
    short position;	/* Minimum physical position to execute command */
    short log;		/* Log command status */
    COMMAND *next;	/* hashed by starting letter */ 
  };

/* ======================================================================== */
/*  Social structure compat with theisles.. please note that the way they   */
/*          are saved/edited dynamically is VERY different!!!               */
/* ======================================================================== */

struct social_type
  {
    char name[20];
    char *char_no_arg;
    char *others_no_arg;
    char *char_found;
    char *others_found;
    char *vict_found;
    char *char_not_found;
    char *char_auto;
    char *others_auto;
    SOCIAL *next;
    SOCIAL *next_hashed;
  };

/* ======================================================================== */
/*    Maximum scrollback for channels, and maximum random pop structures.   */
/* ======================================================================== */

#define MAX_SCROLLBACK 30

/* ======================================================================== */
/*  Some ideas below from theisles, but I can't guarentee they are exactly  */
/*                              the same!                                   */
/* ======================================================================== */

#define RIDING(ch)              ((ch)->fgt ? (ch)->fgt->riding : NULL)
#define MOUNTED_BY(ch)          ((ch)->fgt ? (ch)->fgt->mounted_by : NULL)
#define MASTER(ch)              ((ch)->fgt ? (ch)->fgt->master : NULL)
#define LEADER(ch)              ((ch)->fgt ? (ch)->fgt->leader : NULL)
#define LEVEL(ch)               (IS_MOB((ch)) ? (ch)->pIndexData->level : (ch)->pcdata->level)
#define UMIN(a, b)              ((a)<(b) ? (a):(b))
#define UMAX(a, b)              ((a)>(b) ? (a):(b))
#define URANGE(a, b, c)         ((b)<(a) ? (a):((b)>(c) ? (c) : (b)))
#define LOWER(c)                ((c)>='A'&&(c)<='Z' ? (c)+'a'-'A' :(c))
#define UPPER(c)                ((c)>='a'&&(c)<='z' ? (c)+'A'-'a' :(c))
#define IS_SET(flag, bit)       ((flag)&(bit))
#define SET_BIT(var, bit)       ((var)|=(bit))
#define REMOVE_BIT(var, bit)    ((var)&=~(bit))
#define TOGGLE_BIT(var, bit)    ((var)^=(bit))
#define RNAME(ch)               (IS_PLAYER((ch)) ? (ch)->pcdata->name : (ch)->pIndexData->name)
#define OOSTR(dat, field)       (( (dat)->field != NULL            \
					  ? (dat)->field                \
					  : (dat)->pIndexData->field ))
#define STRR(dat, field)         (( (dat)->field != NULL                    \
						  ? (dat)->field                \
						  : (dat)->pIndexData->field ))
#define NST(pointer)            (pointer == NULL ? "" : pointer)
#define MARK( room )          ( SET_BIT( ( room )->room_flags, R_MARK))
#define UNMARK( room )        ( REMOVE_BIT( ( room )->room_flags, R_MARK))
#define IS_MARKED( room )     ( IS_SET( ( room )->room_flags, R_MARK))
#define TOROOM( room, y )     ( ((ROOM_DATA *) ( room )->exit[ ( y ) ]->to_room ))
#define IS_CLOSED( room, y )  ( IS_SET( ( room )->exit[( y )]->exit_info, \
				EX_CLOSED))

#define VALID_EDGE( room, y )                                              \
			      ( ( room )->exit[( y )] &&                   \
					( TOROOM(( room ), ( y ) ) != NULL ) &&   \
			      ( !IS_MARKED( TOROOM( ( room ), ( y ) ) ) ) )


/* ======================================================================== */
/*  These are the same as found in theisles. Act codes were designed to be  */
/*  almost exactly the same to allow easier code porting from base to base  */
/* ======================================================================== */

#define SEX(ch)              (IS_PLAYER((ch)) ? (ch)->pcdata->sex : (ch)->pIndexData->sex)
#define HE_SHE(ch)           ((SEX((ch)) == SEX_MALE  ) ? "he"   :  \
				(  (SEX((ch)) == SEX_FEMALE) ? "she"  : "it" ) )
#define HIS_HER(ch)          ((SEX((ch)) == SEX_MALE  ) ? "his"  :  \
				(  (SEX((ch)) == SEX_FEMALE) ? "her"  : "its" ) )
#define HIM_HER(ch)          ((SEX((ch)) == SEX_MALE  ) ? "him"  :  \
				(  (SEX((ch)) == SEX_FEMALE) ? "her"  : "it" ) )
#define IN_SUN(ch) (IS_SUNNY && (ch)->in_room && (!IS_SET((ch)->in_room->room_flags,ROOM_INDOORS))&& ((ch)->in_room->sector_type != SECT_INSIDE) && ((ch)->in_room->sector_type< SECT_CAVE) && !IS_SET((ch)->in_room->room_flags, ROOM_UNDERGROUND))

#define MASTER(ch)              ((ch)->fgt ? (ch)->fgt->master : NULL)
#define FIGHTING(ch)            ((ch)!=NULL ? ((ch)->fgt ? (ch)->fgt->fighting : NULL) : NULL)
#define IS_AWAKE(ch)            ((ch)->position > POSITION_SLEEPING || (ch)->position<0)
#define IS_MOB(ch)              (IS_SET((ch)->special,ISMOB))
#define IS_PLAYER(ch)           (!IS_SET((ch)->special,ISMOB))
#define IS_IMMORTAL(ch)         (LEVEL((ch)) >= LEVEL_IMMORTAL)
#define IS_GOD(ch)              (LEVEL((ch)) == TOP_LEVEL)
#define IS_HURT(ch, sn)         ((ch)->aff[0] & (sn))
#define IS_PROT(ch, sn)         ((ch)->aff[1] & (sn))
#define IS_AFF(ch, sn)          ((ch)->aff[2] & (sn))
#define IS_DET(ch, sn)          ((ch)->aff[3] & (sn))
#define IS_AUGMENTED(ch, sn)    ((IS_MOB((ch)) ? TRUE : (IS_SET((ch)->pcdata->augments, (sn)))))
#define ALIGN(ch)               (IS_MOB((ch)) ? (ch)->pIndexData->alignment : (ch)->pcdata->alignment)
#define MAP_INROOM (ch)         (((ch)->in_room))

/* ======================================================================== */
/*              Alignment totally revamped for "kingdoms" code              */
/* ======================================================================== */

#define GET_AC(ch)              ((ch)->armor - (IS_MOB((ch)) ? 0 : (100 - (ch)->pcdata->nat_armor)))

#define IS_OUTSIDE(ch)          (!IS_SET((ch)->in_room->room_flags, ROOM_INDOORS) && ch->in_room->sector_type !=SECT_INSIDE && ch->in_room->sector_type < SECT_CAVE)
#define WAIT_STATE(ch, npulse)  ((ch)->wait = ( ((ch)->position==POSITION_CASTING) ? ((ch)->wait): (UMAX((ch)->wait, (npulse)) ) ))
#define STRING_HITS(ch)         (percent_hit[ (URANGE(0,(PERCENTAGE((ch)->hit, (ch)->max_hit)),101))/10 ]  )

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

#define FIND_EXP(lv, r)         (translate(pow.exp_to_level,lv,NULL))

#define DIFF_ALIGN(ch, victim)  (ALIGN((ch)) != ALIGN((victim)) && !alliance[ALIGN((ch))][ALIGN((victim))])

#define FIRSTDICE(obj)          ( (obj)->pIndexData->value[7] )
#define SECONDDICE(obj)         ( (obj)->pIndexData->value[8] )
#define MANANOW(obj)            ( ((I_GEM *) (obj)->more)->mana_now )
#define TOPMANA(obj)            ( ((I_GEM *) (obj)->more)->max_mana )
#define TOPLEVEL(obj)            ( ((I_GEM *) (obj)->more)->max_level )
#define TYPEMANA(obj)           ( ((I_GEM*) (obj)->more)->gem_type)
#define CHAR_OBJ_SIZE(ch)       ( (ch)->height<40 ? 1 :                  \
				  ( (ch)->height<55 ? 2 :                \
				    ( (ch)->height<66 ? 3 :              \
				      ( (ch)->height<75 ? 4 :            \
					( (ch)->height<88 ? 5 :          \
					  ( (ch)->height<114 ? 6 : 7 )   \
					 )                               \
				       )                                 \
				     )                                   \
				   )                                     \
				 )

#define SET_OBJ_SIZE(ch,obj)    ( (obj)->size = CHAR_OBJ_SIZE(ch) )
#define GET_OBJ_SIZE(ch)        ( (obj)->size )
#define OBJ_TOO_BIG(obj,ch)     ( (obj)->size > CHAR_OBJ_SIZE(ch) )
#define OBJ_TOO_SMALL(obj,ch)   ( (obj)->size < CHAR_OBJ_SIZE(ch) )
#define OBJ_FITABLE(obj)        ( (obj)->size == 0 )
#define OBJ_ANYSIZE(obj)        ( (obj)->size == 8 )
#define OBJ_FITS(obj,ch)        ( ((obj)->size   == CHAR_OBJ_SIZE(ch) || \
				   (obj)->size+1 == CHAR_OBJ_SIZE(ch) || \
				   (obj)->size-1 == CHAR_OBJ_SIZE(ch) || \
				  OBJ_ANYSIZE((obj))) )
#define CAN_WEAR(obj, part)     (IS_SET((obj)->pIndexData->wear_flags,  part))
#define IS_OBJ_STAT(obj, stat)  (IS_SET((obj)->pIndexData->extra_flags, stat))

#define IS_IN_MELEE(ch,victim)  (!FIGHTING((ch)) || (ch)->position==POSITION_STANDING || (victim)->fgt->attackers[0]==(ch) || (victim)->fgt->attackers[1]==(ch) || (victim)->fgt->attackers[2]==(ch) || (victim)->fgt->attackers[3]==(ch))

#define NOT_WORN( obj )         ((obj)->wear_loc == WEAR_NONE || \
				 worn_flags[(obj)->wear_loc].flagname == \
                                 ITEM_WEAR_BELT)
#define IS_LIT( obj )           ( (obj)->pIndexData->item_type==ITEM_LIGHT && ((I_LIGHT *) (obj)->more)->light_now > 0 &&  \
				 IS_SET( ((I_LIGHT *) (obj)->more)->light_lit, LIGHT_LIT) )
#define NAME( ch )              (( IS_PLAYER( ch ) ? (ch)->pcdata->name : ch->pIndexData->short_descr ))
#define PERS(ch, looker) (can_see_nextdoor( looker, (ch) ) ? NAME(ch) : "Someone")
#define TPERS(ch, looker)   (can_see(looker, (ch) ) ? NAME(ch) : "Someone")
#define NOTIFY(buf, lvl, tog)       ( do_global( buf, lvl, tog | WIZ_NOTIFY ) )


/* ======================================================================== */
/*        Old Theisles and MC flag compatability... for the most part       */
/* ======================================================================== */

#define         AREA_NONE       0
#define         SEX_NONE        4

#define         AREA_CHANGED    0x00000001   /* Edited */
#define         AREA_ADDED      0x00000002   /* New Zone */
#define         AREA_CLANZONE   0x00000004   /* CLanzone or not? */
#define         AREA_HOMELAND   0x00000008   /* Homeland-no group pk restrict*/
#define         AREA_OPEN       0x00000010   /* Is this open or not? */
#define         AREA_SECTZONE   0x00000020   /* Is this a secthouse? */
#define         AREA_DANGEROUS  0x00000040   /* Is this area more dangerous? */
#define         AREA_MORE_RAINY 0x00000080   /* More rainy? */
#define         AREA_MORE_DRY   0x00000100   /* Less rainy? */
#define         AREA_MORE_FOGGY 0x00000200   /* More fog? */
#define         AREA_NO_QUIT    0x00000400   /* True means you can't quit */
#define         AREA_NO_TRANS   0x00000800   /* Spells will not get you in/out
                                                of the zone */
#define         AREA_RAIDABLE   0x00001000   /* this area can be taken over */
#define         AREA_NUKE       0x00002000   /* Don't save this area */
#define         AREA_TEMPFLAG   0x40000000   /* Temp flag on a society
						is unset a lot so don't
						use it for longterm things. */

#define         ACT_NONE        0
#define         DIR_MAX         6
#define         ROOM_NONE       0
#define         EXTRA_NONE      0
#define         EX_NONE         0
#define         ITEM_WEAR_NONE  0
#define         ITEM_NONE       0
#define         AFFECT_NONE     0

#define SPELL_HASH 204

#define LOG_ALWAYS 0
#define LOG_NEVER  1
#define LOG_NORMAL 2

/* ======================================================================== */
/*      Allows for module interface without 'command' recompile!!!!!!!!     */
/* ======================================================================== */

#ifdef WINDOWS
#define DEFINE_COMMAND(chars,function,pos,lvl,loglvl,help) \
		static bool dun=FALSE; \
		if (!dun) { \
			add_to_list((chars),(function),(pos),(lvl),(loglvl),(help)); \
			dun=TRUE; return; \
			} \
		strcpy(cl,(chars)); strcat(cl,":"); \
		if (ch) { \
			strcat(cl,NAME(ch)); \
			}	\
		if (argy) {strcat(cl,":");strcat(cl,argy);}
#else
#define DEFINE_COMMAND(chars,function,pos,lvl,loglvl,help) static bool dun=FALSE; \
		if (!dun) { \
			add_to_list((chars),(function),(pos),(lvl),(loglvl),(help)); \
			dun=TRUE; return; \
		} 
/*
		strcpy(cl,(chars)); strcat(cl,":"); \
		if (ch) { \
			strcat(cl,NAME(ch)); \
			if (argy) { \
				strcat(cl,":"); \
				strcat(cl,argy); \
			} \
		if (ch->in_room) strcat(cl,itoa(ch->in_room->vnum)); \
			else strcat(cl,"NULLROOM"); \
		} 
*/
#endif

/*
#define MARK_DEBUG(chars) strcpy(cl,(chars));
#define MARK_CHAR_DEBUG(chars,ch) \
	strcpy(cl,(chars)); strcat(cl,":"); \
	if (ch) {strcat(cl,NAME(ch)); strcat(cl,":");}
*/
#define MARK_DEBUG(c)
#define MARK_CHAR_DEBUG(c,ch)

/* ======================================================================== */
/*                  Short configurability macros!!                          */
/* ======================================================================== */

/* #define ALLOW_WHERE */

#define CAN_DROP_ITEMS_IN_ARENA(yn)    if ( !(yn) && CHALLENGE(ch)==10) {send_to_char("You may not drop anything in the arena.\n\r",ch); return;}
#define CAN_GIVE_ITEMS_IN_ARENA(yn)    if ( !(yn) && CHALLENGE(ch)==10) {send_to_char("You may not give anything to anyone in the arena.\n\r",ch); return;}
#define CAN_DROP_ITEMS_IN_BGROUND(yn)  if ( !(yn) && IN_BATTLE(ch)) {send_to_char("You may not drop items in the battleground.\n\r",ch); return;}
#define CAN_GIVE_ITEMS_IN_BGROUND(yn)  if ( !(yn) && IN_BATTLE(ch)) {send_to_char("You may not give annything to anyone inn the battleground.\n\r",ch); return;}

#define BUILDERS_CAN_GIVE(yn)        if ( !(yn) && IS_PLAYER(ch) && ch->pcdata->level>99 && ch->pcdata->level<110 ) {send_to_char("Builders cannot use the 'give' command, sorry.\n\r",ch); return;}
#define CAN_FILL_LIGHT_WHILE_LIT(yn) if ( !(yn) && IS_SET(lg->light_lit, LIGHT_LIT) ) {send_to_char("That's not a very good idea when it's lit...\n\r",ch); return;}

#define ALLOW_UNMOTIVATED_PK(yn)  return TRUE;

#define PLAYERS_DONT_GET_A_CORPSE(yn)  if ( (yn) && IS_PLAYER(ch) )

/* ======================================================================== */
/*          OF INTEREST TO SCRIPTWRITERS, SEE ALSO script.doc!!!            */
/* ======================================================================== */

#define STOP_FIGHTING(ch)             ( stop_fighting( (ch), FALSE ) )
#define STOP_BOTH_FIGHTING(ch)        ( stop_fighting( (ch), TRUE ) )
#define STOP_ALL_IN_ROOM_FIGHTING(ch) ( do_peace( (ch), "") )
#define START_FIGHTING(ch, opponent)  ( multi_hit( (ch), (opponent), TYPE_UNDEFINED) )
#define FLEE(ch)                      ( do_flee( (ch), "") )
#define DELAY_CHAR(ch, val)           ( (ch)->wait+=(val) )
#define DSAY(n, ch, text)             MARK_CHUNK((n)){do_say((ch),(text));DELAY_SCRIPT(2);}
#define SAY(ch, text)                 ( do_say( (ch), (text) ) )
#define DO_TELL(ch, recipient, text)  sprintf(tmpt,"%s %s", NAME( (recipient) ), (text)); do_tell( (ch), tmpt )
#define TELL(ch, recipient, text)     sprintf(tmpt,"%s %s", NAME( (recipient) ), (text)); do_tell( (ch), tmpt )
#define DTELL(n, ch, recipient, text) MARK_CHUNK((n)){TELL((ch),(recipient),(text));DELAY_SCRIPT(2);}
#define SOCIAL_TO(ch, to, social)     sprintf(tmpt,"%s %s", (social), NAME( (to) )); interpret( (ch), tmpt )
#define SOCIAL(ch, social)            interpret( (ch), (social) )
#define SET(thing,value)              ( (thing) = (value) )
#define ONE_COMBAT_ROUND              (  3 )
#define ONE_SECOND                    (  1 )

#define WORKS_ON_MOBS_ONLY     if (IS_PLAYER(ch)) return
#define WORKS_ON_PLAYERS_ONLY  if (IS_MOB(ch)) return

#define INTEGER(name)        static int (name)
#define TEMPSTRING(name)     char (name)[512]
#define STRING(name)         static char (name)[1024]
#define OBJECT(name)         static SINGLE_OBJECT (name)
#define PLAYER(name)         static CHAR_DATA (name)
#define MOB(name)            static CHAR_DATA (name)

#define WRITELN(text,ch)       send_to_char((text),(ch)); send_to_char("\n\r",(ch))
#define WRITE(text,ch)         send_to_char((text),(ch))
#define SHOW_TO_ROOM(text,ch)  do_recho( (ch), (text) )
#define SHOW_TO_OTHERS(text,ch) act((text),mob,NULL,ch,TO_NOTVICT)
#define EXECUTE_COMMAND(ch,text) interpret( (ch), (text) )
#define TEMPFLAG(num)           (ch->pcdata->tempflag[(num)])
#define FLAG(num)               (ch->pcdata->complete[(num)])
#define DESTROY(ch,vnum)        do_destroy( (ch), (vnum) )
#define NUM(str)                (atoi((str)))
#define AWARDXP(ch,amt)         sprintf(tmpt,"pset %s addxp %d", NAME( (ch) ), (amt)); interpret( findmob(), tmpt )
#define COINS(ch,amt)           sprintf(tmpt,"coins %d", (amt) ); interpret(ch,tmpt)
#define GIVECOINS(from,ch,amt)  sprintf(tmpt,"give %s %s", (amt), capitalize(NAME( (ch) )) ); interpret(from,tmpt)
#define GIVEITEM(from,to,item)  sprintf(tmpt,"give %s %s",(item), NAME( (to) )); interpret(from,tmpt)
#define CONTAINS(looking,str)   (!str_infix( (looking), (str) ) )
#define AWARDSKILL(ch,skill,amt) sprintf(tmpt,"award %s '%s' %d",NAME( (ch) ), (skill), (amt) ); interpret(findmob(), tmpt )
#define RAND(min,max)           ( number_range( (min), (max) ) )
#define IS_WINTER               ((time_info.month<=3 || time_info.month>19))
#define IS_SPRING               ((time_info.month>3 && time_info.month<=7))
#define IS_SUMMER               ((time_info.month>7 && time_info.month<=12))
#define IS_AUTUMN               ((time_info.month>12 && time_info.month<=19))
#define IS_RAINING              ((weather_info.sky==SKY_RAINING))
#define IS_CLEARSKY             ((weather_info.sky==SKY_CLOUDLESS))
#define IS_CLOUDY               ((weather_info.sky==SKY_CLOUDY))
#define IS_STORM                ((weather_info.sky==SKY_LIGHTNING))
#define IS_NIGHT                (weather_info.sunlight == SUN_DARK)
#define IS_DAY                  (!IS_NIGHT)
#define IS_SUNNY                (weather_info.sky == SKY_CLOUDLESS && weather_info.sunlight > SUN_DARK)

/* ======================================================================== */
/*                           Utility Defines                                */
/* ======================================================================== */

  /*+--------------------------------------------------------------------+*/
  /*| With loop, 'next' argument must be like "obj->next", or "obj_next" |*/
  /*|            Example: LOOP(ch,char_list,ch->next) { blah }           |*/
  /*+--------------------------------------------------------------------+*/

#define LOOP(thing,initial,next)  for ((thing)=(initial);(thing)!=NULL;(thing)=(next))


/* ======================================================================== */
/*                         For timing; defines                              */
/* ======================================================================== */

#define FIGHT_LOOP	0
#define CHAR_ONLY_UPD	1
#define MOBILE_UPD	2
#define FIGHT_UPD	3
#define TRANSPORT_UPD	4
#define CHAR_UPDATE	5
#define OBJ_UPDATE	6
#define AGGRO_UPDATE	7
#define INTERPRETTED	8
#define SCRIPT_INT	9
#define ALL_UPD		10
#define MT 		20

/* ======================================================================== */
/*                          All globals below!!                             */
/* ======================================================================== */

extern long average_time[MT];
extern long times_through[MT];
extern long total_time[MT];
extern long temp_time[MT];
extern long this_time[MT];
extern bool hitop;
extern bool used_flash;
extern bool actually_doing;
extern int multi_hit_damage;
extern int multi_hit_times;
extern bool victim_is_dead;
extern char *old_string_space;
extern char *help_greeting;
extern char *help_motd;
extern int areas_controlled[NUM_ALIGN];
extern int max_area_power[NUM_ALIGN];
extern char *string_space;
extern char *top_string;
extern bool wpn_broke;
extern bool being_attacked_yell;
extern bool big_group_pkill_whore;
extern char commandlog[500];
extern char prev_out[STD_LENGTH];
extern char last_out[STD_LENGTH];
extern int main_control;
extern int affect_count;
extern int roll_values[NUM_ROLLS][6][NUM_STATS][2]; /* 4 steps, 6 letter choices for each stat, lower and upper bounds for each stat..makes editing easier :)  it looks ugly but its not so bad. */
extern bool kk;
extern bool noibm;
extern bool mb;
extern bool dbs;
extern int raidable;
extern int entlab;
extern SOCIAL *social_list;
extern SOCIAL *social_hashed[255];
extern int outgoing[5];
extern char connection_names[5][5];
extern char *chan[NUM_ALIGN][30][MAX_SCROLLBACK];
extern short chan_count[NUM_ALIGN][30];
extern unsigned short resist_costs[];
extern bool supress_prompt_newline;
extern bool allow_anything;
extern bool alliance[NUM_ALIGN][NUM_ALIGN];
extern char grep[500];
extern int scrn[80][25][9];
extern int total_fgt;
extern BANK_ITEM align_bank[NUM_ALIGN];
extern BANK_ITEM clan_bank[30];
extern FILE *plrchecker;
extern FILE *corpsefile;
extern CHAR_DATA *f_first;
extern SOCIETY_DATA *society_list;
extern int top_society;
extern SINGLE_OBJECT *bg_prize[MAX_NUM_BG_PRIZES];
extern CHAR_DATA *aggro_check;
extern int ti;
extern bool oldflag;
extern DAM_MSG dmsg;
extern POWER pow;
extern SHELL *shell_first;
extern bool fLogAll;
extern CHANNEL *chan_first;
extern bool wwrap;
extern char *ascii_score;
extern char *score;
extern char *sh_score;
extern char *info;
extern char reasonfd[30];
extern CHAR_DATA *last_pkiller;
extern TO_FREE *head;
extern bool is_equipwipe;
extern CHR_FUNCTION *cf;
extern int room_chunk;
extern int obj_chunk;
extern int mob_chunk;
extern char tmpt[2048];
extern bool quit_flag;
extern bool pet_flag;
extern bool got;
extern char hugebuf_o[70000];
extern bool refresh_oldchars;
extern int current_vnum;
extern bool builder_port;
extern AREA_DATA *saving;
extern bool area_spell;
extern int max_connected;
extern short top_temp;
extern bool translate_on;
extern short combat_state;
extern PERCENT_STRUCT prcnt;
extern DAM_STRUCT damt;
extern long chars_sent;
extern bool setskills;
extern bool state_var_1;
extern char *target_name;
extern bool fBootDb;
extern int meg_sent;
extern CHAR_DATA *pedit_found;
extern char outp[80][25];
extern char colrs[80][25];
extern int area_this_reboot;
extern int pulse_timer;
extern int min_level;
extern int max_level;
extern char max_remort_times[NUM_ALIGN];
extern long day_counter;
extern int cons_damage;
extern char *const color_name[];
extern char *const dist_name[];
extern char *const percent_ded[];
extern int top_vnum_room;
extern int arena_timelimit;
extern REALCHAR_DATA base_pc;
extern PLAYERBASE_DATA *playerbase_zero;
extern ITEM_CHECK itemcheck;
extern char condition_var[500];
extern int ticks_to_reboot;
extern int ticks_to_battlefield;
extern bool changed_spells;
extern bool changed_societies;
extern const char *position_name[MAX_POSITIONS];
extern BID_DATA biddata;
extern RANK_DATA ranking_data[MAX_RANKING_DATA][RANKING_INFO];
extern bool detect_opp_align;
extern char tracking_string[SML_LENGTH];
extern CLAN_DATA *clan_index_free_2;
extern CLAN_DATA *clan_index_free;
extern bool scan_now;
extern AUCTION *auction_list;
extern int auction_number;
extern int gsn_build;
extern int gsn_alchemy;
extern int gsn_ranged;
extern int gsn_unarmed_combat;
extern int gsn_double_backstab;
extern int gsn_double_circle;
extern int gsn_double_cast;
extern int gsn_shoot;
extern int gsn_fire;
extern int gsn_throw;
extern int gsn_chop;
extern int gsn_enchant;
extern int gsn_empower;
extern int gsn_weave;
extern int gsn_stitch;
extern int gsn_mine;
extern int gsn_destroy;
extern int gsn_skin;
extern int gsn_tanning;
extern int gsn_patch;
extern int gsn_detrap;
extern int gsn_locate_trap;
extern int gsn_awareness;
extern int gsn_block;
extern int gsn_flail;
extern int gsn_critical;
extern int gsn_guard;
extern int gsn_warcry;
extern int gsn_invest;
extern int gsn_riding;
extern int gsn_backstab;
extern int gsn_penetration;
extern int gsn_grapple;
extern int gsn_swim;
extern int gsn_butcher;
extern int gsn_dodge;
extern int gsn_enhanced_dodge;
extern int gsn_riposte;
extern int gsn_shieldbash;
extern int gsn_hide;
extern int gsn_peek;
extern int gsn_pick_lock;
extern int gsn_sneak;
extern int gsn_steal;
extern int gsn_bash;
extern int gsn_track;
extern int gsn_trapset;
extern int gsn_circle;
extern int gsn_fireshield;
extern int gsn_gasshield;
extern int gsn_windshield;
extern int gsn_acidshield;
extern int gsn_chaosshield;
extern int gsn_shardshield;
extern int gsn_shockshield;
extern int gsn_iceshield;
extern int gsn_sixth_sense;
extern int gsn_disarm;
extern int gsn_enhanced_damage;
extern int gsn_enhanced_damage_two;
extern int gsn_resilience;
extern int gsn_accuracy;
extern int gsn_kick;
extern int gsn_double_kick;
extern int gsn_smash;
extern int gsn_impale;
extern int gsn_flurry;
extern int gsn_tackle;
extern int gsn_flash;
extern int gsn_parry;
extern int gsn_blink;
extern int gsn_steadiness;
extern int gsn_shield_block;
extern int gsn_rescue;
extern int gsn_second_attack;
extern int gsn_third_attack;
extern int gsn_dual_wield;
extern int gsn_dual_second;
extern int gsn_dual_third;
extern int gsn_fourth_attack;
extern int gsn_fifth_attack;
extern int gsn_pierce;
extern int gsn_light_slash;
extern int gsn_concussion;
extern int gsn_polearm;
extern int gsn_whip;
extern int gsn_heavy_slash;
extern int gsn_slashing;
extern int gsn_search;
extern int gsn_forge;
extern int gsn_graft;
extern int gsn_brew;
extern int gsn_lore;
extern int gsn_blindness;
extern int gsn_spell_reflect;
extern int gsn_chameleon;
extern int gsn_charm_person;
extern int gsn_curse;
extern int gsn_invis;
extern int gsn_poison;
extern int gsn_sleep;
extern int gsn_plague;
extern int gsn_paralyze; /* JRAJRA */
extern int gsn_wound; /* JRAJRA */
extern int gsn_confuse; /* JRAJRA */
extern int gsn_lethargy; /* JRAJRA */
extern int gsn_mindsap; /* JRAJRA */
extern char yellbuff[1000];
extern const struct attack_type attack_table[];
extern const struct liq_type liq_table[];
extern char *const dir_name[];
extern char *const dir_letter[];
extern const short rev_dir[];
extern const int blood_number[];
extern char reasonone[30];
extern HELP_DATA *help_first;
extern HELP_DATA *help_last;
extern SHOP_DATA *shop_first;
extern SHOP_DATA *shop_last;
extern TEMP_STR *temp_first;
extern TEMP_STR *temp_free;
extern BAN_DATA *ban_list;
extern CHAR_DATA *char_list[TOTAL_LIST + 1]; 
extern SPELL_DATA *spell_list[SPELL_HASH];
extern SPELL_DATA *spell_list_2[SPELL_HASH];
extern int top_spell;
extern DESCRIPTOR_DATA *descriptor_list;
extern NOTE_DATA *note_list;
extern SINGLE_OBJECT *object_list[2]; /* One for updated objects, one for static */
extern AFFECT_DATA *affect_free;
extern RESET_DATA *reset_free;
extern BAN_DATA *ban_free;
extern CHAR_DATA *char_free;
extern DESCRIPTOR_DATA *descriptor_free;
extern DESCRIPTION_DATA *extra_descr_free;
extern NOTE_DATA *note_free;
extern SINGLE_OBJECT *obj_free;
extern REALCHAR_DATA *pcdata_free;
extern MOB_DATA *npcdata_free;
extern char bug_buf[];
extern time_t current_time;
extern time_t startup_time;
extern bool fLogAll;
//extern FILE *fpReserve;
extern char log_buf[];
extern TIME_INFO_DATA time_info;
extern WEATHER_DATA weather_info;
extern MOB_PROTOTYPE *mob_index_hash[HASH_MAX];
extern OBJ_PROTOTYPE *obj_index_hash[HASH_MAX];
extern ROOM_DATA *room_hash[HASH_MAX];
extern CLAN_DATA *clan_index_hash[20];
extern CLAN_DATA *clan_index_hash_2[20];
extern char *string_hash[HASH_MAX];
extern AREA_DATA *area_first;
extern AREA_DATA *area_last;
extern ONLINE *been_online; /* JRAJRA - been online checker list */
extern int top_affect;
extern int top_area;
extern int top_ed;
extern int top_exit;
extern int top_help;
extern int top_clan;
extern int top_clan_2;
extern int top_mob_index;
extern int top_obj_index;
extern int top_reset;
extern int top_room;
extern int top_shop;
extern DESCRIPTOR_DATA *connectiond[5];
extern int top_vnum_mob;
extern int top_vnum_obj;
extern int top_vnum_room;
extern bool notracks;
extern char str_empty[1];
extern bool consid;
extern int consider_damage;

/* ======================================================================== */
/*                          All functions below                             */ 
/* ======================================================================== */

void remove_from_fighting_list (CHAR_DATA *);
void clear_fgt (CHAR_DATA *);
SOCIAL * new_social (void);
bool one_is_in_list_two (char *, char *);
bool one_is_of_two (char *, char *);
bool check_shields (CHAR_DATA *, CHAR_DATA *);
bool check_tactics (CHAR_DATA *, CHAR_DATA *);
void load_random_pops(void);
void load_new_socials(void);
void show_social (SOCIAL *, CHAR_DATA *);
void social_update_hash(void);
void xprereq (CHAR_DATA *, SPELL_DATA *);
void save_new_socials (void);
void save_helps (void);
void clear_auction(AUCTION *);
void auction_update (void);
bool replace_mob (CHAR_DATA *, int);
void menu_interp(CHAR_DATA *,char *);
void check_background_processes(void);
void save_char_tro(CHAR_DATA *);
void view_scriptassoc (CHAR_DATA *, char *);
void do_quests (CHAR_DATA *, char *);
void do_resistance (CHAR_DATA *, char *);
void reset_data (void);
void go_display(CHAR_DATA *, ROOM_DATA *, int, int, int, int);
void draw_data (CHAR_DATA *, int);
void draw_small (CHAR_DATA *);
void sml_noibm(CHAR_DATA *, ROOM_DATA *, int, int);
void sml_ibm (CHAR_DATA *, ROOM_DATA *, int, int);
void save_code (void);
void save_triggers (void);
char *show_guilds (CHAR_DATA *);
void do_spico_help (CHAR_DATA *, char *);
void do_shell (CHAR_DATA *, char *);
void show_questflags (CHAR_DATA *, char *);
void debug (CHAR_DATA *, char *);
void online_coding (CHAR_DATA *, char *);
void list_code (CHAR_DATA *, char *);
void do_build (CHAR_DATA *, char *);
void do_alchemy (CHAR_DATA *, char *);
void do_chop (CHAR_DATA *, char *);
void list_triggers (CHAR_DATA *, char *);
void script_editor (CHAR_DATA *, char *);
void do_seize (CHAR_DATA *, char *);
void do_mat (CHAR_DATA *, char *);
void do_soc_edit (CHAR_DATA *, char *);
void z_areachange (CHAR_DATA *, char *);
void do_setmiw (CHAR_DATA *, char *);
void relocate_objs (CHAR_DATA *, char *);
void relocate_mobs (CHAR_DATA *, char *);
void relocate_all_areas (CHAR_DATA *, char *);
void do_augment (CHAR_DATA *, char *);
void do_ocopy (CHAR_DATA *, char *);
void do_mcopy (CHAR_DATA *, char *);
void do_rcopy (CHAR_DATA *, char *);
void decode (CHAR_DATA *, char *);
void compare (CHAR_DATA *, char *);
void do_repop (CHAR_DATA *, char *);
void clean_oldchars (CHAR_DATA *, char *);
void clean_up (CHAR_DATA *, char *);
void p_refresh (CHAR_DATA *, char *);
void reload_pbase (CHAR_DATA *, char *);
void replace (CHAR_DATA *, char *);
void grab_hostnames (CHAR_DATA *, char *);
void reload_power_dat (CHAR_DATA *, char *);
void do_dir (CHAR_DATA *, char *);
void create_standards (CHAR_DATA *, char *);
void do_impale (CHAR_DATA *, char *);
void do_flash (CHAR_DATA *, char *);
void do_bs (CHAR_DATA *, char *);
void do_cedit2 (CHAR_DATA *, char *);
void do_say2 (CHAR_DATA *, char *);
void do_emote2 (CHAR_DATA *, char *);
void do_gtell2 (CHAR_DATA *, char *);
void finger (CHAR_DATA *, char *);
void do_color (CHAR_DATA *, char *);
void do_eeffect (CHAR_DATA *, char *);
void do_vscore (CHAR_DATA *, char *);
void do_quickscore2 (CHAR_DATA *, char *);
void do_take (CHAR_DATA *, char *);
void do_swap (CHAR_DATA *, char *);
void do_wield (CHAR_DATA *, char *);
void do_hold (CHAR_DATA *, char *);
void do_bury (CHAR_DATA *, char *);
void do_read (CHAR_DATA *, char *);
void do_clan_2 (CHAR_DATA *, char *);

void do_answer (CHAR_DATA *, char *);
void do_mplay (CHAR_DATA *, char *);
void do_sing (CHAR_DATA *, char *);
void do_flail (CHAR_DATA *, char *);
void do_investigate (CHAR_DATA *, char *);
void do_mobscatter (CHAR_DATA *, char *);
void do_scatter (CHAR_DATA *, char *);
void relocate_area (CHAR_DATA *, char *);
void relocate_rooms (CHAR_DATA *, char *);
void do_reload_help (CHAR_DATA *, char *);
void do_gic (CHAR_DATA *, char *);
void do_eic (CHAR_DATA *, char *);
void do_ic (CHAR_DATA *, char *);
void do_list_done_quests (CHAR_DATA *, char *);
void do_drag (CHAR_DATA *, char *);
void do_hitch (CHAR_DATA *, char *);
void do_unhitch (CHAR_DATA *, char *);
void do_pull (CHAR_DATA *, char *);
void do_beat (CHAR_DATA *, char *);
void do_yes (CHAR_DATA *, char *);
void do_dam (CHAR_DATA *, char *);
void do_beep (CHAR_DATA *, char *);
void do_levels (CHAR_DATA *, char *);
void disengage (CHAR_DATA *, char *);
void do_disembark (CHAR_DATA *, char *);
void do_board (CHAR_DATA *, char *);
void drawit (CHAR_DATA *, char *);
void do_drawmort (CHAR_DATA *, char *);
void do_drawmini (CHAR_DATA *, char *);
void do_drawtop (CHAR_DATA *, char *);
void do_drawrooms (CHAR_DATA *, char *);
void do_resize (CHAR_DATA *, char *);
void clean_blank_rooms (CHAR_DATA *, char *);
void do_setlevels (CHAR_DATA *, char *);
void do_battleground (CHAR_DATA *, char *);
void do_clanbuy (CHAR_DATA *, char *);
void do_purgearea (CHAR_DATA *, char *);
void do_mreset (CHAR_DATA *, char *);
void do_oreset (CHAR_DATA *, char *);
void do_topkiller (CHAR_DATA *, char *);
void do_rating (CHAR_DATA *, char *);
void do_ranking (CHAR_DATA *, char *);
void do_clanstore (CHAR_DATA *, char *);
void do_prereqs (CHAR_DATA *, char *);
void do_clanunstore (CHAR_DATA *, char *);
void do_store (CHAR_DATA *, char *);
void do_unstore (CHAR_DATA *, char *);
void do_world (CHAR_DATA *, char *);
void do_preset (CHAR_DATA *, char *);
void do_trophy (CHAR_DATA *, char *);
void do_cadd (CHAR_DATA *, char *);
void do_butcher (CHAR_DATA *, char *);
void do_scan (CHAR_DATA *, char *);
void do_silentscan (CHAR_DATA *, int);
void do_cremove (CHAR_DATA *, char *);
void do_clan (CHAR_DATA *, char *);
void do_clan_notify (CHAR_DATA *, char *);
void do_clantalk (CHAR_DATA *, char *);
void do_tackle (CHAR_DATA *, char *);
void do_repair (CHAR_DATA *, char *);
void do_guild (CHAR_DATA *, char *);
void show_guild_costs(CHAR_DATA *, char*);
void show_augment_costs(CHAR_DATA *, char*);
void mob_act_bits (CHAR_DATA *, char *);
void show_augment_list(CHAR_DATA *, char*);
void show_affect_list(CHAR_DATA *, char*);
void show_affect_list2(CHAR_DATA *, char*);
void check_stats (CHAR_DATA *);

int check_group_pts (CHAR_DATA *);
int get_num_augments(CHAR_DATA *);
int get_num_guilds (CHAR_DATA *);
int get_num_followers (CHAR_DATA *);
void check_char_fight_init (CHAR_DATA *, CHAR_DATA *);
void try_prompt (char *, CHAR_DATA *);
int get_guild_num(CHAR_DATA *);
void do_clear (CHAR_DATA *, char *);
void do_skill (CHAR_DATA *, char *);
void do_flurry (CHAR_DATA *, char *);
void syslag (CHAR_DATA *, char *);
void do_delete (CHAR_DATA *, char *);
void do_empty (CHAR_DATA *, char *);
void do_bid (CHAR_DATA *, char *);
void do_surrender (CHAR_DATA *, char *);
void do_bbounty (CHAR_DATA *, char *);
void do_2forward (CHAR_DATA *, char *);
void do_2backward (CHAR_DATA *, char *);
void do_forward (CHAR_DATA *, char *);
void do_backward (CHAR_DATA *, char *);
void do_exchange (CHAR_DATA *, char *);
void do_meditate (CHAR_DATA *, char *);
void do_bash (CHAR_DATA *, char *);
void do_coins (CHAR_DATA *, char *);
void do_ansi (CHAR_DATA *, char *);
void do_fight (CHAR_DATA *, char *);
void do_fire (CHAR_DATA *, char *);
void do_advance (CHAR_DATA *, char *);
void do_areas (CHAR_DATA *, char *);
void do_at (CHAR_DATA *, char *);
void do_tauction (CHAR_DATA *, char *);
void do_break (CHAR_DATA *, char *);
void do_alias (CHAR_DATA *, char *);
void do_auto (CHAR_DATA *, char *);
void do_autosac (CHAR_DATA *, char *);
void do_assist (CHAR_DATA *, char *);
void do_autosplit (CHAR_DATA *, char *);
void do_autoloot (CHAR_DATA *, char *);
void do_autoblink (CHAR_DATA *, char *);

void do_autoscan (CHAR_DATA *, char *);
void do_autoexit (CHAR_DATA *, char *);
void do_autoassist (CHAR_DATA *, char *);
void do_autogold (CHAR_DATA *, char *);
void do_backstab (CHAR_DATA *, char *);
void do_circle (CHAR_DATA *, char *);
void do_citymap (CHAR_DATA *, char *);
void do_beamin (CHAR_DATA *, char *);
void do_beamout (CHAR_DATA *, char *);
void do_ban (CHAR_DATA *, char *);
void do_blank (CHAR_DATA *, char *);
void do_bounty (CHAR_DATA *, char *);
void do_brief (CHAR_DATA *, char *);
void do_brandish (CHAR_DATA *, char *);
void do_buck (CHAR_DATA *, char *);
void do_buy (CHAR_DATA *, char *);
void do_cast (CHAR_DATA *, char *);
void do_new_cast (CHAR_DATA *, char *);
void do_unload(CHAR_DATA *, char *);
void do_load (CHAR_DATA *, char *);
void do_shoot (CHAR_DATA *, char *);
void do_channels (CHAR_DATA *, char *);
void do_gen_gos (CHAR_DATA *, char *);
void do_chat (CHAR_DATA *, char *);
void do_climb (CHAR_DATA *, char *);
void do_close (CHAR_DATA *, char *);
void do_commands (CHAR_DATA *, char *);
void do_compare (CHAR_DATA *, char *);
void do_config (CHAR_DATA *, char *);
void do_consider (CHAR_DATA *, char *);
void do_group_consider (CHAR_DATA *, char *);
void do_count (CHAR_DATA *, char *);
void do_credits (CHAR_DATA *, char *);
void do_deny (CHAR_DATA *, char *);
void do_description (CHAR_DATA *, char *);
void do_disarm (CHAR_DATA *, char *);
void do_disconnect (CHAR_DATA *, char *);
void do_dismount (CHAR_DATA *, char *);
void do_down (CHAR_DATA *, char *);
void do_draw (CHAR_DATA *, char *);
void do_drink (CHAR_DATA *, char *);
void do_drop (CHAR_DATA *, char *);
void do_east (CHAR_DATA *, char *);
void do_eat (CHAR_DATA *, char *);
void do_echo (CHAR_DATA *, char *);
void do_emote (CHAR_DATA *, char *);
void do_enter (CHAR_DATA *, char *);
void do_equipment (CHAR_DATA *, char *);
void do_examine (CHAR_DATA *, char *);
void do_extinguish (CHAR_DATA *, char *);
void do_fill (CHAR_DATA *, char *);
void do_flee (CHAR_DATA *, char *);
void do_fly (CHAR_DATA *, char *);
void do_follow (CHAR_DATA *, char *);
void do_sforce (CHAR_DATA *, char *);
void do_force (CHAR_DATA *, char *);
void do_freeze (CHAR_DATA *, char *);
void do_noclan (CHAR_DATA *, char *);
void do_lamer (CHAR_DATA *, char *);
void do_shitlist (CHAR_DATA *, char *);
void do_finger (CHAR_DATA *, char *);
void do_get (CHAR_DATA *, char *);
void do_give (CHAR_DATA *, char *);
void do_godtalk (CHAR_DATA *, char *);
void do_goto (CHAR_DATA *, char *);
void do_group (CHAR_DATA *, char *);
void do_gtell (CHAR_DATA *, char *);
void do_help (CHAR_DATA *, char *);
void show_help_text (CHAR_DATA *, char *);
void do_events (CHAR_DATA *, char *);
void do_news (CHAR_DATA *, char *);
void do_changes (CHAR_DATA *, char *);
void do_hide (CHAR_DATA *, char *);
void do_hire (CHAR_DATA *, char *);
void do_rawclear (CHAR_DATA *);
void do_holypeace (CHAR_DATA *, char *);
void do_mapping (CHAR_DATA *, char *);
void do_mapspam (CHAR_DATA *, char *);
void do_noibm (CHAR_DATA *, char *);
void do_viewmobs (CHAR_DATA *, char *);
void do_viewplayers (CHAR_DATA *, char *);
void do_holylag (CHAR_DATA *, char *);
void do_holyear (CHAR_DATA *, char *);
void do_holylight (CHAR_DATA *, char *);
void do_holywalk (CHAR_DATA *, char *);
void do_idea (CHAR_DATA *, char *);
void do_immtalk (CHAR_DATA *, char *);
void do_inventory (CHAR_DATA *, char *);
void do_invis (CHAR_DATA *, char *);
void do_kick  (CHAR_DATA *, char *);
void do_raceinfo (CHAR_DATA *, char *);
void do_alignmentinfo (CHAR_DATA *, char *);
void do_kill (CHAR_DATA *, char *);
void do_language (CHAR_DATA *, char *);
void do_learn (CHAR_DATA *, char *);
void do_unlearn (CHAR_DATA *, char *);
void do_levels (CHAR_DATA *, char *);
void do_list (CHAR_DATA *, char *);
void do_light (CHAR_DATA *, char *);
void do_lock (CHAR_DATA *, char *);
void do_log (CHAR_DATA *, char *);
void do_memory (CHAR_DATA *, char *);
void do_mfind (CHAR_DATA *, char *);
void do_mload (CHAR_DATA *, char *);
void do_mount (CHAR_DATA *, char *);
void do_mset (CHAR_DATA *, char *);
void do_mstat (CHAR_DATA *, char *);
void do_mwhere (CHAR_DATA *, char *);
void do_murde (CHAR_DATA *, char *);
void do_murder (CHAR_DATA *, char *);
void do_pray (CHAR_DATA *, char *);
void do_fix (CHAR_DATA *, char *);
void do_throw (CHAR_DATA *, char *);
void do_noemote (CHAR_DATA *, char *);
void do_north (CHAR_DATA *, char *);
void do_note (CHAR_DATA *, char *);
void do_notell (CHAR_DATA *, char *);
void do_notify (CHAR_DATA *, char *);
void do_ofind (CHAR_DATA *, char *);
void do_oload (CHAR_DATA *, char *);
void do_open (CHAR_DATA *, char *);
void do_order (CHAR_DATA *, char *);
void do_oset (CHAR_DATA *, char *);
void do_ostat (CHAR_DATA *, char *);
void do_owhere (CHAR_DATA *, char *);
void do_pagelen (CHAR_DATA *, char *);
void do_password (CHAR_DATA *, char *);
void no_spam (CHAR_DATA *, char *);
void spam (CHAR_DATA *, char *);
void do_glance (CHAR_DATA *, char *);
void do_prompt (CHAR_DATA *, char *);
void do_peace (CHAR_DATA *, char *);
void do_pick (CHAR_DATA *, char *);
void do_practice (CHAR_DATA *, char *);
void do_pset (CHAR_DATA *, char *);
void do_pstat (CHAR_DATA *, char *);
void do_purge (CHAR_DATA *, char *);
void do_put (CHAR_DATA *, char *);
void do_quaff (CHAR_DATA *, char *);
void do_quit (CHAR_DATA *, char *);
void do_reboo (CHAR_DATA *, char *);
void do_reboot (CHAR_DATA *, char *);
void do_recall (CHAR_DATA *, char *);
void do_recho (CHAR_DATA *, char *);
void do_recite (CHAR_DATA *, char *);
void do_remove (CHAR_DATA *, char *);
void do_rent (CHAR_DATA *, char *);
void do_reply (CHAR_DATA *, char *);
void do_report (CHAR_DATA *, char *);
void do_rescue (CHAR_DATA *, char *);
void do_guard (CHAR_DATA *, char *);
void do_rest (CHAR_DATA *, char *);
void do_return (CHAR_DATA *, char *);
void do_rfind (CHAR_DATA *, char *);
void do_rstat (CHAR_DATA *, char *);
void do_run (CHAR_DATA *, char *);
void do_unguard (CHAR_DATA *, char *);
void do_sacrifice (CHAR_DATA *, char *);
void do_control (CHAR_DATA *, char *);
void do_save (CHAR_DATA *, char *);
void do_say (CHAR_DATA *, char *);
void do_quickscore (CHAR_DATA *, char *);
void do_purse (CHAR_DATA *, char *);
void do_score (CHAR_DATA *, char *);
void do_info (CHAR_DATA *, char *);
void do_affect (CHAR_DATA *, char *);
void do_search (CHAR_DATA *, char *);
void do_think (CHAR_DATA *, char *);
void do_sell (CHAR_DATA *, char *);
void do_sheath (CHAR_DATA *, char *);
void do_shout (CHAR_DATA *, char *);
void do_shutdow (CHAR_DATA *, char *);
void do_shutdown (CHAR_DATA *, char *);
void do_silence (CHAR_DATA *, char *);
void do_sit (CHAR_DATA *, char *);
void do_sla (CHAR_DATA *, char *);
void do_play (CHAR_DATA *, char *);
void gotoxy (CHAR_DATA *, int, int);
void do_slay (CHAR_DATA *, char *);
void do_sleep (CHAR_DATA *, char *);
void do_slist (CHAR_DATA *, char *);
void do_slookup (CHAR_DATA *, char *);
void do_sneak (CHAR_DATA *, char *);
void do_snoop (CHAR_DATA *, char *);
void do_socials (CHAR_DATA *, char *);
void do_south (CHAR_DATA *, char *);
void do_speak (CHAR_DATA *, char *);
void do_armor (CHAR_DATA *, char *);
void do_split (CHAR_DATA *, char *);
void do_spells (CHAR_DATA *, char *);
void do_sset (CHAR_DATA *, char *);
void do_allsave (CHAR_DATA *, char *);
void do_stand (CHAR_DATA *, char *);
void do_steal (CHAR_DATA *, char *);
void do_string (CHAR_DATA *, char *);
void do_switch (CHAR_DATA *, char *);
void do_tell (CHAR_DATA *, char *);
void do_time (CHAR_DATA *, char *);
void do_title (CHAR_DATA *, char *);
void do_track (CHAR_DATA *, char *);
void do_track_t (CHAR_DATA *, char *);
void do_trapset (CHAR_DATA *, char *); /* JRAJRA - Set up a trap */
void do_detrap (CHAR_DATA *, char *); /* remove traps from stuff */
void do_patch (CHAR_DATA *, char *); /* repair wpns and armor */
void do_train (CHAR_DATA *, char *);
void do_transfer (CHAR_DATA *, char *);
void do_trust (CHAR_DATA *, char *);
void do_unlock (CHAR_DATA *, char *);
void do_up (CHAR_DATA *, char *);
void do_users (CHAR_DATA *, char *);
void do_value (CHAR_DATA *, char *);
void do_visible (CHAR_DATA *, char *);
void do_wake (CHAR_DATA *, char *);
void do_wear (CHAR_DATA *, char *);
void do_headbutt (CHAR_DATA *, char *);
void do_bite (CHAR_DATA *, char *);
void do_warcry (CHAR_DATA *, char *);
void do_weather (CHAR_DATA *, char *);
void do_west (CHAR_DATA *, char *);
void do_where (CHAR_DATA *, char *);
void do_who (CHAR_DATA *, char *);
void do_wimpy (CHAR_DATA *, char *);
void do_wizhelp (CHAR_DATA *, char *);
void do_wizify (CHAR_DATA *, char *);
void do_wizlock (CHAR_DATA *, char *);
void do_wizlist (CHAR_DATA *, char *);
void do_wizprompt (CHAR_DATA *, char *);
void do_wp (CHAR_DATA *, char *);
void do_yell (CHAR_DATA *, char *);
void do_study (CHAR_DATA *, char *);
void do_zap (CHAR_DATA *, char *);
void do_donate ( CHAR_DATA *, char *);
void do_alliance (CHAR_DATA *, char *);
void do_bank (CHAR_DATA *, char *); /* JRAJRA */
void do_bankset (CHAR_DATA *, char*);
void show_donate (CHAR_DATA *);
void do_deposit (CHAR_DATA *, char *);
void do_withdraw (CHAR_DATA *, char *);
void do_balance (CHAR_DATA *, char *);
void do_quiet (CHAR_DATA *, char *);
void do_convert (CHAR_DATA *, char *);
void do_award_skill (CHAR_DATA *, char *);
void do_asave (CHAR_DATA *, char *);
void do_astat (CHAR_DATA *, char *);
void do_mindex (CHAR_DATA *, char *);
void do_oindex (CHAR_DATA *, char *);
void do_cindex (CHAR_DATA *, char *);
void do_aedit (CHAR_DATA *, char *);
void do_redit (CHAR_DATA *, char *);
void do_sedit (CHAR_DATA *, char *);
void do_oedit (CHAR_DATA *, char *);
void do_medit (CHAR_DATA *, char *);
void do_sociedit (CHAR_DATA *, char *);
void do_hedit (CHAR_DATA *, char *);
void do_set_fighters (CHAR_DATA *, char *);
void do_cancel (CHAR_DATA *, char *);
void do_challenge (CHAR_DATA *, char *);
void do_acceptc (CHAR_DATA *, char *);
void do_decline (CHAR_DATA *, char *);
void do_bet (CHAR_DATA *, char *);
void do_forge (CHAR_DATA *, char *);
void do_weave (CHAR_DATA *, char *);
void do_enchant (CHAR_DATA *, char *);
void do_empower (CHAR_DATA *, char *);
void do_unenchant (CHAR_DATA *, char *);
void do_stitch (CHAR_DATA *, char *);
void do_mine (CHAR_DATA *, char *);
void do_skin (CHAR_DATA *, char *);
void do_mine (CHAR_DATA *, char *);
void do_skin (CHAR_DATA *, char *);
void do_graft (CHAR_DATA *, char *);
void do_tan (CHAR_DATA *, char *);
void do_brew (CHAR_DATA *, char *);
void do_lore (CHAR_DATA *, char *);
void do_arena (CHAR_DATA *, char *);
void do_ignore (CHAR_DATA *, char *);
void do_clan_quit (CHAR_DATA *, char *);
void do_attribute (CHAR_DATA *, char *);
void do_ggossip (CHAR_DATA *, char *);
void do_egossip (CHAR_DATA *, char *);
void do_weight (CHAR_DATA *, char *);
void do_alien (CHAR_DATA *, char *); 
void do_choosesides(CHAR_DATA *, char *); /* JRAJRA */
void do_remort (CHAR_DATA *, char *); /* JRAJRA */
void info_remort (CHAR_DATA *, char *); /* JRAJRA */
void show_remort_requirements (CHAR_DATA *, char *); /* JRAJRA */
void do_nodelete (CHAR_DATA *, char *);
void do_minmana (CHAR_DATA *, char *);
void do_noaffect (CHAR_DATA *, char *);
void do_results (CHAR_DATA *, char *);
void do_afk (CHAR_DATA *, char *);
void do_busy (CHAR_DATA *, char *);
void do_ditch (CHAR_DATA *, char *);
void do_query (CHAR_DATA *, char *);
void do_pedit (CHAR_DATA *, char *);
void do_cedit (CHAR_DATA *, char *);
void do_mana (CHAR_DATA *, char *);
void do_tan (CHAR_DATA *, char *);
void do_brew (CHAR_DATA *, char *);
void do_lore (CHAR_DATA *, char *);
void do_arena (CHAR_DATA *, char *);
void do_ignore (CHAR_DATA *, char *);
void do_clan_quit (CHAR_DATA *, char *);
void do_attribute (CHAR_DATA *, char *);
void do_ggossip (CHAR_DATA *, char *);
void do_egossip (CHAR_DATA *, char *);
void do_weight (CHAR_DATA *, char *);
void do_alien (CHAR_DATA *, char *); 
void do_choosesides(CHAR_DATA *, char *); /* JRAJRA */
void do_remort (CHAR_DATA *, char *); /* JRAJRA */
void info_remort (CHAR_DATA *, char *); /* JRAJRA */
void show_remort_requirements (CHAR_DATA *, char *); /* JRAJRA */
void do_nodelete (CHAR_DATA *, char *);
void do_minmana (CHAR_DATA *, char *);
void do_noaffect (CHAR_DATA *, char *);
void do_results (CHAR_DATA *, char *);
void do_afk (CHAR_DATA *, char *);
void do_busy (CHAR_DATA *, char *);
void do_ditch (CHAR_DATA *, char *);
void do_query (CHAR_DATA *, char *);
void do_pedit (CHAR_DATA *, char *);
void do_cedit (CHAR_DATA *, char *);
void mana (CHAR_DATA *, char *);
void do_startup_time (CHAR_DATA *, char *);
void alignswitch(CHAR_DATA *, int);
void raceswitch (CHAR_DATA *, int);
void do_players (CHAR_DATA *, char *);
void do_pdelete (CHAR_DATA *, char *);
void do_resets (CHAR_DATA *, char *);
void do_scriptr (CHAR_DATA *, char *);
void do_mark (CHAR_DATA *, char *);
int get_bfs_dir(CHAR_DATA *, void *, ROOM_DATA *, int, int);
int get_bfs (CHAR_DATA *, void *);
bool bfs_tracks (CHAR_DATA *, void *, ROOM_DATA *, int);
void undo_it (ROOM_DATA *);
int find_connection_num (DESCRIPTOR_DATA *);
void soc_edit (CHAR_DATA *, char *);
void scriptedit (CHAR_DATA *, char *);
TRACK_DATA *new_track (void *, ROOM_DATA *, int, int);
void remove_char_from_list (CHAR_DATA *);
void add_char_to_list (CHAR_DATA *);
void spell_locate_person (int, int, CHAR_DATA *, void *);
void spell_portal (CHAR_DATA *, void*);
void spell_detect_align (CHAR_DATA *);
void spell_astral (CHAR_DATA *, void*);
void spell_scry (int sn, int level, CHAR_DATA * ch, void *vo);
void spell_necromancy (SPELL_DATA * spell, CHAR_DATA * ch);
void spell_charm_person (int sn, int level, CHAR_DATA * ch, void *vo);
void spell_control_weather (int sn, int level, CHAR_DATA * ch, void *vo);
void spell_identify (int sn, int level, CHAR_DATA * ch, void *vo);
void spell_locate_object (int sn, int level, CHAR_DATA * ch, void *vo);
void spell_summon (int sn, int level, CHAR_DATA * ch, void *vo);
void spell_acid_breath (int level, CHAR_DATA * ch, void *vo);
void spell_fire_breath (int level, CHAR_DATA * ch, void *vo);
void spell_ice_breath (int level, CHAR_DATA * ch, void *vo);
void spell_shard_breath (int level, CHAR_DATA * ch, void *vo);
void spell_wind_breath (int level, CHAR_DATA * ch, void *vo);
void spell_shock_breath (int level, CHAR_DATA * ch, void *vo);
void spell_message (int sn, int level, CHAR_DATA * ch, void *vo);
void set_off_trap (CHAR_DATA *, SINGLE_OBJECT *, int);
int find_char_mana (CHAR_DATA *, SPELL_DATA *, bool);
char *star_a (int, int);
char *star_b (int, int);
bool has_key (CHAR_DATA * ch, int key);
int find_door (CHAR_DATA * ch, char *arg);
char *door_cond (int val);

void set_area_align (AREA_DATA *, int, CHAR_DATA *);
 /*+----------------------------------------------------------------------+*/
 /*|    I included many standard prototypes here, although not all are    |*/
 /*|                     implimented as of now...                         |*/
 /*+----------------------------------------------------------------------+*/

bool spec_breath_any (CHAR_DATA * ch);
bool spec_breath_acid (CHAR_DATA * ch);
bool spec_breath_fire (CHAR_DATA * ch);
bool spec_breath_frost (CHAR_DATA * ch);
bool spec_breath_gas (CHAR_DATA * ch);
bool spec_breath_lightning (CHAR_DATA * ch);
bool spec_eatcorpse (CHAR_DATA * ch);
bool spec_guard (CHAR_DATA * ch);
bool spec_janitor (CHAR_DATA * ch);
bool spec_poison (CHAR_DATA * ch);
bool spec_thief (CHAR_DATA * ch);
bool spec_warrior (CHAR_DATA * ch);


char *crypt (const char *key, const char *salt);

/*+-----------------------------------------------------------------------+*/
/*| Thanks to Cym of delta.misha.net for helping me make the mud SYSV/SUN |*/
/*|                            compatible                                 |*/
/*+-----------------------------------------------------------------------+*/

#if     defined(sun)
int fclose (FILE * stream);
int fprintf (FILE * stream, const char *format,...);
#if     defined(SYSV)
size_t fread (void *ptr, size_t size, size_t n, FILE * stream);
#else
int fread (void *ptr, int size, int n, FILE * stream);
#endif
int fseek (FILE * stream, long offset, int ptrname);
void perror (const char *s);
int ungetc (int c, FILE * stream);
#endif

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

void add_follower (CHAR_DATA *, CHAR_DATA *);
bool is_note_to (CHAR_DATA *, NOTE_DATA *);
void set_title (CHAR_DATA *, char *);
bool move_char (CHAR_DATA * ch, int door);
void make_blood (CHAR_DATA * ch, int door);
CHAR_DATA *find_keeper (CHAR_DATA * ch);
CHAR_DATA *find_repair (CHAR_DATA * ch, int rnum);
int get_cost (CHAR_DATA *, CHAR_DATA *, SINGLE_OBJECT *, bool);
void wear_obj (CHAR_DATA *, SINGLE_OBJECT *, bool);
ROOM_DATA *find_location (CHAR_DATA *, char *);
void die_follower (CHAR_DATA *);
char *get_ansi_spaces (char *);
int find_first_step (ROOM_DATA *, ROOM_DATA *);
void do_chan_notify (CHAR_DATA *, char *);
void do_restore (CHAR_DATA *, char *);
void stop_follower (CHAR_DATA *);
void update_area_control (void);
bool is_same_group (CHAR_DATA *, CHAR_DATA *);
void do_exits (CHAR_DATA *, char *);
void do_land (CHAR_DATA *, char *);
void do_look (CHAR_DATA *, char *);
void close_socket (DESCRIPTOR_DATA * dclose);
SHELL *new_shell (void);
void write_to_buffer (DESCRIPTOR_DATA *, const char *, int);
void do_global (char *, int, int);
void send_to_char (const char *, CHAR_DATA * ch);
void page_to_char (char *, CHAR_DATA * ch);
char* add_color(char *);
char* add_color_limited (char*);
void ansi_color (const char *, CHAR_DATA * ch);
void show_string (DESCRIPTOR_DATA *, char *);
void act (const char *, CHAR_DATA *, const void *, const void *, int);
void act_dam (const char *, CHAR_DATA *, SINGLE_OBJECT *, CHAR_DATA *, int);
char *anseval (const char *, CHAR_DATA *);
void boot_db (void);
void area_update (void);
void room_update (void);
void reset_room (ROOM_DATA *);
CHAR_DATA *create_mobile (MOB_PROTOTYPE *);
SINGLE_OBJECT *create_object (OBJ_PROTOTYPE *, int);
void clear_data (void *thing);
REALCHAR_DATA *new_pc (void);
CHAR_DATA *new_char (void);
SINGLE_OBJECT *new_obj (void);
char *get_extra_descr (const char *, DESCRIPTION_DATA *);
int clan_number (CHAR_DATA *);
int clan_number_2 (CHAR_DATA *);
bool scan_clan (char *arg);
bool scan_clan_2 (char *arg);
CLAN_DATA *get_clan_index (int);
CLAN_DATA *get_clan_index_2 (int);
MOB_PROTOTYPE *get_mob_index (int);
OBJ_PROTOTYPE *get_obj_index (int);
ROOM_DATA *get_room_index (int);
SPELL_DATA *spell_lookup (char *txt, int sn);
void save_area (AREA_DATA *);
void save_boats (void);
void load_boats (void);
bool check_prereq_depth (SPELL_DATA *, SPELL_DATA*);
int lookup_gsn (char *nm);
void setup_skills (void);
int tally_spsk (CHAR_DATA *, int);
int leftover_slots (CHAR_DATA *, int);
int total_slots (CHAR_DATA *, int);
void new_general_spell (CHAR_DATA *, char *);
void general_spell (SPELL_DATA *, int, CHAR_DATA *, void *);
void general_spell2 (SPELL_DATA *, int, CHAR_DATA *, void *, bool,ROOM_DATA *);
void load_spells (void);
void do_new_prereq (CHAR_DATA *, char *);
void sedit (CHAR_DATA * ch, char *argy);
void write_spells (void);
void read_damages (void);
void write_damages (void);
void read_config (void);
void write_config (void);
SPELL_DATA *new_spell (void);
SPELL_DATA *create_spell (int jj);
long translate (char *line, int level, CHAR_DATA * ch);

/*+-----------------------------------------------------------------------+*/
/*| These functions work similarly to the old Mortal Conquest ones. they  |*/
/*|                  may not behave exactly the same...                   |*/
/*+-----------------------------------------------------------------------+*/

char fread_letter (FILE *);
int fread_number (FILE *);
char *fread_string2 (FILE *, CHAR_DATA *);
char *fread_string (FILE *, CHAR_DATA *);
char *fread_string_eol (FILE *);
void fread_to_eol (FILE *);
char *fread_word (FILE *);
void *alloc_mem (int);
void *alloc_perm (int);
void free_mem (void *, int);
char *str_dupn (const char *);
char *str_dup (const char *);
void free_string (char *);
int number_fuzzy (int);
int number_range (int, int);
int number_percent (void);
int number_door (void);
int number_bits (int);
int number_mm (void);
int dice (int, int);
void smash_tilde (char *);
char * center_argument (int i, char *argy);
bool str_cmp (const char *, const char *);
bool str_prefix (const char *, const char *);
bool str_infix (const char *, const char *);
bool str_suffix (const char *, const char *);
char *capitalize (const char *);
void append_file (CHAR_DATA *, char *, char *);
void bug (const char *, int);
void log_string (const char *);
bool is_safe (CHAR_DATA *, CHAR_DATA *);
void death_cry (CHAR_DATA * ch, bool flaggy);
void violence_update (void);
void multi_hit (CHAR_DATA *, CHAR_DATA *, int);
void ground_hit (CHAR_DATA *, CHAR_DATA *, int);
void damage (CHAR_DATA *, CHAR_DATA *, int, int);
ROOM_DATA *new_room (void);
void update_pos (CHAR_DATA *);
void update_prereq (void);
void check_prereq (SPELL_DATA *);
void stop_fighting (CHAR_DATA *, bool);
void raw_kill (CHAR_DATA *, bool);
bool has_killed (CHAR_DATA *, CHAR_DATA *, int);
void do_mindexc (CHAR_DATA * ch, char *argy, bool windowed);
int get_age (CHAR_DATA * ch);
int get_stat(CHAR_DATA *, int);
int get_curr_str (CHAR_DATA *ch);
int get_curr_int (CHAR_DATA *ch);
int get_curr_wis (CHAR_DATA *ch);
int get_curr_dex (CHAR_DATA *ch);
int get_curr_con (CHAR_DATA *ch);
void small_map (CHAR_DATA *);
bool is_name (const char *, char *);
void affect_to_char (CHAR_DATA *, AFFECT_DATA *);
void affect_remove (CHAR_DATA *, AFFECT_DATA *);
void affect_strip (CHAR_DATA *, int);
void affect_strip_bits (CHAR_DATA *, int, int);
bool is_affected (CHAR_DATA *, int);
bool is_affectedt (CHAR_DATA *, int);
void affect_join (CHAR_DATA *, AFFECT_DATA *);
void char_from_room (CHAR_DATA *);
void char_to_room (CHAR_DATA *, ROOM_DATA *);
void obj_to (SINGLE_OBJECT *, void *);
void obj_from (SINGLE_OBJECT *);
void free_it (void *);
int apply_ac (SINGLE_OBJECT *, int);
SINGLE_OBJECT *get_eq_char (CHAR_DATA *, int, int);
void equip_char (CHAR_DATA *, SINGLE_OBJECT *, int, int);
SINGLE_OBJECT *get_item_held (CHAR_DATA *, int);

void NEW_POSITION(CHAR_DATA *, int);
void SUBHIT(CHAR_DATA *, int);
void ADDHIT(CHAR_DATA *, int);
void ADDMOVE(CHAR_DATA *, int);
void SUBMOVE(CHAR_DATA *, int);
void MAXHIT(CHAR_DATA *);
void MAXMOVE(CHAR_DATA *);
void check_fgt(CHAR_DATA *);
int hand_empty (CHAR_DATA *);
int belt_empty (CHAR_DATA *);
bool unequip_char (CHAR_DATA *, SINGLE_OBJECT *);
int count_obj_list (OBJ_PROTOTYPE *, SINGLE_OBJECT *);
void extract_char (CHAR_DATA *, bool);
CHAR_DATA *get_char_room (CHAR_DATA *, char *);
CHAR_DATA *get_char_room_near (CHAR_DATA *, ROOM_DATA *, int, char *);
CHAR_DATA *get_char_room_near2 (CHAR_DATA *, ROOM_DATA *, int, char *, int);
CHAR_DATA *get_char_room2 (CHAR_DATA *, ROOM_DATA *, char *);
CHAR_DATA *get_char_world (CHAR_DATA *, char *);
CHAR_DATA *get_char_world_2 (CHAR_DATA *, char *);
SINGLE_OBJECT *get_obj_type (OBJ_PROTOTYPE *);
SINGLE_OBJECT *get_obj_list (CHAR_DATA *, char *, SINGLE_OBJECT *);
SINGLE_OBJECT *get_obj_carry (CHAR_DATA *, char *);
SINGLE_OBJECT *get_obj_wear (CHAR_DATA *, char *);
SINGLE_OBJECT *get_obj_inv (CHAR_DATA *, char *argy);
SINGLE_OBJECT *get_obj_here (CHAR_DATA *, char *argy, int);
SINGLE_OBJECT *get_obj_world (CHAR_DATA *, char *argy);
void create_amount (int, CHAR_DATA *, ROOM_DATA *, SINGLE_OBJECT *);
int tally_coins (CHAR_DATA *);
char *name_amount (int);
char *sub_coins (int, CHAR_DATA *);
void fread_startup_time (void);
int get_obj_number (SINGLE_OBJECT * obj);
int get_obj_weight (SINGLE_OBJECT * obj);
int room_is_dark (ROOM_DATA *);
bool room_is_private (ROOM_DATA *);
bool can_see (CHAR_DATA *, CHAR_DATA *);
bool can_see_nextdoor (CHAR_DATA *, CHAR_DATA *);
bool can_see_obj (CHAR_DATA *, SINGLE_OBJECT *);
bool can_drop_obj (CHAR_DATA *, SINGLE_OBJECT *);
char *mob_type_name (int);
char *mob_type_attack (int);
char *item_type_name (int);
char *affect_loc_name (int);
char *affect_bit_name (int, int, int, int);
char *augment_bit_name (int);
bool find_vehicle (CHAR_DATA *, int);
void set_fighting (CHAR_DATA *, CHAR_DATA *);
void clan_check_align (CHAR_DATA *);
void clan_check_align_2 (CHAR_DATA *);
int max_mana (CHAR_DATA *);
int mana_now (CHAR_DATA *);
void natural_mana (CHAR_DATA *);
char *compr (char *txt);
char *translate_output (char *inpt);
void clan_notify (char *argy, int clan_num);
void clan_notify_2 (char *argy, int clan_num);
void group_notify (char *argy, CHAR_DATA * ch);
void save_clans (void);
void save_clans_2 (void);
void dummy_mid (void);
void dummy_npc (void);
void dummy_pc (void);
void save_playerbase (void);
void save_itemcheck (void);
void update_pbase (CHAR_DATA * ch);
int itemcheck_forchar (CHAR_DATA * ch);
void update_itemcheck (CHAR_DATA * ch);
void save_day_counter (void);
void save_ranking (void);
void save_banlist (void);
void update_weight_num (CHAR_DATA * ch);
void dummycall (void);
void check_add_trophy (CHAR_DATA * ch, CHAR_DATA * victim, int, int);
int free_trophy_slot (CHAR_DATA * ch, CHAR_DATA * victim);
void sort_trophy (CHAR_DATA *ch, char*);
int free_storage (CHAR_DATA * ch);
int free_clan_storage (CLAN_DATA * clan);
void load_corpse (CHAR_DATA * read_ch);
void save_corpse (CHAR_DATA * ch);
void check_ranking_data (CHAR_DATA * ch);
void raw_purge (ROOM_DATA * rid);
void bust_a_prompt (CHAR_DATA * ch);
void fwrite_clan_storage (int clan_num);
void fread_clan_storage (int clan_num);
void fwrite_align_bank (int align); /* JRAJRA */
void fread_align_bank (int align);/* JRAJRA */
void fread_clan_bank (int clan_num);/* JRAJRA */
void fread_alliance_data (void);
void fwrite_alliance_data (void);

void fwrite_clan_bank (int clan_num);/* JRAJRA */
void get_condition (SINGLE_OBJECT * obj);
char *strip_ansi_codes (char *txty);
void free_arena (void);
bool write_to_descriptor2 (DESCRIPTOR_DATA *, char *, int);
int get_bet_slot (char *charname);
bool check_skill(CHAR_DATA *, int);
char *bet_on (char *charname);
void end_arena (CHAR_DATA * winner, CHAR_DATA * loser);
void arena (void);
long mytime (void);
bool ignore (CHAR_DATA * blabber_char, CHAR_DATA * sent_tot);
int chars_in_group (CHAR_DATA * ch);
int rchars_in_group (CHAR_DATA * ch);
int tchars_in_group (CHAR_DATA * ch);
void bansite (char *argy);
void do_arenaecho (CHAR_DATA * ch, char *argy, bool batspam);
void give_back_money (void);
void blank_prompt (CHAR_DATA * ch);

char *format_obj_to_char (SINGLE_OBJECT *, CHAR_DATA *, bool);
char *show_look_affects (CHAR_DATA *, CHAR_DATA *);
void show_list_to_char (SINGLE_OBJECT *, CHAR_DATA *, bool, bool);
void show_char_to_char_1 (CHAR_DATA *, CHAR_DATA *);
void show_char_to_char (CHAR_DATA *, CHAR_DATA *);
void show_char_to_char_0 (CHAR_DATA *, CHAR_DATA *);
void show_equipment (CHAR_DATA *, CHAR_DATA *);
bool check_blind (CHAR_DATA *);
int words (char *s);
char *ans_uppercase (const char *);
bool remove_obj (CHAR_DATA * ch, SINGLE_OBJECT*);

void syslag (CHAR_DATA * ch, char *argy);

bool check_defense (CHAR_DATA *, CHAR_DATA *);
void play_update (CHAR_DATA *ch);
void deck_update (CHAR_DATA *ch);
void slots_update (CHAR_DATA *ch);
void roulette_update (CHAR_DATA *ch);
void give_deck_prize (CHAR_DATA *ch);
void dam_message (CHAR_DATA *, CHAR_DATA *, int, int, int);
bool can_groundfight (CHAR_DATA * ch);
void death_cry (CHAR_DATA * ch, bool flaggy);
void group_gain (CHAR_DATA * ch, CHAR_DATA * victim);
int xp_compute (CHAR_DATA * gch, CHAR_DATA * victim);
bool is_safe (CHAR_DATA * ch, CHAR_DATA * victim);
void *mem_alloc (int);
void one_hit (CHAR_DATA *, CHAR_DATA *, int, SINGLE_OBJECT *);
void raw_kill (CHAR_DATA * victim, bool used_sword);
void set_fighting (CHAR_DATA * ch, CHAR_DATA * victim);
void disarm (CHAR_DATA * ch, CHAR_DATA * victim);
void trip (CHAR_DATA * ch, CHAR_DATA * victim);
void display_toggles (CHAR_DATA * ch);
PLAYERBASE_DATA *new_player (void);
MOB_PROTOTYPE *new_mob_index (void);
DOOR_DATA *new_door (void);
TEMP_STR *new_temp (void);
void free_temp (CHAR_DATA * ch);
void check_temp (CHAR_DATA * ch);
void free_ced (CHAR_DATA * ch);
EXIT_DATA *new_exit (void);
ROOM_DATA *new_room_index (void);
AREA_DATA *get_vnum_area (int vnum);
int strtoint (char *string);
bool is_same_align (CHAR_DATA * ch, CHAR_DATA * victim);
bool is_cheating (CHAR_DATA * ch);
void hunt_victim (CHAR_DATA * ch);
CHAR_DATA *get_player_world (CHAR_DATA * ch, char *argy, bool need_see);
void do_auction (CHAR_DATA * ch, char *argy, int);
CLAN_DATA *new_clan_index (void);
CLAN_DATA *new_clan_index_2 (void);
int get_sector_number (char *argy);
void free_exit (EXIT_DATA *);
int get_exit_flag_number (char *arg);

/*+-----------------------------------------------------------------------+*/
/*| Write to descriptor. Do NOT use this for output. I leave this in only |*/
/*| so that it's compat with a diku comm package... ALWAYS use write_to_  |*/
/*|    descriptor2() ... never use just plain ole write_to_descriptor!    |*/
/*+-----------------------------------------------------------------------+*/

bool write_to_descriptor (int, char *, int);
/*int     read             ( int, char *, int ); */

void free_affect (AFFECT_DATA *);
AFFECT_DATA *new_affect (void);
OBJ_PROTOTYPE *new_obj_index (void);
DESCRIPTION_DATA *new_extra_descr (void);
void free_extra_descr (DESCRIPTION_DATA *);
OPTIONAL_DATA *new_optional (void);
GUARD_DATA *new_guard(void);
AUCTION *new_auction(void);
SPEC_PROC *new_spec_proc(void);
void new_shop (MOB_PROTOTYPE *);
void free_shop (SHOP_DATA *);
int get_mob_sex_number (char *);
SPEC_FUNCTION *get_mob_spec (char *arg);
int arg_count (char *);
AREA_DATA *new_area (void);
char *string_replace (char *orig, char *old, char *new);
char *string_unpad (char *argy);
char *string_proper (char *argy);
void mindex_window (CHAR_DATA * ch, MOB_PROTOTYPE * victim, int update);
int add_damroll (CHAR_DATA * ch);
int add_hitroll (CHAR_DATA * ch);
int GET_HITROLL (CHAR_DATA * ch);
int GET_DAMROLL (CHAR_DATA * ch);
void conv_height (CHAR_DATA * ch);
char *jumble_name (char *st, bool unjumble);
void jumble (char *name);
void unjumble (char *name, bool convert);
char *string_mana (int mana);
char *string_mana_p (int mana);
void fix_char (CHAR_DATA * ch);

bool check_body_temp (CHAR_DATA * ch);
void do_fatal (CHAR_DATA * victim, CHAR_DATA * ch, int dt);
bool IS_CORPSE_MOB (CHAR_DATA * ch);
char *rNAME (CHAR_DATA * to, CHAR_DATA * ch);
void find_people_n (CHAR_DATA * ch, int n);
char *wordwrap (char *txt, int);
int lookup_questname (char *txt);
ROOM_DATA *find_room_tag (char *tag);
char *show_room_name (CHAR_DATA * ch, char *roomname);
void place_pets (CHAR_DATA * ch);
void clear_tracks (CHAR_DATA * ch);
CHAR_DATA *find_mob (void);
CHAR_DATA *findmob (void);
void createobject (CHAR_DATA * ch, int vnum);
void destroy (CHAR_DATA * mob, int i);
void do_destroy (CHAR_DATA * mob, int i);
void hardcode_give_scripts (CHAR_DATA *, CHAR_DATA *, char *);
void hardcode_move_scripts (CHAR_DATA *, CHAR_DATA *);
void hardcode_room_enter (CHAR_DATA *, ROOM_DATA *);
void hardcode_interpret_scripts (CHAR_DATA *, CHAR_DATA *, char *);
void hardcode_saytell_scripts (CHAR_DATA *, CHAR_DATA *, char *);
/*char *itoa(int); */
void allocate_correct_datatype (SINGLE_OBJECT *, int *);
void free_m (void *);
void print_reasons (CHAR_DATA * ch, SINGLE_OBJECT * container);
char *interpret_line (char *, CHAR_DATA *);
char *natural_hurts (int);
char *natural_protects  (int);
char *natural_affects (int);
char *natural_detects (int);
char *augmentss (int);
void show_remort (CHAR_DATA *);
void show_donate (CHAR_DATA *);
void set_initial_hp (CHAR_DATA *);
void remove_from_aggro_list (CHAR_DATA *);
void add_to_fighting_list (CHAR_DATA *);
void add_to_aggro_list (CHAR_DATA *);
void set_default_prompt (CHAR_DATA *, char);
void read_power_data (void);
void read_race_info (void);
void read_align_info (void);
void place_one_mob (FILE *fp);
void read_channel_data (void);
void read_score (CHAR_DATA *, char *);
bool check_pr (char *);
void read_power_dat (void);
void fix_exits (void);
void load_society (void);
void fread_society (FILE*);
void do_society (CHAR_DATA *ch, char *argy);
void fread_and_place_mobiles (void);
void save_mobile_info (void);
void save_object_info (void);
void fread_and_place_objects (void);
SOCIETY_DATA *society_lookup (char *, int);
void fread_and_place_objects (void);
void save_object_info (void);
void update_society (void);
void copy_society (SOCIETY_DATA *, SOCIETY_DATA *);
void save_society (void);
void fwrite_caste (SOCIETY_DATA*, int, FILE *);
SOCIETY_DATA *new_society (void);
CASTE_DATA *new_caste (void);
void read_command_levels (void);
void add_level_bonuses (CHAR_DATA *, int);
int new_damage (CHAR_DATA *, int, int, int);
void channel_function (CHAR_DATA *, char *, CHANNEL *, int, char *);
void fcheck_pbase (char *);
void reset_small (void);
void area_sort (AREA_DATA *);
void save_area_list (void);
void undisplay(ROOM_DATA *);
void drawstuff(CHAR_DATA *, char *, int, int);
char *parse_txt (char *, CHAR_DATA *);
char *how_good (CHAR_DATA *, int);
char *format_obj_to (SINGLE_OBJECT *, CHAR_DATA *, bool);
void check_clear_guard (MOB_PROTOTYPE *);
void check_clear_spec (MOB_PROTOTYPE*);
void check_clear_opt (MOB_PROTOTYPE *);
void display_room (CHAR_DATA * ch, ROOM_DATA * rid, int x, int y);
void strip_nonworn (CHAR_DATA * ch);
void pc_death_penalty (CHAR_DATA * ch, CHAR_DATA * victim);
int rating (CHAR_DATA * ch);
int free_bet_slot (void);
void make_corpse (CHAR_DATA * ch);
void racehate_message (CHAR_DATA * ch);
bool can_yell (CHAR_DATA * ch);
bool check_clan (CLAN_DATA * clan, char *argy);
bool check_clan_2 (CLAN_DATA * clan, char *argy);
int clan_free (CLAN_DATA * clan);
int clan_free_2 (CLAN_DATA * clan);
int is_member (CHAR_DATA * ch, int guildflag);
bool locate_person (CHAR_DATA * ch, int level, char *argy);
bool scry (CHAR_DATA * ch, int level, char *argy);
int get_race_look (char *argy);
bool pkill (CHAR_DATA * ch, CHAR_DATA * victim);
void check_pkill (CHAR_DATA * ch, CHAR_DATA * victim);
void get_obj (CHAR_DATA * ch, SINGLE_OBJECT * obj, SINGLE_OBJECT * container, bool opp_align);
int addoffense (CHAR_DATA * ch, SINGLE_OBJECT * obj);
int addoffense2 (CHAR_DATA *ch, SINGLE_OBJECT *obj);
char *extra_bit_name (int extra_flags);
char *room_bit_name (int room_flags);
char *society_bit_name (int);
char *caste_bit_name (int);
char *act_bit_name (int act);
char *room_bit_name2 (int room_flags);
char *act_bit_name2 (int act);
char *act3_bit_name (int act);
char *act4_bit_name (int act);
char *race_bit_name (int);
char *tactics_bit_name (int);
char *plr_bit_name (int);
char *wear_bit_name (int);
char *wear_loc_name (int);
char *exit_bit_name (int);
char *area_bit_name (int);
int society_name_bit (char *);
int caste_name_bit (char *);
int area_name_bit (char *);
int area_name_bit (char *buf);
int exit_name_bit (char *name);
int mob_name_type (char *name);
int item_name_type (char *name);
int affect_name_loc (char *name);
int affect_name_bit (int, char *buf);
int augment_name_bit (char *buf);
int tactics_name_bit (char *buf);
int extra_name_bit (char *buf);
int room_name_bit (char *buf);
int room_name_bit2 (char *buf);
int act_name_bit (char *buf);
int race_name_bit (char *buf);
int wear_name_bit (char *buf);
int wear_name_loc (char *buf);

char *is_are (char *);
char *format_string (char *);
char *replace_string (char *orig, char *old, char *new);
char *get_extra_descr (const char *name, DESCRIPTION_DATA * ed);
bool use_tool (SINGLE_OBJECT * obj, int bit);
int PERCENTAGE (int amount, int max);

void interpret (CHAR_DATA * ch, char *argy);

void super_interpret (CHAR_DATA *, char *);
bool is_number (char *arg);
bool is_letter (char *arg);
int num_args (char *argy);
int number_argy (char *argy, char *arg);
char *one_argy (char *argy, char *arg_first);
char *one_argcase (char *argy, char *);
bool check_social (CHAR_DATA *, char *, char *);
SPELL_DATA *skill_lookup (char *, int);
int slot_lookup (int);
bool saves_spell (int, CHAR_DATA *);
void obj_cast_spell (int, int, CHAR_DATA *, CHAR_DATA *, SINGLE_OBJECT *);
void aedit (CHAR_DATA * ch, char *argy);
void redit (CHAR_DATA * ch, char *argy);
void renew_affect (CHAR_DATA * ch, AFFECT_DATA * aff);
void oedit (CHAR_DATA * ch, char *argy);
void medit (CHAR_DATA * ch, char *argy);
void pedit (CHAR_DATA * ch, char *argy);
void cedit (CHAR_DATA * ch, char *argy);
void sociedit (CHAR_DATA * ch, char *argy);
void hedit (CHAR_DATA * ch, char *argy);
void fwrite_char (CHAR_DATA * ch, FILE * fp);
void fwrite_storage_objs (CHAR_DATA * ch, FILE * fp);
void fwrite_obj (CHAR_DATA * ch, SINGLE_OBJECT * obj, FILE * fp, int iNest);
void fread_char (CHAR_DATA * ch, FILE * fp);
void fread_obj (CHAR_DATA * ch, FILE * fp, int storage);

void show_society (CHAR_DATA *, SOCIETY_DATA *, int line);
void string_append (CHAR_DATA * ch, char **pString);
void fullscreen_editor (CHAR_DATA * ch, char **pString);
AREA_DATA *get_area_data (int vnum);
char *fix_string (const char *str);
void string_add (CHAR_DATA * ch, char *argy);
void character_add (CHAR_DATA * ch, char *to_add);
void save_char_obj (CHAR_DATA * ch);
bool load_char_obj (DESCRIPTOR_DATA * d, char *name, bool ped);
int cur_temp (CHAR_DATA * ch);
char *first_arg (char *, char *, bool);
SPEC_FUNCTION *spec_lookup (const char *);
void advance_level (CHAR_DATA *);
void gain_exp (CHAR_DATA *, int);
void gain_condition (CHAR_DATA *, int, int value);
void update_handler (void);
int get_direction_number (char *arg);
void load_helps (FILE * fp);
int system (const char *);
bool find_str (char *, char *);
bool process_output (DESCRIPTOR_DATA *, bool);
char *first (char *s);
bool strsub (char *s, char *old, char *new);
char *ans_uppercase (const char *string);
void add_to_list (char *, DO_COMMAND, int, int, int, char *);
void scanthru_commands (void);
char *decompress (char *s);
char *compress (char *s, long len);

extern char *const mob_type[MAX_MOB_TYPE];
extern char *const mob_attack[MAX_MOB_TYPE];

/*+-----------------------------------------------------------------------+*/
/*| This is a list of all the stat word names. The order in which this is |*/
/*|  done is each stat is listed in order STR INT WIS etc...and each of   |*/
/*| the 6 choices for each stat is listed after it. This is just done so  |*/
/*|                     it's easier to add new stats.                     |*/
/*+-----------------------------------------------------------------------+*/

extern char *const att_word_name[];
 
extern const int factions[MAX_MOB_TYPE][MAX_MOB_TYPE];
extern const struct material_data materials[];
extern const struct material_data hide_data[];
extern const struct material_data cloth_data[];
extern const struct forged_items forged[];
extern const struct forged_items textiles[];
extern const struct material_data hide_types[];
extern char *const apply_loc_names[];
extern char *const stat_short_name[];
extern char *const stat_long_name[];
extern const struct material_data cloth_types[];
extern const struct str_apply_type str_app[33];
extern const struct weapon_damage wdt[];
extern struct int_apply_type int_app[33];
extern struct wis_apply_type wis_app[33];
extern struct con_apply_type con_app[33];
extern const struct color_data color_table[];
extern struct race_data race_info[RACE_COUNT];
extern struct race_data align_info[NUM_ALIGN];
extern const struct flag_data affect_flags2[];
extern const struct flag_data tactics_flags[];
extern const struct potion_ingredients pot_info[];
extern const struct mna_data mana_data[];
extern const struct flag_data affect_flags1[];
extern const struct gld_data guild_data[];
extern const struct flag_data room_flagss[];
extern const struct flag_data exit_flagss[];
extern const struct flag_data room_flags2[];
extern const struct flag_data act_1[];
extern const struct flag_data act_3[];
extern const struct flag_data act_4[];
extern const struct flag_data area_flagss[];
extern const struct flag_data extra_flagss[];
extern const struct flag_data augment_flagss[];
extern const struct flag_data society_flagss[];
extern const struct flag_data caste_flagss[];
extern const struct wearing_data worn_flags[];
extern const struct sector_data sectors[];
extern const struct flag_data spell_flagss[];
extern const struct flag_data spell_flags2[];
extern char *const percent_hit[];
extern char *const percent_tired[];
extern const struct item_info item_types[];
extern COMMAND *command_hash[256];
extern int commands;
extern int pulse_upd;
extern int pulse_char;
extern int pulse_transport;
extern int pulse_society;
extern int pulse_hour; 
extern int pulse_violence;
extern int pulse_obj;
extern int hours_up;
extern int pulse_mobile;
extern const struct mob_nfo mob_info[];
extern const char *coin_name[MAX_COINS];
extern const char *coin_color[MAX_COINS];
extern int coin_mult[MAX_COINS];

extern const char *desc_build[];
extern const char *desc_facial_feature[];
extern const char *desc_eyes_color[];
extern const char *desc_eye_aspect[];
extern const char *desc_skin_complexion[];
extern const char *desc_hair_length[];
extern const char *desc_hair_color[];
extern const char *desc_hair_style[];
extern const char *desc_facial_hair[];
extern const char *desc_fur_color[];
extern const char *num_desc_types[];

#include "script.h"

#define FIXIT(ch)   if ((ch)->in_room&&(IS_SET((ch)->in_room->room_flags,ROOM_INDOORS) ||(ch)->in_room->sector_type >= SECT_CAVE)  && IS_SET((ch)->aff[2],FLYING)&& (ch)->height >INDOOR_FLY_HEIGHT)  (ch)->aff[2]^= FLYING;