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.
380 lines
8 KiB
PHP
380 lines
8 KiB
PHP
InitNativeWheel3D PROC uses edi
|
|
lea edi, wheelBets3D
|
|
xor eax, eax
|
|
mov ecx, 49
|
|
rep stosd
|
|
mov roulState, 0
|
|
mov wheelStake3D, 0
|
|
mov wheelReturn3D, 0
|
|
mov wheelTime3D, 0
|
|
ret
|
|
InitNativeWheel3D ENDP
|
|
|
|
WheelAddBet3D PROC index:DWORD
|
|
cmp roulState, 1
|
|
je wheel_add_done
|
|
mov ecx, index
|
|
cmp ecx, 48
|
|
ja wheel_add_done
|
|
mov eax, wheelStake3D
|
|
add eax, wheelChip3D
|
|
jc wheel_add_done
|
|
cmp eax, bankroll
|
|
ja wheel_add_done
|
|
mov wheelStake3D, eax
|
|
mov eax, wheelChip3D
|
|
add wheelBets3D[ecx*4], eax
|
|
wheel_add_done:
|
|
ret
|
|
WheelAddBet3D ENDP
|
|
|
|
; Gross returns include the stake, so zero is a loss for every outside bet.
|
|
WheelBetMultiplier3D PROC uses ebx index:DWORD,result:DWORD
|
|
mov ecx, index
|
|
mov ebx, result
|
|
xor eax, eax
|
|
cmp ecx, 37
|
|
jae wheel_outside
|
|
cmp ecx, ebx
|
|
jne wheel_multiplier_done
|
|
mov eax, 36
|
|
ret
|
|
wheel_outside:
|
|
test ebx, ebx
|
|
jz wheel_multiplier_done
|
|
cmp ecx, 39
|
|
jae wheel_parity
|
|
bt wheelRedMask3D, ebx
|
|
setc al
|
|
cmp ecx, 37
|
|
je @F
|
|
xor eax, 1
|
|
@@:
|
|
shl eax, 1
|
|
ret
|
|
wheel_parity:
|
|
cmp ecx, 41
|
|
jae wheel_halves
|
|
mov eax, ebx
|
|
and eax, 1
|
|
cmp ecx, 40
|
|
je @F
|
|
xor eax, 1
|
|
@@:
|
|
shl eax, 1
|
|
ret
|
|
wheel_halves:
|
|
cmp ecx, 43
|
|
jae wheel_dozen_column
|
|
cmp ebx, 18
|
|
seta al
|
|
cmp ecx, 42
|
|
je @F
|
|
xor eax, 1
|
|
@@:
|
|
shl eax, 1
|
|
ret
|
|
wheel_dozen_column:
|
|
mov eax, ebx
|
|
dec eax
|
|
xor edx, edx
|
|
cmp ecx, 46
|
|
jae wheel_column
|
|
mov ebx, 12
|
|
div ebx
|
|
sub ecx, 43
|
|
cmp eax, ecx
|
|
jne wheel_multiplier_zero
|
|
mov eax, 3
|
|
ret
|
|
wheel_column:
|
|
mov ebx, 3
|
|
div ebx
|
|
sub ecx, 46
|
|
cmp edx, ecx
|
|
jne wheel_multiplier_zero
|
|
mov eax, 3
|
|
ret
|
|
wheel_multiplier_zero:
|
|
xor eax, eax
|
|
wheel_multiplier_done:
|
|
ret
|
|
WheelBetMultiplier3D ENDP
|
|
|
|
WheelSettle3D PROC uses ebx esi
|
|
cmp roulState, 1
|
|
jne wheel_settle_done
|
|
mov wheelReturn3D, 0
|
|
xor esi, esi
|
|
wheel_settle_loop:
|
|
invoke WheelBetMultiplier3D, esi,wheelResult3D
|
|
mul wheelBets3D[esi*4]
|
|
test edx, edx
|
|
jnz wheel_settle_cap
|
|
add wheelReturn3D, eax
|
|
jc wheel_settle_cap
|
|
cmp wheelReturn3D, 1000000000
|
|
jbe wheel_settle_next
|
|
wheel_settle_cap:
|
|
mov wheelReturn3D, 1000000000
|
|
wheel_settle_next:
|
|
inc esi
|
|
cmp esi, 49
|
|
jb wheel_settle_loop
|
|
mov eax, wheelReturn3D
|
|
add bankroll, eax
|
|
jc wheel_bank_cap
|
|
cmp bankroll, 1000000000
|
|
jbe @F
|
|
wheel_bank_cap:
|
|
mov bankroll, 1000000000
|
|
@@:
|
|
mov roulState, 2
|
|
call SaveProgress3D
|
|
wheel_settle_done:
|
|
ret
|
|
WheelSettle3D ENDP
|
|
|
|
HandleNativeWheel3D PROC uses ebx esi edi
|
|
cmp roulState, 1
|
|
jne wheel_draft_input
|
|
mov eax, deltaTime3D
|
|
add wheelTime3D, eax
|
|
cmp wheelTime3D, 4200
|
|
jb wheel_handle_done
|
|
call WheelSettle3D
|
|
ret
|
|
wheel_draft_input:
|
|
cmp roulState, 2
|
|
jne @F
|
|
; Keep last winnings visible, but a new spin begins with an empty layout.
|
|
lea edi, wheelBets3D
|
|
xor eax, eax
|
|
mov ecx, 49
|
|
rep stosd
|
|
mov wheelStake3D, 0
|
|
mov roulState, 0
|
|
@@:
|
|
invoke Pressed3D, 57h
|
|
test eax, eax
|
|
jz @F
|
|
cmp wheelChip3D, 1000000
|
|
jae @F
|
|
add wheelChip3D, 50
|
|
@@:
|
|
invoke Pressed3D, 53h
|
|
test eax, eax
|
|
jz @F
|
|
cmp wheelChip3D, 50
|
|
jbe @F
|
|
sub wheelChip3D, 50
|
|
@@:
|
|
invoke Pressed3D, 08h
|
|
test eax, eax
|
|
jz wheel_mouse
|
|
call InitNativeWheel3D
|
|
wheel_mouse:
|
|
cmp mouseClick3D, 0
|
|
je wheel_spin_input
|
|
cmp mouseY3D, 123
|
|
jb wheel_button
|
|
cmp mouseY3D, 183
|
|
jae wheel_mouse_outside
|
|
cmp mouseX3D, 60
|
|
jae wheel_mouse_number
|
|
cmp mouseX3D, 24
|
|
jb wheel_spin_input
|
|
invoke WheelAddBet3D, 0
|
|
jmp wheel_spin_input
|
|
wheel_mouse_number:
|
|
cmp mouseX3D, 300
|
|
jae wheel_spin_input
|
|
mov eax, mouseX3D
|
|
sub eax, 60
|
|
xor edx, edx
|
|
mov ecx, 20
|
|
div ecx
|
|
imul ebx, eax, 3
|
|
mov eax, mouseY3D
|
|
sub eax, 123
|
|
xor edx, edx
|
|
div ecx
|
|
add eax, ebx
|
|
inc eax
|
|
invoke WheelAddBet3D, eax
|
|
jmp wheel_spin_input
|
|
wheel_mouse_outside:
|
|
cmp mouseY3D, 223
|
|
jae wheel_button
|
|
cmp mouseX3D, 24
|
|
jb wheel_spin_input
|
|
cmp mouseX3D, 300
|
|
jae wheel_spin_input
|
|
mov eax, mouseX3D
|
|
sub eax, 24
|
|
xor edx, edx
|
|
mov ecx, 46
|
|
div ecx
|
|
mov ebx, eax
|
|
mov eax, mouseY3D
|
|
sub eax, 183
|
|
xor edx, edx
|
|
mov ecx, 20
|
|
div ecx
|
|
imul eax, 6
|
|
add eax, ebx
|
|
add eax, 37
|
|
invoke WheelAddBet3D, eax
|
|
jmp wheel_spin_input
|
|
wheel_button:
|
|
cmp mouseY3D, 105
|
|
jb wheel_spin_input
|
|
cmp mouseY3D, 121
|
|
jae wheel_spin_input
|
|
cmp mouseX3D, 230
|
|
jb wheel_spin_input
|
|
mov pressedKeys3D[20h], 1
|
|
wheel_spin_input:
|
|
invoke Pressed3D, 20h
|
|
test eax, eax
|
|
jz wheel_handle_done
|
|
mov eax, wheelStake3D
|
|
test eax, eax
|
|
jz wheel_handle_done
|
|
cmp eax, bankroll
|
|
ja wheel_handle_done
|
|
sub bankroll, eax
|
|
mov roulState, 1
|
|
mov wheelTime3D, 0
|
|
invoke RandomRange3D, 37
|
|
mov wheelResult3D, eax
|
|
call SaveProgress3D
|
|
invoke PlayCasinoSound3D, OFFSET soundRoulette,0,1
|
|
wheel_handle_done:
|
|
ret
|
|
HandleNativeWheel3D ENDP
|
|
|
|
RenderNativeWheel3D PROC uses ebx esi edi
|
|
local x:DWORD,y:DWORD,ink:DWORD,angle:DWORD
|
|
invoke DrawBox,0,0,320,240,00142D22h
|
|
invoke DrawString8x8,16,12,OFFSET wheelTitle3D,00E5D29Eh
|
|
invoke DrawNumber,206,12,bankroll,00F4E7C8h
|
|
invoke DrawCircle,160,66,42,00886E42h
|
|
invoke DrawCircle,160,66,38,00232C29h
|
|
invoke DrawCircle,160,66,24,005E422Bh
|
|
xor esi, esi
|
|
wheel_result_slot:
|
|
mov eax, wheelOrder3D[esi*4]
|
|
cmp eax, wheelResult3D
|
|
je wheel_slot_found
|
|
inc esi
|
|
cmp esi, 37
|
|
jb wheel_result_slot
|
|
wheel_slot_found:
|
|
mov eax, esi
|
|
imul eax, 512
|
|
xor edx, edx
|
|
mov ecx, 37
|
|
div ecx
|
|
cmp roulState, 1
|
|
jne @F
|
|
mov ecx, 4200
|
|
sub ecx, wheelTime3D
|
|
imul ecx, 3
|
|
add eax, ecx
|
|
@@:
|
|
and eax, 511
|
|
mov angle, eax
|
|
mov ebx, tableCos[eax*4]
|
|
imul ebx, 34
|
|
sar ebx, 16
|
|
add ebx, 160
|
|
mov edx, tableSin[eax*4]
|
|
imul edx, 34
|
|
sar edx, 16
|
|
add edx, 66
|
|
invoke DrawCircle,ebx,edx,3,00F4EAD8h
|
|
invoke DrawNumber,153,60,wheelResult3D,00FFFFFFh
|
|
invoke DrawString8x8,18,104,OFFSET wheelAmountText3D,00DEDACAh
|
|
invoke DrawNumber,74,104,wheelChip3D,00FFFFFFh
|
|
invoke DrawString8x8,116,104,OFFSET wheelStakedText3D,00DEDACAh
|
|
invoke DrawNumber,180,104,wheelStake3D,00FFFFFFh
|
|
invoke DrawBoxBorder,230,104,70,16,00423929h,00C6AA66h,1
|
|
invoke DrawString8x8,250,108,OFFSET wheelSpin3D,00FFFFFFh
|
|
invoke DrawBoxBorder,24,123,34,60,00174A33h,009C9A76h,1
|
|
invoke DrawNumber,36,147,0,00FFFFFFh
|
|
cmp wheelBets3D, 0
|
|
je @F
|
|
invoke DrawCircle,49,174,3,00DCC671h
|
|
@@:
|
|
mov esi, 1
|
|
wheel_render_numbers:
|
|
mov eax, esi
|
|
dec eax
|
|
xor edx, edx
|
|
mov ecx, 3
|
|
div ecx
|
|
imul eax, 20
|
|
add eax, 60
|
|
mov x, eax
|
|
imul edx, 20
|
|
add edx, 123
|
|
mov y, edx
|
|
mov ink, 001E2523h
|
|
bt wheelRedMask3D, esi
|
|
jnc @F
|
|
mov ink, 00822C32h
|
|
@@:
|
|
invoke DrawBoxBorder,x,y,20,20,ink,009C9A76h,1
|
|
mov ebx, x
|
|
add ebx, 2
|
|
mov edi, y
|
|
add edi, 4
|
|
invoke DrawNumber,ebx,edi,esi,00FFFFFFh
|
|
cmp wheelBets3D[esi*4], 0
|
|
je @F
|
|
add ebx, 12
|
|
add edi, 11
|
|
invoke DrawCircle,ebx,edi,2,00EAD47Eh
|
|
@@:
|
|
inc esi
|
|
cmp esi, 37
|
|
jb wheel_render_numbers
|
|
xor esi, esi
|
|
wheel_render_outside:
|
|
mov eax, esi
|
|
xor edx, edx
|
|
mov ecx, 6
|
|
div ecx
|
|
imul eax, 20
|
|
add eax, 183
|
|
mov y, eax
|
|
imul edx, 46
|
|
add edx, 24
|
|
mov x, edx
|
|
invoke DrawBoxBorder,x,y,46,20,0022392Ah,009C9A76h,1
|
|
mov ebx, x
|
|
add ebx, 3
|
|
mov edi, y
|
|
add edi, 5
|
|
invoke DrawString8x8,ebx,edi,wheelLabels3D[esi*4],00E4D7B4h
|
|
lea eax, [esi+37]
|
|
cmp wheelBets3D[eax*4], 0
|
|
je @F
|
|
add ebx, 35
|
|
add edi, 10
|
|
invoke DrawCircle,ebx,edi,2,00EAD47Eh
|
|
@@:
|
|
inc esi
|
|
cmp esi, 12
|
|
jb wheel_render_outside
|
|
invoke DrawString8x8,24,228,OFFSET wheelPaidText3D,00D3C08Fh
|
|
invoke DrawNumber,88,228,wheelReturn3D,00FFFFFFh
|
|
ret
|
|
RenderNativeWheel3D ENDP
|
|
|
|
DrawNumber PROC x:DWORD,y:DWORD,value:DWORD,ink:DWORD
|
|
invoke FormatNumber,value,OFFSET hudNumBuffer
|
|
invoke DrawString8x8,x,y,OFFSET hudNumBuffer,ink
|
|
ret
|
|
DrawNumber ENDP
|