- 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
189 lines
6.9 KiB
NASM
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
|