From e6bf8d8edb58148e31f95ab6e2ee36eaeb7242a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=A4=D0=B5=D0=B4=D0=BE?= =?UTF-8?q?=D1=81=D0=B5=D0=B5=D0=B2?= Date: Thu, 24 Sep 2026 22:46:27 +0300 Subject: [PATCH] feat(ui): embed classic game terminal into 2.5D arcade bezel without OS borders --- build/graphics/casino3d.inc | 166 +++++++++++++++++++++++++++++++++--- build/graphics/poker.asm | 2 + build/graphics/poker.exe | Bin 201728 -> 202752 bytes casino3d.inc | 166 +++++++++++++++++++++++++++++++++--- poker.asm | 2 + poker.exe | Bin 201728 -> 202752 bytes 6 files changed, 314 insertions(+), 22 deletions(-) diff --git a/build/graphics/casino3d.inc b/build/graphics/casino3d.inc index 2165e88..e3d7728 100644 --- a/build/graphics/casino3d.inc +++ b/build/graphics/casino3d.inc @@ -207,6 +207,7 @@ szTitleShop db "[KAZIK 3D CASINO] - szTitleATM db "[KAZIK 3D CASINO] - БАНКОМАТ",0 szTitleTerminal db "[KAZIK 3D CASINO] - ТЕРМИНАЛ ИГРОКА",0 szTitleObserver db "[KAZIK 3D CASINO] - РЕЖИМ НАБЛЮДАТЕЛЯ (ИИ)",0 +textCabinetFooter db "[ ВЫХОД: ВВЕДИТЕ 0 / ВЫБЕРИТЕ 'N' ДЛЯ ВОЗВРАТА В ЗАЛ ]",0 msgDancerTipped db "Вы бросили $100 танцовщице! УДАЧА АКТИВИРОВАНА!",0 msgNeedMoney db "Недостаточно денег в кошельке!",0 @@ -2684,15 +2685,55 @@ interaction_done: ret CheckInteractions ENDP -; --- LaunchClassicGame: Открытие отдельного окна для классической версии игры --- +; --- RenderCabinetBezel: Отрисовка аркадного безеля терминала на 3D экране --- +RenderCabinetBezel PROC uses ebx esi edi, pTitle:DWORD + ; Затемняем 3D-зал в буфере кадра (делим яркость пополам) + mov ecx, SCREEN_SIZE + xor esi, esi +dim_bezel_loop: + mov eax, [screenBuffer + esi*4] + shr eax, 1 + and eax, 007F7F7Fh + mov [screenBuffer + esi*4], eax + inc esi + loop dim_bezel_loop + + ; Внешняя золотая рамка терминала + invoke DrawBoxBorder, 10, 14, 300, 212, 000C0E14h, 00D8BC6Ah, 2 + + ; Шапка терминала с названием игры + invoke DrawBox, 12, 16, 296, 16, 00221A10h + invoke DrawString8x8, 20, 20, pTitle, 00F5E2B0h + + ; Подвальная плашка с подсказкой по выходу + invoke DrawBox, 12, 210, 296, 14, 00141416h + invoke DrawString8x8, 20, 213, OFFSET textCabinetFooter, 00AAAAAAh + + ; Выводим кадр безеля в окно + call Present3D + ret +RenderCabinetBezel ENDP + +; --- LaunchClassicGame: Встраивание игры в UI терминала казино --- LaunchClassicGame PROC uses ebx esi edi, pGameProc:DWORD, gameId:DWORD, pTitle:DWORD - LOCAL rc3D[16]:BYTE + LOCAL rcClient[16]:BYTE + LOCAL ptScreen[8]:BYTE + LOCAL fontInfo[84]:BYTE LOCAL conWnd:DWORD LOCAL conW:DWORD, conH:DWORD, conX:DWORD, conY:DWORD + LOCAL viewW:DWORD, viewH:DWORD + LOCAL offsetX:DWORD, offsetY:DWORD mov eax, gameId mov currentGameId, eax + ; 1. Рисуем золотой безель терминала на 3D экране + cmp pTitle, 0 + je @F + invoke RenderCabinetBezel, pTitle +@@: + + ; 2. Выделяем консоль invoke AllocConsole test eax, eax jz launch_ret @@ -2712,25 +2753,125 @@ LaunchClassicGame PROC uses ebx esi edi, pGameProc:DWORD, gameId:DWORD, pTitle:D call EnableAnsi call ConfigureConsoleSize + ; 3. Настраиваем шрифт Consolas Bold 16pt + lea edi, fontInfo + xor eax, eax + mov ecx, 21 + rep stosd + mov dword ptr fontInfo[0], 84 ; cbSize + mov word ptr fontInfo[8], 0 ; dwFontSize.X + mov word ptr fontInfo[10], 16 ; dwFontSize.Y + mov dword ptr fontInfo[16], 700 ; FontWeight = FW_BOLD + mov word ptr fontInfo[20], 'C' + mov word ptr fontInfo[22], 'o' + mov word ptr fontInfo[24], 'n' + mov word ptr fontInfo[26], 's' + mov word ptr fontInfo[28], 'o' + mov word ptr fontInfo[30], 'l' + mov word ptr fontInfo[32], 'a' + mov word ptr fontInfo[34], 's' + mov word ptr fontInfo[36], 0 + lea eax, fontInfo + invoke SetCurrentConsoleFontEx, hOut, 0, eax + + ; 4. Получаем дескриптор окна консоли invoke GetConsoleWindow mov conWnd, eax test eax, eax jz run_game_body + ; 5. Снимаем системную рамку Windows и заголовок с кнопками закрытия/сворачивания + invoke GetWindowLongA, conWnd, -16 ; GWL_STYLE + and eax, NOT (00C00000h or 00040000h or 00080000h or 00010000h or 00020000h) + or eax, 80000000h ; WS_POPUP + invoke SetWindowLongA, conWnd, -16, eax + + ; Связываем как дочернее/принадлежащее окно к окну игры cmp h3DWnd, 0 je show_con_fallback + invoke SetWindowLongA, conWnd, -8, h3DWnd ; GWL_HWNDPARENT - lea eax, rc3D - invoke GetWindowRect, h3DWnd, eax - mov eax, dword ptr rc3D[0] - add eax, 40 + ; 6. Вычисляем точные координаты для посадки экрана внутрь безеля + lea eax, rcClient + invoke GetClientRect, h3DWnd, eax + mov esi, dword ptr rcClient[8] ; ширина клиентской области + mov edi, dword ptr rcClient[12] ; высота клиентской области + test esi, esi + jz show_con_fallback + test edi, edi + jz show_con_fallback + + ; Расчет вьюпорта 4:3 точно как в Present3D + mov viewW, esi + mov eax, esi + imul eax, 3 + shr eax, 2 + cmp eax, edi + jle calc_view_h + mov eax, edi + imul eax, 4 + xor edx, edx + mov ecx, 3 + div ecx + mov viewW, eax + mov eax, edi +calc_view_h: + mov viewH, eax + + mov ebx, esi + sub ebx, viewW + shr ebx, 1 + mov offsetX, ebx + + mov ebx, edi + sub ebx, viewH + shr ebx, 1 + mov offsetY, ebx + + ; Экранные координаты левого верхнего угла клиентской области + mov dword ptr ptScreen[0], 0 + mov dword ptr ptScreen[4], 0 + lea eax, ptScreen + invoke ClientToScreen, h3DWnd, eax + + ; conW = viewW * 280 / 320 (внутреннее окно безеля) + mov eax, viewW + imul eax, 280 + xor edx, edx + mov ecx, 320 + div ecx + mov conW, eax + + ; conH = viewH * 168 / 240 + mov eax, viewH + imul eax, 168 + xor edx, edx + mov ecx, 240 + div ecx + mov conH, eax + + ; conX = ptScreen.x + offsetX + (viewW * 20 / 320) + mov eax, viewW + imul eax, 20 + xor edx, edx + mov ecx, 320 + div ecx + add eax, offsetX + add eax, dword ptr ptScreen[0] mov conX, eax - mov eax, dword ptr rc3D[4] - add eax, 40 + + ; conY = ptScreen.y + offsetY + (viewH * 38 / 240) + mov eax, viewH + imul eax, 38 + xor edx, edx + mov ecx, 240 + div ecx + add eax, offsetY + add eax, dword ptr ptScreen[4] mov conY, eax - mov conW, 960 - mov conH, 680 - invoke SetWindowPos, conWnd, 0, conX, conY, conW, conH, 40h ; SWP_SHOWWINDOW + + ; Позиционируем безрамочный экран точно внутрь золотой рамки безеля + invoke SetWindowPos, conWnd, 0, conX, conY, conW, conH, 20h or 40h ; SWP_FRAMECHANGED | SWP_SHOWWINDOW jmp set_con_focus show_con_fallback: @@ -2740,12 +2881,15 @@ set_con_focus: invoke SetFocus, conWnd run_game_body: + ; Запуск оригинальной игры! call pGameProc + ; Закрываем консоль invoke FreeConsole mov hOut, 0 mov hIn, 0 + ; Возвращаем фокус в окно 3D игры cmp h3DWnd, 0 je cleanup_game_input invoke SetForegroundWindow, h3DWnd diff --git a/build/graphics/poker.asm b/build/graphics/poker.asm index 39bdc15..9592eb3 100644 --- a/build/graphics/poker.asm +++ b/build/graphics/poker.asm @@ -79,6 +79,8 @@ SetConsoleTitleA PROTO :DWORD GetWindowRect PROTO :DWORD, :DWORD SetWindowPos PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD SetFocus PROTO :DWORD +ClientToScreen PROTO :DWORD, :DWORD +SetCurrentConsoleFontEx PROTO :DWORD, :DWORD, :DWORD mciSendStringA PROTO :DWORD, :DWORD, :DWORD, :DWORD waveOutSetVolume PROTO :DWORD, :DWORD AnimFrameDelay PROTO :DWORD diff --git a/build/graphics/poker.exe b/build/graphics/poker.exe index 8e7557b49489401ce683ae52c21efbdb572d4476..43286fdf949b7c620c5a625a3417ed8f332862d9 100644 GIT binary patch delta 14270 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 delta 13601 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 X<1FJ`;{x26Dl{Nw(3LTZVF0V$%UU2M!P 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 delta 13601 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 X<1FJ`;{x26Dl{