public void UseMove(GameObject pokemon, GameObject theTarget) { level = thisPokemon.level; attack = thisPokemon.curATK; specialAttack = thisPokemon.curSPATK; acc = thisPokemon.accuracy; baseSpeed = thisPokemon.baseSPD; typeOne = thisPokemon.typeOne; typeTwo = thisPokemon.typeTwo; hit = false; critHit = false; if (selfTargeting) { target = gameObject; } else { target = theTarget; } targetPokemon = theTarget.GetComponent <Pokemon>(); targetDefense = targetPokemon.curDEF; targetSpecialDefense = targetPokemon.curSPDEF; targetEva = targetPokemon.evasion; targetTypeOne = targetPokemon.typeOne; targetTypeTwo = targetPokemon.typeTwo; Collider[] TempList = Physics.OverlapSphere(pokemon.transform.position, range); Targets = new List <GameObject>(); foreach (Collider col in TempList) { if (thisPokemon.Enemies.Contains(col.gameObject)) { Targets.Add(col.gameObject); } } if (target == gameObject && !selfTargeting) { return; } else if (!thisPokemon.Enemies.Contains(target) && !selfTargeting && !allyTargeting) { return; } else { pokemon.transform.LookAt(target.transform); input.attacking = true; if (!aoe) { if (!allyTargeting && !selfTargeting) { if (target != gameObject) //Also add something here to check if target's a team member. { if (category == MoveCategoriesList.PHYSICAL) { pokemon.GetComponent <Animator>().SetBool(moveName, true); critHit = dmgCalc.DetermineCritical(baseSpeed, highCritChance); damage = dmgCalc.CalculateAttackDamage(power, critHit, type, level, attack, targetDefense, typeOne, typeTwo, targetTypeOne, targetTypeTwo); chanceToHit = accuracy * (acc / targetEva); float hit_or_miss = Random.Range(0.0f, 1.0f); if (chanceToHit >= hit_or_miss) { hit = true; } } if (category == MoveCategoriesList.SPECIAL) { pokemon.GetComponent <Animator>().SetBool(moveName, true); critHit = dmgCalc.DetermineCritical(baseSpeed, highCritChance); damage = dmgCalc.CalculateSpecialAttackDamage(power, critHit, type, level, specialAttack, targetSpecialDefense, typeOne, typeTwo, targetTypeOne, targetTypeTwo); chanceToHit = accuracy * (acc / targetEva); float hit_or_miss = Random.Range(0.0f, 1.0f); if (chanceToHit >= hit_or_miss) { hit = true; } } if (category == MoveCategoriesList.STATUS) { pokemon.GetComponent <Animator>().SetBool(moveName, true); chanceToHit = accuracy * (acc / targetEva); float hit_or_miss = Random.Range(0.0f, 1.0f); if (chanceToHit >= hit_or_miss) { hit = true; } } } } if (allyTargeting || selfTargeting) { if (target == gameObject) //Also add something here to check if target's a team member. { if (category == MoveCategoriesList.PHYSICAL) { pokemon.GetComponent <Animator>().SetBool(moveName, true); damage = dmgCalc.CalculateAttackDamage(power, critHit, type, level, attack, targetDefense, typeOne, typeTwo, targetTypeOne, targetTypeTwo); chanceToHit = accuracy * (acc / targetEva); float hit_or_miss = Random.Range(0.0f, 1.0f); if (chanceToHit >= hit_or_miss) { hit = true; } } if (category == MoveCategoriesList.SPECIAL) { pokemon.GetComponent <Animator>().SetBool(moveName, true); damage = dmgCalc.CalculateSpecialAttackDamage(power, critHit, type, level, specialAttack, targetSpecialDefense, typeOne, typeTwo, targetTypeOne, targetTypeTwo); chanceToHit = accuracy * (acc / targetEva); float hit_or_miss = Random.Range(0.0f, 1.0f); if (chanceToHit >= hit_or_miss) { hit = true; } } if (category == MoveCategoriesList.STATUS) { pokemon.GetComponent <Animator>().SetBool(moveName, true); hit = true; } } } } if (aoe) { hit = true; pokemon.GetComponent <Animator>().SetBool(moveName, true); } } }