Exemple #1
0
        public void Unserialize(GMDataReader reader)
        {
            Name = reader.ReadStringPointerObject();

            if (reader.VersionInfo.FormatID > 14)
            {
                VariableType = (GMCode.Bytecode.Instruction.InstanceType)reader.ReadInt32();
                VariableID   = reader.ReadInt32();
            }
            Occurrences = reader.ReadInt32();
            if (Occurrences > 0)
            {
                int addr = reader.ReadInt32();

                // Parse reference chain
                GMCode.Bytecode.Instruction curr;
                for (int i = Occurrences; i > 0; i--)
                {
                    curr = reader.Instructions[addr];
                    curr.Variable.Target = this;
                    addr += curr.Variable.NextOccurrence;
                }
            }
            else
            {
                if (reader.ReadInt32() != -1)
                {
                    reader.Warnings.Add(new GMWarning("Variable with no occurrences, but still has a first occurrence address"));
                }
            }
        }
Exemple #2
0
        public void Unserialize(GMDataReader reader)
        {
            Name                  = reader.ReadStringPointerObject();
            SpriteID              = reader.ReadInt32();
            Visible               = reader.ReadWideBoolean();
            Solid                 = reader.ReadWideBoolean();
            Depth                 = reader.ReadInt32();
            Persistent            = reader.ReadWideBoolean();
            ParentObjectID        = reader.ReadInt32();
            MaskSpriteID          = reader.ReadInt32();
            Physics               = reader.ReadWideBoolean();
            PhysicsSensor         = reader.ReadWideBoolean();
            PhysicsShape          = (CollisionShape)reader.ReadInt32();
            PhysicsDensity        = reader.ReadSingle();
            PhysicsRestitution    = reader.ReadSingle();
            PhysicsGroup          = reader.ReadInt32();
            PhysicsLinearDamping  = reader.ReadSingle();
            PhysicsAngularDamping = reader.ReadSingle();
            int vertexCount = reader.ReadInt32();

            PhysicsFriction  = reader.ReadSingle();
            PhysicsAwake     = reader.ReadWideBoolean();
            PhysicsKinematic = reader.ReadWideBoolean();
            PhysicsVertices  = new List <PhysicsVertex>();
            for (int i = vertexCount; i > 0; i--)
            {
                PhysicsVertex v = new PhysicsVertex();
                v.Unserialize(reader);
                PhysicsVertices.Add(v);
            }
            Events = new GMPointerList <GMPointerList <Event> >();
            Events.Unserialize(reader);
        }
Exemple #3
0
 public void Unserialize(GMDataReader reader)
 {
     Name        = reader.ReadStringPointerObject();
     DisplayName = reader.ReadStringPointerObject();
     Size        = reader.ReadInt32();
     if (Size < 0)
     {
         reader.Offset -= 4;
         SizeFloat      = -reader.ReadSingle();
     }
     Bold        = reader.ReadWideBoolean();
     Italic      = reader.ReadWideBoolean();
     RangeStart  = reader.ReadUInt16();
     Charset     = reader.ReadByte();
     AntiAlias   = reader.ReadByte();
     RangeEnd    = reader.ReadInt32();
     TextureItem = reader.ReadPointer <GMTextureItem>();
     ScaleX      = reader.ReadSingle();
     ScaleY      = reader.ReadSingle();
     if (reader.VersionInfo.FormatID >= 17)
     {
         AscenderOffset = reader.ReadInt32();
     }
     Glyphs = new GMPointerList <GMGlyph>();
     Glyphs.Unserialize(reader);
 }
