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.
273 lines
6.5 KiB
PHP
273 lines
6.5 KiB
PHP
include tools\tests\clover_fixtures.inc
|
|
.data
|
|
clpTestStage3D dd 0
|
|
clpTestReady db "build\actions\clover-ready.bmp",0
|
|
clpTestSpin db "build\actions\clover-spin.bmp",0
|
|
clpTestStopped db "build\actions\clover-stopped.bmp",0
|
|
clpTestWin db "build\actions\clover-win.bmp",0
|
|
clpTestNext db "build\actions\clover-next.bmp",0
|
|
clpTestPay db "build\actions\clover-paytable.bmp",0
|
|
.code
|
|
RunCloverTest3D PROC uses ebx esi edi
|
|
local oldBank:DWORD,oldMode:DWORD,oldSeed:DWORD,iterations:DWORD
|
|
local fixture:DWORD,expected:DWORD,rngSnapshot:DWORD,previous:DWORD,ticks:DWORD
|
|
mov eax,bankroll
|
|
mov oldBank,eax
|
|
mov eax,engineMode
|
|
mov oldMode,eax
|
|
mov eax,rngSeed3D
|
|
mov oldSeed,eax
|
|
mov clpTestStage3D,1
|
|
mov engineMode,MODE_WALK
|
|
mov interactTargetId,INTERACT_SLOTS_CLOVER
|
|
call Trigger3DInteraction
|
|
cmp engineMode,MODE_CLOVER
|
|
jne clp_test_fail
|
|
call TableBusy3D
|
|
test eax,eax
|
|
jnz clp_test_fail
|
|
call RenderNativeClover3D
|
|
invoke WriteActionSnapshot3D,OFFSET clpTestReady
|
|
test eax,eax
|
|
jz clp_test_fail
|
|
mov clpTestStage3D,2
|
|
lea ebx,clpFixtures3D
|
|
mov iterations,clpFixtureCount3D
|
|
clp_test_fixture:
|
|
mov fixture,ebx
|
|
mov esi,ebx
|
|
lea edi,clpGrid3D
|
|
mov ecx,15
|
|
rep movsd
|
|
call CloverEvaluate3D
|
|
mov ebx,fixture
|
|
mov eax,[ebx+60]
|
|
cmp clpTotal3D,eax
|
|
jne clp_test_fail
|
|
mov eax,[ebx+64]
|
|
cmp clpCount3D,eax
|
|
jne clp_test_fail
|
|
mov eax,[ebx+68]
|
|
cmp clpWinMask3D,eax
|
|
jne clp_test_fail
|
|
mov eax,[ebx+72]
|
|
cmp clpJackpot3D,eax
|
|
jne clp_test_fail
|
|
xor esi,esi
|
|
xor edi,edi
|
|
clp_test_combo_sum:
|
|
cmp esi,clpCount3D
|
|
jae @F
|
|
add edi,clpMults3D[esi*4]
|
|
mov eax,clpMasks3D[esi*4]
|
|
test eax,eax
|
|
jz clp_test_fail
|
|
and eax,clpWinMask3D
|
|
cmp eax,clpMasks3D[esi*4]
|
|
jne clp_test_fail
|
|
inc esi
|
|
jmp clp_test_combo_sum
|
|
@@:
|
|
cmp edi,clpTotal3D
|
|
jne clp_test_fail
|
|
add ebx,76
|
|
dec iterations
|
|
jnz clp_test_fixture
|
|
mov clpGrid3D,7
|
|
call CloverEvaluate3D
|
|
cmp clpTotal3D,0
|
|
jne clp_test_fail
|
|
cmp clpCount3D,0
|
|
jne clp_test_fail
|
|
mov clpGrid3D,0
|
|
mov clpTestStage3D,3
|
|
mov clpBet3D,50
|
|
mov bankroll,49
|
|
mov clpState3D,SLOT_READY
|
|
mov eax,rngSeed3D
|
|
mov rngSnapshot,eax
|
|
call StartNativeClover3D
|
|
cmp bankroll,49
|
|
jne clp_test_fail
|
|
mov eax,rngSnapshot
|
|
cmp rngSeed3D,eax
|
|
jne clp_test_fail
|
|
mov iterations,500
|
|
clp_test_round:
|
|
call ClearKeys3D
|
|
mov engineMode,MODE_CLOVER
|
|
mov clpState3D,SLOT_READY
|
|
mov clpBet3D,100
|
|
mov bankroll,100000
|
|
call StartNativeClover3D
|
|
cmp bankroll,99900
|
|
jne clp_test_fail
|
|
cmp clpState3D,SLOT_SPIN
|
|
jne clp_test_fail
|
|
mov eax,rngSeed3D
|
|
mov rngSnapshot,eax
|
|
call CloverEvaluate3D
|
|
mov eax,clpTotal3D
|
|
imul eax,100
|
|
add eax,99900
|
|
mov expected,eax
|
|
mov clpCount3D,0
|
|
mov clpTotal3D,0
|
|
call StartNativeClover3D
|
|
cmp bankroll,99900
|
|
jne clp_test_fail
|
|
mov eax,iterations
|
|
and eax,3
|
|
mov eax,slotsTestRates[eax*4]
|
|
mov deltaTime3D,eax
|
|
mov ticks,0
|
|
; Queue exit for half the rounds, without cancelling or repaying.
|
|
test iterations,1
|
|
jz @F
|
|
call CardTableEscape3D
|
|
@@:
|
|
clp_test_round_tick:
|
|
mov pressedKeys3D[57h],1
|
|
mov pressedKeys3D[20h],1
|
|
call HandleNativeClover3D
|
|
call ClearKeys3D
|
|
cmp clpBet3D,100
|
|
jne clp_test_fail
|
|
mov eax,rngSnapshot
|
|
cmp rngSeed3D,eax
|
|
jne clp_test_fail
|
|
inc ticks
|
|
cmp ticks,220
|
|
ja clp_test_fail
|
|
cmp clpState3D,SLOT_SPIN
|
|
je clp_test_round_tick
|
|
mov eax,expected
|
|
cmp bankroll,eax
|
|
jne clp_test_fail
|
|
call SettleNativeClover3D
|
|
mov eax,expected
|
|
cmp bankroll,eax
|
|
jne clp_test_fail
|
|
test iterations,1
|
|
jz @F
|
|
cmp engineMode,MODE_WALK
|
|
jne clp_test_fail
|
|
@@:
|
|
xor esi,esi
|
|
clp_test_final_column:
|
|
mov ebx,esi
|
|
shl ebx,8
|
|
mov ecx,clpSteps3D[esi*4]
|
|
lea ebx,clpTape3D[ebx+ecx*4]
|
|
xor edi,edi
|
|
clp_test_final_row:
|
|
mov ecx,edi
|
|
imul ecx,5
|
|
add ecx,esi
|
|
mov eax,[ebx+edi*4]
|
|
cmp eax,clpGrid3D[ecx*4]
|
|
jne clp_test_fail
|
|
inc edi
|
|
cmp edi,3
|
|
jb clp_test_final_row
|
|
inc esi
|
|
cmp esi,5
|
|
jb clp_test_final_column
|
|
dec iterations
|
|
jnz clp_test_round
|
|
mov clpTestStage3D,4
|
|
mov clpState3D,SLOT_SPIN
|
|
xor esi,esi
|
|
clp_test_monotonic_column:
|
|
mov clpTimer3D,0
|
|
mov previous,0
|
|
clp_test_monotonic_tick:
|
|
invoke CloverReelPosition3D,esi
|
|
cmp eax,previous
|
|
jb clp_test_fail
|
|
mov previous,eax
|
|
inc clpTimer3D
|
|
cmp clpTimer3D,3400
|
|
jbe clp_test_monotonic_tick
|
|
mov eax,clpSteps3D[esi*4]
|
|
imul eax,CLP_CELL
|
|
cmp eax,previous
|
|
jne clp_test_fail
|
|
inc esi
|
|
cmp esi,5
|
|
jb clp_test_monotonic_column
|
|
mov clpTestStage3D,5
|
|
mov clpState3D,SLOT_READY
|
|
mov bankroll,100000
|
|
call StartNativeClover3D
|
|
mov clpTimer3D,900
|
|
mov eax,rngSeed3D
|
|
mov rngSnapshot,eax
|
|
call RenderNativeClover3D
|
|
mov eax,rngSnapshot
|
|
cmp rngSeed3D,eax
|
|
jne clp_test_fail
|
|
cmp bankroll,99900
|
|
jne clp_test_fail
|
|
invoke WriteActionSnapshot3D,OFFSET clpTestSpin
|
|
mov clpTimer3D,2200
|
|
call RenderNativeClover3D
|
|
invoke WriteActionSnapshot3D,OFFSET clpTestStopped
|
|
; Force an all-seven jackpot and inspect distinct paid masks.
|
|
lea edi,clpGrid3D
|
|
mov eax,6
|
|
mov ecx,15
|
|
rep stosd
|
|
mov clpLeave3D,0
|
|
mov engineMode,MODE_CLOVER
|
|
call SettleNativeClover3D
|
|
cmp clpJackpot3D,1
|
|
jne clp_test_fail
|
|
cmp clpCount3D,2
|
|
jb clp_test_fail
|
|
call RenderNativeClover3D
|
|
invoke WriteActionSnapshot3D,OFFSET clpTestWin
|
|
mov pressedKeys3D[27h],1
|
|
call HandleNativeClover3D
|
|
cmp clpSelected3D,1
|
|
jne clp_test_fail
|
|
call RenderNativeClover3D
|
|
invoke WriteActionSnapshot3D,OFFSET clpTestNext
|
|
mov clpPaytable3D,1
|
|
call RenderNativeClover3D
|
|
invoke WriteActionSnapshot3D,OFFSET clpTestPay
|
|
call CardTableEscape3D
|
|
cmp engineMode,MODE_CLOVER
|
|
jne clp_test_fail
|
|
cmp clpPaytable3D,0
|
|
jne clp_test_fail
|
|
call CardTableEscape3D
|
|
cmp engineMode,MODE_WALK
|
|
jne clp_test_fail
|
|
mov clpTestStage3D,6
|
|
mov clpState3D,SLOT_SPIN
|
|
mov clpStake3D,10000
|
|
mov bankroll,999999999
|
|
call SettleNativeClover3D
|
|
cmp bankroll,1000000000
|
|
jne clp_test_fail
|
|
cmp clpGross3D,1
|
|
jne clp_test_fail
|
|
call SettleNativeClover3D
|
|
cmp bankroll,1000000000
|
|
jne clp_test_fail
|
|
mov eax,oldBank
|
|
mov bankroll,eax
|
|
mov eax,oldMode
|
|
mov engineMode,eax
|
|
mov eax,oldSeed
|
|
mov rngSeed3D,eax
|
|
call ClearKeys3D
|
|
call FreeNativeClover3D
|
|
xor eax,eax
|
|
ret
|
|
clp_test_fail:
|
|
mov eax,clpTestStage3D
|
|
add eax,860
|
|
ret
|
|
RunCloverTest3D ENDP
|