mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-25 21:40:21 +00:00
Extract IMultiplayerSprite from SaveFile
only used by gen6 saves
This commit is contained in:
parent
a681783f1a
commit
a61d8d1efc
9 changed files with 25 additions and 15 deletions
|
@ -8,7 +8,7 @@ namespace PKHeX.Core
|
|||
/// Generation 6 <see cref="SaveFile"/> object for <see cref="GameVersion.ORAS"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="SAV6" />
|
||||
public sealed class SAV6AO : SAV6, ISaveBlock6AO
|
||||
public sealed class SAV6AO : SAV6, ISaveBlock6AO, IMultiplayerSprite
|
||||
{
|
||||
public SAV6AO(byte[] data) : base(data, SaveBlockAccessor6AO.BlockMetadataOffset)
|
||||
{
|
||||
|
@ -104,7 +104,7 @@ namespace PKHeX.Core
|
|||
public override int Badges { get => Blocks.Misc.Badges; set => Blocks.Misc.Badges = value; }
|
||||
public override int BP { get => Blocks.Misc.BP; set => Blocks.Misc.BP = value; }
|
||||
|
||||
public override int MultiplayerSpriteID
|
||||
public int MultiplayerSpriteID
|
||||
{
|
||||
get => Blocks.Status.MultiplayerSpriteID_1;
|
||||
set => Blocks.Status.MultiplayerSpriteID_1 = Blocks.Status.MultiplayerSpriteID_2 = value;
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace PKHeX.Core
|
|||
/// Generation 6 <see cref="SaveFile"/> object for <see cref="GameVersion.XY"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="SAV6" />
|
||||
public sealed class SAV6XY : SAV6, ISaveBlock6XY
|
||||
public sealed class SAV6XY : SAV6, ISaveBlock6XY, IMultiplayerSprite
|
||||
{
|
||||
public SAV6XY(byte[] data) : base(data, SaveBlockAccessor6XY.BlockMetadataOffset)
|
||||
{
|
||||
|
@ -161,7 +161,7 @@ namespace PKHeX.Core
|
|||
public override int Badges { get => Blocks.Misc.Badges; set => Blocks.Misc.Badges = value; }
|
||||
public override int BP { get => Blocks.Misc.BP; set => Blocks.Misc.BP = value; }
|
||||
|
||||
public override int MultiplayerSpriteID
|
||||
public int MultiplayerSpriteID
|
||||
{
|
||||
get => Blocks.Status.MultiplayerSpriteID_1;
|
||||
set => Blocks.Status.MultiplayerSpriteID_1 = Blocks.Status.MultiplayerSpriteID_2 = value;
|
||||
|
|
|
@ -134,7 +134,7 @@ namespace PKHeX.Core
|
|||
public byte ConsoleRegion { get => MyStatus.ConsoleRegion; set => MyStatus.ConsoleRegion = value; }
|
||||
public override int Language { get => MyStatus.Language; set => MyStatus.Language = value; }
|
||||
public override string OT { get => MyStatus.OT; set => MyStatus.OT = value; }
|
||||
public override int MultiplayerSpriteID { get => MyStatus.MultiplayerSpriteID; set => MyStatus.MultiplayerSpriteID = value; }
|
||||
public int MultiplayerSpriteID { get => MyStatus.MultiplayerSpriteID; set => MyStatus.MultiplayerSpriteID = value; }
|
||||
public override uint Money { get => Misc.Money; set => Misc.Money = value; }
|
||||
|
||||
public override int PlayedHours { get => Played.PlayedHours; set => Played.PlayedHours = value; }
|
||||
|
|
|
@ -151,7 +151,6 @@ namespace PKHeX.Core
|
|||
public virtual uint Money { get; set; }
|
||||
public abstract int BoxCount { get; }
|
||||
public virtual int SlotCount => BoxCount * BoxSlotCount;
|
||||
public virtual int MultiplayerSpriteID { get => 0; set { } }
|
||||
public int TrainerID7 { get => (int)((uint)(TID | (SID << 16)) % 1000000); set => SetID7(TrainerSID7, value); }
|
||||
public int TrainerSID7 { get => (int)((uint)(TID | (SID << 16)) / 1000000); set => SetID7(value, TrainerID7); }
|
||||
public virtual int MaxMoney => 9999999;
|
||||
|
@ -836,7 +835,7 @@ namespace PKHeX.Core
|
|||
if (IsRegionOverwriteProtected(0, SlotCount))
|
||||
return false;
|
||||
|
||||
int expectLength = SlotCount * GetDataForBox(BlankPKM).Length;
|
||||
int expectLength = SlotCount * SIZE_BOXSLOT;
|
||||
return SetConcatenatedBinary(data, expectLength);
|
||||
}
|
||||
|
||||
|
@ -848,7 +847,7 @@ namespace PKHeX.Core
|
|||
if (IsRegionOverwriteProtected(start, end))
|
||||
return false;
|
||||
|
||||
int expectLength = BoxSlotCount * GetDataForBox(BlankPKM).Length;
|
||||
int expectLength = BoxSlotCount * SIZE_BOXSLOT;
|
||||
return SetConcatenatedBinary(data, expectLength, start);
|
||||
}
|
||||
|
||||
|
@ -858,7 +857,7 @@ namespace PKHeX.Core
|
|||
return false;
|
||||
|
||||
var BD = BoxData;
|
||||
var entryLength = GetDataForBox(BlankPKM).Length;
|
||||
var entryLength = SIZE_BOXSLOT;
|
||||
var pkdata = ArrayUtil.EnumerateSplit(data, entryLength);
|
||||
|
||||
pkdata.Select(GetPKM).CopyTo(BD, IsSlotOverwriteProtected, start);
|
||||
|
|
|
@ -104,7 +104,7 @@ namespace PKHeX.Core
|
|||
set => Data[Offset + 0x54] = (byte)((Data[Offset + 0x54] & ~(7 << 2)) | (value << 2));
|
||||
}
|
||||
|
||||
public int MultiplayerSpriteID
|
||||
public int MultiplayerSpriteID // holdover from Gen6
|
||||
{
|
||||
get => Data[Offset + 0x58];
|
||||
set => Data[Offset + 0x58] = (byte)value;
|
||||
|
|
6
PKHeX.Core/Saves/Substructures/IMultiplayerSprite.cs
Normal file
6
PKHeX.Core/Saves/Substructures/IMultiplayerSprite.cs
Normal file
|
@ -0,0 +1,6 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
public interface IMultiplayerSprite
|
||||
{
|
||||
public int MultiplayerSpriteID { get; set; }
|
||||
}
|
|
@ -10,9 +10,10 @@ public static class PlayerSpriteUtil
|
|||
|
||||
private static Image? GetSprite(SaveFile sav)
|
||||
{
|
||||
if (sav is SAV6XY or SAV6AO)
|
||||
if (sav is IMultiplayerSprite ms)
|
||||
{
|
||||
string file = $"tr_{sav.MultiplayerSpriteID:00}";
|
||||
// Gen6 only
|
||||
string file = $"tr_{ms.MultiplayerSpriteID:00}";
|
||||
return Resources.ResourceManager.GetObject(file) as Image ?? Resources.tr_00;
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -165,7 +165,8 @@ namespace PKHeX.WinForms
|
|||
MT_Seconds.Text = SAV.PlayedSeconds.ToString();
|
||||
|
||||
// Load PSS Sprite
|
||||
CB_MultiplayerSprite.SelectedValue = SAV.MultiplayerSpriteID;
|
||||
if (SAV is IMultiplayerSprite ms)
|
||||
CB_MultiplayerSprite.SelectedValue = ms.MultiplayerSpriteID;
|
||||
PB_Sprite.Image = SAV.Sprite();
|
||||
|
||||
if (SAV is SAV6XY xy)
|
||||
|
@ -253,7 +254,8 @@ namespace PKHeX.WinForms
|
|||
SAV.PlayedSeconds = ushort.Parse(MT_Seconds.Text)%60;
|
||||
|
||||
// Sprite
|
||||
SAV.MultiplayerSpriteID = Convert.ToByte(CB_MultiplayerSprite.SelectedValue);
|
||||
if (SAV is IMultiplayerSprite ms)
|
||||
ms.MultiplayerSpriteID = Convert.ToByte(CB_MultiplayerSprite.SelectedValue);
|
||||
|
||||
// Appearance
|
||||
if (SAV is SAV6XY xy)
|
||||
|
@ -348,7 +350,9 @@ namespace PKHeX.WinForms
|
|||
{
|
||||
if (editing)
|
||||
return;
|
||||
SAV.MultiplayerSpriteID = WinFormsUtil.GetIndex(CB_MultiplayerSprite);
|
||||
|
||||
if (SAV is IMultiplayerSprite ms)
|
||||
ms.MultiplayerSpriteID = WinFormsUtil.GetIndex(CB_MultiplayerSprite);
|
||||
PB_Sprite.Image = SAV.Sprite();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue