Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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);
    }