Esempio n. 1
0
 protected override void Serialize(SerializingContainer2 sc)
 {
     if (sc.Pcc.Platform == MEPackage.GamePlatform.PS3)
     {
         // Unknown items
         sc.SerializeConstInt(0);
         sc.SerializeConstInt(0);
     }
     sc.SerializeBulkData(ref RawData, SCExt.Serialize);
     sc.SerializeBulkData(ref CompressedPCData, SCExt.Serialize);
     sc.SerializeBulkData(ref CompressedXbox360Data, SCExt.Serialize);
     sc.SerializeBulkData(ref CompressedPS3Data, SCExt.Serialize);
 }
Esempio n. 2
0
 private static void Serialize(this SerializingContainer2 sc, LightMap_1D lmap)
 {
     sc.Serialize(ref lmap.LightGuids, SCExt.Serialize);
     sc.Serialize(ref lmap.Owner);
     sc.SerializeBulkData(ref lmap.DirectionalSamples, Serialize);
     sc.Serialize(ref lmap.ScaleVector1);
     sc.Serialize(ref lmap.ScaleVector2);
     sc.Serialize(ref lmap.ScaleVector3);
     if (sc.Game < MEGame.ME3)
     {
         sc.Serialize(ref lmap.ScaleVector4);
     }
     sc.SerializeBulkData(ref lmap.SimpleSamples, Serialize);
 }
Esempio n. 3
0
 private static void Serialize(this SerializingContainer2 sc, LightMap_5 lmap)
 {
     sc.Serialize(ref lmap.LightGuids, SCExt.Serialize);
     sc.Serialize(ref lmap.unkInt);
     sc.SerializeBulkData(ref lmap.SimpleSamples, Serialize);
     sc.Serialize(ref lmap.unkVector);
 }
Esempio n. 4
0
 private static void Serialize(this SerializingContainer2 sc, LightMap_3 lmap)
 {
     sc.Serialize(ref lmap.LightGuids, SCExt.Serialize);
     sc.Serialize(ref lmap.unkInt);
     sc.SerializeBulkData(ref lmap.DirectionalSamples, Serialize);
     sc.Serialize(ref lmap.unkVector1);
     sc.Serialize(ref lmap.unkVector2);
 }
Esempio n. 5
0
 protected override void Serialize(SerializingContainer2 sc)
 {
     if (sc.Game < MEGame.ME3)
     {
         var empty = new byte[0];
         sc.SerializeBulkData(ref empty);
     }
     sc.Serialize(ref IsExternal);
     if (sc.IsSaving && !IsExternal)
     {
         DataOffset = sc.FileOffset + 12;
         DataSize   = EmbeddedData.Length;
     }
     sc.Serialize(ref DataSize);
     sc.Serialize(ref DataSize);
     sc.Serialize(ref DataOffset);
     if (!IsExternal)
     {
         sc.Serialize(ref EmbeddedData, DataSize);
     }
 }
Esempio n. 6
0
        public static void Serialize(this SerializingContainer2 sc, ref StaticMeshRenderData data)
        {
            if (sc.IsLoading)
            {
                data = new StaticMeshRenderData();
            }

            sc.SerializeBulkData(ref data.RawTriangles, Serialize);
            sc.Serialize(ref data.Elements, Serialize);
            sc.Serialize(ref data.PositionVertexBuffer);
            if (sc.IsSaving)
            {
                if (sc.Game >= MEGame.ME3 && data.ColorVertexBuffer == null)
                {
                    //this was read in from ME1 or ME2, we need to seperate out the color data
                    data.ColorVertexBuffer = new ColorVertexBuffer
                    {
                        VertexData  = data.VertexBuffer.VertexData.Select(vertex => vertex.Color).ToArray(),
                        NumVertices = (uint)data.VertexBuffer.VertexData.Length,
                        Stride      = 4
                    };
                }
                else if (sc.Game < MEGame.ME3 && data.ColorVertexBuffer != null)
                {
                    //this was read in from ME3 or UDK, we need to integrate the color data
                    // Why is this written backwards?
                    for (int i = data.VertexBuffer.VertexData.Length - 1; i >= 0; i--)
                    {
                        data.VertexBuffer.VertexData[i].Color = data.ColorVertexBuffer.VertexData[i];
                    }
                }
            }
            sc.Serialize(ref data.VertexBuffer);
            if (sc.Game >= MEGame.ME3)
            {
                sc.Serialize(ref data.ColorVertexBuffer);
            }

            if (sc.Game < MEGame.UDK)
            {
                sc.Serialize(ref data.ShadowExtrusionVertexBuffer);
            }
            else if (sc.IsLoading)
            {
                data.ShadowExtrusionVertexBuffer = new ExtrusionVertexBuffer
                {
                    Stride     = 4,
                    VertexData = Array.Empty <float>()
                };
            }
            sc.Serialize(ref data.NumVertices);
            int elementSize = 2;

            sc.Serialize(ref elementSize);
            sc.Serialize(ref data.IndexBuffer, SCExt.Serialize);
            elementSize = 2;
            sc.Serialize(ref elementSize);
            sc.Serialize(ref data.WireframeIndexBuffer, SCExt.Serialize);
            if (sc.Game != MEGame.UDK)
            {
                elementSize = 16;
                sc.Serialize(ref elementSize);
                sc.Serialize(ref data.Edges, Serialize);
                sc.Serialize(ref data.ShadowTriangleDoubleSided, SCExt.Serialize);
            }
            else if (sc.IsLoading)
            {
                data.Edges = Array.Empty <MeshEdge>();
                data.ShadowTriangleDoubleSided = Array.Empty <byte>();
            }
            if (sc.Game == MEGame.UDK)
            {
                sc.BulkSerialize(ref data.unkBuffer, SCExt.Serialize, 2);
            }
            if (sc.Game == MEGame.ME1)
            {
                sc.Serialize(ref data.unk1);

                int bulkDataFlags = 0;
                sc.Serialize(ref bulkDataFlags);
                int byteCount = data.xmlFile?.Length ?? 0;
                sc.Serialize(ref byteCount);
                sc.Serialize(ref byteCount);
                sc.SerializeFileOffset();
                sc.Serialize(ref data.xmlFile, byteCount);
            }
            else if (sc.IsLoading)
            {
                data.xmlFile = Array.Empty <byte>();
            }
        }