static void VDFS_Open(Hook hook, RegisterMemory mem) { zString path = new zString(mem[Registers.EAX]); string pathStr = path.ToString(); if (pathStr.EndsWith("CAMERA.DAT")) // f**k this { path.Set(@"_WORK\DATA\SCRIPTS\_COMPILED\CAMERA.DAT"); } // check if it exists in vdfs int filePtr = mem[Registers.ESI]; if (Process.THISCALL <BoolArg>(filePtr, 0x449020) && Process.ReadInt(filePtr + 0x2A00) == VDF_VIRTUAL) { return; } // check if it's in the project's folder string projectPath = GetProjectFilePath(pathStr); if (File.Exists(projectPath)) { path.Set(projectPath); } }
// basically only for music system static void DirectFileConvert(RegisterMemory mem) { zString zStr = new zString(mem.GetArg(0)); StringBuilder sb = new StringBuilder(zStr.ToString()); if (sb.Length > 0) { if (sb.ToString().StartsWith(Program.GothicRootPath, StringComparison.OrdinalIgnoreCase)) { sb.Remove(0, Program.GothicRootPath.Length); } if (sb[0] != '\\') { sb.Insert(0, '\\'); } sb.Insert(0, Program.ProjectPath); string path = sb.ToString(); if (Directory.Exists(path)) { zStr.Set(path); } } }
static void hook_LoadParserFile(Hook hook, RegisterMemory rmem) { try { zString str = new zString(rmem[0]); Logger.Log("LoadParserFile: " + str); Process.THISCALL <NullReturnCall>(0xAB40C0, 0x00793100); //parser.reset Process.THISCALL <NullReturnCall>(Gothic.Session.oCGame.GameAddress, 0x006D4780, new IntArg(0xAB40C0)); //Define_ulfi_externals Process.THISCALL <NullReturnCall>(0xAB40C0, 0x00793460, new IntArg(0)); //parser.enabletreeload(0) Process.THISCALL <NullReturnCall>(0xAB40C0, 0x00793440, new IntArg(0)); //parser.enabletreesave(0) initDefaultScripts(); using (zString z = zString.Create("C_NPC")) Process.THISCALL <NullReturnCall>(0xAB40C0, 0x00794730, z, new IntArg(0x120)); // parser.AddClassOffset using (zString z = zString.Create("C_ITEM")) Process.THISCALL <NullReturnCall>(0xAB40C0, 0x00794730, z, new IntArg(0x120)); // parser.AddClassOffset zString mainfile = new zString(0xAB40C0 + 0x2074); mainfile.Set("GUC.src"); Process.THISCALL <NullReturnCall>(0xAB40C0, 0x007900E0); //parser.createPCode Process.THISCALL <NullReturnCall>(0xAB40C0, 0x0078E730); //parser.error } catch (Exception ex) { Logger.LogError(ex); } }
static void DirectFileConvert(Hook hook, RegisterMemory mem) { zString fileName = new zString(mem[0]); string projPath = GetProjectFilePath(fileName.ToString()); if (Directory.Exists(projPath)) { fileName.Set(projPath); } }