Пример #1
0
                public GMPointerList <AssetInstance> NineSlices; // apparently removed in 2.3.2

                public void Serialize(GMDataWriter writer)
                {
                    writer.WritePointer(LegacyTiles);
                    writer.WritePointer(Sprites);
                    if (writer.VersionInfo.IsNumberAtLeast(2, 3))
                    {
                        writer.WritePointer(Sequences);
                        if (!writer.VersionInfo.IsNumberAtLeast(2, 3, 2))
                        {
                            writer.WritePointer(NineSlices);
                        }
                    }

                    writer.WriteObjectPointer(LegacyTiles);
                    LegacyTiles.Serialize(writer);
                    writer.WriteObjectPointer(Sprites);
                    Sprites.Serialize(writer);
                    if (writer.VersionInfo.IsNumberAtLeast(2, 3))
                    {
                        writer.WriteObjectPointer(Sequences);
                        Sequences.Serialize(writer);
                        if (!writer.VersionInfo.IsNumberAtLeast(2, 3, 2))
                        {
                            if (NineSlices == null)
                            {
                                writer.Write(0); // Even if it's 2.3.2 but we don't detect it, this shouldn't break format... probably
                            }
                            else
                            {
                                writer.WriteObjectPointer(NineSlices);
                                NineSlices.Serialize(writer);
                            }
                        }
                    }
                }
Пример #2
0
        public override void Serialize(GMDataWriter writer)
        {
            base.Serialize(writer);

            if (List != null)
            {
                if (writer.VersionInfo.FormatID <= 14)
                {
                    List.Serialize(writer);
                }
                else
                {
                    List.Serialize(writer, (GMDataWriter writer, int index, int count) =>
                    {
                        if (index == 0)
                        {
                            // Serialize bytecode before entries
                            foreach (GMCode c in List)
                            {
                                if (!writer.PointerOffsets.ContainsKey(c.BytecodeEntry))
                                {
                                    writer.WriteObjectPointer(c.BytecodeEntry);
                                    c.BytecodeEntry.Serialize(writer);
                                }
                            }
                        }
                    });
                }
            }
        }
Пример #3
0
        public void Serialize(GMDataWriter writer)
        {
            writer.WritePointerString(Name);

            writer.WritePointer(TexturePageIDs);
            writer.WritePointer(SpriteIDs);
            writer.WritePointer(SpineSpriteIDs);
            writer.WritePointer(FontIDs);
            writer.WritePointer(TilesetIDs);

            writer.WriteObjectPointer(TexturePageIDs);
            TexturePageIDs.Serialize(writer);
            writer.WriteObjectPointer(SpriteIDs);
            SpriteIDs.Serialize(writer);
            writer.WriteObjectPointer(SpineSpriteIDs);
            SpineSpriteIDs.Serialize(writer);
            writer.WriteObjectPointer(FontIDs);
            FontIDs.Serialize(writer);
            writer.WriteObjectPointer(TilesetIDs);
            TilesetIDs.Serialize(writer);
        }
Пример #4
0
        public override void Serialize(GMDataWriter writer)
        {
            base.Serialize(writer);

            writer.Write(List.Count);
            foreach (GMShader s in List)
            {
                writer.WritePointer(s);
            }
            foreach (GMShader s in List)
            {
                writer.WriteObjectPointer(s);
                s.Serialize(writer);
            }
        }
Пример #5
0
 public void Serialize(GMDataWriter writer)
 {
     writer.Pad(128);
     writer.WriteObjectPointer(this);
     writer.Write(Data);
 }
