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)); }
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>(); }
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>(); }
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(); }
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>(); }
/// <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); }
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); }
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()); } }
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()); } }
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()); } }
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()); } }