static void VDFS_SearchFile(RegisterMemory mem) { try { zFile_File zfile = new zFile_File(mem.ECX); string fileName = new zString(mem.GetArg(0)).ToString(); string folder = new zString(mem.GetArg(1)).ToString(); if (folder.Length > 0 && folder[0] == '\\') { folder = folder.Substring(1); } if (folder.Length > 0 && folder[folder.Length - 1] == '\\') { folder = folder.Remove(folder.Length - 1); } //Logger.Log("SearchFile: " + fileName + " " + folder); if (vFiles.Count > 0) { if (vDirs.TryGetValue(folder, out VDFSDirectoryInfo dir)) { VDFSFileInfo fi = dir.SearchFile(fileName); if (fi != null) { zfile.SetPath('\\' + fi.Path); mem.EAX = 0; return; } } } DirectoryInfo dirInfo = new DirectoryInfo(Program.ProjectPathCombine(folder)); if (dirInfo.Exists) { FileInfo fi = dirInfo.EnumerateFiles(fileName, SearchOption.AllDirectories).FirstOrDefault(); if (fi != null) { zfile.SetPath(fi.FullName.Substring(Program.ProjectPath.Length)); mem.EAX = 0; return; } } dirInfo = new DirectoryInfo(Program.GothicRootPathCombine(folder)); if (dirInfo.Exists) { FileInfo fi = dirInfo.EnumerateFiles(fileName, SearchOption.AllDirectories).FirstOrDefault(); if (fi != null) { zfile.SetPath(fi.FullName.Substring(Program.GothicRootPath.Length)); mem.EAX = 0; return; } } mem.EAX = 0x138B; //Logger.Log("SearchFile: " + fileName + " not found!"); } catch (Exception e) { Logger.LogError(e.ToString()); } }