/// <summary> /// Reads a Handgroup from a supplied Stream. /// </summary> /// <param name="Str">The Stream to read from.</param> public void Read(Stream Str) { using(IoBuffer IOBuf = new IoBuffer(Str)) { m_Version = IOBuf.ReadUInt32(); LightSkin.RightHand.Idle.FileID = IOBuf.ReadUInt32(); LightSkin.RightHand.Idle.TypeID = IOBuf.ReadUInt32(); LightSkin.RightHand.Fist.FileID = IOBuf.ReadUInt32(); LightSkin.RightHand.Fist.TypeID = IOBuf.ReadUInt32(); LightSkin.RightHand.Pointing.FileID = IOBuf.ReadUInt32(); LightSkin.RightHand.Pointing.TypeID = IOBuf.ReadUInt32(); LightSkin.LeftHand.Idle.FileID = IOBuf.ReadUInt32(); LightSkin.LeftHand.Idle.TypeID = IOBuf.ReadUInt32(); LightSkin.LeftHand.Fist.FileID = IOBuf.ReadUInt32(); LightSkin.LeftHand.Fist.TypeID = IOBuf.ReadUInt32(); LightSkin.LeftHand.Pointing.FileID = IOBuf.ReadUInt32(); LightSkin.LeftHand.Pointing.TypeID = IOBuf.ReadUInt32(); MediumSkin.RightHand.Idle.FileID = IOBuf.ReadUInt32(); MediumSkin.RightHand.Idle.TypeID = IOBuf.ReadUInt32(); MediumSkin.RightHand.Fist.FileID = IOBuf.ReadUInt32(); MediumSkin.RightHand.Fist.TypeID = IOBuf.ReadUInt32(); MediumSkin.RightHand.Pointing.FileID = IOBuf.ReadUInt32(); MediumSkin.RightHand.Pointing.TypeID = IOBuf.ReadUInt32(); MediumSkin.LeftHand.Idle.FileID = IOBuf.ReadUInt32(); MediumSkin.LeftHand.Idle.TypeID = IOBuf.ReadUInt32(); MediumSkin.LeftHand.Fist.FileID = IOBuf.ReadUInt32(); MediumSkin.LeftHand.Fist.TypeID = IOBuf.ReadUInt32(); MediumSkin.LeftHand.Pointing.FileID = IOBuf.ReadUInt32(); MediumSkin.LeftHand.Pointing.TypeID = IOBuf.ReadUInt32(); DarkSkin.RightHand.Idle.FileID = IOBuf.ReadUInt32(); DarkSkin.RightHand.Idle.TypeID = IOBuf.ReadUInt32(); DarkSkin.RightHand.Fist.FileID = IOBuf.ReadUInt32(); DarkSkin.RightHand.Fist.TypeID = IOBuf.ReadUInt32(); DarkSkin.RightHand.Pointing.FileID = IOBuf.ReadUInt32(); DarkSkin.RightHand.Pointing.TypeID = IOBuf.ReadUInt32(); DarkSkin.LeftHand.Idle.FileID = IOBuf.ReadUInt32(); DarkSkin.LeftHand.Idle.TypeID = IOBuf.ReadUInt32(); DarkSkin.LeftHand.Fist.FileID = IOBuf.ReadUInt32(); DarkSkin.LeftHand.Fist.TypeID = IOBuf.ReadUInt32(); DarkSkin.LeftHand.Pointing.FileID = IOBuf.ReadUInt32(); DarkSkin.LeftHand.Pointing.TypeID = IOBuf.ReadUInt32(); } }
/// <summary> /// Reads a DGRPSprite from a stream. /// </summary> /// <param name="iff">An Iff instance.</param> /// <param name="stream">A Stream object holding a DGRPSprite.</param> public void Read(uint version, IoBuffer io) { if (version < 20003) { //Unknown ignored "Type" field var type = io.ReadUInt16(); SpriteID = io.ReadUInt16(); SpriteFrameIndex = io.ReadUInt16(); var flagsRaw = io.ReadUInt16(); Flags = (DGRPSpriteFlags)flagsRaw; SpriteOffset.X = io.ReadInt16(); SpriteOffset.Y = io.ReadInt16(); if (version == 20001) { ObjectOffset.Z = io.ReadFloat(); } } else { SpriteID = io.ReadUInt32(); SpriteFrameIndex = io.ReadUInt32(); SpriteOffset.X = io.ReadInt32(); SpriteOffset.Y = io.ReadInt32(); ObjectOffset.Z = io.ReadFloat(); Flags = (DGRPSpriteFlags)io.ReadUInt32(); if (version == 20004) { ObjectOffset.X = io.ReadFloat(); ObjectOffset.Y = io.ReadFloat(); } } }
/// <summary> /// Reads a DGRPImage from a stream. /// </summary> /// <param name="iff">An Iff instance.</param> /// <param name="stream">A Stream object holding a DGRPImage.</param> public void Read(uint version, IoBuffer io) { uint spriteCount = 0; if (version < 20003){ spriteCount = io.ReadUInt16(); Direction = io.ReadByte(); Zoom = io.ReadByte(); }else{ Direction = io.ReadUInt32(); Zoom = io.ReadUInt32(); spriteCount = io.ReadUInt32(); } this.Sprites = new DGRPSprite[spriteCount]; for (var i = 0; i < spriteCount; i++){ var sprite = new DGRPSprite(Parent); sprite.Read(version, io); this.Sprites[i] = sprite; } }
/// <summary> /// Reads a property list from a stream. /// </summary> /// <param name="io">IOBuffer instance used to read an animation.</param> /// <returns>A PropertyList instance.</returns> private PropertyList ReadPropertyList(IoBuffer io) { var propsCount = io.ReadUInt32(); var result = new PropertyListItem[propsCount]; for (var y = 0; y < propsCount; y++) { var item = new PropertyListItem(); var pairsCount = io.ReadUInt32(); for (var z = 0; z < pairsCount; z++) { item.KeyPairs.Add(new KeyValuePair<string, string>( io.ReadPascalString(), io.ReadPascalString() )); } result[y] = item; } return new PropertyList { Items = result }; }
/// <summary> /// Reads a BMP chunk from a stream. /// </summary> /// <param name="version">Version of the SPR2 that this frame belongs to.</param> /// <param name="stream">A IOBuffer object used to read a SPR2 chunk.</param> public void Read(uint version, IoBuffer io) { if (version == 1001) { var spriteVersion = io.ReadUInt32(); var spriteSize = io.ReadUInt32(); } this.Width = io.ReadUInt16(); this.Height = io.ReadUInt16(); this.Flags = io.ReadUInt32(); io.ReadUInt16(); if (this.PaletteID == 0 || this.PaletteID == 0xA3A3) { this.PaletteID = (ushort)Parent.DefaultPaletteID; } TransparentColorIndex = io.ReadUInt16(); var y = io.ReadInt16(); var x = io.ReadInt16(); this.Position = new Vector2(x, y); this.Decode(io); }
/// <summary> /// Reads a SPR2 chunk from a stream. /// </summary> /// <param name="version">Version of the SPR2 that this frame belongs to.</param> /// <param name="stream">A IOBuffer object used to read a SPR2 chunk.</param> public void Read(uint version, IoBuffer io, uint guessedSize) { Version = version; if (version == 1001) { var spriteVersion = io.ReadUInt32(); var spriteSize = io.ReadUInt32(); if (IffFile.RETAIN_CHUNK_DATA) ReadDeferred(1001, io); else ToDecode = io.ReadBytes(spriteSize); } else { if (IffFile.RETAIN_CHUNK_DATA) ReadDeferred(1000, io); else ToDecode = io.ReadBytes(guessedSize); } }
/// <summary> /// Reads a SPRFrame from a stream. /// </summary> /// <param name="iff">An Iff instance.</param> /// <param name="stream">A Stream object holding a SPRFrame.</param> public void Read(uint version, IoBuffer io) { if (version == 1001) { var spriteFersion = io.ReadUInt32(); var size = io.ReadUInt32(); this.Version = spriteFersion; } else { this.Version = version; } var reserved = io.ReadUInt32(); var height = io.ReadUInt16(); var width = io.ReadUInt16(); this.Init(width, height); this.Decode(io); }
public void ReadDeferred(uint version, IoBuffer io) { var reserved = io.ReadUInt32(); var height = io.ReadUInt16(); var width = io.ReadUInt16(); this.Init(width, height); this.Decode(io); }