IEnumerator SkillAttackCo() { ui.LogMessage(instigator._charName + " used " + skill._skillName + "!"); instigator._magic.ChangeCurrentPoints(-skill._mpCost); ui.UpdateStats(instigator); bool hit = combat.SuccessfulHit(instigator, targets, skill); yield return(new WaitForSeconds(normalDelay)); if (hit) { foreach (var target in targets) { float effectiveness; // >1 for weak, 0<x<1 for resist, 0 for immune float critical; int damage; bool dead; BattlePortrait targetPortrait = battle.GetPortrait(target); critical = combat.Critical(instigator); effectiveness = combat.Effectiveness(skill, target); damage = Damage(instigator, target, skill, effectiveness, critical); dead = target.TakeDamage(damage); LogMessageSkill(target, effectiveness, critical, damage); ui.UpdateStats(target); CreateDamageNumber(targetPortrait, effectiveness, damage); yield return(battle.StartCoroutine(targetPortrait.ShakeCo(effectiveness, shakeTime))); if (dead) { if (battle.InActiveEnemies(target)) { battle.AddExpEarned(target._expReward); battle.AddMoneyEarned(target._moneyReward); } yield return(battle.StartCoroutine(battle.RemoveBattlerCo(target, smallDelay))); } } } else { ui.LogMessage("The attack missed!"); } yield return(new WaitForSeconds(normalDelay)); }
IEnumerator ItemAttackCo() { float delay; TypeID damageType = item._damageType; if (battle._autoMode) { delay = smallDelay; } else { delay = normalDelay; } if (StartsWithVowel(item._itemName)) { ui.LogMessage(instigator._charName + " used an " + item._itemName + "!"); } else { ui.LogMessage(instigator._charName + " used a " + item._itemName + "!"); } yield return(new WaitForSeconds(2f * smallDelay)); foreach (var target in targets) { float effectiveness; int damage; bool dead; BattlePortrait targetPortrait = battle.GetPortrait(target); effectiveness = combat.Effectiveness(item._damageType, target); damage = Damage(item, effectiveness); dead = target.TakeDamage(damage); LogMessageItem(target, effectiveness, damage); ui.UpdateStats(target); CreateDamageNumber(targetPortrait, effectiveness, damage); yield return(battle.StartCoroutine(targetPortrait.ShakeCo(effectiveness, shakeTime))); if (dead) { if (battle.InActiveEnemies(target)) { battle.AddExpEarned(target._expReward); battle.AddMoneyEarned(target._moneyReward); } yield return(battle.StartCoroutine(battle.RemoveBattlerCo(target, delay))); } } game._inventory.RemoveItem(item); yield return(new WaitForSeconds(delay)); }