private UI32 ReadUI32(Stream strmSource) { UI32 ui32Result = 0; ui32Result |= (UI32)strmSource.ReadByte(); ui32Result |= (UI32)(strmSource.ReadByte() << 8); ui32Result |= (UI32)(strmSource.ReadByte() << 16); ui32Result |= (UI32)(strmSource.ReadByte() << 24); return(ui32Result); }
public SWFFileHeader(string strFileName) { Stream strmReader = new FileStream(strFileName, FileMode.Open, FileAccess.Read); UI8 ui8SigByteOne = ReadUI8(strmReader); UI8 ui8SigByteTwo = ReadUI8(strmReader); UI8 ui8SigByteThree = ReadUI8(strmReader); if (ui8SigByteOne == (byte)'F' || ui8SigByteOne == (byte)'C') { if (ui8SigByteOne == (byte)'C') { m_bCompressed = true; } if (ui8SigByteTwo == (byte)'W' && ui8SigByteThree == (byte)'S') { m_ui8Version = ReadUI8(strmReader); m_ui32FileLength = ReadUI32(strmReader); if (m_bCompressed) { m_strSignature = "CWS"; strmReader.ReadByte(); strmReader.ReadByte(); DeflateStream zipStream = new DeflateStream(strmReader, CompressionMode.Decompress); strmReader = zipStream; } else { m_strSignature = "FWS"; } m_rectFrameSize = new RECT(strmReader); m_dFrameRate = ReadFrameRate(strmReader); m_ui16FrameCount = ReadUI16(strmReader); strmReader.Close(); } else { throw new Exception("Invalid file format"); } } else { throw new Exception("Invalid file format"); } }
public override void Load(BinaryReader reader, int size) { scriptGameVersion = 2; var sk = reader.BaseStream.Position; UnkBitfield = reader.ReadUInt32(); /* * for (int i = 0; i < 8; ++i) * { * ScriptSlots[i] = reader.ReadByte(); * } */ var Count_OGI = reader.ReadByte(); var Count_Anim = Count_OGI; var Count_Script = reader.ReadByte(); var Count_GameObject = reader.ReadByte(); var Count_UnkI32 = reader.ReadByte(); //reader.ReadUInt32(); var Count_Sound = reader.ReadUInt32(); //Class1 = reader.ReadUInt32(); //Class2 = reader.ReadUInt32(); //Class3 = reader.ReadUInt32(); var len = reader.ReadInt32(); Name = new string(reader.ReadChars(len)); // Read UInt32 script slots UI32.Clear(); for (int i = 0; i < Count_UnkI32; ++i) { UI32.Add(reader.ReadUInt32()); } // Read OGI script slots OGIs.Clear(); for (int i = 0; i < Count_OGI; ++i) { OGIs.Add(reader.ReadUInt16()); } // Read Animation script slots Anims.Clear(); for (int i = 0; i < Count_Anim; ++i) { Anims.Add(reader.ReadUInt16()); } // Read Script script slots Scripts.Clear(); for (int i = 0; i < Count_Script; ++i) { Scripts.Add(reader.ReadUInt16()); } // Read Object script slots Objects.Clear(); for (int i = 0; i < Count_GameObject; ++i) { Objects.Add(reader.ReadUInt16()); } // Read Sound script slots Sounds.Clear(); for (int i = 0; i < Count_Sound; ++i) { Sounds.Add(reader.ReadUInt16()); } // Read instance properties if ((UnkBitfield & 0x20000000) != 0x0) { //PHeader = reader.ReadUInt32(); //reader.BaseStream.Position -= 4; var Count_Flags = reader.ReadByte(); var Count_Floats = reader.ReadByte(); var Count_Ints = reader.ReadByte(); reader.ReadByte(); PUI32 = reader.ReadUInt32(); instFlagsList.Clear(); for (int i = 0; i < Count_Flags; ++i) { instFlagsList.Add(reader.ReadUInt32()); } instFloatsList.Clear(); for (int i = 0; i < Count_Floats; ++i) { instFloatsList.Add(reader.ReadSingle()); } instIntegerList.Clear(); for (int i = 0; i < Count_Ints; ++i) { instIntegerList.Add(reader.ReadUInt32()); } } else { //PHeader = 0; PUI32 = 0; instFlagsList.Clear(); instFloatsList.Clear(); instIntegerList.Clear(); } // Read IDs needed for instance creation if ((UnkBitfield & 0x40000000) != 0x0) { flag = reader.ReadUInt32(); if ((flag & 0x00000001) != 0) { var cnt = reader.ReadInt32(); cObjects.Clear(); for (int i = 0; i < cnt; ++i) { cObjects.Add(reader.ReadUInt16()); } } if ((flag & 0x00000002) != 0) { var cnt = reader.ReadInt32(); cOGIs.Clear(); for (int i = 0; i < cnt; ++i) { cOGIs.Add(reader.ReadUInt16()); } } if ((flag & 0x00000004) != 0) { var cnt = reader.ReadInt32(); cAnims.Clear(); for (int i = 0; i < cnt; ++i) { cAnims.Add(reader.ReadUInt16()); } } if ((flag & 0x00000008) != 0) { var cnt = reader.ReadInt32(); cCM.Clear(); for (int i = 0; i < cnt; ++i) { cCM.Add(reader.ReadUInt16()); } } if ((flag & 0x00000010) != 0) { var cnt = reader.ReadInt32(); cScripts.Clear(); for (int i = 0; i < cnt; ++i) { cScripts.Add(reader.ReadUInt16()); } } if ((flag & 0x00000020) != 0) { var cnt = reader.ReadInt32(); cUnk.Clear(); for (int i = 0; i < cnt; ++i) { cUnk.Add(reader.ReadUInt16()); } } if ((flag & 0x00000040) != 0) { var cnt = reader.ReadInt32(); cSounds.Clear(); for (int i = 0; i < cnt; ++i) { cSounds.Add(reader.ReadUInt16()); } } } scriptCommandsAmount = (int)reader.ReadUInt32(); if (scriptCommandsAmount != 0) { scriptCommand = new Script.MainScript.ScriptCommand(reader, scriptGameVersion); var command = scriptCommand; do { scriptCommands.Add(command); command = command.nextCommand; } while (command != null); } else { scriptCommand = null; } this.size = size; }
public override void Load(BinaryReader reader, int size) { if (ParentType == SectionType.ScriptX) { scriptGameVersion = 1; } else if (ParentType == SectionType.ScriptDemo) { scriptGameVersion = 2; } else { scriptGameVersion = 0; } var sk = reader.BaseStream.Position; UnkBitfield = reader.ReadUInt32(); for (int i = 0; i < 8; ++i) { ScriptSlots[i] = reader.ReadByte(); } //Class1 = reader.ReadUInt32(); //Class2 = reader.ReadUInt32(); //Class3 = reader.ReadUInt32(); var len = reader.ReadInt32(); Name = new string(reader.ReadChars(len)); // Read UInt32 script slots var cnt = reader.ReadInt32(); UI32.Clear(); for (int i = 0; i < cnt; ++i) { UI32.Add(reader.ReadUInt32()); } // Read OGI script slots cnt = reader.ReadInt32(); OGIs.Clear(); for (int i = 0; i < cnt; ++i) { OGIs.Add(reader.ReadUInt16()); } // Read Animation script slots cnt = reader.ReadInt32(); Anims.Clear(); for (int i = 0; i < cnt; ++i) { Anims.Add(reader.ReadUInt16()); } // Read Script script slots cnt = reader.ReadInt32(); Scripts.Clear(); for (int i = 0; i < cnt; ++i) { Scripts.Add(reader.ReadUInt16()); } // Read Object script slots cnt = reader.ReadInt32(); Objects.Clear(); for (int i = 0; i < cnt; ++i) { Objects.Add(reader.ReadUInt16()); } // Read Sound script slots cnt = reader.ReadInt32(); Sounds.Clear(); for (int i = 0; i < cnt; ++i) { Sounds.Add(reader.ReadUInt16()); } // Read instance properties if ((UnkBitfield & 0x20000000) != 0x0) { PHeader = reader.ReadUInt32(); PUI32 = reader.ReadUInt32(); cnt = reader.ReadInt32(); instFlagsList.Clear(); for (int i = 0; i < cnt; ++i) { instFlagsList.Add(reader.ReadUInt32()); } cnt = reader.ReadInt32(); instFloatsList.Clear(); for (int i = 0; i < cnt; ++i) { instFloatsList.Add(reader.ReadSingle()); } cnt = reader.ReadInt32(); instIntegerList.Clear(); for (int i = 0; i < cnt; ++i) { instIntegerList.Add(reader.ReadUInt32()); } } else { PHeader = 0; PUI32 = 0; instFlagsList.Clear(); instFloatsList.Clear(); instIntegerList.Clear(); } // Read IDs needed for instance creation if ((UnkBitfield & 0x40000000) != 0x0) { flag = reader.ReadUInt32(); if ((flag & 0x00000001) != 0) { cnt = reader.ReadInt32(); cObjects.Clear(); for (int i = 0; i < cnt; ++i) { cObjects.Add(reader.ReadUInt16()); } } if ((flag & 0x00000002) != 0) { cnt = reader.ReadInt32(); cOGIs.Clear(); for (int i = 0; i < cnt; ++i) { cOGIs.Add(reader.ReadUInt16()); } } if ((flag & 0x00000004) != 0) { cnt = reader.ReadInt32(); cAnims.Clear(); for (int i = 0; i < cnt; ++i) { cAnims.Add(reader.ReadUInt16()); } } if ((flag & 0x00000008) != 0) { cnt = reader.ReadInt32(); cCM.Clear(); for (int i = 0; i < cnt; ++i) { cCM.Add(reader.ReadUInt16()); } } if ((flag & 0x00000010) != 0) { cnt = reader.ReadInt32(); cScripts.Clear(); for (int i = 0; i < cnt; ++i) { cScripts.Add(reader.ReadUInt16()); } } if ((flag & 0x00000020) != 0) { cnt = reader.ReadInt32(); cUnk.Clear(); for (int i = 0; i < cnt; ++i) { cUnk.Add(reader.ReadUInt16()); } } if ((flag & 0x00000040) != 0) { cnt = reader.ReadInt32(); cSounds.Clear(); for (int i = 0; i < cnt; ++i) { cSounds.Add(reader.ReadUInt16()); } } } scriptCommandsAmount = (int)reader.ReadUInt32(); if (scriptCommandsAmount != 0) { scriptCommand = new Script.MainScript.ScriptCommand(reader, scriptGameVersion); var command = scriptCommand; do { scriptCommands.Add(command); command = command.nextCommand; } while (command != null); } else { scriptCommand = null; } this.size = size; }