예제 #1
0
        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);
        }
예제 #2
0
        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)
            });
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        public StalkMarket(ISaveFile saveFile)
        {
            var offsets = MainOffsets.GetOffsets(saveFile.GetRevision());

            this = saveFile.ReadStruct <StalkMarket>(offsets.Offset_Turnips);
        }