roh/conf/area/
roh/game/talk/
roh/help/
roh/monsters/ocean/
roh/objects/ocean/
roh/player/
roh/rooms/area/1/
roh/rooms/misc/
roh/rooms/ocean/
roh/src-2.44b/
/*
 * 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