void UseAbilities(GameTime gameTime) { //USE ABILITIES if (playerAbility == null && enemyAbility == null) { SwitchState(BattleState.END_TURN); return; } else if (enemyAbility != null && ((playerAbility == null) || (playerAbility.Priority < enemyAbility.Priority) || (playerAbility.Priority == enemyAbility.Priority && playerMokepon.SPD < enemyMokepon.SPD))) { //Use enemy ability if (enemyAbility.UsedWithItem) { Dialogues.AddText(enemy.Name + " uses " + enemyAbility.ItemName + "!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } else { Dialogues.AddText(enemyMokepon.Name + " uses " + enemyAbility.Name + "!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } double hit = Managers.GameManager.Instance.random.NextDouble(); if (hit >= (enemyAbility.UsedWithItem ? (enemyAbility.ACC / 100.0) : (enemyAbility.ACC / 100.0 * enemyMokepon.ACC / 100.0))) { Dialogues.AddText("It missed!"); enemyAbility = null; return; } if (enemyAbility.Attack) { Damage damage = GameManager.Instance.CalculateDamage(enemyMokepon, playerMokepon, enemyAbility); if (damage.Critical) { Dialogues.AddText("Critical hit!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } if (damage.Multipiler > 1) { Dialogues.AddText("It's super effective!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } else if (damage.Multipiler < 1) { Dialogues.AddText("It's not very effective!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } playerMokepon.ReceiveDamage(damage.DamageValue); } enemyAbility.Effect(ref enemyMokepon, ref playerMokepon, this); wait = 3.0; enemyAbility = null; GC.Collect(); } else { //Use player ability if (playerAbility.UsedWithItem) { Dialogues.AddText(player.Name + " uses " + playerAbility.ItemName + "!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } else { Dialogues.AddText(playerMokepon.Name + " uses " + playerAbility.Name + "!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } double hit = Managers.GameManager.Instance.random.NextDouble(); if (hit >= (playerAbility.UsedWithItem ? (playerAbility.ACC / 100.0) : (playerAbility.ACC / 100.0 * playerMokepon.ACC / 100.0))) { Dialogues.AddText("It missed!"); playerAbility = null; return; } if (playerAbility.Attack) { Damage damage = GameManager.Instance.CalculateDamage(playerMokepon, enemyMokepon, playerAbility); if (damage.Critical) { Dialogues.AddText("Critical hit!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } if (damage.Multipiler > 1) { Dialogues.AddText("It's super effective!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } else if (damage.Multipiler < 1) { Dialogues.AddText("It's not very effective!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } enemyMokepon.ReceiveDamage(damage.DamageValue); } playerAbility.Effect(ref playerMokepon, ref enemyMokepon, this); wait = 3.0; playerAbility = null; GC.Collect(); if (EnemyMokeponCaught) { Dialogues.AddText(player.Name + " has caught " + enemyMokepon.Name + "!"); if (player.Mokepons.Count < 6) { player.Mokepons.Add(enemyMokepon); enemy.Mokepons.Remove(enemyMokepon); enemyMokepon = null; enemyStats.UnloadContent(); enemyMokeponImage.UnloadContent(); enemyStats = null; enemyMokeponImage = null; GC.Collect(); SwitchState(BattleState.NAME_MOKEPON); return; } else { Dialogues.AddText(player.Name + " has reached maximum number of Mokepons!"); enemyMokepon.HP = 0; } playerAbility = null; enemyAbility = null; } } if (playerMokepon.HP == 0) { Dialogues.AddText(playerMokepon.Name + " fainted!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } playerMokepon = null; playerStats.UnloadContent(); playerMokeponImage.UnloadContent(); playerStats = null; playerMokeponImage = null; GC.Collect(); SwitchState(BattleState.END_TURN); } if (enemyMokepon.HP == 0) { int XP = GameManager.Instance.CalculateExperience(playerMokepon, enemyMokepon, enemy.Name.Length > 0); playerMokepon.GainXP(XP); Dialogues.AddText(playerMokepon.Name + " gained " + XP.ToString() + " experience points!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } while (playerMokepon.XP >= playerMokepon.LVL_UP_XP) { playerMokepon.LevelUp(); Dialogues.AddText(playerMokepon.Name + " grew to level " + playerMokepon.LVL + "!"); } Dialogues.AddText(enemyMokepon.Name + " fainted!"); enemyMokepon = null; enemyStats.UnloadContent(); enemyMokeponImage.UnloadContent(); enemyStats = null; enemyMokeponImage = null; GC.Collect(); SwitchState(BattleState.END_TURN); } }