mirror of
https://github.com/mm201/pkmn-classic-framework.git
synced 2026-08-02 16:13:17 -05:00
168 lines
5.8 KiB
C#
168 lines
5.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using PkmnFoundations.Support;
|
|
|
|
namespace PkmnFoundations.Structures
|
|
{
|
|
public class BattleSubwayPokemon5 : BattleTowerPokemonBase
|
|
{
|
|
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex) : base(pokedex)
|
|
{
|
|
}
|
|
|
|
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, ushort species, ushort held_item, ushort[] moveset,
|
|
uint ot, uint personality, uint ivs, byte[] evs, byte pp_ups,
|
|
Languages language, byte ability, byte happiness, EncodedString5 nickname, uint unknown2) : base(pokedex)
|
|
{
|
|
if (moveset == null) throw new ArgumentNullException("moveset");
|
|
if (moveset.Length != 4) throw new ArgumentException("moveset");
|
|
if (evs == null) throw new ArgumentNullException("evs");
|
|
if (evs.Length != 6) throw new ArgumentException("evs");
|
|
if (nickname == null) throw new ArgumentNullException("nickname");
|
|
if (nickname.Size != 22) throw new ArgumentException("nickname");
|
|
|
|
SpeciesID = species;
|
|
HeldItemID = held_item;
|
|
GetMovesFromArray(Moves, pokedex, moveset, pp_ups);
|
|
TrainerID = ot;
|
|
Personality = personality;
|
|
IVs = new IvStatValues((int)ivs & 0x3fffffff);
|
|
IvFlags = ivs & 0xc0000000u;
|
|
EVs = new ByteStatValues(evs);
|
|
Language = language;
|
|
AbilityID = ability;
|
|
Happiness = happiness;
|
|
NicknameEncoded = nickname; // todo: clone
|
|
Unknown2 = unknown2;
|
|
}
|
|
|
|
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, ushort species, ushort held_item,
|
|
ushort move1, ushort move2, ushort move3, ushort move4, uint ot, uint personality,
|
|
uint ivs, byte[] evs, byte pp_ups, Languages language, byte ability, byte happiness,
|
|
EncodedString5 nickname, uint unknown2) :
|
|
this(pokedex, species, held_item, new ushort[] { move1, move2, move3, move4 },
|
|
ot, personality, ivs, evs, pp_ups, language, ability, happiness, nickname, unknown2)
|
|
{
|
|
}
|
|
|
|
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, BinaryReader data) : base(pokedex)
|
|
{
|
|
Load(data);
|
|
}
|
|
|
|
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, byte[] data) : base(pokedex)
|
|
{
|
|
Load(data);
|
|
}
|
|
|
|
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, byte[] data, int offset) : base(pokedex)
|
|
{
|
|
Load(data, offset);
|
|
}
|
|
|
|
public EncodedString5 NicknameEncoded;
|
|
public uint Unknown2;
|
|
|
|
public override string Nickname
|
|
{
|
|
get
|
|
{
|
|
return (NicknameEncoded == null) ? null : NicknameEncoded.Text;
|
|
}
|
|
set
|
|
{
|
|
// xxx: This comes straight from Pokemon4. What we logically need here is an inheritance diamond.
|
|
if (Nickname == value) return;
|
|
if (NicknameEncoded == null) NicknameEncoded = new EncodedString5(value, 22);
|
|
else NicknameEncoded.Text = value;
|
|
}
|
|
}
|
|
|
|
protected override void Save(BinaryWriter writer)
|
|
{
|
|
writer.Write((ushort)SpeciesID);
|
|
writer.Write((ushort)HeldItemID);
|
|
|
|
ushort[] moveset = GetArrayFromMoves(Moves);
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
writer.Write(moveset[i]);
|
|
}
|
|
|
|
writer.Write(TrainerID);
|
|
writer.Write(Personality);
|
|
writer.Write(IVs.ToInt32() | (int)IvFlags);
|
|
writer.Write(EVs.ToArray(), 0, 6);
|
|
writer.Write(GetPpUpsFromMoves(Moves));
|
|
writer.Write((byte)Language);
|
|
writer.Write((byte)AbilityID);
|
|
writer.Write(Happiness);
|
|
writer.Write(NicknameEncoded.RawData, 0, 22);
|
|
writer.Write(Unknown2); // new to G5
|
|
|
|
writer.Flush();
|
|
}
|
|
|
|
protected override void Load(BinaryReader reader)
|
|
{
|
|
SpeciesID = reader.ReadUInt16();
|
|
HeldItemID = reader.ReadUInt16();
|
|
|
|
ushort[] moveset = new ushort[4];
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
moveset[i] = reader.ReadUInt16();
|
|
}
|
|
|
|
TrainerID = reader.ReadUInt32();
|
|
Personality = reader.ReadUInt32();
|
|
uint ivs = reader.ReadUInt32();
|
|
IVs = new IvStatValues((int)ivs & 0x3fffffff);
|
|
IvFlags = ivs & 0xc0000000u;
|
|
|
|
EVs = new ByteStatValues(reader.ReadBytes(6));
|
|
byte ppUps = reader.ReadByte();
|
|
GetMovesFromArray(Moves, m_pokedex, moveset, ppUps);
|
|
|
|
Language = (Languages)reader.ReadByte();
|
|
AbilityID = reader.ReadByte();
|
|
Happiness = reader.ReadByte();
|
|
NicknameEncoded = new EncodedString5(reader.ReadBytes(22));
|
|
Unknown2 = reader.ReadUInt32(); // new to G5
|
|
}
|
|
|
|
public BattleSubwayPokemon5 Clone()
|
|
{
|
|
uint ivsField = (uint)(IVs.ToInt32() & 0x3fffffffu) | (IvFlags & 0xc0000000u);
|
|
ushort[] moveset = GetArrayFromMoves(Moves);
|
|
byte ppUps = GetPpUpsFromMoves(Moves);
|
|
|
|
BattleSubwayPokemon5 result = new BattleSubwayPokemon5(m_pokedex,
|
|
(ushort)SpeciesID, (ushort)HeldItemID, moveset,
|
|
TrainerID, Personality, ivsField, EVs.ToArray(), ppUps,
|
|
Language, (byte)AbilityID, Happiness, NicknameEncoded, Unknown2);
|
|
|
|
return result;
|
|
}
|
|
|
|
public override Generations Generation
|
|
{
|
|
get
|
|
{
|
|
return Generations.Generation5;
|
|
}
|
|
}
|
|
|
|
public override int Size
|
|
{
|
|
get
|
|
{
|
|
return 60;
|
|
}
|
|
}
|
|
}
|
|
}
|