Add wr7->pkm

Not sure if one of the 'level' fields is a move ID instead. Pound=1,
Level=1
Maybe a Chansey record would shed more light.
This commit is contained in:
Kurt 2018-12-29 23:33:36 -08:00
parent 78ff441e8b
commit e7531dca30
3 changed files with 24 additions and 6 deletions

View file

@ -38,6 +38,8 @@ namespace PKHeX.Core
case WC6.SizeFull when ext == ".wc6full": case WC6.SizeFull when ext == ".wc6full":
case WC6.Size when ext == ".wc6": case WC6.Size when ext == ".wc6":
return new WC6(data); return new WC6(data);
case WR7.Size when ext == ".wr7":
return new WR7(data);
case PGF.Size when ext == ".pgf": case PGF.Size when ext == ".pgf":
return new PGF(data); return new PGF(data);
@ -69,6 +71,7 @@ namespace PKHeX.Core
if (BitConverter.ToUInt32(data, 0x4C) / 10000 < 2000) if (BitConverter.ToUInt32(data, 0x4C) / 10000 < 2000)
return new WC7(data); return new WC7(data);
return new WC6(data); return new WC6(data);
case WR7.Size: return new WR7(data);
case PGF.Size: return new PGF(data); case PGF.Size: return new PGF(data);
case PGT.Size: return new PGT(data); case PGT.Size: return new PGT(data);

View file

@ -13,14 +13,14 @@ namespace PKHeX.Core
private const int RecordMax = 10; // 0xE90 > (0x140 * 0xA = 0xC80), not sure what final 0x210 bytes are used for private const int RecordMax = 10; // 0xE90 > (0x140 * 0xA = 0xC80), not sure what final 0x210 bytes are used for
private const int FlagCountMax = 0x1C00; // (7168) end of the block? private const int FlagCountMax = 0x1C00; // (7168) end of the block?
private int FlagStart => Offset + (RecordMax * WR7.SIZE); private int FlagStart => Offset + (RecordMax * WR7.Size);
private int GetRecordOffset(int index) private int GetRecordOffset(int index)
{ {
if (index >= RecordMax) if (index >= RecordMax)
throw new ArgumentException(nameof(index)); throw new ArgumentException(nameof(index));
return Offset + (index * WR7.SIZE); return Offset + (index * WR7.Size);
} }
private int GetFlagOffset(int flag) private int GetFlagOffset(int flag)
@ -33,8 +33,8 @@ namespace PKHeX.Core
public WR7 GetRecord(int index) public WR7 GetRecord(int index)
{ {
int ofs = GetRecordOffset(index); int ofs = GetRecordOffset(index);
byte[] data = new byte[WR7.SIZE]; byte[] data = new byte[WR7.Size];
Array.Copy(Data, ofs, data, 0, WR7.SIZE); Array.Copy(Data, ofs, data, 0, WR7.Size);
return new WR7(data); return new WR7(data);
} }

View file

@ -6,7 +6,7 @@ namespace PKHeX.Core
{ {
public class WR7 : MysteryGift public class WR7 : MysteryGift
{ {
public const int SIZE = 0x140; public const int Size = 0x140;
public WR7(byte[] data) => Data = data; public WR7(byte[] data) => Data = data;
@ -88,7 +88,6 @@ namespace PKHeX.Core
// Mystery Gift implementation // Mystery Gift implementation
public override int Format => 7; public override int Format => 7;
public override PKM ConvertToPKM(ITrainerInfo SAV, EncounterCriteria criteria) => throw new Exception("Non-convertible format.");
protected override bool IsMatchExact(PKM pkm, IEnumerable<DexLevel> vs) => false; protected override bool IsMatchExact(PKM pkm, IEnumerable<DexLevel> vs) => false;
protected override bool IsMatchDeferred(PKM pkm) => false; protected override bool IsMatchDeferred(PKM pkm) => false;
public override int Location { get; set; } public override int Location { get; set; }
@ -116,5 +115,21 @@ namespace PKHeX.Core
GiftType = WR7GiftType.Pokemon; GiftType = WR7GiftType.Pokemon;
} }
} }
public override PKM ConvertToPKM(ITrainerInfo SAV, EncounterCriteria criteria)
{
if (!IsPokémon)
return null;
var pk = new PB7();
SAV.ApplyToPKM(pk);
if (!GameVersion.GG.Contains((GameVersion) SAV.Game))
pk.Version = (int) GameVersion.GP;
pk.Species = Species;
pk.Met_Level = pk.CurrentLevel = Level;
return pk; // can't really do much more
}
} }
} }