public void EnemyChooseAndAttack() { //raise hero hp sum to 0 if below HPsum = 0; foreach (var Hero in targetControl.baseHeros) { if (Hero.curHP < 0) { Hero.curHP = 0; } HPsum += Hero.curHP; } if (targetControl.Hero1Data.curHP < 1) { HPsum1 = 0; } else { HPsum1 = HPsum / targetControl.Hero1Data.curHP; } if (targetControl.Hero2Data.curHP < 1) { HPsum2 = 0; } else { HPsum2 = HPsum / targetControl.Hero2Data.curHP; } if (targetControl.Hero3Data.curHP < 1) { HPsum3 = 0; } else { HPsum3 = HPsum / targetControl.Hero3Data.curHP; } if (targetControl.Hero4Data.curHP < 1) { HPsum4 = 0; } else { HPsum4 = HPsum / targetControl.Hero4Data.curHP; } //assign hero to chosen hero reference var TargetSum = Random.Range(1, (HPsum1 + HPsum2 + HPsum3 + HPsum4)); if (TargetSum > 0 && TargetSum <= (HPsum1)) { //Target Hero1 Debug.Log("Hero1 Targeted!"); targetControl.HeroData = targetControl.Hero1Data; } else if (TargetSum > HPsum1 && TargetSum <= (HPsum1 + HPsum2)) { //Target Hero2 Debug.Log("Hero2 Targeted!"); targetControl.HeroData = targetControl.Hero2Data; } else if (TargetSum > (HPsum1 + HPsum2) && TargetSum <= (HPsum1 + HPsum2 + HPsum3)) { //Target Hero3 Debug.Log("Hero3 Targeted!"); targetControl.HeroData = targetControl.Hero3Data; } else if (TargetSum > (HPsum1 + HPsum2 + HPsum3) && TargetSum <= (HPsum1 + HPsum2 + HPsum3 + HPsum4)) { //Target Hero4 Debug.Log("Hero4 Targeted!"); targetControl.HeroData = targetControl.Hero4Data; } //get defence values from armour pieces int armourDef = 0; if (targetControl.HeroData.EquippedHelmet != null) { armourDef += targetControl.HeroData.EquippedHelmet.armourDefence; } if (targetControl.HeroData.EquippedChestplate != null) { armourDef += targetControl.HeroData.EquippedChestplate.armourDefence; } if (targetControl.HeroData.EquippedLegguards != null) { armourDef += targetControl.HeroData.EquippedLegguards.armourDefence; } if (targetControl.HeroData.EquippedBoots != null) { armourDef += targetControl.HeroData.EquippedBoots.armourDefence; } //roll to choose which action to take by the enemy var choiceVal = Random.Range(1, 100); if (choiceVal > 0 && choiceVal < 61) { choiceVal = 1; } else if (choiceVal > 60 && choiceVal < 85) { choiceVal = 2; } else if (choiceVal > 84 && choiceVal < 96) { choiceVal = 3; } else if (choiceVal > 95 && choiceVal <= 100) { choiceVal = 4; } switch (choiceVal) { case 1: //standard attack targetControl.ChatBox.text = ("Enemy Chose to Standard Attack!"); //calculate damage value of the attack DamageMultiplier = ((float)Random.Range(75, 125)) / 100; Damage = (((targetControl.EnemyData.enemyCurATK) * (targetControl.EnemyData.enemyCurATK)) / ((targetControl.EnemyData.enemyCurATK) + (targetControl.HeroData.curDEF + armourDef))); Damage *= DamageMultiplier; Damage = Mathf.Floor(Damage); //calculate miss chance and dead damage appropriately int HitChance = Random.Range(1, 10); if (HitChance > 8) { targetControl.ChatBox.text = (targetControl.EnemyData.enemyName + " missed!"); } else { targetControl.ChatBox.text = (targetControl.EnemyData.enemyName + " Has attacked " + targetControl.HeroData.name + " for " + Damage + "!"); targetControl.HeroData.curHP -= (int)Damage; } //hero hp check if (targetControl.HeroData.curHP < 0) { targetControl.HeroData.curHP = 0; } EnemyAttackAnim(); break; case 2: //ability use targetControl.ChatBox.text = ("Enemy Chose To Use An Ability!"); //choosed random ability from list of abilities int numberOfAbilities = targetControl.EnemyData.Abilities.Count; if (numberOfAbilities != 0) { int i = (Random.Range(0, numberOfAbilities)); if (targetControl.EnemyData.Abilities[i].manaCost < targetControl.EnemyData.enemyCurMP) { //calculate damage value of the attack DamageMultiplier = ((float)Random.Range(75, 125)) / 100; Damage = (((targetControl.EnemyData.enemyCurWIS + targetControl.EnemyData.Abilities[i].baseDamage) * (targetControl.EnemyData.enemyCurWIS + targetControl.EnemyData.Abilities[i].baseDamage)) / ((targetControl.EnemyData.enemyCurWIS + targetControl.EnemyData.Abilities[i].baseDamage) + (targetControl.HeroData.curDEF))); Damage *= DamageMultiplier; Damage = Mathf.Floor(Damage); //deal damage to target hero targetControl.HeroData.curHP -= (int)Damage; targetControl.EnemyData.enemyCurMP -= targetControl.EnemyData.Abilities[i].manaCost; } else { targetControl.ChatBox.text = (targetControl.EnemyData.enemyName + " does not have enough mana to cast " + targetControl.EnemyData.Abilities[i].name); } if (targetControl.HeroData.curHP < 0) { targetControl.HeroData.curHP = 0; } } else { targetControl.ChatBox.text = (targetControl.EnemyData.enemyName + " has not learnt any abilties!"); } break; case 3: //defend targetControl.ChatBox.text = ("Enemy Chose to Defend!"); //raise defence value when defending or remove defence bonus when finished defending if (targetControl.EnemyData.isDefending == true) { targetControl.EnemyData.enemyCurDEF -= targetControl.EnemyData.defendingValue; } targetControl.EnemyData.enemyCurDEF += targetControl.EnemyData.defendingValue; targetControl.EnemyData.isDefending = true; break; case 4: //flee targetControl.ChatBox.text = ("Enemy Chose to Try and Flee!"); Damage = targetControl.EnemyData.enemyCurAGI + (targetControl.Hero1Data.curAGI + targetControl.Hero2Data.curAGI + targetControl.Hero3Data.curAGI + targetControl.Hero4Data.curAGI) / 4; DamageMultiplier = Random.Range(0, Damage); if (DamageMultiplier < targetControl.EnemyData.enemyCurAGI) { //Flee successful targetControl.ChatBox.text = (targetControl.EnemyData.name + " fleed successfully!"); Debug.Log("Enemy Flee"); targetControl.Flee(); } else { //Flee unsuccessful targetControl.ChatBox.text = (targetControl.EnemyData.name + " failed to flee!"); targetControl.StateControl(); Invoke("Delay", 1); } break; } UIdetails.HeroBarUpdate(); targetControl.DieAnimHeroes(); }