internal PkmnPosition GetStuff(PBEBattlePokemon pkmn, PBEFieldPosition position)
        {
            int i;

            switch (Battle.BattleFormat)
            {
            case PBEBattleFormat.Single:
            {
                i = 0;
                break;
            }

            case PBEBattleFormat.Double:
            {
                i = position == PBEFieldPosition.Left ? 0 : 1;
                break;
            }

            case PBEBattleFormat.Triple:
            case PBEBattleFormat.Rotation:
            {
                i = position == PBEFieldPosition.Left ? 0 : position == PBEFieldPosition.Center ? 1 : 2;
                break;
            }

            default: throw new Exception();
            }
            return(_positions[pkmn.Team.Id][i]);
        }
 public PBEPkmnSwitchInPacket_Hidden(PBEPkmnSwitchInPacket other)
 {
     if (other == null)
     {
         throw new ArgumentNullException(nameof(other));
     }
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write((Trainer = other.Trainer).Id);
             var switchIns = new PBESwitchInInfo[other.SwitchIns.Count];
             for (int i = 0; i < switchIns.Length; i++)
             {
                 switchIns[i] = new PBESwitchInInfo(other.SwitchIns[i]);
             }
             byte count = (byte)(SwitchIns = new ReadOnlyCollection <PBESwitchInInfo>(switchIns)).Count;
             w.Write(count);
             for (int i = 0; i < count; i++)
             {
                 SwitchIns[i].ToBytes(w);
             }
             w.Write(Forced = other.Forced);
             if (Forced)
             {
                 w.Write((ForcedByPokemonTrainer = other.ForcedByPokemonTrainer).Id);
                 w.Write(ForcedByPokemon = other.ForcedByPokemon);
             }
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
        internal static void VerifyPosition(PBEBattleFormat format, PBEFieldPosition pos)
        {
            if (pos != PBEFieldPosition.None && pos < PBEFieldPosition.MAX)
            {
                switch (format)
                {
                case PBEBattleFormat.Single:
                case PBEBattleFormat.Rotation:
                {
                    switch (pos)
                    {
                    case PBEFieldPosition.Center: return;
                    }
                    break;
                }

                case PBEBattleFormat.Double:
                {
                    switch (pos)
                    {
                    case PBEFieldPosition.Left:
                    case PBEFieldPosition.Right: return;
                    }
                    break;
                }

                case PBEBattleFormat.Triple:
                {
                    return;
                }
                }
            }
            throw new ArgumentOutOfRangeException(nameof(pos));
        }
Example #4
0
 public void TryAddPokemonToCollection(PBEFieldPosition pos, ICollection <PBEBattlePokemon> list)
 {
     if (TryGetPokemon(pos, out PBEBattlePokemon? pkmn))
     {
         list.Add(pkmn);
     }
 }
 internal PBEWeatherDamagePacket(byte[] data, EndianBinaryReader r, PBEBattle battle)
 {
     Data                = new ReadOnlyCollection <byte>(data);
     Weather             = r.ReadEnum <PBEWeather>();
     DamageVictimTrainer = battle.Trainers[r.ReadByte()];
     DamageVictim        = r.ReadEnum <PBEFieldPosition>();
 }
Example #6
0
        private void SelectForBattleReplacement(PBEBattlePokemon pkmn, PBEFieldPosition pos)
        {
            CloseChoices();
            BattleGUI.Instance.Switches.Add(new PBESwitchIn(pkmn, pos));
            BattleGUI.Instance.StandBy.Add(pkmn);
            BattleGUI.Instance.PositionStandBy.Add(pos);
            if (--BattleGUI.Instance.SwitchesRequired == 0)
            {
                _message = null;
                ClosePartyMenu();
                return;
            }

            SetBattleReplacementMessage();
            // Update standby color of the one we chose
            for (int i = 0; i < _members.Count; i++)
            {
                if (_battleParty.Party.BattleParty[i] == pkmn)
                {
                    _members[i].UpdateColorAndRedraw();
                    break;
                }
            }
            Game.Instance.SetCallback(CB_LogicTick);
        }
 internal PBEPkmnFaintedPacket(byte[] data, EndianBinaryReader r, PBEBattle battle)
 {
     Data           = new ReadOnlyCollection <byte>(data);
     PokemonTrainer = battle.Trainers[r.ReadByte()];
     Pokemon        = r.ReadByte();
     OldPosition    = r.ReadEnum <PBEFieldPosition>();
 }
        public static int GetFieldPositionIndex(this PBETrainer trainer, PBEFieldPosition position)
        {
            if (!trainer.OwnsSpot(position))
            {
                throw new ArgumentOutOfRangeException(nameof(position));
            }
            PBEBattleFormat battleFormat = trainer.Battle.BattleFormat;
            int             index        = trainer.Team.Trainers.IndexOf(trainer);

            switch (battleFormat)
            {
            case PBEBattleFormat.Single:
            {
                switch (position)
                {
                case PBEFieldPosition.Center: return(0);
                }
                break;
            }

            case PBEBattleFormat.Double:
            {
                switch (position)
                {
                case PBEFieldPosition.Left: return(0);

                case PBEFieldPosition.Right: return(index == 1 ? 0 : 1);
                }
                break;
            }

            case PBEBattleFormat.Triple:
            {
                switch (position)
                {
                case PBEFieldPosition.Left: return(0);

                case PBEFieldPosition.Center: return(index == 1 ? 0 : 1);

                case PBEFieldPosition.Right: return(index == 2 ? 0 : 2);
                }
                break;
            }

            case PBEBattleFormat.Rotation:
            {
                switch (position)
                {
                case PBEFieldPosition.Center: return(0);

                case PBEFieldPosition.Left: return(1);

                case PBEFieldPosition.Right: return(2);
                }
                break;
            }
            }
            throw new Exception();
        }
 internal PBETeamStatusPacket(byte[] data, EndianBinaryReader r, PBEBattle battle)
 {
     Data             = new ReadOnlyCollection <byte>(data);
     Team             = battle.Teams[r.ReadByte()];
     TeamStatus       = r.ReadEnum <PBETeamStatus>();
     TeamStatusAction = r.ReadEnum <PBETeamStatusAction>();
     DamageVictim     = r.ReadEnum <PBEFieldPosition>();
 }
Example #10
0
 public void Push(PBEBattlePokemon pkmn, PBEFieldPosition pos)
 {
     _switches[_index]        = new PBESwitchIn(pkmn, pos);
     _standBy[_index]         = pkmn;
     _positionStandBy[_index] = pos;
     _index++;
     SwitchesLoop();
 }
 internal PBETeamStatusPacket(ReadOnlyCollection <byte> buffer, BinaryReader r, PBEBattle battle)
 {
     Buffer           = buffer;
     Team             = battle.Teams[r.ReadByte()];
     TeamStatus       = (PBETeamStatus)r.ReadByte();
     TeamStatusAction = (PBETeamStatusAction)r.ReadByte();
     DamageVictim     = (PBEFieldPosition)r.ReadByte();
 }
Example #12
0
 internal PBEAutoCenterPacket_Hidden01(byte[] data, EndianBinaryReader r, PBEBattle battle)
 {
     Data                = new ReadOnlyCollection <byte>(data);
     Pokemon0Trainer     = battle.Trainers[r.ReadByte()];
     Pokemon0OldPosition = r.ReadEnum <PBEFieldPosition>();
     Pokemon1Trainer     = battle.Trainers[r.ReadByte()];
     Pokemon1OldPosition = r.ReadEnum <PBEFieldPosition>();
 }
Example #13
0
 /// <summary>Gets a specific active <see cref="PBEPokemon"/> by its <see cref="PBEPokemon.FieldPosition"/>.</summary>
 /// <param name="pos">The <see cref="PBEFieldPosition"/> of the <see cref="PBEPokemon"/>.</param>
 public PBEPokemon TryGetPokemon(PBEFieldPosition pos)
 {
     if (IsDisposed)
     {
         throw new ObjectDisposedException(null);
     }
     return(ActiveBattlers.SingleOrDefault(p => p.FieldPosition == pos));
 }
 internal PBEReflectTypePacket_Hidden(byte[] data, EndianBinaryReader r, PBEBattle battle)
 {
     Data          = new ReadOnlyCollection <byte>(data);
     UserTrainer   = battle.Trainers[r.ReadByte()];
     User          = r.ReadEnum <PBEFieldPosition>();
     TargetTrainer = battle.Trainers[r.ReadByte()];
     Target        = r.ReadEnum <PBEFieldPosition>();
 }
 internal static PokemonInfo?From(BattleClient client, PBETeam team, PBEFieldPosition pos)
 {
     if (!team.TryGetPokemon(pos, out PBEBattlePokemon? pkmn))
     {
         return(null);
     }
     return(new PokemonInfo(pkmn, client.ShouldUseKnownInfo(pkmn.Trainer)));
 }
        private void HidePokemon(PBEBattlePokemon pkmn, PBEFieldPosition oldPosition)
        {
            PkmnPosition  pos = GetStuff(pkmn, oldPosition);
            AnimatedImage img = pos.SPkmn.AnimImage;

            pos.InfoVisible = false;
            pos.PkmnVisible = false;
            img.IsPaused    = true;
        }
        public PBEPkmnFaintedPacket(byte pokemonId, PBEFieldPosition pokemonPosition, PBETeam pokemonTeam)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add(PokemonId = pokemonId);
            bytes.Add((byte)(PokemonPosition = pokemonPosition));
            bytes.Add((PokemonTeam = pokemonTeam).Id);
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
 public PBETeamStatusPacket(byte[] buffer, PBEBattle battle)
 {
     using (var r = new BinaryReader(new MemoryStream(buffer)))
     {
         r.ReadInt16(); // Skip Code
         Team             = battle.Teams[r.ReadByte()];
         TeamStatus       = (PBETeamStatus)r.ReadByte();
         TeamStatusAction = (PBETeamStatusAction)r.ReadByte();
         DamageVictim     = (PBEFieldPosition)r.ReadByte();
     }
 }
        internal PBEPkmnFaintedPacket(byte pokemonId, PBEFieldPosition pokemonPosition, PBETeam pokemonTeam)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add(PokemonId = pokemonId);
            bytes.Add((byte)(PokemonPosition = pokemonPosition));
            bytes.Add((PokemonTeam = pokemonTeam).Id);
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
 internal PBEMoveCritPacket(PBEBattlePokemon victim)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write((VictimTrainer = victim.Trainer).Id);
             w.Write(Victim = victim.FieldPosition);
             Data           = new ReadOnlyCollection <byte>(ms.GetBuffer());
         }
 }
        public PBEPkmnSwitchOutPacket(byte pokemonId, PBEFieldPosition pokemonPosition, PBETeam pokemonTeam, bool forced)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add(PokemonId = pokemonId);
            bytes.Add((byte)(PokemonPosition = pokemonPosition));
            bytes.Add((PokemonTeam = pokemonTeam).Id);
            bytes.Add((byte)((Forced = forced) ? 1 : 0));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
