public void GenerateActions(TacticsMove attacker, TacticsMove defender) { // Add battle init boosts attacker.ActivateSkills(Activation.INITCOMBAT, defender); attacker.ActivateSkills(Activation.PRECOMBAT, defender); defender.ActivateSkills(Activation.PRECOMBAT, attacker); _currentCharacter = attacker; actions.Clear(); actions.Add(new BattleAction(true, true, attacker, defender)); int range = Mathf.Abs(attacker.posx - defender.posx) + Mathf.Abs(attacker.posy - defender.posy); if (defender.GetWeapon() != null && defender.GetWeapon().InRange(range)) { actions.Add(new BattleAction(false, true, defender, attacker)); } //Compare speeds int spdDiff = attacker.stats.spd - defender.stats.spd; if (spdDiff >= 5) { actions.Add(new BattleAction(true, true, attacker, defender)); } else if (spdDiff <= -5) { if (defender.GetWeapon() != null && defender.GetWeapon().InRange(range)) { actions.Add(new BattleAction(false, true, defender, attacker)); } } }
public void GenerateDamageActions() { TacticsMove attacker = attackerTile.value.currentCharacter; TacticsMove defender = defenderTile.value.currentCharacter; dialogue = null; if (defender == null) { showBattleAnim = false; _currentCharacter = attacker; actions.Clear(); actions.Add(new BattleAction(AttackSide.LEFT, BattleAction.Type.DAMAGE, attacker, defenderTile.value.blockMove)); Debug.Log("BLOCK FIGHT!!"); } else { showBattleAnim = useBattleAnimations.value; // Add battle init boosts attacker.ActivateSkills(SkillActivation.INITCOMBAT, defender); attacker.ActivateSkills(SkillActivation.PRECOMBAT, defender); defender.ActivateSkills(SkillActivation.COUNTER, attacker); defender.ActivateSkills(SkillActivation.PRECOMBAT, attacker); _currentCharacter = attacker; InventoryTuple atkTup = attacker.GetEquippedWeapon(ItemCategory.WEAPON); InventoryTuple defTup = defender.GetEquippedWeapon(ItemCategory.WEAPON); actions.Clear(); actions.Add(new BattleAction(AttackSide.LEFT, BattleAction.Type.DAMAGE, attacker, defender)); int range = Mathf.Abs(attacker.posx - defender.posx) + Mathf.Abs(attacker.posy - defender.posy); if (!string.IsNullOrEmpty(defTup.uuid) && defTup.currentCharges > 0 && defender.GetEquippedWeapon(ItemCategory.WEAPON).InRange(range)) { actions.Add(new BattleAction(AttackSide.RIGHT, BattleAction.Type.DAMAGE, defender, attacker)); } //Compare speeds int spdDiff = actions[0].GetSpeedDifference(); if (spdDiff >= doublingSpeed.value) { if (atkTup.currentCharges > 1) { actions.Add(new BattleAction(AttackSide.LEFT, BattleAction.Type.DAMAGE, attacker, defender)); } } else if (spdDiff <= -doublingSpeed.value) { if (!string.IsNullOrEmpty(defTup.uuid) && defTup.currentCharges > 0 && defender.GetEquippedWeapon(ItemCategory.WEAPON).InRange(range)) { actions.Add(new BattleAction(AttackSide.RIGHT, BattleAction.Type.DAMAGE, defender, attacker)); } } TacticsMove quoter = (attacker.faction == Faction.ENEMY) ? attacker : defender; CharEntry triggerer = (attacker.faction == Faction.ENEMY) ? defender.stats.charData : attacker.stats.charData; FightQuote bestFind = null; for (int q = 0; q < quoter.fightQuotes.Count; q++) { if (quoter.fightQuotes[q].triggerer == null) { if (bestFind == null) { bestFind = quoter.fightQuotes[q]; } } else if (quoter.fightQuotes[q].triggerer == triggerer) { bestFind = quoter.fightQuotes[q]; break; } } if (bestFind != null && !bestFind.activated) { dialogue = bestFind.quote; bestFind.activated = true; } } }