/**************************************************************************** * [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 };