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



/*
 * Accommodate old non-Ansi compilers.
 */
#if defined(TRADITIONAL)
#define const
#define args( list )                ( )
#define DECLARE_DO_FUN( fun )       void fun( )
#define DECLARE_SPEC_FUN( fun )     bool fun( )
#define DECLARE_SPELL_FUN( fun )    void fun( )
#define DECLARE_SONG_FUN( fun )     void fun( )    /* Zor */
#else
#define args( list )                list
#define DECLARE_DO_FUN( fun )       DO_FUN    fun
#define DECLARE_SPEC_FUN( fun )     SPEC_FUN  fun
#define DECLARE_SPELL_FUN( fun )    SPELL_FUN fun
#define DECLARE_SONG_FUN( fun )     SONG_FUN  fun  /* Zor */
#endif

/* system calls */
int unlink();
int system();

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

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

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

#define NBITSL          32   /* SunRunner */

/*
 * Structure types.
 */
typedef struct  affect_data         AFFECT_DATA;
typedef struct  area_data           AREA_DATA;
typedef struct  ban_data            BAN_DATA;
typedef struct  char_data           CHAR_DATA;
typedef struct  descriptor_data     DESCRIPTOR_DATA;
typedef struct  exit_data           EXIT_DATA;
typedef struct  extra_descr_data    EXTRA_DESCR_DATA;
typedef struct  help_data           HELP_DATA;
typedef struct  kill_data           KILL_DATA;
typedef struct  mob_index_data      MOB_INDEX_DATA;
typedef struct  note_data           NOTE_DATA;
typedef struct  obj_data            OBJ_DATA;
typedef struct  obj_index_data      OBJ_INDEX_DATA;
typedef struct  pc_data             PC_DATA;
typedef struct  gen_data            GEN_DATA;
typedef struct  cd_temp_data        CD_TEMP_DATA;
typedef struct  reset_data          RESET_DATA;
typedef struct  room_index_data     ROOM_INDEX_DATA;
typedef struct  shop_data           SHOP_DATA;
typedef struct  time_info_data      TIME_INFO_DATA;
typedef struct  weather_data        WEATHER_DATA;
typedef struct  bank_data           BANK_DATA;
typedef struct  clan_data           CLAN_DATA;
typedef struct  building_data       BUILDING_DATA;
typedef struct  loot_data           LOOT_DATA;

/* MobProg - Ender */
typedef struct  mob_prog_data        MPROG_DATA;        /* mprog */
typedef struct  mob_prog_act_list    MPROG_ACT_LIST;    /* mprog */

/* ObjProg - Ender */
typedef struct  obj_prog_data        OPROG_DATA;        /* oprog */

/* VRML - SunRunner */
typedef struct  vrml_obj_data        VRML_OBJ_DATA;     /* vrml obj  */
typedef struct  vrml_mob_data        VRML_MOB_DATA;     /* vrml mob  */
typedef struct  vrml_room_data       VRML_ROOM_DATA;    /* vrml room */

typedef struct node1 { char *name;
		       int  level;
		       struct node1 *next;
		     } member_type;

typedef struct node2 { int teamnum;
		       member_type *member;
		      struct node2 *next;
		      char *teamname;
		      bool chosen;
		    } team_type;

struct    teamname_type
{
    char      *team_name;
};



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


/*
 * String and memory management parameters.
 */
#define MAX_KEY_HASH        1024
#define MAX_STRING_LENGTH   4096
#define MAX_INPUT_LENGTH    256
#define PAGELEN    		    22

#define MAX_OBJ_SERIAL	    536870912
#define MAX_OBJ_HASH		16384



/*
 * Game parameters.
 * Increase the max'es if you add more of something.
 * Adjust the pulse numbers to suit yourself.
 */
#define MAX_SOCIALS         300
#define MAX_SKILL           329 /* exact values only */
#define MAX_GROUP           97  /* exact values only */
#define MAX_IN_GROUP        20
#define MAX_SONG            10  /* exact values only */
#define MAX_CLASS           28  /* exact values only */
#define MAX_PC_RACE         16  /* exact values only */
#define MAX_CLAN            8   /* exact values only */
#define MAX_BUILDING        6   /* exact values only */
#define MAX_LEVEL           80  /* exact values only */
#define MAX_DAMAGE_MESSAGE  59  /* exact values only */
#define MAX_WARCHART        20  /* exact values only */
#define LEVEL_HERO          (MAX_LEVEL - 20)
#define LEVEL_IMMORTAL      (MAX_LEVEL -  9)
#define LEVEL_DIVINE        (MAX_LEVEL -  4)
#define LEVEL_ADMIN         (MAX_LEVEL -  1)

#define PULSE_PER_SECOND    4
#define PULSE_VIOLENCE      ( 3 * PULSE_PER_SECOND)
#define PULSE_MOBILE        ( 4 * PULSE_PER_SECOND)
#define PULSE_WEATHER       (10 * PULSE_PER_SECOND)
#define PULSE_TICK          (30 * PULSE_PER_SECOND)
#define PULSE_AREA          (60 * PULSE_PER_SECOND)
#define PULSE_AUCTION       (20 * PULSE_PER_SECOND)
#define PULSE_CLAN          (600 * PULSE_PER_SECOND)
#define PULSE_SPELL			(10 * PULSE_PER_SECOND)

#define IMPLEMENTOR     MAX_LEVEL
#define CREATOR         (MAX_LEVEL - 1)
#define SUPREME         (MAX_LEVEL - 2)
#define DEITY           (MAX_LEVEL - 3)
#define DIVINITY        (MAX_LEVEL - 4)
#define IMMORTAL        (MAX_LEVEL - 5)
#define DEMI            (MAX_LEVEL - 6)
#define ANGEL           (MAX_LEVEL - 7)
#define SAINT           (MAX_LEVEL - 8)
#define AVATAR          (MAX_LEVEL - 9)
#define HERO            LEVEL_HERO

#define CLASS_MAGE           0
#define CLASS_CLERIC         1
#define CLASS_THIEF          2
#define CLASS_WARRIOR        3
#define CLASS_PALADIN        4
#define CLASS_RANGER         5 
#define CLASS_DRUID          6
#define CLASS_BARBARIAN      7
#define CLASS_WARLOCK        8
#define CLASS_WARLORD        9
#define CLASS_NINJA         10
#define CLASS_HARPER        11
#define CLASS_CRUSADER      12
#define CLASS_PSIONICIST    13
#define CLASS_MONK          14
#define CLASS_DARKKNIGHT    15
#define CLASS_LICH          16 
#define CLASS_DEATHKNIGHT   17 
#define CLASS_GLADIATOR     18
#define CLASS_REVEREND      19
#define CLASS_WERECUB       20
#define CLASS_WEREBEAR      21
#define CLASS_WEREWOLF      22
#define CLASS_MOBILE        23  /* Jasper for mobiles only */
#define CLASS_GRECKOHYDRA   24
#define CLASS_PYROHYDRA     25
#define CLASS_GEOMANCER	    26
#define CLASS_ELEMENTALIST  27

#define MAX_THIRST       50
#define MAX_FULL         50

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

/*
 * Time and weather stuff.
 */
#define SUN_DARK        0
#define SUN_RISE        1
#define SUN_LIGHT       2
#define SUN_SET         3

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

#define NUITARI_MOON    1
#define SOLINARI_MOON   2
#define LUNITARI_MOON   4

#define SEASON_WINTER   0
#define SEASON_SPRING   1
#define SEASON_SUMMER   2
#define SEASON_AUTUMN   3

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

struct    weather_data
{
    int        mmhg;
    int        change;
    int        sky;
    int        sunlight;
    int        temperature;
    int        moon;
    int        magic;
    int        wind;
};

struct   bank_data
{
    BANK_DATA   *   next;
    char        *   name;
    char        *   vote;
    int             cvote;
    int             plevel;
    long            gold;
    long            imm_ap;
    OBJ_DATA    *   obj;
};

struct   building_data
{
   char *       name;
   long         vnum;
   long         cost;
   int          min_leader_level;
   int          ap_gained;
   int          min_clansize;
};

struct   clan_data
{
    char        *   dshort;
    char        *   dlong;
    long            fund;
    long            fee;
    long            state;
    int             clansize;
    int             bank_vnum;
    int             entrance_vnum;
    int             guardian_vnum;
    int             clan_guard_vnum;
    int             bank_guard_vnum;
    int             healer_vnum;
    int             recall;
    int             guardian;
    int             clan_guard;
    int             bank_guard;
    BANK_DATA   *   bank;
    BANK_DATA   *   last_loot;
    LOOT_DATA   *   loot;
    int             location_altar;
    long            altar_worth;
    int             lumber_mill;
    int             location_lumber_mill;
    int             blacksmith;
    int             location_blacksmith;
    int             granary;
    int             location_granary;
    int             guard_tower;
    int             location_guard_tower;
    int             weaponsmith;
    int             location_weaponsmith;
};

struct     loot_data
{
    LOOT_DATA   *   next;
    char        *   name;
    long        *   apoint;
    long        *   gold;
};

struct warchart_data
{
  char * name;
  int    war_pts;
};

/*
 * Connected state for a channel.
 */
#define CON_PLAYING                 0
#define CON_GET_NAME                1
#define CON_GET_OLD_PASSWORD        2
#define CON_CONFIRM_NEW_NAME        3
#define CON_GET_NEW_PASSWORD        4
#define CON_CONFIRM_NEW_PASSWORD    5
#define CON_GET_NEW_RACE            6
#define CON_GET_NEW_SEX             7
#define CON_GET_NEW_CLASS           8
#define CON_GET_ALIGNMENT           9
#define CON_DEFAULT_CHOICE         10 
#define CON_GEN_GROUPS             11 
#define CON_PICK_WEAPON            12
#define CON_READ_AMOTD             13
#define CON_READ_IMOTD             14
#define CON_READ_MOTD              15
#define CON_BREAK_CONNECT          16
#define CON_GET_EMAIL              17

/*
 *  Ansi colour code for future use - Ender
 *  Ansi code comes in the form ^[[x;y;zm where
 *  x - Attribute (as define in COL_ATTR)
 *  y - Forground color (as define in COL_FORE)
 *  z - Background color (as define in COL_BACK)
 */
#define COL_NONE             0
#define COL_BOLD             1
#define COL_UNDERSCORE       4
#define COL_BLINK            5
#define COL_REVERSE          7
#define COL_CONCEALED        8
                            
#define COL_BLACK           30
#define COL_RED             31
#define COL_GREEN           32
#define COL_YELLOW          33
#define COL_BLUE            34
#define COL_MAGENTA         35
#define COL_CYAN            36
#define COL_WHITE           37

#define COL_BACK_BLACK      40
#define COL_BACK_RED        41
#define COL_BACK_GREEN      42
#define COL_BACK_YELLOW     43
#define COL_BACK_BLUE       44
#define COL_BACK_MAGENTA    45
#define COL_BACK_CYAN       46
#define COL_BACK_WHITE      47

#define COLOR_NORMAL        "\33[0;37;40m"

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


/*
 * Attribute adjustments to evasive skills.
 */
struct  evasion_type
{
    sh_int  chance;
};


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

struct  int_app_type
{
    sh_int  learn;
    sh_int  mana;
    sh_int  sense;
};

struct  wis_app_type
{
    sh_int  practice;
};

struct    dex_app_type
{
    sh_int  defensive;
};

struct    con_app_type
{
    sh_int  hitp;
    sh_int  shock;
};



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



/*
 * Help table types.
 */
struct  help_data
{
    HELP_DATA   *   next;
    sh_int          level;
    char        *   keyword;
    char        *   text;
};



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

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

/*
 * Per-class stuff.
 */

#define MAX_GUILD 	2
#define MAX_STATS 	5
#define STAT_STR 	0
#define STAT_INT	1
#define STAT_WIS	2
#define STAT_DEX	3
#define STAT_CON	4

