SmaugWizard/Backup/
SmaugWizard/Backup/L/
SmaugWizard/Boards/
SmaugWizard/Building/
SmaugWizard/Corpses/
SmaugWizard/Councils/
SmaugWizard/Deity/
SmaugWizard/Gods/
SmaugWizard/MudProgs/
SmaugWizard/Player/L/
SmaugWizard/Src/
SmaugWizard/Src/res/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |				*
 * -----------------------------------------------------------|   \\._.//	*
 * SmaugWiz (C) 1998 by Russ Pillsbury (Windows NT version)   |   (0...0)	*
 * -----------------------------------------------------------|    ).:.(	*
 * SMAUG (C) 1994, 1995, 1996 by Derek Snider                 |    {o o}	*
 * -----------------------------------------------------------|   / ' ' \	*
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |~'~.VxvxV.~'~*
 * Scryn, Swordbearer, Rennard, Tricops, and Gorog.           |				*
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, and Katja Nyboe.    *
 * ------------------------------------------------------------------------ *
 *			    Smaug Exits Interface file									*
 ***************************************************************************/

#ifndef EXITS_H
#define	EXITS_H

// Exit flags.
// Used in #ROOMS.
enum ExitTypes {
	EX_ISDOOR, EX_CLOSED, EX_LOCKED, EX_SECRET, EX_SWIM, EX_PICKPROOF,
	EX_FLY, EX_CLIMB, EX_DIG, EX_RES1, EX_NOPASSDOOR, EX_HIDDEN, EX_PASSAGE,
	EX_PORTAL, EX_RES2, EX_RES3, EX_xCLIMB, EX_xENTER, EX_xLEAVE, EX_xAUTO,
	EX_RES4, EX_xSEARCHABLE, EX_BASHED, EX_BASHPROOF, EX_NOMOB, EX_WINDOW,
	EX_xLOOK, EX_DISABLE, EX_MAX };

#ifdef SMAUGSERVER_CPP
const char*		ExitTypeNames [EX_MAX] = { 
	"isdoor", "closed", "locked", "secret", "swim", "pickproof", "fly",
	"climb", "dig", "r1", "nopassdoor", "hidden", "passage", "portal",
	"r2", "r3", "can_climb", "can_enter", "can_leave", "auto", "r4",
	"searchable", "bashed", "bashproof", "nomob", "window", "can_look"
	"disabled" };
#endif

extern const char*	ExitTypeNames [EX_MAX];



// Exit data.
class CExitData {
public:
				CExitData () { ZeroMemory (this, sizeof (CExitData)); }
	CExitData	*GetNext () { return m_pNext; }
	void		SetNext (CExitData* n) { m_pNext = n; }
	CExitData	*GetPrev () { return m_pPrev; }
	void		SetPrev (CExitData* n) { m_pPrev = n; }

	CIntVector *GetFlags () { return &m_Flags; }
	void	SetFlags (int v) { m_Flags = v; }
	BOOL	IsSet (int b) { return m_Flags.IsSet (b); }
	void	SetBit (int b) { m_Flags.SetBit (b); }
	void	ClrBit (int b) { m_Flags.ClrBit (b); }
	void	Toggle (int b) { m_Flags.ToggleBit (b); }
	CString	PrintFlagVector () { return m_Flags.PrintVector (); }
	BOOL	IsDisabled () { return m_Flags.IsSet (EX_DISABLE); }
	void	SetDisabled () { m_Flags.SetBit (EX_DISABLE); }
	void	ClrDisabled () { m_Flags.ClrBit (EX_DISABLE); }
	BOOL	IsClosed () { return m_Flags.IsSet (EX_CLOSED); }
	void	SetClosed () { m_Flags.SetBit (EX_CLOSED); }
	void	ClrClosed () { m_Flags.ClrBit (EX_CLOSED); }
	BOOL	IsWindow () { return m_Flags.IsSet (EX_WINDOW); }
	void	SetWindow () { m_Flags.SetBit (EX_WINDOW); }
	BOOL	IsDoor () { return m_Flags.IsSet (EX_ISDOOR); }
	void	SetDoor () { m_Flags.SetBit (EX_ISDOOR); }
	BOOL	IsPortal () { return m_Flags.IsSet (EX_PORTAL); }
	void	SetPortal () { m_Flags.SetBit (EX_PORTAL); }
	BOOL	IsNoMob () { return m_Flags.IsSet (EX_NOMOB); }
	void	SetNoMob () { m_Flags.SetBit (EX_NOMOB); }
	BOOL	IsNoPass () { return m_Flags.IsSet (EX_NOPASSDOOR); }
	void	SetNoPass () { m_Flags.SetBit (EX_NOPASSDOOR); }
	BOOL	IsSecret () { return m_Flags.IsSet (EX_SECRET); }
	void	SetSecret () { m_Flags.SetBit (EX_SECRET); }
	void	ClrSecret () { m_Flags.ClrBit (EX_SECRET); }
	BOOL	IsDig () { return m_Flags.IsSet (EX_DIG); }
	void	SetDig () { m_Flags.SetBit (EX_DIG); }
	BOOL	IsFly () { return m_Flags.IsSet (EX_FLY); }
	void	SetFly () { m_Flags.SetBit (EX_FLY); }
	BOOL	IsClimb () { return m_Flags.IsSet (EX_CLIMB); }
	void	SetClimb () { m_Flags.SetBit (EX_CLIMB); }
	BOOL	IsLocked () { return m_Flags.IsSet (EX_LOCKED); }
	void	SetLocked () { m_Flags.SetBit (EX_LOCKED); }
	void	ClrLocked () { m_Flags.ClrBit (EX_LOCKED); }
	BOOL	IsBashProof () { return m_Flags.IsSet (EX_BASHPROOF); }
	void	SetBashProof () { m_Flags.SetBit (EX_BASHPROOF); }
	BOOL	IsBashed () { return m_Flags.IsSet (EX_BASHED); }
	void	SetBashed () { m_Flags.SetBit (EX_BASHED); }
	void	ClrBashed () { m_Flags.ClrBit (EX_BASHED); }
	BOOL	IsHidden () { return m_Flags.IsSet (EX_HIDDEN); }
	void	SetHidden () { m_Flags.SetBit (EX_HIDDEN); }
	BOOL	IsPickProof () { return m_Flags.IsSet (EX_PICKPROOF); }
	void	SetPickProof () { m_Flags.SetBit (EX_PICKPROOF); }
	BOOL	IsPassage () { return m_Flags.IsSet (EX_PASSAGE); }
	void	SetPassage () { m_Flags.SetBit (EX_PASSAGE); }

	BOOL	CanClimb () { return m_Flags.IsSet (EX_xCLIMB); }
	void	SetCanClimb () { m_Flags.SetBit (EX_xCLIMB); }
	BOOL	CanEnter () { return m_Flags.IsSet (EX_xENTER); }
	void	SetCanEnter () { m_Flags.SetBit (EX_xENTER); }
	BOOL	CanLeave () { return m_Flags.IsSet (EX_xLEAVE); }
	void	SetCanLeave () { m_Flags.SetBit (EX_xLEAVE); }
	BOOL	CanLook () { return m_Flags.IsSet (EX_xLOOK); }
	void	SetCanLook () { m_Flags.SetBit (EX_xLOOK); }
	BOOL	CanAuto () { return m_Flags.IsSet (EX_xAUTO); }
	void	SetCanAuto () { m_Flags.SetBit (EX_xAUTO); }
	BOOL	CanSearch () { return m_Flags.IsSet (EX_xSEARCHABLE); }
	void	SetCanSearch () { m_Flags.SetBit (EX_xSEARCHABLE); }

	CRoomIndexData	*GetToRoom () { return m_pToRoom; }
	void	SetToRoom (CRoomIndexData* r) { m_pToRoom = r; }

private:
	CExitData	*m_pNext;		// previous exit in linked list
	CExitData	*m_pPrev;		// next exit in linked list
	CIntVector	m_Flags;		// door states & other flags
	CRoomIndexData	*m_pToRoom;	// Pointer to destination room

public:
	CExitData	*rexit;			// Reverse exit pointer
	char		*keyword;		// Keywords for exit or door
	char		*description;	// Description of exit
	int			vnum;			// Vnum of room exit leads to
	int			rvnum;			// Vnum of room in opposite dir
	int			key;			// Key vnum
	short		vdir;			// Physical "direction"
	short		distance;		// how far to the next room
	short		pull;			// pull of direction (current)
	short		pulltype;		// type of pull (current, wind)
};

#endif