; Shared felt, physical cards and restrained table controls. Rendering never settles a hand. DrawTableButton3D PROC uses ebx esi x:DWORD,labelText:DWORD,enabled:DWORD mov ebx, 00565E5Bh mov esi, 00303834h cmp enabled, 0 je @F mov ebx, 00E9D8B0h mov esi, 003B6C59h @@: invoke DrawBoxBorder, x, 222, 70, 16, esi, ebx, 1 mov esi, labelText xor ecx, ecx @@: cmp BYTE PTR [esi+ecx], 0 je @F inc ecx jmp @B @@: shl ecx, 3 mov eax, 70 sub eax, ecx shr eax, 1 add eax, x invoke DrawString8x8, eax, 226, labelText, ebx ret DrawTableButton3D ENDP DrawTableHeader3D PROC hdrLabel:DWORD,hdrPot:DWORD invoke DrawBox, 0, 0, 320, 32, 00151D20h invoke DrawString8x8, 8, 6, hdrLabel, 00E8D7ADh invoke DrawString8x8, 8, 20, OFFSET textBank3D, 00A8DDB9h invoke FormatNumber, bankroll, OFFSET hudNumBuffer invoke DrawString8x8, 56, 20, OFFSET hudNumBuffer, 00F4F3E8h invoke DrawString8x8, 180, 20, OFFSET pkPotText3D, 00D1B16Eh invoke FormatNumber, hdrPot, OFFSET hudNumBuffer invoke DrawString8x8, 220, 20, OFFSET hudNumBuffer, 00F4F3E8h invoke DrawNativeCard3D, 268, 55, 0, 1, 34 invoke DrawNativeCard3D, 266, 53, 0, 1, 34 ret DrawTableHeader3D ENDP DrawStakeControls3D PROC uses ebx enabled:DWORD mov ebx, 006D7470h cmp enabled, 0 je @F mov ebx, 00EEE5CDh @@: invoke DrawBoxBorder, 11, 199, 18, 16, 0025372Ch, ebx, 1 invoke DrawBoxBorder, 35, 199, 18, 16, 0025372Ch, ebx, 1 invoke DrawString8x8, 16, 203, OFFSET tableMinusText3D, ebx invoke DrawString8x8, 40, 203, OFFSET tablePlusText3D, ebx ret DrawStakeControls3D ENDP RenderPokerHole3D PROC uses ebx esi cardIndex:DWORD,hidden:DWORD,animated:DWORD,timeMs:DWORD mov ebx, cardIndex mov eax, tableHoleX3D[ebx*4] mov edx, tableHoleY3D[ebx*4] cmp animated, 0 je @F invoke DrawSlidingCard3D, eax, edx, pkHole3D[ebx*4], hidden, timeMs ret @@: invoke DrawNativeCard3D, eax, edx, pkHole3D[ebx*4], hidden, 34 ret RenderPokerHole3D ENDP RenderNativePoker3D PROC uses ebx esi edi local shown:DWORD,slide:DWORD,hidden:DWORD call RenderCardTable3D invoke DrawTableHeader3D, OFFSET pkTitle3D, pkPot3D xor eax, eax cmp pkState3D, PK_IDLE je poker_render_stake_enabled cmp pkState3D, PK_RESULT je poker_render_stake_enabled cmp pkState3D, PK_PLAYER jne @F cmp pkCanRaise3D, 0 je @F poker_render_stake_enabled: inc eax @@: invoke DrawStakeControls3D, eax mov eax, pkStreet3D invoke DrawString8x8, 180, 6, pkStreetNames3D[eax*4], 00C4B8A0h mov eax, pkRaise3D mov esi, OFFSET tableRaiseText3D cmp pkState3D, PK_IDLE je poker_render_blind cmp pkState3D, PK_RESULT jne @F poker_render_blind: mov eax, pkBlind3D mov esi, OFFSET tableBlindText3D @@: push eax invoke DrawString8x8, 12, 177, esi, 00DDCFB1h pop eax invoke FormatNumber, eax, OFFSET hudNumBuffer invoke DrawString8x8, 12, 187, OFFSET hudNumBuffer, 00F6F4DDh invoke DrawNativeChips3D, 278, 196, pkPot3D, 00B14A49h cmp pkChipTimer3D, 320 jae @F mov eax, pkChipTimer3D imul eax, 228 xor edx, edx mov ecx, 320 div ecx add eax, 50 mov esi, eax mov eax, 200 cmp pkChipActor3D, 0 je poker_render_chip_path mov eax, 65 poker_render_chip_path: mov ebx, eax mov eax, 196 sub eax, ebx imul eax, pkChipTimer3D cdq idiv ecx add eax, ebx invoke DrawNativeChips3D, esi, eax, pkChipAmount3D, 00B14A49h cmp pkChipActor3D, 0 jne @F mov eax, pkChipTimer3D imul eax, TABLE_FLIGHT_MS xor edx, edx mov ecx, 320 div ecx invoke QueueTableHand3D, esi, 196, eax, 1 @@: cmp pkState3D, PK_PLAYER jne @F invoke DrawString8x8, 8, 36, OFFSET pkCostText3D, 00DCCFB2h mov eax, pkCurrent3D sub eax, pkPaid3D invoke FormatNumber, eax, OFFSET hudNumBuffer invoke DrawString8x8, 56, 36, OFFSET hudNumBuffer, 00F4F3E8h @@: cmp pkState3D, PK_IDLE je poker_render_buttons xor ebx, ebx poker_render_hole: mov hidden, 0 cmp ebx, 2 jb poker_render_hole_state mov hidden, 1 cmp pkResult3D, 1 jne poker_render_hole_state mov hidden, 0 poker_render_hole_state: cmp pkState3D, PK_DEAL je poker_render_initial cmp pkState3D, PK_REVEAL jne poker_render_fixed_hole cmp ebx, 2 jb poker_render_fixed_hole mov eax, ebx sub eax, 2 imul eax, 180 mov edx, pkTimer3D sub edx, eax js poker_render_fixed_hole cmp edx, 180 jae poker_render_open_hole ; Flip in place, not another flight from the deck. mov eax, edx sub eax, 90 jns @F neg eax jmp poker_reveal_width @@: mov hidden, 0 poker_reveal_width: imul eax, 34 xor edx, edx mov ecx, 90 div ecx mov esi, eax mov edx, 34 sub edx, eax shr edx, 1 add edx, tableHoleX3D[ebx*4] invoke DrawNativeCard3D, edx, 51, pkHole3D[ebx*4], hidden, esi jmp poker_render_next_hole poker_render_open_hole: mov hidden, 0 poker_render_fixed_hole: invoke RenderPokerHole3D, ebx, hidden, 0, 0 jmp poker_render_next_hole poker_render_initial: mov esi, ebx and esi, 1 shl esi, 1 mov eax, ebx shr eax, 1 cmp eax, pkButton3D jne @F inc esi @@: imul esi, TABLE_FLIGHT_MS mov eax, pkTimer3D sub eax, esi js poker_render_next_hole invoke RenderPokerHole3D, ebx, hidden, 1, eax poker_render_next_hole: inc ebx cmp ebx, 4 jb poker_render_hole xor ebx, ebx poker_render_board: cmp ebx, pkBoardCount3D jae poker_render_status mov esi, ebx imul esi, 48 add esi, 22 cmp pkState3D, PK_BOARD jne poker_render_fixed_board cmp ebx, pkOldBoardCount3D jb poker_render_fixed_board mov eax, ebx sub eax, pkOldBoardCount3D imul eax, TABLE_FLIGHT_MS mov edx, pkTimer3D sub edx, eax js poker_render_status invoke DrawSlidingCard3D, esi, 114, pkBoard3D[ebx*4], 0, edx jmp poker_render_next_board poker_render_fixed_board: invoke DrawNativeCard3D, esi, 114, pkBoard3D[ebx*4], 0, 34 poker_render_next_board: inc ebx jmp poker_render_board poker_render_status: cmp pkState3D, PK_RESULT jne poker_render_ai_status mov eax, pkOutcome3D invoke DrawString8x8, 108, 103, pkResults3D[eax*4], 00F4DF9Eh cmp pkResult3D, 1 jne poker_render_buttons invoke NativePokerClass3D, pkScore3D invoke DrawString8x8, 8, 36, pkRankNames3D[eax*4], 00F7EACAh jmp poker_render_buttons poker_render_ai_status: mov eax, pkAiMessage3D invoke DrawString8x8, 128, 103, pkAiNames3D[eax*4], 00DCE7DBh poker_render_buttons: call DrawQueuedTableHand3D cmp pkError3D, 2 jne @F invoke DrawBox, 164, 0, 84, 16, 00151D20h invoke DrawString8x8, 164, 6, OFFSET pkMinimumText3D, 00F89880h @@: cmp pkError3D, 1 je @F jmp poker_render_action_buttons @@: invoke DrawString8x8, 80, 132, OFFSET textNoCash3D, 00F89880h poker_render_action_buttons: cmp pkState3D, PK_IDLE je poker_render_ready cmp pkState3D, PK_RESULT je poker_render_ready xor esi, esi cmp pkState3D, PK_PLAYER jne @F inc esi @@: mov eax, OFFSET pkCheckText3D mov edx, pkCurrent3D cmp edx, pkPaid3D je @F mov eax, OFFSET pkCallText3D @@: invoke DrawTableButton3D, 8, eax, esi mov ebx, esi and ebx, pkCanRaise3D cmp bankroll, 0 jne @F xor ebx, ebx @@: invoke DrawTableButton3D, 86, OFFSET pkRaiseText3D, ebx invoke DrawTableButton3D, 164, OFFSET pkFoldText3D, esi invoke DrawTableButton3D, 242, OFFSET pkAllInText3D, ebx call RenderCardExit3D ret poker_render_ready: mov eax, OFFSET pkDealText3D cmp pkState3D, PK_IDLE je @F mov eax, OFFSET pkNextText3D @@: invoke DrawTableButton3D, 125, eax, 1 call RenderCardExit3D ret RenderNativePoker3D ENDP RenderNativeBlackjack3D PROC uses ebx esi edi local hand:DWORD,nCards:DWORD,y:DWORD,spacing:DWORD,startX:DWORD,hidden:DWORD,flipCard:DWORD call RenderCardTable3D invoke DrawTableHeader3D, OFFSET cbTitle3D, cbStake3D xor eax, eax cmp cbState3D, CB_IDLE je bj_render_stake_enabled cmp cbState3D, CB_RESULT jne @F bj_render_stake_enabled: inc eax @@: invoke DrawStakeControls3D, eax invoke DrawString8x8, 8, 36, OFFSET textBet3D, 00DDCFB1h invoke FormatNumber, cbBet3D, OFFSET hudNumBuffer invoke DrawString8x8, 80, 36, OFFSET hudNumBuffer, 00F6F4DDh cmp cbState3D, CB_IDLE je bj_render_buttons xor edi, edi bj_render_hand: mov hand, OFFSET cbPlayer3D mov eax, cbPlayerCount3D mov y, 151 test edi, edi jz @F mov hand, OFFSET cbDealer3D mov eax, cbDealerCount3D mov y, 64 @@: mov nCards, eax cmp cbState3D, CB_HIT jne @F test edi, edi jnz @F inc nCards inc eax @@: mov spacing, 40 cmp eax, 7 jbe @F mov spacing, 22 @@: dec eax imul eax, spacing add eax, 34 mov edx, 320 sub edx, eax shr edx, 1 mov startX, edx xor ebx, ebx bj_render_card: mov eax, ebx imul eax, spacing add eax, startX mov esi, eax mov hidden, 0 test edi, edi jz bj_render_animation cmp ebx, 1 jne bj_render_animation cmp cbVisible3D, 0 jne bj_render_animation mov hidden, 1 bj_render_animation: cmp cbState3D, CB_HIT jne @F test edi, edi jnz @F cmp ebx, cbPlayerCount3D jne @F invoke DrawSlidingCard3D, esi, y, cbCard3D, 0, cbTimer3D jmp bj_render_next_card @@: mov ecx, hand mov edx, [ecx+ebx*4] cmp cbState3D, CB_DEAL jne bj_render_fixed mov eax, ebx shl eax, 1 add eax, edi imul eax, TABLE_FLIGHT_MS mov ecx, cbTimer3D sub ecx, eax js bj_render_next_card invoke DrawSlidingCard3D, esi, y, edx, hidden, ecx jmp bj_render_next_card bj_render_fixed: mov flipCard, edx cmp cbState3D, CB_DEALER jne bj_render_dealer_extra cmp edi, 1 jne bj_render_dealer_extra cmp cbDealerCount3D, 2 jne bj_render_dealer_extra cmp ebx, 1 jne bj_render_dealer_extra cmp cbTimer3D, 180 jae bj_render_dealer_extra mov hidden, 1 mov eax, cbTimer3D sub eax, 90 jns @F neg eax jmp bj_render_flip_width @@: mov hidden, 0 bj_render_flip_width: imul eax, 34 xor edx, edx mov ecx, 90 div ecx mov edx, 34 sub edx, eax shr edx, 1 add edx, esi invoke DrawNativeCard3D, edx, y, flipCard, hidden, eax jmp bj_render_next_card bj_render_dealer_extra: mov edx, flipCard cmp cbState3D, CB_DEALER jne @F cmp edi, 1 jne @F cmp nCards, 2 jbe @F mov eax, nCards dec eax cmp ebx, eax jne @F cmp cbTimer3D, TABLE_FLIGHT_MS jae @F invoke DrawSlidingCard3D, esi, y, edx, 0, cbTimer3D jmp bj_render_next_card @@: invoke DrawNativeCard3D, esi, y, edx, hidden, 34 bj_render_next_card: inc ebx cmp ebx, nCards jb bj_render_card inc edi cmp edi, 2 jb bj_render_hand cmp cbState3D, CB_DEAL je bj_render_buttons invoke FormatNumber, cbPlayerScore3D, OFFSET hudNumBuffer invoke DrawString8x8, 149, 207, OFFSET hudNumBuffer, 00EDDFB1h mov eax, cbDealerScore3D cmp cbVisible3D, 0 jne @F invoke NativeBJScore3D, OFFSET cbDealer3D, 1 @@: invoke FormatNumber, eax, OFFSET hudNumBuffer invoke DrawString8x8, 149, 119, OFFSET hudNumBuffer, 00EDDFB1h cmp cbState3D, CB_RESULT jne bj_render_buttons mov eax, cbOutcome3D cmp eax, 3 jne @F invoke DrawString8x8, 124, 135, OFFSET cbNaturalText3D, 00EFD583h jmp bj_render_buttons @@: invoke DrawString8x8, 116, 135, cbResults3D[eax*4], 00EFD583h bj_render_buttons: call DrawQueuedTableHand3D cmp cbError3D, 0 je @F invoke DrawString8x8, 80, 135, OFFSET textNoCash3D, 00F89880h @@: cmp cbState3D, CB_IDLE je bj_render_ready cmp cbState3D, CB_RESULT je bj_render_ready xor esi, esi cmp cbState3D, CB_PLAYER jne @F inc esi @@: invoke DrawTableButton3D, 8, OFFSET cbHitText3D, esi invoke DrawTableButton3D, 86, OFFSET cbStandText3D, esi mov ebx, esi cmp cbPlayerCount3D, 2 jne bj_disable_double mov eax, cbStake3D cmp bankroll, eax jae @F bj_disable_double: xor ebx, ebx @@: invoke DrawTableButton3D, 164, OFFSET cbDoubleText3D, ebx call RenderCardExit3D ret bj_render_ready: invoke DrawTableButton3D, 125, OFFSET pkDealText3D, 1 call RenderCardExit3D ret RenderNativeBlackjack3D ENDP RenderCardExit3D PROC uses ebx esi edi invoke DrawBoxBorder, 252, 3, 60, 14, 00283732h, 00D5C79Eh, 1 invoke DrawString8x8, 258, 6, OFFSET cardExitButton3D, 00EEE2C3h cmp cardExitActive3D, 0 je card_exit_render_done lea edi, screenBuffer mov ecx, SCREEN_SIZE card_exit_dim: mov eax, [edi] and eax, 00FEFEFEh shr eax, 1 stosd loop card_exit_dim invoke DrawBoxBorder, 20, 64, 280, 120, 00151D20h, 00D5C79Eh, 1 invoke DrawString8x8, 104, 78, OFFSET cardExitTitle3D, 00F2E4BCh invoke DrawString8x8, 60, 104, OFFSET cardExitWarning3D, 00D8DFDDh invoke DrawString8x8, 72, 120, OFFSET cardExitStake3D, 00F4B6A4h mov ebx, 00D5C79Eh mov esi, 00556555h cmp cardExitChoice3D, 0 je @F xchg ebx, esi @@: invoke DrawBoxBorder, 32, 150, 124, 24, 002D493Dh, ebx, 1 invoke DrawString8x8, 54, 158, OFFSET cardExitContinue3D, 00F1EAD8h invoke DrawBoxBorder, 164, 150, 124, 24, 00493130h, esi, 1 invoke DrawString8x8, 206, 158, OFFSET cardExitLeave3D, 00F1EAD8h card_exit_render_done: ret RenderCardExit3D ENDP