.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