- 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
207 lines
9.6 KiB
PHP
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
|