예제 #1
0
    public override void StatusSpecialAttack1(string name, baseStats attacker, baseStats target)
    {
        attacker.StartCoroutine(SA());
        IEnumerator SA()
        {
            if (attacker.SP > 4)
            {
                float heal = attacker.b.battleTarget.GetComponent <baseStats>().ogHP * .1f;
                attacker.SP -= 5;
                attacker.b.battleText.text = attacker.gameObject.name + " uses " + name;
                target.slash = SAPrefab4;
                target.AttackSlash1();
                yield return(new WaitForSeconds(1f));

                heal       = Mathf.Round(heal);
                target.HP += heal;
                target.damageText.GetComponent <Text>().text = heal.ToString();
                target.damageText.GetComponent <DamageTextEffect>().HealStartFloating();
                yield return(new WaitForSeconds(1f));

                attacker.b.TurnOrder();
            }
            else
            {
                int ran = Random.Range(0, attacker.b.charStats.Count);
                attacker.b.battleTarget = attacker.b.charStats[ran];
                attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
            }
        }
    }
예제 #2
0
    public override void SpecialAttack2(string name, baseStats attacker, baseStats target)
    {
        attacker.StartCoroutine(SA());
        IEnumerator SA()
        {
            if (attacker.SP > 3)
            {
                foreach (GameObject button in attacker.b.lists.buttons)
                {
                    button.GetComponent <Button>().interactable = false;
                }
                attacker.b.battleText.text = attacker.nameChar + " uses " + name;
                attacker.gameObject.GetComponent <Animator>().SetBool("attack", true);


                attacker.slash = SAPrefab2;
                attacker.SP   -= 4;
                yield return(new WaitForSeconds(1.2f));

                attacker.gameObject.GetComponent <Animator>().SetBool("attack", false);
                yield return(new WaitForSeconds(1.5f));

                if (target.status == "")
                {
                    target.status = "Sleep";
                    Color c = Color.gray;

                    target.transform.GetChild(0).GetComponent <SpriteRenderer>().color = Color.gray;
                    //Debug.Log(target.gameObject.GetComponentInChildren<SpriteRenderer>().color);
                    target.statusDuration = 2;
                }
                float attackUp = attacker.attack * 2f;
                float damage   = attackUp - target.GetComponent <baseStats>().def;
                if (damage < 1)
                {
                    damage = 1;
                }
                target.GetComponent <baseStats>().HP -= damage;
                target.GetComponent <baseStats>().damageText.GetComponent <Text>().text = damage.ToString();
                target.GetComponent <baseStats>().damageText.GetComponent <DamageTextEffect>().DamageStartFloating();

                if (target.GetComponent <baseStats>().HP < 1)
                {
                    attacker.StartCoroutine(attacker.b.Die(target.GetComponent <baseStats>()));
                }
                else
                {
                    attacker.b.TurnOrder();
                }
            }
            else
            {
                int ran = Random.Range(0, attacker.b.charStats.Count);
                attacker.b.battleTarget = attacker.b.charStats[ran];
                attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
            }
        }
    }
예제 #3
0
    public override void SpecialAttack2(string name, baseStats attacker, baseStats target)
    {
        attacker.StartCoroutine(SA());
        IEnumerator SA()
        {
            if (attacker.SP > 1)
            {
                foreach (GameObject button in attacker.b.lists.buttons)
                {
                    button.GetComponent <Button>().interactable = false;
                }
                attacker.b.battleTarget = target.gameObject;
                attacker.slash          = SAPrefab1;
                attacker.SP            -= 2;
                float upAttack = attacker.attack + 2;
                float damage   = upAttack - target.def;
                if (damage < 1)
                {
                    damage = 1;
                }
                attacker.b.battleText.text = attacker.gameObject.name + " uses " + name;
                attacker.gameObject.GetComponent <Animator>().SetBool("attack", true);
                yield return(new WaitForSeconds(1.2f));

                if (target.status == "")
                {
                    target.status = "Confused";

                    target.statusDuration = 4;
                }
                attacker.gameObject.GetComponent <Animator>().SetBool("attack", false);
                yield return(new WaitForSeconds(1.5f));

                target.HP -= damage;
                target.damageText.GetComponent <Text>().text = damage.ToString();
                target.damageText.GetComponent <DamageTextEffect>().DamageStartFloating();

                if (target.GetComponent <baseStats>().HP < 1)
                {
                    attacker.StartCoroutine(attacker.b.Die(target.GetComponent <baseStats>()));
                }
                else
                {
                    attacker.b.TurnOrder();
                }
            }
            else
            {
                int ran = Random.Range(0, attacker.b.charStats.Count);
                attacker.b.battleTarget = attacker.b.charStats[ran];
                attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
            }
        }
    }
