KAZIK/src_graphics/rooftop_city_life.inc
Artvasil09 41ba8f46ed feat: add rooftop city and optimize native terrace rendering
Add rooftop elevator, lounge, volumetric city, river and animated traffic. Prune invisible mesh faces, clip CPU surfaces, streamline compositing and add automatic/F8 roof quality profiles with renderer diagnostics.

Include dartboard/reticle improvements, tracked fortune orb numerals and fate-session visuals, native regression tests, compatible jukebox IDs and updated shipping executables.
2026-10-26 23:20:35 +03:00

156 lines
3.6 KiB
PHP

RenderRoofCityLamps3D PROC uses ebx esi edi
local px:DWORD,py:DWORD,x1:DWORD,y1:DWORD
xor esi,esi
roof_city_lamp:
mov eax,roofCityLamps3D[esi*8]
mov px,eax
mov edx,roofCityLamps3D[esi*8+4]
mov py,edx
invoke ProjectCityPoint3D,eax,edx
cmp edx,FP_1
jle roof_city_lamp_next
cmp edx,180*FP_1
ja roof_city_lamp_next
cmp eax,-8
jl roof_city_lamp_next
cmp eax,SCREEN_W+8
jg roof_city_lamp_next
mov eax,px
add eax,FP_1/12
mov x1,eax
mov eax,py
add eax,FP_1/12
mov y1,eax
invoke DrawRoofSolid3D,px,x1,py,y1,ROOF_CITY_STREET_Z,ROOF_CITY_STREET_Z+5*FP_1,ROOF_METAL
mov eax,px
sub eax,FP_1/5
mov edx,px
add edx,FP_1/5
mov ecx,py
sub ecx,FP_1/5
mov edi,py
add edi,FP_1/5
invoke DrawRoofSolid3D,eax,edx,ecx,edi,ROOF_CITY_STREET_Z+FP_1*49/10,ROOF_CITY_STREET_Z+FP_1*51/10,ROOF_LIGHT
roof_city_lamp_next:
inc esi
cmp esi,ROOF_CITY_LAMP_COUNT
jb roof_city_lamp
ret
RenderRoofCityLamps3D ENDP
DrawRoofCar3D PROC uses ebx esi edi centreX:DWORD,centreY:DWORD,axis:DWORD,style:DWORD
local x0:DWORD,x1:DWORD,y0:DWORD,y1:DWORD,bodyMat:DWORD,cabinX0:DWORD,cabinX1:DWORD
local cabinY0:DWORD,cabinY1:DWORD
invoke ProjectCityPoint3D,centreX,centreY
cmp edx,FP_1
jle roof_car_done
cmp eax,-30
jl roof_car_done
cmp eax,SCREEN_W+30
jg roof_car_done
mov ebx,FP_1*19/10
mov ecx,FP_1*8/10
cmp axis,0
je @F
xchg ebx,ecx
@@:
mov eax,centreX
sub eax,ebx
mov x0,eax
mov eax,centreX
add eax,ebx
mov x1,eax
mov eax,centreY
sub eax,ecx
mov y0,eax
mov eax,centreY
add eax,ecx
mov y1,eax
mov bodyMat,ROOF_CITY_ROOF
test style,1
jz @F
mov bodyMat,ROOF_BRASS
@@:
invoke DrawRoofSolid3D,x0,x1,y0,y1,ROOF_CITY_STREET_Z+FP_1/4,ROOF_CITY_STREET_Z+FP_1*85/100,bodyMat
mov ebx,FP_1*9/10
mov ecx,FP_1*65/100
cmp axis,0
je @F
xchg ebx,ecx
@@:
mov eax,centreX
sub eax,ebx
mov cabinX0,eax
mov eax,centreX
add eax,ebx
mov cabinX1,eax
mov eax,centreY
sub eax,ecx
mov cabinY0,eax
mov eax,centreY
add eax,ecx
mov cabinY1,eax
invoke DrawRoofSolid3D,cabinX0,cabinX1,cabinY0,cabinY1,ROOF_CITY_STREET_Z+FP_1*85/100,ROOF_CITY_STREET_Z+FP_1*135/100,ROOF_MODERN_FACADE+1
roof_car_done:
ret
DrawRoofCar3D ENDP
RenderRoofTraffic3D PROC uses ebx esi edi
local px:DWORD,py:DWORD,material:DWORD
xor esi,esi
roof_city_car:
mov eax,esi
imul eax,17000
add eax,animationClock3D
mov ecx,393
mul ecx
mov ecx,340*FP_1
div ecx
sub edx,160*FP_1
mov px,edx
mov py,-FP_1*59/10
test esi,1
jz @F
neg edx
mov px,edx
mov py,-FP_1*81/10
@@:
cmp esi,4
jb roof_city_car_x
mov eax,px
mov py,eax
mov px,FP_1*391/10
test esi,1
jz @F
mov px,FP_1*369/10
@@:
invoke DrawRoofCar3D,px,py,1,esi
jmp roof_city_car_next
roof_city_car_x:
invoke DrawRoofCar3D,px,py,0,esi
roof_city_car_next:
inc esi
cmp esi,8
jb roof_city_car
xor esi,esi
roof_city_boat:
imul eax,esi,47000
add eax,animationClock3D
mov ecx,98
mul ecx
mov ecx,340*FP_1
div ecx
sub edx,160*FP_1
mov px,edx
mov py,68*FP_1
invoke DrawRoofEllipsoid3D,px,py,ROOF_CITY_STREET_Z-FP_1*16/10,3*FP_1,FP_1,FP_1/2,ROOF_CITY_ROOF
mov eax,px
sub eax,FP_1
mov ebx,px
add ebx,FP_1
invoke DrawRoofSolid3D,eax,ebx,FP_1*674/10,FP_1*686/10,ROOF_CITY_STREET_Z-FP_1*14/10,ROOF_CITY_STREET_Z-FP_1*7/10,ROOF_PLASTER
inc esi
cmp esi,3
jb roof_city_boat
ret
RenderRoofTraffic3D ENDP