KAZIK/src_graphics/durak_render.inc
Artvasil09 23dc40ee5c feat: implement native darts mini-game, AI observer mode, and fortune session assets
- 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
2026-10-24 22:10:25 +03:00

300 lines
8.4 KiB
PHP

; Logical 320x240 controls over the existing 640x480 first-person table.
DurakFlightPoint3D PROC uses ebx startPos:DWORD,endPos:DWORD
mov ebx, dkTimer3D
cmp ebx, TABLE_FLIGHT_MS
jbe @F
mov ebx, TABLE_FLIGHT_MS
@@:
; Smoothstep prevents the card/hand from abruptly starting and stopping.
mov eax, ebx
imul eax, ebx
mov ecx, TABLE_FLIGHT_MS*3
sub ecx, ebx
sub ecx, ebx
imul eax, ecx
xor edx, edx
mov ecx, TABLE_FLIGHT_MS*TABLE_FLIGHT_MS
div ecx
mov ebx, eax
mov eax, endPos
sub eax, startPos
imul eax, ebx
cdq
mov ecx, TABLE_FLIGHT_MS
idiv ecx
add eax, startPos
ret
DurakFlightPoint3D ENDP
RenderNativeDurak3D PROC uses ebx esi edi
local posX:DWORD,posY:DWORD,card:DWORD,hidden:DWORD,timeMs:DWORD
call RenderCardTable3D
invoke DrawBox, 0, 0, 320, 32, 00151D20h
invoke DrawString8x8, 8, 6, OFFSET dkTitle3D, 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 textBet3D, 00D1B16Eh
invoke FormatNumber, dkBet3D, OFFSET hudNumBuffer
invoke DrawString8x8, 236, 20, OFFSET hudNumBuffer, 00F4F3E8h
mov eax, dkVariant3D
invoke DrawString8x8, 8, 36, dkVariantNames3D[eax*4], 00DFD4B9h
cmp dkError3D, 0
je @F
mov eax, OFFSET dkIllegalText3D
cmp dkError3D, 1
jne dk_render_error
mov eax, OFFSET textNoCash3D
dk_render_error:
invoke DrawString8x8, 144, 36, eax, 00F49880h
@@:
cmp dkState3D, DK_IDLE
je dk_render_ready
cmp dkState3D, DK_RESULT
je dk_render_final
invoke DrawString8x8, 8, 54, OFFSET dkAIText3D, 00C4D5C9h
invoke FormatNumber, durakAICnt, OFFSET hudNumBuffer
invoke DrawString8x8, 8, 66, OFFSET hudNumBuffer, 00F4F3E8h
invoke DrawString8x8, 264, 36, OFFSET dkDeckText3D, 00C4D5C9h
invoke FormatNumber, durakDeckLeft, OFFSET hudNumBuffer
invoke DrawString8x8, 280, 46, OFFSET hudNumBuffer, 00F4F3E8h
cmp durakDeckLeft, 0
je dk_render_ai
invoke DrawNativeCard3D, 254, 58, durakTrumpCard, 0, 34
cmp durakDeckLeft, 1
jbe dk_render_ai
invoke DrawNativeCard3D, 276, 54, 0, 1, 34
dk_render_ai:
mov edi, durakAICnt
cmp edi, 8
jbe @F
mov edi, 8
@@:
xor ebx, ebx
dk_render_ai_card:
cmp ebx, edi
jae dk_render_pairs
mov eax, ebx
imul eax, 18
mov ecx, edi
dec ecx
imul ecx, 18
add ecx, 34
mov edx, 320
sub edx, ecx
shr edx, 1
add eax, edx
mov posX, eax
mov hidden,1
cmp obsActive3D,0
je @F
mov hidden,0
@@:
cmp dkState3D, DK_DEAL
jne @F
mov eax, ebx
shl eax, 1
inc eax
imul eax, TABLE_FLIGHT_MS
mov edx, dkTimer3D
sub edx, eax
js dk_render_next_ai
invoke DrawSlidingCard3D, posX, 48, durakAIHand[ebx*4], hidden, edx
jmp dk_render_next_ai
@@:
invoke DrawNativeCard3D, posX, 48, durakAIHand[ebx*4], hidden, 34
dk_render_next_ai:
inc ebx
jmp dk_render_ai_card
dk_render_pairs:
xor ebx, ebx
dk_render_pair:
cmp ebx, durakTableCnt
jae dk_render_hand
mov eax, ebx
imul eax, 40
add eax, 12
mov posX, eax
invoke DrawNativeCard3D, posX, 98, durakAttackCards[ebx*4], 0, 34
cmp durakDefenseCards[ebx*4], 0FFFFFFFFh
jne dk_render_defense
cmp dkActor3D, 0
jne dk_render_next_pair
cmp dkAttacker3D, 0
je dk_render_next_pair
call DurakFirstUnbeaten
cmp eax, ebx
jne dk_render_next_pair
; A small edge marks the card currently needing defense.
invoke DrawBox, posX, 96, 34, 2, 00E5BF66h
jmp dk_render_next_pair
dk_render_defense:
add posX, 6
invoke DrawNativeCard3D, posX, 106, durakDefenseCards[ebx*4], 0, 34
dk_render_next_pair:
inc ebx
jmp dk_render_pair
dk_render_hand:
mov ebx, dkPage3D
xor edi, edi
dk_render_player_card:
cmp ebx, durakPlayerCnt
jae dk_render_paging
cmp edi, DK_PAGE_SIZE
jae dk_render_paging
mov eax, edi
imul eax, 35
add eax, 20
mov posX, eax
mov posY, 168
cmp dkState3D, DK_TURN
jne dk_render_player_anim
cmp dkActor3D, 0
jne dk_render_player_anim
cmp ebx, dkSelection3D
jne dk_render_player_anim
mov posY, 165
invoke DrawBoxBorder, posX, 164, 34, 50, 0023372Bh, 00E7C476h, 1
dk_render_player_anim:
cmp dkState3D, DK_DEAL
jne dk_render_player_fixed
mov eax, ebx
shl eax, 1
imul eax, TABLE_FLIGHT_MS
mov edx, dkTimer3D
sub edx, eax
js dk_render_player_next
invoke DrawSlidingCard3D, posX, posY, durakPlayerHand[ebx*4], 0, edx
jmp dk_render_player_next
dk_render_player_fixed:
invoke DrawNativeCard3D, posX, posY, durakPlayerHand[ebx*4], 0, 34
dk_render_player_next:
inc ebx
inc edi
jmp dk_render_player_card
dk_render_paging:
cmp durakPlayerCnt, DK_PAGE_SIZE
jbe dk_render_flight
invoke DrawBoxBorder, 2, 180, 14, 20, 00283732h, 00D5C79Eh, 1
invoke DrawString8x8, 5, 186, OFFSET dkLeftText3D, 00EEE2C3h
invoke DrawBoxBorder, 304, 180, 14, 20, 00283732h, 00D5C79Eh, 1
invoke DrawString8x8, 307, 186, OFFSET dkRightText3D, 00EEE2C3h
mov eax, dkPage3D
shr eax, 3
inc eax
invoke FormatNumber, eax, OFFSET hudNumBuffer
invoke DrawString8x8, 272, 156, OFFSET hudNumBuffer, 00EBD9B0h
invoke DrawString8x8, 282, 156, OFFSET dkPageText3D, 00EBD9B0h
mov eax, durakPlayerCnt
add eax, 7
shr eax, 3
invoke FormatNumber, eax, OFFSET hudNumBuffer
invoke DrawString8x8, 292, 156, OFFSET hudNumBuffer, 00EBD9B0h
dk_render_flight:
cmp dkState3D, DK_FLIGHT
jne dk_render_status
invoke DurakFlightPoint3D, dkPendingX3D, dkTargetX3D
mov posX, eax
invoke DurakFlightPoint3D, dkPendingY3D, dkTargetY3D
mov posY, eax
invoke DrawNativeCard3D, posX, posY, dkPendingCard3D, 0, 34
mov eax, 1
sub eax, dkPendingActor3D
invoke QueueTableHand3D, posX, posY, dkTimer3D, eax
dk_render_status:
call DrawQueuedTableHand3D
mov esi, OFFSET dkDealText3D
cmp dkState3D, DK_DEAL
je dk_render_status_text
mov esi, OFFSET dkWaitText3D
cmp dkState3D, DK_SWEEP
jne @F
mov esi, OFFSET dkCollectText3D
jmp dk_render_status_text
@@:
cmp dkState3D, DK_RESULT
jne @F
mov eax, dkOutcome3D
mov esi, dkResults3D[eax*4]
jmp dk_render_status_text
@@:
cmp dkActor3D, 0
jne dk_render_status_text
mov esi, OFFSET dkAttackText3D
cmp dkTaking3D, 0
je @F
mov esi, OFFSET dkTakingText3D
jmp dk_render_status_text
@@:
cmp dkAttacker3D, 0
je dk_render_status_text
mov esi, OFFSET dkDefendText3D
dk_render_status_text:
invoke DrawBox, 96, 3, 150, 14, 00151D20h
invoke DrawString8x8, 112, 6, esi, 00F3DFB3h
cmp dkState3D, DK_RESULT
je dk_render_ready
xor edi, edi
cmp dkState3D, DK_TURN
jne dk_render_action_buttons
cmp dkActor3D, 0
jne dk_render_action_buttons
inc edi
dk_render_action_buttons:
mov ebx, DK_ATTACK
cmp dkAttacker3D, 0
je @F
mov ebx, DK_DEFEND
@@:
invoke DurakCanPlay3D, 0, dkSelection3D, ebx
invoke DrawTableButton3D, 8, OFFSET dkPlayText3D, eax
mov ebx, edi
cmp dkAttacker3D, 0
jne @F
xor ebx, ebx
@@:
invoke DrawTableButton3D, 86, OFFSET dkTakeText3D, ebx
invoke DurakCanPlay3D, 0, dkSelection3D, DK_TRANSFER
invoke DrawTableButton3D, 164, OFFSET dkTransferText3D, eax
xor ebx, ebx
cmp edi, 0
je dk_render_done_button
cmp dkAttacker3D, 0
jne dk_render_done_button
cmp durakTableCnt, 0
je dk_render_done_button
cmp dkTaking3D, 0
jne dk_render_done_enabled
call DurakAllDefended
test eax, eax
jz dk_render_done_button
dk_render_done_enabled:
inc ebx
dk_render_done_button:
invoke DrawTableButton3D, 242, OFFSET dkDoneText3D, ebx
call RenderCardExit3D
ret
dk_render_ready:
invoke DrawStakeControls3D, 1
invoke DrawBoxBorder, 8, 222, 110, 16, 00283732h, 00D5C79Eh, 1
mov eax, dkVariant3D
invoke DrawString8x8, 13, 226, dkVariantNames3D[eax*4], 00EEE2C3h
invoke DrawTableButton3D, 125, OFFSET dkNextText3D, 1
call RenderCardExit3D
ret
dk_render_final:
mov eax, dkOutcome3D
mov esi, dkResults3D[eax*4]
xor ecx, ecx
dk_render_result_length:
cmp BYTE PTR [esi+ecx], 0
je @F
inc ecx
jmp dk_render_result_length
@@:
shl ecx, 2
mov eax, 160
sub eax, ecx
invoke DrawString8x8, eax, 144, esi, 00F3DFB3h
jmp dk_render_ready
RenderNativeDurak3D ENDP