.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