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.
274 lines
6.4 KiB
PHP
274 lines
6.4 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
|
|
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
|
|
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
|