/***************************************************************************
* 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