Example #1
0
        private void buttonReadGSFPack_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                GsfPackage    gsfPackage = GsfPackage.Read(ofd.FileName);
                StringBuilder sb         = new StringBuilder();
                sb.Append("GSF Pack: ").Append(gsfPackage.Name).Append("\r\n");
                int modelNumber  = 0;
                int meshNumber   = 0;
                int modelsAmount = gsfPackage.Models.Count;
                int meshesAmount = 0;
                Paraworld.Resources.Graphics.Model model;
                model        = gsfPackage.Models[modelNumber];
                meshesAmount = model.meshes.Count;
                Paraworld.Resources.Graphics.Mesh mesh;
                mesh = model.meshes[meshNumber];
                string baseTextureFilename = @"C:\Program Files (x86)\Sunflowers\ParaWorld\Data\Base\Texture\";
                string textureFilename     = baseTextureFilename + gsfPackage.Materials[model.materialIndices[0]].textureFilename1.Replace('/', '\\').Replace(".tga", "_(0256).dds");
                if (!File.Exists(textureFilename))
                {
                    textureFilename = null;
                }
                TestControls.MeshViewer mv = (TestControls.MeshViewer)elementHostMeshViewer.Child;
                mv.SetMesh(mesh.BBox, mesh.Vertices, mesh.Triangles, mesh.UVMap, textureFilename);
                sb.Append("Model: ").Append((modelNumber + 1).ToString()).Append("/").Append(modelsAmount.ToString()).Append("\r\n");
                sb.Append("Model Name: ").Append(model.name).Append("\r\n");
                sb.Append("Mesh: ").Append((meshNumber + 1).ToString()).Append("/").Append(meshesAmount.ToString()).Append("\r\n");
                richTextBoxLastError.Text = sb.ToString();
            }
        }
Example #2
0
 public override bool Read(BinaryReader br)
 {
     objectType          = br.ReadInt32();
     nameAddress         = (int)GsfPackage.ReadRelativeOffset(br);
     data1Address        = GsfPackage.ReadRelativeOffset(br);
     data1Count          = br.ReadInt32();
     materialDefsAddress = GsfPackage.ReadRelativeOffset(br);
     materialDefsCount   = br.ReadInt32();
     unk1             = br.ReadInt32();
     unk2             = br.ReadInt32();
     unk3             = br.ReadInt32();
     unk4             = br.ReadInt32();
     unk5             = br.ReadInt32();
     unk6             = br.ReadInt32();
     unk7             = br.ReadInt32();
     minX             = br.ReadSingle();
     minY             = br.ReadSingle();
     minZ             = br.ReadSingle();
     maxX             = br.ReadSingle();
     maxY             = br.ReadSingle();
     maxZ             = br.ReadSingle();
     childDefsAddress = GsfPackage.ReadRelativeOffset(br);
     childsDefsCount  = br.ReadInt32();
     return(true);
 }
Example #3
0
        public override bool Read(BinaryReader br)
        {
            int c = GetCount();     // Will throw an exception if count is not yet set

            entries = new List <BaseChunk>();
            Entry entry;

            for (int i = 0; i < c; i++)
            {
                entry = new Entry();
                entry.Read(br);
                entries.Add(entry);
            }
            for (int i = 0; i < c; i++)
            {
                entry = (Entry)entries[i];
                if (entry.defsAddress != null && entry.count > 0)
                {
                    br.BaseStream.Seek(entry.defsAddress.Value, SeekOrigin.Begin);
                    for (int j = 0; j < entry.count; j++)
                    {
                        int address = (int)GsfPackage.ReadRelativeOffset(br);
                        int val     = br.ReadInt32();
                        entry.childsAddress.Add(Tuple.Create(address, val));
                    }
                }
            }
            return(true);
        }
Example #4
0
 public override bool Write(BinaryWriter bw)
 {
     bw.Write(objectsTableAddress);
     GsfPackage.WriteNullablePointer(bw, defsAddress);
     bw.Write(count);
     return(true);
 }
