This commit is contained in:
Guus Waals 2024-09-24 21:46:10 +08:00
parent ae2fb42e87
commit 648d8256ad
10 changed files with 922 additions and 113 deletions

View File

@ -0,0 +1,30 @@
// AUTO-GENERATED FILE, MOVE TO 'gh_fix' FOLDER PREVENT OVERWRITING!!!!!
#include <r3/binders/auto.h>
#include <gh_global.h>
extern "C" {
// 0043e1d0
/* Allocate error manager system numbers */
R3ModuleId Erm_fn_ucInitErrMsg(void)
{
R3ModuleId RVar1;
tdstLastErrorInfo* pdVar2;
int iVar2;
RVar1 = g_ucErmNbOfModule;
if (g_ucErmNbOfModule == R3ModId_unk) {
for(size_t i = 0; i < std::size(g_stErmTheLastErrorInfo); i++) {
g_stErmTheLastErrorInfo[i].lastErr = 0;
g_stErmTheLastErrorInfo[i].ulChannelId = 0;
}
}
g_ucErmNbOfModule = R3ModuleId(g_ucErmNbOfModule + 1);
return RVar1;
}
}

View File

@ -9,7 +9,7 @@ undefined FUN_0046ecc0(undefined2 param_1, undefined2 param_2); // 0046ecc0 // F
// 0046f240
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 __cdecl FUN_0046f240(short param_1,short param_2,undefined4 *param_3)
undefined4 FUN_0046f240(short param_1,short param_2,undefined4 *param_3)
{
uint uVar1;

View File

@ -13,19 +13,17 @@ undefined FUN_00472150(void); // 00472150 // FUN_00472150
undefined r3_wait_for_dvd(char *param_1, char *param_2,
undefined4 param_3); // 0043e540 // r3_wait_for_dvd
undefined FUN_004725a0(void); // 004725a0 // FUN_004725a0
uint32_t r3_containsCmdLine(uint *param_1,
char *param_2); // 004028e0 // r3_containsCmdLine
int r3_get_gli_width1(void); // 0047baf0 // r3_get_gli_width1
undefined gfx_init2(void); // 00470be0 // gfx_init2
void g_setInitVar0(void); // 00401310 // g_setInitVar0
int r3_get_gli_height1(void); // 0047bb00 // r3_get_gli_height1
undefined FUN_004010b0(void); // 004010b0 // FUN_004010b0
undefined FUN_00401320(void); // 00401320 // FUN_00401320
void r3_noop(void *p_cTxt1, void *p_cTxt2); // 00401100 // r3_noop
undefined r3_initEngine(void); // 00401220 // r3_initEngine
undefined FUN_005038e0(void); // 005038e0 // FUN_005038e0
undefined FUN_004fb300(void); // 004fb300 // FUN_004fb300
undefined spawnThread(void); // 004477d0 // spawnThread
int r3_get_gli_width1(void); // 0047baf0 // r3_get_gli_width1
undefined gfx_init2(void); // 00470be0 // gfx_init2
void g_setInitVar0(void); // 00401310 // g_setInitVar0
int r3_get_gli_height1(void); // 0047bb00 // r3_get_gli_height1
undefined FUN_004010b0(void); // 004010b0 // FUN_004010b0
undefined FUN_00401320(void); // 00401320 // FUN_00401320
void r3_noop(void *p_cTxt1, void *p_cTxt2); // 00401100 // r3_noop
undefined r3_initEngine(void); // 00401220 // r3_initEngine
undefined FUN_005038e0(void); // 005038e0 // FUN_005038e0
undefined FUN_004fb300(void); // 004fb300 // FUN_004fb300
undefined spawnThread(void); // 004477d0 // spawnThread
undefined
r3_setupWindow(HINSTANCE hInstance, undefined4 param_2,
undefined4 maximizeWindow); // 00402140 // r3_setupWindow
@ -379,7 +377,7 @@ int r3_main(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR *cmdline,
1 = maximize
0 = windowed */
g_runMaximized = (int)(acStack_200[0] != '0');
r3_checkDisc();
// r3_checkDisc();
dwOptions = 0;
BVar18 = 0;
lpTargetHandle = &pvStack_834;
@ -392,15 +390,10 @@ int r3_main(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR *cmdline,
lpTargetHandle, DVar7, BVar18, dwOptions);
g_mainThreadHandle = pvStack_834;
/* Copy cmdline */
ppCVar8 = cmdline;
do {
cVar1 = *(char *)ppCVar8;
*(char *)(((int)g_appCmdLine - (int)cmdline) + (int)ppCVar8) = cVar1;
ppCVar8 = (LPSTR *)((int)ppCVar8 + 1);
} while (cVar1 != '\0');
strcpy(g_appCmdLine, GetCommandLineA());
SetErrorMode(1);
uVar9 = r3_containsCmdLine((uint *)cmdline, s_dashCC);
if (uVar9 == 0) {
char *ccArg = strstr(g_appCmdLine, s_dashCC);
if (ccArg == 0) {
r3_module0_init();
iVar13 = r3_setupWindow(hInstance, showCmd, g_runMaximized);
if (iVar13 == 0) {

View File

@ -79,6 +79,7 @@ undefined2& DAT_005c0f20= (undefined2&) GH_MEM(0x005c0f20);
char& DAT_005c0f22= (char&) GH_MEM(0x005c0f22);
HWND& g_gameHWND1= (HWND&) GH_MEM(0x005cf964);
long& lpDefault_005cf96c= (long&) GH_MEM(0x005cf96c);
R3ModuleId& g_ucErmNbOfModule= (R3ModuleId&) GH_MEM(0x005d2638);
undefined4& DAT_005d2660= (undefined4&) GH_MEM(0x005d2660);
undefined1& DAT_005d26a8= (undefined1&) GH_MEM(0x005d26a8);
undefined& lpVolumeNameBuffer_005d27b0= (undefined&) GH_MEM(0x005d27b0);
@ -106,6 +107,10 @@ char(&g_appCmdLine)[256] = reinterpret_cast<char(&)[256]>(GH_MEM(0x0077d4e0));
char(&s_wndStrRestoring)[256] = reinterpret_cast<char(&)[256]>(GH_MEM(0x0077d5e0));
char(&s_quitting1)[64] = reinterpret_cast<char(&)[64]>(GH_MEM(0x007825c0));
char(&s_wndStrQuiting)[56] = reinterpret_cast<char(&)[56]>(GH_MEM(0x00782600));
tdstLastErrorInfo(&g_stErmTheLastErrorInfo)[3] = reinterpret_cast<tdstLastErrorInfo(&)[3]>(GH_MEM(0x00782640));
pointer& g_errDat4= (pointer&) GH_MEM(0x00782644);
tdstBlockInfoPriv *(&g_a_p_stMmgModuleBlocksInfo)[255] = reinterpret_cast<tdstBlockInfoPriv *(&)[255]>(GH_MEM(0x0078f6a0));
char(&g_a_ucBlocksNbInModule)[255] = reinterpret_cast<char(&)[255]>(GH_MEM(0x0078fac0));
undefined& DAT_007d7d84= (undefined&) GH_MEM(0x007d7d84);
undefined2& DAT_007d7ea8= (undefined2&) GH_MEM(0x007d7ea8);
short& DAT_007d80f8= (short&) GH_MEM(0x007d80f8);

View File

@ -84,6 +84,7 @@ extern undefined2& DAT_005c0f20; // 005c0f20
extern char& DAT_005c0f22; // 005c0f22
extern HWND& g_gameHWND1; // 005cf964
extern long& lpDefault_005cf96c; // 005cf96c
extern R3ModuleId& g_ucErmNbOfModule; // 005d2638
extern undefined4& DAT_005d2660; // 005d2660
extern undefined1& DAT_005d26a8; // 005d26a8
extern undefined& lpVolumeNameBuffer_005d27b0; // 005d27b0
@ -111,6 +112,10 @@ extern char(&g_appCmdLine)[256]; // 0077d4e0
extern char(&s_wndStrRestoring)[256]; // 0077d5e0
extern char(&s_quitting1)[64]; // 007825c0
extern char(&s_wndStrQuiting)[56]; // 00782600
extern tdstLastErrorInfo(&g_stErmTheLastErrorInfo)[3]; // 00782640
extern pointer& g_errDat4; // 00782644
extern tdstBlockInfoPriv *(&g_a_p_stMmgModuleBlocksInfo)[255]; // 0078f6a0
extern char(&g_a_ucBlocksNbInModule)[255]; // 0078fac0
extern undefined& DAT_007d7d84; // 007d7d84
extern undefined2& DAT_007d7ea8; // 007d7ea8
extern short& DAT_007d80f8; // 007d80f8

View File

@ -1,14 +0,0 @@
// AUTO-GENERATED FILE!!!!
// This function has yet to be decompiled using 'Dump Current Function' in ghidra
// with possible manualy fixes
#include <r3/binders/auto.h>
#include <gh_global.h>
#include <stdexcept>
// 0043e1d0
// Erm_fn_ucInitErrMsg
extern "C" R3ModuleId Erm_fn_ucInitErrMsg(void) {
// TODO: Implement this function
throw std::runtime_error("Function not implemented: Erm_fn_ucInitErrMsg");
}

File diff suppressed because it is too large Load Diff

View File

@ -77,6 +77,7 @@
005c0f22 || DAT_005c0f22 || / || char
005cf964 || g_gameHWND1 || /windef.h || HWND
005cf96c || lpDefault_005cf96c || / || long
005d2638 || g_ucErmNbOfModule || / || R3ModuleId
005d2660 || DAT_005d2660 || / || undefined4
005d26a8 || DAT_005d26a8 || / || undefined1
005d27b0 || lpVolumeNameBuffer_005d27b0 || / || undefined
@ -104,6 +105,10 @@
0077d5e0 || s_wndStrRestoring || / || char[256]
007825c0 || s_quitting1 || / || char[64]
00782600 || s_wndStrQuiting || / || char[56]
00782640 || g_stErmTheLastErrorInfo || / || tdstLastErrorInfo[3]
00782644 || g_errDat4 || / || pointer
0078f6a0 || g_a_p_stMmgModuleBlocksInfo || /mmg.h || tdstBlockInfoPriv *[255]
0078fac0 || g_a_ucBlocksNbInModule || / || char[255]
007d7d84 || DAT_007d7d84 || / || undefined
007d7ea8 || DAT_007d7ea8 || / || undefined2
007d80f8 || DAT_007d80f8 || / || short

View File

@ -42,14 +42,18 @@ template <size_t Size> struct FieldBinder {
template <typename T> T *operator=(T *src) {
union V {
T *a;
void* b;
void *b;
};
V* trick = reinterpret_cast<V*>(this);
V *trick = reinterpret_cast<V *>(this);
return trick->a = src;
}
ExpectedType& operator=(ExpectedType src) {
ExpectedType &operator=(ExpectedType src) {
return *reinterpret_cast<ExpectedType *>(dst) = src;
}
ExpectedType &operator=(FieldBinder<Size> &other) {
return *reinterpret_cast<ExpectedType *>(dst) =
*reinterpret_cast<ExpectedType *>(other.dst);
}
};
template <size_t Offset, size_t Size>
@ -83,18 +87,15 @@ inline constexpr cc_type_t CONCAT23(T0 a, T1 b) {
return cc_type_t(a) << 24 | cc_type_t(b);
}
template <typename T0>
inline constexpr char SUB21(T0 a, size_t b) {
template <typename T0> inline constexpr char SUB21(T0 a, size_t b) {
return cc_type_t(a) >> (b * 8);
}
template <typename T0>
inline constexpr char SUB41(T0 a, size_t b) {
template <typename T0> inline constexpr char SUB41(T0 a, size_t b) {
return cc_type_t(a) >> (b * 8);
}
template <typename T0>
inline constexpr uint16_t SUB42(T0 a, size_t b) {
template <typename T0> inline constexpr uint16_t SUB42(T0 a, size_t b) {
return cc_type_t(a) >> (b * 8);
}

View File

@ -7,10 +7,11 @@
extern "C" int r3_main(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR *cmdline, int showCmd);
int main() {
int main(int argc, char **argv) {
try {
gh_init_data_segment();
r3_main(GetModuleHandle(NULL), NULL, NULL, SW_SHOW);
r3_main(GetModuleHandle(NULL), NULL, argv, SW_SHOW);
} catch (const std::exception &e) {
SPDLOG_ERROR("Unhandled exception: {}", e.what());
}