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); }
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); }
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); }
// ---------- 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; } }
public void AddChitinBiff(ref FileStruct.TSChitinBiff tsChitinBiff, ref string name) { ChitinBiff cbiff = CreateChitinBiff(ref tsChitinBiff, ref name); cbiffCollection.Add(cbiff); }
public bool Contains(ChitinBiff value) { // If value is not of type Int16, this will return false. return(InnerList.Contains(value)); }
public void Remove(ChitinBiff value) { InnerList.Remove(value); }
public void Insert(int index, ChitinBiff value) { InnerList.Insert(index, value); }
public int IndexOf(ChitinBiff value) { return(InnerList.IndexOf(value)); }
public int Add(ChitinBiff value) { return(InnerList.Add(value)); }