This chunk type holds a number of paletted sprites that may have z-buffer and/or alpha channels.
Inheritance: IFFChunk
Ejemplo n.º 1
0
        /// <summary>
        /// Disposes of the resources used by this Iff instance.
        /// <param name="Disposed">Was this resource disposed explicitly?</param>
        /// </summary>
        protected virtual void Dispose(bool Disposed)
        {
            if (Disposed)
            {
                if (m_Reader != null)
                {
                    m_Reader.Dispose();
                }

                foreach (KeyValuePair <ushort, IFFChunk> KVP in m_SPR2Chunks)
                {
                    SPR2 Sprite = (SPR2)KVP.Value;

                    if (Sprite != null)
                    {
                        Sprite.Dispose();
                    }
                }

                foreach (KeyValuePair <ushort, IFFChunk> KVP in m_SPRChunks)
                {
                    SPR Sprite = (SPR)KVP.Value;

                    if (Sprite != null)
                    {
                        Sprite.Dispose();
                    }
                }

                foreach (KeyValuePair <ushort, IFFChunk> KVP in m_BMP_Chunks)
                {
                    BMP_ Bitmap = (BMP_)KVP.Value;

                    if (Bitmap != null)
                    {
                        Bitmap.Dispose();
                    }
                }

                foreach (KeyValuePair <ushort, IFFChunk> KVP in m_FBMPChunks)
                {
                    FBMP Bitmap = (FBMP)KVP.Value;

                    if (Bitmap != null)
                    {
                        Bitmap.Dispose();
                    }
                }

                // Prevent the finalizer from calling ~Iff, since the object is already disposed at this point.
                GC.SuppressFinalize(this);
            }
            else
            {
                m_Logger.Error("Iff not explicitly disposed!");
            }
        }
Ejemplo n.º 2
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.º 3
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;
                }
            }
        }