refactor(cleanup): remove legacy terminal implementations of ported 3D games

This commit is contained in:
Игорь Федосеев 2026-10-13 22:28:14 +03:00
parent 36016cc828
commit 5997849f75
5 changed files with 5484 additions and 8348 deletions

Binary file not shown.

View file

@ -4513,238 +4513,7 @@ interaction_done:
ret ret
CheckInteractions ENDP CheckInteractions ENDP
; --- RenderCabinetBezel: Îòðèñîâêà àðêàäíîãî áåçåëÿ òåðìèíàëà íà 3D ýêðàíå --- ; (Legacy console arcade bezel bridge removed)
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 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
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOut, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov hIn, eax
invoke SetConsoleCP, 1251
invoke SetConsoleOutputCP, 1251
cmp pTitle, 0
je @F
invoke SetConsoleTitleA, pTitle
@@:
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
; 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
; 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
; Ïîçèöèîíèðóåì áåçðàìî÷íûé ýêðàí òî÷íî âíóòðü çîëîòîé ðàìêè áåçåëÿ
invoke SetWindowPos, conWnd, 0, conX, conY, conW, conH, 20h or 40h ; SWP_FRAMECHANGED | SWP_SHOWWINDOW
jmp set_con_focus
show_con_fallback:
invoke ShowWindow, conWnd, 5 ; SW_SHOW
set_con_focus:
invoke SetForegroundWindow, conWnd
invoke SetFocus, conWnd
run_game_body:
invoke PlayCasinoSound3D, 0, 0, 0
call InitSounds
; Çàïóñê îðèãèíàëüíîé èãðû!
call pGameProc
call CloseLegacySounds3D
; Çàêðûâàåì êîíñîëü
invoke FreeConsole
mov hOut, 0
mov hIn, 0
; Âîçâðàùàåì ôîêóñ â îêíî 3D èãðû
cmp h3DWnd, 0
je cleanup_game_input
invoke SetForegroundWindow, h3DWnd
invoke SetFocus, h3DWnd
cleanup_game_input:
mov ecx, 256
xor eax, eax
lea edi, keys3D
rep stosb
mov ecx, 256
lea edi, pressedKeys3D
rep stosb
invoke GetTickCount
mov previousTick3D, eax
mov frameStart3D, eax
mov deltaTime3D, 0
call SaveProgress3D
launch_ret:
ret
LaunchClassicGame ENDP
Trigger3DInteraction PROC Trigger3DInteraction PROC
call TriggerHallInteraction3D call TriggerHallInteraction3D
@ -5612,3 +5381,4 @@ include src_graphics\platform_code.inc
IFDEF CASINO_ACTION_TEST IFDEF CASINO_ACTION_TEST
include tools\tests\casino_actions_test.inc include tools\tests\casino_actions_test.inc
ENDIF ENDIF

2828
poker.asm

File diff suppressed because it is too large Load diff

BIN
poker.exe

Binary file not shown.

BIN
poker.obj

Binary file not shown.