struct	class_type
{
    char *  name;               /* the full name of the class   */
    char    who_name    [4];    /* Three-letter name for 'who'  */
    sh_int  attr_prime;         /* Prime attribute              */
    sh_int  weapon;             /* First weapon                 */
    sh_int  guild[MAX_GUILD];   /* Vnum of guild rooms          */
    sh_int  skill_adept;        /* Maximum skill level          */
    sh_int  thac0_00;           /* Thac0 for level  0           */
    sh_int  thac0_50;           /* Thac0 for level 50           */
    sh_int  hp_min;             /* Min hp gained on leveling    */
    sh_int  hp_max;             /* Max hp gained on leveling    */
    sh_int  mana_min;           /* Min mana gained on leveling  */
    sh_int  mana_max;           /* Max mana gained on leveling  */
    bool    fMana;              /* Class gains mana on level    */
    bool    fWar;               /* Class is a warrior class     */
    bool    reserved;           /* Reserved class?              */
    char *  base_group;         /* base skills gained           */
    char *  default_group;      /* default skills gained        */
};

struct attack_type
{
    char *  name;           /* name and message */
    int     damage;         /* damage class     */
};

struct aff_type
{
    char *  name;           /* name of affects */
    int     target;         /* Legal targets */
    long    flag;
};

struct race_type
{
    char *  name;           /* call name of the race */
    bool    pc_race;        /* can be chosen by pcs */
    long    act;            /* act bits for the race */
    long    aff;            /* aff bits for the race */
    long    off;            /* off bits for the race */
    long    imm;            /* imm bits for the race */
    long    res;            /* res bits for the race */
    long    vuln;           /* vuln bits for the race */
    long    form;           /* default form flag for the race */
    long    parts;          /* default parts for the race */
};


struct pc_race_type  /* additional data for pc races */
{
    char *  name;                   /* MUST be in race_type             */
    char    who_name[12];
    sh_int 	 points;                 /* cost in points of the race       */
    sh_int  class_mult[MAX_CLASS];  /* exp multiplier for class, * 100  */
    char *  skills[5];              /* bonus skills for the race        */
    sh_int  stats[MAX_STATS];       /* starting stats                   */
    sh_int  max_stats[MAX_STATS];   /* maximum stats                    */
    sh_int  size;                   /* aff bits for the race            */
    bool    reserved;               /* Reserve race                     */
    bool    monster;                /* Monster race                     */
};



/*
 * Data structure for notes.
 */
struct    note_data
{
    NOTE_DATA   *   next;
    char        *   sender;
    char        *   date;
    char        *   to_list;
    char        *   subject;
    char        *   text;
    time_t          date_stamp;
};


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



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


struct newsgroup_type
{
    char    *   name;            
    char    *   short_descr;            
    char    *   filename;
    char    *   index;
    char    *   description;
    bool        loaded;
    int         level;
};


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

/*
 * Well known mob virtual numbers.
 * Defined in #MOBILES.
 */
#define MOB_VNUM_PUFF               1
#define MOB_VNUM_FIDO               3090
#define MOB_VNUM_CITYGUARD          3060
#define MOB_VNUM_VAMPIRE            3404
#define MOB_VNUM_AELEMENT           10
#define MOB_VNUM_MELEMENT           11
#define MOB_VNUM_WELEMENT           12
#define MOB_VNUM_FELEMENT           13
#define MOB_VNUM_UNICORN            16
#define MOB_VNUM_MAMMOTH            17
#define MOB_VNUM_SGIANT             18
#define MOB_VNUM_SDRAGON            19
#define MOB_VNUM_RABBIT             20
#define MOB_VNUM_WARHORSE           21
#define MOB_VNUM_PEGASUS            22
#define MOB_VNUM_WYRM               23
#define MOB_VNUM_SCORPION           24
#define MOB_VNUM_GORDON             25
#define MOB_VNUM_NIGHTMARE          26
#define MOB_VNUM_WYVERN             27
#define MOB_VNUM_UNDEAD_SWARRIOR    28
#define MOB_VNUM_UNDEAD_MUMMY       29
#define MOB_VNUM_UNDEAD_WRAITH      30
#define MOB_VNUM_UNDEAD_VAMPIRE     31
#define MOB_VNUM_DEMON_DECAY        32
#define MOB_VNUM_DEMON_DESTRUCTION  33
#define MOB_VNUM_DEMON_DEATH        34
#define MOB_VNUM_NAMELESS_ONE       35
#define MOB_VNUM_GRIZZLY_CUB        39
#define MOB_VNUM_GRIZZLY_BEAR       40
#define MOB_VNUM_ZOMBIE             46
#define MOB_VNUM_ARMY               47
#define MOB_VNUM_BUPU               72
#define MOB_VNUM_MIRROR_IMAGE       74
#define MOB_VNUM_BABYAIRELEMENT	    76
#define MOB_VNUM_SMALLAIRELEMENT    77
#define MOB_VNUM_LARGEAIRELEMENT    78
#define MOB_VNUM_HUGEAIRELEMENT	    79
#define MOB_VNUM_BABYEARTHELEMENT   80
#define MOB_VNUM_SMALLEARTHELEMENT  81
#define MOB_VNUM_LARGEEARTHELEMENT  82
#define MOB_VNUM_HUGEEARTHELEMENT   83
#define MOB_VNUM_BABYWATERELEMENT   84
#define MOB_VNUM_SMALLWATERELEMENT  85
#define MOB_VNUM_LARGEWATERELEMENT  86
#define MOB_VNUM_HUGEWATERELEMENT   87
#define MOB_VNUM_BABYFIREELEMENT    88
#define MOB_VNUM_SMALLFIREELEMENT   89
#define MOB_VNUM_LARGEFIREELEMENT   90
#define MOB_VNUM_HUGEFIREELEMENT    91
#define MOB_VNUM_BLACK_WOLF         92
#define BUILDING_VNUM_LUMBER_MILL   41
#define BUILDING_VNUM_BLACKSMITH    42
#define BUILDING_VNUM_GRANARY       43
#define BUILDING_VNUM_GUARD_TOWER   44
#define BUILDING_VNUM_WEAPONSMITH   45
#define FIRST_BUILDING              41  /* Necessary for IS_BUILDING */
#define LAST_BUILDING               45


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

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

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

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

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

/*
 * ACT bits for mobs.
 * Used in #MOBILES.
 */
#define ACT_IS_NPC          (A)     /* Auto set for mobs    */
#define ACT_SENTINEL        (B)     /* Stays in one room    */
#define ACT_SCAVENGER       (C)     /* Picks up objects    */
#define ACT_AGGRESSIVE      (F)     /* Attacks PC's        */
#define ACT_STAY_AREA       (G)     /* Won't leave area    */
#define ACT_WIMPY           (H)
#define ACT_PET             (I)     /* Auto set for pets    */
#define ACT_TRAIN           (J)     /* Can train PC's    */
#define ACT_PRACTICE        (K)     /* Can practice PC's    */
#define ACT_RIDABLE         (L)     /* Marble */
#define ACT_UNDEAD          (O)
#define ACT_QUEST           (P)     /* SunRunner */
#define ACT_CLERIC          (Q)
#define ACT_MAGE            (R)
#define ACT_THIEF           (S)
#define ACT_WARRIOR         (T)
#define ACT_NOALIGN         (U)
#define ACT_NOPURGE         (V)
#define ACT_AIRELEMENT	    (W)
#define ACT_EARTHELEMENT    (X)
#define ACT_WATERELEMENT    (Y)
#define ACT_FIREELEMENT     (Z)
#define ACT_IS_HEALER       (aa)
#define ACT_GAIN            (bb)
#define ACT_UPDATE_ALWAYS   (cc)
#define ACT_TINKER          (dd)    /* Able to repair */

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

/* OFF bits for mobiles */
#define OFF_AREA_ATTACK     (A)
#define OFF_BACKSTAB        (B)
#define OFF_BASH            (C)
#define OFF_BERSERK         (D)
#define OFF_DISARM          (E)
#define OFF_DODGE           (F)
#define OFF_FADE            (G)
#define OFF_FAST            (H)
#define OFF_KICK            (I)
#define OFF_KICK_DIRT       (J)
#define OFF_PARRY           (K)
#define OFF_RESCUE          (L)
#define OFF_CKICK           (M)
#define OFF_TRIP            (N)
#define OFF_RAGE            (O)
#define OFF_DRAIN           (P)
#define ASSIST_ALL          (Q)
#define ASSIST_ALIGN        (R)
#define ASSIST_RACE         (S)
#define ASSIST_PLAYERS      (T)
#define ASSIST_GUARD        (U)
#define ASSIST_VNUM         (V)

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

/* IMM bits for mobs */
#define IMM_SUMMON          (A)
#define IMM_CHARM           (B)
#define IMM_MAGIC           (C)
#define IMM_WEAPON          (D)
#define IMM_BASH            (E)
#define IMM_PIERCE          (F)
#define IMM_SLASH           (G)
#define IMM_FIRE            (H)
#define IMM_COLD            (I)
#define IMM_LIGHTNING       (J)
#define IMM_ACID            (K)
#define IMM_POISON          (L)
#define IMM_NEGATIVE        (M)
#define IMM_HOLY            (N)
#define IMM_ENERGY          (O)
#define IMM_MENTAL          (P)
#define IMM_DISEASE         (Q)
#define IMM_DROWNING        (R)
#define IMM_LIGHT           (S)
#define IMM_ASSASINATE      (T)
#define IMM_HEALING         (U)
#define IMM_FEAR            (V)
#define IMM_ILLUSIONS	    (W)
 
/* RES bits for mobs */
#define RES_CHARM           (B)
#define RES_MAGIC           (C)
#define RES_WEAPON          (D)
#define RES_BASH            (E)
#define RES_PIERCE          (F)
#define RES_SLASH           (G)
#define RES_FIRE            (H)
#define RES_COLD            (I)
#define RES_LIGHTNING       (J)
#define RES_ACID            (K)
#define RES_POISON          (L)
#define RES_NEGATIVE        (M)
#define RES_HOLY            (N)
#define RES_ENERGY          (O)
#define RES_MENTAL          (P)
#define RES_DISEASE         (Q)
#define RES_DROWNING        (R)
#define RES_LIGHT           (S)
#define RES_ILLUSIONS	    (T)
 
/* VULN bits for mobs */
#define VULN_MAGIC          (C)
#define VULN_WEAPON         (D)
#define VULN_BASH           (E)
#define VULN_PIERCE         (F)
#define VULN_SLASH          (G)
#define VULN_FIRE           (H)
#define VULN_COLD           (I)
#define VULN_LIGHTNING      (J)
#define VULN_ACID           (K)
#define VULN_POISON         (L)
#define VULN_NEGATIVE       (M)
#define VULN_HOLY           (N)
#define VULN_ENERGY         (O)
#define VULN_MENTAL         (P)
#define VULN_DISEASE        (Q)
#define VULN_DROWNING       (R)
#define VULN_LIGHT          (S)
#define VULN_WOOD           (X)
#define VULN_SILVER         (Y)
#define VULN_IRON           (Z)
#define VULN_ILLUSIONS	    (aa) 

/* body form */
#define FORM_EDIBLE         (A)
#define FORM_POISON         (B)
#define FORM_MAGICAL        (C)
#define FORM_INSTANT_DECAY  (D)
#define FORM_OTHER          (E)     /* defined by material bit */
 
/* actual form */
#define FORM_ANIMAL         (G)
#define FORM_SENTIENT       (H)
#define FORM_UNDEAD         (I)
#define FORM_CONSTRUCT      (J)
#define FORM_MIST           (K)
#define FORM_INTANGIBLE     (L)
 
#define FORM_BIPED          (M)
#define FORM_CENTAUR        (N)
#define FORM_INSECT         (O)
#define FORM_SPIDER         (P)
#define FORM_CRUSTACEAN     (Q)
#define FORM_WORM           (R)
#define FORM_BLOB           (S)
 
#define FORM_MAMMAL         (V)
#define FORM_BIRD           (W)
#define FORM_REPTILE        (X)
#define FORM_SNAKE          (Y)
#define FORM_DRAGON         (Z)
#define FORM_AMPHIBIAN      (aa)
#define FORM_FISH           (bb)
#define FORM_COLD_BLOOD     (cc)    
 
