- Secret Fortune Teller Room: arcade lantern toggle, sliding timber panel, dedicated staircase and compact cellar chamber - Lived-in den pass v3: cloth hangings, draped workbench, props/clutter, centered entrance, and custom light sources - Bar camera stabilization: remove alcohol horizon sway while retaining drink animations - Synchronize binaries and update launcher hash to EADBA9C8C9BD5B7E3CC4CE486ED647C1CE9383D1DCB6EBC94FE755EA1F4BF927
139 lines
3.4 KiB
PHP
139 lines
3.4 KiB
PHP
.data
|
|
barTestMain db "build\hall-expansion\bar-camera-main.bmp",0
|
|
barTestUpper db "build\hall-expansion\bar-camera-upper.bmp",0
|
|
.code
|
|
BarCameraAssert PROC
|
|
cmp viewHorizon3D,HALF_H
|
|
jne bar_camera_assert_fail
|
|
cmp viewEye3D,HALL_STANDING_EYE
|
|
jne bar_camera_assert_fail
|
|
cmp playerX,12*FP_1
|
|
jne bar_camera_assert_fail
|
|
cmp playerY,14*FP_1
|
|
jne bar_camera_assert_fail
|
|
cmp playerAngle,384
|
|
jne bar_camera_assert_fail
|
|
ret
|
|
bar_camera_assert_fail:
|
|
invoke ExitProcess,expansionStage
|
|
ret
|
|
BarCameraAssert ENDP
|
|
|
|
BarCameraNativeTests PROC uses ebx esi edi
|
|
local expectedBank:DWORD, oldArrival:DWORD
|
|
; Exercise real purchases without writing the player's profile.
|
|
mov eax,arrivalConfirmed3D
|
|
mov oldArrival,eax
|
|
mov arrivalConfirmed3D,0
|
|
mov expansionStage,70
|
|
mov engineMode,MODE_WALK
|
|
mov hallLevel3D,0
|
|
mov worldMap3D,OFFSET casinoMap
|
|
mov playerX,12*FP_1
|
|
mov playerY,14*FP_1
|
|
mov playerAngle,384
|
|
mov viewHorizon3D,-300
|
|
mov viewEye3D,-FP_1
|
|
mov deltaTime3D,16
|
|
call UpdateHall3D
|
|
call BarCameraAssert
|
|
xor ebx,ebx
|
|
bar_camera_level:
|
|
mov hallLevel3D,ebx
|
|
mov worldMap3D,OFFSET casinoMap
|
|
test ebx,ebx
|
|
jz @F
|
|
mov worldMap3D,OFFSET upperLoungeMap3D
|
|
@@:
|
|
mov bankroll,10000
|
|
mov expectedBank,10000
|
|
mov esi,12
|
|
bar_camera_visit:
|
|
mov expansionStage,71
|
|
mov interactTargetId,INTERACT_BAR
|
|
call TriggerHallInteraction3D
|
|
cmp engineMode,MODE_BAR
|
|
jne bar_camera_fail
|
|
xor edi,edi
|
|
bar_camera_drink:
|
|
mov eax,barPrice3D[edi*4]
|
|
sub expectedBank,eax
|
|
invoke BuyBarDrink3D,edi
|
|
mov eax,expectedBank
|
|
cmp bankroll,eax
|
|
jne bar_camera_fail
|
|
cmp barPhase3D,1
|
|
jne bar_camera_fail
|
|
cmp barTime3D,0
|
|
jne bar_camera_fail
|
|
; A second click while serving must not buy another drink.
|
|
invoke BuyBarDrink3D,edi
|
|
mov eax,expectedBank
|
|
cmp bankroll,eax
|
|
jne bar_camera_fail
|
|
mov deltaTime3D,2999
|
|
call HandleBar3D
|
|
cmp barPhase3D,1
|
|
jne bar_camera_fail
|
|
mov deltaTime3D,1
|
|
call HandleBar3D
|
|
cmp barPhase3D,2
|
|
jne bar_camera_fail
|
|
cmp barTime3D,0
|
|
jne bar_camera_fail
|
|
mov deltaTime3D,2399
|
|
call HandleBar3D
|
|
cmp barPhase3D,2
|
|
jne bar_camera_fail
|
|
; Render every drink in each bar once, checking camera restoration.
|
|
cmp esi,12
|
|
jne @F
|
|
call RenderBar3D
|
|
call BarCameraAssert
|
|
cmp engineMode,MODE_BAR
|
|
jne bar_camera_fail
|
|
@@:
|
|
mov deltaTime3D,1
|
|
call HandleBar3D
|
|
cmp barPhase3D,0
|
|
jne bar_camera_fail
|
|
cmp barTime3D,0
|
|
jne bar_camera_fail
|
|
call BarCameraAssert
|
|
inc edi
|
|
cmp edi,3
|
|
jb bar_camera_drink
|
|
; Same return-to-walking state as the menu exit, then real hall updates.
|
|
mov engineMode,MODE_WALK
|
|
mov deltaTime3D,16
|
|
mov edi,256
|
|
bar_camera_walk:
|
|
add animationClock3D,16
|
|
call UpdateHall3D
|
|
call UpdateInteriorEye3D
|
|
call BarCameraAssert
|
|
cmp engineMode,MODE_WALK
|
|
jne bar_camera_fail
|
|
dec edi
|
|
jnz bar_camera_walk
|
|
dec esi
|
|
jnz bar_camera_visit
|
|
mov expansionStage,72
|
|
mov eax,expectedBank
|
|
cmp bankroll,eax
|
|
jne bar_camera_fail
|
|
call ExpansionFrame
|
|
test ebx,ebx
|
|
jnz bar_camera_upper_snapshot
|
|
invoke ExpansionSnapshot,OFFSET barTestMain
|
|
mov ebx,2
|
|
jmp bar_camera_level
|
|
bar_camera_upper_snapshot:
|
|
invoke ExpansionSnapshot,OFFSET barTestUpper
|
|
mov eax,oldArrival
|
|
mov arrivalConfirmed3D,eax
|
|
ret
|
|
bar_camera_fail:
|
|
invoke ExitProcess,expansionStage
|
|
ret
|
|
BarCameraNativeTests ENDP
|