diff --git a/Common/WinUtil.h b/Common/WinUtil.h
index c27e9c6..f9b566c 100644
--- a/Common/WinUtil.h
+++ b/Common/WinUtil.h
@@ -80,7 +80,7 @@ inline void StringPathAppend(std::wstring* path, const std::wstring& more)
inline bool FileExists(const std::string& path)
{
FILE* filep;
- if (fopen_s(&filep, path.c_str(), "rb") == 0)
+ if (fopen_s(&filep, path.c_str(), "rb") == 0 && filep != 0)
{
fclose(filep);
return true;
diff --git a/MinHook/build/VC15/libMinHook.vcxproj b/MinHook/build/VC15/libMinHook.vcxproj
index e4e953f..b90c0c1 100644
--- a/MinHook/build/VC15/libMinHook.vcxproj
+++ b/MinHook/build/VC15/libMinHook.vcxproj
@@ -30,6 +30,7 @@
Unicode
true
v142
+ false
StaticLibrary
diff --git a/d3d9ex/AutoFix.cpp b/d3d9ex/AutoFix.cpp
index 80c2d4c..829c4e0 100644
--- a/d3d9ex/AutoFix.cpp
+++ b/d3d9ex/AutoFix.cpp
@@ -30,7 +30,7 @@ void MainContext::EnableAutoFix()
const std::map MainContext::behaviorflags_fixes =
{
{ RESIDENT_EVIL_4, D3DCREATE_SOFTWARE_VERTEXPROCESSING },
- { KINGS_BOUNTY_LEGEND, D3DCREATE_MIXED_VERTEXPROCESSING },
+ { KINGS_BOUNTY_LEGEND, D3DCREATE_MIXED_VERTEXPROCESSING }
};
void MainContext::FixBehaviorFlagConflict(const DWORD flags_in, DWORD* flags_out)
@@ -73,8 +73,9 @@ HRESULT APIENTRY MainContext::ApplyVertexBufferFix(IDirect3DDevice9 *pIDirect3DD
// Final Fantasy XIII
if (autofix == FINAL_FANTASY_XIII)
{
- if (Length == 358400 && FVF == 0 && Pool == D3DPOOL_MANAGED) {
- Usage = D3DUSAGE_DYNAMIC; Pool = D3DPOOL_SYSTEMMEM;
+ if (Length == 358400 && Pool == D3DPOOL_MANAGED) {
+ Usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY;
+ Pool = D3DPOOL_SYSTEMMEM;
//IDirect3DVertexBuffer9* buffer = nullptr;
//HRESULT hr = pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, &buffer, NULL);
diff --git a/d3d9ex/Context.h b/d3d9ex/Context.h
index 42965b9..7bdf7c3 100644
--- a/d3d9ex/Context.h
+++ b/d3d9ex/Context.h
@@ -26,7 +26,7 @@ public:
};
#define DECLARE_HOOK(type, callconv, name, ...) \
- public: type(callconv* True##name)(__VA_ARGS__); \
+ public: type(callconv* True##name)(__VA_ARGS__) = name; \
private: static type callconv Hook##name(__VA_ARGS__);
class MainContext
diff --git a/d3d9ex/IDirect3DVertexBuffer9.cpp b/d3d9ex/IDirect3DVertexBuffer9.cpp
index b7c34f9..61f15fe 100644
--- a/d3d9ex/IDirect3DVertexBuffer9.cpp
+++ b/d3d9ex/IDirect3DVertexBuffer9.cpp
@@ -8,9 +8,10 @@
#include "IDirect3DDevice9.h"
#include "IDirect3DVertexBuffer9.h"
-#define IDirect3DVertexBuffer9_PrintLog(format, ...) //PrintLog(format, __VA_ARGS__);
+#define IDirect3DVertexBuffer9_PrintLog(format, ...) PrintLog(format, __VA_ARGS__);
HRESULT APIENTRY hkIDirect3DVertexBuffer9::QueryInterface(REFIID riid, void** ppvObj) {
+ IDirect3DVertexBuffer9_PrintLog(__FUNCTION__);
if (ppvObj == nullptr) return E_POINTER;
if (riid == __uuidof(IUnknown) ||
@@ -32,6 +33,7 @@ ULONG APIENTRY hkIDirect3DVertexBuffer9::AddRef() {
}
ULONG APIENTRY hkIDirect3DVertexBuffer9::Release() {
+ IDirect3DVertexBuffer9_PrintLog(__FUNCTION__);
const LONG ref = _InterlockedDecrement(&m_refCount);
if (ref == 0)
{
@@ -52,12 +54,12 @@ HRESULT APIENTRY hkIDirect3DVertexBuffer9::GetDevice(IDirect3DDevice9** ppDevice
}
HRESULT APIENTRY hkIDirect3DVertexBuffer9::SetPrivateData(REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
- IDirect3DVertexBuffer9_PrintLog(__FUNCTION__);
+ IDirect3DVertexBuffer9_PrintLog(__FUNCTION__ " %s", GUIDtoStringA(refguid));
return m_pWrapped->SetPrivateData(refguid, pData, SizeOfData, Flags);
}
HRESULT APIENTRY hkIDirect3DVertexBuffer9::GetPrivateData(REFGUID refguid, void* pData, DWORD* pSizeOfData) {
- IDirect3DVertexBuffer9_PrintLog(__FUNCTION__);
+ IDirect3DVertexBuffer9_PrintLog(__FUNCTION__ " %s", GUIDtoStringA(refguid));
return m_pWrapped->GetPrivateData(refguid, pData, pSizeOfData);
}
diff --git a/d3d9ex/IDirect3DVertexBuffer9.h b/d3d9ex/IDirect3DVertexBuffer9.h
index 03e16d2..61840c4 100644
--- a/d3d9ex/IDirect3DVertexBuffer9.h
+++ b/d3d9ex/IDirect3DVertexBuffer9.h
@@ -6,21 +6,23 @@
interface hkIDirect3DVertexBuffer9 final : public IDirect3DVertexBuffer9 {
public:
- // original interface
- STDMETHOD(QueryInterface)(REFIID riid, void** ppvObj);
- STDMETHOD_(ULONG, AddRef)();
- STDMETHOD_(ULONG, Release)();
- STDMETHOD(GetDevice)(IDirect3DDevice9** ppDevice);
- STDMETHOD(SetPrivateData)(REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
- STDMETHOD(GetPrivateData)(REFGUID refguid, void* pData, DWORD* pSizeOfData);
- STDMETHOD(FreePrivateData)(REFGUID refguid);
- STDMETHOD_(DWORD, SetPriority)(DWORD PriorityNew);
- STDMETHOD_(DWORD, GetPriority)();
- STDMETHOD_(void, PreLoad)();
- STDMETHOD_(D3DRESOURCETYPE, GetType)();
- STDMETHOD(Lock)(UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags);
- STDMETHOD(Unlock)();
- STDMETHOD(GetDesc)(D3DVERTEXBUFFER_DESC *pDesc);
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj);
+ STDMETHOD_(ULONG, AddRef)(THIS);
+ STDMETHOD_(ULONG, Release)(THIS);
+
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice);
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData);
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid);
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew);
+ STDMETHOD_(DWORD, GetPriority)(THIS);
+ STDMETHOD_(void, PreLoad)(THIS);
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS);
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags);
+ STDMETHOD(Unlock)(THIS);
+ STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc);
public:
hkIDirect3DVertexBuffer9(IDirect3DDevice9* pIDirect3DDevice9, IDirect3DVertexBuffer9* pIDirect3DVertexBuffer9)
diff --git a/d3d9ex/d3d9ex.vcxproj b/d3d9ex/d3d9ex.vcxproj
index ca2cc31..3a9589f 100644
--- a/d3d9ex/d3d9ex.vcxproj
+++ b/d3d9ex/d3d9ex.vcxproj
@@ -45,6 +45,7 @@
MultiByte
true
v142
+ false
DynamicLibrary