.data obsTestGame dd 0 obsTestTicks dd 0 obsTestTurns dd 0 obsTestMenu db "build\observer\menu.bmp",0 obsTestPaths dd OFFSET obsTestPoker,OFFSET obsTestBlackjack,OFFSET obsTestDurak dd OFFSET obsTestTransfer,OFFSET obsTestPyramid,OFFSET obsTestEight obsTestPoker db "build\observer\poker.bmp",0 obsTestBlackjack db "build\observer\blackjack.bmp",0 obsTestDurak db "build\observer\durak.bmp",0 obsTestTransfer db "build\observer\transfer.bmp",0 obsTestPyramid db "build\observer\pyramid.bmp",0 obsTestEight db "build\observer\eight.bmp",0 .code ObserverTestStart PROC call InitPaths3D mov arrivalConfirmed3D,1 mov bankroll,12345 mov charmCloverUses,17 mov charmDevilUses,18 mov obsActive3D,1 invoke TriggerCharmLossProtection,100 test eax,eax jnz obs_test_fail cmp bankroll,12345 jne obs_test_fail mov obsActive3D,0 call BeginObserver3D call RenderObserver3D invoke WriteActionSnapshot3D,OFFSET obsTestMenu obs_test_game: mov eax,obsTestGame mov obsSelection3D,eax call StartObserver3D cmp obsActive3D,1 jne obs_test_fail mov obsTestTicks,0 mov obsTestTurns,0 obs_test_tick: mov deltaTime3D,50 call ObserverTick3D cmp obsTestGame,4 jb obs_test_cards cmp poolState3D,POOL_STRIKE jne @F mov eax,poolPlayer3D bts obsTestTurns,eax @@: cmp obsTestTicks,1500 jb obs_test_next_tick cmp obsTestTurns,3 jne obs_test_fail jmp obs_test_snapshot obs_test_cards: cmp obsRound3D,21 jb obs_test_next_tick mov eax,obsWins3D[0] add eax,obsWins3D[4] add eax,obsWins3D[8] cmp eax,20 jne obs_test_fail jmp obs_test_snapshot obs_test_next_tick: inc obsTestTicks cmp obsTestTicks,150000 jb obs_test_tick jmp obs_test_fail obs_test_snapshot: ; Advance into a real deal/turn before capturing the watching surface. mov ecx,40 obs_test_render_advance: push ecx mov deltaTime3D,50 call ObserverTick3D pop ecx loop obs_test_render_advance call RenderObserver3D mov eax,obsTestGame invoke WriteActionSnapshot3D,obsTestPaths[eax*4] mov obsPaused3D,1 mov eax,obsRound3D push eax mov eax,obsTimer3D push eax mov deltaTime3D,50 call ObserverFrame3D pop eax cmp eax,obsTimer3D jne obs_test_fail pop eax cmp eax,obsRound3D jne obs_test_fail mov pressedKeys3D[9],1 call ObserverFrame3D cmp obsSpeed3D,2 jne obs_test_fail mov pressedKeys3D[9],1 call ObserverFrame3D cmp obsSpeed3D,4 jne obs_test_fail mov pressedKeys3D[9],1 call ObserverFrame3D cmp obsSpeed3D,1 jne obs_test_fail call StopObserver3D cmp bankroll,12345 jne obs_test_fail cmp charmCloverUses,17 jne obs_test_fail cmp charmDevilUses,18 jne obs_test_fail cmp obsActive3D,0 jne obs_test_fail inc obsTestGame cmp obsTestGame,OBS_GAME_COUNT jb obs_test_game ; The actual selector opens a table, and Escape unwinds watch -> menu -> hall. mov pressedKeys3D[31h],1 call ObserverFrame3D cmp obsActive3D,1 jne obs_test_fail mov pressedKeys3D[1Bh],1 call ObserverFrame3D cmp engineMode,MODE_OBSERVER jne obs_test_fail cmp bankroll,12345 jne obs_test_fail mov mouseX3D,100 mov mouseY3D,174 mov mouseClick3D,1 call ObserverFrame3D cmp obsActive3D,1 jne obs_test_fail cmp poolVariant3D,1 jne obs_test_fail mov mouseX3D,20 mov mouseY3D,230 mov mouseClick3D,1 call ObserverFrame3D cmp obsPaused3D,1 jne obs_test_fail mov mouseX3D,250 mov mouseClick3D,1 call ObserverFrame3D cmp obsActive3D,0 jne obs_test_fail mov pressedKeys3D[1Bh],1 call ObserverFrame3D cmp engineMode,MODE_WALK jne obs_test_fail mov obsActive3D,1 call RunDurakTest3D test eax,eax jnz obs_test_exit xor eax,eax jmp obs_test_exit obs_test_fail: mov eax,8401 obs_test_exit: invoke ExitProcess,eax ObserverTestStart ENDP