KAZIK/tools/tests/terminal_test.inc
Artvasil09 797ee366dc feat: implement upper lounge, manual stairs, cabaret, and casino terminals
- Native player-controlled stairs, upper lounge bar, and Hell Tower infernal portal
- Cabaret stage with musical acts, audience seating, and interaction
- Dedicated cash/trophy wall terminals with native balance and achievement screens
- Projecting 3D wall lanterns with ray/plane intersection
- Six roaming guests with seated poses and card rank rendering updates
- Synchronized launcher hash and updated binaries
2026-10-18 21:36:12 +03:00

314 lines
9.4 KiB
PHP

.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