KAZIK/tools/tests/street_asset_probe.asm
Игорь Федосеев ca62db53e9 feat: implement native billiards, scratch tickets, first-person dice, and city wake scene
- Billiards: add native Russian Pyramid & American Eight-Ball pool with physics prediction, controls, and regression tests
- Scratch Tickets: add dedicated counter, mat presentation, elliptical coin scraping, 4 ticket types, and payout effects
- First-Person Dice: add native dice scene, hand anchor frames, throwing animation, and table perspective
- City Wake & Weather: add arrival cutscene, alley geometry, weather/rain effects, and lighter/rocker animation
- World Dressing: add hall paintings, furniture packs, hall lighting, and scene regression tests
- Build & Tooling: update build.bat for modern MSVC toolchain, update launcher hash, and refresh shipping binaries
2026-10-16 12:37:40 +03:00

139 lines
4.5 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
.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