/* body parts */
#define PART_HEAD           (A)
#define PART_ARMS           (B)
#define PART_LEGS           (C)
#define PART_HEART          (D)
#define PART_BRAINS         (E)
#define PART_GUTS           (F)
#define PART_HANDS          (G)
#define PART_FEET           (H)
#define PART_FINGERS        (I)
#define PART_EAR            (J)
#define PART_EYE            (K)
#define PART_LONG_TONGUE    (L)
#define PART_EYESTALKS      (M)
#define PART_TENTACLES      (N)
#define PART_FINS           (O)
#define PART_WINGS          (P)
#define PART_TAIL           (Q)
/* for combat */
#define PART_CLAWS          (U)
#define PART_FANGS          (V)
#define PART_HORNS          (W)
#define PART_SCALES         (X)
#define PART_TUSKS          (Y)


/*
 * Bits for 'affected_by'.
 * Used in #MOBILES.
 */
#define AFF_BLIND               (A)
#define AFF_INVISIBLE           (B)
#define AFF_DETECT_EVIL         (C)
#define AFF_DETECT_INVIS        (D)
#define AFF_DETECT_MAGIC        (E)
#define AFF_DETECT_HIDDEN       (F)
#define AFF_HOLD                (G)     /* Ender */ 
#define AFF_SANCTUARY           (H)

#define AFF_FAERIE_FIRE         (I)
#define AFF_INFRARED            (J)     /*10*/
#define AFF_CURSE               (K)
#define AFF_MERCHANT            (L)     /* Ender */
#define AFF_POISON              (M)
#define AFF_PROTECT             (N)
#define AFF_SENSEDOOR           (O)     /* Ender */
#define AFF_SNEAK               (P)

#define AFF_HIDE                (Q)
#define AFF_SLEEP               (R)
#define AFF_CHARM               (S)
#define AFF_FLYING              (T)     /*20*/
#define AFF_PASS_DOOR           (U)
#define AFF_HASTE               (V)
#define AFF_CALM          	    (W)
#define AFF_PLAGUE              (X)    /*24*/

#define AFF_WEAKEN              (Y)
#define AFF_DARK_VISION         (Z)
#define AFF_BERSERK             (aa) 
#define AFF_DEATH_BLOW          (bb)
#define AFF_REGENERATION        (cc)
#define AFF_FIRESHIELD          (dd)    /* oyabun */
#define AFF_ETHER               (ee)    /* Ender..no more liao 8P */ 
/* #define AFF_SHAPESHIFT          (ee) */

/*
 * Bits for Song sung
 * Zor
 */
#define SUNG_HEALTHY_LIVING     (A)
#define SUNG_SPRITE_DANCE       (B)
#define SUNG_ITCHY_FINGERS      (C)
#define SUNG_ACCURA_ACCURIA     (D)
#define SUNG_MADONNA            (E)
#define SUNG_DISRUPTION         (F)
#define SUNG_BONDAGE            (G)
#define SUNG_SOUND_OF_SILENCE   (H)
#define SUNG_SHELTERING_SKY     (I)
#define SUNG_WHISPER_OF_DEATH   (J)

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

/* AC types */
#define AC_PIERCE       0
#define AC_BASH         1
#define AC_SLASH        2
#define AC_EXOTIC       3

/* dice */
#define DICE_NUMBER     0
#define DICE_TYPE       1
#define DICE_BONUS      2

/* size */
#define SIZE_TINY       0
#define SIZE_SMALL      1
#define SIZE_MEDIUM     2
#define SIZE_LARGE      3
#define SIZE_HUGE       4
#define SIZE_GIANT      5

/* clan state */
#define CLAN_NODEPOSIT  (A)

/* quest for pMobIndex */
#define QUEST_LOADED    (A)

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

#define OBJ_VNUM_CORPSE_NPC     10
#define OBJ_VNUM_CORPSE_PC      11
#define OBJ_VNUM_SEVERED_HEAD   12
#define OBJ_VNUM_TORN_HEART     13
#define OBJ_VNUM_SLICED_ARM     14
#define OBJ_VNUM_SLICED_LEG     15
#define OBJ_VNUM_GUTS           16
#define OBJ_VNUM_BRAINS         17

#define OBJ_VNUM_MUSHROOM       20
#define OBJ_VNUM_LIGHT_BALL     21
#define OBJ_VNUM_SPRING         22
#define OBJ_VNUM_ACID           23
#define OBJ_VNUM_GRASS          24
#define OBJ_VNUM_HERBS          25
#define OBJ_VNUM_DART           26
#define OBJ_VNUM_GOLDBAR        27
#define OBJ_VNUM_SCROLL         28
#define OBJ_VNUM_TMACE          34
#define OBJ_VNUM_TDAGGER        4
#define OBJ_VNUM_TSWORD         5
#define OBJ_VNUM_TSPEAR         6
#define OBJ_VNUM_PARMOR         45
#define OBJ_VNUM_BOMB           50
#define OBJ_VNUM_WERECUB_PAWS   58   
#define OBJ_VNUM_WEREWOLF_PAWS  61
#define OBJ_VNUM_POKER_CARD     62
#define OBJ_VNUM_CARD_HOLDER    63

#define OBJ_VNUM_PIT            3010

#define OBJ_VNUM_SCHOOL_MACE    3700
#define OBJ_VNUM_SCHOOL_DAGGER  3701
#define OBJ_VNUM_SCHOOL_SWORD   3702
#define OBJ_VNUM_SCHOOL_VEST    3703
#define OBJ_VNUM_SCHOOL_SHIELD  3704
#define OBJ_VNUM_SCHOOL_BANNER  3716
#define OBJ_VNUM_MAP            3162



/*
 * Item types.
 * Used in #OBJECTS.
 */
#define ITEM_LIGHT          1
#define ITEM_SCROLL         2
#define ITEM_WAND           3
#define ITEM_STAFF          4
#define ITEM_WEAPON         5
#define ITEM_TREASURE       8
#define ITEM_ARMOR          9
#define ITEM_POTION         10
#define ITEM_CLOTHING       11
#define ITEM_FURNITURE      12
#define ITEM_TRASH          13
#define ITEM_CONTAINER      15
#define ITEM_DRINK_CON      17
#define ITEM_KEY            18
#define ITEM_FOOD           19
#define ITEM_MONEY          20
#define ITEM_BOAT           22
#define ITEM_CORPSE_NPC     23
#define ITEM_CORPSE_PC      24
#define ITEM_FOUNTAIN       25
#define ITEM_PILL           26
#define ITEM_PROTECT        27
#define ITEM_MAP            28
#define ITEM_BOMB           29  /* Marble */
#define ITEM_DART           30  /* SunRunner */
#define ITEM_EGG            31  /* Marble */
#define ITEM_PAWS           32  /* SunRunner */
#define ITEM_ALTAR          33  /* SunRunner */

/*
 * Extra flags.
 * Used in #OBJECTS.
 */
#define ITEM_GLOW           (A)
#define ITEM_HUM            (B)
#define ITEM_DARK           (C)
#define ITEM_LOCK           (D)
#define ITEM_EVIL           (E)
#define ITEM_INVIS          (F)
#define ITEM_MAGIC          (G)
#define ITEM_NODROP         (H)
#define ITEM_BLESS          (I)
#define ITEM_ANTI_GOOD      (J)
#define ITEM_ANTI_EVIL      (K)
#define ITEM_ANTI_NEUTRAL   (L)
#define ITEM_NOREMOVE       (M)
#define ITEM_INVENTORY      (N)
#define ITEM_NOPURGE        (O)
#define ITEM_ROT_DEATH      (P)
#define ITEM_VIS_DEATH      (Q)
#define ITEM_CURSE          (R)
#define ITEM_NOLOCATE       (S)
#define ITEM_HIDDEN         (T)
#define ITEM_QUEST          (U)
#define ITEM_FLAMING        (V)
#define ITEM_DUPLICATED	    (W)
#define ITEM_FROZEN         (X)
#define ITEM_UNBREAKABLE    (Y)
#define ITEM_WAR	    (Z)

/*
 * Wear flags.
 * Used in #OBJECTS.
 */
#define ITEM_TAKE           (A)
#define ITEM_WEAR_FINGER    (B)
#define ITEM_WEAR_NECK      (C)
#define ITEM_WEAR_BODY      (D)
#define ITEM_WEAR_HEAD      (E)
#define ITEM_WEAR_LEGS      (F)
#define ITEM_WEAR_FEET      (G)
#define ITEM_WEAR_HANDS     (H)
#define ITEM_WEAR_ARMS      (I)
#define ITEM_WEAR_SHIELD    (J)
#define ITEM_WEAR_ABOUT     (K)
#define ITEM_WEAR_WAIST     (L)
#define ITEM_WEAR_WRIST     (M)
#define ITEM_WIELD          (N)
#define ITEM_HOLD           (O)
#define ITEM_TWO_HANDS      (P)

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

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




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


/*
 * Values for Materials
 */
#define ITEM_MATERIAL_DEFAULT  1  /* SunRunner */

/* Some possible flags in the future(Lancelot)
 */
#define ITEM_MATERIAL_PAPER        2
#define ITEM_MATERIAL_SILK         3
#define ITEM_MATERIAL_CLOTH        4
#define ITEM_MATERIAL_FOOD         5
#define ITEM_MATERIAL_GOLD         6
#define ITEM_MATERIAL_SILVER       7
#define ITEM_MATERIAL_COPPER       8
#define ITEM_MATERIAL_BRONZE       9
#define ITEM_MATERIAL_IRON        10
#define ITEM_MATERIAL_STEEL       11
#define ITEM_MATERIAL_ADAMANTITE  12
#define ITEM_MATERIAL_GLASS       13
#define ITEM_MATERIAL_CLAY        14
#define ITEM_MATERIAL_WOOD        15

/*
 * Values for containers (value[1]).
 * Used in #OBJECTS.
 */
#define CONT_CLOSEABLE      (A)
#define CONT_PICKPROOF      (B)
#define CONT_CLOSED         (C)
#define CONT_LOCKED         (D)
#define CONT_MAGICLOCKED    (E)


/*
 * Well known room virtual numbers.
 * Defined in #ROOMS.
 */
#define ROOM_VNUM_LIMBO     2
#define ROOM_VNUM_CHAT      1200
#define ROOM_VNUM_TEMPLE    3001
#define ROOM_VNUM_ALTAR     3054
#define ROOM_VNUM_SCHOOL    3700
#define ROOM_VNUM_WARZONE   14510
#define ROOM_VNUM_WARROOM   21011
#define ROOM_VNUM_WAITROOM   21012
#define ROOM_VNUM_TEAMROOM   21013
#define MOB_VNUM_GALLERY    21025
#define ROOM_VNUM_WATCH     3054
#define ROOM_VNUM_WHEELROOM 27402

/*
 * Area flags 
 */
#define AREA_TESTING		(A)

/*
 * Room flags.
 * Used in #ROOMS.
 */
#define ROOM_DARK           (A)
#define ROOM_NO_MOB         (C)
#define ROOM_INDOORS        (D)

#define ROOM_NOSAVE         (E)
#define ROOM_NOGATE         (F)
#define ROOM_BANK_ENTRANCE  (G)
#define ROOM_BANK           (H)
#define ROOM_PK_ONLY        (I)
#define ROOM_PRIVATE        (J)
#define ROOM_SAFE           (K)
#define ROOM_SOLITARY       (L)
#define ROOM_PET_SHOP       (M)
#define ROOM_NO_RECALL      (N)
#define ROOM_IMP_ONLY       (O)
#define ROOM_GODS_ONLY      (P)
#define ROOM_HEROES_ONLY    (Q)
#define ROOM_NEWBIES_ONLY   (R)
#define ROOM_LAW            (S)
#define ROOM_NO_FLEE        (T) /* Zor for bard songs */
#define ROOM_HP_2X          (U)
#define ROOM_MANA_2X        (V)
#define ROOM_MV_2X          (W)
#define ROOM_NOWIZCMD       (X)
#define ROOM_DRAIN          (Y)
#define ROOM_NOROT			(Z)
#define ROOM_DANGEROUS	    (aa)

/*
 * Directions.
 * Used in #ROOMS.
 */
#define DIR_NORTH   0
#define DIR_EAST    1
#define DIR_SOUTH   2
#define DIR_WEST    3
#define DIR_UP      4
#define DIR_DOWN    5



/*
 * Exit flags.
 * Used in #ROOMS.
 */
