diff --git a/game_re/gh_fix/r3_main.cxx b/game_re/gh_fix/r3_main.cxx new file mode 100644 index 00000000..9bdcb39e --- /dev/null +++ b/game_re/gh_fix/r3_main.cxx @@ -0,0 +1,616 @@ +// AUTO-GENERATED FILE, MOVE TO 'gh_fix' FOLDER PREVENT OVERWRITING!!!!! + +#include +#include + +extern "C" { +int setupWindow(HINSTANCE instance, undefined4 param_2, int windowedParam); // 00402140 // setupWindow +undefined FUN_00470db0(void); // 00470db0 // FUN_00470db0 +undefined r3_checkDisc(void); // 004464f0 // r3_checkDisc +undefined FUN_00503710(void); // 00503710 // FUN_00503710 +undefined r3_initAllModules(void); // 00401000 // r3_initAllModules +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 +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 FUN_005038e0(void); // 005038e0 // FUN_005038e0 +undefined FUN_004fb300(void); // 004fb300 // FUN_004fb300 +undefined spawnThread(void); // 004477d0 // spawnThread +undefined r3_engineLoop(void); // 00401220 // r3_engineLoop + +// 00401630 +int r3_main(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR *cmdline,int showCmd) + +{ + undefined4 uVar1; + undefined2 uVar2; + undefined2 uVar3; + LPSTR pCVar3; + char *pcVar4; + FILE *pFVar5; + LONG LVar6; + HMODULE hLibModule; + DWORD DVar7; + HANDLE hTargetProcessHandle; + HANDLE hSourceHandle; + HANDLE hSourceProcessHandle; + uint *ppCVar8; + HWND hWnd; + int iVar10; + int iVar11; + int iVar12; + int iVar13; + uint uVar14; + HKEY unaff_ESI; + char *pcVar17; + void *p_cTxt1; + void *p_cTxt2; + undefined4 uStack_85c; + undefined4 uStack_858; + LPSTR lpBuffer; + UINT uiParam; + BYTE uStack_83c [4]; + DWORD pHStack_838; + DWORD pvStack_834; + char UStack_830 [16]; + char tStack_820 [260]; + CHAR aCStack_71c [256]; + char acStack_61c [16]; + CHAR pathToUbi_ini [228]; + char acStack_528 [16]; + char acStack_518 [244]; + char acStack_424 [16]; + CHAR aCStack_414 [244]; + char acStack_320 [16]; + char acStack_310 [240]; + char acStack_220 [256]; + char acStack_120 [260]; + HINSTANCE instance; + uint *puStack_14; + undefined4 uStack_10; + int iStack_8; + BOOL BVar18; + char cVar1; + undefined4 chars; + DWORD dwOptions; + LPRECT lpRect; + LPHANDLE lpTargetHandle; + undefined4 uVar22; + + lpBuffer = pathToUbi_ini; + uiParam = 0x104; + /* Append windows dir / ubi.ini */ + uStack_858 = 0x40164d; + GetWindowsDirectoryA(lpBuffer,0x104); + iVar13 = -1; + pcVar4 = acStack_61c; + do { + pcVar17 = pcVar4; + if (iVar13 == 0) break; + iVar13 = iVar13 + -1; + pcVar17 = pcVar4 + 1; + cVar1 = *pcVar4; + pcVar4 = pcVar17; + } while (cVar1 != '\0'); + *(undefined4 *)(pcVar17 + -1) = s_UbiSoft_Ubi_ini + Field<0, 4>(); + *(undefined4 *)(pcVar17 + 3) = s_UbiSoft_Ubi_ini + Field<4, 4>(); + *(undefined4 *)(pcVar17 + 7) = s_UbiSoft_Ubi_ini + Field<8, 4>(); + *(undefined4 *)(pcVar17 + 0xb) = s_UbiSoft_Ubi_ini + Field<12, 4>(); + pcVar17[0xf] = s_UbiSoft_Ubi_ini[0x10]; + pCVar3 = GetCommandLineA(); + pcVar4 = pCVar3 + 1; + iVar13 = -(int)pcVar4; + do { + cVar1 = *pcVar4; + pcVar4[(int)(tStack_820 + iVar13)] = cVar1; + pcVar4 = pcVar4 + 1; + } while (cVar1 != '\0'); + pcVar4 = strrchr(tStack_820,0x5c); + if (pcVar4 == (char *)0x0) { + /* Read from ubi.ini */ + GetPrivateProfileStringA + (lpAppName_005b68f0,s_Directory_005b68f8,s_None,tStack_820,0xff,acStack_61c); + iVar13 = strcmpi(tStack_820,s_None); + } + else { + pcVar4 = strrchr(tStack_820,0x5c); + *pcVar4 = '\0'; + iVar13 = chdir(tStack_820); + if (iVar13 != -1) goto LAB_00401765; + /* Read from ubi.ini */ + GetPrivateProfileStringA + (lpAppName_005b68f0,s_Directory_005b68f8,s_None,tStack_820,0xff,acStack_61c); + iVar13 = strcmpi(tStack_820,s_None); + } + if (iVar13 != 0) { + chdir(tStack_820); + } +LAB_00401765: + /* strcpy */ + iVar13 = 0; + do { + cVar1 = tStack_820[iVar13]; + r3_main_data_005d28b6.gameDataDir[iVar13] = cVar1; + iVar13 = iVar13 + 1; + } while (cVar1 != '\0'); + strlwr(r3_main_data_005d28b6.gameDataDir); + iVar13 = -1; + pcVar4 = r3_main_data_005d28b6.gameDataDir; + do { + if (iVar13 == 0) break; + iVar13 = iVar13 + -1; + cVar1 = *pcVar4; + pcVar4 = pcVar4 + 1; + } while (cVar1 != '\0'); +joined_r0x00401792: + if (iVar13 != -2) { + uVar14 = 0xffffffff; + pcVar4 = r3_main_data_005d28b6.gameDataDir; + do { + if (uVar14 == 0) break; + uVar14 = uVar14 - 1; + cVar1 = *pcVar4; + pcVar4 = pcVar4 + 1; + } while (cVar1 != '\0'); + if (r3_main_data_005d28b6.gameDataDir[~uVar14 - 2] != '\\') goto LAB_004017ce; + uVar14 = 0xffffffff; + pcVar4 = r3_main_data_005d28b6.gameDataDir; + do { + if (uVar14 == 0) break; + uVar14 = uVar14 - 1; + cVar1 = *pcVar4; + pcVar4 = pcVar4 + 1; + } while (cVar1 != '\0'); + r3_main_data_005d28b6.gameDataDir[~uVar14 - 2] = '\0'; + iVar13 = -1; + pcVar4 = r3_main_data_005d28b6.gameDataDir; + do { + if (iVar13 == 0) break; + iVar13 = iVar13 + -1; + cVar1 = *pcVar4; + pcVar4 = pcVar4 + 1; + } while (cVar1 != '\0'); + goto joined_r0x00401792; + } +LAB_004017ce: + pFVar5 = fopen(acStack_61c,fopen_mode_r_text); + GetPrivateProfileStringA + (lpAppName_005b68f0,s_Adapter_005b68e4,(LPCSTR)&lpDefault_005cf96c,acStack_310,0xff, + acStack_61c); + if ((pFVar5 == (FILE *)0x0) || (acStack_310[0] == '\0')) { + /* Concat game data dir with r3 setup exe */ + iVar13 = 0; + do { + cVar1 = r3_main_data_005d28b6.gameDataDir[iVar13]; + acStack_518[iVar13] = cVar1; + iVar13 = iVar13 + 1; + } while (cVar1 != '\0'); + iVar13 = -1; + pcVar4 = acStack_518; + do { + pcVar17 = pcVar4; + if (iVar13 == 0) break; + iVar13 = iVar13 + -1; + pcVar17 = pcVar4 + 1; + cVar1 = *pcVar4; + pcVar4 = pcVar17; + } while (cVar1 != '\0'); + *(undefined4 *)(pcVar17 + -1) = s__R3_Setup_DX8_exe_005b68d0 + Field<0, 4>(); + *(undefined4 *)(pcVar17 + 3) = s__R3_Setup_DX8_exe_005b68d0 + Field<4, 4>(); + *(undefined4 *)(pcVar17 + 7) = s__R3_Setup_DX8_exe_005b68d0 + Field<8, 4>(); + *(undefined4 *)(pcVar17 + 0xb) = s__R3_Setup_DX8_exe_005b68d0 + Field<12, 4>(); + *(undefined2 *)(pcVar17 + 0xf) = s__R3_Setup_DX8_exe_005b68d0 + Field<16, 2>(); + pFVar5 = fopen(acStack_518,fopen_mode_r_binary); + if (pFVar5 == (FILE *)0x0) { + MessageBoxA((HWND)0x0,s_Unable_to_find_R3_Setup_DX8_exe__005b6880,s_Rayman_3_Error_005b68bc, + 0x10); + return -1; + } + fclose(pFVar5); + spawnl(0,acStack_518,acStack_518,0); + pFVar5 = fopen(acStack_61c,fopen_mode_r_text); + if (pFVar5 == (FILE *)0x0) { + return -1; + } + } + fclose(pFVar5); + /* Open reg key + HKEY_LOCAL_MACHINE\\SOFTWARE\\UBI SOFT\\RAYMAN 3 */ + LVar6 = RegOpenKeyExA((HKEY)0x80000002,s_SOFTWARE_UBI_SOFT_RAYMAN_3_005b6864,0,0x20019, + (PHKEY)&stack0xfffff7b8); + if (LVar6 == 0) { + LVar6 = RegQueryValueExA(unaff_ESI,s_CompleteInstall_005b6854,(LPDWORD)0x0,&pvStack_834, + uStack_83c,&pHStack_838); + DAT_007d9cc4 = (uint)(LVar6 == 0); + if (unaff_ESI != (HKEY)0x0) { + RegCloseKey(unaff_ESI); + } + } + else { + DAT_007d9cc4 = 0; + } + GetPrivateProfileStringA + (lpAppName_005b68f0,s_Language_005b6840,s_English_005b684c,aCStack_71c,0xff,acStack_61c) + ; + sprintf(g_mutexName_Rayman3,s_percents,lpAppName_005b68f0); + sprintf(g_windowTitle,s_percents,s_windowTitle); + /* Setup localized quiting/restoring strings */ + iVar13 = strcmpi(aCStack_71c,s_French_005b6828); + if (iVar13 == 0) { + sprintf(s_windowTitleRestoring,s_Restauration_fmt,s_windowTitle); + chars = s_QUITTER + Field<4, 4>(); + pcVar4 = s_ou_appuyez_sur_Echap_pour_quitte_005b67d0; + pcVar17 = s_quitting1; + for (iVar13 = 0xb; uVar22 = s_QUITTER + Field<4, 4>(), iVar13 != 0; iVar13 = iVar13 + -1) { + *(undefined4 *)pcVar17 = *(undefined4 *)pcVar4; + pcVar4 = pcVar4 + 4; + pcVar17 = pcVar17 + 4; + } + s_wndStrQuiting[0] = s_QUITTER[0]; + s_wndStrQuiting[1] = s_QUITTER[1]; + s_wndStrQuiting[2] = s_QUITTER[2]; + s_wndStrQuiting[3] = s_QUITTER[3]; + /* Wrong decompilation? */ + s_QUITTER[4] = (char)chars; + s_QUITTER[5] = SUB41(chars,1); + s_QUITTER[6] = SUB41(chars,2); + s_QUITTER[7] = SUB41(chars,3); + s_wndStrQuiting[4] = s_QUITTER[4]; + s_wndStrQuiting[5] = s_QUITTER[5]; + s_wndStrQuiting[6] = s_QUITTER[6]; + s_wndStrQuiting[7] = s_QUITTER[7]; + s_QUITTER + Field<4, 4>() = uVar22; + sprintf(g_windowTitle1,s__s___Pause_005b67c4,s_windowTitle); + pcVar4 = s_Restauration; + pcVar17 = s_wndStrRestoring; + for (iVar13 = 7; iVar13 != 0; iVar13 = iVar13 + -1) { + *(undefined4 *)pcVar17 = *(undefined4 *)pcVar4; + pcVar4 = pcVar4 + 4; + pcVar17 = pcVar17 + 4; + } + } + else { + iVar13 = strcmpi(aCStack_71c,s_Spanish_005b67a0); + if (iVar13 == 0) { + sprintf(s_windowTitleRestoring,s__s___Restablecer_datos____005b6784,s_windowTitle); + uVar2 = s_SALIR_005b675c + Field<4, 2>(); + pcVar4 = s_Pulsa_ESC_para_salir_Rayman_3__005b6764; + pcVar17 = s_quitting1; + for (iVar13 = 7; chars = s_SALIR_005b675c + Field<0, 4>(), iVar13 != 0; iVar13 = iVar13 + -1) { + *(undefined4 *)pcVar17 = *(undefined4 *)pcVar4; + pcVar4 = pcVar4 + 4; + pcVar17 = pcVar17 + 4; + } + *(undefined2 *)pcVar17 = *(undefined2 *)pcVar4; + pcVar17[2] = pcVar4[2]; + uVar3 = s_SALIR_005b675c + Field<4, 2>(); + uVar22 = s_SALIR_005b675c + Field<0, 4>(); + s_SALIR_005b675c[0] = (char)chars; + s_SALIR_005b675c[1] = SUB41(chars,1); + s_SALIR_005b675c[2] = SUB41(chars,2); + s_SALIR_005b675c[3] = SUB41(chars,3); + s_wndStrQuiting[0] = s_SALIR_005b675c[0]; + s_wndStrQuiting[1] = s_SALIR_005b675c[1]; + s_wndStrQuiting[2] = s_SALIR_005b675c[2]; + s_wndStrQuiting[3] = s_SALIR_005b675c[3]; + s_SALIR_005b675c[4] = (char)uVar2; + s_SALIR_005b675c[5] = SUB21(uVar2,1); + s_wndStrQuiting[4] = s_SALIR_005b675c[4]; + s_wndStrQuiting[5] = s_SALIR_005b675c[5]; + s_SALIR_005b675c + Field<0, 4>() = uVar22; + s_SALIR_005b675c + Field<4, 2>() = uVar3; + sprintf(g_windowTitle1,s__s___Rotura_005b6750,s_windowTitle); + pcVar4 = s_Restablecer_datos____005b6738; + pcVar17 = s_wndStrRestoring; + for (iVar13 = 5; iVar13 != 0; iVar13 = iVar13 + -1) { + *(undefined4 *)pcVar17 = *(undefined4 *)pcVar4; + pcVar4 = pcVar4 + 4; + pcVar17 = pcVar17 + 4; + } + *pcVar17 = *pcVar4; + } + else { + iVar13 = strcmpi(aCStack_71c,s_Italian_005b6730); + if (iVar13 == 0) { + sprintf(s_windowTitleRestoring,s__s___Ripristino_dati____005b6718,s_windowTitle); + uVar2 = s_USCIRE_005b66ec + Field<4, 2>(); + pcVar4 = s_Premi_ESC_per_uscire_da_Rayman_3_005b66f4; + pcVar17 = s_quitting1; + for (iVar13 = 8; cVar1 = s_USCIRE_005b66ec[6], iVar13 != 0; iVar13 = iVar13 + -1) { + *(undefined4 *)pcVar17 = *(undefined4 *)pcVar4; + pcVar4 = pcVar4 + 4; + pcVar17 = pcVar17 + 4; + } + s_wndStrQuiting[0] = s_USCIRE_005b66ec[0]; + s_wndStrQuiting[1] = s_USCIRE_005b66ec[1]; + s_wndStrQuiting[2] = s_USCIRE_005b66ec[2]; + s_wndStrQuiting[3] = s_USCIRE_005b66ec[3]; + *(undefined2 *)pcVar17 = *(undefined2 *)pcVar4; + uVar3 = s_USCIRE_005b66ec + Field<4, 2>(); + s_wndStrQuiting[6] = cVar1; + s_USCIRE_005b66ec[4] = (char)uVar2; + s_USCIRE_005b66ec[5] = SUB21(uVar2,1); + s_wndStrQuiting[4] = s_USCIRE_005b66ec[4]; + s_wndStrQuiting[5] = s_USCIRE_005b66ec[5]; + s_USCIRE_005b66ec + Field<4, 2>() = uVar3; + sprintf(g_windowTitle1,s__s___Pausa_005b66e0,s_windowTitle); + s_wndStrRestoring[0] = s_Ripristino_dati____005b66cc[0]; + s_wndStrRestoring[1] = s_Ripristino_dati____005b66cc[1]; + s_wndStrRestoring[2] = s_Ripristino_dati____005b66cc[2]; + s_wndStrRestoring[3] = s_Ripristino_dati____005b66cc[3]; + s_wndStrRestoring[4] = s_Ripristino_dati____005b66cc[4]; + s_wndStrRestoring[5] = s_Ripristino_dati____005b66cc[5]; + s_wndStrRestoring[6] = s_Ripristino_dati____005b66cc[6]; + s_wndStrRestoring[7] = s_Ripristino_dati____005b66cc[7]; + s_wndStrRestoring[8] = s_Ripristino_dati____005b66cc[8]; + s_wndStrRestoring[9] = s_Ripristino_dati____005b66cc[9]; + s_wndStrRestoring[10] = s_Ripristino_dati____005b66cc[10]; + s_wndStrRestoring[0xb] = s_Ripristino_dati____005b66cc[0xb]; + s_wndStrRestoring + Field<12, 4>() = s_Ripristino_dati____005b66cc + Field<12, 4>(); + s_wndStrRestoring + Field<16, 2>() = s_Ripristino_dati____005b66cc + Field<16, 2>(); + s_wndStrRestoring[0x12] = s_Ripristino_dati____005b66cc[0x12]; + } + else { + iVar13 = strcmpi(aCStack_71c,s_German_005b66c4); + if (iVar13 == 0) { + sprintf(s_windowTitleRestoring,s__s___Daten_Reparatur____005b66ac,s_windowTitle); + chars = s_BEENDIGEN_005b6678 + Field<0, 4>(); + pcVar4 = &CHAR_E_005b6684; + pcVar17 = s_quitting1; + for (iVar13 = 9; uVar2 = s_BEENDIGEN_005b6678 + Field<8, 2>(), uVar22 = s_BEENDIGEN_005b6678 + Field<4, 4>(), + iVar13 != 0; iVar13 = iVar13 + -1) { + *(undefined4 *)pcVar17 = *(undefined4 *)pcVar4; + pcVar4 = pcVar4 + 4; + pcVar17 = pcVar17 + 4; + } + *(undefined2 *)pcVar17 = *(undefined2 *)pcVar4; + uVar1 = s_BEENDIGEN_005b6678 + Field<0, 4>(); + s_BEENDIGEN_005b6678[0] = (char)chars; + s_BEENDIGEN_005b6678[1] = SUB41(chars,1); + s_BEENDIGEN_005b6678[2] = SUB41(chars,2); + s_BEENDIGEN_005b6678[3] = SUB41(chars,3); + s_wndStrQuiting[0] = s_BEENDIGEN_005b6678[0]; + s_wndStrQuiting[1] = s_BEENDIGEN_005b6678[1]; + s_wndStrQuiting[2] = s_BEENDIGEN_005b6678[2]; + s_wndStrQuiting[3] = s_BEENDIGEN_005b6678[3]; + s_BEENDIGEN_005b6678 + Field<0, 4>() = uVar1; + pcVar17[2] = pcVar4[2]; + uVar3 = s_BEENDIGEN_005b6678 + Field<8, 2>(); + chars = s_BEENDIGEN_005b6678 + Field<4, 4>(); + s_BEENDIGEN_005b6678[4] = (char)uVar22; + s_BEENDIGEN_005b6678[5] = SUB41(uVar22,1); + s_BEENDIGEN_005b6678[6] = SUB41(uVar22,2); + s_BEENDIGEN_005b6678[7] = SUB41(uVar22,3); + s_wndStrQuiting[4] = s_BEENDIGEN_005b6678[4]; + s_wndStrQuiting[5] = s_BEENDIGEN_005b6678[5]; + s_wndStrQuiting[6] = s_BEENDIGEN_005b6678[6]; + s_wndStrQuiting[7] = s_BEENDIGEN_005b6678[7]; + s_BEENDIGEN_005b6678[8] = (char)uVar2; + s_BEENDIGEN_005b6678[9] = SUB21(uVar2,1); + s_wndStrQuiting[8] = s_BEENDIGEN_005b6678[8]; + s_wndStrQuiting[9] = s_BEENDIGEN_005b6678[9]; + s_BEENDIGEN_005b6678 + Field<4, 4>() = chars; + s_BEENDIGEN_005b6678 + Field<8, 2>() = uVar3; + sprintf(g_windowTitle1,s__s___Pause_005b67c4,s_windowTitle); + s_wndStrRestoring[0] = s_Daten_Reparatur____005b6664[0]; + s_wndStrRestoring[1] = s_Daten_Reparatur____005b6664[1]; + s_wndStrRestoring[2] = s_Daten_Reparatur____005b6664[2]; + s_wndStrRestoring[3] = s_Daten_Reparatur____005b6664[3]; + s_wndStrRestoring[4] = s_Daten_Reparatur____005b6664[4]; + s_wndStrRestoring[5] = s_Daten_Reparatur____005b6664[5]; + s_wndStrRestoring[6] = s_Daten_Reparatur____005b6664[6]; + s_wndStrRestoring[7] = s_Daten_Reparatur____005b6664[7]; + s_wndStrRestoring[8] = s_Daten_Reparatur____005b6664[8]; + s_wndStrRestoring[9] = s_Daten_Reparatur____005b6664[9]; + s_wndStrRestoring[10] = s_Daten_Reparatur____005b6664[10]; + s_wndStrRestoring[0xb] = s_Daten_Reparatur____005b6664[0xb]; + s_wndStrRestoring[0xc] = s_Daten_Reparatur____005b6664[0xc]; + s_wndStrRestoring[0xd] = s_Daten_Reparatur____005b6664[0xd]; + s_wndStrRestoring[0xe] = s_Daten_Reparatur____005b6664[0xe]; + s_wndStrRestoring[0xf] = s_Daten_Reparatur____005b6664[0xf]; + s_wndStrRestoring[0x10] = s_Daten_Reparatur____005b6664[0x10]; + s_wndStrRestoring[0x11] = s_Daten_Reparatur____005b6664[0x11]; + s_wndStrRestoring[0x12] = s_Daten_Reparatur____005b6664[0x12]; + } + else { + sprintf(s_windowTitleRestoring,s__s___Restoring_data____005b664c,s_windowTitle); + chars = s_QUIT + Field<0, 4>(); + pcVar4 = s_or_press_ESC_to_quit_Rayman_3__005b662c; + pcVar17 = s_quitting1; + for (iVar13 = 7; cVar1 = s_QUIT[4], iVar13 != 0; iVar13 = iVar13 + -1) { + *(undefined4 *)pcVar17 = *(undefined4 *)pcVar4; + pcVar4 = pcVar4 + 4; + pcVar17 = pcVar17 + 4; + } + *(undefined2 *)pcVar17 = *(undefined2 *)pcVar4; + pcVar17[2] = pcVar4[2]; + uVar22 = s_QUIT + Field<0, 4>(); + s_QUIT[0] = (char)chars; + s_QUIT[1] = SUB41(chars,1); + s_QUIT[2] = SUB41(chars,2); + s_QUIT[3] = SUB41(chars,3); + s_wndStrQuiting[0] = s_QUIT[0]; + s_wndStrQuiting[1] = s_QUIT[1]; + s_wndStrQuiting[2] = s_QUIT[2]; + s_wndStrQuiting[3] = s_QUIT[3]; + s_wndStrQuiting[4] = cVar1; + s_QUIT + Field<0, 4>() = uVar22; + sprintf(g_windowTitle1,s__s___Pause_005b67c4,s_windowTitle); + s_wndStrRestoring[0] = s_Restoring_data_____005b6610[0]; + s_wndStrRestoring[1] = s_Restoring_data_____005b6610[1]; + s_wndStrRestoring[2] = s_Restoring_data_____005b6610[2]; + s_wndStrRestoring[3] = s_Restoring_data_____005b6610[3]; + s_wndStrRestoring[4] = s_Restoring_data_____005b6610[4]; + s_wndStrRestoring[5] = s_Restoring_data_____005b6610[5]; + s_wndStrRestoring[6] = s_Restoring_data_____005b6610[6]; + s_wndStrRestoring[7] = s_Restoring_data_____005b6610[7]; + s_wndStrRestoring[8] = s_Restoring_data_____005b6610[8]; + s_wndStrRestoring[9] = s_Restoring_data_____005b6610[9]; + s_wndStrRestoring[10] = s_Restoring_data_____005b6610[10]; + s_wndStrRestoring[0xb] = s_Restoring_data_____005b6610[0xb]; + s_wndStrRestoring + Field<12, 4>() = s_Restoring_data_____005b6610 + Field<12, 4>(); + s_wndStrRestoring + Field<16, 2>() = s_Restoring_data_____005b6610 + Field<16, 2>(); + s_wndStrRestoring[0x12] = s_Restoring_data_____005b6610[0x12]; + } + } + } + } + /* Create draw semaphore + Initial count = 1 + Maximum count = 1 */ + g_drawSemaphore = CreateSemaphoreA((LPSECURITY_ATTRIBUTES)0x0,1,1,s_DRAWSEM_005b6608); + if (iStack_8 != 0) { + return -1; + } + /* Load DirectPlay probably unused */ + hLibModule = LoadLibraryA(s_dpnhpast_dll_005b65f8); + if (hLibModule == (HMODULE)0x0) { + iVar13 = strcmpi(aCStack_71c,s_French_005b6828); + if (iVar13 == 0) { + MessageBoxA((HWND)0x0,lpText_005b6598,s_Erreur_Rayman_3_005b65e4,0x10); + return -1; + } + iVar13 = strcmpi(aCStack_71c,s_Spanish_005b67a0); + if (iVar13 == 0) { + MessageBoxA((HWND)0x0,lpText_005b6540,s_Rayman_3_005b6588,0x10); + return -1; + } + iVar13 = strcmpi(aCStack_71c,s_Italian_005b6730); + if (iVar13 == 0) { + MessageBoxA((HWND)0x0,lpText_005b64f0,s_Rayman_3_005b6588,0x10); + return -1; + } + iVar13 = strcmpi(aCStack_71c,s_German_005b66c4); + if (iVar13 != 0) { + MessageBoxA((HWND)0x0,s_Check_your_version_of_DirectX__V_005b6430,s_Rayman_3_Error_005b68bc, + 0x10); + return -1; + } + MessageBoxA((HWND)0x0,lpText_005b6478,s_Rayman_3_005b6588,0x10); + return -1; + } + FreeLibrary(hLibModule); + p_cTxt1 = (void *)0x401e2a; + CreateMutexA((LPSECURITY_ATTRIBUTES)0x0,1,g_mutexName_Rayman3); + DVar7 = GetLastError(); + if (DVar7 == 0xb7) { + /* Mutex already exists */ + return -1; + } + p_cTxt2 = (void *)0x401e5a; + GetWindowsDirectoryA(aCStack_414,0x104); + iVar13 = -1; + /* Append ubi.ini */ + pcVar4 = acStack_424; + do { + pcVar17 = pcVar4; + if (iVar13 == 0) break; + iVar13 = iVar13 + -1; + pcVar17 = pcVar4 + 1; + cVar1 = *pcVar4; + pcVar4 = pcVar17; + } while (cVar1 != '\0'); + *(undefined4 *)(pcVar17 + -1) = s_UbiSoft_Ubi_ini + Field<0, 4>(); + *(undefined4 *)(pcVar17 + 3) = s_UbiSoft_Ubi_ini + Field<4, 4>(); + *(undefined4 *)(pcVar17 + 7) = s_UbiSoft_Ubi_ini + Field<8, 4>(); + *(undefined4 *)(pcVar17 + 0xb) = s_UbiSoft_Ubi_ini + Field<12, 4>(); + pcVar17[0xf] = s_UbiSoft_Ubi_ini[0x10]; + /* Read graphics settings */ + GetPrivateProfileStringA + (lpAppName_005b68f0,s_Adapter_005b68e4,(LPCSTR)&lpDefault_005cf96c,acStack_320,0xff, + acStack_424); + GetPrivateProfileStringA + (lpAppName_005b68f0,s_Identifier_005b6420,(LPCSTR)&lpDefault_005cf96c,acStack_120,0xff, + acStack_424); + GetPrivateProfileStringA + (lpAppName_005b68f0,s_Gli_Mode_005b6414,(LPCSTR)&lpDefault_005cf96c,acStack_220,0xff, + acStack_424); + /* If they're all set */ + if (((acStack_320[0] != '\0') && (acStack_120[0] != '\0')) && (acStack_220[0] != '\0')) { + /* For GLIMode + 1 = maximize + 0 = windowed */ + g_runMaximized = (int)(acStack_220[0] != '0'); + r3_checkDisc(); + dwOptions = 0; + BVar18 = 0; + lpTargetHandle = (LPHANDLE)&stack0xfffff7ac; + DVar7 = 0x1f03ff; + g_hinstance = instance; + hTargetProcessHandle = GetCurrentProcess(); + hSourceHandle = GetCurrentThread(); + hSourceProcessHandle = GetCurrentProcess(); + DuplicateHandle(hSourceProcessHandle,hSourceHandle,hTargetProcessHandle,lpTargetHandle,DVar7, + BVar18,dwOptions); + /* Copy cmdline */ + ppCVar8 = puStack_14; + g_mainThreadHandle = lpBuffer; + do { + uVar14 = *ppCVar8; + *(char *)(((int)g_appCmdLine - (int)puStack_14) + (int)ppCVar8) = (char)uVar14; + ppCVar8 = (uint *)((int)ppCVar8 + 1); + } while ((char)uVar14 != '\0'); + /* SEM_FAILCRITICALERRORS */ + SetErrorMode(1); + pcVar4 = strstr(puStack_14,s_dashCC); + if (pcVar4 == (char *)0x0) { + r3_initAllModules(); + iVar13 = setupWindow(instance,uStack_10,g_runMaximized); + if (iVar13 == 0) { + return -1; + } + g_setInitVar0(); + FUN_00401320(); + spawnThread(); + r3_noop(p_cTxt1,p_cTxt2); + gfx_init2(); + lpRect = (LPRECT)&stack0xfffff7c0; + hWnd = GetDesktopWindow(); + GetWindowRect(hWnd,lpRect); + BVar18 = 1; + iVar13 = r3_get_gli_height1(); + iVar13 = iVar13 + 0x20; + iVar10 = r3_get_gli_width1(); + iVar10 = iVar10 + 0xc; + iVar11 = r3_get_gli_height1(); + iVar11 = (int)(pvStack_834 - iVar11) / 2; + iVar12 = r3_get_gli_width1(); + MoveWindow(g_gameHWND,(int)(pHStack_838 - iVar12) / 2,iVar11,iVar10,iVar13,BVar18); + FUN_004010b0(); + SystemParametersInfoA(0x10,0,&stack0xfffff7b0,0); + SystemParametersInfoA(0x11,0,(PVOID)0x0,0); + ShowCursor(0); + uStack_85c = 0; + SystemParametersInfoA(0x61,1,&uStack_85c,0); + g_engineRunning = 1; + r3_engineLoop(); + /* cleanup starts here */ + FUN_004725a0(); + FUN_005038e0(); + FUN_00503710(); + FUN_004fb300(); + FUN_00472150(); + FUN_00470db0(); + uStack_85c = 0; + SystemParametersInfoA(0x61,0,&uStack_85c,0); + ShowCursor(1); + SystemParametersInfoA(0x11,uiParam,(PVOID)0x0,0); + CloseHandle(lpBuffer); + } + return 0; + } + sprintf(UStack_830,s_Please_run_the__s_setup__005b63f4,s_windowTitle); + sprintf(acStack_528,s__s_not_initialized__005b63e0,s_windowTitle); + r3_wait_for_dvd(UStack_830,acStack_528,0); + /* WARNING: Subroutine does not return */ + exit(-1); +} + +} +