/**************************************************************************** * [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 Object Menu Implementation file * ****************************************************************************/ #include "stdafx.h" #define OBJMENU_CPP #include "smaug.h" #include "SysData.h" #include "mobiles.h" #include "affect.h" #include "objects.h" #include "rooms.h" #include "class.h" #include "objectmenu.h" #include "descriptor.h" #include "character.h" CMenuData *ObjMenuData []; char *GetItemString (int item_number, int which_string); void SetRisAffect (char* ris, int apply, CAffectList& AList); void SetAffected (int bit, CAffectList& AList); void CObjectMenu::Display (CCharacter& Ch, int page) { m_HelpMenu = DIM (ObjMenus) - 1; m_PageNr = page; if (m_PageNr < 0 || m_PageNr > m_HelpMenu) then m_PageNr = m_HelpMenu; m_CurrPageLines = GetLineCount (ObjMenus [m_PageNr]); m_pPageData = ObjMenuData [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 (ObjMenus [m_PageNr]); // fill in fields DisplayData (Ch); } void CObjectMenu::DisplayData (CCharacter& Ch) { char buf [MAX_STRING_LENGTH]; // Write in the object name sprintf (buf, "\x1b[1;35H[%5u:%-10.10s]-----[%c]", m_Vnum, ma_Name, m_bProto ? 'P' : 'N'); Ch.GetDesc ()->WriteToBuffer (buf); m_Base [0] = (char*) this; m_Base [1] = NULL; CSmaugMenu::DisplayData (Ch); } BOOL CObjectMenu::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 CObjectMenu::Save (CCharacter& Ch) { CObjData &Obj = *m_pObj; CObjIndexData &Idx = *Obj.pIndexData; // first see if the object still exists if (! Idx.m_ObjList.Find (m_pObj)) { Ch.SendText ("Object no longer exists, Cannot save."); return; } // Save a-page items Obj.SetName (ma_Name); Obj.SetShortDescr (ma_Short); Obj.SetDescription (ma_Desc); Obj.SetActionDescr (ma_ActDesc); Obj.SetLevel (ma_Level); Obj.weight = ma_Weight; Obj.cost = ma_Cost; if (m_bProto) { Idx.SetName (ma_Name); Idx.SetShortDescr (ma_Short); Idx.SetDescription (ma_Desc); Idx.SetActionDescr (ma_ActDesc); Idx.level = ma_Level; Idx.weight = ma_Weight; Idx.cost = ma_Cost; } for (int i=0; i < 6; ++i) { Obj.value [i] = ma_Value [i]; if (m_bProto) Idx.value [i] = ma_Value [i]; } // Save b-page items Obj.item_type = 0; // start with none if (m_bProto) Idx.item_type = 0; #define ISET(aa,bb) if (aa) { \ Obj.item_type |= bb; \ if (m_bProto) \ Idx.item_type |= bb; \ } ISET (mb_Fountain, ITEM_FOUNTAIN); ISET (mb_Furniture, ITEM_FURNITURE); ISET (mb_Armor, ITEM_ARMOR); ISET (mb_Food, ITEM_FOOD); ISET (mb_Money, ITEM_MONEY); ISET (mb_Potion, ITEM_POTION); ISET (mb_Chain, ITEM_PULLCHAIN); ISET (mb_Weapon, ITEM_WEAPON); ISET (mb_Map, ITEM_MAP); ISET (mb_Light, ITEM_LIGHT); ISET (mb_Button, ITEM_BUTTON); ISET (mb_Treasure, ITEM_TREASURE); ISET (mb_Herb, ITEM_HERB); ISET (mb_Trash, ITEM_TRASH); ISET (mb_Switch, ITEM_SWITCH); ISET (mb_Container, ITEM_CONTAINER); ISET (mb_Wand, ITEM_WAND); ISET (mb_Scroll, ITEM_SCROLL); ISET (mb_Staff, ITEM_STAFF); ISET (mb_BloodStain, ITEM_BLOODSTAIN); ISET (mb_Pill, ITEM_PILL); ISET (mb_Blood, ITEM_BLOOD); ISET (mb_Dial, ITEM_DIAL); ISET (mb_OldTrap, ITEM_TRAP); ISET (mb_Key, ITEM_KEY); ISET (mb_Incense, ITEM_INCENSE); ISET (mb_Lever, ITEM_LEVER); ISET (mb_CorpsePC, ITEM_CORPSE_PC); ISET (mb_Pipe, ITEM_PIPE); ISET (mb_Scraps, ITEM_SCRAPS); ISET (mb_Trap, ITEM_TRAP); ISET (mb_CorpseNPC, ITEM_CORPSE_NPC); ISET (mb_Book, ITEM_BOOK); ISET (mb_Match, ITEM_MATCH); ISET (mb_DrinkCon, ITEM_DRINK_CON); ISET (mb_Fire, ITEM_FIRE); ISET (mb_HerbCon, ITEM_HERB_CON); ISET (mb_Boat, ITEM_BOAT); ISET (mb_Rune, ITEM_RUNE); ISET (mb_RunePouch, ITEM_RUNEPOUCH); // Save c-page items CAffectList& AList = m_bProto ? Idx.AffList : Obj.AffList; AList.RemoveAll (); #define ASET(aa,bb) if(aa) SetAffect(AList,bb,aa); ASET (mc_SavingPoison, APPLY_SAVING_POISON); ASET (mc_Age, APPLY_AGE); ASET (mc_Strength, APPLY_STR); ASET (mc_SavingRod, APPLY_SAVING_ROD); ASET (mc_Class, APPLY_CLASS); ASET (mc_Intelligence, APPLY_INT); ASET (mc_SavingPara, APPLY_SAVING_PARA); ASET (mc_Level, APPLY_LEVEL); ASET (mc_Wisdom, APPLY_WIS); ASET (mc_SavingBreath, APPLY_SAVING_BREATH); ASET (mc_Sex, APPLY_SEX); ASET (mc_Dexterity, APPLY_DEX); ASET (mc_SavingSpell, APPLY_SAVING_SPELL); ASET (mc_Height, APPLY_HEIGHT); ASET (mc_Constitution, APPLY_CON); ASET (mc_Weight, APPLY_WEIGHT); ASET (mc_Charm, APPLY_CHA); ASET (mc_Mana, APPLY_MANA); ASET (mc_Ac, APPLY_AC); ASET (mc_Hit, APPLY_HIT); ASET (mc_Hitroll, APPLY_HITROLL); ASET (mc_Gold, APPLY_GOLD); ASET (mc_Move, APPLY_MOVE); ASET (mc_Damroll, APPLY_DAMROLL); ASET (mc_Experience, APPLY_EXP); #define RSET(aa,bb) SetRisAffect(aa,bb,AList); RSET (mc_rFire, RIS_FIRE); RSET (mc_rCold, RIS_COLD); RSET (mc_rElectricity, RIS_ELECTRICITY); RSET (mc_rEnergy, RIS_ENERGY); RSET (mc_rPoison, RIS_POISON); RSET (mc_rBlunt, RIS_BLUNT); RSET (mc_rPierce, RIS_PIERCE); RSET (mc_rSlash, RIS_SLASH); RSET (mc_rAcid, RIS_ACID); RSET (mc_rNonMagic, RIS_NONMAGIC); RSET (mc_rDrain, RIS_DRAIN); RSET (mc_rSleep, RIS_SLEEP); RSET (mc_rCharm, RIS_CHARM); RSET (mc_rHold, RIS_HOLD); RSET (mc_rMagic, RIS_MAGIC); RSET (mc_rPlus1, RIS_PLUS1); RSET (mc_rPlus2, RIS_PLUS2); RSET (mc_rPlus3, RIS_PLUS3); RSET (mc_rPlus4, RIS_PLUS4); RSET (mc_rPlus5, RIS_PLUS5); RSET (mc_rPlus6, RIS_PLUS6); // Save d-page items #define AFSET(aa,bb) if (aa) SetAffected (bb, AList); AFSET (md_Blind, AFF_BLIND); AFSET (md_DetectInv, AFF_DETECT_INVIS); AFSET (md_DetectEvil, AFF_DETECT_EVIL); AFSET (md_DetectMagic, AFF_DETECT_MAGIC); AFSET (md_DetectHidden, AFF_DETECT_HIDDEN); AFSET (md_Hold, AFF_HOLD); AFSET (md_Sanctuary, AFF_SANCTUARY); AFSET (md_FaerieFire, AFF_FAERIE_FIRE); AFSET (md_Infra, AFF_INFRARED); AFSET (md_Curse, AFF_CURSE); AFSET (md_Flaming, AFF_FLAMING); AFSET (md_Poison, AFF_POISON); AFSET (md_Protect, AFF_PROTECT); AFSET (md_Paralysis, AFF_PARALYSIS); AFSET (md_Sleep, AFF_SLEEP); AFSET (md_Hide, AFF_HIDE); AFSET (md_Sneak, AFF_SNEAK); AFSET (md_Charm, AFF_CHARM); AFSET (md_Fly, AFF_FLYING); AFSET (md_PassDoor, AFF_PASS_DOOR); AFSET (md_TrueSight, AFF_TRUESIGHT); AFSET (md_DetectTraps, AFF_DETECTTRAPS); AFSET (md_Scry, AFF_SCRYING); AFSET (md_FireShield, AFF_FIRESHIELD); AFSET (md_ShockShield, AFF_SHOCKSHIELD); AFSET (md_Float, AFF_FLOATING); AFSET (md_Invisible, AFF_INVISIBLE); // Save e-page items Obj.m_ExtraFlags.Empty (); // clear them all then set the marked ones if (m_bProto) { Idx.m_ExtraFlags.Empty (); Obj.SetPrototype (); Idx.SetPrototype (); } #define ESET(aa,bb) if (aa) { \ Obj.m_ExtraFlags.SetBit (bb); \ if (m_bProto) \ Idx.m_ExtraFlags.SetBit (bb); \ } ESET (me_Evil, ITEM_EVIL); ESET (me_AntiGood, ITEM_ANTI_GOOD); ESET (me_NoDrop, ITEM_NODROP); ESET (me_Invis, ITEM_INVIS); ESET (me_AntiEvil, ITEM_ANTI_EVIL); ESET (me_NoRemove, ITEM_NOREMOVE); ESET (me_Hidden, ITEM_HIDDEN); ESET (me_AntiNeutral, ITEM_ANTI_NEUTRAL); ESET (me_Inventory, ITEM_INVENTORY); ESET (me_Glow, ITEM_GLOW); ESET (me_Bless, ITEM_BLESS); ESET (me_Donation, ITEM_DONATION); ESET (me_Hum, ITEM_HUM); ESET (me_Metal, ITEM_METAL); ESET (me_ClanObj, ITEM_CLANOBJECT); ESET (me_Dark, ITEM_DARK); ESET (me_Organic, ITEM_ORGANIC); ESET (me_ClanCorpse, ITEM_CLANCORPSE); ESET (me_Magic, ITEM_MAGIC); ESET (me_Loyal, ITEM_LOYAL); ESET (me_DeathRot, ITEM_DEATHROT); Obj.wear_flags = 0; // clear them all then set the marked ones if (m_bProto) Idx.wear_flags = 0; #define WSET(aa,bb) if (aa) { \ Obj.wear_flags |= bb; \ if (m_bProto) \ Idx.wear_flags |= bb; \ } WSET (me_Take, ITEM_TAKE); WSET (me_Finger, ITEM_WEAR_FINGER); WSET (me_Neck, ITEM_WEAR_NECK); WSET (me_Body, ITEM_WEAR_BODY); WSET (me_Head, ITEM_WEAR_HEAD); WSET (me_Legs, ITEM_WEAR_LEGS); WSET (me_Feet, ITEM_WEAR_FEET); WSET (me_Hands, ITEM_WEAR_HANDS); WSET (me_Arms, ITEM_WEAR_ARMS); WSET (me_Shield, ITEM_WEAR_SHIELD); WSET (me_About, ITEM_WEAR_ABOUT); WSET (me_Waist, ITEM_WEAR_WAIST); WSET (me_Wrist, ITEM_WEAR_WRIST); WSET (me_Wield, ITEM_WIELD); WSET (me_Hold, ITEM_HOLD); WSET (me_Dual, ITEM_DUAL_WIELD); WSET (me_Ears, ITEM_WEAR_EARS); WSET (me_Eyes, ITEM_WEAR_EYES); // Save f-page items CBitVector anti; for (int cl=0; cl < ClassTable.GetCount (); ++cl) if (mf_AntiClass [cl]) anti.SetBit (cl); if (m_bProto) Idx.SetAntiClassFlags (anti); else Obj.SetAntiClassFlags (anti); } CObjectMenu::CObjectMenu (CObjData& Obj) { ClearAddrRange (&ma_Level, &mf_AntiClass, sizeof (mf_AntiClass)); CObjIndexData &Idx = *Obj.pIndexData; m_pObj = &Obj; m_Vnum = Idx.vnum; // keep vnum for display m_bProto = Idx.IsPrototype (); // load local a-page items ma_Name = m_bProto ? Idx.GetName () : Obj.GetName (); ma_Short = m_bProto ? Idx.GetShortDescr () : Obj.GetShortDescr (); ma_Desc = m_bProto ? Idx.GetDescription () : Obj.GetDescription (); ma_ActDesc = m_bProto ? Idx.GetActionDescr () : Obj.GetActionDescr (); ma_Level = m_bProto ? Idx.level : Obj.GetLevel (); int *Value = m_bProto ? Idx.value : Obj.value; for (int i=0; i < 6; ++i) ma_Value [i] = Value [i]; ma_Weight = m_bProto ? Idx.weight : Obj.weight; ma_Cost = m_bProto ? Idx.cost : Obj.cost; short IType = m_bProto ? Idx.item_type : Obj.item_type; ma_pItemStr1 = GetItemString (IType, 1); ma_pItemStr2 = GetItemString (IType, 2); ma_pItemStr3 = GetItemString (IType, 3); ma_pItemStr4 = GetItemString (IType, 4); // load local b-page items mb_Fountain = IType == ITEM_FOUNTAIN; mb_Furniture = IType == ITEM_FURNITURE; mb_Armor = IType == ITEM_ARMOR; mb_Food = IType == ITEM_FOOD; mb_Money = IType == ITEM_MONEY; mb_Potion = IType == ITEM_POTION; mb_Chain = IType == ITEM_PULLCHAIN; mb_Weapon = IType == ITEM_WEAPON; mb_Map = IType == ITEM_MAP; mb_Light = IType == ITEM_LIGHT; mb_Button = IType == ITEM_BUTTON; mb_Treasure = IType == ITEM_TREASURE; mb_Herb = IType == ITEM_HERB; mb_Trash = IType == ITEM_TRASH; mb_Switch = IType == ITEM_SWITCH; mb_Container = IType == ITEM_CONTAINER; mb_Wand = IType == ITEM_WAND; mb_Scroll = IType == ITEM_SCROLL; mb_Staff = IType == ITEM_STAFF; mb_BloodStain = IType == ITEM_BLOODSTAIN; mb_Pill = IType == ITEM_PILL; mb_Blood = IType == ITEM_BLOOD; mb_Dial = IType == ITEM_DIAL; mb_OldTrap = IType == ITEM_TRAP; mb_Key = IType == ITEM_KEY; mb_Incense = IType == ITEM_INCENSE; mb_Lever = IType == ITEM_LEVER; mb_CorpsePC = IType == ITEM_CORPSE_PC; mb_Pipe = IType == ITEM_PIPE; mb_Scraps = IType == ITEM_SCRAPS; mb_Trap = IType == ITEM_TRAP; mb_CorpseNPC = IType == ITEM_CORPSE_NPC; mb_Book = IType == ITEM_BOOK; mb_Match = IType == ITEM_MATCH; mb_DrinkCon = IType == ITEM_DRINK_CON; mb_Portal = FALSE; mb_Pen = FALSE; mb_Fire = IType == ITEM_FIRE; mb_HerbCon = IType == ITEM_HERB_CON; mb_fireweapon = FALSE; mb_Boat = IType == ITEM_BOAT; mb_Rune = IType == ITEM_RUNE; mb_RunePouch = IType == ITEM_RUNEPOUCH; mb_Missile = FALSE; // load local c-page items CAffectList& AList = m_bProto ? Idx.AffList : Obj.AffList; mc_SavingPoison = GetAffect (AList, APPLY_SAVING_POISON); mc_Age = GetAffect (AList, APPLY_AGE); mc_Strength = GetAffect (AList, APPLY_STR); mc_SavingRod = GetAffect (AList, APPLY_SAVING_ROD); mc_Class = GetAffect (AList, APPLY_CLASS); mc_Intelligence = GetAffect (AList, APPLY_INT); mc_SavingPara = GetAffect (AList, APPLY_SAVING_PARA); mc_Level = GetAffect (AList, APPLY_LEVEL); mc_Wisdom = GetAffect (AList, APPLY_WIS); mc_SavingBreath = GetAffect (AList, APPLY_SAVING_BREATH); mc_Sex = GetAffect (AList, APPLY_SEX); mc_Dexterity = GetAffect (AList, APPLY_DEX); mc_SavingSpell = GetAffect (AList, APPLY_SAVING_SPELL); mc_Height = GetAffect (AList, APPLY_HEIGHT); mc_Constitution = GetAffect (AList, APPLY_CON); mc_Weight = GetAffect (AList, APPLY_WEIGHT); mc_Charm = GetAffect (AList, APPLY_CHA); mc_Mana = GetAffect (AList, APPLY_MANA); mc_Ac = GetAffect (AList, APPLY_AC); mc_Hit = GetAffect (AList, APPLY_HIT); mc_Hitroll = GetAffect (AList, APPLY_HITROLL); mc_Gold = GetAffect (AList, APPLY_GOLD); mc_Move = GetAffect (AList, APPLY_MOVE); mc_Damroll = GetAffect (AList, APPLY_DAMROLL); mc_Experience = GetAffect (AList, APPLY_EXP); SetRisString (mc_rFire, AList, RIS_FIRE); SetRisString (mc_rCold, AList, RIS_COLD); SetRisString (mc_rElectricity, AList, RIS_ELECTRICITY); SetRisString (mc_rEnergy, AList, RIS_ENERGY); SetRisString (mc_rPoison, AList, RIS_POISON); SetRisString (mc_rBlunt, AList, RIS_BLUNT); SetRisString (mc_rPierce, AList, RIS_PIERCE); SetRisString (mc_rSlash, AList, RIS_SLASH); SetRisString (mc_rAcid, AList, RIS_ACID); SetRisString (mc_rNonMagic, AList, RIS_NONMAGIC); SetRisString (mc_rDrain, AList, RIS_DRAIN); SetRisString (mc_rSleep, AList, RIS_SLEEP); SetRisString (mc_rCharm, AList, RIS_CHARM); SetRisString (mc_rHold, AList, RIS_HOLD); SetRisString (mc_rMagic, AList, RIS_MAGIC); SetRisString (mc_rPlus1, AList, RIS_PLUS1); SetRisString (mc_rPlus2, AList, RIS_PLUS2); SetRisString (mc_rPlus3, AList, RIS_PLUS3); SetRisString (mc_rPlus4, AList, RIS_PLUS4); SetRisString (mc_rPlus5, AList, RIS_PLUS5); SetRisString (mc_rPlus6, AList, RIS_PLUS6); // load local d-page items md_Blind = GetAffected (AList, AFF_BLIND); md_DetectInv = GetAffected (AList, AFF_DETECT_INVIS); md_DetectEvil = GetAffected (AList, AFF_DETECT_EVIL); md_DetectMagic = GetAffected (AList, AFF_DETECT_MAGIC); md_DetectHidden = GetAffected (AList, AFF_DETECT_HIDDEN); md_Hold = GetAffected (AList, AFF_HOLD); md_Sanctuary = GetAffected (AList, AFF_SANCTUARY); md_FaerieFire = GetAffected (AList, AFF_FAERIE_FIRE); md_Infra = GetAffected (AList, AFF_INFRARED); md_Curse = GetAffected (AList, AFF_CURSE); md_Flaming = GetAffected (AList, AFF_FLAMING); md_Poison = GetAffected (AList, AFF_POISON); md_Protect = GetAffected (AList, AFF_PROTECT); md_Paralysis = GetAffected (AList, AFF_PARALYSIS); md_Sleep = GetAffected (AList, AFF_SLEEP); md_Hide = GetAffected (AList, AFF_HIDE); md_Sneak = GetAffected (AList, AFF_SNEAK); md_Charm = GetAffected (AList, AFF_CHARM); md_Fly = GetAffected (AList, AFF_FLYING); md_PassDoor = GetAffected (AList, AFF_PASS_DOOR); md_TrueSight = GetAffected (AList, AFF_TRUESIGHT); md_DetectTraps = GetAffected (AList, AFF_DETECTTRAPS); md_Scry = GetAffected (AList, AFF_SCRYING); md_FireShield = GetAffected (AList, AFF_FIRESHIELD); md_ShockShield = GetAffected (AList, AFF_SHOCKSHIELD); md_Float = GetAffected (AList, AFF_FLOATING); md_Invisible = GetAffected (AList, AFF_INVISIBLE); // load local e-page items #define TST(aa) m_bProto ? Idx.aa() : Obj.aa () me_Evil = TST(IsEvil); me_AntiGood = TST(IsAntiGood); me_NoDrop = TST(IsNoDrop); me_Invis = TST(IsInvisible); me_AntiEvil = TST(IsAntiEvil); me_NoRemove = TST(IsNoRemove); me_Hidden = TST(IsHidden); me_AntiNeutral = TST(IsAntiNeutral); me_Inventory = TST(IsInventory); me_Glow = TST(IsGlowing); me_Bless = TST(IsBlessed); me_Donation = TST(IsDonation); me_Hum = TST(IsHumming); me_Metal = TST(IsMetal); me_ClanObj = TST(IsClanObject); me_Dark = TST(IsDark); me_Organic = TST(IsOrganic); me_ClanCorpse = TST(IsClanCorpse); me_Magic = TST(IsMagic); me_Loyal = TST(IsLoyal); me_DeathRot = TST(IsDeathrot); int WearFlags = m_bProto ? Idx.wear_flags : Obj.wear_flags; me_Take = IS_SET (WearFlags, ITEM_TAKE); me_Finger = IS_SET (WearFlags, ITEM_WEAR_FINGER); me_Neck = IS_SET (WearFlags, ITEM_WEAR_NECK); me_Body = IS_SET (WearFlags, ITEM_WEAR_BODY); me_Head = IS_SET (WearFlags, ITEM_WEAR_HEAD); me_Legs = IS_SET (WearFlags, ITEM_WEAR_LEGS); me_Feet = IS_SET (WearFlags, ITEM_WEAR_FEET); me_Hands = IS_SET (WearFlags, ITEM_WEAR_HANDS); me_Arms = IS_SET (WearFlags, ITEM_WEAR_ARMS); me_Shield = IS_SET (WearFlags, ITEM_WEAR_SHIELD); me_About = IS_SET (WearFlags, ITEM_WEAR_ABOUT); me_Waist = IS_SET (WearFlags, ITEM_WEAR_WAIST); me_Wrist = IS_SET (WearFlags, ITEM_WEAR_WRIST); me_Wield = IS_SET (WearFlags, ITEM_WIELD); me_Hold = IS_SET (WearFlags, ITEM_HOLD); me_Dual = IS_SET (WearFlags, ITEM_DUAL_WIELD); me_Ears = IS_SET (WearFlags, ITEM_WEAR_EARS); me_Eyes = IS_SET (WearFlags, ITEM_WEAR_EYES); // load local f-page items memset (mf_AntiClass, 0, sizeof (mf_AntiClass)); CBitVector anti = m_bProto ? Idx.GetAntiClassFlags () : Obj.GetAntiClassFlags (); for (int cl=0; cl < 32 && cl < ClassTable.GetCount (); ++cl) mf_AntiClass [cl] = anti.IsSet (cl); } #ifdef XXXX char buf [80]; int len; extern CMenuData ObjPage_F []; // forward declaration char *pPagef = new char [strlen (ObjMenus [5])]; strcpy (pPagef, ObjMenus [5]); ObjMenus [5] = pPagef; for (int cl=0; cl < 32; ++cl) { if (cl < ClassTable.GetCount ()) { mf_AntiClass [cl] = anti.IsSet (cl); len = sprintf (buf, "%c]%-10.10s( )", cl + 'a', ClassTable.GetName (cl)); } else len = sprintf (buf, " "); char *ptr = pPagef + 71 * (ObjPage_F [cl].y - 1); ptr += ObjPage_F [cl].x - 14; memcpy (ptr, buf, len); } #endif void CObjectMenu::InitObjectMenu () { char buf [80]; int len; extern CMenuData ObjPage_F []; // forward declaration m_pSavePagef = ObjMenus [5]; char *pPagef = new char [1 + strlen (ObjMenus [5])]; strcpy (pPagef, ObjMenus [5]); ObjMenus [5] = pPagef; for (int cl=0; cl < 32; ++cl) { if (cl < ClassTable.GetCount ()) { len = sprintf (buf, "%c]%-10.10s( )", cl + 'a', ClassTable.GetName (cl)); } else len = sprintf (buf, " "); char *ptr = pPagef + 71 * (ObjPage_F [cl].y - 1); ptr += ObjPage_F [cl].x - 14; memcpy (ptr, buf, len); } } void CObjectMenu::UnInitObjectMenu () { delete [] ObjMenus [5]; ObjMenus [5] = m_pSavePagef; } void SetRisAffect (char* ris, int bit, CAffectList& AList) { int apply = 0; for (int i=0; i < 3; ++i) { if (ris [i] > '.') { apply = APPLY_RESISTANT + i; CAffectData *aff = AList.GetAffect (apply); if (! aff) { aff = new CAffectData; AList.AddTail (aff); aff->location = apply; ++top_affect; } SET_BIT (aff->modifier, bit); } } } void SetAffected (int bit, CAffectList& AList) { CAffectData *aff = new CAffectData; aff->location = APPLY_AFFECT; AList.AddTail (aff); ++top_affect; SET_BIT (aff->modifier, 1 << bit); } #define OFFSET(aa) offsetof(CObjectMenu,aa) CMenuData ObjPage_A [] = { { '1', 'a', 2, 20, 52, OFFSET(ma_Name), MT_CSTRING, 0, NULL }, { '1', 'b', 3, 21, 3, OFFSET(ma_Level), MT_INT, 0, NULL }, { '1', 'c', 4, 11, 62, OFFSET(ma_Short), MT_CSTRING, 0, NULL }, { '1', 'd', 5, 10, 62, OFFSET(ma_Desc), MT_CSTRING, 0, MenuStringEditFn }, { '1', 'e', 6, 16, 56, OFFSET(ma_ActDesc), MT_CSTRING, 0, MenuStringEditFn }, { '2', 'a', 10, 13, 5, OFFSET(ma_Value[0]), MT_INT, 0, NULL }, { 0, 0, 10, 23, 19, OFFSET(ma_pItemStr1), MT_STRING, 0, NULL }, { '2', 'b', 11, 13, 5, OFFSET(ma_Value[1]), MT_INT, 0, NULL }, { 0, 0, 11, 23, 19, OFFSET(ma_pItemStr2), MT_STRING, 0, NULL }, { '2', 'c', 12, 13, 5, OFFSET(ma_Value[2]), MT_INT, 0, NULL }, { 0, 0, 12, 23, 19, OFFSET(ma_pItemStr3), MT_STRING, 0, NULL }, { '2', 'd', 13, 13, 5, OFFSET(ma_Value[3]), MT_INT, 0, NULL }, { 0, 0, 13, 23, 19, OFFSET(ma_pItemStr4), MT_STRING, 0, NULL }, { '3', 'a', 10, 59, 5, OFFSET(ma_Weight), MT_INT, 0, NULL }, { '3', 'b', 11, 59, 5, OFFSET(ma_Cost), MT_INT, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData ObjPage_B [] = { { '1', 'a', 6, 9, 1, OFFSET(mb_Herb), MT_BOOL, 0, NULL }, { '1', 'b', 7, 9, 1, OFFSET(mb_Wand), MT_BOOL, 0, NULL }, { '1', 'c', 8, 9, 1, OFFSET(mb_Pill), MT_BOOL, 0, NULL }, { '1', 'd', 9, 9, 1, OFFSET(mb_Key), MT_BOOL, 0, NULL }, { '1', 'e', 10, 9, 1, OFFSET(mb_Pipe), MT_BOOL, 0, NULL }, { '1', 'f', 11, 9, 1, OFFSET(mb_Book), MT_BOOL, 0, NULL }, { '1', 'g', 12, 9, 1, OFFSET(mb_Pen), MT_BOOL, 0, NULL }, { '1', 'h', 13, 9, 1, OFFSET(mb_Boat), MT_BOOL, 0, NULL }, { '1', 'i', 2, 23, 1, OFFSET(mb_Map), MT_BOOL, 0, NULL }, { '1', 'j', 3, 23, 1, OFFSET(mb_Armor), MT_BOOL, 0, NULL }, { '1', 'k', 4, 23, 1, OFFSET(mb_Potion), MT_BOOL, 0, NULL }, { '1', 'l', 5, 23, 1, OFFSET(mb_Light), MT_BOOL, 0, NULL }, { '1', 'm', 6, 23, 1, OFFSET(mb_Trash), MT_BOOL, 0, NULL }, { '1', 'n', 7, 23, 1, OFFSET(mb_Scroll), MT_BOOL, 0, NULL }, { '1', 'o', 8, 23, 1, OFFSET(mb_Blood), MT_BOOL, 0, NULL }, { '1', 'p', 9, 23, 1, OFFSET(mb_Incense), MT_BOOL, 0, NULL }, { '1', 'q', 10, 23, 1, OFFSET(mb_Scraps), MT_BOOL, 0, NULL }, { '1', 'r', 11, 23, 1, OFFSET(mb_Match), MT_BOOL, 0, NULL }, { '1', 's', 12, 23, 1, OFFSET(mb_Fire), MT_BOOL, 0, NULL }, { '1', 't', 13, 23, 1, OFFSET(mb_Rune), MT_BOOL, 0, NULL }, { '1', 'u', 2, 42, 1, OFFSET(mb_Fountain), MT_BOOL, 0, NULL }, { '1', 'v', 3, 42, 1, OFFSET(mb_Food), MT_BOOL, 0, NULL }, { '1', 'w', 4, 42, 1, OFFSET(mb_Chain), MT_BOOL, 0, NULL }, { '1', 'x', 5, 42, 1, OFFSET(mb_Button), MT_BOOL, 0, NULL }, { '1', 'y', 6, 42, 1, OFFSET(mb_Switch), MT_BOOL, 0, NULL }, { '1', 'z', 7, 42, 1, OFFSET(mb_Staff), MT_BOOL, 0, NULL }, { '1', 'A', 8, 42, 1, OFFSET(mb_Dial), MT_BOOL, 0, NULL }, { '1', 'B', 9, 42, 1, OFFSET(mb_Lever), MT_BOOL, 0, NULL }, { '1', 'C', 10, 42, 1, OFFSET(mb_Trap), MT_BOOL, 0, NULL }, { '1', 'D', 11, 42, 1, OFFSET(mb_DrinkCon), MT_BOOL, 0, NULL }, { '1', 'E', 12, 42, 1, OFFSET(mb_HerbCon), MT_BOOL, 0, NULL }, { '1', 'F', 13, 42, 1, OFFSET(mb_RunePouch), MT_BOOL, 0, NULL }, { '1', 'G', 2, 66, 1, OFFSET(mb_Furniture), MT_BOOL, 0, NULL }, { '1', 'H', 3, 66, 1, OFFSET(mb_Money), MT_BOOL, 0, NULL }, { '1', 'I', 4, 66, 1, OFFSET(mb_Weapon), MT_BOOL, 0, NULL }, { '1', 'J', 5, 66, 1, OFFSET(mb_Treasure), MT_BOOL, 0, NULL }, { '1', 'K', 6, 66, 1, OFFSET(mb_Container), MT_BOOL, 0, NULL }, { '1', 'L', 7, 66, 1, OFFSET(mb_BloodStain), MT_BOOL, 0, NULL }, { '1', 'M', 8, 66, 1, OFFSET(mb_OldTrap), MT_BOOL, 0, NULL }, { '1', 'N', 9, 66, 1, OFFSET(mb_CorpsePC), MT_BOOL, 0, NULL }, { '1', 'O', 10, 66, 1, OFFSET(mb_CorpseNPC), MT_BOOL, 0, NULL }, { '1', 'P', 11, 66, 1, OFFSET(mb_Portal), MT_BOOL, 0, NULL }, { '1', 'Q', 12, 66, 1, OFFSET(mb_fireweapon), MT_BOOL, 0, NULL }, { '1', 'R', 13, 66, 1, OFFSET(mb_Missile), MT_BOOL, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData ObjPage_C [] = { { '1', 'a', 2, 23, 2, OFFSET(mc_Strength), MT_INT, 0, NULL }, { '1', 'b', 3, 23, 2, OFFSET(mc_Intelligence), MT_INT, 0, NULL }, { '1', 'c', 4, 23, 2, OFFSET(mc_Wisdom), MT_INT, 0, NULL }, { '1', 'd', 5, 23, 2, OFFSET(mc_Dexterity), MT_INT, 0, NULL }, { '1', 'e', 6, 23, 2, OFFSET(mc_Constitution), MT_INT, 0, NULL }, { '1', 'f', 7, 23, 2, OFFSET(mc_Charm), MT_INT, 0, NULL }, { '1', 'g', 2, 45, 3, OFFSET(mc_SavingPoison), MT_INT, 0, NULL }, { '1', 'h', 3, 45, 3, OFFSET(mc_SavingRod), MT_INT, 0, NULL }, { '1', 'i', 4, 45, 3, OFFSET(mc_SavingPara), MT_INT, 0, NULL }, { '1', 'j', 5, 45, 3, OFFSET(mc_SavingBreath), MT_INT, 0, NULL }, { '1', 'k', 6, 45, 3, OFFSET(mc_SavingSpell), MT_INT, 0, NULL }, { '1', 'l', 2, 66, 3, OFFSET(mc_Age), MT_INT, 0, NULL }, { '1', 'm', 3, 66, 3, OFFSET(mc_Class), MT_INT, 0, NULL }, { '1', 'n', 4, 66, 3, OFFSET(mc_Level), MT_INT, 0, NULL }, { '1', 'o', 5, 66, 1, OFFSET(mc_Sex), MT_INT, 0, NULL }, { '1', 'p', 6, 66, 3, OFFSET(mc_Height), MT_INT, 0, NULL }, { '1', 'q', 7, 66, 3, OFFSET(mc_Weight), MT_INT, 0, NULL }, { '1', 'r', 9, 12, 4, OFFSET(mc_Mana), MT_INT, 0, NULL }, { '1', 's', 10, 12, 4, OFFSET(mc_Hit), MT_INT, 0, NULL }, { '1', 't', 11, 12, 4, OFFSET(mc_Move), MT_INT, 0, NULL }, { '1', 'u', 9, 41, 4, OFFSET(mc_Ac), MT_SINT, 0, NULL }, { '1', 'v', 10, 41, 4, OFFSET(mc_Hitroll), MT_INT, 0, NULL }, { '1', 'w', 11, 41, 4, OFFSET(mc_Damroll), MT_INT, 0, NULL }, { '1', 'x', 10, 63, 4, OFFSET(mc_Gold), MT_INT, 0, NULL }, { '1', 'y', 11, 63, 4, OFFSET(mc_Experience), MT_INT, 0, NULL }, { '2', 'a', 13, 22, 3, OFFSET(mc_rFire), MT_RIS, 0, NULL }, { '2', 'b', 14, 22, 3, OFFSET(mc_rCold), MT_RIS, 0, NULL }, { '2', 'c', 15, 22, 3, OFFSET(mc_rElectricity), MT_RIS, 0, NULL }, { '2', 'd', 16, 22, 3, OFFSET(mc_rEnergy), MT_RIS, 0, NULL }, { '2', 'e', 17, 22, 3, OFFSET(mc_rPoison), MT_RIS, 0, NULL }, { '2', 'f', 13, 34, 3, OFFSET(mc_rBlunt), MT_RIS, 0, NULL }, { '2', 'g', 14, 34, 3, OFFSET(mc_rPierce), MT_RIS, 0, NULL }, { '2', 'h', 15, 34, 3, OFFSET(mc_rSlash), MT_RIS, 0, NULL }, { '2', 'i', 16, 34, 3, OFFSET(mc_rAcid), MT_RIS, 0, NULL }, { '2', 'j', 17, 34, 3, OFFSET(mc_rNonMagic), MT_RIS, 0, NULL }, { '2', 'k', 13, 46, 3, OFFSET(mc_rDrain), MT_RIS, 0, NULL }, { '2', 'l', 14, 46, 3, OFFSET(mc_rSleep), MT_RIS, 0, NULL }, { '2', 'm', 15, 46, 3, OFFSET(mc_rCharm), MT_RIS, 0, NULL }, { '2', 'n', 16, 46, 3, OFFSET(mc_rHold), MT_RIS, 0, NULL }, { '2', 'o', 17, 46, 3, OFFSET(mc_rMagic), MT_RIS, 0, NULL }, { '2', 'p', 13, 58, 3, OFFSET(mc_rPlus1), MT_RIS, 0, NULL }, { '2', 'q', 13, 70, 3, OFFSET(mc_rPlus2), MT_RIS, 0, NULL }, { '2', 'r', 14, 70, 3, OFFSET(mc_rPlus3), MT_RIS, 0, NULL }, { '2', 's', 15, 70, 3, OFFSET(mc_rPlus4), MT_RIS, 0, NULL }, { '2', 't', 16, 70, 3, OFFSET(mc_rPlus5), MT_RIS, 0, NULL }, { '2', 'u', 17, 70, 3, OFFSET(mc_rPlus6), MT_RIS, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData ObjPage_D [] = { { '1', 'a', 8, 12, 1, OFFSET(md_Fly), MT_BOOL, 0, NULL }, { '1', 'b', 9, 12, 1, OFFSET(md_Scry), MT_BOOL, 0, NULL }, { '1', 'c', 10, 12, 1, OFFSET(md_Invisible), MT_BOOL, 0, NULL }, { '1', 'd', 3, 29, 1, OFFSET(md_Sleep), MT_BOOL, 0, NULL }, { '1', 'e', 4, 29, 1, OFFSET(md_Blind), MT_BOOL, 0, NULL }, { '1', 'f', 5, 29, 1, OFFSET(md_DetectMagic), MT_BOOL, 0, NULL }, { '1', 'g', 6, 29, 1, OFFSET(md_FaerieFire), MT_BOOL, 0, NULL }, { '1', 'h', 7, 29, 1, OFFSET(md_Poison), MT_BOOL, 0, NULL }, { '1', 'i', 8, 29, 1, OFFSET(md_Hide), MT_BOOL, 0, NULL }, { '1', 'j', 9, 29, 1, OFFSET(md_PassDoor), MT_BOOL, 0, NULL }, { '1', 'k', 10, 29, 1, OFFSET(md_FireShield), MT_BOOL, 0, NULL }, { '1', 'l', 3, 47, 1, OFFSET(md_Sanctuary), MT_BOOL, 0, NULL }, { '1', 'm', 4, 47, 1, OFFSET(md_DetectInv), MT_BOOL, 0, NULL }, { '1', 'n', 5, 47, 1, OFFSET(md_DetectHidden), MT_BOOL, 0, NULL }, { '1', 'o', 6, 47, 1, OFFSET(md_Infra), MT_BOOL, 0, NULL }, { '1', 'p', 7, 47, 1, OFFSET(md_Protect), MT_BOOL, 0, NULL }, { '1', 'q', 8, 47, 1, OFFSET(md_Sneak), MT_BOOL, 0, NULL }, { '1', 'r', 9, 47, 1, OFFSET(md_TrueSight), MT_BOOL, 0, NULL }, { '1', 's', 10, 47, 1, OFFSET(md_ShockShield), MT_BOOL, 0, NULL }, { '1', 't', 3, 63, 1, OFFSET(md_Flaming), MT_BOOL, 0, NULL }, { '1', 'u', 4, 63, 1, OFFSET(md_DetectEvil), MT_BOOL, 0, NULL }, { '1', 'v', 5, 63, 1, OFFSET(md_Hold), MT_BOOL, 0, NULL }, { '1', 'w', 6, 63, 1, OFFSET(md_Curse), MT_BOOL, 0, NULL }, { '1', 'x', 7, 63, 1, OFFSET(md_Paralysis), MT_BOOL, 0, NULL }, { '1', 'y', 8, 63, 1, OFFSET(md_Charm), MT_BOOL, 0, NULL }, { '1', 'z', 9, 63, 1, OFFSET(md_DetectTraps), MT_BOOL, 0, NULL }, { '1', 'A', 10, 63, 1, OFFSET(md_Float), MT_BOOL, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData ObjPage_E [] = { { '1', 'a', 6, 12, 1, OFFSET(me_Glow), MT_BOOL, 0, NULL }, { '1', 'b', 7, 12, 1, OFFSET(me_Hum), MT_BOOL, 0, NULL }, { '1', 'c', 8, 12, 1, OFFSET(me_Dark), MT_BOOL, 0, NULL }, { '1', 'd', 3, 28, 1, OFFSET(me_Magic), MT_BOOL, 0, NULL }, { '1', 'e', 4, 28, 1, OFFSET(me_Loyal), MT_BOOL, 0, NULL }, { '1', 'f', 5, 28, 1, OFFSET(me_Evil), MT_BOOL, 0, NULL }, { '1', 'g', 6, 28, 1, OFFSET(me_Invis), MT_BOOL, 0, NULL }, { '1', 'h', 7, 28, 1, OFFSET(me_Hidden), MT_BOOL, 0, NULL }, { '1', 'i', 8, 28, 1, OFFSET(me_Bless), MT_BOOL, 0, NULL }, { '1', 'j', 3, 47, 1, OFFSET(me_Metal), MT_BOOL, 0, NULL }, { '1', 'k', 4, 47, 1, OFFSET(me_Organic), MT_BOOL, 0, NULL }, { '1', 'l', 5, 47, 1, OFFSET(me_AntiGood), MT_BOOL, 0, NULL }, { '1', 'm', 6, 47, 1, OFFSET(me_AntiEvil), MT_BOOL, 0, NULL }, { '1', 'n', 7, 47, 1, OFFSET(me_AntiNeutral), MT_BOOL, 0, NULL }, { '1', 'o', 8, 47, 1, OFFSET(me_NoDrop), MT_BOOL, 0, NULL }, { '1', 'p', 3, 65, 1, OFFSET(me_NoRemove), MT_BOOL, 0, NULL }, { '1', 'q', 4, 65, 1, OFFSET(me_Inventory), MT_BOOL, 0, NULL }, { '1', 'r', 5, 65, 1, OFFSET(me_Donation), MT_BOOL, 0, NULL }, { '1', 's', 6, 65, 1, OFFSET(me_ClanObj), MT_BOOL, 0, NULL }, { '1', 't', 7, 65, 1, OFFSET(me_ClanCorpse), MT_BOOL, 0, NULL }, { '1', 'u', 8, 65, 1, OFFSET(me_DeathRot), MT_BOOL, 0, NULL }, { '2', 'a', 14, 12, 1, OFFSET(me_Wrist), MT_BOOL, 0, NULL }, { '2', 'b', 15, 12, 1, OFFSET(me_Eyes), MT_BOOL, 0, NULL }, { '2', 'c', 11, 24, 1, OFFSET(me_Take), MT_BOOL, 0, NULL }, { '2', 'd', 12, 24, 1, OFFSET(me_Head), MT_BOOL, 0, NULL }, { '2', 'e', 13, 24, 1, OFFSET(me_Arms), MT_BOOL, 0, NULL }, { '2', 'f', 14, 24, 1, OFFSET(me_Wield), MT_BOOL, 0, NULL }, { '2', 'g', 11, 39, 1, OFFSET(me_Finger), MT_BOOL, 0, NULL }, { '2', 'h', 12, 39, 1, OFFSET(me_Legs), MT_BOOL, 0, NULL }, { '2', 'i', 13, 39, 1, OFFSET(me_Shield), MT_BOOL, 0, NULL }, { '2', 'j', 14, 39, 1, OFFSET(me_Hold), MT_BOOL, 0, NULL }, { '2', 'k', 11, 52, 1, OFFSET(me_Neck), MT_BOOL, 0, NULL }, { '2', 'l', 12, 52, 1, OFFSET(me_Feet), MT_BOOL, 0, NULL }, { '2', 'm', 13, 52, 1, OFFSET(me_About), MT_BOOL, 0, NULL }, { '2', 'n', 14, 52, 1, OFFSET(me_Dual), MT_BOOL, 0, NULL }, { '2', 'o', 11, 65, 1, OFFSET(me_Body), MT_BOOL, 0, NULL }, { '2', 'p', 12, 65, 1, OFFSET(me_Hands), MT_BOOL, 0, NULL }, { '2', 'q', 13, 65, 1, OFFSET(me_Waist), MT_BOOL, 0, NULL }, { '2', 'r', 14, 65, 1, OFFSET(me_Ears), MT_BOOL, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData ObjPage_F [] = { { '1', 'a', 6, 16, 1, OFFSET(mf_AntiClass [0]), MT_BOOL, 0, NULL }, { '1', 'b', 7, 16, 1, OFFSET(mf_AntiClass [1]), MT_BOOL, 0, NULL }, { '1', 'c', 8, 16, 1, OFFSET(mf_AntiClass [2]), MT_BOOL, 0, NULL }, { '1', 'd', 9, 16, 1, OFFSET(mf_AntiClass [3]), MT_BOOL, 0, NULL }, { '1', 'e', 10, 16, 1, OFFSET(mf_AntiClass [4]), MT_BOOL, 0, NULL }, { '1', 'f', 2, 33, 1, OFFSET(mf_AntiClass [5]), MT_BOOL, 0, NULL }, { '1', 'g', 3, 33, 1, OFFSET(mf_AntiClass [6]), MT_BOOL, 0, NULL }, { '1', 'h', 4, 33, 1, OFFSET(mf_AntiClass [7]), MT_BOOL, 0, NULL }, { '1', 'i', 5, 33, 1, OFFSET(mf_AntiClass [8]), MT_BOOL, 0, NULL }, { '1', 'j', 6, 33, 1, OFFSET(mf_AntiClass [9]), MT_BOOL, 0, NULL }, { '1', 'k', 7, 33, 1, OFFSET(mf_AntiClass [10]), MT_BOOL, 0, NULL }, { '1', 'l', 8, 33, 1, OFFSET(mf_AntiClass [11]), MT_BOOL, 0, NULL }, { '1', 'm', 9, 33, 1, OFFSET(mf_AntiClass [12]), MT_BOOL, 0, NULL }, { '1', 'n', 10, 33, 1, OFFSET(mf_AntiClass [13]), MT_BOOL, 0, NULL }, { '1', 'o', 2, 50, 1, OFFSET(mf_AntiClass [14]), MT_BOOL, 0, NULL }, { '1', 'p', 3, 50, 1, OFFSET(mf_AntiClass [15]), MT_BOOL, 0, NULL }, { '1', 'q', 4, 50, 1, OFFSET(mf_AntiClass [16]), MT_BOOL, 0, NULL }, { '1', 'r', 5, 50, 1, OFFSET(mf_AntiClass [17]), MT_BOOL, 0, NULL }, { '1', 's', 6, 50, 1, OFFSET(mf_AntiClass [18]), MT_BOOL, 0, NULL }, { '1', 't', 7, 50, 1, OFFSET(mf_AntiClass [19]), MT_BOOL, 0, NULL }, { '1', 'u', 8, 50, 1, OFFSET(mf_AntiClass [20]), MT_BOOL, 0, NULL }, { '1', 'v', 9, 50, 1, OFFSET(mf_AntiClass [21]), MT_BOOL, 0, NULL }, { '1', 'w', 10, 50, 1, OFFSET(mf_AntiClass [22]), MT_BOOL, 0, NULL }, { '1', 'x', 2, 67, 1, OFFSET(mf_AntiClass [23]), MT_BOOL, 0, NULL }, { '1', 'y', 3, 67, 1, OFFSET(mf_AntiClass [24]), MT_BOOL, 0, NULL }, { '1', 'z', 4, 67, 1, OFFSET(mf_AntiClass [25]), MT_BOOL, 0, NULL }, { '1', 'A', 5, 67, 1, OFFSET(mf_AntiClass [26]), MT_BOOL, 0, NULL }, { '1', 'B', 6, 67, 1, OFFSET(mf_AntiClass [27]), MT_BOOL, 0, NULL }, { '1', 'C', 7, 67, 1, OFFSET(mf_AntiClass [28]), MT_BOOL, 0, NULL }, { '1', 'D', 8, 67, 1, OFFSET(mf_AntiClass [29]), MT_BOOL, 0, NULL }, { '1', 'E', 9, 67, 1, OFFSET(mf_AntiClass [30]), MT_BOOL, 0, NULL }, { '1', 'F', 10, 67, 1, OFFSET(mf_AntiClass [31]), MT_BOOL, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData *ObjMenuData [] = { ObjPage_A, ObjPage_B, ObjPage_C, ObjPage_D, ObjPage_E, ObjPage_F, NULL }; const char * ItemStrings [46][5] = { {"bad type", "bad type", "bad type", "bad type", "bad type"}, // 0 {"light", "unused", "unused", "timer", "unused"}, {"scroll", "level", "sn1", "sn2", "sn3"}, {"wand", "level", "max charges","current charges","sn"}, {"staff", "level", "max charges","current charges","sn"}, {"weapon", "condition","min hit", "max hit", "hit type"}, {"undefined", "unused", "unused", "unused", "undefined"}, {"undefined", "unused", "unused", "unused", "undefined"}, {"treasure", "type", "condition","unused", "unused"}, {"armor", "condition","original ac","unused", "unused"}, {"potion", "level", "sn1", "sn2", "sn3"}, // 10 {"undefined", "unused", "unused", "unused", "undefined"}, {"furniture", "unused", "unused", "unused", "unused"}, {"trash", "unused", "unused", "unused", "unused"}, {"undefined", "unused", "unused", "unused", "undefined"}, {"container", "max weight","flags", "key vnum", "condition"}, {"undefined", "unused", "unused", "unused", "undefined"}, {"drink con", "capacity", "how full", "liquid number","is poisoned?"}, {"key", "vnum to", "unused", "unused", "unused"}, {"food", "food_hours", "condition","unused", "is poisoned?"}, {"money", "amt gold", "unused", "unused", "unused"}, // 20 {"undefined", "unused", "unused", "unused", "undefined"}, {"boat", "unused", "unused", "unused", "unused"}, {"npc corpse","unused", "flags", "unused", "unused"}, {"pc corpse", "unused", "flags", "unused", "unused"}, {"fountain", "unused", "unused", "unused", "unused"}, {"pill", "level", "sn1", "sn2", "sn3"}, {"blood", "?", "?", "?", "?"}, {"bloodstain","?", "?", "?", "?"}, {"scraps", "?", "?", "?", "?"}, {"pipe", "?", "timer?", "herb", "flags"}, // 30 {"herb con", "capacity", "huw full", "herb", "?"}, {"herb", "?", "?", "?", "?"}, {"incense", "?", "?", "?", "?"}, {"fire", "?", "?", "?", "?"}, {"book", "?", "?", "?", "?"}, {"switch", "position", "?", "?", "?"}, {"lever", "position", "?", "?", "?"}, {"pullchain", "position", "?", "?", "?"}, {"button", "position", "?", "?", "?"}, {"dial", "?", "?", "?", "?"}, // 40 {"rune", "?", "?", "?", "?"}, {"runepouch", "?", "?", "?", "?"}, {"match", "?", "?", "?", "?"}, {"trap", "charges", "type", "level", "flags"}, {"map", "?", "?", "?", "?"} // 45 }; char *GetItemString (int item_number, int which_string) { if ((item_number < 0) || (item_number > 45)) return ("GetItemString bug"); if ((which_string < 0) || (which_string > 4)) return ("GetItemString bug"); return (char*) ItemStrings [item_number][which_string]; }