KAZIK/tools/tests/card_exit_test.inc
Artvasil09 3ad5bf4c9d Develop assembly-only casino scenes and native games
Add native Durak, poker, blackjack, roulette, Buckshot and billiards scenes with animation assets and regression tests. Improve arrival, city, hall, profiles, shops, audio and exit handling; remove the portable C game core and refresh shipping executables.
2026-10-08 22:39:19 +03:00

220 lines
5.4 KiB
PHP

.data
cardExitTestSnapshot3D dd 128 dup(0)
cardExitTestPKPath3D db "build\actions\poker-exit.bmp",0
cardExitTestBJPath3D db "build\actions\blackjack-exit.bmp",0
.code
RunCardExitTest3D PROC uses ebx esi edi
local mode:DWORD,state:DWORD,bank:DWORD,savedSeed:DWORD,source:DWORD,wordCount:DWORD
mov mode, MODE_POKER
card_exit_test_mode:
mov state, 1
card_exit_test_state:
cmp state, 5
je card_exit_test_next
mov eax, mode
mov engineMode, eax
mov bankroll, 10000
call ClearKeys3D
cmp mode, MODE_POKER
jne card_exit_test_bj
call InitNativePoker3D
call StartNativePoker3D
mov eax, state
mov pkState3D, eax
mov pkTimer3D, 37
mov source, OFFSET pkState3D
mov wordCount, (pkTitle3D-pkState3D)/4
jmp card_exit_test_snapshot
card_exit_test_bj:
call InitNativeBlackjack3D
call StartNativeBlackjack3D
mov eax, state
mov cbState3D, eax
mov cbTimer3D, 37
mov source, OFFSET cbState3D
mov wordCount, (cbTitle3D-cbState3D)/4
card_exit_test_snapshot:
mov eax, bankroll
mov bank, eax
mov eax, rngSeed3D
mov savedSeed, eax
mov esi, source
lea edi, cardExitTestSnapshot3D
mov ecx, wordCount
rep movsd
mov paused3D, 1 ; recover even from the old generic table pause
call CardTableEscape3D
cmp eax, 1
jne card_exit_test_fail
cmp cardExitActive3D, 1
jne card_exit_test_fail
cmp paused3D, 0
jne card_exit_test_fail
mov deltaTime3D, 1000
mov ebx, 4
card_exit_test_frozen:
cmp mode, MODE_POKER
jne @F
call HandleNativePoker3D
call RenderNativePoker3D
jmp card_exit_test_compare
@@:
call HandleNativeBlackjack3D
call RenderNativeBlackjack3D
card_exit_test_compare:
mov esi, source
lea edi, cardExitTestSnapshot3D
mov ecx, wordCount
repe cmpsd
jne card_exit_test_fail
mov eax, bank
cmp bankroll, eax
jne card_exit_test_fail
mov eax, savedSeed
cmp rngSeed3D, eax
jne card_exit_test_fail
dec ebx
jnz card_exit_test_frozen
cmp state, 2
jne @F
mov eax, OFFSET cardExitTestPKPath3D
cmp mode, MODE_POKER
je card_exit_test_frame
mov eax, OFFSET cardExitTestBJPath3D
card_exit_test_frame:
invoke WriteActionSnapshot3D, eax
test eax, eax
jz card_exit_test_fail
@@:
; Default Enter continues safely, Escape and N also cancel.
mov eax, state
xor edx, edx
mov ecx, 3
div ecx
mov eax, 0Dh
cmp edx, 0
je @F
mov eax, 1Bh
cmp edx, 1
je @F
mov eax, 4Eh
@@:
mov pressedKeys3D[eax], 1
call HandleCardExit3D
cmp cardExitActive3D, 0
jne card_exit_test_fail
mov eax, mode
cmp engineMode, eax
jne card_exit_test_fail
mov esi, source
lea edi, cardExitTestSnapshot3D
mov ecx, wordCount
repe cmpsd
jne card_exit_test_fail
; Opening from the visible header button must not advance the hand one tick.
mov mouseX3D, 280
mov mouseY3D, 10
mov mouseClick3D, 1
cmp mode, MODE_POKER
jne @F
call HandleNativePoker3D
jmp card_exit_test_opened
@@:
call HandleNativeBlackjack3D
card_exit_test_opened:
cmp cardExitActive3D, 1
jne card_exit_test_fail
mov esi, source
lea edi, cardExitTestSnapshot3D
mov ecx, wordCount
repe cmpsd
jne card_exit_test_fail
mov eax, state
test eax, 1
jz card_exit_test_click
mov pressedKeys3D[27h], 1
call HandleCardExit3D
mov pressedKeys3D[0Dh], 1
jmp card_exit_test_confirm
card_exit_test_click:
mov mouseX3D, 220
mov mouseY3D, 160
mov mouseClick3D, 1
card_exit_test_confirm:
call HandleCardExit3D
cmp engineMode, MODE_WALK
jne card_exit_test_fail
cmp cardExitActive3D, 0
jne card_exit_test_fail
mov eax, bank
cmp bankroll, eax
jne card_exit_test_fail
cmp mode, MODE_POKER
jne @F
cmp pkState3D, PK_RESULT
jne card_exit_test_fail
cmp pkOutcome3D, 1
jne card_exit_test_fail
jmp card_exit_test_once
@@:
cmp cbState3D, CB_RESULT
jne card_exit_test_fail
cmp cbOutcome3D, 1
jne card_exit_test_fail
card_exit_test_once:
call HandleCardExit3D
call LeaveCardTable3D
mov eax, bank
cmp bankroll, eax
jne card_exit_test_fail
card_exit_test_next:
inc state
mov eax, 7
cmp mode, MODE_POKER
je @F
mov eax, 5
@@:
cmp state, eax
jb card_exit_test_state
; Idle/result tables leave immediately, including the result's already paid pot.
mov eax, mode
mov engineMode, eax
mov pkState3D, PK_IDLE
mov cbState3D, CB_IDLE
call CardTableEscape3D
cmp engineMode, MODE_WALK
jne card_exit_test_fail
mov eax, mode
mov engineMode, eax
mov pkState3D, PK_RESULT
mov cbState3D, CB_RESULT
mov bankroll, 12345
mov mouseX3D, 280
mov mouseY3D, 10
mov mouseClick3D, 1
invoke CardTableMouse3D, mode
cmp engineMode, MODE_WALK
jne card_exit_test_fail
cmp bankroll, 12345
jne card_exit_test_fail
cmp mode, MODE_POKER
jne card_exit_test_done
mov mode, MODE_BLACKJACK
jmp card_exit_test_mode
card_exit_test_done:
call InitNativeBlackjack3D
cmp cbState3D, CB_IDLE
jne card_exit_test_fail
cmp cbStake3D, 0
jne card_exit_test_fail
call InitNativePoker3D
cmp pkState3D, PK_IDLE
jne card_exit_test_fail
cmp pkPot3D, 0
jne card_exit_test_fail
xor eax, eax
ret
card_exit_test_fail:
mov eax, 280
ret
RunCardExitTest3D ENDP