Exemple #4
0
        public void Unserialize(GMDataReader reader)
        {
            Name              = reader.ReadStringPointerObject();
            PlaybackType      = (PlaybackTypeEnum)reader.ReadUInt32();
            PlaybackSpeed     = reader.ReadSingle();
            PlaybackSpeedType = (GMSprite.AnimSpeedType)reader.ReadUInt32();
            Length            = reader.ReadSingle();
            OriginX           = reader.ReadInt32();
            OriginY           = reader.ReadInt32();
            Volume            = reader.ReadSingle();

            BroadcastMessages = new GMList <Keyframe <BroadcastMessage> >();
            BroadcastMessages.Unserialize(reader);

            Tracks = new GMList <Track>();
            Tracks.Unserialize(reader);

            FunctionIDs = new Dictionary <int, GMString>();
            int count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                int key = reader.ReadInt32();
                FunctionIDs[key] = reader.ReadStringPointerObject();
            }

            Moments = new GMList <Keyframe <Moment> >();
            Moments.Unserialize(reader);
        }
Exemple #5
0
        public void Unserialize(GMDataReader reader, int endPos)
        {
            Name = reader.ReadStringPointerObject();
            Type = (ShaderType)(reader.ReadUInt32() & 0x7FFFFFFF);

            GLSL_ES_Vertex   = reader.ReadStringPointerObject();
            GLSL_ES_Fragment = reader.ReadStringPointerObject();
            GLSL_Vertex      = reader.ReadStringPointerObject();
            GLSL_Fragment    = reader.ReadStringPointerObject();
            HLSL9_Vertex     = reader.ReadStringPointerObject();
            HLSL9_Fragment   = reader.ReadStringPointerObject();

            int ptr1 = reader.ReadInt32();

            HLSL11_VertexBuffer = reader.ReadPointer <ShaderBuffer>(ptr1);
            int ptr2 = reader.ReadInt32();

            HLSL11_PixelBuffer = reader.ReadPointer <ShaderBuffer>(ptr2);

            VertexAttributes = new List <GMString>();
            for (int i = reader.ReadInt32(); i > 0; i--)
            {
                VertexAttributes.Add(reader.ReadStringPointerObject());
            }

            if (reader.ReadInt32() != 2)
            {
                reader.Warnings.Add(new GMWarning("expected 2 in SHDR"));
            }

            int ptr3 = reader.ReadInt32();

            PSSL_VertexBuffer = reader.ReadPointer <ShaderBuffer>(ptr3);
            ReadShaderData(reader, PSSL_VertexBuffer, ptr3, reader.ReadInt32());

            int currPtr = reader.ReadInt32();

            PSSL_PixelBuffer = reader.ReadPointer <ShaderBuffer>(currPtr);
            ReadShaderData(reader, PSSL_PixelBuffer, currPtr, reader.ReadInt32());

            currPtr             = reader.ReadInt32();
            CG_PSV_VertexBuffer = reader.ReadPointer <ShaderBuffer>(currPtr);
            ReadShaderData(reader, CG_PSV_VertexBuffer, currPtr, reader.ReadInt32());

            currPtr            = reader.ReadInt32();
            CG_PSV_PixelBuffer = reader.ReadPointer <ShaderBuffer>(currPtr);
            ReadShaderData(reader, CG_PSV_PixelBuffer, currPtr, reader.ReadInt32());

            currPtr             = reader.ReadInt32();
            CG_PS3_VertexBuffer = reader.ReadPointer <ShaderBuffer>(currPtr);
            ReadShaderData(reader, CG_PSV_VertexBuffer, currPtr, reader.ReadInt32());

            currPtr            = reader.ReadInt32();
            CG_PS3_PixelBuffer = reader.ReadPointer <ShaderBuffer>(currPtr);
            ReadShaderData(reader, CG_PSV_PixelBuffer, currPtr, reader.ReadInt32());

            ReadShaderData(reader, HLSL11_VertexBuffer, ptr1, -1, ptr2 == 0 ? endPos : ptr2);
            ReadShaderData(reader, HLSL11_PixelBuffer, ptr2, -1, ptr3 == 0 ? endPos : ptr3);
        }