#define EX_ISDOOR       (A)
#define EX_CLOSED       (B)
#define EX_LOCKED       (C)
#define EX_PICKPROOF    (F)
#define EX_BASHPROOF    (G)
#define EX_NOPASSDOOR   (H)
#define EX_MAGICLOCKED  (I) /* Marble */


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



/*
 * Equpiment wear locations.
 * Used in #RESETS.
 */
#define WEAR_NONE           -1
#define WEAR_LIGHT          0
#define WEAR_FINGER_L       1
#define WEAR_FINGER_R       2
#define WEAR_NECK_1         3
#define WEAR_NECK_2         4
#define WEAR_BODY           5
#define WEAR_HEAD           6
#define WEAR_LEGS           7
#define WEAR_FEET           8
#define WEAR_HANDS          9
#define WEAR_ARMS           10
#define WEAR_SHIELD         11
#define WEAR_ABOUT          12
#define WEAR_WAIST          13
#define WEAR_WRIST_L        14
#define WEAR_WRIST_R        15
#define WEAR_WIELD          16
#define WEAR_HOLD           17
#define WEAR_DUAL           18
#define MAX_WEAR            19

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

/*
 * OBJProg - Ender
 */
#define ERROR_PROG          -1
#define OWEAR_PROG           1
#define OGET_PROG            2
#define OJUNK_PROG           4
#define OEXAM_PROG           8
#define ODROP_PROG          16 
#define OSAY_PROG           32 
#define ORAND_PROG          64
#define OREMOVE_PROG       128 


#define BUILDING_LUMBER_MILL   1
#define BUILDING_BLACKSMITH    2
#define BUILDING_GRANARY       3
#define BUILDING_GUARD_TOWER   4
#define BUILDING_WEAPONSMITH   5

#define CLANSIZE_CAMP          0
#define CLANSIZE_VILLAGE       1
#define CLANSIZE_TOWN          2
#define CLANSIZE_CITY          3
#define CLANSIZE_STRONGHOLD    4
#define CLANSIZE_FORTRESS      5

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

/*
 * Conditions.
 */
#define COND_DRUNK      0
#define COND_FULL       1
#define COND_THIRST     2



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



/*
 * ACT bits for players.
 */
#define PLR_IS_NPC      (A)     /* Don't EVER set.    */
#define PLR_BOUGHT_PET  (B)

/* RT auto flags */
#define PLR_AUTOASSIST  (C)
#define PLR_AUTOEXIT    (D)
#define PLR_AUTOLOOT    (E)
#define PLR_AUTOSAC     (F)
#define PLR_AUTOGOLD    (G)
#define PLR_AUTOSPLIT   (H)
/* 4 bits reserved, I-L */

/* RT personal flags */
#define PLR_SOLITARY    (M)
#define PLR_HOLYLIGHT   (N)
#define PLR_WIZINVIS    (O)
#define PLR_CANLOOT     (P)
#define PLR_NOSUMMON    (Q)
#define PLR_NOFOLLOW    (R)
#define PLR_PROMPT      (S)     /* Oyabun */
#define PLR_BLANK       (T)     /* Oyabun */
#ifdef NOPKILL
#define PLR_PKILL		(aa)	/* Make it equal to killer, all check as norm */
#else
#define PLR_PKILL       (U)     /* Ender */
#endif
#define PLR_LINK_DEAD   (V)     /* Marble */

/* penalty flags */
#define PLR_LOG         (W)
#define PLR_DENY        (X)
#define PLR_FREEZE      (Y)
#define PLR_THIEF       (Z)
#define PLR_KILLER      (aa)

/* Additional HOTL flags */
#define PLR_WAR         (bb)    /*Sturm */
#define PLR_AFK         (cc)
#define PLR_IMPRISON    (dd)
#define PLR_NEWBIE      (ee)

/* RT comm flags -- may be used on both mobs and chars */
#define COMM_QUIET      (A)
#define COMM_DEAF       (B)
#define COMM_NOWIZ      (C)
#define COMM_NOAUCTION  (D)
#define COMM_NOCHAT     (E)
#define COMM_NOQUESTION (F)
#define COMM_NOMUSIC    (G)
#define COMM_NOIMP      (H)
#define COMM_NOCLAN     (I)     /* Marble */
#define COMM_NOANNOUNCE (J)

#define COMM_NORMUD     (K)
/* 4 channels reserved, I-K */

/* display flags */
#define COMM_COMPACT    (M)
#define COMM_BRIEF      (N)
#define COMM_PROMPT     (O)
#define COMM_COMBINE    (P)
#define COMM_TELNET_GA  (Q)
/* 3 flags reserved, Q-S */

/* Marble */
#define COMM_NOANSI     (R)    
#define COMM_NOINFO     (S)
#define COMM_NOBEEP     (T)
/*end*/

/* penalties */
#define COMM_NOEMOTE    (U)
#define COMM_NOSHOUT    (V)
#define COMM_NOTELL     (W)
#define COMM_NOCHANNELS (X) 

/* Channel */
#define COMM_NOWAR      (Y)
#define COMM_NOQUEST    (Z)
#define COMM_NOJOKE    (aa)
#define COMM_NOIMPCLAN (bb)


/* BBS newsgroups - SunRunner */
#define BBS_ADMIN           0
#define BBS_BUGS            1
#define BBS_GENERAL         2
#define BBS_IDEAS           3
#define BBS_IMMORTALS       4
#define BBS_NEWS            5
#define BBS_PERSONAL        6
#define BBS_PENALTIES       7
#define BBS_QUEST           8
#define BBS_SOCIAL          9
#define MAX_BBS_NEWSGROUP  10   /* exact values only. SunRunner */


/*
 * Prototype for a mob.
 * This is the in-memory version of #MOBILES.
 */
struct    mob_index_data
{
    MOB_INDEX_DATA  *   next;
    SPEC_FUN        *   spec_fun;
    SHOP_DATA       *   pShop;
    sh_int              vnum;
    bool                new_format;
    sh_int              count;
    sh_int              killed;
    char            *   player_name;
    char            *   short_descr;
    char            *   long_descr;
    char            *   description;
    long                act;
    long                affected_by;
    sh_int          alignment;
    sh_int          level;
    sh_int          hitroll;
    sh_int          hit[3];
    sh_int          mana[3];
    sh_int          damage[3];
    sh_int          ac[4];
    sh_int          dam_type;
    long            off_flags;
    long            imm_flags;
    long            res_flags;
    long            vuln_flags;
    sh_int          start_pos;
    sh_int          default_pos;
    sh_int          sex;
    sh_int          race;
    long            gold;
    long            form;
    long            parts;
    sh_int          size;
    sh_int          material;
    long            quest;

    MPROG_DATA      *   mobprogs;   /* mprog */
    int                 progtypes;  /* mprog */

    /* VRML data  */
    VRML_MOB_DATA   * VRdata;
};


/*
 * One character (PC or NPC).
 */
struct    char_data
{
    CHAR_DATA       *   next;
    CHAR_DATA       *   next_in_room;
    CHAR_DATA       *   master;
    CHAR_DATA       *   leader;
    CHAR_DATA       *   fighting;
    CHAR_DATA       *   reply;
    CHAR_DATA       *   mount;      /* Marble */
    CHAR_DATA       *   pet;
    CHAR_DATA       *   hunting;    /* For hunting */
    SPEC_FUN        *   spec_fun;
    MOB_INDEX_DATA  *   pIndexData;
    DESCRIPTOR_DATA *   desc;
    AFFECT_DATA     *   affected;
    NOTE_DATA       *   pnote;
    OBJ_DATA        *   carrying;
    ROOM_INDEX_DATA *   in_room;
    ROOM_INDEX_DATA *   was_in_room;
    PC_DATA         *   pcdata;
    GEN_DATA        *   gen_data;
    CD_TEMP_DATA    *   cd_temp_data;
    CD_TEMP_DATA    *   ss_temp_data;
    char            *   name;
    sh_int              version;
    char            *   short_descr;
    char            *   long_descr;
    char            *   description;
    char            *   prompt;
    char            *   rreply;     /* RMUD */
    char            *   email;
    sh_int      sex;
    sh_int      class;
    sh_int      race;
    sh_int      level;
    sh_int      clan;
    sh_int      trust;
    int         played;
    int         lines;      /* for the pager */
    time_t      logon;
    time_t      last_note;
    sh_int      timer;
    sh_int      wait;
    sh_int      hit;
    sh_int      max_hit;
    sh_int      mana;
    sh_int      max_mana;
    sh_int      move;
    sh_int      max_move;
    long        gold;
    int         exp;
    long        act;
    long        comm;       /* RT added to pad the vector */
    long        imm_flags;
    long        res_flags;
    long        vuln_flags;
    sh_int      invis_level;
    int         affected_by;
    sh_int      song;       /* Zor */
    sh_int      position;
    sh_int      practice;
    sh_int      apoint;     /* Ender */
    sh_int      karma;      /* Ender */
    sh_int      train;
    sh_int      carry_weight;
    sh_int      carry_number;
    sh_int      saving_throw;
    sh_int      alignment;
    sh_int      hitroll;
    sh_int      damroll;
    sh_int      armor[4];
    sh_int      wimpy;
    /* stats */
    sh_int      perm_stat[MAX_STATS];
    sh_int      mod_stat[MAX_STATS];
    /* parts stuff */
    long        form;
    long        parts;
    sh_int      size;
    sh_int      material;
    /* mobile stuff */
    long        off_flags;
    sh_int      damage[3];
    sh_int      dam_type;
    sh_int      start_pos;
    sh_int      default_pos;
    int         died;

    MPROG_ACT_LIST *    mpact;        /* mprog */
    int                 mpactnum;    /* mprog */

};



/*
 * Data which only PC's have.
 */
struct    pc_data
{
    PC_DATA     *   next;
    char        *   pwd;
    char        *   bamfin;
    char        *   bamfout;
    char        *   title;
    char        *   group;                              /* Marble */
    char        *   consent;                            /* Marble */
    char        *   clan_sponsor;                       /* SunRunner */
    BANK_DATA   *   bank;
    char        *   newsgroup;                          /* SunRunner */
    time_t          bbs_last_read   [MAX_BBS_NEWSGROUP];/* SunRunner */
    sh_int          perm_hit;
    sh_int          perm_mana;
    sh_int          perm_move;
    sh_int          true_sex;
    int             last_level;
    sh_int          condition       [3];
    sh_int          learned         [MAX_SKILL];
    sh_int          expertise       [MAX_SKILL];
    bool            group_known     [MAX_GROUP];
    sh_int          points;
    sh_int          gain;
    bool            confirm_delete;
    sh_int          war_fought;
    sh_int          war_kills;
    sh_int          war_won;
    sh_int          war_pts;
    sh_int          war_team;
    sh_int          war_num;
	sh_int			last_quit;
/*
 *  imc 0.4b
 */
    char        *   r_room;
    sh_int          r_exit[6];
    bool            r_wait;
};

/* Data for generating characters -- only used during generation */
struct gen_data
{
    GEN_DATA    *   next;
    bool            skill_chosen    [MAX_SKILL];
    bool            group_chosen    [MAX_GROUP];
    int             points_chosen;
};

/* Zor - reparsed till here... to be continued... */


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

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



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



/*
 * Prototype for an object.
 */
struct    obj_index_data
{
    OBJ_INDEX_DATA      *   next;
    EXTRA_DESCR_DATA    *   extra_descr;
    AFFECT_DATA         *   affected;
    bool                    new_format;
    char                *   name;
    char                *   short_descr;
    char                *   description;
    sh_int  vnum;
    sh_int  reset_num;
char *mat;
    sh_int  material;
    sh_int  item_type;
    int     extra_flags;
    sh_int  wear_flags;
    sh_int  level;
    sh_int  condition;
    sh_int  count;
    sh_int  weight;
    int     cost;
    int     value[5];
    int     spell;
    int     rate;

    /* ObjProg - Ender */
    OPROG_DATA      *   objprogs;   /* oprog */
    int                 progtypes;  /* oprog */

    /* VRML Data - SunRunner */
    VRML_OBJ_DATA   *   VRdata;     /* VRML data */
};

/*
 * One object.
 */
