/* * Created by SharpDevelop. * User: cherron * Date: 12/26/2005 * Time: 1:15 AM * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using System.Text.RegularExpressions; namespace Jessie.GameState { public enum jtbvTemperment { HOSTILE = 0, PEACEFUL = 1, TAME = 2, } /// /// Description of jtbvMonster. /// public class jtbvMonster { public string Species = ""; public string Name = ""; public char Symbol = ' '; public jtbvTemperment Temperment = jtbvTemperment.HOSTILE; public bool Confused = false; public bool Stunned = false; private jtbvMonster() { } public int Danger { get { if (this.Temperment == jtbvTemperment.HOSTILE) return 1; else return 0; } } public bool RespectsE { get { if ((Symbol == '@') || (Symbol == 'A') || (Species == "minotaur") || (Species == "werewolf") || (Species == "werejackal") || (Species == "wererat")) return false; else return true; } } public bool TameWithVeggies { get { bool retVal = false; switch (this.Species) { case "pony": case "horse": case "warhorse": retVal = true; break; default: retVal = false; break; } return retVal; } } public bool TameWithMeat { get { bool retVal = false; switch (this.Species) { case "kitten": case "housecat": case "large cat": case "little dog": case "dog": case "large dog": retVal = true; break; default: retVal = false; break; } return retVal; } } public bool AttackMelee { get { bool retVal = true; switch (this.Species) { case "gelatinous cube": case "floating eye": case "freezing sphere": case "flaming sphere": case "shocking sphere": retVal = false; break; default: retVal = true; break; } return retVal; } } public bool AttackRanged { get { bool retVal = false; switch (this.Species) { case "gas spore": case "green slime": case "gelatinous cube": case "floating eye": case "freezing sphere": case "flaming sphere": case "shocking sphere": case "mind flayer": case "master mind flayer": case "barrow wight": case "wraith": case "Nazgul": case "rust monster": case "disenchanter": case "lich": case "demilich": case "master lich": case "arch-lich": case "wererat": case "werejackal": case "werewolf": case "gremlin": case "wood nymph": case "water nymph": case "mountain nymph": retVal = true; break; default: retVal = false; break; } return retVal; } } // TODO: Take care of these special cases. // case "Medusa": // this.MeleeBlindOnly = true; // case "Wizard of Yendor": // // case "Jubilex": // case "Yeenoghu": // case "Orcus": // case "Geryon": // case "Dispater": // case "Baalzebub": // case "Asmodeus": // case "Demogorgon": // case "Death": // case "Pestilence": // case "Famine": private static string monsterSymbols = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@X'&;:~]"; private static Regex CommonMonsters = new Regex(@"^(peaceful|tame)?\s*(giant ant|killer bee|soldier ant|fire ant|giant beetle|queen bee|acid blob|quivering blob|gelatinous cube|chickatrice|cockatrice|pyrolisk|jackal|fox|coyote|coyote - .+|werejackal|little dog|dog|large dog|dingo|wolf|werewolf|warg|winter wolf cub|winter wolf|hell hound pup|hell hound|gas spore|floating eye|freezing sphere|flaming sphere|shocking sphere|beholder|kitten|housecat|jaguar|lynx|panther|large cat|tiger|gremlin|gargoyle|winged gargoyle|hobbit|dwarf|bugbear|dwarf lord|dwarf king|mind flayer|master mind flayer|manes|homunculus|imp|lemure|quasit|tengu|blue jelly|spotted jelly|ochre jelly|kobold|large kobold|kobold lord|kobold shaman|leprechaun|small mimic|large mimic|giant mimic|wood nymph|water nymph|mountain nymph|goblin|hobgoblin|orc|hill orc|Mordor orc|Uruk-hai|orc shaman|orc-captain|rock piercer|iron piercer|glass piercer|rothe|mumak|leocrotta|wumpus|titanothere|baluchitherium|mastodon|sewer rat|giant rat|rabid rat|wererat|rock mole|woodchuck|cave spider|centipede|giant spider|scorpion|lurker above|trapper|white unicorn|gray unicorn|black unicorn|pony|horse|warhorse|fog cloud|dust vortex|ice vortex|energy vortex|steam vortex|fire vortex|baby long worm|baby purple worm|long worm|purple worm|grid bug|xan|yellow light|black light|zruty|couatl|Aleax|Angel|ki-rin|Archon|bat|giant bat|raven|vampire bat|plains centaur|forest centaur|mountain centaur|baby gray dragon|baby silver dragon|baby red dragon|baby white dragon|baby orange dragon|baby black dragon|baby blue dragon|baby green dragon|baby yellow dragon|gray dragon|silver dragon|red dragon|white dragon|orange dragon|black dragon|blue dragon|green dragon|yellow dragon|stalker|air elemental|fire elemental|earth elemental|water elemental|lichen|brown mold|yellow mold|green mold|red mold|shrieker|violet fungus|gnome|gnome lord|gnomish wizard|gnome king|giant|stone giant|hill giant|fire giant|frost giant|storm giant|ettin|titan|minotaur|jabberwock|Keystone Kop|Kop Sergeant|Kop Lieutenant|Kop Kaptain|lich|demilich|master lich|arch-lich|kobold mummy|gnome mummy|orc mummy|dwarf mummy|elf mummy|human mummy|ettin mummy|giant mummy|red naga hatchling|black naga hatchling|golden naga hatchling|guardian naga hatchling|red naga|black naga|golden naga|guardian naga|ogre|ogre lord|ogre king|gray ooze|brown pudding|black pudding|green slime|quantum mechanic|rust monster|disenchanter|garter snake|snake|water moccasin|pit viper|python|cobra|troll|ice troll|rock troll|water troll|Olog-hai|umber hulk|vampire|vampire lord|vampire mage|barrow wight|wraith|Nazgul|xorn|monkey|ape|owlbear|yeti|carnivorous ape|sasquatch|kobold zombie|gnome zombie|orc zombie|dwarf zombie|elf zombie|human zombie|ettin zombie|giant zombie|ghoul|skeleton|straw golem|paper golem|rope golem|gold golem|leather golem|wood golem|flesh golem|clay golem|stone golem|glass golem|iron golem|human|elf|Woodland-elf|Green-elf|Grey-elf|elf-lord|Elvenking|doppelganger|nurse|shopkeeper|guard|aligned priest|high priest|soldier|sergeant|lieutenant|captain|watchman|watch captain|ghost|shade|water demon|horned devil|succubus|incubus|erinys|barbed devil|marilith|vrock|hezrou|bone devil|ice devil|nalfeshnee|pit fiend|balrog|djinni|sandestin|jellyfish|piranha|shark|giant eel|electric eel|kraken|newt|gecko|iguana|baby crocodile|lizard|chameleon|crocodile|salamander|long worm tail)( .*)?$", RegexOptions.Compiled); private static Regex RareMonsters = new Regex(@"^(peaceful|tame)?\s*(beholder|Cerberus|baby shimmering dragon|shimmering dragon|Vlad the Impaler|vorpal jabberwock|prisoner|Oracle|Medusa|Wizard of Yendor|Croesus|Charon|Jubilex|Yeenoghu|Orcus|Geryon|Dispater|Baalzebub|Asmodeus|Demogorgon|Death|Pestilence|Famine|mail daemon|archeologist|barbarian|caveman|cavewoman|healer|knight|monk|priest|priestess|ranger|rogue|samurai|tourist|valkyrie|wizard|Lord Carnarvon|Pelias|Shaman Karnov|Earendil|Elwing|Hippocrates|King Arthur|Grand Master|Arch Priest|Orion|Master of Thieves|Lord Sato|Twoflower|Norn|Neferet the Green|Minion of Huhetotl|Thoth Amon|Chromatic Dragon|Goblin King|Cyclops|Ixoth|Master Kaen|Nalzok|Scorpius|Master Assassin|Ashikaga Takauji|Lord Surtur|Dark One|student|chieftain|neanderthal|High-elf|attendant|page|abbot|acolyte|hunter|thug|ninja|roshi|guide|warrior|apprentice|Njezjin|Tsjernigof|Gomel|Ossipewsk|Gorlowka|Konosja|Weliki Oestjoeg|Syktywkar|Sablja|Narodnaja|Kyzyl|Walbrzych|Swidnica|Klodzko|Raciborz|Gliwice|Brzeg|Krnov|Hradec Kralove|Leuk|Brig|Brienz|Thun|Sarnen|Burglen|Elm|Flims|Vals|Schuls|Zum Loch|Skibbereen|Kanturk|Rath Luirc|Ennistymon|Lahinch|Kinnegad|Lugnaquillia|Enniscorthy|Gweebarra|Kittamagh|Nenagh|Sneem|Ballingeary|Kilgarvan|Cahersiveen|Glenbeigh|Kilmihil|Kiltamagh|Droichead Atha|Inniscrone|Clonegal|Lisnaskea|Culdaff|Dunfanaghy|Inishbofin|Kesh|Demirci|Kalecik|Boyabai|Yildizeli|Gaziantep|Siirt|Akhalataki|Tirebolu|Aksaray|Ermenak|Iskenderun|Kadirli|Siverek|Pervari|Malasgirt|Bayburt|Ayancik|Zonguldak|Balya|Tefenni|Artvin|Kars|Makharadze|Malazgirt|Midyat|Birecik|Kirikkale|Alaca|Polatli|Nallihan|Yr Wyddgrug|Trallwng|Mallwyd|Pontarfynach|Rhaeader|Llandrindod|Llanfair-ym-muallt|Y-Fenni|Measteg|Rhydaman|Beddgelert|Curig|Llanrwst|Llanerchymedd|Caergybi|Nairn|Turriff|Inverurie|Braemar|Lochnagar|Kerloch|Beinn a Ghlo|Drumnadrochit|Morven|Uist|Storr|Sgurr na Ciche|Cannich|Gairloch|Kyleakin|Dunvegan|Feyfer|Flugi|Gheel|Havic|Haynin|Hoboken|Imbyze|Juyn|Kinsky|Massis|Matray|Moy|Olycan|Sadelin|Svaving|Tapper|Terwen|Wirix|Ypey|Rastegaisa|Varjag Njarga|Kautekeino|Abisko|Enontekis|Rovaniemi|Avasaksa|Haparanda|Lulea|Gellivare|Oeloe|Kajaani|Fauske|Djasinga|Tjibarusa|Tjiwidej|Pengalengan|Bandjar|Parbalingga|Bojolali|Sarangan|Ngebel|Djombang|Ardjawinangun|Berbek|Papar|Baliga|Tjisolok|Siboga|Banjoewangi|Trenggalek|Karangkobar|Njalindoeng|Pasawahan|Pameunpeuk|Patjitan|Kediri|Pemboeang|Tringanoe|Makin|Tipor|Semai|Berhala|Tegal|Samoe|Voulgezac|Rouffiac|Lerignac|Touverac|Guizengeard|Melac|Neuvicq|Vanzac|Picq|Urignac|Corignac|Fleac|Lonzac|Vergt|Queyssac|Liorac|Echourgnac|Cazelon|Eypau|Carignan|Monbazillac|Jonzac|Pons|Jumilhac|Fenouilledes|Laguiolet|Saujon|Eymoutiers|Eygurande|Eauze|Labouheyre|Ymla|Eed-morra|Cubask|Nieb|Bnowr Falr|Telloc Cyaj|Sperc|Noskcirdneh|Yawolloh|Hyeghu|Niskal|Trahnil|Htargcm|Enrobwem|Kachzi Rellim|Regien|Donmyar|Yelpur|Nosnehpets|Stewe|Renrut|_Zlaw|Nosalnef|Rewuorb|Rellenk|Yad|Cire Htims|Y-crad|Nenilukah|Corsh|Aned|Erreip|Nehpets|Mron|Snivek|Lapu|Kahztiy|Lechaim|Nhoj-lee|Evad'kh|Ettaw-noj|Tsew-mot|Ydna-s|Yao-hang|Tonbar|Kivenhoug|Falo|Nosid-da'r|Ekim-p|Rebrol-nek|Noslo|Yl-rednow|Mured-oog|Ivrajimsal|Nivram|Lez-tneg|Ytnu-haled|Niknar|Zarnesti|Slanic|Nehoiasu|Ludus|Sighisoara|Nisipitu|Razboieni|Bicaz|Dorohoi|Vaslui|Fetesti|Tirgu Neamt|Babadag|Zimnicea|Zlatna|Jiu|Eforie|Mamaia|Silistra|Tulovo|Panagyuritshte|Smolyan|Kirklareli|Pernik|Lom|Haskovo|Dobrinishte|Varvara|Oryahovo|Troyan|Lovech|Sliven|Hebiwerie|Possogroenoe|Asidonhopo|Manlobbi|Adjama|Pakka Pakka|Kabalebo|Wonotobo|Akalapi|Sipaliwini|Annootok|Upernavik|Angmagssalik|Aklavik|Inuvik|Tuktoyaktuk|Chicoutimi|Ouiatchouane|Chibougamau|Matagami|Kipawa|Kinojevis|Abitibi|Maganasipi|Akureyri|Kopasker|Budereyri|Akranes|Bordeyri|Holmavik)( .*)?$", RegexOptions.Compiled); public static jtbvMonster GetMonster(char symbol, string desc) { jtbvMonster retVal = null; Match m = CommonMonsters.Match(desc); if (!m.Success) m = RareMonsters.Match(desc); if ((m.Success) && (monsterSymbols.Contains(symbol.ToString()))) { retVal = new jtbvMonster(); switch (m.Groups[1].Value) { case "tame": retVal.Temperment = jtbvTemperment.TAME; break; case "peaceful": retVal.Temperment = jtbvTemperment.PEACEFUL; break; case "": default: retVal.Temperment = jtbvTemperment.HOSTILE; break; } retVal.Species = m.Groups[2].Value; retVal.Symbol = symbol; //Console.WriteLine("Recognized monster " + retVal.Species); } else if (symbol == 'I') { retVal = new jtbvMonster(); retVal.Symbol = symbol; } return retVal; } } }