/**************************************************************************** * [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 Mob Menu Implementation file * ****************************************************************************/ #include "stdafx.h" #define MOBMENU_CPP #include "smaug.h" #include "SysData.h" #include "mobiles.h" #include "affect.h" #include "objects.h" #include "rooms.h" #include "class.h" #include "mobmenu.h" #include "descriptor.h" #include "character.h" CMenuData *MobMenuData []; void CMobMenu::Display (CCharacter& Ch, int page) { m_HelpMenu = DIM (MobMenus) - 1; m_PageNr = page; if (m_PageNr < 0 || m_PageNr > m_HelpMenu) then m_PageNr = m_HelpMenu; m_CurrPageLines = GetLineCount (MobMenus [m_PageNr]); m_pPageData = MobMenuData [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 (MobMenus [m_PageNr]); // fill in fields DisplayData (Ch); } void CMobMenu::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 CMobMenu::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 CMobMenu::Save (CCharacter& Ch) { CCharacter &Mob = *m_pMob; CMobIndexData &Idx = *Mob.GetMobIndex (); // see if mob still exists for (CCharacter* wch = first_char; wch; wch = wch->GetNext ()) if (wch == &Ch) then break; for (CCharacter* wch = first_char; wch; wch = wch->GetNext ()) if (! wch) { Ch.SendText ("Mob no longer exists, Cannot save."); return; } // Save a-page items Mob.SetName (ma_Name); Mob.SetShortDescr (ma_Short); Mob.SetLongDescr (ma_Long); Mob.SetDescription (ma_Desc); if (m_bProto) { STRFREE (Idx.GetPlayerName ()); STRFREE (Idx.GetShortDescr ()); STRFREE (Idx.GetLongDescr ()); STRFREE (Idx.GetDescription ()); Idx.SetPlayerName (STRALLOC (ma_Name)); Idx.SetShortDescr (STRALLOC (ma_Short)); Idx.SetLongDescr (STRALLOC (ma_Long)); Idx.SetDescription (STRALLOC (ma_Desc)); } Mob.SetLevel (ma_Level); Mob.SetSex (ma_Sex); Mob.SetGold (ma_Gold); Mob.SetAlignment (ma_Align); Mob.SetMobInvisLevel (ma_InvLevel); Mob.perm_str = ma_PermStr; Mob.perm_int = ma_PermInt; Mob.perm_wis = ma_PermWis; Mob.perm_dex = ma_PermDex; Mob.perm_con = ma_PermCon; Mob.perm_cha = ma_PermCha; Mob.SetArmor (ma_Ac); if (m_bProto) { Idx.level = ma_Level; Idx.sex = ma_Sex; Idx.gold = ma_Gold; Idx.alignment = ma_Align; Idx.SetMobInvisLevel (ma_InvLevel); Idx.perm_str = ma_PermStr; Idx.perm_int = ma_PermInt; Idx.perm_wis = ma_PermWis; Idx.perm_dex = ma_PermDex; Idx.perm_con = ma_PermCon; Idx.perm_cha = ma_PermCha; Idx.ac = ma_Ac; } #define SETC(aa,bb) if (aa) Mob.SetClass (bb) SETC (ma_Mage, NPC_MAGE); SETC (ma_Cleric, NPC_CLERIC); SETC (ma_Thief, NPC_THIEF); SETC (ma_Warrior, NPC_WARRIOR); SETC (ma_Vampire, NPC_VAMPIRE); SETC (ma_Druid, NPC_DRUID); SETC (ma_Ranger, NPC_RANGER); SETC (ma_Augurer, NPC_AUGURER); SETC (ma_Baker, NPC_BAKER); SETC (ma_Butcher, NPC_BUTCHER); SETC (ma_BlackSmith, NPC_BLACKSMITH); SETC (ma_Mayor, NPC_MAYOR); SETC (ma_King, NPC_KING); SETC (ma_Queen, NPC_QUEEN); if (m_bProto) { #define ISETC(aa,bb) if (aa) Idx.m_Class = bb ISETC (ma_Mage, NPC_MAGE); ISETC (ma_Cleric, NPC_CLERIC); ISETC (ma_Thief, NPC_THIEF); ISETC (ma_Warrior, NPC_WARRIOR); ISETC (ma_Vampire, NPC_VAMPIRE); ISETC (ma_Druid, NPC_DRUID); ISETC (ma_Ranger, NPC_RANGER); ISETC (ma_Augurer, NPC_AUGURER); ISETC (ma_Baker, NPC_BAKER); ISETC (ma_Butcher, NPC_BUTCHER); ISETC (ma_BlackSmith, NPC_BLACKSMITH); ISETC (ma_Mayor, NPC_MAYOR); ISETC (ma_King, NPC_KING); ISETC (ma_Queen, NPC_QUEEN); } // Save b-page items CActFlags ActBits; ActBits.SetBit (ACT_IS_NPC); #define ASET(aa,bb) if (aa) ActBits.SetBit(bb) if (m_bProto) then ActBits.SetPrototype (); ASET (mb_Sentinel, ACT_SENTINEL); ASET (mb_Scavenger, ACT_SCAVENGER); ASET (mb_Aggro, ACT_AGGRESSIVE); ASET (mb_StayArea, ACT_STAY_AREA); ASET (mb_Wimpy, ACT_WIMPY); ASET (mb_Pet, ACT_PET); ASET (mb_Train, ACT_TRAIN); ASET (mb_Practice, ACT_PRACTICE); ASET (mb_Immortal, ACT_IMMORTAL); ASET (mb_Deadly, ACT_DEADLY); ASET (mb_PolySelf, ACT_POLYSELF); ASET (mb_MetaAggro, ACT_META_AGGR); ASET (mb_Guardian, ACT_GUARDIAN); ASET (mb_Running, ACT_RUNNING); ASET (mb_NoWander, ACT_NOWANDER); ASET (mb_Mountable, ACT_MOUNTABLE); ASET (mb_Mounted, ACT_MOUNTED); ASET (mb_Scholar, ACT_SCHOLAR); ASET (mb_Secretive, ACT_SECRETIVE); ASET (mb_Polymorphed, ACT_POLYMORPHED); ASET (mb_MobInvis, ACT_MOBINVIS); ASET (mb_NoAssist, ACT_NOASSIST); Mob.SetActFlags (ActBits); if (m_bProto) { CActFlags act; act.SetBit (ACT_IS_NPC); act.SetPrototype (); #define IASET(aa,bb) if (aa) act.SetBit(bb) IASET (mb_Sentinel, ACT_SENTINEL); IASET (mb_Scavenger, ACT_SCAVENGER); IASET (mb_Aggro, ACT_AGGRESSIVE); IASET (mb_StayArea, ACT_STAY_AREA); IASET (mb_Wimpy, ACT_WIMPY); IASET (mb_Pet, ACT_PET); IASET (mb_Train, ACT_TRAIN); IASET (mb_Practice, ACT_PRACTICE); IASET (mb_Immortal, ACT_IMMORTAL); IASET (mb_Deadly, ACT_DEADLY); IASET (mb_PolySelf, ACT_POLYSELF); IASET (mb_MetaAggro, ACT_META_AGGR); IASET (mb_Guardian, ACT_GUARDIAN); IASET (mb_Running, ACT_RUNNING); IASET (mb_NoWander, ACT_NOWANDER); IASET (mb_Mountable, ACT_MOUNTABLE); IASET (mb_Mounted, ACT_MOUNTED); IASET (mb_Scholar, ACT_SCHOLAR); IASET (mb_Secretive, ACT_SECRETIVE); IASET (mb_Polymorphed, ACT_POLYMORPHED); IASET (mb_MobInvis, ACT_MOBINVIS); IASET (mb_NoAssist, ACT_NOASSIST); Idx.SetActFlags (act); } CAffectFlags AffBits; #define AFSET(aa,bb) if (aa) AffBits.SetBit(bb) AFSET (mb_Blind, AFF_BLIND); AFSET (mb_DetInv, AFF_DETECT_INVIS); AFSET (mb_DetEvil, AFF_DETECT_EVIL); AFSET (mb_DetMagic, AFF_DETECT_MAGIC); AFSET (mb_DetHidden, AFF_DETECT_HIDDEN); AFSET (mb_AHold, AFF_HOLD); AFSET (mb_ASanct, AFF_SANCTUARY); AFSET (mb_AFaerieFire, AFF_FAERIE_FIRE); AFSET (mb_AInfra, AFF_INFRARED); AFSET (mb_ACurse, AFF_CURSE); AFSET (mb_AFlaming, AFF_FLAMING); AFSET (mb_APoison, AFF_POISON); AFSET (mb_AProtect, AFF_PROTECT); AFSET (mb_AParalysis, AFF_PARALYSIS); AFSET (mb_ASleep, AFF_SLEEP); AFSET (mb_AHide, AFF_HIDE); AFSET (mb_ASneak, AFF_SNEAK); AFSET (mb_ACharm, AFF_CHARM); AFSET (mb_AParalysis, AFF_PARALYSIS); AFSET (mb_AFly, AFF_FLYING); AFSET (mb_APass, AFF_PASS_DOOR); AFSET (mb_ATrueSight, AFF_TRUESIGHT); AFSET (mb_ADetTrap, AFF_DETECTTRAPS); AFSET (mb_AScry, AFF_SCRYING); AFSET (mb_AFireShield, AFF_FIRESHIELD); AFSET (mb_AShockShield, AFF_SHOCKSHIELD); AFSET (mb_AFloat, AFF_FLOATING); AFSET (mb_AInv, AFF_INVISIBLE); Mob.SetAffectFlags (AffBits); if (m_bProto) { CAffectFlags aff; #define IAFSET(aa,bb) if (aa) aff.SetBit(bb) IAFSET (mb_Blind, AFF_BLIND); IAFSET (mb_DetInv, AFF_DETECT_INVIS); IAFSET (mb_DetEvil, AFF_DETECT_EVIL); IAFSET (mb_DetMagic, AFF_DETECT_MAGIC); IAFSET (mb_DetHidden, AFF_DETECT_HIDDEN); IAFSET (mb_AHold, AFF_HOLD); IAFSET (mb_ASanct, AFF_SANCTUARY); IAFSET (mb_AFaerieFire, AFF_FAERIE_FIRE); IAFSET (mb_AInfra, AFF_INFRARED); IAFSET (mb_ACurse, AFF_CURSE); IAFSET (mb_AFlaming, AFF_FLAMING); IAFSET (mb_APoison, AFF_POISON); IAFSET (mb_AProtect, AFF_PROTECT); IAFSET (mb_AParalysis, AFF_PARALYSIS); IAFSET (mb_ASleep, AFF_SLEEP); IAFSET (mb_AHide, AFF_HIDE); IAFSET (mb_ASneak, AFF_SNEAK); IAFSET (mb_ACharm, AFF_CHARM); IAFSET (mb_AParalysis, AFF_PARALYSIS); IAFSET (mb_AFly, AFF_FLYING); IAFSET (mb_APass, AFF_PASS_DOOR); IAFSET (mb_ATrueSight, AFF_TRUESIGHT); IAFSET (mb_ADetTrap, AFF_DETECTTRAPS); IAFSET (mb_AScry, AFF_SCRYING); IAFSET (mb_AFireShield, AFF_FIRESHIELD); IAFSET (mb_AShockShield, AFF_SHOCKSHIELD); IAFSET (mb_AFloat, AFF_FLOATING); IAFSET (mb_AInv, AFF_INVISIBLE); Idx.SetAffectFlags (aff); } // Save c-page items CAttackFlags AttBits; #define ATSET(aa,bb) if (aa) AttBits.SetBit (bb) ATSET (mc_Bite, ATCK_BITE); ATSET (mc_Claws, ATCK_CLAWS); ATSET (mc_FireBreath, ATCK_FIREBREATH); ATSET (mc_Bash, ATCK_BASH); ATSET (mc_Stun, ATCK_STUN); ATSET (mc_AcidBreath, ATCK_ACIDBREATH); ATSET (mc_Drain, ATCK_DRAIN); ATSET (mc_Kick, ATCK_KICK); ATSET (mc_Feed, ATCK_FEED); ATSET (mc_GasBreath, ATCK_GASBREATH); ATSET (mc_Poison, ATCK_POISON); ATSET (mc_Gaze, ATCK_GAZE); ATSET (mc_Harm, ATCK_HARM); ATSET (mc_FrostBreath, ATCK_FROSTBREATH); ATSET (mc_Curse, ATCK_CURSE); ATSET (mc_BackStab, ATCK_BACKSTAB); ATSET (mc_Punch, ATCK_PUNCH); ATSET (mc_LightningBreath, ATCK_LIGHTNBREATH); ATSET (mc_Weaken, ATCK_WEAKEN); ATSET (mc_Tail, ATCK_TAIL); ATSET (mc_Sting, ATCK_STING); ATSET (mc_CSerious, ATCK_CAUSESERIOUS); ATSET (mc_Trip, ATCK_TRIP); ATSET (mc_FireBall, ATCK_FIREBALL); ATSET (mc_Gouge, ATCK_GOUGE); ATSET (mc_CCritical, ATCK_CAUSECRITICAL); ATSET (mc_FlameStrike, ATCK_FLAMESTRIKE); ATSET (mc_EarthQuake, ATCK_EARTHQUAKE); ATSET (mc_ColorSpray, ATCK_COLORSPRAY); ATSET (mc_NPoison, ATCK_NASTYPOISON); ATSET (mc_Blind, ATCK_BLINDNESS); Mob.SetAttackFlags (AttBits); if (m_bProto) { AttBits.Empty (); ATSET (mc_Bite, ATCK_BITE); ATSET (mc_Claws, ATCK_CLAWS); ATSET (mc_FireBreath, ATCK_FIREBREATH); ATSET (mc_Bash, ATCK_BASH); ATSET (mc_Stun, ATCK_STUN); ATSET (mc_AcidBreath, ATCK_ACIDBREATH); ATSET (mc_Drain, ATCK_DRAIN); ATSET (mc_Kick, ATCK_KICK); ATSET (mc_Feed, ATCK_FEED); ATSET (mc_GasBreath, ATCK_GASBREATH); ATSET (mc_Poison, ATCK_POISON); ATSET (mc_Gaze, ATCK_GAZE); ATSET (mc_Harm, ATCK_HARM); ATSET (mc_FrostBreath, ATCK_FROSTBREATH); ATSET (mc_Curse, ATCK_CURSE); ATSET (mc_BackStab, ATCK_BACKSTAB); ATSET (mc_Punch, ATCK_PUNCH); ATSET (mc_LightningBreath, ATCK_LIGHTNBREATH); ATSET (mc_Weaken, ATCK_WEAKEN); ATSET (mc_Tail, ATCK_TAIL); ATSET (mc_Sting, ATCK_STING); ATSET (mc_CSerious, ATCK_CAUSESERIOUS); ATSET (mc_Trip, ATCK_TRIP); ATSET (mc_FireBall, ATCK_FIREBALL); ATSET (mc_Gouge, ATCK_GOUGE); ATSET (mc_CCritical, ATCK_CAUSECRITICAL); ATSET (mc_FlameStrike, ATCK_FLAMESTRIKE); ATSET (mc_EarthQuake, ATCK_EARTHQUAKE); ATSET (mc_ColorSpray, ATCK_COLORSPRAY); ATSET (mc_NPoison, ATCK_NASTYPOISON); ATSET (mc_Blind, ATCK_BLINDNESS); Idx.SetAttackFlags (AttBits); } CDefenseFlags DefBits; #define DSET(aa,bb) if (aa) DefBits.SetBit (bb) DSET (mc_Sanct, DFND_SANCTUARY); DSET (mc_CureLight, DFND_CURELIGHT); DSET (mc_DDispelEvil, DFND_DISPELEVIL); DSET (mc_DShield, DFND_SHIELD); DSET (mc_DCureSerious, DFND_CURESERIOUS); DSET (mc_DDispelMagic, DFND_DISPELMAGIC); DSET (mc_DDodge, DFND_DODGE); DSET (mc_DFireShield, DFND_FIRESHIELD); DSET (mc_DCureCritical, DFND_CURECRITICAL); DSET (mc_DTeleport, DFND_TELEPORT); DSET (mc_DParry, DFND_PARRY); DSET (mc_DShockShield, DFND_SHOCKSHIELD); DSET (mc_DHeal, DFND_HEAL); DSET (mc_DBless, DFND_BLESS); DSET (mc_DDisarm, DFND_DISARM); DSET (mc_DStoneSkin, DFND_STONESKIN); DSET (mc_DMonsum1, DFND_MONSUM1); DSET (mc_DMonsum2, DFND_MONSUM2); DSET (mc_DMonsum3, DFND_MONSUM3); DSET (mc_DMonsum4, DFND_MONSUM4); Mob.SetDefenseFlags (DefBits); if (m_bProto) { DefBits.Empty (); DSET (mc_Sanct, DFND_SANCTUARY); DSET (mc_CureLight, DFND_CURELIGHT); DSET (mc_DDispelEvil, DFND_DISPELEVIL); DSET (mc_DShield, DFND_SHIELD); DSET (mc_DCureSerious, DFND_CURESERIOUS); DSET (mc_DDispelMagic, DFND_DISPELMAGIC); DSET (mc_DDodge, DFND_DODGE); DSET (mc_DFireShield, DFND_FIRESHIELD); DSET (mc_DCureCritical, DFND_CURECRITICAL); DSET (mc_DTeleport, DFND_TELEPORT); DSET (mc_DParry, DFND_PARRY); DSET (mc_DShockShield, DFND_SHOCKSHIELD); DSET (mc_DHeal, DFND_HEAL); DSET (mc_DBless, DFND_BLESS); DSET (mc_DDisarm, DFND_DISARM); DSET (mc_DStoneSkin, DFND_STONESKIN); DSET (mc_DMonsum1, DFND_MONSUM1); DSET (mc_DMonsum2, DFND_MONSUM2); DSET (mc_DMonsum3, DFND_MONSUM3); DSET (mc_DMonsum4, DFND_MONSUM4); Idx.SetDefenseFlags (DefBits); } // Save d-page items Mob.saving_poison_death = md_SavPoisonDeath; Mob.saving_wand = md_SavWand; Mob.saving_para_petri = md_SavParaPetri; Mob.saving_breath = md_SavBreath; Mob.saving_spell_staff = md_SavSpellStaff; if (m_bProto) { Idx.saving_poison_death = md_SavPoisonDeath; Idx.saving_wand = md_SavWand; Idx.saving_para_petri = md_SavParaPetri; Idx.saving_breath = md_SavBreath; Idx.saving_spell_staff = md_SavSpellStaff; } int xflags = 0; #define XSET(aa,bb) if (aa) xflags |= bb XSET (md_Fins, PART_FINS); XSET (md_Ear, PART_EAR); XSET (md_Eye, PART_EYE); XSET (md_Tounge, PART_LONG_TONGUE); XSET (md_Scales, PART_SCALES); XSET (md_Tail, PART_TAIL); XSET (md_Arms, PART_ARMS); XSET (md_Legs, PART_LEGS); XSET (md_Tentacles, PART_TENTACLES); XSET (md_Brains, PART_BRAINS); XSET (md_Guts, PART_GUTS); XSET (md_Head, PART_HEAD); XSET (md_Feet, PART_FEET); XSET (md_EyeStalks, PART_EYESTALKS); XSET (md_Fingers, PART_FINGERS); XSET (md_Wings, PART_WINGS); XSET (md_Hands, PART_HANDS); XSET (md_Heart, PART_HEART); XSET (md_Claws, PART_CLAWS); XSET (md_Horns, PART_HORNS); XSET (md_Tusks, PART_TUSKS); XSET (md_TailAttack, PART_TAILATTACK); XSET (md_SharpScales, PART_SHARPSCALES); Mob.SetXFlags (xflags); Mob.numattacks = md_NumAttacks; Mob.SetHitroll (md_HitRoll); Mob.SetDamroll (md_DamRoll); if (m_bProto) { Idx.xflags = 0; #define IXSET(aa,bb) if (aa) Idx.xflags |= bb IXSET (md_Fins, PART_FINS); IXSET (md_Ear, PART_EAR); IXSET (md_Eye, PART_EYE); IXSET (md_Tounge, PART_LONG_TONGUE); IXSET (md_Scales, PART_SCALES); IXSET (md_Tail, PART_TAIL); IXSET (md_Arms, PART_ARMS); IXSET (md_Legs, PART_LEGS); IXSET (md_Tentacles, PART_TENTACLES); IXSET (md_Brains, PART_BRAINS); IXSET (md_Guts, PART_GUTS); IXSET (md_Head, PART_HEAD); IXSET (md_Feet, PART_FEET); IXSET (md_EyeStalks, PART_EYESTALKS); IXSET (md_Fingers, PART_FINGERS); IXSET (md_Wings, PART_WINGS); IXSET (md_Hands, PART_HANDS); IXSET (md_Heart, PART_HEART); IXSET (md_Claws, PART_CLAWS); IXSET (md_Horns, PART_HORNS); IXSET (md_Tusks, PART_TUSKS); IXSET (md_TailAttack, PART_TAILATTACK); IXSET (md_SharpScales, PART_SHARPSCALES); Idx.numattacks = md_NumAttacks; Idx.hitroll = md_HitRoll; Idx.damroll = md_DamRoll; Idx.hitnodice = md_Hnodice; Idx.hitsizedice = md_Hsizedice; Idx.hitplus = md_Hplus; Idx.damnodice = md_Dnodice; Idx.damsizedice = md_Dsizedice; Idx.damplus = md_Dplus; } // have to do hit/damnodice, hit/damsizedice, hit/damplus // Save e-page items SPEC_FUN *spec = GetSelectedSpecFun (); Mob.SetSpecialMobFunction (spec); if (m_bProto) then Idx.spec_fun = spec; Mob.defposition = me_Position; if (m_bProto) Idx.defposition = me_Position; SetMobRisFlag (me_RFire, RIS_FIRE); SetMobRisFlag (me_RFire, RIS_FIRE); SetMobRisFlag (me_RCold, RIS_COLD); SetMobRisFlag (me_RElect, RIS_ELECTRICITY); SetMobRisFlag (me_REnergy, RIS_ENERGY); SetMobRisFlag (me_RPoison, RIS_POISON); SetMobRisFlag (me_RBlunt, RIS_BLUNT); SetMobRisFlag (me_RPierce, RIS_PIERCE); SetMobRisFlag (me_RSlash, RIS_SLASH); SetMobRisFlag (me_RAcid, RIS_ACID); SetMobRisFlag (me_RNonMagic, RIS_NONMAGIC); SetMobRisFlag (me_RDrain, RIS_DRAIN); SetMobRisFlag (me_RSleep, RIS_SLEEP); SetMobRisFlag (me_RCharm, RIS_CHARM); SetMobRisFlag (me_RHold, RIS_HOLD); SetMobRisFlag (me_RMagic, RIS_MAGIC); SetMobRisFlag (me_RPlus1, RIS_PLUS1); SetMobRisFlag (me_RPlus2, RIS_PLUS2); SetMobRisFlag (me_RPlus3, RIS_PLUS3); SetMobRisFlag (me_RPlus4, RIS_PLUS4); SetMobRisFlag (me_RPlus5, RIS_PLUS5); SetMobRisFlag (me_RPlus6, RIS_PLUS6); // Save f-page items int Race = GetMobRace (); Mob.SetRace (Race); if (m_bProto) then Idx.race = Race; } CMobMenu::CMobMenu (CCharacter& Mob) { CMobIndexData &Idx = *Mob.GetMobIndex (); m_pMob = &Mob; m_Vnum = Idx.vnum; // keep vnum for display m_bProto = Mob.IsPrototype (); // load local a-page items ma_Name = m_bProto ? Idx.GetPlayerName () : Mob.GetName (); ma_Short = m_bProto ? Idx.GetShortDescr () : Mob.GetShortDescr (); ma_Long = m_bProto ? Idx.GetLongDescr () : Mob.GetLongDescr (); ma_Desc = m_bProto ? Idx.GetDescription () : Mob.GetDescription (); ma_Level = m_bProto ? Idx.level : Mob.GetLevel (); ma_Sex = m_bProto ? Idx.sex : Mob.GetSex (); ma_Gold = m_bProto ? Idx.gold : Mob.GetGold (); ma_Align = m_bProto ? Idx.alignment : Mob.GetAlignment (); ma_InvLevel = m_bProto ? Idx.GetMobInvisLevel () : Mob.GetMobInvisLevel (); ma_PermStr = m_bProto ? Idx.perm_str : Mob.perm_str; ma_PermInt = m_bProto ? Idx.perm_int : Mob.perm_int; ma_PermWis = m_bProto ? Idx.perm_wis : Mob.perm_wis; ma_PermDex = m_bProto ? Idx.perm_dex : Mob.perm_dex; ma_PermCon = m_bProto ? Idx.perm_con : Mob.perm_con; ma_PermCha = m_bProto ? Idx.perm_cha : Mob.perm_cha; ma_Ac = m_bProto ? Idx.ac : Mob.GetArmor (); int mclass = m_bProto ? Idx.m_Class : Mob.GetClass (); ma_Mage = mclass == NPC_MAGE; ma_Cleric = mclass == NPC_CLERIC; ma_Thief = mclass == NPC_THIEF; ma_Warrior = mclass == NPC_WARRIOR; ma_Vampire = mclass == NPC_VAMPIRE; ma_Druid = mclass == NPC_DRUID; ma_Ranger = mclass == NPC_RANGER; ma_Augurer = mclass == NPC_AUGURER; ma_Baker = mclass == NPC_BAKER; ma_Butcher = mclass == NPC_BUTCHER; ma_BlackSmith = mclass == NPC_BLACKSMITH; ma_Mayor = mclass == NPC_MAYOR; ma_King = mclass == NPC_KING; ma_Queen = mclass == NPC_QUEEN; // load local b-page items CActFlags ActBits = m_bProto ? Idx.GetActFlags () : Mob.GetActFlags (); mb_Sentinel = ActBits.IsSet (ACT_SENTINEL); mb_Scavenger = ActBits.IsSet (ACT_SCAVENGER); mb_Aggro = ActBits.IsSet (ACT_AGGRESSIVE); mb_StayArea = ActBits.IsSet (ACT_STAY_AREA); mb_Wimpy = ActBits.IsSet (ACT_WIMPY); mb_Pet = ActBits.IsSet (ACT_PET); mb_Train = ActBits.IsSet (ACT_TRAIN); mb_Practice = ActBits.IsSet (ACT_PRACTICE); mb_Immortal = ActBits.IsSet (ACT_IMMORTAL); mb_Deadly = ActBits.IsSet (ACT_DEADLY); mb_PolySelf = ActBits.IsSet (ACT_POLYSELF); mb_MetaAggro = ActBits.IsSet (ACT_META_AGGR); mb_Guardian = ActBits.IsSet (ACT_GUARDIAN); mb_Running = ActBits.IsSet (ACT_RUNNING); mb_NoWander = ActBits.IsSet (ACT_NOWANDER); mb_Mountable = ActBits.IsSet (ACT_MOUNTABLE); mb_Mounted = ActBits.IsSet (ACT_MOUNTED); mb_Scholar = ActBits.IsSet (ACT_SCHOLAR); mb_Secretive = ActBits.IsSet (ACT_SECRETIVE); mb_Polymorphed = ActBits.IsSet (ACT_POLYMORPHED); mb_MobInvis = ActBits.IsSet (ACT_MOBINVIS); mb_NoAssist = ActBits.IsSet (ACT_NOASSIST); CAffectFlags AffBits = m_bProto ? Idx.GetAffectFlags () : Mob.GetAffectFlags (); mb_Blind = AffBits.IsSet (AFF_BLIND); mb_DetInv = AffBits.IsSet (AFF_DETECT_INVIS); mb_DetEvil = AffBits.IsSet (AFF_DETECT_EVIL); mb_DetMagic = AffBits.IsSet (AFF_DETECT_MAGIC); mb_DetHidden = AffBits.IsSet (AFF_DETECT_HIDDEN); mb_AHold = AffBits.IsSet (AFF_HOLD); mb_ASanct = AffBits.IsSet (AFF_SANCTUARY); mb_AFaerieFire = AffBits.IsSet (AFF_FAERIE_FIRE); mb_AInfra = AffBits.IsSet (AFF_INFRARED); mb_ACurse = AffBits.IsSet (AFF_CURSE); mb_AFlaming = AffBits.IsSet (AFF_FLAMING); mb_APoison = AffBits.IsSet (AFF_POISON); mb_AProtect = AffBits.IsSet (AFF_PROTECT); mb_AParalysis = AffBits.IsSet (AFF_PARALYSIS); mb_ASleep = AffBits.IsSet (AFF_SLEEP); mb_AHide = AffBits.IsSet (AFF_HIDE); mb_ASneak = AffBits.IsSet (AFF_SNEAK); mb_ACharm = AffBits.IsSet (AFF_CHARM); mb_AParalysis = AffBits.IsSet (AFF_PARALYSIS); mb_AFly = AffBits.IsSet (AFF_FLYING); mb_APass = AffBits.IsSet (AFF_PASS_DOOR); mb_ATrueSight = AffBits.IsSet (AFF_TRUESIGHT); mb_ADetTrap = AffBits.IsSet (AFF_DETECTTRAPS); mb_AScry = AffBits.IsSet (AFF_SCRYING); mb_AFireShield = AffBits.IsSet (AFF_FIRESHIELD); mb_AShockShield = AffBits.IsSet (AFF_SHOCKSHIELD); mb_AFloat = AffBits.IsSet (AFF_FLOATING); mb_AInv = AffBits.IsSet (AFF_INVISIBLE); // load local c-page items CAttackFlags AttBits = m_bProto ? Idx.GetAttackFlags () : Mob.GetAttackFlags (); mc_Bite = AttBits.CanBite (); mc_Claws = AttBits.CanUseClaws (); mc_FireBreath = AttBits.CanBreatheFire (); mc_Bash = AttBits.CanBash (); mc_Stun = AttBits.CanStun (); mc_AcidBreath = AttBits.CanBreatheAcid (); mc_Drain = AttBits.CanDrain (); mc_Kick = AttBits.CanKick (); mc_Feed = AttBits.CanFeed (); mc_GasBreath = AttBits.CanBreatheGas (); mc_Poison = AttBits.CanPoison (); mc_Gaze = AttBits.CanGaze (); mc_Harm = AttBits.CanHarm (); mc_FrostBreath = AttBits.CanBreatheFrost (); mc_Curse = AttBits.CanCurse (); mc_BackStab = AttBits.CanBackStab (); mc_Punch = AttBits.CanPunch (); mc_LightningBreath = AttBits.CanBreatheLightning (); mc_Weaken = AttBits.CanWeaken (); mc_Tail = AttBits.CanUseTail (); mc_Sting = AttBits.CanSting (); mc_CSerious = AttBits.CanCauseSerious (); mc_Trip = AttBits.CanTrip (); mc_FireBall = AttBits.CanFireball (); mc_Gouge = AttBits.CanGouge (); mc_CCritical = AttBits.CanCauseCritical (); mc_FlameStrike = AttBits.CanFlameStrike (); mc_EarthQuake = AttBits.CanQuake (); mc_ColorSpray = AttBits.CanColorSpray (); mc_NPoison = AttBits.CanNastyPoison (); mc_Blind = AttBits.CanBlind (); CDefenseFlags DefBits = m_bProto ? Idx.GetDefenseFlags () : Mob.GetDefenseFlags (); mc_Sanct = DefBits.CanUseSanctuary (); mc_CureLight = DefBits.CanCureLight (); mc_DDispelEvil = DefBits.CanDispelEvil (); mc_DShield = DefBits.CanShield (); mc_DCureSerious = DefBits.CanCureSerious (); mc_DDispelMagic = DefBits.CanDispelMagic (); mc_DDodge = DefBits.CanDodge (); mc_DFireShield = DefBits.CanFireShield (); mc_DCureCritical = DefBits.CanCureCritical (); mc_DTeleport = DefBits.CanTeleport (); mc_DParry = DefBits.CanParry (); mc_DShockShield = DefBits.CanShockShield (); mc_DHeal = DefBits.CanHeal (); mc_DBless = DefBits.CanBless (); mc_DDisarm = DefBits.CanDisarm (); mc_DStoneSkin = DefBits.CanStoneSkin (); mc_DMonsum1 = DefBits.CanMonsum1 (); mc_DMonsum2 = DefBits.CanMonsum2 (); mc_DMonsum3 = DefBits.CanMonsum3 (); mc_DMonsum4 = DefBits.CanMonsum4 (); // load local d-page items md_SavPoisonDeath = m_bProto ? Idx.saving_poison_death : Mob.saving_poison_death; md_SavWand = m_bProto ? Idx.saving_wand : Mob.saving_wand; md_SavParaPetri = m_bProto ? Idx.saving_para_petri : Mob.saving_para_petri; md_SavBreath = m_bProto ? Idx.saving_breath : Mob.saving_breath; md_SavSpellStaff = m_bProto ? Idx.saving_spell_staff : Mob.saving_spell_staff; int xflags = m_bProto ? Idx.xflags : Mob.GetXFlags (); md_Fins = IS_SET (xflags, PART_FINS); md_Ear = IS_SET (xflags, PART_EAR); md_Eye = IS_SET (xflags, PART_EYE); md_Tounge = IS_SET (xflags, PART_LONG_TONGUE); md_Scales = IS_SET (xflags, PART_SCALES); md_Tail = IS_SET (xflags, PART_TAIL); md_Arms = IS_SET (xflags, PART_ARMS); md_Legs = IS_SET (xflags, PART_LEGS); md_Tentacles = IS_SET (xflags, PART_TENTACLES); md_Brains = IS_SET (xflags, PART_BRAINS); md_Guts = IS_SET (xflags, PART_GUTS); md_Head = IS_SET (xflags, PART_HEAD); md_Feet = IS_SET (xflags, PART_FEET); md_EyeStalks = IS_SET (xflags, PART_EYESTALKS); md_Fingers = IS_SET (xflags, PART_FINGERS); md_Wings = IS_SET (xflags, PART_WINGS); md_Hands = IS_SET (xflags, PART_HANDS); md_Heart = IS_SET (xflags, PART_HEART); md_Claws = IS_SET (xflags, PART_CLAWS); md_Horns = IS_SET (xflags, PART_HORNS); md_Tusks = IS_SET (xflags, PART_TUSKS); md_TailAttack = IS_SET (xflags, PART_TAILATTACK); md_SharpScales = IS_SET (xflags, PART_SHARPSCALES); md_NumAttacks = m_bProto ? Idx.numattacks : Mob.numattacks; md_HitRoll = m_bProto ? Idx.hitroll : Mob.GetHitroll (); md_DamRoll = m_bProto ? Idx.damroll : Mob.GetDamroll (); md_Hnodice = Idx.hitnodice; md_Hsizedice = Idx.hitsizedice; md_Hplus = Idx.hitplus; md_Dnodice = Idx.damnodice; md_Dsizedice = Idx.damsizedice; md_Dplus = Idx.damplus; // load local e-page items char *spec = lookup_spec ( m_bProto ? Idx.spec_fun : Mob.GetSpecialMobFunction ()); me_SFido = !str_cmp (spec, "spec_fido"); me_SAdept = !str_cmp (spec, "spec_cast_adept"); me_SFireBreath = !str_cmp (spec, "spec_breath_fire"); me_SGuard = !str_cmp (spec, "spec_guard"); me_SCleric = !str_cmp (spec, "spec_cast_cleric"); me_SFrostBreath = !str_cmp (spec, "spec_breath_frost"); me_SJanitor = !str_cmp (spec, "spec_janitor"); me_SMage = !str_cmp (spec, "spec_cast_mage"); me_SAcidBreath = !str_cmp (spec, "spec_breath_acid"); me_SThief = !str_cmp (spec, "spec_thief"); me_SUndead = !str_cmp (spec, "spec_cast_undead"); me_SGasBreath = !str_cmp (spec, "spec_breath_gas"); me_SMayor = !str_cmp (spec, "spec_mayor"); me_SLightningBreath = !str_cmp (spec, "spec_breath_lightning"); me_SPoison = !str_cmp (spec, "spec_poison"); me_SExecutioner = !str_cmp (spec, "spec_executioner"); me_SAnyBreath = !str_cmp (spec, "spec_breath_any"); me_Position = m_bProto ? Idx.defposition : Mob.defposition; SetMobRisString (me_RFire, RIS_FIRE); SetMobRisString (me_RCold, RIS_COLD); SetMobRisString (me_RElect, RIS_ELECTRICITY); SetMobRisString (me_REnergy, RIS_ENERGY); SetMobRisString (me_RPoison, RIS_POISON); SetMobRisString (me_RBlunt, RIS_BLUNT); SetMobRisString (me_RPierce, RIS_PIERCE); SetMobRisString (me_RSlash, RIS_SLASH); SetMobRisString (me_RAcid, RIS_ACID); SetMobRisString (me_RNonMagic, RIS_NONMAGIC); SetMobRisString (me_RDrain, RIS_DRAIN); SetMobRisString (me_RSleep, RIS_SLEEP); SetMobRisString (me_RCharm, RIS_CHARM); SetMobRisString (me_RHold, RIS_HOLD); SetMobRisString (me_RMagic, RIS_MAGIC); SetMobRisString (me_RPlus1, RIS_PLUS1); SetMobRisString (me_RPlus2, RIS_PLUS2); SetMobRisString (me_RPlus3, RIS_PLUS3); SetMobRisString (me_RPlus4, RIS_PLUS4); SetMobRisString (me_RPlus5, RIS_PLUS5); SetMobRisString (me_RPlus6, RIS_PLUS6); // load local f-page items int Race = m_bProto ? Idx.race : Mob.GetRace (); mf_Human = Race == RaceTable.GetNpcRace ("human"); mf_Neand = Race == RaceTable.GetNpcRace ("neanderthal"); mf_Avis = Race == RaceTable.GetNpcRace ("avis"); mf_Amph = Race == RaceTable.GetNpcRace ("amphibian"); mf_Elf = Race == RaceTable.GetNpcRace ("elf"); mf_Orc = Race == RaceTable.GetNpcRace ("orc"); mf_BugBear = Race == RaceTable.GetNpcRace ("bugbear"); mf_Bovine = Race == RaceTable.GetNpcRace ("bovine"); mf_Dwarf = Race == RaceTable.GetNpcRace ("dwarf"); mf_Skeleton = Race == RaceTable.GetNpcRace ("skeleton"); mf_Dragon = Race == RaceTable.GetNpcRace ("dragon"); mf_Canine = Race == RaceTable.GetNpcRace ("canine"); mf_Ant = Race == RaceTable.GetNpcRace ("ant"); mf_Halfling = Race == RaceTable.GetNpcRace ("halfling"); mf_Thoul = Race == RaceTable.GetNpcRace ("thoul"); mf_Rust = Race == RaceTable.GetNpcRace ("rustmonster"); mf_Crust = Race == RaceTable.GetNpcRace ("crustacean"); mf_Bee = Race == RaceTable.GetNpcRace ("bee"); mf_Pixie = Race == RaceTable.GetNpcRace ("pixie"); mf_Undead = Race == RaceTable.GetNpcRace ("undead"); mf_Shadow = Race == RaceTable.GetNpcRace ("shadow"); mf_Feline = Race == RaceTable.GetNpcRace ("feline"); mf_Beetle = Race == RaceTable.GetNpcRace ("beetle"); mf_Vampire = Race == RaceTable.GetNpcRace ("vampire"); mf_Zombie = Race == RaceTable.GetNpcRace ("zombie"); mf_ShapeShifter = Race == RaceTable.GetNpcRace ("shapeshifter"); mf_Fish = Race == RaceTable.GetNpcRace ("fish"); mf_Fly = Race == RaceTable.GetNpcRace ("fly"); mf_Gargolye = Race == RaceTable.GetNpcRace ("gargoyle"); mf_Ape = Race == RaceTable.GetNpcRace ("ape"); mf_Shrieker = Race == RaceTable.GetNpcRace ("shrieker"); mf_Insect = Race == RaceTable.GetNpcRace ("insect"); mf_Locust = Race == RaceTable.GetNpcRace ("locust"); mf_Ghoul = Race == RaceTable.GetNpcRace ("ghoul"); mf_Baboon = Race == RaceTable.GetNpcRace ("baboon"); mf_Stirge = Race == RaceTable.GetNpcRace ("stirge"); mf_Mammal = Race == RaceTable.GetNpcRace ("mammal"); mf_Snake = Race == RaceTable.GetNpcRace ("snake"); mf_Gnoll = Race == RaceTable.GetNpcRace ("gnoll"); mf_Bat = Race == RaceTable.GetNpcRace ("bat"); mf_Wight = Race == RaceTable.GetNpcRace ("wight"); mf_Porcine = Race == RaceTable.GetNpcRace ("porcine"); mf_Spider = Race == RaceTable.GetNpcRace ("spider"); mf_Gnome = Race == RaceTable.GetNpcRace ("gnome"); mf_Bear = Race == RaceTable.GetNpcRace ("bear"); mf_Reptile = Race == RaceTable.GetNpcRace ("reptile"); mf_Worm = Race == RaceTable.GetNpcRace ("worm"); mf_Goblin = Race == RaceTable.GetNpcRace ("goblin"); mf_Boar = Race == RaceTable.GetNpcRace ("boar"); mf_Rodent = Race == RaceTable.GetNpcRace ("rodent"); mf_Golem = Race == RaceTable.GetNpcRace ("golem"); mf_Cat = Race == RaceTable.GetNpcRace ("cat"); mf_Trog = Race == RaceTable.GetNpcRace ("troglodyte"); mf_Gel = Race == RaceTable.GetNpcRace ("gelatin"); mf_Gorgon = Race == RaceTable.GetNpcRace ("gorgon"); mf_Dog = Race == RaceTable.GetNpcRace ("dog"); mf_Spirit = Race == RaceTable.GetNpcRace ("spirit"); mf_Mold = Race == RaceTable.GetNpcRace ("mold"); mf_Harpy = Race == RaceTable.GetNpcRace ("harpy"); mf_Ferret = Race == RaceTable.GetNpcRace ("ferret"); mf_Magical = Race == RaceTable.GetNpcRace ("magical"); mf_Ooze = Race == RaceTable.GetNpcRace ("ooze"); mf_HobGob = Race == RaceTable.GetNpcRace ("hobgoblin"); mf_Horse = Race == RaceTable.GetNpcRace ("horse"); mf_Slime = Race == RaceTable.GetNpcRace ("slime"); mf_Kobold = Race == RaceTable.GetNpcRace ("kobold"); mf_Mule = Race == RaceTable.GetNpcRace ("mule"); mf_LizardMan = Race == RaceTable.GetNpcRace ("lizardman"); mf_Rat = Race == RaceTable.GetNpcRace ("rat"); mf_Lycan = Race == RaceTable.GetNpcRace ("lycanthrope"); mf_Shrew = Race == RaceTable.GetNpcRace ("shrew"); mf_Minotaur = Race == RaceTable.GetNpcRace ("minotaur"); mf_Wolf = Race == RaceTable.GetNpcRace ("wolf"); } void CMobMenu::SetMobRisString (char* str, int bit) { strcpy (str, "..."); CMobIndexData &Idx = *m_pMob->GetMobIndex (); int Resist = m_bProto ? Idx.resistant : m_pMob->GetResistFlags (); int Immune = m_bProto ? Idx.immune : m_pMob->GetImmuneFlags (); int Suscept = m_bProto ? Idx.susceptible : m_pMob->GetSusceptFlags (); if (IS_SET (Resist, bit)) str [0] = 'R'; if (IS_SET (Immune, bit)) str [1] = 'I'; if (IS_SET (Suscept, bit)) str [2] = 'S'; } void CMobMenu::SetMobRisFlag (char* ris, int bit) { if (ris [0] == 'R') then m_pMob->SetResistFlags (bit); if (ris [1] == 'I') then m_pMob->SetImmuneFlags (bit); if (ris [2] == 'S') then m_pMob->SetSusceptFlags (bit); if (m_bProto) { CMobIndexData &Idx = *m_pMob->GetMobIndex (); if (ris [0] == 'R') then SET_BIT (Idx.resistant, bit); if (ris [1] == 'I') then SET_BIT (Idx.immune, bit); if (ris [2] == 'S') then SET_BIT (Idx.susceptible, bit); } } int CMobMenu::GetMobRace () { if (mf_Human) return RaceTable.GetNpcRace ("human"); if (mf_Neand) return RaceTable.GetNpcRace ("neanderthal"); if (mf_Avis) return RaceTable.GetNpcRace ("avis"); if (mf_Amph) return RaceTable.GetNpcRace ("amphibian"); if (mf_Elf) return RaceTable.GetNpcRace ("elf"); if (mf_Orc) return RaceTable.GetNpcRace ("orc"); if (mf_BugBear) return RaceTable.GetNpcRace ("bugbear"); if (mf_Bovine) return RaceTable.GetNpcRace ("bovine"); if (mf_Dwarf) return RaceTable.GetNpcRace ("dwarf"); if (mf_Skeleton) return RaceTable.GetNpcRace ("skeleton"); if (mf_Dragon) return RaceTable.GetNpcRace ("dragon"); if (mf_Canine) return RaceTable.GetNpcRace ("canine"); if (mf_Ant) return RaceTable.GetNpcRace ("ant"); if (mf_Halfling) return RaceTable.GetNpcRace ("halfling"); if (mf_Thoul) return RaceTable.GetNpcRace ("thoul"); if (mf_Rust) return RaceTable.GetNpcRace ("rustmonster"); if (mf_Crust) return RaceTable.GetNpcRace ("crustacean"); if (mf_Bee) return RaceTable.GetNpcRace ("bee"); if (mf_Pixie) return RaceTable.GetNpcRace ("pixie"); if (mf_Undead) return RaceTable.GetNpcRace ("undead"); if (mf_Shadow) return RaceTable.GetNpcRace ("shadow"); if (mf_Feline) return RaceTable.GetNpcRace ("feline"); if (mf_Beetle) return RaceTable.GetNpcRace ("beetle"); if (mf_Vampire) return RaceTable.GetNpcRace ("vampire"); if (mf_Zombie) return RaceTable.GetNpcRace ("zombie"); if (mf_ShapeShifter) return RaceTable.GetNpcRace ("shapeshifter"); if (mf_Fish) return RaceTable.GetNpcRace ("fish"); if (mf_Fly) return RaceTable.GetNpcRace ("fly"); if (mf_Gargolye) return RaceTable.GetNpcRace ("gargoyle"); if (mf_Ape) return RaceTable.GetNpcRace ("ape"); if (mf_Shrieker) return RaceTable.GetNpcRace ("shrieker"); if (mf_Insect) return RaceTable.GetNpcRace ("insect"); if (mf_Locust) return RaceTable.GetNpcRace ("locust"); if (mf_Ghoul) return RaceTable.GetNpcRace ("ghoul"); if (mf_Baboon) return RaceTable.GetNpcRace ("baboon"); if (mf_Stirge) return RaceTable.GetNpcRace ("stirge"); if (mf_Mammal) return RaceTable.GetNpcRace ("mammal"); if (mf_Snake) return RaceTable.GetNpcRace ("snake"); if (mf_Gnoll) return RaceTable.GetNpcRace ("gnoll"); if (mf_Bat) return RaceTable.GetNpcRace ("bat"); if (mf_Wight) return RaceTable.GetNpcRace ("wight"); if (mf_Porcine) return RaceTable.GetNpcRace ("porcine"); if (mf_Spider) return RaceTable.GetNpcRace ("spider"); if (mf_Gnome) return RaceTable.GetNpcRace ("gnome"); if (mf_Bear) return RaceTable.GetNpcRace ("bear"); if (mf_Reptile) return RaceTable.GetNpcRace ("reptile"); if (mf_Worm) return RaceTable.GetNpcRace ("worm"); if (mf_Goblin) return RaceTable.GetNpcRace ("goblin"); if (mf_Boar) return RaceTable.GetNpcRace ("boar"); if (mf_Rodent) return RaceTable.GetNpcRace ("rodent"); if (mf_Golem) return RaceTable.GetNpcRace ("golem"); if (mf_Cat) return RaceTable.GetNpcRace ("cat"); if (mf_Trog) return RaceTable.GetNpcRace ("troglodyte"); if (mf_Gel) return RaceTable.GetNpcRace ("gelatin"); if (mf_Gorgon) return RaceTable.GetNpcRace ("gorgon"); if (mf_Dog) return RaceTable.GetNpcRace ("dog"); if (mf_Spirit) return RaceTable.GetNpcRace ("spirit"); if (mf_Mold) return RaceTable.GetNpcRace ("mold"); if (mf_Harpy) return RaceTable.GetNpcRace ("harpy"); if (mf_Ferret) return RaceTable.GetNpcRace ("ferret"); if (mf_Magical) return RaceTable.GetNpcRace ("magical"); if (mf_Ooze) return RaceTable.GetNpcRace ("ooze"); if (mf_HobGob) return RaceTable.GetNpcRace ("hobgoblin"); if (mf_Horse) return RaceTable.GetNpcRace ("horse"); if (mf_Slime) return RaceTable.GetNpcRace ("slime"); if (mf_Kobold) return RaceTable.GetNpcRace ("kobold"); if (mf_Mule) return RaceTable.GetNpcRace ("mule"); if (mf_LizardMan) return RaceTable.GetNpcRace ("lizardman"); if (mf_Rat) return RaceTable.GetNpcRace ("rat"); if (mf_Lycan) return RaceTable.GetNpcRace ("lycanthrope"); if (mf_Shrew) return RaceTable.GetNpcRace ("shrew"); if (mf_Minotaur) return RaceTable.GetNpcRace ("minotaur"); if (mf_Wolf) return RaceTable.GetNpcRace ("wolf"); return -1; } SPEC_FUN* CMobMenu::GetSelectedSpecFun () { if (me_SFido) return spec_lookup ("spec_fido"); if (me_SAdept) return spec_lookup ("spec_cast_adept"); if (me_SFireBreath) return spec_lookup ("spec_breath_fire"); if (me_SGuard) return spec_lookup ("spec_guard"); if (me_SCleric) return spec_lookup ("spec_cast_cleric"); if (me_SFrostBreath) return spec_lookup ("spec_breath_frost"); if (me_SJanitor) return spec_lookup ("spec_janitor"); if (me_SMage) return spec_lookup ("spec_cast_mage"); if (me_SAcidBreath) return spec_lookup ("spec_breath_acid"); if (me_SThief) return spec_lookup ("spec_thief"); if (me_SUndead) return spec_lookup ("spec_cast_undead"); if (me_SGasBreath) return spec_lookup ("spec_breath_gas"); if (me_SMayor) return spec_lookup ("spec_mayor"); if (me_SLightningBreath) return spec_lookup ("spec_breath_lightning"); if (me_SPoison) return spec_lookup ("spec_poison"); if (me_SExecutioner) return spec_lookup ("spec_executioner"); if (me_SAnyBreath) return spec_lookup ("spec_breath_any"); return NULL; } #define OFFSET(aa) offsetof(CMobMenu,aa) CMenuData MobPage_A [] = { { '1', 'a', 2, 20, 59, OFFSET(ma_Name), MT_CSTRING, 0, NULL }, { '1', 'b', 3, 20, 59, OFFSET(ma_Short), MT_CSTRING, 0, NULL }, { '1', 'c', 4, 10, 68, OFFSET(ma_Long), MT_CSTRING, 0, MenuStringEditFn }, { '1', 'd', 5, 10, 68, OFFSET(ma_Desc), MT_CSTRING, 0, MenuStringEditFn }, { '2', 'a', 9, 12, 3, OFFSET(ma_Level), MT_INT, 0, NULL }, { '2', 'b', 10, 12, 6, OFFSET(ma_Sex), MT_INT, 0, NULL }, { '2', 'c', 11, 12, 11, OFFSET(ma_Gold), MT_INT, 0, NULL }, { '2', 'd', 12, 12, 4, OFFSET(ma_Align), MT_SINT, 0, NULL }, { '2', 'e', 13, 18, 2, OFFSET(ma_InvLevel), MT_INT, 0, NULL }, { '3', 'a', 9, 32, 2, OFFSET(ma_PermStr), MT_INT, 0, NULL }, { '3', 'b', 10, 32, 2, OFFSET(ma_PermInt), MT_INT, 0, NULL }, { '3', 'c', 11, 32, 2, OFFSET(ma_PermWis), MT_INT, 0, NULL }, { '3', 'd', 12, 32, 2, OFFSET(ma_PermDex), MT_INT, 0, NULL }, { '3', 'e', 13, 32, 2, OFFSET(ma_PermCon), MT_INT, 0, NULL }, { '3', 'f', 14, 32, 2, OFFSET(ma_PermCha), MT_INT, 0, NULL }, { '3', 'g', 15, 31, 4, OFFSET(ma_Ac), MT_SINT, 0, NULL }, { '4', 'a', 9, 49, 1, OFFSET(ma_Mage), MT_BOOL, 0, NULL }, { '4', 'b', 10, 49, 1, OFFSET(ma_Thief), MT_BOOL, 0, NULL }, { '4', 'c', 11, 49, 1, OFFSET(ma_Vampire), MT_BOOL, 0, NULL }, { '4', 'd', 12, 49, 1, OFFSET(ma_Ranger), MT_BOOL, 0, NULL }, { '4', 'e', 13, 49, 1, OFFSET(ma_Butcher), MT_BOOL, 0, NULL }, { '4', 'f', 14, 49, 1, OFFSET(ma_Mayor), MT_BOOL, 0, NULL }, { '4', 'g', 15, 49, 1, OFFSET(ma_Queen), MT_BOOL, 0, NULL }, { '4', 'h', 9, 68, 1, OFFSET(ma_Cleric), MT_BOOL, 0, NULL }, { '4', 'i', 10, 68, 1, OFFSET(ma_Warrior), MT_BOOL, 0, NULL }, { '4', 'j', 11, 68, 1, OFFSET(ma_Druid), MT_BOOL, 0, NULL }, { '4', 'k', 12, 68, 1, OFFSET(ma_Baker), MT_BOOL, 0, NULL }, { '4', 'l', 13, 68, 1, OFFSET(ma_BlackSmith), MT_BOOL, 0, NULL }, { '4', 'm', 14, 68, 1, OFFSET(ma_King), MT_BOOL, 0, NULL }, { '4', 'n', 15, 68, 1, OFFSET(ma_Augurer), MT_BOOL, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData MobPage_B [] = { { '1', 'a', 4, 12, 1, OFFSET(mb_Train), MT_BOOL, 0, NULL }, { '1', 'b', 5, 12, 1, OFFSET(mb_PolySelf), MT_BOOL, 0, NULL }, { '1', 'c', 6, 12, 1, OFFSET(mb_NoWander), MT_BOOL, 0, NULL }, { '1', 'd', 7, 13, 1, OFFSET(mb_Secretive), MT_BOOL, 0, NULL }, { '1', 'e', 2, 29, 1, OFFSET(mb_Sentinel), MT_BOOL, 0, NULL }, { '1', 'f', 3, 29, 1, OFFSET(mb_StayArea), MT_BOOL, 0, NULL }, { '1', 'g', 4, 29, 1, OFFSET(mb_Practice), MT_BOOL, 0, NULL }, { '1', 'h', 5, 29, 1, OFFSET(mb_MetaAggro), MT_BOOL, 0, NULL }, { '1', 'i', 6, 29, 1, OFFSET(mb_Mountable), MT_BOOL, 0, NULL }, { '1', 'j', 7, 29, 1, OFFSET(mb_Polymorphed), MT_BOOL, 0, NULL }, { '1', 'k', 2, 47, 1, OFFSET(mb_Scavenger), MT_BOOL, 0, NULL }, { '1', 'l', 3, 47, 1, OFFSET(mb_Wimpy), MT_BOOL, 0, NULL }, { '1', 'm', 4, 47, 1, OFFSET(mb_Immortal), MT_BOOL, 0, NULL }, { '1', 'n', 5, 47, 1, OFFSET(mb_Guardian), MT_BOOL, 0, NULL }, { '1', 'o', 6, 47, 1, OFFSET(mb_Mounted), MT_BOOL, 0, NULL }, { '1', 'p', 7, 47, 1, OFFSET(mb_MobInvis), MT_BOOL, 0, NULL }, { '1', 'q', 2, 63, 1, OFFSET(mb_Aggro), MT_BOOL, 0, NULL }, { '1', 'r', 3, 63, 1, OFFSET(mb_Pet), MT_BOOL, 0, NULL }, { '1', 's', 4, 63, 1, OFFSET(mb_Deadly), MT_BOOL, 0, NULL }, { '1', 't', 5, 63, 1, OFFSET(mb_Running), MT_BOOL, 0, NULL }, { '1', 'u', 6, 63, 1, OFFSET(mb_Scholar), MT_BOOL, 0, NULL }, { '1', 'v', 7, 63, 1, OFFSET(mb_NoAssist), MT_BOOL, 0, NULL }, { '2', 'a', 11, 12, 1, OFFSET(mb_ASanct), MT_BOOL, 0, NULL }, { '2', 'b', 12, 12, 1, OFFSET(mb_AFlaming), MT_BOOL, 0, NULL }, { '2', 'c', 13, 12, 1, OFFSET(mb_ASleep), MT_BOOL, 0, NULL }, { '2', 'd', 14, 12, 1, OFFSET(mb_AFly), MT_BOOL, 0, NULL }, { '2', 'e', 15, 12, 1, OFFSET(mb_AScry), MT_BOOL, 0, NULL }, { '2', 'f', 16, 12, 1, OFFSET(mb_AInv), MT_BOOL, 0, NULL }, { '2', 'g', 9, 29, 1, OFFSET(mb_Blind), MT_BOOL, 0, NULL }, { '2', 'h', 10, 29, 1, OFFSET(mb_DetMagic), MT_BOOL, 0, NULL }, { '2', 'i', 11, 29, 1, OFFSET(mb_AFaerieFire), MT_BOOL, 0, NULL }, { '2', 'j', 12, 29, 1, OFFSET(mb_APoison), MT_BOOL, 0, NULL }, { '2', 'k', 13, 29, 1, OFFSET(mb_AHide), MT_BOOL, 0, NULL }, { '2', 'l', 14, 29, 1, OFFSET(mb_APass), MT_BOOL, 0, NULL }, { '2', 'm', 15, 29, 1, OFFSET(mb_AFireShield), MT_BOOL, 0, NULL }, { '2', 'n', 9, 47, 1, OFFSET(mb_DetInv), MT_BOOL, 0, NULL }, { '2', 'o', 10, 47, 1, OFFSET(mb_DetHidden), MT_BOOL, 0, NULL }, { '2', 'p', 11, 47, 1, OFFSET(mb_AInfra), MT_BOOL, 0, NULL }, { '2', 'q', 12, 47, 1, OFFSET(mb_AProtect), MT_BOOL, 0, NULL }, { '2', 'r', 13, 47, 1, OFFSET(mb_ASneak), MT_BOOL, 0, NULL }, { '2', 's', 14, 47, 1, OFFSET(mb_ATrueSight), MT_BOOL, 0, NULL }, { '2', 't', 15, 47, 1, OFFSET(mb_AShockShield), MT_BOOL, 0, NULL }, { '2', 'u', 9, 63, 1, OFFSET(mb_DetEvil), MT_BOOL, 0, NULL }, { '2', 'v', 10, 63, 1, OFFSET(mb_AHold), MT_BOOL, 0, NULL }, { '2', 'w', 11, 63, 1, OFFSET(mb_ACurse), MT_BOOL, 0, NULL }, { '2', 'x', 12, 63, 1, OFFSET(mb_AParalysis), MT_BOOL, 0, NULL }, { '2', 'y', 13, 63, 1, OFFSET(mb_ACharm), MT_BOOL, 0, NULL }, { '2', 'z', 14, 63, 1, OFFSET(mb_ADetTrap), MT_BOOL, 0, NULL }, { '2', 'A', 15, 63, 1, OFFSET(mb_AFloat), MT_BOOL, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData MobPage_C [] = { { '1', 'a', 5, 11, 1, OFFSET(mc_Drain), MT_BOOL, 0, NULL }, { '1', 'b', 6, 11, 1, OFFSET(mc_Poison), MT_BOOL, 0, NULL }, { '1', 'c', 7, 11, 1, OFFSET(mc_Curse), MT_BOOL, 0, NULL }, { '1', 'd', 8, 11, 1, OFFSET(mc_Weaken), MT_BOOL, 0, NULL }, { '1', 'e', 9, 11, 1, OFFSET(mc_Trip), MT_BOOL, 0, NULL }, { '1', 'f', 10, 11, 1, OFFSET(mc_Bite), MT_BOOL, 0, NULL }, { '1', 'g', 2, 27, 1, OFFSET(mc_Bash), MT_BOOL, 0, NULL }, { '1', 'h', 3, 27, 1, OFFSET(mc_Kick), MT_BOOL, 0, NULL }, { '1', 'i', 4, 27, 1, OFFSET(mc_Gaze), MT_BOOL, 0, NULL }, { '1', 'j', 5, 27, 1, OFFSET(mc_Tail), MT_BOOL, 0, NULL }, { '1', 'k', 6, 27, 1, OFFSET(mc_BackStab), MT_BOOL, 0, NULL }, { '1', 'l', 7, 27, 1, OFFSET(mc_FireBall), MT_BOOL, 0, NULL }, { '1', 'm', 8, 30, 1, OFFSET(mc_FlameStrike), MT_BOOL, 0, NULL }, { '1', 'n', 9, 30, 1, OFFSET(mc_ColorSpray), MT_BOOL, 0, NULL }, { '1', 'o', 10, 30, 1, OFFSET(mc_NPoison), MT_BOOL, 0, NULL }, { '1', 'p', 2, 45, 1, OFFSET(mc_Claws), MT_BOOL, 0, NULL }, { '1', 'q', 3, 45, 1, OFFSET(mc_Stun), MT_BOOL, 0, NULL }, { '1', 'r', 4, 45, 1, OFFSET(mc_Feed), MT_BOOL, 0, NULL }, { '1', 's', 5, 45, 1, OFFSET(mc_Harm), MT_BOOL, 0, NULL }, { '1', 't', 6, 45, 1, OFFSET(mc_Punch), MT_BOOL, 0, NULL }, { '1', 'u', 7, 45, 1, OFFSET(mc_Sting), MT_BOOL, 0, NULL }, { '1', 'v', 8, 45, 1, OFFSET(mc_Gouge), MT_BOOL, 0, NULL }, { '1', 'w', 2, 69, 1, OFFSET(mc_FireBreath), MT_BOOL, 0, NULL }, { '1', 'x', 3, 69, 1, OFFSET(mc_AcidBreath), MT_BOOL, 0, NULL }, { '1', 'y', 4, 69, 1, OFFSET(mc_GasBreath), MT_BOOL, 0, NULL }, { '1', 'z', 5, 69, 1, OFFSET(mc_FrostBreath), MT_BOOL, 0, NULL }, { '1', 'A', 6, 69, 1, OFFSET(mc_LightningBreath), MT_BOOL, 0, NULL }, { '1', 'B', 7, 69, 1, OFFSET(mc_CSerious), MT_BOOL, 0, NULL }, { '1', 'C', 8, 69, 1, OFFSET(mc_CCritical), MT_BOOL, 0, NULL }, { '1', 'D', 9, 69, 1, OFFSET(mc_EarthQuake), MT_BOOL, 0, NULL }, { '1', 'E', 10, 69, 1, OFFSET(mc_Blind), MT_BOOL, 0, NULL }, { '2', 'a', 14, 11, 1, OFFSET(mc_DDodge), MT_BOOL, 0, NULL }, { '2', 'b', 15, 11, 1, OFFSET(mc_DParry), MT_BOOL, 0, NULL }, { '2', 'c', 16, 11, 1, OFFSET(mc_DDisarm), MT_BOOL, 0, NULL }, { '2', 'd', 12, 31, 1, OFFSET(mc_Sanct), MT_BOOL, 0, NULL }, { '2', 'e', 13, 31, 1, OFFSET(mc_DShield), MT_BOOL, 0, NULL }, { '2', 'f', 14, 31, 1, OFFSET(mc_DFireShield), MT_BOOL, 0, NULL }, { '2', 'g', 15, 31, 1, OFFSET(mc_DShockShield), MT_BOOL, 0, NULL }, { '2', 'h', 16, 31, 1, OFFSET(mc_DStoneSkin), MT_BOOL, 0, NULL }, { '2', 'i', 12, 51, 1, OFFSET(mc_CureLight), MT_BOOL, 0, NULL }, { '2', 'j', 13, 51, 1, OFFSET(mc_DCureSerious), MT_BOOL, 0, NULL }, { '2', 'k', 14, 51, 1, OFFSET(mc_DCureCritical), MT_BOOL, 0, NULL }, { '2', 'l', 15, 51, 1, OFFSET(mc_DHeal), MT_BOOL, 0, NULL }, { '2', 'm', 16, 51, 1, OFFSET(mc_DMonsum1), MT_BOOL, 0, NULL }, { '2', 'n', 17, 51, 1, OFFSET(mc_DMonsum2), MT_BOOL, 0, NULL }, { '2', 'o', 12, 70, 1, OFFSET(mc_DDispelEvil), MT_BOOL, 0, NULL }, { '2', 'p', 13, 70, 1, OFFSET(mc_DDispelMagic), MT_BOOL, 0, NULL }, { '2', 'q', 14, 70, 1, OFFSET(mc_DTeleport), MT_BOOL, 0, NULL }, { '2', 'r', 15, 70, 1, OFFSET(mc_DBless), MT_BOOL, 0, NULL }, { '2', 's', 16, 70, 1, OFFSET(mc_DMonsum3), MT_BOOL, 0, NULL }, { '2', 't', 17, 70, 1, OFFSET(mc_DMonsum4), MT_BOOL, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData MobPage_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 MobPage_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', 13, 10, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 0,16 }, { '2', 'b', 9, 34, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 1,16 }, { '2', 'c', 10, 34, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 2,16 }, { '2', 'd', 11, 34, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 3,16 }, { '2', 'e', 12, 34, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 4,16 }, { '2', 'f', 13, 34, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 5,16 }, { '2', 'g', 9, 53, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 6,16 }, { '2', 'h', 10, 53, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 7,16 }, { '2', 'i', 11, 53, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 8,16 }, { '2', 'j', 12, 53, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 9,16 }, { '2', 'k', 13, 53, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 10,16 }, { '2', 'l', 9, 70, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 11,16 }, { '2', 'm', 10, 70, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 12,16 }, { '2', 'n', 11, 70, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 13,16 }, { '2', 'o', 12, 70, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 14,16 }, { '2', 'p', 13, 70, 1, OFFSET(me_Position), MT_GROUP, 0, NULL, 15,16 }, { '3', 'a', 18, 9, 3, OFFSET(me_RFire), MT_RIS, 0, NULL }, { '3', 'b', 15, 21, 3, OFFSET(me_RCold), MT_RIS, 0, NULL }, { '3', 'c', 16, 21, 3, OFFSET(me_RElect), MT_RIS, 0, NULL }, { '3', 'd', 17, 21, 3, OFFSET(me_REnergy), MT_RIS, 0, NULL }, { '3', 'e', 18, 21, 3, OFFSET(me_RPoison), MT_RIS, 0, NULL }, { '3', 'f', 15, 34, 3, OFFSET(me_RBlunt), MT_RIS, 0, NULL }, { '3', 'g', 16, 34, 3, OFFSET(me_RPierce), MT_RIS, 0, NULL }, { '3', 'h', 17, 34, 3, OFFSET(me_RSlash), MT_RIS, 0, NULL }, { '3', 'i', 18, 34, 3, OFFSET(me_RAcid), MT_RIS, 0, NULL }, { '3', 'j', 15, 47, 3, OFFSET(me_RNonMagic), MT_RIS, 0, NULL }, { '3', 'k', 16, 47, 3, OFFSET(me_RDrain), MT_RIS, 0, NULL }, { '3', 'l', 17, 47, 3, OFFSET(me_RSleep), MT_RIS, 0, NULL }, { '3', 'm', 18, 47, 3, OFFSET(me_RCharm), MT_RIS, 0, NULL }, { '3', 'n', 15, 60, 3, OFFSET(me_RHold), MT_RIS, 0, NULL }, { '3', 'o', 16, 60, 3, OFFSET(me_RMagic), MT_RIS, 0, NULL }, { '3', 'p', 17, 60, 3, OFFSET(me_RPlus1), MT_RIS, 0, NULL }, { '3', 'q', 18, 60, 3, OFFSET(me_RPlus2), MT_RIS, 0, NULL }, { '3', 'r', 15, 73, 3, OFFSET(me_RPlus3), MT_RIS, 0, NULL }, { '3', 's', 16, 73, 3, OFFSET(me_RPlus4), MT_RIS, 0, NULL }, { '3', 't', 17, 73, 3, OFFSET(me_RPlus5), MT_RIS, 0, NULL }, { '3', 'u', 18, 73, 3, OFFSET(me_RPlus6), MT_RIS, 0, NULL }, { 0, 0, 0, 0, 0, 0, MT_END } }; CMenuData MobPage_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 } }; CMenuData *MobMenuData [] = { MobPage_A, MobPage_B, MobPage_C, MobPage_D, MobPage_E, MobPage_F, NULL };