1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00
DxWnd.reloaded/dll/smack.cpp
gho tik f5e2ede68c v2_03_72_src
Former-commit-id: 731195041a2c51fb26edebd153a74bf5060127b1
2017-03-06 11:46:09 -05:00

85 lines
2.1 KiB
C++

#include <windows.h>
#include "dxwnd.h"
#include "dxwcore.hpp"
#include "syslibs.h"
#include "dxhook.h"
#pragma pack(1)
typedef struct {
UINT32 version;
UINT32 width;
UINT32 height;
UINT32 frame_count;
UINT32 mspf;
char unknown[864];
UINT32 frame_number;
} SmackStruct;
typedef SmackStruct * (WINAPI *SmackOpen_Type)(HANDLE, UINT32, INT32);
SmackOpen_Type pSmackOpen = NULL;
SmackStruct * WINAPI extSmackOpen(HANDLE, UINT32, INT32);
static HookEntryEx_Type Hooks[]={
{HOOK_IAT_CANDIDATE, 0x000E, "_SmackOpen@12", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen},
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
};
FARPROC Remap_smack_ProcAddress(LPCSTR proc, HMODULE hModule)
{
FARPROC addr;
if(!(dxw.dwFlags7 & HOOKSMACKW32)) return NULL;
if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;
// NULL -> keep the original call address
return NULL;
}
static char *libname = "smackw32.dll";
void HookSmackW32(HMODULE hModule)
{
if(!(dxw.dwFlags7 & HOOKSMACKW32)) return;
HookLibraryEx(hModule, Hooks, libname);
return;
}
DWORD ThreadId = 0;
DWORD WINAPI DoScreenRefresh(LPVOID lpParameter)
{
while(TRUE){
Sleep(20);
dxw.ScreenRefresh();
}
}
SmackStruct * WINAPI extSmackOpen(HANDLE SmackFile, UINT32 flags, INT32 unknown)
{
SmackStruct *ret;
OutTraceDW("SmackOpen: SmackFile=%x flags=%x unknown=%x\n", SmackFile, flags, unknown);
if(!pSmackOpen) OutTraceE("ASSERT: NULL pSmackOpen\n");
ret=(*pSmackOpen)(SmackFile, flags, unknown);
OutTraceDW("SmackOpen: ret=%x\n", ret);
if (ret) {
OutTraceDW("SmackOpen: version=%x screen=(%dx%d) frame_count=%d frame_number=%d\n",
ret->version, ret->width, ret->height, ret->frame_count, ret->frame_number);
}
return ret;
}
/* ---------------------------------------------------------------
Used by M2 Tank Platoon II:
Ordinal 0x0015 name _SmackNextFrame@4
Ordinal 0x000E name _SmackOpen@12
Ordinal 0x0026 name _SmackSoundUseDirectSound@4
Ordinal 0x0012 name _SmackClose@4
Ordinal 0x0013 name _SmackDoFrame@4
Ordinal 0x0017 name _SmackToBuffer@28
Ordinal 0x0020 name _SmackWait@4
/* ------------------------------------------------------------ */