Exemple #6
0
 public void Unserialize(GMDataReader reader)
 {
     InternalCount = reader.ReadInt32();
     if (InternalCount > 0)
     {
         Event = reader.ReadStringPointerObject();
     }
 }
            public void Unserialize(GMDataReader reader)
            {
                Name         = reader.ReadStringPointerObject();
                FunctionType = (FunctionTypeEnum)reader.ReadUInt32();
                Iterations   = (ushort)reader.ReadUInt32();

                Points = new GMList <Point>();
                Points.Unserialize(reader);
            }
Exemple #8
0
 public void Unserialize(GMDataReader reader)
 {
     Filename      = reader.ReadStringPointerObject();
     FinalFunction = reader.ReadStringPointerObject();
     InitFunction  = reader.ReadStringPointerObject();
     Kind          = (ExtensionKind)reader.ReadUInt32();
     Functions     = new GMPointerList <ExtensionFunction>();
     Functions.Unserialize(reader);
 }
Exemple #9
0
 public void Unserialize(GMDataReader reader)
 {
     Name      = reader.ReadStringPointerObject();
     Smooth    = reader.ReadWideBoolean();
     Closed    = reader.ReadWideBoolean();
     Precision = reader.ReadUInt32();
     Points    = new GMList <Point>();
     Points.Unserialize(reader);
 }
Exemple #10
0
 public void Unserialize(GMDataReader reader)
 {
     Name           = reader.ReadStringPointerObject();
     TexturePageIDs = reader.ReadPointerObjectUnique <GMList <ResourceID> >();
     SpriteIDs      = reader.ReadPointerObjectUnique <GMList <ResourceID> >();
     SpineSpriteIDs = reader.ReadPointerObjectUnique <GMList <ResourceID> >();
     FontIDs        = reader.ReadPointerObjectUnique <GMList <ResourceID> >();
     TilesetIDs     = reader.ReadPointerObjectUnique <GMList <ResourceID> >();
 }
Exemple #11
0
        public void Unserialize(GMDataReader reader)
        {
            EmptyString = reader.ReadStringPointerObject();
            Name        = reader.ReadStringPointerObject();
            ClassName   = reader.ReadStringPointerObject();

            Files = new GMPointerList <ExtensionFile>();
            Files.Unserialize(reader);
        }
        public void Unserialize(GMDataReader reader, bool includeName)
        {
            if (includeName)
            {
                Name = reader.ReadStringPointerObject();
            }
            GraphType = (GraphTypeEnum)reader.ReadUInt32();

            Channels = new GMList <Channel>();
            Channels.Unserialize(reader);
        }
 public void Unserialize(GMDataReader reader)
 {
     Name   = reader.ReadStringPointerObject();
     CodeID = reader.ReadInt32();
     if (CodeID < -1)
     {
         // New GMS 2.3 constructor scripts
         Constructor = true;
         CodeID      = (int)((uint)CodeID & 2147483647u);
     }
 }
Exemple #14
0
 public void Unserialize(GMDataReader reader)
 {
     Name               = reader.ReadStringPointerObject();
     AssetID            = reader.ReadInt32();
     X                  = reader.ReadInt32(); Y = reader.ReadInt32();
     ScaleX             = reader.ReadSingle(); ScaleY = reader.ReadSingle();
     Color              = reader.ReadInt32();
     AnimationSpeed     = reader.ReadSingle();
     AnimationSpeedType = (GMSprite.AnimSpeedType)reader.ReadInt32();
     FrameIndex         = reader.ReadSingle();
     Rotation           = reader.ReadSingle();
 }
Exemple #15
0
 public void Unserialize(GMDataReader reader)
 {
     Name    = reader.ReadStringPointerObject();
     Flags   = (AudioEntryFlags)reader.ReadUInt32();
     Type    = reader.ReadStringPointerObject();
     File    = reader.ReadStringPointerObject();
     Effects = reader.ReadUInt32();
     Volume  = reader.ReadSingle();
     Pitch   = reader.ReadSingle();
     GroupID = reader.ReadInt32();
     AudioID = reader.ReadInt32();
 }
