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.    *
 * ------------------------------------------------------------------------ *
 *			    SmaugWiz Player Menu Implementation file					*
 ****************************************************************************/

#include	"stdafx.h"

#define		PLAYERMENU_CPP

#include	"smaug.h"
#include	"SysData.h"
#include	"mobiles.h"
#include	"affect.h"
#include	"objects.h"
#include	"rooms.h"
#include	"SmaugWizDoc.h"
#include	"smaugfiles.h"
#include	"playermenu.h"
#include	"descriptor.h"
#include	"character.h"

CMenuData	*PlrMenuData [];


CPlayerMenu::CPlayerMenu ()
{
	m_Vnum = 0;						// no vnum for pc's
	m_bProto = FALSE;

extern void ClearAddrRange (void* start, void* end, UINT SizEnd);
	ClearAddrRange (&ma_Level, &mb_IceShield, sizeof (mb_IceShield));
}


void CPlayerMenu::Display (CCharacter& Ch, int page)
{
	m_HelpMenu = DIM (PlrMenus) - 1;
	m_PageNr = page;

	if (m_PageNr < 0 || m_PageNr > m_HelpMenu) then m_PageNr = m_HelpMenu;

	m_CurrPageLines = GetLineCount (PlrMenus [m_PageNr]);
	m_pPageData = PlrMenuData [m_PageNr];
	m_nDataItems = m_pPageData ? GetItemCount (m_pPageData) : 0;

	// clear page & home cursor
	Ch.GetDesc ()->WriteToBuffer ("\x1b[2J");

	// print the menu page
	Ch.GetDesc ()->WriteToBuffer (PlrMenus [m_PageNr]);

	// fill in fields
	DisplayData (Ch);
}


void CPlayerMenu::DisplayData (CCharacter& Ch)
{
	// Write in the object name
	Ch.SendTextf ("\x1b[1;35H[%5u:%-10.10s]-----[%c]", m_Vnum, NCCP ma_Name,
		m_bProto ? 'P' : 'N');

	m_Base [0] = (char*) this;
	m_Base [1] = NULL;

	CSmaugMenu::DisplayData (Ch);
}


BOOL CPlayerMenu::Edit (CCharacter& Ch, char* argument, const char* command)
{
	if (command [0] == '-') {
		Display (Ch, argument [0]);
		return TRUE;
	}
	if (argument [0] == '-') return FALSE;

	m_Base [0] = (char*) this;
	m_Base [1] = NULL;

	return CSmaugMenu::Edit (Ch, argument, command);
}


void CPlayerMenu::Save (CCharacter& Ch)
{
}


BOOL CPlayerMenu::Load (CCharacter& Ch, const char* name)
{
	char		buf [MAX_INPUT_LENGTH];
	FILE		*fp;
	char		*pLine;

	CString	Fname = FileTable.PlayerName (capitalize (name));

	if (! FileTable.Exists (Fname)) {
		CString	Bname = FileTable.BackupPlayerName (capitalize (name));
		if (FileTable.Exists (Bname)) {
			Ch.SendText ("Loading from backup player file...");
			Fname = Bname;
		}
		else return FALSE;
	}
		
	if ((fp = fopen (Fname, "r")) == NULL)
		return FALSE;

	sprintf (buf, "%s::PMENU:Loading player data for: %s",
		Ch.GetName (), name);
	gpDoc->LogString (buf, LOG_COMM, LEVEL_GREATER);

	BOOL	bLoaded = FALSE;
	for (;;) {
		char	letter;
		char	*word;

		pLine = fread_line (fp);
		letter = *pLine++;
		if (letter == '*')
			continue;

		if (letter != '#') {
			bug ("CPlayerMenu::Load: %s, '#' not found.", name);
			break;
		}

		word = ParseWord (pLine);
		if (! str_cmp (word, "PLAYER")) {
			if (LoadPlayer (Ch, fp)) {
				if (Ch.GetTrustLevel () < ma_Level) {
					set_char_color (AT_IMMORT, &Ch);
					Ch.SendText ("Their godly glow prevents you from "
						"getting a good look .\n\r");
					break;
				}
			}
			else break;
		}
//		else if (!str_cmp (word, "OBJECT"))		// Objects
//			fread_obj  (vict, fp, OS_CARRY);
//		else if (!str_cmp (word, "COMMENT"))
//			fread_comment (vict, fp);				// Comments
		else if (!str_cmp (word, "END")) {			// Done
			bLoaded = TRUE;
			break;
		}
		else {
			bug ("Load_char_obj: bad section loading %s.", name);
			break;
		}
	}
	fclose (fp);

	return bLoaded;
}


#define KEY(literal,field,value)					\
				if (!str_cmp (word, literal)) {		\
				    field  = value;					\
				    fMatch = TRUE;					\
				    break;							\
				}

