- Darts: native 500-point match against Max with sway/fatigue mouse aim, parabolic throw camera, raster arm animations, and 16 camera-relative flying dart views - AI Observer: autonomous spectator mode for Hold'em, Blackjack, Durak, and Billiards with profile isolation and playback controls - Fortune Session: raster sprite packs, mist/orb animations, tarot divination spreads, and pack tools - Hall Integration: wall dartboard in lounge, observer terminal dispatch, and bot turn hooks - Packaging & Verification: updated installer streaming hash, synchronized launcher, passing check suites and release smoke checks
555 lines
14 KiB
PHP
555 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
|
|
cmp obsActive3D,0
|
|
je @F
|
|
ret
|
|
@@:
|
|
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
|
|
cmp obsActive3D,0
|
|
jne poker_observer_chips
|
|
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
|
|
poker_observer_chips:
|
|
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 obsActive3D,0
|
|
jne poker_render_hole_state
|
|
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
|
|
cmp obsActive3D,0
|
|
je poker_personal_result
|
|
invoke DrawString8x8,108,103,obsResultNames3D[eax*4],00F4DF9Eh
|
|
jmp poker_result_class
|
|
poker_personal_result:
|
|
invoke DrawString8x8, 108, 103, pkResults3D[eax*4], 00F4DF9Eh
|
|
poker_result_class:
|
|
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
|
|
cmp obsActive3D,0
|
|
jne bj_observer_cards
|
|
invoke DrawString8x8, 8, 36, OFFSET textBet3D, 00DDCFB1h
|
|
invoke FormatNumber, cbBet3D, OFFSET hudNumBuffer
|
|
invoke DrawString8x8, 80, 36, OFFSET hudNumBuffer, 00F6F4DDh
|
|
bj_observer_cards:
|
|
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
|