KAZIK/tools/tests/wheel_scene_test.inc
Artvasil09 4f8ae0893b Implement native slots, coin toss, European roulette and hall furniture
Add native assembly scenes and assets for Slots (777), Coin flip, and European Roulette; add 3D hall furniture packs and prompts; improve Russian UI strings in CP1251; update launcher hash and rebuild shipping binaries.
2026-10-10 14:43:30 +03:00

241 lines
6 KiB
PHP

.data
wheelTestPaths3D dd OFFSET wheelDraftShot3D,OFFSET wheelLaunchShot3D,OFFSET wheelFastShot3D
dd OFFSET wheelSlowShot3D,OFFSET wheelLandShot3D,OFFSET wheelResultShot3D
wheelDraftShot3D db "build\actions\wheel-draft-v1.bmp",0
wheelLaunchShot3D db "build\actions\wheel-launch-v1.bmp",0
wheelFastShot3D db "build\actions\wheel-fast-v1.bmp",0
wheelSlowShot3D db "build\actions\wheel-slow-v1.bmp",0
wheelLandShot3D db "build\actions\wheel-land-v1.bmp",0
wheelResultShot3D db "build\actions\wheel-result-v1.bmp",0
wheelTestTimes3D dd 0,0,1200,3000,4100,4200
wheelLabelPrefix3D db "build\actions\wheel-label-"
wheelLabelDigits3D db "00.bmp",0
.code
RunWheelSceneTest3D PROC uses ebx esi edi
local oldBank:DWORD,oldSeed:DWORD,result:DWORD,selectedSeed:DWORD,savedBank:DWORD
local previous:DWORD,time:DWORD
mov eax,bankroll
mov oldBank,eax
mov eax,rngSeed3D
mov oldSeed,eax
mov hallTestStage3D,7801
call InitNativeWheel3D
cmp eax,1
jne wheel_test_failed
cmp wheelRotorArt3D.imageWidth,480
jne wheel_test_failed
mov result,0
wheel_test_all_outcomes:
call InitNativeWheel3D
mov wheelChip3D,50
mov bankroll,100000
xor esi,esi
wheel_test_all_bets:
invoke WheelAddBet3D,esi
inc esi
cmp esi,49
jb wheel_test_all_bets
cmp wheelStake3D,2450
jne wheel_test_failed
sub bankroll,2450
mov roulState,1
mov eax,result
mov wheelResult3D,eax
call WheelSettle3D
mov ebx,2400
cmp result,0
jne @F
mov ebx,1800
@@:
cmp wheelReturn3D,ebx
jne wheel_test_failed
add ebx,97550
cmp bankroll,ebx
jne wheel_test_failed
call WheelSettle3D
cmp bankroll,ebx
jne wheel_test_failed
call RenderNativeWheel3D
mov eax,rngSeed3D
cmp eax,oldSeed
jne wheel_test_failed
mov eax,wheelResultSlot3D
mov eax,wheelOrder3D[eax*4]
cmp eax,result
jne wheel_test_failed
mov eax,wheelResultSlot3D
imul eax,512
xor edx,edx
mov ecx,37
div ecx
cmp eax,wheelBallAngle3D
jne wheel_test_failed
; Every settled pocket must be readable, including under the ball/highlight.
mov eax,result
xor edx,edx
mov ecx,10
div ecx
add al,'0'
add dl,'0'
mov wheelLabelDigits3D,al
mov wheelLabelDigits3D[1],dl
invoke WriteActionSnapshot3D,OFFSET wheelLabelPrefix3D
test eax,eax
jz wheel_test_failed
inc result
cmp result,37
jb wheel_test_all_outcomes
mov hallTestStage3D,7802
mov previous,0
mov time,0
wheel_test_easing:
invoke WheelTravel3D,time,4200,4096
cmp eax,previous
jb wheel_test_failed
mov previous,eax
inc time
cmp time,4200
jbe wheel_test_easing
cmp previous,4096
jne wheel_test_failed
mov time,0
wheel_test_label_angles:
mov roulState,0
invoke DrawWheelLabels3D,320,278,205,88,time
cmp wheelNumberScale3D,2
jne wheel_test_failed
xor esi,esi
wheel_test_label_bounds:
cmp wheelNumberX3D[esi*4],130
jb wheel_test_failed
cmp wheelNumberX3D[esi*4],510
ja wheel_test_failed
cmp wheelNumberY3D[esi*4],195
jb wheel_test_failed
cmp wheelNumberY3D[esi*4],360
ja wheel_test_failed
inc esi
cmp esi,37
jb wheel_test_label_bounds
inc time
cmp time,512
jb wheel_test_label_angles
; Standard felt rows are 3/2/1; each displayed number's click adds that number.
mov engineMode,MODE_ROULETTE
call InitNativeWheel3D
call ClearKeys3D
mov bankroll,100000
mov esi,1
wheel_test_number_clicks:
mov eax,esi
dec eax
xor edx,edx
mov ecx,3
div ecx
imul eax,20
add eax,63
mov mouseX3D,eax
neg edx
add edx,2
imul edx,20
add edx,127
mov mouseY3D,edx
mov mouseClick3D,1
call HandleNativeWheel3D
mov eax,wheelBets3D[esi*4]
cmp eax,50
jne wheel_test_failed
inc esi
cmp esi,37
jb wheel_test_number_clicks
mov mouseClick3D,0
mov hallTestStage3D,7803
call InitNativeWheel3D
mov bankroll,100000
invoke WheelAddBet3D,17
mov pressedKeys3D[20h],1
call HandleNativeWheel3D
cmp roulState,1
jne wheel_test_failed
cmp bankroll,99950
jne wheel_test_failed
mov eax,rngSeed3D
mov selectedSeed,eax
mov engineMode,MODE_ROULETTE
call WheelEscape3D
cmp wheelExitQueued3D,1
jne wheel_test_failed
cmp engineMode,MODE_ROULETTE
jne wheel_test_failed
mov deltaTime3D,250
mov esi,17
wheel_test_queued_exit:
call HandleNativeWheel3D
dec esi
jnz wheel_test_queued_exit
cmp engineMode,MODE_WALK
jne wheel_test_failed
cmp roulState,2
jne wheel_test_failed
mov eax,rngSeed3D
cmp eax,selectedSeed
jne wheel_test_failed
mov eax,bankroll
mov savedBank,eax
mov engineMode,MODE_ROULETTE
call HandleNativeWheel3D
cmp roulState,2
jne wheel_test_failed
mov eax,savedBank
cmp bankroll,eax
jne wheel_test_failed
; Result view persists until the next-round button, with no accidental new spin.
mov pressedKeys3D[20h],1
call HandleNativeWheel3D
cmp roulState,0
jne wheel_test_failed
cmp wheelStake3D,0
jne wheel_test_failed
mov hallTestStage3D,7804
mov wheelResult3D,17
mov bankroll,100000
xor esi,esi
wheel_test_snapshots:
mov eax,wheelTestTimes3D[esi*4]
mov wheelTime3D,eax
mov roulState,1
cmp esi,0
jne @F
mov roulState,0
@@:
cmp esi,5
jne @F
mov roulState,2
@@:
mov eax,rngSeed3D
mov selectedSeed,eax
call RenderNativeWheel3D
cmp bankroll,100000
jne wheel_test_failed
mov eax,rngSeed3D
cmp eax,selectedSeed
jne wheel_test_failed
invoke WriteActionSnapshot3D,wheelTestPaths3D[esi*4]
inc esi
cmp esi,6
jb wheel_test_snapshots
mov eax,oldBank
mov bankroll,eax
mov eax,oldSeed
mov rngSeed3D,eax
mov engineMode,MODE_WALK
mov roulState,0
mov wheelExitQueued3D,0
mov deltaTime3D,16
call ClearKeys3D
xor eax,eax
ret
wheel_test_failed:
mov eax,hallTestStage3D
ret
RunWheelSceneTest3D ENDP