.data termTestJournal db "build\terminals\isolated-profile",0 termTestDir db "build\terminals",0 termTestSaveName db "test-profile.sav",0 termTestCash db "build\terminals\cash.bmp",0 termTestAch0 db "build\terminals\ach-0.bmp",0 termTestAch1 db "build\terminals\ach-1.bmp",0 termTestAch2 db "build\terminals\ach-2.bmp",0 termTestLocked db "build\terminals\ach-locked.bmp",0 termTestFront db "build\terminals\cabinet-front.bmp",0 termTestSide db "build\terminals\cabinet-side.bmp",0 termTestRear db "build\terminals\cabinet-rear.bmp",0 termTestTrophyFront db "build\terminals\trophy-front.bmp",0 termTestTrophySide db "build\terminals\trophy-side.bmp",0 termTestTrophyRear db "build\terminals\trophy-rear.bmp",0 termTestLamp db "build\terminals\lantern-front.bmp",0 termTestLampSide db "build\terminals\lantern-side.bmp",0 termTestWall db "build\terminals\wall-placement.bmp",0 termTestStage dd 1 .data? termTestOriginalBar dd 65536 dup(?) termTestReferenceFrame dd 307200 dup(?) .code TerminalTestIsolatedCabinet PROC invoke DrawBox,0,0,320,240,00121C20h lea edi,zBuffer mov ecx,640 mov eax,100*FP_1 rep stosd call UpdateCamera3D call PrepareCityDepth3D call RenderTerminalCabinets3D ret TerminalTestIsolatedCabinet ENDP ; Poison the former bar material. A terminal must render identically without it. TerminalTestNoBarTexture PROC uses ebx esi edi local texture:DWORD,unchanged:DWORD mov eax,DWORD PTR hallRoomHD3D[20] test eax,eax jz terminal_bar_test_failed add eax,6*256*256*4 mov texture,eax call TerminalTestIsolatedCabinet lea esi,screenBuffer lea edi,termTestReferenceFrame mov ecx,307200 rep movsd mov esi,texture lea edi,termTestOriginalBar mov ecx,65536 rep movsd mov edi,texture mov eax,00F000FFh mov ecx,65536 rep stosd call TerminalTestIsolatedCabinet mov unchanged,1 lea esi,screenBuffer lea edi,termTestReferenceFrame mov ecx,307200 repe cmpsd je @F mov unchanged,0 @@: lea esi,termTestOriginalBar mov edi,texture mov ecx,65536 rep movsd mov eax,unchanged ret terminal_bar_test_failed: xor eax,eax ret TerminalTestNoBarTexture ENDP .code TerminalTestWorldFrame PROC call UpdateCamera3D call RenderCeilingAndFloor call RenderWalls call PrepareCityDepth3D call RenderHallDressing3D ret TerminalTestWorldFrame ENDP TerminalTestStart PROC call InitPaths3D mov npcJournalBasePtr3D,OFFSET termTestJournal call LoadTextures3D call InitializeCasinoSprites3D call InitHall3D call PositionTerminalStations3D call LoadHallAssets3D call LoadTerminalArt3D cmp terminalWorldArt3D.pixels,0 je terminal_test_fail cmp terminalScreenArt3D.pixels,0 je terminal_test_fail mov termTestStage,2 mov achievements,80h mov bankroll,49999 mov ownedBacks3D,1 mov npcClaimed3D,0 call RefreshTerminalAchievements3D cmp achievements,80h jne terminal_test_fail mov bankroll,50000 call RefreshTerminalAchievements3D cmp achievements,180h jne terminal_test_fail mov bankroll,1 call RefreshTerminalAchievements3D cmp achievements,180h jne terminal_test_fail mov termTestStage,3 mov bankroll,1000000 mov ownedBacks3D,3Fh mov npcClaimed3D,3Fh call RefreshTerminalAchievements3D cmp achievements,7F90h jne terminal_test_fail ; Round-trip through the real profile serializer, isolated from user saves. mov nativeProfileActive3D,1 mov nativeProfilesDirPtr3D,OFFSET termTestDir invoke CopyCString,OFFSET saveFileName,OFFSET termTestSaveName call SaveGraphicProfile3D mov achievements,0 mov bankroll,1 call LoadSave cmp achievements,7F90h jne terminal_test_fail cmp bankroll,1000000 jne terminal_test_fail mov nativeProfileActive3D,0 call RefreshTerminalAchievements3D cmp achievements,7F90h jne terminal_test_fail mov termTestStage,4 invoke TerminalCanWalk3D,TERMINAL_CASH_X,TERMINAL_CENTER_Y test eax,eax jnz terminal_test_fail invoke TerminalCanWalk3D,TERMINAL_TROPHY_X,TERMINAL_CENTER_Y test eax,eax jnz terminal_test_fail invoke TerminalCanWalk3D,TERMINAL_CASH_X,FP_1*71/5 cmp eax,1 jne terminal_test_fail invoke TerminalCanWalk3D,26*FP_1,16*FP_1 cmp eax,1 jne terminal_test_fail invoke TerminalCanWalk3D,26*FP_1,20*FP_1 cmp eax,1 jne terminal_test_fail cmp BYTE PTR casinoMap[12*32+28],0 je terminal_test_fail cmp BYTE PTR casinoMap[13*32+28],0 jne terminal_test_fail cmp casinoSprites[15*SIZEOF SpriteObject].SpriteObject.posX,TERMINAL_CASH_X jne terminal_test_fail cmp casinoSprites[16*SIZEOF SpriteObject].SpriteObject.posY,TERMINAL_CENTER_Y jne terminal_test_fail cmp casinoWaypoints3D[14*SIZEOF NpcWaypoint].NpcWaypoint.posX,TERMINAL_CASH_X jne terminal_test_fail mov eax,casinoWaypoints3D[14*SIZEOF NpcWaypoint].NpcWaypoint.posX mov edx,casinoWaypoints3D[14*SIZEOF NpcWaypoint].NpcWaypoint.posY invoke TerminalCanWalk3D,eax,edx cmp eax,1 jne terminal_test_fail invoke TerminalCanWalk3D,26*FP_1,18*FP_1 cmp eax,1 jne terminal_test_fail mov termTestStage,5 mov engineMode,MODE_WALK mov playerX,TERMINAL_CASH_X mov playerY,FP_1*71/5 mov playerAngle,384 call UpdateCamera3D call CheckInteractions cmp interactTargetId,INTERACT_ATM jne terminal_test_fail call Trigger3DInteraction cmp engineMode,MODE_ATM jne terminal_test_fail cmp terminalTab3D,0 jne terminal_test_fail call RenderTerminal3D invoke WriteActionSnapshot3D,OFFSET termTestCash mov engineMode,MODE_WALK mov playerX,TERMINAL_TROPHY_X call CheckInteractions cmp interactTargetId,INTERACT_TERMINAL jne terminal_test_fail call Trigger3DInteraction cmp terminalTab3D,1 jne terminal_test_fail call RenderTerminal3D invoke WriteActionSnapshot3D,OFFSET termTestAch0 mov pressedKeys3D[27h],1 call HandleTerminal3D cmp terminalPage3D,1 jne terminal_test_fail call RenderTerminal3D invoke WriteActionSnapshot3D,OFFSET termTestAch1 mov mouseClick3D,1 mov mouseX3D,290 mov mouseY3D,220 call HandleTerminal3D cmp terminalPage3D,2 jne terminal_test_fail call RenderTerminal3D invoke WriteActionSnapshot3D,OFFSET termTestAch2 mov pressedKeys3D[27h],1 call HandleTerminal3D cmp terminalTab3D,0 jne terminal_test_fail mov mouseClick3D,1 mov mouseX3D,25 mov mouseY3D,220 call HandleTerminal3D cmp terminalPage3D,2 jne terminal_test_fail mov mouseClick3D,1 mov mouseX3D,270 mov mouseY3D,15 call HandleTerminal3D cmp engineMode,MODE_WALK jne terminal_test_fail cmp mouseClick3D,0 jne terminal_test_fail invoke BeginTerminal3D,1 mov pressedKeys3D[45h],1 call HandleTerminal3D cmp engineMode,MODE_WALK jne terminal_test_fail mov achievements,0 mov bankroll,10000 mov ownedBacks3D,1 mov npcClaimed3D,0 call RenderTerminal3D invoke WriteActionSnapshot3D,OFFSET termTestLocked mov termTestStage,6 mov viewHorizon3D,240 mov playerX,TERMINAL_CASH_X mov playerY,FP_1*31/2 mov playerAngle,384 call TerminalTestWorldFrame invoke WriteActionSnapshot3D,OFFSET termTestFront mov playerX,FP_1*53/2 mov playerY,FP_1*29/2 mov playerAngle,448 call TerminalTestNoBarTexture test eax,eax jz terminal_test_fail call TerminalTestWorldFrame invoke WriteActionSnapshot3D,OFFSET termTestSide mov playerX,TERMINAL_CASH_X mov playerY,12*FP_1 mov playerAngle,128 call TerminalTestNoBarTexture test eax,eax jz terminal_test_fail call TerminalTestIsolatedCabinet invoke WriteActionSnapshot3D,OFFSET termTestRear mov playerX,TERMINAL_TROPHY_X mov playerY,FP_1*31/2 mov playerAngle,384 call TerminalTestWorldFrame invoke WriteActionSnapshot3D,OFFSET termTestTrophyFront mov playerX,FP_1*61/2 mov playerY,FP_1*29/2 mov playerAngle,320 call TerminalTestWorldFrame invoke WriteActionSnapshot3D,OFFSET termTestTrophySide mov playerX,TERMINAL_TROPHY_X mov playerY,12*FP_1 mov playerAngle,128 call TerminalTestIsolatedCabinet invoke WriteActionSnapshot3D,OFFSET termTestTrophyRear mov playerX,28*FP_1 mov playerY,20*FP_1 mov playerAngle,384 call TerminalTestWorldFrame invoke DrawCityObject3D,OFFSET hallLoungeDecor3D+3*28,0 invoke DrawCityObject3D,OFFSET hallLoungeDecor3D+4*28,0 invoke DrawCityObject3D,OFFSET hallLoungeDecor3D+5*28,0 invoke WriteActionSnapshot3D,OFFSET termTestWall mov playerX,3*FP_1 mov playerY,16*FP_1 mov playerAngle,256 call TerminalTestWorldFrame invoke WriteActionSnapshot3D,OFFSET termTestLamp mov playerX,FP_1*5/2 mov playerY,14*FP_1 mov playerAngle,175 call TerminalTestWorldFrame invoke WriteActionSnapshot3D,OFFSET termTestLampSide mov termTestStage,7 mov ebx,terminalWorldArt3D.pixels mov terminalWorldArt3D.pixels,0 invoke ResolveTerminalSurface3D,118 test eax,eax jnz terminal_test_fail mov terminalWorldArt3D.pixels,ebx mov ebx,terminalScreenArt3D.pixels mov terminalScreenArt3D.pixels,0 call RenderTerminal3D mov terminalScreenArt3D.pixels,ebx call FreeTerminalArt3D cmp terminalWorldArt3D.pixels,0 jne terminal_test_fail invoke ExitProcess,0 terminal_test_fail: invoke ExitProcess,termTestStage TerminalTestStart ENDP