struct    obj_data
{
    OBJ_DATA            *   next;
    OBJ_DATA            *   next_content;
    OBJ_DATA            *   contains;
    OBJ_DATA            *   in_obj;
    CHAR_DATA           *   carried_by;
    EXTRA_DESCR_DATA    *   extra_descr;
    AFFECT_DATA         *   affected;
    OBJ_INDEX_DATA      *   pIndexData;
    ROOM_INDEX_DATA     *   in_room;
    bool        enchanted;
    char    *   owner;
    char    *   name;
    char    *   short_descr;
    char    *   description;
    sh_int      item_type;
    int         extra_flags;
    sh_int      wear_flags;
    sh_int      wear_loc;
    sh_int      weight;
    int         cost;
    sh_int      level;
    sh_int      condition;
    sh_int      material;
    sh_int      timer;
    int         value    [5];
    int         spell;
    int         rate;
	unsigned int serial;
};


/*
 * Exit data.
 */
struct    exit_data
{
    union
    {
        ROOM_INDEX_DATA *   to_room;
        sh_int              vnum;
    } u1;
    sh_int      exit_info;
    sh_int      key;
    char    *   keyword;
    char    *   description;
};



/*
 * Reset commands:
 *   '*': comment
 *   'M': read a mobile 
 *   'O': read an object
 *   'P': put object in object
 *   'G': give object to mobile
 *   'E': equip object to mobile
 *   'D': set state of door
 *   'R': randomize room exits
 *   'S': stop (end of list)
 */

/*
 * Area-reset definition.
 */
struct	reset_data
{
    RESET_DATA *	next;
    char		command;
    sh_int		arg1;
    sh_int		arg2;
    sh_int		arg3;
};



/*
 * Area definition.
struct	area_data
{
    AREA_DATA *		next;
    RESET_DATA *	reset_first;
    RESET_DATA *	reset_last;
    sh_int		version;
    char *		name;
    sh_int		age;
    sh_int		nplayer;
    bool		empty;
};
*/

struct  area_data
{
    AREA_DATA *         next;           
    RESET_DATA *        reset_first;   
    RESET_DATA *        reset_last;   
    char *              name;
    int                 age;
    int                 nplayer;
    bool                empty;          /* ROM OLC */
    char *              filename;       /* OLC */
    int                 lvnum;          /* OLC */ /* Lower vnum */
    int                 uvnum;          /* OLC */ /* Upper vnum */
    int                 vnum;           /* OLC */ /* Area vnum  */
    int                 area_flags;     /* OLC */
};


/*
 * Room type.
 */
struct	room_index_data
{
    ROOM_INDEX_DATA *	next;
    CHAR_DATA       *		people;
    OBJ_DATA *		contents;
    EXTRA_DESCR_DATA *	extra_descr;
    AREA_DATA *		area;
    EXIT_DATA *		exit	[6];
    char *		name;
    char *		description;
    sh_int		vnum;
    int			room_flags;
    int			orig_flags;
    sh_int		light;
    sh_int		sector_type;
    VRML_ROOM_DATA *    VRdata;     /* VRML Data */
};



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



/*
 *  Target types.
 */
#define TAR_IGNORE		    	0
#define TAR_CHAR_OFFENSIVE	        1
#define TAR_CHAR_DEFENSIVE	        2
#define TAR_CHAR_SELF		        3
#define TAR_OBJ_INV		    	4
#define TAR_AREA_OFFENSIVE	        5
#define TAR_AREA_DEFENSIVE	        6
#define TAR_OBJ_ROOM		        7
#define TAR_OBJ			    	8
#define TAR_DIR		 	    	9
#define TAR_SURROUND_OFFENSIVE         10
#define TAR_DUAL_OFFENSIVE	       11
#define TAR_CLE_BLESSINGS	        12

/*
 * Skills include spells as a particular case.
 */
struct	skill_type
{
    char *	name;			/* Name of skill		*/
    sh_int	skill_level[MAX_CLASS];	/* Level needed by class	*/
    sh_int	rating[MAX_CLASS];	/* How hard it is to learn	*/	
    SPELL_FUN *	spell_fun;		/* Spell pointer (for spells)	*/
    sh_int	target;			/* Legal targets		*/
    sh_int	minimum_position;	/* Position for caster / user	*/
    sh_int *	pgsn;			/* Pointer to associated gsn	*/
    sh_int	slot;			/* Slot for #OBJECT loading	*/
    sh_int	min_mana;		/* Minimum mana used		*/
    sh_int	beats;			/* Waiting time after use	*/
    bool	binding;		/* Spell binding?	        */
    char *	noun_damage;		/* Damage message		*/
    char *	msg_off;		/* Wear off message		*/
    bool	gainable;		/* Can you gain the skill itself*/
};

/*
 * Song Table for Harpers - Zor
 */
struct  song_type
{
    char *      name;                   /* Name of song            */
    sh_int      level[MAX_CLASS];       /* Level needed to sing it */
    SONG_FUN *  song_fun;               /* Song pointer            */
    sh_int      min_thirst;             /* Thirst factor           */
    sh_int      min_drunk;              /* Drink factor            */
    int         slot;                   /* Slot for song           */
    char *      noun_damage;            /* Song name               */
    char *      msg_off;                /* Wear off message        */
};

struct  group_type
{
    char *	name;
    sh_int	rating[MAX_CLASS];
    char *	spells[MAX_IN_GROUP];
    char *	need[MAX_IN_GROUP];
    int         song;
};

/*
 * Defined by SunRunner
 * Character Temporary Data - eg Disguise Skill
 */
struct  cd_temp_data
{
    CD_TEMP_DATA *  next;
    char *          name;
    char *          short_descr;
    char *          long_descr;
    char *          description;
    int             duration;
    long            act;
    int             affected_by;
};

/* Global variable */
extern  CHAR_DATA * puff;
extern  CHAR_DATA * bupu;
extern  OBJ_DATA   *curr_oprog;
extern  ROOM_INDEX_DATA *gallery;
extern  sh_int     war_state ;
extern  sh_int     war_time ;
extern  sh_int     war_interval ;
extern	bool       chao;
extern  bool cheatmode;
extern  bool       ISTEAM; /*team or Indi war */
extern  OBJ_DATA   *aitem;
extern  CHAR_DATA  *aplayer;
extern  int        atype;
extern  int        aminimum;
extern  CHAR_DATA  *bplayer;
extern  int        atime;
extern  int        auction_bid_changed;
extern  int        leading_clan;
extern  long       leading_clan_worth;	
extern  team_type  *TEAM;
extern  team_type  *INDI;
extern  unsigned int 	   gserial;
extern  OBJ_DATA   *obj_serial[];

#define CHAO( ch, victim, rate ) 					 \
	if ( chao 							 \
	&&  !IS_NPC(ch)							 \
	&&   IS_NPC(victim)						 \
	&&   (number_percent()<rate)					 \
	&&  !IS_SET( (victim)->act, ACT_SENTINEL) 			 \
	&&  !IS_SET( (victim)->act, ACT_WIMPY ) 			 \
	&&  !IS_AFFECTED( victim, AFF_CHARM ) 			 \
	&&   ( victim->level <= (ch->level+8) )				 \
	&& ( (victim)->hunting == NULL 				 	 \
	  || ( (victim)->hunting != NULL				 \
	    && (victim)->hunting->in_room != NULL			 \
	    && (victim)->in_room != NULL				 \
	    && (victim)->in_room->area != (victim)->hunting->in_room->area \
             ) ) )							 \
	     (victim)->hunting = ch;		

/*
 * These are skill_lookup return values for common skills and spells.
 */
extern	sh_int	gsn_backstab;
extern	sh_int	gsn_dbackstab;
extern	sh_int	gsn_dodge;
extern	sh_int	gsn_hide;
extern	sh_int	gsn_peek;
extern	sh_int	gsn_pick_lock;
extern	sh_int	gsn_sneak;
extern	sh_int	gsn_steal;
extern	sh_int	gsn_trap;
extern	sh_int	gsn_detect_trap;
extern	sh_int	gsn_dismantle;
extern	sh_int	gsn_trigger_bomb;

extern	sh_int	gsn_shapeshift;     /* Jasper */
extern	sh_int	gsn_disarm;
extern	sh_int	gsn_enhanced_damage;
extern	sh_int	gsn_critical_hit;
extern	sh_int	gsn_bodycontrol;
extern	sh_int	gsn_kick;
extern	sh_int	gsn_parry;
extern	sh_int	gsn_rescue;
extern	sh_int	gsn_second_attack;
extern	sh_int	gsn_third_attack;
extern	sh_int	gsn_fourth_attack;
extern  sh_int  gsn_rage; 
extern  sh_int  gsn_brew; 
extern  sh_int  gsn_throw_acid;
extern  sh_int  gsn_ckick;
extern  sh_int  gsn_drain;
extern  sh_int  gsn_touch;
extern  sh_int  gsn_soulburn;
extern  sh_int  gsn_corruption;
extern  sh_int  gsn_herbs;
extern  sh_int  gsn_scan;
extern  sh_int  gsn_dart;
extern  sh_int  gsn_write;

extern	sh_int	gsn_blindness;
extern	sh_int	gsn_charm_person;
extern	sh_int	gsn_curse;
extern	sh_int	gsn_invis;
extern	sh_int	gsn_mass_invis;
extern  sh_int  gsn_plague;
extern	sh_int	gsn_poison;
extern	sh_int	gsn_sleep;
extern  sh_int  gsn_frenzy;

/* new gsns */
extern sh_int  gsn_axe;
extern sh_int  gsn_dagger;
extern sh_int  gsn_flail;
extern sh_int  gsn_mace;
extern sh_int  gsn_polearm;
extern sh_int  gsn_shield_block;
extern sh_int  gsn_spear;
extern sh_int  gsn_sword;
extern sh_int  gsn_whip;
 
extern sh_int  gsn_bash;
extern sh_int  gsn_berserk;
extern sh_int  gsn_dirt;
extern sh_int  gsn_hand_to_hand;
extern sh_int  gsn_trip;
extern sh_int  gsn_nodisarm;
 
extern sh_int  gsn_fast_healing;
extern sh_int  gsn_haggle;
extern sh_int  gsn_lore;
extern sh_int  gsn_meditation;
 
