Implement 32x32 BFS visitor navigation and daily contracts system with companion .npc journals; add native assembly scenes for Clover slots, Pyramid cards, Blackjack Party and Russian Party; package animation and sprite packs; add comprehensive offline test suites and rebuild shipping binaries.
280 lines
7.2 KiB
PHP
280 lines
7.2 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
|
|
wheelSmallLabelsShot3D db "build\actions\wheel-label-small.bmp",0
|
|
wheelRotatedLabelsShot3D db "build\actions\wheel-label-rotated.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
|
|
lea edi,screenBuffer
|
|
mov ecx,SCREEN_SIZE
|
|
xor eax,eax
|
|
rep stosd
|
|
invoke DrawWheelBox3D,-2,-2,4,4,00123456h
|
|
cmp screenBuffer,00123456h
|
|
jne wheel_test_failed
|
|
cmp screenBuffer[(SCREEN_W+1)*4],00123456h
|
|
jne wheel_test_failed
|
|
cmp screenBuffer[2*4],0
|
|
jne wheel_test_failed
|
|
cmp screenBuffer[(SCREEN_W*2)*4],0
|
|
jne wheel_test_failed
|
|
invoke DrawWheelBox3D,SCREEN_W-1,SCREEN_H-1,4,4,00654321h
|
|
cmp screenBuffer[(SCREEN_SIZE-1)*4],00654321h
|
|
jne wheel_test_failed
|
|
invoke DrawWheelBox3D,0,0,0,4,0
|
|
cmp screenBuffer,00123456h
|
|
jne wheel_test_failed
|
|
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
|
|
lea edi,screenBuffer
|
|
mov ecx,SCREEN_SIZE
|
|
xor eax,eax
|
|
rep stosd
|
|
invoke DrawWheelLabels3D,206,170,142,46,0
|
|
cmp wheelNumberScale3D,1
|
|
jne wheel_test_failed
|
|
invoke WriteActionSnapshot3D,OFFSET wheelSmallLabelsShot3D
|
|
test eax,eax
|
|
jz wheel_test_failed
|
|
lea edi,screenBuffer
|
|
mov ecx,SCREEN_SIZE
|
|
xor eax,eax
|
|
rep stosd
|
|
invoke DrawWheelLabels3D,320,278,205,88,113
|
|
invoke WriteActionSnapshot3D,OFFSET wheelRotatedLabelsShot3D
|
|
test eax,eax
|
|
jz wheel_test_failed
|
|
; 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
|