public LingoContextSection(ref ShockwaveReader input) { Unknown = input.ReadInt32(); Id = input.ReadInt32(); Flags = (LingoContextSectionFlags)input.ReadInt16(); Link = input.ReadInt16(); }
public ScriptChunk(ShockwaveReader input, ChunkHeader header) : base(header) { Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <int>()); input.ReadBigEndian <int>(); input.ReadBigEndian <int>(); input.ReadBigEndian <short>(); ScriptNumber = input.ReadBigEndian <short>(); Remnants.Enqueue(input.ReadBigEndian <short>()); Remnants.Enqueue(input.ReadInt32()); // -1 Remnants.Enqueue(input.ReadInt32()); // 0 Remnants.Enqueue(input.ReadInt32()); Remnants.Enqueue(input.ReadInt32()); // 0 BehaviourScript = input.ReadBigEndian <int>(); //enum, Behav=0, Global=2 Remnants.Enqueue(input.ReadBigEndian <int>()); Remnants.Enqueue(input.ReadBigEndian <short>()); //scriptId Remnants.Enqueue(input.ReadInt16()); Pool = new LingoValuePool(this, input); }
public ChunkEntry(ShockwaveReader input) : this(new ChunkHeader(input)) { Offset = input.ReadInt32(); Flags = (ChunkEntryFlags)input.ReadInt16(); Unknown = input.ReadInt16(); Link = input.ReadInt32(); }
public InitialMapChunk(ShockwaveReader input, ChunkHeader header) : base(header) { MemoryMapOffsets = new int[input.ReadInt32()]; for (int i = 0; i < MemoryMapOffsets.Length; i++) { MemoryMapOffsets[i] = input.ReadInt32(); } Version = (DirectorVersion)input.ReadInt32(); }
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 SpriteProperties(ref ShockwaveReader input) { StartFrame = input.ReadInt32(); EndFrame = input.ReadInt32(); input.ReadInt32(); Channel = input.ReadInt32(); SpritePropertiesOffsetsOffset = input.ReadInt32(); input.Advance(28); }
public FileInfoChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { /* * def parseSubstrings(self, data, hasHeader=True): * if hasHeader: * ci_offset = read32(data) * unk2 = read32(data) # not int! * unk3 = read32(data) # not int! * entryType = read32(data) * data.seek(ci_offset) * else: * unk2 = 0 * unk3 = 0 * entryType = 0 * * count = read16(data) + 1 * entries = [] * for i in range(count): * entries.append(read32(data)) * rawdata = data.read(entries[-1]) * assert entries[0] == 0 * assert entries[-1] == len(rawdata) * * strings = [] * for i in range(count-1): * strings.append(rawdata[entries[i]:entries[i+1]]) * * return (strings, unk2, unk3, entryType) * * * */ BitField = input.ReadBytes(input.ReadInt32()).ToArray(); Offsets = new List <int>(input.ReadInt16()); input.ReadByte(); for (short i = 0; i < Offsets.Capacity; i++) { Offsets.Add(input.ReadInt32()); } input.ReadByte(); CreatedBy = input.ReadString(); input.ReadByte(); ModifiedBy = input.ReadString(); input.ReadByte(); FilePath = input.ReadString(); }
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 AssociationTableChunk(ShockwaveReader input, ChunkHeader header) : base(header) { input.ReadInt16(); input.ReadInt16(); CastEntries = new List <CastEntry>(input.ReadInt32()); AssignedCount = input.ReadInt32(); for (int i = 0; i < CastEntries.Capacity; i++) { CastEntries.Add(new CastEntry(input)); } //CastEntries.RemoveRange(AssignedCount, TotalCount - AssignedCount); }
public ChunkHeader(ShockwaveReader input) : this(input.ReadReversedString(4)) { Length = (IsVariableLength ? input.Read7BitEncodedInt() : input.ReadInt32()); Offset = input.Position; }
public BitmapCastProperties(ref ShockwaveReader input) { int v27 = input.ReadUInt16(); TotalWidth = v27 & 0x7FFF; //TODO: what does that last bit even do.. some sneaky flag? //DIRAPI checks if TotalWidth & 0x8000 == 0 Rectangle = input.ReadRect(); AlphaThreshold = input.ReadByte(); OLE = input.ReadBytes(7).ToArray(); RegistrationPoint = input.ReadPoint(); Flags = (BitmapFlags)input.ReadByte(); if (!input.IsDataAvailable) { return; } BitDepth = input.ReadByte(); if (!input.IsDataAvailable) { return; } Palette = input.ReadInt32(); //TODO: PaletteRef or something if (!IsSystemPalette) { Palette &= 0x7FFF; } }
public LingoHandler(ScriptChunk script, ref ShockwaveReader input) : this(script) { NameIndex = input.ReadInt16(); HandlerVectorPosition = input.ReadInt16(); Body = new LingoHandlerBody(this, input); _codeOffset = input.ReadInt32(); Arguments.Capacity = input.ReadInt16(); _argumentsOffset = input.ReadInt32(); Locals.Capacity = input.ReadInt16(); _localsOffset = input.ReadInt32(); short unk1Length = input.ReadInt16(); int unk1Offset = input.ReadInt32(); int unk2Length = input.ReadInt32(); int unk2Offset = input.ReadInt16(); BytesPerLine.Capacity = input.ReadInt16(); _lineOffset = input.ReadInt32(); Body.StackHeight = input.ReadInt32(); }
public CastAssociationTableChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { Members = new int[header.Length / sizeof(int)]; for (int i = 0; i < Members.Length; i++) { Members[i] = input.ReadInt32(); } }
public StyledTextChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.IsBigEndian = true; input.ReadInt32(); int textLength = input.ReadInt32(); input.ReadInt32(); Text = input.ReadString(textLength); Formattings = new TextFormat[input.ReadInt16()]; for (int i = 0; i < Formattings.Length; i++) { Formattings[i] = new TextFormat(ref input); } }
public TextFormat(ref ShockwaveReader input) { Offset = input.ReadInt32(); Height = input.ReadInt16(); Ascent = input.ReadInt16(); FontId = input.ReadInt16(); Slant = input.ReadBoolean(); Padding = input.ReadByte(); FontSize = input.ReadInt16(); Color = input.ReadColor(); }
public CastListEntry(ref ShockwaveReader input) { Name = input.ReadString(); FilePath = input.ReadString(); PreloadSettings = input.ReadInt16(); MemberMin = input.ReadInt16(); MemberCount = input.ReadInt16(); Id = input.ReadInt32(); }
public MovieCastListChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.IsBigEndian = true; input.ReadInt32(); Entries = new List <CastListEntry>(input.ReadInt32()); Remnants.Enqueue(input.ReadInt16()); Unknowns = new int[input.ReadInt32()]; for (int i = 0; i < Unknowns.Length; i++) { Unknowns[i] = input.ReadInt32(); } input.ReadInt32(); for (int i = 0; i < Entries.Capacity; i++) { Entries.Add(new CastListEntry(ref input)); } }
public LingoNameChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.IsBigEndian = true; Remnants.Enqueue(input.ReadInt32()); Remnants.Enqueue(input.ReadInt32()); input.ReadInt32(); input.ReadInt32(); short nameOffset = input.ReadInt16(); Names = new List <string>(input.ReadInt16()); input.Position = nameOffset; for (int i = 0; i < Names.Capacity; i++) { Names.Add(input.ReadString()); } }
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 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 MemoryMapChunk(ShockwaveReader input, ChunkHeader header) : base(header) { Remnants.Enqueue(input.ReadInt16()); input.ReadInt16(); int entryCountMax = input.ReadInt32(); int entryCount = input.ReadInt32(); LastJunkId = input.ReadInt32(); Remnants.Enqueue(input.ReadInt32()); LastFreeId = input.ReadInt32(); Entries = new ChunkEntry[entryCount]; for (int i = 0; i < Entries.Length; i++) { var entry = new ChunkEntry(input); entry.Header.Id = i; Entries[i] = entry; } }
public FileInfoChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.IsBigEndian = true; //TODO: VList BitField = input.ReadBytes(input.ReadInt32()).ToArray(); Offsets = new List <int>(input.ReadInt16()); input.ReadByte(); for (short i = 0; i < Offsets.Capacity; i++) { Offsets.Add(input.ReadInt32()); } input.ReadByte(); CreatedBy = input.ReadString(); input.ReadByte(); ModifiedBy = input.ReadString(); input.ReadByte(); FilePath = input.ReadString(); }
public LingoHandler(LingoScriptChunk script, ref ShockwaveReader input) : this(script) { NameIndex = input.ReadInt16(); HandlerVectorPosition = input.ReadInt16(); Body = new LingoHandlerBody(this, ref input); int codeOffset = input.ReadInt32(); Arguments.Capacity = input.ReadInt16(); int argumentsOffset = input.ReadInt32(); Locals.Capacity = input.ReadInt16(); int localsOffset = input.ReadInt32(); input.ReadInt16(); //offset(?) input.ReadInt32(); //length(?) input.ReadInt32(); //offset? input.ReadInt16(); //length? BytesPerLine.Capacity = input.ReadInt16(); int lineOffset = input.ReadInt32(); Body.StackHeight = input.ReadInt32(); int handlerEndOffset = input.Position; input.Position = codeOffset; input.ReadBytes(Body.Code); input.Position = argumentsOffset; for (int i = 0; i < Arguments.Capacity; i++) { Arguments.Add(input.ReadInt16()); } input.Position = localsOffset; for (int i = 0; i < Locals.Capacity; i++) { Locals.Add(input.ReadInt16()); } input.Position = lineOffset; for (int i = 0; i < BytesPerLine.Capacity; i++) { BytesPerLine.Add(input.ReadByte()); } input.Position = handlerEndOffset; }
public CastMemberPropertiesChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.IsBigEndian = true; Type = (CastType)input.ReadInt32(); input.ReadInt32(); int dataLength = input.ReadInt32(); Remnants.Enqueue(input.ReadInt32()); //TOOD: Why is DIRAPI checking this 24/7 if its a constant(?) 0x14 Remnants.Enqueue(input.ReadInt32()); Remnants.Enqueue(input.ReadInt32()); Remnants.Enqueue(input.ReadInt32()); Remnants.Enqueue(input.ReadInt32()); Common = new CommonMemberProperties(ref input); Properties = ReadTypeProperties(ref input, dataLength); }
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); } }
public CommonMemberProperties(ref ShockwaveReader input) { int[] propertyOffsets = new int[input.ReadInt16() + 1]; for (int i = 0; i < propertyOffsets.Length; i++) { propertyOffsets[i] = input.ReadInt32(); } for (int i = 0; i < propertyOffsets.Length - 1; i++) { int length = propertyOffsets[i + 1] - propertyOffsets[i]; if (length < 1) { continue; } ReadProperty(ref input, i, length); } }
public void ReadValue(ref ShockwaveReader input, int dataOffset) { if (Kind != LiteralKind.Integer) { input.Position = dataOffset + Offset; int length = input.ReadInt32(); Value = Kind switch { LiteralKind.String => input.ReadString(length), LiteralKind.FloatingPoint => input.ReadDouble(), LiteralKind.CompiledJavascript => input.ReadBytes(length).ToArray() }; } else { Value = Offset; } }
public static LingoLiteral Read(ref ShockwaveReader input, LiteralKind entryKind, int entryOffset) { if (entryKind != LiteralKind.Integer) { input.Position = entryOffset; int length = input.ReadInt32(); object value = entryKind switch { LiteralKind.String => input.ReadString(length), LiteralKind.FloatingPoint => input.ReadDouble(), LiteralKind.CompiledJavascript => input.ReadBytes(length).ToArray(), _ => throw new ArgumentException(nameof(Kind)) }; return(new LingoLiteral(entryKind, value)); } else { return(new LingoLiteral(LiteralKind.Integer, entryOffset)); } }
public ScoreReferenceChunk(ref ShockwaveReader input, ChunkHeader header) : base(header) { input.ReadInt32(); input.ReadInt32(); int entryCount = input.ReadInt32(); input.ReadInt32(); input.ReadInt16(); input.ReadInt16(); Remnants.Enqueue(input.ReadInt32()); Entries = new Dictionary <short, int>(entryCount); for (int i = 0; i < entryCount; i++) { Entries.Add(input.ReadInt16(), input.ReadInt32()); } }
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); } }