KAZIK/src_graphics/card_tables_render.inc
Artvasil09 881a0061dc Add native NPC visitors with contracts, Clover slots, Pyramid, and party table scenes
Implement 32x32 BFS visitor navigation and daily contracts system with companion .npc journals; add native assembly scenes for Clover slots, Pyramid cards, Blackjack Party and Russian Party; package animation and sprite packs; add comprehensive offline test suites and rebuild shipping binaries.
2026-10-13 09:47:33 +03:00

537 lines
14 KiB
PHP

; 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
cmp cbBotCount3D, 0
je @F
call RenderBJParty3D
ret
@@:
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
call DrawBJPartySelector3D
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
mov ecx,OFFSET cardExitWarning3D
cmp engineMode,MODE_RUSSIAN
jne @F
mov ecx,OFFSET rrPartyExitText3D
@@:
invoke DrawString8x8, 60, 104, ecx, 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