int GetDamageValue(out DamageNumber.HitType hitType) { // Get base damage: int damage = Services.playerStats.strength + ((Services.playerStats.strength + Services.playerStats.level) / 32) * ((Services.playerStats.strength * Services.playerStats.level) / 32); // See if attack is a critical hit if (Random.value <= Services.playerStats.luck) { hitType = DamageNumber.HitType.Critical; } else { hitType = DamageNumber.HitType.Normal; } // Factor in other player's defense. (Skip if attack is critical) int tempDefense = Services.playerStats.defense; if (hitType == DamageNumber.HitType.Critical) { tempDefense = 0; } damage = ((Services.playerStats.strength * (512 - tempDefense) * damage) / (16 * 512)); // Add critical modifier if (hitType == DamageNumber.HitType.Critical) { damage = Mathf.FloorToInt(damage * 1.777f); } return(damage); }
public IEnumerator AttackSequence() { battleState = BattleState.TakingAction; Services.battleMenuManager.AllowInput(false); foreach (BattleSelf battleSelf in battleSelves) { battleSelf.m_Animator.SetTrigger("Attack Trigger"); } yield return(new WaitForSeconds(1.5f)); // Show damage numbers int deaths = 0; foreach (BattleSelf battleSelf in battleSelves) { // Get damage DamageNumber.HitType hitType = DamageNumber.HitType.Normal; int damageValue = GetDamageValue(out hitType); // Display critical hit effects if (hitType == DamageNumber.HitType.Critical) { // Add more shit here later } // Test for miss if (Services.playerStats.accuracy <= Random.value) { hitType = DamageNumber.HitType.Miss; damageValue = 0; } DamageNumber damageNumber = Instantiate(damageNumberPrefab).GetComponent <DamageNumber>(); damageNumber.transform.position = battleSelf.transform.position + damageNumberOffset; damageNumber.Initialize(damageValue, hitType); battleSelf.HP -= damageValue; if (battleSelf.HP <= 0) { deaths++; } } // If at least one battleSelf has died. if (deaths > 0) { // If both players die, trigger their death animation without spawning a corpse. foreach (BattleSelf battleSelf in battleSelves) { if (battleSelf.HP <= 0) { if (deaths == 2) { battleSelf.Die(false); } else { battleSelf.Die(true); } } } yield return(new WaitForSeconds(2.5f)); StartCoroutine(BattleEndSequence()); yield return(null); } else { battleState = BattleState.AwaitingInput; Services.battleMenuManager.AllowInput(true); } yield return(null); }