/****************************************************************************
* [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | \\._.// *
* -----------------------------------------------------------| (0...0) *
* SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by Derek Snider | ).:.( *
* -----------------------------------------------------------| {o o} *
* SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus, | / ' ' \ *
* Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek, |~'~.VxvxV.~'~*
* Tricops and Fireblade | *
* ------------------------------------------------------------------------ *
* Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* Win32 port by Nick Gammon *
* ------------------------------------------------------------------------ *
* ResortMUD 4.0 improvements copyright (C) 1999 by Peter Keeler *
* ------------------------------------------------------------------------ *
* Rogue Winds 2.0 copyright (C) 2000 by Heather Dunn *
* ------------------------------------------------------------------------ *
* Main mud header file *
****************************************************************************/
#include <stdarg.h>
#include <stdlib.h>
#include <limits.h>
/*
#include "/smaug/ucmm/dmalloc/include/dmalloc.h"
*/
/* Dmalloc is a memory debugging library -- Scion */
/* force the who command to require an argument (should use cset) */
// #define REQWHOARG /* I don't think so.. - shogar */
#ifdef WIN32
#include <winsock.h>
#include <sys/types.h>
#pragma warning( disable: 4018 4244 4761)
#define NOCRYPT
#define index strchr
#define rindex strrchr
#else
#include <unistd.h>
#ifndef SYSV
#include <sys/cdefs.h>
#else
#include <re_comp.h>
#endif
#include <sys/time.h>
#endif
typedef int ch_ret;
typedef int obj_ret;
/*
* Accommodate old non-Ansi compilers.
*/
#if defined(TRADITIONAL)
#define const
#define args( list ) ( )
#define DECLARE_DO_FUN( fun ) void fun( )
#define DECLARE_SPEC_FUN( fun ) bool fun( )
#define DECLARE_SPELL_FUN( fun ) ch_ret fun( )
#else
#define args( list ) list
#define DECLARE_DO_FUN( fun ) DO_FUN fun
#define DECLARE_SPEC_FUN( fun ) SPEC_FUN fun
#define DECLARE_SPELL_FUN( fun ) SPELL_FUN fun
#endif
/*
* Short scalar types.
* Diavolo reports AIX compiler has bugs with short types.
*/
#if !defined(FALSE)
#define FALSE 0
#endif
#if !defined(TRUE)
#define TRUE 1
#endif
#if !defined(BERR)
#define BERR 255
#endif
#if defined(_AIX)
#if !defined(const)
#define const
#endif
typedef int sh_int;
typedef int bool;
#define unix
#else
/* enuf of this, too many places where this is messing things up -shogar */
/* typedef short int sh_int; */
typedef int sh_int;
typedef unsigned char bool;
#endif
/*
* Structure types.
*/
typedef struct alias_data ALIAS_DATA;
typedef struct affect_data AFFECT_DATA;
typedef struct area_data AREA_DATA;
typedef struct ban_data BAN_DATA;
typedef struct extracted_char_data EXTRACT_CHAR_DATA;
typedef struct char_data CHAR_DATA;
typedef struct hunt_hate_fear HHF_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 menu_data MENU_DATA;
typedef struct mob_index_data MOB_INDEX_DATA;
typedef struct obj_data OBJ_DATA;
typedef struct obj_index_data OBJ_INDEX_DATA;
typedef struct pc_data PC_DATA;
typedef struct reset_data RESET_DATA;
typedef struct map_index_data MAP_INDEX_DATA; /* maps */
typedef struct map_data MAP_DATA; /* maps */
typedef struct room_index_data ROOM_INDEX_DATA;
typedef struct shop_data SHOP_DATA;
typedef struct reserve_data RESERVE_DATA;
typedef struct time_info_data TIME_INFO_DATA;
typedef struct hour_min_sec HOUR_MIN_SEC;
typedef struct weather_data WEATHER_DATA;
typedef struct neighbor_data NEIGHBOR_DATA; /* FB */
typedef struct mob_prog_data MPROG_DATA;
typedef struct mob_prog_act_list MPROG_ACT_LIST;
typedef struct editor_data EDITOR_DATA;
typedef struct timer_data TIMER;
typedef struct godlist_data GOD_DATA;
typedef struct system_data SYSTEM_DATA;
typedef struct smaug_affect SMAUG_AFF;
typedef struct who_data WHO_DATA;
typedef struct skill_type SKILLTYPE;
typedef struct social_type SOCIALTYPE;
typedef struct cmd_type CMDTYPE;
typedef struct killed_data KILLED_DATA;
typedef struct deity_data DEITY_DATA;
typedef struct wizent WIZENT;
typedef struct ignore_data IGNORE_DATA;
typedef struct immortal_host IMMORTAL_HOST;
typedef struct extended_bitvector EXT_BV;
typedef struct lcnv_data LCNV_DATA;
typedef struct olc_data OLC_DATA; /* Tagith */
typedef struct material_data MATERIAL_DATA; /* Scion */
typedef struct trail_data TRAIL_DATA; /* Scion */
typedef struct spell_data SPELL_DATA; /* Scion */
typedef struct clan_member_data CLAN_MEMBER; /* Scion */
typedef struct clan_data CLAN_DATA; /* Scion */
typedef struct bit_data BIT_DATA; /* Scion */
typedef struct moon_data MOON_DATA; /* Keolah */
typedef struct species_data SPECIES_DATA;
typedef struct nation_data NATION_DATA;
typedef struct part_data PART_DATA;
typedef struct recipe_data RECIPE_DATA;
typedef struct ingred_data INGRED_DATA;
typedef struct mat_shop_data MAT_SHOP;
typedef struct generic_mob_data GENERIC_MOB;
typedef struct explored_area_data EXPLORED_AREA;
typedef struct mutation_data MUT_DATA;
typedef struct player_mutation_data PMUT_DATA;
typedef struct city_data CITY_DATA;
typedef struct construct_data CONSTRUCT_DATA;
typedef struct channel_data CHANNEL_DATA;
typedef struct channel_member_data CHANNEL_MEMBER;
typedef struct arena_data ARENA_DATA;
typedef struct arena_member_data ARENA_MEMBER;
typedef struct bet_data BET_DATA;
typedef struct new_help_data NEW_HELP_DATA;
typedef struct book_data BOOK_DATA;
/*
* Function types.
*/
typedef void DO_FUN args( ( CHAR_DATA *ch, char *argument ) );
typedef bool SPEC_FUN args( ( CHAR_DATA *ch ) );
typedef ch_ret SPELL_FUN args( ( int sn, int wil, CHAR_DATA *ch, void *vo ) );
#define DUR_CONV 23.333333333333333333333333
#define HIDDEN_TILDE '*'
/* 32bit bitvector defines */
#define BV00 (1 << 0)
#define BV01 (1 << 1)
#define BV02 (1 << 2)
#define BV03 (1 << 3)
#define BV04 (1 << 4)
#define BV05 (1 << 5)
#define BV06 (1 << 6)
#define BV07 (1 << 7)
#define BV08 (1 << 8)
#define BV09 (1 << 9)
#define BV10 (1 << 10)
#define BV11 (1 << 11)
#define BV12 (1 << 12)
#define BV13 (1 << 13)
#define BV14 (1 << 14)
#define BV15 (1 << 15)
#define BV16 (1 << 16)
#define BV17 (1 << 17)
#define BV18 (1 << 18)
#define BV19 (1 << 19)
#define BV20 (1 << 20)
#define BV21 (1 << 21)
#define BV22 (1 << 22)
#define BV23 (1 << 23)
#define BV24 (1 << 24)
#define BV25 (1 << 25)
#define BV26 (1 << 26)
#define BV27 (1 << 27)
#define BV28 (1 << 28)
#define BV29 (1 << 29)
#define BV30 (1 << 30)
#define BV31 (1 << 31)
/* 32 USED! DO NOT ADD MORE! SB */
/*
* String and memory management parameters.
*/
/* Desperation move on my part- the crashing started with the new 30+ areas,
the links seem to be dropping on almost everything, so... what the hell
... maybe the btree cant support as many levels as are being created
shogar
*/
/*
#define MAX_KEY_HASH 2048
*/
#define MAX_KEY_HASH 4096
#define MAX_STRING_LENGTH 4096 /* buf */
#define MAX_INPUT_LENGTH 1024 /* arg */
#define MAX_INBUF_SIZE 1024
#define HASHSTR /* use string hashing */
#define MAX_LAYERS 8 /* maximum clothing layers */
#define MAX_NEST 100 /* maximum container nesting */
/*
* Color Alignment Parameters
*/
#define ALIGN_LEFT 1
#define ALIGN_CENTER 2
#define ALIGN_RIGHT 3
/*
* Game parameters.
* Increase the max'es if you add more of something.
* Adjust the pulse numbers to suit yourself.
*/
#define MAX_EXP_WORTH 500000
#define MIN_EXP_WORTH 20
#define MAX_REXITS 20 /* Maximum exits allowed in 1 room */
#define MAX_SKILL 800
#define MAX_RACE 40 /* (was 19) added more 3/25/99 Scion */
#define MAX_NPC_RACE 91
#define MAX_MATERIALS 200 /* Object material types -- Scion */
#define MAX_MOONS 50
#define MAX_DEITY 50
#define MAX_HERB 20
#define MAX_ALIAS 20 /* alias - shogar */
#define MAX_DISEASE 20
#define MAX_WHERE_NAME 27
#define MAX_MOBS 10 /* Areas won't reset if more than this * areas mobs in the game */
#define MAX_OBJS 50 /* Areas won't reset if more than this * areas objs in the game */
#define MAX_xBITS 32000
#define SECONDS_PER_TICK 70
#define PULSE_PER_SECOND 4
#define PULSE_VIOLENCE (3 * PULSE_PER_SECOND)
#define PULSE_MOBILE (4 * PULSE_PER_SECOND)
#define PULSE_TICK (SECONDS_PER_TICK * PULSE_PER_SECOND)
#define PULSE_AREA (60 * PULSE_PER_SECOND)
#define PULSE_TIME (60 * 10 * PULSE_PER_SECOND)
/*
* Stuff for area versions --Shaddai
*/
int area_version;
#define HAS_SPELL_INDEX -1
#define AREA_VERSION_WRITE 1
/*
* Command logging types.
*/
typedef enum
{
LOG_NORMAL, LOG_ALWAYS, LOG_NEVER, LOG_BUILD, LOG_HIGH, LOG_COMM,
LOG_WARN, LOG_ALL
} log_types;
/*
* Return types for move_char, damage, greet_trigger, etc, etc
* Added by Thoric to get rid of bugs
*/
typedef enum
{
rNONE, rCHAR_DIED, rVICT_DIED, rBOTH_DIED, rCHAR_QUIT, rVICT_QUIT,
rBOTH_QUIT, rSPELL_FAILED, rOBJ_SCRAPPED, rOBJ_EATEN, rOBJ_EXPIRED,
rOBJ_TIMER, rOBJ_SACCED, rOBJ_QUAFFED, rOBJ_USED, rOBJ_EXTRACTED,
rOBJ_DRUNK, rCHAR_IMMUNE, rVICT_IMMUNE, rCHAR_AND_OBJ_EXTRACTED = 128,
rERROR = 255
} ret_types;
/* Echo types for echo_to_all */
#define ECHOTAR_ALL 0
#define ECHOTAR_PC 1
#define ECHOTAR_IMM 2
#define ECHOTAR_ROOM 3
#define ECHOTAR_AREA 4
#define ECHOTAR_WORLD 5
/* defines for new do_who */
#define WT_MORTAL 0
#define WT_DEADLY 1
#define WT_IMM 2
#define WT_GROUPED 3
#define WT_GROUPWHO 4
#define WT_GUEST 5
#define WT_STAFF 6
#define WT_ADMIN 7
/*
* Defines for extended bitvectors
*/
#ifndef INTBITS
#define INTBITS 32
#endif
#define XBM 31 /* extended bitmask ( INTBITS - 1 ) */
#define RSV 5 /* right-shift value ( sqrt(XBM+1) ) */
#define XBI 4 /* integers in an extended bitvector */
#define MAX_BITS XBI * INTBITS
/*
* Structure for extended bitvectors -- Thoric
*/
struct extended_bitvector
{
int bits[XBI];
};
#ifdef I3
#include "i3.h"
#endif
#ifdef IMC
#include "imc.h"
#endif
/* abit and qbit struct */
struct bit_data {
int number;
char desc[MAX_STRING_LENGTH];
BIT_DATA *next;
BIT_DATA *prev;
};
struct clan_member_data {
char *name;
char *title;
EXT_BV flags;
int bank;
CLAN_DATA *clan;
CLAN_MEMBER *next;
CLAN_MEMBER *prev;
};
struct clan_data {
char *name;
char *title;
char *info;
int ext_sec;
int int_sec;
int bank;
CLAN_MEMBER *first_member;
CLAN_MEMBER *last_member;
CLAN_DATA *next;
CLAN_DATA *prev;
};
/*
* do_who output structure -- Narn
*/
struct who_data
{
WHO_DATA *prev;
WHO_DATA *next;
char *text;
int type;
};
/*
* Site ban structure.
*/
struct ban_data
{
BAN_DATA *next;
BAN_DATA *prev;
char *name; /* Name of site/race banned */
char *user; /* Name of user from site */
char *ban_by; /* Who banned this site */
char *ban_time; /* Time it was banned */
int unban_date;/* When ban expires */
sh_int duration; /* How long it is banned for */
bool warn; /* Echo on warn channel */
bool prefix; /* Use of *site */
bool suffix; /* Use of site* */
};
/*
* Yeesh.. remind us of the old MERC ban structure? :)
*/
struct reserve_data
{
RESERVE_DATA *next;
RESERVE_DATA *prev;
char *name;
};
/*
* Time and weather stuff.
*/
typedef enum
{
SUN_DARK, SUN_RISE, SUN_LIGHT, SUN_SET
} sun_positions;
typedef enum
{
SKY_CLOUDLESS, SKY_CLOUDY, SKY_RAINING, SKY_LIGHTNING
} sky_conditions;
struct time_info_data
{
int hour;
int day;
int month;
int year;
int sunlight;
};
struct hour_min_sec
{
int hour;
int min;
int sec;
int manual;
};
/* Define maximum number of climate settings - FB */
#define MAX_CLIMATE 5
struct weather_data
{
/* int mmhg;
int change;
int sky;
int sunlight; */
int temp; /* temperature */
int precip; /* precipitation */
int wind; /* umm... wind */
int mana; /* base amount of mana in the zone */
int temp_vector; /* vectors controlling */
int precip_vector; /* rate of change */
int wind_vector;
int mana_vector;
int climate_temp; /* climate of the area */
int climate_precip;
int climate_wind;
int climate_mana;
NEIGHBOR_DATA * first_neighbor; /* areas which affect weather sys */
NEIGHBOR_DATA * last_neighbor;
char * echo; /* echo string */
int echo_color; /* color for the echo */
};
struct neighbor_data
{
NEIGHBOR_DATA *next;
NEIGHBOR_DATA *prev;
char *name;
AREA_DATA *address;
};
/*
* Connected state for a channel.
*/
typedef enum {
CON_GET_NAME = -100,
CON_GET_OLD_PASSWORD,
CON_CONFIRM_NEW_NAME,
CON_GET_NEW_PASSWORD,
CON_CONFIRM_NEW_PASSWORD,
CON_READ_MOTD,
CON_GET_WANT_RIPANSI,
CON_TITLE,
CON_PRESS_ENTER,
CON_WAIT_1,
CON_WAIT_2,
CON_WAIT_3,
CON_ACCEPTED,
CON_GET_NEWBIE,
CON_CHOOSE_SEX,
CON_CHOOSE_SPECIES,
CON_CHOOSE_NATION,
CON_COPYOVER_RECOVER,
CON_PLAYING = 0,
CON_EDITING
} connection_types;
/*
* Character substates
*/
typedef enum
{
SUB_NONE, SUB_PAUSE, SUB_PERSONAL_DESC, SUB_BAN_DESC, SUB_OBJ_SHORT,
SUB_OBJ_LONG, SUB_OBJ_EXTRA, SUB_MOB_LONG, SUB_MOB_DESC, SUB_ROOM_DESC,
SUB_ROOM_EXTRA, SUB_ROOM_EXIT_DESC, SUB_WRITING_NOTE, SUB_MPROG_EDIT,
SUB_HELP_EDIT, SUB_WRITING_MAP, SUB_PERSONAL_BIO, SUB_REPEATCMD,
SUB_RESTRICTED, SUB_DEITYDESC,
SUB_PROJ_DESC,
/* timer types ONLY below this point */
SUB_TIMER_DO_ABORT = 128, SUB_TIMER_CANT_ABORT
} char_substates;
/*
* Descriptor (channel) structure.
*/
struct descriptor_data
{
DESCRIPTOR_DATA * next;
DESCRIPTOR_DATA * prev;
DESCRIPTOR_DATA * snoop_by;
CHAR_DATA * character;
CHAR_DATA * original;
char * host;
int port;
int descriptor;
sh_int connected;
sh_int idle;
sh_int lines;
sh_int scrlen;
bool fcommand;
char inbuf [MAX_INBUF_SIZE];
char incomm [MAX_INPUT_LENGTH];
char inlast [MAX_INPUT_LENGTH];
int repeat;
char * outbuf;
unsigned long outsize;
int outtop;
char * pagebuf;
unsigned long pagesize;
int pagetop;
char * pagepoint;
char pagecmd;
char pagecolor;
char * user;
int auth_fd;
int auth_inc;
int auth_state;
int newstate;
unsigned char prevcolor;
OLC_DATA * olc; /* Tagith */
};
/*
* Attribute bonus structures.
*/
struct str_app_type
{
sh_int tohit;
sh_int todam;
sh_int carry;
sh_int wield;
};
struct int_app_type
{
sh_int learn;
};
struct wis_app_type
{
sh_int practice;
};
struct dex_app_type
{
sh_int defensive;
};
struct con_app_type
{
sh_int hitp;
sh_int shock;
};
struct cha_app_type
{
sh_int charm;
};
struct lck_app_type
{
sh_int luck;
};
/*
* TO types for act.
*/
typedef enum { TO_ROOM, TO_NOTVICT, TO_VICT, TO_CHAR, TO_CANSEE } to_types;
/*
* Real action "TYPES" for act.
*/
#define AT_BLACK 0
#define AT_BLOOD 1
#define AT_DGREEN 2
#define AT_ORANGE 3
#define AT_DBLUE 4
#define AT_PURPLE 5
#define AT_CYAN 6
#define AT_GREY 7
#define AT_DGREY 8
#define AT_RED 9
#define AT_GREEN 10
#define AT_YELLOW 11
#define AT_BLUE 12
#define AT_PINK 13
#define AT_LBLUE 14
#define AT_WHITE 15
#define AT_BLINK 16
#define AT_PLAIN AT_GREY
#define AT_ACTION AT_GREY
#define AT_SAY AT_LBLUE
#define AT_GOSSIP AT_GREEN
#define AT_YELL AT_GREEN
#define AT_TELL AT_RED
#define AT_WHISPER AT_DGREY
#define AT_HIT AT_WHITE
#define AT_HITME AT_YELLOW
#define AT_IMMORT AT_YELLOW
#define AT_HURT AT_RED
#define AT_FALLING AT_WHITE + AT_BLINK
#define AT_DANGER AT_RED + AT_BLINK
#define AT_MAGIC AT_BLUE
#define AT_CONSIDER AT_GREY
#define AT_REPORT AT_GREY
#define AT_POISON AT_GREEN
#define AT_SOCIAL AT_CYAN
#define AT_DYING AT_YELLOW
#define AT_DEAD AT_RED
#define AT_SKILL AT_GREEN
#define AT_CARNAGE AT_BLOOD
#define AT_DAMAGE AT_WHITE
#define AT_FLEE AT_YELLOW
#define AT_OBJECT AT_GREEN
#define AT_PERSON AT_PLAIN
#define AT_LIST AT_BLUE
#define AT_BYE AT_GREEN
#define AT_GOLD AT_YELLOW
#define AT_GTELL AT_BLUE
#define AT_NOTE AT_GREEN
#define AT_HUNGRY AT_ORANGE
#define AT_THIRSTY AT_BLUE
#define AT_FIRE AT_RED
#define AT_FROST AT_LBLUE
#define AT_CHAOS AT_PURPLE
#define AT_SOBER AT_WHITE
#define AT_WEAROFF AT_YELLOW
#define AT_EXITS AT_WHITE
#define AT_SCORE AT_LBLUE
#define AT_RESET AT_DGREEN
#define AT_LOG AT_PURPLE
#define AT_DIEMSG AT_WHITE
#define AT_IGNORE AT_GREEN
#define AT_DIVIDER AT_PLAIN
#define INIT_WEAPON_CONDITION 12
#define MAX_ITEM_IMPACT 30
/*
* Help table types.
*/
struct help_data
{
HELP_DATA * next;
HELP_DATA * prev;
sh_int permit;
char * keyword;
char * text;
};
struct new_help_data {
NEW_HELP_DATA *next;
NEW_HELP_DATA *prev;
char *name;
char *text;
int permit;
};
struct book_data {
BOOK_DATA *next;
BOOK_DATA *prev;
char *title;
char *text;
char *name;
};
/*
* Shop types.
*/
struct shop_data
{
SHOP_DATA * next; /* Next shop in list */
SHOP_DATA * prev; /* Previous shop in list */
int room; /* Vnum of shop room */
int profit_buy;
int profit_sell;
int gold;
int type; /* Only sell items of this type */
int flag; /* Only sell items with this flag */
char * owner; /* Allows player-owned shops */
};
/* Mob program structures */
struct act_prog_data
{
struct act_prog_data *next;
void *vo;
};
struct mob_prog_act_list
{
MPROG_ACT_LIST * next;
char * buf;
CHAR_DATA * ch;
OBJ_DATA * obj;
void * vo;
};
struct mob_prog_data
{
MPROG_DATA * next;
sh_int type;
bool triggered;
int resetdelay;
char * arglist;
char * comlist;
};
bool MOBtrigger;
struct channel_data {
char *name;
char *owner;
int flags;
char *tag;
char *div;
char *clan;
int permit;
char *access;
char *ban;
char *info;
CHANNEL_MEMBER *first_member;
CHANNEL_MEMBER *last_member;
CHANNEL_DATA *next;
CHANNEL_DATA *prev;
};
struct channel_member_data {
CHAR_DATA *ch;
int flags;
CHANNEL_MEMBER *next;
CHANNEL_MEMBER *prev;
};
struct explored_area_data
{
EXT_BV rooms;
int index;
EXPLORED_AREA *next;
EXPLORED_AREA *prev;
};
struct species_data
{
char *name; /* Species name */
sh_int skill_set;
sh_int saving_poison_death;
sh_int saving_wand;
sh_int saving_para_petri;
sh_int saving_breath;
sh_int saving_spell_staff;
int parts;
int disadvantage;
char *adj;
SPECIES_DATA *next;
SPECIES_DATA *prev;
};
struct nation_data
{
char *name; /* Nation name */
char *species; /* Nation's species */
EXT_BV affected; /* Default affect bitvectors */
sh_int hit;
sh_int mana;
int unarmed; /* Percentage modifier to unarmed skill */
sh_int resist;
sh_int suscept;
sh_int ac_plus;
sh_int exp_multiplier;
sh_int height;
sh_int weight;
sh_int metabolism;
sh_int sector; /* Prefered sectortype */
sh_int base_age;
int flags;
NATION_DATA *next;
NATION_DATA *prev;
sh_int str_mod;
sh_int int_mod;
sh_int wis_mod;
sh_int dex_mod;
sh_int con_mod;
sh_int cha_mod;
sh_int lck_mod;
int parts;
sh_int weapon;
char *eyes;
char *hair;
char *skin_color;
char *skin_type;
char *extra_color;
char *extra_type;
};
struct generic_mob_data
{
NATION_DATA *nation;
int chance;
GENERIC_MOB *next;
GENERIC_MOB *prev;
};
struct mutation_data {
int number;
char *desc;
char *gain_self;
char *gain_other;
char *lose_self;
char *lose_other;
AFFECT_DATA *affect;
int rarity;
MUT_DATA *next;
MUT_DATA *prev;
};
struct player_mutation_data {
MUT_DATA *mut;
int duration;
PMUT_DATA *next;
PMUT_DATA *prev;
};
/* Something under construction in a city */
struct construct_data {
int type;
int builders;
int done;
int needed;
int vnum;
CONSTRUCT_DATA *next;
CONSTRUCT_DATA *prev;
};
/* Data structure for the new city management code */
struct city_data {
AREA_DATA *area;
char *name;
int gold;
int food;
int wood;
int iron;
int builders;
int farmers;
int merchants;
int miners;
int peasants;
int houses;
int farms;
int shops;
int forests;
int mines;
CONSTRUCT_DATA *first_building;
CONSTRUCT_DATA *last_building;
CITY_DATA *next;
CITY_DATA *prev;
};
struct recipe_data {
int number;
int ingred1; /* vnum of first ingredient */
int ingred2; /* vnum of second ingredient */
int result; /* vnum of alchemy result */
int flags; /* does it need a fire/drinkcon/etc? */
RECIPE_DATA *next;
RECIPE_DATA *prev;
};
struct ingred_data
{
int vnum;
int rarity;
int sector;
int moisture;
int elevation;
int temp;
int mana;
int precip;
INGRED_DATA *next;
INGRED_DATA *prev;
};
struct deity_data
{
int index;
DEITY_DATA * next;
DEITY_DATA * prev;
char * filename;
char * name;
char * description;
sh_int cost;
char * message;
int count;
char * archmage;
int arch_lvl;
char * color;
};
/*
* An affect.
*
* So limited... so few fields... should we add more?
*/
struct affect_data
{
AFFECT_DATA * next;
AFFECT_DATA * prev;
sh_int type;
sh_int duration;
sh_int location;
int modifier;
EXT_BV bitvector;
};
/*
* A SMAUG spell
*/
struct smaug_affect
{
SMAUG_AFF * next;
char * duration;
sh_int location;
char * modifier;
int bitvector; /* this is the bit number */
};
/***************************************************************************
* *
* VALUES OF INTEREST TO AREA BUILDERS *
* (Start of section ... start here) *
* *
***************************************************************************/
/*
* Well known mob virtual numbers.
* Defined in #MOBILES.
*/
#define MOB_VNUM_CITYGUARD 5331
#define MOB_VNUM_VAMPIRE 18
#define MOB_VNUM_ANIMATED_CORPSE 5
#define MOB_VNUM_POLY_WOLF 10
#define MOB_VNUM_POLY_MIST 11
#define MOB_VNUM_POLY_BAT 12
#define MOB_VNUM_POLY_HAWK 13
#define MOB_VNUM_POLY_CAT 14
#define MOB_VNUM_POLY_DOVE 15
#define MOB_VNUM_POLY_FISH 16
#define MOB_VNUM_GENERIC 17
/*
* ACT bits for mobs.
* Used in #MOBILES.
*/
#define ACT_IS_NPC 0 /* Auto set for mobs */
#define ACT_SENTINEL 1 /* Stays in one room */
#define ACT_SCAVENGER 2 /* Picks up objects */
#define ACT_MAG_FAIL 3 /* Tried to use spec, but pc was immune */
#define ACT_AGGRESSIVE 5 /* Attacks PC's */
#define ACT_STAY_AREA 6 /* Won't leave area */
#define ACT_WIMPY 7 /* Flees when hurt */
#define ACT_PET 8 /* Auto set for pets */
#define ACT_TRAIN 9 /* Can train PC's */
#define ACT_PRACTICE 10 /* Can practice PC's */
#define ACT_PHYS_FAIL 11 /* Tried to use physical attack, but PC was ethereal */
#define ACT_DEADLY 12 /* UNUSED */
#define ACT_POLYSELF 13
#define ACT_META_AGGR 14 /* UNUSED */
#define ACT_GUARDIAN 15 /* Protects master */
#define ACT_RUNNING 16 /* Hunts quickly */
#define ACT_NOWANDER 17 /* Doesn't wander */
#define ACT_MOUNTABLE 18 /* Can be mounted */
#define ACT_MOUNTED 19 /* Is mounted */
#define ACT_NO_CORPSE 20 /* Does not leave a corpse */
#define ACT_SECRETIVE 21 /* actions aren't seen */
#define ACT_NAMED 22 /* Gets generated names */
#define ACT_MOBINVIS 23 /* Like wizinvis */
#define ACT_NOASSIST 24 /* Doesn't assist mobs */
#define ACT_AUTONOMOUS 25 /* UNUSED */
#define ACT_PACIFIST 26 /* Doesn't ever fight */
#define ACT_NOATTACK 27 /* No physical attacks */
#define ACT_ANNOYING 28 /* UNUSED */
#define ACT_PROTOTYPE 30 /* A prototype mob */
/* 26 acts */
/*
* Bits for 'affected_by'.
* Used in #MOBILES.
*/
typedef enum
{
AFF_BLIND, AFF_INVISIBLE, AFF_DETECT_EVIL, AFF_DETECT_INVIS,
AFF_DETECT_MAGIC, AFF_DETECT_HIDDEN, AFF_HOLD, AFF_HOLY,
AFF_FAERIE_FIRE, AFF_INFRARED, AFF_CURSE, AFF_FLAMING, AFF_POISON,
AFF_PROTECT, AFF_PARALYSIS, AFF_SNEAK, AFF_HIDE, AFF_SLEEP, AFF_CHARM,
AFF_FLYING, AFF_PASS_DOOR, AFF_FLOATING, AFF_TRUESIGHT, AFF_DETECTTRAPS,
AFF_ANTHRO, AFF_HAS_ARTI, AFF_ANGEL, AFF_FEAR, AFF_BEAUTY,
AFF_POSSESS, AFF_BERSERK, AFF_AQUA_BREATH, AFF_VOID,
AFF_DREAMWORLD, AFF_HASTE, AFF_SLOW, AFF_DEAF, AFF_NONLIVING,
AFF_COLDBLOOD, AFF_GUARD, AFF_GLOW, AFF_DARK, AFF_AQUATIC,
AFF_DEMON, AFF_SILENT, AFF_PLAGUE, AFF_ROTTING, AFF_MOUNTABLE,
AFF_MOUNTED, AFF_FELINE, AFF_NUISANCE, AFF_UNDEAD,
AFF_CONSTRUCT, AFF_ETHEREAL, AFF_NO_CORPSE, AFF_UNHOLY, AFF_MAGICAL,
MAX_AFFECTED_BY
} affected_by_types;
/*
* Resistant Immune Susceptible flags
*/
#define RIS_FIRE BV00
#define RIS_COLD BV01
#define RIS_ELECTRICITY BV02
#define RIS_ENERGY BV03
#define RIS_BLUNT BV04
#define RIS_PIERCE BV05
#define RIS_SLASH BV06
#define RIS_ACID BV07
#define RIS_POISON BV08
#define RIS_DRAIN BV09
#define RIS_SLEEP BV10
#define RIS_CHARM BV11
#define RIS_HOLD BV12
#define RIS_NONMAGIC BV13
#define RIS_PLUS1 BV14
#define RIS_PLUS2 BV15
#define RIS_PLUS3 BV16
#define RIS_PLUS4 BV17
#define RIS_LIGHT BV18
#define RIS_PSIONIC BV19
#define RIS_MAGIC BV20
#define RIS_PARALYSIS BV21
/* 21 RIS's*/
/*
* Attack types
*/
typedef enum
{
ATCK_BITE, ATCK_CLAWS, ATCK_TAIL, ATCK_STING, ATCK_PUNCH, ATCK_KICK,
ATCK_TRIP, ATCK_BASH, ATCK_STUN, ATCK_GOUGE, ATCK_BACKSTAB, ATCK_FEED,
ATCK_DRAIN, ATCK_FIREBREATH, ATCK_FROSTBREATH, ATCK_ACIDBREATH,
ATCK_LIGHTNBREATH, ATCK_GASBREATH, ATCK_POISON, ATCK_NASTYPOISON, ATCK_GAZE,
ATCK_BLINDNESS, ATCK_CAUSESERIOUS, ATCK_EARTHQUAKE, ATCK_CAUSECRITICAL,
ATCK_CURSE, ATCK_FLAMESTRIKE, ATCK_HARM, ATCK_FIREBALL, ATCK_COLORSPRAY,
ATCK_WEAKEN, ATCK_SPIRALBLAST, MAX_ATTACK_TYPE
} attack_types;
/*
* Defense types
*/
typedef enum
{
DFND_PARRY, DFND_DODGE, DFND_HEAL, DFND_CURELIGHT, DFND_CURESERIOUS,
DFND_CURECRITICAL, DFND_DISPELMAGIC, DFND_DISPELEVIL, DFND_SANCTUARY,
DFND_FIRESHIELD, DFND_SHOCKSHIELD, DFND_SHIELD, DFND_BLESS, DFND_STONESKIN,
DFND_TELEPORT, DFND_MONSUM1, DFND_MONSUM2, DFND_MONSUM3, DFND_MONSUM4,
DFND_DISARM, DFND_ICESHIELD, DFND_GRIP, DFND_TRUESIGHT, DFND_TUMBLE,
MAX_DEFENSE_TYPE
} defense_types;
/*
* Body parts
*/
#define PART_HEAD 0
#define PART_ARMS 1
#define PART_LEGS 2
#define PART_HEART 3
#define PART_BRAINS 4
#define PART_GUTS 5
#define PART_HANDS 6
#define PART_FEET 7
#define PART_FINGERS 8
#define PART_EAR 9
#define PART_EYE 10
#define PART_LONG_TONGUE 11
#define PART_EYESTALKS 12
#define PART_TENTACLES 13
#define PART_FINS 14
#define PART_WINGS 15
#define PART_TAIL 16
#define PART_SCALES 17
#define PART_CLAWS 18
#define PART_FANGS 19
#define PART_HORNS 20
#define PART_TUSKS 21
#define PART_TAILATTACK 22
#define PART_SHARPSCALES 23
#define PART_BEAK 24
#define PART_HAUNCH 25
#define PART_HOOVES 26
#define PART_PAWS 27
#define PART_FORELEGS 28
#define PART_FEATHERS 29
#define MAX_PARTS 30
/* Conditions of parts */
#define PART_MISSING 0
#define PART_WELL 100
#define PART_BOUND 99
#define PART_BROKEN 50
#define PART_SEVERED 1
/* New part flags */
typedef enum
{
BP_HEAD, BP_NECK, BP_CHEST, BP_STOMACH, BP_BACK, BP_NOSE,
BP_TAIL, BP_RHAND, BP_LHAND, BP_RARM, BP_LARM, BP_RLEG,
BP_LLEG, BP_RFOOT, BP_LFOOT, BP_REYE, BP_LEYE, BP_RWRIST,
BP_LWRIST, BP_RANKLE, BP_LANKLE, BP_RHOOF, BP_LHOOF, BP_RPAW,
BP_LPAW, BP_RWING, BP_LWING, BP_REAR, BP_LEAR, BP_HORN,
BP_RHORN, BP_LHORN, BP_TONGUE, BP_FANGS, BP_TENTACLES, BP_BEAK,
BP_RFLEG, BP_LFLEG, BP_RRLEG, BP_LRLEG, BP_ASS, BP_FACE,
BP_RFIN, BP_LFIN, BP_DFIN, BP_PENIS, BP_VAGINA, BP_CLAWS
} part_bits;
/*
* Autosave flags
*/
#define SV_DEATH BV00 /* Save on death */
#define SV_KILL BV01 /* Save when kill made */
#define SV_PASSCHG BV02 /* Save on password change */
#define SV_DROP BV03 /* Save on drop */
#define SV_PUT BV04 /* Save on put */
#define SV_GIVE BV05 /* Save on give */
#define SV_AUTO BV06 /* Auto save every x minutes (define in cset) */
#define SV_ZAPDROP BV07 /* Save when eq zaps */
#define SV_UNUSED BV08 /* Not used */
#define SV_GET BV09 /* Save on get */
#define SV_RECEIVE BV10 /* Save when receiving */
#define SV_IDLE BV11 /* Save when char goes idle */
#define SV_BACKUP BV12 /* Make backup of pfile on save */
#define SV_QUITBACKUP BV13 /* Backup on quit only --Blod */
/*
* Pipe flags
*/
#define PIPE_TAMPED BV01
#define PIPE_LIT BV02
#define PIPE_HOT BV03
#define PIPE_DIRTY BV04
#define PIPE_FILTHY BV05
#define PIPE_GOINGOUT BV06
#define PIPE_BURNT BV07
#define PIPE_FULLOFASH BV08
/*
* Flags for act_string -- Shaddai
*/
#define STRING_NONE 0
#define STRING_IMM BV01
/*
* old flags for conversion purposes -- will not conflict with the flags below
*/
#define OLD_SF_SAVE_HALF_DAMAGE BV18 /* old save for half damage */
#define OLD_SF_SAVE_NEGATES BV19 /* old save negates affect */
/*
* Skill/Spell flags The minimum BV *MUST* be 11!
*/
#define SF_WATER BV00 /* won't work without water */
#define SF_EARTH BV01 /* won't work without plants */
#define SF_AIR BV02 /* won't work without air */
#define SF_ASTRAL BV03 /* dreamworld */
#define SF_AREA BV04 /* is an area spell */
#define SF_DISTANT BV05 /* affects something far away */
#define SF_REVERSE BV06
#define SF_NOSELF BV07 /* Can't target yourself! */
#define SF_GROUND BV08 /* won't work unless on ground */
#define SF_ACCUMULATIVE BV09 /* is accumulative */
#define SF_RECASTABLE BV10 /* can be refreshed */
#define SF_NOSCRIBE BV11 /* cannot be scribed */
#define SF_NOBREW BV12 /* cannot be brewed */
#define SF_GROUPSPELL BV13 /* only affects group members */
#define SF_OBJECT BV14 /* directed at an object */
#define SF_CHARACTER BV15 /* directed at a character */
#define SF_SECRETSKILL BV16 /* hidden unless learned */
#define SF_PKSENSITIVE BV17 /* much harder for plr vs. plr */
#define SF_STOPONFAIL BV18 /* stops spell on first failure */
#define SF_NOFIGHT BV19 /* stops if char fighting */
#define SF_NODISPEL BV20 /* stops spell from being dispelled */
#define SF_INSTANT BV21 /* spell is cast instantly */
typedef enum { SS_NONE, SS_POISON_DEATH, SS_ROD_WANDS, SS_PARA_PETRI,
SS_BREATH, SS_SPELL_STAFF } save_types;
#define ALL_BITS INT_MAX
#define SDAM_MASK ALL_BITS & ~(BV00 | BV01 | BV02)
#define SACT_MASK ALL_BITS & ~(BV03 | BV04 | BV05)
#define SCLA_MASK ALL_BITS & ~(BV06 | BV07 | BV08)
#define SPOW_MASK ALL_BITS & ~(BV09 | BV10)
#define SSAV_MASK ALL_BITS & ~(BV11 | BV12 | BV13)
typedef enum { SD_NONE, SD_FIRE, SD_COLD, SD_ELECTRICITY, SD_ENERGY, SD_ACID,
SD_POISON, SD_DRAIN } spell_dam_types;
typedef enum { SA_NONE, SA_CREATE, SA_DESTROY, SA_RESIST, SA_SUSCEPT,
SA_DIVINATE, SA_OBSCURE, SA_CHANGE } spell_act_types;
typedef enum { SP_NONE, SP_MINOR, SP_GREATER, SP_MAJOR } spell_power_types;
typedef enum { SC_NONE, SC_LUNAR, SC_SOLAR, SC_TRAVEL, SC_SUMMON,
SC_LIFE, SC_DEATH, SC_ILLUSION } spell_class_types;
typedef enum { SE_NONE, SE_NEGATE, SE_EIGHTHDAM, SE_QUARTERDAM, SE_HALFDAM,
SE_3QTRDAM, SE_REFLECT, SE_ABSORB } spell_save_effects;
/*
* Sex.
* Used in #MOBILES.
*/
typedef enum { SEX_NEUTRAL, SEX_MALE, SEX_FEMALE, SEX_HERMAPH } sex_types;
typedef enum {
BLDG_ROAD, BLDG_HOUSE, BLDG_SHOP, BLDG_WALL
} building_types;
typedef enum
{
TRAP_TYPE_POISON_GAS = 1, TRAP_TYPE_POISON_DART, TRAP_TYPE_POISON_NEEDLE,
TRAP_TYPE_POISON_DAGGER, TRAP_TYPE_POISON_ARROW, TRAP_TYPE_BLINDNESS_GAS,
TRAP_TYPE_SLEEPING_GAS, TRAP_TYPE_FLAME, TRAP_TYPE_EXPLOSION,
TRAP_TYPE_ACID_SPRAY, TRAP_TYPE_ELECTRIC_SHOCK, TRAP_TYPE_BLADE,
TRAP_TYPE_SEX_CHANGE
} trap_types;
#define MAX_TRAPTYPE TRAP_TYPE_SEX_CHANGE
#define TRAP_ROOM BV00
#define TRAP_OBJ BV01
#define TRAP_ENTER_ROOM BV02
#define TRAP_LEAVE_ROOM BV03
#define TRAP_OPEN BV04
#define TRAP_CLOSE BV05
#define TRAP_GET BV06
#define TRAP_PUT BV07
#define TRAP_PICK BV08
#define TRAP_UNLOCK BV09
#define TRAP_N BV10
#define TRAP_S BV11
#define TRAP_E BV12
#define TRAP_W BV13
#define TRAP_U BV14
#define TRAP_D BV15
#define TRAP_EXAMINE BV16
#define TRAP_NE BV17
#define TRAP_NW BV18
#define TRAP_SE BV19
#define TRAP_SW BV20
/*
* 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_PART 12
#define OBJ_VNUM_BLOOD 17
#define OBJ_VNUM_PUDDLE 55
#define OBJ_VNUM_BLOODSTAIN 18
#define OBJ_VNUM_SCRAPS 19
#define OBJ_VNUM_MUSHROOM 20
#define OBJ_VNUM_LIGHT_BALL 21
#define OBJ_VNUM_SPRING 22
#define OBJ_VNUM_SKIN 23
#define OBJ_VNUM_SLICE 24
#define OBJ_VNUM_SHOPPING_BAG 25
#define OBJ_VNUM_FIRE 30
#define OBJ_VNUM_TRAP 31
#define OBJ_VNUM_PORTAL 32
#define OBJ_VNUM_BLACK_POWDER 33
#define OBJ_VNUM_SCROLL_SCRIBING 34
#define OBJ_VNUM_EMPTY_FLASK 35
#define OBJ_VNUM_NOTE 36
#define OBJ_VNUM_BAG_OF_HOLDING 44
#define OBJ_VNUM_STATUE 45 /* Gargoyles turn into statues */
#define OBJ_VNUM_MAGIC_MARKER 46
#define OBJ_VNUM_WINE 48
#define OBJ_VNUM_BALL_DARK 49
#define OBJ_VNUM_MYSTIC_SHOVEL 52
#define OBJ_VNUM_KEY 47
#define OBJ_VNUM_CHAOS_CHEESE 17001
/*
* Item types.
* Used in #OBJECTS.
*/
typedef enum
{
ITEM_NONE, ITEM_LIGHT, ITEM_SCROLL, ITEM_WAND, ITEM_STAFF, ITEM_WEAPON,
ITEM_RADIO, ITEM_SCANNER, ITEM_TREASURE, ITEM_ARMOR, ITEM_POTION,
ITEM_WORN, ITEM_FURNITURE, ITEM_TRASH, ITEM_INSTRUMENT, ITEM_CONTAINER,
ITEM_NOTE, ITEM_DRINK_CON, ITEM_KEY, ITEM_FOOD, ITEM_MONEY, ITEM_PEN,
ITEM_BOAT, ITEM_CORPSE_NPC, ITEM_CORPSE_PC, ITEM_FOUNTAIN, ITEM_PILL,
ITEM_BLOOD, ITEM_BLOODSTAIN, ITEM_SCRAPS, ITEM_PIPE, ITEM_HERB_CON,
ITEM_HERB, ITEM_INCENSE, ITEM_FIRE, ITEM_BOOK, ITEM_SWITCH, ITEM_LEVER,
ITEM_PULLCHAIN, ITEM_BUTTON, ITEM_DIAL, ITEM_RUNE, ITEM_RUNEPOUCH,
ITEM_SHEATH, ITEM_TRAP, ITEM_MAP, ITEM_PORTAL, ITEM_PAPER,
ITEM_TINDER, ITEM_LOCKPICK, ITEM_LOCK, ITEM_DISEASE, ITEM_OIL, ITEM_FUEL,
ITEM_VEHICLE, ITEM_BANK, ITEM_MISSILE_WEAPON, ITEM_PROJECTILE,
ITEM_QUIVER, ITEM_SHOVEL, ITEM_SALVE, ITEM_COOK, ITEM_KEYRING, ITEM_ODOR
} item_types;
#define MAX_ITEM_TYPE ITEM_ODOR
/*
* Extra flags.
* Used in #OBJECTS.
*/
typedef enum
{
ITEM_GLOW, ITEM_HUM, ITEM_DARK, ITEM_LOYAL, ITEM_EVIL, ITEM_INVIS, ITEM_MAGIC,
ITEM_NODROP, ITEM_BLESS, ITEM_IN_USE, ITEM_HOVER, ITEM_NO_RESET,
ITEM_NOREMOVE, ITEM_INVENTORY, ITEM_DREAMWORLD, ITEM_EXPLOSIVE,
ITEM_FLAMMABLE, ITEM_NO_TAKE, ITEM_ORGANIC, ITEM_METAL, ITEM_RETURNING,
ITEM_GEM, ITEM_DURABLE, ITEM_SHIELD, ITEM_TWO_HANDED,
ITEM_HIDDEN, ITEM_POISONED, ITEM_COVERING, ITEM_DEATHROT, ITEM_BURIED,
ITEM_PROTOTYPE, ITEM_NOLOCATE, ITEM_GROUNDROT, ITEM_ARTIFACT, ITEM_PLRBLD,
MAX_ITEM_FLAG
} item_extra_flags;
#define TRIG_UP BV00
#define TRIG_UNLOCK BV01
#define TRIG_LOCK BV02
#define TRIG_D_NORTH BV03
#define TRIG_D_SOUTH BV04
#define TRIG_D_EAST BV05
#define TRIG_D_WEST BV06
#define TRIG_D_UP BV07
#define TRIG_D_DOWN BV08
#define TRIG_DOOR BV09
#define TRIG_CONTAINER BV10
#define TRIG_OPEN BV11
#define TRIG_CLOSE BV12
#define TRIG_PASSAGE BV13
#define TRIG_OLOAD BV14
#define TRIG_MLOAD BV15
#define TRIG_DEATH BV19
#define TRIG_CAST BV20
#define TRIG_FAKEBLADE BV21
#define TRIG_RAND4 BV22
#define TRIG_RAND6 BV23
#define TRIG_TRAPDOOR BV24
#define TRIG_ANOTHEROOM BV25
#define TRIG_USEDIAL BV26
#define TRIG_ABSOLUTEVNUM BV27
#define TRIG_SHOWROOMDESC BV28
#define TRIG_AUTORETURN BV29
#define TELE_SHOWDESC BV00
#define TELE_TRANSALL BV01
#define TELE_TRANSALLPLUS BV02
/*
* Wear flags.
* Used in #OBJECTS.
*/
#define ITEM_TAKE BV00
#define ITEM_WEAR_FINGER BV01
#define ITEM_WEAR_NECK BV02
#define ITEM_WEAR_BODY BV03
#define ITEM_WEAR_HEAD BV04
#define ITEM_WEAR_LEGS BV05
#define ITEM_WEAR_FEET BV06
#define ITEM_WEAR_HANDS BV07
#define ITEM_WEAR_ARMS BV08
#define ITEM_WEAR_SHIELD BV09
#define ITEM_WEAR_ABOUT BV10
#define ITEM_WEAR_WAIST BV11
#define ITEM_WEAR_WRIST BV12
#define ITEM_WEAR_HAND BV13 /* formerly wield */
#define ITEM_UNUSED BV14 /* formerly hold */
#define ITEM_WEAR_HOOVES BV15 /* formerly dual-wield */
#define ITEM_WEAR_EARS BV16
#define ITEM_WEAR_EYES BV17
#define ITEM_UNUSED3 BV18 /* formerly missile_wield */
#define ITEM_WEAR_BACK BV19
#define ITEM_WEAR_FACE BV20
#define ITEM_WEAR_ANKLE BV21
#define ITEM_WEAR_FLOAT BV22
#define ITEM_WEAR_MAX 23
/*
* Apply types (for affects).
* Used in #OBJECTS.
*/
typedef enum
{
APPLY_NONE, APPLY_STR, APPLY_DEX, APPLY_INT, APPLY_WIS, APPLY_CON,
APPLY_SEX, APPLY_UNUSED, APPLY_UNUSED2, APPLY_AGE, APPLY_HEIGHT, APPLY_WEIGHT,
APPLY_MANA, APPLY_HIT, APPLY_MOVE, APPLY_GOLD, APPLY_EXP, APPLY_AC,
APPLY_HITROLL, APPLY_DAMROLL, APPLY_SAVING_POISON, APPLY_SAVING_ROD,
APPLY_SAVING_PARA, APPLY_SAVING_BREATH, APPLY_SAVING_SPELL, APPLY_CHA,
APPLY_AFFECT, APPLY_RESISTANT, APPLY_IMMUNE, APPLY_SUSCEPTIBLE,
APPLY_WEAPONSPELL, APPLY_LCK, APPLY_FIRE_MAGIC,
APPLY_EARTH_MAGIC, APPLY_WIND_MAGIC, APPLY_FROST_MAGIC,
APPLY_LIGHTNING_MAGIC, APPLY_WATER_MAGIC, APPLY_DREAM_MAGIC,
APPLY_SPEECH_MAGIC, APPLY_HEALING_MAGIC, APPLY_DEATH_MAGIC,
APPLY_CHANGE_MAGIC, APPLY_TIME_MAGIC, APPLY_MOTION_MAGIC,
APPLY_MIND_MAGIC, APPLY_ILLUSION_MAGIC, APPLY_SEEKING_MAGIC,
APPLY_SECURITY_MAGIC, APPLY_CATALYSM_MAGIC, APPLY_VOID_MAGIC,
APPLY_CLIMB, APPLY_GRIP, APPLY_NOTHING, APPLY_SCRIBE, APPLY_BREW,
APPLY_WEARSPELL,
APPLY_REMOVESPELL, APPLY_EMOTION, APPLY_MENTALSTATE, APPLY_STRIPSN,
APPLY_REMOVE, APPLY_DIG, APPLY_FULL, APPLY_THIRST, APPLY_DRUNK,
APPLY_BLOOD, APPLY_COOK, APPLY_RECURRINGSPELL, APPLY_CONTAGIOUS,
APPLY_EXT_AFFECT, APPLY_ODOR, APPLY_ROOMFLAG, APPLY_SECTORTYPE,
APPLY_ROOMLIGHT, APPLY_TELEVNUM, APPLY_TELEDELAY, MAX_APPLY_TYPE
} apply_types;
#define REVERSE_APPLY 1000
/*
* Values for containers (value[1]).
* Used in #OBJECTS.
*/
#define CONT_CLOSEABLE BV00
#define CONT_PICKPROOF BV01
#define CONT_CLOSED BV02
#define CONT_LOCKED BV03
#define CONT_EATKEY BV04
/*
* Well known room virtual numbers.
* Defined in #ROOMS.
*/
#define ROOM_VNUM_LIMBO 2
#define ROOM_VNUM_POLY 3
#define ROOM_VNUM_HELL 6 /* for hell fix - shogar */
#define ROOM_VNUM_NEXUS 20000
#define ROOM_VNUM_PKILL 5000
#define ROOM_VNUM_SCHOOL 100
/*
* Room flags. Holy cow! Talked about stripped away..
* Used in #ROOMS. Those merc guys know how to strip code down.
* Lets put it all back... ;)
*/
#define ROOM_DARK BV00
#define ROOM_NO_QUIT BV01
#define ROOM_NO_MOB BV02
#define ROOM_INDOORS BV03
#define ROOM_SLIPPERY BV04
#define ROOM_STICKY BV05
#define ROOM_BURNING BV06
#define ROOM_NO_MAGIC BV07
#define ROOM_TUNNEL BV08
#define ROOM_PRIVATE BV09
#define ROOM_SAFE BV10
#define ROOM_SOLITARY BV11
#define ROOM_PET_SHOP BV12
#define ROOM_NO_RECALL BV13
#define ROOM_DONATION BV14
#define ROOM_NODROPALL BV15
#define ROOM_SILENCE BV16
#define ROOM_LOGSPEECH BV17
#define ROOM_NODROP BV18
#define ROOM_NO_DREAM BV19
#define ROOM_NO_SUMMON BV20
#define ROOM_NO_ASTRAL BV21
#define ROOM_NOFLOOR BV24
#define ROOM_NOSUPPLICATE BV25
#define ROOM_R26 BV26
#define ROOM_NOMISSILE BV27
#define ROOM_AMPLIFY BV28
#define ROOM_R29 BV29
#define ROOM_PROTOTYPE BV30
#define RUNE_FIRE BV00
#define RUNE_FROST BV01
#define RUNE_SHOCK BV02
#define RUNE_LIGHT BV03
#define RUNE_PAIN BV04
#define RUNE_ACID BV05
#define RUNE_POISON BV06
#define RUNE_TRAVEL BV07
#define RUNE_LIFE BV08
#define RUNE_WIND BV09
#define RUNE_DISTRACT BV10
#define RUNE_WARD BV11
/*
* Directions.
* Used in #ROOMS.
*/
typedef enum
{
DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_UP, DIR_DOWN,
DIR_NORTHEAST, DIR_NORTHWEST, DIR_SOUTHEAST, DIR_SOUTHWEST, DIR_SOMEWHERE
} dir_types;
#define PT_WATER 100
#define PT_AIR 200
#define PT_EARTH 300
#define PT_FIRE 400
/*
* Push/pull types for exits -Thoric
* To differentiate between the current of a river, or a strong gust of wind
*/
typedef enum
{
PULL_UNDEFINED, PULL_VORTEX, PULL_VACUUM, PULL_SLIP, PULL_ICE, PULL_MYSTERIOUS,
PULL_CURRENT = PT_WATER, PULL_WAVE, PULL_WHIRLPOOL, PULL_GEYSER,
PULL_WIND = PT_AIR, PULL_STORM, PULL_COLDWIND, PULL_BREEZE,
PULL_LANDSLIDE = PT_EARTH, PULL_SINKHOLE, PULL_QUICKSAND, PULL_EARTHQUAKE,
PULL_LAVA = PT_FIRE, PULL_HOTAIR
} dir_pulltypes;
#define MAX_DIR DIR_SOUTHWEST /* max for normal walking */
#define DIR_PORTAL DIR_SOMEWHERE /* portal direction */
/*
* Exit flags. EX_RES# are reserved for use by the
* Used in #ROOMS. SMAUG development team
*/
#define EX_ISDOOR BV00
#define EX_CLOSED BV01
#define EX_LOCKED BV02
#define EX_SECRET BV03
#define EX_SWIM BV04
#define EX_PICKPROOF BV05
#define EX_FLY BV06
#define EX_CLIMB BV07
#define EX_DIG BV08
#define EX_EATKEY BV09
#define EX_NOPASSDOOR BV10
#define EX_HIDDEN BV11
#define EX_PASSAGE BV12
#define EX_PORTAL BV13
#define EX_RES1 BV14
#define EX_RES2 BV15
#define EX_xCLIMB BV16
#define EX_xENTER BV17
#define EX_xLEAVE BV18
#define EX_xAUTO BV19
#define EX_NOFLEE BV20
#define EX_xSEARCHABLE BV21
#define EX_BASHED BV22
#define EX_BASHPROOF BV23
#define EX_NOMOB BV24
#define EX_WINDOW BV25
#define EX_xLOOK BV26
#define EX_NEEDLE_TRAP BV27
#define MAX_EXFLAG 27
/*
* Sector types.
* Used in #ROOMS.
*/
typedef enum
{
SECT_INSIDE, SECT_CITY, SECT_FIELD, SECT_FOREST, SECT_HILLS, SECT_MOUNTAIN,
SECT_WATER_SWIM, SECT_WATER_NOSWIM, SECT_UNDERWATER, SECT_AIR, SECT_DESERT,
SECT_DUNNO, SECT_OCEANFLOOR, SECT_UNDERGROUND, SECT_LAVA,
SECT_SWAMP, SECT_ICE, SECT_BEACH, SECT_MAX
} sector_types;
#define MAX_WEAR 52
/*
* Equpiment wear locations.
* Used in #RESETS.
*/
typedef enum
{
WEAR_NONE = -1, WEAR_LIGHT = 0, WEAR_FINGER_L, WEAR_FINGER_R, WEAR_NECK_1,
WEAR_NECK_2, WEAR_BODY, WEAR_HEAD, WEAR_LEGS, WEAR_FEET, WEAR_HANDS,
WEAR_ARMS, WEAR_SHIELD, WEAR_ABOUT, WEAR_WAIST, WEAR_WRIST_L, WEAR_WRIST_R,
WEAR_HAND, WEAR_HAND2, WEAR_HOOVES, WEAR_EARS, WEAR_EYES,
WEAR_UNUSED, WEAR_BACK, WEAR_FACE, WEAR_ANKLE_L, WEAR_ANKLE_R,
WEAR_FLOAT, MAX_WEAR_OLD
} wear_locations;
/***************************************************************************
* *
* VALUES OF INTEREST TO AREA BUILDERS *
* (End of this section ... stop here) *
* *
***************************************************************************/
/*
* Conditions.
*/
typedef enum
{
COND_DRUNK, COND_FULL, COND_THIRST, COND_BLOODTHIRST, MAX_CONDS
} conditions;
/*
* Positions.
*/
typedef enum
{
POS_DEAD, POS_MORTAL, POS_INCAP, POS_STUNNED, POS_SLEEPING, POS_CHANNEL,
POS_RESTING, POS_SITTING, POS_KNEELING, POS_SQUATTING, POS_SWIMMING,
POS_FIGHTING, POS_STANDING, POS_MOUNTED, POS_FLYING, POS_SHOVE, POS_DRAG
} positions;
/*
* ACT bits for players.
*/
typedef enum
{
PLR_IS_NPC, PLR_LONG_EXIT, PLR_DEFENSE, PLR_AUTOEXIT, PLR_AUTOLOOT,
PLR_NOHUNGER, PLR_BLANK, PLR_OUTCAST, PLR_BRIEF, PLR_COMBINE, PLR_PROMPT,
PLR_TELNET_GA, PLR_HOLYLIGHT, PLR_WIZINVIS, PLR_ROOMVNUM, PLR_SILENCE,
PLR_NO_EMOTE, PLR_ATTACKER, PLR_NO_TELL, PLR_LOG, PLR_DENY, PLR_FREEZE,
PLR_THIEF, PLR_KILLER, PLR_LITTERBUG, PLR_ANSI, PLR_MULTI, PLR_OOC,
PLR_SHOW_EXP, PLR_AUTOGOLD, PLR_AUTOMAP, PLR_AFK, PLR_INVISPROMPT,
PLR_UNUSED, PLR_AUTOSEX, PLR_NO_CHANNEL, PLR_BOUNTY
} player_flags;
/*Bits for pc_data->flags. */
#define PCFLAG_MASK BV00 /* illusion conceal aura */
#define PCFLAG_CHEAT BV01 /* flag set if a char's levels are set */
#define PCFLAG_UNAUTHED BV02 /* has been counted in race/talent */
#define PCFLAG_NORECALL BV03
#define PCFLAG_NOINTRO BV04
#define PCFLAG_GAG BV05
#define PCFLAG_GUEST BV07
#define PCFLAG_NOSUMMON BV08
#define PCFLAG_PAGERON BV09
#define PCFLAG_NOTITLE BV10
#define PCFLAG_SHIELD BV11 /* mental shield */
#define PCFLAG_DIAGNOSE BV12
#define PCFLAG_HIGHGAG BV13
#define PCFLAG_HELPSTART BV15 /* Force new players to help start */
#define PCFLAG_UNUSED BV16
#define PCFLAG_NOBEEP BV17 /* stop people from beeping you -- Scion */
#define PCFLAG_ANONYMOUS BV18 /* Stop mortals' ranks and levels from showing up -- Scion */
#define PCFLAG_SPAR BV19 /* Will not fight to kill -keo */
#define PCFLAG_VAMPIRE BV20 /* Player is a vampire -keo */
#define PCFLAG_RW2 BV21 /* Player has been updated for RW2 -keo */
#define PCFLAG_COUNTED BV22
typedef enum
{
TIMER_NONE, TIMER_RECENTFIGHT, TIMER_SHOVEDRAG, TIMER_DO_FUN,
TIMER_APPLIED, TIMER_PKILLED, TIMER_ASUPRESSED, TIMER_NUISANCE,
TIMER_MAGIC
} timer_types;
struct timer_data
{
TIMER * prev;
TIMER * next;
DO_FUN * do_fun;
int value;
sh_int type;
int count;
};
/*
* Channel bits.
*/
#define CHANNEL_GENERAL BV00
#define CHANNEL_CHAT BV01
#define CHANNEL_SPEECH BV02
#define CHANNEL_IMMTALK BV03
#define CHANNEL_MUSIC BV04
#define CHANNEL_TWINK BV05
#define CHANNEL_SHOUT BV06
#define CHANNEL_YELL BV07
#define CHANNEL_MONITOR BV08
#define CHANNEL_LOG BV09
#define CHANNEL_HIGHGOD BV10
#define CHANNEL_PRIVATE BV11
#define CHANNEL_BUILD BV12
#define CHANNEL_HIGH BV13
#define CHANNEL_OOC BV14
#define CHANNEL_PRAY BV15
#define CHANNEL_UNUSED2 BV16
#define CHANNEL_UNUSED3 BV17
#define CHANNEL_COMM BV18
#define CHANNEL_TELLS BV19
#define CHANNEL_FOREIGN BV20
#define CHANNEL_NEWBIE BV21
#define CHANNEL_WARTALK BV22
#define CHANNEL_RACETALK BV23
#define CHANNEL_WARN BV24
#define CHANNEL_WHISPER BV25
#define CHANNEL_HUMOR BV26
#define CHANNEL_GRATZ BV27
#define CHANNEL_THINK BV28
/* Area defines - Scryn 8/11
*
*/
#define AREA_DELETED BV00
#define AREA_LOADED BV01
/* Area flags - Narn Mar/96 */
#define AFLAG_NOPKILL BV00
#define AFLAG_FREEKILL BV01
#define AFLAG_NOTELEPORT BV02
#define AFLAG_NOQUIT BV03
#define AFLAG_NOBYPASS BV04
#define AFLAG_NOTRAVEL BV05
/* Mud wide quests - Keolah Nov 30 2000 */
#define QUEST_ETERNAL_NIGHT BV00
#define QUEST_TEMPEST BV01
#define QUEST_EVIL BV02
/* Command Permissions - Keolah Aug 16 2001 */
#define PERMIT_ADMIN BV00
#define PERMIT_HELP BV01
#define PERMIT_BUILD BV02
#define PERMIT_HIBUILD BV03
#define PERMIT_SECURITY BV04
#define PERMIT_TALENT BV05
#define PERMIT_ITEM BV06
#define PERMIT_MISC BV07
#define PERMIT_CHANNEL BV08
#define PERMIT_MOB BV09
#define PERMIT_PROG BV11
/* Flags for recipes -keo */
#define RECIPE_FIRE BV00
#define RECIPE_WATER BV01
#define RECIPE_DRINKCON BV02
#define RECIPE_CONTAINER BV03
#define RECIPE_ICE BV04
#define RECIPE_SUN BV05
#define RECIPE_MOON BV06
#define RECIPE_LIGHT BV07
#define RECIPE_DARK BV08
#define RECIPE_KNIFE BV09
#define RECIPE_BLOOD BV10
/* Mood flags -keo */
#define MOOD_RELAXED BV00
#define MOOD_READY BV01
#define MOOD_ANGRY BV02
#define MOOD_AFRAID BV03
#define MOOD_FRIENDY BV04
#define MOOD_GUARD BV05
#define MOOD_DEFENSE BV06
/* Vehicle flags -keo */
#define VEHICLE_LAND BV00
#define VEHICLE_SURFACE BV01
#define VEHICLE_UNDERWATER BV02
#define VEHICLE_AIR BV03
#define VEHICLE_SPACE BV04
#define VEHICLE_UNDERGROUND BV05
#define VEHICLE_CLIMB BV06
#define VEHICLE_AIRTIGHT BV07
#define VEHICLE_SAND BV08
#define VEHICLE_ICE BV09
/* Social flags -keo */
#define SOC_SLEEP BV00
#define SOC_POLITE BV01
#define SOC_RUDE BV02
#define SOC_SEXUAL BV03
#define SOC_VISUAL BV04
#define SOC_AUDITORY BV05
#define SOC_TOUCH BV06
#define SOC_ANNOYING BV06
/* Race flags */
#define NAT_NPC BV00 /* Nation is NPC only */
#define NAT_NEWBIE BV01 /* Newbie approved */
/* Arena flags */
#define ARENA_TEAM BV00
#define ARENA_HALT BV01
#define ARENA_DEBUG BV02
/* Gladiator flags */
#define GLAD_RANDOM BV00
#define GLAD_WAIT BV01
#define GLAD_TOGGLE BV02
typedef enum
{
CL_LEADER, CL_INDUCT, CL_OUTCAST, CL_BANK, CL_FINANCE, CL_BESTOW,
CL_SECRET, CL_KNOWLEDGE, CL_ALLOW
} clan_flags;
typedef enum
{
LANG_KALORESE, LANG_ELVEN, LANG_DWARVEN, LANG_SUNRISE, LANG_ORCISH,
LANG_DRAGON, LANG_ISLANDIC, LANG_DROW
} languages;
typedef enum
{
SK_SMITH, SK_ALCHEMY, SK_TAILOR, SK_STEALTH, SK_STREET, SK_JEWEL,
SK_NATURE, SK_MEDICINE, SK_MINING, SK_CHANNEL, SK_LINGUIST
} noncombat_skills;
typedef enum
{
SK_COMBAT, SK_SWORD, SK_DAGGER, SK_AXE, SK_WHIP, SK_MACE, SK_WAND,
SK_FIREARMS, SK_BOW, SK_CROSSBOW, SK_STAFF, SK_HALBERD, SK_SPEAR,
SK_POLEARM, SK_CLAW, SK_FANG, SK_HEAD, SK_TAIL, SK_HAND, SK_KICK
} combat_skills;
typedef enum
{
PHASE_NEW, PHASE_CRESCENT, PHASE_HALF, PHASE_GIBBOUS, PHASE_FULL
} moon_phases;
typedef enum
{
MOON_DARK, MOON_HUNGER, MOON_BLOOD
} moon_affects;
typedef enum
{
BANE_NONE, BANE_UNDEAD, BANE_DEMON, BANE_ELF, BANE_ORC, BANE_DRAGON,
BANE_HUMAN, BANE_DWARF, BANE_FAERIE, BANE_GIANT, BANE_MINOTAUR,
BANE_TROLL, BANE_HALFLING, BANE_ANIMAL, BANE_FELINE, BANE_CENTAUR,
BANE_CONSTRUCT, BANE_ANGEL
} weapons_banes;
typedef enum
{
BRAND_NONE, BRAND_POISON, BRAND_FLAMING, BRAND_VORPAL, BRAND_FROZEN,
BRAND_ELEC, BRAND_ACID, BRAND_STORM, BRAND_RADIANT, BRAND_CRUSH,
BRAND_DRAIN, BRAND_PSIONIC, BRAND_ANTI_MATTER, BRAND_SONIC,
BRAND_DISTORT
} weapon_brands;
typedef enum
{
SONG_NONE, SONG_PEACE, SONG_SILENCE, SONG_SLEEP, SONG_FLIGHT,
SONG_CHARM, SONG_STRENGTH, SONG_SPEED, SONG_PROTECT,
SONG_VIGOR, SONG_FIRE, SONG_THUNDER, SONG_WIND, SONG_RIVERS,
SONG_SIGHT, SONG_SHADOWS, SONG_LIGHT, SONG_WINTER, SONG_LIFE,
MAX_SONG
} speech_songs;
typedef enum
{
TAL_FIRE, TAL_EARTH, TAL_WIND, TAL_FROST, TAL_LIGHTNING, TAL_WATER,
TAL_DREAM, TAL_SPEECH, TAL_HEALING, TAL_DEATH, TAL_CHANGE, TAL_TIME,
TAL_MOTION, TAL_MIND, TAL_ILLUSION, TAL_SEEKING, TAL_SECURITY,
TAL_CATALYSM, TAL_VOID
} talents;
typedef enum
{
MAG_NONE, MAG_FIRE, MAG_COLD, MAG_ELECTRICITY, MAG_ENERGY, MAG_ACID,
MAG_POISON, MAG_DRAIN, MAG_PSIONIC, MAG_LIGHT, MAG_BLUNT, MAG_PIERCE,
MAG_SLASH, MAG_WIND, MAG_WATER, MAG_EARTH, MAG_SOUND, MAG_DREAM,
MAG_CHANGE, MAG_ANTIMATTER, MAG_ANTIMAGIC, MAG_HOLY, MAG_UNHOLY,
MAG_TELEKINETIC, MAG_ETHER, MAG_TIME, MAG_SEEK, MAG_ALL
} magic_dam_types;
/*
* Prototype for a mob.
* This is the in-memory version of #MOBILES.
*/
struct mob_index_data
{
MOB_INDEX_DATA * next;
MOB_INDEX_DATA * next_sort;
SPEC_FUN * spec_fun;
MPROG_DATA * mudprogs;
EXT_BV progtypes;
char * player_name;
char * short_descr;
char * description;
int vnum;
sh_int count;
sh_int killed;
sh_int sex;
EXT_BV act;
EXT_BV affected_by;
sh_int mobthac0; /* Unused */
sh_int ac;
sh_int hitnodice;
sh_int hitsizedice;
sh_int hitplus;
sh_int damnodice;
sh_int damsizedice;
sh_int damplus;
sh_int numattacks;
int gold;
int exp;
int xflags;
int resistant;
int immune;
int susceptible;
EXT_BV attacks;
EXT_BV defenses;
sh_int position;
sh_int defposition;
sh_int height;
sh_int weight;
sh_int race;
sh_int hitroll;
sh_int damroll;
sh_int perm_str;
sh_int perm_int;
sh_int perm_wis;
sh_int perm_dex;
sh_int perm_con;
sh_int perm_cha;
sh_int perm_lck;
sh_int saving_poison_death;
sh_int saving_wand;
sh_int saving_para_petri;
sh_int saving_breath;
sh_int saving_spell_staff;
};
struct hunt_hate_fear
{
char * name;
CHAR_DATA * who;
};
struct editor_data
{
sh_int numlines;
sh_int on_line;
sh_int size;
char line[49][81];
};
struct extracted_char_data
{
EXTRACT_CHAR_DATA * next;
CHAR_DATA * ch;
ROOM_INDEX_DATA * room;
ch_ret retcode;
bool extract;
};
/*
* One character (PC or NPC).
*/
struct char_data
{
CHAR_DATA * next;
CHAR_DATA * prev;
CHAR_DATA * next_in_room;
CHAR_DATA * prev_in_room;
CHAR_DATA * master;
CHAR_DATA * leader;
CHAR_DATA * protected_by; /* Scion */
CHAR_DATA * reply;
CHAR_DATA * retell;
CHAR_DATA * switched;
CHAR_DATA * mount;
HHF_DATA * hunting;
HHF_DATA * fearing;
HHF_DATA * hating;
SPEC_FUN * spec_fun;
MPROG_ACT_LIST * mpact;
int mpactnum;
sh_int mpscriptpos;
MOB_INDEX_DATA * pIndexData;
DESCRIPTOR_DATA * desc;
AFFECT_DATA * first_affect;
AFFECT_DATA * last_affect;
OBJ_DATA * first_carrying;
OBJ_DATA * last_carrying;
ROOM_INDEX_DATA * in_room;
OBJ_DATA * on; /* furniture, stand on objects */
ROOM_INDEX_DATA * was_in_room;
int home_room; /* So sentinel mobs know how to go home after chasing down PCs */
RESET_DATA *reset; /* So mobs know what reset spawned them when they leave the game */
PC_DATA * pcdata;
DO_FUN * last_cmd;
DO_FUN * prev_cmd; /* mapping */
void * dest_buf; /* This one is to assign to differen things */
char * alloc_ptr; /* Must str_dup and free this one */
void * spare_ptr;
int tempnum;
EDITOR_DATA * editor;
TIMER * first_timer;
TIMER * last_timer;
char * name;
char * short_descr;
char * description;
sh_int substate;
sh_int sex;
sh_int race;
sh_int talent[MAX_DEITY]; /* 'levels' of each talent the player has access to */
sh_int curr_talent[MAX_DEITY];
sh_int trust;
int played;
time_t logon;
time_t save_time;
sh_int timer;
sh_int wait;
sh_int hit;
sh_int max_hit;
sh_int base_hit;
sh_int mana;
sh_int max_mana;
sh_int base_mana;
sh_int move;
sh_int max_move;
sh_int base_move;
sh_int numattacks;
unsigned long gold;
int exp;
EXT_BV act;
EXT_BV affected_by;
EXT_BV no_affected_by;
int carry_weight;
int carry_number;
int xflags;
int resistant;
int no_resistant;
int immune;
int no_immune;
int susceptible;
int no_susceptible;
EXT_BV attacks;
EXT_BV defenses;
sh_int saving_poison_death;
sh_int saving_wand;
sh_int saving_para_petri;
sh_int saving_breath;
sh_int saving_spell_staff;
sh_int barenumdie;
sh_int baresizedie;
sh_int mobthac0;
sh_int hitroll;
sh_int damroll;
sh_int hitplus;
sh_int damplus;
sh_int position;
sh_int height;
sh_int weight;
sh_int armor;
sh_int wimpy;
sh_int perm_str;
sh_int perm_int;
sh_int perm_wis;
sh_int perm_dex;
sh_int perm_con;
sh_int perm_cha;
sh_int perm_lck;
sh_int mod_str;
sh_int mod_int;
sh_int mod_wis;
sh_int mod_dex;
sh_int mod_con;
sh_int mod_cha;
sh_int mod_lck;
sh_int mental_state; /* simplified */
sh_int emotional_state; /* simplified */
int pagelen; /* BUILD INTERFACE */
int retran;
int regoto;
sh_int mobinvis; /* Mobinvis level SB */
int fur_pos; /* furniture pos. */
int recall; /* Where to recall to -- Scion */
char * last_taken; /* Name of the last object picked up by mob/pc */
BIT_DATA *first_abit;
BIT_DATA *last_abit;
char *species;
NATION_DATA *nation;
int singing;
int shield;
int mod_talent[MAX_DEITY];
CHAR_DATA *last_hit; /* char that last damaged char */
PART_DATA *first_part; /* list of bodyparts */
PART_DATA *last_part;
OBJ_DATA *main_hand; /* wielded weapons etc */
OBJ_DATA *off_hand;
int mood; /* anger, fear, etc */
int encumberance; /* weight of items being worn */
int speed;
OBJ_DATA *in_obj; /* for vehicles */
};
struct killed_data
{
int vnum;
char count;
};
typedef struct alias_queue ALIAS_QUEUE;
struct alias_queue
{
ALIAS_QUEUE *next;
char *cmd;
};
/*
* Data which only PC's have.
*/
struct pc_data
{
ALIAS_DATA *first_alias;
ALIAS_DATA *last_alias;
ALIAS_QUEUE *alias_queue;
int alias_used; /* Alias used x times -- Scion */
CHAR_DATA * pet;
AREA_DATA * area;
DEITY_DATA * deity;
BIT_DATA *first_qbit;
BIT_DATA *last_qbit;
char * homepage;
char * deity_name;
char * pwd;
char * bamfin;
char * bamfout;
char * filename; /* For the safe mset name -Shaddai */
char * rank;
char * title;
int flags; /* Whether the player is deadly and whatever else we add. */
int pkills; /* Number of pkills */
int pdeaths; /* Number of times pkilled (legally) */
int mkills; /* Number of mobs killed */
int mdeaths; /* Number of deaths due to mobs */
long int restore_time; /* The last time the char did a restore all */
int r_range_lo; /* room range */
int r_range_hi;
int m_range_lo; /* mob range */
int m_range_hi;
int o_range_lo; /* obj range */
int o_range_hi;
sh_int wizinvis; /* wizinvis level */
sh_int condition [MAX_CONDS];
sh_int learned [MAX_SKILL];
time_t release_date; /* Auto-helling.. Altrag */
char * helled_by;
char * bio; /* Personal Bio */
char * prompt; /* User config prompts */
char * fprompt; /* Fight prompts */
char * subprompt; /* Substate prompt */
sh_int pagerlen; /* For pager (NOT menus) */
char * alias[MAX_ALIAS]; /* alias - shogar */
char * alias_sub[MAX_ALIAS];
char * outputprefix;
char * outputsuffix;
int memorize[8]; /* Locations that can be memorized with the memorize command -- Scion */
unsigned long balance; /* Bank balance -- Scion */
int bounty; /* Cash reward for pkilling this char -- Scion */
char *family;
int gen;
char *spouse;
char *maiden_name;
char *name_disguise;
int age_adjust;
CHAR_DATA *mindlink;
sh_int weapon[20];
int rkills; /* real kills */
int rdeaths; /* real deaths */
char *were_race;
int weapon_exp[20];
int talent_exp[MAX_DEITY];
int points; /* unspent points for talents */
int inborn; /* talent that the player is naturally good at */
EXT_BV perm_aff; /* affects that dont come off automatically */
int noncombat[20];
int noncombat_exp[20];
CHAR_DATA *consenting;
char *parent; /* the mother,father or sire of ch */
char *auto_attack;
EXPLORED_AREA *first_explored; /* what rooms have been explored */
EXPLORED_AREA *last_explored;
PMUT_DATA *first_mutation;
PMUT_DATA *last_mutation;
CHAR_DATA *magiclink;
char *type;
int permissions;
char *channels;
char *eyes;
char *hair;
char *skin_color;
char *skin_type;
char *extra_color;
char *extra_type;
#ifdef I3
I3_CHARDATA *i3chardata;
#endif
#ifdef IMC
IMC_CHARDATA *imcchardata;
#endif
};
/*
* Liquids.
*/
#define LIQ_WATER 0
#define LIQ_MAX 18
struct liq_type
{
char * liq_name;
char * liq_color;
sh_int liq_affect[3];
};
/*
* Damage types from the attack_table[]
*/
typedef enum
{
DAM_HIT, DAM_SLICE, DAM_STAB, DAM_SLASH, DAM_WHIP, DAM_CLAW,
DAM_BLAST, DAM_POUND, DAM_CRUSH, DAM_GREP, DAM_BITE, DAM_PIERCE,
DAM_SUCTION, DAM_BOLT, DAM_ARROW, DAM_DART, DAM_STONE, DAM_PEA
} damage_types;
/*
* Extra description data for a room or object.
*/
struct extra_descr_data
{
EXTRA_DESCR_DATA *next; /* Next in list */
EXTRA_DESCR_DATA *prev; /* Previous in list */
char *keyword; /* Keyword in look/examine */
char *description; /* What to see */
};
/*
* Prototype for an object.
*/
struct obj_index_data
{
OBJ_INDEX_DATA * next;
OBJ_INDEX_DATA * next_sort;
EXTRA_DESCR_DATA * first_extradesc;
EXTRA_DESCR_DATA * last_extradesc;
AFFECT_DATA * first_affect;
AFFECT_DATA * last_affect;
MPROG_DATA * mudprogs; /* objprogs */
EXT_BV progtypes; /* objprogs */
char * name;
char * short_descr;
char * description;
char * action_desc;
int vnum;
sh_int item_type;
EXT_BV extra_flags;
int tech;
sh_int count;
sh_int weight;
int cost;
int value [7]; /* Added one extra -- Scion */
int serial;
sh_int layers;
EXT_BV parts;
};
/*
* One object.
*/
struct obj_data
{
OBJ_DATA * next;
OBJ_DATA * prev;
OBJ_DATA * next_content;
OBJ_DATA * prev_content;
OBJ_DATA * first_content;
OBJ_DATA * last_content;
OBJ_DATA * in_obj;
CHAR_DATA * carried_by;
EXTRA_DESCR_DATA * first_extradesc;
EXTRA_DESCR_DATA * last_extradesc;
AFFECT_DATA * first_affect;
AFFECT_DATA * last_affect;
OBJ_INDEX_DATA * pIndexData;
ROOM_INDEX_DATA * in_room;
char * name;
char * short_descr;
char * description;
char * action_desc;
char * obj_by; /* Who invoked/fashioned this object? -- Scion */
sh_int item_type;
sh_int mpscriptpos;
EXT_BV extra_flags;
MPROG_ACT_LIST * mpact; /* mudprogs */
int mpactnum; /* mudprogs */
sh_int wear_loc;
sh_int weight;
int cost;
int condition; /* Damage to the object -- Scion */
sh_int timer;
int value [7]; /* Added one extra -- Scion */
MATERIAL_DATA *material;
sh_int count; /* support for object grouping */
int serial; /* serial number */
int size;
int raw_mana;
int mana;
EXT_BV parts; /* which parts the item is worn on */
OBJ_DATA *gem; /* what gem is attached to it */
};
/* Data for a material type -- Scion */
struct material_data {
int number; /* Number to reference the material by */
char *name; /* Namelist of raw material */
char *short_descr; /* Short desc of raw material */
char *description; /* Long desc of raw material */
int weight; /* Weight modifier for finished product */
int cost; /* Cost modifier */
int rarity; /* How often does this material load? (percentage) */
int sector; /* Sectory type this ore can be found in */
int race; /* Race that generates this ore when killed (ie. dragon
scales */
EXT_BV extra_flags; /* Same flags as objects, they get transferred to finished product */
AFFECT_DATA * first_affect;
AFFECT_DATA * last_affect;
MATERIAL_DATA *next;
MATERIAL_DATA *prev;
int magic; /* magic absorbiency -keo */
};
struct mat_shop_data {
int room;
int mat[5];
MAT_SHOP *next;
MAT_SHOP *prev;
};
struct arena_data {
char *name;
int phase;
int vnum;
char *winner;
int flags;
ROOM_INDEX_DATA *room;
ARENA_MEMBER *first_member;
ARENA_MEMBER *last_member;
ARENA_DATA *next;
ARENA_DATA *prev;
};
struct arena_member_data {
char *name;
char *owner;
int wins;
int kills;
int played;
int team;
int age;
int hp;
int str;
int con;
int dex;
int spd;
int end;
int skill;
int flags;
int score;
int total;
ARENA_DATA *arena;
BET_DATA *first_bet;
BET_DATA *last_bet;
ARENA_MEMBER *next;
ARENA_MEMBER *prev;
};
struct bet_data {
char *better;
int wager;
int odds;
unsigned long winnings;
BET_DATA *member;
BET_DATA *next;
BET_DATA *prev;
};
struct moon_data {
char *name;
char *world;
char *color;
int rise;
int set;
int phase;
int type;
bool up;
bool waning;
MOON_DATA *next;
MOON_DATA *prev;
};
struct part_data
{
int loc; /* points to specific name of part in part_locs */
int armor; /* ac of the part */
int cond; /* hp of the part */
int flags; /* is it broken or missing? */
PART_DATA *prev;
PART_DATA *next;
OBJ_DATA *obj; /* armor worn there */
OBJ_DATA *obj2; /* second layer of armor */
PART_DATA *connect_to;
};
/*
* Exit data.
*/
struct exit_data
{
EXIT_DATA * prev; /* previous exit in linked list */
EXIT_DATA * next; /* next exit in linked list */
EXIT_DATA * rexit; /* Reverse exit pointer */
ROOM_INDEX_DATA * to_room; /* Pointer to destination room */
char * keyword; /* Keywords for exit or door */
char * description; /* Description of exit */
int vnum; /* Vnum of room exit leads to */
int rvnum; /* Vnum of room in opposite dir */
int exit_info; /* door states & other flags */
int key; /* Key vnum */
sh_int vdir; /* Physical "direction" */
sh_int distance; /* how far to the next room */
sh_int pull; /* pull of direction (current) */
sh_int pulltype; /* type of pull (current, wind) */
int wall; /* type of wall, if any */
};
/*
* Reset commands:
* '*': comment
* 'M': read a mobile
* 'O': read an object
* 'P': put object in object
* 'G': give object to mobile
* 'E': equip object to mobile
* 'H': hide an object
* 'B': set a bitvector
* 'T': trap an object
* 'D': set state of door
* 'R': randomize room exits
* 'S': stop (end of list)
*/
/*
* Area-reset definition.
*/
struct reset_data
{
RESET_DATA * next;
RESET_DATA * prev;
char command;
int extra;
int arg1;
int arg2;
int arg3;
bool active;
};
/* Constants for arg2 of 'B' resets. */
#define BIT_RESET_DOOR 0
#define BIT_RESET_OBJECT 1
#define BIT_RESET_MOBILE 2
#define BIT_RESET_ROOM 3
#define BIT_RESET_TYPE_MASK 0xFF /* 256 should be enough */
#define BIT_RESET_DOOR_THRESHOLD 8
#define BIT_RESET_DOOR_MASK 0xFF00 /* 256 should be enough */
#define BIT_RESET_SET BV30
#define BIT_RESET_TOGGLE BV31
#define BIT_RESET_FREEBITS 0x3FFF0000 /* For reference */
/*
* Area definition.
*/
struct area_data
{
AREA_DATA * next;
AREA_DATA * prev;
AREA_DATA * next_sort;
AREA_DATA * prev_sort;
AREA_DATA * next_sort_name; /* Used for alphanum. sort */
AREA_DATA * prev_sort_name; /* Ditto, Fireblade */
RESET_DATA * first_reset;
RESET_DATA * last_reset;
char * name;
char * filename;
int flags;
sh_int status; /* h, 8/11 */
sh_int age;
sh_int nplayer;
sh_int reset_frequency;
int low_r_vnum;
int hi_r_vnum;
int low_o_vnum;
int hi_o_vnum;
int low_m_vnum;
int hi_m_vnum;
int low_soft_range;
int hi_soft_range;
int low_hard_range;
int hi_hard_range;
char * author; /* Scryn */
char * resetmsg; /* Rennard */
RESET_DATA * last_mob_reset;
RESET_DATA * last_obj_reset;
sh_int max_players;
int mkills;
int mdeaths;
int pkills;
int pdeaths;
int gold_looted;
int illegal_pk;
int high_economy;
int low_economy;
WEATHER_DATA * weather; /* FB */
GENERIC_MOB * first_race;
GENERIC_MOB * last_race;
int nmob; /* number of mobs in the area */
CITY_DATA * city;
};
/*
* Used to keep track of system settings and statistics -Thoric
*/
struct system_data
{
int alias_wait; /* Command wait on aliases */
int maxplayers; /* Maximum players this boot */
int alltimemax; /* Maximum players ever */
char * time_of_max; /* Time of max ever */
char * mud_name; /* Name of mud */
bool NO_NAME_RESOLVING; /* Hostnames are not resolved */
bool DENY_NEW_PLAYERS; /* New players cannot connect */
sh_int max_sn; /* Max skills */
int save_flags; /* Toggles for saving conditions */
sh_int save_frequency; /* How old to autosave someone */
sh_int save_pets; /* Do pets save? */
sh_int ident_retries; /* Number of times to retry broken pipes. */
bool crashguard; /* Toggles crashguard on or off.. no core dumps with it on! -- Scion */
int morts_allowed; /* Number of characters allowed at once for multiplaying -- Scion */
int exp_base;
int quest; /* mud wide quests -keo */
char * email; /* support email */
};
/* For blood trails mostly, but could be very useful later -- Scion */
struct trail_data {
TRAIL_DATA *next;
TRAIL_DATA *prev;
char *name;
NATION_DATA *race;
bool blood;
bool fly;
char *graffiti;
int from;
int to;
time_t age;
};
/*
* Room type.
*/
struct room_index_data
{
ROOM_INDEX_DATA * next;
ROOM_INDEX_DATA * next_sort;
CHAR_DATA * first_person; /* people in the room */
CHAR_DATA * last_person; /* .. */
OBJ_DATA * first_content; /* objects on floor */
OBJ_DATA * last_content; /* .. */
EXTRA_DESCR_DATA * first_extradesc; /* extra descriptions */
EXTRA_DESCR_DATA * last_extradesc; /* .. */
AREA_DATA * area;
EXIT_DATA * first_exit; /* exits from the room */
EXIT_DATA * last_exit; /* .. */
AFFECT_DATA * first_affect; /* effects on the room */
AFFECT_DATA * last_affect; /* .. */
TRAIL_DATA * first_trail; /* Remember who goes through the room -- Scion */
TRAIL_DATA * last_trail;
MAP_DATA * map; /* maps */
MPROG_ACT_LIST * mpact; /* mudprogs */
int mpactnum; /* mudprogs */
MPROG_DATA * mudprogs; /* mudprogs */
sh_int mpscriptpos;
SHOP_DATA * pShop;
char * name;
char * description;
int vnum;
int room_flags;
EXT_BV progtypes; /* mudprogs */
sh_int sector_type;
int tele_vnum;
sh_int tele_delay;
sh_int runes; /* rune flags */
sh_int virtual; /* neccessary for bilvnums shogar */
/* Advanced sector types -- Scion */
int vegetation;
int water;
int elevation;
int resources;
int curr_vegetation;
int curr_water;
int curr_elevation;
int curr_resources;
};
/*
* Types of skill numbers. Used to keep separate lists of sn's
* Must be non-overlapping with spell/skill types,
* but may be arbitrary beyond that.
*/
#define TYPE_UNDEFINED -1
#define TYPE_HIT 1000 /* allows for 1000 skills/spells */
#define TYPE_HERB 2000 /* allows for 1000 attack types */
#define TYPE_RACIAL 3000 /* allows for 1000 herb types */
#define TYPE_DISEASE 4000 /* allows for 1000 racial types */
#define TYPE_MAGIC 5000 /* New magic system needs a special type -- Scion */
/*
* Target types.
*/
typedef enum
{
TAR_IGNORE, TAR_CHAR_OFFENSIVE, TAR_CHAR_DEFENSIVE, TAR_CHAR_SELF,
TAR_OBJ_INV
} target_types;
typedef enum
{
SKILL_UNKNOWN, SKILL_SPELL, SKILL_SKILL, SKILL_WEAPON, SKILL_TONGUE,
SKILL_HERB, SKILL_RACIAL, SKILL_DISEASE
} skill_types;
struct timerset
{
int num_uses;
struct timeval total_time;
struct timeval min_time;
struct timeval max_time;
};
/*
* Skills include spells as a particular case.
*/
struct skill_type
{
char * name; /* Name of skill */
sh_int skill_level[MAX_DEITY]; /* x Level needed by talent */
sh_int race_level[MAX_RACE]; /* Racial abilities: level */
SPELL_FUN * spell_fun; /* Spell pointer (for spells) */
DO_FUN * skill_fun; /* Skill pointer (for skills) */
sh_int target; /* Legal targets */
sh_int minimum_position; /* Position for caster / user */
sh_int slot; /* Slot for #OBJECT loading */
sh_int min_mana; /* Minimum mana used */
sh_int beats; /* Rounds required to use skill */
char * noun_damage; /* Damage message */
char * msg_off; /* Wear off message */
sh_int guild; /* Which guild the skill belongs to */
sh_int min_level; /* x Minimum level to be able to cast */
sh_int type; /* Spell/Skill/Weapon/Tongue */
sh_int range; /* Range of spell (rooms) */
int info; /* x Spell action/class/etc */
int flags; /* x Flags */
char * hit_char; /* Success message to caster */
char * hit_vict; /* Success message to victim */
char * hit_room; /* Success message to room */
char * hit_dest; /* Success message to dest room */
char * miss_char; /* Failure message to caster */
char * miss_vict; /* Failure message to victim */
char * miss_room; /* Failure message to room */
char * die_char; /* Victim death msg to caster */
char * die_vict; /* Victim death msg to victim */
char * die_room; /* Victim death msg to room */
char * imm_char; /* Victim immune msg to caster */
char * imm_vict; /* Victim immune msg to victim */
char * imm_room; /* Victim immune msg to room */
char * dice; /* Dice roll */
int value; /* x Misc value */
char saves; /* What saving spell applies */
char difficulty; /* Difficulty of casting/learning */
SMAUG_AFF * affects; /* Spell affects, if any */
char * components; /* Spell components, if any */
char * teachers; /* x Skill requires a special teacher */
char participants; /* # of required participants */
struct timerset userec; /* Usage record */
int stat1; /* First stat the skill cap depends on -- Scion */
int stat2; /* Second stat the skill cap depends on -- Scion */
char * talent; /* Name of the talent this skill belongs to (spells only) */
};
/*
* So we can have different configs for different ports -- Shaddai
*/
extern int port;
/*
* These are skill_lookup return values for common skills and spells.
*/
extern sh_int gsn_detrap;
extern sh_int gsn_backstab;
extern sh_int gsn_circle;
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_locksmith;
extern sh_int gsn_scan;
extern sh_int gsn_sneak;
extern sh_int gsn_steal;
extern sh_int gsn_track;
extern sh_int gsn_throw;
extern sh_int gsn_search;
extern sh_int gsn_dig;
extern sh_int gsn_mount;
extern sh_int gsn_bashdoor;
extern sh_int gsn_berserk;
extern sh_int gsn_disarm;
extern sh_int gsn_parry;
extern sh_int gsn_rescue;
extern sh_int gsn_aid;
/* used to do specific lookups */
extern sh_int gsn_first_spell;
extern sh_int gsn_first_skill;
extern sh_int gsn_first_tongue;
extern sh_int gsn_top_sn;
/* auto spells -keo */
extern sh_int gsn_counterspell;
/* spells */
extern sh_int gsn_blindness;
extern sh_int gsn_charm_person;
extern sh_int gsn_weaken;
extern sh_int gsn_corruption;
extern sh_int gsn_curse;
extern sh_int gsn_poison;
extern sh_int gsn_sticky_flame;
extern sh_int gsn_sleep;
extern sh_int gsn_mummy_rot;
extern sh_int gsn_disease;
/* magic */
extern sh_int gsn_fire;
extern sh_int gsn_water;
extern sh_int gsn_mind;
extern sh_int gsn_wind;
extern sh_int gsn_earth;
extern sh_int gsn_seeking;
extern sh_int gsn_frost;
extern sh_int gsn_security;
extern sh_int gsn_motion;
extern sh_int gsn_lightning;
extern sh_int gsn_dream;
extern sh_int gsn_illusion;
extern sh_int gsn_death;
/* newer attack skills */
extern sh_int gsn_bash;
extern sh_int gsn_stun;
extern sh_int gsn_poison_weapon;
extern sh_int gsn_scribe;
extern sh_int gsn_brew;
extern sh_int gsn_climb;
extern sh_int gsn_grip;
extern sh_int gsn_swim;
extern sh_int gsn_tumble;
extern sh_int gsn_combine;
extern sh_int gsn_dye;
extern sh_int gsn_affix;
extern sh_int gsn_repair;
extern sh_int gsn_mix;
/*
* Cmd flag names --Shaddai
*/
extern char *const cmd_flags[];
extern char *const permit_flags[];
/*
* Utility macros.
*/
#define UMIN(a, b) ((a) < (b) ? (a) : (b))
#define UMAX(a, b) ((a) > (b) ? (a) : (b))
#define URANGE(a, b, c) ((b) < (a) ? (a) : ((b) > (c) ? (c) : (b)))
#define LOWER(c) ((c) >= 'A' && (c) <= 'Z' ? (c)+'a'-'A' : (c))
#define UPPER(c) ((c) >= 'a' && (c) <= 'z' ? (c)+'A'-'a' : (c))
/*
* Old-style Bit manipulation macros
*
* The bit passed is the actual value of the bit (Use the BV## defines)
*/
#define IS_SET(flag, bit) ((flag) & (bit))
#define SET_BIT(var, bit) ((var) |= (bit))
#define REMOVE_BIT(var, bit) ((var) &= ~(bit))
#define TOGGLE_BIT(var, bit) ((var) ^= (bit))
#define CH(d) ((d)->original ? (d)->original : (d)->character)
/*
* Macros for accessing virtually unlimited bitvectors. -Thoric
*
* Note that these macros use the bit number rather than the bit value
* itself -- which means that you can only access _one_ bit at a time
*
* This code uses an array of integers
*/
/*
* The functions for these prototypes can be found in misc.c
* They are up here because they are used by the macros below
*/
bool ext_is_empty args( ( EXT_BV *bits ) );
void ext_clear_bits args( ( EXT_BV *bits ) );
int ext_has_bits args( ( EXT_BV *var, EXT_BV *bits) );
bool ext_same_bits args( ( EXT_BV *var, EXT_BV *bits) );
void ext_set_bits args( ( EXT_BV *var, EXT_BV *bits) );
void ext_remove_bits args( ( EXT_BV *var, EXT_BV *bits) );
void ext_toggle_bits args( ( EXT_BV *var, EXT_BV *bits) );
/*
* Here are the extended bitvector macros:
*/
#define xIS_SET(var, bit) ((var).bits[(bit) >> RSV] & 1 << ((bit) & XBM))
#define xSET_BIT(var, bit) ((var).bits[(bit) >> RSV] |= 1 << ((bit) & XBM))
#define xSET_BITS(var, bit) (ext_set_bits(&(var), &(bit)))
#define xREMOVE_BIT(var, bit) ((var).bits[(bit) >> RSV] &= ~(1 << ((bit) & XBM)))
#define xREMOVE_BITS(var, bit) (ext_remove_bits(&(var), &(bit)))
#define xTOGGLE_BIT(var, bit) ((var).bits[(bit) >> RSV] ^= 1 << ((bit) & XBM))
#define xTOGGLE_BITS(var, bit) (ext_toggle_bits(&(var), &(bit)))
#define xCLEAR_BITS(var) (ext_clear_bits(&(var)))
#define xIS_EMPTY(var) (ext_is_empty(&(var)))
#define xHAS_BITS(var, bit) (ext_has_bits(&(var), &(bit)))
#define xSAME_BITS(var, bit) (ext_same_bits(&(var), &(bit)))
/*
* Memory allocation macros.
*/
/* Added the +1 thing because we were going over our spending limit
on memory -every- time CREATE got used. It was only by one, but once we
got up over about 110 areas and started to have regular players, things
were crashing us quite often. -- Scion */
#define CREATE(result, type, number) \
do \
{ \
if (!((result) = (type *) calloc ((number), (sizeof(type))))) \
{ \
perror("malloc failure.");\
fprintf(stderr, "Malloc failure @ %s:%d\n", __FILE__, __LINE__ ); \
abort(); \
} \
} while(0)
#define RECREATE(result,type,number) \
do \
{ \
if (!((result) = (type *) realloc ((result), (sizeof(type)) * (number))))\
{ \
perror("realloc failure"); \
fprintf(stderr, "Realloc failure @ %s:%d\n", __FILE__, __LINE__ ); \
abort(); \
} \
} while(0)
#define DISPOSE(point) \
do \
{ \
if ((point)) \
free(point); \
point = NULL; \
} while(0)
#ifdef HASHSTR
#define STRALLOC(point) str_alloc((point))
#define QUICKLINK(point) quick_link((point))
#define QUICKMATCH(p1, p2) (int) (p1) == (int) (p2)
#define STRFREE(point) \
do \
{ \
if ((point) && str_free((point))==-1) \
fprintf( stderr, "STRFREEing bad pointer in %s, line %d\n", __FILE__, __LINE__ ); \
point = NULL; \
} while(0)
#else
#define STRALLOC(point) str_dup((point))
#define QUICKLINK(point) str_dup((point))
#define QUICKMATCH(p1, p2) strcmp((p1), (p2)) == 0
#define STRFREE(point) \
do \
{ \
if ((point)) \
free((point)); \
point = NULL; \
} while(0)
#endif
/* double-linked list handling macros -Thoric */
/* Updated by Scion 8/6/1999 */
/*
#define LINK(link, first, last, next, prev) \
do \
{ \
if ( !(first) ) { \
(first) = (link); \
(last) = (link); \
} else \
(last)->next = (link); \
(link)->next = NULL; \
if (first == link) \
(link)->prev = NULL; \
else \
(link)->prev = (last); \
(last) = (link); \
} while(0)
#define INSERT(link, insert, first, next, prev) \
do \
{ \
(link)->prev = (insert)->prev; \
if ( !(insert)->prev ) \
(first) = (link); \
else \
(insert)->prev->next = (link); \
(insert)->prev = (link); \
(link)->next = (insert); \
} while(0)
#define UNLINK(link, first, last, next, prev) \
do \
{ \
if ( !(link)->prev ) { \
(first) = (link)->next; \
if ((first)) \
(first)->prev = NULL; \
} else { \
(link)->prev->next = (link)->next; \
} \
if ( !(link)->next ) { \
(last) = (link)->prev; \
if ((last)) \
(last)->next = NULL; \
} else { \
(link)->next->prev = (link)->prev; \
} \
} while(0)
*/
/* double-linked list handling macros -Thoric */
#define LINK(link, first, last, next, prev) \
do \
{ \
if ( !(first) ) \
(first) = (link); \
else \
(last)->next = (link); \
(link)->next = NULL; \
(link)->prev = (last); \
(last) = (link); \
} while(0)
#define INSERT(link, insert, first, next, prev) \
do \
{ \
(link)->prev = (insert)->prev; \
if ( !(insert)->prev ) \
(first) = (link); \
else \
(insert)->prev->next = (link); \
(insert)->prev = (link); \
(link)->next = (insert); \
} while(0)
#define UNLINK(link, first, last, next, prev) \
do \
{ \
if ( !(link)->prev ) \
(first) = (link)->next; \
else \
(link)->prev->next = (link)->next; \
if ( !(link)->next ) \
(last) = (link)->prev; \
else \
(link)->next->prev = (link)->prev; \
} while(0)
#define CHECK_LINKS(first, last, next, prev, type) \
do { \
type *ptr, *pptr = NULL; \
if ( !(first) && !(last) ) \
break; \
if ( !(first) ) \
{ \
bug( "CHECK_LINKS: last with NULL first! %s.", \
__STRING(first) ); \
for ( ptr = (last); ptr->prev; ptr = ptr->prev ); \
(first) = ptr; \
} \
else if ( !(last) ) \
{ \
bug( "CHECK_LINKS: first with NULL last! %s.", \
__STRING(first) ); \
for ( ptr = (first); ptr->next; ptr = ptr->next ); \
(last) = ptr; \
} \
if ( (first) ) \
{ \
for ( ptr = (first); ptr; ptr = ptr->next ) \
{ \
if ( ptr->prev != pptr ) \
{ \
bug( "CHECK_LINKS(%s): %p:->prev != %p. Fixing.", \
__STRING(first), ptr, pptr ); \
ptr->prev = pptr; \
} \
if ( ptr->prev && ptr->prev->next != ptr ) \
{ \
bug( "CHECK_LINKS(%s): %p:->prev->next != %p. Fixing.",\
__STRING(first), ptr, ptr ); \
ptr->prev->next = ptr; \
} \
pptr = ptr; \
} \
pptr = NULL; \
} \
if ( (last) ) \
{ \
for ( ptr = (last); ptr; ptr = ptr->prev ) \
{ \
if ( ptr->next != pptr ) \
{ \
bug( "CHECK_LINKS (%s): %p:->next != %p. Fixing.", \
__STRING(first), ptr, pptr ); \
ptr->next = pptr; \
} \
if ( ptr->next && ptr->next->prev != ptr ) \
{ \
bug( "CHECK_LINKS(%s): %p:->next->prev != %p. Fixing.",\
__STRING(first), ptr, ptr ); \
ptr->next->prev = ptr; \
} \
pptr = ptr; \
} \
} \
} while(0)
#define ASSIGN_GSN(gsn, skill) \
do \
{ \
if ( ((gsn) = skill_lookup((skill))) == -1 ) \
fprintf( stderr, "ASSIGN_GSN: Skill %s not found.\n", \
(skill) ); \
} while(0)
#define CHECK_SUBRESTRICTED(ch) \
do \
{ \
if ( (ch)->substate == SUB_RESTRICTED ) \
{ \
send_to_char( "You cannot use this command from within another command.\n\r", ch ); \
return; \
} \
} while(0)
/*
* Character macros.
*/
#define IS_NPC(ch) (xIS_SET((ch)->act, ACT_IS_NPC) && !(ch)->pcdata)
#define IS_NEWBIE(ch) ((ch)->pcdata && ((ch)->played + \
(current_time - (ch)->logon)) / 3600 < 10)
#define IS_WRITING(ch) (((ch)->desc && (ch)->desc->connected) ? TRUE : FALSE)
#define IS_AFFECTED(ch, sn) (xIS_SET((ch)->affected_by, (sn)) \
|| (!IS_NPC(ch) \
&& xIS_SET((ch)->pcdata->perm_aff, (sn))))
#define TALENT(ch, tal) (IS_NPC(ch) ? 0 : \
(((ch)->curr_talent[(tal)]/3 \
+ (ch)->talent[(tal)] \
+ ch->mod_talent[(tal)]) * \
(ch->pcdata->inborn == tal ? 2 : 1) \
+ (ch->pcdata->magiclink ? \
ch->pcdata->magiclink->talent[(tal)] \
: 0)))
#define IS_FIGHTING(ch) ((ch)->last_hit && \
(ch)->last_hit != (ch) && \
(ch)->in_room == (ch)->last_hit->in_room)
#define IS_SAME_PLANE(ch, vch) ((IS_AFFECTED((ch), AFF_DREAMWORLD) ? \
IS_AFFECTED((vch), AFF_DREAMWORLD) : \
!IS_AFFECTED((vch), AFF_DREAMWORLD)) ? \
(IS_AFFECTED((ch), AFF_VOID) ? \
IS_AFFECTED((vch), AFF_VOID) : \
!IS_AFFECTED((vch), AFF_VOID)) : \
1==2)
#define CAN_SEE_PLANE(ch,vch) ((IS_AFFECTED((ch), AFF_DREAMWORLD) || \
IS_AFFECTED((ch), AFF_VOID)) || \
(!IS_AFFECTED((vch), AFF_DREAMWORLD) && \
!IS_AFFECTED((vch), AFF_VOID)))
#define CAN_CAST(ch) (1==1)
#define IS_VAMPIRE(ch) (!IS_NPC(ch) && IS_SET(ch->pcdata->flags, PCFLAG_VAMPIRE))
#define IS_UNDEAD(ch) (IS_AFFECTED(ch, AFF_UNDEAD))
#define IS_GARGOYLE(ch)
#define IS_CONSENTING(ch, victim) (!IS_NPC((ch)) && !IS_NPC((victim)) \
&& (victim == ch \
|| (IS_SET((victim)->pcdata->permissions, PERMIT_SECURITY) || \
((ch)->pcdata->consenting \
&& (ch)->pcdata->consenting == (victim)))))
#define IS_AWAKE(ch) ((ch)->position > POS_SLEEPING)
#define GET_AC(ch) (UMAX(0, (ch)->armor))
#define GET_HITROLL(ch) ((ch)->hitroll + (int)(get_curr_per(ch)/3) \
+ (2-(abs((ch)->mental_state)/10)))
/* Thanks to Chriss Baeke for noticing damplus was unused */
#define GET_DAMROLL(ch) ((ch)->damroll \
+(ch)->damplus \
+(int)(get_curr_str(ch)/3) \
+(((ch)->mental_state > 5 \
&&(ch)->mental_state < 15) ? 1 : 0) )
#define IS_OUTSIDE(ch) (!IS_SET( \
(ch)->in_room->room_flags, \
ROOM_INDOORS) && !IS_SET( \
(ch)->in_room->room_flags, \
ROOM_TUNNEL))
#define IS_UNDERWATER(ch) ((((ch)->in_room->sector_type == SECT_WATER_SWIM \
|| (ch)->in_room->sector_type == SECT_WATER_NOSWIM \
|| (ch)->in_room->sector_type == SECT_UNDERWATER) \
&& !IS_AFFECTED((ch), AFF_FLYING)) \
|| ((ch)->in_room->sector_type == SECT_OCEANFLOOR \
|| (ch)->in_room->sector_type == SECT_LAVA))
#define NO_WEATHER_SECT(sect) ( sect == SECT_INSIDE || \
sect == SECT_UNDERWATER || \
sect == SECT_OCEANFLOOR || \
sect == SECT_UNDERGROUND )
#define IS_DRUNK(ch, drunk) (number_percent() < \
( (ch)->pcdata->condition[COND_DRUNK] \
* 2 / (drunk) ) )
#define IS_DEVOTED(ch) (!IS_NPC((ch)) \
&& (ch)->pcdata->deity)
#define IS_PKILL(ch) (1==1)
#define CAN_PKILL(ch) (1==1)
#define IS_SILENT(ch) (!IS_NPC(ch) && (IS_AFFECTED(ch, AFF_SILENT) || \
xIS_SET(ch->act, PLR_SILENCE) || \
!can_use_bodypart(ch, BP_TONGUE) || \
IS_SET(ch->in_room->room_flags, ROOM_SILENCE)))
#define WAIT_STATE(ch, npulse) ((ch)->wait=(UMAX((ch)->wait, (npulse - \
(int) TALENT((ch), TAL_TIME) / 50))))
#define EXIT(ch, door) ( get_exit( (ch)->in_room, door ) )
#define CAN_GO(ch, door) (EXIT((ch),(door)) \
&& (EXIT((ch),(door))->to_room != NULL) \
&& !IS_SET(EXIT((ch), (door))->exit_info, EX_CLOSED))
#define IS_FLOATING(ch) ( IS_AFFECTED((ch), AFF_FLYING) || IS_AFFECTED((ch), AFF_FLOATING) )
#define IS_VALID_SN(sn) ( (sn) >=0 && (sn) < MAX_SKILL \
&& skill_table[(sn)] \
&& skill_table[(sn)]->name )
#define IS_VALID_HERB(sn) ( (sn) >=0 && (sn) < MAX_HERB \
&& herb_table[(sn)] \
&& herb_table[(sn)]->name )
#define IS_VALID_DISEASE(sn) ( (sn) >=0 && (sn) < MAX_DISEASE \
&& disease_table[(sn)] \
&& disease_table[(sn)]->name )
#define IS_PACIFIST(ch) (IS_NPC(ch) && xIS_SET(ch->act, ACT_PACIFIST))
#define SPELL_FLAG(skill, flag) ( IS_SET((skill)->flags, (flag)) )
#define SPELL_DAMAGE(skill) ( ((skill)->info ) & 7 )
#define SPELL_ACTION(skill) ( ((skill)->info >> 3) & 7 )
#define SPELL_CLASS(skill) ( ((skill)->info >> 6) & 7 )
#define SPELL_POWER(skill) ( ((skill)->info >> 9) & 3 )
#define SPELL_SAVE(skill) ( ((skill)->info >> 11) & 7 )
#define SET_SDAM(skill, val) ( (skill)->info = ((skill)->info & SDAM_MASK) + ((val) & 7) )
#define SET_SACT(skill, val) ( (skill)->info = ((skill)->info & SACT_MASK) + (((val) & 7) << 3) )
#define SET_SCLA(skill, val) ( (skill)->info = ((skill)->info & SCLA_MASK) + (((val) & 7) << 6) )
#define SET_SPOW(skill, val) ( (skill)->info = ((skill)->info & SPOW_MASK) + (((val) & 3) << 9) )
#define SET_SSAV(skill, val) ( (skill)->info = ((skill)->info & SSAV_MASK) + (((val) & 7) << 11) )
/* RIS by gsn lookups. -- Altrag.
Will need to add some || stuff for spells that need a special GSN. */
#define IS_FIRE(dt) (IS_VALID_SN(dt) && \
SPELL_DAMAGE(skill_table[(dt)]) == SD_FIRE)
#define IS_COLD(dt) (IS_VALID_SN(dt) && \
SPELL_DAMAGE(skill_table[(dt)]) == SD_COLD)
#define IS_ACID(dt) ( IS_VALID_SN(dt) && \
SPELL_DAMAGE(skill_table[(dt)]) == SD_ACID )
#define IS_ELECTRICITY(dt) ( IS_VALID_SN(dt) && \
SPELL_DAMAGE(skill_table[(dt)]) == SD_ELECTRICITY )
#define IS_ENERGY(dt) ( IS_VALID_SN(dt) && \
SPELL_DAMAGE(skill_table[(dt)]) == SD_ENERGY )
#define IS_DRAIN(dt) ( IS_VALID_SN(dt) && \
SPELL_DAMAGE(skill_table[(dt)]) == SD_DRAIN )
#define IS_POISON(dt) ( IS_VALID_SN(dt) && \
SPELL_DAMAGE(skill_table[(dt)]) == SD_POISON )
/*
* Object macros.
*/
#define IS_OBJ_STAT(obj, stat) (xIS_SET((obj)->extra_flags, (stat)))
/*
* MudProg macros. -Thoric
*/
#define HAS_PROG(what, prog) ((what) && xIS_SET((what)->progtypes,(prog)))
/*
* Description macros.
*/
#define PERS(ch, looker) ( (ch)->name ? (can_see( (looker), (ch) ) ? \
( IS_NPC(ch) ? (xIS_SET((ch)->act, ACT_NAMED) ? \
(ch)->short_descr : aoran(themob(ch))) : \
TALENT((looker), TAL_SEEKING) >= TALENT((ch), TAL_ILLUSION) + TALENT((ch), TAL_CHANGE) ? (ch)->name : \
ch->pcdata->name_disguise ? ch->pcdata->name_disguise \
: (ch)->name) : "Someone") : "Nobody" )
#define log_string(txt) ( log_string_plus( (txt), LOG_NORMAL, 0 ))
#define dam_message(ch, victim, dam, dt, obj, part) (new_dam_message((ch), (victim), (dam), (dt), (obj), (part)) )
/*
* Structure for a command in the command lookup table.
*/
struct cmd_type
{
CMDTYPE * next;
char * name;
DO_FUN * do_fun;
int flags; /* Added for Checking interpret stuff -Shaddai*/
sh_int position;
sh_int log;
struct timerset userec;
int lag_count; /* count lag flags for this cmd - FB */
int permit; /* permission required */
};
struct alias_data
{
ALIAS_DATA *next;
ALIAS_DATA *prev;
char *name;
char *alias;
};
/*
* Structure for a social in the socials table.
*/
struct social_type
{
SOCIALTYPE * next;
char * name;
char * char_no_arg;
char * others_no_arg;
char * char_found;
char * others_found;
char * vict_found;
char * char_auto;
char * others_auto;
char * adj;
int flags;
};
/*
* Global constants.
*/
extern time_t last_restore_all_time;
extern time_t boot_time; /* this should be moved down */
extern HOUR_MIN_SEC * set_boot_time;
extern struct tm *new_boot_time;
extern time_t new_boot_time_t;
extern const struct str_app_type str_app [26];
extern const struct int_app_type int_app [26];
extern const struct wis_app_type wis_app [26];
extern const struct dex_app_type dex_app [26];
extern const struct con_app_type con_app [26];
extern const struct cha_app_type cha_app [26];
extern const struct lck_app_type lck_app [26];
extern char * const part_locs [];
extern const struct liq_type liq_table [LIQ_MAX];
extern char * const attack_table [18];
extern char * const part_cond_table [7]; /* Scion */
extern char * const part_name_singular []; /* Scion */
extern char * const magic_table [29];
extern char ** const s_message_table [20];
extern char ** const p_message_table [20];
extern char * const skill_tname [];
extern sh_int const movement_loss [SECT_MAX];
extern char * const dir_name [];
extern char * const rev_dir_name [];
extern char * const where_name [];
extern const sh_int rev_dir [];
extern const int trap_door [];
extern char * const r_flags [];
extern char * const w_flags [];
extern char * const o_flags [];
extern char * const a_flags [];
extern char * const o_types [];
extern char * const a_types [];
extern char * const bp_flags [];
extern char * const rune_flags [];
extern char * const act_flags [];
extern char * const plr_flags [];
extern char * const pc_flags [];
extern char * const trap_flags [];
extern char * const ris_flags [];
extern char * const trig_flags [];
extern char * const part_flags [];
extern char * const npc_race [];
extern char * const area_flags [];
extern char * const container_flags []; /* Tagith */
extern char * const ex_pmisc [];
extern char * const ex_pwater [];
extern char * const ex_pair [];
extern char * const ex_pearth [];
extern char * const ex_pfire [];
extern char * const temp_settings []; /* FB */
extern char * const precip_settings [];
extern char * const wind_settings [];
extern char * const mana_settings [];
extern char * const preciptemp_msg [6][6];
extern char * const windtemp_msg [6][6];
extern char * const manatemp_msg [6][6];
extern char * const precip_msg [];
extern char * const wind_msg [];
extern char * const moon_phase [];
extern char * const clearday_msg [];
extern char * const cloudyday_msg [];
extern char * const talent_name [MAX_DEITY];
extern char * const talent_rank [MAX_DEITY][12];
extern char * const lang_names [];
extern char * const weapon_bane [];
extern char * const weapon_brand [];
extern char * const pos_names [];
extern char * const song_name [MAX_SONG];
extern char * const weapon_skill [];
extern char * const noncombat_skill [];
/*
* Global variables.
*/
extern char * bigregex;
extern char * preg;
extern char * target_name;
extern char * ranged_target_name;
extern int numobjsloaded;
extern int nummobsloaded;
extern int physicalobjects;
extern int num_descriptors;
extern struct system_data sysdata;
extern int top_sn;
extern int top_vroom;
extern int top_herb;
extern AREA_DATA *stockobj;
extern CMDTYPE * command_hash [126];
NEW_HELP_DATA * help_hash [126];
extern SKILLTYPE * skill_table [MAX_SKILL];
extern SOCIALTYPE * social_index [27];
extern CHAR_DATA * cur_char;
extern ROOM_INDEX_DATA * cur_room;
extern bool cur_char_died;
extern ch_ret global_retcode;
extern SKILLTYPE * herb_table [MAX_HERB];
extern SKILLTYPE * disease_table [MAX_DISEASE];
extern int cur_obj;
extern int cur_obj_serial;
extern bool cur_obj_extracted;
extern obj_ret global_objcode;
extern HELP_DATA * first_help;
extern HELP_DATA * last_help;
extern SHOP_DATA * first_shop;
extern SHOP_DATA * last_shop;
extern BOOK_DATA * first_book;
extern BOOK_DATA * last_book;
extern CLAN_DATA * first_clan;
extern CLAN_DATA * last_clan;
extern CHANNEL_DATA * first_channel;
extern CHANNEL_DATA * last_channel;
extern BIT_DATA * first_abit;
extern BIT_DATA * last_abit;
extern BIT_DATA * first_qbit;
extern BIT_DATA * last_qbit;
extern BAN_DATA * first_ban;
extern BAN_DATA * last_ban;
extern RESERVE_DATA * first_reserved;
extern RESERVE_DATA * last_reserved;
extern CHAR_DATA * first_char;
extern CHAR_DATA * last_char;
extern DESCRIPTOR_DATA * first_descriptor;
extern DESCRIPTOR_DATA * last_descriptor;
extern OBJ_DATA * first_object;
extern OBJ_DATA * last_object;
extern DEITY_DATA * first_deity;
extern DEITY_DATA * last_deity;
extern AREA_DATA * first_area;
extern AREA_DATA * last_area;
extern AREA_DATA * first_build;
extern AREA_DATA * last_build;
extern AREA_DATA * first_asort;
extern AREA_DATA * last_asort;
extern AREA_DATA * first_bsort;
extern AREA_DATA * last_bsort;
extern AREA_DATA * first_area_name; /*alphanum. sort*/
extern AREA_DATA * last_area_name; /* Fireblade */
extern MATERIAL_DATA * first_material; /* Scion */
extern MATERIAL_DATA * last_material; /* Scion */
extern MAT_SHOP * first_matshop; /* keo */
extern MAT_SHOP * last_matshop; /* keo */
extern MOON_DATA * first_moon;
extern MOON_DATA * last_moon;
extern RECIPE_DATA * first_recipe;
extern RECIPE_DATA * last_recipe;
extern INGRED_DATA * first_ingred;
extern INGRED_DATA * last_ingred;
extern SPECIES_DATA * first_species;
extern SPECIES_DATA * last_species;
extern NATION_DATA * first_nation;
extern NATION_DATA * last_nation;
extern MUT_DATA * first_mutation;
extern MUT_DATA * last_mutation;
extern OBJ_DATA * extracted_obj_queue;
extern EXTRACT_CHAR_DATA * extracted_char_queue;
extern OBJ_DATA * save_equipment[MAX_WEAR][MAX_LAYERS];
extern CHAR_DATA * quitting_char;
extern CHAR_DATA * loading_char;
extern CHAR_DATA * saving_char;
extern OBJ_DATA * all_obj;
extern CITY_DATA * first_city;
extern CITY_DATA * last_city;
extern ARENA_DATA * first_arena;
extern ARENA_DATA * last_arena;
extern char bug_buf [];
extern time_t current_time;
extern bool fLogAll;
extern FILE * fpReserve;
extern FILE * fpLOG;
extern char log_buf [];
extern TIME_INFO_DATA time_info;
extern WEATHER_DATA weather_info;
extern IMMORTAL_HOST * immortal_host_start;
extern IMMORTAL_HOST * immortal_host_end;
extern int weath_unit;
extern int rand_factor;
extern int climate_factor;
extern int neigh_factor;
extern int max_vector;
extern struct act_prog_data * mob_act_list;
/*
* Command functions.
* Defined in act_*.c (mostly).
*/
DECLARE_DO_FUN( skill_notfound );
DECLARE_DO_FUN( do_aassign );
DECLARE_DO_FUN( do_adopt );
DECLARE_DO_FUN( do_aentrance );
DECLARE_DO_FUN( do_aexit );
DECLARE_DO_FUN( do_affected );
DECLARE_DO_FUN( do_affix );
DECLARE_DO_FUN( do_afk );
DECLARE_DO_FUN( do_aid );
DECLARE_DO_FUN( do_alias );
DECLARE_DO_FUN( do_allow );
DECLARE_DO_FUN( do_alter );
DECLARE_DO_FUN( do_ansi );
DECLARE_DO_FUN( do_antimatter );
DECLARE_DO_FUN( do_apply );
DECLARE_DO_FUN( do_archmages );
DECLARE_DO_FUN( do_areas );
DECLARE_DO_FUN( do_arena );
DECLARE_DO_FUN( do_aset );
DECLARE_DO_FUN( do_astat );
DECLARE_DO_FUN( do_at );
DECLARE_DO_FUN( do_atmob );
DECLARE_DO_FUN( do_atobj );
DECLARE_DO_FUN( do_attributes );
DECLARE_DO_FUN( do_auto );
DECLARE_DO_FUN( do_award );
DECLARE_DO_FUN( do_balefire );
DECLARE_DO_FUN( do_bamfin );
DECLARE_DO_FUN( do_bamfout );
DECLARE_DO_FUN( do_ban );
DECLARE_DO_FUN( do_bandage );
DECLARE_DO_FUN( do_bash );
DECLARE_DO_FUN( do_bashdoor );
DECLARE_DO_FUN( do_beep );
DECLARE_DO_FUN( do_berserk );
DECLARE_DO_FUN( do_bestow );
DECLARE_DO_FUN( do_bind );
DECLARE_DO_FUN( do_bio );
DECLARE_DO_FUN( do_bite );
DECLARE_DO_FUN( do_blast );
DECLARE_DO_FUN( do_blink );
DECLARE_DO_FUN( do_blizzard );
DECLARE_DO_FUN( do_bloodlet );
DECLARE_DO_FUN( do_body );
DECLARE_DO_FUN( do_bodybag );
DECLARE_DO_FUN( do_boneset );
DECLARE_DO_FUN( do_bookwrite );
DECLARE_DO_FUN( do_bounty );
DECLARE_DO_FUN( do_brainshock );
DECLARE_DO_FUN( do_brand );
DECLARE_DO_FUN( do_brew );
DECLARE_DO_FUN( do_bset );
DECLARE_DO_FUN( do_bstat );
DECLARE_DO_FUN( do_bug );
DECLARE_DO_FUN( do_build );
DECLARE_DO_FUN( do_burn );
DECLARE_DO_FUN( do_bury );
DECLARE_DO_FUN( do_buy );
DECLARE_DO_FUN( do_cast );
DECLARE_DO_FUN( do_cedit );
DECLARE_DO_FUN( do_chainlightning);
DECLARE_DO_FUN( do_change );
DECLARE_DO_FUN( do_channels );
DECLARE_DO_FUN( do_chat );
DECLARE_DO_FUN( do_check_vnums );
DECLARE_DO_FUN( do_chill );
DECLARE_DO_FUN( do_chop );
DECLARE_DO_FUN( do_city );
DECLARE_DO_FUN( do_circle );
DECLARE_DO_FUN( do_clan ); /* Scion */
DECLARE_DO_FUN( do_claw );
DECLARE_DO_FUN( do_climate ); /* FB */
DECLARE_DO_FUN( do_climb );
DECLARE_DO_FUN( do_close );
DECLARE_DO_FUN( do_cmdtable );
DECLARE_DO_FUN( do_cmenu );
DECLARE_DO_FUN( do_combine );
DECLARE_DO_FUN( do_commands );
DECLARE_DO_FUN( do_compare );
DECLARE_DO_FUN( do_config );
DECLARE_DO_FUN( do_connect );
DECLARE_DO_FUN( do_consent );
DECLARE_DO_FUN( do_consider );
DECLARE_DO_FUN( do_copyover );
DECLARE_DO_FUN( do_cook );
DECLARE_DO_FUN( do_credits );
DECLARE_DO_FUN( do_cset );
DECLARE_DO_FUN( do_cure );
DECLARE_DO_FUN( do_decay );
DECLARE_DO_FUN( do_deduct );
DECLARE_DO_FUN( do_deities );
DECLARE_DO_FUN( do_delay );
DECLARE_DO_FUN( do_deny );
DECLARE_DO_FUN( do_deposit );
DECLARE_DO_FUN( do_description );
DECLARE_DO_FUN( do_destro );
DECLARE_DO_FUN( do_destroy );
DECLARE_DO_FUN( do_detonate );
DECLARE_DO_FUN( do_detrap );
DECLARE_DO_FUN( do_dig );
DECLARE_DO_FUN( do_disarm );
DECLARE_DO_FUN( do_disconnect );
DECLARE_DO_FUN( do_dismiss );
DECLARE_DO_FUN( do_dismount );
DECLARE_DO_FUN( do_disown );
DECLARE_DO_FUN( do_dispel );
DECLARE_DO_FUN( do_distort );
DECLARE_DO_FUN( do_divorce );
DECLARE_DO_FUN( do_dmesg );
DECLARE_DO_FUN( do_down );
DECLARE_DO_FUN( do_drag );
DECLARE_DO_FUN( do_drain );
DECLARE_DO_FUN( do_dream );
DECLARE_DO_FUN( do_drink );
DECLARE_DO_FUN( do_drop );
DECLARE_DO_FUN( do_diagnose );
DECLARE_DO_FUN( do_dye );
DECLARE_DO_FUN( do_east );
DECLARE_DO_FUN( do_eat );
DECLARE_DO_FUN( do_echo );
DECLARE_DO_FUN( do_elbow );
DECLARE_DO_FUN( do_electrocute );
DECLARE_DO_FUN( do_emerge );
DECLARE_DO_FUN( do_emote );
DECLARE_DO_FUN( do_empty );
DECLARE_DO_FUN( do_enchant );
DECLARE_DO_FUN( do_engrave );
DECLARE_DO_FUN( do_enter );
DECLARE_DO_FUN( do_equipment );
DECLARE_DO_FUN( do_examine );
DECLARE_DO_FUN( do_exits );
DECLARE_DO_FUN( do_experience );
DECLARE_DO_FUN( do_family );
DECLARE_DO_FUN( do_fashion );
DECLARE_DO_FUN( do_feed );
DECLARE_DO_FUN( do_fill );
DECLARE_DO_FUN( do_fixchar );
DECLARE_DO_FUN( do_flamingrain );
DECLARE_DO_FUN( do_flare );
DECLARE_DO_FUN( do_flee );
DECLARE_DO_FUN( do_flood );
DECLARE_DO_FUN( do_fly );
DECLARE_DO_FUN( do_foldarea );
DECLARE_DO_FUN( do_follow );
DECLARE_DO_FUN( do_for );
DECLARE_DO_FUN( do_force );
DECLARE_DO_FUN( do_forceclose );
DECLARE_DO_FUN( do_foreign );
DECLARE_DO_FUN( do_fprompt );
DECLARE_DO_FUN( do_fquit ); /* Gorog */
DECLARE_DO_FUN( do_form_password);
DECLARE_DO_FUN( do_freeze );
DECLARE_DO_FUN( do_frostbite );
DECLARE_DO_FUN( do_funnel );
DECLARE_DO_FUN( do_get );
DECLARE_DO_FUN( do_genarea );
DECLARE_DO_FUN( do_geyser );
DECLARE_DO_FUN( do_give );
DECLARE_DO_FUN( do_glance );
DECLARE_DO_FUN( do_gold );
DECLARE_DO_FUN( do_goto );
DECLARE_DO_FUN( do_graffiti );
DECLARE_DO_FUN( do_group );
DECLARE_DO_FUN( do_grub );
DECLARE_DO_FUN( do_gtell );
DECLARE_DO_FUN( do_guard );
DECLARE_DO_FUN( do_gwhere );
DECLARE_DO_FUN( do_heal );
DECLARE_DO_FUN( do_headbutt );
DECLARE_DO_FUN( do_hell );
DECLARE_DO_FUN( do_hide );
DECLARE_DO_FUN( do_hire );
DECLARE_DO_FUN( do_hiscore );
DECLARE_DO_FUN( do_hiscoset );
DECLARE_DO_FUN( do_hit );
DECLARE_DO_FUN( do_holyblast );
DECLARE_DO_FUN( do_holylight );
DECLARE_DO_FUN( do_home );
DECLARE_DO_FUN( do_homepage );
DECLARE_DO_FUN( do_ide );
DECLARE_DO_FUN( do_idea );
DECLARE_DO_FUN( do_identify );
DECLARE_DO_FUN( do_immobilize );
DECLARE_DO_FUN( do_induct );
DECLARE_DO_FUN( do_info );
DECLARE_DO_FUN( do_ingredient );
DECLARE_DO_FUN( do_installarea );
DECLARE_DO_FUN( do_instaroom );
DECLARE_DO_FUN( do_instazone );
DECLARE_DO_FUN( do_introduce );
DECLARE_DO_FUN( do_inventory );
DECLARE_DO_FUN( do_invis );
DECLARE_DO_FUN( do_kick );
DECLARE_DO_FUN( do_knee );
DECLARE_DO_FUN( do_kneel );
DECLARE_DO_FUN( do_last );
DECLARE_DO_FUN( do_laws );
DECLARE_DO_FUN( do_leave );
DECLARE_DO_FUN( do_light );
DECLARE_DO_FUN( do_lightning );
DECLARE_DO_FUN( do_link );
DECLARE_DO_FUN( do_list );
DECLARE_DO_FUN( do_litterbug );
DECLARE_DO_FUN( do_land );
DECLARE_DO_FUN( do_load );
DECLARE_DO_FUN( do_loadarea );
DECLARE_DO_FUN( do_loadup );
DECLARE_DO_FUN( do_lock );
DECLARE_DO_FUN( do_locksmith );
DECLARE_DO_FUN( do_log );
DECLARE_DO_FUN( do_look );
DECLARE_DO_FUN( do_low_purge );
DECLARE_DO_FUN( do_lunge );
DECLARE_DO_FUN( do_magic );
DECLARE_DO_FUN( do_magma );
DECLARE_DO_FUN( do_manastorm );
DECLARE_DO_FUN( do_mailroom );
DECLARE_DO_FUN( do_makedeity );
DECLARE_DO_FUN( do_makeore );
DECLARE_DO_FUN( do_makerooms );
DECLARE_DO_FUN( do_makeshop );
DECLARE_DO_FUN( do_marry );
DECLARE_DO_FUN( do_massign );
DECLARE_DO_FUN( do_material );
DECLARE_DO_FUN( do_matshop );
DECLARE_DO_FUN( do_memory );
DECLARE_DO_FUN( do_meteor );
DECLARE_DO_FUN( do_mcreate );
DECLARE_DO_FUN( do_mdelete );
DECLARE_DO_FUN( do_mfind );
DECLARE_DO_FUN( do_mindflay );
DECLARE_DO_FUN( do_minvoke );
DECLARE_DO_FUN( do_mix );
DECLARE_DO_FUN( do_mlist );
DECLARE_DO_FUN( do_moblog );
DECLARE_DO_FUN( do_moon );
DECLARE_DO_FUN( do_morph );
DECLARE_DO_FUN( do_mount );
DECLARE_DO_FUN( do_motd );
DECLARE_DO_FUN( do_mset );
DECLARE_DO_FUN( do_mstat );
DECLARE_DO_FUN( do_mutation );
DECLARE_DO_FUN( do_mwhere );
DECLARE_DO_FUN( do_namegen );
DECLARE_DO_FUN( do_nation );
DECLARE_DO_FUN( do_neighbors );
DECLARE_DO_FUN( do_news );
DECLARE_DO_FUN( do_new_help );
DECLARE_DO_FUN( do_nightmare );
DECLARE_DO_FUN( do_nochannel );
DECLARE_DO_FUN( do_noemote );
DECLARE_DO_FUN( do_noresolve );
DECLARE_DO_FUN( do_north );
DECLARE_DO_FUN( do_northeast );
DECLARE_DO_FUN( do_northwest );
DECLARE_DO_FUN( do_notell );
DECLARE_DO_FUN( do_notitle );
DECLARE_DO_FUN( do_nuisance );
DECLARE_DO_FUN( do_oassign );
DECLARE_DO_FUN( do_ocopy ); /* tag */
DECLARE_DO_FUN( do_ocreate );
DECLARE_DO_FUN( do_odelete );
DECLARE_DO_FUN( do_ofind );
DECLARE_DO_FUN( do_ogrub );
DECLARE_DO_FUN( do_oinvoke );
DECLARE_DO_FUN( do_olist );
DECLARE_DO_FUN( do_ooedit ); /* Tag */
DECLARE_DO_FUN( do_omedit ); /* Tag */
DECLARE_DO_FUN( do_oredit ); /* Tag */
DECLARE_DO_FUN( do_open );
DECLARE_DO_FUN( do_ooc_say );
DECLARE_DO_FUN( do_order );
DECLARE_DO_FUN( do_oset );
DECLARE_DO_FUN( do_osearch );
DECLARE_DO_FUN( do_ostat );
DECLARE_DO_FUN( do_otransfer );
DECLARE_DO_FUN( do_outcast );
DECLARE_DO_FUN( do_outputprefix);
DECLARE_DO_FUN( do_outputsuffix);
DECLARE_DO_FUN( do_owhere );
DECLARE_DO_FUN( do_pacify );
DECLARE_DO_FUN( do_pager );
DECLARE_DO_FUN( do_password );
DECLARE_DO_FUN( do_plant );
DECLARE_DO_FUN( do_player_echo );
DECLARE_DO_FUN( do_pcrename );
DECLARE_DO_FUN( do_peace );
DECLARE_DO_FUN( do_permit );
DECLARE_DO_FUN( do_pick );
DECLARE_DO_FUN( do_piss );
DECLARE_DO_FUN( do_pound );
DECLARE_DO_FUN( do_poisoncloud );
DECLARE_DO_FUN( do_pose );
DECLARE_DO_FUN( do_practice );
DECLARE_DO_FUN( do_preserve );
DECLARE_DO_FUN( do_protect ); /* Scion */
DECLARE_DO_FUN( do_prompt );
DECLARE_DO_FUN( do_pry );
DECLARE_DO_FUN( do_pull );
DECLARE_DO_FUN( do_punch );
DECLARE_DO_FUN( do_purge );
DECLARE_DO_FUN( do_purify );
DECLARE_DO_FUN( do_push );
DECLARE_DO_FUN( do_put );
DECLARE_DO_FUN( do_pyrokinetics );
DECLARE_DO_FUN( do_abit );
DECLARE_DO_FUN( do_qbit );
DECLARE_DO_FUN( do_quaff );
DECLARE_DO_FUN( do_quake );
DECLARE_DO_FUN( do_qui );
DECLARE_DO_FUN( do_quit );
DECLARE_DO_FUN( do_races );
DECLARE_DO_FUN( do_radio );
DECLARE_DO_FUN( do_rank );
DECLARE_DO_FUN( do_rap );
DECLARE_DO_FUN( do_rassign );
DECLARE_DO_FUN( do_rat );
DECLARE_DO_FUN( do_rdelete );
DECLARE_DO_FUN( do_ready );
DECLARE_DO_FUN( do_rebirth );
DECLARE_DO_FUN( do_reboo );
DECLARE_DO_FUN( do_reboot );
DECLARE_DO_FUN( do_recall );
DECLARE_DO_FUN( do_recho );
DECLARE_DO_FUN( do_recipe );
DECLARE_DO_FUN( do_recite );
DECLARE_DO_FUN( do_redit );
DECLARE_DO_FUN( do_regoto );
DECLARE_DO_FUN( do_relax );
DECLARE_DO_FUN( do_remove );
DECLARE_DO_FUN( do_rent );
DECLARE_DO_FUN( do_repair );
DECLARE_DO_FUN( do_reply );
DECLARE_DO_FUN( do_report );
DECLARE_DO_FUN( do_rescue );
DECLARE_DO_FUN( do_reserve );
DECLARE_DO_FUN( do_reset );
DECLARE_DO_FUN( do_reshape );
DECLARE_DO_FUN( do_rest );
DECLARE_DO_FUN( do_restore );
DECLARE_DO_FUN( do_restoretime );
DECLARE_DO_FUN( do_resurrect );
DECLARE_DO_FUN( do_retell );
DECLARE_DO_FUN( do_retran );
DECLARE_DO_FUN( do_retrieve );
DECLARE_DO_FUN( do_return );
DECLARE_DO_FUN( do_revert );
DECLARE_DO_FUN( do_rgrub );
DECLARE_DO_FUN( do_rip );
DECLARE_DO_FUN( do_rfind );
DECLARE_DO_FUN( do_rlist );
DECLARE_DO_FUN( do_roleplay );
DECLARE_DO_FUN( do_roll );
DECLARE_DO_FUN( do_rreset );
DECLARE_DO_FUN( do_rset );
DECLARE_DO_FUN( do_rstat );
DECLARE_DO_FUN( do_rune );
DECLARE_DO_FUN( do_sandstorm );
DECLARE_DO_FUN( do_save );
DECLARE_DO_FUN( do_saveall );
DECLARE_DO_FUN( do_savearea );
DECLARE_DO_FUN( do_say );
DECLARE_DO_FUN( do_scan );
DECLARE_DO_FUN( do_scatter );
DECLARE_DO_FUN( do_score );
DECLARE_DO_FUN( do_scribe );
DECLARE_DO_FUN( do_search );
DECLARE_DO_FUN( do_sedit );
DECLARE_DO_FUN( do_seek );
DECLARE_DO_FUN( do_sell );
DECLARE_DO_FUN( do_set_boot_time);
DECLARE_DO_FUN( do_setdeity );
DECLARE_DO_FUN( do_set_book );
DECLARE_DO_FUN( do_set_help );
DECLARE_DO_FUN( do_setweather );
DECLARE_DO_FUN( do_sheathe );
DECLARE_DO_FUN( do_shield );
DECLARE_DO_FUN( do_shock );
DECLARE_DO_FUN( do_shoot );
DECLARE_DO_FUN( do_shops );
DECLARE_DO_FUN( do_shopset );
DECLARE_DO_FUN( do_shopstat );
DECLARE_DO_FUN( do_shove );
DECLARE_DO_FUN( do_showabit );
DECLARE_DO_FUN( do_showqbit );
DECLARE_DO_FUN( do_setabit );
DECLARE_DO_FUN( do_setqbit );
DECLARE_DO_FUN( do_showdeity );
DECLARE_DO_FUN( do_showweather ); /* FB */
DECLARE_DO_FUN( do_shutdow );
DECLARE_DO_FUN( do_shutdown );
DECLARE_DO_FUN( do_silence );
DECLARE_DO_FUN( do_sing );
DECLARE_DO_FUN( do_sit );
DECLARE_DO_FUN( do_skills );
DECLARE_DO_FUN( do_skin );
DECLARE_DO_FUN( do_slap );
DECLARE_DO_FUN( do_slash );
DECLARE_DO_FUN( do_slay );
DECLARE_DO_FUN( do_sleep );
DECLARE_DO_FUN( do_slookup );
DECLARE_DO_FUN( do_smite );
DECLARE_DO_FUN( do_smoke );
DECLARE_DO_FUN( do_sneak );
DECLARE_DO_FUN( do_snoop );
DECLARE_DO_FUN( do_sober );
DECLARE_DO_FUN( do_socials );
DECLARE_DO_FUN( do_sonics );
DECLARE_DO_FUN( do_soulfire );
DECLARE_DO_FUN( do_south );
DECLARE_DO_FUN( do_southeast );
DECLARE_DO_FUN( do_southwest );
DECLARE_DO_FUN( do_squat );
DECLARE_DO_FUN( do_species );
DECLARE_DO_FUN( do_spike );
DECLARE_DO_FUN( do_splash );
DECLARE_DO_FUN( do_split );
DECLARE_DO_FUN( do_sset );
DECLARE_DO_FUN( do_stab );
DECLARE_DO_FUN( do_stand );
DECLARE_DO_FUN( do_status );
DECLARE_DO_FUN( do_steal );
DECLARE_DO_FUN( do_steam );
DECLARE_DO_FUN( do_sting );
DECLARE_DO_FUN( do_storm );
DECLARE_DO_FUN( do_story );
DECLARE_DO_FUN( do_strew );
DECLARE_DO_FUN( do_strip );
DECLARE_DO_FUN( do_summon );
DECLARE_DO_FUN( do_sunstroke );
DECLARE_DO_FUN( do_switch );
DECLARE_DO_FUN( do_sworddance );
DECLARE_DO_FUN( do_showlayers );
DECLARE_DO_FUN( do_suicide );
DECLARE_DO_FUN( do_taint );
DECLARE_DO_FUN( do_talent_advance);
DECLARE_DO_FUN( do_tap );
DECLARE_DO_FUN( do_tail );
DECLARE_DO_FUN( do_tamp );
DECLARE_DO_FUN( do_telekinetics );
DECLARE_DO_FUN( do_tell );
DECLARE_DO_FUN( do_think );
DECLARE_DO_FUN( do_throw );
DECLARE_DO_FUN( do_time );
DECLARE_DO_FUN( do_timecmd );
DECLARE_DO_FUN( do_title );
DECLARE_DO_FUN( do_track );
DECLARE_DO_FUN( do_tradein );
DECLARE_DO_FUN( do_train );
DECLARE_DO_FUN( do_transfer );
DECLARE_DO_FUN( do_travel );
DECLARE_DO_FUN( do_turn );
DECLARE_DO_FUN( do_typo );
DECLARE_DO_FUN( do_unfoldarea );
DECLARE_DO_FUN( do_unhell );
DECLARE_DO_FUN( do_unholyblast );
DECLARE_DO_FUN( do_unlock );
DECLARE_DO_FUN( do_unnuisance );
DECLARE_DO_FUN( do_unsilence );
DECLARE_DO_FUN( do_up );
DECLARE_DO_FUN( do_users );
DECLARE_DO_FUN( do_value );
DECLARE_DO_FUN( do_ventriloquate);
DECLARE_DO_FUN( do_vines );
DECLARE_DO_FUN( do_vnums );
DECLARE_DO_FUN( do_void );
DECLARE_DO_FUN( do_vsearch );
DECLARE_DO_FUN( do_wail );
DECLARE_DO_FUN( do_wake );
DECLARE_DO_FUN( do_weapons );
DECLARE_DO_FUN( do_wear );
DECLARE_DO_FUN( do_weather );
DECLARE_DO_FUN( do_west );
DECLARE_DO_FUN( do_where );
DECLARE_DO_FUN( do_whip );
DECLARE_DO_FUN( do_whisper );
DECLARE_DO_FUN( do_who );
DECLARE_DO_FUN( do_whois );
DECLARE_DO_FUN( do_wield );
DECLARE_DO_FUN( do_wind );
DECLARE_DO_FUN( do_withdraw );
DECLARE_DO_FUN( do_wizhelp );
DECLARE_DO_FUN( do_wizlock );
DECLARE_DO_FUN( do_zones );
/* mob prog stuff */
DECLARE_DO_FUN( do_mp_close_passage );
DECLARE_DO_FUN( do_mp_damage );
DECLARE_DO_FUN( do_mp_log );
DECLARE_DO_FUN( do_mp_restore );
DECLARE_DO_FUN( do_mp_open_passage );
DECLARE_DO_FUN( do_mp_practice );
DECLARE_DO_FUN( do_mp_slay );
DECLARE_DO_FUN( do_mpaset );
DECLARE_DO_FUN( do_mpqset );
DECLARE_DO_FUN( do_mpadvance );
DECLARE_DO_FUN( do_mpaddpoints );
DECLARE_DO_FUN( do_mpasound );
DECLARE_DO_FUN( do_mpasupress );
DECLARE_DO_FUN( do_mpat );
DECLARE_DO_FUN( do_mpdream );
DECLARE_DO_FUN( do_mp_deposit );
DECLARE_DO_FUN( do_mp_fill_in );
DECLARE_DO_FUN( do_mp_withdraw );
DECLARE_DO_FUN( do_mpecho );
DECLARE_DO_FUN( do_mpechoaround );
DECLARE_DO_FUN( do_mpechoat );
DECLARE_DO_FUN( do_mpechozone );
DECLARE_DO_FUN( do_mpedit );
DECLARE_DO_FUN( do_mrange );
DECLARE_DO_FUN( do_opedit );
DECLARE_DO_FUN( do_orange );
DECLARE_DO_FUN( do_rpedit );
DECLARE_DO_FUN( do_mpforce );
DECLARE_DO_FUN( do_mpinvis );
DECLARE_DO_FUN( do_mpgoto );
DECLARE_DO_FUN( do_mpjunk );
DECLARE_DO_FUN( do_mpkill );
DECLARE_DO_FUN( do_mpmload );
DECLARE_DO_FUN( do_mpmset );
DECLARE_DO_FUN( do_mpnothing );
DECLARE_DO_FUN( do_mpoload );
DECLARE_DO_FUN( do_mposet );
DECLARE_DO_FUN( do_mppardon );
DECLARE_DO_FUN( do_mppeace );
DECLARE_DO_FUN( do_mppurge );
DECLARE_DO_FUN( do_mpstat );
DECLARE_DO_FUN( do_opstat );
DECLARE_DO_FUN( do_rpstat );
DECLARE_DO_FUN( do_mptransfer );
DECLARE_DO_FUN( do_mpnuisance );
DECLARE_DO_FUN( do_mpunnuisance );
DECLARE_DO_FUN( do_mpbodybag );
DECLARE_DO_FUN( do_mpmakeore );
DECLARE_DO_FUN( do_mpmakeitem );
DECLARE_DO_FUN( do_mpscatter );
DECLARE_DO_FUN( do_mpdelay );
DECLARE_DO_FUN( do_mpsellrand );
DECLARE_DO_FUN( do_mpsetquest );
DECLARE_DO_FUN( do_mpshowtalents);
DECLARE_DO_FUN( do_mpsound );
DECLARE_DO_FUN( do_mpsoundaround);
DECLARE_DO_FUN( do_mpsoundat );
DECLARE_DO_FUN( do_mpmusic );
DECLARE_DO_FUN( do_mpmusicaround);
DECLARE_DO_FUN( do_mpmusicat );
/*
* Spell functions.
* Defined in magic.c.
*/
DECLARE_SPELL_FUN( spell_null );
DECLARE_SPELL_FUN( spell_notfound );
DECLARE_SPELL_FUN( spell_blindness );
DECLARE_SPELL_FUN( spell_cure_blindness );
DECLARE_SPELL_FUN( spell_cure_poison );
DECLARE_SPELL_FUN( spell_curse );
DECLARE_SPELL_FUN( spell_pigeon );
DECLARE_SPELL_FUN( spell_poison );
DECLARE_SPELL_FUN( spell_remove_curse );
DECLARE_SPELL_FUN( spell_sleep );
DECLARE_SPELL_FUN( spell_smaug );
DECLARE_SPELL_FUN( spell_portal );
/*
* OS-dependent declarations.
* These are all very standard library functions,
* but some systems have incomplete or non-ansi header files.
*/
#if defined(_AIX)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(apollo)
int atoi args( ( const char *string ) );
void * calloc args( ( unsigned nelem, size_t size ) );
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(hpux)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(interactive)
#endif
#if defined(linux)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(MIPS_OS)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(NeXT)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(sequent)
char * crypt args( ( const char *key, const char *salt ) );
int fclose args( ( FILE *stream ) );
int fprintf args( ( FILE *stream, const char *format, ... ) );
int fread args( ( void *ptr, int size, int n, FILE *stream ) );
int fseek args( ( FILE *stream, long offset, int ptrname ) );
void perror args( ( const char *s ) );
int ungetc args( ( int c, FILE *stream ) );
#endif
#if defined(sun)
char * crypt args( ( const char *key, const char *salt ) );
int fclose args( ( FILE *stream ) );
int fprintf args( ( FILE *stream, const char *format, ... ) );
#if defined(SYSV)
size_t fread args( ( void *ptr, size_t size, size_t n,
FILE *stream ) );
#else
int fread args( ( void *ptr, int size, int n, FILE *stream ) );
#endif
int fseek args( ( FILE *stream, long offset, int ptrname ) );
void perror args( ( const char *s ) );
int ungetc args( ( int c, FILE *stream ) );
#endif
#if defined(ultrix)
char * crypt args( ( const char *key, const char *salt ) );
#endif
/*
* The crypt(3) function is not available on some operating systems.
* In particular, the U.S. Government prohibits its export from the
* United States to foreign countries.
*
* Turn on NOCRYPT to keep passwords in plain text.
*/
#if defined(NOCRYPT)
#define crypt(s1, s2) (s1)
#endif
/*
* Data files used by the server.
*
* AREA_LIST contains a list of areas to boot.
* All files are read in completely at bootup.
* Most output files (bug, idea, typo, shutdown) are append-only.
*
* The NULL_FILE is held open so that we have a stream handle in reserve,
* so players can go ahead and telnet to all the other descriptors.
* Then we close it whenever we need to open a file (e.g. a save file).
*/
#define PLAYER_DIR "../player/" /* Player files */
#define BACKUP_DIR "../backup/" /* Backup Player files */
#define GOD_DIR "../gods/" /* God Info Dir */
#define DEITY_DIR "../deity/" /* Deity data dir */
#define BUILD_DIR "../building/" /* Online building save dir */
#define SYSTEM_DIR "../system/" /* Main system files */
#define PROG_DIR "mudprogs/" /* MUDProg files */
#define CORPSE_DIR "../corpses/" /* Corpses */
#ifdef WIN32
#define NULL_FILE "nul" /* To reserve one stream */
#else
#define NULL_FILE "/dev/null" /* To reserve one stream */
#endif
#define CLAN_DIR "../clans/" /* Clan files -- Scion */
#define AREA_LIST "area.lst" /* List of areas */
#define BAN_LIST "ban.lst" /* List of bans */
#define RESERVED_LIST "reserved.lst" /* List of reserved names */
#define GOD_LIST "gods.lst" /* List of gods */
#define DEITY_LIST "deity.lst" /* List of deities */
#define RACE_LIST "race.lst" /* List of races */
#define CLAN_LIST "clan.lst" /* List of clans */
#define SHUTDOWN_FILE "shutdown.txt" /* For 'shutdown' */
#define OBJ_FILE "objects.dat" /* For storing objects across reboots */
#define MOB_FILE "mobs.dat" /* For storing mobs across reboots */
#define RIPSCREEN_FILE SYSTEM_DIR "mudrip.rip"
#define BOOTLOG_FILE SYSTEM_DIR "boot.txt" /* Boot up error file */
#define BUG_FILE SYSTEM_DIR "bugs.txt" /* For bug( ) */
#define PBUG_FILE SYSTEM_DIR "pbugs.txt" /* For 'bug' command */
#define IDEA_FILE SYSTEM_DIR "ideas.txt" /* For 'idea' */
#define TYPO_FILE SYSTEM_DIR "typos.txt" /* For 'typo' */
#define RP_FILE SYSTEM_DIR "rp.txt" /* For 'rp' */
#define LOG_FILE SYSTEM_DIR "log.txt" /* For talking in logged rooms */
#define MOBLOG_FILE SYSTEM_DIR "moblog.txt" /* For mplog messages */
#define WIZLIST_FILE SYSTEM_DIR "WIZLIST" /* Wizlist */
#define WHO_FILE SYSTEM_DIR "WHO" /* Who output file */
#define WEBWHO_FILE SYSTEM_DIR "WEBWHO" /* WWW Who output file */
#define REQUEST_PIPE SYSTEM_DIR "REQUESTS" /* Request FIFO */
#define SKILL_FILE SYSTEM_DIR "skills.dat" /* Skill table */
#define HERB_FILE SYSTEM_DIR "herbs.dat" /* Herb table */
#define TONGUE_FILE SYSTEM_DIR "tongues.dat" /* Tongue tables */
#define SOCIAL_FILE SYSTEM_DIR "socials.dat" /* Socials */
#define COMMAND_FILE SYSTEM_DIR "commands.dat" /* Commands */
#define HELP_FILE SYSTEM_DIR "help.dat" /* Help Files */
#define USAGE_FILE SYSTEM_DIR "usage.txt" /* How many people are on
every half hour - trying to
determine best reboot time */
#define ECONOMY_FILE SYSTEM_DIR "economy.txt" /* Gold looted, value of
used potions/pills */
#define RACEDIR "../races/"
#define COPYOVER_FILE SYSTEM_DIR "copyover.dat" /* for warm reboots */
#define EXE_FILE "../src/rmexe" /* executable path */
#define MATERIAL_FILE SYSTEM_DIR "materials.dat" /* for materials - Scion */
#define MATSHOP_FILE SYSTEM_DIR "matshops.dat"
#define MOON_FILE SYSTEM_DIR "moons.dat" /* for moons -keo */
#define RECIPE_FILE SYSTEM_DIR "recipes.dat"
#define INGRED_FILE SYSTEM_DIR "ingreds.dat"
#define SPECIES_FILE SYSTEM_DIR "species.dat"
#define NATION_FILE SYSTEM_DIR "nation.dat"
#define MUT_FILE SYSTEM_DIR "mutations.dat"
#define CITY_FILE SYSTEM_DIR "cities.dat"
#define CHANNEL_FILE SYSTEM_DIR "channels.dat"
#define ARENA_FILE SYSTEM_DIR "arenas.dat"
#define BOOK_FILE SYSTEM_DIR "book.dat"
/*
* 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 EDD EXTRA_DESCR_DATA
#define RD RESET_DATA
#define ED EXIT_DATA
#define ST SOCIALTYPE
#define DE DEITY_DATA
#define SK SKILLTYPE
#define PD PART_DATA
/* act_comm.c */
bool circle_follow args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void add_follower args( ( CHAR_DATA *ch, CHAR_DATA *master ) );
void stop_follower args( ( CHAR_DATA *ch ) );
void die_follower args( ( CHAR_DATA *ch ) );
bool is_same_group args( ( CHAR_DATA *ach, CHAR_DATA *bch ) );
void send_rip_screen args( ( CHAR_DATA *ch ) );
void to_channel args( ( const char *argument, const char *verb, sh_int level ) );
char * obj_short args( ( OBJ_DATA *obj ) );
void init_profanity_checker args( ( void ) );
void init_signals args( ( void ) );
void do_crashguard args( ( void ) );
void sig_handler args( ( int sig ) );
/* act_info.c */
int get_door args( ( char *arg ) );
char * format_obj_to_char args( ( OBJ_DATA *obj, CHAR_DATA *ch,
bool fShort ) );
void show_list_to_char args( ( OBJ_DATA *list, CHAR_DATA *ch,
bool fShort, bool fShowNothing ) );
bool is_ignoring args( (CHAR_DATA *ch, CHAR_DATA *ign_ch) );
void show_race_line args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
/* act_move.c */
void clear_vrooms args( ( void ) );
ED * find_door args( ( CHAR_DATA *ch, char *arg, bool quiet ) );
ED * get_exit args( ( ROOM_INDEX_DATA *room, sh_int dir ) );
ED * get_exit_to args( ( ROOM_INDEX_DATA *room, sh_int dir, int vnum ) );
ED * get_exit_num args( ( ROOM_INDEX_DATA *room, sh_int count ) );
ch_ret move_char args( ( CHAR_DATA *ch, EXIT_DATA *pexit, int fall ) );
sh_int encumbrance args( ( CHAR_DATA *ch, sh_int move ) );
bool will_fall args( ( CHAR_DATA *ch, int fall ) );
ch_ret pullcheck args( ( CHAR_DATA *ch, int pulse ) );
char * rev_exit args( ( sh_int vdir ) );
/* act_obj.c */
obj_ret damage_obj args( ( OBJ_DATA *obj ) );
sh_int get_obj_resistance args( ( OBJ_DATA *obj ) );
void obj_fall args( ( OBJ_DATA *obj, bool through ) );
/* act_wiz.c */
RID * find_location args( ( CHAR_DATA *ch, char *arg ) );
void echo_to_all args( ( sh_int AT_COLOR, char *argument,
sh_int tar ) );
void get_reboot_string args( ( void ) );
struct tm *update_time args( ( struct tm *old_time ) );
void free_social args( ( SOCIALTYPE *social ) );
void add_social args( ( SOCIALTYPE *social ) );
void free_command args( ( CMDTYPE *command ) );
void unlink_command args( ( CMDTYPE *command ) );
void add_command args( ( CMDTYPE *command ) );
/* birth.c */
bool check_rebirth args((CHAR_DATA *ch, int i));
/* build.c */
int get_cmdflag args (( char *flag ));
char * flag_string args( ( int bitvector, char * const flagarray[] ) );
char * ext_flag_string args( ( EXT_BV *bitvector, char * const flagarray[] ) );
int get_mpflag args( ( char *flag ) );
int get_dir args( ( char *txt ) );
char * strip_cr args( ( char *str ) );
char * strip_crn args( ( char *str ) );
char * strip_crns args( ( char *str ) );
/* deity.c */
DE * get_deity args( ( char *name ) );
void load_deity args( ( void ) );
void save_deity args( ( DEITY_DATA *deity ) );
/* comm.c */
char *color_align( char *argument, int size, int align );
const char *const_color_align( const char *argument, int size, int align );
int color_str_len( char *argument );
int const_color_str_len( const char *argument );
int color_strnlen( char *argument, int maxlength );
int const_color_strnlen( const char *argument, int maxlength );
void close_socket args( ( DESCRIPTOR_DATA *dclose, bool force ) );
void write_to_buffer args( ( DESCRIPTOR_DATA *d, const char *txt,
int length ) );
void write_to_pager args( ( DESCRIPTOR_DATA *d, const char *txt,
int length ) );
void send_to_char args( ( const char *txt, CHAR_DATA *ch ) );
void send_to_char_color args( ( const char *txt, CHAR_DATA *ch ) );
void send_to_pager args( ( const char *txt, CHAR_DATA *ch ) );
void send_to_pager_color args( ( const char *txt, CHAR_DATA *ch ) );
void set_char_color args( ( sh_int AType, CHAR_DATA *ch ) );
void set_pager_color args( ( sh_int AType, CHAR_DATA *ch ) );
void ch_printf args( ( CHAR_DATA *ch, char *fmt, ... ) );
void ch_printf_color args( ( CHAR_DATA *ch, char *fmt, ... ) );
void pager_printf args( (CHAR_DATA *ch, char *fmt, ...) );
void pager_printf_color args( ( CHAR_DATA *ch, char *fmt, ... ) );
void act args( ( sh_int AType, const char *format, CHAR_DATA *ch,
const void *arg1, const void *arg2, int type ) );
void log_printf args( (char *fmt, ...) );
void copyover_recover args( (void) );
char * myobj args( ( OBJ_DATA *obj ) );
char * themob args( ( CHAR_DATA *mob ) );
char * obj_short args( ( OBJ_DATA *obj ) );
/* reset.c */
RD * make_reset args( ( char letter, int extra, int arg1, int arg2, int arg3 ) );
RD * add_reset args( ( AREA_DATA *tarea, char letter, int extra, int arg1, int arg2, int arg3 ) );
RD * place_reset args( ( AREA_DATA *tarea, char letter, int extra, int arg1, int arg2, int arg3 ) );
void reset_area args( ( AREA_DATA * pArea ) );
/* db.c */
void show_file args( ( CHAR_DATA *ch, char *filename ) );
char * str_dup args( ( char const *str ) );
void boot_db args( ( void ) );
void area_update args( ( void ) );
void add_char args( ( CHAR_DATA *ch ) );
CD * create_mobile args( ( MOB_INDEX_DATA *pMobIndex ) );
OD * create_object args( ( OBJ_INDEX_DATA *pObjIndex, int level ) );
void clear_char args( ( CHAR_DATA *ch ) );
void free_char args( ( CHAR_DATA *ch ) );
char * get_extra_descr args( ( const char *name, EXTRA_DESCR_DATA *ed ) );
MID * get_mob_index args( ( int vnum ) );
OID * get_obj_index args( ( int vnum ) );
RID * get_room_index args( ( int vnum ) );
char fread_letter args( ( FILE *fp ) );
int fread_number args( ( FILE *fp ) );
EXT_BV fread_bitvector args( ( FILE *fp ) );
void fwrite_bitvector args( ( EXT_BV *bits, FILE *fp ) );
char * print_bitvector args( ( EXT_BV *bits ) );
char * fread_string args( ( FILE *fp ) );
char * fread_string_nohash args( ( FILE *fp ) );
void fread_to_eol args( ( FILE *fp ) );
char * fread_word args( ( FILE *fp ) );
char * fread_line args( ( FILE *fp ) );
int number_fuzzy args( ( int number ) );
int number_range args( ( int from, int to ) );
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 ) );
void smash_tilde args( ( char *str ) );
void hide_tilde args( ( char *str ) );
char * show_tilde args( ( char *str ) );
bool str_cmp args( ( const char *astr, const char *bstr ) );
bool str_prefix args( ( const char *astr, const char *bstr ) );
bool str_infix args( ( const char *astr, const char *bstr ) );
bool str_suffix args( ( const char *astr, const char *bstr ) );
char * capitalize args( ( const char *str ) );
char * strlower args( ( const char *str ) );
char * strupper args( ( const char *str ) );
char * aoran args( ( const char *str ) );
void append_file args( ( CHAR_DATA *ch, char *file, char *str ) );
void append_to_file args( ( char *file, char *str ) );
void bug args( ( const char *str, ... ) );
void log_string_plus args( ( const char *str, sh_int log_type, sh_int level ) );
RID * make_room args( ( int vnum ) );
OID * make_object args( ( int vnum, int cvnum, char *name ) );
MID * make_mobile args( ( int vnum, int cvnum, char *name ) );
ED * make_exit args( ( ROOM_INDEX_DATA *pRoomIndex, ROOM_INDEX_DATA *to_room, sh_int door ) );
void add_help args( ( HELP_DATA *pHelp ) );
void fix_area_exits args( ( AREA_DATA *tarea ) );
void load_area_file args( ( AREA_DATA *tarea, char *filename ) );
void randomize_exits args( ( ROOM_INDEX_DATA *room, sh_int maxdir ) );
void make_wizlist args( ( void ) );
void tail_chain args( ( void ) );
bool delete_room args( ( ROOM_INDEX_DATA *room ) );
bool delete_obj args( ( OBJ_INDEX_DATA *obj ) );
bool delete_mob args( ( MOB_INDEX_DATA *mob ) );
/* Functions to add to sorting lists. -- Altrag */
/*void mob_sort args( ( MOB_INDEX_DATA *pMob ) );
void obj_sort args( ( OBJ_INDEX_DATA *pObj ) );
void room_sort args( ( ROOM_INDEX_DATA *pRoom ) );*/
void sort_area args( ( AREA_DATA *pArea, bool proto ) );
void sort_area_by_name args( (AREA_DATA *pArea) ); /* Fireblade */
/* build.c */
void start_editing args( ( CHAR_DATA *ch, char *data ) );
void stop_editing args( ( CHAR_DATA *ch ) );
void edit_buffer args( ( CHAR_DATA *ch, char *argument ) );
char * copy_buffer args( ( CHAR_DATA *ch ) );
bool can_rmodify args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *room ) );
bool can_omodify args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool can_mmodify args( ( CHAR_DATA *ch, CHAR_DATA *mob ) );
bool can_medit args( ( CHAR_DATA *ch, MOB_INDEX_DATA *mob ) );
void free_reset args( ( AREA_DATA *are, RESET_DATA *res ) );
void free_area args( ( AREA_DATA *are ) );
void assign_area args( ( CHAR_DATA *ch ) );
EDD * SetRExtra args( ( ROOM_INDEX_DATA *room, char *keywords ) );
bool DelRExtra args( ( ROOM_INDEX_DATA *room, char *keywords ) );
EDD * SetOExtra args( ( OBJ_DATA *obj, char *keywords ) );
bool DelOExtra args( ( OBJ_DATA *obj, char *keywords ) );
EDD * SetOExtraProto args( ( OBJ_INDEX_DATA *obj, char *keywords ) );
bool DelOExtraProto args( ( OBJ_INDEX_DATA *obj, char *keywords ) );
void fold_area args( ( AREA_DATA *tarea, char *filename, bool install ) );
int get_otype args( ( char *type ) );
int get_atype args( ( char *type ) );
int get_aflag args( ( char *flag ) );
int get_oflag args( ( char *flag ) );
int get_wflag args( ( char *flag ) );
void init_area_weather args(( void ) );
void save_weatherdata args( ( void ) );
/* bodyparts.c */
void hurt_part args( ( CHAR_DATA *ch, PART_DATA *part, int dam ));
void check_bodyparts args( ( CHAR_DATA *ch ) );
PD * find_bodypart args( ( CHAR_DATA *ch, int loc ) );
bool has_bodypart args( ( CHAR_DATA *ch, int loc ) );
bool can_use_bodypart args(( CHAR_DATA *ch, int loc ) );
OD * outer_layer args( ( PART_DATA *part ) );
char * hands args( ( CHAR_DATA *ch ) );
int find_part_name args( ( char *argument ) );
void show_equip args( ( CHAR_DATA *ch, CHAR_DATA *to ) );
void obj_affect_ch args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
void obj_unaffect_ch args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool equip_char args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
void unequip_char args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
void break_part args( ( CHAR_DATA *ch, PART_DATA *part ) );
/* combat.c */
void die args( ( CHAR_DATA *ch ) );
void uncon args( ( CHAR_DATA *ch ) );
void gain_exp args( ( CHAR_DATA *ch, int gain ) );
bool lose_hp args( ( CHAR_DATA *ch, int amt ) );
bool lose_ep args( ( CHAR_DATA *ch, int amt ) );
void check_hit args( ( CHAR_DATA *ch, CHAR_DATA *victim, int part, int dam, int type));
void mob_attack args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
OD * get_weapon args( ( CHAR_DATA *ch, int skill) );
bool direct_damage args( ( CHAR_DATA *ch, int amt) );
void pain args( ( CHAR_DATA *ch, int dam) );
void stop_fighting args( ( CHAR_DATA *ch, bool fBoth) );
/* fight.c */
int max_fight args( ( CHAR_DATA *ch ) );
void violence_update args( ( void ) );
ch_ret multi_hit args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt ) );
ch_ret projectile_hit args( ( CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *wield,
OBJ_DATA *projectile, sh_int dist ) );
sh_int ris_damage args( ( CHAR_DATA *ch, sh_int dam, int ris ) );
ch_ret damage args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam,
int dt ) );
void update_pos args( ( CHAR_DATA *victim ) );
void death_cry args( ( CHAR_DATA *ch ) );
void stop_hunting args( ( CHAR_DATA *ch ) );
void stop_hating args( ( CHAR_DATA *ch ) );
void stop_fearing args( ( CHAR_DATA *ch ) );
void start_hunting args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void start_hating args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void start_fearing args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool is_hunting args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool is_hating args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool is_fearing args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool is_safe args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool legal_loot args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
sh_int VAMP_AC args( ( CHAR_DATA *ch ) );
bool check_illegal_pk args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void raw_kill args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool can_astral args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
/* makeobjs.c */
CD * generate_mob_nation args( ( char *argument ) );
CD * generate_mob args( ( NATION_DATA *nation ) );
void mob_to_area args( ( CHAR_DATA *mob, AREA_DATA *tarea ) );
void make_corpse args( ( CHAR_DATA *ch ) );
void make_blood args( ( CHAR_DATA *ch, int amt ) );
void make_bloodstain args( ( CHAR_DATA *ch ) );
void make_scraps args( ( OBJ_DATA *obj ) );
void make_fire args( ( ROOM_INDEX_DATA *in_room, sh_int timer) );
OD * make_trap args( ( int v0, int v1, int v2, int v3 ) );
OD * create_money args( ( int amount ) );
/* misc.c */
void actiondesc args( ( CHAR_DATA *ch, OBJ_DATA *obj, void *vo ) );
EXT_BV meb args( ( int bit ) );
EXT_BV multimeb args( ( int bit, ... ) );
/* mud_comm.c */
char * mprog_type_to_name args( ( int type ) );
/* mud_prog.c */
#ifdef DUNNO_STRSTR
char * strstr args ( (const char *s1, const char *s2 ) );
#endif
void mprog_wordlist_check args ( ( char * arg, CHAR_DATA *mob,
CHAR_DATA* actor, OBJ_DATA* object,
void* vo, int type ) );
void mprog_percent_check args ( ( CHAR_DATA *mob, CHAR_DATA* actor,
OBJ_DATA* object, void* vo,
int type ) );
void mprog_act_trigger args ( ( char* buf, CHAR_DATA* mob,
CHAR_DATA* ch, OBJ_DATA* obj,
void* vo ) );
void mprog_bribe_trigger args ( ( CHAR_DATA* mob, CHAR_DATA* ch,
int amount ) );
void mprog_entry_trigger args ( ( CHAR_DATA* mob ) );
void mprog_give_trigger args ( ( CHAR_DATA* mob, CHAR_DATA* ch,
OBJ_DATA* obj ) );
void mprog_greet_trigger args ( ( CHAR_DATA* mob ) );
void mprog_fight_trigger args ( ( CHAR_DATA* mob, CHAR_DATA* ch ) );
void mprog_hitprcnt_trigger args ( ( CHAR_DATA* mob, CHAR_DATA* ch ) );
void mprog_death_trigger args ( ( CHAR_DATA *killer, CHAR_DATA* mob ) );
void mprog_random_trigger args ( ( CHAR_DATA* mob ) );
void mprog_speech_trigger args ( ( char* txt, CHAR_DATA* mob ) );
void mprog_script_trigger args ( ( CHAR_DATA *mob ) );
void mprog_hour_trigger args ( ( CHAR_DATA *mob ) );
void mprog_time_trigger args ( ( CHAR_DATA *mob ) );
void progbug args( ( char *str, CHAR_DATA *mob ) );
void rset_supermob args( ( ROOM_INDEX_DATA *room) );
void release_supermob args( ( ) );
/* player.c */
void set_title args( ( CHAR_DATA *ch, char *title ) );
bool add_mutation args( ( CHAR_DATA *ch, int i ) );
int get_height_weight args((CHAR_DATA *ch) );
/* skills.c */
int learned args((CHAR_DATA *ch, int sn));
bool skill_available args((CHAR_DATA *ch, int sn));
int get_best_talent args((CHAR_DATA *ch, int sn));
int get_adept args((CHAR_DATA *ch, int sn));
bool can_use_skill args( ( CHAR_DATA *ch, int percent, int gsn));
bool check_skill args( ( CHAR_DATA *ch, char *command, char *argument ) );
void learn_from_success args( ( CHAR_DATA *ch, int sn ) );
void learn_from_failure args( ( CHAR_DATA *ch, int sn ) );
bool check_shieldwork args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool check_parry args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool check_dodge args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool check_tumble args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool check_grip args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void disarm args( ( CHAR_DATA *ch, CHAR_DATA *victim) );
void trip args( ( CHAR_DATA *ch, CHAR_DATA *victim) );
bool mob_fire args( ( CHAR_DATA *ch, char *name ) );
CD * scan_for_victim args( ( CHAR_DATA *ch, EXIT_DATA *pexit,
char *name ) );
/* ban.c */
int add_ban args( ( CHAR_DATA *ch, char *arg1, int time ) );
void show_bans args ( ( CHAR_DATA *ch ) );
void save_banlist args ( ( void ) );
void load_banlist args ( ( void ) );
bool check_total_bans args ( ( DESCRIPTOR_DATA *d ) );
bool check_bans args ( ( CHAR_DATA *ch ) );
bool check_multi args ( ( CHAR_DATA *ch ) );
/* handler.c */
void huh args( ( CHAR_DATA *ch ) );
DEITY_DATA *get_talent_by_index( int index ); /* Scion */
int get_char_worth args((CHAR_DATA *ch)); /* Scion */
int get_light_char args((CHAR_DATA *ch)); /* Scion */
int get_light_room args((ROOM_INDEX_DATA *room)); /* Scion */
int get_exp args( ( CHAR_DATA *ch ) );
int get_exp_worth args( ( CHAR_DATA *ch ) );
int exp_level args( ( CHAR_DATA *ch, sh_int level ) );
int talent_exp args( ( CHAR_DATA *ch, sh_int level, int tal ) );
int level_exp args( ( CHAR_DATA *ch, int exp ) );
sh_int get_trust args( ( CHAR_DATA *ch ) );
sh_int get_curr_str args( ( CHAR_DATA *ch ) );
sh_int get_curr_int args( ( CHAR_DATA *ch ) );
sh_int get_curr_wis args( ( CHAR_DATA *ch ) );
sh_int get_curr_wil args( ( CHAR_DATA *ch ) );
sh_int get_curr_dex args( ( CHAR_DATA *ch ) );
sh_int get_curr_con args( ( CHAR_DATA *ch ) );
sh_int get_curr_cha args( ( CHAR_DATA *ch ) );
sh_int get_curr_per args( ( CHAR_DATA *ch ) );
sh_int get_curr_lck args( ( CHAR_DATA *ch ) );
sh_int get_curr_end args( ( CHAR_DATA *ch ) );
bool can_take_proto args( ( CHAR_DATA *ch ) );
int can_carry_n args( ( CHAR_DATA *ch ) );
int can_carry_w args( ( CHAR_DATA *ch ) );
bool is_name args( ( const char *str, char *namelist ) );
bool is_name_prefix args( ( const char *str, char *namelist ) );
bool nifty_is_name args( ( char *str, char *namelist ) );
bool nifty_is_name_prefix args( ( char *str, char *namelist ) );
void affect_modify args( ( CHAR_DATA *ch, AFFECT_DATA *paf, bool fAdd ) );
void affect_to_char args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void affect_remove args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void affect_strip args( ( CHAR_DATA *ch, int sn ) );
bool is_affected args( ( CHAR_DATA *ch, int sn ) );
void affect_join args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void obj_affect_join(OBJ_DATA *obj, AFFECT_DATA *paf); /* Scion */
void char_from_room args( ( CHAR_DATA *ch ) );
void char_to_room args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex ) );
OD * obj_to_char args( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void obj_from_char args( ( OBJ_DATA *obj ) );
int apply_ac args( ( OBJ_DATA *obj, int iWear ) );
OD * get_eq_char args( ( CHAR_DATA *ch, int iWear ) );
int count_obj_list args( ( OBJ_INDEX_DATA *obj, OBJ_DATA *list ) );
void obj_from_room args( ( OBJ_DATA *obj ) );
OD * obj_to_room args( ( OBJ_DATA *obj, ROOM_INDEX_DATA *pRoomIndex ) );
OD * obj_to_obj args( ( OBJ_DATA *obj, OBJ_DATA *obj_to ) );
void obj_from_obj args( ( OBJ_DATA *obj ) );
void extract_obj args( ( OBJ_DATA *obj ) );
void extract_exit args( ( ROOM_INDEX_DATA *room, EXIT_DATA *pexit ) );
void extract_room args( ( ROOM_INDEX_DATA *room ) );
void clean_room args( ( ROOM_INDEX_DATA *room ) );
void clean_obj args( ( OBJ_INDEX_DATA *obj ) );
void clean_mob args( ( MOB_INDEX_DATA *mob ) );
void clean_resets args( ( AREA_DATA *tarea ) );
void extract_char args( ( CHAR_DATA *ch, bool fPull ) );
char * fur_pos_string args( ( int pos ) ); /* furniture */
char * pos_string args( (CHAR_DATA *victim) ); /* furniture */
int count_users args( ( OBJ_DATA *obj ) ); /* furniture */
CD * get_char_room args( ( CHAR_DATA *ch, char *argument ) );
CD * get_char_world args( ( CHAR_DATA *ch, char *argument ) );
OD * get_obj_type args( ( OBJ_INDEX_DATA *pObjIndexData ) );
OD * get_obj_list args( ( CHAR_DATA *ch, char *argument,
OBJ_DATA *list ) );
OD * get_obj_list_rev args( ( CHAR_DATA *ch, char *argument,
OBJ_DATA *list ) );
OD * get_obj_carry args( ( CHAR_DATA *ch, char *argument ) );
OD * get_obj_wear args( ( CHAR_DATA *ch, char *argument ) );
OD * get_obj_vnum args( ( CHAR_DATA *ch, int vnum ) );
OD * get_obj_here args( ( CHAR_DATA *ch, char *argument ) );
OD * get_obj_world args( ( CHAR_DATA *ch, char *argument ) );
int get_obj_number args( ( OBJ_DATA *obj ) );
int get_obj_weight args( ( OBJ_DATA *obj ) );
int get_real_obj_weight args( ( OBJ_DATA *obj ) );
bool room_is_dark args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool room_is_private args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool can_see args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool can_see_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool can_drop_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
char * item_type_name args( ( OBJ_DATA *obj ) );
char * affect_loc_name args( ( int location ) );
char * affect_bit_name args( ( EXT_BV *vector ) );
char * extra_bit_name args( ( EXT_BV *extra_flags ) );
char * pull_type_name args( ( int pulltype ) );
ch_ret check_for_trap args( ( CHAR_DATA *ch, OBJ_DATA *obj, int flag ) );
ch_ret check_room_for_traps args( ( CHAR_DATA *ch, int flag ) );
bool is_trapped args( ( OBJ_DATA *obj ) );
OD * get_trap args( ( OBJ_DATA *obj ) );
ch_ret spring_trap args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
void throw_rider args( ( CHAR_DATA *ch) );
void dump_passenger args( (OBJ_DATA *obj) );
void dump_container args( (OBJ_DATA *obj) );
void fix_char args( ( CHAR_DATA *ch ) );
void showaffect args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void set_cur_obj args( ( OBJ_DATA *obj ) );
bool obj_extracted args( ( OBJ_DATA *obj ) );
void queue_extracted_obj args( ( OBJ_DATA *obj ) );
void clean_obj_queue args( ( void ) );
void set_cur_char args( ( CHAR_DATA *ch ) );
bool char_died args( ( CHAR_DATA *ch ) );
void queue_extracted_char args( ( CHAR_DATA *ch, bool extract ) );
void clean_char_queue args( ( void ) );
void add_timer args( ( CHAR_DATA *ch, sh_int type, sh_int count, DO_FUN *fun, int value ) );
TIMER * get_timerptr args( ( CHAR_DATA *ch, sh_int type ) );
sh_int get_timer args( ( CHAR_DATA *ch, sh_int type ) );
void extract_timer args( ( CHAR_DATA *ch, TIMER *timer ) );
void remove_timer args( ( CHAR_DATA *ch, sh_int type ) );
bool in_hard_range args( ( CHAR_DATA *ch, AREA_DATA *tarea ) );
bool chance args( ( CHAR_DATA *ch, sh_int percent ) );
bool chance_attrib args( ( CHAR_DATA *ch, sh_int percent, sh_int attrib ) );
OD * clone_object args( ( OBJ_DATA *obj ) );
void split_obj args( ( OBJ_DATA *obj, int num ) );
void separate_obj args( ( OBJ_DATA *obj ) );
bool empty_obj args( ( OBJ_DATA *obj, OBJ_DATA *destobj,
ROOM_INDEX_DATA *destroom ) );
OD * find_obj args( ( CHAR_DATA *ch, char *argument,
bool carryonly ) );
bool ms_find_obj args( ( CHAR_DATA *ch ) );
void worsen_mental_state args( ( CHAR_DATA *ch, int mod ) );
void better_mental_state args( ( CHAR_DATA *ch, int mod ) );
void boost_economy args( ( AREA_DATA *tarea, int gold ) );
void lower_economy args( ( AREA_DATA *tarea, int gold ) );
void economize_mobgold args( ( CHAR_DATA *mob ) );
bool economy_has args( ( AREA_DATA *tarea, int gold ) );
void add_kill args( ( CHAR_DATA *ch, CHAR_DATA *mob ) );
int times_killed args( ( CHAR_DATA *ch, CHAR_DATA *mob ) );
void update_aris args( ( CHAR_DATA *ch) );
AREA_DATA *get_area args( ( char *name ) ); /* FB */
OD * get_objtype args( ( CHAR_DATA *ch, sh_int type ) );
void learn_weapon args( (CHAR_DATA *ch, int i) );
void learn_noncombat args( (CHAR_DATA *ch, int i) );
NATION_DATA *find_nation args( (char *name) );
/* hiscore.c */
void adjust_hiscore args( (char *argument, CHAR_DATA *ch, int i) );
bool add_hiscore args( (char *keyword, char *name, int score) );
void load_hiscores args( ( void ) );
/* interp.c */
bool check_pos args( ( CHAR_DATA *ch, sh_int position ) );
void interpret args( ( CHAR_DATA *ch, char *argument, bool forced ) );
bool is_number args( ( char *arg ) );
int number_argument args( ( char *argument, char *arg ) );
char * one_argument args( ( char *argument, char *arg_first ) );
char * one_argument2 args( ( char *argument, char *arg_first ) );
char * one_argument_retain_case args((char *argument, char *arg_first));
ST * find_social args( ( char *command ) );
CMDTYPE *find_command args( ( char *command ) );
void hash_commands args( ( ) );
void start_timer args( ( struct timeval *stime ) );
time_t end_timer args( ( struct timeval *stime ) );
void send_timer args( ( struct timerset *vtime, CHAR_DATA *ch ) );
void update_userec args( ( struct timeval *time_used,
struct timerset *userec ) );
/* magic.c */
bool process_spell_components args( ( CHAR_DATA *ch, int sn ) );
int ch_slookup args( ( CHAR_DATA *ch, const char *name ) );
int find_spell args( ( CHAR_DATA *ch, const char *name, bool know ) );
int find_skill args( ( CHAR_DATA *ch, const char *name, bool know ) );
int skill_lookup args( ( const char *name ) );
int herb_lookup args( ( const char *name ) );
int slot_lookup args( ( int slot ) );
int bsearch_skill args( ( const char *name, int first, int top ) );
int bsearch_skill_exact args( ( const char *name, int first, int top ) );
int bsearch_skill_prefix args( ( const char *name, int first, int top ) );
ch_ret obj_cast_spell args( ( int sn, int level, CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *obj ) );
int dice_parse args( (CHAR_DATA *ch, char *exp) );
SK * get_skilltype args( ( int sn ) );
bool check_manastorm args( ( CHAR_DATA *ch ) );
/* namegen.c */
char *random_name args( ( char *word, int lang ) );
/* talent.c */
CD *find_target args((CHAR_DATA *ch, char *argument, bool offense));
bool check_displacement args( ( CHAR_DATA *ch, CHAR_DATA *victim ));
bool check_blur args( ( CHAR_DATA *ch, CHAR_DATA *victim ));
bool check_antimagic args( ( CHAR_DATA *ch, CHAR_DATA *victim ));
void learn_talent args( ( CHAR_DATA *ch, int tal ));
void mana_from_char args( ( CHAR_DATA *ch, int mana ));
void use_magic args( ( CHAR_DATA *ch, int tal, int mana));
void magic_damage args( ( CHAR_DATA *victim, CHAR_DATA *ch, int dam, int type, int tal, bool dont_wait) );
/* request.c */
void init_request_pipe args( ( void ) );
void check_requests args( ( void ) );
/* save.c */
/* object saving defines for fread/write_obj. -- Altrag */
#define OS_CARRY 0
#define OS_GEM 1
#define OS_GROUND 2
int get_obj_room_vnum_recursive(OBJ_DATA *obj);
void save_char_obj args( ( CHAR_DATA *ch ) );
bool load_char_obj args( ( DESCRIPTOR_DATA *d, char *name, bool preload ) );
void set_alarm args( ( long seconds ) );
void requip_char args( ( CHAR_DATA *ch ) );
void fwrite_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj, FILE *fp,
int iNest, sh_int os_type ) );
void fread_obj args( ( CHAR_DATA *ch, FILE *fp, sh_int os_type ) );
void de_equip_char args( ( CHAR_DATA *ch ) );
void re_equip_char args( ( CHAR_DATA *ch ) );
void read_char_mobile args( ( char *argument ) );
void write_char_mobile args( ( CHAR_DATA *ch, char *argument ) );
CHAR_DATA * fread_mobile args( ( FILE *fp ) );
void fwrite_mobile args ( ( FILE *fp, CHAR_DATA *mob ) );
/* special.c */
SF * spec_lookup args( ( const char *name ) );
char * lookup_spec args( ( SPEC_FUN *special ) );
/* tables.c */
int get_skill args( ( char *skilltype ) );
char * spell_name args( ( SPELL_FUN *spell ) );
char * skill_name args( ( DO_FUN *skill ) );
void load_skill_table args( ( void ) );
void save_skill_table args( ( void ) );
void sort_skill_table args( ( void ) );
void remap_slot_numbers args( ( void ) );
void load_socials args( ( void ) );
void save_socials args( ( void ) );
void load_commands args( ( void ) );
void save_commands args( ( void ) );
SPELL_FUN *spell_function args( ( char *name ) );
DO_FUN *skill_function args( ( char *name ) );
void write_clan_file args( ( CLAN_DATA *clan, char filename[MAX_INPUT_LENGTH] ) );
void save_clans args( ( void ) );
void load_clans args( ( void ) );
void load_herb_table args( ( void ) );
void save_herb_table args( ( void ) );
void load_tongues args( ( void ) );
void save_bits(void);
void load_bits(void);
/* track.c */
void found_prey args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void hunt_victim args( ( CHAR_DATA *ch) );
/* update.c */
void gain_condition args( ( CHAR_DATA *ch, int iCond, int value ) );
bool climate_affect args( ( CHAR_DATA *ch, int type ) );
void update_handler args( ( void ) );
void reboot_check args( ( time_t reset ) );
#if 0
void reboot_check args( ( char *arg ) );
#endif
void remove_portal args( ( OBJ_DATA *portal ) );
void weather_update args( ( void ) );
/* hashstr.c */
char * str_alloc args( ( char *str ) );
char * quick_link args( ( char *str ) );
int str_free args( ( char *str ) );
void show_hash args( ( int count ) );
char * hash_stats args( ( void ) );
char * check_hash args( ( char *str ) );
void hash_dump args( ( int hash ) );
void show_high_hash args( ( int top ) );
/* newscore.c */
char * get_race args( (CHAR_DATA *ch) );
/* bits.c */
BIT_DATA *find_abit(int number);
BIT_DATA *find_qbit(int number);
BIT_DATA *get_abit(CHAR_DATA *ch, int number);
BIT_DATA *get_qbit(CHAR_DATA *ch, int number);
void load_bits(void);
void save_bits(void);
void set_abit(CHAR_DATA *ch, int number);
void set_qbit(CHAR_DATA *ch, int number);
void remove_abit(CHAR_DATA *ch, int number);
void remove_qbit(CHAR_DATA *ch, int number);
void do_showabit(CHAR_DATA *ch, char *argument);
void do_showqbit(CHAR_DATA *ch, char *argument);
/* makezone.c */
int makezone(CHAR_DATA *ch, char note[MAX_STRING_LENGTH]);
//void spell_parse(CHAR_DATA *ch, char *argument);
#undef SK
#undef CO
#undef ST
#undef CD
#undef MID
#undef OD
#undef OID
#undef RID
#undef SF
#undef BD
#undef CL
#undef EDD
#undef RD
#undef ED
/*
*
* New Build Interface Stuff Follows
*
*/
/*
* Data for a menu page
*/
struct menu_data
{
char *sectionNum;
char *charChoice;
int x;
int y;
char *outFormat;
void *data;
int ptrType;
int cmdArgs;
char *cmdString;
};
DECLARE_DO_FUN( do_redraw_page );
DECLARE_DO_FUN( do_refresh_page );
DECLARE_DO_FUN( do_pagelen );
DECLARE_DO_FUN( do_omenu );
DECLARE_DO_FUN( do_rmenu );
DECLARE_DO_FUN( do_mmenu );
DECLARE_DO_FUN( do_clear );
extern MENU_DATA room_page_a_data[];
extern MENU_DATA room_page_b_data[];
extern MENU_DATA room_page_c_data[];
extern MENU_DATA room_help_page_data[];
extern MENU_DATA mob_page_a_data[];
extern MENU_DATA mob_page_b_data[];
extern MENU_DATA mob_page_c_data[];
extern MENU_DATA mob_page_d_data[];
extern MENU_DATA mob_page_e_data[];
extern MENU_DATA mob_page_f_data[];
extern MENU_DATA mob_help_page_data[];
extern MENU_DATA obj_page_a_data[];
extern MENU_DATA obj_page_b_data[];
extern MENU_DATA obj_page_c_data[];
extern MENU_DATA obj_page_d_data[];
extern MENU_DATA obj_page_e_data[];
extern MENU_DATA obj_help_page_data[];
extern MENU_DATA control_page_a_data[];
extern MENU_DATA control_help_page_data[];
extern const char room_page_a[];
extern const char room_page_b[];
extern const char room_page_c[];
extern const char room_help_page[];
extern const char obj_page_a[];
extern const char obj_page_b[];
extern const char obj_page_c[];
extern const char obj_page_d[];
extern const char obj_page_e[];
extern const char obj_help_page[];
extern const char mob_page_a[];
extern const char mob_page_b[];
extern const char mob_page_c[];
extern const char mob_page_d[];
extern const char mob_page_e[];
extern const char mob_page_f[];
extern const char mob_help_page[];
extern const char * npc_sex[3];
extern const char * ris_strings[];
extern const char control_page_a[];
extern const char control_help_page[];
#define SH_INT 1
#define INT 2
#define CHAR 3
#define STRING 4
#define SPECIAL 5
#define NO_PAGE 0
#define MOB_PAGE_A 1
#define MOB_PAGE_B 2
#define MOB_PAGE_C 3
#define MOB_PAGE_D 4
#define MOB_PAGE_E 5
#define MOB_PAGE_F 17
#define MOB_HELP_PAGE 14
#define ROOM_PAGE_A 6
#define ROOM_PAGE_B 7
#define ROOM_PAGE_C 8
#define ROOM_HELP_PAGE 15
#define OBJ_PAGE_A 9
#define OBJ_PAGE_B 10
#define OBJ_PAGE_C 11
#define OBJ_PAGE_D 12
#define OBJ_PAGE_E 13
#define OBJ_HELP_PAGE 16
#define CONTROL_PAGE_A 18
#define CONTROL_HELP_PAGE 19
#define NO_TYPE 0
#define MOB_TYPE 1
#define OBJ_TYPE 2
#define ROOM_TYPE 3
#define CONTROL_TYPE 4
#define SUB_NORTH DIR_NORTH
#define SUB_EAST DIR_EAST
#define SUB_SOUTH DIR_SOUTH
#define SUB_WEST DIR_WEST
#define SUB_UP DIR_UP
#define SUB_DOWN DIR_DOWN
#define SUB_NE DIR_NORTHEAST
#define SUB_NW DIR_NORTHWEST
#define SUB_SE DIR_SOUTHEAST
#define SUB_SW DIR_SOUTHWEST
/*
* defines for use with this get_affect function
*/
#define RIS_000 BV00
#define RIS_R00 BV01
#define RIS_0I0 BV02
#define RIS_RI0 BV03
#define RIS_00S BV04
#define RIS_R0S BV05
#define RIS_0IS BV06
#define RIS_RIS BV07
#define GA_AFFECTED BV09
#define GA_RESISTANT BV10
#define GA_IMMUNE BV11
#define GA_SUSCEPTIBLE BV12
#define GA_RIS BV30
/* furniture flags */
#define STAND_AT BV00
#define STAND_ON BV01
#define STAND_IN BV02
#define SIT_AT BV03
#define SIT_ON BV04
#define SIT_IN BV05
#define REST_AT BV06
#define REST_ON BV07
#define REST_IN BV08
#define SLEEP_AT BV09
#define SLEEP_ON BV10
#define SLEEP_IN BV11
#define PUT_AT BV12
#define PUT_ON BV13
#define PUT_IN BV14
#define PUT_INSIDE BV15
#define FURNITURE_UNUSED -1
#define FURNITURE_NONE 0
#define ST_AT BV00 /* Stand at */
#define ST_ON BV01 /* Stand on */
#define ST_IN BV02 /* Stand in */
#define SI_AT BV03 /* Sit at */
#define SI_ON BV04 /* Sit on */
#define SI_IN BV05 /* Sit in */
#define RE_AT BV06 /* Rest at */
#define RE_ON BV07 /* Rest on */
#define RE_IN BV08 /* Rest in */
#define SL_AT BV09 /* Sleep at */
#define SL_ON BV10 /* Sleep on */
#define SL_IN BV11 /* Sleep in */
#define PT_AT BV12 /* Put at */
#define PT_ON BV13 /* Put on */
#define PT_IN BV14 /* Put in */
#define PT_INSIDE BV15 /* Put inside */
/* New spell sys, globally available function prototypes -- Scion */
void start_spell(CHAR_DATA *ch);
SPELL_DATA *get_spell(CHAR_DATA *ch);
void add_command_spell(CHAR_DATA *ch, char *cmd);
/*
* Map Structures
*/
/*DECLARE_DO_FUN( do_mapout );
DECLARE_DO_FUN( do_lookmap );
*/
//struct map_data /* contains per-room data */
//{
// int vnum; /* which map this room belongs to */
// int x; /* horizontal coordinate */
// int y; /* vertical coordinate */
// char entry; /* code that shows up on map */
//};
//struct map_index_data
//{
// MAP_INDEX_DATA *next;
// int vnum; /* vnum of the map */
// int map_of_vnums[49][81]; /* room vnums aranged as a map */
//};
//MAP_INDEX_DATA *get_map_index(int vnum);
//void init_maps();
/*
* mudprograms stuff
*/
extern CHAR_DATA *supermob;
void oprog_speech_trigger( char *txt, CHAR_DATA *ch );
void oprog_random_trigger( OBJ_DATA *obj );
void oprog_wear_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
bool oprog_use_trigger( CHAR_DATA *ch, OBJ_DATA *obj,
CHAR_DATA *vict, OBJ_DATA *targ, void *vo );
void oprog_remove_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_sac_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_damage_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_drop_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_zap_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
char *oprog_type_to_name( int type );
/*
* MUD_PROGS START HERE
* (object stuff)
*/
void oprog_greet_trigger( CHAR_DATA *ch );
void oprog_speech_trigger( char *txt, CHAR_DATA *ch );
void oprog_random_trigger( OBJ_DATA *obj );
void oprog_random_trigger( OBJ_DATA *obj );
void oprog_remove_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_sac_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_get_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_damage_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_drop_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_examine_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_zap_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_pull_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
void oprog_push_trigger( CHAR_DATA *ch, OBJ_DATA *obj );
/* mud prog defines */
#define ERROR_PROG -1
#define IN_FILE_PROG -2
typedef enum
{
ACT_PROG, SPEECH_PROG, RAND_PROG, FIGHT_PROG, DEATH_PROG, HITPRCNT_PROG,
ENTRY_PROG, GREET_PROG, ALL_GREET_PROG, GIVE_PROG, BRIBE_PROG, HOUR_PROG,
TIME_PROG, WEAR_PROG, REMOVE_PROG, SAC_PROG, LOOK_PROG, EXA_PROG, ZAP_PROG,
GET_PROG, DROP_PROG, DAMAGE_PROG, REPAIR_PROG, RANDIW_PROG, SPEECHIW_PROG,
PULL_PROG, PUSH_PROG, SLEEP_PROG, REST_PROG, LEAVE_PROG, SCRIPT_PROG,
USE_PROG
} prog_types;
/*
* For backwards compatability
*/
#define RDEATH_PROG DEATH_PROG
#define ENTER_PROG ENTRY_PROG
#define RFIGHT_PROG FIGHT_PROG
#define RGREET_PROG GREET_PROG
#define OGREET_PROG GREET_PROG
void rprog_leave_trigger( CHAR_DATA *ch );
void rprog_enter_trigger( CHAR_DATA *ch );
void rprog_sleep_trigger( CHAR_DATA *ch );
void rprog_rest_trigger( CHAR_DATA *ch );
void rprog_rfight_trigger( CHAR_DATA *ch );
void rprog_death_trigger( CHAR_DATA *killer, CHAR_DATA *ch );
void rprog_speech_trigger( char *txt, CHAR_DATA *ch );
void rprog_random_trigger( CHAR_DATA *ch );
void rprog_time_trigger( CHAR_DATA *ch );
void rprog_hour_trigger( CHAR_DATA *ch );
char *rprog_type_to_name( int type );
#define OPROG_ACT_TRIGGER
#ifdef OPROG_ACT_TRIGGER
void oprog_act_trigger( char *buf, OBJ_DATA *mobj, CHAR_DATA *ch,
OBJ_DATA *obj, void *vo );
#endif
#define RPROG_ACT_TRIGGER
#ifdef RPROG_ACT_TRIGGER
void rprog_act_trigger( char *buf, ROOM_INDEX_DATA *room, CHAR_DATA *ch,
OBJ_DATA *obj, void *vo );
#endif
#define GET_ADEPT(ch, sn) (get_adept((ch), (sn)))
#define LEARNED(ch,sn) (learned((ch), (sn)))
/* Structure and macros for using long bit vectors */
#define CHAR_SIZE sizeof(char)
typedef char * LONG_VECTOR;
#define LV_CREATE(vector, bit_length) \
do \
{ \
int i; \
CREATE(vector, char, 1 + bit_length/CHAR_SIZE); \
\
for(i = 0; i <= bit_length/CHAR_SIZE; i++) \
*(vector + i) = 0; \
}while(0)
#define LV_IS_SET(vector, index) \
(*(vector + index/CHAR_SIZE) & (1 << index%CHAR_SIZE))
#define LV_SET_BIT(vector, index) \
(*(vector + index/CHAR_SIZE) |= (1 << index%CHAR_SIZE))
#define LV_REMOVE_BIT(vector, index) \
(*(vector + index/CHAR_SIZE) &= ~(1 << index%CHAR_SIZE))
#define LV_TOGGLE_BIT(vector, index) \
(*(vector + index/CHAR_SIZE) ^= (1 << index%CHAR_SIZE))
#ifdef WIN32
void gettimeofday(struct timeval *tv, struct timezone *tz);
void kill_timer();
/* directory scanning stuff */
typedef struct dirent
{
char * d_name;
};
typedef struct
{
HANDLE hDirectory;
WIN32_FIND_DATA Win32FindData;
struct dirent dirinfo;
char sDirName[MAX_PATH];
} DIR;
DIR *opendir(char * sDirName);
struct dirent *readdir (DIR * dp);
void closedir(DIR * dp);
/* --------------- Stuff for Win32 services ------------------ */
/*
NJG:
When "exit" is called to handle an error condition, we really want to
terminate the game thread, not the whole process.
*/
#define exit(arg) Win32_Exit(arg)
void Win32_Exit(int exit_code);
#endif
#define send_to_char send_to_char_color
#define send_to_pager send_to_pager_color