//Enemy's Special Attack Functionality IEnumerator EnemySpecial(UnitWLevelling unit, BattleHUDWLevelling hud) { bool isDead = false; enemyUnit.unitCurrentMP -= 33; if (!enemyUnit.unitIsMagic) { isDead = unit.TakeRegDamage(enemyUnit, true); } else if (enemyUnit.unitIsMagic) { isDead = unit.TakeMagDamage(enemyUnit, true); } hud.HPFiddling(unit.unitCurrentHP); hud.MPFiddling(unit.unitCurrentMP); dialogueText.text = enemyUnit.unitName + " attacks " + unit.unitName + " for " + enemyUnit.unitAttack + "!"; yield return(new WaitForSeconds(2f)); if (isDead) { deadCheck += 1; } }
//Runs during attack phase if passed unit selected basic attack IEnumerator PartyBasicAtk(UnitWLevelling unit) { bool isDead = false; if (!unit.unitIsMagic) { isDead = enemyUnit.TakeRegDamage(unit, false); dialogueText.text = unit.unitName + " does " + (unit.unitAttack - enemyUnit.unitDef) + " damage!"; } else if (unit.unitIsMagic) { isDead = enemyUnit.TakeMagDamage(unit, false); dialogueText.text = unit.unitName + " does " + (unit.unitAttack - enemyUnit.unitRes) + " damage!"; } unit.gameObject.GetComponent <Animator>().SetBool("isHit", true); yield return(new WaitForSeconds(1f)); StartCoroutine(HitParticleSystem(enemyPlatform)); enemyHUD.HPFiddling(enemyUnit.unitCurrentHP); yield return(new WaitForSeconds(2f)); if (isDead) { state = BattleStateWL.WON; StartCoroutine(BattleEnd()); } Debug.Log(unit.unitName + " B-ATK COMP"); }
//RegDamage take functionality and checks if dead public bool TakeRegDamage(UnitWLevelling attacker, bool isSpec) { if (isSpec) { unitCurrentHP -= (Mathf.RoundToInt(attacker.unitAttack * 2f)); attacker.unitCurrentMP -= 33; } else { if ((attacker.unitAttack - unitDef) <= 0) { unitCurrentHP -= 0; } else { unitCurrentHP -= (attacker.unitAttack - unitDef); } } if (unitCurrentHP <= 0) { unitIsDead = true; return(true); } else { unitIsDead = false; return(false); } }
void MpRegen(UnitWLevelling unit, BattleHUDWLevelling hud) { unit.unitCurrentMP += 10; if (unit.unitCurrentMP > unit.unitMaxMP) { unit.unitCurrentMP = unit.unitMaxMP; } hud.MPFiddling(unit.unitCurrentMP); }
//Does Special Action public void SpecialAction(UnitWLevelling unit) { unit.unitCurrentHP += 25; if (unit.unitCurrentHP > unit.unitMaxHP) { unit.unitCurrentHP = unit.unitMaxHP; } unit.unitCurrentMP -= 50; }
//Initialises Battle public IEnumerator BattleInit() { turnTick = 0; GameObject partyOneGO = Instantiate(partyMemOne, partyOnePlatform); partyOneUnit = partyOneGO.GetComponent <UnitWLevelling>(); GameObject partyTwoGO = Instantiate(partyMemTwo, partyTwoPlatform); partyTwoUnit = partyTwoGO.GetComponent <UnitWLevelling>(); GameObject partyThreeGO = Instantiate(partyMemThree, partyThreePlatform); partyThreeUnit = partyThreeGO.GetComponent <UnitWLevelling>(); GameObject partyFourGO = Instantiate(partyMemFour, partyFourPlatform); partyFourUnit = partyFourGO.GetComponent <UnitWLevelling>(); GameObject enemyGO = Instantiate(enemyObj, enemyPlatform); enemyUnit = enemyGO.GetComponent <UnitWLevelling>(); UnitInit(overOne, partyOneUnit); UnitInit(overTwo, partyTwoUnit); UnitInit(overThree, partyThreeUnit); UnitInit(overFour, partyFourUnit); UnitInit(overEnemy, enemyUnit); battleCanvas.SetActive(true); actionPanel.SetActive(false); attackPanel.SetActive(false); overworldMusicEGO.SetActive(false); battleMusicEGO.SetActive(true); dialogueText = dialogueObj.GetComponent <TextMeshProUGUI>(); dialogueText.text = "A wild " + enemyUnit.unitName + " is committing Flibbity"; pOneHUD.HUDFiddling(partyOneUnit); pTwoHUD.HUDFiddling(partyTwoUnit); pThreeHUD.HUDFiddling(partyThreeUnit); pFourHUD.HUDFiddling(partyFourUnit); enemyHUD.HUDFiddling(enemyUnit); if (tutorialScript.battleTutEnd == false) { yield return(new WaitForSeconds(1f)); state = BattleStateWL.PARTYONESEL; StartCoroutine(tutorialScript.TutBattle1()); } else { yield return(new WaitForSeconds(2f)); state = BattleStateWL.PARTYONESEL; PartyPhaseBegin(); Debug.Log("PartyPhaseBegun"); } }
//Is called to level the unit. public void UnitLevelling(UnitWLevelling unitParty, UnitWLevelling unit) { unitParty.unitExp += unit.unitExpGainedOnDeath; if (unitParty.unitExp >= unitParty.unitReqExp) { unitParty.unitLevel += 1; unitParty.unitReqExp += (unitParty.unitReqExp / 4) + unitParty.unitReqExp; StatDistribution(unitParty); } }
public void SetStatBattleToOver(UnitWLevelling unitBattle, UnitWLevelling unitOverworld) { unitOverworld.unitName = unitBattle.unitName; unitOverworld.unitImg = unitBattle.unitImg; unitOverworld.unitClass = unitBattle.unitClass; unitOverworld.unitIsMagic = unitBattle.unitIsMagic; unitOverworld.unitIsDead = unitBattle.unitIsDead; unitOverworld.unitLevel = unitBattle.unitLevel; unitOverworld.unitExp = unitBattle.unitExp; unitOverworld.unitReqExp = unitBattle.unitReqExp; unitOverworld.unitAttack = unitBattle.unitAttack; unitOverworld.unitRes = unitBattle.unitRes; unitOverworld.unitDef = unitBattle.unitDef; unitOverworld.unitMaxHP = unitBattle.unitMaxHP; unitOverworld.unitCurrentHP = unitBattle.unitCurrentHP; }
//When called, Initialises HUD based on the unit given public void HUDFiddling(UnitWLevelling unit) { nameText = nameObj.GetComponent <TextMeshProUGUI>(); lvlText = lvlObj.GetComponent <TextMeshProUGUI>(); tempHP = unit.unitMaxHP; tempMP = unit.unitMaxMP; nameText.text = unit.unitName; lvlText.text = "Lvl " + unit.unitLevel; hpSlider.maxValue = unit.unitMaxHP; hpSlider.value = unit.unitCurrentHP; mpSlider.maxValue = unit.unitMaxMP; mpSlider.value = unit.unitCurrentMP; healthText.text = unit.unitCurrentHP + "/" + unit.unitMaxHP; manaText.text = unit.unitCurrentMP + "/" + unit.unitMaxMP; }
void UnitInit(UnitWLevelling overUnit, UnitWLevelling battleUnit) { battleUnit.unitName = overUnit.unitName; battleUnit.unitImg = overUnit.unitImg; battleUnit.unitClass = overUnit.unitClass; battleUnit.unitIsMagic = overUnit.unitIsMagic; battleUnit.unitIsDead = overUnit.unitIsDead; battleUnit.unitLevel = overUnit.unitLevel; battleUnit.unitExp = overUnit.unitExp; battleUnit.unitReqExp = overUnit.unitReqExp; battleUnit.unitAttack = overUnit.unitAttack; battleUnit.unitRes = overUnit.unitRes; battleUnit.unitDef = overUnit.unitDef; battleUnit.unitMaxHP = overUnit.unitMaxHP; battleUnit.unitCurrentHP = overUnit.unitCurrentHP; battleUnit.unitMaxMP = overUnit.unitMaxMP; battleUnit.unitCurrentMP = overUnit.unitCurrentMP; battleUnit.unitExpGainedOnDeath = overUnit.unitExpGainedOnDeath; }
void InitUnit(UnitWLevelling overUnit, UnitWLevelling battleUnit) { overUnit.unitName = battleUnit.unitName; overUnit.unitImg = battleUnit.unitImg; overUnit.unitClass = battleUnit.unitClass; overUnit.unitIsMagic = battleUnit.unitIsMagic; overUnit.unitIsDead = battleUnit.unitIsDead; overUnit.unitLevel = battleUnit.unitLevel; overUnit.unitExp = battleUnit.unitExp; overUnit.unitReqExp = battleUnit.unitReqExp; overUnit.unitAttack = battleUnit.unitAttack; overUnit.unitRes = battleUnit.unitRes; overUnit.unitDef = battleUnit.unitDef; overUnit.unitMaxHP = battleUnit.unitMaxHP; overUnit.unitCurrentHP = battleUnit.unitCurrentHP; overUnit.unitMaxMP = battleUnit.unitMaxMP; overUnit.unitCurrentMP = battleUnit.unitCurrentMP; overUnit.unitExpGainedOnDeath = battleUnit.unitExpGainedOnDeath; }
public void SetStatOverToBattle(UnitWLevelling unitBattle, UnitWLevelling unitOverworld) { unitBattle.unitName = unitOverworld.unitName; if (unitOverworld.unitImg != null) { unitBattle.unitImg = unitOverworld.unitImg; } unitBattle.unitClass = unitOverworld.unitClass; unitBattle.unitIsMagic = unitOverworld.unitIsMagic; unitBattle.unitIsDead = unitOverworld.unitIsDead; unitBattle.unitLevel = unitOverworld.unitLevel; unitBattle.unitExp = unitOverworld.unitExp; unitBattle.unitReqExp = unitOverworld.unitReqExp; unitBattle.unitAttack = unitOverworld.unitAttack; unitBattle.unitRes = unitOverworld.unitRes; unitBattle.unitDef = unitOverworld.unitDef; unitBattle.unitMaxHP = unitOverworld.unitMaxHP; unitBattle.unitCurrentHP = unitOverworld.unitCurrentHP; unitBattle.unitExpGainedOnDeath = unitOverworld.unitExpGainedOnDeath; }
public void StatDistribution(UnitWLevelling unit) { if (unit.unitClass == ClassSelect.TANK) { unit.unitAttack += (unit.unitAttack / 10); unit.unitRes = Mathf.RoundToInt(unit.unitRes * 1.18f); unit.unitDef = Mathf.RoundToInt(unit.unitDef * 1.2f); unit.unitMaxHP += ((unit.unitMaxHP / 10) + 5); } else if (unit.unitClass == ClassSelect.DPSMELEE) { unit.unitAttack += (unit.unitAttack / 7); unit.unitRes = Mathf.RoundToInt(unit.unitRes * 1.18f); unit.unitDef = Mathf.RoundToInt(unit.unitDef * 1.2f); unit.unitMaxHP += ((unit.unitMaxHP / 15) + 5); } else if (unit.unitClass == ClassSelect.DPSRANGED) { unit.unitAttack += (unit.unitAttack / 7); unit.unitRes = Mathf.RoundToInt(unit.unitRes * 1.2f); unit.unitDef = Mathf.RoundToInt(unit.unitDef * 1.18f); unit.unitMaxHP += ((unit.unitMaxHP / 15) + 5); } else if (unitClass == ClassSelect.DPSMAGIC) { unit.unitAttack += (unit.unitAttack / 7); unit.unitRes = Mathf.RoundToInt(unit.unitRes * 1.2f); unit.unitDef = Mathf.RoundToInt(unit.unitDef * 1.18f); unit.unitMaxHP += ((unit.unitMaxHP / 15) + 5); } else if (unit.unitClass == ClassSelect.HEALER) { unit.unitAttack += (unit.unitAttack / 8); unit.unitRes = Mathf.RoundToInt(unit.unitRes * 1.18f); unit.unitDef = Mathf.RoundToInt(unit.unitDef * 1.2f); unit.unitMaxHP += ((unit.unitMaxHP / 17) + 3); } }
//Uses item if passed unit selected to use an item IEnumerator PartyUseItem(UnitWLevelling unit, BattleHUDWLevelling hud) { if (unit.unitCurrentMP >= 50) { unit.unitCurrentHP += 25; if (unit.unitCurrentHP > unit.unitMaxHP) { unit.unitCurrentHP = unit.unitMaxHP; } unit.unitCurrentMP -= 50; dialogueText.text = unit.unitName + " healed self, at least, they had better have."; } else { dialogueText.text = unit.unitName + "'s attempt to heal failed."; } hud.HPFiddling(unit.unitCurrentHP); hud.MPFiddling(unit.unitCurrentMP); yield return(new WaitForSeconds(2f)); Debug.Log(unit.unitName + " healed self"); }
public bool HealDamage(UnitWLevelling p1, UnitWLevelling p2, UnitWLevelling p3) { unitCurrentHP += unitAttack; if (unitCurrentHP > unitMaxHP) { unitCurrentHP = unitMaxHP; } p1.unitCurrentHP += unitAttack; if (p1.unitCurrentHP > p1.unitMaxHP) { p1.unitCurrentHP = p1.unitMaxHP; } p2.unitCurrentHP += unitAttack; if (p2.unitCurrentHP > p2.unitMaxHP) { p2.unitCurrentHP = p2.unitMaxHP; } p3.unitCurrentHP += unitAttack; if (p3.unitCurrentHP > p3.unitMaxHP) { p3.unitCurrentHP = p3.unitMaxHP; } unitCurrentMP -= 33; if (unitCurrentHP <= 0) { unitIsDead = true; return(true); } else { unitIsDead = false; return(false); } }
//Called to set enemy stats appropriately public void EnemyInit(UnitWLevelling unit) { if (unit.unitClass == ClassSelect.TEACHER) { unit.unitMaxHP = 1000; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 0; unit.unitAttack = 10; unit.unitDef = 100; unit.unitRes = 100; } else if (unit.unitLevel == 1) { unit.unitMaxHP = 100; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 100; unit.unitAttack = 20; unit.unitDef = 3; unit.unitRes = 2; } else if (unit.unitLevel == 2) { unit.unitMaxHP = 111; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 120; unit.unitAttack = 22; unit.unitDef = 4; unit.unitRes = 2; } else if (unit.unitLevel == 3) { unit.unitMaxHP = 123; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 144; unit.unitAttack = 24; unit.unitDef = 4; unit.unitRes = 3; } else if (unit.unitLevel == 4) { unit.unitMaxHP = 137; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 173; unit.unitAttack = 27; unit.unitDef = 5; unit.unitRes = 3; } else if (unit.unitLevel == 5) { unit.unitMaxHP = 152; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 207; unit.unitAttack = 29; unit.unitDef = 6; unit.unitRes = 4; } else if (unit.unitLevel == 6) { unit.unitMaxHP = 169; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 249; unit.unitAttack = 32; unit.unitDef = 7; unit.unitRes = 5; } else if (unit.unitLevel == 7) { unit.unitMaxHP = 188; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 299; unit.unitAttack = 35; unit.unitDef = 9; unit.unitRes = 6; } else if (unit.unitLevel == 8) { unit.unitMaxHP = 209; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 358; unit.unitAttack = 39; unit.unitDef = 10; unit.unitRes = 7; } else if (unit.unitLevel == 9) { unit.unitMaxHP = 232; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 430; unit.unitAttack = 43; unit.unitDef = 12; unit.unitRes = 9; } else if (unit.unitLevel == 10) { unit.unitMaxHP = 258; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 516; unit.unitAttack = 43; unit.unitDef = 14; unit.unitRes = 10; } else if (unit.unitLevel == 11) { unit.unitMaxHP = 287; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 619; unit.unitAttack = 52; unit.unitDef = 17; unit.unitRes = 12; } else if (unit.unitLevel == 12) { unit.unitMaxHP = 319; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 743; unit.unitAttack = 57; unit.unitDef = 20; unit.unitRes = 15; } else if (unit.unitLevel == 13) { unit.unitMaxHP = 354; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 891; unit.unitAttack = 63; unit.unitDef = 24; unit.unitRes = 18; } else if (unit.unitLevel == 14) { unit.unitMaxHP = 393; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 1070; unit.unitAttack = 69; unit.unitDef = 29; unit.unitRes = 21; } else if (unit.unitLevel == 15) { unit.unitMaxHP = 437; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 1283; unit.unitAttack = 76; unit.unitDef = 34; unit.unitRes = 26; } else if (unit.unitLevel == 16) { unit.unitMaxHP = 100; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 1541; unit.unitAttack = 84; unit.unitDef = 41; unit.unitRes = 31; } else if (unit.unitLevel == 17) { unit.unitMaxHP = 540; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 1849; unit.unitAttack = 92; unit.unitDef = 49; unit.unitRes = 37; } else if (unit.unitLevel == 18) { unit.unitMaxHP = 600; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 2219; unit.unitAttack = 101; unit.unitDef = 58; unit.unitRes = 44; } else if (unit.unitLevel == 19) { unit.unitMaxHP = 666; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 2662; unit.unitAttack = 110; unit.unitDef = 69; unit.unitRes = 53; } else if (unit.unitLevel == 20) { unit.unitMaxHP = 740; unit.unitCurrentHP = unitMaxHP; unit.unitExpGainedOnDeath = 13195; unit.unitAttack = 122; unit.unitDef = 81; unit.unitRes = 64; } }
//Runs during attack phase if passed unit selected special attack IEnumerator PartySpecialAtk(UnitWLevelling unit) { bool isDead = false; if (unit.unitCurrentMP >= 33) { if (!unit.unitIsMagic && unit.unitClass != ClassSelect.HEALER) { isDead = enemyUnit.TakeRegDamage(unit, true); unit.gameObject.GetComponent <Animator>().SetBool("isHit", true); yield return(new WaitForSeconds(1f)); StartCoroutine(HitParticleSystem(enemyPlatform)); dialogueText.text = unit.unitName + " does " + (unit.unitAttack * 2) + " damage!"; } else if (unit.unitIsMagic && unit.unitClass != ClassSelect.HEALER) { isDead = enemyUnit.TakeMagDamage(unit, true); unit.gameObject.GetComponent <Animator>().SetBool("isHit", true); yield return(new WaitForSeconds(1f)); StartCoroutine(HitParticleSystem(enemyPlatform)); dialogueText.text = unit.unitName + " does " + (unit.unitAttack * 2) + " damage!"; } else if (unit.unitClass == ClassSelect.HEALER) { isDead = partyFourUnit.HealDamage(partyOneUnit, partyTwoUnit, partyThreeUnit); pOneHUD.HPFiddling(partyOneUnit.unitCurrentHP); pTwoHUD.HPFiddling(partyTwoUnit.unitCurrentHP); pThreeHUD.HPFiddling(partyThreeUnit.unitCurrentHP); pFourHUD.HPFiddling(partyFourUnit.unitCurrentHP); pFourHUD.MPFiddling(partyFourUnit.unitCurrentMP); dialogueText.text = unit.unitName + " does some light first aid!"; } } else { dialogueText.text = unit.unitName + " doesn't have enough mana!"; } if (unit.unitCurrentMP <= 0) { unit.unitCurrentMP = 0; } enemyHUD.HPFiddling(enemyUnit.unitCurrentHP); pOneHUD.HPFiddling(partyOneUnit.unitCurrentHP); pTwoHUD.HPFiddling(partyTwoUnit.unitCurrentHP); pThreeHUD.HPFiddling(partyThreeUnit.unitCurrentHP); pFourHUD.HPFiddling(partyFourUnit.unitCurrentHP); pOneHUD.MPFiddling(partyOneUnit.unitCurrentMP); pTwoHUD.MPFiddling(partyTwoUnit.unitCurrentMP); pThreeHUD.MPFiddling(partyThreeUnit.unitCurrentMP); pFourHUD.MPFiddling(partyFourUnit.unitCurrentMP); yield return(new WaitForSeconds(2f)); if (isDead) { state = BattleStateWL.WON; StartCoroutine(BattleEnd()); } Debug.Log(unit.unitName + " S-ATK COMP"); }