Ejemplo n.º 1
0
        public static FileStream FindBiffFile(ChitinBiff cbiff)
        {
            // First try BG2\Cache - if found it will be generally uncompressed, but just CheckBIFC anyway
            string biffFile = Path.Combine(ApplicationRuntime.AppPaths.CacheDirectory, cbiff.name);

            if (File.Exists(biffFile))
            {
                return(CheckBIFC(biffFile, cbiff.name));
            }

            // Next try BG2\Data
            biffFile = Path.Combine(ApplicationRuntime.AppPaths.GameDirectory, cbiff.name);
            if (File.Exists(biffFile))
            {
                return(CheckBIFC(biffFile, cbiff.name));
            }

            // Next try the cds
            string[] cdPaths = ApplicationRuntime.AppPaths.CdPaths;

            for (int c = 0; c < cdPaths.Length; c++)
            {
                if ((cbiff.cdMask & (1 << (c + 2))) != 0)
                {
                    biffFile = Path.Combine(cdPaths[c], cbiff.name);
                    if (File.Exists(biffFile))
                    {
                        return(CheckBIFC(biffFile, cbiff.name));
                    }
                }
            }

            return(null);
        }
Ejemplo n.º 2
0
        public static ChitinBiff CreateChitinBiff(ref FileStruct.TSChitinBiff tsChitinBiff, ref string name)
        {
            ChitinBiff cbiff = new ChitinBiff();

            cbiff.name   = name.ToUpper();
            cbiff.size   = tsChitinBiff.biffSize;
            cbiff.cdMask = tsChitinBiff.biffCdMask;

            return(cbiff);
        }
Ejemplo n.º 3
0
        public static FileStream ReadChitinBiffFile(ChitinBiff cbiff)
        {
            FileStream fileStream = ApplicationService.FindBiffFile(cbiff);

            if (fileStream == null)
            {
                return(null);
            }

            if ((cbiff.fileList == null) && (cbiff.tileList == null))
            {
                // since this cbiff hasn't been accessed yet. lets load up its
                // file entries
                buff = new byte[FileStruct.TSBiffHeaderSize];
                fileStream.Position = 0;

                FileStruct.TSBiffHeader biffHead =
                    (FileStruct.TSBiffHeader)ReadBuffer <FileStruct.TSBiffHeader>
                        (fileStream, buff, FileStruct.TSBiffHeaderSize);

                if (GlobalDefs.CHITINBIFF_SIGNATURE != Utils.CharsToString(biffHead.signature))
                {
                    throw new ArgumentException("Warning: Invalid signature in *.bif file.");
                }

                // Load up all the chitin into a collection
                buff = new byte[FileStruct.TSBiffFilesetSize];
                fileStream.Position = biffHead.fileOffset;

                cbiff.fileList = new ChitinBiff.BiffFileStruct[biffHead.fileCount];
                for (int c = 0; c < biffHead.fileCount; c++)
                {
                    FileStruct.TSBiffFileset tsBiffFile =
                        (FileStruct.TSBiffFileset)ReadBuffer <FileStruct.TSBiffFileset>
                            (fileStream, buff, FileStruct.TSBiffFilesetSize);

                    cbiff.fileList[c] = ChitinBiff.CreateBiffFileStruct(tsBiffFile);
                }

                buff           = new byte[FileStruct.TSBiffTilesetSize];
                cbiff.tileList = new ChitinBiff.BiffTileStruct[biffHead.tileCount];

                for (int c = 0; c < biffHead.tileCount; c++)
                {
                    FileStruct.TSBiffTileset tsBiffTile =
                        (FileStruct.TSBiffTileset)ReadBuffer <FileStruct.TSBiffTileset>
                            (fileStream, buff, FileStruct.TSBiffTilesetSize);

                    cbiff.tileList[c] = ChitinBiff.CreateBiffTileStruct(tsBiffTile);
                }
            }

            // fileStream.Close() don't close this filestream as we want to send it back
            return(fileStream);
        }
Ejemplo n.º 4
0
        // ---------- From here onwards, we shall read the unique resource files ---------- //

        public static ResourceClass.IResource ReadIResourceFile(bool headerOnly,
                                                                ChitinKey ckey, ResourceStruct.DelegateResourceFileReader resourceFileReader)
        {
            string overrideFile =
                ApplicationService.FindOverrideFile(ckey.name, ckey.resourceType);

            FileStream fileStream;
            int        fileOffset;
            int        fileSize;

            if (overrideFile != null) // Found it in override, so just use it
            {
                fileStream = Utils.ReadFileStream(overrideFile);
                fileOffset = 0;
                fileSize   = 0;
            }
            else if (ckey.isBiffed) // Load from biff file
            {
                ChitinBiff cbiff = ApplicationRuntime.ChitinIndex.CbiffCollection[ckey.biffIndex];

                if ((fileStream = ReadChitinBiffFile(cbiff)) == null)
                {
                    return(null);
                }

                if (ckey.resourceType != ResourceStruct.ResourceType.RTypeGTIS)
                {
                    fileOffset = cbiff.fileList[ckey.ckeyIndex].offset;
                    fileSize   = cbiff.fileList[ckey.ckeyIndex].size;
                }
                else
                {
                    fileOffset = cbiff.tileList[ckey.tileIndex].tileOffset;
                    fileSize   = cbiff.tileList[ckey.tileIndex].tileSize;
                }
            }
            else
            {
                return(null);
            }

            try
            {
                // apply the delegate here
                return(resourceFileReader(headerOnly, ckey, fileStream, fileOffset, fileSize));
            }
            catch (Exception e)
            {
                throw new ArgumentException(e.Message);
                //return null;
            }
        }
Ejemplo n.º 5
0
        public void AddChitinBiff(ref FileStruct.TSChitinBiff tsChitinBiff, ref string name)
        {
            ChitinBiff cbiff = CreateChitinBiff(ref tsChitinBiff, ref name);

            cbiffCollection.Add(cbiff);
        }
Ejemplo n.º 6
0
 public bool Contains(ChitinBiff value)
 {
     // If value is not of type Int16, this will return false.
     return(InnerList.Contains(value));
 }
Ejemplo n.º 7
0
 public void Remove(ChitinBiff value)
 {
     InnerList.Remove(value);
 }
Ejemplo n.º 8
0
 public void Insert(int index, ChitinBiff value)
 {
     InnerList.Insert(index, value);
 }
Ejemplo n.º 9
0
 public int IndexOf(ChitinBiff value)
 {
     return(InnerList.IndexOf(value));
 }
Ejemplo n.º 10
0
 public int Add(ChitinBiff value)
 {
     return(InnerList.Add(value));
 }