- 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
139 lines
4.5 KiB
NASM
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
|