Ejemplo n.º 1
0
        public static Bitmap GetHairImage(SaveGeneration Save_Generation, int Index, int ColorIndex)
        {
            Bitmap HairImage  = null;
            string HairFolder = MainForm.Assembly_Location + "\\Resources\\Images\\Hair Styles";

            if (Directory.Exists(HairFolder))
            {
                // TODO: Wild World, City Folk
                if (Save_Generation == SaveGeneration.N3DS)
                {
                    HairFolder += "\\New Leaf";
                }

                if (Directory.Exists(HairFolder))
                {
                    string HairImageFile = HairFolder + "\\" + Index + ".png";
                    if (File.Exists(HairImageFile))
                    {
                        try
                        {
                            HairImage = (Bitmap)Image.FromFile(HairImageFile);
                            ReplaceGrayscaleColor(ref HairImage, Color.FromArgb((int)PlayerInfo.NL_Hair_Color_Values[ColorIndex]));
                        }
                        catch
                        {
                            MainForm.Debug_Manager.WriteLine(string.Format("Could not open hair file: {0}", HairImageFile), DebugLevel.Error);
                        }
                    }
                }
            }
            return(HairImage);
        }
Ejemplo n.º 2
0
        public bool IsItemBuried(Item item, SaveGeneration generation)
        {
            if (item == null || !Items.Contains(item))
            {
                return(false);
            }

            var itemIdx = Array.IndexOf(Items, item);

            if (itemIdx < 0 || itemIdx > 255)
            {
                return(false);
            }

            int offset;

            switch (generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
            case SaveGeneration.iQue:
            case SaveGeneration.Wii:
                offset = Save.SaveInstance.SaveInfo.SaveOffsets.BuriedData + (TownIndex * 16 + itemIdx / 16) * 2;
                return(Save.SaveInstance.ReadUInt16(offset, true, true).GetBit(itemIdx % 16) == 1);

            case SaveGeneration.NDS:
                offset = Save.SaveInstance.SaveInfo.SaveOffsets.BuriedData + (Index * 256 + itemIdx) / 8;
                return(Save.SaveInstance.ReadByte(offset, true).GetBit(itemIdx % 8) == 1);

            case SaveGeneration.N3DS:
                return((item.Flag1 & 0x80) == 0x80);
            }

            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets an <see cref="Image"/> icon of the current Town Gate.
        /// </summary>
        /// <param name="saveGeneration">The <see cref="SaveGeneration"/> of the current <see cref="Save"/>.</param>
        /// <param name="gateType">The gate type whose image will be retrieved.</param>
        /// <returns><see cref="Image"/> TownGateIcon OR null if the image does not exist or cannot be accessed.</returns>
        public static Image GetTownGateImage(SaveGeneration saveGeneration, int gateType)
        {
            string path;

            switch (saveGeneration)
            {
            case SaveGeneration.NDS:
                path = Path.Combine(PathUtility.GetIconsDirectory(), "Wild World", $"{(uint)gateType}.png");
                break;

            case SaveGeneration.Wii:
                path = Path.Combine(PathUtility.GetIconsDirectory(), "City Folk", $"{(uint) gateType}.png");
                break;

            default:
                return(null);
            }

            if (!File.Exists(path))
            {
                return(null);
            }

            try
            {
                return(Image.FromFile(path));
            }
            catch
            {
                return(null);
            }
        }
Ejemplo n.º 4
0
        public static void ExportTown(WorldAcre[] Acres, SaveGeneration Save_Generation, string SaveFileName)
        {
            using (var saveDialog = new System.Windows.Forms.SaveFileDialog())
            {
                saveDialog.Filter   = "ACSE Town Save (*.ats)|*.ats";
                saveDialog.FileName = SaveFileName + " Town Data.ats";

                if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    try
                    {
                        using (var Stream = new FileStream(saveDialog.FileName, FileMode.Create))
                        {
                            using (var Writer = new BinaryWriter(Stream))
                            {
                                Writer.Write(new byte[] { 0x41, 0x54, 0x53 }); // "ATS" Identifier
                                Writer.Write((byte)Acres.Length);              // Total Acre Count
                                Writer.Write((byte)Save_Generation);           // Save Generation
                                Writer.Write(new byte[3] {
                                    0, 0, 0
                                });                                    // Padding

                                if (Save_Generation == SaveGeneration.N3DS)
                                {
                                    for (int i = 0; i < Acres.Length; i++)
                                    {
                                        for (int x = 0; x < Acres[i].Acre_Items.Length; x++)
                                        {
                                            Writer.Write(BitConverter.GetBytes(Acres[i].Acre_Items[x].ToUInt32()));
                                        }
                                    }
                                }
                                else
                                {
                                    for (int i = 0; i < Acres.Length; i++)
                                    {
                                        for (int x = 0; x < Acres[i].Acre_Items.Length; x++)
                                        {
                                            Writer.Write(BitConverter.GetBytes(Acres[i].Acre_Items[x].ItemID));
                                        }
                                    }
                                }

                                Writer.Flush();
                            }
                        }
                    }
                    catch
                    {
                        System.Windows.Forms.MessageBox.Show("Town exportation failed!", "Town Export Error", System.Windows.Forms.MessageBoxButtons.OK,
                                                             System.Windows.Forms.MessageBoxIcon.Error);
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public static void ImportTown(ref WorldAcre[] acres, SaveGeneration saveGeneration)
        {
            using (var openDialog = new System.Windows.Forms.OpenFileDialog())
            {
                openDialog.Filter   = "ACSE Town Save (*.ats)|*.ats";
                openDialog.FileName = "";

                if (openDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                {
                    return;
                }
                try
                {
                    using (var stream = new FileStream(openDialog.FileName, FileMode.Open))
                    {
                        using (var reader = new BinaryReader(stream))
                        {
                            if (!System.Text.Encoding.ASCII.GetString(reader.ReadBytes(3)).Equals("ATS") ||
                                reader.ReadByte() != acres.Length ||
                                (SaveGeneration)reader.ReadByte() != saveGeneration)
                            {
                                return;
                            }
                            reader.BaseStream.Seek(8, SeekOrigin.Begin);
                            if (saveGeneration == SaveGeneration.N3DS)
                            {
                                foreach (var acre in acres)
                                {
                                    for (var x = 0; x < acre.AcreItems.Length; x++)
                                    {
                                        acre.AcreItems[x] = new WorldItem(reader.ReadUInt32(), acre.AcreItems[x].Index);
                                    }
                                }
                            }
                            else
                            {
                                foreach (var acre in acres)
                                {
                                    for (var x = 0; x < acre.AcreItems.Length; x++)
                                    {
                                        acre.AcreItems[x] = new WorldItem(reader.ReadUInt16(), acre.AcreItems[x].Index);
                                    }
                                }
                            }
                        }
                    }
                }
                catch
                {
                    System.Windows.Forms.MessageBox.Show("Acre importation failed!", "Acre Import Error", System.Windows.Forms.MessageBoxButtons.OK,
                                                         System.Windows.Forms.MessageBoxIcon.Error);
                }
            }
        }
Ejemplo n.º 6
0
        public static IGenerator GetGenerator(SaveGeneration generation)
        {
            switch (generation)
            {
            case SaveGeneration.GCN:
                return(new GCNGenerator());

            default:
                return(null);
            }
        }
Ejemplo n.º 7
0
        public Save(string File_Path)
        {
            if (File.Exists(File_Path))
            {
                if (Save_File != null)
                {
                    Save_Reader.Close();
                    Save_File.Close();
                }
                bool Failed_to_Load = false;
                try { Save_File = new FileStream(File_Path, FileMode.Open); } catch { Failed_to_Load = true; }
                if (Save_File == null || Failed_to_Load || !Save_File.CanWrite)
                {
                    MessageBox.Show(string.Format("Error: File {0} is being used by another process. Please close any process using it before editing!",
                                                  Path.GetFileName(File_Path)), "File Opening Error");
                    try { Save_File.Close(); } catch { };
                    return;
                }

                Save_Reader = new BinaryReader(Save_File);

                Original_Save_Data = Save_Reader.ReadBytes((int)Save_File.Length);
                Working_Save_Data  = new byte[Original_Save_Data.Length];
                Buffer.BlockCopy(Original_Save_Data, 0, Working_Save_Data, 0, Original_Save_Data.Length);

                Save_Type              = SaveDataManager.GetSaveType(Original_Save_Data);
                Game_System            = SaveDataManager.GetGameSystem(Save_Type);
                Full_Save_Path         = File_Path;
                Save_Name              = Path.GetFileNameWithoutExtension(File_Path);
                Save_Path              = Path.GetDirectoryName(File_Path) + Path.DirectorySeparatorChar;
                Save_Extension         = Path.GetExtension(File_Path);
                Save_ID                = SaveDataManager.GetGameID(Save_Type);
                Save_Data_Start_Offset = SaveDataManager.GetSaveDataOffset(Save_ID.ToLower(), Save_Extension.Replace(".", "").ToLower());
                Save_Info              = SaveDataManager.GetSaveInfo(Save_Type);

                if (Save_Type == SaveType.Doubutsu_no_Mori)
                {
                    Original_Save_Data = SaveDataManager.ByteSwap(Original_Save_Data);
                    Working_Save_Data  = SaveDataManager.ByteSwap(Working_Save_Data);
                }

                if (Save_Type == SaveType.Wild_World || Save_Type == SaveType.New_Leaf || Save_Type == SaveType.Welcome_Amiibo)
                {
                    Is_Big_Endian = false;
                }

                Save_Reader.Close();
                Save_File.Close();
            }
            else
            {
                MessageBox.Show("File doesn't exist!");
            }
        }
Ejemplo n.º 8
0
        private static byte[] GetEmotionSet(SaveGeneration generation)
        {
            switch (generation)
            {
            case SaveGeneration.N3DS:
                return(NewLeafEmotions);

            default:
                return(null);
            }
        }
Ejemplo n.º 9
0
        public static void ExportTown(WorldAcre[] acres, SaveGeneration saveGeneration, string saveFileName)
        {
            using (var saveDialog = new System.Windows.Forms.SaveFileDialog())
            {
                saveDialog.Filter   = "ACSE Town Save (*.ats)|*.ats";
                saveDialog.FileName = saveFileName + " Town Data.ats";

                if (saveDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                {
                    return;
                }
                try
                {
                    using (var stream = new FileStream(saveDialog.FileName, FileMode.Create))
                    {
                        using (var writer = new BinaryWriter(stream))
                        {
                            writer.Write(new byte[] { 0x41, 0x54, 0x53 }); // "ATS" Identifier
                            writer.Write((byte)acres.Length);              // Total Acre Count
                            writer.Write((byte)saveGeneration);            // Save Generation
                            writer.Write(new byte[] { 0, 0, 0 });          // Padding

                            if (saveGeneration == SaveGeneration.N3DS)
                            {
                                foreach (var acre in acres)
                                {
                                    foreach (var item in acre.AcreItems)
                                    {
                                        writer.Write(BitConverter.GetBytes(item.ToUInt32()));
                                    }
                                }
                            }
                            else
                            {
                                foreach (var acre in acres)
                                {
                                    foreach (var item in acre.AcreItems)
                                    {
                                        writer.Write(BitConverter.GetBytes(item.ItemId));
                                    }
                                }
                            }

                            writer.Flush();
                        }
                    }
                }
                catch
                {
                    System.Windows.Forms.MessageBox.Show("Town exportation failed!", "Town Export Error", System.Windows.Forms.MessageBoxButtons.OK,
                                                         System.Windows.Forms.MessageBoxIcon.Error);
                }
            }
        }
Ejemplo n.º 10
0
        public static byte ToWeatherByte(byte index, SaveGeneration generation)
        {
            switch (generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
                return((byte)((MainForm.SaveFile.ReadByte(MainForm.SaveFile.SaveDataStartOffset + MainForm.SaveFile.SaveInfo.SaveOffsets.Weather) & 0x0F) | (index << 4)));

            default:
                return(index);
            }
        }
Ejemplo n.º 11
0
        public static byte ToWeatherByte(byte Index, SaveGeneration Generation)
        {
            switch (Generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
                return((byte)((MainForm.Save_File.ReadByte(MainForm.Save_File.Save_Data_Start_Offset + MainForm.Save_File.Save_Info.Save_Offsets.Weather) & 0x0F) | (Index << 4)));

            default:
                return(Index);
            }
        }
Ejemplo n.º 12
0
        public static string[] GetWeatherTypesForGame(SaveGeneration Generation)
        {
            switch (Generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
                return(AC_Weather);

            default:
                return(new string[0]);
            }
        }
Ejemplo n.º 13
0
        public static byte GetWeatherIndex(byte Weather, SaveGeneration Generation)
        {
            switch (Generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
                return((byte)(Weather >> 4));

            default:
                return(Weather);
            }
        }
Ejemplo n.º 14
0
        public static void ImportTown(ref WorldAcre[] Acres, SaveGeneration Save_Generation)
        {
            using (var openDialog = new System.Windows.Forms.OpenFileDialog())
            {
                openDialog.Filter   = "ACSE Town Save (*.ats)|*.ats";
                openDialog.FileName = "";

                if (openDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    try
                    {
                        using (var Stream = new FileStream(openDialog.FileName, FileMode.Open))
                        {
                            using (var Reader = new BinaryReader(Stream))
                            {
                                if (System.Text.Encoding.ASCII.GetString(Reader.ReadBytes(3)).Equals("ATS") && Reader.ReadByte() == Acres.Length &&
                                    (SaveGeneration)Reader.ReadByte() == Save_Generation)
                                {
                                    Reader.BaseStream.Seek(8, SeekOrigin.Begin);
                                    if (Save_Generation == SaveGeneration.N3DS)
                                    {
                                        for (int i = 0; i < Acres.Length; i++)
                                        {
                                            for (int x = 0; x < Acres[i].Acre_Items.Length; x++)
                                            {
                                                Acres[i].Acre_Items[x] = new WorldItem(Reader.ReadUInt32(), Acres[i].Acre_Items[x].Index);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        for (int i = 0; i < Acres.Length; i++)
                                        {
                                            for (int x = 0; x < Acres[i].Acre_Items.Length; x++)
                                            {
                                                Acres[i].Acre_Items[x] = new WorldItem(Reader.ReadUInt16(), Acres[i].Acre_Items[x].Index);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    catch
                    {
                        System.Windows.Forms.MessageBox.Show("Acre importation failed!", "Acre Import Error", System.Windows.Forms.MessageBoxButtons.OK,
                                                             System.Windows.Forms.MessageBoxIcon.Error);
                    }
                }
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Gets an array of the Town Gate descriptions for a <see cref="SaveGeneration"/>.
        /// </summary>
        /// <param name="saveGeneration">The <see cref="SaveGeneration"/> of the current <see cref="Save"/>.</param>
        /// <returns>An array containing the descriptions of the Town Gate types OR null if there are none.</returns>
        public static string[] GetTownGateTypeNames(SaveGeneration saveGeneration)
        {
            switch (saveGeneration)
            {
            case SaveGeneration.NDS:
                return(WildWorldGateNames);

            case SaveGeneration.Wii:
                return(CityFolkGateNames);

            default:
                return(null);
            }
        }
Ejemplo n.º 16
0
        public uint[][] GetPaletteArray(SaveGeneration saveGeneration)
        {
            switch (saveGeneration)
            {
            default:
                return(PatternData.AcPaletteData);

            case SaveGeneration.NDS:
                return(PatternData.WwPaletteData);

            case SaveGeneration.Wii:
                return(PatternData.CfPaletteData);
            }
        }
Ejemplo n.º 17
0
        public uint[][] GetPaletteArray(SaveGeneration Save_Generation)
        {
            switch (Save_Generation)
            {
            case SaveGeneration.GCN:
            default:
                return(PatternData.AC_Palette_Data);

            case SaveGeneration.NDS:
                return(PatternData.WW_Palette_Data);

            case SaveGeneration.Wii:
                return(PatternData.CF_Palette_Data);
            }
        }
Ejemplo n.º 18
0
        public static string[] GetHouseSizes(SaveGeneration generation)
        {
            switch (generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.iQue:
                return(DnMHouseSizes);

            case SaveGeneration.GCN:
                return(AcHouseSizes);

            default:
                return(new string[0]);
            }
        }
Ejemplo n.º 19
0
        public static Image GetFaceImage(SaveGeneration saveGeneration, int index, byte gender)
        {
            Image faceImage   = null;
            var   facesFolder = MainForm.AssemblyLocation + "\\Resources\\Images\\Faces";

            if (!Directory.Exists(facesFolder))
            {
                return(null);
            }
            switch (saveGeneration)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
            case SaveGeneration.iQue:
                facesFolder += "\\Animal Crossing";
                break;

            case SaveGeneration.NDS:
            case SaveGeneration.Wii:
                facesFolder += "\\Wild World";
                break;

            case SaveGeneration.N3DS:
                facesFolder += "\\New Leaf\\" + (gender == 1 ? "Female" : "Male");
                break;
            }

            if (!Directory.Exists(facesFolder))
            {
                return(null);
            }
            var faceImageFile = facesFolder + "\\" + index + ".bmp";

            if (!File.Exists(faceImageFile))
            {
                return(null);
            }
            try
            {
                faceImage = Image.FromFile(faceImageFile);
            }
            catch
            {
                MainForm.DebugManager.WriteLine($"Could not open face file: {faceImageFile}", DebugLevel.Error);
            }
            return(faceImage);
        }
Ejemplo n.º 20
0
        public static string GetShopName(SaveGeneration generation, byte shopSize)
        {
            if (generation == SaveGeneration.N3DS)
            {
                if (shopSize > 4)
                {
                    shopSize = 4;
                }
                return(NewLeafNookShopNames[shopSize]);
            }

            if (shopSize > 3)
            {
                shopSize = 3;
            }
            return(NookShopNames[shopSize]);
        }
Ejemplo n.º 21
0
        public bool SetItemBuried(Item item, bool buried, SaveGeneration generation)
        {
            if (item == null || !Items.Contains(item))
            {
                return(false);
            }

            var itemIdx = Array.IndexOf(Items, item);

            if (itemIdx < 0 || itemIdx > 255)
            {
                return(false);
            }

            if (item.Type == ItemType.Empty)
            {
                buried = false; // Don't allow "empty" spots to be buried no matter what.
            }

            int offset;

            switch (generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
            case SaveGeneration.iQue:
            case SaveGeneration.Wii:
                offset = Save.SaveInstance.SaveInfo.SaveOffsets.BuriedData + (TownIndex * 16 + itemIdx / 16) * 2;
                Save.SaveInstance.Write(offset,
                                        Save.SaveInstance.ReadUInt16(offset, true, true).SetBit(itemIdx % 16, buried), true, true);
                break;

            case SaveGeneration.NDS:
                offset = Save.SaveInstance.SaveInfo.SaveOffsets.BuriedData + (Index * 256 + itemIdx) / 8;
                Save.SaveInstance.Write(offset,
                                        Save.SaveInstance.ReadByte(offset, true).SetBit(itemIdx % 8, buried), true);
                break;

            case SaveGeneration.N3DS:
                item.Flag1 &= 0x7F;
                break;
            }

            return(IsItemBuried(item, generation));
        }
Ejemplo n.º 22
0
Archivo: Shop.cs Proyecto: Slattz/ACSE
 public static string GetShopName(SaveGeneration Generation, byte ShopSize)
 {
     if (Generation == SaveGeneration.N3DS)
     {
         if (ShopSize > 4)
         {
             ShopSize = 4;
         }
         return(NewLeaf_NookShopNames[ShopSize]);
     }
     else
     {
         if (ShopSize > 3)
         {
             ShopSize = 3;
         }
         return(NookShopNames[ShopSize]);
     }
 }
Ejemplo n.º 23
0
        public static string[] GetRoomNames(SaveGeneration Generation)
        {
            switch (Generation)
            {
            case SaveGeneration.N64:
                return(DnM_House_Names);

            case SaveGeneration.GCN:
            case SaveGeneration.Wii:
                return(AC_Room_Names);

            case SaveGeneration.NDS:
            default:
                return(WW_Room_Names);

            case SaveGeneration.N3DS:
                return(NL_Room_Names);
            }
        }
Ejemplo n.º 24
0
        public bool SetItemBuried(WorldAcre acre, Item item, bool buried, SaveGeneration generation)
        {
            if (item == null || !acre.Items.Contains(item))
            {
                return(false);
            }

            var itemIdx = Array.IndexOf(acre.Items, item);

            if (itemIdx < 0 || itemIdx > 255)
            {
                return(false);
            }

            int offset;

            switch (generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
            case SaveGeneration.iQue:
            case SaveGeneration.Wii:
                offset = Save.SaveInstance.SaveInfo.SaveOffsets.BuriedData + (acre.Index * 16 + itemIdx / 16) * 2;
                Save.SaveInstance.Write(offset,
                                        Save.SaveInstance.ReadUInt16(offset, true, true).SetBit(itemIdx % 16, buried), true, true);
                break;

            case SaveGeneration.NDS:
                offset = Save.SaveInstance.SaveInfo.SaveOffsets.BuriedData + (acre.Index * 256 + itemIdx) / 8;
                Save.SaveInstance.Write(offset,
                                        Save.SaveInstance.ReadByte(offset, true).SetBit(itemIdx % 8, buried), true);
                break;

            case SaveGeneration.N3DS:
                item.Flag1 &= 0x7F;
                break;
            }

            return(IsItemBuried(acre, item, generation));
        }
Ejemplo n.º 25
0
        public static string[] GetNativeFruitTypes(SaveGeneration saveGeneration)
        {
            switch (saveGeneration)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
            case SaveGeneration.iQue:
                return(Gen1Fruits);

            case SaveGeneration.NDS:
                return(WildWorldFruits);

            case SaveGeneration.Wii:
                return(CityFolkFruits);

            case SaveGeneration.N3DS:
                return(NewLeafFruits);

            default:
                return(null);
            }
        }
Ejemplo n.º 26
0
        public byte GetSize(SaveGeneration generation)
        {
            var saveFile    = Save.SaveInstance;
            var shopOffsets = ShopInfo.GetShopOffsets(saveFile.SaveType);

            if (shopOffsets == null)
            {
                return(0);
            }
            switch (generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.GCN:
                return((byte)((saveFile.ReadByte(saveFile.SaveDataStartOffset + shopOffsets.FurnitureShopUpgrade) >> 6) & 3));

            case SaveGeneration.N3DS:
                return(saveFile.ReadByte(saveFile.SaveDataStartOffset + shopOffsets.FurnitureShopUpgrade));

            default:
                return(0);
            }
        }
Ejemplo n.º 27
0
        public static string[] GetRoomNames(SaveGeneration generation)
        {
            switch (generation)
            {
            case SaveGeneration.N64:
            case SaveGeneration.iQue:
                return(DnMHouseNames);

            case SaveGeneration.GCN:
            case SaveGeneration.Wii:
                return(AcRoomNames);

            case SaveGeneration.NDS:
                return(WwRoomNames);

            case SaveGeneration.N3DS:
                return(NlRoomNames);

            default:
                return(new string[0]);
            }
        }
Ejemplo n.º 28
0
Archivo: Shop.cs Proyecto: Slattz/ACSE
        public byte GetSize(SaveGeneration Generation)
        {
            var SaveFile    = MainForm.Save_File;
            var ShopOffsets = ShopInfo.GetShopOffsets(SaveFile.Save_Type);

            if (ShopOffsets != null)
            {
                switch (Generation)
                {
                case SaveGeneration.N64:
                case SaveGeneration.GCN:
                    return((byte)(SaveFile.ReadByte(SaveFile.Save_Data_Start_Offset + ShopOffsets.FurnitureShopUpgrade) >> 6));

                case SaveGeneration.N3DS:
                    return(SaveFile.ReadByte(SaveFile.Save_Data_Start_Offset + ShopOffsets.FurnitureShopUpgrade));

                default:
                    return(0);
                }
            }
            return(0);
        }
Ejemplo n.º 29
0
        public static void ImportAcres(ref WorldAcre[] acres, SaveGeneration saveGeneration)
        {
            using (var openDialog = new System.Windows.Forms.OpenFileDialog())
            {
                openDialog.Filter   = "ACSE Acre Save (*.aas)|*.aas";
                openDialog.FileName = "";

                if (openDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                {
                    return;
                }
                try
                {
                    using (var stream = new FileStream(openDialog.FileName, FileMode.Open))
                    {
                        using (var reader = new BinaryReader(stream))
                        {
                            if (!System.Text.Encoding.ASCII.GetString(reader.ReadBytes(3)).Equals("AAS") ||
                                reader.ReadByte() != acres.Length ||
                                (SaveGeneration)reader.ReadByte() != saveGeneration)
                            {
                                return;
                            }
                            reader.BaseStream.Seek(8, SeekOrigin.Begin);
                            foreach (var t in acres)
                            {
                                t.AcreId     = reader.ReadUInt16();
                                t.BaseAcreId = (ushort)(t.AcreId & 0xFFFC);
                            }
                        }
                    }
                }
                catch
                {
                    System.Windows.Forms.MessageBox.Show("Acre importation failed!", "Acre Import Error", System.Windows.Forms.MessageBoxButtons.OK,
                                                         System.Windows.Forms.MessageBoxIcon.Error);
                }
            }
        }
Ejemplo n.º 30
0
        public static Image GetFaceImage(SaveGeneration Save_Generation, int Index, byte Gender)
        {
            Image  FaceImage   = null;
            string FacesFolder = MainForm.Assembly_Location + "\\Resources\\Images\\Faces";

            if (Directory.Exists(FacesFolder))
            {
                if (Save_Generation == SaveGeneration.N64 || Save_Generation == SaveGeneration.GCN)
                {
                    FacesFolder += "\\Animal Crossing";
                }
                else if (Save_Generation == SaveGeneration.NDS || Save_Generation == SaveGeneration.Wii)
                {
                    FacesFolder += "\\Wild World";
                }
                else if (Save_Generation == SaveGeneration.N3DS)
                {
                    FacesFolder += "\\New Leaf\\" + (Gender == 1 ? "Female" : "Male");
                }

                if (Directory.Exists(FacesFolder))
                {
                    string FaceImageFile = FacesFolder + "\\" + Index + ".bmp";
                    if (File.Exists(FaceImageFile))
                    {
                        try
                        {
                            FaceImage = Image.FromFile(FaceImageFile);
                        }
                        catch
                        {
                            MainForm.Debug_Manager.WriteLine(string.Format("Could not open face file: {0}", FaceImageFile), DebugLevel.Error);
                        }
                    }
                }
            }
            return(FaceImage);
        }