public Player(string name, string race, string gender, int affinity, Weapon weapon)
            : base()
        {
            level = 1;
            maxHealth = 100;
            attackDamage = 3;
            magic = 2;
            defense = 0;
            resist = 0;

            inventory = new List<GameItem>();
            this.weapon = weapon;
            this.name = name;
            this.gender = gender;
            this.race = race;
            chosenAffinity = affinity;

            if (gender == "Male")
                attackDamage++;
            else magic++;

            if (race == "Elf")
            {
                magic += 3;
                resist += 1;
                attackDamage -= 1;
                defense -= 1;
            }
            else if (race == "Orc")
            {
                maxHealth += 20;
                defense += 2;
                magic -= 1;
                attackDamage -= 1;
                resist -= 2;
            }
            else if (race == "Dwarf")
            {
                attackDamage += 2;
                magic -= 2;
                maxHealth -= 10;
            }

            if (chosenAffinity == 1)
                magic++;
            else if (chosenAffinity == -1)
                attackDamage++;
            else maxHealth += 10;

            health = maxHealth;

            inventory.Add(weapon);
        }
 public Player(string name, string gender, string race, int chosenAffinity, int affinity,
     int dungeonLevel, int x, int y, int level, int exp, int expNeeded, int gold, 
     Weapon weapon, int maxHealth, int health, int attackDamage, int magic,
     int defense, int resist, StatusEffect status, List<GameItem> inventory)
     : base()
 {
     this.name = name;
     this.gender = gender;
     this.chosenAffinity = chosenAffinity;
     this.affinity = affinity;
     this.dungeonLevel = dungeonLevel;
     this.x = x;
     this.y = y;
     this.level = level;
     this.exp = exp;
     this.expNeeded = expNeeded;
     this.gold = gold;
     this.weapon = weapon;
     this.maxHealth = maxHealth;
     this.health = health;
     this.attackDamage = attackDamage;
     this.magic = magic;
     this.defense = defense;
     this.resist = resist;
     this.status = status;
     this.inventory = inventory;
 }
        private static void LoadGame(string filename, out Player player, out Room room)
        {
            StreamReader file;

            try
            {
                file = File.OpenText(filename);

                player = new Player("none", "Human", "Male", 0, new Weapon("Fists", 0, 0));
                room = new Room(1, 1, new Boss());

                while (!file.EndOfStream)
                {
                    string text = file.ReadLine();

                    //Get Player Data
                    if (text == "player:")
                    {
                        string name = "none";
                        string gender = "Male";
                        string race = "Human";
                        int chosenAffinity = 0;
                        int affinity = 0;
                        int dungeonLevel = 0;
                        int x = 0;
                        int y = 0;
                        int level = 1;
                        int exp = 0;
                        int expNeeded = 10;
                        int gold = 0;
                        Weapon weapon = new Weapon("Fists", 0, 0);
                        int maxHealth = 0;
                        int health = 0;
                        int attackDamage = 0;
                        int magic = 0;
                        int defense = 0;
                        int resist = 0;
                        StatusEffect status = StatusEffect.none;
                        List<GameItem> inventory = new List<GameItem>();

                        while (true)
                        {
                            text = file.ReadLine();
                            string[] subTexts = text.Split(new string[] { ":" }, StringSplitOptions.None);

                            if (subTexts[0] == "name")
                                name = subTexts[1];
                            else if (subTexts[0] == "gender")
                                gender = subTexts[1];
                            else if (subTexts[0] == "race")
                                race = subTexts[1];
                            else if (subTexts[0] == "chosenAffinity")
                                chosenAffinity = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "afinity")
                                affinity = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "dungeonLevel")
                                dungeonLevel = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "x")
                                x = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "y")
                                y = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "level")
                                level = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "exp")
                                exp = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "expNeeded")
                                expNeeded = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "gold")
                                gold = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "weapon")
                            {
                                string weaponName = "none";
                                int cost = 0;
                                int damage = 0;
                                WeaponEffect effect = WeaponEffect.none;
                                int wx = 0, wy = 0;

                                for (int i = 1; i < subTexts.Count(); i += 2)
                                {
                                    if (subTexts[i] == "name")
                                        weaponName = subTexts[i + 1];
                                    else if (subTexts[i] == "cost")
                                        cost = Convert.ToInt32(subTexts[i + 1]);
                                    else if (subTexts[i] == "damage")
                                        damage = Convert.ToInt32(subTexts[i + 1]);
                                    else if (subTexts[i] == "effect")
                                    {
                                        if (subTexts[i + 1] == "burn")
                                            effect = WeaponEffect.burn;
                                        else if (subTexts[i + 1] == "penetrate")
                                            effect = WeaponEffect.penetrate;
                                        else if (subTexts[i + 1] == "curse")
                                            effect = WeaponEffect.curse;
                                        else if (subTexts[i + 1] == "midas")
                                            effect = WeaponEffect.midas;
                                        else if (subTexts[i + 1] == "wisdom")
                                            effect = WeaponEffect.wisdom;
                                        else effect = WeaponEffect.none;
                                    }
                                    else if (subTexts[i] == "x")
                                        wx = Convert.ToInt32(subTexts[i + 1]);
                                    else if (subTexts[i] == "y")
                                        wy = Convert.ToInt32(subTexts[i + 1]);
                                }

                                weapon = new Weapon(weaponName, damage, cost, effect);
                            }
                            else if (subTexts[0] == "maxHealth")
                                maxHealth = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "health")
                                health = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "attackDamage")
                                attackDamage = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "magic")
                                magic = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "defense")
                                defense = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "resist")
                                resist = Convert.ToInt32(subTexts[1]);
                            else if (subTexts[0] == "status")
                            {
                                if (subTexts[1] == "burned")
                                    status = StatusEffect.burned;
                                else if (subTexts[1] == "cursed")
                                    status = StatusEffect.cursed;
                                else status = StatusEffect.none;
                            }
                            else if (subTexts[0] == "inventory")
                            {
                                string invText = file.ReadLine();
                                string[] subInvTexts = invText.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                                int sPos = 0;

                                inventory = new List<GameItem>();

                                while (true)
                                {
                                    if (subInvTexts[sPos] == "type")
                                    {
                                        sPos++;
                                        if (subInvTexts[sPos] == "weapon")
                                        {
                                            string weaponName = "none";
                                            int cost = 0;
                                            int damage = 0;
                                            WeaponEffect effect = WeaponEffect.none;
                                            int wx = 0, wy = 0;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subInvTexts[sPos] == "name")
                                                {
                                                    sPos++;
                                                    weaponName = subInvTexts[sPos];
                                                }
                                                else if (subInvTexts[sPos] == "cost")
                                                {
                                                    sPos++;
                                                    cost = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "damage")
                                                {
                                                    sPos++;
                                                    damage = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    wx = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    wy = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "effect")
                                                {
                                                    sPos++;

                                                    if (subInvTexts[sPos] == "burn")
                                                        effect = WeaponEffect.burn;
                                                    else if (subInvTexts[sPos] == "penetrate")
                                                        effect = WeaponEffect.penetrate;
                                                    else if (subInvTexts[sPos] == "curse")
                                                        effect = WeaponEffect.curse;
                                                    else if (subInvTexts[sPos] == "midas")
                                                        effect = WeaponEffect.midas;
                                                    else if (subInvTexts[sPos] == "wisdom")
                                                        effect = WeaponEffect.wisdom;
                                                    else effect = WeaponEffect.none;
                                                }
                                                else if (subInvTexts[sPos] == "end")
                                                {
                                                    sPos++;
                                                    inventory.Add(new Weapon(weaponName, damage, cost, wx, wy, effect));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subInvTexts[sPos] == "magicWeapon")
                                        {
                                            string weaponName = "none";
                                            int cost = 0;
                                            int magicDamage = 0;
                                            WeaponEffect effect = WeaponEffect.none;
                                            int wx = 0, wy = 0;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subInvTexts[sPos] == "name")
                                                {
                                                    sPos++;
                                                    weaponName = subInvTexts[sPos];
                                                }
                                                else if (subInvTexts[sPos] == "cost")
                                                {
                                                    sPos++;
                                                    cost = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "magicDamage")
                                                {
                                                    sPos++;
                                                    magicDamage = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    wx = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    wy = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "effect")
                                                {
                                                    sPos++;
                                                    if (subInvTexts[sPos] == "burn")
                                                        effect = WeaponEffect.burn;
                                                    else if (subInvTexts[sPos] == "penetrate")
                                                        effect = WeaponEffect.penetrate;
                                                    else if (subInvTexts[sPos] == "curse")
                                                        effect = WeaponEffect.curse;
                                                    else if (subInvTexts[sPos] == "midas")
                                                        effect = WeaponEffect.midas;
                                                    else if (subInvTexts[sPos] == "wisdom")
                                                        effect = WeaponEffect.wisdom;
                                                    else effect = WeaponEffect.none;
                                                }
                                                else if (subInvTexts[sPos] == "end")
                                                {
                                                    sPos++;
                                                    inventory.Add(new MagicWeapon(magicDamage, weaponName, cost, wx, wy, effect));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subInvTexts[sPos] == "noviceFireTome")
                                        {
                                            int wx = 0, wy = 0;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subInvTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    wx = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    wy = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "end")
                                                {
                                                    sPos++;
                                                    inventory.Add(new NoviceFireTome(wx, wy));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subInvTexts[sPos] == "statbooster")
                                        {
                                            int ix = 0, iy = 0;
                                            int statLevel = 1;
                                            string stat = "Health";

                                            while (true)
                                            {
                                                sPos++;

                                                if (subInvTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    ix = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    iy = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "level")
                                                {
                                                    sPos++;
                                                    statLevel = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "stat")
                                                {
                                                    sPos++;
                                                    stat = subInvTexts[sPos];
                                                }
                                                else if (subInvTexts[sPos] == "end")
                                                {
                                                    sPos++;
                                                    inventory.Add(new Statbooster(stat, statLevel, ix, iy));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subInvTexts[sPos] == "statusHealer")
                                        {
                                            int ix = 0, iy = 0;
                                            StatusEffect itemStatus = StatusEffect.none;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subInvTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    ix = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    iy = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "status")
                                                {
                                                    sPos++;
                                                    if (subInvTexts[sPos] == "burned")
                                                        itemStatus = StatusEffect.burned;
                                                    else if (subInvTexts[sPos] == "cursed")
                                                        itemStatus = StatusEffect.cursed;
                                                    else itemStatus = StatusEffect.none;
                                                }
                                                else if (subInvTexts[sPos] == "end")
                                                {
                                                    sPos++;
                                                    inventory.Add(new StatusHealer(itemStatus, ix, iy));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subInvTexts[sPos] == "healthTonicBasic")
                                        {
                                            int hx = 0, hy = 0;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subInvTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    hx = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    hy = Convert.ToInt32(subInvTexts[sPos]);
                                                }
                                                else if (subInvTexts[sPos] == "end")
                                                {
                                                    sPos++;
                                                    inventory.Add(new HealthTonicBasic(hx, hy));
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    else if (subInvTexts[sPos] == "end")
                                        break;
                                    else if (subInvTexts[sPos] == "gameItem")
                                    {
                                        string itemName = "none";
                                        int cost = 0;
                                        string info = "none";
                                        int ix = 0, iy = 0;

                                        while (true)
                                        {
                                            sPos++;

                                            if (subInvTexts[sPos] == "name")
                                            {
                                                sPos++;
                                                itemName = subInvTexts[sPos];
                                            }
                                            else if (subInvTexts[sPos] == "info")
                                            {
                                                sPos++;
                                                info = subInvTexts[sPos];
                                            }
                                            else if (subInvTexts[sPos] == "cost")
                                            {
                                                sPos++;
                                                cost = Convert.ToInt32(subInvTexts[sPos]);
                                            }
                                            else if (subInvTexts[sPos] == "x")
                                            {
                                                sPos++;
                                                ix = Convert.ToInt32(subInvTexts[sPos]);
                                            }
                                            else if (subInvTexts[sPos] == "y")
                                            {
                                                sPos++;
                                                iy = Convert.ToInt32(subInvTexts[sPos]);
                                            }
                                            else if (subInvTexts[sPos] == "end")
                                            {
                                                sPos++;
                                                inventory.Add(new GameItem(itemName, cost, ix, iy, info));
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                            else if (subTexts[0] == "end")
                            {
                                player = new Player(name, gender, race, chosenAffinity, affinity, dungeonLevel, x, y,
                                    level, exp, expNeeded, gold, weapon, maxHealth, health, attackDamage, magic, defense,
                                    resist, status, inventory);
                                break;
                            }
                        }
                    }
                    else if (text == "room:")
                    {
                        text = file.ReadLine();
                        string[] subTexts = text.Split(new string[] { ":" }, StringSplitOptions.None);
                        int sPos = 0;

                        int width = 0, height = 0;
                        int[] exitPos = new int[] { 0, 0 };
                        bool exitOpen = true;
                        int coinCount = 0;
                        int[,] coinPos = new int[coinCount, 2];
                        int enemyCount = 0;
                        List<Enemy> enemies = new List<Enemy>();
                        List<GameItem> items = new List<GameItem>();
                        Boss boss = null;
                        Shopkeeper shopkeeper = null;

                        while (true)
                        {
                            if (subTexts[sPos] == "width")
                            {
                                sPos++;
                                width = Convert.ToInt32(subTexts[sPos]);
                            }
                            else if (subTexts[sPos] == "height")
                            {
                                sPos++;
                                height = Convert.ToInt32(subTexts[sPos]);
                            }
                            else if (subTexts[sPos] == "exitPos")
                            {
                                sPos++;

                                string[] exitPosStrings = subTexts[sPos].Split(new string[] { "," }, StringSplitOptions.None);
                                exitPos[0] = Convert.ToInt32(exitPosStrings[0]);
                                exitPos[1] = Convert.ToInt32(exitPosStrings[1]);
                            }
                            else if (subTexts[sPos] == "exitOpen")
                            {
                                sPos++;
                                exitOpen = Convert.ToBoolean(subTexts[sPos]);
                            }
                            else if (subTexts[sPos] == "coinCount")
                            {
                                sPos++;
                                coinCount = Convert.ToInt32(subTexts[sPos]);
                            }
                            else if (subTexts[sPos] == "coinPos")
                            {
                                sPos++;
                                coinPos = new int[coinCount, 2];
                                int coinNum = 0;

                                while (true)
                                {
                                    if (subTexts[sPos] == "end")
                                    {
                                        break;
                                    }
                                    else
                                    {
                                        string[] stringCoinPos = subTexts[sPos].Split(new string[] { "," }, StringSplitOptions.None);
                                        sPos++;

                                        coinPos[coinNum, 0] = Convert.ToInt32(stringCoinPos[0]);
                                        coinPos[coinNum, 1] = Convert.ToInt32(stringCoinPos[1]);

                                        coinNum++;
                                    }
                                }
                            }
                            else if (subTexts[sPos] == "enemycount")
                            {
                                sPos++;
                                enemyCount = Convert.ToInt32(subTexts[sPos]);
                            }
                            else if (subTexts[sPos] == "enemies")
                            {
                                sPos++;

                                while (true)
                                {
                                    if (subTexts[sPos] == "type")
                                    {
                                        sPos++;

                                        if (subTexts[sPos] == "rat")
                                        {
                                            sPos++;

                                            int ex = 0, ey = 0, level = 1;

                                            while (true)
                                            {
                                                if (subTexts[sPos] == "level")
                                                {
                                                    sPos++;
                                                    level = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    ex = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    ey = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    enemies.Add(new Rat(ex, ey, level));
                                                    break;
                                                }

                                                sPos++;
                                            }
                                        }
                                        else if (subTexts[sPos] == "weakZombie")
                                        {
                                            sPos++;

                                            int ex = 0, ey = 0, level = 1;

                                            while (true)
                                            {
                                                if (subTexts[sPos] == "level")
                                                {
                                                    sPos++;
                                                    level = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    ex = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    ey = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    enemies.Add(new WeakZombie(ex, ey, level));
                                                    break;
                                                }

                                                sPos++;
                                            }
                                        }
                                        else if (subTexts[sPos] == "boneman")
                                        {
                                            sPos++;

                                            int ex = 0, ey = 0, level = 1;

                                            while (true)
                                            {
                                                if (subTexts[sPos] == "level")
                                                {
                                                    sPos++;
                                                    level = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    ex = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    ey = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    enemies.Add(new Boneman(ex, ey, level));
                                                    break;
                                                }

                                                sPos++;
                                            }
                                        }
                                        else
                                        {
                                            sPos++;

                                            int ex = 0, ey = 0, level = 1;
                                            string name = "none";
                                            int maxHealth = 0;
                                            int health = 0;
                                            int attackDamage = 0;
                                            int magic = 0;
                                            int defense = 0;
                                            int resist = 0;
                                            WeaponEffect effect = WeaponEffect.none;
                                            int expDropped = 0;
                                            int goldDropped = 0;
                                            int baseHealth = 0;
                                            int baseAttack = 0;
                                            int baseMagic = 0;
                                            int baseDefense = 0;
                                            int baseResist = 0;
                                            int expDropBase = 0;
                                            int goldDropBase = 0;
                                            float healthModifier = 1;
                                            float attackModifier = 1;
                                            float magicModifier = 1;
                                            float defenseModifier = 1;
                                            float resistModifier = 1;
                                            float expModifier = 1;
                                            float goldModifier = 1;

                                            while (true)
                                            {
                                                if (subTexts[sPos] == "level")
                                                {
                                                    sPos++;
                                                    level = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    ex = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    ey = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "name")
                                                {
                                                    sPos++;
                                                    name = subTexts[sPos];
                                                }
                                                else if (subTexts[sPos] == "maxHealth")
                                                {
                                                    sPos++;
                                                    maxHealth = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "health")
                                                {
                                                    sPos++;
                                                    health = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "attackDamage")
                                                {
                                                    sPos++;
                                                    attackDamage = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "magic")
                                                {
                                                    sPos++;
                                                    magic = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "defense")
                                                {
                                                    sPos++;
                                                    defense = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "resist")
                                                {
                                                    sPos++;
                                                    resist = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "effect")
                                                {
                                                    sPos++;

                                                    if (subTexts[sPos] == "burn")
                                                        effect = WeaponEffect.burn;
                                                    else if (subTexts[sPos] == "penetrate")
                                                        effect = WeaponEffect.penetrate;
                                                    else if (subTexts[sPos] == "curse")
                                                        effect = WeaponEffect.curse;
                                                    else if (subTexts[sPos] == "midas")
                                                        effect = WeaponEffect.midas;
                                                    else if (subTexts[sPos] == "wisdom")
                                                        effect = WeaponEffect.wisdom;
                                                    else effect = WeaponEffect.none;
                                                }
                                                else if (subTexts[sPos] == "expDropped")
                                                {
                                                    sPos++;
                                                    expDropped = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "goldDropped")
                                                {
                                                    sPos++;
                                                    goldDropped = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "baseHealth")
                                                {
                                                    sPos++;
                                                    baseHealth = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "baseAttack")
                                                {
                                                    sPos++;
                                                    baseAttack = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "baseMagic")
                                                {
                                                    sPos++;
                                                    baseMagic = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "baseDefense")
                                                {
                                                    sPos++;
                                                    baseDefense = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "baseResist")
                                                {
                                                    sPos++;
                                                    baseResist = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "expDropBase")
                                                {
                                                    sPos++;
                                                    expDropBase = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "goldDropBase")
                                                {
                                                    sPos++;
                                                    goldDropBase = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "healthModifier")
                                                {
                                                    sPos++;
                                                    healthModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "attackModifier")
                                                {
                                                    sPos++;
                                                    attackModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "magicModifier")
                                                {
                                                    sPos++;
                                                    magicModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "defenseModifier")
                                                {
                                                    sPos++;
                                                    defenseModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "reistModifier")
                                                {
                                                    sPos++;
                                                    resistModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "expModifier")
                                                {
                                                    sPos++;
                                                    expModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "goldModifier")
                                                {
                                                    sPos++;
                                                    goldModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    enemies.Add(new Enemy(name, ex, ey, level, effect, maxHealth, health,
                                                        attackDamage, magic, defense, resist, expDropped, goldDropped,
                                                        baseHealth, baseAttack, baseMagic, baseDefense, baseResist, expDropBase,
                                                        goldDropBase, healthModifier, attackModifier, magicModifier, defenseModifier,
                                                        resistModifier, expModifier, goldModifier));
                                                    break;
                                                }

                                                sPos++;
                                            }
                                        }

                                        sPos++;
                                    }
                                    else if (subTexts[sPos] == "end")
                                        break;
                                }
                            }
                            else if (subTexts[sPos] == "items")
                            {
                                sPos++;

                                while (true)
                                {
                                    if (subTexts[sPos] == "type")
                                    {
                                        sPos++;

                                        if (subTexts[sPos] == "weapon")
                                        {
                                            string weaponName = "none";
                                            int cost = 0;
                                            int damage = 0;
                                            WeaponEffect effect = WeaponEffect.none;
                                            int wx = 0, wy = 0;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subTexts[sPos] == "name")
                                                {
                                                    sPos++;
                                                    weaponName = subTexts[sPos];
                                                }
                                                else if (subTexts[sPos] == "cost")
                                                {
                                                    sPos++;
                                                    cost = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "damage")
                                                {
                                                    sPos++;
                                                    damage = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    wx = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    wy = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "effect")
                                                {
                                                    sPos++;

                                                    if (subTexts[sPos] == "burn")
                                                        effect = WeaponEffect.burn;
                                                    else if (subTexts[sPos] == "penetrate")
                                                        effect = WeaponEffect.penetrate;
                                                    else if (subTexts[sPos] == "curse")
                                                        effect = WeaponEffect.curse;
                                                    else if (subTexts[sPos] == "midas")
                                                        effect = WeaponEffect.midas;
                                                    else if (subTexts[sPos] == "wisdom")
                                                        effect = WeaponEffect.wisdom;
                                                    else effect = WeaponEffect.none;

                                                    sPos++;
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    items.Add(new Weapon(weaponName, damage, cost, wx, wy, effect));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subTexts[sPos] == "magicWeapon")
                                        {
                                            string weaponName = "none";
                                            int cost = 0;
                                            int magicDamage = 0;
                                            WeaponEffect effect = WeaponEffect.none;
                                            int wx = 0, wy = 0;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subTexts[sPos] == "name")
                                                {
                                                    sPos++;
                                                    weaponName = subTexts[sPos];
                                                }
                                                else if (subTexts[sPos] == "cost")
                                                {
                                                    sPos++;
                                                    cost = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "magicDamage")
                                                {
                                                    sPos++;
                                                    magicDamage = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    wx = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    wy = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "effect")
                                                {
                                                    sPos++;

                                                    if (subTexts[sPos] == "burn")
                                                        effect = WeaponEffect.burn;
                                                    else if (subTexts[sPos] == "penetrate")
                                                        effect = WeaponEffect.penetrate;
                                                    else if (subTexts[sPos] == "curse")
                                                        effect = WeaponEffect.curse;
                                                    else if (subTexts[sPos] == "midas")
                                                        effect = WeaponEffect.midas;
                                                    else if (subTexts[sPos] == "wisdom")
                                                        effect = WeaponEffect.wisdom;
                                                    else effect = WeaponEffect.none;

                                                    sPos++;
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    items.Add(new MagicWeapon(magicDamage, weaponName, cost, wx, wy, effect));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subTexts[sPos] == "noviceFireTome")
                                        {
                                            int wx = 0, wy = 0;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    wx = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    wy = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    items.Add(new NoviceFireTome(wx, wy));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subTexts[sPos] == "statbooster")
                                        {
                                            int ix = 0, iy = 0;
                                            int statLevel = 1;
                                            string stat = "Health";

                                            while (true)
                                            {
                                                sPos++;

                                                if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    ix = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    iy = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "level")
                                                {
                                                    sPos++;
                                                    statLevel = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "stat")
                                                {
                                                    sPos++;
                                                    stat = subTexts[sPos];
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    items.Add(new Statbooster(stat, statLevel, ix, iy));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subTexts[sPos] == "statusHealer")
                                        {
                                            int ix = 0, iy = 0;
                                            StatusEffect itemStatus = StatusEffect.none;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    ix = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    iy = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "status")
                                                {
                                                    sPos++;

                                                    if (subTexts[sPos] == "burned")
                                                        itemStatus = StatusEffect.burned;
                                                    else if (subTexts[sPos] == "cursed")
                                                        itemStatus = StatusEffect.cursed;
                                                    else itemStatus = StatusEffect.none;

                                                    sPos++;
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    items.Add(new StatusHealer(itemStatus, ix, iy));
                                                    break;
                                                }
                                            }
                                        }
                                        else if (subTexts[sPos] == "healthTonicBasic")
                                        {
                                            int hx = 0, hy = 0;

                                            while (true)
                                            {
                                                sPos++;

                                                if (subTexts[sPos] == "x")
                                                {
                                                    sPos++;
                                                    hx = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "y")
                                                {
                                                    sPos++;
                                                    hy = Convert.ToInt32(subTexts[sPos]);
                                                }
                                                else if (subTexts[sPos] == "end")
                                                {
                                                    items.Add(new HealthTonicBasic(hx, hy));
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    else if (subTexts[sPos] == "end")
                                        break;
                                    else
                                    {
                                        string itemName = "none";
                                        int cost = 0;
                                        string info = "none";
                                        int ix = 0, iy = 0;

                                        while (true)
                                        {
                                            sPos++;

                                            if (subTexts[sPos] == "name")
                                            {
                                                sPos++;
                                                itemName = subTexts[sPos];
                                            }
                                            else if (subTexts[sPos] == "info")
                                            {
                                                sPos++;
                                                info = subTexts[sPos];
                                            }
                                            else if (subTexts[sPos] == "cost")
                                            {
                                                sPos++;
                                                cost = Convert.ToInt32(subTexts[sPos]);
                                            }
                                            else if (subTexts[sPos] == "x")
                                            {
                                                sPos++;
                                                ix = Convert.ToInt32(subTexts[sPos]);
                                            }
                                            else if (subTexts[sPos] == "y")
                                            {
                                                sPos++;
                                                iy = Convert.ToInt32(subTexts[sPos]);
                                            }
                                            else if (subTexts[sPos] == "end")
                                            {
                                                items.Add(new GameItem(itemName, cost, ix, iy, info));
                                                break;
                                            }
                                        }
                                    }

                                    sPos++;
                                }
                            }
                            else if (subTexts[sPos] == "Boss")
                            {
                                sPos++;

                                if (subTexts[sPos] == "type")
                                {
                                    sPos++;

                                    if (subTexts[sPos] == "revenant")
                                    {
                                        sPos++;
                                        boss = new Revenant();
                                    }
                                }
                                else
                                {
                                    sPos++;

                                    int ex = 0, ey = 0, level = 1;
                                    string name = "none";
                                    int maxHealth = 0;
                                    int health = 0;
                                    int attackDamage = 0;
                                    int magic = 0;
                                    int defense = 0;
                                    int resist = 0;
                                    WeaponEffect effect = WeaponEffect.none;
                                    int expDropped = 0;
                                    int goldDropped = 0;
                                    int baseHealth = 0;
                                    int baseAttack = 0;
                                    int baseMagic = 0;
                                    int baseDefense = 0;
                                    int baseResist = 0;
                                    int expDropBase = 0;
                                    int goldDropBase = 0;
                                    float healthModifier = 1;
                                    float attackModifier = 1;
                                    float magicModifier = 1;
                                    float defenseModifier = 1;
                                    float resistModifier = 1;
                                    float expModifier = 1;
                                    float goldModifier = 1;

                                    while (true)
                                    {
                                        if (subTexts[sPos] == "level")
                                        {
                                            sPos++;
                                            level = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "x")
                                        {
                                            sPos++;
                                            ex = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "y")
                                        {
                                            sPos++;
                                            ey = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "name")
                                        {
                                            sPos++;
                                            name = subTexts[sPos];
                                        }
                                        else if (subTexts[sPos] == "maxHealth")
                                        {
                                            sPos++;
                                            maxHealth = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "health")
                                        {
                                            sPos++;
                                            health = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "attackDamage")
                                        {
                                            sPos++;
                                            attackDamage = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "magic")
                                        {
                                            sPos++;
                                            magic = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "defense")
                                        {
                                            sPos++;
                                            defense = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "resist")
                                        {
                                            sPos++;
                                            resist = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "effect")
                                        {
                                            sPos++;

                                            if (subTexts[sPos] == "burn")
                                                effect = WeaponEffect.burn;
                                            else if (subTexts[sPos] == "penetrate")
                                                effect = WeaponEffect.penetrate;
                                            else if (subTexts[sPos] == "curse")
                                                effect = WeaponEffect.curse;
                                            else if (subTexts[sPos] == "midas")
                                                effect = WeaponEffect.midas;
                                            else if (subTexts[sPos] == "wisdom")
                                                effect = WeaponEffect.wisdom;
                                            else effect = WeaponEffect.none;
                                        }
                                        else if (subTexts[sPos] == "expDropped")
                                        {
                                            sPos++;
                                            expDropped = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "goldDropped")
                                        {
                                            sPos++;
                                            goldDropped = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "baseHealth")
                                        {
                                            sPos++;
                                            baseHealth = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "baseAttack")
                                        {
                                            sPos++;
                                            baseAttack = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "baseMagic")
                                        {
                                            sPos++;
                                            baseMagic = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "baseDefense")
                                        {
                                            sPos++;
                                            baseDefense = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "baseResist")
                                        {
                                            sPos++;
                                            baseResist = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "expDropBase")
                                        {
                                            sPos++;
                                            expDropBase = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "goldDropBase")
                                        {
                                            sPos++;
                                            goldDropBase = Convert.ToInt32(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "healthModifier")
                                        {
                                            sPos++;
                                            healthModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "attackModifier")
                                        {
                                            sPos++;
                                            attackModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "magicModifier")
                                        {
                                            sPos++;
                                            magicModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "defenseModifier")
                                        {
                                            sPos++;
                                            defenseModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "reistModifier")
                                        {
                                            sPos++;
                                            resistModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "expModifier")
                                        {
                                            sPos++;
                                            expModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "goldModifier")
                                        {
                                            sPos++;
                                            goldModifier = (float)Convert.ToDouble(subTexts[sPos]);
                                        }
                                        else if (subTexts[sPos] == "end")
                                        {
                                            sPos++;
                                            enemies.Add(new Enemy(name, ex, ey, level, effect, maxHealth, health,
                                                attackDamage, magic, defense, resist, expDropped, goldDropped,
                                                baseHealth, baseAttack, baseMagic, baseDefense, baseResist, expDropBase,
                                                goldDropBase, healthModifier, attackModifier, magicModifier, defenseModifier,
                                                resistModifier, expModifier, goldModifier));
                                            break;
                                        }
                                    }
                                }
                            }
                            else if (subTexts[sPos] == "Shopkeeper")
                            {
                                sPos++;

                                int level = 1;

                                while (true)
                                {
                                    if (subTexts[sPos] == "level")
                                    {
                                        sPos++;
                                        level = Convert.ToInt32(subTexts[sPos]);
                                    }
                                    else if (subTexts[sPos] == "end")
                                    {
                                        shopkeeper = new Shopkeeper(level);
                                        break;
                                    }

                                    sPos++;
                                }
                            }
                            else if (subTexts[sPos] == "end")
                            {
                                sPos++;
                                room = new Room(width, height, exitPos, exitOpen, coinCount, coinPos, enemyCount,
                                    enemies, items, boss, shopkeeper);
                                break;
                            }

                            sPos++;
                        }
                    }
                }

                file.Close();
            }
            catch (FileNotFoundException e)
            {
                Console.Clear();
                Console.WriteLine("Error encountered during loading sequence!");
                Console.ReadKey();
                Environment.Exit(1);

                //So the compiler won't complain
                player = null;
                room = null;
            }
        }