Ejemplo n.º 1
0
        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!
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 public IFFChunk(IFFChunk BaseChunk)
 {
     m_Data = BaseChunk.m_Data;
     Size   = BaseChunk.Size;
     ID     = BaseChunk.ID;
     Type   = BaseChunk.Type;
 }
Ejemplo n.º 6
0
 public IFFChunk(IFFChunk BaseChunk)
 {
     m_Data = BaseChunk.m_Data;
     Size = BaseChunk.Size;
     ID = BaseChunk.ID;
     Type = BaseChunk.Type;
 }
Ejemplo n.º 7
0
        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));
            }
        }
Ejemplo n.º 8
0
        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;
        }
Ejemplo n.º 9
0
        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!
        }
Ejemplo n.º 10
0
        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!
        }
Ejemplo n.º 11
0
        public FBMP(IFFChunk BaseChunk)
            : base(BaseChunk)
        {
            FileReader Reader = new FileReader(new MemoryStream(m_Data), true);
            BitmapStream = new MemoryStream(Reader.ReadToEnd());

            Reader.Close();
        }
Ejemplo n.º 12
0
        public FBMP(IFFChunk BaseChunk) : base(BaseChunk)
        {
            FileReader Reader = new FileReader(new MemoryStream(m_Data), true);

            BitmapStream = new MemoryStream(Reader.ReadToEnd());

            Reader.Close();
        }
Ejemplo n.º 13
0
 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;
 }
Ejemplo n.º 14
0
        public FWAV(IFFChunk BaseChunk) : base(BaseChunk)
        {
            FileReader Reader = new FileReader(new MemoryStream(m_Data), false);

            TrackEventPair = Reader.ReadCString();

            Reader.Close();
            m_Data = null;
        }
Ejemplo n.º 15
0
        public FWAV(IFFChunk BaseChunk)
            : base(BaseChunk)
        {
            FileReader Reader = new FileReader(new MemoryStream(m_Data), false);

            TrackEventPair = Reader.ReadCString();

            Reader.Close();
            m_Data = null;
        }
Ejemplo n.º 16
0
        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());
        }
Ejemplo n.º 17
0
        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;
        }
Ejemplo n.º 18
0
        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;
        }
Ejemplo n.º 19
0
        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());
            }
        }
Ejemplo n.º 20
0
        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;
        }
Ejemplo n.º 21
0
        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;
        }
Ejemplo n.º 22
0
        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!
        }
Ejemplo n.º 23
0
        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;
        }
Ejemplo n.º 24
0
        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;
        }
Ejemplo n.º 25
0
        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!
        }
Ejemplo n.º 26
0
        /// <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);
        }
Ejemplo n.º 27
0
        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;
        }
Ejemplo n.º 28
0
 public TTAB(IFFChunk BaseChunk)
     : base(BaseChunk)
 {
     FileReader Reader = new FileReader(new MemoryStream(m_Data), false);
 }
Ejemplo n.º 29
0
 public BHAV(IFFChunk BaseChunk) : base(BaseChunk)
 {
     FileReader Reader = new FileReader(new MemoryStream(m_Data), false);
 }
Ejemplo n.º 30
0
        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;
        }
Ejemplo n.º 31
0
        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;
        }
Ejemplo n.º 32
0
        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;
        }
Ejemplo n.º 33
0
        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;
                }
            }
        }