private void LoadBattle()
        {
            win = false;
            showMenu = false;
            gameOver = false;
            switch (rand.Next(3))
            {
                case 0:
                    enemy = new Character(Character.CharacterType.Slime, Content.Load<Texture2D>("minislime2"), new Vector2(25 + 384 / 2 * 1.5f, 35 + 327 / 2 * 1.5f), 384, 327);
                    enemy.HP = enemy.MaxHP;
                    break;

                case 1:
                    enemy = new Character(Character.CharacterType.ZombieJanitor, Content.Load<Texture2D>("zombiesheet"), new Vector2(25 + 384 / 2 * 1.5f, 25 + 327 / 2 * 1.5f), 384, 327);
                    enemy.HP = enemy.MaxHP;
                    break;

                case 2:
                    enemy = new Character(Character.CharacterType.LabRat, Content.Load<Texture2D>("ratSheet"), new Vector2(25 + 384 / 2 * 1.5f, 35 + 327 / 2 * 1.5f), 384, 327);
                    enemy.HP = enemy.MaxHP;
                    break;
            }
            cadwyn = new Character(Character.CharacterType.Cadwyn, Content.Load<Texture2D>("cadwynsheet3"), new Vector2(graphics.PreferredBackBufferWidth - (385 / 2 * 1.5f + 25), graphics.PreferredBackBufferHeight - (327 / 2 * 1.5f + 25)), 384, 327);
        }
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            logo = new Sprite(Content.Load<Texture2D>("logo"), new Vector2(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2), 1074, 900);
            battle = new Sprite(Content.Load<Texture2D>("BattleBackground"), new Vector2(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2), 1280, 720);
            bubble = new Sprite(Content.Load<Texture2D>("Bubble"), new Vector2(graphics.PreferredBackBufferWidth - 175, 200), 350, 350);
            battleTheme = Content.Load<Song>("Ghostpocalypse - 7 Master");
            bossSlime = new Character(Character.CharacterType.BossSlime, Content.Load<Texture2D>("slimesheet3"), new Vector2(25 + 384 / 2 * 1.5f, 25 + 327 / 2 * 1.5f), 384, 327);
            // Put the name of the font
            _spr_font = Content.Load<SpriteFont>("FPS");
            startFont = Content.Load<SpriteFont>("StartFont");
            menuFont = Content.Load<SpriteFont>("MenuFont");
            endFont1 = Content.Load<SpriteFont>("EndFont1");
            endFont2 = Content.Load<SpriteFont>("EndFont2");
            endFont3 = Content.Load<SpriteFont>("EndFont3");
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            rand = new Random();

            cadPos = new Vector2(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2);
            cads = Content.Load<Texture2D>("cadsmallsheet");
            cad = new Sprite(cads, cadPos, 25, 35);
            tiles = Content.Load<Texture2D>("tileset");
            m = new Map(tiles, scale);
            trans = new Vector2(0, 0); //No translation at the start.
            scale = 1;

            stepCounter = 0;

            // TODO: use this.Content to load your game content here
        }
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            lastKeyboardState = keyboardState;
            keyboardState = Keyboard.GetState();
            lastPlayerOneState = playerOneState;
            playerOneState = GamePad.GetState(PlayerIndex.One);

            // Update
            _elapsed_time += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            battleTimer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

            // 1 Second has passed
            if (_elapsed_time >= 1000.0f)
            {
                _fps = _total_frames;
                _total_frames = 0;
                _elapsed_time = 0;
            }

            if (showMenu && !gameOver)
            {
                switch (battleStep)
                {
                    case 0:
                        if (battleTimer >= 500.0f)
                        {
                            if (chain[0] == Skills.Skill.Attack)
                            {
                                if (cadwyn.HP > cadwyn.MaxHP / 4)
                                {
                                    cadwyn.CurrentRow = 0;
                                }

                                else
                                {
                                    cadwyn.CurrentRow = 2;
                                }
                                _frame_timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                                if (_frame_timer > 50)
                                {
                                    cadwyn.CurrentFrame++;
                                    _frame_timer = 0;
                                }
                                if (cadwyn.CurrentFrame == 5)
                                {
                                    cadwyn.CurrentFrame = 0;
                                    battleTimer = 0;
                                    battleStep++;
                                }
                            }

                            else
                            {
                                if (cadwyn.HP > cadwyn.MaxHP / 4)
                                {
                                    cadwyn.CurrentRow = 1;
                                }

                                else
                                {
                                    cadwyn.CurrentRow = 3;
                                }
                                _frame_timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                                if (_frame_timer > 50)
                                {
                                    cadwyn.CurrentFrame++;
                                    _frame_timer = 0;
                                }
                                if (cadwyn.CurrentFrame == 3)
                                {
                                    cadwyn.CurrentFrame = 0;
                                    battleTimer = 0;
                                    battleStep++;
                                }
                            }

                        }
                        break;
                    case 1:
                        if (battleTimer >= 500.0f)
                        {
                            if (chain[1] == Skills.Skill.Attack)
                            {
                                if (cadwyn.HP > cadwyn.MaxHP / 4)
                                {
                                    cadwyn.CurrentRow = 0;
                                }

                                else
                                {
                                    cadwyn.CurrentRow = 2;
                                }
                                _frame_timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                                if (_frame_timer > 50)
                                {
                                    cadwyn.CurrentFrame++;
                                    _frame_timer = 0;
                                }
                                if (cadwyn.CurrentFrame == 5)
                                {
                                    cadwyn.CurrentFrame = 0;
                                    battleTimer = 0;
                                    battleStep++;
                                }
                            }

                            else
                            {
                                if (cadwyn.HP > cadwyn.MaxHP / 4)
                                {
                                    cadwyn.CurrentRow = 1;
                                }

                                else
                                {
                                    cadwyn.CurrentRow = 3;
                                }
                                _frame_timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                                if (_frame_timer > 50)
                                {
                                    cadwyn.CurrentFrame++;
                                    _frame_timer = 0;
                                }
                                if (cadwyn.CurrentFrame == 3)
                                {
                                    cadwyn.CurrentFrame = 0;
                                    battleTimer = 0;
                                    battleStep++;
                                }
                            }

                        }
                        break;
                    case 2:
                        if (battleTimer >= 500.0f)
                        {
                            if (chain[2] == Skills.Skill.Attack)
                            {
                                if (cadwyn.HP > cadwyn.MaxHP / 4)
                                {
                                    cadwyn.CurrentRow = 0;
                                }

                                else
                                {
                                    cadwyn.CurrentRow = 2;
                                }
                                _frame_timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                                if (_frame_timer > 50)
                                {
                                    cadwyn.CurrentFrame++;
                                    _frame_timer = 0;
                                }
                                if (cadwyn.CurrentFrame == 5)
                                {
                                    cadwyn.CurrentFrame = 0;
                                    battleTimer = 0;
                                    battleStep++;
                                }
                            }

                            else
                            {
                                if (cadwyn.HP > cadwyn.MaxHP / 4)
                                {
                                    cadwyn.CurrentRow = 1;
                                }

                                else
                                {
                                    cadwyn.CurrentRow = 3;
                                }
                                _frame_timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                                if (_frame_timer > 50)
                                {
                                    cadwyn.CurrentFrame++;
                                    _frame_timer = 0;
                                }
                                if (cadwyn.CurrentFrame == 3)
                                {
                                    cadwyn.CurrentFrame = 0;

                                    battleTimer = 0;
                                    battleStep++;
                                }
                            }

                        }
                        break;
                    case 3:
                        if (battleTimer >= 750.0f)
                        {
                            cadwyn.CurrentFrame = 0;
                            enemy.Position -= new Vector2(25, 0);
                            showPrevHP[0] = false;
                            battleTimer = 0;
                            battleStep++;
                        }
                        break;
                    case 4:
                        if (battleTimer >= 750.0f)
                        {
                            enemy.Position += new Vector2(25, 0);
                            battleTimer = 0;
                            battleStep++;
                        }
                        break;
                    case 5:
                        if (battleTimer >= 1000.0f)
                        {

                            _frame_timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                            if (_frame_timer > 100)
                            {
                                enemy.CurrentFrame++;
                                _frame_timer = 0;
                                enemy.Position += new Vector2(25, 0);
                            }
                            if (enemy.CurrentFrame == 3)
                            {
                                enemy.CurrentFrame = 0;
                                enemy.Position += new Vector2(-50, 0);
                                cadwyn.Position += new Vector2(25, 0);
                                showPrevHP[1] = false;
                                battleTimer = 0;
                                battleStep++;
                            }
                        }
                        break;
                    case 6:
                        if (battleTimer >= 500.0f)
                        {
                            enemy.CurrentFrame = 0;
                            enemy.Position -= new Vector2(25, 0);
                            cadwyn.Position -= new Vector2(25, 0);
                            battleTimer = 0;
                            battleStep++;
                        }
                        break;
                    case 7:
                        if (battleTimer >= 500.0f)
                        {
                            battleTimer = 0;
                            battleStep = 0;
                            showMenu = false;
                            menu = new Menu(Menu.MenuType.Battle);
                            skillCount = 0;
                            chain = new List<Skills.Skill>();
                            menu.InfoText = string.Empty;
                            if (cadwyn.HP == 0)
                            {
                                gameOver = true;
                                showMenu = true;
                                break;
                            }
                            else if (enemy.HP == 0)
                            {
                                gameOver = true;
                                showMenu = true;
                            }
                        }
                        if (win)
                            if (enemy.CharType == Character.CharacterType.BossSlime)
                                currentGameState = GameState.GameOver;
                        break;
                }
            }

            // Allows the game to exit
            if (playerOneState.Buttons.Back == ButtonState.Pressed || KeyPressed(Keys.Escape))
                this.Exit();

            switch (currentGameState)
            {
                case GameState.TitleScreen:
                    if (KeyPressed(Keys.Space) || ButtonPressed(Buttons.A) || ButtonPressed(Buttons.Start))
                    {
                        currentGameState = GameState.Map;
                        MediaPlayer.Play(battleTheme);
                        MediaPlayer.IsRepeating = true;
                    }
                    break;

                case GameState.Map:
                    bool is_idle = true;

                    KeyboardState ks = Keyboard.GetState();
                    Keys[] keys = ks.GetPressedKeys();

                    foreach (Keys key in keys)
                    {
                        switch (key)
                        {
                            case Keys.Up:
                                cad.CurrentRow = 5;
                                is_idle = false;
                                trans += new Vector2(0, 4);

                                break;

                            case Keys.Down:
                                cad.CurrentRow = 4;
                                is_idle = false;
                                trans += new Vector2(0, -4);

                                break;

                            case Keys.Left:
                                cad.CurrentRow = 7;
                                is_idle = false;
                                trans += new Vector2(4, 0);

                                break;

                            case Keys.Right:
                                cad.CurrentRow = 6;
                                is_idle = false;
                                trans += new Vector2(-4, 0);

                                break;
                        }
                    }

                    if (ButtonDown(Buttons.DPadDown))
                    {
                        cad.CurrentRow = 4;
                        is_idle = false;
                        trans += new Vector2(0, -4);
                    }

                    else if (ButtonDown(Buttons.DPadUp))
                    {
                        cad.CurrentRow = 5;
                        is_idle = false;
                        trans += new Vector2(0, 4);
                    }

                    else if (ButtonDown(Buttons.DPadLeft))
                    {
                        cad.CurrentRow = 7;
                        is_idle = false;
                        trans += new Vector2(4, 0);
                    }

                    else if (ButtonDown(Buttons.DPadRight))
                    {
                        cad.CurrentRow = 6;
                        is_idle = false;
                        trans += new Vector2(-4, 0);
                    }

                    if (-400 < trans.X && trans.X < -350 && 1450 > trans.Y && trans.Y > 1350)
                    {
                        currentGameState = GameState.Battle;
                        enemy = bossSlime;
                        win = false;
                        showMenu = false;
                        gameOver = false;
                        cadwyn = new Character(Character.CharacterType.Cadwyn, Content.Load<Texture2D>("cadwynsheet3"), new Vector2(graphics.PreferredBackBufferWidth - (385 / 2 * 1.5f + 25), graphics.PreferredBackBufferHeight - (327 / 2 * 1.5f + 25)), 384, 327);
                    }

                    if (is_idle)
                    {

                        if (cad.CurrentRow == 4)
                            cad.CurrentRow = 0;

                        if (cad.CurrentRow == 5)
                            cad.CurrentRow = 1;

                        if (cad.CurrentRow == 6)
                            cad.CurrentRow = 2;

                        if (cad.CurrentRow == 7)
                            cad.CurrentRow = 3;

                        cad.CurrentFrame = 0;

                        idle_timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

                        if (idle_timer > 3000)  //Wait for a specific time
                        {

                            cad.CurrentFrame++;

                        }

                        if (idle_timer > 3100)  //Wait for a specific time
                        {

                            cad.CurrentFrame++;

                        }

                        if (idle_timer > 3200)  //Wait for a specific time
                        {

                            cad.CurrentFrame++;

                        }

                        if (idle_timer > 3300)  //Wait for a specific time
                        {

                            cad.CurrentFrame = 0;
                            idle_timer = 0f;

                        }
                    }

                    else   //Character is moving
                    {
                        idle_timer = 0f;
                        timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

                        if (timer > interval)
                        {
                            //Show the next frame
                            cad.CurrentFrame++;
                            //Reset the timer
                            timer = 0f;
                        }

                        if (cad.CurrentFrame == 3)  //Depending on the sprites per row of the spritesheet
                        {
                            cad.CurrentFrame = 0;
                        }

                        stepCounter++;
                    }

                    cad.SourceRect = new Rectangle(cad.Width * cad.CurrentFrame, cad.Height * cad.CurrentRow, cad.Width, cad.Height);

                    if (stepCounter > 200)
                    {
                        stepCounter = 0;
                        currentGameState = GameState.Battle;
                        LoadBattle();
                    }
                    break;

                case GameState.Battle:
                    if (!showMenu)
                    {
                        if (KeyPressed(Keys.Down) || ButtonPressed(Buttons.DPadDown))
                            menu.Iterator += 1;
                        else if (KeyPressed(Keys.Up) || ButtonPressed(Buttons.DPadUp))
                            menu.Iterator -= 1;
                        else if (KeyPressed(Keys.Space) || ButtonPressed(Buttons.A))
                        {
                            if (menu.CurrentMenuType == Menu.MenuType.Battle && menu.Iterator == 0)
                                menu = new Menu(Menu.MenuType.Fight);
                            else if (menu.CurrentMenuType == Menu.MenuType.Fight)
                            {
                                if (skillCount < 3)
                                {
                                    switch (menu.Iterator)
                                    {
                                        case 0:
                                            chain.Add(Skills.Skill.Attack);
                                            skillCount++;
                                            if (skillCount == 3)
                                            {
                                                showMenu = true;
                                                menu.InfoText += "Attack";
                                            }
                                            else
                                                menu.InfoText += "Attack-->";
                                            break;
                                        case 1:
                                            chain.Add(Skills.Skill.Fire);
                                            skillCount++;
                                            if (skillCount == 3)
                                            {
                                                showMenu = true;
                                                menu.InfoText += "Fire";
                                            }
                                            else
                                                menu.InfoText += "Fire-->";
                                            break;
                                        case 2:
                                            chain.Add(Skills.Skill.Ice);
                                            skillCount++;
                                            if (skillCount == 3)
                                            {
                                                showMenu = true;
                                                menu.InfoText += "Ice";
                                            }
                                            else
                                                menu.InfoText += "Ice-->";
                                            break;
                                        case 3:
                                            chain.Add(Skills.Skill.Bolt);
                                            skillCount++;
                                            if (skillCount == 3)
                                            {
                                                showMenu = true;
                                                menu.InfoText += "Bolt";
                                            }
                                            else
                                                menu.InfoText += "Bolt-->";
                                            break;
                                    }
                                }
                            }
                        }
                        else if (KeyPressed(Keys.Back) || ButtonPressed(Buttons.B))
                        {
                            if (menu.CurrentMenuType == Menu.MenuType.Fight)
                            {
                                menu = new Menu(Menu.MenuType.Battle);
                                skillCount = 0;
                                chain = new List<Skills.Skill>();
                                menu.InfoText = string.Empty;
                            }
                        }
                        if (skillCount == 3)
                        {
                            List<Skills.Skill> slimeChain = new List<Skills.Skill>();
                            slimeChain.Add(Skills.Skill.Attack);
                            slimeChain.Add(Skills.Skill.Fire);
                            slimeChain.Add(Skills.Skill.Attack);
                            Console.WriteLine(string.Format("Boss Slime HP before: {0:0}/{1:0}", enemy.HP, enemy.MaxHP));
                            cadwyn.attack(enemy, chain);
                            Console.WriteLine(string.Format("Boss Slime HP after: {0:0}/{1:0}", enemy.HP, enemy.MaxHP));
                            Console.WriteLine(string.Format("Cadwyn HP before: {0:0}/{1:0}", cadwyn.HP, cadwyn.MaxHP));
                            enemy.attack(cadwyn, slimeChain);
                            Console.WriteLine(string.Format("Cadwyn HP after: {0:0}/{1:0}", cadwyn.HP, cadwyn.MaxHP));
                            showMenu = true;
                            showPrevHP[0] = true;
                            showPrevHP[1] = true;
                            if (enemy.HP == 0)
                            {
                                win = true;
                                cadwyn.HP = cadwyn.PreviousHealth;
                            }
                            else if (cadwyn.HP == 0)
                                win = false;
                        }
                    }

                    if (gameOver && battleTimer >= 1000)
                    {
                        MediaPlayer.Stop();
                        currentGameState = GameState.Map;
                    }

                    break;  //end Battle
            }

            // TODO: Add your update logic here

            base.Update(gameTime);
        }
        public void attack(Character enemy, List<Skills.Skill> chain)
        {
            PreviousHealth = _hp;
            int bonus = 10;  //bonus magic damage as percent of magic attack

            #region Attack
            if (chain[0] == Skills.Skill.Attack)
            {
                if (roll.Next(10) == 0)
                    enemy.HP -= this.ATK * 2 - enemy.DEF;
                else
                    enemy.HP -= this.ATK - enemy.DEF;
                #region Attack, Attack
                if (chain[1] == Skills.Skill.Attack)
                {
                    if (roll.Next(6) == 0)
                        enemy.HP -= this.ATK * 2 - enemy.DEF;
                    else
                        enemy.HP -= this.ATK - enemy.DEF;
                    #region Attack, Attack, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(4) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                    }
                    #endregion
                    #region Attack, Attack, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Attack, Attack, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Attack, Attack, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Attack, Fire
                else if (chain[1] == Skills.Skill.Fire)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= this.MATK - enemy.MDEF / 2;
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #region Attack, Fire, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                    }
                    #endregion
                    #region Attack, Fire, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                        {
                            enemy.HP -= this.MATK - enemy.MDEF;
                            enemy.Burned = true;
                        }
                        if (enemy.Chilled)
                            enemy.Chilled = false;
                    }
                    #endregion
                    #region Attack, Fire, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Attack, Fire, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Attack, Ice
                else if (chain[1] == Skills.Skill.Ice)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= this.MATK - enemy.MDEF / 2;
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #region Attack, Ice, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                    }
                    #endregion
                    #region Attack, Ice, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Attack, Ice, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                        {
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                            enemy.Burned = false;
                        }
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                        if (!enemy.Chilled)
                            enemy.Chilled = true;
                    }
                    #endregion
                    #region Attack, Ice, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Attack, Bolt
                else if (chain[1] == Skills.Skill.Bolt)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #region Attack, Bolt, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                    }
                    #endregion
                    #region Attack, Bolt, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Attack, Bolt, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Attack, Bolt, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.50);
                        else
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF) * 1.25);
                    }
                    #endregion
                }
                #endregion
            }
            #endregion
            #region Fire
            else if (chain[0] == Skills.Skill.Fire)
            {
                enemy.HP -= this.MATK - enemy.MDEF;
                #region Fire, Attack
                if (chain[1] == Skills.Skill.Attack)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= 2 * this.MATK / bonus;
                    else
                        enemy.HP -= this.MATK / bonus;
                    if (roll.Next(10) == 0)
                        enemy.HP -= this.ATK * 2 - enemy.DEF;
                    else
                        enemy.HP -= this.ATK - enemy.DEF;
                    #region Fire, Attack, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(6) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                    }
                    #endregion
                    #region Fire, Attack, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Fire, Attack, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Fire, Attack, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Fire, Fire
                else if (chain[1] == Skills.Skill.Fire)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= this.MATK - enemy.MDEF / 2;
                    else
                    {
                        enemy.HP -= this.MATK - enemy.MDEF;
                        enemy.Burned = true;
                    }
                    if (enemy.Chilled)
                        enemy.Chilled = false;
                    #region Fire, Fire, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Fire, Fire, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        //FIREBALL!!!
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK * 2 - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK * 2 - enemy.MDEF;
                    }
                    #endregion
                    #region Fire, Fire, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Fire, Fire, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Fire, Ice
                else if (chain[1] == Skills.Skill.Ice)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= this.MATK - enemy.MDEF / 2;
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #region Fire, Ice, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Fire, Ice, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Fire, Ice, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                        {
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                            enemy.Burned = false;
                        }
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                        if (!enemy.Chilled)
                            enemy.Chilled = true;
                    }
                    #endregion
                    #region Fire, Ice, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Fire, Bolt
                else if (chain[1] == Skills.Skill.Bolt)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #region Fire, Bolt, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Fire, Bolt, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Fire, Bolt, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Fire, Bolt, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.50);
                        else
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF) * 1.25);
                    }
                    #endregion
                }
                #endregion
            }
            #endregion
            #region Ice
            else if (chain[0] == Skills.Skill.Ice)
            {
                enemy.HP -= this.MATK - enemy.MDEF;
                #region Ice, Attack
                if (chain[1] == Skills.Skill.Attack)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= 2 * this.MATK / bonus;
                    else
                        enemy.HP -= this.MATK / bonus;
                    if (roll.Next(10) == 0)
                        enemy.HP -= this.ATK * 2 - enemy.DEF;
                    else
                        enemy.HP -= this.ATK - enemy.DEF;
                    #region Ice, Attack, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(6) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                    }
                    #endregion
                    #region Ice, Attack, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Ice, Attack, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Ice, Attack, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Ice, Fire
                else if (chain[1] == Skills.Skill.Fire)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= this.MATK - enemy.MDEF / 2;
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #region Ice, Fire, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Ice, Fire, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                        {
                            enemy.HP -= this.MATK - enemy.MDEF;
                            enemy.Burned = true;
                        }
                        if (enemy.Chilled)
                            enemy.Chilled = false;
                    }
                    #endregion
                    #region Ice, Fire, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Ice, Fire, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        //Frostfire bolt!!!
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                        {
                            enemy.HP -= 2 * this.MATK - enemy.MDEF;
                            enemy.Burned = true;
                        }
                    }
                    #endregion
                }
                #endregion
                #region Ice, Ice
                else if (chain[1] == Skills.Skill.Ice)
                {
                    if (enemy.Burned == true)
                    {
                        enemy.HP -= this.MATK - enemy.MDEF / 2;
                        enemy.Burned = false;
                    }
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    if (!enemy.Chilled)
                        enemy.Chilled = true;
                    #region Ice, Ice, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Ice, Ice, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #endregion
                    #region Ice, Ice, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                        //Blizzard!!!
                        enemy.HP -= 2 * this.MATK - enemy.MDEF;
                    #endregion
                    #region Ice, Ice, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #endregion
                }
                #endregion
                #region Ice, Bolt
                else if (chain[1] == Skills.Skill.Bolt)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.50);
                    else
                        enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF) * 1.25);
                    #region Ice, Bolt, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Ice, Bolt, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Ice, Bolt, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Ice, Bolt, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.50);
                        else
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF) * 1.25);
                    }
                    #endregion
                }
                #endregion
            }
            #endregion
            #region Bolt
            else if (chain[0] == Skills.Skill.Bolt)
            {
                if (enemy.Burned == true)
                    enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.50);
                else
                    enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF) * 1.25);
                #region Bolt, Attack
                if (chain[1] == Skills.Skill.Attack)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= 2 * this.MATK / bonus;
                    else
                        enemy.HP -= this.MATK / bonus;
                    if (roll.Next(10) == 0)
                        enemy.HP -= this.ATK * 2 - enemy.DEF;
                    else
                        enemy.HP -= this.ATK - enemy.DEF;
                    #region Bolt, Attack, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(6) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                    }
                    #endregion
                    #region Bolt, Attack, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Bolt, Attack, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Bolt, Attack, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Bolt, Fire
                else if (chain[1] == Skills.Skill.Fire)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= this.MATK - enemy.MDEF / 2;
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #region Bolt, Fire, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Bolt, Fire, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                        {
                            enemy.HP -= this.MATK - enemy.MDEF;
                            enemy.Burned = true;
                        }
                        if (enemy.Chilled)
                            enemy.Chilled = false;
                    }
                    #endregion
                    #region Bolt, Fire, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Bolt, Fire, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Bolt, Ice
                else if (chain[1] == Skills.Skill.Ice)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= this.MATK - enemy.MDEF / 2;
                    else
                        enemy.HP -= this.MATK - enemy.MDEF;
                    #region Bolt, Ice, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Bolt, Ice, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Bolt, Ice, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                        {
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                            enemy.Burned = false;
                        }
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                        if (!enemy.Chilled)
                            enemy.Chilled = true;
                    }
                    #endregion
                    #region Bolt, Ice, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.25);
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                }
                #endregion
                #region Bolt, Bolt
                else if (chain[1] == Skills.Skill.Bolt)
                {
                    if (enemy.Burned == true)
                        enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.50);
                    else
                        enemy.HP -= (int)Math.Round((this.MATK - enemy.MDEF) * 1.25);
                    #region Bolt, Bolt, Attack
                    if (chain[2] == Skills.Skill.Attack)
                    {
                        if (roll.Next(10) == 0)
                            enemy.HP -= this.ATK * 2 - enemy.DEF;
                        else
                            enemy.HP -= this.ATK - enemy.DEF;
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * this.MATK / bonus;
                        else
                            enemy.HP -= this.MATK / bonus;
                    }
                    #endregion
                    #region Bolt, Bolt, Fire
                    else if (chain[2] == Skills.Skill.Fire)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Bolt, Bolt, Ice
                    else if (chain[2] == Skills.Skill.Ice)
                    {
                        if (enemy.Burned == true)
                            enemy.HP -= this.MATK - enemy.MDEF / 2;
                        else
                            enemy.HP -= this.MATK - enemy.MDEF;
                    }
                    #endregion
                    #region Bolt, Bolt, Bolt
                    else if (chain[2] == Skills.Skill.Bolt)
                    {
                        //Thunderstorm!!!
                        if (enemy.Burned == true)
                            enemy.HP -= 2 * (int)Math.Round((this.MATK - enemy.MDEF / 2) * 1.50);
                        else
                            enemy.HP -= 2 * (int)Math.Round((this.MATK - enemy.MDEF) * 1.25);
                    }
                    #endregion
                }
                #endregion
            }
            #endregion
        }