Example #1
0
 static private void RandomBasicParams(SubAttack subAttack)
 {
     subAttack.delayBeforeActive = Random.Range(0f, 2f);
     subAttack.delayBeforeNext   = Random.Range(0f, 2f);
     subAttack.aoeTimer          = Random.Range(2f, 4f);
     subAttack.damage            = Random.Range(5, 20);
 }
Example #2
0
 private static void RandomAoeTypeParams(SubAttack subattack)
 {
     subattack.aoeType = (AoeType)Random.Range(0, System.Enum.GetValues(typeof(AoeType)).Length);
     if (subattack.aoeType == AoeType.Square)
     {
         RandomSquareAoeParams(subattack);
     }
     else if (subattack.aoeType == AoeType.Circle)
     {
         RandomCircleAoeParams(subattack);
     }
 }
Example #3
0
    // Char1 is attacker, char2 is target


    // OnAttack
    public void StandardAttack(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit)
    {
        int finalDamage = 0;

        if (atk.positive)
        {
            finalDamage = atk.magical ?
                          (int)((float)weapon.Magic * atk.damageModifier / 100f * ((char1.intelligence / 100f) + 1)) :
                          (int)((float)weapon.Health * atk.damageModifier / 100f * ((char1.strength / 100f) + 1));
        }
        else
        {
            finalDamage = atk.magical ?
                          (int)((float)weapon.Magic * atk.damageModifier / 100f * ((((char1.intelligence - char2.spirit) / 100f) + 1) + ((float)char1.intelligence / char2.spirit) / 2f)) :
                          (int)((float)weapon.Health * atk.damageModifier / 100f * ((((char1.strength - char2.resistance) / 100f) + 1) + ((float)char1.strength / char2.resistance) / 2f));
        }

        float positionModifier = 1;

        Debug.Log("Initial damage: " + finalDamage);

        if (crit)
        {
            finalDamage *= 2;
            battleController.DisplayText("<b><color=red>Critical hit!</color></b>");
        }

        switch (char2.position)
        {
        case CharacterScript.Position.Back:

            positionModifier += atk.ranged ? 0 : -0.25f;
            break;

        case CharacterScript.Position.Centered:


            break;

        case CharacterScript.Position.Front:

            positionModifier += atk.ranged ? 0 : 0.25f;
            break;

        case CharacterScript.Position.Flying:

            positionModifier += atk.ranged ? 0 : -0.25f;
            break;

        case CharacterScript.Position.Removed:

            positionModifier = atk.ranged ? 0 : 0f;
            break;
        }

        switch (char2.position)
        {
        case CharacterScript.Position.Back:

            positionModifier += atk.ranged ? 0 : -0.25f;
            break;

        case CharacterScript.Position.Centered:


            break;

        case CharacterScript.Position.Front:

            positionModifier += atk.ranged ? 0 : 0.25f;
            break;

        case CharacterScript.Position.Flying:

            if (atk.ranged)
            {
                switch (char1.position)
                {
                case CharacterScript.Position.Back:

                    positionModifier = 0.75f;
                    break;

                case CharacterScript.Position.Centered:
                case CharacterScript.Position.Flying:

                    positionModifier = 1f;
                    break;

                case CharacterScript.Position.Front:

                    positionModifier = 1.25f;
                    break;
                }
            }
            else
            {
                positionModifier = 0;
            }
            break;

        case CharacterScript.Position.Removed:

            positionModifier = atk.ranged ? 0 : 0f;
            break;
        }

        Debug.Log(char1.position + "->" + char2.position + " : " + positionModifier);
        finalDamage = (int)(finalDamage * positionModifier);

        /*if (char2.damageTypeModifier.ContainsKey(atk.damageType))
         * {
         *  finalDamage = (int)((float)finalDamage * char2.damageTypeModifier[atk.damageType] / 100f);
         * }*/

        for (int n = 0; n < char2.valnurabilityTypes.Count; n++)
        {
            if (char2.valnurabilityTypes[n] == atk.damageType && char2.valnurabilityPercentages.Count >= n)
            {
                finalDamage = (int)((float)finalDamage * char2.valnurabilityPercentages[n] / 100f);
            }
        }

        char2.ModifyHealth(-finalDamage);
        totalDamage  += finalDamage;
        char1.threat += finalDamage;
    }
Example #4
0
    public void SpawnCharacter(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit)
    {
        Debug.Log("Attempting to spawn 'Character Prefabs/Spawnables/" + holder.miscText + "'");
        GameObject obj = Resources.Load <GameObject>("Character Prefabs/Spawnables/" + holder.miscText);

        battleController.Spawn(obj, holder.miscNum, char1.tag);
    }
Example #5
0
    public void NearDeathExperience(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit)
    {
        int finalDamage = char1.maxHealth - char1.health;

        char2.ModifyHealth(-finalDamage);
        totalDamage += finalDamage;
    }
Example #6
0
    public void LifeSteal(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) // Has to be last in delegate list
    {
        int leach = (int)(totalDamage * holder.miscNum / 100f);

        char1.ModifyHealth(leach);
    }
