Generalize box wallpaper interaction

Move get/set logic into abstract class, only offset fetch is overridden
This commit is contained in:
Kaphotics 2016-10-29 11:32:21 -07:00
parent 5e54466816
commit ade97e0067
12 changed files with 67 additions and 39 deletions

View file

@ -403,10 +403,6 @@ namespace PKHeX
get { return Data[Japanese ? 0x2842 : 0x284C] & 0x7F; }
set { Data[Japanese ? 0x2842 : 0x284C] = (byte)((Data[Japanese ? 0x2842 : 0x284C] & 0x80) | (value & 0x7F)); }
}
public override int getBoxWallpaper(int box)
{
return 0;
}
public override string getBoxName(int box)
{
return $"BOX {box + 1}";

View file

@ -554,10 +554,6 @@ namespace PKHeX
get { return Data[CurrentBoxIndexOffset] & 0x7F; }
set { Data[CurrentBoxIndexOffset] = (byte)((Data[Japanese ? 0x2842 : 0x284C] & 0x80) | (value & 0x7F)); }
}
public override int getBoxWallpaper(int box)
{
return 0;
}
public override string getBoxName(int box)
{
return PKX.getG1Str(Data.Skip(BoxNamesOffset + box*9).Take(9).ToArray(), Japanese);

View file

@ -434,12 +434,11 @@ namespace PKHeX
get { return Data[Box]; }
set { Data[Box] = (byte)value; }
}
public override int getBoxWallpaper(int box)
protected override int getBoxWallpaperOffset(int box)
{
// Box Wallpaper is directly after the Box Names
int offset = getBoxOffset(BoxCount);
offset += BoxCount * 0x9 + box;
return Data[offset];
return offset;
}
public override string getBoxName(int box)
{

View file

@ -255,11 +255,6 @@ namespace PKHeX
{
return Box + (30 * SIZE_STORED + 0x14)*box + 0x14;
}
public override int CurrentBox { get { return 0; } set { } }
public override int getBoxWallpaper(int box)
{
return box;
}
public override string getBoxName(int box)
{
return PKX.getColoStr(Data, Box + 0x24A4*box, 8);

View file

@ -127,11 +127,11 @@ namespace PKHeX
get { return Data[Box + 4]*2; }
set { Data[Box + 4] = (byte)(value/2); }
}
public override int getBoxWallpaper(int box)
protected override int getBoxWallpaperOffset(int box)
{
// Box Wallpaper is directly after the Box Names
int offset = Box + 0x1ED19 + box/2;
return Data[offset];
return offset;
}
public override string getBoxName(int box)
{

View file

@ -229,11 +229,6 @@ namespace PKHeX
{
return Box + (30 * SIZE_STORED + 0x14)*box + 0x14;
}
public override int CurrentBox { get { return 0; } set { } }
public override int getBoxWallpaper(int box)
{
return box;
}
public override string getBoxName(int box)
{
return PKX.getColoStr(Data, Box + (30 * SIZE_STORED + 0x14)*box, 8);

View file

@ -571,13 +571,13 @@ namespace PKHeX
get { return Data[Version == GameVersion.HGSS ? getBoxOffset(BoxCount) : Box - 4]; }
set { Data[Version == GameVersion.HGSS ? getBoxOffset(BoxCount) : Box - 4] = (byte)value; }
}
public override int getBoxWallpaper(int box)
protected override int getBoxWallpaperOffset(int box)
{
// Box Wallpaper is directly after the Box Names
int offset = getBoxOffset(BoxCount);
if (Version == GameVersion.HGSS) offset += 0x18;
offset += BoxCount*0x28 + box;
return Data[offset];
return offset;
}
public override string getBoxName(int box)
{

View file

@ -126,8 +126,6 @@ namespace PKHeX
}
// Save file does not have Box Name / Wallpaper info
public override int CurrentBox { get { return 0; } set { } }
public override int getBoxWallpaper(int box) { return box; }
public override string getBoxName(int box) { return $"BOX {box + 1}"; }
public override void setBoxName(int box, string value) { }

View file

@ -450,9 +450,9 @@ namespace PKHeX
Encoding.Unicode.GetBytes(val.PadRight(0x14, '\0')).CopyTo(Data, PCLayout + 0x28 * box + 4);
Edited = true;
}
public override int getBoxWallpaper(int box)
protected override int getBoxWallpaperOffset(int box)
{
return Data[PCLayout + 0x3C4 + box];
return PCLayout + 0x3C4 + box;
}
public override int CurrentBox
{

View file

@ -651,10 +651,12 @@ namespace PKHeX
{
return Box + SIZE_STORED*box*30;
}
public override int getBoxWallpaper(int box)
protected override int getBoxWallpaperOffset(int box)
{
int ofs = PCBackgrounds > 0 && PCBackgrounds < Data.Length ? PCBackgrounds : 0;
return Data[ofs + box];
int ofs = PCBackgrounds > 0 && PCBackgrounds < Data.Length ? PCBackgrounds : -1;
if (ofs > -1)
return ofs + box;
return ofs;
}
public override string getBoxName(int box)
{
@ -773,6 +775,17 @@ namespace PKHeX
get { return Data[BattleBox + 6 * SIZE_STORED] != 0; }
set { Data[BattleBox + 6 * SIZE_STORED] = (byte)(value ? 1 : 0); }
}
public override int BoxesUnlocked { get { return Data[PCFlags + 1] - 1; } set { Data[PCFlags + 1] = (byte)(value + 1); } }
public override byte[] BoxFlags
{
get { return new[] { Data[PCFlags], Data[PCFlags + 2] }; }
set
{
if (value.Length != 2) return;
Data[PCFlags] = value[0];
Data[PCFlags + 2] = value[1];
}
}
// Mystery Gift
protected override bool[] MysteryGiftReceivedFlags
@ -847,7 +860,7 @@ namespace PKHeX
}
}
private WC6 getWC6(int index)
private MysteryGift getWC6(int index)
{
if (WondercardData < 0)
return null;

View file

@ -430,10 +430,19 @@ namespace PKHeX
{
return Box + SIZE_STORED*box*30;
}
public override int getBoxWallpaper(int box)
protected override int getBoxWallpaperOffset(int box)
{
int ofs = PCBackgrounds > 0 && PCBackgrounds < Data.Length ? PCBackgrounds : -1;
if (ofs > -1)
return ofs + box;
return ofs;
}
public override void setBoxWallpaper(int box, int value)
{
if (PCBackgrounds < 0)
return;
int ofs = PCBackgrounds > 0 && PCBackgrounds < Data.Length ? PCBackgrounds : 0;
return Data[ofs + box];
Data[ofs + box] = (byte)value;
}
public override string getBoxName(int box)
{
@ -575,7 +584,17 @@ namespace PKHeX
get { return Data[Party + 6 * SIZE_PARTY]; }
protected set { Data[Party + 6 * SIZE_PARTY] = (byte)value; }
}
public override int BoxesUnlocked { get { return -1; } set { Data[PCFlags + 1] = (byte)(value + 1); } }
public override byte[] BoxFlags {
get { return null; }
set
{
if (value.Length != 2) return;
Data[PCFlags] = value[0];
Data[PCFlags + 2] = value[1];
}
}
public override int DaycareSeedSize => 16;
public override int getDaycareSlotOffset(int loc, int slot)
{

View file

@ -95,7 +95,7 @@ namespace PKHeX
public bool HasGTS => GTS > -1;
public bool HasDaycare => Daycare > -1;
public virtual bool HasPokeDex => PokeDex > -1;
public virtual bool HasBoxWallpapers => PCLayout > -1;
public virtual bool HasBoxWallpapers => getBoxWallpaperOffset(0) > -1;
public virtual bool HasSUBE => SUBE > -1 && !ORAS;
public virtual bool HasGeolocation => false;
public bool HasPokeBlock => ORAS && !ORASDEMO;
@ -319,14 +319,12 @@ namespace PKHeX
public virtual uint Money { get; set; }
public abstract int BoxCount { get; }
public virtual int PartyCount { get; protected set; }
public abstract int CurrentBox { get; set; }
public abstract string Extension { get; }
// Varied Methods
protected abstract void setChecksums();
public abstract int getBoxOffset(int box);
public abstract int getPartyOffset(int slot);
public abstract int getBoxWallpaper(int box);
public abstract string getBoxName(int box);
public abstract void setBoxName(int box, string val);
public virtual ulong? GameSyncID { get { return null; } set { } }
@ -349,6 +347,25 @@ namespace PKHeX
// Storage
public virtual int BoxSlotCount => 30;
public virtual int BoxesUnlocked { get { return -1; } set { } }
public virtual byte[] BoxFlags { get { return null; } set { } }
public virtual int CurrentBox { get { return 0; } set { } }
protected virtual int getBoxWallpaperOffset(int box) { return -1; }
public int getBoxWallpaper(int box)
{
int offset = getBoxWallpaperOffset(box);
if (offset < 0 || box > BoxCount)
return box;
return Data[offset];
}
public virtual void setBoxWallpaper(int box, int val)
{
int offset = getBoxWallpaperOffset(box);
if (offset < 0 || box > BoxCount)
return;
Data[offset] = (byte)val;
}
public virtual PKM getPartySlot(int offset)
{