예제 #4
0
    public override void SpecialAttack1(string name, baseStats attacker, baseStats target)
    {
        attacker.StartCoroutine(SA());
        IEnumerator SA()
        {
            if (attacker.SP > 2)
            {
                attacker.SP -= 3;
                foreach (GameObject button in attacker.b.lists.buttons)
                {
                    button.GetComponent <Button>().interactable = false;
                }
                attacker.b.battleText.text = attacker.nameChar + " uses " + name;
                attacker.gameObject.GetComponent <Animator>().SetBool("attack", true);
                attacker.slash = SAPrefab1;
                attacker.gameObject.GetComponent <enemyDeath>().multi = true;
                yield return(new WaitForSeconds(1.2f));

                attacker.gameObject.GetComponent <Animator>().SetBool("attack", false);
                yield return(new WaitForSeconds(1.5f));

                float attackUp = attacker.attack * 2f;
                foreach (GameObject hero in attacker.b.charStats)
                {
                    float damage = attackUp - hero.GetComponent <baseStats>().def;
                    if (damage < 1)
                    {
                        damage = 1;
                    }
                    hero.GetComponent <baseStats>().HP -= damage;
                    hero.GetComponent <baseStats>().damageText.GetComponent <Text>().text = damage.ToString();
                    hero.GetComponent <baseStats>().damageText.GetComponent <DamageTextEffect>().DamageStartFloating();
                }
                if (target.GetComponent <baseStats>().HP < 1)
                {
                    attacker.StartCoroutine(attacker.b.Die(target.GetComponent <baseStats>()));
                }
                else
                {
                    attacker.b.TurnOrder();
                }
            }
            else
            {
                int ran = Random.Range(0, attacker.b.charStats.Count);
                attacker.b.battleTarget = attacker.b.charStats[ran];
                attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
            }
        }
    }
