private void DeliverAttack(RBYPokemon Attacker, RBYPokemon Defender, Attacks TheAttack, AttackingMoveSecondary typeOfDamage) { if (Attacker.TwoTurnMove) { typeOfDamage = Attacker.FinishTwoTurn(); } if (typeOfDamage != AttackingMoveSecondary.Turn2) { Displayer.ShoutAttack(Attacker.OwnerCall, TheAttack.Name, Attacker.Name); } else { Displayer.TwoTurn(); } if (Attacker.Dancing) { typeOfDamage = AttackingMoveSecondary.None; } Defender.WasAttacked = true; Defender.OppPrevAtk = TheAttack.Index; Attacker.MyPrevAtk = TheAttack.Index; switch (TheAttack.MoveClass) { case 0: DamageTypeMove(Attacker, Defender, TheAttack, typeOfDamage); break; case 1: StatusTypeMove(Attacker, Defender, TheAttack); break; case 2: StatBoostTypeMove(Attacker, Defender, TheAttack.Attack, TheAttack.Accuracy); break; } }
private void ExecuteAttack(RBYPokemon Attacker, RBYPokemon Defender, Trainer Agressor) { if (Agressor.ISwitched) { Agressor.FinishSwitch(); return; } if (!Attacker.IsAlive) { return; } if (Attacker.Biding) { int dmg = Attacker.PokemonBide(); if (!Attacker.Biding) { if (dmg == 0) { Displayer.RelayMessage("Nothing was unleashed"); } else { Defender.TakeDamage(dmg, true); } } return; } if (Attacker.Recharging) { Displayer.Recharging(); Attacker.Recharging = false; return; } if (Attacker.IsFlinched) { Displayer.FlinchMsg(Attacker); return; } if (Attacker.IsTrapped) { return; } if (Defender.IsTrapped) { if (Defender.StillTrapped()) { Displayer.StillWrapped(); Defender.TakeDamage(1, false); } else { Displayer.WrappedUp(); } return; } if (Attacker.CurrentStatus == StatusConditionInflicted.Para) { if (FullParalyzed()) { Displayer.ParalyzedMsg(Attacker); Attacker.FinishTwoTurn(); return; } } else if (Attacker.CurrentStatus == StatusConditionInflicted.Sleep) { if (Attacker.Snoozing()) { Displayer.AsleepMsg(Attacker); } else { Displayer.WokeUpMsg(Attacker); } return; } if (Attacker.IsConfused) { if (Confused()) { int dmg = DamageCalculation(Attacker.InBattleAtk, Attacker.InBattleDef, Attacker.Level, 20, 1, 1, false); Displayer.ConfusedHitMsg(); Attacker.FinishTwoTurn(); Attacker.TakeDamage(dmg, true); return; } Displayer.OutOfConfusionMsg(); } var TheAttack = Attacker.Moveset[Agressor.IndexPicked]; if (Attacker.TwoTurnMove && TheAttack.Name == "METRONOME") { TheAttack = MoveEnyclopedia[Attacker.MetronomedMove]; } DeliverAttack(Attacker, Defender, TheAttack, TheAttack.Attack.Movetype); if (Attacker.IsAlive && Defender.IsAlive) { EndOfTurnEffects(Attacker, Defender); } }