public XtraListChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { Remnants.Enqueue(input.ReadInt32()); int xtraCount = input.ReadInt32(); for (int i = 0; i < xtraCount; i++) { long xtraEndOffset = input.Position + input.ReadInt32() + 4; int unk2 = input.ReadInt32(); int unk3 = input.ReadInt32(); //Flags or just booleans? Guid guid = new Guid(input.ReadBytes(16)); int[] offsets = new int[input.ReadInt16() + 1]; for (int j = 0; j < offsets.Length; j++) { offsets[j] = input.ReadInt32(); } do { byte unk4 = input.ReadByte(); // 1 when kind = URL byte kind = input.ReadByte(); // 2 -> Name | 0 -> URL, 5 -> File, x32 ?!? no idea string str = input.ReadString(); input.ReadByte(); }while (input.Position != xtraEndOffset); } }
public ScriptChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.IsBigEndian = true; Remnants.Enqueue(input.ReadInt32()); Remnants.Enqueue(input.ReadInt32()); input.ReadInt32(); input.ReadInt32(); input.ReadInt16(); ScriptNumber = input.ReadInt16(); Remnants.Enqueue(input.ReadInt16()); Remnants.Enqueue(input.ReadBEInt32()); // -1 Remnants.Enqueue(input.ReadBEInt32()); // 0 Remnants.Enqueue(input.ReadBEInt32()); Remnants.Enqueue(input.ReadBEInt32()); // 0 BehaviourScript = input.ReadInt32(); //enum, Behav=0, Global=2 Remnants.Enqueue(input.ReadInt32()); Remnants.Enqueue(input.ReadInt16()); //scriptId Remnants.Enqueue(input.ReadBEInt16()); Pool = new LingoValuePool(this, ref input); }
public LingoScriptChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.IsBigEndian = true; input.ReadInt32(); input.ReadInt32(); input.ReadInt32(); input.ReadInt32(); input.ReadInt16(); ScriptNumber = input.ReadInt16(); Remnants.Enqueue(input.ReadInt16()); input.ReadBEInt32(); input.ReadBEInt32(); Remnants.Enqueue(input.ReadBEInt32()); input.ReadBEInt32(); Type = input.ReadInt32(); //TODO: enum, Behav=0, Global=2 Remnants.Enqueue(input.ReadInt32()); CastMemberRef = input.ReadInt16(); //scriptId Remnants.Enqueue(input.ReadBEInt16()); //factoryNameId? Pool = new LingoValuePool(this, ref input); }
public override void WriteBodyTo(ShockwaveWriter output) { const short HEADER_LENGTH = 92; output.Write(0); output.Write(0); output.Write(HEADER_LENGTH + Pool.GetBodySize()); output.Write(HEADER_LENGTH + Pool.GetBodySize()); output.Write(HEADER_LENGTH); output.Write(ScriptNumber); output.Write((short)Remnants.Dequeue()); output.WriteBE(-1); output.WriteBE(0); output.WriteBE((int)Remnants.Dequeue()); output.WriteBE(0); output.Write(Type); output.Write((int)Remnants.Dequeue()); output.Write(CastMemberRef); output.WriteBE((short)Remnants.Dequeue()); Pool.WriteTo(output); }
public ScriptContextChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { Remnants.Enqueue(input.ReadInt32()); Remnants.Enqueue(input.ReadInt32()); Sections = new List <ScriptContextSection>(input.ReadInt32()); input.ReadInt32(); short entryOffset = input.ReadInt16(); input.ReadInt16(); Remnants.Enqueue(input.ReadInt32()); //0 Type = input.ReadInt32(); //TODO: Enum Remnants.Enqueue(input.ReadInt32()); NameListChunkId = input.ReadInt32(); ValidCount = input.ReadInt16(); //validCount - tremor "length" Flags = input.ReadInt16(); //TODO: 1, 5 FreeChunkId = input.ReadInt16(); input.Position = entryOffset; for (int i = 0; i < Sections.Capacity; i++) { Sections.Add(new ScriptContextSection(ref input)); } }
public override void WriteBodyTo(ShockwaveWriter output) { const short ENTRY_OFFSET = 48; output.Write(0); output.Write(0); output.Write(Sections.Count); output.Write(Sections.Count); output.Write(ENTRY_OFFSET); output.Write(SECTION_SIZE); output.Write(0); output.Write(Type); output.Write((int)Remnants.Dequeue()); output.Write(NameChunkId); output.Write(ValidCount); output.Write(Flags); output.Write(FreeChunkId); foreach (LingoContextSection section in Sections) { section.WriteTo(output); } }
public HFloorItem(HPacket packet) : base(packet) { Id = packet.ReadInt32(); TypeId = packet.ReadInt32(); var tile = new HPoint(packet.ReadInt32(), packet.ReadInt32()); Facing = (HDirection)packet.ReadInt32(); tile.Z = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture); Tile = tile; Remnants.Enqueue(packet.ReadUTF8()); Remnants.Enqueue(packet.ReadInt32()); Category = packet.ReadInt32(); Stuff = ReadData(packet, Category); SecondsToExpiration = packet.ReadInt32(); UsagePolicy = packet.ReadInt32(); OwnerId = packet.ReadInt32(); if (TypeId < 0) { Remnants.Enqueue(packet.ReadUTF8()); } }
public override void WriteBodyTo(ShockwaveWriter output) { const short HEADER_LENGTH = 92; output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian(HEADER_LENGTH + Pool.GetBodySize()); output.WriteBigEndian(HEADER_LENGTH + Pool.GetBodySize()); output.WriteBigEndian(HEADER_LENGTH); output.WriteBigEndian(ScriptNumber); output.WriteBigEndian((short)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); output.WriteBigEndian(BehaviourScript); output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian((short)Remnants.Dequeue()); output.Write((short)Remnants.Dequeue()); Pool.WriteTo(output); }
public HItem(HPacket packet) : base(packet) { Remnants.Enqueue(packet.ReadInt32()); string unknown1 = packet.ReadUTF8(); Remnants.Enqueue(unknown1); Id = packet.ReadInt32(); TypeId = packet.ReadInt32(); Remnants.Enqueue(packet.ReadInt32()); Category = packet.ReadInt32(); Stuff = ReadData(packet, Category); IsGroupable = packet.ReadBoolean(); Remnants.Enqueue(packet.ReadBoolean()); Remnants.Enqueue(packet.ReadBoolean()); Remnants.Enqueue(packet.ReadBoolean()); SecondsToExpiration = packet.ReadInt32(); HasRentPeriodStarted = packet.ReadBoolean(); RoomId = packet.ReadInt32(); if (unknown1 == "S") { SlotId = packet.ReadUTF8(); Remnants.Enqueue(packet.ReadInt32()); } }
public ScriptContextChunk(ShockwaveReader input, ChunkHeader header) : base(header) { Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); int entryCount = input.ReadBigEndian <int>(); input.ReadBigEndian <int>(); short entryOffset = input.ReadBigEndian <short>(); //TODO: Research input.ReadBigEndian <short>(); Remnants.Enqueue(input.ReadBigEndian <int>()); //0 Type = input.ReadBigEndian <int>(); //TODO: Enum Remnants.Enqueue(input.ReadBigEndian <int>()); NameListChunkId = input.ReadBigEndian <int>(); Remnants.Enqueue(input.ReadBigEndian <short>()); //validCount Remnants.Enqueue(input.ReadBytes(2)); //flags, short? Remnants.Enqueue(input.ReadBigEndian <short>()); //freePtr input.Position = Header.Offset + entryOffset; Sections = new List <ScriptContextSection>(entryCount); for (int i = 0; i < entryCount; i++) { Sections.Add(new ScriptContextSection(input)); } }
public override void WriteBodyTo(ShockwaveWriter output) { const short ENTRY_OFFSET = 48; output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian(Sections?.Count ?? 0); //TODO: output.WriteBigEndian(Sections?.Count ?? 0); //TODO: output.WriteBigEndian(ENTRY_OFFSET); output.WriteBigEndian(SECTION_SIZE); output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian(Type); output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian(NameListChunkId); output.WriteBigEndian((short)Remnants.Dequeue()); output.Write((byte[])Remnants.Dequeue()); output.WriteBigEndian((short)Remnants.Dequeue()); foreach (ScriptContextSection section in Sections) { section.WriteTo(output); } }
public HEntity(HPacket packet) : base(packet) { Id = packet.ReadInt32(); Name = packet.ReadUTF8(); Motto = packet.ReadUTF8(); FigureId = packet.ReadUTF8(); Index = packet.ReadInt32(); Tile = new HPoint(packet.ReadInt32(), packet.ReadInt32(), double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture)); Remnants.Enqueue(packet.ReadInt32()); EntityType = packet.ReadInt32(); switch (EntityType) { case 1: { Gender = (HGender)packet.ReadUTF8().ToLower()[0]; Remnants.Enqueue(packet.ReadInt32()); Remnants.Enqueue(packet.ReadInt32()); FavoriteGroup = packet.ReadUTF8(); Remnants.Enqueue(packet.ReadUTF8()); Remnants.Enqueue(packet.ReadInt32()); Remnants.Enqueue(packet.ReadBoolean()); break; } case 2: { Remnants.Enqueue(packet.ReadInt32()); Remnants.Enqueue(packet.ReadInt32()); Remnants.Enqueue(packet.ReadUTF8()); Remnants.Enqueue(packet.ReadInt32()); Remnants.Enqueue(packet.ReadBoolean()); Remnants.Enqueue(packet.ReadBoolean()); Remnants.Enqueue(packet.ReadBoolean()); Remnants.Enqueue(packet.ReadBoolean()); Remnants.Enqueue(packet.ReadBoolean()); Remnants.Enqueue(packet.ReadBoolean()); Remnants.Enqueue(packet.ReadInt32()); Remnants.Enqueue(packet.ReadUTF8()); break; } case 4: { Remnants.Enqueue(packet.ReadUTF8()); Remnants.Enqueue(packet.ReadInt32()); Remnants.Enqueue(packet.ReadUTF8()); for (int j = packet.ReadInt32(); j > 0; j--) { Remnants.Enqueue(packet.ReadUInt16()); } break; } } }
public override void WriteTo(HPacket packet) { packet.Write((int)Remnants.Dequeue()); string unknown1 = (string)Remnants.Dequeue(); packet.Write(unknown1); }
public FavoriteColorsChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { Remnants.Enqueue(input.ReadInt32()); //1 Remnants.Enqueue(input.ReadInt32()); //1 for (int i = 0; i < Colors.Length; i++) { Colors[i] = Color.FromArgb(input.ReadByte(), input.ReadByte(), input.ReadByte()); } }
public override void WriteBodyTo(ShockwaveWriter output) { output.Write((int)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); foreach (Color color in Colors) { output.Write(color.R); output.Write(color.G); output.Write(color.B); } }
public override void WriteTo(HPacket packet) { packet.Write(Index); packet.Write(Tile.X); packet.Write(Tile.Y); packet.Write(Tile.Z.ToString(CultureInfo.InvariantCulture)); packet.Write((int)HeadFacing); packet.Write((int)BodyFacing); packet.Write((string)Remnants.Dequeue()); }
public override void WriteBodyTo(ShockwaveWriter output) { output.WriteBE(MemoryMapOffsets.Length); for (int i = 0; i < MemoryMapOffsets.Length; i++) { output.WriteBE(MemoryMapOffsets[i]); } output.WriteBE((int)Version); output.WriteBE((short)0); output.WriteBE((short)0); output.WriteBE(0); output.WriteBE((int)Remnants.Dequeue()); }
public ScoreChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { int totalLength = input.ReadInt32(); int headerType = input.ReadInt32(); //-3 int spritePropertiesOffsetThingy = input.ReadInt32(); int[] spritePropertyOffsets = new int[input.ReadInt32() + 1]; int notationOffset = input.ReadInt32() * sizeof(int) + 12 + spritePropertiesOffsetThingy; //..* 4 *.. int lastSpritePropertyOffset = input.ReadInt32(); for (int i = 0; i < spritePropertyOffsets.Length; i++) { spritePropertyOffsets[i] = input.ReadInt32(); } //notationOffset int frameEndOffset = input.ReadInt32(); Remnants.Enqueue(input.ReadInt32()); Frames = new Frame[input.ReadInt32()]; short framesType = input.ReadInt16(); //13, 14 short channelLength = input.ReadInt16(); short lastChannelMax = input.ReadInt16(); //1006 short lastChannel = input.ReadInt16(); for (int i = 0; i < Frames.Length; i++) { Frames[i] = new Frame(ref input); } int[] spritePropertyOffsetIndices = new int[input.ReadInt32()]; for (int i = 0; i < spritePropertyOffsetIndices.Length; i++) { spritePropertyOffsetIndices[i] = input.ReadInt32(); } SpriteProperties[] spriteProperties = new SpriteProperties[spritePropertyOffsetIndices.Length]; for (int i = 0; i < spritePropertyOffsetIndices.Length; i++) { int spritePropertyOffset = spritePropertyOffsets[spritePropertyOffsetIndices[i]]; input.Position = notationOffset + spritePropertyOffset; spriteProperties[i] = new SpriteProperties(ref input); } }
public ScoreChunk(ShockwaveReader input, ChunkHeader header) : base(header) { int totalLength = input.ReadBigEndian <int>(); int headerType = input.ReadBigEndian <int>(); //-3 int spritePropertiesOffsetThingy = input.ReadBigEndian <int>(); int[] spritePropertyOffsets = new int[input.ReadBigEndian <int>() + 1]; int notationOffset = input.ReadBigEndian <int>() * 4 + 12 + spritePropertiesOffsetThingy; int lastSpritePropertyOffset = input.ReadBigEndian <int>(); for (int i = 0; i < spritePropertyOffsets.Length; i++) { spritePropertyOffsets[i] = input.ReadBigEndian <int>(); } Debug.Assert(input.Position == (Header.Offset + notationOffset), "What"); int frameEndOffset = input.ReadBigEndian <int>(); Remnants.Enqueue(input.ReadBigEndian <int>()); Frames = new Frame[input.ReadBigEndian <int>()]; short framesType = input.ReadBigEndian <short>(); //13, 14 short channelLength = input.ReadBigEndian <short>(); short lastChannelMax = input.ReadBigEndian <short>(); //1006 short lastChannel = input.ReadBigEndian <short>(); for (int i = 0; i < Frames.Length; i++) { Frames[i] = new Frame(input); } int[] spritePropertyOffsetIndices = new int[input.ReadBigEndian <int>()]; for (int i = 0; i < spritePropertyOffsetIndices.Length; i++) { spritePropertyOffsetIndices[i] = input.ReadBigEndian <int>(); } SpriteProperties[] spriteProperties = new SpriteProperties[spritePropertyOffsetIndices.Length]; for (int i = 0; i < spritePropertyOffsetIndices.Length; i++) { int spritePropertyOffset = spritePropertyOffsets[spritePropertyOffsetIndices[i]]; input.Position = Header.Offset + notationOffset + spritePropertyOffset; spriteProperties[i] = new SpriteProperties(input); } }
public override void WriteBodyTo(ShockwaveWriter output) { output.Write((byte)0); output.Write7BitEncodedInt((int)Remnants.Dequeue()); //TODO: Wrap dat compressor output.Write7BitEncodedInt((int)Remnants.Dequeue()); output.Write7BitEncodedInt((int)Remnants.Dequeue()); output.Write7BitEncodedInt(Entries.Length); foreach (var entry in Entries) { entry.WriteTo(output); } }
public InitialMapChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { MemoryMapOffsets = new int[input.ReadBEInt32()]; for (int i = 0; i < MemoryMapOffsets.Length; i++) { MemoryMapOffsets[i] = input.ReadBEInt32(); } Version = (DirectorVersion)input.ReadBEInt32(); input.ReadBEInt16(); input.ReadBEInt16(); //TODO: verify, note: what the hell is going on, how I didn't notice these before input.ReadBEInt32(); Remnants.Enqueue(input.ReadBEInt32()); }
public override void WriteBodyTo(ShockwaveWriter output) { output.Write((short)Remnants.Dequeue()); output.Write(ENTRY_SIZE); output.Write(Entries.Length); //TODO: I GUESS output.Write(Entries.Length); output.Write(LastJunkId); output.Write((int)Remnants.Dequeue()); output.Write(LastFreeId); for (int i = 0; i < Entries.Length; i++) { output.Write(Entries[i]); } }
public override void WriteBodyTo(ShockwaveWriter output) { output.Write((int)Type); output.Write(Common.GetBodySize()); //TODO: output.Write(Properties.GetBodySize()); output.Write((int)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); output.Write((int)Remnants.Dequeue()); Common.WriteTo(output); //TODO: Properties.WriteTo(output); }
public override void WriteBodyTo(ShockwaveWriter output) { output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian(Entries.Count); output.WriteBigEndian((int)Remnants.Dequeue()); output.WriteBigEndian((int)Remnants.Dequeue()); for (int i = 0; i < Entries.Count; i++) { output.WriteBigEndian(Entries[i]); } }
public AfterburnerMapChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.ReadByte(); Remnants.Enqueue(input.Read7BitEncodedInt()); using var deflaterInput = CreateDeflateReader(ref input); Remnants.Enqueue(deflaterInput.Read7BitEncodedInt()); Remnants.Enqueue(deflaterInput.Read7BitEncodedInt()); Entries = new AfterBurnerMapEntry[deflaterInput.Read7BitEncodedInt()]; for (int i = 0; i < Entries.Length; i++) { Entries[i] = new AfterBurnerMapEntry(deflaterInput); } }
public override void WriteBodyTo(ShockwaveWriter output) { output.WriteBE(ENTRIES_OFFSET); output.WriteBE(ENTRY_SIZE); output.WriteBE(Entries.Length); //TODO: I GUESS output.WriteBE(Entries.Length); output.WriteBE(LastJunkId); output.WriteBE((int)Remnants.Dequeue()); output.WriteBE(LastFreeId); foreach (var entry in Entries) { entry.WriteTo(output); } }
public CastMemberPropertiesChunk(ShockwaveReader input, ChunkHeader header) : base(header) { Type = (CastType)input.ReadBigEndian <int>(); input.ReadBigEndian <int>(); int dataLength = input.ReadBigEndian <int>(); Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); Common = new CommonMemberProperties(input); Properties = ReadTypeProperties(input, dataLength); }
public override void WriteBodyTo(ShockwaveWriter output) { output.Write((int)Remnants.Dequeue()); output.Write(Height); output.Write(Width); output.Write((short)Display); output.Write(GridColor); output.Write((short)Guides.Length); output.Write(GuideColor); foreach (Guide guide in Guides) { guide.WriteTo(output); } }
public SortOrderChunk(ShockwaveReader input, ChunkHeader header) : base(header) { Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); Entries = new List <int>(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); for (int i = 0; i < Entries.Capacity; i++) { Entries.Add(input.ReadBigEndian <int>()); } }
public GridChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { Remnants.Enqueue(input.ReadInt32()); Width = input.ReadInt16(); Height = input.ReadInt16(); Display = (GridDisplay)input.ReadInt16(); GridColor = input.ReadInt16(); Guides = new Guide[input.ReadInt16()]; GuideColor = input.ReadInt16(); for (int i = 0; i < Guides.Length; i++) { Guides[i] = new Guide(ref input); } }