Example #7
0
    public void Steal(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) // To do: impliment better chance mechanic (?) Also, reduce number of drops left in enemy inv
    {
        int         index  = 0;
        int         amount = crit ? 2 : 1;
        List <Item> items;

        if (char2.gameObject.tag == "Enemy")
        {
            items = char2.dropList;
            if (items.Count <= 0)
            {
                battleController.DisplayText("Nothing to steal!");
                return;
            }
            index   = UnityEngine.Random.Range(0, items.Count - 1);
            amount *= items[index].name == "Krn" ? 100 : 1;
            amount += items[index].name == "Krn" ? UnityEngine.Random.Range(-50, 50) : 0;

            if (char2.dropMax[index] >= amount)
            {
                InventoryScript.Instance.ModifyInventory(amount, items[index]);
                battleController.DisplayText("Stole " + amount + " " + items[index].name + "(s)");
            }
            else if (char2.dropMax[index] > 0)
            {
                InventoryScript.Instance.ModifyInventory(char2.dropMax[index], items[index]);
                battleController.DisplayText("Stole " + char2.dropMax[index] + " " + items[index].name + "(s)");
            }
            else
            {
                Debug.LogWarning("Trying to steal item from empty inventory! (contains no " + items[index].name + ")");
            }
        }
        else
        {
            items = InventoryScript.Instance.GetListType(new List <Item.ItemType>()
            {
                Item.ItemType.Consumable
            });
            if (items.Count <= 0)
            {
                battleController.DisplayText("Nothing to steal!");
                return;
            }
            index   = UnityEngine.Random.Range(0, items.Count - 1);
            amount *= items[index].name == "Krn" ? 100 : 1;
            amount += items[index].name == "Krn" ? UnityEngine.Random.Range(-50, 50) : 0;

            if (InventoryScript.Instance.inventory[items[index]] >= amount)
            {
                InventoryScript.Instance.ModifyInventory(-amount, items[index]);
                battleController.DisplayText("Stole " + amount + " " + items[index].name + "(s)");
            }
            else if (InventoryScript.Instance.inventory[items[index]] > 0)
            {
                InventoryScript.Instance.ModifyInventory(InventoryScript.Instance.inventory[items[index]], items[index]);
                battleController.DisplayText("Stole " + InventoryScript.Instance.inventory[items[index]] + " " + items[index].name + "(s)");
            }
            else
            {
                Debug.LogWarning("Trying to steal item from empty inventory! (contains no " + items[index].name + ")");
            }
        }
    }
Example #8
0
    public void SwitchPosition(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit)
    {
        switch (char2.position)
        {
        case CharacterScript.Position.Back:

            if ((holder.miscNum) > 0)
            {
                char2.position = CharacterScript.Position.Centered;
            }
            else if ((holder.miscNum) < 0)
            {
                char2.position = CharacterScript.Position.Back;
            }
            break;

        case CharacterScript.Position.Centered:

            if (holder.miscNum > 0)
            {
                char2.position = CharacterScript.Position.Front;
            }
            else if (holder.miscNum < 0)
            {
                char2.position = CharacterScript.Position.Back;
            }
            break;

        case CharacterScript.Position.Front:

            if (holder.miscNum > 0)
            {
                char2.position = CharacterScript.Position.Front;
            }
            else if (holder.miscNum < 0)
            {
                char2.position = CharacterScript.Position.Centered;
            }
            break;

        case CharacterScript.Position.Flying:

            if (holder.miscNum > 0)
            {
                char2.position = CharacterScript.Position.Front;
            }
            else if (holder.miscNum < 0)
            {
                char2.position = CharacterScript.Position.Back;
            }
            break;

        case CharacterScript.Position.Removed:

            Debug.Log("Trying to move a removed enemy");
            break;
        }
    }
Example #9
0
 public void Flee(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit)
 {
     // To do: add extra chance. Also add the thing itself
     char2.position = CharacterScript.Position.Removed;
     char2.aiState  = CharacterScript.AiState.Stun;
 }
Example #10
0
    public void PotionsAttack(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit)
    {
        int finalDamage = (int)(weapon.Health * atk.damageModifier / 100f);
        int finalMagic  = (int)(weapon.Magic * atk.damageModifier / 100f);;

        if (Mathf.Abs(finalDamage) > 0)
        {
            char2.ModifyHealth(-finalDamage);
        }
        if (Mathf.Abs(finalMagic) > 0)
        {
            char2.ModifyMagic(-finalMagic);
        }
    }
Example #11
0
 private static void RandomCircleAoeParams(SubAttack subattack)
 {
     subattack.diameter = Random.Range(4f, 25f);
 }
Example #12
0
 private static void RandomSquareAoeParams(SubAttack subattack)
 {
     subattack.xSize    = Random.Range(4f, 25f);
     subattack.zSize    = Random.Range(4f, 25f);
     subattack.rotation = Random.Range(0, 180f);
 }