public bool CanFlinchFrom(PBEPokemon other) { if (other == null) { throw new ArgumentNullException(nameof(other)); } return(!Status2.HasFlag(PBEStatus2.Flinching) && !(Ability == PBEAbility.InnerFocus && !other.HasCancellingAbility())); }
public bool CanBecomeConfusedBy(PBEPokemon other) { if (other == null) { throw new ArgumentNullException(nameof(other)); } return(!Status2.HasFlag(PBEStatus2.Confused) && !(Ability == PBEAbility.OwnTempo && !other.HasCancellingAbility())); }
/// <summary>Returns True if the Pokémon can become <see cref="PBEStatus2.Infatuated"/> with <paramref name="other"/>.</summary> public bool CanBecomeInfatuatedWith(PBEPokemon other) { if (other == null) { throw new ArgumentNullException(nameof(other)); } return(!Status2.HasFlag(PBEStatus2.Infatuated) && ((Gender == PBEGender.Male && other.Gender == PBEGender.Female) || (Gender == PBEGender.Female && other.Gender == PBEGender.Male)) && !(Ability == PBEAbility.Oblivious && !other.HasCancellingAbility())); }
public override string ToString() { var sb = new StringBuilder(); sb.AppendLine($"{Shell.Nickname}/{Shell.Species} {GenderSymbol} Lv.{Shell.Level}"); if (Id == byte.MaxValue) { sb.AppendLine($"HP: {HPPercentage:P2}"); } else { sb.AppendLine($"HP: {HP}/{MaxHP} ({HPPercentage:P2})"); } sb.AppendLine($"Position: {FieldPosition}"); sb.AppendLine($"Type1: {Type1}"); sb.AppendLine($"Type2: {Type2}"); sb.AppendLine($"Status1: {Status1}"); sb.AppendLine($"Status2: {Status2}"); if (Id != byte.MaxValue && Status2.HasFlag(PBEStatus2.Substitute)) { sb.AppendLine($"Substitute HP: {SubstituteHP}"); } if (Id != byte.MaxValue) { sb.AppendLine($"Stats: A: {Attack} D: {Defense} SA: {SpAttack} SD: {SpDefense} S: {Speed}"); } sb.AppendLine($"Stat changes: A: {AttackChange} D: {DefenseChange} SA: {SpAttackChange} SD: {SpDefenseChange} S: {SpeedChange} AC: {AccuracyChange} E: {EvasionChange}"); sb.AppendLine($"Item: {(Item == (PBEItem)ushort.MaxValue ? "???" : PBEItemLocalization.Names[Item].English)}"); sb.AppendLine($"Ability: {(Ability == PBEAbility.MAX ? "???" : PBEAbilityLocalization.Names[Ability].English)}"); if (Id != byte.MaxValue) { sb.AppendLine($"Nature: {(Shell.Nature == PBENature.MAX ? "???" : Shell.Nature.ToString())}"); } if (Id != byte.MaxValue) { sb.AppendLine($"Hidden Power: {GetHiddenPowerType()}/{GetHiddenPowerBasePower()}"); } string[] moveStrs = new string[Moves.Length]; for (int i = 0; i < moveStrs.Length; i++) { string mStr = Moves[i] == PBEMove.MAX ? "???" : PBEMoveLocalization.Names[Moves[i]].English; if (Id != byte.MaxValue) { mStr += $" {PP[i]}/{MaxPP[i]}"; } moveStrs[i] = mStr; } sb.Append($"Moves: {string.Join(", ", moveStrs)}"); return(sb.ToString()); }
public void UpdateKnownPP(PBEMove move, int amountReduced) { if (move == PBEMove.None || move >= PBEMove.MAX || !Enum.IsDefined(typeof(PBEMove), move)) { throw new ArgumentOutOfRangeException(nameof(move)); } PBEBattleMoveset.PBEBattleMovesetSlot knownSlot = KnownMoves[move]; knownSlot.PP += amountReduced; if (knownSlot.MaxPP == 0) { if (Status2.HasFlag(PBEStatus2.Transformed)) { knownSlot.MaxPP = PBEBattleMoveset.GetTransformPP(Team.Battle.Settings, move); } else if (Team.Battle.Settings.MaxPPUps == 0 || knownSlot.PP > PBEBattleMoveset.GetNonTransformPP(Team.Battle.Settings, move, (byte)(Team.Battle.Settings.MaxPPUps - 1))) { knownSlot.MaxPP = PBEBattleMoveset.GetNonTransformPP(Team.Battle.Settings, move, Team.Battle.Settings.MaxPPUps); } } }
// Will only be accurate for the host public override string ToString() { var sb = new StringBuilder(); sb.AppendLine($"{Nickname}/{Species} {GenderSymbol} Lv.{Level}"); sb.AppendLine($"HP: {HP}/{MaxHP} ({HPPercentage:P2})"); sb.Append($"Types: {PBELocalizedString.GetTypeName(Type1).English}"); if (Type2 != PBEType.None) { sb.Append($"/{PBELocalizedString.GetTypeName(Type2).English}"); } sb.AppendLine(); sb.Append($"Known types: {PBELocalizedString.GetTypeName(KnownType1).English}"); if (KnownType2 != PBEType.None) { sb.Append($"/{PBELocalizedString.GetTypeName(KnownType2).English}"); } sb.AppendLine(); sb.AppendLine($"Position: {Team.TrainerName}'s {FieldPosition}"); sb.AppendLine($"Status1: {Status1}"); if (Status1 == PBEStatus1.Asleep) { sb.AppendLine($"Sleep turns: {Status1Counter}/{SleepTurns}"); } else if (Status1 == PBEStatus1.BadlyPoisoned) { sb.AppendLine($"Toxic Counter: {Status1Counter}"); } sb.AppendLine($"Status2: {Status2}"); if (Status2.HasFlag(PBEStatus2.Confused)) { sb.AppendLine($"Confusion turns: {ConfusionCounter}/{ConfusionTurns}"); } if (Status2.HasFlag(PBEStatus2.Disguised)) { sb.AppendLine($"Disguised as: {DisguisedAsPokemon.Nickname}"); } if (Status2.HasFlag(PBEStatus2.Infatuated)) { sb.AppendLine($"Infatuated with: {InfatuatedWithPokemon.Nickname}"); } if (Status2.HasFlag(PBEStatus2.LeechSeed)) { sb.AppendLine($"Seeded position: {SeededTeam.TrainerName}'s {SeededPosition}"); } if (Status2.HasFlag(PBEStatus2.Substitute)) { sb.AppendLine($"Substitute HP: {SubstituteHP}"); } sb.AppendLine($"Stats: [A] {Attack}, [D] {Defense}, [SA] {SpAttack}, [SD] {SpDefense}, [S] {Speed}, [W] {Weight:0.0}"); PBEStat[] statChanges = GetChangedStats(); if (statChanges.Length > 0) { var statStrs = new List <string>(7); if (Array.IndexOf(statChanges, PBEStat.Attack) != -1) { statStrs.Add($"[A] x{PBEBattle.GetStatChangeModifier(AttackChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.Defense) != -1) { statStrs.Add($"[D] x{PBEBattle.GetStatChangeModifier(DefenseChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.SpAttack) != -1) { statStrs.Add($"[SA] x{PBEBattle.GetStatChangeModifier(SpAttackChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.SpDefense) != -1) { statStrs.Add($"[SD] x{PBEBattle.GetStatChangeModifier(SpDefenseChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.Speed) != -1) { statStrs.Add($"[S] x{PBEBattle.GetStatChangeModifier(SpeedChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.Accuracy) != -1) { statStrs.Add($"[AC] x{PBEBattle.GetStatChangeModifier(AccuracyChange, true):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.Evasion) != -1) { statStrs.Add($"[E] x{PBEBattle.GetStatChangeModifier(EvasionChange, true):0.00}"); } sb.AppendLine($"Stat changes: {string.Join(", ", statStrs)}"); } sb.AppendLine($"Ability: {PBELocalizedString.GetAbilityName(Ability).English}"); sb.AppendLine($"Known ability: {(KnownAbility == PBEAbility.MAX ? "???" : PBELocalizedString.GetAbilityName(KnownAbility).English)}"); sb.AppendLine($"Item: {PBELocalizedString.GetItemName(Item).English}"); sb.AppendLine($"Known item: {(KnownItem == (PBEItem)ushort.MaxValue ? "???" : PBELocalizedString.GetItemName(KnownItem).English)}"); if (Moves.Contains(PBEMove.Frustration) || Moves.Contains(PBEMove.Return)) { sb.AppendLine($"Friendship: {Friendship} ({Friendship / byte.MaxValue:P2})"); } if (Moves.Contains(PBEMove.HiddenPower)) { sb.AppendLine($"{PBELocalizedString.GetMoveName(PBEMove.HiddenPower).English}: {PBELocalizedString.GetTypeName(IndividualValues.HiddenPowerType).English}:{IndividualValues.HiddenPowerBasePower}"); } sb.Append("Moves: "); for (int i = 0; i < Team.Battle.Settings.NumMoves; i++) { PBEBattleMoveset.PBEBattleMovesetSlot slot = Moves[i]; PBEMove move = slot.Move; if (i > 0) { sb.Append(", "); } sb.Append(PBELocalizedString.GetMoveName(slot.Move).English); if (move != PBEMove.None) { sb.Append($" ({slot.PP}/{slot.MaxPP})"); } } sb.AppendLine(); sb.Append("Known moves: "); for (int i = 0; i < Team.Battle.Settings.NumMoves; i++) { PBEBattleMoveset.PBEBattleMovesetSlot slot = KnownMoves[i]; PBEMove move = slot.Move; int pp = slot.PP; int maxPP = slot.MaxPP; if (i > 0) { sb.Append(", "); } sb.Append(move == PBEMove.MAX ? "???" : PBELocalizedString.GetMoveName(move).English); if (move != PBEMove.None && move != PBEMove.MAX) { sb.Append($" ({pp}{(maxPP == 0 ? ")" : $"/{maxPP})")}"); } }
/// <summary>Sets and clears all information required for switching out.</summary> public void ClearForSwitch() { FieldPosition = PBEFieldPosition.None; switch (Ability) { case PBEAbility.NaturalCure: { Status1 = PBEStatus1.None; Status1Counter = SleepTurns = 0; break; } case PBEAbility.Regenerator: { HP = PBEUtils.Clamp((ushort)(HP + (MaxHP / 3)), ushort.MinValue, MaxHP); HPPercentage = (double)HP / MaxHP; break; } } PBEPokemonData pData; if (Shaymin_CannotChangeBackToSkyForm) { pData = PBEPokemonData.GetData(Species = KnownSpecies = PBESpecies.Shaymin); Ability = pData.Abilities[0]; } else { pData = PBEPokemonData.GetData(Species = KnownSpecies = OriginalSpecies); Ability = OriginalAbility; } KnownAbility = PBEAbility.MAX; KnownGender = Gender; KnownItem = (PBEItem)ushort.MaxValue; KnownMoves.SetUnknown(); KnownNickname = Nickname; KnownShiny = Shiny; KnownType1 = Type1 = pData.Type1; KnownType2 = Type2 = pData.Type2; AttackChange = DefenseChange = SpAttackChange = SpDefenseChange = SpeedChange = AccuracyChange = EvasionChange = 0; if (Status1 == PBEStatus1.Asleep) { Status1Counter = 0; } else if (Status1 == PBEStatus1.BadlyPoisoned) { Status1Counter = 1; } ConfusionCounter = ConfusionTurns = 0; DisguisedAsPokemon = null; SeededPosition = PBEFieldPosition.None; SeededTeam = null; SubstituteHP = 0; if (Id != byte.MaxValue && Status2.HasFlag(PBEStatus2.Transformed)) { Moves.Reset(TransformBackupMoves); TransformBackupMoves.SetUnknown(); } Status2 = PBEStatus2.None; TempLockedMove = ChoiceLockedMove = PBEMove.None; TempLockedTargets = PBETurnTarget.None; ExecutedMoves.Clear(); SpeedBoost_AbleToSpeedBoostThisTurn = false; if (Id != byte.MaxValue) { SetStats(); } }
public bool CanFlinchFrom(PBEPokemon other) { return(!Status2.HasFlag(PBEStatus2.Flinching) && !(Ability == PBEAbility.InnerFocus && !other.HasCancellingAbility())); }
public bool CanBecomeInfatuatedWith(PBEPokemon other) { return(!Status2.HasFlag(PBEStatus2.Infatuated) && ((Gender == PBEGender.Male && other.Gender == PBEGender.Female) || (Gender == PBEGender.Female && other.Gender == PBEGender.Male)) && !(Ability == PBEAbility.Oblivious && !other.HasCancellingAbility())); }
public bool CanBecomeConfusedBy(PBEPokemon other) { return(!Status2.HasFlag(PBEStatus2.Confused) && !(Ability == PBEAbility.OwnTempo && !other.HasCancellingAbility())); }
// Will only be accurate for the host public override string ToString() { var sb = new StringBuilder(); sb.AppendLine($"{Nickname}/{Species} {GenderSymbol} Lv.{Level}"); sb.AppendLine($"HP: {HP}/{MaxHP} ({HPPercentage:P2})"); sb.AppendLine($"Types: {PBELocalizedString.GetTypeName(Type1).English}/{PBELocalizedString.GetTypeName(Type2).English}"); sb.AppendLine($"Position: {Team.TrainerName}'s {FieldPosition}"); sb.AppendLine($"Status1: {Status1}"); if (Status1 == PBEStatus1.Asleep) { sb.AppendLine($"Sleep turns: {Status1Counter}/{SleepTurns}"); } else if (Status1 == PBEStatus1.BadlyPoisoned) { sb.AppendLine($"Toxic Counter: {Status1Counter}"); } sb.AppendLine($"Status2: {Status2}"); if (Status2.HasFlag(PBEStatus2.Confused)) { sb.AppendLine($"Confusion turns: {ConfusionCounter}/{ConfusionTurns}"); } if (Status2.HasFlag(PBEStatus2.Disguised)) { sb.AppendLine($"Disguised as: {DisguisedAsPokemon.Nickname}"); } if (Status2.HasFlag(PBEStatus2.Infatuated)) { sb.AppendLine($"Infatuated with: {InfatuatedWithPokemon.Nickname}"); } if (Status2.HasFlag(PBEStatus2.LeechSeed)) { sb.AppendLine($"Seeded position: {SeededTeam.TrainerName}'s {SeededPosition}"); } if (Status2.HasFlag(PBEStatus2.Substitute)) { sb.AppendLine($"Substitute HP: {SubstituteHP}"); } sb.AppendLine($"Stats: [A] {Attack}, [D] {Defense}, [SA] {SpAttack}, [SD] {SpDefense}, [S] {Speed}, [W] {Weight:0.0}"); PBEStat[] statChanges = GetChangedStats(); if (statChanges.Length > 0) { var statStrs = new List <string>(7); if (Array.IndexOf(statChanges, PBEStat.Attack) != -1) { statStrs.Add($"[A] x{PBEBattle.GetStatChangeModifier(AttackChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.Defense) != -1) { statStrs.Add($"[D] x{PBEBattle.GetStatChangeModifier(DefenseChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.SpAttack) != -1) { statStrs.Add($"[SA] x{PBEBattle.GetStatChangeModifier(SpAttackChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.SpDefense) != -1) { statStrs.Add($"[SD] x{PBEBattle.GetStatChangeModifier(SpDefenseChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.Speed) != -1) { statStrs.Add($"[S] x{PBEBattle.GetStatChangeModifier(SpeedChange, false):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.Accuracy) != -1) { statStrs.Add($"[AC] x{PBEBattle.GetStatChangeModifier(AccuracyChange, true):0.00}"); } if (Array.IndexOf(statChanges, PBEStat.Evasion) != -1) { statStrs.Add($"[E] x{PBEBattle.GetStatChangeModifier(EvasionChange, true):0.00}"); } sb.AppendLine($"Stat changes: {string.Join(", ", statStrs)}"); } sb.AppendLine($"Ability: {PBELocalizedString.GetAbilityName(Ability).English}"); sb.AppendLine($"Known ability: {(KnownAbility == PBEAbility.MAX ? "???" : PBELocalizedString.GetAbilityName(KnownAbility).English)}"); sb.AppendLine($"Item: {PBELocalizedString.GetItemName(Item).English}"); sb.AppendLine($"Known item: {(KnownItem == (PBEItem)ushort.MaxValue ? "???" : PBELocalizedString.GetItemName(KnownItem).English)}"); if (Array.IndexOf(Moves, PBEMove.Frustration) != -1 || Array.IndexOf(Moves, PBEMove.Return) != -1) { sb.AppendLine($"Friendship: {Friendship} ({Friendship / (double)byte.MaxValue:P2})"); } if (Array.IndexOf(Moves, PBEMove.HiddenPower) != -1) { sb.AppendLine($"{PBELocalizedString.GetMoveName(PBEMove.HiddenPower).English}: {PBELocalizedString.GetTypeName(IndividualValues.HiddenPowerType).English}/{IndividualValues.HiddenPowerBasePower}"); } string[] moveStrs = new string[Moves.Length]; for (int i = 0; i < moveStrs.Length; i++) { moveStrs[i] = $"{PBELocalizedString.GetMoveName(Moves[i]).English} {PP[i]}/{MaxPP[i]}"; } sb.AppendLine($"Moves: {string.Join(", ", moveStrs)}"); sb.AppendLine($"Usable moves: {string.Join(", ", GetUsableMoves().Select(m => PBELocalizedString.GetMoveName(m).English))}"); sb.Append($"Known moves: {string.Join(", ", KnownMoves.Select(m => m == PBEMove.MAX ? "???" : PBELocalizedString.GetMoveName(m).English))}"); return(sb.ToString()); }