920 lines
31 KiB
C++
920 lines
31 KiB
C++
//
|
|
// Created by neo on 2019-08-15.
|
|
//
|
|
|
|
#include "pinball.h"
|
|
|
|
//----- (0100833A) --------------------------------------------------------
|
|
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
|
|
{
|
|
CHAR *v4; // eax
|
|
CHAR *v5; // eax
|
|
int v6; // eax
|
|
CHAR *v7; // ST24_4
|
|
CHAR *v8; // eax
|
|
signed int v9; // edi
|
|
CHAR *v10; // eax
|
|
CHAR *v11; // eax
|
|
CHAR *v12; // ST2C_4
|
|
CHAR *v13; // eax
|
|
CHAR *v14; // eax
|
|
CHAR *v15; // eax
|
|
CHAR *v16; // eax
|
|
HINSTANCE v17; // edi
|
|
CHAR *v18; // ST28_4
|
|
CHAR *v19; // eax
|
|
CHAR *v20; // eax
|
|
HWND v21; // eax
|
|
CHAR *v22; // eax
|
|
CHAR *v23; // eax
|
|
HWND v24; // eax
|
|
HMENU v26; // eax
|
|
DWORD (__stdcall *v27)(); // edi
|
|
DWORD v28; // eax
|
|
HINSTANCE v29; // eax
|
|
char *v30; // esi
|
|
signed int v31; // edx
|
|
signed int v32; // edi
|
|
_BYTE *v33; // eax
|
|
char v34; // cl
|
|
char v35; // cl
|
|
DWORD v36; // eax
|
|
int v37; // eax
|
|
HINSTANCE v38; // ST2C_4
|
|
CHAR *v39; // eax
|
|
WNDCLASSA WndClass; // [esp+14h] [ebp-13Ch]
|
|
INITCOMMONCONTROLSEX picce; // [esp+3Ch] [ebp-114h]
|
|
HINSTANCE v42; // [esp+44h] [ebp-10Ch]
|
|
LPCSTR lpString1; // [esp+48h] [ebp-108h]
|
|
int v44; // [esp+4Ch] [ebp-104h]
|
|
HINSTANCE v45; // [esp+50h] [ebp-100h]
|
|
char *Str; // [esp+54h] [ebp-FCh]
|
|
int v47; // [esp+58h] [ebp-F8h]
|
|
struct tagPOINT Point; // [esp+5Ch] [ebp-F4h]
|
|
CHAR String1; // [esp+64h] [ebp-ECh]
|
|
struct tagMSG Dest; // [esp+12Ch] [ebp-24h]
|
|
|
|
v42 = hInstance;
|
|
Str = lpCmdLine;
|
|
v47 = 300;
|
|
v45 = 0;
|
|
memory_init((int)winmain_memalloc_failure);
|
|
++memory_critical_allocation;
|
|
v4 = get_rc_string(165, 0);
|
|
options_path_init(v4);
|
|
v5 = get_rc_string(166, 0);
|
|
if ( (signed int)options_get_int((DWORD)v5, "Table Version", (HKEY)1) <= 1 )
|
|
{
|
|
Point.y = memoryallocate(0x1F4u);
|
|
if ( !Point.y )
|
|
{
|
|
LABEL_3:
|
|
options_path_uninit();
|
|
return 0;
|
|
}
|
|
v10 = get_rc_string(166, 0);
|
|
options_set_int((HKEY)v10, "Table Version", 1u);
|
|
GetModuleFileNameA(hinst, (LPSTR)Point.y, 0x1F4u);
|
|
v11 = get_rc_string(166, 0);
|
|
options_set_string((HKEY)v11, "Table Exe", (LPCSTR)Point.y);
|
|
v12 = get_rc_string(169, 0);
|
|
v13 = get_rc_string(166, 0);
|
|
options_set_string((HKEY)v13, "Table Name", v12);
|
|
v14 = get_rc_string(166, 0);
|
|
options_set_string(0, "Last Table Played", v14);
|
|
memoryfree(Point.y);
|
|
Point.y = memoryallocate(0x1F4u);
|
|
if ( Point.y )
|
|
{
|
|
lpString1 = (LPCSTR)memoryallocate(0x1F4u);
|
|
if ( lpString1 )
|
|
{
|
|
v44 = 0;
|
|
do
|
|
{
|
|
_sprintf((char *)&Dest, "Table%d", v44);
|
|
options_get_string(0, (LPCSTR)&Dest, (LPSTR)Point.y, WindowName, 500);
|
|
if ( !*(_BYTE *)Point.y )
|
|
break;
|
|
options_get_string(Point.y, "Table Name", (LPSTR)lpString1, WindowName, 500);
|
|
v15 = get_rc_string(169, 0);
|
|
if ( !lstrcmpA(lpString1, v15) )
|
|
goto LABEL_15;
|
|
if ( !*lpString1 )
|
|
break;
|
|
++v44;
|
|
}
|
|
while ( v44 < 32700 );
|
|
v16 = get_rc_string(166, 0);
|
|
options_set_string(0, (LPCSTR)&Dest, v16);
|
|
LABEL_15:
|
|
memoryfree((int)lpString1);
|
|
}
|
|
memoryfree(Point.y);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v6 = memoryallocate(0x1F4u);
|
|
Point.y = v6;
|
|
if ( !v6 )
|
|
goto LABEL_3;
|
|
v7 = (CHAR *)v6;
|
|
v8 = get_rc_string(166, 0);
|
|
options_get_string((DWORD)v8, "Shell Exe", v7, WindowName, 500);
|
|
v9 = WinExec((LPCSTR)Point.y, 5u);
|
|
memoryfree(Point.y);
|
|
if ( v9 >= 32 )
|
|
goto LABEL_3;
|
|
}
|
|
--memory_critical_allocation;
|
|
v17 = v42;
|
|
dword_102556C = _strstr(Str, "-quick") != 0;
|
|
hinst = v42;
|
|
v18 = get_rc_string(168, 0);
|
|
v19 = get_rc_string(166, 0);
|
|
options_get_string((DWORD)v19, "Pinball Data", byte_102543C, v18, 300);
|
|
iFrostUniqueMsg = RegisterWindowMessageA("PinballThemeSwitcherUniqueMsgString");
|
|
v20 = get_rc_string(167, 0);
|
|
v21 = FindWindowA(v20, 0);
|
|
if ( v21 )
|
|
{
|
|
SendMessageA(v21, iFrostUniqueMsg, 0, 0);
|
|
return 0;
|
|
}
|
|
if ( check_expiration_date() )
|
|
return 0;
|
|
picce.dwSize = 8;
|
|
picce.dwICC = 5885;
|
|
InitCommonControlsEx(&picce);
|
|
WndClass.style = 4104;
|
|
WndClass.lpfnWndProc = message_handler;
|
|
WndClass.cbClsExtra = 0;
|
|
WndClass.cbWndExtra = 0;
|
|
WndClass.hInstance = v17;
|
|
WndClass.hIcon = LoadIconA(v17, "ICON_1");
|
|
WndClass.hCursor = LoadCursorA(0, (LPCSTR)0x7F00);
|
|
WndClass.hbrBackground = (HBRUSH)16;
|
|
WndClass.lpszMenuName = "MENU_1";
|
|
WndClass.lpszClassName = get_rc_string(167, 0);
|
|
Point.y = splash_screen((int)v17, "splash_bitmap", "splash_bitmap");
|
|
RegisterClassA(&WndClass);
|
|
FindShiftKeys();
|
|
v22 = get_rc_string(38, 0);
|
|
lstrcpyA(&String1, v22);
|
|
v23 = get_rc_string(167, 0);
|
|
v24 = CreateWindowExA(0, v23, &String1, 0x3CA0000u, 0, 0, 640, 480, 0, 0, v17, 0);
|
|
hwnd_frame = v24;
|
|
if ( !v24 )
|
|
{
|
|
PostQuitMessage(0);
|
|
return 0;
|
|
}
|
|
v26 = GetMenu(v24);
|
|
options_init(v26);
|
|
pb_reset_table();
|
|
pb_firsttime_setup();
|
|
if ( _strstr(Str, "-fullscreen") )
|
|
{
|
|
dword_102822C = (HKEY)1;
|
|
options_menu_check(0x193u, 1);
|
|
}
|
|
ShowWindow(hwnd_frame, nShowCmd);
|
|
fullscrn_set_screen_mode((int)dword_102822C);
|
|
UpdateWindow(hwnd_frame);
|
|
if ( Point.y )
|
|
{
|
|
splash_hide(Point.y);
|
|
splash_destroy(Point.y);
|
|
}
|
|
adjust_priority((int)dword_1028230);
|
|
v27 = timeGetTime;
|
|
Point.y = timeGetTime();
|
|
while ( timeGetTime() >= Point.y && timeGetTime() - Point.y < 0x7D0 )
|
|
PeekMessageA(&Dest, hwnd_frame, 0, 0, 1u);
|
|
if ( _strstr(Str, "-demo") )
|
|
pb_toggle_demo(0);
|
|
else
|
|
pb_replay_level(0);
|
|
v28 = timeGetTime();
|
|
LABEL_35:
|
|
then = v28;
|
|
while ( 1 )
|
|
{
|
|
if ( !v47 )
|
|
{
|
|
v47 = 300;
|
|
if ( DispFrameRate )
|
|
{
|
|
v29 = (HINSTANCE)v27();
|
|
v42 = v29;
|
|
if ( v45 )
|
|
{
|
|
Str = (char *)((char *)v29 - (char *)v45);
|
|
_sprintf(::Dest, "Frames/sec = %02.02f", 300.0 / ((double)(unsigned int)((char *)v29 - (char *)v45) * 0.001));
|
|
SetWindowTextA(hwnd_frame, ::Dest);
|
|
if ( DispGRhistory )
|
|
{
|
|
if ( !dword_10281C8 )
|
|
{
|
|
v30 = (char *)_malloc(0x400u);
|
|
v31 = 0;
|
|
v32 = 0;
|
|
v33 = v30 + 41;
|
|
do
|
|
{
|
|
if ( v31 + 10 >= 256 )
|
|
break;
|
|
v34 = v32;
|
|
if ( v32 > 255 )
|
|
v34 = -1;
|
|
v33[1] = v34;
|
|
v35 = v32;
|
|
if ( v32 > 255 )
|
|
v35 = v31;
|
|
*v33 = v35;
|
|
*(v33 - 1) = v35;
|
|
v32 += 8;
|
|
v33 += 4;
|
|
++v31;
|
|
}
|
|
while ( v31 < 256 );
|
|
gdrv_display_palette((int)v30);
|
|
_free(v30);
|
|
gdrv_create_bitmap((int)&gfr_display, 400, 15);
|
|
v27 = timeGetTime;
|
|
}
|
|
gdrv_blit((int)&gfr_display, 0, 0, 0, 0, 300, 10);
|
|
gdrv_fill_bitmap(0, &gfr_display, 0x12Cu, 10, 0, 0, 0);
|
|
}
|
|
}
|
|
v45 = v42;
|
|
}
|
|
else
|
|
{
|
|
v45 = 0;
|
|
}
|
|
}
|
|
Sound_Idle();
|
|
if ( !sub_10082A9() || bQuit )
|
|
break;
|
|
if ( has_focus )
|
|
{
|
|
if ( mouse_down )
|
|
{
|
|
now = v27();
|
|
if ( now - then >= 2 )
|
|
{
|
|
GetCursorPos(&Point);
|
|
pb_ballset(last_mouse_x - Point.x, Point.y - last_mouse_y);
|
|
SetCursorPos(last_mouse_x, last_mouse_y);
|
|
}
|
|
}
|
|
if ( !single_step )
|
|
{
|
|
v36 = v27();
|
|
now = v36;
|
|
if ( no_time_loss )
|
|
{
|
|
then = v36;
|
|
no_time_loss = 0;
|
|
}
|
|
if ( v36 == then )
|
|
{
|
|
Sleep(8u);
|
|
}
|
|
else if ( pb_frame(0, v36 - then) )
|
|
{
|
|
if ( dword_10281C8 )
|
|
{
|
|
v37 = now - then + 10;
|
|
if ( v37 > 236 )
|
|
LOBYTE(v37) = -7;
|
|
gdrv_fill_bitmap(0, &gfr_display, 1u, 10, 299 - v47, 0, v37);
|
|
}
|
|
--v47;
|
|
v28 = now;
|
|
goto LABEL_35;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
gdrv_destroy_bitmap((int)&gfr_display);
|
|
options_uninit();
|
|
midi_music_shutdown();
|
|
pb_uninit();
|
|
Sound_Close();
|
|
gdrv_uninit();
|
|
DestroyWindow(hwnd_frame);
|
|
options_path_uninit();
|
|
v38 = hinst;
|
|
v39 = get_rc_string(167, 0);
|
|
UnregisterClassA(v39, v38);
|
|
return return_value;
|
|
}
|
|
// 1024F04: using guessed type int memory_critical_allocation;
|
|
// 1024FD8: using guessed type int single_step;
|
|
// 1024FDC: using guessed type int bQuit;
|
|
// 1024FE0: using guessed type int DispFrameRate;
|
|
// 1024FE4: using guessed type int DispGRhistory;
|
|
// 1024FE8: using guessed type int mouse_down;
|
|
// 1024FEC: using guessed type int has_focus;
|
|
// 1024FF4: using guessed type int no_time_loss;
|
|
// 102556C: using guessed type int dword_102556C;
|
|
// 10281A0: using guessed type int then;
|
|
// 10281C8: using guessed type int dword_10281C8;
|
|
// 10281F0: using guessed type int now;
|
|
// 1028200: using guessed type int return_value;
|
|
|
|
//----- (010076BF) --------------------------------------------------------
|
|
int __stdcall make_path_name(LPSTR lpFilename, LPCSTR lpString2, DWORD nSize)
|
|
{
|
|
DWORD v3; // eax
|
|
CHAR *i; // ecx
|
|
|
|
v3 = GetModuleFileNameA(hinst, lpFilename, nSize);
|
|
if ( v3 && v3 != nSize )
|
|
{
|
|
for ( i = &lpFilename[v3]; i > lpFilename; --i )
|
|
{
|
|
if ( *i == 92 || *i == 58 )
|
|
{
|
|
i[1] = 0;
|
|
break;
|
|
}
|
|
--v3;
|
|
}
|
|
if ( (signed int)(v3 + 13) < (signed int)nSize )
|
|
{
|
|
lstrcatA(lpFilename, lpString2);
|
|
return 0;
|
|
}
|
|
lstrcatA(lpFilename, "?");
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
//----- (01007918) --------------------------------------------------------
|
|
void __usercall winmain_pause(int a1) {
|
|
if ( fullscrn_screen_mode )
|
|
{
|
|
if ( single_step )
|
|
fullscrn_set_menu_mode(0);
|
|
else
|
|
fullscrn_set_menu_mode(1);
|
|
}
|
|
pb_pause_continue(a1);
|
|
no_time_loss = 1;
|
|
}
|
|
// 1024EE4: using guessed type int fullscrn_screen_mode;
|
|
// 1024FD8: using guessed type int single_step;
|
|
// 1024FF4: using guessed type int no_time_loss;
|
|
|
|
//----- (01007949) --------------------------------------------------------
|
|
void __usercall winmain_end_pause(int a1)
|
|
{
|
|
if ( single_step )
|
|
{
|
|
if ( fullscrn_screen_mode )
|
|
fullscrn_set_menu_mode(0);
|
|
pb_pause_continue(a1);
|
|
no_time_loss = 1;
|
|
}
|
|
}
|
|
// 1024EE4: using guessed type int fullscrn_screen_mode;
|
|
// 1024FD8: using guessed type int single_step;
|
|
// 1024FF4: using guessed type int no_time_loss;
|
|
|
|
//----- (01007976) --------------------------------------------------------
|
|
HCURSOR __usercall winmain_new_game(int a1)
|
|
{
|
|
HCURSOR v1; // eax
|
|
HCURSOR v2; // edi
|
|
|
|
winmain_end_pause(a1);
|
|
v1 = LoadCursorA(0, (LPCSTR)0x7F02);
|
|
v2 = SetCursor(v1);
|
|
pb_replay_level(0);
|
|
return SetCursor(v2);
|
|
}
|
|
|
|
//----- (010079A9) --------------------------------------------------------
|
|
void __stdcall __noreturn winmain_memalloc_failure()
|
|
{
|
|
CHAR *v0; // ST08_4
|
|
CHAR *v1; // eax
|
|
|
|
midi_music_stop();
|
|
Sound_Close();
|
|
gdrv_uninit();
|
|
v0 = get_rc_string(170, 0);
|
|
v1 = get_rc_string(179, 0);
|
|
MessageBoxA(0, v1, v0, 0x2030u);
|
|
_exit(1);
|
|
}
|
|
|
|
//----- (010079ED) --------------------------------------------------------
|
|
HANDLE __stdcall adjust_priority(int a1)
|
|
{
|
|
HANDLE result; // eax
|
|
|
|
result = GetCurrentThread();
|
|
switch ( a1 )
|
|
{
|
|
case -2:
|
|
return (HANDLE)SetThreadPriority(result, -2);
|
|
case -1:
|
|
return (HANDLE)SetThreadPriority(result, -1);
|
|
case 0:
|
|
return (HANDLE)SetThreadPriority(result, 0);
|
|
case 1:
|
|
return (HANDLE)SetThreadPriority(result, 1);
|
|
case 2:
|
|
return (HANDLE)SetThreadPriority(result, 2);
|
|
case 3:
|
|
result = (HANDLE)SetThreadPriority(result, 15);
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
//----- (01007A3E) --------------------------------------------------------
|
|
LRESULT __stdcall message_handler(HWND hWnd, UINT Msg, WPARAM wParam, int a4)
|
|
{
|
|
WPARAM v5; // ebx
|
|
HWND v6; // eax
|
|
HCURSOR v7; // eax
|
|
HCURSOR v8; // ebx
|
|
HKEY v9; // eax
|
|
HKEY v10; // ST18_4
|
|
HMENU v11; // eax
|
|
HANDLE v12; // eax
|
|
bool v13; // zf
|
|
char *v14; // ebx
|
|
CHAR *v15; // ST14_4
|
|
CHAR *v16; // eax
|
|
struct tagRECT Rect; // [esp+8h] [ebp-64h]
|
|
int v18; // [esp+18h] [ebp-54h]
|
|
LPARAM lParam; // [esp+1Ch] [ebp-50h]
|
|
LPSTR lpString1; // [esp+20h] [ebp-4Ch]
|
|
HWND v21; // [esp+24h] [ebp-48h]
|
|
PAINTSTRUCT Paint; // [esp+28h] [ebp-44h]
|
|
|
|
v21 = hWnd;
|
|
lParam = a4;
|
|
if ( Msg != iFrostUniqueMsg )
|
|
{
|
|
v5 = wParam;
|
|
if ( Msg <= 0x1C )
|
|
{
|
|
if ( Msg == 28 )
|
|
{
|
|
if ( wParam )
|
|
{
|
|
activated = 1;
|
|
Sound_Activate();
|
|
if ( phkResult && !single_step )
|
|
midi_play_pb_theme(0);
|
|
no_time_loss = 1;
|
|
adjust_priority((int)dword_1028230);
|
|
}
|
|
else
|
|
{
|
|
activated = 0;
|
|
fullscrn_activate(0);
|
|
options_menu_check(0x193u, 0);
|
|
dword_102822C = 0;
|
|
v12 = GetCurrentThread();
|
|
SetThreadPriority(v12, 0);
|
|
Sound_Deactivate();
|
|
midi_music_stop();
|
|
}
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( Msg <= 8 )
|
|
{
|
|
if ( Msg != 8 )
|
|
{
|
|
if ( Msg == 1 )
|
|
{
|
|
++memory_critical_allocation;
|
|
v6 = GetDesktopWindow();
|
|
GetWindowRect(v6, &Rect);
|
|
v18 = Rect.right - Rect.left;
|
|
lpString1 = (LPSTR)(Rect.bottom - Rect.top);
|
|
pb_window_size(&v18, &lpString1);
|
|
v7 = LoadCursorA(0, (LPCSTR)0x7F02);
|
|
v8 = SetCursor(v7);
|
|
gdrv_init((int)hinst, v21);
|
|
v9 = options_get_int(0, "Voices", (HKEY)8);
|
|
if ( !Sound_Init(hinst, (int)v9, 0) )
|
|
options_menu_set(0xC9u, 0);
|
|
Sound_Activate();
|
|
if ( !dword_102556C && !midi_music_init(v21) )
|
|
options_menu_set(0xCAu, 0);
|
|
if ( pb_init() )
|
|
_exit(0);
|
|
SetCursor(v8);
|
|
v10 = options_get_int(0, "Change Display", (HKEY)1);
|
|
v11 = GetMenu(v21);
|
|
fullscrn_init(v18, (int)lpString1, (int)dword_102822C, v21, (int)v11, (int)v10);
|
|
--memory_critical_allocation;
|
|
v5 = wParam;
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( Msg != 2 )
|
|
{
|
|
if ( Msg != 3 )
|
|
{
|
|
if ( Msg == 7 )
|
|
{
|
|
has_focus = 1;
|
|
no_time_loss = 1;
|
|
gdrv_get_focus();
|
|
fullscrn_force_redraw();
|
|
pb_paint();
|
|
}
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
goto LABEL_70;
|
|
}
|
|
goto LABEL_28;
|
|
}
|
|
has_focus = 0;
|
|
gdrv_get_focus();
|
|
pb_loose_focus();
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
switch ( Msg )
|
|
{
|
|
case 0xFu:
|
|
_BeginPaint(hWnd, &Paint);
|
|
fullscrn_paint();
|
|
EndPaint(hWnd, &Paint);
|
|
break;
|
|
case 0x10u:
|
|
case 0x12u:
|
|
LABEL_28:
|
|
winmain_end_pause(wParam);
|
|
bQuit = 1;
|
|
PostQuitMessage(0);
|
|
fullscrn_shutdown();
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x14u:
|
|
break;
|
|
default:
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
return 0;
|
|
}
|
|
if ( Msg <= 0x11F )
|
|
{
|
|
if ( Msg == 287 )
|
|
{
|
|
if ( a4 )
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
if ( fullscrn_screen_mode )
|
|
fullscrn_set_menu_mode(0);
|
|
return 0;
|
|
}
|
|
if ( Msg <= 0x104 )
|
|
{
|
|
switch ( Msg )
|
|
{
|
|
case 0x104u:
|
|
no_time_loss = 1;
|
|
if ( fullscrn_screen_mode )
|
|
fullscrn_set_menu_mode(1);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x24u:
|
|
fullscrn_getminmaxinfo((_DWORD *)a4);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x7Eu:
|
|
if ( fullscrn_displaychange() )
|
|
{
|
|
dword_102822C = 0;
|
|
options_menu_check(0x193u, 0);
|
|
}
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( Msg != 256 )
|
|
{
|
|
if ( Msg == 257 )
|
|
pb_keyup((HKEY)wParam);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( !(a4 & 0x40000000) )
|
|
pb_keydown((HKEY)wParam);
|
|
switch ( wParam )
|
|
{
|
|
case 0x1Bu:
|
|
if ( dword_102822C )
|
|
options_toggle(0x193u);
|
|
SendMessageA(hwnd_frame, 0x112u, 0xF020u, 0);
|
|
break;
|
|
case 0x70u:
|
|
help_introduction((int)hinst, (int)v21);
|
|
break;
|
|
case 0x71u:
|
|
winmain_new_game(113);
|
|
break;
|
|
case 0x72u:
|
|
winmain_pause(114);
|
|
break;
|
|
case 0x73u:
|
|
options_toggle(0x193u);
|
|
break;
|
|
case 0x77u:
|
|
if ( !single_step )
|
|
winmain_pause(wParam);
|
|
options_keyboard();
|
|
break;
|
|
}
|
|
if ( !cheat_mode )
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
switch ( wParam )
|
|
{
|
|
case 0x48u:
|
|
DispGRhistory = 1;
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x59u:
|
|
SetWindowTextA(v21, "Pinball");
|
|
DispFrameRate = DispFrameRate == 0;
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x70u:
|
|
pb_frame(112, 10);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( wParam != 126 )
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
single_step = single_step == 0;
|
|
v13 = single_step == 0;
|
|
goto LABEL_69;
|
|
}
|
|
if ( Msg != 273 )
|
|
{
|
|
if ( Msg == 274 )
|
|
{
|
|
if ( (wParam & 0xFFF0) == 61456 )
|
|
{
|
|
if ( fullscrn_screen_mode )
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
if ( (wParam & 0xFFF0) == 61472 )
|
|
{
|
|
if ( !single_step )
|
|
winmain_pause(wParam);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( (wParam & 0xFFF0) != 61728 )
|
|
{
|
|
if ( (wParam & 0xFFF0) == 61760 )
|
|
fullscrn_activate(0);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
}
|
|
winmain_end_pause(wParam);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
v13 = Msg == 278;
|
|
LABEL_69:
|
|
if ( v13 )
|
|
{
|
|
LABEL_70:
|
|
no_time_loss = 1;
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
no_time_loss = 1;
|
|
if ( wParam > 0x12D )
|
|
{
|
|
switch ( wParam )
|
|
{
|
|
case 0x191u:
|
|
winmain_end_pause(wParam);
|
|
pb_launch_ball();
|
|
break;
|
|
case 0x192u:
|
|
winmain_pause(wParam);
|
|
break;
|
|
case 0x193u:
|
|
goto LABEL_130;
|
|
case 0x194u:
|
|
winmain_end_pause(wParam);
|
|
pb_toggle_demo(wParam);
|
|
break;
|
|
case 0x195u:
|
|
if ( !single_step )
|
|
winmain_pause(wParam);
|
|
lpString1 = (LPSTR)memoryallocate(0x1F4u);
|
|
if ( lpString1 )
|
|
{
|
|
v14 = (char *)memoryallocate(0x1F4u);
|
|
if ( v14 )
|
|
{
|
|
options_get_string(0, "Shell Exe", lpString1, WindowName, 500);
|
|
_sprintf(
|
|
v14,
|
|
"%s %s%lX %s%lX",
|
|
lpString1,
|
|
"select=",
|
|
hwnd_frame,
|
|
"confirm=",
|
|
(_DWORD)hwnd_frame
|
|
* (_DWORD)hwnd_frame
|
|
* (_DWORD)hwnd_frame
|
|
* (_DWORD)hwnd_frame
|
|
* (_DWORD)hwnd_frame
|
|
* (_DWORD)hwnd_frame
|
|
* (_DWORD)hwnd_frame);
|
|
if ( (signed int)WinExec(v14, 5u) < 32 )
|
|
{
|
|
v15 = get_rc_string(170, 0);
|
|
v16 = get_rc_string(171, 0);
|
|
MessageBoxA(hwnd_frame, v16, v15, 0x2010u);
|
|
}
|
|
memoryfree((int)lpString1);
|
|
memoryfree((int)v14);
|
|
}
|
|
else
|
|
{
|
|
memoryfree((int)lpString1);
|
|
}
|
|
v5 = wParam;
|
|
}
|
|
break;
|
|
case 0x196u:
|
|
goto LABEL_110;
|
|
case 0x198u:
|
|
case 0x199u:
|
|
case 0x19Au:
|
|
case 0x19Bu:
|
|
options_toggle(wParam);
|
|
winmain_new_game(wParam);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( wParam == 301 )
|
|
{
|
|
if ( !single_step )
|
|
winmain_pause(301);
|
|
help_introduction((int)hinst, (int)hWnd);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( wParam > 0x69 )
|
|
{
|
|
if ( wParam == 106 )
|
|
{
|
|
pb_end_game();
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( wParam > 0xC8 )
|
|
{
|
|
if ( wParam <= 0xCA )
|
|
{
|
|
LABEL_130:
|
|
if ( !single_step )
|
|
winmain_pause(wParam);
|
|
options_toggle(wParam);
|
|
}
|
|
else if ( wParam == 204 )
|
|
{
|
|
LABEL_110:
|
|
if ( !single_step )
|
|
winmain_pause(wParam);
|
|
options_keyboard();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch ( wParam )
|
|
{
|
|
case 0x69u:
|
|
PostMessageA(v21, 0x12u, 0, 0);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x65u:
|
|
winmain_new_game(101);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x66u:
|
|
if ( !single_step )
|
|
winmain_pause(102);
|
|
a_dialog(hinst, hWnd, (int)"DIALOG_1");
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x67u:
|
|
if ( !single_step )
|
|
winmain_pause(wParam);
|
|
pb_high_scores();
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
}
|
|
}
|
|
LABEL_144:
|
|
if ( v5 == 1 )
|
|
restart_midi_seq(lParam);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
switch ( Msg )
|
|
{
|
|
case 0x201u:
|
|
if ( dword_1025568 )
|
|
{
|
|
if ( cheat_mode )
|
|
{
|
|
mouse_down = 1;
|
|
mouse_hsave = SetCursor(0);
|
|
lParam = fullscrn_convert_mouse_pos(a4);
|
|
last_mouse_x = (unsigned __int16)lParam;
|
|
last_mouse_y = (unsigned int)lParam >> 16;
|
|
SetCapture(v21);
|
|
}
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
break;
|
|
case 0x202u:
|
|
if ( mouse_down )
|
|
{
|
|
mouse_down = 0;
|
|
SetCursor(mouse_hsave);
|
|
ReleaseCapture();
|
|
}
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x204u:
|
|
case 0x207u:
|
|
if ( dword_1025568 )
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
break;
|
|
case 0x218u:
|
|
if ( wParam == 4 && dword_102822C )
|
|
{
|
|
dword_102822C = 0;
|
|
options_menu_check(0x193u, 0);
|
|
fullscrn_set_screen_mode((int)dword_102822C);
|
|
}
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x311u:
|
|
InvalidateRect(v21, 0, 0);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
case 0x3B9u:
|
|
goto LABEL_144;
|
|
default:
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
pb_mode_countdown(-1);
|
|
return DefWindowProcA(v21, Msg, v5, lParam);
|
|
}
|
|
if ( IsIconic(hWnd) )
|
|
ShowWindow(hWnd, 9);
|
|
SetForegroundWindow(hWnd);
|
|
return 0;
|
|
}
|
|
// 1024EE4: using guessed type int fullscrn_screen_mode;
|
|
// 1024F04: using guessed type int memory_critical_allocation;
|
|
// 1024FD8: using guessed type int single_step;
|
|
// 1024FDC: using guessed type int bQuit;
|
|
// 1024FE0: using guessed type int DispFrameRate;
|
|
// 1024FE4: using guessed type int DispGRhistory;
|
|
// 1024FE8: using guessed type int mouse_down;
|
|
// 1024FEC: using guessed type int has_focus;
|
|
// 1024FF0: using guessed type int activated;
|
|
// 1024FF4: using guessed type int no_time_loss;
|
|
// 1024FF8: using guessed type int cheat_mode;
|
|
// 1025568: using guessed type int dword_1025568;
|
|
// 102556C: using guessed type int dword_102556C;
|
|
|
|
//----- (010082A9) --------------------------------------------------------
|
|
signed int sub_10082A9()
|
|
{
|
|
MSG Msg; // [esp+8h] [ebp-1Ch]
|
|
|
|
if ( has_focus && !single_step )
|
|
{
|
|
while ( PeekMessageA(&Msg, 0, 0, 0, 1u) )
|
|
{
|
|
TranslateMessage(&Msg);
|
|
DispatchMessageA(&Msg);
|
|
if ( Msg.message == 18 )
|
|
goto LABEL_9;
|
|
}
|
|
return 1;
|
|
}
|
|
GetMessageA(&Msg, hwnd_frame, 0, 0);
|
|
TranslateMessage(&Msg);
|
|
DispatchMessageA(&Msg);
|
|
if ( Msg.message != 18 )
|
|
return 1;
|
|
LABEL_9:
|
|
return_value = Msg.wParam;
|
|
return 0;
|
|
}
|
|
// 1024FD8: using guessed type int single_step;
|
|
// 1024FEC: using guessed type int has_focus;
|
|
// 1028200: using guessed type int return_value;
|