Esempio n. 1
0
 public static void WriteEOFC(this Stream stream, int ID)
 {
     PDHead Header = new PDHead {
         Format = Main.Format.F2LE, ID = ID,
         Lenght = 0x20, Signature = 0x43464F45,
     }; stream.Write(Header);
 }
Esempio n. 2
0
 public static void Write(this Stream stream, PDHead Header, bool X = false)
 {
     stream.Write(Header.Signature);
     stream.Write(Header.DataSize);
     stream.Write((Header.Format < Main.Format.X && !X) ? 0x40 : 0x20);
     if (Header.Format == Main.Format.F2BE)
     {
         stream.Write(0x18000000);
     }
     else
     {
         stream.Write(0x10000000);
     }
     stream.Write(Header.ID);
     stream.Write(Header.SectionSize);
     stream.Write(0x00);
     stream.Write(0x00);
     if (Header.Format < Main.Format.X && !X)
     {
         stream.Write(Header.Format < Main.Format.MGF ? (int)((Header.SectionSignature ^
                                                               (Header.DataSize * (long)Header.Signature)) - Header.ID + Header.SectionSize) : 0);
         stream.Write(0x00);
         stream.Write(0x00L);
         stream.Write(Header.InnerSignature);
         stream.Write(0x00);
         stream.Write(0x00L);
     }
 }
Esempio n. 3
0
        public static PDHead ReadHeader(this Stream stream)
        {
            long   Position = stream.LongPosition;
            PDHead Header   = new PDHead
            {
                Format   = Main.Format.F2LE, Signature = stream.ReadInt32(),
                DataSize = stream.ReadInt32(), Lenght = stream.ReadInt32()
            };

            if (stream.ReadUInt32() == 0x18000000)
            {
                Header.Format = Main.Format.F2BE;
            }
            Header.ID          = stream.ReadInt32();
            Header.SectionSize = stream.ReadInt32();
            if (Header.Lenght == 0x40)
            {
                stream.Position       = 0x30;
                Header.InnerSignature = stream.ReadInt32();
            }
            stream.IsBE             = Header.Format == Main.Format.F2BE;
            stream.Format           = Header.Format;
            stream.LongPosition     = Position + Header.Lenght;
            Header.SectionSignature = stream.ReadInt32Endian();
            return(Header);
        }
Esempio n. 4
0
        public static POF AddPOF(this PDHead Header)
        {
            POF POF = new POF {
                Offsets = new List <long>(), POFOffsets =
                    new List <long>(), Offset = Header.DataSize + Header.Lenght
            };

            return(POF);
        }
Esempio n. 5
0
        public void MsgPackReader(string file, bool JSON)
        {
            int i0 = 0;
            int i1 = 0;

            this.Dex = new EXP[0];
            Header   = new PDHead();

            MsgPack MsgPack = file.ReadMP(JSON);

            if (MsgPack.Element("Dex", out MsgPack Dex, typeof(object[])))
            {
                MsgPack Temp = new MsgPack();

                this.Dex = new EXP[((object[])Dex.Object).Length];
                MsgPack EXP = new MsgPack();
                for (i0 = 0; i0 < this.Dex.Length; i0++)
                {
                    if (Dex[i0].GetType() == typeof(MsgPack))
                    {
                        this.Dex[i0]      = new EXP();
                        EXP               = (MsgPack)Dex[i0];
                        this.Dex[i0].Name = EXP.ReadString("Name");
                        if (EXP.Element("Main", out Temp, typeof(object[])))
                        {
                            this.Dex[i0].Main = new List <EXPElement>
                            {
                                Capacity = ((object[])Temp.Object).Length
                            };
                            for (i1 = 0; i1 < this.Dex[i0].Main.Capacity; i1++)
                            {
                                if (Temp[i1].GetType() == typeof(MsgPack))
                                {
                                    this.Dex[i0].Main.Add(ReadEXP((MsgPack)Temp[i1]));
                                }
                            }
                        }
                        if (EXP.Element("Eyes", out Temp, typeof(object[])))
                        {
                            this.Dex[i0].Eyes = new List <EXPElement>
                            {
                                Capacity = ((object[])Temp.Object).Length
                            };
                            for (i1 = 0; i1 < this.Dex[i0].Eyes.Capacity; i1++)
                            {
                                if (Temp[i1].GetType() == typeof(MsgPack))
                                {
                                    this.Dex[i0].Eyes.Add(ReadEXP((MsgPack)Temp[i1]));
                                }
                            }
                        }
                    }
                }
            }
            MsgPack = null;
        }
