/// <summary>Transforms into <paramref name="target"/> and sets <see cref="PBEStatus2.Transformed"/>.</summary> /// <param name="target">The Pokémon to transform into.</param> /// <remarks>Frees the Pokémon of its <see cref="ChoiceLockedMove"/>.</remarks> public void Transform(PBEPokemon target) { if (target == null) { throw new ArgumentNullException(nameof(target)); } if (Team != target.Team) { KnownAbility = target.KnownAbility = Ability = target.Ability; KnownType1 = target.KnownType1 = Type1 = target.Type1; KnownType2 = target.KnownType2 = Type2 = target.Type2; KnownWeight = target.KnownWeight = Weight = target.Weight; } else { Ability = target.Ability; KnownAbility = target.KnownAbility; Type1 = target.Type1; KnownType1 = target.KnownType1; Type2 = target.Type2; KnownType2 = target.KnownType2; Weight = target.Weight; KnownWeight = target.KnownWeight; } KnownGender = target.KnownGender = target.Gender; KnownShiny = target.KnownShiny = target.Shiny; KnownSpecies = target.KnownSpecies = Species = target.Species; Attack = target.Attack; Defense = target.Defense; SpAttack = target.SpAttack; SpDefense = target.SpDefense; Speed = target.Speed; AttackChange = target.AttackChange; DefenseChange = target.DefenseChange; SpAttackChange = target.SpAttackChange; SpDefenseChange = target.SpDefenseChange; SpeedChange = target.SpeedChange; AccuracyChange = target.AccuracyChange; EvasionChange = target.EvasionChange; TransformBackupMoves.Reset(Moves); PBEBattleMoveset.DoTransform(this, target); if (!Moves.Contains(ChoiceLockedMove)) { ChoiceLockedMove = PBEMove.None; } Status2 |= PBEStatus2.Transformed; }
/// <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(); } }