예제 #5
0
    public override void enemyAI(baseStats attacker)
    {
        List <GameObject> weakList = new List <GameObject>();

        foreach (baseStats charac in attacker.b.stats)
        {
            if (charac.gameObject.tag == "Player")
            {
                weakList.Add(charac.gameObject);
            }
        }
        int ran = Random.Range(0, weakList.Count);

        attacker.b.battleTarget = weakList[ran];

        float lessHalf = attacker.ogHP / 2;

        if (attacker.HP < lessHalf)
        {
            weakList = weakList.OrderBy(c => c.gameObject.GetComponent <baseStats>().HP).ToList();
            attacker.b.battleTarget = weakList[0];
            SpecialAttack1(attacker.character.spec.physicalName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
        }
        else
        {
            attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
        }
    }
예제 #6
0
    public override void enemyAI(baseStats attacker)
    {
        int ran = Random.Range(0, attacker.b.charStats.Count);

        attacker.b.battleTarget = attacker.b.charStats[ran];
        int attack = 0;
        List <GameObject> weakList = new List <GameObject>();

        foreach (baseStats charac in attacker.b.stats)
        {
            if (charac.gameObject.tag == "enemy")
            {
                weakList.Add(charac.gameObject);
            }
        }
        for (int i = 0; i < weakList.Count; i++)
        {
            float lessHalf = weakList[i].GetComponent <baseStats>().ogHP / 2;
            if (weakList[i].GetComponent <baseStats>().HP < lessHalf && attacker.SP > 0)
            {
                attacker.b.battleTarget = attacker.b.lists.enemies[i];
                StatusSpecialAttack1(attacker.character.spec.statusName1, attacker, attacker.b.lists.enemies[i].GetComponent <baseStats>());
            }
            else
            {
                attack += 1;
            }
        }
        if (attack == weakList.Count)
        {
            attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
        }
    }
예제 #7
0
    public override void StatusSpecialAttack1(string name, baseStats attacker, baseStats target)
    {
        attacker.StartCoroutine(SSA1());
        IEnumerator SSA1()
        {
            if (attacker.SP > 2)
            {
                foreach (GameObject button in attacker.b.lists.buttons)
                {
                    button.GetComponent <Button>().interactable = false;
                }
                attacker.b.battleTarget = target.gameObject;
                target.slash            = SAPrefab4;
                attacker.SP            -= 3;
                float heal = target.ogHP * .1f;
                heal       = Mathf.Round(heal);
                target.HP += heal;
                if (target.HP > target.ogHP)
                {
                    target.HP = target.ogHP;
                }
                attacker.b.battleText.text = attacker.name + " uses " + name;
                target.AttackSlash1();
                yield return(new WaitForSeconds(1f));

                target.damageText.GetComponent <Text>().text = heal.ToString();
                target.damageText.GetComponent <DamageTextEffect>().HealStartFloating();
                yield return(new WaitForSeconds(1f));

                target.b.TurnOrder();
            }
            else
            {
                if (attacker.SP > 0)
                {
                    attacker.SP -= 1;
                    attacker.StartCoroutine(attacker.b.Revive(target));
                }
                else
                {
                    attacker.skip = true;
                }
            }
        }
    }
예제 #8
0
    public override void SpecialAttack1(string name, baseStats attacker, baseStats target)
    {
        attacker.StartCoroutine(SA1());
        IEnumerator SA1()
        {
            if (attacker.SP > 3)
            {
                foreach (GameObject button in attacker.b.lists.buttons)
                {
                    button.GetComponent <Button>().interactable = false;
                }
                attacker.b.battleTarget = target.gameObject;
                attacker.slash          = SAPrefab1;
                attacker.SP            -= 3;
                float upAttack = attacker.attack * 2;
                float damage   = upAttack - target.def;
                attacker.b.battleText.text = attacker.name + " uses " + name;
                attacker.gameObject.GetComponent <Animator>().SetBool("attack", true);
                yield return(new WaitForSeconds(1.2f));

                attacker.gameObject.GetComponent <Animator>().SetBool("attack", false);
                yield return(new WaitForSeconds(1f));

                target.HP -= damage;
                if (damage < 1)
                {
                    damage = 1;
                }
                target.damageText.GetComponent <Text>().text = damage.ToString();
                target.damageText.GetComponent <DamageTextEffect>().DamageStartFloating();
                if (target.GetComponent <baseStats>().HP < 1)
                {
                    attacker.StartCoroutine(attacker.b.Die(target.GetComponent <baseStats>()));
                }
                else
                {
                    attacker.b.TurnOrder();
                }
            }
            else
            {
                attacker.skip = true;
            }
        }
    }
예제 #9
0
    public override void enemyAI(baseStats attacker)
    {
        int ran = Random.Range(0, attacker.b.charStats.Count);

        attacker.b.battleTarget = attacker.b.charStats[ran];
        if (attacker.SP > 1)
        {
            //int ran2 = Random.Range(1, 3);
            //if (ran2 == 1)
            //{
            SpecialAttack1(attacker.character.spec.physicalName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            //} else if (ran2 == 2)
            //{
            //SpecialAttack2(attacker.character.spec.physicalName2, attacker, attacker.b.battleTarget.GetComponent<baseStats>());
            //}
        }
        else
        {
            attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
        }
    }
예제 #10
0
    public override void StatusSpecialAttack1(string name, baseStats attacker, baseStats target)
    {
        attacker.StartCoroutine(SA());
        IEnumerator SA()
        {
            foreach (GameObject button in attacker.b.lists.buttons)
            {
                button.GetComponent <Button>().interactable = false;
            }
            if (target.buffedStat == "" && attacker.SP > 1)
            {
                attacker.b.battleText.text = attacker.name + " uses " + name;
                foreach (GameObject button in attacker.b.lists.buttons)
                {
                    button.GetComponent <Button>().interactable = false;
                }
                attacker.b.battleTarget = target.gameObject;
                target.slash            = SAPrefab4;
                target.AttackSlash1();
                yield return(new WaitForSeconds(2f));

                attacker.b.battleText.text = target.name + "'s attack goes up!";
                attacker.SP        -= 2;
                target.buff         = 10;
                target.attack      += target.buff;
                target.buffDuration = 3;
                target.buffedStat   = "attack";
                yield return(new WaitForSeconds(2f));

                attacker.b.TurnOrder();
            }
            else
            {
                attacker.skip = true;
            }
        }
    }
예제 #11
0
    public static void Poison(baseStats target, battleSystem bat)
    {
        target.StartCoroutine(poison());
        IEnumerator poison()
        {
            if (target.statusDuration > 0)
            {
                bat.battleText.text = target.nameChar + " is hurt by poison.";
                target.transform.GetChild(1).GetComponent <Animator>().SetBool("poisoned", true);
                yield return(new WaitForSeconds(.5f));

                target.transform.GetChild(1).GetComponent <Animator>().SetBool("poisoned", false);
                float damage = Mathf.Round(target.ogHP * 0.03f);
                //yield return new WaitForSeconds(1f);

                target.HP -= damage;
                target.damageText.GetComponent <Text>().text = damage.ToString();
                target.damageText.GetComponent <DamageTextEffect>().DamageStartFloating();
                target.statusDuration -= 1;
                yield return(new WaitForSeconds(1f));

                if (target.gameObject.tag == "enemy")
                {
                    target.turn = true;
                    int ran = Random.Range(0, bat.lists.chars.Count);
                    bat.battleTarget = bat.lists.chars[ran];
                    bat.attacker     = target;
                    foreach (InventorySlot slot in bat.slots)
                    {
                        slot.attacker = bat.attacker;
                    }

                    bat.StartCoroutine(bat.enemyAttack(bat.battleTarget));
                }
                else if (target.gameObject.tag == "Player")
                {
                    target.turn  = true;
                    bat.attacker = target;
                    foreach (InventorySlot slot in bat.slots)
                    {
                        slot.attacker = bat.attacker;
                    }
                    bat.playerTurn();
                }
            }
            else
            {
                target.transform.GetChild(0).GetComponent <SpriteRenderer>().color = Color.white;
                bat.battleText.text = target.nameChar + " is cured of poison.";
                target.status       = null;
                yield return(new WaitForSeconds(1f));

                if (target.gameObject.tag == "enemy")
                {
                    target.turn = true;
                    int ran = Random.Range(0, bat.lists.chars.Count);
                    bat.battleTarget = bat.lists.chars[ran];
                    bat.attacker     = target;
                    foreach (InventorySlot slot in bat.slots)
                    {
                        slot.attacker = bat.attacker;
                    }

                    bat.StartCoroutine(bat.enemyAttack(bat.battleTarget));
                }
                else if (target.gameObject.tag == "Player")
                {
                    target.turn  = true;
                    bat.attacker = target;
                    foreach (InventorySlot slot in bat.slots)
                    {
                        slot.attacker = bat.attacker;
                    }
                    bat.playerTurn();
                }
            }
        }
    }
예제 #12
0
 public override void StatusSpecialAttack2(string name, baseStats attacker, baseStats target)
 {
     target.HP = target.ogHP;
     attacker.StartCoroutine(attacker.b.Revive(target));
 }
예제 #13
0
    public override void enemyAI(baseStats attacker)
    {
        Debug.Log(attacker.HP);
        bool  phase2       = false;
        bool  phase3       = false;
        float lessQuarter  = 2 * (attacker.ogHP / 3);
        float lessQuarters = attacker.ogHP / 3;

        Debug.Log(lessQuarter);
        Debug.Log(lessQuarters);
        if (attacker.HP > lessQuarter)
        {
            phase2 = false;
            phase3 = false;
        }
        else if (attacker.HP < lessQuarter && attacker.HP > lessQuarters)
        {
            phase2 = true;
            phase3 = false;
        }
        else if (attacker.HP < lessQuarter && attacker.HP < lessQuarters)
        {
            phase2 = false;
            phase3 = true;
        }
        List <GameObject> weakList = new List <GameObject>();

        foreach (baseStats charac in attacker.b.stats)
        {
            if (charac.gameObject.tag == "Player")
            {
                weakList.Add(charac.gameObject);
            }
        }
        int ran = Random.Range(0, weakList.Count);

        attacker.b.battleTarget = weakList[ran];
        if (phase2 == false && phase3 == false)
        {
            int rano = Random.Range(1, 3);
            if (rano == 1)
            {
                attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
            }
            else if (rano == 2)
            {
                SpecialAttack3(attacker.character.spec.physicalName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            }
        }
        else if (phase2 == true && phase3 == false)
        {
            int rano = Random.Range(1, 6);
            if (rano == 1 || rano == 2)
            {
                attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
            }
            else if (rano == 3)
            {
                SpecialAttack1(attacker.character.spec.physicalName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            }
            else if (rano == 4)
            {
                weakList = weakList.OrderBy(c => c.gameObject.GetComponent <baseStats>().HP).ToList();
                attacker.b.battleTarget = weakList[0];
                SpecialAttack2(attacker.character.spec.physicalName2, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            }
            else if (rano == 5)
            {
                SpecialAttack3(attacker.character.spec.physicalName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            }
        }
        else if (phase2 == false && phase3 == true)
        {
            int rano = Random.Range(1, 8);
            if (rano == 1 || rano == 2)
            {
                attacker.StartCoroutine(attacker.b.enemyAttack(attacker.b.battleTarget));
            }
            else if (rano == 3 || rano == 4)
            {
                attacker.b.battleTarget = attacker.gameObject;
                StatusSpecialAttack1(attacker.character.spec.statusName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            }
            else if (rano == 5)
            {
                SpecialAttack1(attacker.character.spec.physicalName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            }
            else if (rano == 6)
            {
                weakList = weakList.OrderBy(c => c.gameObject.GetComponent <baseStats>().HP).ToList();
                attacker.b.battleTarget = weakList[0];
                SpecialAttack2(attacker.character.spec.physicalName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            }
            else if (rano == 7)
            {
                SpecialAttack3(attacker.character.spec.physicalName1, attacker, attacker.b.battleTarget.GetComponent <baseStats>());
            }
        }
    }