.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 .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 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 .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 mov esi,OFFSET furniturePaths mov edi,17 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