// // Created by neo on 2019-08-15. // #include "../pinball.h" //----- (010038F8) -------------------------------------------------------- int sub_10038F8() { int result; // eax HWND v1; // eax struct tagRECT Rect; // [esp+4h] [ebp-10h] if ( fullscrn_screen_mode ) { v1 = GetDesktopWindow(); GetWindowRect(v1, &Rect); xDest = (Rect.right - dword_1025094 - Rect.left) / 2; result = (Rect.bottom - dword_1025098 - Rect.top) / 2; } else { xDest = 0; result = GetSystemMetrics(15); } yDest = result; if ( dword_1024EE8 ) { result = GetSystemMetrics(15); yDest -= result; } return result; } // 1024EE4: using guessed type int fullscrn_screen_mode; // 1024EE8: using guessed type int dword_1024EE8; // 1025094: using guessed type int dword_1025094; // 1025098: using guessed type int dword_1025098; //----- (01003975) -------------------------------------------------------- LONG sub_1003975() { LONG v0; // eax v0 = GetWindowLongA(hWnd, -16); return SetWindowLongA(hWnd, -16, v0 | 0xC00000); } //----- (0100399D) -------------------------------------------------------- LONG sub_100399D() { LONG v0; // eax v0 = GetWindowLongA(hWnd, -16); return SetWindowLongA(hWnd, -16, v0 & 0xFF3FFFFF); } //----- (010039C5) -------------------------------------------------------- BOOL fullscrn_set_menu_mode(int a1) { BOOL result; // eax dword_1024EE8 = a1; sub_10038F8(); if ( dword_1024EE8 ) { dword_1024EEC |= 2u; InvalidateRect(hWnd, 0, 1); result = SetMenu(hWnd, (HMENU)dword_1024EC0); } else { dword_1024EEC |= 1u; InvalidateRect(hWnd, 0, 1); result = SetMenu(hWnd, 0); } return result; } // 1024EC0: using guessed type int dword_1024EC0; // 1024EE8: using guessed type int dword_1024EE8; // 1024EEC: using guessed type int dword_1024EEC; //----- (01003A23) -------------------------------------------------------- signed int sub_1003A23() { HWND v0; // eax LONG v1; // eax HWND v3; // eax struct tagRECT Rect; // [esp+Ch] [ebp-B0h] DEVMODEA DevMode; // [esp+1Ch] [ebp-A0h] if ( dword_1024EF8 && !fullscrn_display_changed ) { DevMode.dmSize = 156; DevMode.dmFields = 1835008; DevMode.dmPelsWidth = 640; DevMode.dmPelsHeight = 480; DevMode.dmBitsPerPel = 8; sub_100399D(); if ( trick ) { v0 = GetDesktopWindow(); GetWindowRect(v0, &Rect); SetWindowPos(hWnd, HWND_MESSAGE|0x2, 0, 0, Rect.right - Rect.left + 1, Rect.bottom - Rect.top + 1, 8u); } dword_1024EF0 = 1; v1 = ChangeDisplaySettingsA(&DevMode, 4u); if ( v1 == 1 ) { BYTE2(DevMode.dmFields) &= 0xFBu; dword_1024EF0 = 1; v1 = ChangeDisplaySettingsA(&DevMode, 4u); } fullscrn_display_changed = v1 == 0; if ( v1 == 0 ) return 1; } v3 = GetDesktopWindow(); GetWindowRect(v3, &Rect); sub_100399D(); SetWindowPos(hWnd, (HWND)0xFFFFFFFE, 0, 0, Rect.right - Rect.left + 1, Rect.bottom - Rect.top + 1, 8u); return 0; } // 1023054: using guessed type int trick; // 1024EF0: using guessed type int dword_1024EF0; // 1024EF4: using guessed type int fullscrn_display_changed; // 1024EF8: using guessed type int dword_1024EF8; //----- (01003B66) -------------------------------------------------------- int sub_1003B66() { if ( fullscrn_display_changed ) { fullscrn_display_changed = 0; dword_1024EF0 = 1; ChangeDisplaySettingsA(0, 4u); if ( trick ) SetWindowPos(hWnd, (HWND)0xFFFFFFFE, 0, 0, 0, 0, 0x13u); } sub_1003975(); SetWindowPos(hWnd, 0, X.left, X.top, X.right - X.left, X.bottom - X.top, 0x14u); return 0; } // 1023054: using guessed type int trick; // 1024EF0: using guessed type int dword_1024EF0; // 1024EF4: using guessed type int fullscrn_display_changed; //----- (01003BE4) -------------------------------------------------------- LONG fullscrn_set_screen_mode(int a1) { LONG result; // eax result = a1; if ( a1 != fullscrn_screen_mode ) { fullscrn_screen_mode = a1; if ( a1 ) { if ( IsWindowVisible(hWnd) ) GetWindowRect(hWnd, &X); sub_1003A23(); BYTE1(dword_1024EEC) |= 0x80u; InvalidateRect(hWnd, 0, 1); fullscrn_set_menu_mode(0); result = sub_100399D(); } else { sub_1003B66(); BYTE1(dword_1024EEC) |= 0x80u; InvalidateRect(hWnd, 0, 1); fullscrn_set_menu_mode(1); result = RedrawWindow(0, 0, 0, 0x185u); } } return result; } // 1024EE4: using guessed type int fullscrn_screen_mode; // 1024EEC: using guessed type int dword_1024EEC; //----- (01003C87) -------------------------------------------------------- void fullscrn_force_redraw() { BYTE1(dword_1024EEC) |= 0x80u; } // 1024EEC: using guessed type int dword_1024EEC; //----- (01003C94) -------------------------------------------------------- signed int fullscrn_displaychange() { signed int v0; // esi signed int result; // eax HWND v2; // ST18_4 HWND v3; // eax v0 = 0; if ( dword_1024EF0 ) { dword_1024EF0 = 0; result = 0; } else { if ( fullscrn_screen_mode && fullscrn_display_changed ) { fullscrn_display_changed = 0; fullscrn_screen_mode = 0; sub_1003975(); BYTE1(dword_1024EEC) |= 0x80u; InvalidateRect(hWnd, 0, 1); fullscrn_set_menu_mode(1); SetWindowPos(hWnd, 0, X.left, X.top, X.right - X.left, X.bottom - X.top, 0x1Cu); v0 = 1; } else { SetWindowPos(hWnd, 0, X.left, X.top, X.right - X.left, X.bottom - X.top, 0x14u); } v2 = hWnd; v3 = GetDesktopWindow(); center_in(v3, v2); result = v0; } return result; } // 1024EE4: using guessed type int fullscrn_screen_mode; // 1024EEC: using guessed type int dword_1024EEC; // 1024EF0: using guessed type int dword_1024EF0; // 1024EF4: using guessed type int fullscrn_display_changed; //----- (01003D65) -------------------------------------------------------- BOOL fullscrn_init(int a1, int a2, int a3, HWND a4, int a5, int a6) { HWND v6; // eax int v7; // ebx int v8; // edi int v9; // eax int v10; // kr00_4 BOOL result; // eax int v12; // [esp+18h] [ebp+Ch] dword_1024ED4 = 0; dword_1024ED8 = 0; dword_1024EF8 = a6; hWnd = a4; dword_1024EC0 = a5; dword_1024EDC = a1; dword_1024EE0 = a2; v6 = GetDesktopWindow(); GetWindowRect(v6, &Rect); v7 = a1 + 2 * GetSystemMetrics(5); v12 = a2 + 2 * GetSystemMetrics(6); v8 = GetSystemMetrics(15); v9 = GetSystemMetrics(4); v10 = Rect.bottom - Rect.top - v12; X.bottom = v10 / 2 - 2 + v12 + 4; X.right = (Rect.right - Rect.left - v7) / 2 - 2 + v7 + 4; X.left = (Rect.right - Rect.left - v7) / 2 - 2; X.top = v10 / 2 - (v9 + v8) - 2; result = MoveWindow(hWnd, (Rect.right - Rect.left - v7) / 2 - 2, X.top, v7 + 4, X.bottom - X.top, 0); dword_1024EEC = 0; return result; } // 1024EC0: using guessed type int dword_1024EC0; // 1024ED4: using guessed type int dword_1024ED4; // 1024ED8: using guessed type int dword_1024ED8; // 1024EDC: using guessed type int dword_1024EDC; // 1024EE0: using guessed type int dword_1024EE0; // 1024EEC: using guessed type int dword_1024EEC; // 1024EF8: using guessed type int dword_1024EF8; //----- (01003E53) -------------------------------------------------------- LONG fullscrn_shutdown() { LONG result; // eax if ( fullscrn_display_changed ) result = fullscrn_set_screen_mode(0); return result; } // 1024EF4: using guessed type int fullscrn_display_changed; //----- (01003E69) -------------------------------------------------------- BOOL fullscrn_activate(int a1) { BOOL result; // eax if ( fullscrn_screen_mode ) { if ( !a1 ) { fullscrn_set_screen_mode(0); result = SetWindowPos(hWnd, (HWND)1, 0, 0, 0, 0, 0x13u); } } return result; } // 1024EE4: using guessed type int fullscrn_screen_mode; //----- (01003EA2) -------------------------------------------------------- int fullscrn_convert_mouse_pos(int a1) { return (unsigned int)(a1 - xDest) | ((unsigned int)(HIWORD(a1) - yDest) << 16); } //----- (01003ECF) -------------------------------------------------------- DWORD *fullscrn_getminmaxinfo(DWORD *a1) { DWORD *result; // eax result = a1; a1[2] = X.right - X.left; a1[3] = X.bottom - X.top; a1[4] = X.left; a1[5] = X.top; return result; } //----- (01003F98) -------------------------------------------------------- void fullscrn_paint() { int v0; // ST04_4 int v1; // eax if ( fullscrn_screen_mode ) { if ( (dword_1024EEC & 0x8000) == 0 && dword_1024EEC ) { if ( dword_1024EEC & 1 ) { v0 = GetSystemMetrics(15); sub_1003F10(0, 0, Rect.right - 1, v0); } } else { if ( dword_1024EE8 ) v1 = GetSystemMetrics(15); else v1 = 0; sub_1003F10(0, -v1, Rect.right, v1 + Rect.bottom); } } render_paint(); dword_1024EEC = 0; } // 1024EE4: using guessed type int fullscrn_screen_mode; // 1024EE8: using guessed type int dword_1024EE8; // 1024EEC: using guessed type int dword_1024EEC;