CITY_BLACK equ 0 CITY_WAKE equ 1 CITY_SMOKE equ 2 CITY_TOSS equ 3 CITY_TURN_ALLEY equ 4 CITY_ALLEY equ 5 CITY_TURN_STREET equ 6 CITY_STREET equ 7 CITY_TURN_DOOR equ 8 CITY_DOOR equ 9 CITY_BUILDING_STOREYS equ 7 CITY_STOREY_HEIGHT equ FP_1*6/5 LoadCityArrival3D PROTO RenderCityArrival3D PROTO HandleCityApproach3D PROTO PositionCityCamera3D PROTO FadeCityFrame3D PROTO :DWORD CITY_LIGHT_W equ 512 CITY_LIGHT_H equ 256 BuildCityLighting3D PROTO AddCityLight3D PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD SampleCityLight3D PROTO :DWORD,:DWORD ShadeCityGround3D PROTO :DWORD,:DWORD,:DWORD,:DWORD IsCityEmissive3D PROTO :DWORD,:DWORD include src_graphics\city_map.inc .data worldMap3D dd OFFSET casinoMap viewHorizon3D dd HALF_H floorTexture3D dd 3 outdoorRender3D dd 0 cityLighting3D dd 1 cityLightReady3D dd 0 viewEye3D dd FP_1*17/20 viewCeiling3D dd FP_1*5/2 cityPhase3D dd CITY_BLACK cityTime3D dd 0 cityClock3D dd 0 cityDurations3D dd 700,3100,2400,1500,1200,5400,900,7500,900,2800 cityTilesPack3D AnimPack3D <> cityHandsPack3D AnimPack3D <> cityPropsPack3D AnimPack3D <> citySmokePack3D AnimPack3D <> cityCarsPack3D AnimPack3D <> cityBinPack3D AnimPack3D <> cityCloudPack3D AnimPack3D <> cityTilesPath3D db "assets\animations\arrival\city-tiles-v4.bin",0 cityHandsPath3D db "assets\animations\arrival\city-hands.bin",0 cityPropsPath3D db "assets\animations\arrival\city-props.bin",0 citySmokePath3D db "assets\animations\arrival\city-smoke.bin",0 cityCarsPath3D db "assets\animations\arrival\city-cars.bin",0 cityBinPath3D db "assets\animations\arrival\city-bin-materials.bin",0 cityCloudPath3D db "assets\animations\arrival\city-clouds.bin",0 include src_graphics\city_smoke_anchors.inc cityFingerX3D dd 104,116,132,148,151,140,130,110,100,94,92,90,108,106,110,112 cityFingerY3D dd 128,111,91,72,55,45,32,27,69,77,77,90,95,116,130,135 cityMouthX3D dd 0 cityMouthY3D dd 0 cityHandX3D dd 0 cityHandY3D dd 0 cityCigaretteX3D dd 0 cityCigaretteY3D dd 0 cityBackdrop3D dd 0 CityProp3D STRUCT posX dd ? posY dd ? worldW dd ? worldH dd ? frame dd ? asset dd ? groundZ dd 0 CityProp3D ENDS CITY_PROP_COUNT equ 47 CITY_FIRST_CAR equ 9 CITY_TRAFFIC_EAST equ 14 CITY_TRAFFIC_WEST equ 15 CITY_PEDESTRIAN_COUNT equ 6 CityWalkRoute3D STRUCT objectIndex dd ? minX dd ? maxX dd ? curbY dd ? phaseOffset dd ? halfPeriod dd ? firstFrame dd ? poseMs dd ? CityWalkRoute3D ENDS ; Crops are measured from actual opaque pixels once, before the intro starts. CitySpriteCrop3D STRUCT pixelX dd ? pixelY dd ? pixelW dd ? pixelH dd ? CitySpriteCrop3D ENDS cityStreetCrops3D CitySpriteCrop3D 8 dup(<>) cityObjects3D CityProp3D <(8*FP_1+FP_1/3),(26*FP_1+FP_1/3),FP_1*3/2,FP_1*5/4,0,OFFSET cityPropsPack3D> CityProp3D <(9*FP_1+FP_1/3),(27*FP_1),FP_1,FP_1*3/4,1,OFFSET cityPropsPack3D> CityProp3D <(8*FP_1+FP_1/8),(27*FP_1),FP_1/2,FP_1/3,2,OFFSET cityPropsPack3D> CityProp3D <(9*FP_1+FP_1*7/8),(25*FP_1+FP_HALF),FP_1/3,FP_1*3/2,4,OFFSET cityPropsPack3D> CityProp3D <(9*FP_1+FP_HALF),(22*FP_1),FP_1/2,FP_1/2,5,OFFSET cityPropsPack3D> CityProp3D <11*FP_1,FP_1*333/20,FP_1,3*FP_1,3,OFFSET cityPropsPack3D> CityProp3D <17*FP_1,FP_1*259/20,FP_1,3*FP_1,3,OFFSET cityPropsPack3D> CityProp3D <25*FP_1,FP_1*333/20,FP_1,3*FP_1,3,OFFSET cityPropsPack3D> CityProp3D <(27*FP_1),(12*FP_1+FP_HALF),FP_1*3/4,FP_1/2,5,OFFSET cityPropsPack3D> CityProp3D <(12*FP_1),(16*FP_1),FP_1*3,FP_1*9/5,0,OFFSET cityCarsPack3D> CityProp3D <(19*FP_1),(16*FP_1),FP_1*3,FP_1*9/5,8,OFFSET cityCarsPack3D> CityProp3D <(26*FP_1),(16*FP_1),FP_1*3,FP_1*9/5,0,OFFSET cityCarsPack3D> CityProp3D <14*FP_1,FP_1*333/20,FP_1*3/5,FP_1/2,33,OFFSET hallStreetLife3D> CityProp3D <23*FP_1,FP_1*259/20,FP_1*3/5,FP_1*11/10,38,OFFSET hallStreetLife3D> CityProp3D <4*FP_1,14*FP_1,FP_1*3,FP_1*9/5,8,OFFSET cityCarsPack3D> CityProp3D <28*FP_1,15*FP_1+FP_1/5,FP_1*3,FP_1*9/5,0,OFFSET cityCarsPack3D> cityNearMan3D LABEL BYTE CityProp3D <12*FP_1,FP_1*253/20,FP_1*7/10,FP_1*27/20,0,OFFSET hallStreetLife3D> cityFarWoman3D LABEL BYTE CityProp3D <26*FP_1,FP_1*169/10,FP_1*4/5,FP_1*7/5,16,OFFSET hallStreetLife3D> CityProp3D <26*FP_1,FP_1*259/20,FP_1*4/5,FP_1,34,OFFSET hallStreetLife3D> CityProp3D <10*FP_1+FP_HALF,FP_1*333/20,FP_1*4/5,FP_1*6/5,35,OFFSET hallStreetLife3D> CityProp3D <21*FP_1,FP_1*259/20,FP_1/4,FP_1*23/50,36,OFFSET hallStreetLife3D> CityProp3D <28*FP_1,FP_1*333/20,2*FP_1,FP_1*17/10,39,OFFSET hallStreetLife3D> CityProp3D <34*FP_1,FP_1*259/20,FP_1,3*FP_1,3,OFFSET cityPropsPack3D> ; Another walking pair occupies the near and far curbs, not the traffic lanes. cityNearWoman3D LABEL BYTE CityProp3D <14*FP_1,FP_1*63/5,FP_1*4/5,FP_1*7/5,16,OFFSET hallStreetLife3D> cityFarMan3D LABEL BYTE CityProp3D <22*FP_1,FP_1*337/20,FP_1*7/10,FP_1*27/20,0,OFFSET hallStreetLife3D> ; Near-side street furniture is staggered along the route and clear of its center. CityProp3D <12*FP_1,FP_1*259/20,FP_1*3/5,FP_1/2,33,OFFSET hallStreetLife3D> CityProp3D <14*FP_1+FP_HALF,FP_1*259/20,FP_1*4/5,FP_1*6/5,35,OFFSET hallStreetLife3D> CityProp3D <19*FP_1,FP_1*259/20,FP_1*4/5,FP_1,34,OFFSET hallStreetLife3D> CityProp3D <16*FP_1,FP_1*259/20,FP_1/4,FP_1*23/50,36,OFFSET hallStreetLife3D> CityProp3D <18*FP_1,FP_1*259/20,FP_1/4,FP_1*23/50,36,OFFSET hallStreetLife3D> CityProp3D <24*FP_1,FP_1*259/20,FP_1/4,FP_1*23/50,36,OFFSET hallStreetLife3D> ; Independent outdoor walkers replace the stationary indoor visitor billboards. cityEntryMan3D LABEL BYTE CityProp3D <20*FP_1+FP_HALF,9*FP_1,FP_1*7/10,FP_1*27/20,0,OFFSET hallStreetLife3D> cityEntryWoman3D LABEL BYTE CityProp3D <24*FP_1+FP_HALF,9*FP_1,FP_1*4/5,FP_1*7/5,16,OFFSET hallStreetLife3D> CityProp3D <13*FP_1,FP_1*333/20,FP_1*4/5,FP_1,34,OFFSET hallStreetLife3D> CityProp3D <21*FP_1,FP_1*333/20,FP_1*4/5,FP_1*6/5,35,OFFSET hallStreetLife3D> CityProp3D <24*FP_1,FP_1*333/20,FP_1,3*FP_1,3,OFFSET cityPropsPack3D> CityProp3D <27*FP_1,FP_1*259/20,FP_1,3*FP_1,3,OFFSET cityPropsPack3D> ; These props continue beyond the first intersection, where the camera can see them. CityProp3D <33*FP_1,FP_1*333/20,FP_1*3/5,FP_1/2,33,OFFSET hallStreetLife3D> CityProp3D <37*FP_1,FP_1*259/20,FP_1*4/5,FP_1*6/5,35,OFFSET hallStreetLife3D> CityProp3D <36*FP_1,FP_1*333/20,FP_1,3*FP_1,3,OFFSET cityPropsPack3D> CityProp3D <39*FP_1,FP_1*259/20,FP_1*3/5,FP_1*11/10,38,OFFSET hallStreetLife3D> CityProp3D <44*FP_1,FP_1*259/20,FP_1,3*FP_1,3,OFFSET cityPropsPack3D> CityProp3D <45*FP_1,FP_1*333/20,2*FP_1,FP_1*17/10,39,OFFSET hallStreetLife3D> CityProp3D <20*FP_1,FP_1*333/20,2*FP_1,FP_1*17/10,39,OFFSET hallStreetLife3D> CityProp3D <26*FP_1,FP_1*333/20,FP_1/4,FP_1*23/50,36,OFFSET hallStreetLife3D> CityProp3D <19*FP_1,FP_1*333/20,FP_1/4,FP_1*23/50,36,OFFSET hallStreetLife3D> CityProp3D <13*FP_1,FP_1*259/20,FP_1/4,FP_1*23/50,36,OFFSET hallStreetLife3D> cityObjectsEnd3D LABEL BYTE .errnz ((cityObjectsEnd3D-cityObjects3D)/SIZEOF CityProp3D)-CITY_PROP_COUNT cityWalkRoutes3D CityWalkRoute3D <(cityNearMan3D-cityObjects3D)/SIZEOF CityProp3D,10*FP_1,28*FP_1,FP_1*253/20,0,32000,0,140> CityWalkRoute3D <(cityFarWoman3D-cityObjects3D)/SIZEOF CityProp3D,10*FP_1,28*FP_1,16*FP_1+FP_HALF,32000,32000,16,160> CityWalkRoute3D <(cityNearWoman3D-cityObjects3D)/SIZEOF CityProp3D,11*FP_1,27*FP_1,FP_1*63/5,21000,30000,16,155> CityWalkRoute3D <(cityFarMan3D-cityObjects3D)/SIZEOF CityProp3D,10*FP_1,28*FP_1,16*FP_1+FP_HALF,13000,34000,0,145> CityWalkRoute3D <(cityEntryMan3D-cityObjects3D)/SIZEOF CityProp3D,11*FP_1,29*FP_1,FP_1*253/20,4000,31000,0,140> CityWalkRoute3D <(cityEntryWoman3D-cityObjects3D)/SIZEOF CityProp3D,12*FP_1,30*FP_1,16*FP_1+FP_HALF,18000,30000,16,160> IFDEF CASINO_ACTION_TEST cityVisiblePixels3D dd CITY_PROP_COUNT dup(0) ENDIF cityObjectOrder3D dd CITY_PROP_COUNT dup(0) cityObjectDepth3D dd CITY_PROP_COUNT dup(0) .data? cityLightMap3D dd CITY_LIGHT_W*CITY_LIGHT_H dup(?) cityDepthBuffer3D dd SCREEN_SIZE dup(?) IFDEF CASINO_ACTION_TEST cityPixelOwner3D dd SCREEN_SIZE dup(?) ENDIF .code