/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/**********************************************************
*************** S U N D E R M U D *** 2 . 0 **************
**********************************************************
* The unique portions of the SunderMud code as well as *
* the integration efforts for code from other sources is *
* based primarily on the efforts of: *
* *
* Lotherius <aelfwyne@operamail.com> (Alvin W. Brinson) *
* and many others, see "help sundermud" in the mud. *
**********************************************************/
#ifndef _MERC_H
# define _MERC_H 1
/*
* Accommodate old non-Ansi compilers.
*/
# if defined(TRADITIONAL)
# define const
# define args( list ) ( )
# define DECLARE_DO_FUN( fun ) void fun( )
# define DECLARE_SPEC_FUN( fun ) bool fun( )
# define DECLARE_SPELL_FUN( fun ) void fun( )
# define DECLARE_OBJ_FUN( fun ) void fun( )
# define DECLARE_ROOM_FUN( fun ) void fun( )
# else
# define args( list ) list
# define DECLARE_DO_FUN( fun ) DO_FUN fun
# define DECLARE_SPEC_FUN( fun ) SPEC_FUN fun
# define DECLARE_SPELL_FUN( fun ) SPELL_FUN fun
# define DECLARE_OBJ_FUN( fun ) OBJ_FUN fun
# define DECLARE_ROOM_FUN( fun ) ROOM_FUN fun
# endif
/* system calls */
int unlink();
int system();
/*
* Short scalar types.
* Diavolo reports AIX compiler has bugs with short types.
*/
# if !defined(FALSE)
# define FALSE 0
# endif
# if !defined(TRUE)
# define TRUE 1
# endif
/* Some typedefs */
typedef short int sh_int;
typedef unsigned char bool;
/* Borland C++ on win32 has no uint */
# if defined (WIN32)
typedef unsigned int uint;
# endif
# ifdef WIN32
# include <winsock.h>
# include <sys/types.h>
# pragma warning( disable: 4018 4244 4761)
# define NOCRYPT
# define index strchr
# define rindex strrchr
# endif
// I know you can get zlib for win32, but I don't have it right
// now. If you have it, you can put this back in.
# if !defined WIN32
# include <zlib.h>
# else
# define NOZLIB
# endif
# include "options.h"
# define TELOPT_COMPRESS 85 // MCCP V1
# define TELOPT_COMPRESS2 86 // MCCP V2 - Not Yet Used
# define TELOPT_MSP 90 // Mud Sound Protocol
# define TELOPT_MXP 91 // Mud eXtension Protocol
# define COMPRESS_BUF_SIZE 16384
/*
* String and memory management parameters.
*/
# define MAX_KEY_HASH 1024
# define MAX_STRING_LENGTH 4096 /* Max length for a single string. If you need more, use BUFFER */
# define MAX_INPUT_LENGTH 256 /* Max length for a player's input line */
# define MSL MAX_STRING_LENGTH /* So somebody was lazy, shoot 'em */
# define MIL MAX_INPUT_LENGTH
# define MAX_PERM_BLOCK 131072 /* Increase if you need more perms. There are plenty of free ones at this level. */
# define MAX_MEM_LIST 14 /* Don't tinker with this unless you know with what you screw. */
# define MAX_CHUNKS 30 /* Can be increased if needs be, for more string space. */
# define MAX_MEMLOG 100 /* This needs to be increased if you use over 100 identifiers */
# define MAX_VNUM 199999 /* Can be up to 2 billion or so, but this is more than reasonable. */
/*
* Game parameters.
* Increase the max'es if you add more of something.
* Adjust the pulse numbers to suit yourself.
*/
# define MAX_QUOTES 14 /* for random quoting */
# define MAX_CSCORE 3 /* For default cscores */
# define MAX_SOCIALS 256 /* Increase this if you add more than 255 socials. */
# define MAX_SKILL 200 /* these limits MUST be updated if you go beyond 200 skills. */
# define MAX_CLASS 7 /* Always to be increased if you add a new class */
# define MAX_PCRACE 10 /* Always increase if you add a new race. Counts the null race. */
# define MAX_LEVEL 110 /* The MAX_LEVEL of the mud. Careful here, not everything respects this code. */
# define MAX_MOB_LEVEL (MAX_LEVEL + 10) /* Maximum allowed MOB level in the OLC. Same caveat here as above. */
# define MAX_OBJ_LEVEL (MAX_LEVEL + 1) /* Ditto. */
# define LEVEL_HERO (MAX_LEVEL - 9) /* Pretty standard. Currently this makes 101 a HERO */
# define LEVEL_IMMORTAL (MAX_LEVEL - 8) /* This makes 102+ an Immortal */
# define LEVEL_ADMIN (MAX_LEVEL - 4) /* This makes 106+ an Admin */
# define PAGELEN 23 /* Default paging size. */
/* Pulse Per Second is *guestimated* to be about 1/4 second, 4 = 1 second */
# define PULSE_PER_SECOND 4 /* No need to change, simply the basis for the timer */
# define PULSE_VIOLENCE ( 3 * PULSE_PER_SECOND) /* How often combat updates */
# define PULSE_MOBILE ( 4 * PULSE_PER_SECOND) /* Non-Combat mobile pulses, increase to slow mob activity out of combat */
# define PULSE_TICK (45 * PULSE_PER_SECOND) /* Tick timer. No, players aren't on this -- mobs are. */
# define PULSE_TICKSHORT ( 5 * PULSE_PER_SECOND) /* The player tick timer, very short for continuous healing */
# define PULSE_AREA (60 * PULSE_PER_SECOND) /* Area updates */
# define IMPLEMENTOR MAX_LEVEL
# define CREATOR (MAX_LEVEL - 1) /* 109 */
# define SUPREME (MAX_LEVEL - 2) /* 108 */
# define DEITY (MAX_LEVEL - 3) /* 107 */
# define GOD (MAX_LEVEL - 4) /* 106 */
# define IMMORTAL (MAX_LEVEL - 5) /* 105 */
# define DEMI (MAX_LEVEL - 6) /* 104 */ /* Obviously not the same as a player "Demi-God" */
# define ANGEL (MAX_LEVEL - 7) /* 103 */
# define AVATAR (MAX_LEVEL - 8) /* 102 */
# define HERO LEVEL_HERO /* 101 */
/* Uncomment the below to gzip pfiles */
/* #define COMPRESS_PFILES */
/* Filenames. */
# if defined (WIN32)
# define TIME_FILE "..\\time\\mudtime" /* Mud time & date is stored here */
# define CLAN_FILE "Clans.DAT" /* All .DAT files are located in the DATA_DIR */
# define CLASS_DIR "..\\class\\" /* Skill level information by class */
# define DATA_DIR "..\\data\\" /* Where to store .DAT files */
# define EXE_FILE "..\\bin\\sunderw.exe" /* out of the src dir, like an sensible binary */
# define MOB_DIR ".\\mobiles\\" /* Mobiles ( in relation to area dir */
# define OBJECT_DIR ".\\objects\\" /* Objects */
# define ROOM_DIR ".\\rooms\\" /* Rooms */
# define PROG_DIR ".\\programs\\" /* Progs */
# define RESET_DIR ".\\resets\\" /* Resets */
# define SHOP_DIR ".\\shops\\" /* Shops */
# define SPEC_DIR ".\\specials\\" /* Specials */
# else
# define TIME_FILE "../time/mudtime" /* Mud time & date is stored here */
# define CLAN_FILE "Clans.DAT" /* All .DAT files are located in the DATA_DIR */
# define CLASS_DIR "../class/" /* Skill level information by class */
# define DATA_DIR "../data/" /* Where to store data files */
# define EXE_FILE "../bin/sundermud" /* out of the src dir, like an sensible binary */
# define MOB_DIR "./mobiles/" /* Mobiles ( in relation to area dir */
# define OBJECT_DIR "./objects/" /* Objects */
# define ROOM_DIR "./rooms/" /* Rooms */
# define PROG_DIR "./programs/" /* Progs */
# define RESET_DIR "./resets/" /* Resets */
# define SHOP_DIR "./shops/" /* Shops */
# define SPEC_DIR "./specials/" /* Specials */
# endif
# define DISABLE_FILE "disable.txt" /* Disabled Commands file - .txt files are in areas directory */
# define CRIER_FILE "crier.txt" /* Town Crier file - ditto */
# define ACCOUNT_FILE "accounts.DAT" /* Player Account savefile -- BACKUP OFTEN! */
# define RACE_FILE "Races.DAT" /* Races savefile */
# define COPYOVER_FILE "copyover.dat" /* Located in the areas dir during a copyover */
# define SOCIAL_FILE "socials.DAT" /* Located in data directory */
# define HELP_FILE "helps.txt" /* Located in data directory */
# define MAX_DIR 6 /* If you increase this, you'll have to rework some code too */
# define NO_FLAG -99 /* Must not be used in flags or stats. */
# define MAX_ZONE 4 /* Maximum number of zones. Not really used much - yet */
# define MAX_ALIAS 20 /* Number of aliases allowed to a player */
# define MAX_ALIAS_LENGTH 80 /* Up to this length */
# define MAX_ALIAS_PARMS 10 /* Max command stacking in an alias */
/* I use DEBUGINFO for some log_strings that give painful analysis in a few key places that
* used to cause trouble. I haven't had to use this method in a while though - Lotherius
* #define DEBUGINFO
*/
/*
* Colour stuff by Lope of Loping Through The MUD
* Additions by Lotherius
* Changed CLEAR to include a white code. Due to friggin ZMud's "default" green
*/
# define CLEAR "[0m[0;37m" /* Resets Colour to white. Couldn't use normal reset */
/* Because it liked to make things icky zMud default green for those */
/* who do use zMud (I didn't know this forever cuz I use tintin++ */
# define FG_BLACK "[0;30m"
# define C_RED "[0;31m" /* Normal Colours */
# define C_GREEN "[0;32m"
# define C_YELLOW "[0;33m" /* Yellow/brown, depending on your terminal */
# define C_BLUE "[0;34m"
# define C_MAGENTA "[0;35m"
# define C_CYAN "[0;36m"
# define C_WHITE "[0;37m"
# define C_D_GREY "[1;30m" /* Dark Grey, or Bright Black */
# define C_B_RED "[1;31m"
# define C_B_GREEN "[1;32m"
# define C_B_YELLOW "[1;33m"
# define C_B_BLUE "[1;34m"
# define C_B_MAGENTA "[1;35m"
# define C_B_CYAN "[1;36m"
# define C_B_WHITE "[1;37m"
# define MOD_UNDERLINE "[4m" /* Underline */
# define MOD_BLINK "[5m" /* Blink */
# define MOD_REVERSE "[7m" /* Reverse */
# define VT_CLS "[2J" /* Clear Screen - Vt100/ANSI but quite standard */
# define VT_SAVEC "[s" /* Save Cursor Pos. */
# define VT_RESTOREC "[u" /* Restore Cursor Pos. */
# define VT_CLINE "[K" /* Clear to EOL */
/* MXP Defines */
/* We aren't going to use ANY of the MXP color codes internally.... Having to keep track of how many
* <color blah> statments you opened so you can </color> them at the end of a line stinks, the <color>
* statements override ansi until you get a </color> also, so you can't even clear them with an ansi code.
* And finally, having to send so many tags uses more bandwidth than the ansi sequences to do the same
* thing - Lotherius
*/
# define MXP_OPEN "[0z" /* Open Line, allows "open" category MXP commands */
# define MXP_SECURE "[1z" /* Secure Line, allows only Secure Commands (until next newline )*/
# define MXP_LOCKED "[2z" /* Locked Line, no parsing!, until next newline. */
// These are in v0.4 of the spec:
# define MXP_RESET "[3z" /* Reset. Close all open tags, Mode Open, text/color to default. */
# define MXP_STAG "[4z" /* Temp Secure, next tag ONLY is secure, must set again to close tag. */
# define MXP_LOPEN "[5z" /* Open mode until changed. */
# define MXP_LSECURE "[6z" /* Secure mode until changed. */
# define MXP_LLOCK "[7z" /* No parsing until changed. */
// v0.3 of the spec ( zMud ):
# define MXP_RNAME "[10z" /* Room Name - Not used here, we use an entity */
# define MXP_RDESC "[11z" /* Room Description - ditto */
# define MXP_REXIT "[12z" /* Room Exits - ditto */
# define MXP_WELCOME "[19z" /* Welcome text... seems to be used only for relocate, don't need it. */
/* Zeran - defines for the skill_available function */
# define SKILL_AVAIL 0
# define SKILL_PRAC 1
# define SKILL_LEARN 2
/* Definitions for various types in mud_data */
// Death Definitions -- see sunder.rc
# define PERMADEATH 1
# define FULLAGING 2
# define PARTAGING 3
# define NOAGING 4
// Color login options
# define NOCOLOR 1
# define ASSUME_COLOR 2
# define ASK_COLOR 3
// Exp Switches
# define XP_EASIEST 1
# define XP_EASY 2
# define XP_NORMAL 3
# define XP_HARD 4
# define XP_VERYHARD 5
# define XP_NIGHTMARE 6
/* Memlog Action Defines - Determines where to log a transaction with memlog */
# define ALLOC_PERM 1 // Allocate a permanent memory block.
# define ALLOC_MEM 2 // Allocate memory
# define DALLOC_MEM 3 // Deallocate memory
/* Moved ascii conversions up for easier use. */
/* RT ASCII conversions -- used so we can have letters in this file */
# define A 1
# define B 2
# define C 4
# define D 8
# define E 16
# define F 32
# define G 64
# define H 128
# define I 256
# define J 512
# define K 1024
# define L 2048
# define M 4096
# define N 8192
# define O 16384
# define P 32768
# define Q 65536
# define R 131072
# define S 262144
# define T 524288
# define U 1048576
# define V 2097152
# define W 4194304
# define X 8388608
# define Y 16777216
# define Z 33554432
# define aa 67108864 /* doubled due to conflicts */
# define bb 134217728
# define cc 268435456
# define dd 536870912
# define ee 1073741824
/*
* Time and weather stuff.
*/
# define SUN_DARK 0
# define SUN_RISE 1
# define SUN_LIGHT 2
# define SUN_SET 3
# define SKY_CLOUDLESS 0
# define SKY_CLOUDY 1
# define SKY_RAINING 2
# define SKY_LIGHTNING 3
/*
* Status Levels for Accounts - Lotherius
* Skipped Numbers to allow for additions in the future
*/
# define ACCT_REJECTED_DELETE 0 /* Account to be DELETED next reboot (pfiles deleted) */
# define ACCT_REJECTED_EMAIL 1 /* Account Cancelled due to Bad Email */
# define ACCT_REJECTED_RULES 5 /* Account Cancelled due to Rule Breakage */
# define ACCT_REJECTED_OTHER 10 /* Other reason. Contact an Imm. */
# define ACCT_CREATED 15 /* Account is Created, but no characters exist */
# define ACCT_UNVERIFIED 20 /* Account is Unverified, with existing characters */
# define ACCT_VERIFIED 25 /* Account has been verified. */
# define ACCT_VERIFIED_DEMISTAT 30 /* Account has access to DemiGods */
# define ACCT_HELPER 35 /* Characters on this account are HELPERS. */
# define ACCT_STAFF 40 /* Characters on this account are STAFF. */
# define ACCT_IMPLEMENTOR 45 /* Characters on this account have full mud rights. */
// Command Categories
#define CMD_MOVE (A) // Movement Commands
#define CMD_SELFINFO (B) // Info about your own character
#define CMD_OTHERINFO (C) // Info about other players/mobs
#define CMD_GAMEINFO (D) // Info about the game itself
#define CMD_OBJECTS (E) // Commands that affect objects
#define CMD_WORLDINFO (F) // Info about the world around you
#define CMD_SKILL (G) // A skill-related cmd
#define CMD_CONFIG (H) // A command to configure things
#define CMD_HELPFUL (I) // A command that might be useful
#define CMD_COMM (J) // Communication commands
#define CMD_CLAN (K) // Clan-related commands
#define CMD_NEWBIE (L) // Commands newbies might need to know.
#define CMD_LEASE (M) // Commands related to leasing.
#define CMD_COMBAT (N) // Commands related to combat
#define CMD_MAGIC (O) // Commands related to magic
#define CMD_OLC (P) // OLC commands
#define CMD_IMM (Q) // Immortal only commands
#define CMD_ACTION (R) // Other Actions
#define CMD_MISC (S) // Commands that don't fit elsewhere.
#define CMD_SC (T) // Commands that are shortcuts for other commands
/*
* Connected state for a channel.
*/
# define CON_COPYOVER_RECOVER -15 /* Recovering from Copyover */
# define CON_PLAYING 0 /* The normal state */
# define CON_GET_NAME 1
# define CON_GET_OLD_PASSWORD 2
# define CON_CONFIRM_NEW_NAME 3
# define CON_GET_NEW_PASSWORD 4
# define CON_CONFIRM_NEW_PASSWORD 5
# define CON_GET_NEW_RACE 6
# define CON_GET_NEW_SEX 7
# define CON_GET_NEW_CLASS 8
# define CON_GET_ALIGNMENT 9
# define CON_ROLL_STATS 10 /* Assigning stats rather than rolling them in Sunder 2 */
# define CON_CHOOSE_TERM 11 /* This is where everybody starts. */
# define CON_FIND_MORTALS 12 /* Asking if the player wants to be a demigod */
# define CON_READ_IMOTD 13
# define CON_READ_MOTD 14
# define CON_BREAK_CONNECT 15 /* Trying to reconnect to an existing character */
# define CON_ACCOUNT_PW_NEW 16 /* Setting a New Account Password */
# define CON_ACCOUNT_MENU 17 /* Account Menu */
# define CON_LOG_ACCOUNT 18 /* Logging Into Account */
# define CON_ACCOUNT_PW 19 /* Getting Account Password */
# define CON_ACCOUNT_PW_CONFIRM 20 /* Verifying Account Password */
# define CON_ACCOUNT_PW_FIX 21 /* Fixing a Null Account Password */
# define CON_ACCOUNT_PW_FIX_VERIFY 22 /* Verifying above. */
# define CON_PW_FIX 23 /* Fixing Password */
# define CON_PW_FIX_CONFIRM 24 /* Verifying above. */
# define CON_EDIT_CLAN 25 /* Editing Clans */
/* put new connects here, not after NOTE */
# define CON_NOTE_TO 90
# define CON_NOTE_SUBJECT 91
# define CON_NOTE_EXPIRE 92
# define CON_NOTE_TEXT 93
# define CON_NOTE_FINISH 94
/* Mode is to be implemented as a subset of CON_PLAYING
* What this means is MODEs should always assume the PC is in CON_PLAYING.
*/
# define MODE_NORMAL 1
# define MODE_DESCEDIT 2 // Editing self description
# define MODE_LEASEDESC 3 // Interactive Lease Editor -- editing lease description
/*
* some prog stuff
* - Lotherius
*/
# define PROG_MOB 1
# define PROG_OBJ 2
# define PROG_ROOM 3
/*
* TO types for act.
*/
# define TO_ROOM 0 /* See act.txt in the docs directory */
# define TO_NOTVICT 1
# define TO_VICT 2
# define TO_CHAR 3
/*
* Shop types.
*/
# define MAX_TRADE 5 /* This will set shops to be able to trade more item types */
/*
* Per-class stuff.
*/
// Class ID Tags
# define CLASS_MAGE 0
# define CLASS_AVENGER 1
# define CLASS_THIEF 2
# define CLASS_WARRIOR 3
# define CLASS_MONK 4
# define CLASS_DEFILER 5
# define CLASS_CHAOSMAGE 6
// Variables
# define MAX_GUILD 2 /* Only here until I feel like editing the class tables to take guild out */
# define MAX_STATS 5 /* Number of stats, STR INT WIS DEX CON */
// Stat nicknames
# define STAT_STR 0 /* Shortcuts for those stats */
# define STAT_INT 1
# define STAT_WIS 2
# define STAT_DEX 3
# define STAT_CON 4
/* Affect destinations */
# define TO_AFFECTS 0
# define TO_DETECTIONS 1
# define TO_PROTECTIONS 2
bool MOBtrigger; // Odd place for this.
int max_on; // So let's have this join it.
/***************************************************************************
* *
* VALUES OF INTEREST TO AREA BUILDERS *
* (Start of section ... start here) *
* *
***************************************************************************/
/*
* Well known mob virtual numbers.
* Defined in #MOBILES.
*/
# define MOB_VNUM_ZOMBIE 2
# define MOB_VNUM_FAMILIAR 3 /* Default Familiar */
/* Move this over to a struct someday */
/* Zeran - Material types */
# define MATERIAL_WOOD 1
# define MATERIAL_IRON 2
# define MATERIAL_SILVER 3
# define MATERIAL_GOLD 4
# define MATERIAL_ADAMANTITE 5
# define MATERIAL_CLOTH 6
# define MATERIAL_GLASS 7
# define MATERIAL_LIQUID 8
# define MATERIAL_FOOD 9
# define MATERIAL_STEEL 10
# define MATERIAL_MITHRIL 11
# define MATERIAL_PAPER 12
# define MATERIAL_MEAT 13
# define MATERIAL_FLESH 14
# define MATERIAL_LEATHER 15
# define MATERIAL_PILL 16
# define MATERIAL_VELLUM 17
# define MATERIAL_BRONZE 18
# define MATERIAL_BRASS 19
# define MATERIAL_STONE 20
# define MATERIAL_BONE 21
# define MATERIAL_UNIQUE 22
# define MATERIAL_CRYSTAL 23
# define MATERIAL_DIAMOND 24
# define MATERIAL_ICE 25
# define MATERIAL_RUBBER 26
# define MATERIAL_PLASTEEL 27
# define MATERIAL_FUR 28
# define MATERIAL_MARBLE 29
# define MATERIAL_GRANITE 30
# define MATERIAL_IVORY 31
# define MATERIAL_DIRT 32
# define MATERIAL_CHALK 33
# define MATERIAL_SILK 34
# define MATERIAL_FEATHER 35
# define MATERIAL_COPPER 36
# define MATERIAL_ALUMINUM 37
# define MATERIAL_TIN 38
/* New Materials */
# define MATERIAL_WGOLD 39
# define MATERIAL_EMERALD 40
# define MATERIAL_TOPAZ 41
# define MATERIAL_OBSIDIAN 42
# define MATERIAL_PLATINUM 43
# define MATERIAL_CERAMIC 44
# define MAX_MATERIAL 44
/*
* Durability Levels
* Used in material table - Higher numbers damage more quickly.
*/
# define DUR_MAX 0 /* Indestructable */
# define DUR_JEEP 1 /* Nearly indestructable */
# define DUR_EXCEL 2 /* Excellent */
# define DUR_GOOD 3 /* Good */
# define DUR_AVGPLUS 4 /* Above Average */
# define DUR_AVG 5 /* Average Durability */
# define DUR_AVGMINUS 7 /* Below Average */
# define DUR_BAD 10 /* Bad */
# define DUR_AWFUL 15 /* Awful */
# define DUR_WALMART 20 /* Lowest */ /* Zeran - ROFL, nice one Lotherius */
/*
* Repair Difficulty - used in material table
*/
# define REP_IMPOSSIBLE 1 /* Repair is not possible */
# define REP_EXTREME 2 /* 5.0 Repair is EXTREMELY difficult */
# define REP_HARD 3 /* 2.5 Repair is hard */
# define REP_AVGPLUS 4 /* 1.5 Repair is harder than average */
# define REP_AVG 5 /* 1.0 Repair is average difficulty */
# define REP_AVGMINUS 6 /* .75 Repair is easier than average */
# define REP_EASY 7 /* .50 Repair is simple */
# define REP_BREEZE 8 /* .25 Repair is ridiculously easy */
/*
* Material Flags - Limited to 32, etc ad nauseum - Lotherius
* Some may not currently be used, but are for future expansion.
*/
# define MAT_FLAMMABLE (A) // Can it catch on fire.
# define MAT_VERYFLAMMABLE (B) // Does it catch on fire by itself (like brimstone or nitro)
# define MAT_RUSTABLE (C) // Can it rust?
# define MAT_INKBLEED (D) // Does it have inks that can bleed in water?
# define MAT_DISSOLVE (E) // Does it dissolve easily?
# define MAT_BREAKABLE (F) // Can break (like glass)
# define MAT_BENDABLE (G) // Can it bend (and hold its bent shape, not flex)?
# define MAT_LIVING (H) // Is it alive? (flesh... Not sure of a use yet, some items may need changed )
# define MAT_MELT_ALWAYS (I) // Does it melt at room temperature?
# define MAT_MELT_NORMAL (J) // Does it melt in normal fires? ( set only one of the 3 melt flags )
# define MAT_MELT_VHOT (K) // Does it melt in very hot or magical fires?
# define MAT_MELT_MAGICAL (L) // Does it melt in magical fires only?
# define MAT_NOMAGIC (M) // Does wearing it block mage spells?
# define MAT_PARTMAGIC (N) // Does wearing it limit effectiveness of mage spells?
# define MAT_FORGE (O) // Can it be forged?
# define MAT_SEW (P) // Can it be sewn?
# define MAT_LIQUID (Q) // Is it liquid?
# define MAT_GASEOUS (R) // Is it a gas?
# define MAT_ETHEREAL (S) // Does it exist in a different plane than our own
# define MAT_SOFT (T) // Is it soft?
# define MAT_WRITE (U) // Can you write with it?
# define MAT_ACIDETCH (V) // Will acid hurt it?
# define MAT_VERYHARD (W) // Is it harder than normal (damages non-hard material more)
# define MAT_ROCK (X) // Is it a type of rock?
# define MAT_METAL (Y) // Is it a type of metal? (doesn't imply it can be forged)
# define MAT_MAGIC (Z) // Is it a "magical" material?
# define MAT_WRITEON (aa) // Can you write on it?
# define MAT_CARVE (bb) // Can you carve on it?
# define MAT_FIREPROOF (cc) // Is it fireproof? (Can't be damaged by fire)
# define MAT_CONDUCTIVE (dd) // Is it conductive to electricity?
/* ee */
/* Armor Flags */
# define ARMOR_BAD_QUALITY (A) // Really bad armor
# define ARMOR_LOW_QUALITY (B) // Quality somewhat low
# define ARMOR_HIGH_QUALITY (C) // Quality is quite high.
/* D */
# define ARMOR_BANDED (E) // Metals
# define ARMOR_RING (F) // Metals
# define ARMOR_SCALE (G) // Metals
# define ARMOR_PLATE (H) // Metals
# define ARMOR_SOFTENED (I) // Leathers
# define ARMOR_HARDENED (J) // Leathers
# define ARMOR_CAST (K) // Metals
# define ARMOR_FORGED (L) // Metals
# define ARMOR_TEMPERED (M) // Metals
# define ARMOR_THICKENED (N) // Any
# define ARMOR_STUDDED (O) // Leathers
/* O - ee */
/*
* ACT bits for mobs.
* Used in #MOBILES.
*/
# define ACT_IS_NPC (A) /* Auto set for mobs */
# define ACT_SENTINEL (B) /* Stays in one room */
# define ACT_SCAVENGER (C) /* Picks up objects */
# define ACT_NORANDOM (D) /* Won't get random Items */
# define ACT_NOQUEST (E) /* Can't Quest To */
# define ACT_AGGRESSIVE (F) /* Attacks PC's */
# define ACT_STAY_AREA (G) /* Won't leave area */
# define ACT_WIMPY (H)
# define ACT_PET (I) /* Auto set for pets */
# define ACT_FOLLOWER (J) /* Following A PC */
# define ACT_PRACTICE (K) /* Can practice PC's */
# define ACT_SOLDIER (L) /* Soldier in Army */
/* M */
/* N */
# define ACT_UNDEAD (O)
/* P */
# define ACT_CLERIC (Q)
# define ACT_MAGE (R)
# define ACT_THIEF (S)
# define ACT_WARRIOR (T)
# define ACT_NOALIGN (U)
# define ACT_NOPURGE (V)
/* W */
/* X */
/* Y */
/* Z */
# define ACT_IS_HEALER (aa)
# define ACT_TELEPOP (bb) /* teleports on pop */
# define ACT_UPDATE_ALWAYS (cc)
# define ACT_SKILLMASTER (dd) /* skill master for high level skills */
/* ee */
/* Zeran - define for maximum number of skills a skillmaster can teach */
# define MAX_TEACH_SKILLS 5
/* damage classes */
# define DAM_NONE 0
# define DAM_BASH 1
# define DAM_PIERCE 2
# define DAM_SLASH 3
# define DAM_FIRE 4
# define DAM_COLD 5
# define DAM_LIGHTNING 6
# define DAM_ACID 7
# define DAM_POISON 8
# define DAM_NEGATIVE 9
# define DAM_HOLY 10
# define DAM_ENERGY 11
# define DAM_MENTAL 12
# define DAM_DISEASE 13
# define DAM_DROWNING 14
# define DAM_LIGHT 15
# define DAM_OTHER 16
# define DAM_HARM 17
# define DAM_HANDTOHAND 18 /* Needed for certain things */
# define DAM_BLEEDING 19
/* OFF bits for mobiles */
# define OFF_AREA_ATTACK (A)
# define OFF_BACKSTAB (B)
# define OFF_BASH (C)
# define OFF_BERSERK (D)
# define OFF_DISARM (E)
# define OFF_DODGE (F)
# define OFF_FADE (G)
# define OFF_FAST (H)
# define OFF_KICK (I)
# define OFF_KICK_DIRT (J)
# define OFF_PARRY (K)
# define OFF_RESCUE (L)
# define OFF_TAIL (M)
# define OFF_TRIP (N)
# define OFF_CRUSH (O)
# define ASSIST_ALL (P)
# define ASSIST_ALIGN (Q)
# define ASSIST_RACE (R)
# define ASSIST_PLAYERS (S)
# define ASSIST_GUARD (T)
# define ASSIST_VNUM (U)
# define OFF_RACIST (V)
/* W - ee */
/* return values for check_imm */
# define IS_NORMAL 0
# define IS_IMMUNE 1
# define IS_RESISTANT 2
# define IS_VULNERABLE 3
/* IMM bits for mobs */
# define IMM_SUMMON (A)
# define IMM_CHARM (B)
# define IMM_MAGIC (C)
# define IMM_WEAPON (D)
# define IMM_BASH (E)
# define IMM_PIERCE (F)
# define IMM_SLASH (G)
# define IMM_FIRE (H)
# define IMM_COLD (I)
# define IMM_LIGHTNING (J)
# define IMM_ACID (K)
# define IMM_POISON (L)
# define IMM_NEGATIVE (M)
# define IMM_HOLY (N)
# define IMM_ENERGY (O)
# define IMM_MENTAL (P)
# define IMM_DISEASE (Q)
# define IMM_DROWNING (R)
# define IMM_LIGHT (S)
/* RES bits for mobs */
# define RES_CHARM (B)
# define RES_MAGIC (C)
# define RES_WEAPON (D)
# define RES_BASH (E)
# define RES_PIERCE (F)
# define RES_SLASH (G)
# define RES_FIRE (H)
# define RES_COLD (I)
# define RES_LIGHTNING (J)
# define RES_ACID (K)
# define RES_POISON (L)
# define RES_NEGATIVE (M)
# define RES_HOLY (N)
# define RES_ENERGY (O)
# define RES_MENTAL (P)
# define RES_DISEASE (Q)
# define RES_DROWNING (R)
# define RES_LIGHT (S)
/* VULN bits for mobs */
# define VULN_MAGIC (C)
# define VULN_WEAPON (D)
# define VULN_BASH (E)
# define VULN_PIERCE (F)
# define VULN_SLASH (G)
# define VULN_FIRE (H)
# define VULN_COLD (I)
# define VULN_LIGHTNING (J)
# define VULN_ACID (K)
# define VULN_POISON (L)
# define VULN_NEGATIVE (M)
# define VULN_HOLY (N)
# define VULN_ENERGY (O)
# define VULN_MENTAL (P)
# define VULN_DISEASE (Q)
# define VULN_DROWNING (R)
# define VULN_LIGHT (S)
# define VULN_WOOD (X)
# define VULN_SILVER (Y)
# define VULN_IRON (Z)
# define VULN_MITHRIL (aa)
# define VULN_ADAMANTITE (bb)
# define VULN_STEEL (cc)
/* body form */
# define FORM_EDIBLE (A)
# define FORM_POISON (B)
# define FORM_MAGICAL (C)
# define FORM_INSTANT_DECAY (D)
# define FORM_OTHER (E) /* defined by material bit */
/** F **/
/* actual form */
# define FORM_ANIMAL (G)
# define FORM_SENTIENT (H)
# define FORM_UNDEAD (I)
# define FORM_CONSTRUCT (J)
# define FORM_MIST (K)
# define FORM_INTANGIBLE (L)
# define FORM_BIPED (M)
# define FORM_CENTAUR (N)
# define FORM_INSECT (O)
# define FORM_SPIDER (P)
# define FORM_CRUSTACEAN (Q)
# define FORM_WORM (R)
# define FORM_BLOB (S)
/** T U **/
# define FORM_MAMMAL (V)
# define FORM_BIRD (W)
# define FORM_REPTILE (X)
# define FORM_SNAKE (Y)
# define FORM_DRAGON (Z)
# define FORM_AMPHIBIAN (aa)
# define FORM_FISH (bb)
# define FORM_COLD_BLOOD (cc)
/* body parts */
# define PART_HEAD (A)
# define PART_ARMS (B)
# define PART_LEGS (C)
# define PART_HEART (D)
# define PART_BRAINS (E)
# define PART_GUTS (F)
# define PART_HANDS (G)
# define PART_FEET (H)
# define PART_FINGERS (I)
# define PART_EAR (J)
# define PART_EYE (K)
# define PART_LONG_TONGUE (L)
# define PART_EYESTALKS (M)
# define PART_TENTACLES (N)
# define PART_FINS (O)
# define PART_WINGS (P)
# define PART_TAIL (Q)
# define PART_NECK (R)
# define PART_WAIST (S)
# define PART_WRIST (T)
/* for combat */
# define PART_CLAWS (U)
# define PART_FANGS (V)
# define PART_HORNS (W)
# define PART_SCALES (X)
# define PART_TUSKS (Y)
# define PART_HOOFS (Z)
/* Back to body parts. */
# define PART_FACE (aa)
/*
* Bits for 'affected_by'.
* Used in #MOBILES.
*/
# define AFF_BLIND (A)
# define AFF_INVISIBLE (B)
/** C D E F **/
# define AFF_MELD (G)
/** H **/
# define AFF_FAERIE_FIRE (I)
/** J **/
# define AFF_CURSE (K)
# define AFF_FEAR (L)
# define AFF_POISON (M)
/** N O **/
# define AFF_SNEAK (P)
# define AFF_HIDE (Q)
# define AFF_SLEEP (R)
# define AFF_CHARM (S)
# define AFF_FLYING (T)
# define AFF_PASS_DOOR (U)
# define AFF_HASTE (V)
# define AFF_CALM (W)
# define AFF_PLAGUE (X)
# define AFF_WEAKEN (Y)
/** Z **/
# define AFF_BERSERK (aa)
# define AFF_SWIM (bb)
# define AFF_REGENERATION (cc)
# define AFF_POLY (dd)
/** ee **/
/* DETECTION flags */
# define AFF_SHIELD (A) /* Compatibility */ /* To be deleted */
# define AFF_MUTE (B) /* Compatibility */
# define AFF_SLOW (C) /* Compatibility */
# define AFF_CONFUSION (C) /* Compatibility */
# define AFF_RALLY (D) /* Compatibility */ /* To be deleted */
# define DET_EVIL (E)
# define DET_INVIS (F)
# define DET_MAGIC (G)
# define DET_HIDDEN (H)
# define DET_INFRARED (I)
# define DET_DARK_VISION (J)
/* PROTECTION flags */
# define PROT_GOOD (A)
# define PROT_EVIL (B)
# define PROT_SANCTUARY (C)
# define PROT_ABSORB (D)
# define PROT_PHASED (E)
/*
* Sex.
* Used in #MOBILES.
*/
# define SEX_NEUTRAL 0
# define SEX_MALE 1
# define SEX_FEMALE 2
# define SEX_RANDOM 3
/* AC types */
# define AC_PIERCE 0
# define AC_BASH 1
# define AC_SLASH 2
# define AC_EXOTIC 3
/* dice */
# define DICE_NUMBER 0
# define DICE_TYPE 1
# define DICE_BONUS 2
/* size */
# define SIZE_TINY 0
# define SIZE_SMALL 1
# define SIZE_MEDIUM 2
# define SIZE_LARGE 3
# define SIZE_HUGE 4
# define SIZE_GIANT 5
# define SIZE_UNKNOWN 6 /* Zeran - added at Lotherius request */
/*
* Well known object virtual numbers.
* Defined in #OBJECTS.
*/
# define OBJ_VNUM_MONEY_ONE 2
# define OBJ_VNUM_MONEY_SOME 3
# define OBJ_VNUM_DUMMY 1 /* ROM OLC */
# define OBJ_VNUM_CORPSE_NPC 10
# define OBJ_VNUM_CORPSE_PC 11
# define OBJ_VNUM_SEVERED_HEAD 12
# define OBJ_VNUM_TORN_HEART 13
# define OBJ_VNUM_SLICED_ARM 14
# define OBJ_VNUM_SLICED_LEG 15
# define OBJ_VNUM_GUTS 16
# define OBJ_VNUM_BRAINS 17
# define OBJ_VNUM_SOULBLADE 18
# define OBJ_VNUM_MUSHROOM 20
# define OBJ_VNUM_LIGHT_BALL 21
# define OBJ_VNUM_SPRING 22
# define OBJ_POTION 23
# define OBJ_SCROLL 24
# define OBJ_VNUM_ICE_DAGGER 54
# define OBJ_VNUM_PORTAL 55
# define OBJ_VNUM_SCHOOL_MACE 56
# define OBJ_VNUM_SCHOOL_DAGGER 57
# define OBJ_VNUM_SCHOOL_SWORD 58
# define OBJ_VNUM_SCHOOL_VEST 59
# define OBJ_VNUM_SCHOOL_SHIELD 60
# define OBJ_VNUM_SCHOOL_BANNER 61
# define OBJ_VNUM_MAP 62
# define OBJ_VNUM_BOAT 63 /* added for minor creation */
# define OBJ_VNUM_BAG 64 /* minor creation */
# define OBJ_VNUM_PIT 65
/*
* Item types.
* Used in #OBJECTS.
*/
# define ITEM_LIGHT 1
# define ITEM_SCROLL 2
# define ITEM_WAND 3
# define ITEM_STAFF 4
# define ITEM_WEAPON 5
# define ITEM_TREASURE 8
# define ITEM_ARMOR 9
# define ITEM_POTION 10
# define ITEM_CLOTHING 11
# define ITEM_FURNITURE 12
# define ITEM_TRASH 13
# define ITEM_CONTAINER 15
# define ITEM_DRINK_CON 17
# define ITEM_KEY 18
# define ITEM_FOOD 19
# define ITEM_MONEY 20
# define ITEM_BOAT 22
# define ITEM_CORPSE_NPC 23
# define ITEM_CORPSE_PC 24
# define ITEM_FOUNTAIN 25
# define ITEM_PILL 26
# define ITEM_PROTECT 27
# define ITEM_MAP 28
# define ITEM_PRIDE 29
# define ITEM_COMPONENT 30
# define ITEM_PORTAL 31
/*
* Extra flags.
* Used in #OBJECTS.
*/
# define ITEM_GLOW (A)
# define ITEM_HUM (B)
# define ITEM_DARK (C)
# define ITEM_LOCK (D)
# define ITEM_EVIL (E)
# define ITEM_INVIS (F)
# define ITEM_MAGIC (G)
# define ITEM_NODROP (H)
# define ITEM_BLESS (I)
# define ITEM_ANTI_GOOD (J)
# define ITEM_ANTI_EVIL (K)
# define ITEM_ANTI_NEUTRAL (L)
# define ITEM_NOREMOVE (M)
# define ITEM_INVENTORY (N)
# define ITEM_NOPURGE (O)
# define ITEM_ROT_DEATH (P)
# define ITEM_VIS_DEATH (Q)
# define ITEM_NO_SAC (R)
# define ITEM_CONCEALED (S)
# define ITEM_NO_COND (T)
# define ITEM_NODISP (U) // An item that is "Seen" but isn't displayed in the room.
/*
* Wear flags.
* Used in #OBJECTS.
*/
# define ITEM_TAKE (A)
# define ITEM_WEAR_FINGER (B)
# define ITEM_WEAR_NECK (C)
# define ITEM_WEAR_BODY (D)
# define ITEM_WEAR_HEAD (E)
# define ITEM_WEAR_LEGS (F)
# define ITEM_WEAR_FEET (G)
# define ITEM_WEAR_HANDS (H)
# define ITEM_WEAR_ARMS (I)
# define ITEM_WEAR_SHIELD (J)
# define ITEM_WEAR_ABOUT (K)
# define ITEM_WEAR_WAIST (L)
# define ITEM_WEAR_WRIST (M)
# define ITEM_WIELD (N)
# define ITEM_HOLD (O)
# define ITEM_TWO_HANDS (P)
# define ITEM_WEAR_PRIDE (Q)
# define ITEM_WEAR_FACE (R)
# define ITEM_WEAR_EARS (S)
# define ITEM_WEAR_FLOAT (T)
/* weapon class */
# define WEAPON_EXOTIC 0
# define WEAPON_SWORD 1
# define WEAPON_DAGGER 2
# define WEAPON_SPEAR 3
# define WEAPON_MACE 4
# define WEAPON_AXE 5
# define WEAPON_FLAIL 6
# define WEAPON_WHIP 7
# define WEAPON_POLEARM 8
/* weapon types */
# define MAX_BRAND (I)
# define WEAPON_FLAMING (A)
# define WEAPON_FROST (B)
# define WEAPON_VAMPIRIC (C)
# define WEAPON_SHARP (D)
# define WEAPON_VORPAL (E)
# define WEAPON_TWO_HANDS (F)
# define WEAPON_ACID (G)
# define WEAPON_LIGHTNING (H)
# define WEAPON_POISON (I)
/* furniture flags */
# define SIT_AT (A) /* 1 */
# define SIT_ON (B) /* 2 */
# define SIT_IN (C) /* 4 */
# define REST_AT (D) /* 8 */
# define REST_ON (E) /* 16 */
# define REST_IN (F) /* 32 */
# define SLEEP_AT (G) /* 64 */
# define SLEEP_ON (H) /* 128 */
# define SLEEP_IN (I) /* 256 */
/*
* Apply types (for affects).
* Used in #OBJECTS.
*/
# define APPLY_NONE 0
# define APPLY_STR 1
# define APPLY_DEX 2
# define APPLY_INT 3
# define APPLY_WIS 4
# define APPLY_CON 5
# define APPLY_SEX 6
# define APPLY_CLASS 7
# define APPLY_LEVEL 8
# define APPLY_AGE 9
# define APPLY_HEIGHT 10
# define APPLY_WEIGHT 11
# define APPLY_MANA 12
# define APPLY_HIT 13
# define APPLY_MOVE 14
# define APPLY_GOLD 15
# define APPLY_EXP 16
# define APPLY_AC 17
# define APPLY_HITROLL 18
# define APPLY_DAMROLL 19
# define APPLY_SAVING_PARA 20
# define APPLY_SAVING_ROD 21
# define APPLY_SAVING_PETRI 22
# define APPLY_SAVING_BREATH 23
# define APPLY_SAVING_SPELL 24
# define APPLY_ENCUMBRANCE 25
/*
* Values for containers (value[1]).
* Used in #OBJECTS.
*/
# define CONT_CLOSEABLE 1
# define CONT_PICKPROOF 2
# define CONT_CLOSED 4
# define CONT_LOCKED 8
/*
* Area flags.
*/
# define AREA_NONE (A) /* No flags */
# define AREA_CHANGED (B) /* Area has been modified. */
# define AREA_ADDED (C) /* Area has been added to. */
# define AREA_LOADING (D) /* Used for counting in db.c */
# define AREA_HEADER_CH (E) /* Header changed */
# define AREA_ROOMS_CH (F) /* Rooms changed */
# define AREA_OBJS_CH (G) /* Objects changed */
# define AREA_MOBS_CH (H) /* Mobs changed */
# define AREA_RESETS_CH (I) /* Resets changed */
# define AREA_SHOPS_CH (J) /* Shops changed */
# define AREA_SPECIAL_CH (K) /* Specials changed */
# define AREA_PROGS_CH (L) /* Progs changed */
# define AREA_LEASE_CH (M) /* Leases changed */
/*
* Well known room virtual numbers.
* Defined in #ROOMS.
*/
# define ROOM_VNUM_LIMBO 2
# define ROOM_VNUM_CHAT 1300
# define ROOM_VNUM_SCHOOL 1000
# define ROOM_VNUM_TEMPLE 2093 /* recall */
# define ROOM_VNUM_ALTAR 2096 /* healer */
/* soon to be not used */
/* Replaced with racial values */
/*
* Room flags.
* Used in #ROOMS.
*/
# define ROOM_DARK (A)
# define ROOM_OWNER_ONLY (B)
# define ROOM_NO_MOB (C)
# define ROOM_INDOORS (D)
# define ROOM_FASTHEAL (E) /* Lotherius room fastheal */
# define ROOM_PKILL (F)
# define ROOM_RENT (G) /* Room can be rented */
# define ROOM_TRANSIT (H) /* Room is a transit room, not used */
# define ROOM_NOTELEPOP (I) /* Won't receive telepops */
# define ROOM_PRIVATE (J)
# define ROOM_SAFE (K)
# define ROOM_SOLITARY (L)
# define ROOM_PET_SHOP (M)
# define ROOM_NO_RECALL (N)
# define ROOM_IMP_ONLY (O)
# define ROOM_GODS_ONLY (P)
# define ROOM_HEROES_ONLY (Q)
# define ROOM_NEWBIES_ONLY (R)
# define ROOM_LAW (S)
# define ROOM_BANK (T)
/*
* Directions.
* Used in #ROOMS.
*/
# define DIR_NORTH 0
# define DIR_EAST 1
# define DIR_SOUTH 2
# define DIR_WEST 3
# define DIR_UP 4
# define DIR_DOWN 5
/*
* Exit flags.
* Used in #ROOMS.
*/
# define EX_ISDOOR (A)
# define EX_CLOSED (B) /* Never saved in the areafile */
# define EX_LOCKED (C) /* Never saved in the areafile */
# define EX_PICKPROOF (F)
# define EX_HIDDEN (G)
# define EX_NO_PASS (H)
/*
* Sector types.
* Used in #ROOMS.
*/
/* Zeran - special note
update movement_loss table in act_move.c when adding a new sector,
otherwise the movement cost for the sector will be 0...
*/
# define SECT_INSIDE 0
# define SECT_CITY 1
# define SECT_FIELD 2
# define SECT_FOREST 3
# define SECT_HILLS 4
# define SECT_MOUNTAIN 5
# define SECT_WATER_SWIM 6
# define SECT_WATER_NOSWIM 7
# define SECT_AIR 9
# define SECT_DESERT 10
# define SECT_UNDERGROUND 11
# define SECT_FORT 12
# define SECT_MAX 13
/*
* Equpiment wear locations.
* Used in #RESETS.
*
* WARNING!!! Changing these values will BREAK THINGS. Only add new values
* at the end (insert before MAX_WEAR) and always update wear_info in const.c
* with information for any new value, keeping it in the same order as this.
*/
# define WEAR_NONE -1
# define WEAR_LIGHT 0
# define WEAR_FINGER_L 1
# define WEAR_FINGER_R 2
# define WEAR_NECK_1 3
# define WEAR_NECK_2 4
# define WEAR_BODY 5
# define WEAR_HEAD 6
# define WEAR_LEGS 7
# define WEAR_FEET 8
# define WEAR_HANDS 9
# define WEAR_ARMS 10
# define WEAR_SHIELD 11
# define WEAR_ABOUT 12
# define WEAR_WAIST 13
# define WEAR_WRIST_L 14
# define WEAR_WRIST_R 15
# define WEAR_WIELD 16
# define WEAR_HOLD 17
# define WEAR_WIELD2 18
# define WEAR_PRIDE 19
# define WEAR_FACE 20
# define WEAR_EARS 21
# define WEAR_FLOAT 22
# define MAX_WEAR 23
/***************************************************************************
* *
* VALUES OF INTEREST TO AREA BUILDERS *
* (End of this section ... stop here) *
* *
***************************************************************************/
/*
* Conditions.
*/
# define COND_DRUNK 0
# define COND_FULL 1
# define COND_THIRST 2
/*
* Positions.
*/
# define POS_DEAD 0
# define POS_MORTAL 1
# define POS_INCAP 2
# define POS_STUNNED 3
# define POS_SLEEPING 4
# define POS_RESTING 5
# define POS_SITTING 6
# define POS_FIGHTING 7
# define POS_STANDING 8
/*
* ACT bits for players.
*/
# define PLR_IS_NPC (A) /* Don't EVER set. */
# define PLR_BOUGHT_PET (B)
# define PLR_AUTOASSIST (C) /* Need to move auto flags off to their own field someday. */
# define PLR_AUTOEXIT (D)
# define PLR_AUTOLOOT (E)
# define PLR_AUTOSAC (F)
# define PLR_AUTOGOLD (G)
# define PLR_AUTOSPLIT (H)
/* I */
/* J */
/* K */
/* L */
# define PLR_QUESTOR (M) /* Quest Code */
# define PLR_HOLYLIGHT (N)
# define PLR_WIZINVIS (O)
# define PLR_CANLOOT (P)
# define PLR_NOSUMMON (Q)
# define PLR_NOFOLLOW (R)
# define PLR_XINFO (S) /* I think the colour, msp, etc should be in COMM_ - lotherius */
/* T */
# define PLR_CURSOR (U) /* Cursor Control by Lotherius */
/* V */
# define PLR_LOG (W)
# define PLR_DENY (X)
# define PLR_FREEZE (Y)
# define PLR_THIEF (Z)
# define PLR_KILLER (aa)
# define PLR_AFK (bb)
/* cc */
# define PLR_AUTOSAVE (dd)
# define PLR_CLOAK (ee)
/* RT comm flags -- may be used on both mobs and chars */
# define COMM_QUIET (A)
# define COMM_DEAF (B)
# define COMM_NOWIZ (C)
# define COMM_NOAUCTION (D)
# define COMM_NOGOSSIP (E)
# define COMM_NOQUESTION (F)
# define COMM_NOMUSIC (G)
# define COMM_NOCLANTELL (H)
/* I */
/* J */
/* K */
# define COMM_COMPACT (L)
# define COMM_BRIEF (M)
# define COMM_PROMPT (N)
# define COMM_COMBINE (O)
# define COMM_TELNET_GA (P) /* Should we use this?? */
# define COMM_FULLFIGHT (Q)
# define COMM_DARKCOLOR (R) /* Strip bright colours. */
# define COMM_NOFLASHY (S) /* Don't see reverse colours */
# define COMM_NOEMOTE (T) /* Penalties */
# define COMM_NOSHOUT (U)
# define COMM_NOTELL (V)
# define COMM_NOCHANNELS (W)
# define COMM_BEEP (X) /* Lotherius Added this for BEEP */
# define COMM_NODARKGREY (Y) /* Don't see the dark black colour */
# define COMM_COLOUR (Z) /* Colour.. Has to be duplicated in ch->comm saving linkdead chars. */
# define COMM_PUEBLO (aa) /* Pueblo Client Enabled */
# define COMM_MXP (bb) /* Yet again, needed. Like pueblo, this is to avoid redetect on copyover. */
/* cc */
/* dd */
/* ee */
/* Zeran - channel id's */
/* order doesn't matter, just so each one is unique */
# define CHAN_GOSSIP (1)
# define CHAN_MUSIC (2)
# define CHAN_AUCTION (3)
# define CHAN_QUESTION (4)
# define CHAN_ANSWER (5)
# define CHAN_IMMTALK (6)
# define CHAN_IMPTALK (7)
# define CHAN_SAY (8)
# define CHAN_CLAN (9)
# define CHAN_YELL (10)
# define CHAN_SHOUT (11)
/* Zeran - character notify flags */
# define NOTIFY_LEVEL (A)
# define NOTIFY_DEATH (B)
# define NOTIFY_DELETE (C)
# define NOTIFY_LOGIN (D)
# define NOTIFY_QUITGAME (E)
# define NOTIFY_LOSTLINK (F)
# define NOTIFY_CLANPROMOTE (G)
# define NOTIFY_CLANDEMOTE (H)
# define NOTIFY_CLANACCEPT (I)
# define NOTIFY_CLANG (J)
# define NOTIFY_CLANQUIT (K)
# define NOTIFY_CLANPETITION (L)
# define NOTIFY_HERO (M)
# define NOTIFY_NEWNOTE (N)
# define NOTIFY_RECONNECT (O)
# define NOTIFY_REPOP (P)
# define NOTIFY_WEATHER (Q)
# define NOTIFY_TICK (R)
# define NOTIFY_ALL (S-1) /*flags all lower bits*/
/* Zeran - notify TO's */
# define TO_ALL 1
# define TO_CLAN 2
# define TO_PERS 3
/* anything above 102 will be interpeted as a wiznet message */
# define TO_WIZNET (MAX_LEVEL - 8) // 102
# define TO_IMM (MAX_LEVEL - 8) // 102
# define TO_IMM_ADMIN (MAX_LEVEL - 4) // 106
# define TO_IMP MAX_LEVEL // 110
/* Zeran - wiznet additions */
# define WIZNET_SITES (A)
# define WIZNET_NEWBIE (B)
# define WIZNET_SPAM (C)
# define WIZNET_DEATH (D)
# define WIZNET_RESET (E)
# define WIZNET_MOBDEATH (F)
# define WIZNET_BUG (G)
# define WIZNET_SWITCH (H)
# define WIZNET_LINK (I)
/* remainder are administrative level only */
# define WIZNET_LOAD (M)
# define WIZNET_RESTORE (N)
# define WIZNET_SNOOP (O)
# define WIZNET_SECURE (P)
/*
* MOBprog definitions
*/
# define TRIG_ACT (A)
# define TRIG_BRIBE (B)
# define TRIG_DEATH (C)
# define TRIG_ENTRY (D)
# define TRIG_FIGHT (E)
# define TRIG_GIVE (F)
# define TRIG_GREET (G)
# define TRIG_GRALL (H)
# define TRIG_KILL (I)
# define TRIG_HPCNT (J)
# define TRIG_RANDOM (K)
# define TRIG_SPEECH (L)
# define TRIG_EXIT (M)
# define TRIG_EXALL (N)
# define TRIG_DELAY (O)
# define TRIG_SURR (P)
# define TRIG_GET (Q)
# define TRIG_DROP (R)
# define TRIG_SIT (S)
# define TRIG_PULL (T)
# define TRIG_PUSH (U)
# define TRIG_CLIMB (V)
# define TRIG_TURN (W)
# define TRIG_PLAY (X)
# define TRIG_TWIST (Y)
/** Z **/
# define TRIG_LIFT (aa)
# define TRIG_DIG (bb)
# define TRIG_ENTER (cc)
# define TRIG_WEAR (dd)
# define TRIG_REMOVE (ee) // Triggers aren't bitvectors, we don't need to be using these
// Letters... However, if this is how they're stored in the areafiles,
// then we need to make sure it gets updated before using any higher
// numbered triggers.
/*
* Prog types
*/
# define PRG_MPROG 0
# define PRG_OPROG 1
# define PRG_RPROG 2
/*
* Liquids.
*/
# define LIQ_WATER 0
# define LIQ_MAX 16
/*****************************************************************************
* OLC *
*****************************************************************************/
/*
* Types of attacks.
* Must be non-overlapping with spell/skill types,
* but may be arbitrary beyond that.
*/
# define TYPE_UNDEFINED -1
# define TYPE_HIT 1000
/*
* Target types.
*/
# define TAR_IGNORE 0
# define TAR_CHAR_OFFENSIVE 1
# define TAR_CHAR_DEFENSIVE 2
# define TAR_CHAR_SELF 3
# define TAR_OBJ_INV 4
/* Additional Target Types for cmd/spell/skill prog development */
# define TAR_SELF 5
# define TAR_OTHER_OFFENSIVE 6
# define TAR_OTHER_DEFENSIVE 7
# define TAR_OBJ_HERE 8
# define TAR_OBJ_ROOM 9
# define TAR_OTHER_AREA 10
# define TAR_OTHER_WORLD 11
# define TAR_ROOM 12
# define TAR_ENEMY 13
/*
* Utility macros.
*/
# define IS_VALID(data) ((data) != NULL && (data)->valid)
# define VALIDATE(data) ((data)->valid = TRUE)
# define INVALIDATE(data) ((data)->valid = FALSE)
# 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 DIVTWO(a) ((a)>>1) // Quick divide by two.
# define MULTWO(a) ((a)<<1) // QUick multiply by two.
# define LOWER(c) ((c) >= 'A' && (c) <= 'Z' ? (c)+'a'-'A' : (c))
# define UPPER(c) ((c) >= 'a' && (c) <= 'z' ? (c)+'A'-'a' : (c))
# define IS_SET(flag, bit) ((flag) & (bit))
# define SET_BIT(var, bit) ((var) |= (bit))
# define REMOVE_BIT(var, bit) ((var) &= ~(bit))
# define IS_NULLSTR(str) ((str) == NULL || (str)[0] == '\0')
# define ENTRE(min,num,max) (((min) < (num)) && ((num) < (max)))
// For when you need to just see there's valid lease data at all, doesn't guarantee a rented_by field
# define IS_LEASE(data) ((data) != NULL && (data)->valid && (data)->room !=NULL \
&& IS_SET ((data)->room->room_flags, ROOM_RENT))
// For when you need to see both if it *is* a lease, and if it is, if it's currently rented by someone
# define IS_RENTED(data) (IS_LEASE((data)) && !IS_NULLSTR((data)->rented_by))
/*
* Character macros.
*/
# define IS_NPC(ch) (IS_SET((ch)->act, ACT_IS_NPC))
# define IS_IMMORTAL(ch) (get_trust(ch) >= LEVEL_IMMORTAL)
# define IS_IMP(ch) (get_trust(ch) == MAX_LEVEL)
# define IS_HERO(ch) (get_trust(ch) >= LEVEL_HERO)
# define IS_TRUSTED(ch,level) (get_trust((ch)) >= (level))
# define IS_QUESTOR(ch) (IS_SET((ch)->act, PLR_QUESTOR)) /* Quest Code */
# define IS_AFFECTED(ch, sn) (IS_SET((ch)->affected_by, (sn)))
/* New affected bits 2 and 3 */
# define CAN_DETECT(ch, sn) (IS_SET((ch)->detections, (sn)))
# define IS_PROTECTED(ch, sn) (IS_SET((ch)->protections, (sn)))
/* end of affected bits 2 and 3 */
# define IS_GOOD(ch) (ch->alignment >= 350)
# define IS_EVIL(ch) (ch->alignment <= -350)
# define IS_NEUTRAL(ch) (!IS_GOOD(ch) && !IS_EVIL(ch))
# define IS_AWAKE(ch) (ch->position > POS_SLEEPING)
/* Simplified */
# define GET_HITROLL(ch) ((ch)->hitroll+str_app[get_curr_stat(ch,STAT_STR)].tohit)
# define GET_DAMROLL(ch) ((ch)->damroll+str_app[get_curr_stat(ch,STAT_STR)].todam)
/* Zeran - this IS_OUTSIDE now checks sector type */
# define IS_OUTSIDE(ch) (!IS_SET( (ch)->in_room->room_flags, ROOM_INDOORS) \
&& ( (ch)->in_room->sector_type != SECT_INSIDE ) \
&& ( (ch)->in_room->sector_type != SECT_UNDERGROUND ) )
# define WAIT_STATE(ch, npulse) ((ch)->wait = UMAX((ch)->wait, (npulse)))
# define HAS_TRIGGER_MOB(ch,trig) (IS_SET((ch)->pIndexData->mprog_flags,(trig)))
# define HAS_TRIGGER_OBJ(obj,trig) (IS_SET((obj)->pIndexData->oprog_flags,(trig)))
# define HAS_TRIGGER_ROOM(room,trig) (IS_SET((room)->rprog_flags,(trig)))
/* Moved here from olc.h for universal access */
# define IS_SWITCHED( ch ) ( ch->desc && ch->desc->original )
# define IS_BUILDER(ch, Area) ( !IS_NPC(ch) && !IS_SWITCHED( ch ) && \
( ch->pcdata->security >= Area->security \
|| strstr( Area->builders, ch->name ) \
|| strstr( Area->builders, "All" ) ) )
/*
* Object macros.
*/
# define CAN_WEAR(obj, part) (IS_SET((obj)->wear_flags, (part)))
# define IS_OBJ_STAT(obj, stat) (IS_SET((obj)->extra_flags, (stat)))
# define IS_WEAPON_STAT(obj,stat) (IS_SET((obj)->value[4],(stat)))
/*
* Description macros.
*/
/* Zeran - modifed PERS to account for masked player */
# define PERSMASK(ch, looker) ( can_see( looker, (ch) ) ? IS_AFFECTED((ch),AFF_POLY) ? \
(ch)->short_descr : IS_NPC(ch) ? (ch)->short_descr \
: (ch)->name : "someone" )
# define PERS(ch, looker) ( can_see( looker, (ch) ) ? IS_AFFECTED((ch),AFF_POLY) ? IS_NPC(ch) ? \
(ch)->short_descr : (ch)->poly_name : IS_NPC(ch) ? (ch)->short_descr \
: (ch)->name : "someone" )
/*
* "unbreakable" string functions.
* Defined so we don't have to type out the longer functions every time,
* which leads to laziness, and then before you know it we aren't checking bounds
* anywhere.
* These functions could use some error logging so caught string overflows will
* be logged. They also do not replace the utility of the BUFFER type from Erwin.
* -- Lotherius.
*/
/* SNP: Wrapper to snprintf that uses the format of sprintf.
* SLCAT: Wrapper to strlcat that uses the format of strcat.
* SLCPY: Wrapper to strlcpy that uses the format of strcpy.
* Systems that don't have sstrlcat or strlcpy will have these functions emulated.
* Use these whenever possible.
*/
# if defined ( SNP )
# undef SNP
# endif
# define SNP(var,args...) snprintf ( (var), sizeof((var)) -1, ##args )
/* Need to get the proper definition of the above on Win32, it doesn't work.. No win32 compile till it does. */
#ifndef __FreeBSD__
/* We'll have to make our own strlcat and strlcpy on win32 and linux */
size_t strlcat args ( (char *dst, const char *src, size_t siz) );
size_t strlcpy args ( (char *dst, const char *src, size_t siz) );
# endif
/*
* FreeBSD has strlcat and strlcpy... since I'm not quite sure how to detect these, we'll
* "assume" they exist if the two previous conditions failed.
*/
# if defined ( SLCAT )
# undef SLCAT
# endif
# define SLCAT(str,append) strlcat ( (str), (append), sizeof ( str ) )
# if defined ( SLCPY )
# undef SLCPY
# endif
# define SLCPY(dst,src) strlcpy ( (dst), (src), sizeof ( dst ) )
/* Database Macros */
# if defined(KEY)
# undef KEY
# endif
# define KEY( literal, field, value ) \
if ( !str_cmp( word, literal ) ) \
{ \
field = value; \
fMatch = TRUE; \
break; \
}
/* DO NOT USE STR_DUP ON KEYS - THAT ISN'T HOW IT WORKS, you DO WANT field = value, TRUST ME - Lotherius */
/* We had a HORRIBLE memory leak here because someone rewrote KEYS without knowing what they were doing */
/* Wonder who that was......... */
# if defined(KEYS)
# undef KEYS
# endif
# define KEYS( literal, field, value ) \
if ( !str_cmp( word, literal ) ) \
{ free_string(field); \
field = value; \
fMatch = TRUE; break; \
}
/*
* Turn on NOCRYPT to keep passwords in plain text.
* Windows has the "wincrypt32" libary... Perhaps someone could
* check the usability of that?
*/
# if defined (WIN32)
# define NOCRYPT
# endif
# if defined(NOCRYPT)
# define crypt(s1, s2) (s1)
# endif
/*
* Data files used by the server.
*
* AREA_LIST contains a list of areas to boot.
* All files are read in completely at bootup.
* Most output files (bug, idea, typo, shutdown) are append-only.
*
* The NULL_FILE is held open so that we have a stream handle in reserve,
* so players can go ahead and telnet to all the other descriptors.
* Then we close it whenever we need to open a file (e.g. a save file).
*/
# ifdef WIN32
# define PLAYER_DIR "..\\player\\" /* Player files */
# define PLAYER_TEMP "..\\player\\temp"
# define GOD_DIR "..\\gods\\" /* list of gods */
# define NULL_FILE "nul" /* To reserve one stream */
# else
# define NULL_FILE "/dev/null" /* To reserve one stream */
# define PLAYER_DIR "../player/" /* Player files */
# define PLAYER_TEMP "../player/temp"
# define GOD_DIR "../gods/" /* list of gods */
# endif
# define AREA_LIST "area.lst" /* List of areas */
# define BUG_FILE "bugs.txt" /* For 'bug' and bug( ) */
# define TYPO_FILE "typos.txt" /* For 'typo' */
# define SHUTDOWN_FILE "shutdown.txt" /* For 'shutdown' */
/*-------------------------------
* Note Board Defines
* for Version 2 board system
* (c) 1995-96 erwin@pip.dknet.dk
*------------------------------*/
# define NOTE_DIR "../msgbase/" /* set it to something you like */
# define DEF_NORMAL 0 /* No forced change, but default (any string) */
# define DEF_INCLUDE 1 /* 'names' MUST be included (only ONE name!) */
# define DEF_EXCLUDE 2 /* 'names' must NOT be included (one name only) */
# define MAX_BOARD 7
# define DEFAULT_BOARD 0 /* default board is board #0 in the boards */
/* It should be readable by everyone! */
# define MAX_LINE_LENGTH 80 /* enforce a max length of 80 on text lines, reject longer lines */
/* This only applies in the Body of the note */
# define MAX_NOTE_TEXT (4*MAX_STRING_LENGTH - 1000)
# define BOARD_NOTFOUND -1 /* Error code from board_lookup() and board_number */
/* bit.c */
extern const struct flag_type area_flags[];
extern const struct flag_type sex_flags[];
extern const struct flag_type exit_flags[];
extern const struct flag_type door_resets[];
extern const struct flag_type room_flags[];
extern const struct flag_type sector_flags[];
extern const struct flag_type type_flags[];
extern const struct flag_type extra_flags[];
extern const struct flag_type wear_flags[];
extern const struct flag_type act_flags[];
extern const struct flag_type affect_flags[];
extern const struct flag_type detect_flags[];
extern const struct flag_type protect_flags[];
extern const struct flag_type apply_flags[];
extern const struct flag_type wear_loc_strings[];
extern const struct flag_type wear_loc_flags[];
extern const struct flag_type weapon_flags[];
extern const struct flag_type container_flags[];
extern const struct flag_type liquid_flags[];
extern const struct flag_type material_type[];
extern const struct flag_type form_flags[];
extern const struct flag_type part_flags[];
extern const struct flag_type ac_type[];
extern const struct flag_type size_flags[];
extern const struct flag_type off_flags[];
extern const struct flag_type imm_flags[];
extern const struct flag_type res_flags[];
extern const struct flag_type vuln_flags[];
extern const struct flag_type position_flags[];
extern const struct flag_type weapon_class[];
extern const struct flag_type weapon_type[];
extern const struct flag_type attack_type[];
extern const struct flag_type damage_type[];
extern const struct flag_type sector_name[];
extern const struct flag_type mprog_flags[];
extern const struct flag_type oprog_flags[];
extern const struct flag_type rprog_flags[];
extern const struct flag_type vflags_armor[];
#endif /* MERC_H */