Esempio n. 6
0
        public void MsgPackReader(string file, bool JSON)
        {
            int i0 = 0;
            int i1 = 0;

            this.Dex = new EXP[0];
            Header   = new PDHead();

            MsgPack MsgPack = file.ReadMPAllAtOnce(JSON);

            if (!MsgPack.Element <MsgPack>("Dex", out MsgPack Dex))
            {
                return;
            }

            this.Dex = new EXP[Dex.Array.Length];
            for (i0 = 0; i0 < this.Dex.Length; i0++)
            {
                if (Dex[i0] is MsgPack EXP)
                {
                    this.Dex[i0] = new EXP {
                        Name = EXP.ReadString("Name")
                    };

                    if (EXP.Element <MsgPack>("Main", out MsgPack Main))
                    {
                        this.Dex[i0].Main = new List <EXPElement>();
                        for (i1 = 0; i1 < Main.Array.Length; i1++)
                        {
                            if (Main[i1] is MsgPack Exp)
                            {
                                this.Dex[i0].Main.Add(ReadEXP(Exp));
                            }
                        }
                    }
                    if (EXP.Element <MsgPack>("Eyes", out MsgPack Eyes))
                    {
                        this.Dex[i0].Eyes = new List <EXPElement>();
                        for (i1 = 0; i1 < Eyes.Array.Length; i1++)
                        {
                            if (Eyes[i1] is MsgPack Exp)
                            {
                                this.Dex[i0].Eyes.Add(ReadEXP(Exp));
                            }
                        }
                    }
                }
            }
            MsgPack = MsgPack.New;
        }
Esempio n. 7
0
 public static void Write(this Stream stream, PDHead Header)
 {
     stream.Write(Header.Signature);
     stream.Write(Header.DataSize);
     stream.Write(Header.Lenght);
     if (Header.Format == Main.Format.F2BE)
     {
         stream.Write(0x18000000);
     }
     else
     {
         stream.Write(0x10000000);
     }
     stream.Write(Header.ID);
     stream.Write(Header.SectionSize);
     stream.Write(0x00);
     stream.Write(0x00);
 }
Esempio n. 8
0
        public int STRReader(string filepath, string ext)
        {
            Stream reader = File.OpenReader(filepath + ext);

            Header           = new PDHead();
            reader.Format    = Main.Format.F;
            Header.Signature = reader.ReadInt32();
            if (Header.Signature == 0x41525453)
            {
                Header          = reader.ReadHeader(true);
                POF             = Header.AddPOF();
                reader.Position = Header.Lenght;

                long Count = reader.ReadInt32Endian();
                Offset = reader.ReadInt32Endian();

                if (Offset == 0)
                {
                    Offset        = Count;
                    OffsetX       = reader.ReadInt64();
                    Count         = reader.ReadInt64();
                    reader.Offset = Header.Lenght;
                    reader.Format = Main.Format.X;
                }
                reader.LongPosition = reader.IsX ? Offset + reader.Offset : Offset;

                STRs = new String[Count];
                for (int i = 0; i < Count; i++)
                {
                    STRs[i].StrOffset = reader.GetOffset(ref POF).ReadInt32Endian();
                    STRs[i].ID        = reader.ReadInt32Endian();
                    if (reader.IsX)
                    {
                        STRs[i].StrOffset += (int)OffsetX;
                    }
                }

                for (int i = 0; i < Count; i++)
                {
                    reader.LongPosition = STRs[i].StrOffset + (reader.IsX ? reader.Offset : 0);
                    STRs[i].Str         = reader.NullTerminatedUTF8();
                }

                reader.Position = POF.Offset;
                reader.ReadPOF(ref POF);
            }
            else
            {
                reader.Position -= 4;
                int Count = 0;
                for (int a = 0, i = 0; reader.Position > 0 && reader.Position < reader.Length; i++, Count++)
                {
                    a = reader.ReadInt32();
                    if (a == 0)
                    {
                        break;
                    }
                }
                STRs = new String[Count];

                for (int i = 0; i < Count; i++)
                {
                    reader.LongPosition = STRs[i].StrOffset + (reader.IsX ? reader.Offset : 0);
                    STRs[i].ID          = i;
                    STRs[i].Str         = reader.NullTerminatedUTF8();
                }
            }

            reader.Close();
            return(1);
        }
Esempio n. 9
0
 public STR()
 {
     Offset = 0; OffsetX = 0; STRs = null; POF = null; Header = new PDHead();
 }
Esempio n. 10
0
 public DEX()
 {
     Dex = null; Header = new PDHead();
 }