extern sh_int  gsn_scrolls;
extern sh_int  gsn_staves;
extern sh_int  gsn_wands;
extern sh_int  gsn_recall;
extern sh_int  gsn_repair;
extern sh_int  gsn_sharpen;
extern sh_int  gsn_care;
extern sh_int  gsn_boulder;
extern sh_int  gsn_flambe;
extern sh_int  gsn_ice;
extern sh_int  gsn_venom;
extern sh_int  gsn_assasinate;
extern sh_int  gsn_hunt;
extern sh_int  gsn_palm;
extern sh_int  gsn_iron_fist;
extern sh_int  gsn_counter;
extern sh_int  gsn_charge;               /* SunRunner */
extern sh_int  gsn_ride;                 /* Zee */
extern sh_int  gsn_harp;                 /* Zor */
/* Zor*/
extern sh_int  gsn_leash;
extern sh_int  gsn_unleash;
extern sh_int  gsn_mudblast;		 /* Crys */
extern sh_int  gsn_iceblast;		 /* Crys */
extern sh_int  gsn_fireblast;		 /* Crys */
extern sh_int  gsn_earthskin;		 /* Crys */
extern sh_int  gsn_earthshield;		 /* Crys */
extern sh_int  gsn_nova;		 /* Crys */
extern sh_int  gsn_springoflife;	 /* Crys */
extern sh_int  gsn_tempestfury;		 /* Crys */
extern sh_int  gsn_disguise;             /* SunRunner */
extern sh_int  gsn_holy_intervention;    /* SunRunner */
extern sh_int  gsn_drunken_fist;         /* SunRunner */
extern sh_int  gsn_shadowless_palm;      /* SunRunner */
extern sh_int  gsn_berserker_barrage;
extern sh_int  gsn_keen_hearing;         /* SunRunner */
extern sh_int  gsn_lion_roar;            /* SunRunner */
extern sh_int  gsn_golden_bell_armor;    /* SunRunner */
extern sh_int  gsn_invulnerability;
extern sh_int  gsn_make_bomb;            /* Marble */
extern sh_int  gsn_fear;                 /* Ender */
extern sh_int  gsn_bloodhowl;            /* Jasper */
extern sh_int  gsn_transform;            /* SunRunner */
extern sh_int  gsn_feint;                /* SunRunner */
extern sh_int  gsn_pounce;               /* SunRunner */
extern sh_int  gsn_body_weaponry;        /* SunRunner */
extern sh_int  gsn_bearhug;              /* SunRunner */
extern sh_int  gsn_wolfcall;             /* Jasper    */
extern sh_int  gsn_bloodthirst;          /* SunRunner */
extern sh_int  gsn_block;                /* SunRunner */
extern sh_int  gsn_whirlwind;            /* SunRunner */
extern sh_int  gsn_accelerated_healing;  /* SunRunner */
extern sh_int  gsn_wolffur;              /* SunRunner */
extern sh_int  gsn_wolfbite;             /* SunRunner */
extern sh_int  gsn_blood_fist;           /* SunRunner */
extern sh_int  gsn_anticipation;         /* SunRunner */
extern sh_int  gsn_magik_bones;          /* SunRunner */
extern sh_int  gsn_gluttony;             /* SunRunner */
extern sh_int  gsn_lust;                 /* SunRunner */
extern sh_int  gsn_greed;                /* SunRunner */
extern sh_int  gsn_pride;                /* SunRunner */
extern sh_int  gsn_sloth;                /* SunRunner */
extern sh_int  gsn_slow;
extern sh_int  gsn_suffocate;
extern sh_int  gsn_implosion;
extern sh_int  gsn_immolation;
extern sh_int  gsn_drowning;
extern sh_int  gsn_wrath;                /* SunRunner */
extern sh_int  gsn_stomp;
extern sh_int  gsn_battle_madness;
extern sh_int  gsn_mighty_blow;
extern sh_int  gsn_dense_flesh;
extern sh_int  gsn_thick_skull;
extern sh_int  gsn_tough_hide;
extern sh_int  gsn_adrenaline_surge;
extern sh_int  gsn_death_blow;
extern sh_int  gsn_bite;                 /* SunRunner */
extern sh_int  gsn_constriction;         /* SunRunner */
extern sh_int  gsn_sting;                /* SunRunner */
extern sh_int  gsn_antimetabolism;       /* SunRunner */
extern sh_int  gsn_symbol_of_death;      /* SunRunner */
extern sh_int  gsn_symbol_of_decay;      /* SunRunner */
extern sh_int  gsn_shadow_form;          /* SunRunner */
extern sh_int  gsn_nullify;              /* SunRunner */
extern sh_int  gsn_speedcasting;		/* Ender */
extern sh_int  gsn_paladinewrath;	

/*
extern sh_int  gsn_missile;
*/

extern BANK_DATA * bank_free;


/*
 * Utility macros.
 */
#define UMIN(a, b)		((a) < (b) ? (a) : (b))
#define UMAX(a, b)		((a) > (b) ? (a) : (b))
#define URANGE(a, b, c)		((b) < (a) ? (a) : ((b) > (c) ? (c) : (b)))
#define LOWER(c)		((c) >= 'A' && (c) <= 'Z' ? (c)+'a'-'A' : (c))
#define UPPER(c)		((c) >= 'a' && (c) <= 'z' ? (c)+'A'-'a' : (c))
#define IS_SET(flag, bit)	((flag) & (bit))
#define SET_BIT(var, bit)	((var) |= (bit))
#define REMOVE_BIT(var, bit)	((var) &= ~(bit))
#define TOGGLE_BIT(var, bit)    ((var) ^= (bit))
#define IS_WITHIN_RANGE(a, b, c) ( ( (b) >= (a) ) && ( (b) <= (c) ) ) \
                                   ? TRUE : FALSE )
#define MASK(idx)               (1<<(idx))
#define SET_BIT2(add, idx)      (*((add)+(idx)/NBITSL)|=MASK(((idx)%NBITSL)) )
#define REMOVE_BIT2(add, idx)   (*((add)+(idx)/NBITSL)&=~MASK(((idx)%NBITSL)))

/*
 * Character macros.
 */
#define IS_NPC(ch)		(IS_SET((ch)->act, ACT_IS_NPC))
#define IS_IMP(ch)		(get_trust(ch) == MAX_LEVEL) /* Marble */
#define IS_ADMIN(ch)		(get_trust(ch) >= LEVEL_ADMIN) /* SunRunner */
#define IS_DIVINE(ch)		(get_trust(ch) >= LEVEL_DIVINE)
#define IS_IMMORTAL(ch)		(get_trust(ch) >= LEVEL_IMMORTAL)
#define IS_HERO(ch)		(get_trust(ch) >= LEVEL_HERO || \
				 IS_RC(ch))
#define IS_RC(ch)               (!IS_NPC(ch) &&                               \
                                 class_table[(ch)->class].reserved)
#define IS_TRUSTED(ch,level)	(get_trust((ch)) >= (level))
#define IS_MOUNTED(ch)	(  (  (ch)->position==POS_FIGHTING					\
						   || (ch)->position==POS_RIDING )					\
						&& (ch)->mount != NULL )
#define IS_MON(ch)              (!IS_NPC(ch) &&                               \
                                 pc_race_table[(ch)->race].monster)
/*
#define IS_AFFECTED(ch, sn)	(IS_SET((ch)->affected_by, (sn)))
*/
#define IS_AFFECTED(ch, sn)	(is_disguised((ch)) ?                          \
                                 IS_SET((ch)->cd_temp_data->affected_by,((sn)))\
                                 : IS_SET((ch)->affected_by, (sn)) )

#define IS_ANSI(ch)		(!IS_SET((ch)->comm, COMM_NOANSI))
#define RESET_COLOR(ch)		(send_to_char("\33[0;37m",(ch)))
#define GET_AGE(ch)		((int) (17 + ((ch)->played \
				    + current_time - (ch)->logon )/72000))

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

#define IS_AWAKE(ch)		(ch->position > POS_SLEEPING)
#define GET_AC(ch,type)		((ch)->armor[type]			    \
		        + ( IS_AWAKE(ch)                                    \
			? dex_app[get_curr_stat(ch,STAT_DEX)].defensive : 0 ))  
/*
 * Zor - modified GET_HITROLL/GET_DAMROLL to reflect affects of songs.
 * modify as neccesary to get the right edge
 */
#define GET_HITROLL(ch)	\
        ((ch)->hitroll+str_app[get_curr_stat(ch,STAT_STR)].tohit  \
        + (IS_NPC(ch) ? 0 :                                       \
        (IS_SET(check_song((ch)), SUNG_ACCURA_ACCURIA) ?          \
        ( 4 * (ch)->level / 10) : 0 )))
#define GET_DAMROLL(ch) \
        ((ch)->damroll+str_app[get_curr_stat(ch,STAT_STR)].todam \
        + (IS_NPC(ch) ? 0 :                                      \
        (IS_SET(check_song((ch)), SUNG_MADONNA) ?                \
        ((ch)->level / 4) : 0 )))
#define IS_OUTSIDE(ch)		(!IS_SET(				    \
				    (ch)->in_room->room_flags,		    \
				    ROOM_INDOORS))
/*
 * 17 months -- last 5 months lump under autumn.
 */
                    
#define SEASON      (((time_info.month / 4) > 3) ? 3 :  \
                    (time_info.month / 4))

#define WAIT_STATE(ch, npulse)	((get_trust(ch) < LEVEL_ADMIN)                \
                                    ? ((ch)->wait = UMAX((ch)->wait, (npulse)))\
                                    : ((ch)->wait = 0))

#define WAIT_STATE_BC(ch, npulse)					\
	if ( !IS_NPC(ch) && (!is_affected(ch,gsn_slow))		\
	&&   ( class_table[(ch)->class].fWar )				\
	&&   ( number_percent() < get_skill( (ch), gsn_bodycontrol )))	\
	{   if ( class_table[(ch)->class].reserved )                \
        {                                                       \
			WAIT_STATE( (ch), (npulse)/2 );						\
        }                                                       \
        else                                                    \
        {                                                       \
			WAIT_STATE( (ch), 2*(npulse)/3 );					\
        }                                                       \
	    check_improve( (ch), gsn_bodycontrol, TRUE, 3 );        \
	}                                                           \
    else                                                        \
    {                                                           \
		WAIT_STATE( (ch), (npulse) );							\
	}
	
#define WAIT_STATE_SC( ch, npulse)					\
	if ( !IS_NPC(ch) && (!is_affected(ch,gsn_slow))		\
	&&   ( class_table[(ch)->class].fMana )				\
	&&   ( number_percent() < get_skill( (ch), gsn_speedcasting )))	\
	{   if ( class_table[(ch)->class].reserved )                \
        {                                                       \
			WAIT_STATE( (ch), (npulse)/2 );						\
        }                                                       \
        else                                                    \
        {                                                       \
			WAIT_STATE( (ch), 2*(npulse)/3 );					\
        }                                                       \
	    check_improve( (ch), gsn_speedcasting, TRUE, 3 );        \
	}                                                           \
    else                                                        \
    {                                                           \
		WAIT_STATE( (ch), (npulse) );							\
	}
	
#define GET_AP(ch)		( (   IS_NPC (ch) 		\
			          || !IS_HERO(ch) 		\
                                  || (ch)->pcdata->bank==NULL ) ? \
				  (ch)->apoint : (ch)->pcdata->bank->imm_ap )

#define IS_BUILDING(ch)                                           \
        ( IS_NPC(ch)                                              \
        && (ch)->pIndexData->vnum >= FIRST_BUILDING               \
        && (ch)->pIndexData->vnum <= LAST_BUILDING )

/*
 * Object macros.
 */
#define CAN_WEAR(obj, part)	(IS_SET((obj)->wear_flags,  (part)))
#define IS_OBJ_STAT(obj, stat)	(IS_SET((obj)->extra_flags, (stat)))
#define IS_WEAPON_STAT(obj,stat)(IS_SET((obj)->value[4],(stat)))



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

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

/* MobProg - Ender */
struct 	mob_prog_act_list		/* mprog */
{
    MPROG_ACT_LIST * 	next;
    char	   *  	buf;
    CHAR_DATA	   *	ch;
    OBJ_DATA	   *	obj;
    void	   * 	vo;
};

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

struct	obj_prog_data			/* oprog */
{
    OPROG_DATA	   *	next;
    int		  	type;
    char	   *	arglist;
    char	   *	comlist;
};

struct  vrml_obj_data
{
    int            size_x, size_y, size_z;
    char           *     url;
};

struct  vrml_mob_data
{
    int            size_x, size_y, size_z;
    char           *    url;
};

struct  vrml_room_data
{
    int            size_x, size_y, size_z;
    char           *    url;
};

bool 	MOBTrigger;

/*
 * Global constants.
 */
extern	const	struct	evasion_type	evasion_chance	[31];
extern	const	struct	str_app_type	str_app		[31];
extern	const	struct	int_app_type	int_app		[31];
extern	const	struct	wis_app_type	wis_app		[31];
extern	const	struct	dex_app_type	dex_app		[31];
extern	const	struct	con_app_type	con_app		[31];

extern	const	struct	class_type	class_table	[MAX_CLASS];
extern  const   struct  aff_type        aff_table       [];
extern	const	struct	attack_type	attack_table	[MAX_DAMAGE_MESSAGE];
extern  const	struct  race_type	race_table	[];
extern	const	struct	pc_race_type	pc_race_table	[];
extern          struct	clan_data	clan_table	[MAX_CLAN];
extern  const   struct  building_data   building_table  [MAX_BUILDING];
extern          struct  warchart_data   warchart        [MAX_WARCHART];
extern	const	struct	liq_type	liq_table	[LIQ_MAX];
extern	const	struct	teamname_type	teamname_table	[50];
extern          struct	newsgroup_type	newsgroup_table [MAX_BBS_NEWSGROUP];
extern	const	struct	skill_type	skill_table	[MAX_SKILL];
extern  const   struct  group_type      group_table	[MAX_GROUP];
extern  const   struct  song_type       song_table      [MAX_SONG]; /* Zor */
extern          struct social_type      social_table    [MAX_SOCIALS];
extern	char *	const			title_table	[MAX_CLASS]
							[MAX_LEVEL+1]
							[2];
