diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 9a61fd6..5138355 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -276,9 +276,19 @@ bool __cdecl diablo_get_not_running() CreateEventA(NULL, FALSE, FALSE, "DiabloEvent"); return GetLastError() != ERROR_ALREADY_EXISTS; } + +void preMainInit(){ + engine_cpp_init_2(); + dx_cpp_init_2(); + dthread_cpp_init_2(); + nthread_cpp_init_2(); + log_cpp_init_2(); +} + int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { + preMainInit(); HINSTANCE v4; // esi //int v11; // ecx char Filename[260]; // [esp+8h] [ebp-10Ch] diff --git a/Source/dthread.cpp b/Source/dthread.cpp index da0270a..291f48e 100644 --- a/Source/dthread.cpp +++ b/Source/dthread.cpp @@ -24,14 +24,12 @@ struct dthread_cpp_init_1 // 47A460: using guessed type int dthread_inf; // 52A4E0: using guessed type int dthread_cpp_init_value; -struct dthread_cpp_init_2 +void __cdecl dthread_cpp_init_2() { - dthread_cpp_init_2() - { - dthread_init_mutex(); - dthread_cleanup_mutex_atexit(); - } -} _dthread_cpp_init_2; + dthread_init_mutex(); + dthread_cleanup_mutex_atexit(); +} + void __cdecl dthread_init_mutex() { diff --git a/Source/dx.cpp b/Source/dx.cpp index 88a6501..cc9027f 100644 --- a/Source/dx.cpp +++ b/Source/dx.cpp @@ -27,14 +27,11 @@ struct dx_cpp_init_1 // 47A464: using guessed type int dx_inf; // 52A514: using guessed type int dx_cpp_init_value; -struct dx_cpp_init_2 +void __cdecl dx_cpp_init_2() { - dx_cpp_init_2() - { - dx_init_mutex(); - dx_cleanup_mutex_atexit(); - } -} _dx_cpp_init_2; + dx_init_mutex(); + dx_cleanup_mutex_atexit(); +} void __cdecl dx_init_mutex() { diff --git a/Source/engine.cpp b/Source/engine.cpp index ac8f525..cc430bc 100644 --- a/Source/engine.cpp +++ b/Source/engine.cpp @@ -1879,14 +1879,12 @@ int __fastcall random(int idx, int v) return v4 % v2; } -struct engine_cpp_init_2 +void __cdecl engine_cpp_init_2() { - engine_cpp_init_2() - { - mem_init_mutex(); - mem_atexit_mutex(); - } -} _engine_cpp_init_2; + mem_init_mutex(); + mem_atexit_mutex(); +} + void __cdecl mem_init_mutex() { diff --git a/Source/logging.cpp b/Source/logging.cpp index 19f4259..59cd1d1 100644 --- a/Source/logging.cpp +++ b/Source/logging.cpp @@ -26,14 +26,11 @@ struct log_cpp_init_1 // 47F070: using guessed type int log_inf; // 646A30: using guessed type int log_cpp_init_value; -struct log_cpp_init_2 +void __cdecl log_cpp_init_2() { - log_cpp_init_2() - { - log_init_mutex(); - j_log_cleanup_mutex(); - } -} _log_cpp_init_2; + log_init_mutex(); + j_log_cleanup_mutex(); +} void __cdecl log_init_mutex() { diff --git a/Source/mainmenu.cpp b/Source/mainmenu.cpp index ab795ac..854db73 100644 --- a/Source/mainmenu.cpp +++ b/Source/mainmenu.cpp @@ -108,45 +108,43 @@ LABEL_6: void __fastcall mainmenu_action(int option) { - int v1; // eax + + int quit; // eax int a2; // [esp+0h] [ebp-4h] - a2 = option; + //a2 = option;// development history seems to be showing here mainmenu_refresh_music(); - do - { - while ( 1 ) - { - a2 = 0; - if ( !UiMainMenuDialog("Diablo v1.09", &a2, effects_play_sound, 30) ) - TermMsg("Unable to display mainmenu"); - if ( a2 == 1 ) - break; - switch ( a2 ) - { - case MAINMENU_MULTIPLAYER: - v1 = mainmenu_multi_player(); - goto LABEL_15; - case MAINMENU_REPLAY_INTRO: - goto LABEL_10; - case MAINMENU_SHOW_CREDITS: - UiCreditsDialog(16); - break; - case MAINMENU_EXIT_DIABLO: - goto LABEL_16; - case MAINMENU_ATTRACT_MODE: -LABEL_10: - if ( window_activated ) - mainmenu_play_intro(); - break; - } - } - v1 = mainmenu_single_player(); -LABEL_15: - ; - } - while ( v1 ); -LABEL_16: + do{ + quit = 1; + a2 = 0; + if ( !UiMainMenuDialog("Diablo v1.09", &a2, effects_play_sound, 30) ){ + TermMsg("Unable to display mainmenu"); + //old code would loop endlessly here (probably) + break;//new code will quit. + } + + switch ( a2 ) + { + case MAINMENU_SINGLE_PLAYER: + quit = mainmenu_single_player(); + break; + case MAINMENU_MULTIPLAYER: + quit = mainmenu_multi_player(); + break; + case MAINMENU_SHOW_CREDITS: + UiCreditsDialog(16); + break; + case MAINMENU_EXIT_DIABLO: + quit = 0; + break; + case MAINMENU_REPLAY_INTRO: + case MAINMENU_ATTRACT_MODE: + if ( window_activated ) + mainmenu_play_intro(); + break; + } + }while ( quit ); + music_stop(); } // 634980: using guessed type int window_activated; diff --git a/Source/nthread.cpp b/Source/nthread.cpp index ab0f7c2..cdbce45 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -35,14 +35,11 @@ struct nthread_cpp_init_1 // 47F164: using guessed type int nthread_inf; // 679700: using guessed type int nthread_cpp_init_value; -struct nthread_cpp_init_2 +void __cdecl nthread_cpp_init_2() { - nthread_cpp_init_2() - { - nthread_init_mutex(); - nthread_cleanup_mutex_atexit(); - } -} _nthread_cpp_init_2; + nthread_init_mutex(); + nthread_cleanup_mutex_atexit(); +} void __cdecl nthread_init_mutex() {