Example #5
0
        public override bool Write(BinaryWriter bw)
        {
            if (entries == null)
            {
                return(true);
            }
            Entry entry;

            for (int i = 0; i < entries.Count; i++)
            {
                entry = (Entry)entries[i];
                entry.Write(bw);
            }
            for (int i = 0; i < entries.Count; i++)
            {
                entry = (Entry)entries[i];
                if (entry.childsAddress != null)
                {
                    for (int j = 0; j < entry.childsAddress.Count; j++)
                    {
                        GsfPackage.WriteNullablePointer(bw, entry.childsAddress[j].Item1);
                        bw.Write(entry.childsAddress[j].Item2);
                    }
                }
            }
            return(true);
        }
Example #6
0
 public override bool Read(BinaryReader br)
 {
     materialsCount             = br.ReadInt32();
     materialsTableOffset       = (int)GsfPackage.ReadRelativeOffset(br);
     materialsTableEntriesCount = br.ReadInt32();
     return(true);
 }
Example #7
0
 public override bool Read(BinaryReader br)
 {
     dummyZero          = br.ReadInt32();
     gui                = br.ReadUInt32();
     dummyZero          = br.ReadInt32();
     transformationData = TransformationData.FromReader(br);
     c1           = br.ReadInt32();
     a1           = GsfPackage.ReadRelativeOffset(br);
     c1           = br.ReadInt32();
     a2           = GsfPackage.ReadRelativeOffset(br);
     c2           = br.ReadInt32();
     c2           = br.ReadInt32();
     zero         = br.ReadInt32();
     type00Blocks = new List <Type00Block>();
     type00Datas  = new List <Type00Data>();
     if (!ReadBlocks(br, a1, c1, type00Blocks))
     {
         return(false);
     }
     if (!ReadDatas(br, a2, c2))
     {
         return(false);
     }
     return(true);
 }
Example #8
0
 public override bool Write(BinaryWriter bw)
 {
     bw.Write(objectType);
     bw.Write(nameAddress);
     GsfPackage.WriteNullablePointer(bw, data1Address);
     bw.Write(data1Count);
     GsfPackage.WriteNullablePointer(bw, materialDefsAddress);
     bw.Write(materialDefsCount);
     bw.Write(unk1);
     bw.Write(unk2);
     bw.Write(unk3);
     bw.Write(unk4);
     bw.Write(unk5);
     bw.Write(unk6);
     bw.Write(unk7);
     bw.Write(minX);
     bw.Write(minY);
     bw.Write(minZ);
     bw.Write(maxX);
     bw.Write(maxY);
     bw.Write(maxZ);
     GsfPackage.WriteNullablePointer(bw, childDefsAddress);
     bw.Write(childsDefsCount);
     return(true);
 }
Example #9
0
 public override bool Read(BinaryReader br)
 {
     offset       = GsfPackage.ReadRelativeOffset(br);
     unknown2     = br.ReadInt32();
     meshesData   = new List <MeshData>();
     frameIndices = new List <short>();
     if (offset != null)
     {
         br.BaseStream.Seek(offset.Value, SeekOrigin.Begin);
         Graphics.BoundingBox bb = Graphics.BoundingBox.FromReader(br);
         // TODO: Use this bounding box in addition (transformation) to the ones from each mesh
         int amount1             = br.ReadInt32();
         int meshesAddress       = GsfPackage.ReadRelativeOffset(br).Value;
         int amount2             = br.ReadInt32();
         int frameIndicesAddress = GsfPackage.ReadRelativeOffset(br).Value;
         int amount3             = br.ReadInt32();
         br.BaseStream.Seek(meshesAddress, SeekOrigin.Begin);    // Usually should not be needed
         for (int i = 0; i < amount2; i++)
         {
             MeshData md = MeshData.ReadHeader(br);
             meshesData.Add(md);
         }
         for (int i = 0; i < amount2; i++)
         {
             meshesData[i].Read(br);
         }
         br.BaseStream.Seek(frameIndicesAddress, SeekOrigin.Begin);
         for (int i = 0; i < amount3; i++)
         {
             short index = br.ReadInt16();
             frameIndices.Add(index);
         }
     }
     return(true);
 }
