KAZIK/tools/tests/clover_test.inc
Artvasil09 881a0061dc Add native NPC visitors with contracts, Clover slots, Pyramid, and party table scenes
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.
2026-10-13 09:47:33 +03:00

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