Пример #6
0
        public void Serialize(GMDataWriter writer)
        {
            writer.WritePointerString(Name);
            writer.Write(Width);
            writer.Write(Height);
            writer.Write(MarginLeft);
            writer.Write(MarginRight);
            writer.Write(MarginBottom);
            writer.Write(MarginTop);
            writer.WriteWideBoolean(Transparent);
            writer.WriteWideBoolean(Smooth);
            writer.WriteWideBoolean(Preload);
            writer.Write(BBoxMode);
            writer.Write((int)SepMasks);
            writer.Write(OriginX);
            writer.Write(OriginY);

            if (SpecialOrGMS2)
            {
                // Special/GMS2 sprite type
                writer.Write(-1);
                if (writer.VersionInfo.IsNumberAtLeast(2, 3, 2))
                {
                    writer.Write(3);
                }
                else if (writer.VersionInfo.IsNumberAtLeast(2, 3))
                {
                    writer.Write(2);
                }
                else
                {
                    writer.Write(1);
                }
                writer.Write((int)S_SpriteType);
                if (writer.VersionInfo.IsNumberAtLeast(2))
                {
                    writer.Write(GMS2_PlaybackSpeed);
                    writer.Write((int)GMS2_PlaybackSpeedType);
                    if (writer.VersionInfo.IsNumberAtLeast(2, 3))
                    {
                        writer.WritePointer(GMS2_3_Sequence);
                        if (writer.VersionInfo.IsNumberAtLeast(2, 3, 2))
                        {
                            writer.WritePointer(GMS2_3_2_NineSlice);
                        }
                    }
                }

                switch (S_SpriteType)
                {
                case SpriteType.Normal:
                    TextureItems.Serialize(writer);
                    WriteMaskData(writer);
                    break;

                case SpriteType.SWF:
                    writer.Write(8);
                    TextureItems.Serialize(writer);
                    writer.Pad(4);
                    writer.Write(S_Buffer);
                    break;

                case SpriteType.Spine:
                    writer.Pad(4);
                    writer.Write(S_Buffer);
                    break;
                }

                if (GMS2_3_Sequence != null)
                {
                    writer.Pad(4);
                    writer.WriteObjectPointer(GMS2_3_Sequence);
                    GMS2_3_Sequence.Serialize(writer);
                }

                if (GMS2_3_2_NineSlice != null)
                {
                    writer.Pad(4);
                    writer.WriteObjectPointer(GMS2_3_2_NineSlice);
                    GMS2_3_2_NineSlice.Serialize(writer);
                }
            }
            else
            {
                // Normal sprite type
                TextureItems.Serialize(writer);
                WriteMaskData(writer);
            }
        }
Пример #7
0
        public void Serialize(GMDataWriter writer)
        {
            writer.WritePointerString(Name);
            writer.Write((uint)Type | 0x80000000u);

            writer.WritePointerString(GLSL_ES_Vertex);
            writer.WritePointerString(GLSL_ES_Fragment);
            writer.WritePointerString(GLSL_Vertex);
            writer.WritePointerString(GLSL_Fragment);
            writer.WritePointerString(HLSL9_Vertex);
            writer.WritePointerString(HLSL9_Fragment);

            writer.WritePointer(HLSL11_VertexBuffer);
            writer.WritePointer(HLSL11_PixelBuffer);

            writer.Write(VertexAttributes.Count);
            foreach (GMString s in VertexAttributes)
            {
                writer.WritePointerString(s);
            }

            writer.Write(Version);

            writer.WritePointer(PSSL_VertexBuffer);
            writer.Write((PSSL_VertexBuffer != null) ? PSSL_VertexBuffer.Buffer.Length : 0);
            writer.WritePointer(PSSL_PixelBuffer);
            writer.Write((PSSL_PixelBuffer != null) ? PSSL_PixelBuffer.Buffer.Length : 0);

            writer.WritePointer(CG_PSV_VertexBuffer);
            writer.Write((CG_PSV_VertexBuffer != null) ? CG_PSV_VertexBuffer.Buffer.Length : 0);
            writer.WritePointer(CG_PSV_PixelBuffer);
            writer.Write((CG_PSV_PixelBuffer != null) ? CG_PSV_PixelBuffer.Buffer.Length : 0);

            if (Version >= 2)
            {
                writer.WritePointer(CG_PS3_VertexBuffer);
                writer.Write((CG_PS3_VertexBuffer != null) ? CG_PS3_VertexBuffer.Buffer.Length : 0);
                writer.WritePointer(CG_PS3_PixelBuffer);
                writer.Write((CG_PS3_PixelBuffer != null) ? CG_PS3_PixelBuffer.Buffer.Length : 0);
            }

            if (HLSL11_VertexBuffer != null)
            {
                writer.Pad(8);
                writer.WriteObjectPointer(HLSL11_VertexBuffer);
                HLSL11_VertexBuffer.Serialize(writer);
            }
            if (HLSL11_PixelBuffer != null)
            {
                writer.Pad(8);
                writer.WriteObjectPointer(HLSL11_PixelBuffer);
                HLSL11_PixelBuffer.Serialize(writer);
            }

            if (PSSL_VertexBuffer != null)
            {
                writer.Pad(8);
                writer.WriteObjectPointer(PSSL_VertexBuffer);
                PSSL_VertexBuffer.Serialize(writer);
            }
            if (PSSL_PixelBuffer != null)
            {
                writer.Pad(8);
                writer.WriteObjectPointer(PSSL_PixelBuffer);
                PSSL_PixelBuffer.Serialize(writer);
            }

            if (CG_PSV_VertexBuffer != null)
            {
                writer.Pad(8);
                writer.WriteObjectPointer(CG_PSV_VertexBuffer);
                CG_PSV_VertexBuffer.Serialize(writer);
            }
            if (CG_PSV_PixelBuffer != null)
            {
                writer.Pad(8);
                writer.WriteObjectPointer(CG_PSV_PixelBuffer);
                CG_PSV_PixelBuffer.Serialize(writer);
            }

            if (Version >= 2)
            {
                if (CG_PS3_VertexBuffer != null)
                {
                    writer.Pad(16);
                    writer.WriteObjectPointer(CG_PS3_VertexBuffer);
                    CG_PS3_VertexBuffer.Serialize(writer);
                }
                if (CG_PS3_PixelBuffer != null)
                {
                    writer.Pad(8);
                    writer.WriteObjectPointer(CG_PS3_PixelBuffer);
                    CG_PS3_PixelBuffer.Serialize(writer);
                }
            }
        }
