/* ** AreaEditor - a program for editing SMAUG and ROM area files. ** Author: Nick Gammon ** http://www.gammon.com.au/ ** See Copyright Notice at the end of AreaEditor.h */ #define MAX_LANG_NAMES 21 #define MAX_EXP_WORTH 500000 #define MIN_EXP_WORTH 20 #define MAX_REXITS 20 /* Maximum exits allowed in 1 room */ #define MAX_SKILL 225 #define MAX_CLASS 8 /* Increased to 8 for Augurer - SB*/ #define MAX_LEVEL 65 #define MAX_CLAN 50 #define MAX_DEITY 50 #define MAX_CPD 4 /* Maximum council power level difference */ #define MAX_HERB 20 #define LEVEL_IMMORTAL (MAX_LEVEL - 14) /* Define maximum number of climate settings - FB */ #define MAX_CLIMATE 5 #define HAS_SPELL_INDEX -1 #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 */ /* ROM: 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 /*************************************************************************** * * * VALUES OF INTEREST TO AREA BUILDERS * * (Start of section ... start here) * * * ***************************************************************************/ /* * 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 The minimum BV *MUST* be 11! */ #define SF_WATER BV11 #define SF_EARTH BV12 #define SF_AIR BV13 #define SF_ASTRAL BV14 #define SF_AREA BV15 /* is an area spell */ #define SF_DISTANT BV16 /* affects something far away */ #define SF_REVERSE BV17 #define SF_SAVE_HALF_DAMAGE BV18 /* save for half damage */ #define SF_SAVE_NEGATES BV19 /* save negates affect */ #define SF_ACCUMULATIVE BV20 /* is accumulative */ #define SF_RECASTABLE BV21 /* can be refreshed */ #define SF_NOSCRIBE BV22 /* cannot be scribed */ #define SF_NOBREW BV23 /* cannot be brewed */ #define SF_GROUPSPELL BV24 /* only affects group members */ #define SF_OBJECT BV25 /* directed at an object */ #define SF_CHARACTER BV26 /* directed at a character */ #define SF_SECRETSKILL BV27 /* hidden unless learned */ #define SF_PKSENSITIVE BV28 /* much harder for plr vs. plr */ #define SF_STOPONFAIL BV29 /* stops spell on first failure */ typedef enum { SS_NONE, SS_POISON_DEATH, SS_ROD_WANDS, SS_PARA_PETRI, SS_BREATH, SS_SPELL_STAFF } save_types; #define ALL_BITS INT_MAX #define SDAM_MASK ALL_BITS & ~(BV00 | BV01 | BV02) #define SACT_MASK ALL_BITS & ~(BV03 | BV04 | BV05) #define SCLA_MASK ALL_BITS & ~(BV06 | BV07 | BV08) #define SPOW_MASK ALL_BITS & ~(BV09 | BV10) typedef enum { SD_NONE, SD_FIRE, SD_COLD, SD_ELECTRICITY, SD_ENERGY, SD_ACID, SD_POISON, SD_DRAIN } spell_dam_types; typedef enum { SA_NONE, SA_CREATE, SA_DESTROY, SA_RESIST, SA_SUSCEPT, SA_DIVINATE, SA_OBSCURE, SA_CHANGE } spell_act_types; typedef enum { SP_NONE, SP_MINOR, SP_GREATER, SP_MAJOR } spell_power_types; typedef enum { SC_NONE, SC_LUNAR, SC_SOLAR, SC_TRAVEL, SC_SUMMON, SC_LIFE, SC_DEATH, SC_ILLUSION } spell_class_types; typedef enum { TRAP_TYPE_POISON_GAS = 1, TRAP_TYPE_POISON_DART, TRAP_TYPE_POISON_NEEDLE, TRAP_TYPE_POISON_DAGGER, TRAP_TYPE_POISON_ARROW, TRAP_TYPE_BLINDNESS_GAS, TRAP_TYPE_SLEEPING_GAS, TRAP_TYPE_FLAME, TRAP_TYPE_EXPLOSION, TRAP_TYPE_ACID_SPRAY, TRAP_TYPE_ELECTRIC_SHOCK, TRAP_TYPE_BLADE, TRAP_TYPE_SEX_CHANGE } trap_types; #define MAX_TRAPTYPE TRAP_TYPE_SEX_CHANGE #define TRAP_ROOM BV00 #define TRAP_OBJ BV01 #define TRAP_ENTER_ROOM BV02 #define TRAP_LEAVE_ROOM BV03 #define TRAP_OPEN BV04 #define TRAP_CLOSE BV05 #define TRAP_GET BV06 #define TRAP_PUT BV07 #define TRAP_PICK BV08 #define TRAP_UNLOCK BV09 #define TRAP_N BV10 #define TRAP_S BV11 #define TRAP_E BV12 #define TRAP_W BV13 #define TRAP_U BV14 #define TRAP_D BV15 #define TRAP_EXAMINE BV16 #define TRAP_NE BV17 #define TRAP_NW BV18 #define TRAP_SE BV19 #define TRAP_SW BV20 /* * Item types. * Used in #OBJECTS. */ // definitions below are common to SMAUG and ROM #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 // SMAUG only #define ITEM_HERB 32 #define ITEM_SWITCH 36 #define ITEM_LEVER 37 #define ITEM_TRAP 44 #define ITEM_SALVE 60 // ROM only #define ITEM_WORN ITEM_CLOTHING // same thing huh? #define ITEM_PORTAL 29 /* * 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 /* * Apply types (for affects). * Used in #OBJECTS. */ typedef enum { APPLY_NONE, APPLY_STR, APPLY_DEX, APPLY_INT, APPLY_WIS, APPLY_CON, APPLY_SEX, APPLY_CLASS, APPLY_LEVEL, APPLY_AGE, APPLY_HEIGHT, APPLY_WEIGHT, APPLY_MANA, APPLY_HIT, APPLY_MOVE, APPLY_GOLD, APPLY_EXP, APPLY_AC, APPLY_HITROLL, APPLY_DAMROLL, APPLY_SAVING_POISON, APPLY_SAVING_ROD, APPLY_SAVING_PARA, APPLY_SAVING_BREATH, APPLY_SAVING_SPELL, APPLY_CHA, APPLY_AFFECT, APPLY_RESISTANT, APPLY_IMMUNE, APPLY_SUSCEPTIBLE, APPLY_WEAPONSPELL, APPLY_LCK, APPLY_BACKSTAB, APPLY_PICK, APPLY_TRACK, APPLY_STEAL, APPLY_SNEAK, APPLY_HIDE, APPLY_PALM, APPLY_DETRAP, APPLY_DODGE, APPLY_PEEK, APPLY_SCAN, APPLY_GOUGE, APPLY_SEARCH, APPLY_MOUNT, APPLY_DISARM, APPLY_KICK, APPLY_PARRY, APPLY_BASH, APPLY_STUN, APPLY_PUNCH, APPLY_CLIMB, APPLY_GRIP, APPLY_SCRIBE, APPLY_BREW, APPLY_WEARSPELL, APPLY_REMOVESPELL, APPLY_EMOTION, APPLY_MENTALSTATE, APPLY_STRIPSN, APPLY_REMOVE, APPLY_DIG, APPLY_FULL, APPLY_THIRST, APPLY_DRUNK, APPLY_BLOOD, MAX_APPLY_TYPE } apply_types; #define REVERSE_APPLY 1000 /* where definitions - ROM */ #define TO_AFFECTS 0 #define TO_OBJECT 1 #define TO_IMMUNE 2 #define TO_RESIST 3 #define TO_VULN 4 #define TO_WEAPON 5 /* * Directions. * Used in #ROOMS. */ typedef enum { DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_UP, DIR_DOWN, DIR_NORTHEAST, DIR_NORTHWEST, DIR_SOUTHEAST, DIR_SOUTHWEST, DIR_SOMEWHERE } dir_types; #define MAX_DIR DIR_SOUTHWEST /* max for normal walking */ #define DIR_PORTAL DIR_SOMEWHERE /* portal direction */ /* * Exit flags. * Used in #ROOMS. */ #define EX_ISDOOR BV00 #define EX_CLOSED BV01 #define EX_LOCKED BV02 #define EX_SECRET BV03 #define EX_SWIM BV04 #define EX_PICKPROOF BV05 #define EX_FLY BV06 #define EX_CLIMB BV07 #define EX_DIG BV08 #define EX_RES1 BV09 /* are these res[1-4] important? */ #define EX_NOPASSDOOR BV10 #define EX_HIDDEN BV11 #define EX_PASSAGE BV12 #define EX_PORTAL BV13 #define EX_RES2 BV14 #define EX_RES3 BV15 #define EX_xCLIMB BV16 #define EX_xENTER BV17 #define EX_xLEAVE BV18 #define EX_xAUTO BV19 #define EX_RES4 BV20 #define EX_xSEARCHABLE BV21 #define EX_BASHED BV22 #define EX_BASHPROOF BV23 #define EX_NOMOB BV24 #define EX_WINDOW BV25 #define EX_xLOOK BV26 #define MAX_EXFLAG 26 /* * Exit flags. * Used in #ROOMS. */ #define ROM_EX_ISDOOR (A) #define ROM_EX_CLOSED (B) #define ROM_EX_LOCKED (C) #define ROM_EX_PICKPROOF (F) #define ROM_EX_NOPASS (G) #define ROM_EX_EASY (H) #define ROM_EX_HARD (I) #define ROM_EX_INFURIATING (J) #define ROM_EX_NOCLOSE (K) #define ROM_EX_NOLOCK (L) /*************************************************************************** * * * VALUES OF INTEREST TO AREA BUILDERS * * (End of this section ... stop here) * * * ***************************************************************************/ #define INIT_WEAPON_CONDITION 12 #define MAX_ITEM_IMPACT 30 /* mud prog defines */ #define ERROR_PROG -1 #define IN_FILE_PROG 0 #define ACT_PROG BV00 #define SPEECH_PROG BV01 #define RAND_PROG BV02 #define FIGHT_PROG BV03 #define RFIGHT_PROG BV03 #define DEATH_PROG BV04 #define RDEATH_PROG BV04 #define HITPRCNT_PROG BV05 #define ENTRY_PROG BV06 #define ENTER_PROG BV06 #define GREET_PROG BV07 #define RGREET_PROG BV07 #define OGREET_PROG BV07 #define ALL_GREET_PROG BV08 #define GIVE_PROG BV09 #define BRIBE_PROG BV10 #define HOUR_PROG BV11 #define TIME_PROG BV12 #define WEAR_PROG BV13 #define REMOVE_PROG BV14 #define SAC_PROG BV15 #define LOOK_PROG BV16 #define EXA_PROG BV17 #define ZAP_PROG BV18 #define GET_PROG BV19 #define DROP_PROG BV20 #define DAMAGE_PROG BV21 #define REPAIR_PROG BV22 #define RANDIW_PROG BV23 #define SPEECHIW_PROG BV24 #define PULL_PROG BV25 #define PUSH_PROG BV26 #define SLEEP_PROG BV27 #define REST_PROG BV28 #define LEAVE_PROG BV29 #define SCRIPT_PROG BV30 #define USE_PROG BV31 typedef enum { SKILL_UNKNOWN, SKILL_SPELL, SKILL_SKILL, SKILL_WEAPON, SKILL_TONGUE, SKILL_HERB, SKILL_RACIAL, SKILL_DISEASE } skill_types; #define ALL_BITS INT_MAX #define SDAM_MASK ALL_BITS & ~(BV00 | BV01 | BV02) #define SACT_MASK ALL_BITS & ~(BV03 | BV04 | BV05) #define SCLA_MASK ALL_BITS & ~(BV06 | BV07 | BV08) #define SPOW_MASK ALL_BITS & ~(BV09 | BV10) #define SPELL_DAMAGE(skill) ( ((skill)->flags ) & 7 ) #define SPELL_ACTION(skill) ( ((skill)->flags >> 3) & 7 ) #define SPELL_CLASS(skill) ( ((skill)->flags >> 6) & 7 ) #define SPELL_POWER(skill) ( ((skill)->flags >> 9) & 3 ) #define SET_SDAM(skill, val) ( (skill)->flags = ((skill)->flags & SDAM_MASK) + ((val) & 7) ) #define SET_SACT(skill, val) ( (skill)->flags = ((skill)->flags & SACT_MASK) + (((val) & 7) << 3) ) #define SET_SCLA(skill, val) ( (skill)->flags = ((skill)->flags & SCLA_MASK) + (((val) & 7) << 6) ) #define SET_SPOW(skill, val) ( (skill)->flags = ((skill)->flags & SPOW_MASK) + (((val) & 3) << 9) ) /* Command flags */ #define CMD_FLAG_POSSESS BV00 #define CMD_FLAG_POLYMORPHED BV01 #define CMD_WATCH BV02 /* FB */ // room flags - we need to know whether to dim the teleport location #define ROOM_TELEPORT BV22 // NJG - WEAR_HOLD needed /* * Equpiment wear locations. * Used in #RESETS. */ typedef enum { WEAR_NONE = -1, WEAR_LIGHT = 0, WEAR_FINGER_L, WEAR_FINGER_R, WEAR_NECK_1, WEAR_NECK_2, WEAR_BODY, WEAR_HEAD, WEAR_LEGS, WEAR_FEET, WEAR_HANDS, WEAR_ARMS, WEAR_SHIELD, WEAR_ABOUT, WEAR_WAIST, WEAR_WRIST_L, WEAR_WRIST_R, WEAR_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 } wear_locations; // NJG - POS_STANDING needed /* * Positions. */ typedef enum { 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 } positions; /* NJG - these are needed in various spots */ #define ACT_IS_NPC BV00 /* Auto set for mobs */ #define ACT_SENTINEL BV01 /* Stays in one room */ #define ACT_AGGRESSIVE BV05 /* Attacks PC's */ #define ACT_STAY_AREA BV06 /* Won't leave area */ #define ACT_WIMPY BV07 /* Flees when hurt */