.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