.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 LoadNativeWheelArt3D PROTO FreeNativeWheelArt3D PROTO LoadNativeCoinArt3D PROTO FreeNativeCoinArt3D PROTO .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 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 .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 LoadNativeWheelArt3D cmp eax,1 jne probe_failed call FreeNativeWheelArt3D call LoadNativeCoinArt3D cmp eax,1 jne probe_failed call FreeNativeCoinArt3D mov esi,OFFSET furniturePaths mov edi,8 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