public SPR2(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version = Reader.ReadUInt32(); uint SpriteCount = 0; if (Version == 1000) { SpriteCount = Reader.ReadUInt32(); m_PaletteID = Reader.ReadUInt32(); for (int i = 0; i < SpriteCount; i++) { m_OffsetTable.Add(Reader.ReadUInt32()); } } else { m_PaletteID = Reader.ReadUInt32(); SpriteCount = Reader.ReadUInt32(); m_OffsetTable.Add((uint)Reader.Position); } Reader.Close(); //m_Data = null; //Don't do this here! }
public FCNS(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Reader.ReadInt32(); //4 bytes always set to 0. int Version = Reader.ReadInt32(); Reader.ReadInt32(); //'SNCF' uint Count = Reader.ReadUInt32(); for(int i = 0; i < Count; i++) { if(Version == 1) { FCNSConstant Constant = new FCNSConstant(); Constant.Name = Reader.ReadPaddedCString(); Constant.Value = Reader.ReadPaddedCString(); Reader.ReadPaddedCString(); //Description } else { FCNSConstant Constant = new FCNSConstant(); Constant.Name = Reader.ReadString(); Constant.Value = Reader.ReadString(); Reader.ReadString(); //Description } } Reader.Close(); m_Data = null; }
public DGRP(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); m_Version = Reader.ReadUShort(); switch(m_Version) { case 20000: ImageCount = Reader.ReadUShort(); break; case 20001: ImageCount = Reader.ReadUShort(); break; case 20003: ImageCount = Reader.ReadUInt32(); break; case 20004: ImageCount = Reader.ReadUInt32(); break; } for(int i = 0; i < ImageCount; i++) { Images.Add(new DGRPImg(Reader, m_Version)); } Reader.Close(); m_Data = null; }
public FCNS(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Reader.ReadInt32(); //4 bytes always set to 0. int Version = Reader.ReadInt32(); Reader.ReadInt32(); //'SNCF' uint Count = Reader.ReadUInt32(); for (int i = 0; i < Count; i++) { if (Version == 1) { FCNSConstant Constant = new FCNSConstant(); Constant.Name = Reader.ReadPaddedCString(); Constant.Value = Reader.ReadPaddedCString(); Reader.ReadPaddedCString(); //Description } else { FCNSConstant Constant = new FCNSConstant(); Constant.Name = Reader.ReadString(); Constant.Value = Reader.ReadString(); Reader.ReadString(); //Description } } Reader.Close(); m_Data = null; }
public IFFChunk(IFFChunk BaseChunk) { m_Data = BaseChunk.m_Data; Size = BaseChunk.Size; ID = BaseChunk.ID; Type = BaseChunk.Type; }
public IFFChunk(IFFChunk BaseChunk) { m_Data = BaseChunk.m_Data; Size = BaseChunk.Size; ID = BaseChunk.ID; Type = BaseChunk.Type; }
public BHAV(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); m_Instructions = new List <byte[]>(); byte[] Header = Reader.ReadBytes(12); m_Signature = (ushort)((Header[1] << 8) | Header[0]); int Count = 0; switch (m_Signature) { case 0x8000: case 0x8001: m_HeaderLength = 12; Count = (Header[3] << 8) | Header[4]; m_Locals = 0; //No locals in code; added in 8002? m_Params = 4; //I can't find this in header; always 4? break; case 0x8002: m_HeaderLength = 12; Count = (Header[3] << 8) | Header[4]; m_Type = Header[5]; m_Params = Header[6]; m_Locals = (ushort)((Header[7] << 8) | Header[8]); m_Flags = (ushort)((Header[9] << 8) | Header[10]); //Byte 11 and 12 are set to 0 in this version, we have no use for them. break; case 0x8003: m_HeaderLength = 13; byte LastHeaderByte = Reader.ReadByte(); Count = (((((LastHeaderByte << 8) | Header[11]) << 8) | Header[10]) << 8) | Header[9]; m_Type = Header[3]; m_Params = Header[4]; m_Locals = Header[5]; //Byte number 6 and 7 are unknown in this version, we have no use for them. m_Flags = (ushort)((Header[8] << 8) | Header[9]); break; } m_NumInstructions = (byte)Count; if (Count <= 0 || Count > 253) { return; } //Read all the instructions... for (int i = 0; i < Count; i++) { m_Instructions.Add(Reader.ReadBytes(12)); } }
public DGRP(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); m_Version = Reader.ReadUShort(); switch (m_Version) { case 20000: ImageCount = Reader.ReadUShort(); break; case 20001: ImageCount = Reader.ReadUShort(); break; case 20003: ImageCount = Reader.ReadUInt32(); break; case 20004: ImageCount = Reader.ReadUInt32(); break; } for (int i = 0; i < ImageCount; i++) { Images.Add(new DGRPImg(Reader, m_Version)); } Reader.Close(); m_Data = null; }
public SPR2(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version = Reader.ReadUInt32(); uint SpriteCount = 0; if(Version == 1000) { SpriteCount = Reader.ReadUInt32(); m_PaletteID = Reader.ReadUInt32(); for (int i = 0; i < SpriteCount; i++) m_OffsetTable.Add(Reader.ReadUInt32()); } else { m_PaletteID = Reader.ReadUInt32(); SpriteCount = Reader.ReadUInt32(); m_OffsetTable.Add((uint)Reader.Position); } Reader.Close(); //m_Data = null; //Don't do this here! }
public SPR(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version1 = Reader.ReadUShort(); Version2 = Reader.ReadUShort(); if(Version1 == 0) { Version = Version2; Reader = new FileReader(new MemoryStream(Reader.ReadToEnd()), true); } else Version = Version1; uint SpriteCount = Reader.ReadUInt32(); m_PaletteID = Reader.ReadUInt32(); if (Version >= 502 && Version <= 505) { //TODO: Should this be stored? for (int i = 0; i < SpriteCount; i++) m_OffsetTable.Add(Reader.ReadUInt32()); } else m_OffsetTable.Add((uint)Reader.Position); Reader.Close(); //m_Data = null; //DON'T DO THIS! }
public FBMP(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), true); BitmapStream = new MemoryStream(Reader.ReadToEnd()); Reader.Close(); }
public FBMP(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), true); BitmapStream = new MemoryStream(Reader.ReadToEnd()); Reader.Close(); }
public IFFChunk(IFFChunk BaseChunk) { m_Parent = BaseChunk.m_Parent; m_Device = BaseChunk.m_Parent.Device; m_Data = BaseChunk.m_Data; Size = BaseChunk.Size; ID = BaseChunk.ID; Type = BaseChunk.Type; }
public FWAV(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); TrackEventPair = Reader.ReadCString(); Reader.Close(); m_Data = null; }
public FWAV(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); TrackEventPair = Reader.ReadCString(); Reader.Close(); m_Data = null; }
public BCON(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); byte NumConstants = Reader.ReadByte(); Reader.ReadByte(); //Unknown. for (int i = 0; i < NumConstants; i++) Constants.Add(Reader.ReadInt16()); }
public GLOB(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); ASCIIEncoding Enc = new ASCIIEncoding(); byte[] Data = Reader.ReadToEnd(); SemiGlobalIFF = Enc.GetString(Data); Reader.Close(); m_Data = null; }
public GLOB(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); ASCIIEncoding Enc = new ASCIIEncoding(); byte[] Data = Reader.ReadToEnd(); SemiGlobalIFF = Enc.GetString(Data); Reader.Close(); m_Data = null; }
public BCON(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); byte NumConstants = Reader.ReadByte(); Reader.ReadByte(); //Unknown. for (int i = 0; i < NumConstants; i++) { Constants.Add(Reader.ReadInt16()); } }
public PALT(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Reader.ReadUInt32(); //Version m_Colors = new Color[Reader.ReadUInt32()]; Reader.ReadBytes(8); //Reserved for (int i = 0; i < m_Colors.Length; i++) m_Colors[i] = new Color(new Vector3(Reader.ReadByte(), Reader.ReadByte(), Reader.ReadByte())); Reader.Close(); m_Data = null; }
public PALT(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Reader.ReadUInt32(); //Version m_Colors = new Color[Reader.ReadUInt32()]; Reader.ReadBytes(8); //Reserved for (int i = 0; i < m_Colors.Length; i++) { m_Colors[i] = new Color(new Vector3(Reader.ReadByte(), Reader.ReadByte(), Reader.ReadByte())); } Reader.Close(); m_Data = null; }
public SPR2(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version = Reader.ReadUInt32(); if (Version == 1000) { FrameCount = Reader.ReadUInt32(); m_PaletteID = Reader.ReadUInt32(); for (int i = 0; i < FrameCount; i++) { m_OffsetTable.Add(Reader.ReadUInt32()); } } else { m_PaletteID = Reader.ReadUInt32(); Reader.ReadUInt32(); //FrameCount is blank in this version. float Offset = 0; //Read the first sprite's header. Reader.ReadUInt32(); //SpriteVersion uint Size = Reader.ReadUInt32(); Offset = Reader.Position; m_OffsetTable.Add((uint)Offset); Offset += Size; for (int i = 0; m_OffsetTable.Count <= 24; i++) { Reader.ReadUInt32(); //SpriteVersion Size = Reader.ReadUInt32(); Offset = Reader.Position; Offset += Size; m_OffsetTable.Add((uint)Offset); } } Reader.Close(); //m_Data = null; //Don't do this here! }
public OBJf(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Reader.ReadBytes(4); //Zero Reader.ReadBytes(4); //Version Reader.ReadBytes(4); //Magic uint Count = Reader.ReadUInt32(); for (int i = 0; i < Count; i++) { OBJfFunctionPair FuncPair = new OBJfFunctionPair(); FuncPair.ConditionFunction = Reader.ReadUShort(); FuncPair.ActionFunction = Reader.ReadUShort(); FunctionTable.Add(i, FuncPair); } Reader.Close(); m_Data = null; }
public OBJf(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Reader.ReadBytes(4); //Zero Reader.ReadBytes(4); //Version Reader.ReadBytes(4); //Magic uint Count = Reader.ReadUInt32(); for (int i = 0; i < Count; i++) { OBJfFunctionPair FuncPair = new OBJfFunctionPair(); FuncPair.ConditionFunction = Reader.ReadUShort(); FuncPair.ActionFunction = Reader.ReadUShort(); FunctionTable.Add(i, FuncPair); } Reader.Close(); m_Data = null; }
public SPR(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version1 = Reader.ReadUShort(); Version2 = Reader.ReadUShort(); if (Version1 == 0) { Version = Version2; Reader = new FileReader(new MemoryStream(Reader.ReadToEnd()), true); } else { Version = Version1; } uint SpriteCount = Reader.ReadUInt32(); m_PaletteID = Reader.ReadUInt32(); if (Version >= 502 && Version <= 505) { //TODO: Should this be stored? for (int i = 0; i < SpriteCount; i++) { m_OffsetTable.Add(Reader.ReadUInt32()); } } else { m_OffsetTable.Add((uint)Reader.Position); } Reader.Close(); //m_Data = null; //DON'T DO THIS! }
/// <summary> /// Attempts to read an IFF file from a given stream. /// </summary> /// <param name="Data">The stream from which to open the IFF.</param> /// <param name="ThrowException">Should this method throw an exception if it couldn't open the file?</param> /// <returns>True if successful, false otherwise (if ThrowException is set to false).</returns> public bool Init(Stream Data, bool ThrowException) { m_Reader = new FileReader(Data, true); string MagicNumber = m_Reader.ReadString(60); if (!MagicNumber.Equals("IFF FILE 2.5:TYPE FOLLOWED BY SIZE\0 JAMIE DOORNBOS & MAXIS 1\0", StringComparison.InvariantCultureIgnoreCase)) { if (ThrowException) { throw new IFFException("MagicNumber was wrong - IFF.cs!"); } else { return(false); } } m_Reader.ReadUInt32(); //RSMP offset //Size of a chunk header is 76 bytes. while ((m_Reader.StreamLength - m_Reader.Position) > 76) { IFFChunk Chunk; if (m_Device != null) { Chunk = new IFFChunk(m_Reader, m_Device, this); } else { Chunk = new IFFChunk(m_Reader, this); } switch (Chunk.Type) { case IFFChunkTypes.FBMP: FBMP FBMPChunk = new FBMP(Chunk); m_FBMPChunks.Add(Chunk.ID, FBMPChunk); break; case IFFChunkTypes.FWAV: FWAV FWAVChunk = new FWAV(Chunk); m_FWAVChunks.Add(Chunk.ID, FWAVChunk); break; case IFFChunkTypes.BMP_: BMP_ BMPChunk = new BMP_(Chunk); m_BMP_Chunks.Add(Chunk.ID, BMPChunk); break; case IFFChunkTypes.DGRP: DGRP DGRPChunk = new DGRP(Chunk); m_DGRPChunks.Add(Chunk.ID, DGRPChunk); break; case IFFChunkTypes.BCON: BCON BCONChunk = new BCON(Chunk); m_BCONChunks.Add(Chunk.ID, BCONChunk); break; case IFFChunkTypes.GLOB: GLOB GlobChunk = new GLOB(Chunk); m_GLOBChunks.Add(Chunk.ID, GlobChunk); break; case IFFChunkTypes.OBJD: OBJD OBJDChunk = new OBJD(Chunk); m_OBJDs.Add(OBJDChunk); break; case IFFChunkTypes.TTAs: TTAs TTAsChunk = new TTAs(Chunk); m_TTAsChunks.Add(Chunk.ID, TTAsChunk); break; case IFFChunkTypes.TTAB: TTAB TTABChunk = new TTAB(Chunk); TTABChunk.Type = Chunk.Type; TTABChunk.ID = Chunk.ID; m_TTABChunks.Add(Chunk.ID, TTABChunk); break; case IFFChunkTypes.TPRP: TPRP TPRPChunk = new TPRP(Chunk); m_TPRPChunks.Add(Chunk.ID, TPRPChunk); break; case IFFChunkTypes.STR: STR STRChunk = new STR(Chunk); m_STRChunks.Add(Chunk.ID, STRChunk); break; case IFFChunkTypes.BHAV: BHAV BHAVChunk = new BHAV(Chunk); m_BHAVChunks.Add(Chunk.ID, BHAVChunk); break; case IFFChunkTypes.OBJf: OBJf OBJfChunk = new OBJf(Chunk); m_OBJfChunks.Add(Chunk.ID, OBJfChunk); break; case IFFChunkTypes.FCNS: FCNS FCNSChunk = new FCNS(Chunk); m_FCNSChunks.Add(Chunk.ID, FCNSChunk); break; case IFFChunkTypes.SPR: SPR SPRChunk = new SPR(Chunk); m_SPRChunks.Add(Chunk.ID, SPRChunk); break; case IFFChunkTypes.SPR2: SPR2 SPR2Chunk = new SPR2(Chunk); m_SPR2Chunks.Add(Chunk.ID, SPR2Chunk); break; case IFFChunkTypes.PALT: PALT PALTChunk = new PALT(Chunk); m_PALTChunks.Add(Chunk.ID, PALTChunk); break; case IFFChunkTypes.CTSS: CTSS CTSSChunk = new CTSS(Chunk); m_CTSSChunks.Add(Chunk.ID, CTSSChunk); break; case IFFChunkTypes.CST: CST CSTChunk = new CST(Chunk); m_CSTChunks.Add(Chunk.ID, CSTChunk); break; } } return(true); }
public CST(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version = Reader.ReadInt16(); ushort NumStrings = 0; if ((Reader.StreamLength - Reader.Position) > 2) { switch (Version) { case 0: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadPascalString(); if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -1: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadCString(); if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -2: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadCString(); Reader.ReadCString(); //Comment if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -3: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = (LanguageCodes)Reader.ReadByte(); Str.TranslatedStr = Reader.ReadCString(); Reader.ReadCString(); //Comment if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -4: byte LanguageSets = Reader.ReadByte(); for (int i = 0; i < LanguageSets; i++) { NumStrings = Reader.ReadUShort(); for (int j = 0; j < NumStrings; j++) { TranslatedString Str = new TranslatedString(); Str.LangCode = (LanguageCodes)(Reader.ReadByte() + 1); Str.TranslatedStr = Reader.ReadString(); Reader.ReadString(); //Comment if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } } break; } } Reader.Close(); m_Data = null; }
public TTAB(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); }
public BHAV(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); }
public CTSS(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version = Reader.ReadInt16(); ushort NumStrings = 0; if ((Reader.StreamLength - Reader.Position) > 2) { switch (Version) { case 0: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadPascalString(); if (Strings.ContainsKey(Str.LangCode)) { Strings[Str.LangCode].Add(Str); } else { List <TranslatedString> LanguageSet = new List <TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -1: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadCString(); if (Strings.ContainsKey(Str.LangCode)) { Strings[Str.LangCode].Add(Str); } else { List <TranslatedString> LanguageSet = new List <TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -2: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadCString(); Reader.ReadCString(); //Comment if (Strings.ContainsKey(Str.LangCode)) { Strings[Str.LangCode].Add(Str); } else { List <TranslatedString> LanguageSet = new List <TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -3: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = (LanguageCodes)Reader.ReadByte(); Str.TranslatedStr = Reader.ReadCString(); Reader.ReadCString(); //Comment if (Strings.ContainsKey(Str.LangCode)) { Strings[Str.LangCode].Add(Str); } else { List <TranslatedString> LanguageSet = new List <TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -4: byte LanguageSets = Reader.ReadByte(); for (int i = 0; i < LanguageSets; i++) { NumStrings = Reader.ReadUShort(); for (int j = 0; j < NumStrings; j++) { TranslatedString Str = new TranslatedString(); Str.LangCode = (LanguageCodes)(Reader.ReadByte() + 1); Str.TranslatedStr = Reader.ReadString(); Reader.ReadString(); //Comment if (Strings.ContainsKey(Str.LangCode)) { Strings[Str.LangCode].Add(Str); } else { List <TranslatedString> LanguageSet = new List <TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } } break; } } Reader.Close(); m_Data = null; }
public OBJD(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version = Reader.ReadUInt32(); switch(Version) { case 136: m_NumFields = 80; break; case 138: m_NumFields = 95; break; case 139: m_NumFields = 96; break; case 140: m_NumFields = 97; break; case 141: m_NumFields = 97; break; case 142: m_NumFields = 105; break; } InitialStackSize = Reader.ReadUShort(); BaseGraphicID = Reader.ReadUShort(); NumGraphics = Reader.ReadUShort(); MainID = Reader.ReadUShort(); GardeningID = Reader.ReadUShort(); TTABID = Reader.ReadUShort(); InteractionGroup = Reader.ReadUShort(); ObjectType = (OBJDType)Reader.ReadUShort(); MasterID = Reader.ReadUShort(); SubIndex = Reader.ReadInt16(); WashHandsID = Reader.ReadUShort(); AnimTableID = Reader.ReadUShort(); GUID = Reader.ReadUInt32(); Disabled = Reader.ReadUShort(); Portal = Reader.ReadUShort(); Price = Reader.ReadUShort(); BodyStringsID = Reader.ReadUShort(); SLOTID = Reader.ReadUShort(); AllowIntersection = Reader.ReadUShort(); UsesFnTable = Reader.ReadUShort(); Bitfield1 = Reader.ReadUShort(); PrepareFoodID = Reader.ReadUShort(); CookFoodID = Reader.ReadUShort(); PlaceOnSurfaceID = Reader.ReadUShort(); DisposeID = Reader.ReadUShort(); EatFoodID = Reader.ReadUShort(); PickupFromSLOTID = Reader.ReadUShort(); WashDishID = Reader.ReadUShort(); EatingSurfaceID = Reader.ReadUShort(); Sit = Reader.ReadUShort(); Stand = Reader.ReadUShort(); SalePrice = Reader.ReadUShort(); InitialDepreciation = Reader.ReadUShort(); DailyDepreciation = Reader.ReadUShort(); SelfDepreciating = Reader.ReadUShort(); DepreciationLimit = Reader.ReadUShort(); RoomFlags = Reader.ReadUShort(); FunctionFlags = Reader.ReadUShort(); CatalogStringsID = Reader.ReadUShort(); Global = Reader.ReadUShort(); BHAV_Init = Reader.ReadUShort(); BHAV_Place = Reader.ReadUShort(); BHAV_UserPickup = Reader.ReadUShort(); WallStyle = Reader.ReadUShort(); BHAV_Load = Reader.ReadUShort(); BHAV_UserPlace = Reader.ReadUShort(); ObjectVersion = Reader.ReadUShort(); BHAV_RoomChange = Reader.ReadUShort(); MotiveEffectsID = Reader.ReadUShort(); BHAV_Cleanup = Reader.ReadUShort(); BHAV_LevelInfo = Reader.ReadUShort(); CatalogID = Reader.ReadUShort(); BHAV_ServingSurface = Reader.ReadUShort(); LevelOffset = Reader.ReadUShort(); Shadow = Reader.ReadUShort(); NumAttributes = Reader.ReadUShort(); BHAV_Clean = Reader.ReadUShort(); BHAV_QueueSkipped = Reader.ReadUShort(); FrontDirection = Reader.ReadUShort(); BHAV_WallAdjacencyChanged = Reader.ReadUShort(); MyLeadObject = Reader.ReadUShort(); DynamicSpriteBaseId = Reader.ReadUShort(); NumDynamicSprites = Reader.ReadUShort(); ChairEntryFlags = Reader.ReadUShort(); TileWidth = Reader.ReadUShort(); InhibitSuitCopying = Reader.ReadUShort(); BuildModeType = Reader.ReadUShort(); OriginalGUID1 = Reader.ReadUShort(); OriginalGUID2 = Reader.ReadUShort(); SuitGUID1 = Reader.ReadUShort(); SuitGUID2 = Reader.ReadUShort(); BHAV_Pickup = Reader.ReadUShort(); ThumbnailGraphic = Reader.ReadUShort(); ShadowFlags = Reader.ReadUShort(); FootprintMask = Reader.ReadUShort(); BHAV_DynamicMultiTileUpdate = Reader.ReadUShort(); ShadowBrightness = Reader.ReadUShort(); BHAV_Repair = Reader.ReadUShort(); if (m_NumFields > 80) { WallStyleSpriteID = Reader.ReadUShort(); RatingHunger = Reader.ReadUShort(); RatingComfort = Reader.ReadUShort(); RatingHygiene = Reader.ReadUShort(); RatingBladder = Reader.ReadUShort(); RatingEnergy = Reader.ReadUShort(); RatingFun = Reader.ReadUShort(); RatingRoom = Reader.ReadUShort(); RatingSkillFlags = Reader.ReadUShort(); } m_Data = null; }
public OBJD(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version = Reader.ReadUInt32(); switch (Version) { case 136: m_NumFields = 80; break; case 138: m_NumFields = 95; break; case 139: m_NumFields = 96; break; case 140: m_NumFields = 97; break; case 141: m_NumFields = 97; break; case 142: m_NumFields = 105; break; } InitialStackSize = Reader.ReadUShort(); BaseGraphicID = Reader.ReadUShort(); NumGraphics = Reader.ReadUShort(); MainID = Reader.ReadUShort(); GardeningID = Reader.ReadUShort(); TTABID = Reader.ReadUShort(); InteractionGroup = Reader.ReadUShort(); ObjectType = (OBJDType)Reader.ReadUShort(); MasterID = Reader.ReadUShort(); SubIndex = Reader.ReadInt16(); WashHandsID = Reader.ReadUShort(); AnimTableID = Reader.ReadUShort(); GUID = Reader.ReadUInt32(); Disabled = Reader.ReadUShort(); Portal = Reader.ReadUShort(); Price = Reader.ReadUShort(); BodyStringsID = Reader.ReadUShort(); SLOTID = Reader.ReadUShort(); AllowIntersection = Reader.ReadUShort(); UsesFnTable = Reader.ReadUShort(); Bitfield1 = Reader.ReadUShort(); PrepareFoodID = Reader.ReadUShort(); CookFoodID = Reader.ReadUShort(); PlaceOnSurfaceID = Reader.ReadUShort(); DisposeID = Reader.ReadUShort(); EatFoodID = Reader.ReadUShort(); PickupFromSLOTID = Reader.ReadUShort(); WashDishID = Reader.ReadUShort(); EatingSurfaceID = Reader.ReadUShort(); Sit = Reader.ReadUShort(); Stand = Reader.ReadUShort(); SalePrice = Reader.ReadUShort(); InitialDepreciation = Reader.ReadUShort(); DailyDepreciation = Reader.ReadUShort(); SelfDepreciating = Reader.ReadUShort(); DepreciationLimit = Reader.ReadUShort(); RoomFlags = Reader.ReadUShort(); FunctionFlags = Reader.ReadUShort(); CatalogStringsID = Reader.ReadUShort(); Global = Reader.ReadUShort(); BHAV_Init = Reader.ReadUShort(); BHAV_Place = Reader.ReadUShort(); BHAV_UserPickup = Reader.ReadUShort(); WallStyle = Reader.ReadUShort(); BHAV_Load = Reader.ReadUShort(); BHAV_UserPlace = Reader.ReadUShort(); ObjectVersion = Reader.ReadUShort(); BHAV_RoomChange = Reader.ReadUShort(); MotiveEffectsID = Reader.ReadUShort(); BHAV_Cleanup = Reader.ReadUShort(); BHAV_LevelInfo = Reader.ReadUShort(); CatalogID = Reader.ReadUShort(); BHAV_ServingSurface = Reader.ReadUShort(); LevelOffset = Reader.ReadUShort(); Shadow = Reader.ReadUShort(); NumAttributes = Reader.ReadUShort(); BHAV_Clean = Reader.ReadUShort(); BHAV_QueueSkipped = Reader.ReadUShort(); FrontDirection = Reader.ReadUShort(); BHAV_WallAdjacencyChanged = Reader.ReadUShort(); MyLeadObject = Reader.ReadUShort(); DynamicSpriteBaseId = Reader.ReadUShort(); NumDynamicSprites = Reader.ReadUShort(); ChairEntryFlags = Reader.ReadUShort(); TileWidth = Reader.ReadUShort(); InhibitSuitCopying = Reader.ReadUShort(); BuildModeType = Reader.ReadUShort(); OriginalGUID1 = Reader.ReadUShort(); OriginalGUID2 = Reader.ReadUShort(); SuitGUID1 = Reader.ReadUShort(); SuitGUID2 = Reader.ReadUShort(); BHAV_Pickup = Reader.ReadUShort(); ThumbnailGraphic = Reader.ReadUShort(); ShadowFlags = Reader.ReadUShort(); FootprintMask = Reader.ReadUShort(); BHAV_DynamicMultiTileUpdate = Reader.ReadUShort(); ShadowBrightness = Reader.ReadUShort(); BHAV_Repair = Reader.ReadUShort(); if (m_NumFields > 80) { WallStyleSpriteID = Reader.ReadUShort(); RatingHunger = Reader.ReadUShort(); RatingComfort = Reader.ReadUShort(); RatingHygiene = Reader.ReadUShort(); RatingBladder = Reader.ReadUShort(); RatingEnergy = Reader.ReadUShort(); RatingFun = Reader.ReadUShort(); RatingRoom = Reader.ReadUShort(); RatingSkillFlags = Reader.ReadUShort(); } m_Data = null; }
private void Init(Stream Data) { m_Reader = new FileReader(Data, true); string MagicNumber = m_Reader.ReadString(60); if (!MagicNumber.Equals("IFF FILE 2.5:TYPE FOLLOWED BY SIZE\0 JAMIE DOORNBOS & MAXIS 1\0", StringComparison.InvariantCultureIgnoreCase)) throw new IFFException("MagicNumber was wrong - IFF.cs!"); m_Reader.ReadUInt32(); //RSMP offset //Size of a chunk header is 76 bytes. while ((m_Reader.StreamLength - m_Reader.Position) > 76) { IFFChunk Chunk; if (m_Device != null) Chunk = new IFFChunk(m_Reader, m_Device, this); else Chunk = new IFFChunk(m_Reader, this); switch (Chunk.Type) { case IFFChunkTypes.FBMP: FBMP FBMPChunk = new FBMP(Chunk); m_FBMPChunks.Add(Chunk.ID, FBMPChunk); break; case IFFChunkTypes.FWAV: FWAV FWAVChunk = new FWAV(Chunk); m_FWAVChunks.Add(Chunk.ID, FWAVChunk); break; case IFFChunkTypes.BMP_: BMP_ BMPChunk = new BMP_(Chunk); m_BMP_Chunks.Add(Chunk.ID, BMPChunk); break; case IFFChunkTypes.DGRP: DGRP DGRPChunk = new DGRP(Chunk); m_DGRPChunks.Add(Chunk.ID, DGRPChunk); break; case IFFChunkTypes.BCON: BCON BCONChunk = new BCON(Chunk); m_BCONChunks.Add(Chunk.ID, BCONChunk); break; case IFFChunkTypes.GLOB: GLOB GlobChunk = new GLOB(Chunk); m_GLOBChunks.Add(Chunk.ID, GlobChunk); break; case IFFChunkTypes.OBJD: OBJD OBJDChunk = new OBJD(Chunk); m_OBJDs.Add(OBJDChunk); break; case IFFChunkTypes.TTAs: TTAs TTAsChunk = new TTAs(Chunk); m_TTAsChunks.Add(Chunk.ID, TTAsChunk); break; case IFFChunkTypes.TTAB: TTAB TTABChunk = new TTAB(Chunk); TTABChunk.Type = Chunk.Type; TTABChunk.ID = Chunk.ID; m_TTABChunks.Add(Chunk.ID, TTABChunk); break; case IFFChunkTypes.TPRP: TPRP TPRPChunk = new TPRP(Chunk); m_TPRPChunks.Add(Chunk.ID, TPRPChunk); break; case IFFChunkTypes.STR: STR STRChunk = new STR(Chunk); m_STRChunks.Add(Chunk.ID, STRChunk); break; case IFFChunkTypes.BHAV: BHAV BHAVChunk = new BHAV(Chunk); m_BHAVChunks.Add(Chunk.ID, BHAVChunk); break; case IFFChunkTypes.OBJf: OBJf OBJfChunk = new OBJf(Chunk); m_OBJfChunks.Add(Chunk.ID, OBJfChunk); break; case IFFChunkTypes.FCNS: FCNS FCNSChunk = new FCNS(Chunk); m_FCNSChunks.Add(Chunk.ID, FCNSChunk); break; case IFFChunkTypes.SPR: SPR SPRChunk = new SPR(Chunk); m_SPRChunks.Add(Chunk.ID, SPRChunk); break; case IFFChunkTypes.SPR2: SPR2 SPR2Chunk = new SPR2(Chunk); m_SPR2Chunks.Add(Chunk.ID, SPR2Chunk); break; case IFFChunkTypes.PALT: PALT PALTChunk = new PALT(Chunk); m_PALTChunks.Add(Chunk.ID, PALTChunk); break; case IFFChunkTypes.CTSS: CTSS CTSSChunk = new CTSS(Chunk); m_CTSSChunks.Add(Chunk.ID, CTSSChunk); break; case IFFChunkTypes.CST: CST CSTChunk = new CST(Chunk); m_CSTChunks.Add(Chunk.ID, CSTChunk); break; } } }