Example #22
0
 public bool IsSpotOccupied(PBEFieldPosition pos)
 {
     foreach (PBEBattlePokemon p in ActiveBattlers)
     {
         if (p.FieldPosition == pos)
         {
             return(true);
         }
     }
     return(false);
 }
        private void MovePokemon(PBEBattlePokemon pkmn, PBEFieldPosition oldPosition)
        {
            PkmnPosition pos = GetStuff(pkmn, oldPosition);

            pos.InfoVisible = false;
            pos.PkmnVisible = false;
            pos             = GetStuff(pkmn, pkmn.FieldPosition);
            UpdatePokemon(pkmn, pos, true, true);
            pos.InfoVisible = true;
            pos.PkmnVisible = true;
        }
        }                                             // PBEFieldPosition.None means no victim

        public PBETeamStatusPacket(PBETeam team, PBETeamStatus teamStatus, PBETeamStatusAction teamStatusAction, PBEPokemon damageVictim)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((Team = team).Id);
            bytes.Add((byte)(TeamStatus = teamStatus));
            bytes.Add((byte)(TeamStatusAction = teamStatusAction));
            bytes.Add((byte)(DamageVictim = damageVictim == null ? PBEFieldPosition.None : damageVictim.FieldPosition));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
Example #25
0
 internal PBEFleeFailedPacket(PBEBattlePokemon pokemon)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write((PokemonTrainer = pokemon.Trainer).Id);
             w.Write(Pokemon = pokemon.FieldPosition);
             Data            = new ReadOnlyCollection <byte>(ms.GetBuffer());
         }
 }
