288 lines
7.9 KiB
PHP
288 lines
7.9 KiB
PHP
.data
|
|
brTestPath db 'build\scratch\backrooms-native.bin',0
|
|
brTestFrame db 'build\scratch\backrooms-frame.bin',0
|
|
brTestExitFrame db 'build\scratch\backrooms-exit.bin',0
|
|
brTestIo dd 0
|
|
brTestSeeds dd 256
|
|
brTestStage dd 91
|
|
brTestRows dd 0
|
|
brTestLuckPath db 'build\scratch\backrooms-luck.bin',0
|
|
brTestProfileDir db 'build\scratch',0
|
|
brTestProfileName db 'backrooms-profile.dat',0
|
|
brTestProfilePath db 'build\scratch\backrooms-profile.dat',0
|
|
brTestPreviewPath db 'build\scratch\br-preview.dat',0
|
|
brTestFacesPath db 'build\scratch\backrooms-exit-faces.bin',0
|
|
brTestFaceNeighbors dd -32,32,-1,1
|
|
brTestFaceAngles dd 384,128,256,0
|
|
.code
|
|
include tools/tests/backrooms_extended_test.inc
|
|
RunBackroomsTest3D PROC uses ebx esi edi
|
|
invoke CreateFileA,OFFSET brTestPath,40000000h,0,0,2,80h,0
|
|
mov ebx,eax
|
|
cmp eax,-1
|
|
je br_test_fail
|
|
mov rngSeed3D,12345
|
|
br_test_seed:
|
|
call GenerateBackrooms3D
|
|
invoke WriteFile,ebx,OFFSET brMap3D,1024,OFFSET brTestIo,0
|
|
invoke WriteFile,ebx,OFFSET brExitCell3D,4,OFFSET brTestIo,0
|
|
invoke WriteFile,ebx,OFFSET brGameCells3D,24,OFFSET brTestIo,0
|
|
dec brTestSeeds
|
|
jnz br_test_seed
|
|
invoke CloseHandle,ebx
|
|
mov brTestStage,92
|
|
mov obsActive3D,0
|
|
mov tournamentMode,0
|
|
mov brActive3D,0
|
|
mov engineMode,MODE_WALK
|
|
mov hallLevel3D,0
|
|
mov playerX,16*FP_1+FP_HALF
|
|
mov playerY,30*FP_1-11000
|
|
mov playerAngle,128
|
|
mov keys3D[57h],1
|
|
mov deltaTime3D,50
|
|
mov esi,39
|
|
br_test_entry:
|
|
call BackroomsEntry3D
|
|
cmp brActive3D,0
|
|
jne br_test_fail
|
|
dec esi
|
|
jnz br_test_entry
|
|
cmp brEntryHold3D,1950
|
|
jne br_test_fail
|
|
mov brTestStage,93
|
|
mov playerAngle,129
|
|
call BackroomsEntry3D
|
|
cmp brEntryHold3D,0
|
|
jne br_test_fail
|
|
mov playerAngle,128
|
|
call BackroomsEntry3D
|
|
cmp brEntryHold3D,50
|
|
jne br_test_fail
|
|
mov keys3D[57h],0
|
|
call BackroomsEntry3D
|
|
cmp brEntryHold3D,0
|
|
jne br_test_fail
|
|
mov brTestStage,94
|
|
mov keys3D[57h],1
|
|
mov brEntryHold3D,1950
|
|
mov brEntryAngle3D,128
|
|
call BackroomsEntry3D
|
|
cmp brActive3D,1
|
|
jne br_test_fail
|
|
cmp brCutscene3D,1
|
|
jne br_test_fail
|
|
mov brClock3D,900
|
|
call HandleBackrooms3D
|
|
mov brTestStage,95
|
|
invoke CanWalk3D,FP_1+FP_HALF,FP_1+FP_HALF
|
|
cmp eax,1
|
|
jne br_test_fail
|
|
invoke CanWalk3D,FP_HALF,FP_HALF
|
|
test eax,eax
|
|
jnz br_test_fail
|
|
mov brTestStage,96
|
|
; Set up standard projection LUT through the real hall initializer first.
|
|
call InitHall3D
|
|
call RunBackroomsWallTest3D
|
|
test eax,eax
|
|
jnz br_test_return
|
|
mov brActive3D,1
|
|
mov hallLevel3D,HALL_BACKROOMS
|
|
mov worldMap3D,OFFSET brMap3D
|
|
mov floorTexture3D,BR_FLOOR
|
|
mov viewHorizon3D,HALF_H
|
|
mov brClock3D,8100
|
|
mov brDialogue3D,2500
|
|
mov brCutscene3D,0
|
|
mov playerX,FP_1+FP_HALF
|
|
mov playerY,FP_1+FP_HALF
|
|
mov playerAngle,64
|
|
call RenderBackrooms3D
|
|
invoke CreateFileA,OFFSET brTestFrame,40000000h,0,0,2,80h,0
|
|
mov ebx,eax
|
|
invoke WriteFile,ebx,OFFSET screenBuffer,SCREEN_SIZE*4,OFFSET brTestIo,0
|
|
invoke CloseHandle,ebx
|
|
; Door capture from its reachable exit cell, facing a neighboring wall.
|
|
mov ebx,brExitCell3D
|
|
mov eax,ebx
|
|
and eax,31
|
|
shl eax,16
|
|
add eax,FP_HALF
|
|
mov playerX,eax
|
|
mov eax,ebx
|
|
shr eax,5
|
|
shl eax,16
|
|
add eax,FP_HALF
|
|
mov playerY,eax
|
|
mov playerAngle,384
|
|
cmp brMap3D[ebx-32],0
|
|
jne br_test_exit_camera
|
|
mov playerAngle,128
|
|
cmp brMap3D[ebx+32],0
|
|
jne br_test_exit_camera
|
|
mov playerAngle,256
|
|
cmp brMap3D[ebx-1],0
|
|
jne br_test_exit_camera
|
|
mov playerAngle,0
|
|
br_test_exit_camera:
|
|
mov brDialogue3D,10000
|
|
call RenderBackrooms3D
|
|
invoke CreateFileA,OFFSET brTestExitFrame,40000000h,0,0,2,80h,0
|
|
mov ebx,eax
|
|
invoke WriteFile,ebx,OFFSET screenBuffer,SCREEN_SIZE*4,OFFSET brTestIo,0
|
|
invoke CloseHandle,ebx
|
|
mov arrivalConfirmed3D,0
|
|
call RunBackroomsDoorFrames3D
|
|
invoke LeaveBackrooms3D,1
|
|
cmp brOwned3D,1
|
|
jne br_test_fail
|
|
cmp brActive3D,0
|
|
jne br_test_fail
|
|
cmp hallLevel3D,0
|
|
jne br_test_fail
|
|
mov brTestStage,97
|
|
call RunBackroomsContextTest3D
|
|
test eax,eax
|
|
jnz br_test_return
|
|
mov brActive3D,1
|
|
call BackroomsLuck3D
|
|
cmp eax,-1
|
|
jne br_test_fail
|
|
mov brActive3D,0
|
|
mov tournamentMode,1
|
|
call BackroomsLuck3D
|
|
cmp eax,-1
|
|
jne br_test_fail
|
|
mov tournamentMode,0
|
|
xor edi,edi
|
|
mov esi,100000
|
|
br_test_luck:
|
|
call BackroomsLuck3D
|
|
add edi,eax
|
|
dec esi
|
|
jnz br_test_luck
|
|
cmp edi,89000
|
|
jb br_test_fail
|
|
cmp edi,91000
|
|
ja br_test_fail
|
|
call RunBackroomsExtendedTest3D
|
|
test eax,eax
|
|
jnz br_test_return
|
|
mov brTestStage,98
|
|
call LoadNativeCoinArt3D
|
|
call InitNativeSlots3D
|
|
call InitNativeClover3D
|
|
call InitNativeBlackjack3D
|
|
call InitNativePoker3D
|
|
invoke CreateFileA,OFFSET brTestLuckPath,40000000h,0,0,2,80h,0
|
|
mov ebx,eax
|
|
mov brTestRows,1000
|
|
br_test_rounds:
|
|
mov bankroll,1000000
|
|
mov coin3d_choice,1
|
|
mov coin3d_state,COIN_IDLE
|
|
mov pressedKeys3D[20h],1
|
|
call HandleNativeCoin3D
|
|
invoke WriteFile,ebx,OFFSET coin3d_result,4,OFFSET brTestIo,0
|
|
mov dice3d_state,0
|
|
mov dice3d_choice,1
|
|
mov pressedKeys3D[20h],1
|
|
call HandleDiceRules3D
|
|
invoke WriteFile,ebx,OFFSET dice3d_val1,8,OFFSET brTestIo,0
|
|
mov slotSpinState,SLOT_READY
|
|
call StartNativeSlots3D
|
|
invoke WriteFile,ebx,OFFSET slotReel1,12,OFFSET brTestIo,0
|
|
mov clpState3D,SLOT_READY
|
|
call StartNativeClover3D
|
|
call CloverEvaluate3D
|
|
invoke WriteFile,ebx,OFFSET clpTotal3D,4,OFFSET brTestIo,0
|
|
mov cbBotCount3D,0
|
|
mov cbState3D,CB_IDLE
|
|
call StartNativeBlackjack3D
|
|
invoke WriteFile,ebx,OFFSET cbPlayerScore3D,4,OFFSET brTestIo,0
|
|
invoke WriteFile,ebx,OFFSET cbDeck3D,208,OFFSET brTestIo,0
|
|
mov pkState3D,PK_IDLE
|
|
call StartNativePoker3D
|
|
invoke WriteFile,ebx,OFFSET pkDeck3D,208,OFFSET brTestIo,0
|
|
invoke WriteFile,ebx,OFFSET pkButton3D,4,OFFSET brTestIo,0
|
|
dec brTestRows
|
|
jnz br_test_rounds
|
|
invoke CloseHandle,ebx
|
|
mov brTestStage,99
|
|
mov nativeProfilesDirPtr3D,OFFSET brTestProfileDir
|
|
invoke CopyCString,OFFSET saveFileName,OFFSET brTestProfileName
|
|
mov nativeProfileActive3D,1
|
|
mov brOwned3D,1
|
|
mov brEnabled3D,0
|
|
call SaveGame
|
|
mov brOwned3D,0
|
|
mov brEnabled3D,1
|
|
call LoadSave
|
|
cmp brOwned3D,1
|
|
jne br_test_fail
|
|
cmp brEnabled3D,0
|
|
jne br_test_fail
|
|
invoke ValidateGraphicProfile3D,OFFSET brTestProfilePath
|
|
cmp eax,1
|
|
jne br_test_fail
|
|
call RunBackroomsSaveTest3D
|
|
test eax,eax
|
|
jnz br_test_return
|
|
xor eax,eax
|
|
ret
|
|
br_test_fail:
|
|
mov eax,brTestStage
|
|
br_test_return:
|
|
ret
|
|
RunBackroomsTest3D ENDP
|
|
|
|
; Identical door/camera distance on every face, VHS off/on pairs.
|
|
RunBackroomsDoorFrames3D PROC uses ebx esi edi
|
|
local face:DWORD,effect:DWORD
|
|
invoke CreateFileA,OFFSET brTestFacesPath,40000000h,0,0,2,80h,0
|
|
mov ebx,eax
|
|
mov face,0
|
|
br_test_door_face:
|
|
lea edi,brMap3D
|
|
xor eax,eax
|
|
mov ecx,256
|
|
rep stosd
|
|
; Keep all rays inside the fixture map, including peripheral FOV rays.
|
|
xor esi,esi
|
|
br_test_door_border:
|
|
mov brMap3D[esi],BR_WALL
|
|
mov brMap3D[esi+31*32],BR_WALL
|
|
mov eax,esi
|
|
shl eax,5
|
|
mov brMap3D[eax],BR_WALL
|
|
mov brMap3D[eax+31],BR_WALL
|
|
inc esi
|
|
cmp esi,32
|
|
jb br_test_door_border
|
|
mov brExitCell3D,16*32+16
|
|
mov esi,face
|
|
mov eax,brTestFaceNeighbors[esi*4]
|
|
mov brMap3D[eax+16*32+16],BR_WALL
|
|
mov playerX,16*FP_1+FP_HALF
|
|
mov playerY,16*FP_1+FP_HALF
|
|
mov eax,brTestFaceAngles[esi*4]
|
|
mov playerAngle,eax
|
|
mov viewEye3D,HALL_STANDING_EYE
|
|
mov viewHorizon3D,HALF_H
|
|
mov brDialogue3D,10000
|
|
mov effect,0
|
|
br_test_door_effect:
|
|
mov eax,effect
|
|
mov brVhs3D,eax
|
|
call RenderBackrooms3D
|
|
invoke WriteFile,ebx,OFFSET screenBuffer,SCREEN_SIZE*4,OFFSET brTestIo,0
|
|
inc effect
|
|
cmp effect,2
|
|
jb br_test_door_effect
|
|
inc face
|
|
cmp face,4
|
|
jb br_test_door_face
|
|
invoke CloseHandle,ebx
|
|
ret
|
|
RunBackroomsDoorFrames3D ENDP
|