BOOL CPlayerMenu::LoadPlayer (CCharacter& Ch, FILE* fp)
{
	char	*word;
	BOOL	fMatch;
	char	*pLine;
	BOOL	bDone = FALSE;

	int	file_ver = 0;
	int	killcnt = 0;
	CAffectFlags	AffectFlags;
	CActFlags		ActFlags;
	
	do {
		fMatch = FALSE;
		if (! feof (fp)) {
			pLine = fread_line (fp);
			word = ParseWord (pLine);
		}
		else word = "End";

		switch (UPPER (word [0])) {
		  case '*':
			fMatch = TRUE;
			break;

		  case 'A':
			if (! str_cmp (word, "Act")) {
				ActFlags.Parse (pLine);
				fMatch = TRUE;
				break;
			}
			if (! str_cmp (word, "AffectedBy")) {
				AffectFlags.Parse (pLine);
				fMatch = TRUE;
				break;
			}
			KEY ("Alignment",	ma_Align,		ParseNumber (pLine));
			KEY ("Armor",		ma_Ac,			ParseNumber (pLine));

//	Look at character.cpp to see about affect and affect data...
//			if (!str_cmp (word, "Affect") || !str_cmp (word, "AffectData"))

//			if (! str_cmp (word, "AttrMod" )) {
//				x1 = x2 = x3 = x4 = x5 = x6 = x7 = 13;
//				sscanf (pLine, "%d %d %d %d %d %d %d", &x1, &x2, &x3, &x4,
//					&x5, &x6, &x7);
//				mod_str = x1;
//				mod_int = x2;
//				mod_wis = x3;
//				mod_dex = x4;
//				mod_con = x5;
//				mod_cha = x6;
//				mod_lck = x7;
//				if (!x7)
//					mod_lck = 0;
//				fMatch = TRUE;
//				break;
//			}

			if (!str_cmp (word, "AttrPerm")) {
				sscanf (pLine, "%d %d %d %d %d %d %d",
					&ma_Str, &ma_Int, &ma_Wis, &ma_Dex,
					&ma_Con, &ma_Cha, &ma_Luck);
				fMatch = TRUE;
				break;
			}
//			KEY ("AuthedBy", ma_authed_by,	ParseCString (pLine, fp));
			break;

		  case 'B':
//			KEY ("Bamfin",	m_pPcdata->bamfin,	ParseCString (pLine, fp));
//			KEY ("Bamfout",	m_pPcdata->bamfout,	ParseCString (pLine, fp));
//			KEY ("Bestowments", m_pPcdata->bestowments, ParseCString (pLine, fp));
			KEY ("Bio",		ma_Bio,			ParseCString (pLine, fp));
			break;

		  case 'C':
//			KEY ("Clan",	m?_Clan,		ParseCString (pLine, fp));
//			KEY ("Class",	nClass,			ParseNumber (pLine));

//			if (! str_cmp (word, "Condition")) {
//				sscanf (pLine, "%d %d %d %d", &x1, &x2, &x3, &x4);
//				m_pPcdata->condition [0] = x1;
//				m_pPcdata->condition [1] = x2;
//				m_pPcdata->condition [2] = x3;
//				m_pPcdata->condition [3] = x4;
//				fMatch = TRUE;
//				break;
//			}

//			KEY ("Council",	m?_Council,		ParseString (pLine, fp));
			break;

		  case 'D':
			KEY ("Damroll",	ma_Damrol,			ParseNumber (pLine));
//			KEY ("Deaf",		deaf,			ParseNumber (pLine));
			KEY ("Deity",	ma_Deity,			ParseString (pLine, fp));
			break;

		  // 'E' was moved to after 'S'
		  case 'F':
			KEY ("Favor",	ma_Favor,			ParseNumber (pLine));
//			KEY ("Flags",	m_pPcdata->m_flags,	ParseNumber (pLine));
			break;

		  case 'G':
			KEY ("Glory",	ma_Glory,			ParseNumber (pLine));
			KEY ("Gold",	ma_Gold,			ParseNumber (pLine));
//			KEY ("Guild",	m?_Guild,			ParseCString (pLine, fp));
			break;

		  case 'H':
//			if (! str_cmp (word, "Helled")) {
//				m_pPcdata->release_date = ParseNumber (pLine);
//				m_pPcdata->helled_by = ParseCString (pLine, fp);
//				if (m_pPcdata->release_date < current_time) {
//					STRFREE (m_pPcdata->helled_by);
//					m_pPcdata->helled_by = NULL;
//					m_pPcdata->release_date = 0;
//				}
//				fMatch = TRUE;
//				break;
//			}

			KEY ("Hitroll",		ma_Hitrol,		ParseNumber (pLine));
//			KEY ("Homepage",	m?_Homepage,	ParseCString (pLine, fp));

			if (! str_cmp (word, "HpManaMove")) {
				ma_Hp = ParseNumber (pLine);
				ma_MaxHp = ParseNumber (pLine);
				ma_Mana = ParseNumber (pLine);
				ma_MaxMana = ParseNumber (pLine);
				ma_Move = ParseNumber (pLine);
				ma_MaxMove = ParseNumber (pLine);
				fMatch = TRUE;
				break;
			}
			break;

		  case 'I':
//			KEY ("IllegalPK",	m_pPcdata->illegal_pk,	ParseNumber (pLine));
//			KEY ("Immune",		m_immune,				ParseNumber (pLine));
			break;

		  case 'K':
//			if (!str_cmp (word, "Killed")) {
//				fMatch = TRUE;
//				m_pPcdata->killed[killcnt].vnum = ParseNumber (pLine);
//				m_pPcdata->killed[killcnt++].count = ParseNumber (pLine);
//			}
//			break;

		  case 'L':
			KEY ("Level",		ma_Level,		ParseNumber (pLine));

//			if (! str_cmp (word, "Languages")) {
//				speaks = ParseNumber (pLine);
//				speaking = ParseNumber (pLine);
//				fMatch = TRUE;
//			}
			break;

		  case 'M':
			KEY ("MDeaths",		ma_Mdeaths,			ParseNumber (pLine));
//			KEY ("Mentalstate", SetMentalState,		ParseNumber (pLine));
			KEY ("MGlory",      ma_MGlory,			ParseNumber (pLine));
//			KEY ("Minsnoop",	m_pPcdata->min_snoop,	ParseNumber (pLine));
			KEY ("MKills",		ma_Mkills,			ParseNumber (pLine));
//			if (!str_cmp (word, "MobRange")) {
//				m_pPcdata->m_range_lo = ParseNumber (pLine);
//				m_pPcdata->m_range_hi = ParseNumber (pLine);
//				fMatch = TRUE;
//			}
			break;

		  case 'N':
			KEY ("Name",	ma_Name,	ParseCString (pLine, fp));
			break;

		  case 'O':
//			KEY ("Outcast_time", m_pPcdata->outcast_time, ParseNumber (pLine));
//			if (!str_cmp (word, "ObjRange")) {
//				m_pPcdata->o_range_lo = ParseNumber (pLine);
//				m_pPcdata->o_range_hi = ParseNumber (pLine);
//				fMatch = TRUE;
//			}
//			break;

		  case 'P':
			KEY ("Password",	ma_Password,		ParseCString (pLine, fp));
//			KEY ("PDeaths",		m_pPcdata->pdeaths,	ParseNumber (pLine));
//			KEY ("PKills",		m_pPcdata->pkills,	ParseNumber (pLine));
//			KEY ("Played",		SetPlayed,			ParseNumber (pLine));
			KEY ("Position",	ma_Pos,				ParseNumber (pLine));
			KEY ("Practice",	ma_Pract,			ParseNumber (pLine));
			KEY ("Prompt",		ma_Prompt,			ParseCString (pLine, fp));
//			if (!str_cmp (word, "PTimer")) {
//				add_timer (this , TIMER_PKILLED, ParseNumber (pLine), NULL, 0);	
//				fMatch = TRUE;
//				break;
//			}
			break;

		  case 'R':
//			KEY ("Race",        Race,			ParseNumber (pLine));
//			KEY ("Rank",        m_pPcdata->rank,	ParseCString (pLine, fp));
//			KEY ("Resistant",	m_resist,			ParseNumber (pLine));
//			KEY ("Restore_time",m_pPcdata->restore_time, ParseNumber (pLine));
			KEY ("Room",        ma_Room,			ParseNumber (pLine));

//			if (!str_cmp (word, "RoomRange")) {
//				m_pPcdata->r_range_lo = ParseNumber (pLine);
//				m_pPcdata->r_range_hi = ParseNumber (pLine);
//				fMatch = TRUE;
//			}
			break;

		  case 'S':
			KEY ("Sex",			ma_Sex,				ParseNumber (pLine));
//			KEY ("Susceptible",	m_suscept,			ParseNumber (pLine));
//			if (! str_cmp (word, "SavingThrow")) {
//				saving_wand = ParseNumber (pLine);
//				saving_poison_death = saving_wand;
//				saving_para_petri = saving_wand;
//				saving_breath = saving_wand;
//				saving_spell_staff = saving_wand;
//				fMatch = TRUE;
//				break;
//			}

//			if (! str_cmp (word, "SavingThrows")) {
//				saving_poison_death = ParseNumber (pLine);
//				saving_wand = ParseNumber (pLine);
//				saving_para_petri = ParseNumber (pLine);
//				saving_breath = ParseNumber (pLine);
//				saving_spell_staff = ParseNumber (pLine);
//				fMatch = TRUE;
//				break;
//			}

//			if (! str_cmp (word, "Site")) {
//				if (! preload) {
//					sprintf (buf, "Last connected from: %s\n\r",
//						ParseLine (pLine));
//					SendText (buf);
//				}
//				fMatch = TRUE;
//				if (preload)
//					word = "End";
//				else break;
//			}

//			if (! str_cmp (word, "Skill")) {
//				int		sn;
//				int		value;
//
//				if (preload)
//					word = "End";
//				else {
//					value = ParseNumber (pLine);
//					sn = SkillTable.BsearchExact (ParseWord (pLine),
//						gsn_first_skill, gsn_first_weapon-1);
//					if (sn < 0)
//						bug ("CCharacter::Read: unknown skill.");
//					else {
//						m_pPcdata->learned [sn] = value;
						// Take care of people who have stuff they shouldn't
						// Assumes class and level were loaded before. Altrag *
						// Assumes practices are loaded first too now. Altrag */
//						if (GetLevel () < LEVEL_IMMORTAL) { 
//							if (SkillTable.GetLevel (sn, m_Class) >= LEVEL_IMMORTAL) {
//								m_pPcdata->learned [sn] = 0;
//								AddPractices (1);
//							}
//						}
//					}
//					fMatch = TRUE;
//					break;
//				}
//			}

//			if (! str_cmp (word, "Spell")) {
//				int		sn;
//				int		value;
//
//				if (preload)
//					word = "End";
//				else {
//					value = ParseNumber (pLine);
//
//					sn = SkillTable.BsearchExact (ParseWord (pLine),
//						gsn_first_spell, gsn_first_skill-1);
//					if (sn < 0)
//						bug ("CCharacter::Read: unknown spell.");
//					else {
//						m_pPcdata->learned[sn] = value;
//						if (GetLevel () < LEVEL_IMMORTAL)
//						if (SkillTable.GetLevel (sn, m_Class) >= LEVEL_IMMORTAL) {
//							m_pPcdata->learned [sn] = 0;
//							AddPractices (1);
//						}
//					}
//					fMatch = TRUE;
//					break;
//				}
//			}

			if (str_cmp (word, "End"))
				break;

		  case 'E':
			if (! str_cmp (word, "End")) {
//				killcnt = URANGE (2,
//					((GetLevel ()+3) * MAX_KILLTRACK)/LEVEL_AVATAR,
//					MAX_KILLTRACK);
//				if (killcnt < MAX_KILLTRACK)
//					m_pPcdata->killed [killcnt].vnum = 0;

				bDone = TRUE;
				break;
			}

			KEY ("Exp",		ma_Exp,		ParseNumber (pLine));
			break;

		  case 'T':
//			if (! str_cmp (word, "Tongue")) {
//				int		sn;
//				int		value;
//
//				if (preload)
//					word = "End";
//				else {
//					value = ParseNumber (pLine);
//
//					sn = SkillTable.BsearchExact (ParseWord (pLine),
//						gsn_first_tongue, gsn_top_sn-1);
//					if (sn < 0)
//						bug ("CCharacter::Read: unknown tongue.");
//					else {
//						m_pPcdata->learned [sn] = value;
//						if (GetLevel () < LEVEL_IMMORTAL)
//							if (SkillTable.GetLevel (sn, GetClass ()) >= LEVEL_IMMORTAL) {
//								m_pPcdata->learned [sn] = 0;
//								AddPractices (1);
//							}
//					}
//					fMatch = TRUE;
//				}
//				break;
//			}
			KEY ("Trust", ma_Trust, ParseNumber (pLine));

//			if (!str_cmp (word, "Title")) {
//				m_pPcdata->title = ParseCString (pLine, fp);
//				if (isalpha (m_pPcdata->title [0])
//				  || isdigit (m_pPcdata->title [0])) {
//					sprintf (buf, " %s", m_pPcdata->title);
//					if (m_pPcdata->title)
//						STRFREE (m_pPcdata->title);
//					m_pPcdata->title = STRALLOC (buf);
//				}
//				fMatch = TRUE;
//				break;
//			}
			break;

		  case 'V':
			KEY ("Version",		file_ver,		ParseNumber (pLine));
			break;

		  case 'W':
//			if (! str_cmp (word, "Weapon")) {
//				int		sn;
//				int		value;
//
//				if (preload)
//					word = "End";
//				else {
//					value = ParseNumber (pLine);
//
//					sn = SkillTable.BsearchExact (ParseWord (pLine),
//						gsn_first_weapon, gsn_first_tongue-1);
//					if (sn < 0)
//						bug ("CCharacter::Read: unknown weapon.", 0);
//					else {
//						m_pPcdata->learned [sn] = value;
//						if (GetLevel () < LEVEL_IMMORTAL)
//							if (SkillTable.GetLevel (sn, GetClass ()) >= LEVEL_IMMORTAL) {
//								m_pPcdata->learned[sn] = 0;
//								AddPractices (1);
//							}
//					}
//					fMatch = TRUE;
//				}
//				break;
//			}

			KEY ("Wimpy",		mb_Wimp,			ParseNumber (pLine));
//			KEY ("WizInvis",	m_pPcdata->wizinvis,	ParseNumber (pLine));
			break;
		}

		if (! fMatch) {
			bug ("CCharacter::Read: no match: %s", word);
		}
	} while (! bDone);

	if (bDone) {
		CCharacter	Vc;

		Vc.SetActFlags (ActFlags);		// So we can use access functions
		Vc.SetAffectFlags (AffectFlags);

		mb_Silent = Vc.IsSilent ();
		mb_Denied = Vc.IsDenied ();
		mb_Nice = Vc.IsNice ();
		mb_Frozen = Vc.IsFrozen ();
		mb_Logged = Vc.IsLogged ();

		mb_Attacker = Vc.IsAttacker ();
		mb_Killer = Vc.IsKiller ();
		mb_Thief = Vc.IsThief ();
		mb_NoEmote = Vc.IsNoEmote ();
		mb_AutoSac = Vc.IsAutoSac ();
		mb_AutoLoot = Vc.IsAutoLoot ();
		mb_AutoExit = Vc.IsAutoExit ();
		mb_Poly = Vc.IsPolymorphed ();

		mb_NoTell = Vc.IsNoTell ();
		mb_WizInv = Vc.IsWizInvis ();
		mb_Secret = Vc.IsSecretive ();
		mb_HolyLight = Vc.IsHolyLight ();
		mb_Combined = Vc.IsCombined ();
		mb_HasPrompt = Vc.HasPrompt ();
		mb_HasPet = Vc.HasPet ();
		mb_NoAssist = Vc.IsNoAssist ();

		mb_Blank = Vc.IsBlank ();
		mb_Telenet = Vc.IsTelenet ();
		mb_Rip = Vc.IsRip ();
		mb_Ansi = Vc.IsAnsi ();
		mb_Brief = Vc.IsBrief ();
		mb_Vnums = Vc.IsVnums ();
		mb_Wimpy = Vc.IsWimpy ();

		mb_Sanct = Vc.HasSanctuary ();
		mb_Flaming = Vc.IsFlaming ();
		mb_Sleeping = Vc.IsSleeping ();
		mb_Flying = Vc.IsFlying ();
		mb_Scrying = Vc.IsScrying ();
		mb_Invis = Vc.IsInvis ();

		mb_Blinded = Vc.IsBlind ();
		mb_DetMagic = Vc.CanSeeMagic ();
		mb_FaerieFire = Vc.IsFaerieFire ();
		mb_Poison = Vc.IsPoisoned ();
		mb_Hidden = Vc.IsHidden ();
		mb_Pass = Vc.CanPass ();
		mb_FireShield = Vc.HasFireShield ();
		mb_Beserk = Vc.IsBeserk ();

		mb_DetInvis = Vc.CanSeeInvis ();
		mb_DetHidden = Vc.CanSeeHidden ();
		mb_Infra = Vc.CanSeeInfra ();
		mb_Protect = Vc.IsProtected ();
		mb_Sneak = Vc.IsSneaking ();
		mb_TrueSight = Vc.HasTrueSight ();
		mb_ShockShield = Vc.HasShockShield ();
		mb_Aqua = Vc.IsAqua ();

		mb_DetEvil = Vc.CanSeeEvil ();
		mb_Curse = Vc.IsCursed ();
		mb_Paralysed = Vc.IsParalysed ();
		mb_Charmed = Vc.IsCharmed ();
		mb_DetTrap = Vc.IsDetTrap ();
		mb_Floating = Vc.IsFloating ();
		mb_IceShield = Vc.HasIceShield ();
	}
	return bDone;
}