Exemple #16
0
        public void Unserialize(GMDataReader reader)
        {
            Name   = reader.ReadStringPointerObject();
            Length = reader.ReadInt32();

            if (reader.VersionInfo.FormatID <= 14)
            {
                BytecodeEntry = new Bytecode(this);
                BytecodeEntry.Unserialize(reader, Length);
            }
            else
            {
                LocalsCount = reader.ReadInt16();
                int v = reader.ReadInt16();
                ArgumentsCount = (short)(v & 0b1111111111111);
                Flags          = (byte)(v >> 13);
                int  relativeBytecodeAddr = reader.ReadInt32();
                int  absoluteBytecodeAddr = (reader.Offset - 4) + relativeBytecodeAddr;
                bool childCandidate       = false;
                if (reader.PointerOffsets.TryGetValue(absoluteBytecodeAddr, out GMSerializable s))
                {
                    if (s is Bytecode b)
                    {
                        BytecodeEntry  = b;
                        childCandidate = true;
                    }
                }
                if (BytecodeEntry == null)
                {
                    BytecodeEntry = new Bytecode(this);
                    if (Length != 0) // prevent pointer overlap of entries with 0 instructions
                    {
                        reader.PointerOffsets[absoluteBytecodeAddr] = BytecodeEntry;
                    }

                    int returnTo = reader.Offset;
                    reader.Offset = absoluteBytecodeAddr;

                    BytecodeEntry.Unserialize(reader, Length);

                    reader.Offset = returnTo;
                }
                BytecodeOffset = reader.ReadInt32();

                if (childCandidate && Length != 0 && BytecodeOffset != 0)
                {
                    // Assign parents and children of this entry
                    ParentEntry = BytecodeEntry.Parent;
                    BytecodeEntry.Parent.ChildEntries.Add(this);
                }
            }
        }
Exemple #17
0
        public void Unserialize(GMDataReader reader)
        {
            Entries = new List <GMLocal>();

            int count = reader.ReadInt32();

            Name = reader.ReadStringPointerObject();

            for (int i = 0; i < count; i++)
            {
                GMLocal local = new GMLocal();
                local.Unserialize(reader);
                Entries.Add(local);
            }
        }
Exemple #18
0
            public void Unserialize(GMDataReader reader)
            {
                Name         = reader.ReadStringPointerObject();
                ID           = reader.ReadInt32();
                Kind         = reader.ReadInt32();
                ReturnType   = (ExtensionValueType)reader.ReadUInt32();
                ExternalName = reader.ReadStringPointerObject();

                ArgumentTypes = new List <ExtensionValueType>();
                int count = reader.ReadInt32();

                for (int i = 0; i < count; i++)
                {
                    ArgumentTypes.Add((ExtensionValueType)reader.ReadUInt32());
                }
            }
Exemple #19
0
 public void Unserialize(GMDataReader reader)
 {
     LibID         = reader.ReadInt32();
     ID            = reader.ReadInt32();
     Kind          = reader.ReadInt32();
     UseRelative   = reader.ReadWideBoolean();
     IsQuestion    = reader.ReadWideBoolean();
     UseApplyTo    = reader.ReadWideBoolean();
     ExeType       = reader.ReadInt32();
     ActionName    = reader.ReadStringPointerObject();
     CodeID        = reader.ReadInt32();
     ArgumentCount = reader.ReadInt32();
     Who           = reader.ReadInt32();
     Relative      = reader.ReadWideBoolean();
     IsNot         = reader.ReadWideBoolean();
     if (reader.ReadInt32() != 0)
     {
         reader.Warnings.Add(new GMWarning("expected 0 in OBJT"));
     }
 }
