KAZIK/tools/tests/street_asset_probe.asm
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

189 lines
6.9 KiB
NASM

.386
.model flat,stdcall
option casemap:none
include F:\MASM32\masm32\include\windows.inc
include F:\MASM32\masm32\include\kernel32.inc
InitPaths3D PROTO
LoadAnimPack3D PROTO :DWORD,:DWORD
FreeAnimPack3D PROTO :DWORD
InitNativeSlots3D PROTO
FreeNativeSlots3D PROTO
InitNativeClover3D PROTO
FreeNativeClover3D PROTO
InitPool3D PROTO
FreePyramidAssets3D PROTO
LoadNativeWheelArt3D PROTO
FreeNativeWheelArt3D PROTO
LoadNativeCoinArt3D PROTO
FreeNativeCoinArt3D PROTO
LoadNativeDiceArt3D PROTO
FreeNativeDiceArt3D PROTO
LoadScratchArt3D PROTO
FreeScratchArt3D PROTO
LoadTerminalArt3D PROTO
FreeTerminalArt3D PROTO
ResolveTerminalSurface3D PROTO :DWORD
.data
streetPack dd 6 dup(0)
streetPath db "assets\animations\hall\street-life-v4.bin",0
missingPath db "assets\animations\hall\__missing_street_probe__.bin",0
cardFurniturePath db "assets\animations\hall\card-table-v5.bin",0
wheelFurniturePath db "assets\animations\hall\roulette-table-v5.bin",0
backFurniturePath db "assets\animations\hall\backroom-table-v5.bin",0
skillFurniturePath db "assets\animations\hall\skill-cabinet-v5.bin",0
chairFurniturePath db "assets\animations\hall\lounge-chair-v5.bin",0
lampFurniturePath db "assets\animations\hall\lamp-table-v5.bin",0
ropeFurniturePath db "assets\animations\hall\velvet-rope-v5.bin",0
slotFurniturePath db "assets\animations\hall\slot-cabinets-v5.bin",0
pyramidTableProbePath db "assets\animations\pyramid\table-v2.bin",0
pyramidBallsProbePath db "assets\animations\pyramid\balls-v1.bin",0
poolBallsProbePath db "assets\animations\pyramid\pool-balls-v1.bin",0
wakeRockerProbePath db "assets\animations\arrival\wake-rocker-v2.bin",0
wakeLighterProbePath db "assets\animations\arrival\wake-lighter-v1.bin",0
wakeKneesProbePath db "assets\animations\arrival\wake-knees-v1.bin",0
wakeSleeveProbePath db "assets\animations\arrival\wake-sleeve-v1.bin",0
alleyMaterialsProbePath db "assets\animations\arrival\alley-materials-v1.bin",0
worldDressingProbePath db "assets\animations\hall\world-dressing-v6.bin",0
terminalWorldProbePath db "assets\animations\hall\terminals-v2.bin",0
terminalScreenProbePath db "assets\animations\hall\terminal-screen-v1.bin",0
guestCastProbePath db "assets\animations\hall\guest-cast-v1.bin",0
guestWalkProbePath db "assets\animations\hall\guest-walk-v2.bin",0
guestWalkLeftProbePath db "assets\animations\hall\guest-walk-left-v2.bin",0
basementDoorProbePath db "assets\animations\hall\basement-door-v2.bin",0
cabaretProbePath db "assets\animations\hall\cabaret-ensemble-v1.bin",0
cabaretPianoProbePath db "assets\animations\hall\cabaret-piano-v1.bin",0
cabaretGuitarProbePath db "assets\animations\hall\cabaret-guitar-v1.bin",0
upperMaterialsProbePath db "assets\animations\hall\upper-materials-v1.bin",0
upperGamesProbePath db "assets\animations\hall\upper-games-v2.bin",0
upperBarProbePath db "assets\animations\hall\upper-bar-v2.bin",0
upperPortalProbePath db "assets\animations\hall\upper-portal-v3.bin",0
upperLeversProbePath db "assets\animations\hall\upper-levers-v3.bin",0
upperBraziersProbePath db "assets\animations\hall\upper-braziers-v3.bin",0
fortuneRoomProbePath db "assets\animations\hall\fortune-room-v3.bin",0
fortuneMaterialsProbePath db "assets\animations\hall\fortune-materials-v3.bin",0
furniturePaths dd OFFSET cardFurniturePath,320,208,1
dd OFFSET wheelFurniturePath,288,268,1
dd OFFSET backFurniturePath,304,236,1
dd OFFSET skillFurniturePath,224,368,1
dd OFFSET chairFurniturePath,240,256,1
dd OFFSET lampFurniturePath,192,224,1
dd OFFSET ropeFurniturePath,288,192,1
dd OFFSET slotFurniturePath,224,256,3
dd OFFSET pyramidTableProbePath,640,480,1
dd OFFSET pyramidBallsProbePath,12,12,8
dd OFFSET poolBallsProbePath,12,12,16
dd OFFSET wakeRockerProbePath,192,320,32
dd OFFSET wakeLighterProbePath,256,256,16
dd OFFSET wakeKneesProbePath,640,240,1
dd OFFSET wakeSleeveProbePath,256,384,1
dd OFFSET alleyMaterialsProbePath,128,128,4
dd OFFSET worldDressingProbePath,128,128,3
dd OFFSET terminalWorldProbePath,256,512,4
dd OFFSET terminalScreenProbePath,640,480,1
dd OFFSET guestCastProbePath,128,224,36
dd OFFSET guestWalkProbePath,128,224,48
dd OFFSET guestWalkLeftProbePath,128,224,48
dd OFFSET basementDoorProbePath,256,512,18
dd OFFSET cabaretProbePath,160,256,12
dd OFFSET cabaretPianoProbePath,384,256,4
dd OFFSET cabaretGuitarProbePath,160,256,4
dd OFFSET upperMaterialsProbePath,256,256,4
dd OFFSET upperGamesProbePath,320,224,2
dd OFFSET upperBarProbePath,160,256,2
dd OFFSET upperPortalProbePath,256,512,13
dd OFFSET upperLeversProbePath,128,224,6
dd OFFSET upperBraziersProbePath,128,256,4
dd OFFSET fortuneRoomProbePath,256,256,24
dd OFFSET fortuneMaterialsProbePath,256,256,4
furniturePathCount equ ($-furniturePaths)/16
.code
RunStreetAssetProbe PROC
call InitPaths3D
invoke LoadAnimPack3D,OFFSET streetPack,OFFSET streetPath
cmp eax,1
jne probe_failed
cmp streetPack[4],192
jne probe_failed
cmp streetPack[8],320
jne probe_failed
cmp streetPack[12],40
jne probe_failed
cmp streetPack[20],0
je probe_failed
invoke FreeAnimPack3D,OFFSET streetPack
; The newly playable cabinet must resolve its packs from these launch paths too.
call InitNativeSlots3D
cmp eax,1
jne probe_failed
call FreeNativeSlots3D
call InitNativeClover3D
cmp eax,1
jne probe_failed
call FreeNativeClover3D
call InitPool3D
call FreePyramidAssets3D
call LoadNativeWheelArt3D
cmp eax,1
jne probe_failed
call FreeNativeWheelArt3D
call LoadNativeCoinArt3D
cmp eax,1
jne probe_failed
call FreeNativeCoinArt3D
call LoadNativeDiceArt3D
cmp eax,1
jne probe_failed
call FreeNativeDiceArt3D
call LoadScratchArt3D
cmp eax,1
jne probe_failed
call FreeScratchArt3D
call LoadTerminalArt3D
invoke ResolveTerminalSurface3D,118
test eax,eax
jz probe_failed
cmp ecx,256
jne probe_failed
cmp edx,512
jne probe_failed
call FreeTerminalArt3D
invoke ResolveTerminalSurface3D,118
test eax,eax
jnz probe_failed
mov esi,OFFSET furniturePaths
mov edi,furniturePathCount
probe_furniture:
invoke LoadAnimPack3D,OFFSET streetPack,[esi]
cmp eax,1
jne probe_failed
mov eax,[esi+4]
cmp streetPack[4],eax
jne probe_failed
mov eax,[esi+8]
cmp streetPack[8],eax
jne probe_failed
mov eax,[esi+12]
cmp streetPack[12],eax
jne probe_failed
cmp streetPack[20],0
je probe_failed
invoke FreeAnimPack3D,OFFSET streetPack
add esi,16
dec edi
jnz probe_furniture
; Rejecting a missing asset must not leave a plausible loaded header behind.
invoke LoadAnimPack3D,OFFSET streetPack,OFFSET missingPath
test eax,eax
jnz probe_failed
xor ecx,ecx
probe_empty:
cmp streetPack[ecx*4],0
jne probe_failed
inc ecx
cmp ecx,6
jb probe_empty
invoke ExitProcess,0
probe_failed:
invoke ExitProcess,1
RunStreetAssetProbe ENDP
END