.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 .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 .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 ; 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