Exemple #20
0
        public void Unserialize(GMDataReader reader)
        {
            Name        = reader.ReadStringPointerObject();
            Transparent = reader.ReadWideBoolean();
            Smooth      = reader.ReadWideBoolean();
            Preload     = reader.ReadWideBoolean();
            Texture     = reader.ReadPointerObject <GMTextureItem>();

            if (reader.VersionInfo.Major >= 2)
            {
                TileUnknown1 = reader.ReadUInt32();
                if (TileUnknown1 != 2)
                {
                    reader.Warnings.Add(new GMWarning("Expected 2 in BGND"));
                }
                TileWidth         = reader.ReadUInt32();
                TileHeight        = reader.ReadUInt32();
                TileOutputBorderX = reader.ReadUInt32();
                TileOutputBorderY = reader.ReadUInt32();
                TileColumns       = reader.ReadUInt32();
                uint tileFrameCount = reader.ReadUInt32();
                uint tileCount      = reader.ReadUInt32();
                TileUnknown2 = reader.ReadUInt32();
                if (TileUnknown2 != 0)
                {
                    reader.Warnings.Add(new GMWarning("Expected 0 in BGND"));
                }
                TileFrameLength = reader.ReadInt64();

                Tiles = new List <List <uint> >((int)tileCount);
                for (int i = 0; i < tileCount; i++)
                {
                    List <uint> tileFrames = new List <uint>((int)tileFrameCount);
                    Tiles.Add(tileFrames);
                    for (int j = 0; j < tileFrameCount; j++)
                    {
                        tileFrames.Add(reader.ReadUInt32());
                    }
                }
            }
        }
Exemple #21
0
            public void Unserialize(GMDataReader reader)
            {
                Name    = reader.ReadStringPointerObject();
                ID      = reader.ReadInt32();
                Kind    = (LayerKind)reader.ReadInt32();
                Depth   = reader.ReadInt32();
                OffsetX = reader.ReadSingle(); OffsetY = reader.ReadSingle();
                HSpeed  = reader.ReadSingle(); VSpeed = reader.ReadSingle();
                Visible = reader.ReadWideBoolean();
                switch (Kind)
                {
                case LayerKind.Background:
                    Background = new LayerBackground();
                    Background.Unserialize(reader);
                    break;

                case LayerKind.Instances:
                    Instances = new LayerInstances();
                    Instances.Unserialize(reader);
                    break;

                case LayerKind.Assets:
                    Assets = new LayerAssets();
                    Assets.Unserialize(reader);
                    break;

                case LayerKind.Tiles:
                    Tiles = new LayerTiles();
                    Tiles.Unserialize(reader);
                    break;

                case LayerKind.Effect:
                    Effect = new LayerEffect();
                    Effect.Unserialize(reader);
                    break;

                default:
                    reader.Warnings.Add(new GMWarning($"Unknown layer kind {Kind}"));
                    break;
                }
            }