Esempio n. 11
0
        public int DEXReader(string filepath, string ext)
        {
            Header = new PDHead();
            IO     = File.OpenReader(filepath + ext);

            Header.Format    = Main.Format.F;
            Header.Signature = IO.ReadInt32();
            if (Header.Signature == 0x43505845)
            {
                Header = IO.ReadHeader(true);
            }
            if (Header.Signature != 0x64)
            {
                return(0);
            }

            Offset = IO.Position - 0x4;
            Dex    = new EXP[IO.ReadInt32()];
            int DEXOffset = IO.ReadInt32();

            if (IO.ReadInt32() == 0x00)
            {
                Header.Format = Main.Format.X;
            }
            int DEXNameOffset = IO.ReadInt32();

            if (Header.IsX)
            {
                IO.ReadInt32();
            }

            IO.Seek(DEXOffset + Offset, 0);
            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                Dex[i0] = new EXP {
                    Main = new List <EXPElement>(), Eyes = new List <EXPElement>()
                }
            }
            ;

            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                Dex[i0].MainOffset = IO.ReadInt32();
                if (Header.IsX)
                {
                    IO.ReadInt32();
                }
                Dex[i0].EyesOffset = IO.ReadInt32();
                if (Header.IsX)
                {
                    IO.ReadInt32();
                }
            }
            IO.Seek(DEXNameOffset + Offset, 0);
            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                Dex[i0].NameOffset = IO.ReadInt32();
                if (Header.IsX)
                {
                    IO.ReadInt32();
                }
            }

            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                EXPElement element = new EXPElement();
                IO.Seek(Dex[i0].MainOffset + Offset, 0);
                while (true)
                {
                    element.Frame = IO.ReadSingle();
                    element.Both  = IO.ReadUInt16();
                    element.ID    = IO.ReadUInt16();
                    element.Value = IO.ReadSingle();
                    element.Trans = IO.ReadSingle();
                    Dex[i0].Main.Add(element);

                    if (element.Frame == 999999 || element.Both == 0xFFFF)
                    {
                        break;
                    }
                }

                IO.Seek(Dex[i0].EyesOffset + Offset, 0);
                while (true)
                {
                    element.Frame = IO.ReadSingle();
                    element.Both  = IO.ReadUInt16();
                    element.ID    = IO.ReadUInt16();
                    element.Value = IO.ReadSingle();
                    element.Trans = IO.ReadSingle();
                    Dex[i0].Eyes.Add(element);

                    if (element.Frame == 999999 || element.Both == 0xFFFF)
                    {
                        break;
                    }
                }

                IO.Seek(Dex[i0].NameOffset + Offset, 0);
                Dex[i0].Name = IO.NullTerminatedUTF8();
            }

            IO.Close();
            return(1);
        }
Esempio n. 12
0
        public void DEXWriter(string filepath, Main.Format Format)
        {
            Header = new PDHead()
            {
                Format = Format
            };
            IO        = File.OpenWriter(filepath + (Header.Format > Main.Format.F ? ".Dex" : ".bin"), true);
            IO.Format = Header.Format;

            if (IO.Format > Main.Format.F)
            {
                Header.Lenght      = 0x20;
                Header.DataSize    = 0x00;
                Header.Signature   = 0x43505845;
                Header.SectionSize = 0x00;
                IO.Write(Header);
            }

            IO.Write(0x64);
            IO.Write(Dex.Length);

            if (Header.IsX)
            {
                IO.Write((long)0x28);
            }
            else
            {
                IO.Write(0x20);
            }
            if (Header.IsX)
            {
                IO.Write((long)0x00);
            }
            else
            {
                IO.Write(0x00);
            }

            int Position0 = IO.Position;

            IO.Write((long)0x00);
            IO.Write((long)0x00);

            for (int i = 0; i < Dex.Length * 3; i++)
            {
                if (Header.IsX)
                {
                    IO.Write((long)0x00);
                }
                else
                {
                    IO.Write(0x00);
                }
            }

            IO.Align(0x20, true);

            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                Dex[i0].MainOffset = IO.Position - Header.Lenght;
                for (int i1 = 0; i1 < Dex[i0].Main.Count; i1++)
                {
                    IO.Write(Dex[i0].Main[i1].Frame);
                    IO.Write(Dex[i0].Main[i1].Both);
                    IO.Write(Dex[i0].Main[i1].ID);
                    IO.Write(Dex[i0].Main[i1].Value);
                    IO.Write(Dex[i0].Main[i1].Trans);
                }
                IO.Align(0x20, true);

                Dex[i0].EyesOffset = IO.Position - Header.Lenght;
                for (int i1 = 0; i1 < Dex[i0].Eyes.Count; i1++)
                {
                    IO.Write(Dex[i0].Eyes[i1].Frame);
                    IO.Write(Dex[i0].Eyes[i1].Both);
                    IO.Write(Dex[i0].Eyes[i1].ID);
                    IO.Write(Dex[i0].Eyes[i1].Value);
                    IO.Write(Dex[i0].Eyes[i1].Trans);
                }
                IO.Align(0x20, true);
            }
            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                Dex[i0].NameOffset = IO.Position - Header.Lenght;
                IO.Write(Dex[i0].Name + "\0");
            }
            IO.Align(0x10, true);

            if (Header.IsX)
            {
                IO.Seek(Header.Lenght + 0x28, 0);
            }
            else
            {
                IO.Seek(Header.Lenght + 0x20, 0);
            }
            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                IO.Write(Dex[i0].MainOffset);
                if (Header.IsX)
                {
                    IO.Write(0x00);
                }
                IO.Write(Dex[i0].EyesOffset);
                if (Header.IsX)
                {
                    IO.Write(0x00);
                }
            }
            int Position1 = IO.Position - Header.Lenght;

            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                IO.Write(Dex[i0].NameOffset);
                if (Header.IsX)
                {
                    IO.Write(0x00);
                }
            }

            if (Header.IsX)
            {
                IO.Seek(Position0 - 8, 0);
            }
            else
            {
                IO.Seek(Position0 - 4, 0);
            }
            IO.Write(Position1);

            if (IO.Format > Main.Format.F)
            {
                Offset = IO.Length - Header.Lenght;
                IO.Seek(IO.Length, 0);
                IO.WriteEOFC(0);
                IO.Seek(0, 0);
                Header.DataSize    = Offset;
                Header.SectionSize = Offset;
                IO.Write(Header);
            }
            IO.Close();
        }
