bool WINAPI DllMain(HMODULE hDll, DWORD dwReason, PVOID pvReserved) { if(dwReason == DLL_PROCESS_ATTACH) { DisableThreadLibraryCalls(hDll); GetModuleFileName(hDll, dlldir, 512); for(int i = strlen(dlldir); i > 0; i--) { if(dlldir[i] == '\\') { dlldir[i+1] = 0; break; } } ofile.open(GetDirectoryFile("ttnlog.txt"), ios::app); add_log("\n---------------------\nTatniumD3D Started...\n---------------------"); char sysd3d[320]; GetSystemDirectory(sysd3d, 320); strcat(sysd3d, "\\d3d9.dll"); add_log("Library: %s", sysd3d); HMODULE hMod = LoadLibrary(sysd3d); oDirect3DCreate9 = (tDirect3DCreate9)GetProcAddress(hMod, "Direct3DCreate9"); return true; } else if(dwReason == DLL_PROCESS_DETACH) { add_log("---------------------\nTatniumD3D Exiting...\n---------------------\n"); if(ofile) { ofile.close(); } } return false; }
void RSManager::dumpShader(UINT32 hash, const char *directory, LPD3DXBUFFER pBuffer) { char fileNameBuffer[64]; sprintf_s(fileNameBuffer, "%s/%08x.asm", directory, hash); const char *fileName = GetDirectoryFile(fileNameBuffer); if (writeFile(fileName, static_cast<char *>(pBuffer->GetBufferPointer()), pBuffer->GetBufferSize() - 1)) { SDLOG(0, "Wrote disassembled shader to %s\n", fileNameBuffer); } else { SDLOG(0, "Failed to write disassembled shader to %s\n", fileNameBuffer); } }
bool WINAPI DllMain(HMODULE hDll, DWORD dwReason, PVOID pvReserved) { TCHAR fileName[512]; GetModuleFileName(NULL, fileName, 512); if(dwReason == DLL_PROCESS_ATTACH) { DisableThreadLibraryCalls(hDll); GetModuleFileName(hDll, dlldir, 512); for(int i = strlen(dlldir); i > 0; i--) { if(dlldir[i] == '\\') { dlldir[i+1] = 0; break; } } ofile.open(GetDirectoryFile("DSfix.log"), std::ios::out); sdlogtime(); SDLOG(0, "===== start DSfix %s = fn: %s\n", VERSION, fileName); // load settings Settings::get().load(); Settings::get().report(); KeyActions::get().load(); KeyActions::get().report(); // load original dinput8.dll HMODULE hMod; if(Settings::get().getDinput8dllWrapper().empty() || (Settings::get().getDinput8dllWrapper().find("none") == 0)) { char syspath[320]; GetSystemDirectory(syspath, 320); strcat_s(syspath, "\\dinput8.dll"); hMod = LoadLibrary(syspath); } else { sdlog(0, "Loading dinput wrapper %s\n", Settings::get().getDinput8dllWrapper().c_str()); hMod = LoadLibrary(Settings::get().getDinput8dllWrapper().c_str()); } if(!hMod) { sdlog("Could not load original dinput8.dll\nABORTING.\n"); errorExit("Loading of specified dinput wrapper"); } oDirectInput8Create = (tDirectInput8Create)GetProcAddress(hMod, "DirectInput8Create"); SaveManager::get().init(); earlyDetour(); if(Settings::get().getUnlockFPS()) applyFPSPatch(); return true; } else if(dwReason == DLL_PROCESS_DETACH) { Settings::get().shutdown(); endDetour(); SDLOG(0, "===== end = fn: %s\n", fileName); if(ofile) { ofile.close(); } } return false; }
void RSManager::registerD3DXCreateTextureFromFileInMemory(LPCVOID pSrcData, UINT SrcDataSize, LPDIRECT3DTEXTURE9 pTexture) { SDLOG(1, "RenderstateManager: registerD3DXCreateTextureFromFileInMemory %p\n", pTexture); if(Settings::get().getEnableTextureDumping()) { UINT32 hash = SuperFastHash((char*)const_cast<void*>(pSrcData), SrcDataSize); SDLOG(1, " - size: %8u, hash: %8x\n", SrcDataSize, hash); IDirect3DSurface9* surf; ((IDirect3DTexture9*)pTexture)->GetSurfaceLevel(0, &surf); char buffer[128]; sprintf_s(buffer, "dsfix/tex_dump/%08x.tga", hash); D3DXSaveSurfaceToFile(GetDirectoryFile(buffer), D3DXIFF_TGA, surf, NULL, NULL); surf->Release(); } registerKnowTexture(pSrcData, SrcDataSize, pTexture); }
bool RSManager::getOverrideShader(UINT32 hash, const char *directory, LPD3DXBUFFER *ppBuffer) { char fileNameBuffer[64]; sprintf_s(fileNameBuffer, "%s/%08x.asm", directory, hash); const char * fileName = GetDirectoryFile(fileNameBuffer); if (fileExists(fileName)) { SDLOG(1, "Shader override: %s\n", fileName); LPD3DXBUFFER errors = nullptr; HRESULT assembleResult = D3DXAssembleShaderFromFile(fileName, nullptr, nullptr, 0, ppBuffer, &errors); if (assembleResult != D3D_OK) { SDLOG(0, "Failed to assemble replacement shader:\n%s\n", errors->GetBufferPointer()); } SAFERELEASE(errors); return assembleResult == D3D_OK; } return false; }
HUD::HUD(IDirect3DDevice9 *device, int width, int height) : Effect(device), width(width), height(height) { DWORD flags = D3DXFX_NOT_CLONEABLE; // Load effect from file SDLOG(0, "Hud Effect load"); ID3DXBuffer* errors; HRESULT hr = D3DXCreateEffectFromFile(device, GetDirectoryFile("dsfix\\HUD.fx"), NULL, NULL, flags, NULL, &effect, &errors); if(hr != D3D_OK) SDLOG(0, "ERRORS:\n %s", errors->GetBufferPointer()); // get handles frameTexHandle = effect->GetParameterByName(NULL, "frameTex2D"); opacityHandle = effect->GetParameterByName(NULL, "opacity"); }
void RSManager::reloadHudVertices() { SDLOG(0, "Reloading HUD vertices\n"); std::ifstream vfile; vfile.open(GetDirectoryFile("hudvertices.txt"), std::ios::in); char buffer[256]; size_t index = 0; SDLOG(0, "- starting\n"); while(!vfile.eof()) { vfile.getline(buffer, 256); if(buffer[0] == '#') continue; if(vfile.gcount() <= 4) continue; sscanf(buffer, "%hd %hd", &hudVertices[index], &hudVertices[index+1]); SDLOG(0, "- read %hd, %hd\n", hudVertices[index], hudVertices[index+1]); index+=2; } vfile.close(); }
void InitDebug(HMODULE hModule) { GetModuleFileNameA(hModule, dlldir, 512); for(int i = (int)strlen(dlldir); i > 0; i--) { if(dlldir[i] == '\\') { dlldir[i + 1] = 0; break; } } ofile.open(GetDirectoryFile(LOGNAME), ios::app); DEBUG( "*-*-*-*-*-*-*-*-*-*-*-*-*-*" ); DEBUG( "halo_sdk injected" ); DEBUG( "*-*-*-*-*-*-*-*-*-*-*-*-*-*" ); }