Exemple #22
0
        public void Unserialize(GMDataReader reader)
        {
            Name   = reader.ReadStringPointerObject();
            Length = reader.ReadInt32();

            if (reader.VersionInfo.FormatID <= 14)
            {
                BytecodeEntry = new Bytecode();
                BytecodeEntry.Unserialize(reader, Length);
            }
            else
            {
                LocalsCount = reader.ReadInt16();
                int v = reader.ReadInt16();
                ArgumentsCount = (short)(v & 0b1111111111111);
                Flags          = (byte)(v >> 13);
                int relativeBytecodeAddr = reader.ReadInt32();
                int absoluteBytecodeAddr = (reader.Offset - 4) + relativeBytecodeAddr;
                if (reader.PointerOffsets.ContainsKey(absoluteBytecodeAddr))
                {
                    BytecodeEntry = (Bytecode)reader.PointerOffsets[absoluteBytecodeAddr];
                }
                else
                {
                    BytecodeEntry = new Bytecode();
                    if (Length != 0) // prevent pointer overlap of entries with 0 instructions
                    {
                        reader.PointerOffsets[absoluteBytecodeAddr] = BytecodeEntry;
                    }

                    int returnTo = reader.Offset;
                    reader.Offset = absoluteBytecodeAddr;

                    BytecodeEntry.Unserialize(reader, Length);

                    reader.Offset = returnTo;
                }
                BytecodeOffset = reader.ReadInt32();
            }
        }
        public void Unserialize(GMDataReader reader)
        {
            Name        = reader.ReadStringPointerObject();
            Occurrences = reader.ReadInt32();
            if (Occurrences > 0)
            {
                int addr;
                if (reader.VersionInfo.IsNumberAtLeast(2, 3))
                {
                    addr = reader.ReadInt32() - 4;
                }
                else
                {
                    addr = reader.ReadInt32();
                }

                // Parse reference chain
                GMCode.Bytecode.Instruction curr;
                for (int i = Occurrences; i > 0; i--)
                {
                    curr = reader.Instructions[addr];
                    if (curr.Function == null)
                    {
                        curr.Function = new GMCode.Bytecode.Instruction.Reference <GMFunctionEntry>((int)curr.Value);
                        curr.Value    = null;
                    }
                    curr.Function.Target = this;
                    addr += curr.Function.NextOccurrence;
                }
            }
            else
            {
                if (reader.ReadInt32() != -1)
                {
                    reader.Warnings.Add(new GMWarning("Function with no occurrences, but still has a first occurrence address"));
                }
            }
        }
Exemple #24
0
            public void Unserialize(GMDataReader reader)
            {
                ModelName       = reader.ReadStringPointerObject();
                Name            = reader.ReadStringPointerObject();
                BuiltinName     = reader.ReadInt32();
                Traits          = (TraitsEnum)reader.ReadInt32();
                IsCreationTrack = reader.ReadWideBoolean();

                int tagCount           = reader.ReadInt32();
                int ownedResourceCount = reader.ReadInt32();
                int trackCount         = reader.ReadInt32();

                Tags = new List <int>();
                for (int i = 0; i < tagCount; i++)
                {
                    Tags.Add(reader.ReadInt32());
                }

                OwnedResources     = new List <GMSerializable>();
                OwnedResourceTypes = new List <GMString>();
                for (int i = 0; i < ownedResourceCount; i++)
                {
                    GMString str = reader.ReadStringPointerObject();
                    OwnedResourceTypes.Add(str);
                    switch (str.Content)
                    {
                    case "GMAnimCurve":
                        GMAnimCurve curve = new GMAnimCurve();
                        curve.Unserialize(reader);
                        OwnedResources.Add(curve);
                        break;

                    default:
                        reader.Warnings.Add(new GMWarning($"Unknown owned resource type."));
                        break;
                    }
                }

                Tracks = new List <Track>();
                for (int i = 0; i < trackCount; i++)
                {
                    Track track = new Track();
                    track.Unserialize(reader);
                    Tracks.Add(track);
                }

                switch (ModelName.Content)
                {
                case "GMAudioTrack":
                {
                    AudioKeyframes keyframes = new AudioKeyframes();
                    keyframes.Unserialize(reader);
                    Keyframes = keyframes;
                }
                break;

                case "GMInstanceTrack":
                case "GMGraphicTrack":
                case "GMSequenceTrack":
                {
                    IDKeyframes keyframes = new IDKeyframes();
                    keyframes.Unserialize(reader);
                    Keyframes = keyframes;
                }
                break;

                case "GMSpriteFramesTrack":
                case "GMBoolTrack":
                {
                    ValueKeyframes keyframes = new ValueKeyframes();
                    keyframes.Unserialize(reader);
                    Keyframes = keyframes;
                }
                break;

                case "GMStringTrack":
                {
                    StringValueKeyframes keyframes = new StringValueKeyframes();
                    keyframes.Unserialize(reader);
                    Keyframes = keyframes;
                }
                break;

                case "GMColourTrack":
                case "GMRealTrack":
                {
                    ValueInterpolatedKeyframes keyframes = new ValueInterpolatedKeyframes();
                    keyframes.Unserialize(reader);
                    Keyframes = keyframes;
                }
                break;

                case "GMGroupTrack":
                    break;

                default:
                    throw new Exception(string.Format("Unknown sequence \"{0}\" model name.", ModelName.Content));
                }
            }
