- 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
314 lines
9.4 KiB
PHP
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
|