extern	char	str_bank[];



/*
 * Global variables.
 */
extern		HELP_DATA	  *	help_first;
extern		SHOP_DATA	  *	shop_first;

extern		BAN_DATA	  *	ban_list;
extern		CHAR_DATA	  *	char_list;
extern		AREA_DATA	  *	area_first;
extern		DESCRIPTOR_DATA   *	descriptor_list;
extern		OBJ_DATA	  *	object_list;
extern      NOTE_DATA     *     bbs_list [MAX_BBS_NEWSGROUP];

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

extern		char			bug_buf		[];
extern		time_t			current_time;
extern		bool			fLogAll;
extern		FILE *			fpReserve;
extern		KILL_DATA		kill_table	[];
extern		char			log_buf		[];
extern		char			color_buf	[]; /* Marble */
extern		TIME_INFO_DATA		time_info;
extern		WEATHER_DATA		weather_info;

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

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

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

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

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

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

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

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

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

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

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



/*
 * The crypt(3) function is not available on some operating systems.
 * In particular, the U.S. Government prohibits its export from the
 *   United States to foreign countries.
 * Turn on NOCRYPT to keep passwords in plain text.
 */
#if	defined(NOCRYPT)
#define crypt(s1, s2)	(s1)
#endif



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

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

#if defined(unix)
#define PLAYER_DIR	"../player/"	/* Player files			*/
#define PLAYER_TEMP	"../player/temp"
#define GOD_DIR		"../gods/"	/* list of gods			*/
#define NULL_FILE	"/dev/null"	/* To reserve one stream	*/
#define MOB_DIR		"MOBProgs/"	/* mprog */
#define OBJ_DIR     "OBJProgs/" /* oprog */
#define BBS_DIR		"BBS/"          /* BBS files */
#define QUEST_DIR	"QUEST/"        /* Quest Mobs and Items */
#endif

#define AREA_LIST	"area.lst"	/* List of areas		*/

#define BUG_FILE	"bugs.txt"      /* For 'bug' and bug( )		*/
#define IDEA_FILE	"ideas.txt"	/* For 'idea'			*/
#define TYPO_FILE	"typos.txt"     /* For 'typo'			*/
#define SHUTDOWN_FILE	"shutdown.txt"	/* For 'shutdown'		*/

/*
 * Our function prototypes.
 * One big lump ... this is every function in Merc.
 */
#define CD	CHAR_DATA
#define MID	MOB_INDEX_DATA
#define OD	OBJ_DATA
#define OID	OBJ_INDEX_DATA
#define RID	ROOM_INDEX_DATA
#define SF	SPEC_FUN
#define CDTD    CD_TEMP_DATA 


void do_resetwartime( CHAR_DATA *, char *);
void startwar();
void do_wlist( CHAR_DATA *, char *);
void do_wbuy( CHAR_DATA *, char *);
void do_teamtalk( CHAR_DATA *, char *);
void do_teamlist( CHAR_DATA *, char *);
void free_war_mem();
void create_team();
void split_team(int);
void team_list(CHAR_DATA *, bool);
void remove_member( CHAR_DATA *);
/* act_comm.c */
bool    is_note_to      args( ( CHAR_DATA *ch, NOTE_DATA *pnote ) );
void  	check_sex	args( ( CHAR_DATA *ch) );
void	add_follower	args( ( CHAR_DATA *ch, CHAR_DATA *master ) );
void	stop_follower	args( ( CHAR_DATA *ch ) );
void 	nuke_pets	args( ( CHAR_DATA *ch ) );
void	die_follower	args( ( CHAR_DATA *ch ) );
bool	is_same_group	args( ( CHAR_DATA *ach, CHAR_DATA *bch ) );
bool	is_same_room	args( ( CHAR_DATA *ach, CHAR_DATA *bch ) ); /* Marble */
int	find_door	args( ( CHAR_DATA *ch, char *arg ) ); /* added by Snowdrop */
void 	do_announce	args( ( CHAR_DATA *ch, char *argument) );
void 	do_war   	args( ( CHAR_DATA *ch, char *argument) );
void 	do_war_conf   	args( ( CHAR_DATA *ch, char *argument) );
void 	do_chat 	args( ( CHAR_DATA *ch, char *argument) );
void 	do_shout 	args( ( CHAR_DATA *ch, char *argument) );
void	colorize	args( ( const char *str, char *buf, CHAR_DATA *ch ) );
void    note_delete     args( ( NOTE_DATA *pnote, int newsgroup_no, char *argument ) ); 
void    send_auction    args( ( char *argument ) );
void    changeatype     args( ( CHAR_DATA *ch, int atype, int amount ) );
void    process_auction args( ( ) );

/* act_info.c */
int     has_item    args( ( CHAR_DATA *ch, char *item_name) );
void	set_title	args( ( CHAR_DATA *ch, char *title ) );
void	do_impinfo	args( ( CHAR_DATA *ch, char *argument, int priority) );
int     pcount      args( ( void ) );

/* act_move.c */
void	move_char	args( ( CHAR_DATA *ch, int door, bool follow ) );
void	update_mount	args( ( CHAR_DATA *ch ) );
void	do_toggle_regen 	args( ( CHAR_DATA *ch, char *argument ) );

/* act_obj.c */
bool	can_loot	    args( (CHAR_DATA *ch, OBJ_DATA *obj) );
void    get_obj         args( ( CHAR_DATA *ch, OBJ_DATA *obj,
                            OBJ_DATA *container ) );
int	    do_count_obj	args( ( CHAR_DATA *ch, char *argument) );
void    obj_damage      args( (char* short_descr, int sn, int level,
                               CHAR_DATA *victim, OBJ_DATA *obj ) );

/* act_wiz.c */
bool has_key        args(( CHAR_DATA *ch, int key ));
void do_gain_class  args(( CHAR_DATA *ch, int newclass ));
void do_war_score   args(( CHAR_DATA *ch, char *argument ));
void do_set         args(( CHAR_DATA *ch, char*argument ));
void do_eset        args(( CHAR_DATA *ch, char*argument ));
void do_mset        args(( CHAR_DATA *ch, char*argument ));
void do_oset        args(( CHAR_DATA *ch, char*argument ));
void do_rset        args(( CHAR_DATA *ch, char*argument ));
void do_sset        args(( CHAR_DATA *ch, char*argument ));

/* clan.c */
void ap_looted          args(( CHAR_DATA *ch, int clan, int ap ));
int  calculate_fee      args( ( int num ) );            /* SunRunner */
bool clan_count_class   args ( ( int clan, char *class, int num ) ); /* SunRunner */
int  count_member	args( ( int clan ) );
int  count_hero	        args( ( int clan ) );
int  count_ap	        args( ( int clan ) );
bool is_in_clan_room    args( ( CHAR_DATA *ch ) );      /* SunRunner */
bool is_leader	        args( ( CHAR_DATA *ch, int clan ) );
int  min_fund_needed    args( ( int clan ) );           /* SunRunner */

/* comm.c */
void	show_string	args( ( struct descriptor_data *d, char *input) );
void	close_socket	args( ( DESCRIPTOR_DATA *dclose ) );
void	write_to_buffer	args( ( DESCRIPTOR_DATA *d, const char *txt,
			    int length ) );
void	send_to_char	args( ( const char *txt, CHAR_DATA *ch ) );
void	page_to_char	args( ( const char *txt, CHAR_DATA *ch ) );
void	act		args( ( const char *format, CHAR_DATA *ch,
			    const void *arg1, const void *arg2, int type ) );
void	act_new		args( ( const char *format, CHAR_DATA *ch, 
			    const void *arg1, const void *arg2, int type,
			    int min_pos) );
ROOM_INDEX_DATA *       find_location   args( ( CHAR_DATA *ch, char *arg ) );

/* db.c */
void	boot_db		args( ( void ) );
void	area_update	args( ( void ) );
CD *	create_mobile	args( ( MOB_INDEX_DATA *pMobIndex ) );
void	clone_mobile	args( ( CHAR_DATA *parent, CHAR_DATA *clone) );
OD *	create_object	args( ( OBJ_INDEX_DATA *pObjIndex, int level ) );
void	clone_object	args( ( OBJ_DATA *parent, OBJ_DATA *clone ) );
void	clear_char	args( ( CHAR_DATA *ch ) );
void	free_char	args( ( CHAR_DATA *ch ) );
char *	get_extra_descr	args( ( const char *name, EXTRA_DESCR_DATA *ed ) );
MID *	get_mob_index	args( ( int vnum ) );
OID *	get_obj_index	args( ( int vnum ) );
RID *	get_room_index	args( ( int vnum ) );
char	fread_letter	args( ( FILE *fp ) );
int	fread_number	args( ( FILE *fp ) );
long 	fread_flag	args( ( FILE *fp ) );
char *	fread_string	args( ( FILE *fp ) );
char *  fread_string_eol args(( FILE *fp ) );
void	fread_to_eol	args( ( FILE *fp ) );
char *	fread_word	args( ( FILE *fp ) );
long	flag_convert	args( ( char letter) );
void *	alloc_mem	args( ( int sMem ) );
void *	alloc_perm	args( ( int sMem ) );
void	free_mem	args( ( void *pMem, int sMem ) );
char *	str_dup		args( ( const char *str ) );
void	free_string	args( ( char *pstr ) );
int	number_fuzzy	args( ( int number ) );
int	number_range	args( ( int from, int to ) );
int	number_percent	args( ( void ) );
int	number_door	args( ( void ) );
int	number_bits	args( ( int width ) );
int     number_mm       args( ( void ) );
int	dice		args( ( int number, int size ) );
int	interpolate	args( ( int level, int value_00, int value_32 ) );
void	smash_tilde	args( ( char *str ) );
void	smash_ch_  	args( ( char _ch1_, char _ch2_, char *str ) );
bool	str_cmp		args( ( const char *astr, const char *bstr ) );
bool	str_prefix	args( ( const char *astr, const char *bstr ) );
bool	str_infix	args( ( const char *astr, const char *bstr ) );
bool	str_suffix	args( ( const char *astr, const char *bstr ) );
char *	capitalize	args( ( const char *str ) );
void	append_file	args( ( CHAR_DATA *ch, char *file, char *str ) );
void	bug         args( ( const char *str, int param ) );
void	log_string	args( ( const char *str ) );
void	log_lvl		args( ( const char *str ) ); /* Marble */
void	log_ap		args( ( const char *str ) ); /* SunRunner */
void	log_warn	args( ( const char *str, CHAR_DATA *ch ) ); /* SunRunner */
void	tail_chain	args( ( void ) );
BANK_DATA *create_bank	args( ( void ) );
void	free_bank	args( ( BANK_DATA *bank, int clan ) );
CDTD *create_temp_data	args( ( void ) ); /* SunRunner */
void	free_temp_data	args( ( CD_TEMP_DATA *temp_data ) ); /* SunRunner */
void    load_bbs        args( ( char *argument ) ); /* SunRunner */
void	reset_area	args( ( AREA_DATA *pArea) );

/* fight.c */
bool 	is_safe		args( (CHAR_DATA *ch, CHAR_DATA *victim ) );
bool 	is_safe_spell	args( (CHAR_DATA *ch, CHAR_DATA *victim, bool area ) );
void	violence_update	args( ( void ) );
void	multi_hit	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt ) );
bool	damage		args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam,
			    int dt, int class ) );
void	update_pos	args( ( CHAR_DATA *victim ) );
void	stop_fighting	args( ( CHAR_DATA *ch, bool fBoth ) );
void  	death_cry	args( ( CHAR_DATA *ch ) );
bool	check_for_kill	args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam ) );
void	dblow		args( ( CHAR_DATA *ch ) );
void	check_winwar	args(  ()               );
bool    check_can_kill_in_war args( (int team, int charlevel, int 
victimlevel) );
void    burn   args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam, char * src) );