#define		OFFSET(aa)	offsetof(CPlayerMenu,aa)

CMenuData	PlrPage_A [] = {
	{ '1', 'a', 2,  20, 26, OFFSET(ma_Name), MT_CSTRING, 0, NULL },
	{ '1', 'b', 3,  20, 26, OFFSET(ma_Title), MT_CSTRING, 0, NULL },
	{ '1', 'c', 2,  56, 21, OFFSET(ma_Password), MT_CSTRING, 0, NULL },
	{ '1', 'd', 3,  56, 21, OFFSET(ma_Deity), MT_CSTRING, 0, NULL },
	{ '1', 'e', 4,  12, 66, OFFSET(ma_Prompt), MT_CSTRING, 0, NULL },
	{ '1', 'f', 5,  10, 69, OFFSET(ma_Bio), MT_CSTRING, 0, MenuStringEditFn },

	{ '2', 'a', 11, 12, 7, OFFSET(ma_Level), MT_INT, 0, NULL },
	{ '2', 'b', 12, 12, 7, OFFSET(ma_Trust), MT_INT, 0, NULL },
	{ '2', 'c', 13, 12, 7, OFFSET(ma_Align), MT_INT, 0, NULL },
	{ '2', 'd', 14, 12, 7, OFFSET(ma_Favor), MT_INT, 0, NULL },
	{ '2', 'e', 15, 12, 7, OFFSET(ma_Sex), MT_INT, 0, NULL },
	{ '2', 'f', 16, 12, 7, OFFSET(ma_Ac), MT_INT, 0, NULL },
	{ '2', 'g', 17, 12, 7, OFFSET(ma_Gold), MT_INT, 0, NULL },
	{ '2', 'h', 9, 33, 6, OFFSET(ma_Hp), MT_INT, 0, NULL },
	{ '2', 'i', 10, 33, 6, OFFSET(ma_MaxHp), MT_INT, 0, NULL },
	{ '2', 'j', 11, 33, 6, OFFSET(ma_Mana), MT_INT, 0, NULL },
	{ '2', 'k', 12, 33, 6, OFFSET(ma_MaxMana), MT_INT, 0, NULL },
	{ '2', 'l', 13, 33, 6, OFFSET(ma_Move), MT_INT, 0, NULL },
	{ '2', 'm', 14, 33, 6, OFFSET(ma_MaxMove), MT_INT, 0, NULL },
	{ '2', 'n', 15, 33, 6, OFFSET(ma_Pos), MT_INT, 0, NULL },
	{ '2', 'o', 16, 34, 6, OFFSET(ma_Pract), MT_INT, 0, NULL },
	{ '2', 'p', 17, 35, 6, OFFSET(ma_Exp), MT_INT, 0, NULL },

	{ '2', 'q', 9, 52, 6, OFFSET(ma_Hitrol), MT_INT, 0, NULL },
	{ '2', 'r', 10, 52, 6, OFFSET(ma_Damrol), MT_INT, 0, NULL },
	{ '2', 's', 11, 52, 6, OFFSET(ma_Glory), MT_INT, 0, NULL },
	{ '2', 't', 12, 52, 6, OFFSET(ma_MGlory), MT_INT, 0, NULL },
	{ '2', 'u', 13, 52, 6, OFFSET(ma_Room), MT_INT, 0, NULL },
	{ '2', 'v', 14, 52, 6, OFFSET(ma_Played), MT_INT, 0, NULL },
	{ '2', 'w', 15, 52, 6, OFFSET(ma_Mkills), MT_INT, 0, NULL },
	{ '2', 'x', 16, 52, 6, OFFSET(ma_Mdeaths), MT_INT, 0, NULL },

	{ '3', 'a', 11, 69, 6, OFFSET(ma_Str), MT_INT, 0, NULL },
	{ '3', 'b', 12, 69, 6, OFFSET(ma_Int), MT_INT, 0, NULL },
	{ '3', 'c', 13, 69, 6, OFFSET(ma_Wis), MT_INT, 0, NULL },
	{ '3', 'd', 14, 69, 6, OFFSET(ma_Dex), MT_INT, 0, NULL },
	{ '3', 'e', 15, 69, 6, OFFSET(ma_Con), MT_INT, 0, NULL },
	{ '3', 'f', 16, 69, 6, OFFSET(ma_Cha), MT_INT, 0, NULL },
	{ '3', 'g', 17, 69, 6, OFFSET(ma_Luck), MT_INT, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
}
;


CMenuData	PlrPage_B [] = {
	{ '1', 'a', 5, 12, 1, OFFSET(mb_Silent), MT_BOOL, 0, NULL },
	{ '1', 'b', 6, 12, 1, OFFSET(mb_Denied), MT_BOOL, 0, NULL },
	{ '1', 'c', 7, 12, 1, OFFSET(mb_Nice), MT_BOOL, 0, NULL },
	{ '1', 'd', 8, 12, 1, OFFSET(mb_Frozen), MT_BOOL, 0, NULL },
	{ '1', 'e', 9, 12, 1, OFFSET(mb_Logged), MT_BOOL, 0, NULL },

	{ '1', 'f', 2, 29, 1, OFFSET(mb_Attacker), MT_BOOL, 0, NULL },
	{ '1', 'g', 3, 29, 1, OFFSET(mb_Killer), MT_BOOL, 0, NULL },
	{ '1', 'h', 4, 29, 1, OFFSET(mb_Thief), MT_BOOL, 0, NULL },
	{ '1', 'i', 5, 29, 1, OFFSET(mb_NoEmote), MT_BOOL, 0, NULL },
	{ '1', 'j', 6, 29, 1, OFFSET(mb_AutoSac), MT_BOOL, 0, NULL },
	{ '1', 'k', 7, 29, 1, OFFSET(mb_AutoLoot), MT_BOOL, 0, NULL },
	{ '1', 'l', 8, 29, 1, OFFSET(mb_AutoExit), MT_BOOL, 0, NULL },
	{ '1', 'm', 9, 29, 1, OFFSET(mb_Poly), MT_BOOL, 0, NULL },

	{ '1', 'n', 2, 47, 1, OFFSET(mb_NoTell), MT_BOOL, 0, NULL },
	{ '1', 'o', 3, 47, 1, OFFSET(mb_WizInv), MT_BOOL, 0, NULL },
	{ '1', 'p', 4, 47, 1, OFFSET(mb_Secret), MT_BOOL, 0, NULL },
	{ '1', 'q', 5, 47, 1, OFFSET(mb_HolyLight), MT_BOOL, 0, NULL },
	{ '1', 'r', 6, 47, 1, OFFSET(mb_Combined), MT_BOOL, 0, NULL },
	{ '1', 's', 7, 47, 1, OFFSET(mb_HasPrompt), MT_BOOL, 0, NULL },
	{ '1', 't', 8, 47, 1, OFFSET(mb_HasPet), MT_BOOL, 0, NULL },
	{ '1', 'u', 9, 47, 1, OFFSET(mb_NoAssist), MT_BOOL, 0, NULL },

	{ '1', 'v', 2, 64, 1, OFFSET(mb_Blank), MT_BOOL, 0, NULL },
	{ '1', 'w', 3, 64, 1, OFFSET(mb_Telenet), MT_BOOL, 0, NULL },
	{ '1', 'x', 4, 64, 1, OFFSET(mb_Rip), MT_BOOL, 0, NULL },
	{ '1', 'y', 5, 64, 1, OFFSET(mb_Ansi), MT_BOOL, 0, NULL },
	{ '1', 'z', 6, 64, 1, OFFSET(mb_Brief), MT_BOOL, 0, NULL },
	{ '1', 'A', 7, 64, 1, OFFSET(mb_Vnums), MT_BOOL, 0, NULL },
	{ '1', 'B', 8, 64, 1, OFFSET(mb_Wimpy), MT_BOOL, 0, NULL },
	{ '1', 'C', 9, 64, 5, OFFSET(mb_Wimp), MT_INT, 0, NULL },

	{ '2', 'a', 13, 12, 1, OFFSET(mb_Sanct), MT_BOOL, 0, NULL },
	{ '2', 'b', 14, 12, 1, OFFSET(mb_Flaming), MT_BOOL, 0, NULL },
	{ '2', 'c', 15, 12, 1, OFFSET(mb_Sleeping), MT_BOOL, 0, NULL },
	{ '2', 'd', 16, 12, 1, OFFSET(mb_Flying), MT_BOOL, 0, NULL },
	{ '2', 'e', 17, 12, 1, OFFSET(mb_Scrying), MT_BOOL, 0, NULL },
	{ '2', 'f', 18, 12, 1, OFFSET(mb_Invis), MT_BOOL, 0, NULL },

	{ '2', 'g', 11, 29, 1, OFFSET(mb_Blinded), MT_BOOL, 0, NULL },
	{ '2', 'h', 12, 29, 1, OFFSET(mb_DetMagic), MT_BOOL, 0, NULL },
	{ '2', 'i', 13, 29, 1, OFFSET(mb_FaerieFire), MT_BOOL, 0, NULL },
	{ '2', 'j', 14, 29, 1, OFFSET(mb_Poison), MT_BOOL, 0, NULL },
	{ '2', 'k', 15, 29, 1, OFFSET(mb_Hidden), MT_BOOL, 0, NULL },
	{ '2', 'l', 16, 29, 1, OFFSET(mb_Pass), MT_BOOL, 0, NULL },
	{ '2', 'm', 17, 29, 1, OFFSET(mb_FireShield), MT_BOOL, 0, NULL },
	{ '2', 'n', 18, 29, 1, OFFSET(mb_Beserk), MT_BOOL, 0, NULL },

	{ '2', 'o', 11, 47, 1, OFFSET(mb_DetInvis), MT_BOOL, 0, NULL },
	{ '2', 'p', 12, 47, 1, OFFSET(mb_DetHidden), MT_BOOL, 0, NULL },
	{ '2', 'q', 13, 47, 1, OFFSET(mb_Infra), MT_BOOL, 0, NULL },
	{ '2', 'r', 14, 47, 1, OFFSET(mb_Protect), MT_BOOL, 0, NULL },
	{ '2', 'w', 15, 47, 1, OFFSET(mb_Sneak), MT_BOOL, 0, NULL },
	{ '2', 't', 16, 47, 1, OFFSET(mb_TrueSight), MT_BOOL, 0, NULL },
	{ '2', 'u', 17, 47, 1, OFFSET(mb_ShockShield), MT_BOOL, 0, NULL },
	{ '2', 'v', 18, 47, 1, OFFSET(mb_Aqua), MT_BOOL, 0, NULL },

	{ '2', 'w', 11, 64, 1, OFFSET(mb_DetEvil), MT_BOOL, 0, NULL },
	{ '2', 'x', 12, 64, 1, OFFSET(mb_Curse), MT_BOOL, 0, NULL },
	{ '2', 'y', 13, 64, 1, OFFSET(mb_Paralysed), MT_BOOL, 0, NULL },
	{ '2', 'z', 14, 64, 1, OFFSET(mb_Charmed), MT_BOOL, 0, NULL },
	{ '2', 'A', 15, 64, 1, OFFSET(mb_DetTrap), MT_BOOL, 0, NULL },
	{ '2', 'B', 16, 64, 1, OFFSET(mb_Floating), MT_BOOL, 0, NULL },
	{ '2', 'C', 17, 64, 1, OFFSET(mb_IceShield), MT_BOOL, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
};

#ifdef XXXX
CMenuData	PlrPage_C [] = {
	{ '1', 'a', 5,  10, 1, OFFSET(mc_Aid), MT_BOOL, 0, NULL },
	{ '1', 'b', 6,  10, 1, OFFSET(mc_Dig), MT_BOOL, 0, NULL },
	{ '1', 'c', 7,  10, 1, OFFSET(mc_Grip), MT_BOOL, 0, NULL },
	{ '1', 'd', 8,  10, 1, OFFSET(mc_Hide), MT_BOOL, 0, NULL },
	{ '1', 'e', 9,  10, 1, OFFSET(mc_Bite), MT_BOOL, 0, NULL },
	{ '1', 'f', 10, 10, 1, OFFSET(mc_Brew), MT_BOOL, 0, NULL },
	{ '1', 'g', 11, 10, 1, OFFSET(mc_Peek), MT_BOOL, 0, NULL },
	{ '1', 'h', 12, 10, 1, OFFSET(mc_Scan), MT_BOOL, 0, NULL },
	{ '1', 'i', 13, 10, 1, OFFSET(mc_Stun), MT_BOOL, 0, NULL },
	{ '1', 'j', 14, 10, 1, OFFSET(mc_Tail), MT_BOOL, 0, NULL },

	{ '1', 'k', 2,  27, 1, OFFSET(mc_Circle), MT_BOOL, 0, NULL },
	{ '1', 'l', 3,  27, 1, OFFSET(mc_Claw), MT_BOOL, 0, NULL },
	{ '1', 'm', 4,  27, 1, OFFSET(mc_Climb), MT_BOOL, 0, NULL },
	{ '1', 'n', 5,  27, 1, OFFSET(mc_Detrap), MT_BOOL, 0, NULL },
	{ '1', 'o', 6,  27, 1, OFFSET(mc_Berserk), MT_BOOL, 0, NULL },
	{ '1', 'p', 7,  27, 1, OFFSET(mc_Disarm), MT_BOOL, 0, NULL },
	{ '1', 'q', 8,  27, 1, OFFSET(mc_Discern), MT_BOOL, 0, NULL },
	{ '1', 'r', 9,  27, 1, OFFSET(mc_Dodge), MT_BOOL, 0, NULL },
	{ '1', 's', 10, 27, 1, OFFSET(mc_Kick), MT_BOOL, 0, NULL },
	{ '1', 't', 11, 27, 1, OFFSET(mc_Limber), MT_BOOL, 0, NULL },
	{ '1', 'u', 12, 27, 1, OFFSET(mc_Mount), MT_BOOL, 0, NULL },
	{ '1', 'v', 13, 27, 1, OFFSET(mc_Parry), MT_BOOL, 0, NULL },
	{ '1', 'w', 14, 27, 1, OFFSET(mc_Punch), MT_BOOL, 0, NULL },

	{ '1', 'x', 2,  46, 1, OFFSET(mc_DoorBash), MT_BOOL, 0, NULL },
	{ '1', 'y', 3,  46, 1, OFFSET(mc_DualWield), MT_BOOL, 0, NULL },
	{ '1', 'z', 4,  46, 1, OFFSET(mc_PickLock), MT_BOOL, 0, NULL },
	{ '1', 'A', 5,  46, 1, OFFSET(mc_Feed), MT_BOOL, 0, NULL },
	{ '1', 'B', 6,  46, 1, OFFSET(mc_Gouge), MT_BOOL, 0, NULL },
	{ '1', 'C', 7,  46, 1, OFFSET(mc_Bash), MT_BOOL, 0, NULL },
	{ '1', 'D', 8,  46, 1, OFFSET(mc_Hitall), MT_BOOL, 0, NULL },
	{ '1', 'E', 9,  46, 1, OFFSET(mc_BackStab), MT_BOOL, 0, NULL },
	{ '1', 'F', 10, 46, 1, OFFSET(mc_Dominate), MT_BOOL, 0, NULL },
	{ '1', 'G', 11, 46, 1, OFFSET(mc_Meditate), MT_BOOL, 0, NULL },
	{ '1', 'H', 12, 46, 1, OFFSET(mc_Rescue), MT_BOOL, 0, NULL },
	{ '1', 'I', 13, 46, 1, OFFSET(mc_Track), MT_BOOL, 0, NULL },
	{ '1', 'J', 14, 46, 1, OFFSET(mc_Trance), MT_BOOL, 0, NULL },

	{ '1', 'K', 2,  69, 1, OFFSET(mc_2Att), MT_BOOL, 0, NULL },
	{ '1', 'L', 3,  69, 1, OFFSET(mc_3Att), MT_BOOL, 0, NULL },
	{ '1', 'M', 4,  69, 1, OFFSET(mc_4Att), MT_BOOL, 0, NULL },
	{ '1', 'N', 5,  69, 1, OFFSET(mc_5Att), MT_BOOL, 0, NULL },
	{ '1', 'O', 6,  69, 1, OFFSET(mc_PoisonWeapon), MT_BOOL, 0, NULL },
	{ '1', 'P', 7,  69, 1, OFFSET(mc_EnhDamage), MT_BOOL, 0, NULL },
	{ '1', 'Q', 8,  69, 1, OFFSET(mc_Visology), MT_BOOL, 0, NULL },
	{ '1', 'R', 9,  69, 1, OFFSET(mc_Scribe), MT_BOOL, 0, NULL },
	{ '1', 'S', 10, 69, 1, OFFSET(mc_Search), MT_BOOL, 0, NULL },
	{ '1', 'T', 11, 69, 1, OFFSET(mc_Slice), MT_BOOL, 0, NULL },
	{ '1', 'U', 12, 69, 1, OFFSET(mc_Sneak), MT_BOOL, 0, NULL },
	{ '1', 'V', 13, 69, 1, OFFSET(mc_Steal), MT_BOOL, 0, NULL },
	{ '1', 'W', 14, 69, 1, OFFSET(mc_Sting), MT_BOOL, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
};


CMenuData	PlrPage_D [] = {
	{ '1', 'a', 2, 36, 2, OFFSET(md_SavPoisonDeath), MT_SINT, 0, NULL },
	{ '1', 'b', 3, 36, 2, OFFSET(md_SavWand), MT_INT, 0, NULL },
	{ '1', 'c', 4, 36, 2, OFFSET(md_SavSpellStaff), MT_SINT, 0, NULL },
	{ '1', 'd', 2, 63, 2, OFFSET(md_SavParaPetri), MT_SINT, 0, NULL },
	{ '1', 'e', 3, 63, 2, OFFSET(md_SavBreath), MT_SINT, 0, NULL },

	{ '2', 'a', 6, 20, 1, OFFSET(md_Fins), MT_BOOL, 0, NULL },
	{ '2', 'b', 7, 20, 1, OFFSET(md_Tail), MT_BOOL, 0, NULL },
	{ '2', 'c', 8, 20, 1, OFFSET(md_Guts), MT_BOOL, 0, NULL },
	{ '2', 'd', 9, 21, 1, OFFSET(md_Wings), MT_BOOL, 0, NULL },
	{ '2', 'e', 10, 21, 1, OFFSET(md_Claws), MT_BOOL, 0, NULL },
	{ '2', 'f', 11, 26, 1, OFFSET(md_TailAttack), MT_BOOL, 0, NULL },

	{ '2', 'g', 6, 31, 1, OFFSET(md_Ear), MT_BOOL, 0, NULL },
	{ '2', 'h', 7, 31, 1, OFFSET(md_Arms), MT_BOOL, 0, NULL },
	{ '2', 'i', 8, 31, 1, OFFSET(md_Head), MT_BOOL, 0, NULL },
	{ '2', 'j', 9, 32, 1, OFFSET(md_Hands), MT_BOOL, 0, NULL },
	{ '2', 'k', 10, 32, 1, OFFSET(md_Horns), MT_BOOL, 0, NULL },

	{ '2', 'l', 6, 42, 1, OFFSET(md_Eye), MT_BOOL, 0, NULL },
	{ '2', 'm', 7, 42, 1, OFFSET(md_Legs), MT_BOOL, 0, NULL },
	{ '2', 'n', 8, 42, 1, OFFSET(md_Feet), MT_BOOL, 0, NULL },
	{ '2', 'o', 9, 43, 1, OFFSET(md_Heart), MT_BOOL, 0, NULL },
	{ '2', 'p', 10, 43, 1, OFFSET(md_Tusks), MT_BOOL, 0, NULL },
	{ '2', 'q', 11, 49, 1, OFFSET(md_SharpScales), MT_BOOL, 0, NULL },

	{ '2', 'r', 6, 59, 1, OFFSET(md_Tounge), MT_BOOL, 0, NULL },
	{ '2', 's', 7, 59, 1, OFFSET(md_Tentacles), MT_BOOL, 0, NULL },
	{ '2', 't', 8, 59, 1, OFFSET(md_EyeStalks), MT_BOOL, 0, NULL },
	{ '2', 'u', 6, 72, 1, OFFSET(md_Scales), MT_BOOL, 0, NULL },
	{ '2', 'v', 7, 72, 1, OFFSET(md_Brains), MT_BOOL, 0, NULL },
	{ '2', 'w', 8, 72, 1, OFFSET(md_Fingers), MT_BOOL, 0, NULL },

	{ '3', 'a', 13, 27, 3, OFFSET(md_NumAttacks), MT_SINT, 0, NULL },
	{ '3', 'b', 14, 25, 5, OFFSET(md_HitRoll), MT_SINT, 0, NULL },
	{ '3', 'c', 15, 25, 5, OFFSET(md_DamRoll), MT_SINT, 0, NULL },
	{ '3', 'd', 13, 49, 5, OFFSET(md_Hnodice), MT_INT, 0, NULL },
	{ '3', 'e', 13, 57, 5, OFFSET(md_Hsizedice), MT_INT, 0, NULL },
	{ '3', 'f', 13, 65, 5, OFFSET(md_Hplus), MT_INT, 0, NULL },
	{ '3', 'g', 15, 49, 5, OFFSET(md_Dnodice), MT_INT, 0, NULL },
	{ '3', 'h', 15, 57, 5, OFFSET(md_Dsizedice), MT_INT, 0, NULL },
	{ '3', 'i', 15, 65, 5, OFFSET(md_Dplus), MT_INT, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
};


CMenuData	PlrPage_E [] = {
	{ '1', 'a', 2, 23, 1, OFFSET(me_SFido), MT_BOOL, 0, NULL },
	{ '1', 'b', 3, 23, 1, OFFSET(me_SGuard), MT_BOOL, 0, NULL },
	{ '1', 'c', 4, 23, 1, OFFSET(me_SJanitor), MT_BOOL, 0, NULL },
	{ '1', 'd', 5, 23, 1, OFFSET(me_SThief), MT_BOOL, 0, NULL },
	{ '1', 'e', 6, 23, 1, OFFSET(me_SMayor), MT_BOOL, 0, NULL },
	{ '1', 'f', 7, 23, 1, OFFSET(me_SPoison), MT_BOOL, 0, NULL },

	{ '1', 'g', 2, 42, 1, OFFSET(me_SAdept), MT_BOOL, 0, NULL },
	{ '1', 'h', 3, 42, 1, OFFSET(me_SCleric), MT_BOOL, 0, NULL },
	{ '1', 'i', 4, 42, 1, OFFSET(me_SMage), MT_BOOL, 0, NULL },
	{ '1', 'j', 5, 42, 1, OFFSET(me_SUndead), MT_BOOL, 0, NULL },
	{ '1', 'k', 7, 42, 1, OFFSET(me_SExecutioner), MT_BOOL, 0, NULL },

	{ '1', 'l', 2, 70, 1, OFFSET(me_SFireBreath), MT_BOOL, 0, NULL },
	{ '1', 'm', 3, 70, 1, OFFSET(me_SFrostBreath), MT_BOOL, 0, NULL },
	{ '1', 'n', 4, 70, 1, OFFSET(me_SAcidBreath), MT_BOOL, 0, NULL },
	{ '1', 'o', 5, 70, 1, OFFSET(me_SGasBreath), MT_BOOL, 0, NULL },
	{ '1', 'p', 6, 70, 1, OFFSET(me_SLightningBreath), MT_BOOL, 0, NULL },
	{ '1', 'q', 7, 70, 1, OFFSET(me_SAnyBreath), MT_BOOL, 0, NULL },

	{ '2', 'a', 9, 29, 1, OFFSET(me_PDead), MT_BOOL, 0, NULL },
	{ '2', 'b', 10, 29, 1, OFFSET(me_PStunned), MT_BOOL, 0, NULL },
	{ '2', 'c', 11, 29, 1, OFFSET(me_PSitting), MT_BOOL, 0, NULL },
	{ '2', 'd', 12, 29, 1, OFFSET(me_PMounted), MT_BOOL, 0, NULL },

	{ '2', 'e', 9, 46, 1, OFFSET(me_PMortal), MT_BOOL, 0, NULL },
	{ '2', 'f', 10, 46, 1, OFFSET(me_PSleeping), MT_BOOL, 0, NULL },
	{ '2', 'g', 11, 46, 1, OFFSET(me_PFighting), MT_BOOL, 0, NULL },

	{ '2', 'h', 9, 69, 1, OFFSET(me_PIncap), MT_BOOL, 0, NULL },
	{ '2', 'i', 10, 69, 1, OFFSET(me_PResting), MT_BOOL, 0, NULL },
	{ '2', 'j', 11, 69, 1, OFFSET(me_PStanding), MT_BOOL, 0, NULL },

	{ '3', 'a', 17, 9, 3, OFFSET(me_RFire), MT_RIS, 0, NULL },
	{ '3', 'b', 14, 21, 3, OFFSET(me_RCold), MT_RIS, 0, NULL },
	{ '3', 'c', 15, 21, 3, OFFSET(me_RElect), MT_RIS, 0, NULL },
	{ '3', 'd', 16, 21, 3, OFFSET(me_REnergy), MT_RIS, 0, NULL },
	{ '3', 'e', 17, 21, 3, OFFSET(me_RPoison), MT_RIS, 0, NULL },

	{ '3', 'f', 14, 34, 3, OFFSET(me_RBlunt), MT_RIS, 0, NULL },
	{ '3', 'g', 15, 34, 3, OFFSET(me_RPierce), MT_RIS, 0, NULL },
	{ '3', 'h', 16, 34, 3, OFFSET(me_RSlash), MT_RIS, 0, NULL },
	{ '3', 'i', 17, 34, 3, OFFSET(me_RAcid), MT_RIS, 0, NULL },

	{ '3', 'j', 14, 47, 3, OFFSET(me_RNonMagic), MT_RIS, 0, NULL },
	{ '3', 'k', 15, 47, 3, OFFSET(me_RDrain), MT_RIS, 0, NULL },
	{ '3', 'l', 16, 47, 3, OFFSET(me_RSleep), MT_RIS, 0, NULL },
	{ '3', 'm', 17, 47, 3, OFFSET(me_RCharm), MT_RIS, 0, NULL },

	{ '3', 'n', 14, 60, 3, OFFSET(me_RHold), MT_RIS, 0, NULL },
	{ '3', 'o', 15, 60, 3, OFFSET(me_RMagic), MT_RIS, 0, NULL },
	{ '3', 'p', 16, 60, 3, OFFSET(me_RPlus1), MT_RIS, 0, NULL },
	{ '3', 'q', 17, 60, 3, OFFSET(me_RPlus2), MT_RIS, 0, NULL },

	{ '3', 'r', 14, 73, 3, OFFSET(me_RPlus3), MT_RIS, 0, NULL },
	{ '3', 's', 15, 73, 3, OFFSET(me_RPlus4), MT_RIS, 0, NULL },
	{ '3', 't', 16, 73, 3, OFFSET(me_RPlus5), MT_RIS, 0, NULL },
	{ '3', 'u', 17, 73, 3, OFFSET(me_RPlus6), MT_RIS, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
};


CMenuData	PlrPage_F [] = {
	{ '1', 'a', 5, 12, 1, OFFSET(mf_Ant), MT_BOOL, 0, NULL },
	{ '1', 'b', 6, 12, 1, OFFSET(mf_Bee), MT_BOOL, 0, NULL },
	{ '1', 'c', 7, 12, 1, OFFSET(mf_Beetle), MT_BOOL, 0, NULL },
	{ '1', 'd', 8, 12, 1, OFFSET(mf_Fly), MT_BOOL, 0, NULL },
	{ '1', 'e', 9, 12, 1, OFFSET(mf_Locust), MT_BOOL, 0, NULL },
	{ '1', 'f',10, 12, 1, OFFSET(mf_Snake), MT_BOOL, 0, NULL },
	{ '1', 'g',11, 12, 1, OFFSET(mf_Spider), MT_BOOL, 0, NULL },
	{ '1', 'h',12, 12, 1, OFFSET(mf_Worm), MT_BOOL, 0, NULL },

	{ '1', 'i', 2, 27, 1, OFFSET(mf_Human), MT_BOOL, 0, NULL },
	{ '1', 'j', 3, 27, 1, OFFSET(mf_Elf), MT_BOOL, 0, NULL },
	{ '1', 'k', 4, 27, 1, OFFSET(mf_Dwarf), MT_BOOL, 0, NULL },
	{ '1', 'l', 5, 27, 1, OFFSET(mf_Halfling), MT_BOOL, 0, NULL },
	{ '1', 'm', 6, 27, 1, OFFSET(mf_Pixie), MT_BOOL, 0, NULL },
	{ '1', 'n', 7, 27, 1, OFFSET(mf_Vampire), MT_BOOL, 0, NULL },
	{ '1', 'o', 8, 27, 1, OFFSET(mf_Gargolye), MT_BOOL, 0, NULL },
	{ '1', 'p', 9, 27, 1, OFFSET(mf_Ghoul), MT_BOOL, 0, NULL },
	{ '1', 'q',10, 27, 1, OFFSET(mf_Gnoll), MT_BOOL, 0, NULL },
	{ '1', 'r',11, 27, 1, OFFSET(mf_Gnome), MT_BOOL, 0, NULL },
	{ '1', 's',12, 27, 1, OFFSET(mf_Goblin), MT_BOOL, 0, NULL },

	{ '1', 't', 2, 42, 1, OFFSET(mf_Neand), MT_BOOL, 0, NULL },
	{ '1', 'u', 3, 42, 1, OFFSET(mf_Orc), MT_BOOL, 0, NULL },
	{ '1', 'v', 4, 42, 1, OFFSET(mf_Skeleton), MT_BOOL, 0, NULL },
	{ '1', 'w', 5, 42, 1, OFFSET(mf_Thoul), MT_BOOL, 0, NULL },
	{ '1', 'x', 6, 42, 1, OFFSET(mf_Undead), MT_BOOL, 0, NULL },
	{ '1', 'y', 7, 42, 1, OFFSET(mf_Zombie), MT_BOOL, 0, NULL },
	{ '1', 'z', 8, 42, 1, OFFSET(mf_Ape), MT_BOOL, 0, NULL },
	{ '1', 'A', 9, 42, 1, OFFSET(mf_Baboon), MT_BOOL, 0, NULL },
	{ '1', 'B',10, 42, 1, OFFSET(mf_Bat), MT_BOOL, 0, NULL },
	{ '1', 'C',11, 42, 1, OFFSET(mf_Bear), MT_BOOL, 0, NULL },
	{ '1', 'D',12, 42, 1, OFFSET(mf_Boar), MT_BOOL, 0, NULL },

	{ '1', 'E', 2, 57, 1, OFFSET(mf_Avis), MT_BOOL, 0, NULL },
	{ '1', 'F', 3, 57, 1, OFFSET(mf_BugBear), MT_BOOL, 0, NULL },
	{ '1', 'G', 4, 57, 1, OFFSET(mf_Dragon), MT_BOOL, 0, NULL },
	{ '1', 'H', 5, 57, 1, OFFSET(mf_Rust), MT_BOOL, 0, NULL },
	{ '1', 'I', 6, 57, 1, OFFSET(mf_Shadow), MT_BOOL, 0, NULL },
	{ '1', 'J', 7, 57, 1, OFFSET(mf_ShapeShifter), MT_BOOL, 0, NULL },
	{ '1', 'K', 8, 57, 1, OFFSET(mf_Shrieker), MT_BOOL, 0, NULL },
	{ '1', 'L', 9, 57, 1, OFFSET(mf_Stirge), MT_BOOL, 0, NULL },
	{ '1', 'M',10, 57, 1, OFFSET(mf_Wight), MT_BOOL, 0, NULL },
	{ '1', 'N',11, 57, 1, OFFSET(mf_Spirit), MT_BOOL, 0, NULL },
	{ '1', 'O',12, 57, 1, OFFSET(mf_Rodent), MT_BOOL, 0, NULL },

	{ '1', 'P', 2, 72, 1, OFFSET(mf_Amph), MT_BOOL, 0, NULL },
	{ '1', 'Q', 3, 72, 1, OFFSET(mf_Bovine), MT_BOOL, 0, NULL },
	{ '1', 'R', 4, 72, 1, OFFSET(mf_Canine), MT_BOOL, 0, NULL },
	{ '1', 'S', 5, 72, 1, OFFSET(mf_Crust), MT_BOOL, 0, NULL },
	{ '1', 'T', 6, 72, 1, OFFSET(mf_Feline), MT_BOOL, 0, NULL },
	{ '1', 'U', 7, 72, 1, OFFSET(mf_Fish), MT_BOOL, 0, NULL },
	{ '1', 'V', 8, 72, 1, OFFSET(mf_Insect), MT_BOOL, 0, NULL },
	{ '1', 'W', 9, 72, 1, OFFSET(mf_Mammal), MT_BOOL, 0, NULL },
	{ '1', 'X',10, 72, 1, OFFSET(mf_Porcine), MT_BOOL, 0, NULL },
	{ '1', 'Y',11, 72, 1, OFFSET(mf_Reptile), MT_BOOL, 0, NULL },
	{ '1', 'Z',12, 72, 1, OFFSET(mf_Trog), MT_BOOL, 0, NULL },

	{ '1', '1',14, 12, 1, OFFSET(mf_Golem), MT_BOOL, 0, NULL },
	{ '1', '2',15, 12, 1, OFFSET(mf_Cat), MT_BOOL, 0, NULL },
	{ '1', '3',16, 12, 1, OFFSET(mf_Dog), MT_BOOL, 0, NULL },
	{ '1', '4',17, 12, 1, OFFSET(mf_Horse), MT_BOOL, 0, NULL },
	{ '1', '5',18, 12, 1, OFFSET(mf_Wolf), MT_BOOL, 0, NULL },

	{ '1', '6',14, 27, 1, OFFSET(mf_Rat), MT_BOOL, 0, NULL },
	{ '1', '7',15, 27, 1, OFFSET(mf_Gorgon), MT_BOOL, 0, NULL },
	{ '1', '8',16, 27, 1, OFFSET(mf_Harpy), MT_BOOL, 0, NULL },
	{ '1', '9',17, 27, 1, OFFSET(mf_HobGob), MT_BOOL, 0, NULL },

	{ '1', '$',14, 42, 1, OFFSET(mf_Ferret), MT_BOOL, 0, NULL },
	{ '1', '~',15, 42, 1, OFFSET(mf_Kobold), MT_BOOL, 0, NULL },
	{ '1', '&',16, 42, 1, OFFSET(mf_Gel), MT_BOOL, 0, NULL },

	{ '1', '*',14, 56, 1, OFFSET(mf_Mold), MT_BOOL, 0, NULL },
	{ '1', '+',15, 56, 1, OFFSET(mf_Ooze), MT_BOOL, 0, NULL },
	{ '1', ':',16, 56, 1, OFFSET(mf_Mule), MT_BOOL, 0, NULL },
	{ '1', '^',17, 56, 1, OFFSET(mf_Shrew), MT_BOOL, 0, NULL },

	{ '1', '%',14, 72, 1, OFFSET(mf_Magical), MT_BOOL, 0, NULL },
	{ '1', '_',15, 72, 1, OFFSET(mf_Slime), MT_BOOL, 0, NULL },
	{ '1', '#',16, 72, 1, OFFSET(mf_Minotaur), MT_BOOL, 0, NULL },
	{ '1', '!',17, 72, 1, OFFSET(mf_LizardMan), MT_BOOL, 0, NULL },
	{ '1', '@',18, 72, 1, OFFSET(mf_Lycan), MT_BOOL, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
};

#endif

CMenuData	*PlrMenuData [] = { PlrPage_A, PlrPage_B, /* PlrPage_C,
								PlrPage_D, PlrPage_E, PlrPage_F, */ NULL };