KAZIK/tools/tests/bar_camera_test.inc
Artvasil09 51c6512675 feat: implement secret fortune teller room, lived-in den v3, and bar camera stabilization
- 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
2026-10-20 17:29:52 +03:00

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