Example #10
0
 public override bool Read(BinaryReader br)
 {
     objectsTableAddress = (int)GsfPackage.ReadRelativeOffset(br);
     defsAddress         = GsfPackage.ReadRelativeOffset(br);
     count         = br.ReadInt32();
     childsAddress = new List <Tuple <int, int> >();
     return(true);
 }
Example #11
0
 public bool Read(BinaryReader br)
 {
     gui                = br.ReadUInt32();
     dummyZero          = br.ReadInt32();
     transformationData = TransformationData.FromReader(br);
     nextAmount         = br.ReadInt32();
     nextAddress        = GsfPackage.ReadRelativeOffset(br);
     nextAmount         = br.ReadInt32();
     return(true);
 }
Example #12
0
 public override bool Read(BinaryReader br)
 {
     attributes1            = br.ReadInt32();
     attributes2            = br.ReadInt32();
     textureFilename1Offset = GsfPackage.ReadRelativeOffset(br);
     textureFilename2Offset = GsfPackage.ReadRelativeOffset(br);
     textureFilename3Offset = GsfPackage.ReadRelativeOffset(br);
     unknown = br.ReadInt32();
     return(true);
 }
Example #13
0
 public override bool Write(BinaryWriter bw)
 {
     bw.Write(attributes1);
     bw.Write(attributes2);
     GsfPackage.WriteNullablePointer(bw, textureFilename1Offset);
     GsfPackage.WriteNullablePointer(bw, textureFilename2Offset);
     GsfPackage.WriteNullablePointer(bw, textureFilename3Offset);
     bw.Write(unknown);
     return(true);
 }
Example #14
0
 public override bool Read(BinaryReader br)
 {
     objectType   = br.ReadInt32();
     nameAddress  = br.ReadInt32();
     data1Address = GsfPackage.ReadRelativeOffset(br);
     data1Count   = br.ReadInt32();
     data2Address = GsfPackage.ReadRelativeOffset(br);
     data2Count   = br.ReadInt32();
     return(true);
 }
Example #15
0
 public override bool Write(BinaryWriter bw)
 {
     bw.Write(objectType);
     bw.Write(nameAddress);
     GsfPackage.WriteNullablePointer(bw, data1Address);
     bw.Write(data1Count);
     GsfPackage.WriteNullablePointer(bw, data2Address);
     bw.Write(data2Count);
     return(true);
 }
Example #16
0
        // TODO: Update when found the meaning for the 2 unknown values
        public override bool Read(BinaryReader br)
        {
            int pointerToContentsTable = (int)GsfPackage.ReadRelativeOffset(br);
            int pointerToMaterialsInfo = (int)GsfPackage.ReadRelativeOffset(br);
            int unknown1 = br.ReadInt32();      // Always 0x0C?
            int amount   = br.ReadInt32();
            int unknown2 = br.ReadInt32();      // Always 0x01?

            materialIndices = new List <int>();
            for (int i = 0; i < amount; i++)
            {
                int index = br.ReadInt32();
                materialIndices.Add(index);
            }
            return(true);
        }
Example #17
0
        public static MeshData ReadHeader(BinaryReader br)
        {
            MeshData md = new MeshData();

            md.vertices         = new List <Graphics.Vertex>();
            md.textureVertices  = new List <Graphics.TextureCoords>();
            md.triangles        = new List <Graphics.Triangle>();
            md.unknown1         = new List <short>();
            md.boundingBox      = Graphics.BoundingBox.FromReader(br);
            md.verticesCount    = br.ReadInt32();
            md.trianglesCount   = br.ReadInt32();
            md.verticesAddress  = GsfPackage.ReadRelativeOffset(br);
            md.trianglesAddress = GsfPackage.ReadRelativeOffset(br);
            md.trianglesCount   = br.ReadInt32();   // Yes, the same value again  :-)
            md.vertexDataSize   = br.ReadInt32();
            md.unknown1Address  = GsfPackage.ReadRelativeOffset(br);
            md.unknown1Count    = br.ReadInt32();   // Same value as verticesCount, or 0
            return(md);
        }