comparison Render.cpp @ 638:ccf8b4815a1f

GetActorTintColor fixed Outdoor sunlight works on terrain & bmodels (not sure about billboards though)
author Nomad
date Mon, 11 Mar 2013 21:43:26 +0200
parents d7b14091e434
children 4f2837124c69
comparison
equal deleted inserted replaced
637:d7b14091e434 638:ccf8b4815a1f
336 { 336 {
337 LOBYTE(v4->field_32) |= 2u; 337 LOBYTE(v4->field_32) |= 2u;
338 v14 = *(int *)&v4->flags; 338 v14 = *(int *)&v4->flags;
339 if ( v14 & 0x10 && v4->field_59 != 5 ) 339 if ( v14 & 0x10 && v4->field_59 != 5 )
340 { 340 {
341 dword_80AA20 = (v4->field_5C - 64) << 25; 341 dword_80AA20 = (v4->terrain_grid_z - 64) << 25;
342 dword_80AA1C = dword_80AA20 + 0x1FF0000; 342 dword_80AA1C = dword_80AA20 + 0x1FF0000;
343 dword_80AA14 = (v4->field_5D << 25) + 0x7FFF0000; 343 dword_80AA14 = (v4->terrain_grid_x << 25) + 0x7FFF0000;
344 dword_80AA18 = dword_80AA14 - 0x1FF0000; 344 dword_80AA18 = dword_80AA14 - 0x1FF0000;
345 byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo( 345 byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo(
346 v4->field_5C, 346 v4->terrain_grid_z,
347 v4->field_5D - 1) >> 9) & 1; 347 v4->terrain_grid_x - 1) >> 9) & 1;
348 if ( *(int *)&v4->flags & 2 || (v15 = *(int *)&v4->flags, BYTE1(v15) & 1) ) 348 if ( *(int *)&v4->flags & 2 || (v15 = *(int *)&v4->flags, BYTE1(v15) & 1) )
349 { 349 {
350 if ( *(int *)&v4->flags & 2 ) 350 if ( *(int *)&v4->flags & 2 )
351 { 351 {
352 while ( 1 ) 352 while ( 1 )
370 v4->pTexture = (Texture *)(v17 != -1 ? (int)&pBitmaps_LOD->pTextures[v17] : 0); 370 v4->pTexture = (Texture *)(v17 != -1 ? (int)&pBitmaps_LOD->pTextures[v17] : 0);
371 if ( pOutdoorCamera->outdoor_no_wavy_water ) 371 if ( pOutdoorCamera->outdoor_no_wavy_water )
372 sr_sub_48408A_prolly_odm_water_no_waves(v3); 372 sr_sub_48408A_prolly_odm_water_no_waves(v3);
373 else 373 else
374 sr_sub_485407_prolly_odm_water_wavy(v3); 374 sr_sub_485407_prolly_odm_water_wavy(v3);
375 v18 = v4->field_5C - 64; 375 v18 = v4->terrain_grid_z - 64;
376 v4->pTexture = v16; 376 v4->pTexture = v16;
377 dword_80AA20 = v18 << 25; 377 dword_80AA20 = v18 << 25;
378 dword_80AA1C = (v18 << 25) + 0x1FF0000; 378 dword_80AA1C = (v18 << 25) + 0x1FF0000;
379 dword_80AA14 = (v4->field_5D << 25) + 0x7FFF0000; 379 dword_80AA14 = (v4->terrain_grid_x << 25) + 0x7FFF0000;
380 dword_80AA18 = dword_80AA14 - 0x1FF0000; 380 dword_80AA18 = dword_80AA14 - 0x1FF0000;
381 byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo( 381 byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo(
382 v4->field_5C, 382 v4->terrain_grid_z,
383 v4->field_5D - 1) >> 9) & 1; 383 v4->terrain_grid_x - 1) >> 9) & 1;
384 sr_sub_484442(v3); 384 sr_sub_484442(v3);
385 v3->field_E = LOWORD(unnamed_6BE060[1]); 385 v3->field_E = LOWORD(unnamed_6BE060[1]);
386 if ( v4->prolly_tail == v3 ) 386 if ( v4->prolly_tail == v3 )
387 break; 387 break;
388 v3 = v3->pNext; 388 v3 = v3->pNext;
425 } 425 }
426 else 426 else
427 { 427 {
428 if ( v19 == 1 ) 428 if ( v19 == 1 )
429 { 429 {
430 dword_80AA20 = (v4->field_5C - 64) << 25; 430 dword_80AA20 = (v4->terrain_grid_z - 64) << 25;
431 dword_80AA1C = dword_80AA20 + 33488896; 431 dword_80AA1C = dword_80AA20 + 33488896;
432 dword_80AA14 = (v4->field_5D << 25) + 0x7FFF0000; 432 dword_80AA14 = (v4->terrain_grid_x << 25) + 0x7FFF0000;
433 dword_80AA18 = dword_80AA14 - 33488896; 433 dword_80AA18 = dword_80AA14 - 33488896;
434 byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo( 434 byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo(
435 v4->field_5C, 435 v4->terrain_grid_z,
436 v4->field_5D - 1) >> 9) & 1; 436 v4->terrain_grid_x - 1) >> 9) & 1;
437 while ( 1 ) 437 while ( 1 )
438 { 438 {
439 if ( !sr_sub_4847EB(v3) ) 439 if ( !sr_sub_4847EB(v3) )
440 sr_sub_48585C_mb_DrawSpan(v3, &pRenderer->pTargetSurface[v3->field_8 + 640 * v3->field_A], 0); 440 sr_sub_48585C_mb_DrawSpan(v3, &pRenderer->pTargetSurface[v3->field_8 + 640 * v3->field_A], 0);
441 v3->field_E = LOWORD(unnamed_6BE060[1]); 441 v3->field_E = LOWORD(unnamed_6BE060[1]);
604 || (array_77EC08[1999]._48607B(&stru_8019C8), 604 || (array_77EC08[1999]._48607B(&stru_8019C8),
605 array_77EC08[1999].ptr_38->_48694B(), 605 array_77EC08[1999].ptr_38->_48694B(),
606 v2 = (stru148 *)&pBitmaps_LOD->pTextures[pOutdoor->uMainTile_BitmapID], 606 v2 = (stru148 *)&pBitmaps_LOD->pTextures[pOutdoor->uMainTile_BitmapID],
607 (array_77EC08[1999].pTexture = (Texture *)(pOutdoor->uMainTile_BitmapID != -1 ? (int)v2 : 0)) == 0) ) 607 (array_77EC08[1999].pTexture = (Texture *)(pOutdoor->uMainTile_BitmapID != -1 ? (int)v2 : 0)) == 0) )
608 return (signed __int16)v2; 608 return (signed __int16)v2;
609 array_77EC08[1999].field_58 = 23 - (-20 * pOutdoor->vSunlight.z >> 16); 609 array_77EC08[1999].dimming_level = 23 - (-20 * pOutdoor->vSunlight.z >> 16);
610 if ( array_77EC08[1999].field_58 > 20 ) 610 if ( array_77EC08[1999].dimming_level > 20 )
611 array_77EC08[1999].field_58 = 20; 611 array_77EC08[1999].dimming_level = 20;
612 v10 = stru_5C6E00->Sin(pIndoorCamera->sRotationX); 612 v10 = stru_5C6E00->Sin(pIndoorCamera->sRotationX);
613 array_77EC08[1999].v_18.y = 0; 613 array_77EC08[1999].v_18.y = 0;
614 array_77EC08[1999].v_18.x = v10; 614 array_77EC08[1999].v_18.x = v10;
615 array_77EC08[1999].v_18.z = stru_5C6E00->Cos(pIndoorCamera->sRotationX); 615 array_77EC08[1999].v_18.z = stru_5C6E00->Cos(pIndoorCamera->sRotationX);
616 array_77EC08[1999].field_24 = 2048 - (pIndoorCamera->pos.z << 16); 616 array_77EC08[1999].field_24 = 2048 - (pIndoorCamera->pos.z << 16);
623 array_77EC08[1999].ptr_38->_48694B(); 623 array_77EC08[1999].ptr_38->_48694B();
624 v2 = (stru148 *)&pBitmaps_LOD->pTextures[pOutdoor->uSky_TextureID]; 624 v2 = (stru148 *)&pBitmaps_LOD->pTextures[pOutdoor->uSky_TextureID];
625 array_77EC08[1999].pTexture = (Texture *)(pOutdoor->uSky_TextureID != -1 ? (int)v2 : 0); 625 array_77EC08[1999].pTexture = (Texture *)(pOutdoor->uSky_TextureID != -1 ? (int)v2 : 0);
626 if ( !(pOutdoor->uSky_TextureID != -1 ? (int)v2 : 0) ) 626 if ( !(pOutdoor->uSky_TextureID != -1 ? (int)v2 : 0) )
627 return (signed __int16)v2; 627 return (signed __int16)v2;
628 array_77EC08[1999].field_58 = 0; 628 array_77EC08[1999].dimming_level = 0;
629 v11 = stru_5C6E00->Sin(pIndoorCamera->sRotationX + 16); 629 v11 = stru_5C6E00->Sin(pIndoorCamera->sRotationX + 16);
630 array_77EC08[1999].v_18.y = 0; 630 array_77EC08[1999].v_18.y = 0;
631 array_77EC08[1999].v_18.x = -v11; 631 array_77EC08[1999].v_18.x = -v11;
632 array_77EC08[1999].v_18.z = -stru_5C6E00->Cos(pIndoorCamera->sRotationX + 16); 632 array_77EC08[1999].v_18.z = -stru_5C6E00->Cos(pIndoorCamera->sRotationX + 16);
633 LOWORD(v2) = 224 * LOWORD(pMiscTimer->uTotalGameTimeElapsed); 633 LOWORD(v2) = 224 * LOWORD(pMiscTimer->uTotalGameTimeElapsed);
1820 if (v58 == 4) // if all y == first y; primitive in xz plane 1820 if (v58 == 4) // if all y == first y; primitive in xz plane
1821 v8->field_32 |= 0x0001; 1821 v8->field_32 |= 0x0001;
1822 v8->pODMFace = nullptr; 1822 v8->pODMFace = nullptr;
1823 v8->uNumVertices = 4; 1823 v8->uNumVertices = 4;
1824 v8->field_59 = 5; 1824 v8->field_59 = 5;
1825 v8->field_58 = 0; 1825
1826
1827 uint norm_idx = pTerrainNormalIndices[2 * (x + 128 * z) + 1];
1828 assert(norm_idx < uNumTerrainNormals);
1829
1830 auto norm = pTerrainNormals + norm_idx;
1831 float _f = (norm->x * (float)pOutdoor->vSunlight.x / 65536.0 -
1832 norm->y * (float)pOutdoor->vSunlight.y / 65536.0 -
1833 norm->z * (float)pOutdoor->vSunlight.z / 65536.0);
1834 v8->dimming_level = 20.0 - floorf(20.0 * _f + 0.5f);
1835
1826 ++pOutdoorCamera->numStru148s; 1836 ++pOutdoorCamera->numStru148s;
1827 ++pOutdoorCamera->field_44; 1837 ++pOutdoorCamera->field_44;
1828 assert(pOutdoorCamera->numStru148s < 20000); 1838 assert(pOutdoorCamera->numStru148s < 20000);
1829 1839
1830 v8->uBModelID = 0; 1840 v8->uBModelID = 0;
1998 v83 = *(/*short **/_WORD *)(a3 + 4); 2008 v83 = *(/*short **/_WORD *)(a3 + 4);
1999 X = abs(*(/*short **/_WORD *)(a3 + 6)); 2009 X = abs(*(/*short **/_WORD *)(a3 + 6));
2000 v4 = 0; 2010 v4 = 0;
2001 v88 = 0; 2011 v88 = 0;
2002 v84 = v3 - 1; 2012 v84 = v3 - 1;
2003 v90 = (float)pOutdoor->vSunlight.x / 65536,0; 2013 v90 = (float)pOutdoor->vSunlight.x / 65536.0;
2004 v91 = (float)pOutdoor->vSunlight.y / 65536.0; 2014 v91 = (float)pOutdoor->vSunlight.y / 65536.0;
2005 v92 = (float)pOutdoor->vSunlight.z / 65536.0; 2015 v92 = (float)pOutdoor->vSunlight.z / 65536.0;
2006 if ( v3 - 1 > 0 ) 2016 if ( v3 - 1 > 0 )
2007 { 2017 {
2008 while ( 1 ) 2018 while ( 1 )
2065 v19 = v97; 2075 v19 = v97;
2066 v16->flags = 0x8010 |pOutdoor->GetSomeOtherTileInfo(sX, sY); 2076 v16->flags = 0x8010 |pOutdoor->GetSomeOtherTileInfo(sX, sY);
2067 v16->field_32 = 0; 2077 v16->field_32 = 0;
2068 v20 = v93; 2078 v20 = v93;
2069 v16->field_59 = 1; 2079 v16->field_59 = 1;
2070 v16->field_5D = (char)v19; 2080 v16->terrain_grid_x = (char)v19;
2071 v16->field_34 = *(_WORD *)(v20 + 2); 2081 v16->field_34 = *(_WORD *)(v20 + 2);
2072 v21 = v89; 2082 v21 = v89;
2073 v16->field_5C = v89; 2083 v16->terrain_grid_z = v89;
2074 v22 = pTerrainNormalIndices[2 * (v19 + 128 * v21) + 1]; 2084 v22 = pTerrainNormalIndices[2 * (v19 + 128 * v21) + 1];
2075 if ( v22 < 0 || v22 > uNumTerrainNormals - 1 ) 2085 if ( v22 < 0 || v22 > uNumTerrainNormals - 1 )
2076 v23 = 0; 2086 v23 = 0;
2077 else 2087 else
2078 v23 = &pTerrainNormals[v22]; 2088 v23 = &pTerrainNormals[v22];
2079 v24 = v92 * v23->y; 2089 v24 = v92 * v23->z;
2080 //v99 = v23; 2090 //v99 = v23;
2081 thisf = 20.0 - (-v24 - v91 * v23->z - v90 * v23->x) * 20.0; 2091 thisf = 20.0 - (-v24 - v91 * v23->y - v90 * v23->x) * 20.0;
2082 //v25 = thisf + 6.7553994e15; 2092 //v25 = thisf + 6.7553994e15;
2083 //v27 = pOutdoorCamera->numStru148s > 1999; 2093 //v27 = pOutdoorCamera->numStru148s > 1999;
2084 //v26 = pOutdoorCamera->numStru148s - 1999 < 0; 2094 //v26 = pOutdoorCamera->numStru148s - 1999 < 0;
2085 v16->field_58 = floorf(thisf + 0.5f); 2095 v16->dimming_level = floorf(thisf + 0.5f);
2086 if ( pOutdoorCamera->numStru148s >= 1999 ) 2096 if ( pOutdoorCamera->numStru148s >= 1999 )
2087 return; 2097 return;
2088 ++pOutdoorCamera->numStru148s; 2098 ++pOutdoorCamera->numStru148s;
2089 //if ( !sub_481FC9(v8, pVertices, v101, v16) )//Ritor1: It's temporary 2099 //if ( !sub_481FC9(v8, pVertices, v101, v16) )//Ritor1: It's temporary
2090 //goto LABEL_126; 2100 //goto LABEL_126;
2140 v33 = 3; 2150 v33 = 3;
2141 else 2151 else
2142 v33 = v108 != 0 ? 5 : 0; 2152 v33 = v108 != 0 ? 5 : 0;
2143 static_sub_0048034E_stru_154._49B0C9(v23, v95); 2153 static_sub_0048034E_stru_154._49B0C9(v23, v95);
2144 if ( pDecalBuilder->uNumDecals > 0 ) 2154 if ( pDecalBuilder->uNumDecals > 0 )
2145 pDecalBuilder->ApplyDecals(31 - v16->field_58, 4, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, *(float *)&v33, -1); 2155 pDecalBuilder->ApplyDecals(31 - v16->dimming_level, 4, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, *(float *)&v33, -1);
2146 } 2156 }
2147 if ( stru_F8AD28.uNumLightsApplied > 0 ) 2157 if ( stru_F8AD28.uNumLightsApplied > 0 )
2148 pGame->pLightmapBuilder->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, v33); 2158 pGame->pLightmapBuilder->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, v33);
2149 v34 = a5; 2159 v34 = a5;
2150 //v35 = byte_4D864C == 0; 2160 //v35 = byte_4D864C == 0;
2203 BYTE1(v42) |= 0x80u; 2213 BYTE1(v42) |= 0x80u;
2204 v43 = pGame->pLightmapBuilder; 2214 v43 = pGame->pLightmapBuilder;
2205 *(int *)&v40->flags = v42; 2215 *(int *)&v40->flags = v42;
2206 v44 = v93; 2216 v44 = v93;
2207 v40->field_59 = 1; 2217 v40->field_59 = 1;
2208 v40->field_5D = (char)v43; 2218 v40->terrain_grid_x = (char)v43;
2209 v40->field_34 = *(_WORD *)(v44 + 2); 2219 v40->field_34 = *(_WORD *)(v44 + 2);
2210 v45 = v89; 2220 v45 = v89;
2211 v40->field_5C = v89; 2221 v40->terrain_grid_z = v89;
2212 v46 = 4 * ((char)v43 + (v45 << 7)); 2222 v46 = 4 * ((char)v43 + (v45 << 7));
2213 v85 = v46; 2223 v85 = v46;
2214 v47 = *(unsigned __int16 *)((char *)pTerrainNormalIndices + v46 + 2);// v47 = pTerrainNormalIndices[v46 + 1]; 2224 v47 = *(unsigned __int16 *)((char *)pTerrainNormalIndices + v46 + 2);// v47 = pTerrainNormalIndices[v46 + 1];
2215 if ( v47 < 0 || v47 > (signed int)(uNumTerrainNormals - 1) ) 2225 if ( v47 < 0 || v47 > (signed int)(uNumTerrainNormals - 1) )
2216 v48 = 0; 2226 v48 = 0;
2218 v48 = &pTerrainNormals[v47]; 2228 v48 = &pTerrainNormals[v47];
2219 v49 = v92 * v48->y; 2229 v49 = v92 * v48->y;
2220 //v99 = v48; 2230 //v99 = v48;
2221 thisg = 20.0 - (-v49 - v91 * v48->z - v90 * v48->x) * 20.0; 2231 thisg = 20.0 - (-v49 - v91 * v48->z - v90 * v48->x) * 20.0;
2222 v50 = thisg + 6.755399441055744e15; 2232 v50 = thisg + 6.755399441055744e15;
2223 v40->field_58 = LOBYTE(v50); 2233 v40->dimming_level = LOBYTE(v50);
2224 if ( LOBYTE(v50) < 0 ) 2234 if ( LOBYTE(v50) < 0 )
2225 v40->field_58 = 0; 2235 v40->dimming_level = 0;
2226 if ( pOutdoorCamera->numStru148s >= 1999 ) 2236 if ( pOutdoorCamera->numStru148s >= 1999 )
2227 return; 2237 return;
2228 ++pOutdoorCamera->numStru148s; 2238 ++pOutdoorCamera->numStru148s;
2229 /*if ( !sub_481FC9(pVertices, pVertices2, v8, v40) ) // Ritor1: It's temporary 2239 /*if ( !sub_481FC9(pVertices, pVertices2, v8, v40) ) // Ritor1: It's temporary
2230 //goto LABEL_77; 2240 //goto LABEL_77;
2285 else 2295 else
2286 pVertices = (RenderVertexSoft *)(v108 != 0 ? 5 : 0); 2296 pVertices = (RenderVertexSoft *)(v108 != 0 ? 5 : 0);
2287 //a8 = (RenderVertexSoft *)(this_3a ? 3 : v108 != 0 ? 5 : 0); 2297 //a8 = (RenderVertexSoft *)(this_3a ? 3 : v108 != 0 ? 5 : 0);
2288 static_sub_0048034E_stru_76D590._49B0C9(v48, *(float *)&a4); 2298 static_sub_0048034E_stru_76D590._49B0C9(v48, *(float *)&a4);
2289 if ( pDecalBuilder->uNumDecals > 0 ) 2299 if ( pDecalBuilder->uNumDecals > 0 )
2290 pDecalBuilder->ApplyDecals(31 - v40->field_58, 4, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)pVertices, -1); 2300 pDecalBuilder->ApplyDecals(31 - v40->dimming_level, 4, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)pVertices, -1);
2291 } 2301 }
2292 if ( stru_F8AD28.uNumLightsApplied > 0 ) 2302 if ( stru_F8AD28.uNumLightsApplied > 0 )
2293 v96->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)pVertices); 2303 v96->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)pVertices);
2294 v55 = uNumVertices; 2304 v55 = uNumVertices;
2295 //v35 = byte_4D864C == 0; 2305 //v35 = byte_4D864C == 0;
2337 goto LABEL_162; 2347 goto LABEL_162;
2338 *(int *)&v59->flags = pOutdoor->GetSomeOtherTileInfo(sX, sY); 2348 *(int *)&v59->flags = pOutdoor->GetSomeOtherTileInfo(sX, sY);
2339 v61 = v93; 2349 v61 = v93;
2340 v59->field_59 = 1; 2350 v59->field_59 = 1;
2341 v59->field_34 = *(_WORD *)(v61 + 2); 2351 v59->field_34 = *(_WORD *)(v61 + 2);
2342 v59->field_5C = v89; 2352 v59->terrain_grid_z = v89;
2343 v59->field_5D = v97; 2353 v59->terrain_grid_x = v97;
2344 v62 = *(unsigned __int16 *)((char *)pTerrainNormalIndices + v85); 2354 v62 = *(unsigned __int16 *)((char *)pTerrainNormalIndices + v85);
2345 if ( v62 > (signed int)(uNumTerrainNormals - 1) ) 2355 if ( v62 > (signed int)(uNumTerrainNormals - 1) )
2346 v63 = 0; 2356 v63 = 0;
2347 else 2357 else
2348 v63 = &pTerrainNormals[v62]; 2358 v63 = &pTerrainNormals[v62];
2349 v64 = v92 * v63->y; 2359 v64 = v92 * v63->y;
2350 //v99 = v63; 2360 //v99 = v63;
2351 thish = 20.0 - (-v64 - v91 * v63->y - v90 * v63->x) * 20.0; 2361 thish = 20.0 - (-v64 - v91 * v63->y - v90 * v63->x) * 20.0;
2352 v59->field_58 = floorf(thish + 0.5f); 2362 v59->dimming_level = floorf(thish + 0.5f);
2353 if ( v59->field_58 < 0 ) 2363 if ( v59->dimming_level < 0 )
2354 v59->field_58 = 0; 2364 v59->dimming_level = 0;
2355 if ( pOutdoorCamera->numStru148s >= 1999 ) 2365 if ( pOutdoorCamera->numStru148s >= 1999 )
2356 return; 2366 return;
2357 ++pOutdoorCamera->numStru148s; 2367 ++pOutdoorCamera->numStru148s;
2358 if ( !sub_481FC9(v101, v102, pVertices2, v59) ) 2368 if ( !sub_481FC9(v101, v102, pVertices2, v59) )
2359 { 2369 {
2408 v70 = 3; 2418 v70 = 3;
2409 else 2419 else
2410 v70 = v108 != 0 ? 5 : 0; 2420 v70 = v108 != 0 ? 5 : 0;
2411 static_sub_0048034E_stru_76D578._49B0C9(v63, v87); 2421 static_sub_0048034E_stru_76D578._49B0C9(v63, v87);
2412 if ( pDecalBuilder->uNumDecals > 0 ) 2422 if ( pDecalBuilder->uNumDecals > 0 )
2413 pDecalBuilder->ApplyDecals(31 - v40->field_58, 4, &static_sub_0048034E_stru_76D578, v100, array_50AC10, 0, v70, -1); 2423 pDecalBuilder->ApplyDecals(31 - v40->dimming_level, 4, &static_sub_0048034E_stru_76D578, v100, array_50AC10, 0, v70, -1);
2414 } 2424 }
2415 if ( stru_F8AD28.uNumLightsApplied > 0 ) 2425 if ( stru_F8AD28.uNumLightsApplied > 0 )
2416 v96->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_76D578, v100, array_50AC10, 0, v70); 2426 v96->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_76D578, v100, array_50AC10, 0, v70);
2417 v71 = v59; 2427 v71 = v59;
2418 v72 = v100; 2428 v72 = v100;
2586 v86 = *(_WORD *)(a3 + 4); //v4; 2596 v86 = *(_WORD *)(a3 + 4); //v4;
2587 X = abs(*(_WORD *)(a3 + 6)); //v5 2597 X = abs(*(_WORD *)(a3 + 6)); //v5
2588 v6 = 0; 2598 v6 = 0;
2589 v90 = 0; 2599 v90 = 0;
2590 v81 = v3 - 1; 2600 v81 = v3 - 1;
2591 v95 = (double)pOutdoor->vSunlight.x * 0.000015258789; 2601 v95 = (double)pOutdoor->vSunlight.x / 65536.0;
2592 v96 = (double)pOutdoor->vSunlight.y * 0.000015258789; 2602 v96 = (double)pOutdoor->vSunlight.y / 65536.0;
2593 v97 = (double)pOutdoor->vSunlight.z * 0.000015258789; 2603 v97 = (double)pOutdoor->vSunlight.z / 65536.0;
2594 if ( v3 - 1 > 0 ) 2604 if ( v3 - 1 > 0 )
2595 { 2605 {
2596 while ( 1 ) 2606 while ( 1 )
2597 { 2607 {
2598 v7 = abs(X); 2608 v7 = abs(X);
2641 LOWORD(v19) = v19 | 0x8010; 2651 LOWORD(v19) = v19 | 0x8010;
2642 v20 = v99; 2652 v20 = v99;
2643 *(int *)&v17->flags = v19; 2653 *(int *)&v17->flags = v19;
2644 v21 = v92; 2654 v21 = v92;
2645 v17->field_59 = 1; 2655 v17->field_59 = 1;
2646 v17->field_5D = LOBYTE(v20); 2656 v17->terrain_grid_x = LOBYTE(v20);
2647 v17->field_34 = v21->distance; 2657 v17->field_34 = v21->distance;
2648 v22 = v94; 2658 v22 = v94;
2649 v17->field_5C = v94; 2659 v17->terrain_grid_z = v94;
2650 v23 = pTerrainNormalIndices[2 * (LODWORD(v20) + (v22 << 7)) + 1]; 2660 v23 = pTerrainNormalIndices[2 * (LODWORD(v20) + (v22 << 7)) + 1];
2651 if ( v23 < 0 || v23 > (signed int)(uNumTerrainNormals - 1) ) 2661 if ( v23 < 0 || v23 > (signed int)(uNumTerrainNormals - 1) )
2652 v24 = 0; 2662 v24 = 0;
2653 else 2663 else
2654 v24 = &pTerrainNormals[v23]; 2664 v24 = &pTerrainNormals[v23];
2659 if ( v25 < 0.0 ) 2669 if ( v25 < 0.0 )
2660 v25 = 0.0; 2670 v25 = 0.0;
2661 v99 = v25 * 31.0; 2671 v99 = v25 * 31.0;
2662 v76 = v99 + 6.7553994e15; 2672 v76 = v99 + 6.7553994e15;
2663 v84 = LODWORD(v76); 2673 v84 = LODWORD(v76);
2664 v17->field_58 = 31 - LOBYTE(v76); 2674 v17->dimming_level = 31 - LOBYTE(v76);
2665 } 2675 }
2666 else 2676 else
2667 { 2677 {
2668 v17->field_58 = 0; 2678 v17->dimming_level = 0;
2669 } 2679 }
2670 if ( pOutdoorCamera->numStru148s >= 1999 ) 2680 if ( pOutdoorCamera->numStru148s >= 1999 )
2671 return; 2681 return;
2672 ++pOutdoorCamera->numStru148s; 2682 ++pOutdoorCamera->numStru148s;
2673 if ( !sub_481FC9(v10, (RenderVertexSoft *)HIDWORD(v101), v102, v17) ) 2683 if ( !sub_481FC9(v10, (RenderVertexSoft *)HIDWORD(v101), v102, v17) )
2758 BYTE1(v40) |= 0x80u; 2768 BYTE1(v40) |= 0x80u;
2759 v41 = v99; 2769 v41 = v99;
2760 *(int *)&v38->flags = v40; 2770 *(int *)&v38->flags = v40;
2761 v42 = v92; 2771 v42 = v92;
2762 v38->field_59 = 1; 2772 v38->field_59 = 1;
2763 v38->field_5D = LOBYTE(v41); 2773 v38->terrain_grid_x = LOBYTE(v41);
2764 v38->field_34 = v42->distance; 2774 v38->field_34 = v42->distance;
2765 v43 = v94; 2775 v43 = v94;
2766 v38->field_5C = v94; 2776 v38->terrain_grid_z = v94;
2767 v44 = 2 * (LODWORD(v41) + (v43 << 7)); 2777 v44 = 2 * (LODWORD(v41) + (v43 << 7));
2768 LODWORD(v93) = v44 * 2; 2778 LODWORD(v93) = v44 * 2;
2769 v45 = pTerrainNormalIndices[v44 + 1]; 2779 v45 = pTerrainNormalIndices[v44 + 1];
2770 if ( v45 < 0 || v45 > (signed int)(uNumTerrainNormals - 1) ) 2780 if ( v45 < 0 || v45 > (signed int)(uNumTerrainNormals - 1) )
2771 v46 = 0; 2781 v46 = 0;
2778 if ( v47 < 0.0 ) 2788 if ( v47 < 0.0 )
2779 v47 = 0.0; 2789 v47 = 0.0;
2780 v88 = v47 * 31.0; 2790 v88 = v47 * 31.0;
2781 v74 = v88 + 6.7553994e15; 2791 v74 = v88 + 6.7553994e15;
2782 v87 = LODWORD(v74); 2792 v87 = LODWORD(v74);
2783 v38->field_58 = 31 - LOBYTE(v74); 2793 v38->dimming_level = 31 - LOBYTE(v74);
2784 } 2794 }
2785 else 2795 else
2786 { 2796 {
2787 v38->field_58 = 0; 2797 v38->dimming_level = 0;
2788 } 2798 }
2789 if ( v38->field_58 < 0 ) 2799 if ( v38->dimming_level < 0 )
2790 v38->field_58 = 0; 2800 v38->dimming_level = 0;
2791 if ( pOutdoorCamera->numStru148s >= 1999 ) 2801 if ( pOutdoorCamera->numStru148s >= 1999 )
2792 return; 2802 return;
2793 ++pOutdoorCamera->numStru148s; 2803 ++pOutdoorCamera->numStru148s;
2794 if ( !sub_481FC9((RenderVertexSoft *)HIDWORD(v101), v103, v104, v38) ) 2804 if ( !sub_481FC9((RenderVertexSoft *)HIDWORD(v101), v103, v104, v38) )
2795 goto LABEL_74; 2805 goto LABEL_74;
2847 goto LABEL_105; 2857 goto LABEL_105;
2848 *(int *)&v17->flags = pOutdoor->GetSomeOtherTileInfo(v101, v100); 2858 *(int *)&v17->flags = pOutdoor->GetSomeOtherTileInfo(v101, v100);
2849 v58 = v92; 2859 v58 = v92;
2850 v17->field_59 = 1; 2860 v17->field_59 = 1;
2851 v17->field_34 = v58->distance; 2861 v17->field_34 = v58->distance;
2852 v17->field_5C = v94; 2862 v17->terrain_grid_z = v94;
2853 v17->field_5D = LOBYTE(v99); 2863 v17->terrain_grid_x = LOBYTE(v99);
2854 v59 = *(unsigned __int16 *)((char *)pTerrainNormalIndices + LODWORD(v93)); 2864 v59 = *(unsigned __int16 *)((char *)pTerrainNormalIndices + LODWORD(v93));
2855 if ( v59 > (signed int)(uNumTerrainNormals - 1) ) 2865 if ( v59 > (signed int)(uNumTerrainNormals - 1) )
2856 { 2866 {
2857 pNormalb = 0; 2867 pNormalb = 0;
2858 v60 = 0; 2868 v60 = 0;
2868 if ( v61 < 0.0 ) 2878 if ( v61 < 0.0 )
2869 v61 = 0.0; 2879 v61 = 0.0;
2870 v93 = v61 * 31.0; 2880 v93 = v61 * 31.0;
2871 v72 = v93 + 6.7553994e15; 2881 v72 = v93 + 6.7553994e15;
2872 v83 = LODWORD(v72); 2882 v83 = LODWORD(v72);
2873 v17->field_58 = 31 - LOBYTE(v72); 2883 v17->dimming_level = 31 - LOBYTE(v72);
2874 } 2884 }
2875 else 2885 else
2876 { 2886 {
2877 v17->field_58 = 0; 2887 v17->dimming_level = 0;
2878 } 2888 }
2879 if ( v17->field_58 < 0 ) 2889 if ( v17->dimming_level < 0 )
2880 v17->field_58 = 0; 2890 v17->dimming_level = 0;
2881 if ( pOutdoorCamera->numStru148s >= 1999 ) 2891 if ( pOutdoorCamera->numStru148s >= 1999 )
2882 return; 2892 return;
2883 ++pOutdoorCamera->numStru148s; 2893 ++pOutdoorCamera->numStru148s;
2884 if ( !sub_481FC9(v102, v104, v103, v17) ) 2894 if ( !sub_481FC9(v102, v104, v103, v17) )
2885 { 2895 {
4476 LightmapBuilder *v53; // [sp+58h] [bp-10h]@3 4486 LightmapBuilder *v53; // [sp+58h] [bp-10h]@3
4477 unsigned int v54; // [sp+5Ch] [bp-Ch]@3 4487 unsigned int v54; // [sp+5Ch] [bp-Ch]@3
4478 unsigned int v55; // [sp+5Ch] [bp-Ch]@34 4488 unsigned int v55; // [sp+5Ch] [bp-Ch]@34
4479 unsigned int v56; // [sp+60h] [bp-8h]@12 4489 unsigned int v56; // [sp+60h] [bp-8h]@12
4480 int v57; // [sp+60h] [bp-8h]@34 4490 int v57; // [sp+60h] [bp-8h]@34
4481 HRESULT a2; // [sp+64h] [bp-4h]@4 4491 unsigned int a2; // [sp+64h] [bp-4h]@4
4482 4492
4483 v5 = this; 4493 v5 = this;
4484 v6 = 0; 4494 v6 = 0;
4485 if ( this->uNumD3DSceneBegins && (signed int)uNumVertices >= 3 ) 4495 if ( this->uNumD3DSceneBegins && (signed int)uNumVertices >= 3 )
4486 { 4496 {
4487 v7 = pGame->pLightmapBuilder; 4497 v7 = pGame->pLightmapBuilder;
4488 v53 = v7; 4498 v53 = v7;
4489 v54 = v7->std__vector_000004_size; 4499 v54 = v7->std__vector_000004_size;
4490 if ( v7->std__vector_000004_size) 4500 if ( v7->std__vector_000004_size)
4491 a2 = -1; 4501 a2 = 0xFFFFFFFF;
4492 pGame->_44EE30(a4, (int)&a2); 4502 pGame->AlterGamma_ODM(a4, &a2);
4493 if ( byte_4D864C && pGame->uFlags & 1 ) 4503 if ( byte_4D864C && pGame->uFlags & 1 )
4494 { 4504 {
4495 v8 = GetActorTintColor(a3->field_58, 0, array_50AC10[0].vWorldViewPosition.x, 0, 0); 4505 v8 = ::GetActorTintColor(a3->dimming_level, 0, array_50AC10[0].vWorldViewPosition.x, 0, 0);
4496 v7->_45D74F_MessWithLight(v8, 0); 4506 v7->_45D74F_MessWithLight(v8, 0);
4497 } 4507 }
4498 else 4508 else
4499 { 4509 {
4500 if ( !v54 || byte_4D864C && pGame->uFlags & 2 ) 4510 if ( !v54 || byte_4D864C && pGame->uFlags & 2 )
4512 v45 = (char *)&array_50AC10[0].vWorldViewPosition; 4522 v45 = (char *)&array_50AC10[0].vWorldViewPosition;
4513 v57 = (int)&d3d_vertex_buffer[0].pos.y; 4523 v57 = (int)&d3d_vertex_buffer[0].pos.y;
4514 v55 = uNumVertices; 4524 v55 = uNumVertices;
4515 do 4525 do
4516 { 4526 {
4517 a2 = GetActorTintColor(a3->field_58, 0, *(float *)v45, 0, 0); 4527 a2 = ::GetActorTintColor(a3->dimming_level, 0, *(float *)v45, 0, 0);
4518 pGame->_44EE30(a4, (int)&a2); 4528 pGame->AlterGamma_ODM(a4, &a2);
4519 v46 = v57; 4529 v46 = v57;
4520 v47 = *(float *)v45 * 1000.0 / (double)pOutdoorCamera->shading_dist_mist; 4530 v47 = *(float *)v45 * 1000.0 / (double)pOutdoorCamera->shading_dist_mist;
4521 *(int *)(v57 - 4) = *((int *)v45 + 3); 4531 *(int *)(v57 - 4) = *((int *)v45 + 3);
4522 *(int *)v57 = *((int *)v45 + 4); 4532 *(int *)v57 = *((int *)v45 + 4);
4523 *(int *)(v57 + 12) = a2; 4533 *(int *)(v57 + 12) = a2;
4574 *((int *)v9 - 1) = *((int *)v10 + 3); 4584 *((int *)v9 - 1) = *((int *)v10 + 3);
4575 v12 = v11 / (double)pOutdoorCamera->shading_dist_mist; 4585 v12 = v11 / (double)pOutdoorCamera->shading_dist_mist;
4576 v9->pFacePlane.vNormal.x = *((int *)v10 + 4); 4586 v9->pFacePlane.vNormal.x = *((int *)v10 + 4);
4577 *(float *)&v9->pFacePlane.vNormal.y = 1.0 - 1.0 / v12; 4587 *(float *)&v9->pFacePlane.vNormal.y = 1.0 - 1.0 / v12;
4578 *(float *)&v9->pFacePlane.vNormal.z = 1.0 / (*(float *)v10 + 0.0000001); 4588 *(float *)&v9->pFacePlane.vNormal.z = 1.0 / (*(float *)v10 + 0.0000001);
4579 v13 = GetActorTintColor(a3->field_58, 0, *(float *)v10, 0, 0); 4589 v13 = GetActorTintColor(a3->dimming_level, 0, *(float *)v10, 0, 0);
4580 v14 = a4; 4590 v14 = a4;
4581 v15 = *(float *)v10; 4591 v15 = *(float *)v10;
4582 a4->pFacePlane.dist = v13; 4592 a4->pFacePlane.dist = v13;
4583 if ( v5->bUsingSpecular ) 4593 if ( v5->bUsingSpecular )
4584 { 4594 {
7303 7313
7304 7314
7305 //----- (004A2031) -------------------------------------------------------- 7315 //----- (004A2031) --------------------------------------------------------
7306 unsigned int Render::GetActorTintColor(float a2, int tint, int a4, int a5, RenderBillboard *a6) 7316 unsigned int Render::GetActorTintColor(float a2, int tint, int a4, int a5, RenderBillboard *a6)
7307 { 7317 {
7318 __debugbreak(); // should not fire outside decal builder
7308 return ::GetActorTintColor(tint, a4, a2, a5, a6); 7319 return ::GetActorTintColor(tint, a4, a2, a5, a6);
7309 } 7320 }
7310 7321
7311 /*void Render::DrawTerrainPolygon_new(stru148 *a3, IDirect3DTexture2 *pTexture)//new function 7322 /*void Render::DrawTerrainPolygon_new(stru148 *a3, IDirect3DTexture2 *pTexture)//new function
7312 { 7323 {
7501 /* v9 = pGame->pLightmapBuilder; 7512 /* v9 = pGame->pLightmapBuilder;
7502 v65 = v9; 7513 v65 = v9;
7503 v10 = v9->std__vector_000004_size;*/ 7514 v10 = v9->std__vector_000004_size;*/
7504 if ( byte_4D864C && pGame->uFlags & 1 ) 7515 if ( byte_4D864C && pGame->uFlags & 1 )
7505 { 7516 {
7506 v11 = GetActorTintColor(a4->field_58, 0, array_50AC10[0].vWorldViewPosition.x, 0, 0); 7517 v11 = ::GetActorTintColor(a4->dimming_level, 0, array_50AC10[0].vWorldViewPosition.x, 0, 0);
7507 pGame->pLightmapBuilder->_45D74F_MessWithLight(v11, 0); 7518 pGame->pLightmapBuilder->_45D74F_MessWithLight(v11, 0);
7508 } 7519 }
7509 else 7520 else
7510 { 7521 {
7511 if (transparent || !pGame->pLightmapBuilder->std__vector_000004_size || 7522 if (transparent || !pGame->pLightmapBuilder->std__vector_000004_size ||
7544 *(int *)(v51 - 4) = *((int *)v52 + 3); 7555 *(int *)(v51 - 4) = *((int *)v52 + 3);
7545 v54 = v53 / (double)pOutdoorCamera->shading_dist_mist; 7556 v54 = v53 / (double)pOutdoorCamera->shading_dist_mist;
7546 *(int *)v51 = *((int *)v52 + 4); 7557 *(int *)v51 = *((int *)v52 + 4);
7547 *(float *)(v51 + 4) = 1.0 - 1.0 / v54; 7558 *(float *)(v51 + 4) = 1.0 - 1.0 / v54;
7548 *(float *)(v51 + 8) = 1.0 / (*(float *)v52 + 0.0000001); 7559 *(float *)(v51 + 8) = 1.0 / (*(float *)v52 + 0.0000001);
7549 v55 = GetActorTintColor(a4->field_58, 0, *(float *)v52, 0, 0); 7560 v55 = ::GetActorTintColor(a4->dimming_level, 0, *(float *)v52, 0, 0);
7550 v56 = a7; 7561 v56 = a7;
7551 v57 = *(float *)v52; 7562 v57 = *(float *)v52;
7552 *(int *)(a7 + 12) = v55; 7563 *(int *)(a7 + 12) = v55;
7553 if ( this->bUsingSpecular ) 7564 if ( this->bUsingSpecular )
7554 { 7565 {
7594 *(int *)(v12 - 4) = *((int *)v13 + 3); 7605 *(int *)(v12 - 4) = *((int *)v13 + 3);
7595 v15 = v14 / (double)pOutdoorCamera->shading_dist_mist; 7606 v15 = v14 / (double)pOutdoorCamera->shading_dist_mist;
7596 *(int *)v12 = *((int *)v13 + 4); 7607 *(int *)v12 = *((int *)v13 + 4);
7597 *(float *)(v12 + 4) = 1.0 - 1.0 / v15; 7608 *(float *)(v12 + 4) = 1.0 - 1.0 / v15;
7598 *(float *)(v12 + 8) = 1.0 / (*(float *)v13 + 0.0000001); 7609 *(float *)(v12 + 8) = 1.0 / (*(float *)v13 + 0.0000001);
7599 v16 = GetActorTintColor(a4->field_58, 0, *(float *)v13, 0, 0); 7610 v16 = GetActorTintColor(a4->dimming_level, 0, *(float *)v13, 0, 0);
7600 v17 = a7; 7611 v17 = a7;
7601 v18 = *(float *)v13; 7612 v18 = *(float *)v13;
7602 *(int *)(a7 + 12) = v16; 7613 *(int *)(a7 + 12) = v16;
7603 if ( this->bUsingSpecular ) 7614 if ( this->bUsingSpecular )
7604 { 7615 {
7736 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX; 7747 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX;
7737 pVertices[i].pos.y = array_50AC10[i].vWorldViewProjY; 7748 pVertices[i].pos.y = array_50AC10[i].vWorldViewProjY;
7738 pVertices[i].pos.z = 0.99989998; 7749 pVertices[i].pos.z = 0.99989998;
7739 pVertices[i].rhw = array_50AC10[i]._rhw; 7750 pVertices[i].rhw = array_50AC10[i]._rhw;
7740 7751
7741 pVertices[i].diffuse = GetActorTintColor(31, 0, array_50AC10[i].vWorldViewPosition.x, 1, 0); 7752 pVertices[i].diffuse = ::GetActorTintColor(31, 0, array_50AC10[i].vWorldViewPosition.x, true, false);
7742 v7 = 0; 7753 v7 = 0;
7743 if (this->bUsingSpecular) 7754 if (this->bUsingSpecular)
7744 { 7755 {
7745 v12 = array_50AC10[i].vWorldViewPosition.x; 7756 v12 = array_50AC10[i].vWorldViewPosition.x;
7746 v7 = sub_47C3D7_get_fog_related_stuff(0, 1, v12); 7757 v7 = sub_47C3D7_get_fog_related_stuff(0, 1, v12);
7814 { 7825 {
7815 v4 = a2; 7826 v4 = a2;
7816 if ( a2 >= 3 ) 7827 if ( a2 >= 3 )
7817 { 7828 {
7818 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); 7829 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7819 v5 = 31 - (a3->field_58 & 0x1F); 7830 v5 = 31 - (a3->dimming_level & 0x1F);
7820 if ( v5 < pOutdoor->field_CBC_terrain_triangles_shade_type ) 7831 if ( v5 < pOutdoor->max_terrain_dimming_level )
7821 v5 = pOutdoor->field_CBC_terrain_triangles_shade_type; 7832 v5 = pOutdoor->max_terrain_dimming_level;
7822 v6 = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8); 7833 v6 = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8);
7823 if ( a2 > 0 ) 7834 if ( a2 > 0 )
7824 { 7835 {
7825 v7 = (char *)&d3d_vertex_buffer[0].pos.y; 7836 v7 = (char *)&d3d_vertex_buffer[0].pos.y;
7826 v8 = (char *)&array_507D30[0].vWorldViewProjY; 7837 v8 = (char *)&array_507D30[0].vWorldViewProjY;
7901 //v9 = v59->std__vector_000004_size; 7912 //v9 = v59->std__vector_000004_size;
7902 7913
7903 auto uCorrectedColor = uColor; 7914 auto uCorrectedColor = uColor;
7904 if (pGame->pLightmapBuilder->std__vector_000004_size) 7915 if (pGame->pLightmapBuilder->std__vector_000004_size)
7905 uCorrectedColor = 0xFFFFFFFF; 7916 uCorrectedColor = 0xFFFFFFFF;
7906 pGame->AlterGamma(pFace, &uCorrectedColor); 7917 pGame->AlterGamma_BLV(pFace, &uCorrectedColor);
7907 7918
7908 if (byte_4D864C && pGame->uFlags & 1) 7919 if (byte_4D864C && pGame->uFlags & 1)
7909 { 7920 {
7910 __debugbreak(); 7921 __debugbreak();
7911 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); 7922 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false));
8568 v8 = Billboard_ProbablyAddToListAndSortByZOrder(a2->zbuffer_depth); 8579 v8 = Billboard_ProbablyAddToListAndSortByZOrder(a2->zbuffer_depth);
8569 8580
8570 v30 = (a2->_screenspace_x_scaler_packedfloat & 0xFFFF) / 65530.0 + HIWORD(a2->_screenspace_x_scaler_packedfloat); 8581 v30 = (a2->_screenspace_x_scaler_packedfloat & 0xFFFF) / 65530.0 + HIWORD(a2->_screenspace_x_scaler_packedfloat);
8571 v29 = (a2->_screenspace_y_scaler_packedfloat & 0xFFFF) / 65530.0 + HIWORD(a2->_screenspace_y_scaler_packedfloat); 8582 v29 = (a2->_screenspace_y_scaler_packedfloat & 0xFFFF) / 65530.0 + HIWORD(a2->_screenspace_y_scaler_packedfloat);
8572 8583
8573 unsigned int diffuse = GetActorTintColor(paletteSubindex, 0, a2->zbuffer_depth, 0, pBillboard); 8584 unsigned int diffuse = ::GetActorTintColor(paletteSubindex, 0, a2->zbuffer_depth, 0, pBillboard);
8574 if (a2->uTintColor & 0x00FFFFFF && bTinting) 8585 if (a2->uTintColor & 0x00FFFFFF && bTinting)
8575 { 8586 {
8576 diffuse = sub_4A19D8(a2->uTintColor, diffuse); 8587 diffuse = sub_4A19D8(a2->uTintColor, diffuse);
8577 if (a2->uTintColor & 0xFF000000) 8588 if (a2->uTintColor & 0xFF000000)
8578 diffuse = 0x007F7F7F & ((unsigned int)diffuse >> 1); 8589 diffuse = 0x007F7F7F & ((unsigned int)diffuse >> 1);