/*
* mud.h
* Defines required by the rest of the program.
* ____ _
* | _ \ ___ __ _| |_ __ ___ ___
* | |_) / _ \/ _` | | '_ ` _ \/ __|
* | _ < __/ (_| | | | | | | \__ \
* |_| \_\___|\__,_|_|_| |_| |_|___/
*
* Permission to use, modify and distribute is granted via the
* Creative Commons - Attribution - Non Commercial - Share Alike 3.0 License
* http://creativecommons.org/licenses/by-nc-sa/3.0/
*
* Copyright (C) 2007-2009 Jason Mitchell, Randi Mitchell
* Contributions by Tim Callahan, Jonathan Hseu
* Based on Mordor (C) Brooke Paul, Brett J. Vickers, John P. Freeman
*
*/
#ifndef MUD_H
#define MUD_H
// Other includes are at the end of the file to make sure all defines and such in this
// file are visible
#include "paths.h"
#include "bstring.h"
#ifndef READCFG
#define READCFG
#endif // READCFG
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (!FALSE)
#endif
#define REBOOTFILE CONFPATH "/" "reboot.xml"
// Size of exp array, also highest you can train
#define MAXALVL 40
#define MAX_ARMOR 2000
// I/O buffer sizes
#define IBUFSIZE 1024
#define OBUFSIZE 8192
// File permissions
//#define S_IWRITE 00660
//#define S_IREAD 00006
#ifndef O_BINARY
#define O_BINARY 0
#endif
#define ACC 00666
// merror() error types
#define FATAL 1
#define NONFATAL 0
enum LoadType {
LS_NORMAL,
LS_BACKUP,
LS_CONVERT,
LS_FULL,
LS_REF
};
#define CUSTOM_COLOR_DEFAULT '#'
#define CUSTOM_COLOR_SIZE 20
// positions in the color array
enum CustomColor {
CUSTOM_COLOR_BROADCAST,
CUSTOM_COLOR_GOSSIP,
CUSTOM_COLOR_PTEST,
CUSTOM_COLOR_NEWBIE,
CUSTOM_COLOR_DM,
CUSTOM_COLOR_ADMIN,
CUSTOM_COLOR_SEND,
CUSTOM_COLOR_MESSAGE,
CUSTOM_COLOR_WATCHER,
CUSTOM_COLOR_CLASS,
CUSTOM_COLOR_RACE,
CUSTOM_COLOR_CLAN,
CUSTOM_COLOR_TELL,
CUSTOM_COLOR_GROUP,
CUSTOM_COLOR_DAMAGE,
CUSTOM_COLOR_SELF,
CUSTOM_COLOR_GUILD
};
enum WeatherString {
WEATHER_SUNRISE,
WEATHER_SUNSET,
WEATHER_EARTH_TREMBLES,
WEATHER_HEAVY_FOG,
WEATHER_BEAUTIFUL_DAY,
WEATHER_BRIGHT_SUN,
WEATHER_GLARING_SUN,
WEATHER_HEAT,
WEATHER_STILL,
WEATHER_LIGHT_BREEZE,
WEATHER_STRONG_WIND,
WEATHER_WIND_GUSTS,
WEATHER_GALE_FORCE,
WEATHER_CLEAR_SKIES,
WEATHER_LIGHT_CLOUDS,
WEATHER_THUNDERHEADS,
WEATHER_LIGHT_RAIN,
WEATHER_HEAVY_RAIN,
WEATHER_SHEETS_RAIN,
WEATHER_TORRENT_RAIN,
WEATHER_NO_MOON,
WEATHER_SLIVER_MOON,
WEATHER_HALF_MOON,
WEATHER_WAXING_MOON,
WEATHER_FULL_MOON
};
// base monster number for various types of summoned monsters
#define BASE_ELEMENTAL 801
#define BASE_UNDEAD 550
#define SLOWTICK
#define COMMANDMAX 6
// Monster and object files sizes (in terms of monsters or objects)
#define MFILESIZE 100
#define OFILESIZE 100
// memory limits
#define RMAX 20000 // Max number of these allowed to be created
#define MMAX 20000
#define OMAX 20000
#define PMAX 1024
#define RQMAX 600 // Max number of these allowed in memory
#define MQMAX 200 // at any one time
#define OQMAX 200
// make sure these stay updated with calendar.xml!
enum Season {
NO_SEASON = 0,
SPRING = 1,
SUMMER = 2,
AUTUMN = 3,
WINTER = 4
};
// for bit flags, take (season-1)^2
// spring flag (1) = overflowing river
// summer flag (2) = ?
// autumn flag (4) = ?
// winter flag (8) = cold damage, no herbs
#define BROADLOG 1
#define MAX_MULTICLASS 8
// how often (in seconds) players get saved
#define SAVEINTERVAL 1200
#define MAXTIMEOUT 14400
#define MAXPAWN 25000
#define MAX_QUEST 128
#define MAX_FACTION 32
#define MAX_DUELS 10
#define MAX_BUILDER_RANGE 10
// Save flags
#define PERMONLY 1
#define ALLITEMS 0
// Command status returns
#define DISCONNECT 1
#define PROMPT 2
#define DOPROMPT 3
#define WIELDOBJ 1
#define SECONDOBJ 2
#define HOLDOBJ 3
#define SHIELDOBJ 4
// NPC Trades
#define NOTRADE 0
#define SMITHY 1
#define BANKER 2
#define ARMOROR 3
#define WEAPONSMITH 4
#define MERCHANT 5
#define TRAINING_PERM 6
#define MOBTRADE_COUNT 7
// Monetary transaction types
#define BUY 0
#define SELL 1
// Creature stats
#define STR 1
#define DEX 2
#define CON 3
#define INT 4
#define PTY 5
#define CHA 6
#define MAX_STAT PTY
#define MAX_STAT_NUM MAXALVL*10
// Saving throw types
#define LCK 0 // Luck
#define POI 1 // Poison
#define DEA 2 // Death
#define BRE 3 // Breath Weapons
#define MEN 4 // Mental
#define SPL 5 // Spells
#define MAX_SAVE 6
#define MAX_SAVE_COLOR 11
// Religions
#define ATHEIST 0
#define ARAMON 1
#define CERIS 2
#define ENOCH 3
#define GRADIUS 4
#define ARES 5
#define KAMIRA 6
#define LINOTHAN 7
#define ARACHNUS 8
#define MARA 9
#define JAKAR 10
#define DEITY_COUNT MARA+1
// Alignments
#define BLOODRED -3
#define REDDISH -2
#define PINKISH -1
#define NEUTRAL 0
#define LIGHTBLUE 1
#define BLUISH 2
#define ROYALBLUE 3
// Attack types
#define PHYSICAL 1
#define MAGICAL 2
#define MENTAL 3
#define NEGATIVE_ENERGY 4
#define ABILITY 5
#define MAGICAL_NEGATIVE 6
// Modifier List
#define MSTR 0
#define MDEX 1
#define MCON 2
#define MINT 3
#define MPIE 4
#define MCHA 5
#define MHP 6
#define MMP 7
#define MLCK 8
#define MPOI 9
#define MDEA 10
#define MBRE 11
#define MMEN 12
#define MSPL 13
#define MARMOR 14
#define MTHAC 15
#define MDMG 16
#define MSPLDMG 17
#define MABSORB 18
#define MALIGN 19
#define MAX_MOD 20 // change when add more - up to 30
// Language Defines
#define LUNKNOWN 0
#define LDWARVEN 1
#define LELVEN 2
#define LHALFLING 3
#define LCOMMON 4
#define LORCISH 5
#define LGIANTKIN 6
#define LGNOMISH 7
#define LTROLL 8
#define LOGRISH 9
#define LDARKELVEN 10
#define LGOBLINOID 11
#define LMINOTAUR 12
#define LCELESTIAL 13
#define LKOBOLD 14
#define LINFERNAL 15
#define LBARBARIAN 16
#define LKATARAN 17
#define LDRUIDIC 18
#define LWOLFEN 19
#define LTHIEFCANT 20
#define LARCANIC 21
#define LABYSSAL 22
#define LTIEFLING 23
#define LANGUAGE_COUNT 24
//// Object Material Types
//#define CLOTH 0
//#define GLASS 1
//#define LEATHER 2
//#define IRON 3
//#define PAPER 4
//#define STONE 5
//#define WOOD 6
//#define LIQUID 7
//#define VOLATILE 8
//#define BONE 9
//#define GEMS 10
//#define DIAMOND 11
//#define JEWELS 12
//#define STEEL 13
//#define MALLEABLE 14
//#define MITHRIL 15
//#define ADAMANTIUM 16
//#define SCALE 17
//#define DRAGONSCALE 18
// Character classes
#define ASSASSIN 1
#define BERSERKER 2
#define CLERIC 3
#define FIGHTER 4
#define MAGE 5
#define PALADIN 6
#define RANGER 7
#define THIEF 8
#define VAMPIRE 9
#define MONK 10
#define DEATHKNIGHT 11
#define DRUID 12
#define LICH 13
#define WEREWOLF 14
#define BARD 15
#define ROGUE 16
#define BUILDER 17
//#define CREATOR 18
#define CARETAKER 19
#define DUNGEONMASTER 20
// start of the staff
#define STAFF (BUILDER)
#define MULTI_BASE (BUILDER)
#define CLASS_COUNT (DUNGEONMASTER + 1)
#define CLASS_COUNT_MULT (MULTI_BASE + 7)
// races
#define UNKNOWN 0
// playable races
#define DWARF 1
#define ELF 2
#define HALFELF 3
#define HALFLING 4
#define HUMAN 5
#define ORC 6
#define HALFGIANT 7
#define GNOME 8
#define TROLL 9
#define HALFORC 10
#define OGRE 11
#define DARKELF 12
#define GOBLIN 13
#define MINOTAUR 14
#define SERAPH 15
#define KOBOLD 16
#define CAMBION 17
#define BARBARIAN 18
#define KATARAN 19
#define TIEFLING 20
#define MAX_PLAYABLE_RACE TIEFLING + 1
// non-playable
#define LIZARDMAN 21
#define CENTAUR 22
// subraces, currently non-playable
#define HALFFROSTGIANT 23
#define HALFFIREGIANT 24
#define GREYELF 25
#define WILDELF 26
#define AQUATICELF 27
#define DUERGAR 28
#define HILLDWARF 29
// non-playable
#define GNOLL 30
#define BUGBEAR 31
#define HOBGOBLIN 32
#define WEMIC 33
#define HYBSIL 34
#define RAKSHASA 35
#define BROWNIE 36
#define FIRBOLG 37
#define SATYR 38
#define RACE_COUNT SATYR + 1
// Actual value doesn't matter, just needs to be different than PLAYER & MONSTER
#define OBJECT 2
// Proficiencies
//#define SHARP 0
//#define THRUST 1
//#define BLUNT 2
//#define POLE 3
//#define MISSILE 4
//#define CLEAVE 5
// Item is a herb! Subtype if needed in subtype
#define HERB 4
#define WEAPON 5
// object types
#define ARMOR 6
#define POTION 7
#define SCROLL 8
#define WAND 9
#define CONTAINER 10
#define MONEY 11
#define KEY 12
#define LIGHTSOURCE 13
#define MISC 14
#define SONGSCROLL 15
#define POISON 16
#define BANDAGE 17
#define AMMO 18
#define QUIVER 19
#define LOTTERYTICKET 20
#define MAX_OBJ_TYPE 21
#define DEFAULT_WEAPON_DELAY 30 // 3 seconds
// Spell Realms
#define CONJUREMAGE 7
#define CONJUREBARD 8
#define CONJUREANIM 9
// Daily use variables
#define DL_BROAD 0 // Daily broadcasts
#define DL_ENCHA 1 // Daily enchants
#define DL_FHEAL 2 // Daily heals
#define DL_TRACK 3 // Daily track spells
#define DL_DEFEC 4 // Daily defecations
#define DL_RCHRG 5 // Daily wand recharges
#define DL_TELEP 6 // Daily tports
#define DL_BROAE 7 // Daily broademotes
#define DL_ETRVL 8 // Daily ethereal travels
#define DL_HANDS 9 // Daily Lay on Hands
#define DL_RESURRECT 10 // Daily resurrections
#define DL_SCARES 11 // Daily scare casts
#define DL_SILENCE 12
#define DL_HARM 13 // Daily harm casts
#define DAILYLAST 13
// Object Last-time stuff
#define LT_ENCHA 0
#define LT_ENVEN 1
#define DONT_USE 2
// Last-time specifications
#define OLD_LT_INVISIBILITY 0
#define OLD_LT_PROTECTION 1
#define OLD_LT_BLESS 2
#define OLD_LT_INFRAVISION 13
#define OLD_LT_DETECT_INVIS 17
#define OLD_LT_DETECT_MAGIC 18
#define OLD_LT_LEVITATE 21
#define OLD_LT_HEAT_PROTECTION 23
#define OLD_LT_FLY 24
#define OLD_LT_RESIST_MAGIC 25
#define OLD_LT_KNOW_AURA 27
#define OLD_LT_RESIST_COLD 29
#define OLD_LT_BREATHE_WATER 30
#define OLD_LT_EARTH_SHIELD 31
#define OLD_LT_RESIST_WATER 52
#define OLD_LT_RESIST_FIRE 53
#define OLD_LT_RESIST_AIR 54
#define OLD_LT_RESIST_EARTH 55
#define OLD_LT_REFLECT_MAGIC 56
#define OLD_LT_TRUE_SIGHT 60
#define OLD_LT_CAMOUFLAGE 61
#define OLD_LT_DRAIN_SHIELD 63
#define OLD_LT_UNDEAD_WARD 65
#define OLD_LT_RESIST_ELEC 66
#define OLD_LT_WARMTH 67
#define OLD_LT_HASTE 71
#define OLD_LT_SLOW 72
#define OLD_LT_STRENGTH 78
#define OLD_LT_ENFEEBLEMENT 79
#define OLD_LT_DARKNESS 88
#define OLD_LT_TONGUES 90
#define OLD_LT_INSIGHT 93
#define OLD_LT_FEEBLEMIND 94
#define OLD_LT_PRAYER 95
#define OLD_LT_DAMNATION 96
#define OLD_LT_FORTITUDE 97
#define OLD_LT_WEAKNESS 98
#define OLD_LT_PASS_WITHOUT_TRACE 99
#define OLD_LT_COMPREHEND_LANGUAGES 74
#define OLD_LT_FARSIGHT 102
#define OLD_LT_HOLD_PERSON 75
#define OLD_LT_CONFUSED 80
#define OLD_LT_TEMP_BLIND 45 // Was LT_CHARM which wasn't being used.
#define OLD_LT_SILENCE 34
#define OLD_LT_ARMOR 39
#define OLD_LT_ATTACK 3
// free 0
// free 1
// free 2
#define LT_AGGRO_ACTION 3
#define LT_TRACK 4
#define LT_MON_SCAVANGE 4
#define LT_STEAL 5
#define LT_PICKLOCK 6
#define LT_MON_WANDER 6
#define LT_SEARCH 7
#define LT_TICK 8 // Hp/Poison ticking timer
#define LT_SPELL 9
#define LT_PEEK 10
#define LT_SNEAK 11
#define LT_READ_SCROLL 12
// free 13
#define LT_HIDE 14
#define LT_TURN 15
#define LT_FRENZY 16
// free 17
// free 18
#define LT_PRAY 19
#define LT_PREPARE 20
// free 21
#define LT_PLAYER_SAVE 22
// free 23
// free 24
// free 25
#define LT_MOVED 26
// free 27
#define LT_AGE 28
// free 29
// free 30
// free 31
// free 33
#define LT_SING 35
#define LT_CHARMED 36
#define LT_MEDITATE 37
#define LT_TOUCH_OF_DEATH 38
// free 38
#define LT_BLOOD_SACRIFICE 40
#define LT_MOB_THIEF 41
#define LT_INVOKE 42
#define LT_SCOUT 43
#define LT_BERSERK 44
#define LT_REGENERATE 46
#define LT_DRAIN_LIFE 47
#define LT_HYPNOTIZE 48
#define LT_PLAYER_BITE 49
#define LT_FREE_ACTION 50
#define LT_PLAYER_SEND 51
// free 52
// free 53
// free 54
// free 55
// free 56
#define LT_IDENTIFY 57
#define LT_FOCUS 58
#define LT_PLAYER_STUNNED 59
// free 60
// free 61
#define LT_RP_AWARDED 62
// free 63
#define LT_UNCONSCIOUS 64
// free 65
// free 66
// free 67
// free 68
#define LT_MOB_JAILED 69
#define LT_LAY_HANDS 70
// free 71
// free 72
#define LT_NO_PKILL 73
#define LT_MOB_RENOUNCE 74
#define LT_SAVES 76
#define LT_NO_BROADCAST 77
// free 78
// free 79
// free 80
#define LT_NOMPTICK 81
#define LT_NOHPTICK 82
// free 83
#define LT_KILL_DOCTOR 84
// free 85
#define LT_LEVEL_DRAIN 86
#define LT_HOWLS 87
// free 88
#define LT_SKILL_INCREASE 89
// free 90
#define LT_ENLARGE_REDUCE 91
#define LT_ANCHOR 92
// free 93
// free 94
// free 95
// free 96
// free 97
// free 98
// free 99
#define LT_TICK_SECONDARY 100 // Mp/Focus ticking
#define LT_TICK_HARMFUL 101 // Poison/Pharm etc
#define MAX_LT 103 // Incriment when you add any new LTs.
#define LT_JAILED 127 // Higher than max LT so it "ticks" when player is offline.
#define LT_MOBDEATH 126 // Ticks down offline
// Max possible LT is 126 currently. LT 127 is used for *jail - TC
#define TOTAL_LTS 127
#define LT_MOB_PASV_GUARD LT_UNCONSCIOUS // Mobs use LT_UNCONSCIOUS cuz they don't need it anywhere else
#define LT_RENOUNCE LT_TOUCH_OF_DEATH
#define LT_HOLYWORD LT_FOCUS
#define LT_SMOTHER LT_FOCUS
// BUG: Animate & tail slap both use LT_FOCUS -> high level animate tail slaps
#define LT_ANIMATE LT_FOCUS
#define LT_MOB_BASH LT_IDENTIFY
#define LT_RIPOSTE LT_MON_SCAVANGE
#define LT_DISARM LT_FOCUS
#define LT_TAIL_SLAP LT_FOCUS // Mobs use LT_FOCUS on tail slap since they don't ever use focus.
#define LT_DEATH_SCREAM LT_BERSERK // Mobs use LT_BERSERK for death scream since they don't ever berserk.
#define LT_OUTLAW LT_MOB_THIEF
#define LT_KICK LT_IDENTIFY // No one that kicks also identifies.
#define LT_MAUL LT_IDENTIFY // No one that mauls also identifies
#define LT_MIST LT_MOB_THIEF
#define LT_BARKSKIN LT_FOCUS
#define LT_PETRIFYING_GAZE LT_MOB_JAILED
#define LT_MISTBANE LT_FOCUS
#define LT_MOB_BREATH LT_HYPNOTIZE
#define LT_MOB_TRAMPLE LT_ARMOR
#define LT_ENDURANCE LT_FREE_ACTION
#define LT_M_AURA_ATTACK LT_NO_PKILL
#define OLD_LT_STONESKIN LT_MON_WANDER
// Maximum number of items that can be worn/readied
#define MAXWEAR 20
// Wear locations
#define BODY 1
#define ARMS 2
#define LEGS 3
#define NECK 4
#define BELT 5
#define HANDS 6
#define HEAD 7
#define FEET 8
#define FINGER 9
#define FINGER1 9
#define FINGER2 10
#define FINGER3 11
#define FINGER4 12
#define FINGER5 13
#define FINGER6 14
#define FINGER7 15
#define FINGER8 16
#define HELD 17
#define SHIELD 18
#define FACE 19
#define WIELD 20
// Song flags
#define SONG_HEAL 0 // Healing
#define SONG_MP 1 // Magic-Restoration
#define SONG_RESTORE 2 // Restoration
#define SONG_DESTRUCTION 3 // Destruction
#define SONG_MASS_DESTRUCTION 4 // Mass Destruction
#define SONG_BLESS 5 // Room-Bless
#define SONG_PROTECTION 6 // Room-Protection
#define SONG_FLIGHT 7 // Song of Flight
#define SONG_RECALL 8 // Song of Recall
#define SONG_SAFETY 9 // Song of Safety
//#define MAXSONG 10
#define MAX_AURAS 6 // Max mob aura attacks
//Trap types
#define TRAP_PIT 1 // Pit trap
#define TRAP_DART 2 // Poison dart trap
#define TRAP_BLOCK 3 // Falling block
#define TRAP_MPDAM 4 // Mp damaging trap
#define TRAP_RMSPL 5 // Spell loss trap
#define TRAP_NAKED 6 // player loses all items
#define TRAP_ALARM 7 // monster alarm trap
#define TRAP_TPORT 8 // Teleport trap
#define TRAP_ARROW 9 // Arrow trap
#define TRAP_SPIKED_PIT 10 // Spiked pit trap
#define TRAP_WORD 11 // Word of recall trap
#define TRAP_FIRE 12 // Fire trap
#define TRAP_FROST 13 // Frost trap
#define TRAP_ELEC 14 // Electricity Trap
#define TRAP_ACID 15 // Acid Trap
#define TRAP_ROCKS 16 // Rockslide trap
#define TRAP_ICE 17 // Falling icicle trap
#define TRAP_SPEAR 18 // Spear trap
#define TRAP_CROSSBOW 19 // Crossbow trap
#define TRAP_GASP 20 // Poison gas trap
#define TRAP_GASB 21 // Blinding gas trap
#define TRAP_GASS 22 // Stun gas trap
#define TRAP_DISP 23 // Displacement trap
#define TRAP_FALL 24 // Deadly fall trap
#define TRAP_CHUTE 25 // Chute trap
#define TRAP_MUD 26 // Stuck in mud trap
#define TRAP_BONEAV 27 // Boneslide trap
#define TRAP_PIERCER 28 // Piercer trap
#define TRAP_ETHEREAL_TRAVEL 29 // Ethereal travel trap
#define TRAP_WEB 30 // sticky spider web trap
// Spell casting types
#define CAST 0
#define SKILL 1 // Druid summon-elemental
enum DeathType {
DT_NONE,
// Death types
FALL,
POISON_MONSTER,
POISON_GENERAL,
DISEASE,
SMOTHER,
FROZE,
BURNED,
DROWNED,
DRAINED,
ZAPPED,
SHOCKED,
WOUNDED,
CREEPING_DOOM,
SUNLIGHT,
// Trap death types
PIT,
BLOCK,
DART,
ARROW,
SPIKED_PIT,
FIRE_TRAP,
FROST,
ELECTRICITY,
ACID,
ROCKS,
ICICLE_TRAP,
SPEAR,
CROSSBOW_TRAP,
VINES,
COLDWATER,
EXPLODED,
BOLTS,
SPLAT,
POISON_PLAYER,
BONES,
EXPLOSION,
PETRIFIED,
LIGHTNING,
WINDBATTERED,
PIERCER,
ELVEN_ARCHERS,
DEADLY_MOSS,
THORNS
};
#include "flags.h"
// Weather
#define WSUNNY 1 // Sunny outside
#define WWINDY 2 // Rainy outside
#define WSTORM 3 // Storm
#define WMOONF 4 // Full Moon
// specials
#define SP_MAPSC 1 // Map or scroll
#define SP_COMBO 2 // Combination lock
#define MAX_SP 3
#define RETURN(a,b,c) Ply[a].io->fn = b; Ply[a].io->fnparam = c; return
#define BOOL(a) ((a) ? 1 : 0)
// Minimum and maximum values a `signed int' can hold.
#ifndef __INT_MAX__
#define __INT_MAX__ 2147483647
#endif
#undef INT_MIN
#define INT_MIN (-INT_MAX-1)
#undef INT_MAX
#define INT_MAX __INT_MAX__
// Maximum value an `unsigned int' can hold. (Minimum is 0).
#undef UINT_MAX
#define UINT_MAX (INT_MAX * 2U + 1)
#ifndef MAXINT
#define MAXINT INT_MAX
#endif //MAXINT
// if ltime is 0, assume uninitialized and return MAXINT. This is so monsters
// can have spell flags set and have them be permanent.
#define LT(a,b) ((a)->lasttime[(b)].ltime ? (a)->lasttime[(b)].ltime + (a)->lasttime[(b)].interval : MAXINT)
//#define WISDOM(a) ((bonus((int)(a)->intelligence.getCur())+bonus[(int)(a)->piety.getCur()])/2)
//#define AWARENESS(a) ((bonus((int)(a)->intelligence.getCur())+bonus[(int)(a)->dexterity.getCur()])/2)
#define mrand(a,b) ((a)+(rand()%((b)*10-(a)*10+10))/10)
#define MIN(a,b) (((a)<(b)) ? (a):(b))
#define MAX(a,b) (((a)>(b)) ? (a):(b))
#define PLYCRT(p) ((p)->isPlayer() ? "Player" : "Monster")
#define AC(p) ((int)((p)->getArmor()) / 10)
#define BIT0 (1<<0)
#define BIT1 (1<<1)
#define BIT2 (1<<2)
#define BIT3 (1<<3)
#define BIT4 (1<<4)
#define BIT5 (1<<5)
#define BIT6 (1<<6)
#define BIT7 (1<<7)
#define BIT8 (1<<8)
#define BIT9 (1<<9)
#define BIT10 (1<<10)
#define BIT11 (1<<11)
#define BIT12 (1<<12)
enum Color {
NOCOLOR = 0,
BLACK = BIT0,
RED = BIT1,
GREEN = BIT2,
YELLOW = BIT3,
BLUE = BIT4,
MAGENTA = BIT5,
CYAN = BIT6,
WHITE = BIT7,
BOLD = BIT8,
NORMAL = BIT9,
BLINK = BIT10,
UNDERLINE = BIT11,
MAX_COLOR
};
enum AttackResultFlags {
NO_FLAG = 0,
NO_DODGE = BIT0,
NO_PARRY = BIT1,
NO_BLOCK = BIT2,
NO_CRITICAL = BIT3,
NO_FUMBLE = BIT4,
NO_GLANCING = BIT5,
DOUBLE_MISS = BIT6,
USE_LEVEL = BIT7,
MAX_ATTACK_FLAG
};
// findTarget search places
#define FIND_OBJ_EQUIPMENT BIT0
#define FIND_OBJ_INVENTORY BIT1
#define FIND_OBJ_ROOM BIT2
#define FIND_MON_ROOM BIT3
#define FIND_PLY_ROOM BIT4
// obj_str and crt_str flags
#define CAP BIT0
#define INV BIT1
#define MAG BIT2
#define ISDM BIT3
#define MIST BIT4
#define ISBD BIT5
#define ISCT BIT6
#define NONUM BIT7
#define USEANSI BIT8
#define USEMIRC BIT9
#define COLOR_BLACK 0
#define COLOR_RED 1
#define COLOR_GREEN 2
#define COLOR_YELLOW 3
#define COLOR_BLUE 4
#define COLOR_MAGENTA 5
#define COLOR_CYAN 6
#define COLOR_WHITE 7
#define COLOR_BOLD 8
#define COLOR_NORMAL 9
#define COLOR_BLINK 10
//#define BOLD 8
//#define NORMAL 9
//#define BLINK 10
//#define UNDERLINE 11
//*********************************************************************
// Below this line are customizable options for the mud
//*********************************************************************
#define MINSHOPLEVEL 16
#define SURNAME_LEVEL 13
#define ALIGNMENT_LEVEL 6
#define SUNRISE 6
#define SUNSET 20
#define ROOM_BOUND_FAILURE 2 // room to go to if getBound fails
// Builders can always edit rooms within these ranges.
// *t for builders takes you to ROOM_BUILDER_PERM_LOW.
/* Web Editor
* _ _ ____ _______ ______
* | \ | |/ __ \__ __| ____|
* | \| | | | | | | | |__
* | . ` | | | | | | | __|
* | |\ | |__| | | | | |____
* |_| \_|\____/ |_| |______|
*
* If you change anything here, make sure the changes are reflected in the web
* editor! Either edit the PHP yourself or tell Dominus to make the changes.
*/
#define ROOM_BUILDER_PERM_LOW 60
#define ROOM_BUILDER_PERM_HIGH 65
#define MAX_DIMEN_ANCHORS 3
// toll to charge in case none is set on exit
#define DEFAULT_TOLL 100
#define MAX_MOBS_IN_ROOM 200
// For various effects that create objects
#define SHIT_OBJ 349
#define CORPSE_OBJ 800
#define BODYPART_OBJ 21
#define STATUE_OBJ 39
#define MONEY_OBJ 0
#define TICKET_OBJ 200
// When a player forces a pet to cast, this is the delay.
#define PET_CAST_DELAY 4
//
//// If a player dies X times in X hours, they don't lose exp for that death.
//// LUCKY_DEATHS should be defined as x - 1: if they get a free restore after
//// 3 deaths in 24 hours, enter 2. Set LUCKY_DEATH_HOURS to 0 to disable
//// lucky dying.
//#define LUCKY_DEATHS 2
//#define LUCKY_DEATH_HOURS 24
// Enums for effects
// Where is this effect being applied from?
enum ApplyFrom {
FROM_NOWHERE,
FROM_CREATURE,
FROM_MONSTER,
FROM_PLAYER,
FROM_OBJECT,
FROM_POTION,
FROM_WAND,
FROM_ROOM,
MAX_FROM
};
// Actions to be taken by the effect function
enum EffectAction {
NO_ACTION,
EFFECT_COMPUTE, // Compute strength, duration, etc -- DO THIS BEFORE ADDING!!!!
EFFECT_APPLY, // Apply any bonuses
EFFECT_UNAPPLY, // Unapply any bonuses
EFFECT_PULSE,
MAX_ACTION
};
enum Realm {
NO_REALM = 0,
MIN_REALM = 1,
EARTH = 1,
WIND = 2,
FIRE = 3,
WATER = 4,
ELEC = 5,
COLD = 6,
MAX_REALM
};
enum PropType {
PROP_NONE = 0,
PROP_STORAGE = 1,
PROP_SHOP = 2,
PROP_GUILDHALL = 3,
PROP_HOUSE = 4,
PROP_END = 5
};
enum UnequipAction {
UNEQUIP_ADD_TO_INVENTORY,
UNEQUIP_DELETE,
UNEQUIP_NOTHING
};
enum CastResult {
CAST_RESULT_FAILURE, // failure, unlikely it will succeed
CAST_RESULT_CURRENT_FAILURE, // failure, it may succeed in the future
CAST_RESULT_SPELL_FAILURE, // failure, the spell didn't work
CAST_RESULT_SUCCESS
};
// C includes
#ifndef PYTHON_CODE_GEN
#include <fcntl.h>
#endif
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
// C++ Includes
#include <list>
#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH
// Mud Includes
#include "os.h"
#include "mudobject.h"
#include "structs.h"
#include "xml.h"
#include "size.h"
#include "socket.h"
#include "stats.h"
#include "rooms.h"
#include "objects.h"
#include "skills.h"
#include "creatures.h"
//#include "bans.h"
//#include "guilds.h"
//#include "factions.h"
#include "data.h"
#include "server.h"
#include "config.h"
#include "mextern.h"
//#include <stdlib.h>
//#include <string.h>
//#include <limits.h>
//#include <time.h>
//#include <sys/time.h>
//#include <sys/io.h>
#endif