Example #26
0
 public PBEPkmnFaintedPacket_Hidden(PBEPkmnFaintedPacket other)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write((PokemonTrainer = other.PokemonTrainer).Id);
             w.Write(OldPosition = other.OldPosition);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
Example #27
0
        internal PBEMovePPChangedPacket(PBEFieldPosition moveUser, PBETeam moveUserTeam, PBEMove move, int amountReduced)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(MoveUser = moveUser));
            bytes.Add((MoveUserTeam = moveUserTeam).Id);
            bytes.AddRange(BitConverter.GetBytes((ushort)(Move = move)));
            bytes.AddRange(BitConverter.GetBytes(AmountReduced = amountReduced));
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
 internal PBEPkmnSwitchOutPacket_Hidden(byte[] data, EndianBinaryReader r, PBEBattle battle)
 {
     Data           = new ReadOnlyCollection <byte>(data);
     PokemonTrainer = battle.Trainers[r.ReadByte()];
     OldPosition    = r.ReadEnum <PBEFieldPosition>();
     Forced         = r.ReadBoolean();
     if (Forced)
     {
         ForcedByPokemonTrainer = battle.Trainers[r.ReadByte()];
         ForcedByPokemon        = r.ReadEnum <PBEFieldPosition>();
     }
 }
 internal PBEWeatherDamagePacket(PBEWeather weather, PBEBattlePokemon damageVictim)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write(Weather = weather);
             w.Write((DamageVictimTrainer = damageVictim.Trainer).Id);
             w.Write(DamageVictim = damageVictim.FieldPosition);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
Example #30
0
 private PBEPkmnFaintedPacket(byte pokemonId, PBEFieldPosition pokemonPosition, PBETeam pokemonTeam)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write(PokemonId       = pokemonId);
             w.Write(PokemonPosition = pokemonPosition);
             w.Write((PokemonTeam = pokemonTeam).Id);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }