KAZIK/src_graphics/arrival_scene.inc
Artvasil09 3ad5bf4c9d Develop assembly-only casino scenes and native games
Add native Durak, poker, blackjack, roulette, Buckshot and billiards scenes with animation assets and regression tests. Improve arrival, city, hall, profiles, shops, audio and exit handling; remove the portable C game core and refresh shipping executables.
2026-10-08 22:39:19 +03:00

312 lines
7.2 KiB
PHP

BeginArrival3D PROC
call LoadArrivalAssets3D
call LoadCityArrival3D
call CollectGraphicProfiles3D
mov engineMode, MODE_ARRIVAL
mov arrivalState3D, ARRIVAL_WALK
mov cityPhase3D, CITY_BLACK
mov cityTime3D, 0
mov cityClock3D, 0
mov arrivalTime3D, 0
mov arrivalConfirmed3D, 0
mov nativeProfileActive3D, 0
mov arrivalSelected3D, 0
cmp entryAccountCount3D, 0
je @F
mov arrivalSelected3D, 1
@@:
mov arrivalError3D, 0
call ClearKeys3D
ret
BeginArrival3D ENDP
ArrivalChar3D PROC character:DWORD
cmp engineMode, MODE_ARRIVAL
jne arrival_char_done
cmp arrivalState3D, ARRIVAL_NAME
jne arrival_char_done
mov eax, character
cmp eax, 127
ja arrival_char_done
cmp eax, 8
je arrival_char_backspace
cmp arrivalNameLength3D, 16
jae arrival_char_done
cmp al, '0'
jb arrival_char_alpha
cmp al, '9'
jbe arrival_char_store
arrival_char_alpha:
mov dl, al
or dl, 20h
cmp dl, 'a'
jb arrival_char_symbol
cmp dl, 'z'
jbe arrival_char_store
arrival_char_symbol:
cmp al, '_'
je arrival_char_store
cmp al, '-'
jne arrival_char_done
arrival_char_store:
mov ecx, arrivalNameLength3D
mov arrivalName3D[ecx], al
inc ecx
mov arrivalNameLength3D, ecx
mov arrivalName3D[ecx], 0
mov arrivalError3D, 0
ret
arrival_char_backspace:
mov ecx, arrivalNameLength3D
test ecx, ecx
jz arrival_char_done
dec ecx
mov arrivalNameLength3D, ecx
mov arrivalName3D[ecx], 0
arrival_char_done:
ret
ArrivalChar3D ENDP
ArrivalEscape3D PROC
cmp arrivalState3D, ARRIVAL_NAME
jne @F
mov arrivalState3D, ARRIVAL_PROFILE
mov arrivalError3D, 0
call ClearKeys3D
ret
@@:
cmp arrivalState3D, ARRIVAL_PROFILE
je arrival_pause
cmp arrivalState3D, ARRIVAL_STOP
jae arrival_escape_done
mov arrivalState3D, ARRIVAL_STOP
mov arrivalTime3D, 0
call ClearKeys3D
ret
arrival_pause:
xor paused3D, 1
arrival_escape_done:
ret
ArrivalEscape3D ENDP
HandleArrival3D PROC uses ebx esi
mov eax, deltaTime3D
add arrivalTime3D, eax
add cityClock3D, eax
cmp arrivalState3D, ARRIVAL_NAME
je arrival_name_input
cmp arrivalState3D, ARRIVAL_PROFILE
je arrival_profile_input
cmp arrivalState3D, ARRIVAL_WALK
jne arrival_animation
call HandleCityApproach3D
ret
arrival_animation:
cmp arrivalState3D, ARRIVAL_STOP
jne arrival_admission
cmp arrivalTime3D, 720
jb arrival_handle_done
mov arrivalState3D, ARRIVAL_PROFILE
mov arrivalTime3D, 0
call ClearKeys3D
ret
arrival_admission:
cmp arrivalState3D, ARRIVAL_ADMIT
jne arrival_entry
cmp arrivalTime3D, 1200
jb arrival_handle_done
mov arrivalState3D, ARRIVAL_ENTER
mov arrivalTime3D, 0
ret
arrival_entry:
cmp arrivalTime3D, 1400
jb arrival_handle_done
mov engineMode, MODE_WALK
mov playerX, (16*FP_1+FP_HALF)
mov playerY, (27*FP_1+FP_HALF)
mov playerAngle, 384
mov interactTargetId, 0
mov interactPromptPtr, 0
call ClearKeys3D
ret
arrival_profile_input:
invoke Pressed3D, 26h
test eax, eax
jz @F
cmp arrivalSelected3D, 0
je @F
dec arrivalSelected3D
@@:
invoke Pressed3D, 28h
test eax, eax
jz @F
mov eax, entryAccountCount3D
inc eax
cmp arrivalSelected3D, eax
jae @F
inc arrivalSelected3D
@@:
cmp mouseClick3D, 0
je arrival_profile_enter
cmp mouseX3D, 174
jb arrival_profile_enter
cmp mouseX3D, 310
jae arrival_profile_enter
mov eax, mouseY3D
sub eax, 70
js arrival_profile_mouse_button
cmp eax, 120
jae arrival_profile_mouse_button
xor edx, edx
mov ecx, 24
div ecx
mov ebx, eax
mov eax, arrivalSelected3D
xor edx, edx
mov ecx, 5
div ecx
imul eax, 5
add eax, ebx
mov ecx, entryAccountCount3D
inc ecx
cmp eax, ecx
ja arrival_handle_done
mov arrivalSelected3D, eax
ret
arrival_profile_mouse_button:
cmp mouseY3D, 201
jb arrival_handle_done
cmp mouseY3D, 219
ja arrival_handle_done
jmp arrival_profile_confirm
arrival_profile_enter:
invoke Pressed3D, 0Dh
test eax, eax
jz arrival_handle_done
arrival_profile_confirm:
mov eax, arrivalSelected3D
test eax, eax
jz arrival_confirmed
dec eax
cmp eax, entryAccountCount3D
je arrival_create_name
invoke SelectGraphicProfile3D, eax
test eax, eax
jz arrival_selection_error
arrival_confirmed:
mov arrivalConfirmed3D, 1
mov arrivalState3D, ARRIVAL_ADMIT
mov arrivalTime3D, 0
mov arrivalError3D, 0
call ClearKeys3D
ret
arrival_create_name:
mov arrivalState3D, ARRIVAL_NAME
mov arrivalNameLength3D, 0
mov arrivalName3D, 0
mov arrivalError3D, 0
call ClearKeys3D
ret
arrival_name_input:
invoke Pressed3D, 0Dh
test eax, eax
jz arrival_handle_done
call CreateGraphicProfile3D
test eax, eax
jnz arrival_confirmed
arrival_selection_error:
mov arrivalError3D, 1
arrival_handle_done:
ret
HandleArrival3D ENDP
DrawEntryProfileRows3D PROC uses ebx esi edi
local start:DWORD,rowY:DWORD,ink:DWORD
invoke DrawBoxBorder, 174, 42, 138, 181, 0017191Ch, 00BD985Ah, 1
invoke DrawString8x8, 182, 51, OFFSET entryChoose3D, 00F0D7ABh
mov eax, arrivalSelected3D
xor edx, edx
mov ecx, 5
div ecx
imul eax, 5
mov start, eax
mov ebx, eax
mov rowY, 70
entry_row:
mov eax, entryAccountCount3D
inc eax
cmp ebx, eax
ja entry_rows_done
mov ink, 00C5C7C9h
cmp ebx, arrivalSelected3D
jne @F
invoke DrawBoxBorder, 178, rowY, 130, 22, 003B5148h, 00B6D9B4h, 1
mov ink, 00FFFFFFh
@@:
mov esi, OFFSET entryGuest3D
test ebx, ebx
jz entry_row_draw
mov eax, entryAccountCount3D
inc eax
cmp ebx, eax
jne entry_row_name
mov esi, OFFSET entryNew3D
jmp entry_row_draw
entry_row_name:
mov eax, ebx
dec eax
shl eax, 6
add eax, OFFSET entryAccountNames3D
mov esi, eax
mov edi, OFFSET entryDisplayName3D
mov ecx, 15
entry_display_copy:
lodsb
cmp al, '.'
je entry_display_end
test al, al
jz entry_display_end
stosb
loop entry_display_copy
entry_display_end:
mov BYTE PTR [edi], 0
mov esi, OFFSET entryDisplayName3D
entry_row_draw:
mov eax, rowY
add eax, 3
invoke DrawString8x8, 182, eax, esi, ink
mov eax, entryAccountCount3D
inc eax
cmp ebx, eax
je entry_row_next
mov eax, bankroll
test ebx, ebx
jz entry_display_bank
mov eax, ebx
dec eax
mov eax, entryAccountBanks3D[eax*4]
entry_display_bank:
invoke FormatNumber, eax, OFFSET hudNumBuffer
mov eax, rowY
add eax, 13
invoke DrawString8x8, 182, eax, OFFSET entryMoney3D, 00B1C9ADh
mov eax, rowY
add eax, 13
invoke DrawString8x8, 192, eax, OFFSET hudNumBuffer, 00B1C9ADh
entry_row_next:
add rowY, 24
inc ebx
mov eax, ebx
sub eax, start
cmp eax, 5
jb entry_row
entry_rows_done:
cmp arrivalError3D, 0
je @F
invoke DrawString8x8, 182, 190, OFFSET entryProfileError3D, 00EC8875h
@@:
invoke DrawBoxBorder, 180, 202, 126, 17, 003F5748h, 00D8BC6Ah, 1
invoke DrawString8x8, 223, 207, OFFSET entryConfirm3D, 00FFFFFFh
ret
DrawEntryProfileRows3D ENDP