Пример #8
0
        public void Serialize(GMDataWriter writer)
        {
            writer.WritePointerString(Name);
            writer.WritePointerString(Caption);
            writer.Write(Width); writer.Write(Height);
            writer.Write(Speed);
            writer.WriteWideBoolean(Persistent);
            writer.Write(BackgroundColor);
            writer.WriteWideBoolean(DrawBackgroundColor);
            writer.Write(CreationCodeID);
            int flags = (int)Flags;

            if (writer.VersionInfo.IsNumberAtLeast(2, 3))
            {
                flags |= 0x30000;
            }
            else if (writer.VersionInfo.IsNumberAtLeast(2))
            {
                flags |= 0x20000;
            }
            writer.Write(flags);
            writer.WritePointer(Backgrounds);
            writer.WritePointer(Views);
            writer.WritePointer(GameObjects);
            writer.WritePointer(Tiles);
            writer.WriteWideBoolean(Physics);
            writer.Write(Top); writer.Write(Left);
            writer.Write(Right); writer.Write(Bottom);
            writer.Write(GravityX); writer.Write(GravityY);
            writer.Write(PixelsToMeters);
            int sequencePatch = -1;

            if (writer.VersionInfo.IsNumberAtLeast(2))
            {
                writer.WritePointer(Layers);
                if (writer.VersionInfo.IsNumberAtLeast(2, 3))
                {
                    sequencePatch = writer.Offset;
                    writer.Write(0);
                }
            }

            writer.WriteObjectPointer(Backgrounds);
            Backgrounds.Serialize(writer);
            writer.WriteObjectPointer(Views);
            Views.Serialize(writer);
            writer.WriteObjectPointer(GameObjects);
            GameObjects.Serialize(writer);
            writer.WriteObjectPointer(Tiles);
            Tiles.Serialize(writer);
            if (writer.VersionInfo.IsNumberAtLeast(2))
            {
                writer.WriteObjectPointer(Layers);
                Layers.Serialize(writer);
                if (writer.VersionInfo.IsNumberAtLeast(2, 3))
                {
                    // Patch and write sequence IDs
                    int returnTo = writer.Offset;
                    writer.Offset = sequencePatch;
                    writer.Write(returnTo);
                    writer.Offset = returnTo;

                    writer.Write(SequenceIDs.Count);
                    foreach (int i in SequenceIDs)
                    {
                        writer.Write(i);
                    }
                }
            }
        }