Exemple #25
0
 public void Unserialize(GMDataReader reader)
 {
     Kind  = (PropertyType)reader.ReadInt32();
     Name  = reader.ReadStringPointerObject();
     Value = reader.ReadStringPointerObject();
 }
Exemple #26
0
 public void Unserialize(GMDataReader reader)
 {
     Index = reader.ReadUInt32();
     Name  = reader.ReadStringPointerObject();
 }
Exemple #27
0
        public void Unserialize(GMDataReader reader)
        {
            Name                = reader.ReadStringPointerObject();
            Caption             = reader.ReadStringPointerObject();
            Width               = reader.ReadInt32(); Height = reader.ReadInt32();
            Speed               = reader.ReadInt32();
            Persistent          = reader.ReadWideBoolean();
            BackgroundColor     = reader.ReadInt32();
            DrawBackgroundColor = reader.ReadWideBoolean();
            CreationCodeID      = reader.ReadInt32();
            int flags = reader.ReadInt32();

            if (reader.VersionInfo.IsNumberAtLeast(2, 3))
            {
                flags &= ~0x30000;
            }
            else if (reader.VersionInfo.IsNumberAtLeast(2))
            {
                flags &= ~0x20000;
            }
            Flags       = (RoomFlags)flags;
            Backgrounds = reader.ReadPointerObject <GMPointerList <Background> >();
            Views       = reader.ReadPointerObject <GMPointerList <View> >();
            int gameObjectListPtr = reader.ReadInt32(); // read this later
            int tilePtr           = reader.ReadInt32();

            Tiles          = reader.ReadPointerObject <GMPointerList <Tile> >(tilePtr);
            Physics        = reader.ReadWideBoolean();
            Top            = reader.ReadInt32(); Left = reader.ReadInt32();
            Right          = reader.ReadInt32(); Bottom = reader.ReadInt32();
            GravityX       = reader.ReadSingle(); GravityY = reader.ReadSingle();
            PixelsToMeters = reader.ReadSingle();
            if (reader.VersionInfo.IsNumberAtLeast(2))
            {
                Layers = reader.ReadPointerObject <GMPointerList <Layer> >();
                if (reader.VersionInfo.IsNumberAtLeast(2, 3))
                {
                    // Read sequence ID list
                    reader.Offset = reader.ReadInt32();
                    SequenceIDs   = new List <int>();
                    for (int i = reader.ReadInt32(); i > 0; i--)
                    {
                        SequenceIDs.Add(reader.ReadInt32());
                    }
                }
            }

            // Handle reading game objects, which change lengths in 2.2.2.302 roughly, so calculate the size of them
            reader.Offset = gameObjectListPtr;
            int count = reader.ReadInt32();
            int eachSize;

            if (count > 1)
            {
                int first = reader.ReadInt32();
                eachSize = reader.ReadInt32() - first;
            }
            else
            {
                eachSize = tilePtr - (reader.Offset + 4);
            }
            if (eachSize >= 40)
            {
                reader.VersionInfo.RoomObjectPreCreate = true;
                if (eachSize == 48)
                {
                    reader.VersionInfo.SetNumber(2, 2, 2, 302);
                }
            }
            reader.Offset = gameObjectListPtr;
            GameObjects   = new GMPointerList <GameObject>();
            GameObjects.Unserialize(reader);
        }
 public void Unserialize(GMDataReader reader)
 {
     Name = reader.ReadStringPointerObject();
 }
        public void Unserialize(GMDataReader reader)
        {
            Name         = reader.ReadStringPointerObject();
            Width        = reader.ReadInt32();
            Height       = reader.ReadInt32();
            MarginLeft   = reader.ReadInt32();
            MarginRight  = reader.ReadInt32();
            MarginBottom = reader.ReadInt32();
            MarginTop    = reader.ReadInt32();
            Transparent  = reader.ReadWideBoolean();
            Smooth       = reader.ReadWideBoolean();
            Preload      = reader.ReadWideBoolean();
            BBoxMode     = reader.ReadUInt32();
            SepMasks     = (SepMaskType)reader.ReadInt32();
            OriginX      = reader.ReadInt32();
            OriginY      = reader.ReadInt32();

            TextureItems = new GMRemotePointerList <GMTextureItem>();
            if (reader.ReadInt32() == -1)
            {
                // Special/GMS2 sprite type
                SpecialOrGMS2 = true;

                int version = reader.ReadInt32();
                S_SpriteType = (SpriteType)reader.ReadInt32();
                if (reader.VersionInfo.IsNumberAtLeast(2))
                {
                    GMS2_PlaybackSpeed     = reader.ReadSingle();
                    GMS2_PlaybackSpeedType = (AnimSpeedType)reader.ReadInt32();
                    if (version >= 2)
                    {
                        GMS2_3_Sequence = reader.ReadPointerObjectUnique <SequenceReference>();
                        if (version >= 3)
                        {
                            reader.VersionInfo.SetNumber(2, 3, 2);
                            GMS2_3_2_NineSlice = reader.ReadPointerObjectUnique <NineSlice>();
                        }
                    }
                }

                switch (S_SpriteType)
                {
                case SpriteType.Normal:
                    TextureItems.Unserialize(reader);
                    ParseMaskData(reader);
                    break;

                case SpriteType.SWF:
                {
                    if (reader.ReadInt32() != 8)
                    {
                        reader.Warnings.Add(new GMWarning("SWF format not correct"));
                    }
                    TextureItems.Unserialize(reader);

                    // Parse the actual data
                    reader.Pad(4);
                    int begin            = reader.Offset;
                    int jpegTablesLength = (reader.ReadInt32() & ~int.MinValue);
                    if (reader.ReadInt32() != 8)
                    {
                        reader.Warnings.Add(new GMWarning("SWF format not correct"));
                    }
                    reader.Offset += jpegTablesLength;
                    reader.Pad(4);
                    reader.Offset += (reader.ReadInt32() * 8) + 4;
                    int frameCount = reader.ReadInt32();
                    reader.Offset += 16;
                    int maskCount = reader.ReadInt32();
                    reader.Offset += 8;
                    for (int i = 0; i < frameCount; i++)
                    {
                        reader.Offset += (reader.ReadInt32() * 100) + 16;
                    }
                    for (int i = 0; i < maskCount; i++)
                    {
                        reader.Offset += reader.ReadInt32();
                        reader.Pad(4);
                    }
                    int swfDataLength = reader.Offset - begin;
                    reader.Offset = begin;
                    S_Buffer      = reader.ReadBytes(swfDataLength);
                }
                break;

                case SpriteType.Spine:
                {
                    reader.Pad(4);

                    int begin = reader.Offset;
                    reader.ReadUInt32();         // version number
                    int jsonLength    = reader.ReadInt32();
                    int atlasLength   = reader.ReadInt32();
                    int textureLength = reader.ReadInt32();
                    reader.ReadUInt32();         // atlas tex width
                    reader.ReadUInt32();         // atlas tex height
                    reader.Offset = begin;

                    S_Buffer = reader.ReadBytes(24 + jsonLength + atlasLength + textureLength);
                }
                break;
                }
            }
            else
            {
                // Normal, GM:S 1.4 sprite
                reader.Offset -= 4;
                TextureItems.Unserialize(reader);
                ParseMaskData(reader);
            }
        }
Exemple #30
0
 public void Unserialize(GMDataReader reader)
 {
     EffectType = reader.ReadStringPointerObject();
     Properties = new GMList <EffectProperty>();
     Properties.Unserialize(reader);
 }