KAZIK/tools/tests/world_dressing_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

219 lines
6.2 KiB
NASM

.386
.model flat
option casemap:none
FP_1 equ 65536
FP_HALF equ 32768
SCREEN_W equ 640
SCREEN_H equ 480
SCREEN_SIZE equ 640*480
CITY_PROP_COUNT equ 47
HALL_LIGHT_COUNT equ 6
HALL_DECOR_COUNT equ 12
AnimPack3D STRUCT
magic dd ?
imageWidth dd ?
height dd ?
frames dd ?
bytes dd ?
pixels dd ?
AnimPack3D ENDS
CityProp3D STRUCT
posX dd ?
posY dd ?
worldW dd ?
worldH dd ?
frame dd ?
asset dd ?
groundZ dd ?
CityProp3D ENDS
EXTERN casinoMap:BYTE,hallLevel3D:DWORD,outdoorRender3D:DWORD
EXTERN hallLights3D:BYTE,hallLoungeDecor3D:BYTE,hallRopeFurniture3D:BYTE,hallLampFurniture3D:BYTE
EXTERN cityObjects3D:BYTE,hallStreetLife3D:BYTE,cityDecorPack3D:AnimPack3D
EXTERN playerX:DWORD,playerY:DWORD,playerAngle:DWORD,viewEye3D:DWORD,viewCeiling3D:DWORD,viewHorizon3D:DWORD
EXTERN worldMap3D:DWORD,floorTexture3D:DWORD,cityMap3D:BYTE
EXTERN cityPhase3D:DWORD,cityTime3D:DWORD,cityClock3D:DWORD,arrivalState3D:DWORD
EXTERN screenBuffer:DWORD,cityDepthBuffer3D:DWORD,cityRayX3D:DWORD,cityRayY3D:DWORD,zBuffer:DWORD,cityBackdrop3D:DWORD
EXTERN playerPlaneX:DWORD,playerPlaneY:DWORD
option language:stdcall
ExitProcess PROTO :DWORD
GetTickCount PROTO
InitPaths3D PROTO
LoadTextures3D PROTO
LoadArrivalAssets3D PROTO
InitializeCasinoSprites3D PROTO
InitHall3D PROTO
LoadHallAssets3D PROTO
LoadCityArrival3D PROTO
UpdateCamera3D PROTO
RenderCeilingAndFloor PROTO
RenderWalls PROTO
PrepareCityDepth3D PROTO
RenderSprites PROTO
RenderHall3D PROTO
PositionCityCamera3D PROTO
DrawCitySky3D PROTO
DrawCitySkyline3D PROTO
RenderCityObjects3D PROTO
AnimateCityPedestrians3D PROTO
RenderCityFurniture3D PROTO
RenderCityBins3D PROTO
RenderCityAlley3D PROTO
RenderCityFacade3D PROTO
RenderCityGuards3D PROTO
DrawCityRain3D PROTO
WriteActionSnapshot3D PROTO :DWORD
LoadAnimPack3D PROTO :DWORD,:DWORD
FreeAnimPack3D PROTO :DWORD
ValidateCityPack3D PROTO :DWORD,:DWORD,:DWORD,:DWORD
DrawCityVertical3D PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
DrawCityBoxSides3D PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
DrawCityHorizontal3D PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
ResolveWorldSurface3D PROTO :DWORD
CityRayPlane3D PROTO :DWORD,:DWORD,:DWORD
ProjectCityPoint3D PROTO :DWORD,:DWORD
IsCityEmissive3D PROTO :DWORD,:DWORD
ShadeCityGround3D PROTO :DWORD,:DWORD,:DWORD,:DWORD
.code
include src_graphics/world_dressing_data.inc
include src_graphics/world_dressing.inc
include src_graphics/hall_lighting.inc
include build/world/surfaces.inc
.data
worldHallBefore3D db "build\world\hall-before.bmp",0
worldHallAfter3D db "build\world\hall-after.bmp",0
worldWallAfter3D db "build\world\wall-after.bmp",0
worldStreetBefore3D db "build\world\street-before.bmp",0
worldStreetAfter3D db "build\world\street-after.bmp",0
.code
WorldProbeHall PROC
call UpdateCamera3D
call RenderCeilingAndFloor
call RenderWalls
call PrepareCityDepth3D
call RenderSprites
call RenderHall3D
ret
WorldProbeHall ENDP
WorldProbeStreet PROC
call UpdateCamera3D
call DrawCitySky3D
call RenderCeilingAndFloor
call DrawCitySkyline3D
call RenderWalls
call PrepareCityDepth3D
cmp worldStreetSized3D,0
je @F
call RenderStreetDressing3D
@@:
call RenderCityObjects3D
call RenderCityFurniture3D
call RenderCityBins3D
call RenderCityAlley3D
call RenderCityFacade3D
call RenderCityGuards3D
call DrawCityRain3D
ret
WorldProbeStreet ENDP
WorldDressingProbeStart PROC
call InitPaths3D
call LoadTextures3D
call LoadArrivalAssets3D
call InitializeCasinoSprites3D
call InitHall3D
call LoadHallAssets3D
call LoadCityArrival3D
mov playerX,14*FP_1
mov playerY,22*FP_1
mov playerAngle,384
call WorldProbeHall
invoke WriteActionSnapshot3D,OFFSET worldHallBefore3D
mov arrivalState3D,0
mov cityPhase3D,10
mov cityTime3D,3000
mov cityClock3D,18200
call PositionCityCamera3D
mov outdoorRender3D,1
mov worldMap3D,OFFSET cityMap3D
mov floorTexture3D,60
call WorldProbeStreet
invoke WriteActionSnapshot3D,OFFSET worldStreetBefore3D
call LoadWorldDressing3D
mov viewEye3D,FP_1*121/100
call WorldProbeStreet
invoke WriteActionSnapshot3D,OFFSET worldStreetAfter3D
call InitHall3D
call BuildHallLighting3D
cmp hallLightMap3D[19*256*8+14*8],80
jb world_probe_bake_failed
cmp hallContactMap3D[19*256*8+13*8],40
jne world_probe_bake_failed
invoke HallLightVisible3D,132,148,132,164
cmp eax,1
jne world_probe_bake_failed
mov casinoMap[19*32+16],1
invoke HallLightVisible3D,132,148,132,164
mov casinoMap[19*32+16],0
test eax,eax
jnz world_probe_bake_failed
invoke StreetGroundHeight3D,14*FP_1,FP_1*1265/100
cmp eax,FP_1*3/50
jne world_probe_bake_failed
invoke StreetGroundHeight3D,35*FP_1,FP_1*1265/100
test eax,eax
jnz world_probe_bake_failed
mov outdoorRender3D,0
mov worldMap3D,OFFSET casinoMap
mov floorTexture3D,100
mov viewEye3D,FP_1*21/20
mov viewHorizon3D,240
mov playerX,14*FP_1
mov playerY,22*FP_1
mov playerAngle,384
call WorldProbeHall
call RenderHallDressing3D
call ApplyHallLighting3D
invoke WriteActionSnapshot3D,OFFSET worldHallAfter3D
mov playerX,27*FP_1
mov playerY,18*FP_1
mov playerAngle,0
call WorldProbeHall
call RenderHallDressing3D
call ApplyHallLighting3D
invoke WriteActionSnapshot3D,OFFSET worldWallAfter3D
invoke ExitProcess,0
world_probe_bake_failed:
invoke ExitProcess,1
WorldDressingProbeStart ENDP
WorldDressingBenchmarkStart PROC uses ebx esi
call InitPaths3D
call LoadTextures3D
call LoadArrivalAssets3D
call InitializeCasinoSprites3D
call InitHall3D
call LoadHallAssets3D
call LoadCityArrival3D
call LoadWorldDressing3D
mov arrivalState3D,0
mov cityPhase3D,10
mov cityTime3D,3000
mov cityClock3D,18200
call PositionCityCamera3D
mov outdoorRender3D,1
mov worldMap3D,OFFSET cityMap3D
mov floorTexture3D,60
mov viewEye3D,FP_1*121/100
call GetTickCount
mov esi,eax
mov ebx,40
world_probe_benchmark:
call WorldProbeStreet
dec ebx
jnz world_probe_benchmark
call GetTickCount
sub eax,esi
xor edx,edx
mov ecx,40
div ecx
invoke ExitProcess,eax
WorldDressingBenchmarkStart ENDP
end