Mercurial > mm7
diff _deleted.cpp @ 1410:38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
stru167 -> TrailParticle
stru167warp -> TrailParticleGenerator
author | Nomad |
---|---|
date | Fri, 26 Jul 2013 22:19:29 +0200 |
parents | cc9a3a24d61d |
children | 3881d2f94eb1 |
line wrap: on
line diff
--- a/_deleted.cpp Fri Jul 26 21:16:51 2013 +0200 +++ b/_deleted.cpp Fri Jul 26 22:19:29 2013 +0200 @@ -1677,6 +1677,104 @@ return result; } +//----- (0047BC6F) -------------------------------------------------------- +unsigned __int16 *__fastcall sr_GetBillboardPalette(RenderBillboard *a1, int a2, signed int a3, int a4) +{ + int v4; // ebx@1 + int v6; // edx@4 + int v7; // ecx@5 + signed int v8; // eax@6 + signed __int64 v9; // qtt@11 + signed int v10; // eax@12 + int v11; // esi@17 + signed __int64 v12; // qtt@19 + double v13; // ST10_8@19 + int v14; // edi@25 + signed int v15; // edx@26 + signed __int64 v16; // qtt@29 + signed int v17; // eax@30 + int v18; // [sp+10h] [bp-8h]@1 + float a3a; // [sp+20h] [bp+8h]@19 + + v4 = a2; + v18 = a2; + if ( pParty->armageddon_timer ) + return PaletteManager::Get(a2); + if ( !pWeather->bNight ) + { + if (day_attrib & DAY_ATTRIB_FOG) + { + v14 = day_fogrange_1 << 16; + if ( a3 >= day_fogrange_1 << 16 ) + { + if ( a3 <= day_fogrange_2 << 16 ) + { + LODWORD(v16) = (a3 - v14) << 16; + HIDWORD(v16) = (a3 - v14) >> 16; + v15 = (unsigned __int64)(27 * v16 / ((day_fogrange_2 - day_fogrange_1) << 16)) >> 16; + } + else + { + v15 = 27; + } + } + else + { + v15 = 0; + } + v17 = _43F55F_get_billboard_light_level(a1, v15); + if ( v17 > 27 ) + v17 = 27; + if ( !a3 ) + v17 = 27; + v7 = v18; + v6 = v17; + return (unsigned __int16 *)PaletteManager::Get_Mist_or_Red_LUT(v7, v6, 1); + } + v11 = a4; + if ( a4 < 0 ) + v11 = 0; + LODWORD(v12) = a3 << 16; + HIDWORD(v12) = a3 >> 16; + a3a = (double)(signed int)(((unsigned __int64)(11 * v12 / (pOutdoorCamera->shading_dist_shade << 16)) >> 16) + 20) + * pOutdoor->fFogDensity; + v13 = a3a + 6.7553994e15; + v10 = _43F55F_get_billboard_light_level(a1, LODWORD(v13) + v11); + if ( v10 > 27 ) + v10 = 27; + if ( v10 < a4 ) + v10 = a4; + if ( v10 > pOutdoor->max_terrain_dimming_level ) + v10 = pOutdoor->max_terrain_dimming_level; + return PaletteManager::Get_Dark_or_Red_LUT(v4, v10, 1); + } + v6 = 0; + if (pWeather->bNight) + { + v8 = 67108864; + if ( (signed __int64)pParty->pPartyBuffs[PARTY_BUFF_TORCHLIGHT].uExpireTime > 0 ) + v8 = pParty->pPartyBuffs[PARTY_BUFF_TORCHLIGHT].uPower << 26; + if ( a3 <= v8 ) + { + if ( a3 > 0 ) + { + LODWORD(v9) = a3 << 16; + HIDWORD(v9) = a3 >> 16; + v6 = (unsigned __int64)(27 * v9 / v8) >> 16; + } + } + else + { + v6 = 27; + } + v10 = _43F55F_get_billboard_light_level(a1, v6); + if ( v10 > 27 || !a3 ) + v10 = 27; + return PaletteManager::Get_Dark_or_Red_LUT(v4, v10, 1); + } + v7 = 0; + return (unsigned __int16 *)PaletteManager::Get_Mist_or_Red_LUT(v7, v6, 1); +} //----- (00487389) -------------------------------------------------------- void Render::ExecOutdoorDrawSW() { @@ -3649,6 +3747,87 @@ return result; } +//----- (0047F4D3) -------------------------------------------------------- +void __fastcall _47F4D3_initialize_terrain_bezier_stuff(int band1, int band2, int band3) +{ + int v3; // edi@1 + //stru220 *v4; // esi@1 + double v5; // ST2C_8@3 + double v6; // st7@3 + //double v7; // [sp+18h] [bp-28h]@3 + //double v8; // [sp+20h] [bp-20h]@2 + int v9; // [sp+34h] [bp-Ch]@1 + int v10; // [sp+38h] [bp-8h]@1 + //signed int band3a; // [sp+48h] [bp+8h]@2 + + v9 = band2 * 512; + pOutdoorCamera->outdoor_grid_band_3 = band3; + v10 = band1 * 512; + v3 = band3 * 512; + pOutdoorCamera->uPickDepth = band3 * 512; + //v4 = terrain_76E5C8; // v4: 0 -> 65536 + for (uint i = 0; i < 16384; ++i) + //do + { + auto v4 = terrain_76E5C8[i]; + //band3a = 256; + //v8 = (double)(signed int)((char *)v4 + 256 - (int)terrain_76E5C8); + for (uint j = 0; j < 128; ++j) // band3a: 0 -> 128 + { + v5 = pow(j * 512 + 256, 2.0); + v6 = pow(i * 4 + 256, 2.0); + //*((float *)&v5 + 1) = sqrt(v6 + v5); + int v7 = floorf(sqrtf(v5 + v6) + 0.5f);//*((float *)&v5 + 1) + 6.7553994e15; + if (v7 >= v10) + { + if (v7 >= v9) + v4.field_0 = ((v7 >= v3) - 1) & 2; + else + v4.field_0 = 2; + } + else + { + v4.field_0 = 1; + } + //band3a += 512; + v4.distance = v7; + //++v4; + } + //while ( band3a < 65792 ); + } + //while ( (signed int)v4 < (signed int)arary_77E5C8 ); +} + +//----- (00481EFA) -------------------------------------------------------- +bool __fastcall _481EFA_clip_terrain_poly(RenderVertexSoft *a1, RenderVertexSoft *a2, RenderVertexSoft *a3, RenderVertexSoft *a4, int a5) +{ + RenderVertexSoft *v5; // esi@1 + RenderVertexSoft *v6; // edx@1 + bool v7; // edi@2 + bool v8; // ecx@5 + bool v9; // esi@8 + bool v10; // eax@11 + double v11; // st7@14 + signed int v12; // esi@15 + signed int v13; // edx@18 + signed int v14; // ecx@21 + signed int v15; // eax@24 + RenderVertexSoft *v17; // [sp+Ch] [bp-8h]@1 + + v5 = a2; + v6 = a1; + v17 = v5; + v7 = a1->vWorldViewPosition.x < 8.0; + v8 = v5->vWorldViewPosition.x < 8.0; + v9 = a3->vWorldViewPosition.x < 8.0; + v10 = a4->vWorldViewPosition.x < 8.0; + return !(v8 & v9 & v10 & v7) + && ((v11 = (double)pOutdoorCamera->shading_dist_mist, v11 > v6->vWorldViewPosition.x) ? (v12 = 0) : (v12 = 1), + v11 > v17->vWorldViewPosition.x ? (v13 = 0) : (v13 = 1), + v11 > a3->vWorldViewPosition.x ? (v14 = 0) : (v14 = 1), + v11 > a4->vWorldViewPosition.x ? (v15 = 0) : (v15 = 1), + !(v13 & v14 & v15 & v12)); +} //----- (00481212) -------------------------------------------------------- void Render::DrawTerrainSW(int a1, int a2, int a3, int a4) { @@ -3779,7 +3958,7 @@ v7 = abs(X); v8 = abs(v86); --X; - v92 = &stru_76E5C8[(v7 << 7) + v8]; + v92 = &terrain_76E5C8[(v7 << 7) + v8]; if ( !v92->field_0 || ((v9 = v6, v10 = &pVerticesSR_806210[v6], v104 = v10, !v85) ? (v11 = &pVerticesSR_801A10[v9], v12 = &pVerticesSR_806210[v9 + 1]) : (v11 = &pVerticesSR_806210[v9 + 1], v12 = &pVerticesSR_801A10[v9]), @@ -3807,7 +3986,7 @@ WorldPosToGridCellZ(v100), !byte_4D864C) || !(pGame->uFlags & 0x80)) - && !sub_481EFA(v10, v11, v102, v103, 1)) ) + && !_481EFA_clip_terrain_poly(v10, v11, v102, v103, 1)) ) goto LABEL_105; if ( v10->vWorldPosition.z != v11->vWorldPosition.z || v11->vWorldPosition.z != v103->vWorldPosition.z @@ -3851,7 +4030,7 @@ if ( pOutdoorCamera->uNumPolygons >= 1999 ) return; ++pOutdoorCamera->uNumPolygons; - if ( !sub_481FC9(v10, (RenderVertexSoft *)HIDWORD(v101), v102, v17) ) + if ( !_481FC9_terrain(v10, (RenderVertexSoft *)HIDWORD(v101), v102, v17) ) goto LABEL_104; v26 = 1.0 / (v104->vWorldViewPosition.x + 0.0000001); memcpy(array_50AC10, v104, 0x30u); @@ -3972,7 +4151,7 @@ if ( pOutdoorCamera->uNumPolygons >= 1999 ) return; ++pOutdoorCamera->uNumPolygons; - if ( !sub_481FC9((RenderVertexSoft *)HIDWORD(v101), v103, v104, v38) ) + if ( !_481FC9_terrain((RenderVertexSoft *)HIDWORD(v101), v103, v104, v38) ) goto LABEL_74; v48 = 1.0 / (v104->vWorldViewPosition.x + 0.0000001); memcpy(array_50AC10, v104, 0x30u); @@ -4062,7 +4241,7 @@ if ( pOutdoorCamera->uNumPolygons >= 1999 ) return; ++pOutdoorCamera->uNumPolygons; - if ( !sub_481FC9(v102, v104, v103, v17) ) + if ( !_481FC9_terrain(v102, v104, v103, v17) ) { LABEL_104: --pOutdoorCamera->uNumPolygons; @@ -4147,12 +4326,43 @@ } } +//----- (00481FC9) -------------------------------------------------------- +int __fastcall _481FC9_terrain(RenderVertexSoft *a1, RenderVertexSoft *a2, RenderVertexSoft *a3, struct Polygon *a4)//Rotate camera +{ + float arg_0, arg_4, var_4, var_8, var_c, var_10, var_14; + + if (a1->vWorldPosition.y == a2->vWorldPosition.y && a2->vWorldPosition.y == a3->vWorldPosition.y) + a4->flags |= 0x10; + var_c = a1->vWorldViewPosition.x - a2->vWorldViewPosition.x; + var_14 = a1->vWorldViewPosition.y - a2->vWorldViewPosition.y; + arg_0 = a1->vWorldViewPosition.z - a2->vWorldViewPosition.z; + var_10 = a3->vWorldViewPosition.x - a2->vWorldViewPosition.x; + var_8 = a3->vWorldViewPosition.y - a2->vWorldViewPosition.y; + var_4 = a3->vWorldViewPosition.z - a2->vWorldViewPosition.z; + arg_4 = a3->vWorldPosition.y - a2->vWorldPosition.y; + if (((a3->vWorldPosition.y - a2->vWorldPosition.y) * (a1->vWorldPosition.x - a2->vWorldPosition.x) - (a3->vWorldPosition.x - a2->vWorldPosition.x) * (a1->vWorldPosition.y - a2->vWorldPosition.y)) * (pIndoorCamera->pos.y - a2->vWorldPosition.z) + + ((a3->vWorldPosition.z - a2->vWorldPosition.z) * (a1->vWorldPosition.y - a2->vWorldPosition.y) - (a3->vWorldPosition.y - a2->vWorldPosition.y) * (a1->vWorldPosition.z - a2->vWorldPosition.z)) * (pIndoorCamera->pos.x - a2->vWorldPosition.x) + + ((a3->vWorldPosition.x - a2->vWorldPosition.x) * (a1->vWorldPosition.z - a2->vWorldPosition.z) - (a3->vWorldPosition.z - a2->vWorldPosition.z) * (a1->vWorldPosition.x - a2->vWorldPosition.x)) * (pIndoorCamera->pos.z - a2->vWorldPosition.y) < 0) + { + arg_4 = var_4 * var_14 - var_8 * arg_0; + a4->v_18.x = floorf(arg_4 + 0.5f); + arg_4 = var_10 * arg_0 - var_4 * var_c; + a4->v_18.y = floorf(arg_4 + 0.5f); + arg_4 = var_8 * var_c - var_10 * var_14; + a4->v_18.z = floorf(arg_4 + 0.5f); + a4->_normalize_v_18(); + arg_4 = -(a4->v_18.x * a2->vWorldViewPosition.x) - a4->v_18.y * a2->vWorldViewPosition.y - a4->v_18.z * a2->vWorldViewPosition.z; + a4->field_24 = floorf(arg_4 + 0.5f); + return true; + } + else + return false; +} //----- (00438250) -------------------------------------------------------- void IndoorCameraD3D::sr_Reset_list_0037C() { this->list_0037C_size = 0; } - //----- (00438240) -------------------------------------------------------- void IndoorCameraD3D::sr_438240_draw_lits() {