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")); } } }
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); }
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); }
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); }
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); }
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); }
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); }
public void Unserialize(GMDataReader reader) { Name = reader.ReadStringPointerObject(); Smooth = reader.ReadWideBoolean(); Closed = reader.ReadWideBoolean(); Precision = reader.ReadUInt32(); Points = new GMList <Point>(); Points.Unserialize(reader); }
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> >(); }
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); } }
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(); }
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(); }
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); } } }
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); } }
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()); } }
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")); } }
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()); } } } }
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; } }
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")); } } }
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)); } }
public void Unserialize(GMDataReader reader) { Kind = (PropertyType)reader.ReadInt32(); Name = reader.ReadStringPointerObject(); Value = reader.ReadStringPointerObject(); }
public void Unserialize(GMDataReader reader) { Index = reader.ReadUInt32(); Name = reader.ReadStringPointerObject(); }
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); } }
public void Unserialize(GMDataReader reader) { EffectType = reader.ReadStringPointerObject(); Properties = new GMList <EffectProperty>(); Properties.Unserialize(reader); }