Ejemplo n.º 1
0
 public static Palette256 FromArchive(string file, bool ignoreCase, DATArchive archive)
 {
     if (!archive.Contains(file, ignoreCase))
     {
         return((Palette256)null);
     }
     return(Palette256.FromRawData(archive.ExtractFile(file, ignoreCase)));
 }
Ejemplo n.º 2
0
        public static PaletteTable FromArchive(string pattern, DATArchive archive)
        {
            PaletteTable table = new PaletteTable();

            table.LoadTables(pattern, archive);
            table.LoadPalettes(pattern, archive);
            return(table);
        }
Ejemplo n.º 3
0
 public static EPFImage FromArchive(string file, bool ignoreCase, DATArchive archive)
 {
     if (!archive.Contains(file, ignoreCase))
     {
         return((EPFImage)null);
     }
     return(EPFImage.FromRawData(archive.ExtractFile(file, ignoreCase), file));
 }
Ejemplo n.º 4
0
        public KhanArchive(string path, bool male)
        {
            string str = male ? "m" : "w";

            this.AD = DATArchive.FromFile(path + "\\khan" + str + "ad.dat");
            this.EH = DATArchive.FromFile(path + "\\khan" + str + "eh.dat");
            this.IM = DATArchive.FromFile(path + "\\khan" + str + "im.dat");
            this.NS = DATArchive.FromFile(path + "\\khan" + str + "ns.dat");
            this.TZ = DATArchive.FromFile(path + "\\khan" + str + "tz.dat");
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Loads a palette file from an archive (case-sensitive).
        /// </summary>
        /// <param name="file">Palette file to load.</param>
        /// <param name="archive">Data archive to load from.</param>
        /// <returns>256 color palette.</returns>
        public static Palette256 FromArchive(string file, DATArchive archive)
        {
            // Check if File Exists
            if (!archive.Contains(file))
            {
                return(null);
            }

            // Extract and Create File
            return(FromRawData(archive.ExtractFile(file)));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Loads an EPF image file from an archive.
        /// </summary>
        /// <param name="file">EPF image to load.</param>
        /// <param name="ignoreCase">Ignore case (noncase-sensitive).</param>
        /// <param name="archive">Data archive to load from.</param>
        /// <returns>EPF image.</returns>
        public static EPFImage FromArchive(string file, bool ignoreCase, DATArchive archive)
        {
            // Check if File Exists
            if (!archive.Contains(file, ignoreCase))
            {
                return(null);
            }

            // Extract and Create File
            return(FromRawData(archive.ExtractFile(file, ignoreCase)));
        }
Ejemplo n.º 7
0
 public int LoadPalettes(string pattern, DATArchive archive)
 {
     this.palettes.Clear();
     foreach (DATFileEntry file in archive.Files)
     {
         if (file.Name.ToUpper().EndsWith(".PAL") && file.Name.ToUpper().StartsWith(pattern.ToUpper()))
         {
             this.palettes.Add(Convert.ToInt32(Path.GetFileNameWithoutExtension(file.Name).Remove(0, pattern.Length)), Palette256.FromArchive(file.Name, archive));
         }
     }
     return(this.palettes.Count);
 }
Ejemplo n.º 8
0
 public int LoadTables(string pattern, DATArchive archive)
 {
     this.entries.Clear();
     foreach (DATFileEntry file in archive.Files)
     {
         if (file.Name.ToUpper().EndsWith(".TBL") && file.Name.ToUpper().StartsWith(pattern.ToUpper()))
         {
             string s = Path.GetFileNameWithoutExtension(file.Name).Remove(0, pattern.Length);
             if (s != "ani")
             {
                 StreamReader streamReader = new StreamReader((Stream) new MemoryStream(archive.ExtractFile(file)));
                 while (!streamReader.EndOfStream)
                 {
                     string[] strArray = streamReader.ReadLine().Split(' ');
                     if (strArray.Length == 3)
                     {
                         int int32_1 = Convert.ToInt32(strArray[0]);
                         int int32_2 = Convert.ToInt32(strArray[1]);
                         int int32_3 = Convert.ToInt32(strArray[2]);
                         int result  = 0;
                         if (int.TryParse(s, out result))
                         {
                             this.overrides.Add(new PaletteTableEntry(int32_1, int32_2, int32_3));
                         }
                         else
                         {
                             this.entries.Add(new PaletteTableEntry(int32_1, int32_2, int32_3));
                         }
                     }
                     else if (strArray.Length == 2)
                     {
                         int int32_1 = Convert.ToInt32(strArray[0]);
                         int max     = int32_1;
                         int int32_2 = Convert.ToInt32(strArray[1]);
                         int result  = 0;
                         if (int.TryParse(s, out result))
                         {
                             this.overrides.Add(new PaletteTableEntry(int32_1, max, int32_2));
                         }
                         else
                         {
                             this.entries.Add(new PaletteTableEntry(int32_1, max, int32_2));
                         }
                     }
                 }
                 streamReader.Close();
             }
         }
     }
     return(this.entries.Count);
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Loads a tileset from an archive.
        /// </summary>
        /// <param name="file">Tileset to load.</param>
        /// <param name="ignoreCase">Ignore case (noncase-sensitive).</param>
        /// <param name="archive">Data archive to load from.</param>
        /// <returns>Number of tiles loaded.</returns>
        public static Tileset FromArchive(string file, bool ignoreCase, DATArchive archive)
        {
            // Check if File Exists
            if (!archive.Contains(file, ignoreCase))
            {
                return(null);
            }

            // Extract and Create File
            Tileset tileset = LoadTiles(new MemoryStream(archive.ExtractFile(file, ignoreCase)));

            tileset.name     = Path.GetFileNameWithoutExtension(file).ToUpper();
            tileset.filename = file;

            // Return Tileset
            return(tileset);
        }
Ejemplo n.º 10
0
        public static EPFImage FromArchive(string fileName, bool ignoreCase, DATArchive archive)
        {
            int index1 = archive.IndexOf(fileName, true);

            if (index1 == -1)
            {
                return((EPFImage)null);
            }
            using (FileStream fileStream = File.Open(archive.FileName, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                using (BinaryReader binaryReader = new BinaryReader((Stream)fileStream))
                {
                    EPFImage epfImage = new EPFImage();
                    epfImage.Name = Path.GetFileName(fileName).ToLower();
                    fileStream.Seek(archive.Files[index1].StartAddress, SeekOrigin.Begin);
                    epfImage.expectedFrames = (int)binaryReader.ReadUInt16();
                    epfImage.width          = (int)binaryReader.ReadUInt16();
                    epfImage.height         = (int)binaryReader.ReadUInt16();
                    epfImage.unknown        = (int)binaryReader.ReadUInt16();
                    epfImage.tocAddress     = (long)(binaryReader.ReadUInt32() + 12U);
                    if (epfImage.ExpectedFrames <= 0)
                    {
                        return((EPFImage)null);
                    }
                    epfImage.frames = new EPFFrame[epfImage.ExpectedFrames];
                    for (int index2 = 0; index2 < epfImage.ExpectedFrames; ++index2)
                    {
                        binaryReader.BaseStream.Seek(archive.Files[index1].StartAddress + epfImage.TOCAddress + (long)(index2 * 16), SeekOrigin.Begin);
                        int  top    = (int)binaryReader.ReadUInt16();
                        int  left   = (int)binaryReader.ReadUInt16();
                        int  num1   = (int)binaryReader.ReadUInt16();
                        int  width  = (int)binaryReader.ReadUInt16() - left;
                        int  height = num1 - top;
                        uint num2   = binaryReader.ReadUInt32() + 12U;
                        uint num3   = binaryReader.ReadUInt32() + 12U;
                        binaryReader.BaseStream.Seek(archive.Files[index1].StartAddress + (long)num2, SeekOrigin.Begin);
                        byte[] rawData = (long)(num3 - num2) == (long)(width * height) ? binaryReader.ReadBytes((int)num3 - (int)num2) : binaryReader.ReadBytes((int)(epfImage.TOCAddress - (long)num2));
                        epfImage.Frames[index2] = new EPFFrame(left, top, width, height, rawData);
                    }
                    return(epfImage);
                }
            }
        }
Ejemplo n.º 11
0
 private void Form1_Shown(object sender, EventArgs e)
 {
     foreach (DATFileEntry file in DATArchive.FromFile(filename).Files)
     {
         Match match = new Regex("(item)(\\d+)(\\.epf)", RegexOptions.IgnoreCase | RegexOptions.Singleline).Match(file.Name);
         if (match.Success)
         {
             int num = int.Parse(match.Groups[2].ToString());
             if (num < this.minimum)
             {
                 this.minimum = num;
             }
             if (num > this.maximum)
             {
                 this.maximum = num;
             }
         }
     }
     DisplayItems(this.minimum);
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Loads the default palettes from the specified archive.
        /// </summary>
        /// <param name="pattern">Pattern to check for (prefix string).</param>
        /// <param name="archive">Data archive.</param>
        /// <returns>Number of palettes loaded.</returns>
        public int LoadPalettes(string pattern, DATArchive archive)
        {
            palettes.Clear();
            foreach (DATFileEntry file in archive.Files)
            {
                // Check for Palette
                if (file.Name.ToUpper().EndsWith(".PAL") && file.Name.ToUpper().StartsWith(pattern.ToUpper()))
                {
                    // Get Index
                    int index = Convert.ToInt32(
                        Path.GetFileNameWithoutExtension(file.Name).Remove(0, pattern.Length));

                    // Get File from Archive
                    Palette256 palette = Palette256.FromArchive(file.Name, archive);

                    // Add Palette
                    palettes.Add(index, palette);
                }
            }
            return(palettes.Count);
        }
Ejemplo n.º 13
0
        private void DisplayItems(int number)
        {
            DATArchive   archive      = DATArchive.FromFile(filename);
            PaletteTable paletteTable = new PaletteTable("item", archive);

            foreach (DATFileEntry file in archive.Files)
            {
                Match match = new Regex("(item)(\\d+)(\\.epf)", RegexOptions.IgnoreCase | RegexOptions.Singleline).Match(file.Name);
                if (match.Success)
                {
                    EPFImage epfImage = EPFImage.FromArchive(file.Name, archive);
                    int      num1     = int.Parse(match.Groups[2].ToString());
                    if (num1 == number)
                    {
                        panelItemFill.Controls.Clear();
                        for (int index = 0; index < epfImage.Frames.Length; ++index)
                        {
                            int        num2       = (num1 - 1) * 266 + (index + 1);
                            PictureBox pictureBox = new PictureBox();
                            pictureBox.Name   = string.Format("Sprite ID: {0} ({1} for Npc)", (object)num2, (object)(num2 + 16384));
                            pictureBox.Image  = (Image)DAGraphics.RenderImage(epfImage.Frames[index], paletteTable[num1 * 266]);
                            pictureBox.Click += (EventHandler)((o, ea) =>
                            {
                                txtSprite.Text = (o as PictureBox).Name;
                            });
                            pictureBox.BorderStyle = BorderStyle.FixedSingle;
                            if (pictureBox.Image.Width > 1 || pictureBox.Image.Height > 1)
                            {
                                panelItemFill.Controls.Add((Control)pictureBox);
                            }
                        }
                        break;
                    }
                }
            }
            current             = number;
            buttonLeft.Enabled  = this.current > this.minimum;
            buttonRight.Enabled = this.current < this.maximum;
        }
Ejemplo n.º 14
0
        public void DisplayItem(int SpriteID)
        {
            DATArchive   archive      = DATArchive.FromFile(filename);
            PaletteTable paletteTable = new PaletteTable("item", archive);

            foreach (DATFileEntry file in archive.Files)
            {
                Match match = new Regex("(item)(\\d+)(\\.epf)", RegexOptions.IgnoreCase | RegexOptions.Singleline).Match(file.Name);
                if (match.Success)
                {
                    EPFImage epfImage = EPFImage.FromArchive(file.Name, archive);
                    int      num1     = int.Parse(match.Groups[2].ToString());
                    for (int index = 0; index < epfImage.Frames.Length; ++index)
                    {
                        int num2 = (num1 - 1) * 266 + (index + 1);
                        if (num2 == SpriteID)
                        {
                            Bitmap bmp = new Bitmap(DAGraphics.RenderImage(epfImage.Frames[index], paletteTable[num1 * 266]));
                            picSelectedItem.Image = bmp;
                        }
                    }
                }
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Loads the default tables from the specified archive.
        /// </summary>
        /// <param name="pattern">Pattern to check for (prefix string).</param>
        /// <param name="archive">Data archive.</param>
        /// <returns>Number of table entries loaded.</returns>
        public int LoadTables(string pattern, DATArchive archive)
        {
            entries.Clear();
            foreach (DATFileEntry file in archive.Files)
            {
                // Check for Palette
                if (file.Name.ToUpper().EndsWith(".TBL") && file.Name.ToUpper().StartsWith(pattern.ToUpper()))
                {
                    // Get Index
                    string tableName =
                        Path.GetFileNameWithoutExtension(file.Name).Remove(0, pattern.Length);

                    if (tableName != "ani")
                    {
                        // Get Stream and Reader for Data
                        MemoryStream stream = new MemoryStream(archive.ExtractFile(file));
                        StreamReader reader = new StreamReader(stream);

                        #region Read Lines and Parse Values
                        while (!reader.EndOfStream)
                        {
                            string   line      = reader.ReadLine();
                            string[] lineSplit = line.Split(' ');

                            if (lineSplit.Length == 3)
                            {
                                int min = Convert.ToInt32(lineSplit[0]);
                                int max = Convert.ToInt32(lineSplit[1]);
                                int pal = Convert.ToInt32(lineSplit[2]);

                                int index = 0;
                                if (int.TryParse(tableName, out index))
                                {
                                    overrides.Add(new PaletteTableEntry(min, max, pal));
                                }
                                else
                                {
                                    entries.Add(new PaletteTableEntry(min, max, pal));
                                }
                            }
                            else if (lineSplit.Length == 2)
                            {
                                int min = Convert.ToInt32(lineSplit[0]);
                                int max = min;
                                int pal = Convert.ToInt32(lineSplit[1]);

                                int index = 0;
                                if (int.TryParse(tableName, out index))
                                {
                                    overrides.Add(new PaletteTableEntry(min, max, pal));
                                }
                                else
                                {
                                    entries.Add(new PaletteTableEntry(min, max, pal));
                                }
                            }
                        }
                        reader.Close();
                        #endregion
                    }
                }
            }

            return(entries.Count);
        }
Ejemplo n.º 16
0
 public PaletteTable(string pattern, DATArchive archive)
 {
     this.LoadTables(pattern, archive);
     this.LoadPalettes(pattern, archive);
 }
Ejemplo n.º 17
0
        public static SPFImage FromArchive(string file, DATArchive archive)
        {
            if (!archive.Contains(file))
            {
                return(null);
            }

            var stream = new MemoryStream(archive.ExtractFile(file));
            var reader = new BinaryReader(stream);

            var spf = new SPFImage();

            int unknown1 = reader.ReadInt32();
            int unknown2 = reader.ReadInt32();

            spf.colorFormat = reader.ReadInt32();

            if (spf.colorFormat == 0)
            {
                var    palette = new Palette256();
                byte[] alpha   = reader.ReadBytes(512);
                byte[] color   = reader.ReadBytes(512);
                for (int i = 0; i < 256; ++i)
                {
                    ushort val = BitConverter.ToUInt16(color, i * 2);
                    int    b   = 8 * ((int)val % 32);
                    int    g   = 8 * ((int)val / 32 % 32);
                    int    r   = 8 * ((int)val / 32 / 32 % 32);
                    palette[i] = Color.FromArgb(r, g, b);
                }
                spf.palette = palette;
            }

            spf.expectedFrames = reader.ReadInt32();
            spf.frames         = new SPFFrame[spf.expectedFrames];

            for (int i = 0; i < spf.expectedFrames; ++i)
            {
                int left         = reader.ReadInt16();
                int top          = reader.ReadInt16();
                int width        = reader.ReadInt16();
                int height       = reader.ReadInt16();
                int unknown3     = reader.ReadInt32();
                int unknown4     = reader.ReadInt32();
                int startAddress = reader.ReadInt32();
                int byteWidth    = reader.ReadInt32();
                int length       = reader.ReadInt32();
                int semiLength   = reader.ReadInt32();

                spf.frames[i] = new SPFFrame(left, top, width, height, startAddress, byteWidth, length, semiLength);
            }

            spf.length = reader.ReadInt32();

            for (int i = 0; i < spf.expectedFrames; ++i)
            {
                int    length = spf.frames[i].Length;
                byte[] data   = reader.ReadBytes(length);
                spf.frames[i].SetData(data);
            }

            reader.Close();

            return(spf);
        }