KAZIK/src_graphics/rooftop_quality.inc
Artvasil09 1006ba444b fix: restore rooftop ground on Intel and fill canal frontage
Tessellate terrain and light-map surfaces for vertex-fog drivers, render animated water from the tiled mesh, request accurate fog and extend renderer diagnostics. Add canal-front buildings, raised quays, trees and benches while preserving the terrace and native runtime.

Update native regression coverage and shipping executables. Exclude laptop screenshots and local runtime data.
2026-10-27 19:24:00 +03:00

280 lines
6.7 KiB
PHP

; Quality changes only roof rendering. Simulation, collisions and other games stay native.
UpdateRoofQuality3D PROC uses ebx esi edi
cmp hallLevel3D,HALL_ROOF
jne roof_quality_apply
cmp engineMode,MODE_WALK
jne roof_quality_apply
mov eax,animationClock3D
cmp eax,roofQualityClock3D
je roof_quality_apply
mov roofQualityClock3D,eax
invoke Pressed3D,77h
test eax,eax
jz roof_quality_auto
inc roofQualityMode3D
cmp roofQualityMode3D,3
jb @F
mov roofQualityMode3D,0
mov roofAutoWidth3D,960
@@:
mov roofQualityToast3D,1800
mov roofQualitySlow3D,0
roof_quality_auto:
mov eax,deltaTime3D
cmp eax,100
jbe @F
mov eax,100
@@:
sub roofQualityToast3D,eax
jns @F
mov roofQualityToast3D,0
@@:
cmp roofQualityMode3D,0
jne roof_quality_apply
cmp roofAutoWidth3D,640
je roof_quality_apply
cmp deltaTime3D,34
jbe roof_quality_cool
add roofQualitySlow3D,eax
cmp roofQualitySlow3D,1000
jb roof_quality_apply
mov roofAutoWidth3D,640
mov roofQualitySlow3D,0
mov roofQualityToast3D,1800
jmp roof_quality_apply
roof_quality_cool:
sub roofQualitySlow3D,8
jns roof_quality_apply
mov roofQualitySlow3D,0
roof_quality_apply:
mov eax,roofAutoWidth3D
cmp roofQualityMode3D,0
je roof_quality_size
mov eax,640
cmp roofQualityMode3D,1
je roof_quality_size
mov eax,1280
roof_quality_size:
mov roofRenderW3D,eax
imul eax,3
shr eax,2
mov roofRenderH3D,eax
mov eax,roofRenderW3D
cmp eax,roofQualityMapW3D
je roof_quality_done
mov roofQualityMapW3D,eax
mov roofHDRenderClock3D,-1
xor esi,esi
roof_quality_x:
mov eax,esi
imul eax,roofRenderW3D
xor edx,edx
mov ecx,SCREEN_W
div ecx
mov ebx,eax
shl eax,2
mov roofQualityX3D[esi*4],eax
mov eax,esi
inc eax
imul eax,roofRenderW3D
xor edx,edx
div ecx
sub eax,ebx
mov roofQualityXCount3D[esi*4],eax
inc esi
cmp esi,SCREEN_W
jb roof_quality_x
xor esi,esi
roof_quality_y:
mov eax,esi
imul eax,roofRenderH3D
xor edx,edx
mov ecx,SCREEN_H
div ecx
mov ebx,eax
mov edi,ROOF_HD_H-1
sub edi,eax
imul edi,ROOF_HD_W*4
mov roofQualityY3D[esi*4],edi
mov eax,esi
inc eax
imul eax,roofRenderH3D
xor edx,edx
div ecx
sub eax,ebx
mov roofQualityYCount3D[esi*4],eax
inc esi
cmp esi,SCREEN_H
jb roof_quality_y
cmp roofHDReady3D,1
jne roof_quality_done
call WriteRoofRendererInfo3D
roof_quality_done:
ret
UpdateRoofQuality3D ENDP
ComposeRoofFrame3D PROC uses ebx esi edi
local rows:DWORD,y:DWORD,x:DWORD,targetRow:DWORD,repeatRow:DWORD
invoke GdiFlush
mov esi,roofHDBuffer3D
mov eax,ROOF_HD_H
sub eax,roofRenderH3D
imul eax,ROOF_HD_W*4
add eax,roofHDFinalPixels3D
mov edi,eax
mov eax,roofRenderH3D
mov rows,eax
roof_compose_background:
mov ecx,roofRenderW3D
rep movsd
mov eax,ROOF_HD_W
sub eax,roofRenderW3D
lea edi,[edi+eax*4]
dec rows
jnz roof_compose_background
xor esi,esi
mov y,0
roof_compose_row:
mov ebx,y
mov eax,roofQualityY3D[ebx*4]
add eax,roofHDFinalPixels3D
mov targetRow,eax
mov eax,roofQualityYCount3D[ebx*4]
mov repeatRow,eax
mov x,0
roof_compose_pixel:
mov eax,screenBuffer[esi*4]
cmp roofCityMask3D[esi],0
je roof_compose_opaque
cmp eax,roofHDBackdrop3D[esi*4]
je roof_compose_next
roof_compose_opaque:
mov ebx,x
mov edi,roofQualityX3D[ebx*4]
add edi,targetRow
mov [edi],eax
cmp roofQualityXCount3D[ebx*4],2
jne @F
mov [edi+4],eax
@@:
cmp repeatRow,2
jne roof_compose_next
mov [edi-ROOF_HD_W*4],eax
cmp roofQualityXCount3D[ebx*4],2
jne roof_compose_next
mov [edi-ROOF_HD_W*4+4],eax
roof_compose_next:
inc esi
inc x
cmp x,SCREEN_W
jb roof_compose_pixel
inc y
cmp y,SCREEN_H
jb roof_compose_row
ret
ComposeRoofFrame3D ENDP
RenderRoofQualityToast3D PROC
cmp roofQualityToast3D,0
je roof_quality_toast_done
mov eax,OFFSET roofQualityAutoText3D
cmp roofRenderW3D,640
jne @F
mov eax,OFFSET roofQualityEcoText3D
@@:
cmp roofQualityMode3D,2
jne @F
mov eax,OFFSET roofQualityHighText3D
@@:
push eax
invoke DrawBox,12,40,160,18,00151B1Eh
pop eax
invoke DrawString8x8,20,45,eax,00E8D7ADh
roof_quality_toast_done:
ret
RenderRoofQualityToast3D ENDP
WriteRoofLogString3D PROC uses ebx esi handle:DWORD,value:DWORD
local written:DWORD
mov ebx,handle
mov esi,value
test esi,esi
jnz @F
mov esi,OFFSET roofLogUnknown3D
@@:
xor ecx,ecx
roof_log_length:
cmp BYTE PTR [esi+ecx],0
je roof_log_write
inc ecx
jmp roof_log_length
roof_log_write:
invoke WriteFile,ebx,esi,ecx,ADDR written,0
ret
WriteRoofLogString3D ENDP
WriteRoofRendererInfo3D PROC uses ebx esi
local number[16]:BYTE
invoke CreateDirectoryA,OFFSET runtime3D,0
invoke CreateFileA,OFFSET roofLogPath3D,40000000h,1,0,2,80h,0
cmp eax,-1
je roof_log_done
mov ebx,eax
invoke WriteRoofLogString3D,ebx,OFFSET roofLogHeader3D
invoke WriteRoofLogString3D,ebx,OFFSET roofLogTerrain3D
invoke WriteRoofLogString3D,ebx,OFFSET roofLogTriangles3D
invoke FormatNumber,roofHDMeshScene3D[4],ADDR number
invoke WriteRoofLogString3D,ebx,ADDR number
invoke WriteRoofLogString3D,ebx,OFFSET roofLogNL3D
mov esi,0
roof_log_gl_string:
mov eax,OFFSET roofLogVendor3D
cmp esi,0
je @F
mov eax,OFFSET roofLogRenderer3D
cmp esi,1
je @F
mov eax,OFFSET roofLogVersion3D
@@:
invoke WriteRoofLogString3D,ebx,eax
xor eax,eax
cmp roofHDRC3D,0
je @F
mov eax,esi
add eax,1F00h
invoke glGetString,eax
@@:
invoke WriteRoofLogString3D,ebx,eax
invoke WriteRoofLogString3D,ebx,OFFSET roofLogNL3D
inc esi
cmp esi,3
jb roof_log_gl_string
invoke WriteRoofLogString3D,ebx,OFFSET roofLogStage3D
mov eax,roofHDStage3D
add al,'0'
mov roofLogDigit3D,al
invoke WriteRoofLogString3D,ebx,OFFSET roofLogDigit3D
invoke WriteRoofLogString3D,ebx,OFFSET roofLogNL3D
invoke WriteRoofLogString3D,ebx,OFFSET roofLogAssets3D
mov roofLogDigit3D,'0'
cmp roofCityArt3D.pixels,0
je @F
mov roofLogDigit3D,'1'
@@:
invoke WriteRoofLogString3D,ebx,OFFSET roofLogDigit3D
invoke WriteRoofLogString3D,ebx,OFFSET roofLogNL3D
invoke WriteRoofLogString3D,ebx,OFFSET roofLogWidth3D
mov eax,OFFSET roofLogMedium3D
cmp roofRenderW3D,960
je @F
mov eax,OFFSET roofLogSmall3D
cmp roofRenderW3D,640
je @F
mov eax,OFFSET roofLogLarge3D
@@:
invoke WriteRoofLogString3D,ebx,eax
invoke WriteRoofLogString3D,ebx,OFFSET roofLogNL3D
invoke CloseHandle,ebx
roof_log_done:
ret
WriteRoofRendererInfo3D ENDP