From e7dd2c131ba19705f2d69d21afdd3dbca31c0d9e Mon Sep 17 00:00:00 2001 From: hp3721 <44118666+hp3721@users.noreply.github.com> Date: Sat, 20 Nov 2021 00:56:32 -0600 Subject: [PATCH] Fix player room loading for v2.0.0 (#549) --- NHSE.Core/Save/Offsets/MainSaveOffsets10.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets11.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets110.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets111.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets12.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets13.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets14.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets15.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets16.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets17.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets18.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets19.cs | 2 +- NHSE.Core/Save/Offsets/MainSaveOffsets20.cs | 2 +- NHSE.Core/Structures/Villager/IPlayerHouse.cs | 2 +- NHSE.Core/Structures/Villager/IPlayerRoom.cs | 1 - NHSE.Core/Structures/Villager/PlayerHouse1.cs | 6 +++--- NHSE.Core/Structures/Villager/PlayerHouse2.cs | 8 ++++---- NHSE.Core/Structures/Villager/PlayerRoom1.cs | 2 +- 18 files changed, 22 insertions(+), 23 deletions(-) diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets10.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets10.cs index da78065..6d451c7 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets10.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets10.cs @@ -56,7 +56,7 @@ public class MainSaveOffsets10 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets11.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets11.cs index efa8aeb..838f04d 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets11.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets11.cs @@ -55,7 +55,7 @@ public class MainSaveOffsets11 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets110.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets110.cs index 0c463aa..0cf056b 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets110.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets110.cs @@ -57,7 +57,7 @@ public class MainSaveOffsets110 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets111.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets111.cs index d765910..e627d52 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets111.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets111.cs @@ -58,7 +58,7 @@ public class MainSaveOffsets111 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets12.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets12.cs index 9cc959d..623a379 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets12.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets12.cs @@ -55,7 +55,7 @@ public class MainSaveOffsets12 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets13.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets13.cs index e7a2231..9dca9e9 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets13.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets13.cs @@ -55,7 +55,7 @@ public class MainSaveOffsets13 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets14.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets14.cs index d05ad5c..5a8f30a 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets14.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets14.cs @@ -55,7 +55,7 @@ public class MainSaveOffsets14 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets15.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets15.cs index 6225cce..20f9cbd 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets15.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets15.cs @@ -55,7 +55,7 @@ public class MainSaveOffsets15 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets16.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets16.cs index 492054b..0d93849 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets16.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets16.cs @@ -55,7 +55,7 @@ public class MainSaveOffsets16 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets17.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets17.cs index 8983478..2921ed8 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets17.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets17.cs @@ -55,7 +55,7 @@ public class MainSaveOffsets17 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets18.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets18.cs index 2e7636e..6e97292 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets18.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets18.cs @@ -56,7 +56,7 @@ public class MainSaveOffsets18 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets19.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets19.cs index 6d3ae3b..f1ff33e 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets19.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets19.cs @@ -57,7 +57,7 @@ public class MainSaveOffsets19 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse1.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse1(data); - public override int PlayerRoomSize => PlayerHouse1.SIZE; + public override int PlayerRoomSize => PlayerRoom1.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom1(data); } } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets20.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets20.cs index 2829614..dcb5b91 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets20.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets20.cs @@ -58,7 +58,7 @@ public class MainSaveOffsets20 : MainSaveOffsets public override int PlayerHouseSize => PlayerHouse2.SIZE; public override IPlayerHouse ReadPlayerHouse(byte[] data) => new PlayerHouse2(data); - public override int PlayerRoomSize => PlayerHouse2.SIZE; + public override int PlayerRoomSize => PlayerRoom2.SIZE; public override IPlayerRoom ReadPlayerRoom(byte[] data) => new PlayerRoom2(data); } } diff --git a/NHSE.Core/Structures/Villager/IPlayerHouse.cs b/NHSE.Core/Structures/Villager/IPlayerHouse.cs index ef1c898..851b7b2 100644 --- a/NHSE.Core/Structures/Villager/IPlayerHouse.cs +++ b/NHSE.Core/Structures/Villager/IPlayerHouse.cs @@ -10,7 +10,7 @@ public interface IPlayerHouse : IHouseInfo string Extension { get; } short[] GetEventFlags(); void SetEventFlags(short[] value); - IPlayerRoom GetRoom(int v); + IPlayerRoom GetRoom(int roomIndex); void SetRoom(int roomIndex, IPlayerRoom room); } } diff --git a/NHSE.Core/Structures/Villager/IPlayerRoom.cs b/NHSE.Core/Structures/Villager/IPlayerRoom.cs index 4e85fb2..db82b29 100644 --- a/NHSE.Core/Structures/Villager/IPlayerRoom.cs +++ b/NHSE.Core/Structures/Villager/IPlayerRoom.cs @@ -10,6 +10,5 @@ public interface IPlayerRoom string Extension { get; } RoomItemLayer[] GetItemLayers(); void SetItemLayers(IReadOnlyList value); - IPlayerRoom Upgrade(); } } diff --git a/NHSE.Core/Structures/Villager/PlayerHouse1.cs b/NHSE.Core/Structures/Villager/PlayerHouse1.cs index 761eb76..39b1ee2 100644 --- a/NHSE.Core/Structures/Villager/PlayerHouse1.cs +++ b/NHSE.Core/Structures/Villager/PlayerHouse1.cs @@ -44,7 +44,7 @@ public short[] GetEventFlags() public const int MaxRoom = 6; public const int RoomStart = 0x120; - public IPlayerRoom GetRoom(int roomIndex) + public virtual IPlayerRoom GetRoom(int roomIndex) { if ((uint)roomIndex >= MaxRoom) throw new ArgumentOutOfRangeException(nameof(roomIndex)); @@ -53,7 +53,7 @@ public IPlayerRoom GetRoom(int roomIndex) return new PlayerRoom1(data); } - public void SetRoom(int roomIndex, IPlayerRoom room) + public virtual void SetRoom(int roomIndex, IPlayerRoom room) { if ((uint)roomIndex >= MaxRoom) throw new ArgumentOutOfRangeException(nameof(roomIndex)); @@ -93,7 +93,7 @@ public PlayerHouse2 Upgrade() var data = new byte[PlayerHouse2.SIZE]; Data.Slice(0x0, 0x120).CopyTo(data, 0); // HouseLevel -> EventFlag for (int i = 0; i < MaxRoom; i++) - GetRoom(i).Upgrade().Write().CopyTo(data, 0x120 + i * PlayerRoom2.SIZE); // RoomList + ((PlayerRoom1)GetRoom(i)).Upgrade().Write().CopyTo(data, 0x120 + i * PlayerRoom2.SIZE); // RoomList Data.Slice(0x263D0, 0x30).CopyTo(data, 0x289F8); // PlayerList -> Cockroach return new PlayerHouse2(data); } diff --git a/NHSE.Core/Structures/Villager/PlayerHouse2.cs b/NHSE.Core/Structures/Villager/PlayerHouse2.cs index 9a58942..17df7e6 100644 --- a/NHSE.Core/Structures/Villager/PlayerHouse2.cs +++ b/NHSE.Core/Structures/Villager/PlayerHouse2.cs @@ -9,7 +9,7 @@ public class PlayerHouse2 : PlayerHouse1 public PlayerHouse2(byte[] data) : base(data) { } - public new PlayerRoom2 GetRoom(int roomIndex) + public override IPlayerRoom GetRoom(int roomIndex) { if ((uint)roomIndex >= MaxRoom) throw new ArgumentOutOfRangeException(nameof(roomIndex)); @@ -18,12 +18,12 @@ public new PlayerRoom2 GetRoom(int roomIndex) return new PlayerRoom2(data); } - public void SetRoom(int roomIndex, PlayerRoom2 room) + public override void SetRoom(int roomIndex, IPlayerRoom room) { if ((uint)roomIndex >= MaxRoom) throw new ArgumentOutOfRangeException(nameof(roomIndex)); - room.Data.CopyTo(Data, RoomStart + (roomIndex * PlayerRoom2.SIZE)); + room.Write().CopyTo(Data, RoomStart + (roomIndex * PlayerRoom2.SIZE)); } public new sbyte NPC1 { get => (sbyte)Data[0x289F8]; set => Data[0x289F8] = (byte)value; } @@ -58,7 +58,7 @@ public PlayerHouse1 Downgrade() var data = new byte[PlayerHouse1.SIZE]; Data.Slice(0x0, 0x120).CopyTo(data, 0); // HouseLevel -> EventFlag for (int i = 0; i < MaxRoom; i++) - GetRoom(i).Downgrade().Data.CopyTo(data, 0x120 + i * PlayerRoom2.SIZE); // RoomList + ((PlayerRoom2)GetRoom(i)).Downgrade().Data.CopyTo(data, 0x120 + i * PlayerRoom2.SIZE); // RoomList Data.Slice(0x289F8, 0x30).CopyTo(data, 0x263D0); // PlayerList -> Cockroach return new PlayerHouse1(data); } diff --git a/NHSE.Core/Structures/Villager/PlayerRoom1.cs b/NHSE.Core/Structures/Villager/PlayerRoom1.cs index 3fe890c..35f247f 100644 --- a/NHSE.Core/Structures/Villager/PlayerRoom1.cs +++ b/NHSE.Core/Structures/Villager/PlayerRoom1.cs @@ -38,7 +38,7 @@ public GSaveRoomFloorWall RoomFloorWall set => value.ToBytes().CopyTo(Data, 0x65A4); } - public IPlayerRoom Upgrade() + public PlayerRoom2 Upgrade() { var data = new byte[PlayerRoom2.SIZE]; Data.CopyTo(data, 0);