/* handler.c */
bool	is_elemental    args( (int dt));
int 	check_immune	args( (CHAR_DATA *ch, int dam_type) );
int 	material_lookup args( ( const char *name) );
int	race_lookup	args( ( const char *name) );
int	clan_lookup	args( ( const char *name) );
int	class_lookup	args( ( const char *name) );
int     newsgroup_lookup  args( ( const char *name ) );   /* SunRunner */
int     building_lookup   args( ( const char *name ) );   /* SunRunner */
bool	is_old_mob	args ( (CHAR_DATA *ch) );
int	get_skill	args( ( CHAR_DATA *ch, int sn ) );
int	get_expertise	args( ( CHAR_DATA *ch, int sn ) ); /* expertise--Zee */
int	expert_mod_damage args( ( CHAR_DATA *ch, int sn, int damage ) );
int	expert_mod_thac0 args( ( CHAR_DATA *ch, int sn, int thac0 ) );
int	get_weapon_sn	args( ( CHAR_DATA *ch ) );
int     get_age         args( ( CHAR_DATA *ch ) );
void    reset_room      args( ( ROOM_INDEX_DATA *room ) );
void	reset_char	args( ( CHAR_DATA *ch )  );
int	get_trust	args( ( CHAR_DATA *ch ) );
int get_char_size	args( ( CHAR_DATA *ch ) );
int	get_curr_stat	args( ( CHAR_DATA *ch, int stat ) );
int 	get_max_train	args( ( CHAR_DATA *ch, int stat ) );
int	can_carry_n	args( ( CHAR_DATA *ch ) );
int	can_carry_w	args( ( CHAR_DATA *ch ) );
bool	is_name		args( ( char *str, char *namelist ) );
bool	is_name_prefix	args( ( char *str, char *namelist ) );
void	affect_to_char	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	affect_to_char_obj args( ( CHAR_DATA *ch, AFFECT_DATA *paf, OBJ_DATA *obj ) );
void	affect_to_obj	args( ( OBJ_DATA *obj, AFFECT_DATA *paf ) );
void	affect_remove	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	affect_remove_obj args( (OBJ_DATA *obj, AFFECT_DATA *paf ) );
void	affect_strip	args( ( CHAR_DATA *ch, int sn ) );
void	affect_strip_obj args( ( CHAR_DATA *ch, AFFECT_DATA *opaf, OBJ_DATA *obj ) );
bool	is_affected	args( ( CHAR_DATA *ch, int sn ) );
void	affect_join	args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void	char_from_room	args( ( CHAR_DATA *ch ) );
void	char_to_room	args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex ) );
void	obj_to_char	args( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void	obj_from_char	args( ( OBJ_DATA *obj ) );
int	apply_ac	args( ( OBJ_DATA *obj, int iWear, int type ) );
OD *	get_eq_char	args( ( CHAR_DATA *ch, int iWear ) );
void	equip_char	args( ( CHAR_DATA *ch, OBJ_DATA *obj, int iWear ) );
void	unequip_char	args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
int	count_obj_list	args( ( OBJ_INDEX_DATA *obj, OBJ_DATA *list ) );
void	obj_from_room	args( ( OBJ_DATA *obj ) );
void	obj_to_room	args( ( OBJ_DATA *obj, ROOM_INDEX_DATA *pRoomIndex ) );
void	obj_to_obj	args( ( OBJ_DATA *obj, OBJ_DATA *obj_to ) );
void	obj_from_obj	args( ( OBJ_DATA *obj ) );
void	extract_obj	args( ( OBJ_DATA *obj ) );
void	extract_char	args( ( CHAR_DATA *ch, bool fPull ) );
CD *	get_char_room	args( ( CHAR_DATA *ch, char *argument ) );
CD *	get_char_world	args( ( CHAR_DATA *ch, char *argument ) );
CD *	get_char_area	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_type	args( ( OBJ_INDEX_DATA *pObjIndexData ) );
OD *	get_obj_list	args( ( CHAR_DATA *ch, char *argument,
			    OBJ_DATA *list ) );
OD *	get_obj_carry	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_wear	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_here	args( ( CHAR_DATA *ch, char *argument ) );
OD *	get_obj_world	args( ( CHAR_DATA *ch, char *argument ) );
OD *	create_money	args( ( int amount ) );
int	get_obj_number	args( ( OBJ_DATA *obj ) );
int	get_obj_weight	args( ( OBJ_DATA *obj ) );
bool	room_is_dark	args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool	room_is_private	args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool	can_see		args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool	can_see_obj	args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool	can_see_room	args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex) );
bool	can_drop_obj	args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool	can_kill_in_war	args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
char *	item_type_name	args( ( OBJ_DATA *obj ) );
char *	affect_loc_name	args( ( int location ) );
char *	affect_bit_name	args( ( int vector ) );
char *  songs_affect_bit_name args( ( int vector ) );
char *	off_bit_name	args( ( int off_flags ) );
char *  imm_bit_name	args( ( int imm_flags ) );
char * 	form_bit_name	args( ( int form_flags ) );
char *	part_bit_name	args( ( int part_flags ) );
char *	weapon_bit_name	args( ( int weapon_flags ) );
char *  comm_bit_name	args( ( int comm_flags ) );
char *  obj_condition   args( ( OBJ_DATA *obj ) );
bool    is_enemy	args( ( CHAR_DATA *ch, CHAR_DATA *victim) );
bool    is_friend	args( ( CHAR_DATA *ch, CHAR_DATA *victim) );
bool    is_clansman args( ( CHAR_DATA *ch, CHAR_DATA *victim) );
bool    is_disguised    args( ( CHAR_DATA *ch ) );      /* SunRunner */
bool    is_shapeshift   args( ( CHAR_DATA *ch ) );      /* Jasper */
bool    is_night        args( ( void ) );               /* SunRunner */
bool    is_pfile_corrupted  args ( ( CHAR_DATA *ch) );  /* SunRunner */
bool    is_drunk        args( ( CHAR_DATA *ch ) );      /* SunRunner */
bool	is_spell		args( ( int sn ) ); /* Zee */
int		eval_obj		args( ( OBJ_DATA *obj ) );
void 	set_obj_serial  args( ( OBJ_DATA *obj, unsigned int serial ) );
bool	is_same_alignment  args( ( CHAR_DATA *ch, CHAR_DATA *victim) );
int	check_level args( (CHAR_DATA *ch) );
int     get_level_boost args( (CHAR_DATA *ch) );

/* interp.c */
void	interpret	args( ( CHAR_DATA *ch, char *argument ) );
bool	is_number	args( ( char *arg ) );
int	number_argument	args( ( char *argument, char *arg ) );
char *	one_argument	args( ( char *argument, char *arg_first ) );

/* magic.c */
int 	mana_cost 	(CHAR_DATA *ch, int min_mana, int level);
int	skill_lookup	args( ( const char *name ) );
int	slot_lookup	args( ( int slot ) );
bool	saves_spell	args( ( int level, CHAR_DATA *victim ) );
void	obj_cast_spell	args( ( int sn, int level, CHAR_DATA *ch,
				    CHAR_DATA *victim, OBJ_DATA *obj ) );
void    say_spell       args( ( CHAR_DATA *ch, int sn ) );

/* harp.c -Zor */
int     check_song       args( ( CHAR_DATA *ch ) );
int     song_lookup      args( ( const char *name ) );
int     song_slot_lookup args( ( int song ) );
void    harp_song        args( ( CHAR_DATA *ch, int sn ) );
bool    check_disrupt    args( ( CHAR_DATA *ch ) );

/* save.c */
void	save_char_obj	args( ( CHAR_DATA *ch ) );
bool	load_char_obj	args( ( DESCRIPTOR_DATA *d, char *name, bool lpet ) );
void	save_clan	args( ( int clan ) );
void	load_clan	args( ( int clan ) );
void    save_quest_mobs args( ( void ) );
void    save_quest_objs args( ( void ) );
void    load_quest_mobs args( ( void ) );
void    load_quest_objs args( ( void ) );

/* skills.c */
bool 	parse_gen_groups args( ( CHAR_DATA *ch,char *argument ) );
void 	list_group_costs args( ( CHAR_DATA *ch ) );
void    list_group_known args( ( CHAR_DATA *ch ) );
int 	exp_per_level	args( ( CHAR_DATA *ch, int points ) );
void 	check_improve	args( ( CHAR_DATA *ch, int sn, bool success, 
				    int multiplier ) );
void 	check_improve2	args( ( CHAR_DATA *ch, int sn, bool success, 
				    int multiplier, bool is_npc ) );
int 	group_lookup	args( (const char *name) );
void	gn_add		args( ( CHAR_DATA *ch, int gn) );
void 	gn_remove	args( ( CHAR_DATA *ch, int gn) );
void 	group_add	args( ( CHAR_DATA *ch, const char *name, bool deduct) );
void	group_remove	args( ( CHAR_DATA *ch, const char *name) );

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

/* update.c */
void	advance_level	args( ( CHAR_DATA *ch, char *argument ) ); /*Marble*/
void	check_hero_level args( ( CHAR_DATA *ch ) );
int     gain_thirst     args( ( CHAR_DATA *ch, int sn ) );
void	gain_ap		args( ( CHAR_DATA *ch, int gain ) );
void	gain_exp	args( ( CHAR_DATA *ch, int gain ) );
void	gain_condition	args( ( CHAR_DATA *ch, int iCond, int value ) );
bool    gain_obj_cond	args( ( CHAR_DATA *ch, OBJ_DATA *obj, int iCond ) );
void	update_handler	args( ( int flag ) );
bool	check_object	args( ( OBJ_DATA *obj ) );

/* mob_prog.c - Ender mprog */
#ifdef DUNNO_STRSTR
char *  strstr                  args ( (const char *s1, const char *s2 ) );
#endif

void    mprog_wordlist_check    args ( ( char * arg, CHAR_DATA *mob,
                                        CHAR_DATA* actor, OBJ_DATA* object,
                                        void* vo, int type ) );
void    mprog_percent_check     args ( ( CHAR_DATA *mob, CHAR_DATA* actor,
                                        OBJ_DATA* object, void* vo,
                                        int type ) );
void    mprog_act_trigger       args ( ( char* buf, CHAR_DATA* mob,
                                        CHAR_DATA* ch, OBJ_DATA* obj,
                                        void* vo ) );
void    mprog_bribe_trigger     args ( ( CHAR_DATA* mob, CHAR_DATA* ch,
                                        int amount ) );
void    mprog_entry_trigger     args ( ( CHAR_DATA* mob ) );
void    mprog_give_trigger      args ( ( CHAR_DATA* mob, CHAR_DATA* ch,
                                        OBJ_DATA* obj ) ); 
void    mprog_greet_trigger     args ( ( CHAR_DATA* mob ) );
void    mprog_fight_trigger     args ( ( CHAR_DATA* mob, CHAR_DATA* ch ) );
void    mprog_hitprcnt_trigger  args ( ( CHAR_DATA* mob, CHAR_DATA* ch ) );
void    mprog_death_trigger     args ( ( CHAR_DATA* mob ) );
void    mprog_random_trigger    args ( ( CHAR_DATA* mob ) );
void    mprog_speech_trigger    args ( ( char* txt, CHAR_DATA* mob ) );

/* obj_prog.c - Ender oprog */
void    oprog_trigger      args ( ( OBJ_DATA* obj, CHAR_DATA* ch, int type ) );
void    oprog_random_trigger    args ( ( OBJ_DATA* obj ) );
void    oprog_say_trigger   args( ( char* txt, CHAR_DATA *ch ) );

/* string.c OLC */
char *  format_string   args( ( char *oldstring /*, bool fSpace */ ) );
void    string_edit     args( ( CHAR_DATA *ch, char **pString ) );
void    string_add      args( ( CHAR_DATA *ch, char *argument ) );
void    string_append   args( ( CHAR_DATA *ch, char **pString ) );
char *  first_arg       args( ( char *argument, char *arg_first, bool fCase ) );
char *  string_replace  args( ( char * orig, char * old, char * new ) );
char *  string_proper   args( ( char * argument ) );
char *  string_unpad    args( ( char * argument ) );
int     arg_count       args( ( char *argument ) );

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

/* hunt.c */
void    hunt_victim         args( ( CHAR_DATA *ch) );    

/* hunt.c */
char *  split_ch_           args( ( char dw_ch_,
                                char *argument, char *arg_first ) );

/* war.c */
void    inspect_warchart    args( ( CHAR_DATA *ch ) );
void    load_warchart       args( ( void ) );
void    save_warchart       args( ( void ) );

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