/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* _/ _/_/_/ _/ _/ _/ ACK! MUD is modified *
* _/_/ _/ _/ _/ _/ Merc2.0/2.1/2.2 code *
* _/ _/ _/ _/_/ _/ (c)Stephen Dooley 1994 *
* _/_/_/_/ _/ _/ _/ "This mud has not been *
* _/ _/ _/_/_/ _/ _/ _/ tested on animals." *
* Version #: 2.01 *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/*
* Accommodate old non-Ansi compilers.
*/
#if defined(TRADITIONAL)
#define const
#define args( list ) ( )
#define DECLARE_DO_FUN( fun ) void fun( )
#define DECLARE_SPEC_FUN( fun ) bool fun( )
#define DECLARE_SPELL_FUN( fun ) bool fun( )
#define DECLARE_OBJ_FUN( fun ) void fun( )
#else
#define args( list ) list
#define DECLARE_DO_FUN( fun ) DO_FUN fun
#define DECLARE_SPEC_FUN( fun ) SPEC_FUN fun
#define DECLARE_SPELL_FUN( fun ) SPELL_FUN fun
#define DECLARE_OBJ_FUN( fun ) OBJ_FUN fun
#endif
/*
* Short scalar types.
* Diavolo reports AIX compiler has bugs with short types.
*/
#if !defined(NOWHERE)
#define NOWHERE -1
#endif
#if !defined(FALSE)
#define FALSE 0
#endif
#if !defined(TRUE)
#define TRUE 1
#endif
#if defined(_AIX)
#if !defined(const)
#define const
#endif
typedef int sh_int;
typedef int bool;
#define unix
#else
#if !defined(sh_int)
typedef short int sh_int;
#endif
#if !defined(bool)
typedef unsigned char bool;
#endif
#endif
typedef int long_int;
/*
* Your mud info here :) Zen
*/
#define mudnamecolor "@@lYour Mud Name@@N"
#define mudnamenocolor "Your Mud name"
#define sacgodname "Cyberlich"
#define goodgodname "Freyja"
#define neutralgodname "Zenithar"
#define evilgodname "Oderus"
/*
* String and memory management parameters.
*/
#define MAX_KEY_HASH 2048
#define MAX_STRING_LENGTH 8192
#define MSL MAX_STRING_LENGTH
#define MAX_INPUT_LENGTH 640
#define MAX_AREAS 200
#define MAX_VNUM 32767
#define BOOT_DB_ABORT_THRESHOLD 25
#define RUNNING_ABORT_THRESHOLD 10
#define ALARM_FREQUENCY 20
/*
* Game parameters.
* Increase the max'es if you add more of something.
* Adjust the pulse numbers to suit yourself.
*/
#define MAX_CLAN_EQ 6 /* Number of clan eq items */
#define MAX_COLOUR 15 /* eg look, prompt, shout */
#define MAX_ANSI 20 /* eg red, black, etc (was 11) */
#define MAX_ALIASES 6
#define MAX_IGNORES 3
#define MAX_RACE 14
#define MAX_CLAN 9 /* number of clans */
#define EXP_LEVEL 1000 /* exp per level */
#define MAX_SKILL 300
#define MAX_CLASS 5
#define MAX_LEVEL 85
#define MOUNT_COST 10
#define LEVEL_HERO (MAX_LEVEL - 4)
#define LEVEL_IMMORTAL (MAX_LEVEL - 3)
#define MAX_VAMP_LEVEL 20
#define MAX_WOLF_LEVEL 20
#define ADVANCE_VAMP 16
#define ADVANCE_ADEPT 32
#define ADVANCE_WOLF 64
#define MAX_FAMILY 5
#define MAX_TRIBE 5
#define MAX_SUPER 4
#define MAX_STANCE 11
/* total number of supernatural types in the game */
#define QUORUM_NUMBER 4
/* number of members to be a quorum for a council */
/*
* Well known mob virtual numbers.
* Defined in #MOBILES.
*/
#define MOB_VNUM_CITYGUARD 3060
#define MOB_VNUM_VAMPIRE 3404
#define MOB_VNUM_DOGGY 99
#define MOB_VNUM_ZOMBIE 11004
#define MOB_VNUM_STALKER 32
#define MOB_VNUM_WATERELEM 1028
#define MOB_VNUM_SKELETON 1028
#define MOB_VNUM_FIREELEM 1028
#define MOB_VNUM_TRAINER 1042
#define MOB_VNUM_EARTHELEM 1028
#define MOB_VNUM_IRON_GOLEM 1029
#define MOB_VNUM_SOUL_THIEF 1030
#define MOB_VNUM_HOLY_AVENGER 1031
#define MOB_VNUM_PEGASUS 1037
#define MOB_VNUM_NIGHTMARE 1038
#define MOB_VNUM_ELEM_BEAST 1039
#define MOB_VNUM_INT_DEVOURER 1040
#define MOB_VNUM_SHADOW_HOUND 1041
#define MOB_VNUM_DIAMOND_GOLEM 1032
#define MOB_VNUM_COMBAT_ELEMENTAL 1036 /* this needs to be a new mob ZENFIX */
/*
* vnums for quest items.
* One of these will be picked at random and placed onto a random mob
* (one the player has a chance of killing!).
* Reserve vnums 40-60 for this.
* We'll define a range of possible vnums here - easier to expand (:
*/
#define OBJ_VNUM_QUEST_MIN 18181
#define OBJ_VNUM_QUEST_MAX 18192 /* more to follow, up to 18199 */
#define PULSE_PER_SECOND 8
#define PULSE_VIOLENCE ( 2 * PULSE_PER_SECOND )
#define PULSE_MOBILE ( 4 * PULSE_PER_SECOND )
#define PULSE_OBJFUN ( 4 * PULSE_PER_SECOND )
#define PULSE_TICK ( 60 * PULSE_PER_SECOND )
#define PULSE_MESSAGE ( 12 * PULSE_PER_SECOND )
#define PULSE_ROOMS ( 30 * PULSE_PER_SECOND )
#define PULSE_AREA ( 80 * PULSE_PER_SECOND )
#define PULSE_AUCTION ( 30 * PULSE_PER_SECOND )
#define PULSE_RAUCTION ( 30 * PULSE_PER_SECOND )
#define PULSE_MAUCTION ( 30 * PULSE_PER_SECOND )
#define VAMPIRE_RECALL 9001
#define LIQUID_BLOOD 13
#define WOLF_RECALL 3001
/*
* Well known object virtual numbers.
* Defined in #OBJECTS.
*/
#define OBJ_VNUM_MONEY_ONE 2
#define OBJ_VNUM_MONEY_SOME 3
#define OBJ_VNUM_CORPSE_NPC 10
#define OBJ_VNUM_CORPSE_PC 11
#define OBJ_VNUM_SEVERED_HEAD 12
#define OBJ_VNUM_TORN_HEART 13
#define OBJ_VNUM_SLICED_ARM 14
#define OBJ_VNUM_SLICED_LEG 15
#define OBJ_VNUM_FINAL_TURD 16
#define OBJ_VNUM_MUSHROOM 20
#define OBJ_VNUM_LIGHT_BALL 21
#define OBJ_VNUM_SPRING 19
#define OBJ_VNUM_BOARD 23
#define OBJ_VNUM_FOOD 30
#define OBJ_VNUM_FIREBLADE 31
#define OBJ_VNUM_TOKEN 32 /* For old chars */
#define OBJ_VNUM_WINDOW 33
#define OBJ_VNUM_PORTAL 34
#define OBJ_VNUM_BEACON 35
#define OBJ_VNUM_SCHOOL_MACE 3700
#define OBJ_VNUM_SCHOOL_DAGGER 3701
#define OBJ_VNUM_SCHOOL_SWORD 3702
#define OBJ_VNUM_SCHOOL_VEST 3703
#define OBJ_VNUM_SCHOOL_SHIELD 3704
#define OBJ_VNUM_SCHOOL_BANNER 3716
#define OBJ_VNUM_SOUL_POTION 37
#define OBJ_VNUM_CAPTURED_SOUL 38
#define OBJ_VNUM_CONFLAGRATION 1036 /* need a staff here ZENFIX */
/*
* Well known room virtual numbers.
* Defined in #ROOMS.
*/
#define ROOM_VNUM_LIMBO 2
#define ROOM_VNUM_CHAT 1200
#define ROOM_VNUM_TEMPLE 3001
#define ROOM_VNUM_ALTAR 3054
#define ROOM_VNUM_SCHOOL 3700
#define ROOM_VNUM_DONATION 3206
#define ROOM_VNUM_MORGUE 3300
#define ROOM_VNUM_MORIBUND 3301
#define ROOM_VNUM_BUILDER 1019 /* Bulder-flagged players only */
#define ROOM_VNUM_BODIES 30 /* for morphed players */
#define ROOM_VNUM_CLAN 1022 /* for leaders only */
#define ROOM_VNUM_DM_RECALL 3001
#define ROOM_VNUM_ETHEREAL_PLANE 3850
#define ROOM_VNUM_INT_HEAL 3871
#define ROOM_VNUM_MID_BOTTOM 3001
#define ROOM_VNUM_MID_TOP 3200
#define STANCE_WARRIOR 0
#define STANCE_CASTER 1
#define STANCE_AMBUSH 2
#define STANCE_AC_BEST 3
#define STANCE_HR_BEST 4
#define STANCE_DR_BEST 5
#define STANCE_AC_WORST 6
#define STANCE_HR_WORST 7
#define STANCE_DR_WORST 8
#define STANCE_SUPER_FIGHTER 9
#define STANCE_SUPER_SPEED 10
/*
* SSM stuff
*/
#define STR(x) #x
#define SX(x) STR(x)
#define _caller __FILE__ ":" SX(__LINE__)
#define fread_string(x) _fread_string((x), _caller)
char *_fread_string args((FILE * fp, const char *caller));
#define str_dup(x) _str_dup((x), _caller)
char *_str_dup args((const char *str, const char *caller));
#define fread_string_eol(x) _fread_string_eol((x), _caller)
char *_fread_string_eol args((FILE * fp, const char *caller));
#define free_string(x) _free_string((x), _caller)
void _free_string args((char *pstr, const char *caller));
/* YUCK! */
extern char *target_name;
/*
* Structure types.
*/
typedef struct portal_data PORTAL_DATA;
typedef struct affect_data AFFECT_DATA;
typedef struct room_affect_data ROOM_AFFECT_DATA;
typedef struct area_data AREA_DATA;
typedef struct ban_data BAN_DATA;
typedef struct char_data CHAR_DATA;
typedef struct descriptor_data DESCRIPTOR_DATA;
typedef struct exit_data EXIT_DATA;
typedef struct extra_descr_data EXTRA_DESCR_DATA;
typedef struct help_data HELP_DATA;
typedef struct kill_data KILL_DATA;
typedef struct mob_index_data MOB_INDEX_DATA;
typedef struct note_data NOTE_DATA;
typedef struct obj_data OBJ_DATA;
typedef struct obj_index_data OBJ_INDEX_DATA;
typedef struct pc_data PC_DATA;
typedef struct reset_data RESET_DATA;
typedef struct room_index_data ROOM_INDEX_DATA;
typedef struct shop_data SHOP_DATA;
typedef struct time_info_data TIME_INFO_DATA;
typedef struct weather_data WEATHER_DATA;
typedef struct mob_prog_data MPROG_DATA; /* MOBprogram */
typedef struct mob_prog_act_list MPROG_ACT_LIST; /* MOBprogram */
/* MAG Mod */
typedef struct build_data_list BUILD_DATA_LIST; /* Online Building */
typedef struct mobprog_item MOBPROG_ITEM; /* Mobprogs */
/* Zen Mod */
typedef struct vamp_exp_table VAMP_EXP_TABLE;
typedef struct magic_shield MAGIC_SHIELD;
typedef struct politics_data_type POL_DATA;
typedef struct council_data COUNCIL_DATA;
typedef struct member_data MEMBER_DATA;
typedef struct trigger_data TRIGGER_DATA;
typedef struct corpse_data CORPSE_DATA;
typedef struct mark_data MARK_DATA;
typedef struct mark_list_member MARK_LIST_MEMBER;
typedef struct message_data MESSAGE_DATA;
typedef struct board_data BOARD_DATA;
typedef struct control_data CONTROL_DATA;
typedef struct ruler_data RULER_DATA;
typedef struct influence_data INFLUENCE_DATA;
typedef struct interact_data INTERACT_DATA;
typedef struct influence_list INFLUENCE_LIST;
typedef struct control_list CONTROL_LIST;
typedef struct queued_interact_list QUEUED_INTERACT_LIST;
typedef struct ruler_list RULER_LIST;
typedef struct dl_list DL_LIST;
typedef struct brand_data BRAND_DATA;
/* Use these for bitvectors..saves having to recalculate each time :) Zen */
#define BIT_0 0
#define BIT_1 1
#define BIT_2 2
#define BIT_3 4
#define BIT_4 8
#define BIT_5 16
#define BIT_6 32
#define BIT_7 64
#define BIT_8 128
#define BIT_9 256
#define BIT_10 512
#define BIT_11 1024
#define BIT_12 2048
#define BIT_13 4096
#define BIT_14 8192
#define BIT_15 16384
#define BIT_16 32768
#define BIT_17 65536
#define BIT_18 131072
#define BIT_19 262144
#define BIT_20 524288
#define BIT_21 1048576
#define BIT_22 2097152
#define BIT_23 4194304
#define BIT_24 8388608
#define BIT_25 16777216
#define BIT_26 33554432
#define BIT_27 67108864
#define BIT_28 134217728
#define BIT_29 268435456
#define BIT_30 536870912
#define BIT_31 1073741824
#define BIT_32 2147483648
/*
* Function types.
*/
typedef void DO_FUN args( ( CHAR_DATA *ch, char *argument ) );
typedef bool SPEC_FUN args( ( CHAR_DATA *ch ) );
typedef bool SPELL_FUN args( ( int sn, int level, CHAR_DATA *ch, void *vo, OBJ_DATA *obj ) );
typedef void OBJ_FUN args( ( OBJ_DATA *obj, CHAR_DATA *keeper ) );
#define SUPER_NONE 0
#define SUPER_VAMP 1
#define SUPER_WOLF 2
#define SUPER_BLESSED 3
/* defines for enchant.c */
#define ENCHANT_EXTRA_FLAGS -1
#define ENCHANT_APPLY_FLAGS -2
#define ENCHANT_OBJFUNS -3
/* These are for skill_table lookup funcs... to save writing 2 functions */
#define RETURN_BEST_LEVEL 1
#define RETURN_BEST_CLASS 2
/*
* God Levels
*/
#define L_GOD MAX_LEVEL
#define L_SUP L_GOD - 1
#define L_DEI L_SUP - 1
#define L_ANG L_DEI - 1
#define L_HER L_ANG - 1
#define CLAN_ONLY -1
#define BOSS_ONLY -2
#define VAMP_ONLY -3
#define WOLF_ONLY -4
/*
* Updated pointer referencing, curtesy of Spectrum, from Beyond the Veil
*
*/
#define OBJ_NEXT 1
#define OBJ_NEXTCONTENT 2
#define OBJ_NULL 3
struct obj_ref_type
{
bool inuse;
struct obj_ref_type *next;
OBJ_DATA **var;
int type; /* OBJ_xxxx */
};
#define CHAR_NEXT 1
#define CHAR_NEXTROOM 2
#define CHAR_NULL 3
struct char_ref_type
{
bool inuse;
struct char_ref_type *next;
CHAR_DATA **var;
int type;
};
#define OREF(v, type) do { \
static struct obj_ref_type s={FALSE,NULL,NULL,type}; s.var=&v; \
obj_reference(&s); } while(0)
#define OUREF(var) obj_unreference(&var);
#define CREF(v, type) do { \
static struct char_ref_type s={FALSE,NULL,NULL,type}; s.var=&v; \
char_reference(&s); } while(0)
#define CUREF(var) char_unreference(&var);
struct board_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
BOARD_DATA * next;
BOARD_DATA * prev;
int vnum;
MESSAGE_DATA * first_message;
MESSAGE_DATA * last_message;
int min_read_lev;
int min_write_lev;
int expiry_time;
int clan;
};
struct message_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
MESSAGE_DATA * next;
MESSAGE_DATA * prev; /* Only used in save_board */
BOARD_DATA * board;
time_t datetime;
char * author;
char * title;
char * message;
};
/*
* Colour look-up table structure thingy.
*/
struct colour_type
{
char * name; /* eg, gossip, say, look */
int index; /* unique index */
};
struct ansi_type
{
char * name;
char * value; /* escape sequence, or whatever */
int index;
char letter;
int stlen;
};
#define COLOUR_NORMAL "\033[0m"
/* Structure for material/strengths */
struct material_type
{
char * name; /* Name of the material */
char * descrip; /* Descr. of how strong it is */
int quality; /* 0 = crap, 100 = non-breakable */
};
#define NO_MATERIAL 10 /* Number of materials */
struct dl_list
{
bool is_free;
DL_LIST * next;
DL_LIST * prev;
void * this_one;
};
/*
* Site ban structure.
*/
struct ban_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
BAN_DATA * next;
BAN_DATA * prev;
char * name;
char * banned_by;
bool newbie;
};
struct brand_data
{
bool is_free;
BRAND_DATA * next;
BRAND_DATA * prev;
char * branded;
char * branded_by;
char * dt_stamp;
char * message;
char * priority;
};
/*
* Time and weather stuff.
*/
#define SUN_DARK 0
#define SUN_RISE 1
#define SUN_LIGHT 2
#define SUN_SET 3
#define SKY_CLOUDLESS 0
#define SKY_CLOUDY 1
#define SKY_RAINING 2
#define SKY_LIGHTNING 3
#define MOON_DOWN 0
#define MOON_RISE 1
#define MOON_LOW 2
#define MOON_PEAK 3
#define MOON_FALL 4
#define MOON_SET 5
#define MOON_NEW 0
#define MOON_WAX_CRE 1
#define MOON_WAX_HALF 2
#define MOON_WAX_GIB 3
#define MOON_FULL 4
#define MOON_WAN_GIB 5
#define MOON_WAN_HALF 6
#define MOON_WAN_CRE 7
struct time_info_data
{
int hour;
int day;
int month;
int year;
int moon;
};
struct weather_data
{
int mmhg;
int change;
int sky;
int sunlight;
int moon_phase;
int moon_loc;
bool phase_changed;
};
struct corpse_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
CORPSE_DATA * next;
CORPSE_DATA * prev;
OBJ_DATA * this_corpse;
};
struct member_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
CHAR_DATA * this_member;
MEMBER_DATA * next;
MEMBER_DATA * prev;
};
struct mark_data
{
bool is_free;
int room_vnum;
char *message;
char *author;
sh_int duration;
sh_int type; /* VAMP, WOLF */
MARK_DATA * next;
MARK_DATA * prev; /* for freelist only */
};
struct mark_list_member
{
bool is_free;
MARK_LIST_MEMBER * next;
MARK_LIST_MEMBER * prev;
MARK_DATA * mark;
};
struct council_data
{
char * council_name;
MEMBER_DATA * first_member;
MEMBER_DATA * last_member;
bool quorum;
sh_int council_time;
};
/*
* Connected state for a channel.
*/
/* These values referenced by users command, BTW */
#define CON_PLAYING 0
#define CON_GET_NAME -1
/* All non connected */
#define CON_GET_OLD_PASSWORD -2
/* states changed to */
#define CON_CONFIRM_NEW_NAME -3
/* negative so that */
#define CON_GET_NEW_PASSWORD -4
/* Hotboot can shut out */
#define CON_CONFIRM_NEW_PASSWORD -5
/* All nonplaying chars */
#define CON_GET_NEW_SEX -6
/* ---Flar */
#define CON_GET_NEW_CLASS -7
#define CON_GET_RACE -9
#define CON_READ_MOTD -10
#define CON_GET_STATS -11
#define CON_FINISHED -12
#define CON_MENU -13
#define CON_COPYOVER_RECOVER -14
/* For Hotreboot */
#define CON_QUITTING -15
#define CON_SETTING_STATS 1
/* values used to check a new player has selected all options.... */
#define CHECK_RACE 1
#define CHECK_CLASS 2
#define CHECK_SEX 4
#define CHECK_STATS 8
/*
* Descriptor (channel) structure.
*/
struct descriptor_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
DESCRIPTOR_DATA * next;
DESCRIPTOR_DATA * prev;
DESCRIPTOR_DATA * snoop_by;
CHAR_DATA * character;
CHAR_DATA * original;
char * host;
sh_int descriptor;
sh_int connected;
bool fcommand;
char inbuf [4 * MAX_INPUT_LENGTH];
char incomm [MAX_INPUT_LENGTH];
char inlast [MAX_INPUT_LENGTH];
int repeat;
char * showstr_head;
char * showstr_point;
char * outbuf;
int outsize;
int outtop;
unsigned int remote_port; /* 'Pair Port' ? -S- */
int check; /* For new players*/
int flags;
int childpid; /* Child process id */
time_t timeout;
};
#define DESC_FLAG_PASSTHROUGH 1 /* Used when data is being passed to */
/* Another prog. */
struct family_name_type
{
char * name;
sh_int clan_enemy;
};
struct politics_data_type
{
sh_int diplomacy[MAX_CLAN] [MAX_CLAN];
bool daily_negotiate_table[MAX_CLAN] [MAX_CLAN];
long int treasury[MAX_CLAN];
bool end_current_state[MAX_CLAN][MAX_CLAN];
};
struct stance_app_type
{
char * name;
sh_int ac_mod;
sh_int dr_mod;
sh_int hr_mod;
sh_int speed_mod;
};
/*
* Attribute bonus structures.
*/
struct str_app_type
{
sh_int tohit;
sh_int todam;
sh_int carry;
sh_int wield;
};
struct int_app_type
{
sh_int learn;
sh_int spell_mod;
sh_int mana_regen;
};
struct wis_app_type
{
sh_int practice;
sh_int spell_save;
};
struct dex_app_type
{
sh_int defensive;
};
struct con_app_type
{
sh_int hitp;
sh_int shock;
};
/*
* TO types for act.
*/
#define TO_ROOM 0
#define TO_NOTVICT 1
#define TO_VICT 2
#define TO_CHAR 3
/*
* Help table types.
*/
struct help_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
HELP_DATA * next;
HELP_DATA * prev;
sh_int level;
char * keyword;
char * text;
};
/*
* Shop types.
*/
#define MAX_TRADE 5
struct shop_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
SHOP_DATA * next; /* Next shop in list */
SHOP_DATA * prev; /* Prev shop in list */
sh_int keeper; /* Vnum of shop keeper mob */
sh_int buy_type [MAX_TRADE]; /* Item types shop will buy */
sh_int profit_buy; /* Cost multiplier for buying */
sh_int profit_sell; /* Cost multiplier for selling */
sh_int open_hour; /* First opening hour */
sh_int close_hour; /* First closing hour */
};
/*
* Per-class stuff.
*/
struct class_type
{
char who_name [4]; /* Three-letter name for 'who' */
char * class_name; /* Full name */
sh_int attr_prime; /* Prime attribute */
char * attr; /* Prime */
sh_int weapon; /* First weapon */
sh_int guild; /* Vnum of guild room */
sh_int skill_adept; /* Maximum skill level */
sh_int thac0_00; /* Thac0 for level 0 */
sh_int thac0_32; /* Thac0 for level 32 */
sh_int hp_min; /* Min hp gained on leveling */
sh_int hp_max; /* Max hp gained on leveling */
bool fMana; /* Class gains mana on level */
char * skill1; /* Auto-learnt skill if any */
};
#define RACE_MOD_NONE BIT_0
#define RACE_MOD_FAST_HEAL BIT_1
#define RACE_MOD_SLOW_HEAL BIT_2
#define RACE_MOD_STRONG_MAGIC BIT_3
#define RACE_MOD_WEAK_MAGIC BIT_4
#define RACE_MOD_NO_MAGIC BIT_5
#define RACE_MOD_IMMUNE_POISON BIT_6
#define RACE_MOD_RESIST_SPELL BIT_7
#define RACE_MOD_WOODLAND BIT_8
#define RACE_MOD_DARKNESS BIT_9
#define RACE_MOD_HUGE BIT_10
#define RACE_MOD_LARGE BIT_11
#define RACE_MOD_TINY BIT_12
#define RACE_MOD_SMALL BIT_13
#define RACE_MOD_TAIL BIT_14
struct race_type
{
char race_name [4]; /* Three letter name for race */
char * race_title; /* Full race name */
sh_int recall; /* Race's recall location */
sh_int race_room; /* vnum of race-only room */
sh_int race_str; /* max_str to use for race */
sh_int race_int;
sh_int race_wis;
sh_int race_dex;
sh_int race_con;
int race_flags; /* flags for the various racial stuff */
int classes; /* Number of classes for race */
sh_int limit[MAX_CLASS]; /* Max for each class */
char * comment; /* comments shown for new players */
char * skill1;
};
struct clan_type
{
char * clan_name; /* The name of the Clan */
char * clan_abbr; /* Abbrev. name - FIVE CHARS */
sh_int donat_room; /* clan donation */
sh_int clan_room; /* Clan-only room */
char * leader; /* Clan leader */
char * enemies; /* Enemies (if any) */
int eq[MAX_CLAN_EQ]; /* vnums of objects to load */
};
struct exp_type
{
long_int mob_base; /* Base exp for mob of level x */
long_int exp_base[MAX_CLASS]; /* Cost for each class of level */
};
/*
* Data structure for notes.
*/
struct note_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
NOTE_DATA * next;
NOTE_DATA * prev;
char * sender;
char * date;
char * to_list;
char * subject;
char * text;
time_t date_stamp;
};
/*
* Spell Damage Types
*
*/
#define SPELL_DAM_UNDEFINED 0
#define SPELL_DAM_FIRE 1
#define SPELL_DAM_SHOCK 2
#define SPELL_DAM_LIGHT 3
#define SPELL_DAM_GAS 4
#define SPELL_DAM_POISON 5
#define SPELL_DAM_COLD 6
#define SPELL_DAM_SOUND 7
#define SPELL_DAM_ACID 8
/*
* An affect.
*/
struct affect_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
AFFECT_DATA * next;
AFFECT_DATA * prev;
sh_int type;
sh_int duration;
sh_int location;
sh_int modifier;
int bitvector;
CHAR_DATA * caster;
int level;
};
struct room_affect_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
ROOM_AFFECT_DATA * next;
ROOM_AFFECT_DATA * prev;
sh_int duration;
sh_int level;
int type;
int bitvector;
int applies_spell; /* what spell is cast on a ch by the room..a sn */
sh_int modifier;
sh_int location;
CHAR_DATA * caster;
};
/*
* A kill structure (indexed by level).
*/
struct kill_data
{
sh_int number;
sh_int killed;
};
/* Magic Shield types
-Damane 4/27/96 */
#define SHIELD_NONE 0
#define FLAME_SHIELD 1
#define SHOCK_SHIELD 2
#define SHADOW_SHIELD 3
#define ICE_SHIELD 4
#define PSI_SHIELD 5
struct magic_shield
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
MAGIC_SHIELD *next;
MAGIC_SHIELD *prev;
sh_int type; /* what kind is it? Electric, Fire, etc... */
bool harmfull; /* does the shield damage the attacker? */
sh_int attack_dam; /* then hurt the attacker ;) */
sh_int percent; /* percent of damage it absorbs per attack */
sh_int hits; /* Shield hitpoints */
int sn;
char * absorb_message_room;
char * absorb_message_victim;
char * absorb_message_self;
char * name;
char * wearoff_room;
char * wearoff_self;
};
/***************************************************************************
* *
* VALUES OF INTEREST TO AREA BUILDERS *
* (Start of section ... start here) *
* *
***************************************************************************/
/********************* Define Flags for hunting *************************/
#define ACT_HUNT_CHAR 1 /* Hunting a character */
#define ACT_HUNT_OBJ 2 /* Hunting an object */
#define ACT_HUNT_INFORM 4 /* Mob will gossip when hunting */
#define ACT_HUNT_CR 8 /* Mob is doing a corpse retrival */
#define ACT_HUNT_MOVE 16 /* Just walking somewhere */
#define NO_VNUM -1 /* For ch->move_to thingy */
/************************************************************************/
/** Define what is calling the trigger handler for objects ******/
#define TRIGGER_OPEN 1
/* Opening a container */
#define TRIGGER_CLOSE 2
/* Closing a container */
#define TRIGGER_EAT 3
/* Eating some food */
#define TRIGGER_C_DRINK 4
/* Drinking from container */
#define TRIGGER_F_DRINK 5
/* Drinking from fountain */
#define TRIGGER_WEAR 6
/* Wearing an object */
#define TRIGGER_GET 7
/* Picking up an object */
#define TRIGGER_DROP 8
/* Dropping an object */
#define TRIGGER_EXAMINE 9
/* Examining an object */
/** Define what actions the triggered object can do *************/
#define ACTION_TRANSPORT 1
/* Transports victim to room */
#define ACTION_RESTORE 2
/* Restores victim */
#define ACTION_SLAY 3
/* Kills victim */
#define ACTION_TRANSFORM 4
/* Loads mob(s) in its place */
/****************************************************************/
/* BitVector flags for room-affect spells. These are used in the
ROOM_AFFECT_DATA structure, and passes to the major handling
functions. They MUST be used whenever a room-affect spell is
being cast (from within code) */
#define ROOM_BV_NONE 0
#define ROOM_BV_SILENCE 1 /* Like silence room flag */
#define ROOM_BV_SAFE 2 /* Like safe room flag */
#define ROOM_BV_ENCAPS 4 /* Magically blocks exits */
#define ROOM_BV_SHADE 8 /* Room is darkened */
#define ROOM_BV_HEAL_REGEN 16 /* room heals hits quicker */
#define ROOM_BV_HEAL_STEAL 32 /* room takes hits instead of giving */
#define ROOM_BV_MANA_REGEN 64 /* room heals mana quicker */
#define ROOM_BV_MANA_STEAL 128 /* room saps mana */
#define ROOM_BV_FIRE_RUNE 256 /* room does fire damage */
#define ROOM_BV_FIRE_TRAP 512 /* room is fire trapped */
#define ROOM_BV_DAMAGE_TRAP 1024 /* room is physical damage trapped */
#define ROOM_BV_SHOCK_RUNE 2048 /* room is shock runed */
#define ROOM_BV_SHOCK_TRAP 4096 /* room is shock trapped */
#define ROOM_BV_SPELL_ON_ENTER 8192 /* room spell cast on entrance */
#define ROOM_BV_SPELL_ALWAYS 16384 /* room casts spell continuously */
#define ROOM_BV_HOLD 32768 /* room lets you in, but not out..recall works */
#define ROOM_BV_POISON_RUNE 65536 /* room gives poison to entering ch */
#define ROOM_BV_SOUL_NET 131072 /* makes soul instead of corpse */
/*
* ACT bits for mobs.
* Used in #MOBILES.
*/
#define ACT_IS_NPC 1 /* Auto set for mobs */
#define ACT_SENTINEL 2 /* Stays in one room */
#define ACT_SCAVENGER 4 /* Picks up objects */
#define ACT_REMEMBER 8 /* remembers target */
#define ACT_NO_FLEE 16 /* can't flee from mob */
#define ACT_AGGRESSIVE 32 /* Attacks PC's */
#define ACT_STAY_AREA 64 /* Won't leave area */
#define ACT_WIMPY 128 /* Flees when hurt */
#define ACT_PET 256 /* Auto set for pets */
#define ACT_TRAIN 512 /* Can train PC's */
#define ACT_PRACTICE 1024 /* Can practice PC's */
#define ACT_MERCENARY 2048 /* Is a mercenary */
#define ACT_HEAL 4096 /* Sells spells */
#define ACT_ADAPT 8192 /* Adapts weapons */
#define ACT_UNDEAD 16384 /* Mob is undead */
#define ACT_BANKER 32768 /* Is a *B*anker :P */
#define ACT_NO_BODY 65536 /* no body for damage */
#define ACT_HUNTER 131072 /* hunts attackers */
#define ACT_NOMIND 262144 /* Psi attack no-no */
#define ACT_POSTMAN 524288 /* Postmaster */
#define ACT_REWIELD 1048576 /* Uses better weapons */
#define ACT_RE_EQUIP 2097152 /* Uses better equipment*/
#define ACT_INTELLIGENT 4194304 /* For shitkicking mobs */
#define ACT_VAMPIRE 8388608 /* Vampire mob */
#define ACT_BREEDER 16777216 /* Mob can breed */
#define ACT_SOLO 33554432 /* Mob is buffed for solo combat */
#define ACT_WEREWOLF 67108864 /* Werewolf mob */ /* doesn't do anything in ack4.0 ZENFIX */
#define ACT_MOUNT 134217728 /* Mountable MOB */
/* build bits for OLC -S- */
#define ACT_BUILD_NOWT 0 /* not doing anything */
#define ACT_BUILD_REDIT 1 /* editing rooms */
#define ACT_BUILD_OEDIT 2 /* editing objects */
#define ACT_BUILD_MEDIT 3 /* editing mobiles */
#define NO_USE -999 /* this table entry can */
/* NOT be used, except */
/* by a Creator */
/*
* New bits to determine what skills a mob can do in combat -S-
*/
#define MOB_NONE 1
#define MOB_SECOND 2
#define MOB_THIRD 4
#define MOB_FOURTH 8
#define MOB_PUNCH 16
#define MOB_HEADBUTT 32
#define MOB_KNEE 64
#define MOB_DISARM 128
#define MOB_TRIP 256
#define MOB_NODISARM 512
#define MOB_NOTRIP 1024
#define MOB_DODGE 2048
#define MOB_PARRY 4096
#define MOB_MARTIAL 8192
#define MOB_ENHANCED 16384
#define MOB_DUALWIELD 32768
#define MOB_DIRT 65536
#define MOB_FIFTH 131072
#define MOB_SIXTH 262144
#define MOB_CHARGE 524288
/*
* New bits to determine what spells a mob will cast in combat -S-
* These are for offensive spells.
* Remember spec_funs may still cast as well! - but spells cast
* this way WILL reduce the mob's mana <g>
*/
#define CAST_NONE 1
#define CAST_MAGIC_MISSILE 2
#define CAST_SHOCKING_GRASP 4
#define CAST_BURNING_HANDS 8
#define CAST_COLOUR_SPRAY 16
#define CAST_FIREBALL 32
#define CAST_HELLSPAWN 64
#define CAST_ACID_BLAST 128
#define CAST_CHAIN_LIGHTNING 256
#define CAST_FLARE 1024
#define CAST_FLAMESTRIKE 2048
#define CAST_EARTHQUAKE 4096
#define CAST_MIND_FLAIL 8192
#define CAST_PLANERGY 16384
#define CAST_PHOBIA 32768
#define CAST_MIND_BOLT 65536
#define CAST_STATIC 131072
#define CAST_EGO_WHIP 262144
#define CAST_BLOODY_TEARS 524288
#define CAST_MINDFLAME 1048576
#define CAST_SUFFOCATE 2097152
#define CAST_NERVE_FIRE 4194304
#define CAST_LIGHTNING_BOLT 8388608
#define CAST_HEAT_ARMOR 16777216
#define CAST_LAVA_BURST 33554432
/*
* New bits to determine the defensive spells available to
* mobs. May be used in fights (cure light, heal, etc)
* will deduct mana from the mob when cast.
*/
#define DEF_NONE 1
#define DEF_CURE_LIGHT 2
#define DEF_CURE_SERIOUS 4
#define DEF_CURE_CRITIC 8
#define DEF_CURE_HEAL 16
#define DEF_SHIELD_FIRE 32
#define DEF_SHIELD_ICE 64
#define DEF_SHIELD_SHOCK 128
/*
* Bits for 'affected_by'.
* Used in #MOBILES.
*/
#define AFF_BLIND 1
#define AFF_INVISIBLE 2
#define AFF_DETECT_EVIL 4
#define AFF_DETECT_INVIS 8
#define AFF_DETECT_MAGIC 16
#define AFF_DETECT_HIDDEN 32
#define AFF_CLOAK_REFLECTION 64
#define AFF_SANCTUARY 128
#define AFF_FAERIE_FIRE 256
#define AFF_INFRARED 512
#define AFF_CURSE 1024
#define AFF_CLOAK_FLAMING 2048
#define AFF_POISON 4096
#define AFF_PROTECT 8192
#define AFF_CLOAK_ABSORPTION 16384 /* Unused */
#define AFF_SNEAK 32768
#define AFF_HIDE 65536
#define AFF_SLEEP 131072
#define AFF_CHARM 262144
#define AFF_FLYING 524288
#define AFF_PASS_DOOR 1048576
#define AFF_ANTI_MAGIC 2097152 /* -S- no magic hurts ch */
#define AFF_DETECT_UNDEAD 4194304
#define AFF_BESERK 8388608
#define AFF_VAMP_BITE 16777216 /* Yumm! */
#define AFF_VAMP_HEALING 33554432 /* DO NOT USE IN OLC! */
#define AFF_HOLD 67108864
#define AFF_PARALYSIS 134217728
#define AFF_CLOAK_ADEPT 268435456
#define AFF_CLOAK_REGEN 536870912
/* VAMP_HEALING is used to show that a vamp is currently healing after death*/
/*
* Sex.
* Used in #MOBILES.
*/
#define SEX_NEUTRAL 0
#define SEX_MALE 1
#define SEX_FEMALE 2
/*
* Item types.
* Used in #OBJECTS.
*/
#define ITEM_LIGHT 1
#define ITEM_SCROLL 2
#define ITEM_WAND 3
#define ITEM_STAFF 4
#define ITEM_WEAPON 5
#define ITEM_BEACON 6 /* for portals, etc */
#define ITEM_PORTAL 7
#define ITEM_TREASURE 8
#define ITEM_ARMOR 9
#define ITEM_POTION 10
#define ITEM_CLUTCH 11 /* for clutch location only! */
#define ITEM_FURNITURE 12
#define ITEM_TRASH 13
#define ITEM_TRIGGER 14
#define ITEM_CONTAINER 15
#define ITEM_QUEST 16
#define ITEM_DRINK_CON 17
#define ITEM_KEY 18
#define ITEM_FOOD 19
#define ITEM_MONEY 20
#define ITEM_STAKE 21
#define ITEM_BOAT 22
#define ITEM_CORPSE_NPC 23
#define ITEM_CORPSE_PC 24
#define ITEM_FOUNTAIN 25
#define ITEM_PILL 26
#define ITEM_BOARD 27
#define ITEM_SOUL 28
#define ITEM_PIECE 29
#define ITEM_SPELL_MATRIX 30
#define ITEM_ENCHANTMENT 31
/*
* Extra flags.
* Used in #OBJECTS.
*/
#define ITEM_GLOW 1
#define ITEM_HUM 2
#define ITEM_DARK 4
#define ITEM_NODISARM 4
#define ITEM_LOCK 8
#define ITEM_EVIL 16
#define ITEM_INVIS 32
#define ITEM_MAGIC 64
#define ITEM_NODROP 128
#define ITEM_BLESS 256
#define ITEM_ANTI_GOOD 512
#define ITEM_ANTI_EVIL 1024
#define ITEM_ANTI_NEUTRAL 2048
#define ITEM_NOREMOVE 4096
#define ITEM_INVENTORY 8192
#define ITEM_NOSAVE 16384 /* For "quest" items :) */
#define ITEM_CLAN_EQ 32768 /* only leaders and creators may load */
#define ITEM_TRIG_DESTROY 65536 /* Trigger object that destroy after use */
#define ITEM_NO_AUCTION 131072 /* Can't be auctioned */
#define ITEM_REMORT 262144 /* player must have a remort class of higher level than item level */
#define ITEM_ADEPT 524288
#define ITEM_RARE 1048576
#define ITEM_VAMP 2097152 /* player must be a vampyre */
#define ITEM_NOLOOT 4194304
#define ITEM_NOSAC 8388608
#define ITEM_UNIQUE 16777216
#define ITEM_LIFESTEALER BIT_26
/* Class-restricted stuff dropped. */
#define ITEM_APPLY_NONE 1
#define ITEM_APPLY_INFRA 2
#define ITEM_APPLY_INV 4
#define ITEM_APPLY_DET_INV 8
#define ITEM_APPLY_SANC 16
#define ITEM_APPLY_SNEAK 32
#define ITEM_APPLY_HIDE 64
#define ITEM_APPLY_PROT 128
#define ITEM_APPLY_ENHANCED 256
#define ITEM_APPLY_DET_MAG 512
#define ITEM_APPLY_DET_HID 1024
#define ITEM_APPLY_DET_EVIL 2048
#define ITEM_APPLY_PASS_DOOR 4096
#define ITEM_APPLY_DET_POISON 8192
#define ITEM_APPLY_FLY 16384
#define ITEM_APPLY_KNOW_ALIGN 32768
#define ITEM_APPLY_DET_UNDEAD 65536
#define ITEM_APPLY_HEATED 131072
/* Class-restricted object stuff
* So only warriors can use some swords, thieves daggers, etc
* -- Stephen
*/
#define ITEM_CLASS_SOR 1
#define ITEM_CLASS_KNI 2
#define ITEM_CLASS_ASS 4
#define ITEM_CLASS_MON 8
#define ITEM_CLASS_NEC 16
#define ITEM_CLASS_PSI 32
#define ITEM_CLASS_CON 64
#define ITEM_CLASS_TEM 128
#define ITEM_CLASS_RAN 256
/*
* Wear flags.
* Used in #OBJECTS.
*/
#define ITEM_TAKE 1
#define ITEM_WEAR_FINGER 2
#define ITEM_WEAR_NECK 4
#define ITEM_WEAR_BODY 8
#define ITEM_WEAR_HEAD 16
#define ITEM_WEAR_LEGS 32
#define ITEM_WEAR_FEET 64
#define ITEM_WEAR_HANDS 128
#define ITEM_WEAR_ARMS 256
#define ITEM_WEAR_SHIELD 512
#define ITEM_WEAR_ABOUT 1024
#define ITEM_WEAR_WAIST 2048
#define ITEM_WEAR_WRIST 4096
#define ITEM_WIELD 8192
#define ITEM_HOLD 16384
#define ITEM_WEAR_FACE 32768
#define ITEM_WEAR_EAR 65536
#define ITEM_HOLD_MAGIC 131072
#define ITEM_HOLD_CLUTCH 131072
/*
* Apply types (for affects).
* Used in #OBJECTS.
*/
#define APPLY_NONE 0
#define APPLY_STR 1
#define APPLY_DEX 2
#define APPLY_INT 3
#define APPLY_WIS 4
#define APPLY_CON 5
#define APPLY_SEX 6
#define APPLY_CLASS 7
#define APPLY_LEVEL 8
#define APPLY_AGE 9
#define APPLY_HEIGHT 10
#define APPLY_WEIGHT 11
#define APPLY_MANA 12
#define APPLY_HIT 13
#define APPLY_MOVE 14
#define APPLY_GOLD 15
#define APPLY_EXP 16
#define APPLY_AC 17
#define APPLY_HITROLL 18
#define APPLY_DAMROLL 19
#define APPLY_SAVING_PARA 20
#define APPLY_SAVING_ROD 21
#define APPLY_SAVING_PETRI 22
#define APPLY_SAVING_BREATH 23
#define APPLY_SAVING_SPELL 24
/*
* Values for containers (value[1]).
* Used in #OBJECTS.
*/
#define CONT_CLOSEABLE 1
#define CONT_PICKPROOF 2
#define CONT_CLOSED 4
#define CONT_LOCKED 8
/*
* Room flags.
* Used in #ROOMS.
*/
#define ROOM_DARK 1
#define ROOM_REGEN 2 /* increased regen in this room */
#define ROOM_NO_MOB 4
#define ROOM_INDOORS 8
#define ROOM_NO_MAGIC 16
#define ROOM_HOT 32 /* players lose hp each tick */
#define ROOM_COLD 64 /* players lose hp each tick */
#define ROOM_PK 128 /* players may freely pk here */
#define ROOM_QUIET 256 /* room is quiet */
#define ROOM_PRIVATE 512
#define ROOM_SAFE 1024
#define ROOM_SOLITARY 2048
#define ROOM_PET_SHOP 4096
#define ROOM_NO_RECALL 8192
#define ROOM_NO_TELEPORT 16384
#define ROOM_HUNT_MARK 32768 /* Dont ever set! */
#define ROOM_NOBLOODWALK 65536
#define ROOM_NO_PORTAL 131072
#define ROOM_NO_REPOP BIT_19
/*
* Directions.
* Used in #ROOMS.
*/
#define DIR_NORTH 0
#define DIR_EAST 1
#define DIR_SOUTH 2
#define DIR_WEST 3
#define DIR_UP 4
#define DIR_DOWN 5
/*
* Exit flags.
* Used in #ROOMS.
*/
#define EX_ISDOOR 1
#define EX_CLOSED 2
#define EX_LOCKED 4
#define EX_CLIMB 8
#define EX_IMMORTAL 16
#define EX_PICKPROOF 32
#define EX_SMASHPROOF 64
#define EX_PASSPROOF 128
#define EX_NODETECT 256
/*
* Sector types.
* Used in #ROOMS.
*/
#define SECT_INSIDE 0
#define SECT_CITY 1
#define SECT_FIELD 2
#define SECT_FOREST 3
#define SECT_HILLS 4
#define SECT_MOUNTAIN 5
#define SECT_WATER_SWIM 6
#define SECT_WATER_NOSWIM 7
#define SECT_RECALL_OK 8
#define SECT_AIR 9
#define SECT_DESERT 10
#define SECT_MAX 11
/*
* Equpiment wear locations.
* Used in #RESETS.
*/
#define WEAR_NONE -1
#define WEAR_LIGHT 0
#define WEAR_FINGER_L 1
#define WEAR_FINGER_R 2
#define WEAR_NECK_1 3
#define WEAR_NECK_2 4
#define WEAR_BODY 5
#define WEAR_HEAD 6
#define WEAR_LEGS 7
#define WEAR_FEET 8
#define WEAR_HANDS 9
#define WEAR_ARMS 10
#define WEAR_SHIELD 11
#define WEAR_ABOUT 12
#define WEAR_WAIST 13
#define WEAR_WRIST_L 14
#define WEAR_WRIST_R 15
#define WEAR_WIELD 16
#define WEAR_HOLD 17
#define WEAR_FACE 18
#define WEAR_EAR 19
#define WEAR_MAGIC 20
#define WEAR_WIELD_2 21
#define MAX_WEAR 22
/***************************************************************************
* *
* VALUES OF INTEREST TO AREA BUILDERS *
* (End of this section ... stop here) *
* *
***************************************************************************/
/*
* Conditions.
*/
#define COND_DRUNK 0
#define COND_FULL 1
#define COND_THIRST 2
/*
* Positions.
*/
#define POS_DEAD 0
#define POS_MORTAL 1
#define POS_INCAP 2
#define POS_STUNNED 3
#define POS_SLEEPING 4
#define POS_RESTING 5
#define POS_FIGHTING 6
#define POS_STANDING 7
#define POS_WRITING 8
#define POS_BUILDING 9
#define POS_RIDING 10
/*
* ACT bits for players.
*/
#define PLR_IS_NPC 1 /* Don't EVER set. */
#define PLR_BOUGHT_PET 2
#define PLR_CLAN_LEADER 4 /* Clan Leader!! */
#define PLR_AUTOEXIT 8
#define PLR_AUTOLOOT 16
#define PLR_AUTOSAC 32
#define PLR_BLANK 64
#define PLR_BRIEF 128
#define PLR_NO_PRAY 256
#define PLR_COMBINE 512
#define PLR_PROMPT 1024
#define PLR_TELNET_GA 2048
#define PLR_HOLYLIGHT 4096
#define PLR_WIZINVIS 8192
#define PLR_BUILDER 16384 /* Is able to use the OLC */
#define PLR_SILENCE 32768
#define PLR_NO_EMOTE 65536
#define PLR_COLOUR 131072 /* Set this to get colour */
#define PLR_NO_TELL 262144
#define PLR_LOG 524288
#define PLR_DENY 1048576
#define PLR_FREEZE 2097152
#define PLR_THIEF 4194304
#define PLR_KILLER 8388608
#define PLR_NOSUMMON 16777216
#define PLR_NOVISIT 33554432
#define PLR_QUESTING 67108864 /* Player is on a quest */
#define PLR_AUTOSPLIT 134217728
#define PLR_AUTOASSIST 268435456
#define PLR_NOBLOOD 536870912
#define PLR_INCOG 1073741824
/*
* Obsolete bits.
*/
#if 0
#define PLR_AUCTION 4 /* Obsolete */
#define PLR_CHAT 256 /* Obsolete */
#define PLR_NO_SHOUT 131072 /* Obsolete */
#endif
/*
* Player flags
*/
#define PFLAG_PKOK 1
#define PFLAG_AFK 2
#define PFLAG_AMBAS 4
#define PFLAG_VAMP 8
#define PFLAG_CLAN_DIPLOMAT 16
#define PFLAG_CLAN_BOSS 32
#define PFLAG_CLAN_TREASURER 64
#define PFLAG_CLAN_ARMOURER 128
#define PFLAG_CLAN_LEADER 256
#define PFLAG_SUPER_COUNCIL 512
#define PFLAG_WEREWOLF 1024
#define PFLAG_RAGED 2048
#define PFLAG_SHIFTED 4096
#define PFLAG_RULER BIT_14
#define PFLAG_BLIND_PLAYER BIT_15
/*
* Channel bits.
*/
#define CHANNEL_AUCTION 1
#define CHANNEL_GOSSIP 2
#define CHANNEL_MUSIC 4
#define CHANNEL_IMMTALK 8
#define CHANNEL_NEWBIE 16
#define CHANNEL_QUESTION 32
#define CHANNEL_SHOUT 64
#define CHANNEL_YELL 128
#define CHANNEL_FLAME 256
#define CHANNEL_ZZZ 512
#define CHANNEL_RACE 1024
#define CHANNEL_CLAN 2048
#define CHANNEL_NOTIFY 4096
#define CHANNEL_INFO 8192
#define CHANNEL_LOG 16384
#define CHANNEL_CREATOR 32768
#define CHANNEL_ALLCLAN 65536
#define CHANNEL_ALLRACE 131072
#define CHANNEL_HERMIT 262144 /* Turns off ALL channels */
#define CHANNEL_BEEP 524288
#define CHANNEL_FAMILY 1048576
#define CHANNEL_DIPLOMAT 2097152
#define CHANNEL_CRUSADE 4194304
#define CHANNEL_REMORTTALK 8388608
#define CHANNEL_HOWL BIT_25
#define CHANNEL_ADEPT BIT_26
/* #define CHANNEL_MAUCTION 67108864 */
#define CHANNEL_OOC BIT_27
#define CHANNEL_QUEST BIT_28
#define CHANNEL_LANG BIT_29
#define CHANNEL_GAME BIT_30
/* NOTE 32 is the last allowable channel ZEN */
/* Monitor channels - for imms to select what mud-based info they receive */
#define MONITOR_CONNECT 1
#define MONITOR_AREA_UPDATE 2
#define MONITOR_AREA_BUGS 4
#define MONITOR_AREA_SAVING 8
#define MONITOR_GEN_IMM 16
#define MONITOR_GEN_MORT 32
#define MONITOR_COMBAT 64
#define MONITOR_HUNTING 128
#define MONITOR_BUILD 256
#define MONITOR_CLAN 512
#define MONITOR_OBJ 1024
#define MONITOR_MOB 2048
#define MONITOR_ROOM 4096
#define MONITOR_MAGIC 8192
#define MONITOR_BAD 16384
/*
* Hunt flags for mobs
*/
#define HUNT_WORLD 0x00000001 /* Search the whole world */
#define HUNT_OPENDOOR 0x00000002 /* Can open obstructung doors */
#define HUNT_UNLOCKDOOR 0x00000004 /* Can unlock obstructing doors */
#define HUNT_PICKDOOR 0x00000008 /* Can pick obstructing doors */
#define HUNT_INFORM 0x00000010 /* Yells while hunting */
#define HUNT_CR 0x00000020 /* Is preforming a CR */
#define HUNT_MERC 0x00000040 /* Is gonna assassinate someone */
#define HUNT_ALL 0x0000001E /* can hunt through anything */
/*
* Prototype for a mob.
* This is the in-memory version of #MOBILES.
*/
struct mob_index_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
MOB_INDEX_DATA * next;
SPEC_FUN * spec_fun;
SHOP_DATA * pShop;
AREA_DATA * area; /* MAG Mod */
char * player_name;
char * short_descr;
char * long_descr;
char * description;
sh_int vnum;
sh_int count;
sh_int killed;
sh_int sex;
sh_int level;
int act;
int affected_by;
int aggro_list;
sh_int alignment;
sh_int ac_mod; /* ac modifier */
sh_int hr_mod; /* hitroll modifier */
sh_int dr_mod; /* damroll modifier */
char * target; /* last ch to attack */
sh_int hitroll; /* Unused */
sh_int ac; /* Unused */
sh_int hitnodice; /* Unused */
sh_int hitsizedice; /* Unused */
sh_int hitplus; /* Unused */
sh_int damnodice; /* Unused */
sh_int damsizedice; /* Unused */
sh_int damplus; /* Unused */
int gold; /* Unused */
MPROG_DATA * first_mprog; /* Used by MOBprogram */
MPROG_DATA * last_mprog;
int progtypes; /* Used by MOBprogram */
int skills; /* skill flags */
int cast; /* casting flags */
int def; /* casting flags */
sh_int class;
sh_int clan;
sh_int race;
sh_int position;
int hunt_flags;
};
/*
* One character (PC or NPC).
*/
struct char_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
bool is_quitting;
CHAR_DATA * next;
CHAR_DATA * prev;
CHAR_DATA * next_in_room;
CHAR_DATA * prev_in_room;
CHAR_DATA * master;
CHAR_DATA * leader;
CHAR_DATA * fighting;
CHAR_DATA * reply;
/* CHAR_DATA * hunting;
char * huntdirs;
int huntdirno;
int huntlastvnum;
char * huntname;
int act_hunt;
OBJ_DATA * hunt_obj;
int move_to;
char * movename;*/
CHAR_DATA * hunting; /* For hunting PC's/mobs */
OBJ_DATA * hunt_obj; /* Looking for objects */
CHAR_DATA * hunt_for; /* Employer (crs, mercs) */
ROOM_INDEX_DATA * hunt_home; /* Return to after hunting */
char * searching; /* For PC's that quit */
int hunt_flags; /* Action flags */
bool switched; /* = not isnull(descriptor->original) */
CHAR_DATA * old_body; /* = descriptor->original */
int poly_level;
SPEC_FUN * spec_fun;
MOB_INDEX_DATA * pIndexData;
DESCRIPTOR_DATA * desc;
AFFECT_DATA * first_affect;
AFFECT_DATA * last_affect;
AFFECT_DATA * first_saved_aff;
AFFECT_DATA * last_saved_aff;
NOTE_DATA * pnote;
OBJ_DATA * first_carry;
OBJ_DATA * last_carry;
ROOM_INDEX_DATA * in_room;
ROOM_INDEX_DATA * was_in_room;
PC_DATA * pcdata;
char * name;
OBJ_DATA * sitting; /* What they're resting or sleeping on */
char * short_descr;
char * long_descr;
char * long_descr_orig;
char * description;
char * prompt;
char * old_prompt; /* used to hold prompt when writing */
sh_int sex;
sh_int login_sex;
sh_int class;
sh_int clan; /* need to convert from pcdata to this */
sh_int race;
sh_int level; /* For m/c this = max of levels */
int lvl[MAX_CLASS]; /* Holds details for m/c levels */
int lvl2[MAX_CLASS]; /* for remort (if any) */
int adept_level;
int sentence; /* For new legal system */
sh_int invis; /* For wizinvis imms - lvl invis to */
sh_int incog; /* Same as above except for incognito --Flar */
sh_int trust;
bool wizbit;
int played;
time_t logon;
time_t save_time;
time_t last_note;
sh_int timer;
sh_int wait;
sh_int hit;
sh_int max_hit;
sh_int mana;
sh_int max_mana;
sh_int move;
sh_int max_move;
int gold;
int balance; /* Amount of gold (if any) in bank */
int exp;
int intell_exp;
int act;
int act_build; /* for setting what ya editing */
int build_vnum; /* the current vnum for w-y-e */
int affected_by;
sh_int position;
sh_int practice;
sh_int carry_weight;
sh_int carry_number;
sh_int saving_throw;
sh_int alignment;
sh_int hitroll;
sh_int damroll;
sh_int armor;
sh_int ac_mod; /* ac modifier */
sh_int stance_ac_mod;
sh_int hr_mod; /* hitroll modifier */
sh_int stance_hr_mod;
sh_int dr_mod; /* damroll modifier */
sh_int stance_dr_mod;
char * target; /* last ch to attack */
sh_int wimpy;
int deaf;
MPROG_ACT_LIST * first_mpact; /* Used by MOBprogram */
MPROG_ACT_LIST * last_mpact;
int mpactnum; /* Used by MOBprogram */
int skills; /* Used for MOBs */
int cast;
int def;
CHAR_DATA * riding;
CHAR_DATA * rider;
/* Stuff to handle automatic quests for players */
int quest_points; /* The reason to quest! */
MAGIC_SHIELD * first_shield;
MAGIC_SHIELD * last_shield;
int stunTimer;
sh_int num_followers;
sh_int extract_timer; /* same as object timer, only use for charmies */
BRAND_DATA * current_brand;
int stance;
bool using_named_door;
};
/*
* Data which only PC's have.
*/
struct pc_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
PC_DATA * next;
int colour[MAX_COLOUR];
char * pwd;
char * bamfin;
char * room_enter;
char * room_exit;
char * bamfout;
char * title;
char * immskll;
char * host; /* Used to tell PC last login site */
sh_int failures; /* Failed logins */
sh_int clan; /* will be used to denote clan membership */
int generation; /* Used for vamps */ /* were_age for wolves */
sh_int perm_str;
sh_int perm_int;
sh_int perm_wis;
sh_int perm_dex;
sh_int perm_con;
sh_int max_str;
sh_int max_int;
sh_int max_wis;
sh_int max_dex;
sh_int max_con;
sh_int mod_str;
sh_int mod_int;
sh_int mod_wis;
sh_int mod_dex;
sh_int mod_con;
sh_int condition [3];
int bloodlust; /* rage points for wolves */
int bloodlust_max;
sh_int pagelen;
sh_int learned [MAX_SKILL];
char * header; /* header used for message */
char * message; /* message for board in progress */
char * alias_name[MAX_ALIASES];
char * alias[MAX_ALIASES];
char * who_name; /* To show on who name */
int pkills;
int pkilled;
int mkills;
int mkilled;
int pflags;
char * lastlogin;
sh_int order[MAX_CLASS]; /* Class Order */
sh_int index[MAX_CLASS]; /* the order of each class! */
int monitor; /* monitor channel for imms */
int vamp_level; /* were level */
int vamp_bloodlust_max;
int vamp_skill_num;
int vamp_skill_max;
int vamp_bloodline;
int vamp_exp;
int vamp_pracs;
sh_int has_exp_fix;
sh_int quest_points;
char * ignore_list[MAX_IGNORES]; /* Ignore this person */
sh_int recall_vnum;
int mana_from_gain; /* saves non-item oriented mana total */
int hp_from_gain; /* same for hitpoints */
int move_from_gain;
long imc; /* IMC channel flags */
char * rreply; /* IMC reply-to */
char * rreply_name; /* IMC reply-to shown to char */
char * load_msg;
char hicol;
char dimcol;
sh_int ruler_rank;
char * pedit_state;
char * pedit_string[5];
};
/*
* MOBprogram block
*/
struct mob_prog_act_list
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
MPROG_ACT_LIST * next;
MPROG_ACT_LIST * prev;
char * buf;
CHAR_DATA * ch;
OBJ_DATA * obj;
void * vo;
};
struct mob_prog_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
MPROG_DATA *next;
MPROG_DATA *prev;
int type;
char * arglist;
char * comlist;
char * filename;
};
extern bool MOBtrigger;
#define ERROR_PROG -1
#define IN_FILE_PROG 0
#define ACT_PROG 1
#define SPEECH_PROG 2
#define RAND_PROG 4
#define FIGHT_PROG 8
#define DEATH_PROG 16
#define HITPRCNT_PROG 32
#define ENTRY_PROG 64
#define GREET_PROG 128
#define ALL_GREET_PROG 256
#define GIVE_PROG 512
#define BRIBE_PROG 1024
/* Types of interactions to check */
#define CHECKS_NONE BIT_0
#define CHECKS_CLAN BIT_1
#define CHECKS_RACE BIT_2
#define CHECKS_LEVEL BIT_3
#define CHECKS_REP_GEN BIT_4
#define CHECKS_REP_SHOP BIT_5
#define CHECKS_REP_ROYAL BIT_6
#define CHECKS_REP_UNDEAD BIT_7
#define CHECKS_REP_NATURE BIT_8
#define CHECKS_REP_HOLY BIT_9
#define CHECKS_REP_CLAN BIT_10
#define CHECKS_REP_UNDERWORLD BIT_11
#define CHECKS_REP_LAW BIT_12
#define ACTION_NONE BIT_0
#define ACTION_ATTACK BIT_1
#define ACTION_HAIL BIT_2
#define ACTION_BLOCK BIT_3
#define ACTION_AID BIT_4
#define ACTION_HEAL BIT_5
#define ACTION_TRANSFER BIT_6
#define ACTION_FLEE BIT_7
#define ACTION_ALARM BIT_8
#define ACTION_COWER BIT_9
#define ACTION_REFUSE BIT_10
/*
* Liquids.
*/
#define LIQ_WATER 0
#define LIQ_MAX 17
struct liq_type
{
char * liq_name;
char * liq_color;
sh_int liq_affect[3];
};
/*
* Extra description data for a room or object.
*/
struct extra_descr_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
EXTRA_DESCR_DATA * next; /* Next in list */
EXTRA_DESCR_DATA * prev; /* Prev in list */
char * keyword; /* Keyword in look/examine */
char * description; /* What to see */
};
struct trigger_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
TRIGGER_DATA * next;
TRIGGER_DATA * prev;
char * message; /* properly formatted act format string to use in a TO_ROOM */
int trigger; /* command used on object */
int event; /* trigger function index to be called */
int data; /* data used in the event call..vnum, spell index, etc. */
int register_data; /* for storing generic info */
int on_value; /* for conditional triggers..happens when register is higher than
on_value */
int at_vnum; /* for at another room triggers. event will happen there */
bool force_message; /* Always does an act message, in addition to trigger */
char * spell_name;
};
struct obj_index_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
OBJ_INDEX_DATA * next;
EXTRA_DESCR_DATA * first_exdesc;
EXTRA_DESCR_DATA * last_exdesc;
OBJ_FUN * obj_fun;
AFFECT_DATA * first_apply;
AFFECT_DATA * last_apply;
/* MAG Mod */
AREA_DATA * area;
char * owner;
char * name;
sh_int level;
char * short_descr;
char * description;
sh_int vnum;
int item_type;
int extra_flags;
int wear_flags;
/* class_flags changed to item_apply for magic apply, etc */
int item_apply;
sh_int count;
sh_int weight;
int cost; /* Unused */
int value [4];
TRIGGER_DATA * first_trigger;
TRIGGER_DATA * last_trigger;
};
/*
* One object.
*/
struct obj_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
OBJ_DATA * next;
OBJ_DATA * prev;
OBJ_DATA * next_in_carry_list; /* carry list is the list on a char, or in a container */
OBJ_DATA * prev_in_carry_list;
OBJ_DATA * first_in_carry_list;
OBJ_DATA * last_in_carry_list;
OBJ_DATA * next_in_room;
OBJ_DATA * prev_in_room;
OBJ_DATA * first_in_room;
OBJ_DATA * last_in_room;
OBJ_DATA * first_content;
OBJ_DATA * last_content;
OBJ_DATA * next_content;
OBJ_DATA * prev_content;
OBJ_DATA * in_obj;
OBJ_FUN * obj_fun;
CHAR_DATA * carried_by;
EXTRA_DESCR_DATA * first_exdesc;
EXTRA_DESCR_DATA * last_exdesc;
AFFECT_DATA * first_apply;
AFFECT_DATA * last_apply;
OBJ_INDEX_DATA * pIndexData;
ROOM_INDEX_DATA * in_room;
char * owner;
char * name;
char * short_descr;
char * description;
int item_type;
int extra_flags;
int wear_flags;
int item_apply;
int wear_loc;
sh_int weight;
int cost;
sh_int level;
sh_int timer;
int value [4];
sh_int condition; /* % value for condition */
};
/*
* Exit data.
*/
struct exit_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
EXIT_DATA * next;
ROOM_INDEX_DATA * to_room;
sh_int vnum;
sh_int exit_info;
sh_int key;
char * keyword;
char * description;
};
/*
* Reset commands:
* '*': comment
* 'M': read a mobile
* 'O': read an object
* 'P': put object in object
* 'G': give object to mobile
* 'E': equip object to mobile
* 'D': set state of door
* 'R': randomize room exits
* 'S': stop (end of list)
*/
/*
* Area-reset definition.
*/
struct reset_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
RESET_DATA * next;
RESET_DATA * prev;
char command;
sh_int ifflag;
sh_int arg1;
sh_int arg2;
sh_int arg3;
char * notes;
char * auto_message; /* Ugly - wasteful of space. */
};
#define AREA_PAYAREA 1
#define AREA_TELEPORT 2
#define AREA_BUILDING 4
#define AREA_NOSHOW 8 /* Show area name on 'areas' command? */
#define AREA_NO_ROOM_AFF 16
/*
* Area definition.
*/
/*
* Npc Interaction stuff Zen
*/
struct queued_interact_list
{
bool is_free;
QUEUED_INTERACT_LIST * next;
QUEUED_INTERACT_LIST * prev;
CHAR_DATA * mob;
};
struct influence_list
{
bool is_free;
INFLUENCE_LIST * next;
INFLUENCE_LIST * prev;
INFLUENCE_DATA * this_one;
};
struct control_list
{
bool is_free;
CONTROL_LIST * next;
CONTROL_LIST * prev;
CONTROL_DATA * this_one;
};
struct ruler_list
{
bool is_free;
RULER_LIST * next;
RULER_LIST * prev;
RULER_DATA * this_one;
};
struct control_data
{
bool is_free;
char * keyword;
AREA_DATA * area;
RULER_DATA * ruler; /* what entity controls the area */
INFLUENCE_LIST * first_influence; /* what current influences are for the area */
INFLUENCE_LIST * last_influence;
INTERACT_DATA * first_interact; /* tells the mobs what to do */
INTERACT_DATA * last_interact;
};
struct influence_data
{
bool is_free;
RULER_DATA * actor;
int influence;
};
struct interact_data
{
bool is_free;
INTERACT_DATA * next;
INTERACT_DATA * prev;
int type;
int min_value;
int max_value;
int action;
char * say;
CHAR_DATA * target;
};
#define RULER_NONE BIT_0
#define RULER_SOLO BIT_1
#define RULER_GROUP BIT_2
#define RULER_MALE BIT_3
#define RULER_FEMALE BIT_4
#define RULER_NEUTRAL BIT_5
struct ruler_data
{
bool is_free;
RULER_DATA * next;
RULER_DATA * prev;
char * name;
sh_int ruler_rank;
char * affiliation_name;
sh_int affiliation_index;
char * keywords;
sh_int flags;
CONTROL_LIST * first_control;
CONTROL_LIST * last_control;
};
struct area_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
AREA_DATA * next;
AREA_DATA * prev;
RESET_DATA * first_reset;
RESET_DATA * last_reset;
char * name;
sh_int age;
sh_int nplayer;
/* Saving to envy mod, to renumber vnums! */
int offset;
/* MAG mod */
int modified;
int min_vnum;
int max_vnum;
int area_num;
char * owner;
char * can_read;
char * can_write;
int gold;
char * filename;
int flags;
int aggro_list;
BUILD_DATA_LIST * first_area_room;
BUILD_DATA_LIST * last_area_room;
BUILD_DATA_LIST * first_area_help_text;
BUILD_DATA_LIST * last_area_help_text;
BUILD_DATA_LIST * first_area_object;
BUILD_DATA_LIST * last_area_object;
BUILD_DATA_LIST * first_area_mobile;
BUILD_DATA_LIST * last_area_mobile;
BUILD_DATA_LIST * first_area_mobprog;
BUILD_DATA_LIST * last_area_mobprog;
BUILD_DATA_LIST * first_area_shop;
BUILD_DATA_LIST * last_area_shop;
BUILD_DATA_LIST * first_area_specfunc;
BUILD_DATA_LIST * last_area_specfunc;
BUILD_DATA_LIST * first_area_objfunc;
BUILD_DATA_LIST * last_area_objfunc;
/* BUILD_DATA_LIST * spec_funs; in mob index data. */
/* BUILD_DATA_LIST * area_shops; in mob index data. */
/* BUILD_DATA_LIST * resets; already there! */
CONTROL_DATA * control;
char * keyword;
sh_int min_level;
sh_int max_level;
char * level_label;
sh_int reset_rate;
char * reset_msg;
};
/*
* Room type.
*/
struct room_index_data
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
ROOM_INDEX_DATA * next;
CHAR_DATA * first_person;
CHAR_DATA * last_person;
OBJ_DATA * first_content;
OBJ_DATA * last_content;
EXTRA_DESCR_DATA * first_exdesc;
EXTRA_DESCR_DATA * last_exdesc;
AREA_DATA * area;
EXIT_DATA * exit [6];
char * name;
char * description;
char * auto_message; /* If != NULL, send_to_room each tick */
sh_int block_timer;
sh_int vnum;
int room_flags;
sh_int light;
sh_int sector_type;
BUILD_DATA_LIST * first_room_reset;
BUILD_DATA_LIST * last_room_reset;
/* -S- mod... don't save this with OLC :P */
ROOM_AFFECT_DATA * first_room_affect;
ROOM_AFFECT_DATA * last_room_affect;
int affected_by;
/* CHAR_DATA * people; */
MARK_LIST_MEMBER *first_mark_list;
MARK_LIST_MEMBER *last_mark_list;
};
/* Big MAG mod */
/* Area building stuff */
struct build_data_list /* Used for storing area file data. */
{
bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */
BUILD_DATA_LIST * next;
BUILD_DATA_LIST * prev;
void * data;
};
struct mobprog_item /* For re-creating #MOBPROGS section */
{
MOB_INDEX_DATA * mob;
char * filename;
};
struct lookup_type
{
char * text;
unsigned long int value;
int cost; /* if == NO_USE, only creators can set. */
};
/*
* Types of attacks.
* Must be non-overlapping with spell/skill types,
* but may be arbitrary beyond that.
*/
#define TYPE_MARTIAL -3 /* for martial arts */
#define TYPE_UNDEFINED -2
#define TYPE_HIT 1000
/*
* Target types.
*/
#define TAR_IGNORE 0
#define TAR_CHAR_OFFENSIVE 1
#define TAR_CHAR_DEFENSIVE 2
#define TAR_CHAR_SELF 3
#define TAR_OBJ_INV 4
/* Used as flags in skill_table */
#define MORTAL 1
#define REMORT 2
#define ADEPT 3
#define NORM 1
#define VAMP 2
#define WOLF 3
/*
* Quest mob personalities
*/
#define QUEST_RUDE 1
#define QUEST_NICE 2
#define QUEST_WIMPY 4
#define QUEST_COOL 8
#define QUEST_MEAN 16
/*
* Skills include spells as a particular case.
*/
struct skill_type
{
sh_int flag1; /* mort or remort? */
sh_int flag2; /* normal and/or vamp? */
char * name; /* Name of skill */
sh_int skill_level[MAX_CLASS]; /* Level needed by class */
SPELL_FUN * spell_fun; /* Spell pointer (for spells) */
sh_int target; /* Legal targets */
sh_int minimum_position; /* Position for caster / user */
sh_int * pgsn; /* Pointer to associated gsn */
sh_int slot; /* Slot for #OBJECT loading */
sh_int min_mana; /* Minimum mana used */
sh_int beats; /* Waiting time after use */
char * noun_damage; /* Damage message */
char * msg_off; /* Wear off message */
char * room_off; /* Wear off msg TO_ROOM */
};
/*
* These are skill_lookup return values for common skills and spells.
*/
extern sh_int gsn_martial_arts; /* For unarmed fighting */
extern sh_int gsn_stake;
extern sh_int gsn_dualwield;
extern sh_int gsn_stun;
extern sh_int gsn_feed;
extern sh_int gsn_shadow;
extern sh_int gsn_appraise;
extern sh_int gsn_climb;
extern sh_int gsn_find_doors;
extern sh_int gsn_smash;
extern sh_int gsn_notrip;
extern sh_int gsn_nodisarm;
extern sh_int gsn_trip;
extern sh_int gsn_dirt;
extern sh_int gsn_bash;
extern sh_int gsn_fourth_attack;
extern sh_int gsn_shield_block;
extern sh_int gsn_beserk;
extern sh_int gsn_circle;
extern sh_int gsn_backstab;
extern sh_int gsn_dodge;
extern sh_int gsn_hide;
extern sh_int gsn_hunt;
extern sh_int gsn_peek;
extern sh_int gsn_pick_lock;
extern sh_int gsn_sneak;
extern sh_int gsn_steal;
extern sh_int gsn_punch;
extern sh_int gsn_headbutt;
extern sh_int gsn_knee;
extern sh_int gsn_disarm;
extern sh_int gsn_enhanced_damage;
extern sh_int gsn_kick;
extern sh_int gsn_parry;
extern sh_int gsn_rescue;
extern sh_int gsn_second_attack;
extern sh_int gsn_third_attack;
extern sh_int gsn_blindness;
extern sh_int gsn_charm_person;
extern sh_int gsn_curse;
extern sh_int gsn_invis;
extern sh_int gsn_mass_invis;
extern sh_int gsn_poison;
extern sh_int gsn_sleep;
extern sh_int gsn_disguise;
extern sh_int gsn_instruct;
extern sh_int gsn_teach;
extern sh_int gsn_adrenaline;
extern sh_int gsn_frenzy;
extern sh_int gsn_emotion_control;
extern sh_int gsn_fifth_attack;
extern sh_int gsn_sixth_attack;
extern sh_int gsn_target;
extern sh_int gsn_charge;
extern sh_int gsn_unit_tactics;
extern sh_int gsn_mount; /* for mount skill */
extern sh_int gsn_imprint;
extern sh_int gsn_scent;
extern sh_int gsn_scout;
/*
* Utility macros.
*/
#define UMIN(a, b) ((a) < (b) ? (a) : (b))
#define UMAX(a, b) ((a) > (b) ? (a) : (b))
#define URANGE(a, b, c) ((b) < (a) ? (a) : ((b) > (c) ? (c) : (b)))
#define LOWER(c) ((c) >= 'A' && (c) <= 'Z' ? (c)+'a'-'A' : (c))
#define UPPER(c) ((c) >= 'a' && (c) <= 'z' ? (c)+'A'-'a' : (c))
#define IS_SET(flag, bit) ((flag) & (bit))
#define SET_BIT(var, bit) ((var) |= (bit))
#define REMOVE_BIT(var, bit) ((var) &= ~(bit))
/*
* Character macros.
*/
#define IS_VAMP(ch) (IS_NPC(ch) ? IS_SET(ch->act, ACT_VAMPIRE) : IS_SET(ch->pcdata->pflags,PFLAG_VAMP) )
#define IS_UNDEAD(ch) (IS_NPC(ch) ? IS_SET(ch->act, ACT_UNDEAD ) : FALSE )
#define IS_NPC(ch) (IS_SET((ch)->act, ACT_IS_NPC))
#define IS_IMMORTAL(ch) (get_trust(ch) >= LEVEL_IMMORTAL)
#define IS_HERO(ch) (get_trust(ch) >= LEVEL_HERO)
#define IS_AFFECTED(ch, sn) (IS_SET((ch)->affected_by, (sn)))
/* #define IS_WERE(ch) (IS_NPC(ch) ? IS_SET(ch->act, ACT_WEREWOLF) : IS_SET(ch->pcdata->pflags,PFLAG_WEREWOLF) )
*/
#define IS_GOOD(ch) (ch->alignment >= 350)
#define IS_EVIL(ch) (ch->alignment <= -350)
#define IS_NEUTRAL(ch) (!IS_GOOD(ch) && !IS_EVIL(ch))
#define IS_AWAKE(ch) (ch->position > POS_SLEEPING)
#define GET_AC(ch) ( IS_NPC(ch) ? (REAL_AC( ch ) + ch->ac_mod) : REAL_AC( ch ) + ch->stance_ac_mod )
#define REAL_AC(ch) ((ch)->armor + ( IS_AWAKE(ch) \
? ( IS_NPC( ch ) \
? ( dex_app[get_curr_dex(ch)].defensive * get_psuedo_level( ch )/20 ) \
: ( dex_app[get_curr_dex(ch)].defensive * get_psuedo_level( ch )/10 ) ): 0 ))
#define IS_WOLF(ch) (IS_NPC(ch) ? FALSE : IS_SET(ch->pcdata->pflags, PFLAG_WEREWOLF) )
#define IS_SHIFTED(ch) (IS_NPC(ch) ? FALSE : IS_SET( ch->pcdata->pflags, PFLAG_SHIFTED ) ? TRUE : FALSE )
#define IS_RAGED(ch) (IS_NPC(ch) ? FALSE : IS_SET( ch->pcdata->pflags, PFLAG_RAGED ) ? TRUE : FALSE )
/* Added bonus to hit and dam for higher levl players */
/* High level naked players should still be able to fight ok */
#define GET_HITROLL(ch) ( IS_NPC(ch) ? (REAL_HITROLL(ch) + ch->hr_mod + (get_psuedo_level( ch ) / 4 )) : REAL_HITROLL(ch)+(ch->level/8) + ch->stance_hr_mod )
#define REAL_HITROLL(ch) ((ch)->hitroll+ (str_app[get_curr_str(ch)].tohit * get_psuedo_level( ch )/10) )
#define GET_DAMROLL(ch) ( IS_NPC(ch) ? (REAL_DAMROLL(ch) + ch->dr_mod + (ch->level / 3 )) : REAL_DAMROLL(ch)+(ch->level/10) + ch->stance_dr_mod )
#define REAL_DAMROLL(ch) ((ch)->damroll+( str_app[get_curr_str(ch)].todam * get_psuedo_level( ch ) /10 ) )
#define IS_OUTSIDE(ch) (!IS_SET( (ch)->in_room->room_flags, ROOM_INDOORS))
#define WAIT_STATE(ch, npulse) ((ch)->wait = UMAX((ch)->wait, (npulse)))
#define MANA_COST(ch, sn) (IS_NPC(ch) ? 0 : UMAX ( skill_table[sn].min_mana, 100 / (2 + ch->level - skill_table[sn].skill_level[ch->class] ) ) )
#define IS_RIDING(ch) (!IS_NPC(ch) && ((ch)->riding))
/*
* Object macros.
*/
#define CAN_WEAR(obj, part) (IS_SET((obj)->wear_flags, (part)))
#define IS_OBJ_STAT(obj, stat) (IS_SET((obj)->extra_flags, (stat)))
/*
* Description macros.
*/
#define PERS(ch, looker) ( can_see( looker, (ch) ) ? ( IS_NPC(ch) ? (ch)->short_descr : (IS_WOLF(ch) && (IS_SHIFTED(ch) || IS_RAGED(ch))) ? "A Large @@bWolf@@N" :(ch)->name ) : IS_IMMORTAL( ch ) ? "A Mystical Being" : "Someone" )
#define NAME(ch) ( IS_NPC(ch) ? (ch)->short_descr : (ch)->name )
/* Added stuff - Flar */
#define CH(descriptor) ((descriptor)->original ? \
(descriptor)->original : (descriptor)->character)
/*
* Linked list macros, -- Altrag
*/
/* Regular linking of double-linked list */
#define LINK(link, first, last, next, prev) \
do { \
if ( (link)->is_free == TRUE ) hang("LINK: link is FREE!"); \
if ( (link)->is_free != FALSE ) hang("LINK: link is corrupted!"); \
if ( (link)->prev || (link)->next ) hang("LINK: link already in list?"); \
if ( (last) && (last)->next ) hang("LINK: last->next NON-NULL!"); \
if ( !(first) ) \
(first) = (link); \
else \
(last)->next = (link); \
(link)->next = NULL; \
(link)->prev = (last); \
(last) = (link); \
} while(0)
/* Link at the head of the list rather than the tail. Double linked */
#define TOPLINK(link, first, last, next, prev) \
do { \
if ( (link)->is_free == TRUE ) hang("TOPLINK: link is FREE!"); \
if ( (link)->is_free != FALSE ) hang("TOPLINK: link is corrupted!"); \
if ( (link)->prev || (link)->next ) hang("TOPLINK: link already in list?"); \
if ( (first) && (first)->prev ) hang("TOPLINK: first->prev NON-NULL!"); \
if ( !(last) ) \
(last) = (link); \
else \
(first)->prev = (link); \
(link)->prev = NULL; \
(link)->next = (first); \
(first) = (link); \
} while(0)
/* Insert link before ref link */
#define LINK_BEFORE(link, ref, first, last, next, prev) \
do { \
if ( (link)->is_free == TRUE ) hang("LINK_BEFORE: link is FREE!"); \
if ( (link)->is_free != FALSE ) hang("LINK_BEFORE: link is corrupted!"); \
if ( (link)->prev || (link)->next ) hang("LINK_BEFORE: link already in list?"); \
if ( !(ref) ) hang("LINK_BEFORE: ref is NULL!"); \
if ( (ref)->is_free == TRUE ) hang("LINK_BEFORE: ref is FREE!"); \
if ( (ref)->is_free != FALSE ) hang("LINK_BEFORE: ref is corrupted!"); \
(link)->next = (ref); \
(link)->prev = (ref)->prev; \
if ( !(ref)->prev ) \
(first) = (link); \
else \
((ref)->prev)->next = (link); \
(ref)->prev = (link); \
} while (0)
/* Insert link after ref link */
#define LINK_AFTER(link, ref, first, last, next, prev) \
do { \
if ( (link)->is_free == TRUE ) hang("LINK_AFTER: link is FREE!"); \
if ( (link)->is_free != FALSE ) hang("LINK_AFTER: link is corrupted!"); \
if ( (link)->prev || (link)->next ) hang("LINK_AFTER: link already in list?"); \
if ( !(ref) ) hang("LINK_AFTER: ref is NULL!"); \
if ( (ref)->is_free == TRUE ) hang("LINK_AFTER: ref is FREE!"); \
if ( (ref)->is_free != FALSE ) hang("LINK_AFTER: ref is corrupted!"); \
(link)->prev = (ref); \
(link)->next = (ref)->next; \
if ( !(ref)->next ) \
(last) = (link); \
else \
((ref)->next)->prev = (link); \
(ref)->next = (link); \
} while (0)
/* Unlink a double linked list */
#define UNLINK(link, first, last, next, prev) \
do { \
if ( (link)->is_free == TRUE ) hang("UNLINK: link is FREE!"); \
if ( (link)->is_free != FALSE ) hang("UNLINK: link is corrupted!"); \
if ( (link)->prev && (((link)->prev)->next != (link)) ) \
hang("UNLINK: link->prev->next corrupted!"); \
if ( (link)->next && (((link)->next)->prev != (link)) ) \
hang("UNLINK: link->next->prev corrupted!"); \
if ( !(link)->next ) \
(last) = (link)->prev; \
else \
(link)->next->prev = (link)->prev; \
if ( !(link)->prev ) \
(first) = (link)->next; \
else \
(link)->prev->next = (link)->next; \
(link)->prev = NULL; \
(link)->next = NULL; \
} while(0)
/* Link to the end of a single-linked list */
#define SING_LINK(link, first, next, DATA_TYPE) \
do { \
if ( !(first) ) \
(first) = (link); \
else \
{ \
DATA_TYPE *last; \
for ( last = (first); last->next; last = last->next ) \
; \
last->next = (link); \
} \
(link)->next = NULL; \
} while(0)
/* Link to head of a single-linked list (normal linking) */
#define SING_TOPLINK(link, first, next) \
do { \
(link)->next = (first); \
(first) = (link); \
} while(0)
/* Unlink a single linked list */
#define SING_UNLINK(link, first, next, DATA_TYPE) \
do { \
if ( (link) == (first) ) \
(first) = (link)->next; \
else \
{ \
DATA_TYPE *prev; \
for ( prev = (first); prev; prev = prev->next ) \
if ( prev->next == (link) ) \
break; \
if ( prev != NULL ) \
prev->next = (link)->next; \
else \
bug("Sing_unlink: link not in list.", 0); \
} \
} while(0)
/* Link to end of a half-linked list */
/* Half linked lists have a LAST pointer, but not a PREV pointer, making
them approximately halfway between a single linked list and a double
linked list. -- Altrag */
#define HALF_LINK(link, first, last, next) \
do { \
if ( !(last) ) \
(first) = (link); \
else \
(last)->next = (link); \
(link)->next = NULL; \
(last) = (link); \
} while(0)
/* Link to head of a half-linked list. */
#define HALF_TOPLINK(link, first, last, next) \
do { \
if ( (last) == (first) ) \
(last) = (link); \
(link)->next = (first); \
(first) = (link); \
} while(0)
/* Unlink a half-linked list. */
#define HALF_UNLINK(link, first, last, next, DATA_TYPE) \
do { \
if ( (link) == (first) ) \
{ \
(first) = (link)->next; \
if ( (link) == (last) ) \
(last) = NULL; \
} \
else \
{ \
DATA_TYPE *prev; \
for ( prev = (first); prev; prev = prev->next ) \
if ( prev->next == (link) ) \
break; \
if ( prev != NULL ) \
{ \
prev->next = (link)->next; \
if ( (link) == (last) ) \
(last) = prev; \
} \
else \
bug("Half_unlink: link not in list.", 0); \
} \
} while(0)
/*
* Miscellaneous macros.
*/
/* spec: macro-ised getmem as a wrapper around _getmem for mem_log handling */
#define getmem(size) _getmem(size,_caller,1)
#define qgetmem(size) _getmem(size,_caller,0)
/* This one goes as a #define in merc.h.. dont worry.. itll work.. :) */
/* spec: log all dispose's if mem_log==TRUE - also nuke trailing ; */
/* spec: add dispose override, too */
#define _dispose(mem,size,log) \
do { \
if ( ! (mem) ) \
{ \
bug("Disposing NULL memory",0); \
return; \
} \
if (log&&mem_log) logf("dispose(%p) from %s:%d", (mem), __FILE__, __LINE__); \
free((mem)); \
(mem) = NULL; \
} while(0)
#define dispose(mem,size) _dispose(mem,size,1)
#define qdispose(mem,size) _dispose(mem,size,0)
/*
* Miscellaneous macros.
*/
/*
* Structure for a command in the command lookup table.
*/
struct cmd_type
{
char * const name;
DO_FUN * do_fun;
sh_int position;
sh_int level;
sh_int log;
};
/*
* Structure for a social in the socials table.
*/
struct social_type
{
char * name;
char * char_no_arg;
char * others_no_arg;
char * char_found;
char * others_found;
char * vict_found;
char * char_auto;
char * others_auto;
};
/*
* Global constants.
*/
extern const struct str_app_type str_app [26];
extern const struct int_app_type int_app [26];
extern const struct wis_app_type wis_app [26];
extern const struct dex_app_type dex_app [26];
extern const struct con_app_type con_app [26];
extern const struct colour_type colour_table [MAX_COLOUR];
extern const struct ansi_type ansi_table [MAX_ANSI];
extern const struct class_type class_table [MAX_CLASS];
extern const struct class_type remort_table [MAX_CLASS];
extern const struct race_type race_table [MAX_RACE];
extern const struct exp_type exp_table [141];
extern const struct clan_type clan_table [MAX_CLAN];
extern const struct cmd_type cmd_table [];
extern const struct liq_type liq_table [LIQ_MAX];
extern const struct skill_type skill_table [MAX_SKILL];
extern struct social_type *social_table;
extern char * const title_table [MAX_CLASS]
[36]
[2];
/* spec: log all calls to getmem/dispose when set */
extern bool mem_log;
extern const struct stance_app_type stance_app [MAX_STANCE];
/*
extern const struct family_name_type family_name [MAX_FAMILY];
*/
/*
* Global variables.
*/
extern char bug_buf [];
extern time_t current_time;
extern bool fLogAll;
extern FILE * fpReserve;
extern KILL_DATA kill_table [];
extern char log_buf [];
extern TIME_INFO_DATA time_info;
extern WEATHER_DATA weather_info;
extern DESCRIPTOR_DATA * descriptor_list;
extern CHAR_DATA * char_list;
extern ROOM_INDEX_DATA * room_index_hash [ MAX_KEY_HASH ];
/* Various linked lists head/tail pointer declarations. -- Altrag */
#include "lists.h"
/*
* Command functions.
* Defined in act_*.c (mostly).
*/
/**************************
* This bunch of commands *
* added by Stephen ;) *
**************************/
DECLARE_DO_FUN( do_test );
DECLARE_DO_FUN( do_exlist );
DECLARE_DO_FUN( do_vlist );
DECLARE_DO_FUN( do_rename );
DECLARE_DO_FUN( do_sdelete );
DECLARE_DO_FUN( do_accept );
DECLARE_DO_FUN( do_adapt );
DECLARE_DO_FUN( do_affected );
DECLARE_DO_FUN( do_afk );
DECLARE_DO_FUN( do_alias );
DECLARE_DO_FUN( do_appraise );
DECLARE_DO_FUN( build_arealist );
DECLARE_DO_FUN( do_ask );
DECLARE_DO_FUN( do_assassinate );
DECLARE_DO_FUN( do_assist );
DECLARE_DO_FUN( do_bamfin );
DECLARE_DO_FUN( do_bamfout );
DECLARE_DO_FUN( do_bank );
DECLARE_DO_FUN( do_banish );
DECLARE_DO_FUN( do_bash );
DECLARE_DO_FUN( do_beep );
DECLARE_DO_FUN( do_beserk );
DECLARE_DO_FUN( do_bid );
DECLARE_DO_FUN( do_rbid );
DECLARE_DO_FUN( do_mbid );
DECLARE_DO_FUN( do_cdonate );
DECLARE_DO_FUN( do_circle );
DECLARE_DO_FUN( do_clan );
DECLARE_DO_FUN( do_clan_list );
DECLARE_DO_FUN( do_clan_recall );
DECLARE_DO_FUN( do_clutch );
DECLARE_DO_FUN( do_clutchinfo );
DECLARE_DO_FUN( do_colist );
DECLARE_DO_FUN( do_colour );
DECLARE_DO_FUN( do_creator );
DECLARE_DO_FUN( do_cset );
DECLARE_DO_FUN( do_cwhere );
DECLARE_DO_FUN( do_deathmatc );
DECLARE_DO_FUN( do_deathmatch );
DECLARE_DO_FUN( do_diagnose );
DECLARE_DO_FUN( do_dirt );
DECLARE_DO_FUN( do_dog );
DECLARE_DO_FUN( do_donate );
DECLARE_DO_FUN( do_edit );
DECLARE_DO_FUN( do_enter );
DECLARE_DO_FUN( do_feed );
DECLARE_DO_FUN( do_fights );
DECLARE_DO_FUN( do_finger );
DECLARE_DO_FUN( do_flame );
DECLARE_DO_FUN( do_gain );
DECLARE_DO_FUN( do_gold );
DECLARE_DO_FUN( do_gossip );
DECLARE_DO_FUN( do_ooc );
DECLARE_DO_FUN( do_espanol );
DECLARE_DO_FUN( do_francais );
DECLARE_DO_FUN( do_quest2 );
DECLARE_DO_FUN( do_guild );
DECLARE_DO_FUN( do_halls );
DECLARE_DO_FUN( do_headbutt );
DECLARE_DO_FUN( do_knee );
DECLARE_DO_FUN( do_heal );
DECLARE_DO_FUN( do_hunt );
DECLARE_DO_FUN( do_resetpassword);
DECLARE_DO_FUN( do_iscore );
DECLARE_DO_FUN( do_isnoop );
DECLARE_DO_FUN( do_iwhere );
DECLARE_DO_FUN( do_leav );
DECLARE_DO_FUN( do_leave );
DECLARE_DO_FUN( do_lhunt );
DECLARE_DO_FUN( do_make );
DECLARE_DO_FUN( do_monitor );
DECLARE_DO_FUN( do_mpcr );
DECLARE_DO_FUN( do_music );
DECLARE_DO_FUN( do_newbie );
DECLARE_DO_FUN( do_nopray );
DECLARE_DO_FUN( do_pemote );
DECLARE_DO_FUN( do_players );
DECLARE_DO_FUN( do_pray );
DECLARE_DO_FUN( do_punch );
DECLARE_DO_FUN( do_quest );
DECLARE_DO_FUN( do_race );
DECLARE_DO_FUN( do_race_list );
DECLARE_DO_FUN( do_retrieve );
DECLARE_DO_FUN( do_scan );
DECLARE_DO_FUN( do_setclass );
DECLARE_DO_FUN( do_smash );
DECLARE_DO_FUN( do_shadowform );
DECLARE_DO_FUN( do_shelp );
DECLARE_DO_FUN( do_sstat );
DECLARE_DO_FUN( do_stake );
DECLARE_DO_FUN( do_status );
DECLARE_DO_FUN( do_stun );
DECLARE_DO_FUN( do_togbuild );
DECLARE_DO_FUN( do_togleader );
DECLARE_DO_FUN( do_tongue );
DECLARE_DO_FUN( do_trip );
DECLARE_DO_FUN( do_whisper );
DECLARE_DO_FUN( do_whois );
DECLARE_DO_FUN( do_whoname );
DECLARE_DO_FUN( do_worth );
DECLARE_DO_FUN( do_zzz );
DECLARE_DO_FUN( do_listspells );
DECLARE_DO_FUN( do_reward );
DECLARE_DO_FUN( do_togcouncil );
DECLARE_DO_FUN( do_council );
DECLARE_DO_FUN( do_rename );
DECLARE_DO_FUN( do_sdelete );
/* And by MAG
*
*/
DECLARE_DO_FUN( build_interpret );
DECLARE_DO_FUN( do_build );
DECLARE_DO_FUN( do_delete );
DECLARE_DO_FUN( do_read );
DECLARE_DO_FUN( do_savearea );
DECLARE_DO_FUN( do_write );
DECLARE_DO_FUN( do_mfindlev );
DECLARE_DO_FUN( do_check_areas );
DECLARE_DO_FUN( do_check_area );
DECLARE_DO_FUN( do_ofindlev );
DECLARE_DO_FUN( do_howl );
/****************************
* Now the 'standard' stuff:*
****************************/
DECLARE_DO_FUN( do_advance );
DECLARE_DO_FUN( do_allow );
DECLARE_DO_FUN( do_answer );
DECLARE_DO_FUN( do_areas );
DECLARE_DO_FUN( do_at );
DECLARE_DO_FUN( do_auction );
DECLARE_DO_FUN( do_rauction );
DECLARE_DO_FUN( do_mauction );
DECLARE_DO_FUN( do_auto );
DECLARE_DO_FUN( do_autoexit );
DECLARE_DO_FUN( do_autoloot );
DECLARE_DO_FUN( do_autosac );
DECLARE_DO_FUN( do_autosplit );
DECLARE_DO_FUN( do_autoassist );
DECLARE_DO_FUN( do_backstab );
DECLARE_DO_FUN( do_ban );
DECLARE_DO_FUN( do_blank );
DECLARE_DO_FUN( do_brandish );
DECLARE_DO_FUN( do_brief );
DECLARE_DO_FUN( do_bug );
DECLARE_DO_FUN( do_buy );
DECLARE_DO_FUN( do_cast );
DECLARE_DO_FUN( do_channels );
DECLARE_DO_FUN( do_close );
DECLARE_DO_FUN( do_combine );
DECLARE_DO_FUN( do_commands );
DECLARE_DO_FUN( do_compare );
DECLARE_DO_FUN( do_config );
DECLARE_DO_FUN( do_consider );
DECLARE_DO_FUN( do_credits );
DECLARE_DO_FUN( do_deny );
DECLARE_DO_FUN( do_description );
DECLARE_DO_FUN( do_disarm );
DECLARE_DO_FUN( do_disconnect );
DECLARE_DO_FUN( do_down );
DECLARE_DO_FUN( do_drink );
DECLARE_DO_FUN( do_drop );
DECLARE_DO_FUN( do_east );
DECLARE_DO_FUN( do_eat );
DECLARE_DO_FUN( do_echo );
DECLARE_DO_FUN( do_emote );
DECLARE_DO_FUN( do_equipment );
DECLARE_DO_FUN( do_examine );
DECLARE_DO_FUN( do_exits );
DECLARE_DO_FUN( do_fill );
DECLARE_DO_FUN( do_flee );
DECLARE_DO_FUN( do_follow );
DECLARE_DO_FUN( do_force );
DECLARE_DO_FUN( do_freeze );
DECLARE_DO_FUN( do_game );
DECLARE_DO_FUN( do_get );
DECLARE_DO_FUN( do_give );
DECLARE_DO_FUN( do_goto );
DECLARE_DO_FUN( do_group );
DECLARE_DO_FUN( do_gtell );
DECLARE_DO_FUN( do_help );
DECLARE_DO_FUN( do_hide );
DECLARE_DO_FUN( do_holylight );
DECLARE_DO_FUN( do_idea );
DECLARE_DO_FUN( do_immtalk );
DECLARE_DO_FUN( do_incognito );
DECLARE_DO_FUN( do_inventory );
DECLARE_DO_FUN( do_invis );
DECLARE_DO_FUN( do_kick );
DECLARE_DO_FUN( do_kill );
DECLARE_DO_FUN( do_list );
DECLARE_DO_FUN( do_lock );
DECLARE_DO_FUN( do_log );
DECLARE_DO_FUN( do_look );
DECLARE_DO_FUN( do_loot );
DECLARE_DO_FUN( do_memory );
DECLARE_DO_FUN( do_mfind );
DECLARE_DO_FUN( do_mload );
DECLARE_DO_FUN( do_mpasound );
DECLARE_DO_FUN( do_mpat );
DECLARE_DO_FUN( do_mpecho );
DECLARE_DO_FUN( do_mpechoaround );
DECLARE_DO_FUN( do_mpechoat );
DECLARE_DO_FUN( do_mpforce );
DECLARE_DO_FUN( do_mpgoto );
DECLARE_DO_FUN( do_mpjunk );
DECLARE_DO_FUN( do_mpkill );
DECLARE_DO_FUN( do_mpmload );
DECLARE_DO_FUN( do_mpoload );
DECLARE_DO_FUN( do_mppurge );
DECLARE_DO_FUN( do_mpstat );
DECLARE_DO_FUN( do_mptransfer );
DECLARE_DO_FUN( do_mset );
DECLARE_DO_FUN( do_mstat );
DECLARE_DO_FUN( do_mwhere );
DECLARE_DO_FUN( do_murde );
DECLARE_DO_FUN( do_murder );
DECLARE_DO_FUN( do_noemote );
DECLARE_DO_FUN( do_north );
DECLARE_DO_FUN( do_note );
DECLARE_DO_FUN( do_notell );
DECLARE_DO_FUN( do_ofind );
DECLARE_DO_FUN( do_oload );
DECLARE_DO_FUN( do_open );
DECLARE_DO_FUN( do_order );
DECLARE_DO_FUN( do_oset );
DECLARE_DO_FUN( do_ostat );
DECLARE_DO_FUN( do_owhere );
DECLARE_DO_FUN( do_pagelen );
DECLARE_DO_FUN( do_pardon );
DECLARE_DO_FUN( do_password );
DECLARE_DO_FUN( do_peace );
DECLARE_DO_FUN( do_pick );
DECLARE_DO_FUN( do_pose );
DECLARE_DO_FUN( do_practice );
DECLARE_DO_FUN( do_prompt );
DECLARE_DO_FUN( do_purge );
DECLARE_DO_FUN( do_put );
DECLARE_DO_FUN( do_quaff );
DECLARE_DO_FUN( do_question );
DECLARE_DO_FUN( do_quest2 );
DECLARE_DO_FUN( do_qui );
DECLARE_DO_FUN( do_quit );
DECLARE_DO_FUN( do_reboo );
DECLARE_DO_FUN( do_reboot );
DECLARE_DO_FUN( do_recall );
DECLARE_DO_FUN( do_recho );
DECLARE_DO_FUN( do_recite );
DECLARE_DO_FUN( do_remove );
DECLARE_DO_FUN( do_rent );
DECLARE_DO_FUN( do_reply );
DECLARE_DO_FUN( do_report );
DECLARE_DO_FUN( do_rescue );
DECLARE_DO_FUN( do_rest );
DECLARE_DO_FUN( do_restore );
DECLARE_DO_FUN( do_return );
DECLARE_DO_FUN( do_rset );
DECLARE_DO_FUN( do_rstat );
DECLARE_DO_FUN( do_sacrifice );
DECLARE_DO_FUN( do_save );
DECLARE_DO_FUN( do_say );
DECLARE_DO_FUN( do_score );
DECLARE_DO_FUN( do_sell );
DECLARE_DO_FUN( do_shout );
DECLARE_DO_FUN( do_shutdow );
DECLARE_DO_FUN( do_shutdown );
DECLARE_DO_FUN( do_silence );
DECLARE_DO_FUN( do_sla );
DECLARE_DO_FUN( do_slay );
DECLARE_DO_FUN( do_sleep );
DECLARE_DO_FUN( do_slist );
DECLARE_DO_FUN( do_slookup );
DECLARE_DO_FUN( do_sneak );
DECLARE_DO_FUN( do_snoop );
DECLARE_DO_FUN( do_socials );
DECLARE_DO_FUN( do_south );
DECLARE_DO_FUN( do_spells );
DECLARE_DO_FUN( do_split );
DECLARE_DO_FUN( do_sset );
DECLARE_DO_FUN( do_stand );
DECLARE_DO_FUN( do_steal );
DECLARE_DO_FUN( do_switch );
DECLARE_DO_FUN( do_tell );
DECLARE_DO_FUN( do_time );
DECLARE_DO_FUN( do_title );
DECLARE_DO_FUN( do_train );
DECLARE_DO_FUN( do_transfer );
DECLARE_DO_FUN( do_trust );
DECLARE_DO_FUN( do_typo );
DECLARE_DO_FUN( do_unlock );
DECLARE_DO_FUN( do_up );
DECLARE_DO_FUN( do_users );
DECLARE_DO_FUN( do_value );
DECLARE_DO_FUN( do_visible );
DECLARE_DO_FUN( do_wake );
DECLARE_DO_FUN( do_wear );
DECLARE_DO_FUN( do_weather );
DECLARE_DO_FUN( do_west );
DECLARE_DO_FUN( do_where );
DECLARE_DO_FUN( do_who );
DECLARE_DO_FUN( do_wimpy );
DECLARE_DO_FUN( do_wizhelp );
DECLARE_DO_FUN( do_wizify );
DECLARE_DO_FUN( do_wizlist );
DECLARE_DO_FUN( do_wizlock );
DECLARE_DO_FUN( do_yell );
DECLARE_DO_FUN( do_zap );
/* Llolth */
/* DECLARE_DO_FUN( do_tribe );
*/
/* Added by Eligan, July 10 */
DECLARE_DO_FUN( do_ignore );
/*
NEW SKILLS (SRZ)
*/
DECLARE_DO_FUN( do_family );
DECLARE_DO_FUN( do_mount );
DECLARE_DO_FUN( do_dismount );
DECLARE_DO_FUN( do_qpspend );
DECLARE_DO_FUN( do_disguise );
DECLARE_DO_FUN( do_instruct );
DECLARE_DO_FUN( do_frenzy );
DECLARE_DO_FUN( do_adrenaline );
DECLARE_DO_FUN( do_target );
DECLARE_DO_FUN( do_charge );
DECLARE_DO_FUN( do_connect );
DECLARE_DO_FUN( do_stance );
DECLARE_DO_FUN( do_enchant );
/*
DECLARE_DO_FUN( do_teach );
*/
/*
* NEW CLAN COMMANDS (ZEN)
*/
DECLARE_DO_FUN( do_ctoggle );
DECLARE_DO_FUN( do_politics );
DECLARE_DO_FUN( do_negotiate );
/*
* New Channels (ZEN)
*/
DECLARE_DO_FUN( do_diptalk );
DECLARE_DO_FUN( do_familytalk );
DECLARE_DO_FUN( do_remorttalk );
DECLARE_DO_FUN( do_crusade );
DECLARE_DO_FUN(do_adepttalk ); /* contrib by Hermes */
DECLARE_DO_FUN( do_rulers );
DECLARE_DO_FUN( do_scout );
/* Llolth */
/* DECLARE_DO_FUN( do_tribetalk );
*/
/*
* New immcommands
*/
DECLARE_DO_FUN( do_areasave );
DECLARE_DO_FUN( do_alink );
DECLARE_DO_FUN( do_for ); /* Flar */
DECLARE_DO_FUN( do_hotreboo ); /* Flar */
DECLARE_DO_FUN( do_hotreboot ); /* Flar */
DECLARE_DO_FUN( do_imtlset ); /* Flar */
DECLARE_DO_FUN( do_gain_stat_reset );
DECLARE_DO_FUN( do_sedit );
DECLARE_DO_FUN( do_olmsg );
DECLARE_DO_FUN( do_scheck );
DECLARE_DO_FUN( do_immbrand );
/*
* Werwolf
*/
DECLARE_DO_FUN( do_rage );
DECLARE_DO_FUN( do_howl );
DECLARE_DO_FUN( do_tribe );
DECLARE_DO_FUN( do_scent );
DECLARE_DO_FUN( do_imprint );
/*
* Spell functions.
* Defined in magic.c.
*/
DECLARE_SPELL_FUN( spell_null );
DECLARE_SPELL_FUN( spell_ego_whip );
DECLARE_SPELL_FUN( spell_physic_thrust );
DECLARE_SPELL_FUN( spell_physic_crush );
DECLARE_SPELL_FUN( spell_mind_flail );
DECLARE_SPELL_FUN( spell_acid_blast );
DECLARE_SPELL_FUN( spell_animate );
DECLARE_SPELL_FUN( spell_armor );
DECLARE_SPELL_FUN( spell_badbreath );
DECLARE_SPELL_FUN( spell_bark_skin );
DECLARE_SPELL_FUN( spell_bless );
DECLARE_SPELL_FUN( spell_blindness );
DECLARE_SPELL_FUN( spell_bloody_tears );
DECLARE_SPELL_FUN( spell_burning_hands );
DECLARE_SPELL_FUN( spell_call_lightning );
DECLARE_SPELL_FUN( spell_calm );
DECLARE_SPELL_FUN( spell_cause_critical );
DECLARE_SPELL_FUN( spell_cause_light );
DECLARE_SPELL_FUN( spell_cause_serious );
DECLARE_SPELL_FUN( spell_change_sex );
DECLARE_SPELL_FUN( spell_charm_person );
DECLARE_SPELL_FUN( spell_chill_touch );
DECLARE_SPELL_FUN( spell_colour_spray );
DECLARE_SPELL_FUN( spell_continual_light );
DECLARE_SPELL_FUN( spell_control_weather );
DECLARE_SPELL_FUN( spell_create_food );
DECLARE_SPELL_FUN( spell_create_spring );
DECLARE_SPELL_FUN( spell_create_water );
DECLARE_SPELL_FUN( spell_cure_blindness );
DECLARE_SPELL_FUN( spell_cure_critical );
DECLARE_SPELL_FUN( spell_cure_light );
DECLARE_SPELL_FUN( spell_cure_poison );
DECLARE_SPELL_FUN( spell_cure_serious );
DECLARE_SPELL_FUN( spell_curse );
DECLARE_SPELL_FUN( spell_detect_evil );
DECLARE_SPELL_FUN( spell_detect_hidden );
DECLARE_SPELL_FUN( spell_detect_invis );
DECLARE_SPELL_FUN( spell_detect_magic );
DECLARE_SPELL_FUN( spell_detect_poison );
DECLARE_SPELL_FUN( spell_detect_undead );
DECLARE_SPELL_FUN( spell_detection );
DECLARE_SPELL_FUN( spell_dimension_blade );
DECLARE_SPELL_FUN( spell_dispel_evil );
DECLARE_SPELL_FUN( spell_dispel_magic );
DECLARE_SPELL_FUN( spell_earthquake );
DECLARE_SPELL_FUN( spell_enchant_weapon );
DECLARE_SPELL_FUN( spell_encumber );
DECLARE_SPELL_FUN( spell_enhance_weapon );
DECLARE_SPELL_FUN( spell_energy_drain );
DECLARE_SPELL_FUN( spell_faerie_fire );
DECLARE_SPELL_FUN( spell_faerie_fog );
DECLARE_SPELL_FUN( spell_fighting_trance );
DECLARE_SPELL_FUN( spell_fireball );
DECLARE_SPELL_FUN( spell_fire_blade );
DECLARE_SPELL_FUN( spell_flamestrike );
DECLARE_SPELL_FUN( spell_fly );
DECLARE_SPELL_FUN( spell_gate );
DECLARE_SPELL_FUN( spell_general_purpose );
DECLARE_SPELL_FUN( spell_giant_strength );
DECLARE_SPELL_FUN( spell_harm );
DECLARE_SPELL_FUN( spell_heal );
DECLARE_SPELL_FUN( spell_high_explosive );
DECLARE_SPELL_FUN( spell_hypnosis );
DECLARE_SPELL_FUN( spell_identify );
DECLARE_SPELL_FUN( spell_influx );
DECLARE_SPELL_FUN( spell_infravision );
DECLARE_SPELL_FUN( spell_invis );
DECLARE_SPELL_FUN( spell_know_alignment );
DECLARE_SPELL_FUN( spell_know_weakness );
DECLARE_SPELL_FUN( spell_know_critical );
DECLARE_SPELL_FUN( spell_know_item );
DECLARE_SPELL_FUN( spell_lightning_bolt );
DECLARE_SPELL_FUN( spell_locate_object );
DECLARE_SPELL_FUN( spell_magic_missile );
DECLARE_SPELL_FUN( spell_mass_invis );
DECLARE_SPELL_FUN( spell_mind_bolt );
DECLARE_SPELL_FUN( spell_nerve_fire );
DECLARE_SPELL_FUN( spell_night_vision );
DECLARE_SPELL_FUN( spell_pass_door );
DECLARE_SPELL_FUN( spell_phase );
DECLARE_SPELL_FUN( spell_poison );
DECLARE_SPELL_FUN( spell_produce_food );
DECLARE_SPELL_FUN( spell_protection );
DECLARE_SPELL_FUN( spell_refresh );
DECLARE_SPELL_FUN( spell_remove_curse );
DECLARE_SPELL_FUN( spell_sanctuary );
DECLARE_SPELL_FUN( spell_see_magic );
DECLARE_SPELL_FUN( spell_sense_evil );
DECLARE_SPELL_FUN( spell_shocking_grasp );
DECLARE_SPELL_FUN( spell_shield );
DECLARE_SPELL_FUN( spell_sleep );
DECLARE_SPELL_FUN( spell_stalker );
DECLARE_SPELL_FUN( spell_stone_skin );
DECLARE_SPELL_FUN( spell_suffocate );
DECLARE_SPELL_FUN( spell_summon );
DECLARE_SPELL_FUN( spell_teleport );
DECLARE_SPELL_FUN( spell_ventriloquate );
DECLARE_SPELL_FUN( spell_warcry ); /* --Stephen */
DECLARE_SPELL_FUN( spell_weaken );
DECLARE_SPELL_FUN( spell_window );
DECLARE_SPELL_FUN( spell_portal );
DECLARE_SPELL_FUN( spell_beacon );
DECLARE_SPELL_FUN( spell_word_of_recall );
DECLARE_SPELL_FUN( spell_acid_breath );
DECLARE_SPELL_FUN( spell_fire_breath );
DECLARE_SPELL_FUN( spell_frost_breath );
DECLARE_SPELL_FUN( spell_gas_breath );
DECLARE_SPELL_FUN( spell_lightning_breath );
DECLARE_SPELL_FUN( spell_planergy );
DECLARE_SPELL_FUN( spell_static );
DECLARE_SPELL_FUN( spell_visit );
DECLARE_SPELL_FUN( spell_chain_lightning );
DECLARE_SPELL_FUN( spell_phobia );
DECLARE_SPELL_FUN( spell_barrier );
DECLARE_SPELL_FUN( spell_mindflame );
DECLARE_SPELL_FUN( spell_laserbolt );
DECLARE_SPELL_FUN( spell_hellspawn );
DECLARE_SPELL_FUN( spell_travel );
DECLARE_SPELL_FUN( spell_flare );
DECLARE_SPELL_FUN( spell_mystic_armor );
DECLARE_SPELL_FUN( spell_blood_leach );
DECLARE_SPELL_FUN( spell_seal_room );
DECLARE_SPELL_FUN( spell_shade ); /* Slot 542 */
DECLARE_SPELL_FUN( spell_deflect_weapon ); /* slot 600 */
DECLARE_SPELL_FUN( spell_black_hand ); /* slot 601 */
DECLARE_SPELL_FUN( spell_throw_needle ); /* slot 602 */
DECLARE_SPELL_FUN( spell_morale ); /* slot 603 */
DECLARE_SPELL_FUN( spell_leadership ); /* slot 604 */
DECLARE_SPELL_FUN( spell_ice_bolt ); /* slot 605 */
DECLARE_SPELL_FUN( spell_waterelem ); /* slot 606 */
DECLARE_SPELL_FUN( spell_skeleton ); /* slot 607 */
DECLARE_SPELL_FUN( spell_poison_weapon ); /* slot 608 */
DECLARE_SPELL_FUN( spell_embrace ); /* slot 609 */
DECLARE_SPELL_FUN( spell_mesmerise ); /* slot 610 */
DECLARE_SPELL_FUN( spell_ethereal ); /* slot 611 */
DECLARE_SPELL_FUN( spell_fireelem ); /* slot 612 */
DECLARE_SPELL_FUN( spell_rune_fire ); /* slot 613 */
DECLARE_SPELL_FUN( spell_rune_shock ); /* slot 614 */
DECLARE_SPELL_FUN( spell_rune_poison ); /* slot 615 */
DECLARE_SPELL_FUN( spell_healing_light ); /* slot 616 */
DECLARE_SPELL_FUN( spell_wither_shadow ); /* slot 617 */
DECLARE_SPELL_FUN( spell_mana_flare ); /* slot 618 */
DECLARE_SPELL_FUN( spell_mana_drain ); /* slot 619 */
DECLARE_SPELL_FUN( spell_cage ); /* slot 620 */
DECLARE_SPELL_FUN( spell_cloak_absorb ); /* slot 621 */
DECLARE_SPELL_FUN( spell_cloak_reflect ); /* slot 622 */
DECLARE_SPELL_FUN( spell_cloak_flaming ); /* slot 623 */
DECLARE_SPELL_FUN( spell_cloak_darkness ); /* slot 624 */
DECLARE_SPELL_FUN( spell_room_dispel ); /* slot 625 */
DECLARE_SPELL_FUN( spell_cloak_adept ); /* slot 626 */
DECLARE_SPELL_FUN( spell_cloak_regen ); /* slot 627 */
DECLARE_SPELL_FUN( spell_throw_star ); /* slot 628 */
DECLARE_SPELL_FUN( spell_soul_net ); /* slot 629 */
DECLARE_SPELL_FUN( spell_condense_soul ); /* slot 630 */
DECLARE_SPELL_FUN( spell_blood_walk ); /* slot 631 */
DECLARE_SPELL_FUN( spell_restoration ); /* slot 632 */
DECLARE_SPELL_FUN( spell_infuse ); /* slot 633 */
DECLARE_SPELL_FUN( spell_holy_light ); /* slot 634 */
DECLARE_SPELL_FUN( spell_divine_intervention ); /* slot 635 */
DECLARE_SPELL_FUN( spell_holy_armor ); /* slot 636 */
DECLARE_SPELL_FUN( spell_earthelem ); /* slot 637 */
DECLARE_SPELL_FUN( spell_iron_golem ); /* slot 638 */
DECLARE_SPELL_FUN( spell_diamond_golem ); /* slot 639 */
DECLARE_SPELL_FUN( spell_soul_thief ); /* slot 640 */
DECLARE_SPELL_FUN( spell_holy_avenger ); /* slot 641 */
DECLARE_SPELL_FUN( spell_heat_armor ); /* slot 642 */
DECLARE_SPELL_FUN( spell_retri_strike ); /* slot 643 */
DECLARE_SPELL_FUN( spell_lava_burst ); /* slot 644 */
DECLARE_SPELL_FUN( spell_fireshield ); /* slot 645 */
DECLARE_SPELL_FUN( spell_iceshield ); /* slot 646 */
DECLARE_SPELL_FUN( spell_shockshield ); /* slot 647 */
DECLARE_SPELL_FUN( spell_shadowshield ); /* slot 648 */
DECLARE_SPELL_FUN( spell_thoughtshield ); /* slot 649 */
/* enraged holds slot 651-654 */
DECLARE_SPELL_FUN( spell_tribe_claw ); /* slot 655 */
DECLARE_SPELL_FUN( spell_wolf_mark ); /* slot 656 */
DECLARE_SPELL_FUN( spell_blood_sign ); /* 657 */
DECLARE_SPELL_FUN( spell_blood_sense ); /* 658 */
DECLARE_SPELL_FUN( spell_summon_pegasus ); /* slot 659 */
DECLARE_SPELL_FUN( spell_summon_nightmare ); /* slot 660 */
DECLARE_SPELL_FUN( spell_summon_beast ); /* 661 */
DECLARE_SPELL_FUN( spell_summon_devourer ); /* 662 */
DECLARE_SPELL_FUN( spell_summon_shadow ); /* 663 */
DECLARE_SPELL_FUN( spell_creature_bond ); /* 664 */
DECLARE_SPELL_FUN( spell_corrupt_bond ); /* 665 */
/*
* OS-dependent declarations.
* These are all very standard library functions,
* but some systems have incomplete or non-ansi header files.
*/
#if defined(_AIX)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(apollo)
int atoi args( ( const char *string ) );
void * calloc args( ( unsigned nelem, size_t size ) );
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(hpux)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(linux)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(macintosh)
#define NOCRYPT
#if defined(unix)
#undef unix
#endif
#endif
#if defined(MIPS_OS)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(MSDOS)
#define NOCRYPT
#if defined(unix)
#undef unix
#endif
#endif
#if defined(NeXT)
char * crypt args( ( const char *key, const char *salt ) );
#endif
#if defined(sequent)
char * crypt args( ( const char *key, const char *salt ) );
int fclose args( ( FILE *stream ) );
int fprintf args( ( FILE *stream, const char *format, ... ) );
int fread args( ( void *ptr, int size, int n, FILE *stream ) );
int fseek args( ( FILE *stream, long offset, int ptrname ) );
void perror args( ( const char *s ) );
int ungetc args( ( int c, FILE *stream ) );
#endif
#if defined(sun)
char * crypt args( ( const char *key, const char *salt ) );
int fclose args( ( FILE *stream ) );
int fprintf args( ( FILE *stream, const char *format, ... ) );
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(ultrix)
char * crypt args( ( const char *key, const char *salt ) );
#endif
/*
* The crypt(3) function is not available on some operating systems.
* In particular, the U.S. Government prohibits its export from the
* United States to foreign countries.
* Turn on NOCRYPT to keep passwords in plain text.
*/
#if defined(NOCRYPT)
#define crypt(s1, s2) (s1)
#endif
/*
* Data files used by the server.
*
* AREA_LIST contains a list of areas to boot.
* All files are read in completely at bootup.
* Most output files (bug, idea, typo, shutdown) are append-only.
*
* The NULL_FILE is held open so that we have a stream handle in reserve,
* so players can go ahead and telnet to all the other descriptors.
* Then we close it whenever we need to open a file (e.g. a save file).
*/
#if defined(macintosh)
#define PLAYER_DIR "" /* Player files */
#define NPC_DIR ""
#define NULL_FILE "proto.are" /* To reserve one stream */
#define MOB_DIR "" /* MOBProg files */
#endif
#if defined(MSDOS)
#define PLAYER_DIR "" /* Player files */
#define NPC_DIR ""
#define NULL_FILE "nul" /* To reserve one stream */
#define MOB_DIR "" /* MOBProg files */
#endif
#if defined(unix)
#define PLAYER_DIR "../player/" /* Player files */
#define NPC_DIR "../npcs/"
#define NULL_FILE "/dev/null" /* To reserve one stream */
#define MOB_DIR "MOBProgs/" /* MOBProg files */
#endif
#if defined(linux)
#define PLAYER_DIR "../player/" /* Player files */
#define NPC_DIR "../npcs/"
#define NULL_FILE "/dev/null" /* To reserve one stream */
#define MOB_DIR "MOBProgs/" /* MOBProg files */
#endif
#define AREA_LIST "area.lst" /* List of areas */
#define BUG_FILE "bugs.txt" /* For 'bug' and bug( ) */
#define IDEA_FILE "ideas.txt" /* For 'idea' */
#define TYPO_FILE "typos.txt" /* For 'typo' */
#define NOTE_FILE "notes.txt" /* For 'notes' */
/* FIXME: boards.txt in here????? */
#define SHUTDOWN_FILE "shutdown.txt" /* For 'shutdown' */
#define CLAN_FILE "clandata.dat" /* stores clan diplomacy data */
#define CORPSE_FILE "corpses.lst"
#define MARKS_FILE "roommarks.lst"
#define BANS_FILE "bans.lst"
#define RULERS_FILE "rulers.lst"
#define CONTROLS_FILE "area_controls.lst"
#define BRANDS_FILE "brands.lst"
#if defined(SOE) && !defined(SOETEST) && !defined(SOEBLD)
#define WHO_HTML_FILE "/home/ftp/pub/webpage/soewholist.html" /* for ftping who list to html web page :) */
#define WHO_COUNT_FILE "/home/ftp/pub/webpage/whocount.html"
#endif
#if !defined(WHO_HTML_FILE)
#define WHO_HTML_FILE "whofile" /* for ftping who list to html web page :) */
#define WHO_COUNT_FILE "whocountfile"
#endif
/* Other Stuff - Flar */
#define COPYOVER_FILE "COPYOVER.TXT" /* Temp data file used for copyover */
#define EXE_FILE "../src/merc" /* The one that runs the ACK! */
/*
* 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 OF OBJ_FUN
/* act_comm.c */
bool is_note_to args( ( CHAR_DATA *ch, NOTE_DATA *pnote ) );
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 ) );
bool is_group_leader args( ( CHAR_DATA *ch ) );
char * slur_text args( ( char *argument ) );
void send_to_room args( ( char *message, ROOM_INDEX_DATA *room ) );
void list_who_to_output args( ( void ) );
/* act_info.c */
void set_title args( ( CHAR_DATA *ch, char *title ) );
char * colour_string args( ( CHAR_DATA *CH, char *argument ) );
char * get_family_name args( ( CHAR_DATA *ch ) );
char * get_tribe_name args( ( CHAR_DATA *ch ) );
/* act_mob.c */
void int_combat_handler args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
void int_handler args( ( CHAR_DATA *ch ) );
/* act_move.c */
void move_char args( ( CHAR_DATA *ch, int door ) );
/* act_obj.c */
void get_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *container ) );
bool can_wear_at(CHAR_DATA * ch, OBJ_DATA * obj, int location);
/* act_wiz.c */
ROOM_INDEX_DATA * find_location args( ( CHAR_DATA *ch, char *arg ) );
/* board.c */
void do_show_contents args( ( CHAR_DATA *ch, OBJ_DATA * obj ) );
void do_show_message args( ( CHAR_DATA *ch, int mess_num, OBJ_DATA * obj ) );
void do_edit_message args( ( CHAR_DATA *ch, int mess_num, OBJ_DATA * obj ) );
void do_add_to_message args( ( CHAR_DATA *ch, char *argument ) );
void do_start_a_message args( ( CHAR_DATA *ch, char *argument ) );
void save_message_data args( ( void ) );
void load_messages args( ( void ) );
/* comm.c */
void close_socket args( ( DESCRIPTOR_DATA *dclose ) );
void show_menu_to args( ( DESCRIPTOR_DATA *d ) ); /* Main */
void show_amenu_to args( ( DESCRIPTOR_DATA *d ) ); /* Attributes */
void show_rmenu_to args( ( DESCRIPTOR_DATA *d ) ); /* Race */
void show_smenu_to args( ( DESCRIPTOR_DATA *d ) ); /* Sex */
void show_cmenu_to args( ( DESCRIPTOR_DATA *d ) ); /* Class */
void write_to_buffer args( ( DESCRIPTOR_DATA *d, const char *txt,
int length ) );
void send_to_char args( ( const char *txt, CHAR_DATA *ch ) );
void show_string args( ( DESCRIPTOR_DATA *d, char *input ) );
void act args( ( const char *format, CHAR_DATA *ch,
const void *arg1, const void *arg2, int type ) );
void hang args( ( const char *str ) );
/* db.c */
void perm_update args( ( void ) );
void boot_db args( ( bool fCopyOver ) );
void area_update args( ( void ) );
void message_update args( ( void ) );
CD * create_mobile args( ( MOB_INDEX_DATA *pMobIndex ) );
OD * create_object args( ( OBJ_INDEX_DATA *pObjIndex, int level ) );
void clear_char args( ( CHAR_DATA *ch ) );
void free_char args( ( CHAR_DATA *ch ) );
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 ) );
char * fread_string args( ( FILE *fp ) );
void fread_to_eol args( ( FILE *fp ) );
char * fsave_to_eol args( ( FILE *fp ) );
char * fread_word args( ( FILE *fp ) );
/* void * alloc_mem args( ( int sMem ) );
void check_freed args( ( unsigned int first, unsigned int last) );
void check_free_mem args( ( void ) );
void * alloc_perm args( ( int sMem ) );
void free_mem args( ( void *pMem, int sMem ) );*/
/* spec: renamed getmem -> _getmem, nuked unused alloc_perm */
/* void * alloc_perm args( ( int sMem ) ); */
void * _getmem args( ( int size, const char *caller, int log ) );
void dispose args( ( void *mem, int size ) );
char * str_dup args( ( const char *str ) );
void free_string args( ( char *pstr ) );
int number_fuzzy args( ( int number ) );
int number_range args( ( int from, int to ) );
int number_percent args( ( void ) );
int number_door args( ( void ) );
int number_bits args( ( int width ) );
int number_mm args( ( void ) );
int dice args( ( int number, int size ) );
int interpolate args( ( int level, int value_00, int value_32 ) );
void smash_tilde args( ( char *str ) );
bool str_cmp args( ( const char *astr, const char *bstr ) );
bool str_prefix args( ( const char *astr, const char *bstr ) );
bool str_infix args( ( const char *astr, const char *bstr ) );
bool str_suffix args( ( const char *astr, const char *bstr ) );
char * capitalize args( ( const char *str ) );
void append_file args( ( CHAR_DATA *ch, char *file, char *str ) );
void bug args( ( const char *str, int param ) );
void log_string args( ( const char *str ) );
void tail_chain args( ( void ) );
void safe_strcat args( ( int max_len, char * dest,char * source ) );
void send_to_descrips args( ( const char *message ) );
void bug_string args( ( const char *str, const char *str2) );
/* Added stuff -Flar */
void bugf (char * fmt, ...) __attribute__ ((format(printf,1,2)));
void logf (char * fmt, ...) __attribute__ ((format(printf,1,2)));
/* fight.c */
void violence_update args( ( void ) );
void multi_hit args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt ) );
void damage args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam,
int dt ) );
void update_pos args( ( CHAR_DATA *victim ) );
void stop_fighting args( ( CHAR_DATA *ch, bool fBoth ) );
void death_cry args( ( CHAR_DATA *ch ) );
void raw_kill args( ( CHAR_DATA *victim, char *argument ) );
void check_killer args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
/* handler.c */
bool remove_obj args( ( CHAR_DATA *ch, int iWear, bool fReplace ) );
int get_trust args( ( CHAR_DATA *ch ) );
void my_get_age args( ( CHAR_DATA *ch, char * buf ) );
int my_get_hours args( ( CHAR_DATA *ch ) );
int get_age args( ( CHAR_DATA *ch ) );
int get_curr_str args( ( CHAR_DATA *ch ) );
int get_curr_int args( ( CHAR_DATA *ch ) );
int get_curr_wis args( ( CHAR_DATA *ch ) );
int get_curr_dex args( ( CHAR_DATA *ch ) );
int get_curr_con args( ( CHAR_DATA *ch ) );
int can_carry_n args( ( CHAR_DATA *ch ) );
int can_carry_w args( ( CHAR_DATA *ch ) );
bool is_name args( ( const char *str, char *namelist ) );
void affect_to_room args( ( ROOM_INDEX_DATA *room, ROOM_AFFECT_DATA *raf ) );
void r_affect_remove args( ( ROOM_INDEX_DATA *room, ROOM_AFFECT_DATA *raf ) );
void affect_to_char args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void affect_remove args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void affect_strip args( ( CHAR_DATA *ch, int sn ) );
bool is_affected args( ( CHAR_DATA *ch, int sn ) );
void affect_join args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) );
void char_from_room args( ( CHAR_DATA *ch ) );
void char_to_room args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex ) );
void obj_to_char args( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
void obj_from_char args( ( OBJ_DATA *obj ) );
int apply_ac args( ( OBJ_DATA *obj, int iWear ) );
OD * get_eq_char args( ( CHAR_DATA *ch, int iWear ) );
void equip_char args( ( CHAR_DATA *ch, OBJ_DATA *obj, int iWear ) );
void unequip_char args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
int count_obj_list args( ( OBJ_INDEX_DATA *obj, OBJ_DATA *list ) );
int count_obj_room args( ( OBJ_INDEX_DATA *obj, OBJ_DATA *list ) );
void obj_from_room args( ( OBJ_DATA *obj ) );
void obj_to_room args( ( OBJ_DATA *obj, ROOM_INDEX_DATA *pRoomIndex ) );
void obj_to_obj args( ( OBJ_DATA *obj, OBJ_DATA *obj_to ) );
void obj_from_obj args( ( OBJ_DATA *obj ) );
void extract_obj args( ( OBJ_DATA *obj ) );
void extract_char args( ( CHAR_DATA *ch, bool fPull ) );
CD * get_char_room args( ( CHAR_DATA *ch, char *argument ) );
CD * get_char_world args( ( CHAR_DATA *ch, char *argument ) );
CD * get_char_area args( ( CHAR_DATA *ch, char *argument ) );
OD * get_obj_type args( ( OBJ_INDEX_DATA *pObjIndexData ) );
OD * get_obj_list args( ( CHAR_DATA *ch, char *argument,
OBJ_DATA *list ) );
OD * get_obj_room args( ( CHAR_DATA *ch, char *argument,
OBJ_DATA *list ) );
OD * get_obj_carry args( ( CHAR_DATA *ch, char *argument ) );
OD * get_obj_wear args( ( CHAR_DATA *ch, char *argument ) );
OD * get_obj_here args( ( CHAR_DATA *ch, char *argument ) );
OD * get_obj_world args( ( CHAR_DATA *ch, char *argument ) );
OD * create_money args( ( int amount ) );
int get_obj_number args( ( OBJ_DATA *obj ) );
int get_obj_weight args( ( OBJ_DATA *obj ) );
bool room_is_dark args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool room_is_private args( ( ROOM_INDEX_DATA *pRoomIndex ) );
bool can_see args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
bool can_see_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool can_drop_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
bool can_sac_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( ( int vector ) );
char * raffect_bit_name args( ( int vector ) );
char * extra_bit_name args( ( int extra_flags ) );
char * race_name args( ( CHAR_DATA *ch ) );
char * short_race_name args( ( CHAR_DATA *ch ) );
bool can_use args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
char * who_can_use args( ( OBJ_DATA *obj ) );
void notify args( ( char * message, int lv ) );
void info args( ( char * message, int lv ) );
void auction args( ( char * message ) );
void log_chan args( ( const char * message, int lv ) );
bool item_has_apply args( ( CHAR_DATA *ch, int bit ) );
CD * switch_char args( ( CHAR_DATA *victim, int mvnum, int poly_level ) );
CD * unswitch_char args( ( CHAR_DATA *ch ) );
int best_class args( ( CHAR_DATA *ch, int sn ) );
int best_level args( ( CHAR_DATA *ch, int sn ) );
char * center_text args( ( char *text, int width ) );
void monitor_chan args( ( const char *message, int channel ) );
void set_stun args( ( CHAR_DATA * victim, int stunTime ) );
CD * get_char args( ( CHAR_DATA *ch ) );
void mark_from_room args( ( int this_room_vnum, MARK_DATA * mark ) );
void mark_to_room args( ( int this_room_vnum, MARK_DATA * mark ) );
void char_reference args( (struct char_ref_type *ref) );
void char_unreference args( (CHAR_DATA **var) );
void obj_reference args( (struct obj_ref_type *ref) );
void obj_unreference args( (OBJ_DATA **var) );
/* interp.c */
void interpret args( ( CHAR_DATA *ch, char *argument ) );
bool is_number args( ( char *arg ) );
int number_argument args( ( char *argument, char *arg ) );
char * one_argument args( ( char *argument, char *arg_first ) );
bool IS_SWITCHED args( ( CHAR_DATA *ch ) );
bool is_shielded args( ( CHAR_DATA *ch, sh_int shield_type ) );
void remove_shield args( ( CHAR_DATA *ch, MAGIC_SHIELD *shield ) );
bool authorized args( ( CHAR_DATA *ch, char *skllnm ) );
bool check_social args( ( CHAR_DATA *ch, char *command, char *argument ) );
/* macros.c */
sh_int get_remort_level args ( ( CHAR_DATA *ch ) );
sh_int get_psuedo_level args ( ( CHAR_DATA *ch ) ) ;
bool ok_to_use args( ( CHAR_DATA *ch, int value ) );
bool check_level_use args( ( CHAR_DATA *ch, int level ) );
char * learnt_name args( ( int learnt ) );
int exp_to_level args( ( CHAR_DATA *ch, int class, int index ) );
int exp_for_mobile args( ( int level, CHAR_DATA *mob ) );
int my_strlen args( ( char *text ) );
int skill_table_lookup args( ( CHAR_DATA *ch, int sn, int return_type ) );
bool is_remort args( ( CHAR_DATA *ch ) );
int exp_to_level_vamp args( ( int level ) );
int exp_to_level_adept args ( ( CHAR_DATA * ch ) );
char * get_adept_name args( ( CHAR_DATA * ch ) );
void reset_gain_stats args( ( CHAR_DATA * ch ) );
int exp_to_level_wolf args( ( int level ) );
int get_item_value args( ( OBJ_DATA * obj ) );
char *get_tribe_standing_name args( ( int standing ) );
char *get_moon_phase_name args( ( void ) );
/* magic.c */
int mana_cost args( ( CHAR_DATA * ch, int sn ) );
int skill_lookup args( ( const char *name ) );
int slot_lookup args( ( int slot ) );
bool saves_spell args( ( int level, CHAR_DATA *victim ) );
void obj_cast_spell args( ( int sn, int level, CHAR_DATA *ch,
CHAR_DATA *victim, OBJ_DATA *obj ) );
bool spell_identify( int sn, int level, CHAR_DATA *ch, void *vo, OBJ_DATA *obj );
/* mob_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* mob ) );
void mprog_random_trigger args( ( CHAR_DATA* mob ) );
void mprog_speech_trigger args( ( char* txt, CHAR_DATA* mob ) );
/*-------*\
) quest.c (
\*-------*/
void quest_inform args( ( void ) );
void quest_complete args( ( CHAR_DATA *ch ) );
void quest_cancel args( ( void ) );
void generate_auto_quest args( ( void ) );
/*------*\
) save.c (
\*------*/
void save_char_obj args( ( CHAR_DATA *ch ) );
bool load_char_obj args( ( DESCRIPTOR_DATA *d, char *name ) );
void save_corpses args( ( void ) );
void fread_corpse args( ( FILE * fp ) );
void save_marks args( ( void ) );
void save_bans args( ( void ) );
char *initial args( ( const char *str ) );
/*---------*\
) special.c (
\*---------*/
SF * spec_lookup args( ( const char *name ) );
char * rev_spec_lookup args( ( void * func ) );
void print_spec_lookup args( ( char * buf ) );
/* social-edit.c */
void load_social_table args( ( void ) );
/*---------*\
) obj_fun.c (
\*---------*/
OF * obj_fun_lookup args( ( const char *name ) );
char * rev_obj_fun_lookup args( ( void *func ) );
void print_obj_fun_lookup args( ( char *buf ) );
/*---------*\
) trigger.c (
\*---------*/
void trigger_handler args( ( CHAR_DATA *ch, OBJ_DATA *obj, int trigger ) );
/*--------*\
) update.c# (
\*--------*/
void advance_level args( ( CHAR_DATA *ch, int class, bool show, bool remort ) );
void gain_exp args( ( CHAR_DATA *ch, int gain ) );
void gain_bloodlust args( ( CHAR_DATA *ch, int value ) );
void gain_condition args( ( CHAR_DATA *ch, int iCond, int value ) );
void update_handler args( ( void ) );
bool check_rewield args( ( CHAR_DATA *ch ) );
bool check_re_equip args( ( CHAR_DATA *ch ) );
void auction_update args( ( void ) );
void check_vamp args( ( CHAR_DATA *ch ) );
/* write.c */
void write_start args( ( char * * dest, void * retfunc, void * retparm, CHAR_DATA * ch ) );
void write_interpret args( ( CHAR_DATA * ch, char * argument ) );
/* build.c */
void build_strdup(char * * dest,char * src,bool freesrc,CHAR_DATA * ch);
char * build_simpstrdup( char * buf); /* A plug in alternative to str_dup */
void build_save args( ( void ) );
extern const char * cDirs;
int get_dir(char);
char * show_values( const struct lookup_type * table, int value, bool fBit );
/* buildtab.c */
/*
int table_lookup args( (const struct lookup_type * table,char * name) );
char * rev_table_lookup args( (const struct lookup_type * table,int number) );
char * bit_table_lookup args( (const struct lookup_type * table,int number) );
*/
/* buildare.c */
/* Area manipulation funcs in buildare.c */
int build_canread(AREA_DATA * Area,CHAR_DATA * ch,int showerror);
int build_canwrite(AREA_DATA * Area,CHAR_DATA * ch,int showerror);
#define AREA_NOERROR 0
#define AREA_SHOWERROR 1
/* areasave.c */
void area_modified(AREA_DATA *);
void build_save_flush(void);
/* hunt.c */
void hunt_victim args( ( CHAR_DATA *ch ) );
void unhunt args( ( CHAR_DATA *ch ) );
int make_hunt args( ( CHAR_DATA *ch, CHAR_DATA * victim) );
/* void hunt_move args( ( CHAR_DATA *ch ) ); */
void hunt_obj args( ( CHAR_DATA *ch ) );
bool make_move args( ( CHAR_DATA *ch, int vnum ) );
char * find_path args( ( int, int, CHAR_DATA *, int, int, int ) );
bool mob_hunt args( ( CHAR_DATA *mob ) );
void char_hunt args( ( CHAR_DATA *ch ) );
bool set_hunt args( ( CHAR_DATA *ch, CHAR_DATA *fch,
CHAR_DATA *vch, OBJ_DATA *vobj,
int set_flags, int rem_flags ) );
void end_hunt args( ( CHAR_DATA *ch ) );
/* update.c */
void init_alarm_handler args( ( void ) );
void alarm_update args( ( void ) );
/* SSM */
void temp_fread_string args( (FILE * fp, char *buf) );
/*
* Rulers
*
*/
void save_rulers args( ( void ) );
void load_rulers args( ( void ) );
char *get_ruler_title args( ( int ruler_rank, int sex ) );
/*
* spendqp
*/
void save_brands args( ( void ) );
#undef CD
#undef MID
#undef OD
#undef OID
#undef RID
#undef SF
#undef OF