Esempio n. 13
0
 public POF()
 {
     Type       = 0; Lenght = 0; Offset = 0; LastOffset = 0; Offsets = new List <long>();
     POFOffsets = new List <long>(); Header = new PDHead();
 }
Esempio n. 14
0
        public void DEXWriter(string filepath, Main.Format Format)
        {
            Header = new PDHead()
            {
                Format = Format
            };
            IO        = File.OpenWriter(filepath + (Format > Main.Format.F ? ".dex" : ".bin"), true);
            IO.Format = Format;

            IO.Offset = Format > Main.Format.F ? 0x20 : 0;
            IO.Write(0x64);
            IO.Write(Dex.Length);

            IO.WriteX(Header.IsX ? 0x28 : 0x20);
            IO.WriteX(0x00);

            int Position0 = IO.Position;

            IO.Write(0x00L);
            IO.Write(0x00L);

            for (int i = 0; i < Dex.Length * 3; i++)
            {
                IO.WriteX(0x00);
            }

            IO.Align(0x20, true);

            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                Dex[i0].MainOffset = IO.Position;
                for (int i1 = 0; i1 < Dex[i0].Main.Count; i1++)
                {
                    IO.Write(Dex[i0].Main[i1].Frame);
                    IO.Write(Dex[i0].Main[i1].Both);
                    IO.Write(Dex[i0].Main[i1].ID);
                    IO.Write(Dex[i0].Main[i1].Value);
                    IO.Write(Dex[i0].Main[i1].Trans);
                }
                IO.Align(0x20, true);

                Dex[i0].EyesOffset = IO.Position;
                for (int i1 = 0; i1 < Dex[i0].Eyes.Count; i1++)
                {
                    IO.Write(Dex[i0].Eyes[i1].Frame);
                    IO.Write(Dex[i0].Eyes[i1].Both);
                    IO.Write(Dex[i0].Eyes[i1].ID);
                    IO.Write(Dex[i0].Eyes[i1].Value);
                    IO.Write(Dex[i0].Eyes[i1].Trans);
                }
                IO.Align(0x20, true);
            }
            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                Dex[i0].NameOffset = IO.Position;
                IO.Write(Dex[i0].Name + "\0");
            }
            IO.Align(0x10, true);

            IO.Position = Header.IsX ? 0x28 : 0x20;
            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                IO.WriteX(Dex[i0].MainOffset);
                IO.WriteX(Dex[i0].EyesOffset);
            }
            int Position1 = IO.Position;

            for (int i0 = 0; i0 < Dex.Length; i0++)
            {
                IO.WriteX(Dex[i0].NameOffset);
            }

            IO.Position = Position0 - (Header.IsX ? 8 : 4);
            IO.Write(Position1);

            if (Format > Main.Format.F)
            {
                Offset      = IO.Length;
                IO.Offset   = 0;
                IO.Position = IO.Length;
                IO.WriteEOFC(0);
                IO.Position        = 0;
                Header.DataSize    = Offset;
                Header.SectionSize = Offset;
                Header.Signature   = 0x43505845;
                IO.Write(Header, true);
            }
            IO.Close();
        }