KAZIK/src_graphics/city_arrival_data.inc
Игорь Федосеев 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

207 lines
9.6 KiB
PHP

CITY_BLACK equ 0
CITY_WAKE equ 1
CITY_LIGHT equ 2
CITY_SMOKE equ 3
CITY_STAND equ 4
CITY_LOOK_BIN equ 5
CITY_TOSS equ 6
CITY_TURN_ALLEY equ 7
CITY_ALLEY equ 8
CITY_TURN_STREET equ 9
CITY_STREET equ 10
CITY_TURN_DOOR equ 11
CITY_DOOR equ 12
CITY_BLACK_MS equ 700
CITY_WAKE_MS equ 4500
CITY_LIGHT_MS equ 2300
CITY_SMOKE_MS equ 3600
CITY_STAND_MS equ 1800
CITY_LOOK_BIN_MS equ 1100
CITY_TOSS_MS equ 1500
CITY_TURN_ALLEY_MS equ 1200
CITY_PRE_ALLEY_MS equ CITY_BLACK_MS+CITY_WAKE_MS+CITY_LIGHT_MS+CITY_SMOKE_MS+CITY_STAND_MS+CITY_LOOK_BIN_MS+CITY_TOSS_MS+CITY_TURN_ALLEY_MS
CITY_TRAFFIC_OFFSET_MS equ CITY_PRE_ALLEY_MS-8900
CITY_BUILDING_STOREYS equ 7
CITY_STOREY_HEIGHT equ FP_1*9/5
HALL_STANDING_EYE equ FP_1*21/20
CITY_STANDING_EYE equ FP_1*23/20
LoadCityArrival3D PROTO
RenderCityArrival3D PROTO
HandleCityApproach3D PROTO
PositionCityCamera3D PROTO
DrawCityWakeActor3D PROTO
DrawCitySeatedLegs3D PROTO
DrawCityLighter3D PROTO
DrawCityWakeSubtitle3D PROTO
BlendCityWeatherPixel3D PROTO :DWORD,:DWORD,:DWORD,:DWORD
BlendCitySky3D PROTO :DWORD
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 HALL_STANDING_EYE
viewCeiling3D dd FP_1*5/2
cityPhase3D dd CITY_BLACK
cityTime3D dd 0
cityClock3D dd 0
cityDurations3D dd CITY_BLACK_MS,CITY_WAKE_MS,CITY_LIGHT_MS,CITY_SMOKE_MS,CITY_STAND_MS,CITY_LOOK_BIN_MS,CITY_TOSS_MS,CITY_TURN_ALLEY_MS,5400,900,7500,900,2800
cityTilesPack3D AnimPack3D <>
cityHandsPack3D AnimPack3D <>
cityPropsPack3D AnimPack3D <>
citySmokePack3D AnimPack3D <>
cityCarsPack3D AnimPack3D <>
cityBinPack3D AnimPack3D <>
cityCloudPack3D AnimPack3D <>
cityWakePack3D AnimPack3D <>
cityLighterPack3D AnimPack3D <>
cityKneesPack3D AnimPack3D <>
citySleevePack3D AnimPack3D <>
cityDecorPack3D AnimPack3D <>
cityWakePath3D db "assets\animations\arrival\wake-rocker-v2.bin",0
cityLighterPath3D db "assets\animations\arrival\wake-lighter-v1.bin",0
cityKneesPath3D db "assets\animations\arrival\wake-knees-v1.bin",0
citySleevePath3D db "assets\animations\arrival\wake-sleeve-v1.bin",0
cityDecorPath3D db "assets\animations\arrival\alley-materials-v1.bin",0
include src_graphics\city_lighter_anchors.inc
cityWakeLine1 db 194,241,242,224,226,224,233,44,32,241,224,236,243,240,224,233,44,0
cityWakeLine2 db 239,238,240,224,32,228,253,239,237,243,242,252,32,226,241,229,32,226,32,234,224,231,232,237,238,0
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
cityWakeActor3D CityProp3D <FP_1*97/10,FP_1*49/2,FP_1*7/10,FP_1*7/5,0,OFFSET cityWakePack3D>
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(?)
citySkyBuffer3D dd SCREEN_SIZE dup(?)
IFDEF CASINO_ACTION_TEST
cityPixelOwner3D dd SCREEN_SIZE dup(?)
ENDIF
.code