Mercurial > mm7
diff Render.cpp @ 2133:e378232bfd36
screenshot
author | Ritor1 |
---|---|
date | Tue, 31 Dec 2013 16:26:08 +0600 |
parents | 49de109bbab5 |
children | e99081a3a66a |
line wrap: on
line diff
--- a/Render.cpp Sun Dec 29 01:26:15 2013 +0600 +++ b/Render.cpp Tue Dec 31 16:26:08 2013 +0600 @@ -2195,7 +2195,7 @@ { int v5; // eax@8 FILE *pOutFile; // edi@10 - unsigned short * v8; // eax@11 + unsigned short *v8; // eax@11 int v9; // eax@13 int v10; // ecx@15 signed int v12; // eax@18 @@ -2299,9 +2299,15 @@ lineB = (char *)lineRGB + 2 * pitch; for ( uint x = 0; x < this->field_10; x++ ) { - lineRGB[x] = (signed int)(r_mask & *line_picture_data) >> (num_g_bits + num_b_bits + num_r_bits - 8); - lineG[x] = (signed int)(g_mask & *line_picture_data) >> (num_b_bits + num_g_bits - 8); - lineB[x] = (b_mask & *line_picture_data) << (8 - num_b_bits); + int p = *line_picture_data; + int for_rad = (pRenderer->uTargetGBits + pRenderer->uTargetBBits ); + int value = (pRenderer->uTargetRMask & *line_picture_data); + int result = (pRenderer->uTargetRMask & *line_picture_data) >> (pRenderer->uTargetGBits + pRenderer->uTargetBBits ); + lineRGB[x] = (pRenderer->uTargetRMask & *line_picture_data) >> (pRenderer->uTargetGBits + pRenderer->uTargetBBits );// + pRenderer->uTargetRBits - 8); + lineG[x] = (pRenderer->uTargetGMask & *line_picture_data) >> (pRenderer->uTargetBBits);// + pRenderer->uTargetGBits - 8); + int value2 = (pRenderer->uTargetGMask & *line_picture_data); + int result2 = (pRenderer->uTargetGMask & *line_picture_data) >> (pRenderer->uTargetBBits); + lineB[x] = (pRenderer->uTargetBMask & *line_picture_data);// << (8 - pRenderer->uTargetBBits); line_picture_data += 2; } } @@ -2343,29 +2349,23 @@ //----- (0049F1BC) -------------------------------------------------------- void Render::SaveWinnersCertificate(const char *a1) { - Render *v2; // esi@1 - __int16 v3; // di@1 - int v4; // eax@4 - char *v5; // ecx@4 unsigned int v6; // eax@8 - FILE *v7; // edi@10 + //FILE *v7; // edi@10 int v8; // ecx@11 - int v9; // eax@11 + unsigned short *v9; // eax@11 int v10; // eax@13 - const char *v11; // ecx@15 - unsigned __int8 v12; // dl@15 signed int v13; // eax@18 char v14; // zf@27 HRESULT v15; // eax@29 - char v16; // [sp+Ch] [bp-12Ch]@10 + char v16[56]; // [sp+Ch] [bp-12Ch]@10 __int16 v17; // [sp+44h] [bp-F4h]@10 - int Dst; // [sp+48h] [bp-F0h]@7 + DDSURFACEDESC2 Dst; // [sp+48h] [bp-F0h]@7 int v19; // [sp+58h] [bp-E0h]@8 unsigned __int16 *v20; // [sp+6Ch] [bp-CCh]@8 - char v21; // [sp+C4h] [bp-74h]@10 + char color_map[48]; // [sp+C4h] [bp-74h]@10 unsigned int v22; // [sp+F4h] [bp-44h]@11 - char *v23; // [sp+F8h] [bp-40h]@14 - int v24; // [sp+FCh] [bp-3Ch]@11 + char *lineB; // [sp+F8h] [bp-40h]@14 + int image_width; // [sp+FCh] [bp-3Ch]@11 int v25; // [sp+100h] [bp-38h]@4 FILE *File; // [sp+104h] [bp-34h]@3 char Str; // [sp+108h] [bp-30h]@10 @@ -2382,58 +2382,57 @@ char v38; // [sp+119h] [bp-1Fh]@10 __int16 v39; // [sp+11Ah] [bp-1Eh]@10 __int16 v40; // [sp+11Ch] [bp-1Ch]@10 - void *ptr; // [sp+120h] [bp-18h]@10 - unsigned __int16 *v42; // [sp+124h] [bp-14h]@8 - int v43; // [sp+128h] [bp-10h]@4 + char *lineRGB; // [sp+120h] [bp-18h]@10 + void *surface; // [sp+124h] [bp-14h]@8 + int pitch; // [sp+128h] [bp-10h]@4 char v44; // [sp+12Fh] [bp-9h]@25 - char *i; // [sp+130h] [bp-8h]@10 - unsigned __int8 v46; // [sp+137h] [bp-1h]@17 - - v2 = this; - v3 = 0; + char *lineG; // [sp+130h] [bp-8h]@10 + unsigned char pict_byte; // [sp+137h] [bp-1h]@17 + byte test_byte; + + int num_r_bits = 5; + int num_g_bits = 6; + int num_b_bits = 5; + + int r_mask = 0xF800; + int g_mask = 0x7E0; + int b_mask = 0x1F; + if ( !this->pRenderD3D || this->using_software_screen_buffer ) { ++dword_4EFA84; File = fopen(a1, "wb"); if ( File ) { - v4 = v2->field_10; - v5 = (char *)v2->field_14; - v25 = v4; - a1 = v5; - v43 = v4; - if ( v4 & 1 ) - v43 = v4 + 1; - if ( v2->pRenderD3D ) - { - memset(&Dst, 0, 0x7Cu); - Dst = 124; + v25 = this->field_10; + pitch = this->field_10; + if ( this->field_10 & 1 ) + pitch = this->field_10 + 1; + if ( this->pRenderD3D ) + { + memset(&Dst, 0, 0x7C); + Dst.dwSize = 124; if ( !pRenderer->LockSurface_DDraw4(pRenderer->pBackBuffer4, (DDSURFACEDESC2 *)&Dst, DDLOCK_WAIT) ) return; - __debugbreak(); // warning C4700: uninitialized local variable 'v20' used - v42 = v20; - __debugbreak(); // warning C4700: uninitialized local variable 'v19' used - v6 = v19 >> 1; - v3 = 0; + surface = Dst.lpSurface; + v6 = Dst.lPitch / 2; } else { pRenderer->BeginScene(); - //v42 = pRenderer->pTargetSurface; + surface = pRenderer->pTargetSurface; v6 = pRenderer->uTargetSurfacePitch; } - i = (char *)v6; - v33 = v25 - 1; - v31 = v3; - v34 = (short)a1 - 1; - v32 = v3; - v39 = v43; - memset(&v21, 0, 0x30u); - memset(&v16, 0, 0x38u); + v33 = this->field_10 - 1; + v31 = 0; + v34 = (short)this->field_14 - 1; + v32 = 0; + v39 = pitch; + memset(&color_map, 0, sizeof(color_map)); + memset(&v16, 0, sizeof(v16)); v37 = 0; Str = 10; v17 = 0; - v7 = File; v28 = 5; v29 = 1; v30 = 8; @@ -2441,96 +2440,71 @@ v36 = 75; v38 = 3; v40 = 1; - fwrite(&Str, 1u, 1u, File); - fwrite(&v28, 1u, 1u, v7); - fwrite(&v29, 1u, 1u, v7); - fwrite(&v30, 1u, 1u, v7); - fwrite(&v31, 2u, 1u, v7); - fwrite(&v32, 2u, 1u, v7); - fwrite(&v33, 2u, 1u, v7); - fwrite(&v34, 2u, 1u, v7); - fwrite(&v35, 2u, 1u, v7); - fwrite(&v36, 2u, 1u, v7); - fwrite(&v21, 0x30u, 1u, v7); - fwrite(&v37, 1u, 1u, v7); - fwrite(&v38, 1u, 1u, v7); - fwrite(&v39, 2u, 1u, v7); - fwrite(&v40, 2u, 1u, v7); - fwrite(&v16, 0x3Au, 1u, v7); - ptr = malloc(3 * v25 + 6); - if ( (signed int)a1 > 0 ) - { - v8 = v43; - File = (FILE *)a1; - v24 = 3 * v43; - v22 = 2 * (int)i; - v9 = (int)v42; - while ( 1 ) + fwrite(&Str, 1, 1, File); + fwrite(&v28, 1, 1, File); + fwrite(&v29, 1, 1, File); + fwrite(&v30, 1, 1, File); + fwrite(&v31, 2, 1, File); + fwrite(&v32, 2, 1, File); + fwrite(&v33, 2, 1, File); + fwrite(&v34, 2, 1, File); + fwrite(&v35, 2, 1, File); + fwrite(&v36, 2, 1, File); + fwrite(&color_map, 0x30, 1, File); + fwrite(&v37, 1, 1, File); + fwrite(&v38, 1, 1, File); + fwrite(&v39, 2, 1, File); + fwrite(&v40, 2, 1, File); + fwrite(&v16, 0x3A, 1, File); + lineRGB = (char *)malloc(3 * (v25 + 2)); + if ( (signed int)this->field_14 > 0 ) + { + image_width = 3 * pitch; + v9 = (unsigned short *)surface; + for ( uint j = 0; j < this->field_14; j++) { a1 = (const char *)v9; - v10 = 0; if ( v25 > 0 ) { - i = (char *)ptr + v8; - v23 = (char *)ptr + 2 * v43; - do + lineG = (char *)lineRGB + pitch; + lineB = (char *)lineRGB + 2 * pitch; + for ( v10 = 0; v10 < v25; v10++ ) { - *((char *)ptr + v10) = (signed int)(v2->uTargetRMask & *(short *)a1) >> (LOBYTE(v2->uTargetGBits) - + LOBYTE(v2->uTargetBBits) - + v2->uTargetRBits - - 8); - i[v10] = (signed int)(v2->uTargetGMask & *(short *)a1) >> (LOBYTE(v2->uTargetBBits) - + LOBYTE(v2->uTargetGBits) - - 8); - v11 = a1; - v12 = LOBYTE(v2->uTargetBMask); + lineRGB[v10] = (signed int)(r_mask & *(short *)a1) >> (num_g_bits + num_b_bits + num_r_bits - 8); + lineG[v10] = (signed int)(g_mask & *(short *)a1) >> (num_b_bits + num_g_bits - 8); + lineB[v10] = (b_mask & *(short *)a1) << (8 - num_b_bits); a1 += 2; - v23[v10++] = ((unsigned __int8)*v11 & v12) << (8 - LOBYTE(v2->uTargetBBits)); } - while ( v10 < v25 ); } - for ( i = 0; (signed int)i < v24; i += BYTE3(a1) ) + for ( uint i = 0; i < image_width; i += test_byte ) { - BYTE3(a1) = 1; - v46 = *((char *)ptr + (int)i); - do + pict_byte = lineRGB[i]; + for ( test_byte = 1; test_byte < 0x3F; test_byte ) { - v13 = (signed int)&i[BYTE3(a1)]; - if ( *((char *)ptr + v13) != v46 ) + v13 = i + test_byte; + if ( lineRGB[v13] != pict_byte ) break; - if ( !(v13 % v43) ) + if ( !(v13 % pitch) ) break; - ++BYTE3(a1); } - while ( BYTE3(a1) < 0x3Fu ); - if ( (signed int)&i[BYTE3(a1)] > v24 ) - BYTE3(a1) = 3 * v43 - (char)i; - if ( BYTE3(a1) > 1u || v46 >= 0xC0u ) + if ( i + test_byte > image_width ) + test_byte = 3 * pitch - i; + if ( test_byte > 1 || pict_byte >= 0xC0 ) { - v44 = BYTE3(a1) | 0xC0; - fwrite(&v44, 1u, 1u, v7); + v44 = test_byte | 0xC0; + fwrite(&v44, 1, 1, File); } - fwrite(&v46, 1u, 1u, v7); + fwrite(&pict_byte, 1, 1, File); } - v9 = (int)&v42[v22 / 2]; - v14 = File == (FILE *)1; - File = (FILE *)((char *)File - 1); - v42 = (unsigned __int16 *)((char *)v42 + v22); - if ( v14 ) - break; - v8 = v43; + v9 += pitch; } } - if ( v2->pRenderD3D ) - { + if ( this->pRenderD3D ) ErrD3D(pRenderer->pBackBuffer4->Unlock(0)); - } else - { pRenderer->EndScene(); - } - free(ptr); - fclose(v7); + free(lineRGB); + fclose(File); } } }