public override List <MoveResult> ApplyMove(CombatInstance2 inst, BasicMon owner, List <BasicMon> targets) { ResetResult(); AddResult(); var player = inst.GetPlayer(owner); var chara = player.Char; //Fail logic if (SelfMoveFailLogic(owner) || !chara.HasUsableMon()) { Result[TargetNum].Fail = true; Result[TargetNum].Hit = false; } //Hit logic else { CurrentPP--; var mon = chara.FirstUsableMon(new List <BasicMon> { owner }); Result[TargetNum].Swapout = mon; Result[TargetNum].Messages.Add($"**{owner.Nickname}** teleports away and {player.Mention} sends out **{mon.Nickname}**!"); foreach (BasicMon m in inst.GetAllMons()) { if (m.SelectedMove != null) { for (int i = 0; i < m.SelectedMove.Targets.Count; i++) { if (m.SelectedMove.Targets[i] == owner) { m.SelectedMove.Targets[i] = mon; } } for (int i = 0; i < m.SelectedMove.ValidTargets.Count; i++) { if (m.SelectedMove.ValidTargets[i] == owner) { m.SelectedMove.ValidTargets[i] = mon; } } } } } return(Result); }