.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