/*************************************************************************** * SmaugWizard (C) 1998, 1999 by Russ Pillsbury | * * SMAUG (C) 1994 - 1999 by Derek Snider. | \\._.// * * | (0...0) * * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | ).:.( * * | {o o} * * -----------------------------------------------------------| (0...0) * * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus, | / ' ' \ * * Scryn, Swordbearer, Rennard, Tricops, Gorog, Grishnakh, |~'~.VxvxV.~'~* * Fireblade and Nivek. | * * ----------------------------------------------------------------------- * * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, and Katja Nyboe. * * ------------------------------------------------------------------------ * * Main mud header file * ***************************************************************************/ #pragma warning( disable: 4244 4996 ) #ifndef SMAUG_H #define SMAUG_H #define then #define new DEBUG_NEW #define CCP (const char*) // for CStrings #define NCCP (char*)(const char*) // for CStrings #define DIM(a) (sizeof(a)/sizeof(a[0])) #define HASHSTR // use string hashing #define Pnew new #define free_string(s) delete [] s typedef int ch_ret; typedef int obj_ret; #define DECLARE_DO_FUN(fun) DO_FUN fun #define DECLARE_SPEC_FUN(fun) SPEC_FUN fun #define DECLARE_SPELL_FUN(fun) SPELL_FUN fun #if !defined(BERR) #define BERR 255 #endif // Forward declarations for classes class CSmaugWizDoc; class CSmaugSocket; class CSystemData; class CSkill; class CSkillTable; class CAffectData; class CAreaData; class CBanData; class CCharacter; class CDescriptor; class CBoardData; class CClanData; class CCouncilData; class CExitData; class CExtraDescrData; class CHelpData; class CFightData; class CMobIndexData; class CNoteData; class CObjData; class CObjIndexData; class pc_data; class CResetData; class CRoomIndexData; class CWizData; class CShopData; class CRepairShopData; class CMobProgData; class CMobProgActList; class CSocialType; class CSocialTable; class CTeleportData; class CExtractedCharData; class CTimerData; class CCmdType; class CDeityData; class CSmaugAffect; class time_info_data; class CWeatherData; class CSmaugMenu; class CAffectList; class CEditor; class CLog; class CSwTime; class CIntVector; class CBitVector; class CActFlags; class CResetList; class CObjectList; // Structure types. typedef struct hunt_hate_fear HHF_DATA; typedef struct menu_data MENU_DATA; typedef struct comment_data COMMENT_DATA; typedef struct tourney_data TOURNEY_DATA; typedef struct godlist_data GOD_DATA; typedef struct killed_data KILLED_DATA; // Function types. typedef void DO_FUN (CCharacter *ch, char *argument); typedef BOOL SPEC_FUN (CCharacter *ch); typedef ch_ret SPELL_FUN (int sn, int level, CCharacter *ch, void *vo); #define DUR_CONV 23.333333333333333333333333 #define HIDDEN_TILDE '*' #define BV00 (1 << 0) #define BV01 (1 << 1) #define BV02 (1 << 2) #define BV03 (1 << 3) #define BV04 (1 << 4) #define BV05 (1 << 5) #define BV06 (1 << 6) #define BV07 (1 << 7) #define BV08 (1 << 8) #define BV09 (1 << 9) #define BV10 (1 << 10) #define BV11 (1 << 11) #define BV12 (1 << 12) #define BV13 (1 << 13) #define BV14 (1 << 14) #define BV15 (1 << 15) #define BV16 (1 << 16) #define BV17 (1 << 17) #define BV18 (1 << 18) #define BV19 (1 << 19) #define BV20 (1 << 20) #define BV21 (1 << 21) #define BV22 (1 << 22) #define BV23 (1 << 23) #define BV24 (1 << 24) #define BV25 (1 << 25) #define BV26 (1 << 26) #define BV27 (1 << 27) #define BV28 (1 << 28) #define BV29 (1 << 29) #define BV30 (1 << 30) #define BV31 (1 << 31) // 32 USED! DO NOT ADD MORE! SB // String and memory management parameters. #define MAX_KEY_HASH 2048 #define MAX_STRING_LENGTH 4096 // buf #define MAX_INPUT_LENGTH 1024 // arg #define MAX_INBUF_SIZE 1024 #define MAX_PAGER_BUFFER 0x8000 #define MAX_LAYERS 8 // maximum clothing layers #define MAX_NEST 100 // maximum container nesting #define MAX_KILLTRACK 25 // track mob vnums killed // Game parameters. // Increase the max'es if you add more of something. // Adjust the pulse numbers to suit yourself. #define MAX_EXP_WORTH 500000 #define MIN_EXP_WORTH 20 #define MAX_REXITS 20 // Maximum exits allowed in 1 room #define MAX_LEVEL 65 #define MAX_CLAN 50 #define MAX_DEITY 50 #define MAX_CPD 4 // Maximum council power level difference #define MAX_SKILL 300 #define MAX_HERB 20 #define MAX_SOCIALS 27 #define MAX_COMMANDS 126 #define MAX_VROOMS 64 #define LEVEL_HERO (MAX_LEVEL - 15) #define LEVEL_IMMORTAL (MAX_LEVEL - 14) #define LEVEL_SUPREME MAX_LEVEL #define LEVEL_INFINITE (MAX_LEVEL - 1) #define LEVEL_ETERNAL (MAX_LEVEL - 2) #define LEVEL_IMPLEMENTOR (MAX_LEVEL - 3) #define LEVEL_SUB_IMPLEM (MAX_LEVEL - 4) #define LEVEL_ASCENDANT (MAX_LEVEL - 5) #define LEVEL_GREATER (MAX_LEVEL - 6) #define LEVEL_GOD (MAX_LEVEL - 7) #define LEVEL_LESSER (MAX_LEVEL - 8) #define LEVEL_TRUEIMM (MAX_LEVEL - 9) #define LEVEL_DEMI (MAX_LEVEL - 10) #define LEVEL_SAVIOR (MAX_LEVEL - 11) #define LEVEL_CREATOR (MAX_LEVEL - 12) #define LEVEL_ACOLYTE (MAX_LEVEL - 13) #define LEVEL_NEOPHYTE (MAX_LEVEL - 14) #define LEVEL_AVATAR (MAX_LEVEL - 15) #define LEVEL_LOG LEVEL_LESSER #define LEVEL_HIGOD LEVEL_GOD #define PULSE_PER_SECOND 4 #define PULSE_VIOLENCE (3 * PULSE_PER_SECOND) #define PULSE_MOBILE (4 * PULSE_PER_SECOND) #define PULSE_TICK (70 * PULSE_PER_SECOND) #define PULSE_AREA (60 * PULSE_PER_SECOND) #define PULSE_AUCTION (10 * PULSE_PER_SECOND) // Return types for move_char, damage, greet_trigger, etc, etc // Added by Thoric to get rid of bugs enum ret_types { rNONE, rCHAR_DIED, rVICT_DIED, rBOTH_DIED, rCHAR_QUIT, rVICT_QUIT, rBOTH_QUIT, rSPELL_FAILED, rOBJ_SCRAPPED, rOBJ_EATEN, rOBJ_EXPIRED, rOBJ_TIMER, rOBJ_SACCED, rOBJ_QUAFFED, rOBJ_USED, rOBJ_EXTRACTED, rOBJ_DRUNK, rCHAR_IMMUNE, rVICT_IMMUNE, rCHAR_AND_OBJ_EXTRACTED = 128, rERROR = 255 }; // Echo types for echo_to_all #define ECHOTAR_ALL 0 #define ECHOTAR_PC 1 #define ECHOTAR_IMM 2 // npc races #define RACE_DRAGON 31 #define CLASS_NONE -1 // For skill/spells according to guild #define RACE_NONE -1 // TO types for act. #define TO_ROOM 0 #define TO_NOTVICT 1 #define TO_VICT 2 #define TO_CHAR 3 // Real action "TYPES" for act. #define AT_BLACK 0 #define AT_BLOOD 1 #define AT_DGREEN 2 #define AT_ORANGE 3 #define AT_DBLUE 4 #define AT_PURPLE 5 #define AT_CYAN 6 #define AT_GREY 7 #define AT_DGREY 8 #define AT_RED 9 #define AT_GREEN 10 #define AT_YELLOW 11 #define AT_BLUE 12 #define AT_PINK 13 #define AT_LBLUE 14 #define AT_WHITE 15 #define AT_BLINK 16 #define AT_PLAIN AT_GREY #define AT_ACTION AT_GREY #define AT_SAY AT_LBLUE #define AT_GOSSIP AT_LBLUE #define AT_YELL AT_WHITE #define AT_TELL AT_WHITE #define AT_HIT AT_WHITE #define AT_HITME AT_YELLOW #define AT_IMMORT AT_YELLOW #define AT_HURT AT_RED #define AT_FALLING AT_WHITE + AT_BLINK #define AT_DANGER AT_RED + AT_BLINK #define AT_MAGIC AT_BLUE #define AT_CONSIDER AT_GREY #define AT_REPORT AT_GREY #define AT_POISON AT_GREEN #define AT_SOCIAL AT_CYAN #define AT_DYING AT_YELLOW #define AT_DEAD AT_RED #define AT_SKILL AT_GREEN #define AT_CARNAGE AT_BLOOD #define AT_DAMAGE AT_WHITE #define AT_FLEE AT_YELLOW #define AT_RMNAME AT_WHITE #define AT_RMDESC AT_YELLOW #define AT_OBJECT AT_GREEN #define AT_PERSON AT_PINK #define AT_LIST AT_BLUE #define AT_BYE AT_GREEN #define AT_GOLD AT_YELLOW #define AT_GTELL AT_BLUE #define AT_NOTE AT_GREEN #define AT_HUNGRY AT_ORANGE #define AT_THIRSTY AT_BLUE #define AT_FIRE AT_RED #define AT_SOBER AT_WHITE #define AT_WEAROFF AT_YELLOW #define AT_EXITS AT_WHITE #define AT_SCORE AT_LBLUE #define AT_RESET AT_DGREEN #define AT_LOG AT_PURPLE #define AT_DIEMSG AT_WHITE #define AT_WARTALK AT_RED #define AT_RACETALK AT_DGREEN #define AT_IGNORE AT_GREEN #define AT_DIVIDER AT_PLAIN #define AT_MORPH AT_GREY #define INIT_WEAPON_CONDITION 12 #define MAX_ITEM_IMPACT 30 #define LANG_ALL 0 // Connected state for a channel. enum connection_types { CON_PLAYING = 1, CON_GET_NAME, CON_GET_NEW_NAME, CON_CONFIRM_NEW_NAME, CON_GET_OLD_PASSWORD, CON_GET_NEW_PASSWORD, CON_CONFIRM_NEW_PASSWORD, CON_GET_NEW_SEX, CON_GET_NEW_CLASS, CON_GET_NEW_RACE, CON_READ_MOTD, CON_EDITING, CON_GET_WANT_RIPANSI, CON_PRESS_ENTER, CON_REDO_CLASS, CON_REDO_RACE }; // Character substates enum char_substates { SUB_NONE, SUB_PAUSE, SUB_PERSONAL_DESC, SUB_OBJ_SHORT, SUB_OBJ_LONG, SUB_OBJ_EXTRA, SUB_MOB_LONG, SUB_MOB_DESC, SUB_ROOM_DESC, SUB_ROOM_EXTRA, SUB_ROOM_EXIT_DESC, SUB_WRITING_NOTE, SUB_MPROG_EDIT, SUB_HELP_EDIT, SUB_WRITING_MAP, SUB_PERSONAL_BIO, SUB_REPEATCMD, SUB_RESTRICTED, SUB_DEITYDESC, // timer types ONLY below this point SUB_TIMER_DO_ABORT = 128, SUB_TIMER_CANT_ABORT }; // Site ban structure. class CBanData { public: CBanData () { memset (this, 0, sizeof (CBanData)); } ~CBanData () { delete name; delete ban_time; } CBanData *GetNext () { return m_pNext; } void SetNext (CBanData* n) { m_pNext = n; } CBanData *GetPrev () { return m_pPrev; } void SetPrev (CBanData* n) { m_pPrev = n; } CBanData *m_pNext; CBanData *m_pPrev; char *name; int level; char *ban_time; }; // Time and weather stuff. typedef enum { SUN_DARK, SUN_RISE, SUN_LIGHT, SUN_SET } sun_positions; typedef enum { SKY_CLOUDLESS, SKY_CLOUDY, SKY_RAINING, SKY_LIGHTNING } sky_conditions; class time_info_data { public: int hour; int day; int month; int year; }; class CWeatherData { public: int mmhg; int change; int sky; int sunlight; }; // Wislist data item class CWizData { public: CWizData () { memset (this, 0, sizeof (CWizData)); } ~CWizData () { delete name; } CWizData *GetNext () { return m_pNext; } void SetNext (CWizData* n) { m_pNext = n; } CWizData *GetLast () { return m_pLast; } void SetLast (CWizData* n) { m_pLast = n; } CWizData *m_pNext; CWizData *m_pLast; char *name; short level; }; // Attribute bonus structures. struct str_app_type { short tohit; short todam; short carry; short wield; }; struct int_app_type { short learn; }; struct wis_app_type { short practice; }; struct dex_app_type { short defensive; }; struct con_app_type { short hitp; short shock; }; struct cha_app_type { short charm; }; struct lck_app_type { short luck; }; // Shop types. #define MAX_TRADE 5 class CShopData { public: CShopData () { memset (this, 0, sizeof (CShopData)); } CShopData *GetNext () { return m_pNext; } void SetNext (CShopData* n) { m_pNext = n; } CShopData *GetPrev () { return m_pPrev; } void SetPrev (CShopData* n) { m_pPrev = n; } CShopData *m_pNext; // Next shop in list CShopData *m_pPrev; // Previous shop in list int keeper; // Vnum of shop keeper mob short buy_type [MAX_TRADE]; // Item types shop will buy short profit_buy; // Cost multiplier for buying short profit_sell; // Cost multiplier for selling short open_hour; // First opening hour short close_hour; // First closing hour }; #define MAX_FIX 3 #define SHOP_FIX 1 #define SHOP_RECHARGE 2 class CRepairShopData { public: CRepairShopData () { memset (this, 0, sizeof (CRepairShopData)); } CRepairShopData *GetNext () { return m_pNext; } void SetNext (CRepairShopData* n) { m_pNext = n; } CRepairShopData *GetPrev () { return m_pPrev; } void SetPrev (CRepairShopData* n) { m_pPrev = n; } CRepairShopData *m_pNext; // Next shop in list CRepairShopData *m_pPrev; // Previous shop in list int keeper; // Vnum of shop keeper mob short fix_type [MAX_FIX]; // Item types shop will fix short profit_fix; // Cost multiplier for fixing short shop_type; // Repair shop type short open_hour; // First opening hour short close_hour; // First closing hour }; // Mob program structures class CActProgData { public: CActProgData () { m_pNext = NULL; vo = NULL; } CActProgData *GetNext () { return m_pNext; } void SetNext (CActProgData* n) { m_pNext = n; } CActProgData *m_pNext; void *vo; }; class CMobProgActList { public: CMobProgActList () { memset (this, 0, sizeof (CMobProgActList)); } ~CMobProgActList (); CMobProgActList *GetNext () { return m_pNext; } void SetNext (CMobProgActList* n) { m_pNext = n; } CMobProgActList *m_pNext; char *buf; CCharacter *ch; CObjData *obj; void *vo; }; class CMobProgData { public: CMobProgData () { memset (this, 0, sizeof (CMobProgData)); } ~CMobProgData (); int type; BOOL triggered; int resetdelay; char *arglist; char *comlist; }; enum group_types { GROUP_CLAN, GROUP_COUNCIL, GROUP_GUILD }; class CCouncilData { public: CCouncilData () { memset (this, 0, sizeof (CCouncilData)); } ~CCouncilData (); CCouncilData *GetNext () { return m_pNext; } void SetNext (CCouncilData* n) { m_pNext = n; } CCouncilData *GetPrev () { return m_pPrev; } void SetPrev (CCouncilData* n) { m_pPrev = n; } char *GetName () { return name; } void SetName (char* n) { name = n; } short GetMembers () { return m_Members; } void SetMembers (short n) { m_Members = n; } void AddMembers (short n) { m_Members = max (0, m_Members + n); } CCouncilData *m_pNext; // next council in list CCouncilData *m_pPrev; // previous council in list char *filename; // Council filename char *name; // Council name char *description; // A brief description of the council char *head; // Council head char *powers; // Council powers short m_Members; // Number of council members int board; // Vnum of council board int meeting; // Vnum of council's meeting room }; struct tourney_data { int open; int low_level; int hi_level; }; // Data structure for notes. class CNoteData { public: CNoteData () { memset (this, 0, sizeof (CNoteData)); } ~CNoteData (); CNoteData *GetNext () { return m_pNext; } void SetNext (CNoteData* n) { m_pNext = n; } CNoteData *GetPrev () { return m_pPrev; } void SetPrev (CNoteData* n) { m_pPrev = n; } CNoteData *m_pNext; CNoteData *m_pPrev; char *sender; char *date; char *to_list; char *subject; int voting; char *yesvotes; char *novotes; char *abstentions; char *text; // STRALLOC }; /*************************************************************************** * * * VALUES OF INTEREST TO AREA BUILDERS * * (Start of section ... start here) * * * ***************************************************************************/ // Well known mob virtual numbers. // Defined in #MOBILES. #define MOB_VNUM_CITYGUARD 3060 #define MOB_VNUM_VAMPIRE 3404 #define MOB_VNUM_ANIMATED_CORPSE 5 #define MOB_VNUM_POLY_WOLF 10 #define MOB_VNUM_POLY_MIST 11 #define MOB_VNUM_POLY_BAT 12 #define MOB_VNUM_POLY_HAWK 13 #define MOB_VNUM_POLY_CAT 14 #define MOB_VNUM_POLY_DOVE 15 #define MOB_VNUM_POLY_FISH 16 // Resistant Immune Susceptible flags #define RIS_FIRE BV00 #define RIS_COLD BV01 #define RIS_ELECTRICITY BV02 #define RIS_ENERGY BV03 #define RIS_BLUNT BV04 #define RIS_PIERCE BV05 #define RIS_SLASH BV06 #define RIS_ACID BV07 #define RIS_POISON BV08 #define RIS_DRAIN BV09 #define RIS_SLEEP BV10 #define RIS_CHARM BV11 #define RIS_HOLD BV12 #define RIS_NONMAGIC BV13 #define RIS_PLUS1 BV14 #define RIS_PLUS2 BV15 #define RIS_PLUS3 BV16 #define RIS_PLUS4 BV17 #define RIS_PLUS5 BV18 #define RIS_PLUS6 BV19 #define RIS_MAGIC BV20 #define RIS_PARALYSIS BV21 // 22 RIS's // Body parts #define PART_HEAD BV00 #define PART_ARMS BV01 #define PART_LEGS BV02 #define PART_HEART BV03 #define PART_BRAINS BV04 #define PART_GUTS BV05 #define PART_HANDS BV06 #define PART_FEET BV07 #define PART_FINGERS BV08 #define PART_EAR BV09 #define PART_EYE BV10 #define PART_LONG_TONGUE BV11 #define PART_EYESTALKS BV12 #define PART_TENTACLES BV13 #define PART_FINS BV14 #define PART_WINGS BV15 #define PART_TAIL BV16 #define PART_SCALES BV17 // for combat #define PART_CLAWS BV18 #define PART_FANGS BV19 #define PART_HORNS BV20 #define PART_TUSKS BV21 #define PART_TAILATTACK BV22 #define PART_SHARPSCALES BV23 #define PART_BEAK BV24 #define PART_HAUNCH BV25 #define PART_HOOVES BV26 #define PART_PAWS BV27 #define PART_FORELEGS BV28 #define PART_FEATHERS BV29 // Autosave flags #define SV_DEATH BV00 #define SV_KILL BV01 #define SV_PASSCHG BV02 #define SV_DROP BV03 #define SV_PUT BV04 #define SV_GIVE BV05 #define SV_AUTO BV06 #define SV_ZAPDROP BV07 #define SV_AUCTION BV08 #define SV_GET BV09 #define SV_RECEIVE BV10 #define SV_IDLE BV11 #define SV_BACKUP BV12 // Pipe flags #define PIPE_TAMPED BV01 #define PIPE_LIT BV02 #define PIPE_HOT BV03 #define PIPE_DIRTY BV04 #define PIPE_FILTHY BV05 #define PIPE_GOINGOUT BV06 #define PIPE_BURNT BV07 #define PIPE_FULLOFASH BV08 // Skill/Spell flags #define SF_WATER BV00 #define SF_EARTH BV01 #define SF_AIR BV02 #define SF_ASTRAL BV03 #define SF_AREA BV04 // is an area spell #define SF_DISTANT BV05 // affects something far away #define SF_REVERSE BV06 #define SF_NOSELF BV07 // Can't target yourself! #define SF_UNUSED2 BV08 // free for use! #define SF_ACCUMULATIVE BV09 // is accumulative #define SF_RECASTABLE BV10 // can be refreshed #define SF_NOSCRIBE BV11 // cannot be scribed #define SF_NOBREW BV12 // cannot be brewed #define SF_GROUPSPELL BV13 // only affects group members #define SF_OBJECT BV14 // directed at an object #define SF_CHARACTER BV15 // directed at a character #define SF_SECRETSKILL BV16 // hidden unless learned #define SF_PKSENSITIVE BV17 // much harder for plr vs. plr #define SF_STOPONFAIL BV18 // stops spell on first failure #define SF_NOFIGHT BV19 // stops if char fighting #define SF_NODISPEL BV20 // stops spell from being dispelled enum save_types { SS_NONE, SS_POISON_DEATH, SS_ROD_WANDS, SS_PARA_PETRI, SS_BREATH, SS_SPELL_STAFF }; #define ALL_BITS INT_MAX #define SDAM_MASK ALL_BITS & ~(BV00 | BV01 | BV02) #define SACT_MASK ALL_BITS & ~(BV03 | BV04 | BV05) #define SCLA_MASK ALL_BITS & ~(BV06 | BV07 | BV08) #define SPOW_MASK ALL_BITS & ~(BV09 | BV10) enum spell_dam_types { SD_NONE, SD_FIRE, SD_COLD, SD_ELECTRICITY, SD_ENERGY, SD_ACID, SD_POISON, SD_DRAIN }; enum spell_act_types { SA_NONE, SA_CREATE, SA_DESTROY, SA_RESIST, SA_SUSCEPT, SA_DIVINATE, SA_OBSCURE, SA_CHANGE }; enum spell_power_types { SP_NONE, SP_MINOR, SP_GREATER, SP_MAJOR }; enum spell_class_types { SC_NONE, SC_LUNAR, SC_SOLAR, SC_TRAVEL, SC_SUMMON, SC_LIFE, SC_DEATH, SC_ILLUSION }; enum spell_save_effects { SE_NONE, SE_NEGATE, SE_EIGHTHDAM, SE_QUARTERDAM, SE_HALFDAM, SE_3QTRDAM, SE_REFLECT, SE_ABSORB }; // Sex. // Used in #MOBILES. enum sex_types { SEX_NEUTRAL, SEX_MALE, SEX_FEMALE }; enum trap_types { TRAP_TYPE_POISON_GAS = 1, TRAP_TYPE_POISON_DART, TRAP_TYPE_POISON_NEEDLE, TRAP_TYPE_POISON_DAGGER, TRAP_TYPE_POISON_ARROW, TRAP_TYPE_BLINDNESS_GAS, TRAP_TYPE_SLEEPING_GAS, TRAP_TYPE_FLAME, TRAP_TYPE_EXPLOSION, TRAP_TYPE_ACID_SPRAY, TRAP_TYPE_ELECTRIC_SHOCK, TRAP_TYPE_BLADE, TRAP_TYPE_SEX_CHANGE }; #define MAX_TRAPTYPE TRAP_TYPE_SEX_CHANGE #define TRAP_ROOM BV00 #define TRAP_OBJ BV01 #define TRAP_ENTER_ROOM BV02 #define TRAP_LEAVE_ROOM BV03 #define TRAP_OPEN BV04 #define TRAP_CLOSE BV05 #define TRAP_GET BV06 #define TRAP_PUT BV07 #define TRAP_PICK BV08 #define TRAP_UNLOCK BV09 #define TRAP_N BV10 #define TRAP_S BV11 #define TRAP_E BV12 #define TRAP_W BV13 #define TRAP_U BV14 #define TRAP_D BV15 #define TRAP_EXAMINE BV16 #define TRAP_NE BV17 #define TRAP_NW BV18 #define TRAP_SE BV19 #define TRAP_SW BV20 // Well known object virtual numbers. // Defined in #OBJECTS. #define OBJ_VNUM_MONEY_ONE 2 #define OBJ_VNUM_MONEY_SOME 3 #define OBJ_VNUM_CORPSE_NPC 10 #define OBJ_VNUM_CORPSE_PC 11 #define OBJ_VNUM_SEVERED_HEAD 12 #define OBJ_VNUM_TORN_HEART 13 #define OBJ_VNUM_SLICED_ARM 14 #define OBJ_VNUM_SLICED_LEG 15 #define OBJ_VNUM_SPILLED_GUTS 16 #define OBJ_VNUM_BLOOD 17 #define OBJ_VNUM_BLOODSTAIN 18 #define OBJ_VNUM_SCRAPS 19 #define OBJ_VNUM_MUSHROOM 20 #define OBJ_VNUM_LIGHT_BALL 21 #define OBJ_VNUM_SPRING 22 #define OBJ_VNUM_SLICE 24 #define OBJ_VNUM_SHOPPING_BAG 25 #define OBJ_VNUM_BLOODLET 26 #define OBJ_VNUM_FIRE 30 #define OBJ_VNUM_TRAP 31 #define OBJ_VNUM_PORTAL 32 #define OBJ_VNUM_BLACK_POWDER 33 #define OBJ_VNUM_SCROLL_SCRIBING 34 #define OBJ_VNUM_FLASK_BREWING 35 #define OBJ_VNUM_NOTE 36 // Academy eq #define OBJ_VNUM_SCHOOL_VEST 10308 #define OBJ_VNUM_SCHOOL_SHIELD 10310 #define OBJ_VNUM_SCHOOL_BANNER 10311 #define OBJ_VNUM_SCHOOL_DAGGER 10312 #define OBJ_VNUM_SCHOOL_SWORD 10313 #define OBJ_VNUM_SCHOOL_MACE 10315 #define OBJ_VNUM_GUIDE 10333 #define OBJ_VNUM_SACK 123 // Spectral gate // Item types. // Used in #OBJECTS. enum item_types { ITEM_NONE, ITEM_LIGHT, ITEM_SCROLL, ITEM_WAND, ITEM_STAFF, ITEM_WEAPON, ITEM_FIREWEAPON, ITEM_MISSILE, ITEM_TREASURE, ITEM_ARMOR, ITEM_POTION, ITEM_WORN, ITEM_FURNITURE, ITEM_TRASH, ITEM_OLDTRAP, ITEM_CONTAINER, ITEM_NOTE, ITEM_DRINK_CON, ITEM_KEY, ITEM_FOOD, ITEM_MONEY, ITEM_PEN, ITEM_BOAT, ITEM_CORPSE_NPC, ITEM_CORPSE_PC, ITEM_FOUNTAIN, ITEM_PILL, ITEM_BLOOD, ITEM_BLOODSTAIN, ITEM_SCRAPS, ITEM_PIPE, ITEM_HERB_CON, ITEM_HERB, ITEM_INCENSE, ITEM_FIRE, ITEM_BOOK, ITEM_SWITCH, ITEM_LEVER, ITEM_PULLCHAIN, ITEM_BUTTON, ITEM_DIAL, ITEM_RUNE, ITEM_RUNEPOUCH, ITEM_MATCH, ITEM_TRAP, ITEM_MAP, ITEM_PORTAL, ITEM_PAPER, ITEM_TINDER, ITEM_LOCKPICK, ITEM_SPIKE, ITEM_DISEASE, ITEM_OIL, ITEM_FUEL, ITEM_EMPTY1, ITEM_EMPTY2, ITEM_MISSILE_WEAPON, ITEM_PROJECTILE, ITEM_QUIVER, ITEM_SHOVEL, ITEM_SALVE, ITEM_COOK, ITEM_KEYRING, ITEM_ODOR }; #define MAX_ITEM_TYPE ITEM_ODOR // Magic flags - extra extra_flags for objects that are used in spells #define ITEM_RETURNING BV00 #define ITEM_BACKSTABBER BV01 #define ITEM_BANE BV02 #define ITEM_MAGIC_LOYAL BV03 #define ITEM_HASTE BV04 #define ITEM_DRAIN BV05 #define ITEM_LIGHTNING_BLADE BV06 #define ITEM_PKDISARMED BV07 // Maybe temporary, not a perma flag // Lever/dial/switch/button/pullchain flags #define TRIG_UP BV00 #define TRIG_UNLOCK BV01 #define TRIG_LOCK BV02 #define TRIG_D_NORTH BV03 #define TRIG_D_SOUTH BV04 #define TRIG_D_EAST BV05 #define TRIG_D_WEST BV06 #define TRIG_D_UP BV07 #define TRIG_D_DOWN BV08 #define TRIG_DOOR BV09 #define TRIG_CONTAINER BV10 #define TRIG_OPEN BV11 #define TRIG_CLOSE BV12 #define TRIG_PASSAGE BV13 #define TRIG_OLOAD BV14 #define TRIG_MLOAD BV15 #define TRIG_TELEPORT BV16 #define TRIG_TELEPORTALL BV17 #define TRIG_TELEPORTPLUS BV18 #define TRIG_DEATH BV19 #define TRIG_CAST BV20 #define TRIG_FAKEBLADE BV21 #define TRIG_RAND4 BV22 #define TRIG_RAND6 BV23 #define TRIG_TRAPDOOR BV24 #define TRIG_ANOTHEROOM BV25 #define TRIG_USEDIAL BV26 #define TRIG_ABSOLUTEVNUM BV27 #define TRIG_SHOWROOMDESC BV28 #define TRIG_AUTORETURN BV29 #define TELE_SHOWDESC BV00 #define TELE_TRANSALL BV01 #define TELE_TRANSALLPLUS BV02 // Wear flags. // Used in #OBJECTS. #define ITEM_TAKE BV00 #define ITEM_WEAR_FINGER BV01 #define ITEM_WEAR_NECK BV02 #define ITEM_WEAR_BODY BV03 #define ITEM_WEAR_HEAD BV04 #define ITEM_WEAR_LEGS BV05 #define ITEM_WEAR_FEET BV06 #define ITEM_WEAR_HANDS BV07 #define ITEM_WEAR_ARMS BV08 #define ITEM_WEAR_SHIELD BV09 #define ITEM_WEAR_ABOUT BV10 #define ITEM_WEAR_WAIST BV11 #define ITEM_WEAR_WRIST BV12 #define ITEM_WIELD BV13 #define ITEM_HOLD BV14 #define ITEM_DUAL_WIELD BV15 #define ITEM_WEAR_EARS BV16 #define ITEM_WEAR_EYES BV17 #define ITEM_MISSILE_WIELD BV18 #define ITEM_WEAR_BACK BV19 #define ITEM_WEAR_FACE BV20 #define ITEM_WEAR_ANKLE BV21 #define ITEM_WEAR_MAX 21 // Apply types (for affects). // Used in #OBJECTS. enum apply_types { APPLY_NONE, APPLY_STR, APPLY_DEX, APPLY_INT, APPLY_WIS, APPLY_CON, // 0 APPLY_SEX, APPLY_CLASS, APPLY_LEVEL, APPLY_AGE, APPLY_HEIGHT, // 6 APPLY_WEIGHT, APPLY_MANA, APPLY_HIT, APPLY_MOVE, APPLY_GOLD, // 11 APPLY_EXP, APPLY_AC, APPLY_HITROLL, APPLY_DAMROLL, // 16 APPLY_SAVING_POISON, APPLY_SAVING_ROD, APPLY_SAVING_PARA, // 20 APPLY_SAVING_BREATH, APPLY_SAVING_SPELL, APPLY_CHA, APPLY_AFFECT, // 23 APPLY_RESISTANT, APPLY_IMMUNE, APPLY_SUSCEPTIBLE, APPLY_WEAPONSPELL, // 27 APPLY_LCK, APPLY_BACKSTAB, APPLY_PICK, APPLY_TRACK, APPLY_STEAL, // 31 APPLY_SNEAK, APPLY_HIDE, APPLY_PALM, APPLY_DETRAP, APPLY_DODGE, // 36 APPLY_PEEK, APPLY_SCAN, APPLY_GOUGE, APPLY_SEARCH, APPLY_MOUNT, // 41 APPLY_DISARM, APPLY_KICK, APPLY_PARRY, APPLY_BASH, APPLY_STUN, // 46 APPLY_PUNCH, APPLY_CLIMB, APPLY_GRIP, APPLY_SCRIBE, APPLY_BREW, // 51 APPLY_WEARSPELL, APPLY_REMOVESPELL, APPLY_EMOTION, APPLY_MENTALSTATE, // 56 APPLY_STRIPSN, APPLY_REMOVE, APPLY_DIG, APPLY_FULL, APPLY_THIRST, // 60 APPLY_DRUNK, APPLY_BLOOD, APPLY_COOK, APPLY_RECURRINGSPELL, // 65 APPLY_CONTAGIOUS, APPLY_EXT_AFFECT, APPLY_ODOR, APPLY_ROOMFLAG, // 69 APPLY_SECTORTYPE, APPLY_ROOMLIGHT, APPLY_TELEVNUM, APPLY_TELEDELAY, // 73 MAX_APPLY_TYPE }; // 77 #define REVERSE_APPLY 1000 // Values for containers (value[1]). // Used in #OBJECTS. #define CONT_CLOSEABLE 1 #define CONT_PICKPROOF 2 #define CONT_CLOSED 4 #define CONT_LOCKED 8 // Directions. // Used in #ROOMS. enum dir_types { DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_UP, DIR_DOWN, DIR_NORTHEAST, DIR_NORTHWEST, DIR_SOUTHEAST, DIR_SOUTHWEST, DIR_SOMEWHERE }; #define MAX_DIR DIR_SOUTHWEST // max for normal walking #define DIR_PORTAL DIR_SOMEWHERE // portal direction // Sector types. // Used in #ROOMS. enum SectorTypes { SECT_INSIDE, SECT_CITY, SECT_FIELD, SECT_FOREST, SECT_HILLS, SECT_MOUNTAIN, SECT_WATER_SWIM, SECT_WATER_NOSWIM, SECT_UNDERWATER, SECT_AIR, SECT_DESERT, SECT_DUNNO, SECT_OCEANFLOOR, SECT_UNDERGROUND, SECT_MAX }; // Equpiment wear locations. // Used in #RESETS. enum wear_locations { WEAR_NONE = -1, WEAR_LIGHT = 0, WEAR_FINGER_L, WEAR_FINGER_R, WEAR_NECK_1, WEAR_NECK_2, WEAR_BODY, WEAR_HEAD, WEAR_LEGS, WEAR_FEET, WEAR_HANDS, WEAR_ARMS, WEAR_SHIELD, WEAR_ABOUT, WEAR_WAIST, WEAR_WRIST_L, WEAR_WRIST_R, WEAR_WIELD, WEAR_HOLD, WEAR_DUAL_WIELD, WEAR_EARS, WEAR_EYES, WEAR_MISSILE_WIELD, WEAR_BACK, WEAR_FACE, WEAR_ANKLE_L, WEAR_ANKLE_R, MAX_WEAR }; // Board Types enum board_types { BOARD_NOTE, BOARD_MAIL }; // Auth Flags #define FLAG_WRAUTH 1 #define FLAG_AUTH 2 /*************************************************************************** * * * VALUES OF INTEREST TO AREA BUILDERS * * (End of this section ... stop here) * * * ***************************************************************************/ // Conditions. enum conditions { COND_DRUNK, COND_FULL, COND_THIRST, COND_BLOODTHIRST, MAX_CONDS }; // Positions. enum positions { POS_DEAD, POS_MORTAL, POS_INCAP, POS_STUNNED, POS_SLEEPING, POS_BERSERK, POS_RESTING, POS_AGGRESSIVE, POS_SITTING, POS_FIGHTING, POS_DEFENSIVE, POS_EVASIVE, POS_STANDING, POS_MOUNTED, POS_SHOVE, POS_DRAG, POS_MAX }; // Bits for pc_data->flags. #define PCFLAG_R1 BV00 #define PCFLAG_DEADLY BV01 #define PCFLAG_UNAUTHED BV02 #define PCFLAG_NORECALL BV03 #define PCFLAG_NOINTRO BV04 #define PCFLAG_GAG BV05 #define PCFLAG_RETIRED BV06 #define PCFLAG_GUEST BV07 #define PCFLAG_NOSUMMON BV08 #define PCFLAG_PAGERON BV09 #define PCFLAG_NOTITLE BV10 enum timer_types { TIMER_NONE, TIMER_RECENTFIGHT, TIMER_SHOVEDRAG, TIMER_DO_FUN, TIMER_AUTH, TIMER_PKILLED, TIMER_ASUPRESSED, TIMER_NUISANCE }; class CTimerData { public: CTimerData () { memset (this, 0, sizeof (CTimerData)); } CTimerData (short ty, short ct, int val, DO_FUN* fun) { m_Type = ty; m_Count = ct; m_Value = val; m_DoFun = fun; } short CountDown () { return --m_Count; } short GetType () { return m_Type; } short GetCount () { return m_Count; } int GetValue () { return m_Value; } DO_FUN *GetDoFun () { return m_DoFun; } void DoFun (CCharacter* ch, char* arg) { ASSERT (m_DoFun); m_DoFun (ch, arg); } void SetType (short t) { m_Type = t; } void SetCount (short c) { m_Count = c; } void SetValue (int v) { m_Value = v; } void SetDoFun (DO_FUN* f) { m_DoFun = f; } CTimerData *GetNext () { return m_pNext; } void SetNext (CTimerData* n) { m_pNext = n; } CTimerData *GetPrev () { return m_pPrev; } void SetPrev (CTimerData* n) { m_pPrev = n; } private: CTimerData *m_pNext; CTimerData *m_pPrev; short m_Type; short m_Count; int m_Value; DO_FUN *m_DoFun; }; // Channel bits. #define CHANNEL_AUCTION BV00 #define CHANNEL_CHAT BV01 #define CHANNEL_QUEST BV02 #define CHANNEL_IMMTALK BV03 #define CHANNEL_MUSIC BV04 #define CHANNEL_ASK BV05 #define CHANNEL_SHOUT BV06 #define CHANNEL_YELL BV07 #define CHANNEL_MONITOR BV08 #define CHANNEL_LOG BV09 #define CHANNEL_HIGHGOD BV10 #define CHANNEL_CLAN BV11 #define CHANNEL_BUILD BV12 #define CHANNEL_HIGH BV13 #define CHANNEL_AVTALK BV14 #define CHANNEL_PRAY BV15 #define CHANNEL_COUNCIL BV16 #define CHANNEL_GUILD BV17 #define CHANNEL_COMM BV18 #define CHANNEL_TELLS BV19 #define CHANNEL_ORDER BV20 #define CHANNEL_NEWBIE BV21 #define CHANNEL_WARTALK BV22 #define CHANNEL_RACETALK BV23 #define CHANNEL_WARN BV24 #define CHANNEL_WHISPER BV25 #define CHANNEL_AUTH BV26 // Area defines - Scryn 8/11 #define AREA_DELETED BV00 #define AREA_LOADED BV01 // Area flags - Narn Mar/96 #define AFLAG_NOPKILL BV00 #define AFLAG_FREEKILL BV01 #define AFLAG_NOTELEPORT BV02 struct hunt_hate_fear { char *name; CCharacter *who; }; class CFightData { public: CFightData () { memset (this, 0, sizeof (CFightData)); } CCharacter *who; int xp; short align; short duration; short timeskilled; }; class CExtractedCharData { public: CExtractedCharData () { memset (this, 0, sizeof (CExtractedCharData)); } CExtractedCharData *GetNext () { return m_pNext; } void SetNext (CExtractedCharData* n) { m_pNext = n; } CExtractedCharData *m_pNext; CCharacter *ch; CRoomIndexData *room; ch_ret retcode; BOOL extract; }; struct killed_data { int vnum; char count; }; // Liquids. #define LIQ_WATER 0 #define LIQ_MAX 18 struct liq_type { char *liq_name; char *liq_color; short liq_affect[3]; }; // Extra description data for a room or object. // destructor is in Objects.cpp class CExtraDescrData { public: CExtraDescrData () { keyword = description = NULL; } ~CExtraDescrData (); char *GetDescription () { return description; } void SetDescription (char* p) { description = p; } char *keyword; // Keyword in look/examine char *description; // What to see }; // Constants for arg2 of 'B' resets. #define BIT_RESET_DOOR 0 #define BIT_RESET_OBJECT 1 #define BIT_RESET_MOBILE 2 #define BIT_RESET_ROOM 3 #define BIT_RESET_TYPE_MASK 0xFF // 256 should be enough #define BIT_RESET_DOOR_THRESHOLD 8 #define BIT_RESET_DOOR_MASK 0xFF00 // 256 should be enough #define BIT_RESET_SET BV30 #define BIT_RESET_TOGGLE BV31 #define BIT_RESET_FREEBITS 0x3FFF0000 // For reference // Load in the gods building data. -- Altrag struct godlist_data { GOD_DATA *next; GOD_DATA *prev; int level; int low_r_vnum; int hi_r_vnum; int low_o_vnum; int hi_o_vnum; int low_m_vnum; int hi_m_vnum; }; // Delayed teleport type. class CTeleportData { public: CTeleportData () { memset (this, 0, sizeof (CTeleportData)); } CTeleportData *GetNext () { return m_pNext; } void SetNext (CTeleportData* n) { m_pNext = n; } CTeleportData *GetPrev () { return m_pPrev; } void SetPrev (CTeleportData* n) { m_pPrev = n; } CTeleportData *m_pNext; CTeleportData *m_pPrev; CRoomIndexData *room; short timer; }; // Types of skill numbers. Used to keep separate lists of sn's // Must be non-overlapping with spell/skill types, // but may be arbitrary beyond that. #define TYPE_UNDEFINED -1 #define TYPE_HIT 1000 // allows for 1000 skills/spells #define TYPE_HERB 2000 // allows for 1000 attack types #define TYPE_PERSONAL 3000 // allows for 1000 herb types #define TYPE_RACIAL 4000 // allows for 1000 personal types #define TYPE_DISEASE 5000 // allows for 1000 racial types // Target types. typedef enum { TAR_IGNORE, TAR_CHAR_OFFENSIVE, TAR_CHAR_DEFENSIVE, TAR_CHAR_SELF, TAR_OBJ_INV } target_types; enum CSkills { SKILL_UNKNOWN, SKILL_SPELL, SKILL_SKILL, SKILL_WEAPON, SKILL_TONGUE, SKILL_HERB, SKILL_RACIAL, SKILL_DISEASE }; struct timerset { int num_uses; struct timeval total_time; struct timeval min_time; struct timeval max_time; }; // These are skill_lookup return values for common skills and spells. extern short gsn_detrap; extern short gsn_backstab; extern short gsn_circle; extern short gsn_cook; extern short gsn_dodge; extern short gsn_hide; extern short gsn_peek; extern short gsn_pick_lock; extern short gsn_scan; extern short gsn_sneak; extern short gsn_steal; extern short gsn_gouge; extern short gsn_track; extern short gsn_search; extern short gsn_dig; extern short gsn_mount; extern short gsn_bashdoor; extern short gsn_berserk; extern short gsn_hitall; extern short gsn_disarm; extern short gsn_enhanced_damage; extern short gsn_kick; extern short gsn_parry; extern short gsn_rescue; extern short gsn_second_attack; extern short gsn_third_attack; extern short gsn_fourth_attack; extern short gsn_fifth_attack; extern short gsn_dual_wield; extern short gsn_feed; extern short gsn_bloodlet; extern short gsn_broach; extern short gsn_mistwalk; extern short gsn_aid; // used to do specific lookups extern short gsn_first_spell; extern short gsn_first_skill; extern short gsn_first_weapon; extern short gsn_first_tongue; extern short gsn_top_sn; // styles extern short gsn_style_evasive; extern short gsn_style_defensive; extern short gsn_style_standard; extern short gsn_style_aggressive; extern short gsn_style_berserk; // spells extern short gsn_blindness; extern short gsn_charm_person; extern short gsn_aqua_breath; extern short gsn_curse; extern short gsn_invis; extern short gsn_mass_invis; extern short gsn_poison; extern short gsn_sleep; extern short gsn_possess; extern short gsn_fireball; // for fireshield extern short gsn_chill_touch; // for iceshield extern short gsn_lightning_bolt; // for shockshield // newer attack skills extern short gsn_punch; extern short gsn_bash; extern short gsn_stun; extern short gsn_bite; extern short gsn_claw; extern short gsn_sting; extern short gsn_tail; extern short gsn_poison_weapon; extern short gsn_scribe; extern short gsn_brew; extern short gsn_climb; extern short gsn_pugilism; extern short gsn_long_blades; extern short gsn_short_blades; extern short gsn_flexible_arms; extern short gsn_talonous_arms; extern short gsn_bludgeons; extern short gsn_missile_weapons; extern short gsn_shieldwork; extern short gsn_grip; extern short gsn_slice; // Language gsns. -- Altrag extern short gsn_common; extern short gsn_elven; extern short gsn_dwarven; extern short gsn_pixie; extern short gsn_ogre; extern short gsn_orcish; extern short gsn_trollish; extern short gsn_goblin; extern short gsn_halfling; // 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)) != 0 #define SET_BIT(var,bit) ((var) |= (bit)) #define REMOVE_BIT(var,bit) ((var) &= ~(bit)) #define TOGGLE_BIT(var,bit) ((var) ^= (bit)) // Memory allocation macros. // Since we are using two different memory allocation schemes, we have to // make sure we handle each block with the same allocation and de-allocation // method. The schemes we're currently using are: // a) c++ new and delete. // b) STRALLOC macro - maps to the built-in string hashing scheme. // // Internally, the hashed strings also use new and delete. (RCP) #ifdef HASHSTR #define STRALLOC(point) str_alloc((point)) #define QUICKLINK(point) quick_link((point)) #define QUICKMATCH(p1,p2) (int) (p1) == (int) (p2) #define STRFREE(point) StrFree (point, __FILE__, __LINE__) //#define STRFREE(point) \ //do { \ // if ((point)) \ // if (str_free(point) == -1) \ // gpDoc->m_pLog->Printf \ // ("STRFREEing bad pointer in %s, line %d\n", \ // __FILE__, __LINE__ ); \ //} while(0) #else #define STRALLOC(point) str_dup((point)) #define QUICKLINK(point) str_dup((point)) #define QUICKMATCH(p1,p2) strcmp((p1), (p2)) == 0 #define STRFREE(point) if (point) free(point) } while(0) #endif // double-linked list handling macros -Thoric // I've converted some of the linked lists over to use the MFC CPtrList, // so far I don't see any noticable performance hit. I'll continue to // convert these lists, especially the ones which have code to maintain // them other than these three macros. The chances of a program error are // much smaller with the CPtrLists - RCP. #define LINK(link,first,last) \ do \ { \ if (!(first)) \ (first) = (link); \ else (last)->SetNext (link); \ (link)->SetNext (NULL); \ (link)->SetPrev (last); \ (last) = (link); \ } while(0) #define INSERT(link,insert,first) \ do { \ (link)->SetPrev ((insert)->GetPrev ()); \ if (!(insert)->GetPrev ()) \ (first) = (link); \ else \ (insert)->GetPrev()->SetNext (link); \ (insert)->SetPrev (link); \ (link)->SetNext (insert); \ } while(0) #define UNLINK(link,first,last) \ do \ { \ if (!(link)->GetPrev ()) \ (first) = (link)->GetNext (); \ else (link)->GetPrev()->SetNext((link)->GetNext()); \ if (!(link)->GetNext ()) \ (last) = (link)->GetPrev (); \ else (link)->GetNext()->SetPrev((link)->GetPrev()); \ } while(0) // 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 cha_app_type cha_app [26]; extern const struct lck_app_type lck_app [26]; extern const struct liq_type liq_table [LIQ_MAX]; extern char* const attack_table [18]; extern char* const skill_tname []; extern short const movement_loss [SECT_MAX]; extern char* const dir_name []; extern char* const where_name []; extern const short rev_dir []; extern const int trap_door []; extern char* const r_flags []; extern char* const w_flags []; extern char* const o_types []; extern char* const a_types []; extern char* const pc_flags []; extern char* const trap_flags []; extern char* const ris_flags []; extern char* const trig_flags []; extern char* const part_flags []; extern char* const area_flags []; // Global variables. extern int numobjsloaded; extern int top_vroom; extern CRoomIndexData *vroom_hash [MAX_VROOMS]; extern CCharacter *cur_char; extern CRoomIndexData *cur_room; extern BOOL cur_char_died; extern ch_ret global_retcode; extern int cur_obj; extern int cur_obj_serial; extern BOOL cur_obj_extracted; extern obj_ret global_objcode; extern CShopData *first_shop; extern CShopData *last_shop; extern CRepairShopData *first_repair; extern CRepairShopData *last_repair; extern CBanData *first_ban; extern CBanData *last_ban; extern CCharacter *first_char; extern CCharacter *last_char; extern CCouncilData *first_council; extern CCouncilData *last_council; extern CDeityData *first_deity; extern CDeityData *last_deity; extern CTeleportData *first_teleport; extern CTeleportData *last_teleport; extern CObjData *extracted_obj_queue; extern CExtractedCharData *extracted_char_queue; extern CObjData *save_equipment [MAX_WEAR][MAX_LAYERS]; extern CCharacter *quitting_char; extern CCharacter *loading_char; extern CCharacter *saving_char; extern CObjData *all_obj; extern char bug_buf []; extern BOOL fLogAll; extern char log_buf []; extern time_info_data time_info; extern CWeatherData weather_info; extern int top_ed; extern int top_exit; extern int top_affect; extern CActProgData *mob_act_list; // Command functions. // Defined in act_*.c (mostly). DECLARE_DO_FUN(skill_notfound); DECLARE_DO_FUN(do_aassign); DECLARE_DO_FUN(do_advance); DECLARE_DO_FUN(do_affected); DECLARE_DO_FUN(do_afk); DECLARE_DO_FUN(do_aid); DECLARE_DO_FUN(do_allow); DECLARE_DO_FUN(do_ansi); DECLARE_DO_FUN(do_answer); DECLARE_DO_FUN(do_apply); DECLARE_DO_FUN(do_appraise); DECLARE_DO_FUN(do_areas); DECLARE_DO_FUN(do_aset); DECLARE_DO_FUN(do_ask); DECLARE_DO_FUN(do_astat); DECLARE_DO_FUN(do_at); DECLARE_DO_FUN(do_atmob); DECLARE_DO_FUN(do_atobj); DECLARE_DO_FUN(do_auction); DECLARE_DO_FUN(do_authorize); DECLARE_DO_FUN(do_AutoAuthorize); DECLARE_DO_FUN(do_avtalk); DECLARE_DO_FUN(do_backstab); DECLARE_DO_FUN(do_balzhur); DECLARE_DO_FUN(do_bamfin); DECLARE_DO_FUN(do_bamfout); DECLARE_DO_FUN(do_ban); DECLARE_DO_FUN(do_bash); DECLARE_DO_FUN(do_bashdoor); DECLARE_DO_FUN(do_berserk); DECLARE_DO_FUN(do_bestow); DECLARE_DO_FUN(do_bestowarea); DECLARE_DO_FUN(do_bio); DECLARE_DO_FUN(do_bite); DECLARE_DO_FUN(do_boards); DECLARE_DO_FUN(do_bodybag); DECLARE_DO_FUN(do_brandish); DECLARE_DO_FUN(do_brew); DECLARE_DO_FUN(do_bset); DECLARE_DO_FUN(do_bstat); DECLARE_DO_FUN(do_bug); DECLARE_DO_FUN(do_bury); DECLARE_DO_FUN(do_buy); DECLARE_DO_FUN(do_cast); DECLARE_DO_FUN(do_cedit); DECLARE_DO_FUN(do_channels); DECLARE_DO_FUN(do_chat); DECLARE_DO_FUN(do_check_vnums); DECLARE_DO_FUN(do_circle); DECLARE_DO_FUN(do_clans); DECLARE_DO_FUN(do_clantalk); DECLARE_DO_FUN(do_claw); DECLARE_DO_FUN(do_climb); DECLARE_DO_FUN(do_close); DECLARE_DO_FUN(do_cmdtable); DECLARE_DO_FUN(do_commands); DECLARE_DO_FUN(do_comment); DECLARE_DO_FUN(do_compare); DECLARE_DO_FUN(do_config); DECLARE_DO_FUN(do_consider); DECLARE_DO_FUN(do_cook); DECLARE_DO_FUN(do_council_induct); DECLARE_DO_FUN(do_council_outcast); DECLARE_DO_FUN(do_councils); DECLARE_DO_FUN(do_counciltalk); DECLARE_DO_FUN(do_credits); DECLARE_DO_FUN(do_cset); DECLARE_DO_FUN(do_deities); DECLARE_DO_FUN(do_deny); DECLARE_DO_FUN(do_description); DECLARE_DO_FUN(do_destro); DECLARE_DO_FUN(do_destroy); DECLARE_DO_FUN(do_detrap); DECLARE_DO_FUN(do_devote); DECLARE_DO_FUN(do_dig); DECLARE_DO_FUN(do_disarm); DECLARE_DO_FUN(do_disconnect); DECLARE_DO_FUN(do_dismiss); DECLARE_DO_FUN(do_dismount); DECLARE_DO_FUN(do_dmesg); DECLARE_DO_FUN(do_down); DECLARE_DO_FUN(do_drag); DECLARE_DO_FUN(do_drink); DECLARE_DO_FUN(do_drop); DECLARE_DO_FUN(do_diagnose); DECLARE_DO_FUN(do_east); DECLARE_DO_FUN(do_eat); DECLARE_DO_FUN(do_echo); DECLARE_DO_FUN(do_elevate); DECLARE_DO_FUN(do_emote); DECLARE_DO_FUN(do_empty); DECLARE_DO_FUN(do_enter); DECLARE_DO_FUN(do_equipment); DECLARE_DO_FUN(do_examine); DECLARE_DO_FUN(do_exits); DECLARE_DO_FUN(do_feed); DECLARE_DO_FUN(do_fill); DECLARE_DO_FUN(do_fire); DECLARE_DO_FUN(do_fixchar); DECLARE_DO_FUN(do_flee); DECLARE_DO_FUN(do_foldarea); DECLARE_DO_FUN(do_follow); DECLARE_DO_FUN(do_for); DECLARE_DO_FUN(do_force); DECLARE_DO_FUN(do_forceclose); DECLARE_DO_FUN(do_fquit); // Gorog DECLARE_DO_FUN(do_form_password); DECLARE_DO_FUN(do_freeze); DECLARE_DO_FUN(do_get); DECLARE_DO_FUN(do_gfighting); DECLARE_DO_FUN(do_give); DECLARE_DO_FUN(do_glance); DECLARE_DO_FUN(do_gold); DECLARE_DO_FUN(do_goto); DECLARE_DO_FUN(do_gouge); DECLARE_DO_FUN(do_group); DECLARE_DO_FUN(do_grub); DECLARE_DO_FUN(do_gtell); DECLARE_DO_FUN(do_guilds); DECLARE_DO_FUN(do_guildtalk); DECLARE_DO_FUN(do_gwhere); DECLARE_DO_FUN(do_hedit); DECLARE_DO_FUN(do_hell); DECLARE_DO_FUN(do_help); DECLARE_DO_FUN(do_hide); DECLARE_DO_FUN(do_hitall); DECLARE_DO_FUN(do_hlist); DECLARE_DO_FUN(do_holylight); DECLARE_DO_FUN(do_homepage); DECLARE_DO_FUN(do_hset); DECLARE_DO_FUN(do_ide); DECLARE_DO_FUN(do_idea); DECLARE_DO_FUN(do_ignore); DECLARE_DO_FUN(do_immortalize); DECLARE_DO_FUN(do_immtalk); DECLARE_DO_FUN(do_induct); DECLARE_DO_FUN(do_installarea); DECLARE_DO_FUN(do_instaroom); DECLARE_DO_FUN(do_instazone); DECLARE_DO_FUN(do_inventory); DECLARE_DO_FUN(do_invis); DECLARE_DO_FUN(do_kick); DECLARE_DO_FUN(do_kill); DECLARE_DO_FUN(do_languages); DECLARE_DO_FUN(do_last); DECLARE_DO_FUN(do_leave); DECLARE_DO_FUN(do_level); DECLARE_DO_FUN(do_light); DECLARE_DO_FUN(do_list); DECLARE_DO_FUN(do_litterbug); DECLARE_DO_FUN(do_loadarea); DECLARE_DO_FUN(do_loadup); DECLARE_DO_FUN(do_lock); DECLARE_DO_FUN(do_log); DECLARE_DO_FUN(do_look); DECLARE_DO_FUN(do_low_purge); DECLARE_DO_FUN(do_mailroom); DECLARE_DO_FUN(do_make); DECLARE_DO_FUN(do_makeboard); DECLARE_DO_FUN(do_makeclan); DECLARE_DO_FUN(do_makecouncil); DECLARE_DO_FUN(do_makedeity); DECLARE_DO_FUN(do_makeguild); DECLARE_DO_FUN(do_makeorder); DECLARE_DO_FUN(do_makerepair); DECLARE_DO_FUN(do_makeshop); DECLARE_DO_FUN(do_makewizlist); DECLARE_DO_FUN(do_massign); DECLARE_DO_FUN(do_memory); DECLARE_DO_FUN(do_mcreate); DECLARE_DO_FUN(do_mdelete); DECLARE_DO_FUN(do_mfind); DECLARE_DO_FUN(do_minvoke); DECLARE_DO_FUN(do_mlist); DECLARE_DO_FUN(do_mount); DECLARE_DO_FUN(do_mset); DECLARE_DO_FUN(do_mstat); DECLARE_DO_FUN(do_murde); DECLARE_DO_FUN(do_murder); DECLARE_DO_FUN(do_muse); DECLARE_DO_FUN(do_music); DECLARE_DO_FUN(do_mwhere); DECLARE_DO_FUN(do_name); DECLARE_DO_FUN(do_newbiechat); DECLARE_DO_FUN(do_newbieset); DECLARE_DO_FUN(do_newzones); DECLARE_DO_FUN(do_noemote); DECLARE_DO_FUN(do_noresolve); DECLARE_DO_FUN(do_north); DECLARE_DO_FUN(do_northeast); DECLARE_DO_FUN(do_northwest); DECLARE_DO_FUN(do_notell); DECLARE_DO_FUN(do_notitle); DECLARE_DO_FUN(do_noteroom); DECLARE_DO_FUN(do_oassign); DECLARE_DO_FUN(do_ocreate); DECLARE_DO_FUN(do_odelete); DECLARE_DO_FUN(do_ofind); DECLARE_DO_FUN(do_ogrub); DECLARE_DO_FUN(do_oinvoke); DECLARE_DO_FUN(do_oldscore); DECLARE_DO_FUN(do_olist); DECLARE_DO_FUN(do_open); DECLARE_DO_FUN(do_opentourney); DECLARE_DO_FUN(do_order); DECLARE_DO_FUN(do_orders); DECLARE_DO_FUN(do_ordertalk); DECLARE_DO_FUN(do_oset); DECLARE_DO_FUN(do_ostat); DECLARE_DO_FUN(do_ot); DECLARE_DO_FUN(do_outcast); DECLARE_DO_FUN(do_owhere); DECLARE_DO_FUN(do_pager); DECLARE_DO_FUN(do_pardon); DECLARE_DO_FUN(do_password); DECLARE_DO_FUN(do_pcrename); DECLARE_DO_FUN(do_peace); DECLARE_DO_FUN(do_pick); DECLARE_DO_FUN(do_poison_weapon); DECLARE_DO_FUN(do_pose); DECLARE_DO_FUN(do_practice); DECLARE_DO_FUN(do_prompt); DECLARE_DO_FUN(do_fprompt); DECLARE_DO_FUN(do_pull); DECLARE_DO_FUN(do_punch); DECLARE_DO_FUN(do_purge); DECLARE_DO_FUN(do_push); DECLARE_DO_FUN(do_put); DECLARE_DO_FUN(do_qpset); DECLARE_DO_FUN(do_quaff); DECLARE_DO_FUN(do_quest); DECLARE_DO_FUN(do_qui); DECLARE_DO_FUN(do_quit); DECLARE_DO_FUN(do_racetalk); DECLARE_DO_FUN(do_rank); DECLARE_DO_FUN(do_rap); DECLARE_DO_FUN(do_rassign); DECLARE_DO_FUN(do_rat); DECLARE_DO_FUN(do_rdelete); DECLARE_DO_FUN(do_remains); DECLARE_DO_FUN(do_reserve); DECLARE_DO_FUN(do_reboo); DECLARE_DO_FUN(do_reboot); DECLARE_DO_FUN(do_recall); DECLARE_DO_FUN(do_recho); DECLARE_DO_FUN(do_recite); DECLARE_DO_FUN(do_redit); DECLARE_DO_FUN(do_regoto); DECLARE_DO_FUN(do_remove); DECLARE_DO_FUN(do_rent); DECLARE_DO_FUN(do_repair); DECLARE_DO_FUN(do_repairset); DECLARE_DO_FUN(do_repairshops); DECLARE_DO_FUN(do_repairstat); DECLARE_DO_FUN(do_reply); DECLARE_DO_FUN(do_report); DECLARE_DO_FUN(do_rescue); DECLARE_DO_FUN(do_rest); DECLARE_DO_FUN(do_reset); DECLARE_DO_FUN(do_restore); DECLARE_DO_FUN(do_restoretime); DECLARE_DO_FUN(do_restrict); DECLARE_DO_FUN(do_retire); DECLARE_DO_FUN(do_retran); DECLARE_DO_FUN(do_return); DECLARE_DO_FUN(do_revert); DECLARE_DO_FUN(do_rip); DECLARE_DO_FUN(do_rlist); DECLARE_DO_FUN(do_rreset); DECLARE_DO_FUN(do_rset); DECLARE_DO_FUN(do_rstat); DECLARE_DO_FUN(do_sacrifice); DECLARE_DO_FUN(do_save); DECLARE_DO_FUN(do_savearea); DECLARE_DO_FUN(do_say); DECLARE_DO_FUN(do_scan); DECLARE_DO_FUN(do_score); DECLARE_DO_FUN(do_scribe); DECLARE_DO_FUN(do_search); DECLARE_DO_FUN(do_sedit); DECLARE_DO_FUN(do_sell); DECLARE_DO_FUN(do_set_boot_time); DECLARE_DO_FUN(do_setclan); DECLARE_DO_FUN(do_setclass); DECLARE_DO_FUN(do_setcouncil); DECLARE_DO_FUN(do_setdeity); DECLARE_DO_FUN(do_setguild); DECLARE_DO_FUN(do_setorder); DECLARE_DO_FUN(do_setrace); DECLARE_DO_FUN(do_shops); DECLARE_DO_FUN(do_shopset); DECLARE_DO_FUN(do_shopstat); DECLARE_DO_FUN(do_shout); DECLARE_DO_FUN(do_shove); DECLARE_DO_FUN(do_showclass); DECLARE_DO_FUN(do_showclan); DECLARE_DO_FUN(do_showcouncil); DECLARE_DO_FUN(do_showdeity); DECLARE_DO_FUN(do_showguild); DECLARE_DO_FUN(do_showorder); DECLARE_DO_FUN(do_showrace); DECLARE_DO_FUN(do_showbytes); DECLARE_DO_FUN(do_shutdow); DECLARE_DO_FUN(do_shutdown); DECLARE_DO_FUN(do_silence); DECLARE_DO_FUN(do_sit); DECLARE_DO_FUN(do_sla); DECLARE_DO_FUN(do_slay); DECLARE_DO_FUN(do_sleep); DECLARE_DO_FUN(do_slice); DECLARE_DO_FUN(do_slist); DECLARE_DO_FUN(do_slookup); DECLARE_DO_FUN(do_smoke); DECLARE_DO_FUN(do_sneak); DECLARE_DO_FUN(do_snoop); DECLARE_DO_FUN(do_sober); DECLARE_DO_FUN(do_socials); DECLARE_DO_FUN(do_south); DECLARE_DO_FUN(do_southeast); DECLARE_DO_FUN(do_southwest); DECLARE_DO_FUN(do_speak); DECLARE_DO_FUN(do_split); DECLARE_DO_FUN(do_sset); DECLARE_DO_FUN(do_stand); DECLARE_DO_FUN(do_starttourney); DECLARE_DO_FUN(do_stat); DECLARE_DO_FUN(do_statreport); DECLARE_DO_FUN(do_steal); DECLARE_DO_FUN(do_sting); DECLARE_DO_FUN(do_stun); DECLARE_DO_FUN(do_supplicate); DECLARE_DO_FUN(do_switch); DECLARE_DO_FUN(do_tail); DECLARE_DO_FUN(do_tamp); DECLARE_DO_FUN(do_tell); DECLARE_DO_FUN(do_think); DECLARE_DO_FUN(do_time); DECLARE_DO_FUN(do_timecmd); DECLARE_DO_FUN(do_title); DECLARE_DO_FUN(do_track); DECLARE_DO_FUN(do_transfer); DECLARE_DO_FUN(do_trust); DECLARE_DO_FUN(do_typo); DECLARE_DO_FUN(do_unfoldarea); DECLARE_DO_FUN(do_unhell); DECLARE_DO_FUN(do_unlock); DECLARE_DO_FUN(do_unsilence); DECLARE_DO_FUN(do_up); DECLARE_DO_FUN(do_users); DECLARE_DO_FUN(do_value); DECLARE_DO_FUN(do_versio); DECLARE_DO_FUN(do_version); DECLARE_DO_FUN(do_visible); DECLARE_DO_FUN(do_vnums); DECLARE_DO_FUN(do_vsearch); DECLARE_DO_FUN(do_wake); DECLARE_DO_FUN(do_wartalk); 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_whois); DECLARE_DO_FUN(do_wimpy); DECLARE_DO_FUN(do_wizhelp); DECLARE_DO_FUN(do_wizlist); DECLARE_DO_FUN(do_wizlock); DECLARE_DO_FUN(do_yell); DECLARE_DO_FUN(do_zap); DECLARE_DO_FUN(do_zones); // mob prog stuff DECLARE_DO_FUN(do_mp_close_passage); DECLARE_DO_FUN(do_mp_damage); DECLARE_DO_FUN(do_mp_deposit); DECLARE_DO_FUN(do_mp_withdraw); DECLARE_DO_FUN(do_mp_restore); DECLARE_DO_FUN(do_mp_open_passage); DECLARE_DO_FUN(do_mp_practice); DECLARE_DO_FUN(do_mp_slay); DECLARE_DO_FUN(do_mpadvance); DECLARE_DO_FUN(do_mpasound); DECLARE_DO_FUN(do_mpasupress); DECLARE_DO_FUN(do_mpat); DECLARE_DO_FUN(do_mpbodybag); DECLARE_DO_FUN(do_mpdream); DECLARE_DO_FUN(do_mpecho); DECLARE_DO_FUN(do_mpechoaround); DECLARE_DO_FUN(do_mpechoat); DECLARE_DO_FUN(do_mpedit); DECLARE_DO_FUN(do_mrange); DECLARE_DO_FUN(do_opedit); DECLARE_DO_FUN(do_orange); DECLARE_DO_FUN(do_rpedit); DECLARE_DO_FUN(do_mpforce); DECLARE_DO_FUN(do_mpinvis); DECLARE_DO_FUN(do_mpgoto); DECLARE_DO_FUN(do_mpjunk); DECLARE_DO_FUN(do_mpkill); DECLARE_DO_FUN(do_mpmload); DECLARE_DO_FUN(do_mpmset); DECLARE_DO_FUN(do_mpnothing); DECLARE_DO_FUN(do_mpoload); DECLARE_DO_FUN(do_mposet); DECLARE_DO_FUN(do_mppardon); DECLARE_DO_FUN(do_mppurge); DECLARE_DO_FUN(do_mpstat); DECLARE_DO_FUN(do_opstat); DECLARE_DO_FUN(do_rpstat); DECLARE_DO_FUN(do_mptransfer); DECLARE_DO_FUN(do_mpapply); DECLARE_DO_FUN(do_mpapplyb); DECLARE_DO_FUN(do_mppkset); DECLARE_DO_FUN(do_mpfavor); // Spell functions. // Defined in magic.c. DECLARE_SPELL_FUN( spell_null); DECLARE_SPELL_FUN( spell_notfound); DECLARE_SPELL_FUN( spell_acid_blast); DECLARE_SPELL_FUN( spell_animate_dead); DECLARE_SPELL_FUN( spell_astral_walk); DECLARE_SPELL_FUN( spell_blindness); DECLARE_SPELL_FUN( spell_burning_hands); DECLARE_SPELL_FUN( spell_call_lightning); 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_control_weather); DECLARE_SPELL_FUN( spell_create_food); DECLARE_SPELL_FUN( spell_create_water); DECLARE_SPELL_FUN( spell_cure_blindness); DECLARE_SPELL_FUN( spell_cure_poison); DECLARE_SPELL_FUN( spell_curse); DECLARE_SPELL_FUN( spell_detect_poison); DECLARE_SPELL_FUN( spell_dispel_evil); DECLARE_SPELL_FUN( spell_dispel_magic); DECLARE_SPELL_FUN( spell_dream); DECLARE_SPELL_FUN( spell_earthquake); DECLARE_SPELL_FUN( spell_enchant_weapon); DECLARE_SPELL_FUN( spell_energy_drain); DECLARE_SPELL_FUN( spell_faerie_fire); DECLARE_SPELL_FUN( spell_faerie_fog); DECLARE_SPELL_FUN( spell_farsight); DECLARE_SPELL_FUN( spell_fireball); DECLARE_SPELL_FUN( spell_flamestrike); DECLARE_SPELL_FUN( spell_gate); DECLARE_SPELL_FUN( spell_knock); DECLARE_SPELL_FUN( spell_harm); DECLARE_SPELL_FUN( spell_identify); DECLARE_SPELL_FUN( spell_invis); DECLARE_SPELL_FUN( spell_know_alignment); DECLARE_SPELL_FUN( spell_lightning_bolt); DECLARE_SPELL_FUN( spell_locate_object); DECLARE_SPELL_FUN( spell_magic_missile); DECLARE_SPELL_FUN( spell_mist_walk); DECLARE_SPELL_FUN( spell_pass_door); DECLARE_SPELL_FUN( spell_plant_pass); DECLARE_SPELL_FUN( spell_poison); DECLARE_SPELL_FUN( spell_polymorph); DECLARE_SPELL_FUN( spell_possess); DECLARE_SPELL_FUN( spell_recharge); DECLARE_SPELL_FUN( spell_remove_curse); DECLARE_SPELL_FUN( spell_remove_invis); DECLARE_SPELL_FUN( spell_remove_trap); DECLARE_SPELL_FUN( spell_shocking_grasp); DECLARE_SPELL_FUN( spell_sleep); DECLARE_SPELL_FUN( spell_smaug); DECLARE_SPELL_FUN( spell_solar_flight); DECLARE_SPELL_FUN( spell_summon); DECLARE_SPELL_FUN( spell_teleport); DECLARE_SPELL_FUN( spell_ventriloquate); DECLARE_SPELL_FUN( spell_weaken); DECLARE_SPELL_FUN( spell_word_of_recall); DECLARE_SPELL_FUN( spell_acid_breath); DECLARE_SPELL_FUN( spell_fire_breath); DECLARE_SPELL_FUN( spell_frost_breath); DECLARE_SPELL_FUN( spell_gas_breath); DECLARE_SPELL_FUN( spell_lightning_breath); DECLARE_SPELL_FUN( spell_spiral_blast); DECLARE_SPELL_FUN( spell_scorching_surge); DECLARE_SPELL_FUN( spell_helical_flow); DECLARE_SPELL_FUN( spell_transport); DECLARE_SPELL_FUN( spell_portal); DECLARE_SPELL_FUN( spell_ethereal_fist); DECLARE_SPELL_FUN( spell_spectral_furor); DECLARE_SPELL_FUN( spell_hand_of_chaos); DECLARE_SPELL_FUN( spell_disruption); DECLARE_SPELL_FUN( spell_sonic_resonance); DECLARE_SPELL_FUN( spell_mind_wrack); DECLARE_SPELL_FUN( spell_mind_wrench); DECLARE_SPELL_FUN( spell_revive); DECLARE_SPELL_FUN( spell_sulfurous_spray); DECLARE_SPELL_FUN( spell_caustic_fount); DECLARE_SPELL_FUN( spell_acetum_primus); DECLARE_SPELL_FUN( spell_galvanic_whip); DECLARE_SPELL_FUN( spell_magnetic_thrust); DECLARE_SPELL_FUN( spell_quantum_spike); DECLARE_SPELL_FUN( spell_black_hand); DECLARE_SPELL_FUN( spell_black_fist); DECLARE_SPELL_FUN( spell_black_lightning); DECLARE_SPELL_FUN( spell_midas_touch); DECLARE_SPELL_FUN( spell_bethsaidean_touch); DECLARE_SPELL_FUN( spell_expurgation); DECLARE_SPELL_FUN( spell_sacral_divinity); // The encryption functions are 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 (in Crypt.cpp) to keep passwords in plain text. CString Crypt (const char* pwd, const char* name); // Our function prototypes. // act_comm.cpp BOOL circle_follow (CCharacter *ch, CCharacter *victim); void add_follower (CCharacter *ch, CCharacter *master); void stop_follower (CCharacter *ch); void die_follower (CCharacter *ch); BOOL is_same_group (CCharacter *ach, CCharacter *bch ); void send_rip_screen (CCharacter *ch); void send_rip_title (CCharacter *ch); void send_ansi_title (CCharacter *ch); void send_ascii_title (CCharacter *ch); void to_channel (const char *argument, int channel, const char *verb, short level); void talk_auction (const char *argument); BOOL knows_language (CCharacter *victim, int language, CCharacter *ch); BOOL can_learn_lang (CCharacter *ch, int language); char *translate (CCharacter *ch, CCharacter *victim, const char *argument); char *obj_short (CObjData *obj); // act_info.cpp int get_door (char *arg); CString FormatObjToChar (const CObjData& Obj, CCharacter *ch, BOOL bShort); void show_char_to_char (CCharacter *list, CCharacter *ch); void ShowListToChar (const CObjectList& List, CCharacter *ch, BOOL bShort, BOOL bShowNothing); // act_move.cpp void clear_vrooms (); ch_ret move_char (CCharacter *ch, CExitData *pexit, int fall); void teleport (CCharacter *ch, short room, int flags); short encumbrance (CCharacter *ch, short move); BOOL will_fall (CCharacter *ch, int fall); CExitData *find_door (CCharacter *ch, char *arg, BOOL quiet); CExitData *get_exit (CRoomIndexData *room, short dir, BOOL bDisabled = FALSE); CExitData *get_exit_to (CRoomIndexData *room, short dir, int vnum, BOOL bDisabled = FALSE); CExitData *get_exit_num (CRoomIndexData *room, short count); char *ReverseExit (short vdir); // act_obj.cpp obj_ret damage_obj (CObjData *obj); short get_obj_resistance (CObjData *obj); void obj_fall (CObjData *obj, BOOL through); // act_wiz.cpp void echo_to_all (short AT_COLOR, const char *argument, short tar); CRoomIndexData *find_location (CCharacter *ch, char *arg); // build.cpp char *flag_string (int bitvector, char* const flagarray []); int get_mpflag (char *flag); int get_dir (char *txt); char *strip_cr (const char *str); int get_risflag (const char *flag); int get_defenseflag (const char *flag); int get_attackflag (const char *flag); // clans.cpp void load_clans (); void load_councils (); void save_council (CCouncilData *council); CCouncilData *get_council (char *name); // comm.cpp void close_socket (CDescriptor& dclose /*, BOOL force */); void write_to_pager (CDescriptor *d, const char *txt, int length); void send_to_pager (const char *txt, CCharacter *ch); void set_char_color (short AType, CCharacter *ch); void set_pager_color (short AType, CCharacter *ch); void pager_printf (CCharacter *ch, char *fmt, ...); void act (short AType, const char *format, CCharacter *ch, const void *arg1, const void *arg2, int type); // db.cpp void show_file (CCharacter *ch, const char *filename); char *str_dup (char const *str); void boot_db (); void area_update (); void add_char (CCharacter *ch); char *GetExtraDescr (const char *name, CPtrList &EList); void AddArea (CAreaData* pArea); char *ParseString (char*& pLine, FILE* fp); CString ParseCString (char*& pLine, FILE* fp); char *ParseStringNohash (char* pLine, FILE* fp); char *ParseWord (char*& pLine); char *ParseLine (char* pLine); int ParseNumber (char*& pLine); char fread_letter (FILE *fp); char *fread_line (FILE *fp, BOOL bTrim = TRUE); void ScanToEnd (FILE* fp, const char* end); int number_fuzzy (int number); int number_range (int from, int to); int number_percent (); int number_door (); int number_bits (int width); int number_mm (); int dice (int number, int size); int interpolate (int level, int value_00, int value_32); void smash_tilde (char *str); void hide_tilde (char *str); char *show_tilde (char *str); BOOL str_cmp (const char *astr, const char *bstr); BOOL str_prefix (const char *astr, const char *bstr); BOOL str_infix (const char *astr, const char *bstr); BOOL str_suffix (const char *astr, const char *bstr); char *capitalize (const char *str); char *strlower (const char *str); char *strupper (const char *str); char *aoran (const char *str); void append_file (CCharacter *ch, const char *file, char *str); void append_to_file (const char *file, char *str); void bug (const char *str, ...); void log_string_plus (const char *str, short log_type, short level); void add_help (CHelpData *pHelp); void fix_area_exits (CAreaData *tarea); void randomize_exits (CRoomIndexData *room, short maxdir); void make_wizlist (); BOOL delete_obj (CObjIndexData *obj); BOOL delete_mob (CMobIndexData *mob); extern void sort_area (CAreaData *pArea, BOOL proto); extern void fix_exits (BOOL bBoot = TRUE); CAreaData *LoadAreaFile (const CString Fname, BOOL bBoot = FALSE, CAreaData* pArea = NULL, BOOL bBuild = FALSE); CCharacter *create_mobile (CMobIndexData *pMobIndex); CObjData *create_object (CObjIndexData *pObjIndex, int level); CRoomIndexData *make_room (int vnum); CObjIndexData *make_object (int vnum, int cvnum, char *name); CMobIndexData *make_mobile (int vnum, int cvnum, char *name); CExitData *make_exit (CRoomIndexData *pRoomIndex, CRoomIndexData *to_room, short door); // Functions to add to sorting lists. -- Altrag //void mob_sort (CMobIndexData *pMob); //void obj_sort (CObjIndexData *pObj); //void room_sort (CRoomIndexData *pRoom); // build.cpp void smush_tilde (char *str); BOOL can_rmodify (CCharacter *ch, CRoomIndexData *room); BOOL can_omodify (CCharacter *ch, CObjData *obj); BOOL can_mmodify (CCharacter *ch, CCharacter *mob); BOOL can_medit (CCharacter *ch, CMobIndexData *mob); void assign_area (CCharacter *ch); BOOL DelRExtra (CRoomIndexData *room, char *keywords); BOOL DelOExtra (CObjData *obj, char *keywords); BOOL DelOExtraProto (CObjIndexData *obj, char *keywords); // Define area types and an install boolean for fold_area enum { FA_LIVE=1, FA_BUILD }; #define FA_INSTALL TRUE void fold_area (CAreaData *tarea, int Type = FA_LIVE, BOOL bInstall = FALSE); int get_otype (const char *type); int get_atype (const char *type); int get_aflag (const char *flag); int get_oflag (const char *flag); int get_wflag (const char *flag); int get_exflag (const char *flag); int get_rflag (const char *flag); CExtraDescrData *SetRExtra (CRoomIndexData *room, char *keywords); CExtraDescrData *SetOExtra (CObjData *obj, char *keywords); CExtraDescrData *SetOExtraProto (CObjIndexData *obj, char *keywords); // fight.cpp int max_fight (CCharacter *ch); void violence_update (); ch_ret multi_hit (CCharacter *ch, CCharacter *victim, int dt); short ris_damage (CCharacter *ch, short dam, int ris); ch_ret damage (CCharacter *ch, CCharacter *victim, int dam, int dt); void update_pos (CCharacter *victim); void set_fighting (CCharacter *ch, CCharacter *victim); void stop_fighting (CCharacter *ch, BOOL fBoth); void free_fight (CCharacter *ch); void check_killer (CCharacter *ch, CCharacter *victim); void check_attacker (CCharacter *ch, CCharacter *victim); void death_cry (CCharacter *ch); void stop_hunting (CCharacter *ch); void stop_hating (CCharacter *ch); void stop_fearing (CCharacter *ch); void start_hunting (CCharacter *ch, CCharacter *victim); void start_hating (CCharacter *ch, CCharacter *victim); void start_fearing (CCharacter *ch, CCharacter *victim); BOOL is_hunting (CCharacter *ch, CCharacter *victim); BOOL is_hating (CCharacter *ch, CCharacter *victim); BOOL is_fearing (CCharacter *ch, CCharacter *victim); BOOL is_safe (CCharacter *ch, CCharacter *victim); BOOL legal_loot (CCharacter *ch, CCharacter *victim); short VAMP_AC (CCharacter *ch); BOOL check_illegal_pk (CCharacter *ch, CCharacter *victim); void raw_kill (CCharacter *ch, CCharacter *victim); BOOL in_arena (CCharacter *ch); ch_ret projectile_hit (CCharacter *ch, CCharacter *victim, CObjData *wield, CObjData *projectile, short dist); // makeobjs.cpp void make_corpse (CCharacter *ch, CCharacter *killer); void make_blood (CCharacter *ch); void make_bloodstain (CCharacter *ch); void make_scraps (CObjData *obj); void make_fire (CRoomIndexData *in_room, short timer); CObjData *make_trap (int v0, int v1, int v2, int v3); CObjData *create_money (int amount); // misc.cpp void actiondesc (CCharacter *ch, CObjData *obj, void *vo); // mud_comm.cpp char *mprog_type_to_name (int type); // mud_prog.cpp void mprog_wordlist_check (char * arg, CCharacter *mob, CCharacter* actor, CObjData* object, void* vo, int type); void mprog_percent_check (CCharacter *mob, CCharacter* actor, CObjData* object, void* vo, int type); void mprog_act_trigger (char* buf, CCharacter* mob, CCharacter* ch, CObjData* obj, void* vo); void mprog_bribe_trigger (CCharacter* mob, CCharacter* ch, int amount); void mprog_entry_trigger (CCharacter* mob); void mprog_give_trigger (CCharacter* mob, CCharacter* ch, CObjData* obj); void mprog_greet_trigger (CCharacter* mob); void mprog_fight_trigger (CCharacter* mob, CCharacter* ch); void mprog_hitprcnt_trigger (CCharacter* mob, CCharacter* ch); void mprog_death_trigger (CCharacter *killer, CCharacter* mob); void mprog_random_trigger (CCharacter* mob); void mprog_speech_trigger (char* txt, CCharacter* mob); BOOL mprog_script_trigger (CCharacter *mob); void mprog_hour_trigger (CCharacter *mob); void mprog_time_trigger (CCharacter *mob); void progbug (const char *str, CCharacter *mob); void rset_supermob (CRoomIndexData *room); void release_supermob (); // player.cpp void set_title (CCharacter *ch, char *title); // skills.cpp BOOL check_skill (CCharacter *ch, char *command, char *argument); void learn_from_success (CCharacter *ch, int sn); void learn_from_failure (CCharacter *ch, int sn); BOOL check_parry (CCharacter *ch, CCharacter *victim); BOOL check_dodge (CCharacter *ch, CCharacter *victim); BOOL check_grip (CCharacter *ch, CCharacter *victim); void disarm (CCharacter *ch, CCharacter *victim); void trip (CCharacter *ch, CCharacter *victim); CCharacter *scan_for_victim (CCharacter *ch, CExitData *pexit, char *name); ch_ret ranged_attack (CCharacter *ch, char *argument, CObjData *weapon, CObjData *projectile, short dt, short range); BOOL mob_fire (CCharacter* ch, char* name); // handler.cpp int get_exp_worth (CCharacter *ch); int exp_level (CCharacter *ch, short level); short get_curr_cha (CCharacter *ch); short get_curr_lck (CCharacter *ch); BOOL can_take_proto (CCharacter *ch); int can_carry_w (CCharacter *ch); BOOL is_name (const char *str, const char *namelist); BOOL is_name_prefix (const char *str, char *namelist); BOOL nifty_is_name (const char *str, const char *namelist); BOOL nifty_is_name_prefix (const char *str, const char *namelist); void affect_modify (CCharacter *ch, CAffectData *paf, BOOL bAddAffect); void affect_to_char (CCharacter *ch, CAffectData *paf); void affect_remove (CCharacter *ch, CAffectData *paf); void affect_strip (CCharacter *ch, int sn); BOOL is_affected (CCharacter *ch, int sn); void affect_join (CCharacter *ch, CAffectData *paf); void obj_from_char (CObjData *obj); int apply_ac (CObjData *obj, int iWear); void equip_char (CCharacter *ch, CObjData *obj, int iWear); void unequip_char (CCharacter *ch, CObjData *obj); int count_obj_list (CObjIndexData *obj, CObjectList& List); void obj_from_room (CObjData *obj); void obj_from_obj (CObjData *obj); void extract_obj (CObjData *obj); void extract_exit (CRoomIndexData *room, CExitData *pexit); void extract_room (CRoomIndexData *room); void clean_resets (CAreaData *tarea); void extract_char (CCharacter *ch, BOOL fPull); CCharacter *get_char_room (CCharacter *ch, char *argument); CCharacter *get_char_world (CCharacter *ch, char *argument); CObjData *obj_to_char (CObjData *obj, CCharacter *ch, BOOL bByLevel = FALSE); CObjData *get_eq_char (CCharacter *ch, int iWear); CObjData *obj_to_room (CObjData *obj, CRoomIndexData *pRoomIndex); CObjData *obj_to_obj (CObjData *obj, CObjData *obj_to); CObjData *get_obj_list (CCharacter *ch, char *argument, CObjectList& List); CObjData *get_obj_list_rev (CCharacter *ch, char *argument, CObjectList& List); CObjData *get_obj_carry (CCharacter *ch, char *argument); CObjData *get_obj_wear (CCharacter *ch, char *argument); CObjData *get_obj_here (CCharacter *ch, char *argument); CObjData *get_obj_world (CCharacter *ch, char *argument); int get_obj_number (CObjData *obj); int get_obj_weight (CObjData *obj); BOOL room_is_dark (CRoomIndexData *pRoomIndex); BOOL room_is_private (CRoomIndexData *pRoomIndex); BOOL can_see (CCharacter *ch, CCharacter *victim); BOOL can_see_obj (CCharacter *ch, const CObjData& Obj); BOOL can_drop_obj (CCharacter *ch, CObjData *obj); char *item_type_name (CObjData *obj); char *affect_loc_name (int location); CString ExtraBitName (const CBitVector& Ef); char *magic_bit_name (int magic_flags); ch_ret check_for_trap (CCharacter *ch, CObjData *obj, int flag); ch_ret check_room_for_traps (CCharacter *ch, int flag); ch_ret spring_trap (CCharacter *ch, CObjData *obj); void name_stamp_stats (CCharacter *ch); void fix_char (CCharacter *ch); void set_cur_obj (CObjData *obj); BOOL obj_extracted (CObjData *obj); void set_cur_char (CCharacter *ch); BOOL char_died (CCharacter *ch); void queue_extracted_char (CCharacter *ch, BOOL extract); void clean_char_queue (); void add_timer (CCharacter *ch, short type, short count, DO_FUN *fun, int value); short get_timer (CCharacter *ch, short type); void extract_timer (CCharacter *ch, CTimerData *timer); void remove_timer (CCharacter *ch, short type); BOOL in_soft_range (CCharacter *ch, CAreaData *tarea); BOOL in_hard_range (CCharacter *ch, CAreaData *tarea); BOOL chance (CCharacter *ch, short percent); BOOL chance_attrib (CCharacter *ch, short percent, short attrib); void split_obj (CObjData *obj, int num); void separate_obj (CObjData *obj); BOOL empty_obj (CObjData *obj, CObjData *destobj, CRoomIndexData *destroom); BOOL ms_find_obj (CCharacter *ch); void worsen_mental_state (CCharacter *ch, int mod); void better_mental_state (CCharacter *ch, int mod); void economize_mobgold (CCharacter *mob); void add_kill (CCharacter *ch, CCharacter *mob); int times_killed (CCharacter *ch, CCharacter *mob); CTimerData *get_timerptr (CCharacter *ch, short type); CObjData *get_trap (CObjData *obj); CObjData *clone_object (CObjData *obj); CObjData *find_obj (CCharacter *ch, char *argument, BOOL carryonly); // interp.cpp void interpret (CCharacter *ch, char *argument); BOOL is_number (char *arg); int number_argument (char *argument, char *arg); char *one_argument (const char *argument, char *arg_first); BOOL IS_SWITCHED (CCharacter *ch); BOOL check_pos (CCharacter *ch, short position); char *one_argument2 (const char *argument, char *arg_first); void start_timer (struct timeval *stime); time_t end_timer (struct timeval *stime); void send_timer (struct timerset *vtime, CCharacter *ch); void update_userec (struct timeval *time_used, timerset *userec); BOOL check_social (CCharacter *ch, char *command, const char *argument); // magic.cpp BOOL process_spell_components (CCharacter *ch, int sn); int ch_slookup (CCharacter *ch, const char *name); int find_spell (CCharacter *ch, const char *name, BOOL know); int find_skill (CCharacter *ch, const char *name, BOOL know); int find_weapon (CCharacter *ch, const char *name, BOOL know); int find_tongue (CCharacter *ch, const char *name, BOOL know); int personal_lookup (CCharacter *ch, const char *name); int slot_lookup (int slot); void failed_casting (CSkill *skill, CCharacter *ch, CCharacter *victim, CObjData *obj); BOOL saves_poison_death (int level, CCharacter *victim); BOOL saves_wand (int level, CCharacter *victim); BOOL saves_para_petri (int level, CCharacter *victim); BOOL saves_breath (int level, CCharacter *victim); BOOL saves_spell_staff (int level, CCharacter *victim); ch_ret obj_cast_spell (int sn, int level, CCharacter *ch, CCharacter *victim, CObjData *obj); int dice_parse (CCharacter *ch, int level, char *exp); ch_ret spell_attack (int sn, int level, CCharacter *ch, void *vo); // request.cpp void init_request_pipe (); void check_requests (); // save.cpp void save_char_obj (CCharacter *ch); BOOL load_char_obj (CDescriptor *d, char *name, BOOL preload); void set_alarm (long seconds); void requip_char (CCharacter *ch); void fwrite_obj (CObjectList& List, FILE *fp, int iNest, short os_type, short ChLevel = 0); void fread_obj (CCharacter *ch, FILE *fp, short os_type); void de_equip_char (CCharacter *ch); void re_equip_char (CCharacter *ch); CCharacter *fread_mobile (FILE *fp); // special.cpp SPEC_FUN *spec_lookup (const char *name); char *lookup_spec (SPEC_FUN *special); // tables.cpp int get_skill (char *skilltype); char *spell_name (SPELL_FUN *spell); char *skill_name (DO_FUN *skill); void load_skill_table (); void save_skill_table (); void load_herb_table (); void save_herb_table (); SPELL_FUN *spell_function (char *name); DO_FUN *skill_function (char *name); // track.cpp void found_prey (CCharacter *ch, CCharacter *victim); void hunt_victim (CCharacter *ch); // update.cpp void advance_level (CCharacter *ch); void gain_exp (CCharacter *ch, int gain); void gain_condition (CCharacter *ch, int iCond, int value); void update_handler (); void RebootCheck (); void ResetBootMessages (); void auction_update (); void remove_portal (CObjData *portal); // hashstr.cpp char *str_alloc (const char *str); char *quick_link (const char *str); int str_free (char *str); void show_hash (int count); char *hash_stats (); char *check_hash (char *str); void hash_dump (int hash); void show_high_hash (int top); // Data for a menu page struct menu_data { char *sectionNum; char *charChoice; int x; int y; char *outFormat; void *data; int ptrType; int cmdArgs; char *cmdString; }; DECLARE_DO_FUN(do_omenu); DECLARE_DO_FUN(do_rmenu); DECLARE_DO_FUN(do_mmenu); DECLARE_DO_FUN(do_pmenu); DECLARE_DO_FUN(do_cmenu); DECLARE_DO_FUN(do_pagelen); extern MENU_DATA room_page_a_data []; extern MENU_DATA room_page_b_data []; extern MENU_DATA room_page_c_data []; extern MENU_DATA room_help_page_data []; extern MENU_DATA mob_page_a_data []; extern MENU_DATA mob_page_b_data []; extern MENU_DATA mob_page_c_data []; extern MENU_DATA mob_page_d_data []; extern MENU_DATA mob_page_e_data []; extern MENU_DATA mob_page_f_data []; extern MENU_DATA mob_help_page_data []; extern MENU_DATA obj_page_a_data []; extern MENU_DATA obj_page_b_data []; extern MENU_DATA obj_page_c_data []; extern MENU_DATA obj_page_d_data []; extern MENU_DATA obj_page_e_data []; extern MENU_DATA obj_help_page_data []; extern MENU_DATA control_page_a_data []; extern MENU_DATA control_help_page_data []; extern const char room_page_a []; extern const char room_page_b []; extern const char room_page_c []; extern const char room_help_page []; extern const char obj_page_a []; extern const char obj_page_b []; extern const char obj_page_c []; extern const char obj_page_d []; extern const char obj_page_e []; extern const char obj_help_page []; extern const char mob_page_a []; extern const char mob_page_b []; extern const char mob_page_c []; extern const char mob_page_d []; extern const char mob_page_e []; extern const char mob_page_f []; extern const char mob_help_page []; extern const char *npc_sex [3]; extern const char *ris_strings []; extern const char control_page_a []; extern const char control_help_page []; #define SH_INT 1 #define INT 2 #define CHAR 3 #define STRING 4 #define SPECIAL 5 #define SSH_INT 6 // signed short int #define NO_PAGE 0 #define MOB_PAGE_A 1 #define MOB_PAGE_B 2 #define MOB_PAGE_C 3 #define MOB_PAGE_D 4 #define MOB_PAGE_E 5 #define MOB_PAGE_F 17 #define MOB_HELP_PAGE 14 #define ROOM_PAGE_A 6 #define ROOM_PAGE_B 7 #define ROOM_PAGE_C 8 #define ROOM_HELP_PAGE 15 #define OBJ_PAGE_A 9 #define OBJ_PAGE_B 10 #define OBJ_PAGE_C 11 #define OBJ_PAGE_D 12 #define OBJ_PAGE_E 13 #define OBJ_HELP_PAGE 16 #define CONTROL_PAGE_A 18 #define CONTROL_HELP_PAGE 19 #define NO_TYPE 0 #define MOB_TYPE 1 #define OBJ_TYPE 2 #define ROOM_TYPE 3 #define CONTROL_TYPE 4 #define SUB_NORTH DIR_NORTH #define SUB_EAST DIR_EAST #define SUB_SOUTH DIR_SOUTH #define SUB_WEST DIR_WEST #define SUB_UP DIR_UP #define SUB_DOWN DIR_DOWN #define SUB_NE DIR_NORTHEAST #define SUB_NW DIR_NORTHWEST #define SUB_SE DIR_SOUTHEAST #define SUB_SW DIR_SOUTHWEST // defines for use with this get_affect function #define RIS_000 BV00 #define RIS_R00 BV01 #define RIS_0I0 BV02 #define RIS_RI0 BV03 #define RIS_00S BV04 #define RIS_R0S BV05 #define RIS_0IS BV06 #define RIS_RIS BV07 #define GA_AFFECTED BV09 #define GA_RESISTANT BV10 #define GA_IMMUNE BV11 #define GA_SUSCEPTIBLE BV12 #define GA_RIS BV30 // mudprograms stuff extern CCharacter *supermob; void oprog_speech_trigger (char *txt, CCharacter *ch); void oprog_random_trigger (CObjData *obj); void oprog_wear_trigger (CCharacter *ch, CObjData *obj); BOOL oprog_use_trigger (CCharacter *ch, CObjData *obj, CCharacter *vict, CObjData *targ, void *vo); void oprog_remove_trigger (CCharacter *ch, CObjData *obj); void oprog_sac_trigger (CCharacter *ch, CObjData *obj); void oprog_damage_trigger (CCharacter *ch, CObjData *obj); void oprog_repair_trigger (CCharacter *ch, CObjData *obj); void oprog_drop_trigger (CCharacter *ch, CObjData *obj); void oprog_zap_trigger (CCharacter *ch, CObjData *obj); char *oprog_type_to_name (int type); // MUD_PROGS START HERE // (object stuff) void oprog_greet_trigger (CCharacter *ch); void oprog_speech_trigger (char *txt, CCharacter *ch); void oprog_random_trigger (CObjData *obj); void oprog_random_trigger (CObjData *obj); void oprog_remove_trigger (CCharacter *ch, CObjData *obj); void oprog_sac_trigger (CCharacter *ch, CObjData *obj); void oprog_get_trigger (CCharacter *ch, CObjData *obj); void oprog_damage_trigger (CCharacter *ch, CObjData *obj); void oprog_repair_trigger (CCharacter *ch, CObjData *obj); void oprog_drop_trigger (CCharacter *ch, CObjData *obj); void oprog_examine_trigger (CCharacter *ch, CObjData *obj); void oprog_zap_trigger (CCharacter *ch, CObjData *obj); void oprog_pull_trigger (CCharacter *ch, CObjData *obj); void oprog_push_trigger (CCharacter *ch, CObjData *obj); // mud prog defines #define ERROR_PROG -1 #define IN_FILE_PROG -2 enum ProgTypes { ACT_PROG, SPEECH_PROG, RAND_PROG, FIGHT_PROG, DEATH_PROG, HITPRCNT_PROG, ENTRY_PROG, GREET_PROG, ALL_GREET_PROG, GIVE_PROG, BRIBE_PROG, HOUR_PROG, TIME_PROG, WEAR_PROG, REMOVE_PROG, SAC_PROG, LOOK_PROG, EXA_PROG, ZAP_PROG, GET_PROG, DROP_PROG, DAMAGE_PROG, REPAIR_PROG, RANDIW_PROG, SPEECHIW_PROG, PULL_PROG, PUSH_PROG, SLEEP_PROG, REST_PROG, LEAVE_PROG, SCRIPT_PROG, USE_PROG }; void rprog_leave_trigger (CCharacter *ch); void rprog_enter_trigger (CCharacter *ch); void rprog_sleep_trigger (CCharacter *ch); void rprog_rest_trigger (CCharacter *ch); void rprog_rfight_trigger (CCharacter *ch); void rprog_death_trigger (CCharacter *killer, CCharacter *ch); void rprog_speech_trigger (char *txt, CCharacter *ch); void rprog_random_trigger (CCharacter *ch); void rprog_time_trigger (CCharacter *ch); void rprog_hour_trigger (CCharacter *ch); char *rprog_type_to_name (int type); #define OPROG_ACT_TRIGGER #ifdef OPROG_ACT_TRIGGER void oprog_act_trigger (char *buf, CObjData *mobj, CCharacter *ch, CObjData *obj, void *vo); #endif #define RPROG_ACT_TRIGGER #ifdef RPROG_ACT_TRIGGER void rprog_act_trigger (char *buf, CRoomIndexData *room, CCharacter *ch, CObjData *obj, void *vo); #endif // Stuff added by RCP // Definitions for the TELNET protocol. #define IAC (char)255 // interpret as command: #define WONT (char)252 // I won't use option #define WILL (char)251 // I will use option #define GA (char)249 // you may reverse the line // telnet options #define TELOPT_ECHO 1 // echo // #defines for Win32 //#define MAKEWORD (a, b) ((WORD) (((BYTE) (a)) | (((WORD) ((BYTE) (b))) << 8))) #define WM_NET_ACCEPT (WM_USER+500) #define WM_NET_READWRITE (WM_USER+501) #define WM_NET_GETHOST (WM_USER+502) #define WM_NET_AUTHCONNECT (WM_USER+503) #define WM_BOOT_SMAUG (WM_USER+600) // Const externs must be declared in a header file in C++ ! extern char* const wear_locs []; #ifdef SMAUGSERVER_CPP CSmaugWizDoc *gpDoc; // global pointer to doc BOOL wizlock; // Game is wizlocked BOOL MOBtrigger; FILE *fpReserve; FILE *fpLOG; CSwTime CurrentTime; // Time of this pulse CSwTime LastRestoreAllTime; char lastplayercmd [MAX_INPUT_LENGTH*2]; BOOL bSmaugDown; // Shutdown CStringList ReservedNamesList; #endif #undef DEBUG extern CSmaugWizDoc *gpDoc; // global pointer to doc extern BOOL wizlock; extern BOOL MOBtrigger; extern FILE *fpReserve; extern FILE *fpLOG; extern CSwTime CurrentTime; extern CSwTime LastRestoreAllTime; extern char lastplayercmd [MAX_INPUT_LENGTH*2]; extern BOOL bSmaugDown; extern CStringList ReservedNamesList; extern char *default_prompt (CCharacter *ch); extern CString StripColor (const char* str); extern bool HasColor (const char* str); extern bool IsColor (const char* pCol); extern int GetColorSize (const char* str); extern int ColorLen (const char* str); extern int MakeColorSequence (UCHAR Col, char *buf, CDescriptor *d); extern int MakeColorSequence (const char *col, char *buf, CDescriptor *d); extern BOOL check_parse_name (const char* name, BOOL bNewchar = TRUE); extern void nanny (CDescriptor *d, char *argument); extern void mail_count (CCharacter *ch); extern void RemoveCharacter (CDescriptor& Dclose); extern void load_corpses (); extern void RenumberPutResets (CAreaData *pArea); extern void fwrite_comments (CCharacter *ch, FILE *fp); extern void fread_comment (CCharacter *ch, FILE *fp); extern void ClearDatabase (); extern void DeleteAllHash (); extern void shutdown_mud (char *reason); extern void oprog_read_programs (char* pLine, FILE* fp, CObjIndexData *pObjIndex); extern void rprog_read_programs (char* pLine, FILE* fp, CRoomIndexData *pRoomIndex); extern void write_corpses (CCharacter *ch, const char *name); extern void start_editing (CCharacter *ch, const char *data); extern void StrFree (char *str, const char* file, int line); extern void ClearAddrRange (void* start, void* end, UINT SizEnd); extern int mprog_name_to_type (const char* name); extern void BootLog (const char *str, ...); extern CRoomIndexData *GetVRoomFromHash (int hash); #endif // SMAUG_H