public Player(ISaveFile saveFile, int idx, PersonalSaveFile personalSave) { SaveFile = saveFile; _personalFile = personalSave; var offsets = PersonalOffsets.GetOffsets(SaveFile.GetRevision()); Index = idx; PersonalId = new PersonalID(personalSave, offsets.PersonalId); Wallet = new EncryptedInt32(personalSave, offsets.Wallet); Bank = new EncryptedInt32(personalSave, offsets.Bank); NookMiles = new EncryptedInt32(personalSave, offsets.NookMiles); // TODO: This should be refactored to detect the "expanded pockets" state var pockets = new Item[40]; for (var i = 0; i < 20; i++) { pockets[i] = new Item(personalSave, offsets.Pockets + 0xB8 + i * 8); pockets[i + 20] = new Item(personalSave, offsets.Pockets + i * 8); } Pockets = new ItemCollection(pockets); var storage = new Item[5000]; for (var i = 0; i < 5000; i++) { storage[i] = new Item(personalSave, offsets.Storage + i * 8); } Storage = new ItemCollection(storage); }
public Villager(ISaveFile saveFile, int idx) { SaveFile = saveFile; Index = idx; var offsets = MainOffsets.GetOffsets(SaveFile.GetRevision()); Offset = offsets.Offset_Vilagers + idx * offsets.Villager_Size; Species = SaveFile.ReadU8(Offset + offsets.Villager_Species); VariantIdx = SaveFile.ReadU8(Offset + offsets.Villager_Variant); Personality = SaveFile.ReadU8(Offset + offsets.Villager_Personality); Catchphrase = SaveFile.ReadString(Offset + offsets.Villager_Catchphrase, offsets.Villager_CatchphraseLength); // Not sure about the size. var ftr = new Item[offsets.Villager_FurnitureCount]; for (var i = 0; i < ftr.Length; i++) { ftr[i] = new Item(SaveFile, Offset + offsets.Villager_Furniture + i * 0x2C); } Furniture = new ItemCollection(ftr); Wallpaper = new ItemCollection(new Item[1] { new Item(SaveFile, Offset + offsets.Villager_Wallpaper) }); Flooring = new ItemCollection(new Item[1] { new Item(SaveFile, Offset + offsets.Villager_Flooring) }); }
public void Save(ISaveFile saveFile, int index) { var offsets = MainOffsets.GetOffsets(saveFile.GetRevision()); if (index >= offsets.Building_Count) { throw new IndexOutOfRangeException("Index was greater than the number of building slots!"); } saveFile.WriteStruct(offsets.Offset_Buildings + index * 0x14, this); }
public Building(ISaveFile saveFile, int index) { var offsets = MainOffsets.GetOffsets(saveFile.GetRevision()); if (index >= offsets.Building_Count) { throw new IndexOutOfRangeException("Index was greater than the number of building slots!"); } this = saveFile.ReadStruct <Building>(offsets.Offset_Buildings + index * 0x14); }
public DesignPattern(ISaveFile saveFile, int idx) { SaveFile = saveFile; Index = idx; var offsets = MainOffsets.GetOffsets(SaveFile.GetRevision()); Offset = offsets.Offset_Patterns + idx * offsets.Pattern_Size; Name = SaveFile.ReadString(Offset + offsets.Pattern_Name, 20); PersonalID = SaveFile.ReadStruct <PersonalID>(Offset + offsets.Pattern_PersonalID); for (int i = 0; i < 15; i++) { Palette[i] = new DesignColor(saveFile, Offset + offsets.Pattern_Palette + i * 3); } Pixels = SaveFile.ReadArray <byte>(Offset + offsets.Pattern_ImageData, Pixels.Length); }
public StalkMarket(ISaveFile saveFile) { var offsets = MainOffsets.GetOffsets(saveFile.GetRevision()); this = saveFile.ReadStruct <StalkMarket>(offsets.Offset_Turnips); }