Unkludged BattleTowerPokemon Species/Form handling

This commit is contained in:
Megan Edwards 2023-12-20 23:53:32 -05:00
parent 868951497b
commit e669938e7a
5 changed files with 94 additions and 72 deletions

View File

@ -58,7 +58,7 @@ namespace PkmnFoundations.GTS
case 0:
record.Party[0] = factory.CreatePokemon(pokedex,
129, // Magikarp
129, 0, // Magikarp
3133, // Cheri
new ushort[] {
150, // Splash
@ -74,7 +74,7 @@ namespace PkmnFoundations.GTS
);
record.Party[1] = factory.CreatePokemon(pokedex,
223, // Remoraid
223, 0, // Remoraid
3134, // Chesto
new ushort[] {
60, // Psybeam
@ -90,7 +90,7 @@ namespace PkmnFoundations.GTS
);
record.Party[2] = factory.CreatePokemon(pokedex,
349, // Feebas
349, 0, // Feebas
3134, // Chesto
new ushort[] {
150, // Splash
@ -130,7 +130,7 @@ namespace PkmnFoundations.GTS
case 1:
record.Party[0] = factory.CreatePokemon(pokedex,
376, // Metagross
376, 0, // Metagross
268, // Expert belt
new ushort[] {
89, // EQ
@ -146,7 +146,7 @@ namespace PkmnFoundations.GTS
);
record.Party[1] = factory.CreatePokemon(pokedex,
282, // Gardevoir
282, 0, // Gardevoir
297, // Choice specs
new ushort[] {
94, // Psychic
@ -162,7 +162,7 @@ namespace PkmnFoundations.GTS
);
record.Party[2] = factory.CreatePokemon(pokedex,
134, // Vaporeon
134, 0, // Vaporeon
234, // Leftovers
new ushort[] {
57, // Surf
@ -202,7 +202,7 @@ namespace PkmnFoundations.GTS
case 2:
record.Party[0] = factory.CreatePokemon(pokedex,
392, // Infernape
392, 0, // Infernape
275, // Focus sash
new ushort[] {
252, // Fake out
@ -218,7 +218,7 @@ namespace PkmnFoundations.GTS
);
record.Party[1] = factory.CreatePokemon(pokedex,
235, // Smeargle
235, 0, // Smeargle
210, // Custap
new ushort[] {
147, // Spore
@ -234,7 +234,7 @@ namespace PkmnFoundations.GTS
);
record.Party[2] = factory.CreatePokemon(pokedex,
365, // Walrein
365, 0, // Walrein
217, // Quick claw
new ushort[] {
156, // Rest
@ -274,7 +274,7 @@ namespace PkmnFoundations.GTS
case 3:
record.Party[0] = factory.CreatePokemon(pokedex,
248, // Tyranitar
248, 0, // Tyranitar
189, // Chople
new ushort[] {
446, // Stealth rock
@ -290,7 +290,7 @@ namespace PkmnFoundations.GTS
);
record.Party[1] = factory.CreatePokemon(pokedex,
212, // Scizor
212, 0, // Scizor
270, // Life orb
new ushort[] {
418, // Bullet punch
@ -306,7 +306,7 @@ namespace PkmnFoundations.GTS
);
record.Party[2] = factory.CreatePokemon(pokedex,
485, // Heatran
485, 0, // Heatran
234, // Leftovers
new ushort[] {
436, // Lava plume
@ -347,7 +347,7 @@ namespace PkmnFoundations.GTS
case 4:
record.Party[0] = factory.CreatePokemon(pokedex,
460, // Abomasnow
460, 0, // Abomasnow
287, // Scarf
new ushort[] {
59, // Blizzard
@ -365,7 +365,7 @@ namespace PkmnFoundations.GTS
);
record.Party[1] = factory.CreatePokemon(pokedex,
471, // Glaceon
471, 0, // Glaceon
246, // Nevermeltice
new ushort[] {
59, // Blizzard
@ -381,7 +381,7 @@ namespace PkmnFoundations.GTS
);
record.Party[2] = factory.CreatePokemon(pokedex,
461, // Weavile
461, 0, // Weavile
275, // Focus sash
new ushort[] {
14, // Swords dance
@ -421,7 +421,7 @@ namespace PkmnFoundations.GTS
case 5:
record.Party[0] = factory.CreatePokemon(pokedex,
437, // Bronzong
437, 0, // Bronzong
234, // Leftovers
new ushort[] {
433, // Trick room
@ -437,7 +437,7 @@ namespace PkmnFoundations.GTS
);
record.Party[1] = factory.CreatePokemon(pokedex,
464, // Rhyperior
464, 0, // Rhyperior
270, // Life orb
new ushort[] {
89, // EQ
@ -453,7 +453,7 @@ namespace PkmnFoundations.GTS
);
record.Party[2] = factory.CreatePokemon(pokedex,
462, // Magnezone
462, 0, // Magnezone
268, // Expert belt
new ushort[] {
237, // Hidden power
@ -493,7 +493,7 @@ namespace PkmnFoundations.GTS
case 6:
record.Party[0] = factory.CreatePokemon(pokedex,
65, // Alakazam
65, 0, // Alakazam
275, // Focus sash
new ushort[] {
269, // Taunt
@ -509,7 +509,7 @@ namespace PkmnFoundations.GTS
);
record.Party[1] = factory.CreatePokemon(pokedex,
445, // Garchomp
445, 0, // Garchomp
270, // Life orb
new ushort[] {
14, // Swords dance
@ -525,7 +525,7 @@ namespace PkmnFoundations.GTS
);
record.Party[2] = factory.CreatePokemon(pokedex,
242, // Blissey
242, 0, // Blissey
234, // Leftovers
new ushort[] {
135, // Softboiled
@ -565,7 +565,7 @@ namespace PkmnFoundations.GTS
case 7:
record.Party[0] = factory.CreatePokemon(pokedex,
9, // Blastoise
9, 0, // Blastoise
234, // Leftovers
new ushort[] {
57, // Surf
@ -581,7 +581,7 @@ namespace PkmnFoundations.GTS
);
record.Party[1] = factory.CreatePokemon(pokedex,
389, // Torterra
389, 0, // Torterra
287, // Choice scarf
new ushort[] {
452, // Wood hammer
@ -597,7 +597,7 @@ namespace PkmnFoundations.GTS
);
record.Party[2] = factory.CreatePokemon(pokedex,
324, // Torkoal
324, 0, // Torkoal
217, // Quick claw
new ushort[] {
133, // Amnesia
@ -644,7 +644,8 @@ namespace PkmnFoundations.GTS
{
public abstract BattleTowerRecordBase CreateRecord(Pokedex.Pokedex pokedex);
public abstract BattleTowerPokemonBase CreatePokemon(Pokedex.Pokedex pokedex, ushort species, ushort held_item, ushort[] moveset,
public abstract BattleTowerPokemonBase CreatePokemon(Pokedex.Pokedex pokedex,
ushort species, byte form, ushort held_item, ushort[] moveset,
uint ot, uint personality, uint ivs, byte[] evs, byte pp_ups,
Languages language, byte ability, byte happiness, string nickname);
@ -668,13 +669,13 @@ namespace PkmnFoundations.GTS
}
public override BattleTowerPokemonBase CreatePokemon(Pokedex.Pokedex pokedex,
ushort species, ushort held_item, ushort[] moveset, uint ot,
ushort species, byte form, ushort held_item, ushort[] moveset, uint ot,
uint personality, uint ivs, byte[] evs, byte pp_ups,
Languages language, byte ability, byte happiness,
string nickname)
{
return new BattleTowerPokemon4(pokedex,
species,
species, form,
held_item,
moveset,
ot, personality,
@ -724,13 +725,13 @@ namespace PkmnFoundations.GTS
}
public override BattleTowerPokemonBase CreatePokemon(Pokedex.Pokedex pokedex,
ushort species, ushort held_item, ushort[] moveset, uint ot,
ushort species, byte form, ushort held_item, ushort[] moveset, uint ot,
uint personality, uint ivs, byte[] evs, byte pp_ups,
Languages language, byte ability, byte happiness,
string nickname)
{
return new BattleSubwayPokemon5(pokedex,
species,
species, form,
held_item,
moveset,
ot, personality,

View File

@ -730,9 +730,9 @@ namespace PkmnFoundations.Data
_params.Add(new MySqlParameter("@slot", slot));
tran.ExecuteNonQuery("INSERT INTO GtsBattleTowerPokemon4 " +
"(party_id, Slot, Species, HeldItem, Move1, Move2, Move3, Move4, TrainerID, " +
"(party_id, Slot, Species, Form, HeldItem, Move1, Move2, Move3, Move4, TrainerID, " +
"Personality, IVs, EVs, Unknown1, Language, Ability, Happiness, Nickname) VALUES " +
"(@id, @slot, @species, @held_item, @move1, @move2, @move3, @move4, @trainer_id, " +
"(@id, @slot, @species, @form, @held_item, @move1, @move2, @move3, @move4, @trainer_id, " +
"@personality, @ivs, @evs, @unknown1, @language, @ability, @happiness, @nickname)",
_params.ToArray());
}
@ -744,10 +744,11 @@ namespace PkmnFoundations.Data
_params.Add(new MySqlParameter("@slot", slot));
tran.ExecuteNonQuery("UPDATE GtsBattleTowerPokemon4 SET Species = @species, " +
"HeldItem = @held_item, Move1 = @move1, Move2 = @move2, Move3 = @move3, " +
"Move4 = @move4, TrainerID = @trainer_id, Personality = @personality, " +
"IVs = @ivs, EVs = @evs, Unknown1 = @unknown1, Language = @language, " +
"Ability = @ability, Happiness = @happiness, Nickname = @nickname " +
"Form = @form, HeldItem = @held_item, Move1 = @move1, Move2 = @move2, " +
"Move3 = @move3, Move4 = @move4, TrainerID = @trainer_id, " +
"Personality = @personality, IVs = @ivs, EVs = @evs, Unknown1 = @unknown1, " +
"Language = @language, Ability = @ability, Happiness = @happiness, " +
"Nickname = @nickname " +
"WHERE party_id = @id AND Slot = @slot",
_params.ToArray());
}
@ -783,7 +784,8 @@ namespace PkmnFoundations.Data
private List<MySqlParameter> ParamsFromBattleTowerPokemon4(BattleTowerPokemon4 pokemon)
{
List<MySqlParameter> result = new List<MySqlParameter>(15);
result.Add(new MySqlParameter("@species", pokemon.SpeciesFormValue));
result.Add(new MySqlParameter("@species", pokemon.SpeciesID));
result.Add(new MySqlParameter("@form", pokemon.FormID));
result.Add(new MySqlParameter("@held_item", pokemon.HeldItemID));
result.Add(new MySqlParameter("@move1", (ushort)pokemon.Moves[0].MoveID));
result.Add(new MySqlParameter("@move2", (ushort)pokemon.Moves[1].MoveID));
@ -921,7 +923,7 @@ namespace PkmnFoundations.Data
string inClause = String.Join(", ", keys.Select(i => i.ToString()).ToArray());
using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader("SELECT party_id, " +
"Slot, Species, HeldItem, Move1, Move2, Move3, Move4, " +
"Slot, Species, Form, HeldItem, Move1, Move2, Move3, Move4, " +
"TrainerID, Personality, IVs, EVs, Unknown1, Language, " +
"Ability, Happiness, Nickname FROM GtsBattleTowerPokemon4 " +
"WHERE party_id IN (" + inClause + ")"))
@ -971,8 +973,12 @@ namespace PkmnFoundations.Data
private BattleTowerPokemon4 BattleTowerPokemon4FromReader(MySqlDataReader reader, Pokedex.Pokedex pokedex)
{
ushort? speciesId = DatabaseExtender.Cast<ushort?>(reader["Species"]);
ushort? formId = DatabaseExtender.Cast<ushort?>(reader["Form"]);
return new BattleTowerPokemon4(pokedex,
DatabaseExtender.Cast<ushort>(reader["Species"]),
(int)speciesId,
(byte)formId,
DatabaseExtender.Cast<ushort>(reader["HeldItem"]),
DatabaseExtender.Cast<ushort>(reader["Move1"]),
DatabaseExtender.Cast<ushort>(reader["Move2"]),
@ -1954,10 +1960,10 @@ namespace PkmnFoundations.Data
_params.Add(new MySqlParameter("@slot", slot));
tran.ExecuteNonQuery("INSERT INTO GtsBattleSubwayPokemon5 " +
"(party_id, Slot, Species, HeldItem, Move1, Move2, Move3, Move4, TrainerID, " +
"(party_id, Slot, Species, Form, HeldItem, Move1, Move2, Move3, Move4, TrainerID, " +
"Personality, IVs, EVs, Unknown1, Language, Ability, Happiness, " +
"Nickname, Unknown2) VALUES " +
"(@id, @slot, @species, @held_item, @move1, @move2, @move3, @move4, @trainer_id, " +
"(@id, @slot, @species, @form, @held_item, @move1, @move2, @move3, @move4, @trainer_id, " +
"@personality, @ivs, @evs, @unknown1, @language, @ability, @happiness, " +
"@nickname, @unknown2)",
_params.ToArray());
@ -1970,11 +1976,11 @@ namespace PkmnFoundations.Data
_params.Add(new MySqlParameter("@slot", slot));
tran.ExecuteNonQuery("UPDATE GtsBattleSubwayPokemon5 SET Species = @species, " +
"HeldItem = @held_item, Move1 = @move1, Move2 = @move2, Move3 = @move3, " +
"Move4 = @move4, TrainerID = @trainer_id, Personality = @personality, " +
"IVs = @ivs, EVs = @evs, Unknown1 = @unknown1, Language = @language, " +
"Ability = @ability, Happiness = @happiness, Nickname = @nickname, " +
"Unknown2 = @unknown2 " +
"Form = @form, HeldItem = @held_item, Move1 = @move1, Move2 = @move2, " +
"Move3 = @move3, Move4 = @move4, TrainerID = @trainer_id, " +
"Personality = @personality, IVs = @ivs, EVs = @evs, Unknown1 = @unknown1, " +
"Language = @language, Ability = @ability, Happiness = @happiness, " +
"Nickname = @nickname, Unknown2 = @unknown2 " +
"WHERE party_id = @id AND Slot = @slot",
_params.ToArray());
}
@ -2011,7 +2017,8 @@ namespace PkmnFoundations.Data
private List<MySqlParameter> ParamsFromBattleSubwayPokemon5(BattleSubwayPokemon5 pokemon)
{
List<MySqlParameter> result = new List<MySqlParameter>(15);
result.Add(new MySqlParameter("@species", pokemon.SpeciesFormValue));
result.Add(new MySqlParameter("@species", pokemon.SpeciesID));
result.Add(new MySqlParameter("@form", pokemon.FormID));
result.Add(new MySqlParameter("@held_item", pokemon.HeldItemID));
result.Add(new MySqlParameter("@move1", pokemon.Moves[0].MoveID));
result.Add(new MySqlParameter("@move2", pokemon.Moves[1].MoveID));
@ -2156,7 +2163,7 @@ namespace PkmnFoundations.Data
string inClause = String.Join(", ", keys.Select(i => i.ToString()).ToArray());
using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader("SELECT party_id, " +
"Slot, Species, HeldItem, Move1, Move2, Move3, Move4, " +
"Slot, Species, Form, HeldItem, Move1, Move2, Move3, Move4, " +
"TrainerID, Personality, IVs, EVs, Unknown1, Language, " +
"Ability, Happiness, Nickname, Unknown2 FROM GtsBattleSubwayPokemon5 " +
"WHERE party_id IN (" + inClause + ")"))
@ -2202,8 +2209,12 @@ namespace PkmnFoundations.Data
private BattleSubwayPokemon5 BattleSubwayPokemon5FromReader(MySqlDataReader reader, Pokedex.Pokedex pokedex)
{
ushort? speciesId = DatabaseExtender.Cast<ushort?>(reader["Species"]);
ushort? formId = DatabaseExtender.Cast<ushort?>(reader["Form"]);
return new BattleSubwayPokemon5(pokedex,
DatabaseExtender.Cast<ushort>(reader["Species"]),
(int)speciesId,
(byte)formId,
DatabaseExtender.Cast<ushort>(reader["HeldItem"]),
DatabaseExtender.Cast<ushort>(reader["Move1"]),
DatabaseExtender.Cast<ushort>(reader["Move2"]),

View File

@ -14,7 +14,7 @@ namespace PkmnFoundations.Wfc
{
}
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, ushort species_form, ushort held_item, ushort[] moveset,
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, int species, byte form, 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)
{
@ -25,7 +25,8 @@ namespace PkmnFoundations.Wfc
if (nickname == null) throw new ArgumentNullException("nickname");
if (nickname.Size != 22) throw new ArgumentException("nickname");
SpeciesFormValue = species_form;
SpeciesID = species;
FormID = form;
HeldItemID = held_item;
GetMovesFromArray(Moves, pokedex, moveset, pp_ups);
TrainerID = ot;
@ -40,11 +41,11 @@ namespace PkmnFoundations.Wfc
Unknown2 = unknown2;
}
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, ushort species_form, ushort held_item,
public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, int species, byte form, 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_form, held_item, new ushort[] { move1, move2, move3, move4 },
this(pokedex, species, form, held_item, new ushort[] { move1, move2, move3, move4 },
ot, personality, ivs, evs, pp_ups, language, ability, happiness, nickname, unknown2)
{
}
@ -84,7 +85,7 @@ namespace PkmnFoundations.Wfc
protected override void Save(BinaryWriter writer)
{
writer.Write(SpeciesFormValue);
writer.Write(CombineSpeciesForm(SpeciesID, FormID));
writer.Write((ushort)HeldItemID);
ushort[] moveset = GetArrayFromMoves(Moves);
@ -109,7 +110,9 @@ namespace PkmnFoundations.Wfc
protected override void Load(BinaryReader reader)
{
SpeciesFormValue = reader.ReadUInt16();
ushort species_form = reader.ReadUInt16();
SpeciesID = GetSpeciesFromCombined(species_form);
FormID = GetFormFromCombined(species_form);
HeldItemID = reader.ReadUInt16();
ushort[] moveset = new ushort[4];
@ -142,7 +145,7 @@ namespace PkmnFoundations.Wfc
byte ppUps = GetPpUpsFromMoves(Moves);
BattleSubwayPokemon5 result = new BattleSubwayPokemon5(m_pokedex,
SpeciesFormValue, (ushort)HeldItemID, moveset,
SpeciesID, FormID, (ushort)HeldItemID, moveset,
TrainerID, Personality, ivsField, EVs.ToArray(), ppUps,
Language, (byte)AbilityID, Happiness, NicknameEncoded, Unknown2);

View File

@ -14,7 +14,7 @@ namespace PkmnFoundations.Wfc
{
}
public BattleTowerPokemon4(Pokedex.Pokedex pokedex, ushort species_form, ushort held_item, ushort[] moveset,
public BattleTowerPokemon4(Pokedex.Pokedex pokedex, int species, byte form, ushort held_item, ushort[] moveset,
uint ot, uint personality, uint ivs, byte[] evs, byte pp_ups,
Languages language, byte ability, byte happiness, EncodedString4 nickname) : base(pokedex)
{
@ -25,7 +25,8 @@ namespace PkmnFoundations.Wfc
if (nickname == null) throw new ArgumentNullException("nickname");
if (nickname.Size != 22) throw new ArgumentException("nickname");
SpeciesFormValue = species_form;
SpeciesID = species;
FormID = form;
HeldItemID = held_item;
GetMovesFromArray(Moves, pokedex, moveset, pp_ups);
TrainerID = ot;
@ -39,11 +40,11 @@ namespace PkmnFoundations.Wfc
NicknameEncoded = nickname; // todo: clone
}
public BattleTowerPokemon4(Pokedex.Pokedex pokedex, ushort species_form, ushort held_item,
public BattleTowerPokemon4(Pokedex.Pokedex pokedex, int species, byte form, 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,
EncodedString4 nickname) :
this(pokedex, species_form, held_item, new ushort[] { move1, move2, move3, move4 },
this(pokedex, species, form, held_item, new ushort[] { move1, move2, move3, move4 },
ot, personality, ivs, evs, pp_ups, language, ability, happiness, nickname)
{
}
@ -81,7 +82,7 @@ namespace PkmnFoundations.Wfc
protected override void Save(BinaryWriter writer)
{
writer.Write(SpeciesFormValue);
writer.Write(CombineSpeciesForm(SpeciesID, FormID));
writer.Write((ushort)HeldItemID);
ushort[] moveset = GetArrayFromMoves(Moves);
@ -105,7 +106,9 @@ namespace PkmnFoundations.Wfc
protected override void Load(BinaryReader reader)
{
SpeciesFormValue = reader.ReadUInt16();
ushort species_form = reader.ReadUInt16();
SpeciesID = GetSpeciesFromCombined(species_form);
FormID = GetFormFromCombined(species_form);
HeldItemID = reader.ReadUInt16();
ushort[] moveset = new ushort[4];
@ -137,7 +140,7 @@ namespace PkmnFoundations.Wfc
byte ppUps = GetPpUpsFromMoves(Moves);
BattleTowerPokemon4 result = new BattleTowerPokemon4(m_pokedex,
SpeciesFormValue, (ushort)HeldItemID, moveset,
SpeciesID, FormID, (ushort)HeldItemID, moveset,
TrainerID, Personality, ivsField, EVs.ToArray(), ppUps,
Language, (byte)AbilityID, Happiness, NicknameEncoded);

View File

@ -35,17 +35,21 @@ namespace PkmnFoundations.Wfc
}
}
public ushort SpeciesFormValue
protected static ushort CombineSpeciesForm(int species, byte form)
{
get
{
return (ushort)(SpeciesID & 0x7ff | FormID << 11);
}
set
{
SpeciesID = value & 0x7ff;
FormID = (byte)(value >> 11);
}
if (species > 0x7ff || species < 0) throw new ArgumentOutOfRangeException("species");
if (form > 0x1f) throw new ArgumentOutOfRangeException("form");
return (ushort)(species & 0x7ff | form << 11);
}
protected static int GetSpeciesFromCombined(ushort combined)
{
return combined & 0x7ff;
}
protected static byte GetFormFromCombined(ushort combined)
{
return (byte)(combined >> 11);
}
internal static void GetMovesFromArray(IList<MoveSlot> result, Pokedex.Pokedex pokedex, ushort[] moves, byte ppUps)