Mercurial > mm7
changeset 1143:ed6a9efc6c90
sub_424829 little clean
author | Ritor1 |
---|---|
date | Sun, 02 Jun 2013 00:43:36 +0600 |
parents | 1b570a110e6c |
children | f544cd6f7168 908c00615587 |
files | mm7_1.cpp mm7_data.h |
diffstat | 2 files changed, 114 insertions(+), 140 deletions(-) [+] |
line wrap: on
line diff
--- a/mm7_1.cpp Sat Jun 01 20:09:26 2013 +0600 +++ b/mm7_1.cpp Sun Jun 02 00:43:36 2013 +0600 @@ -2225,44 +2225,44 @@ } //----- (00424829) -------------------------------------------------------- -bool sub_424829(int a1, BspRenderer_stru2 *a2, BspRenderer_stru2 *a3, int a4) +bool sub_424829(int pNumVertices, BspRenderer_stru2 *a2, BspRenderer_stru2 *a3, int uFaceID) { - int v4; // edi@1 - BspRenderer_stru2 *v5; // ebx@1 + //int v4; // edi@1 + //BspRenderer_stru2 *v5; // ebx@1 int v6; // eax@3 int v7; // esi@5 int v8; // edx@5 - int v9; // ecx@6 + //int v9; // ecx@6 int v10; // eax@12 int v11; // edi@13 - int v12; // edx@18 + //int v12; // edx@18 int v13; // eax@22 - int v14; // edi@28 + //int v14; // edi@28 int v15; // ecx@29 int v16; // edi@30 - int v17; // edx@35 + //int v17; // edx@35 int v18; // eax@39 int v19; // eax@44 int v20; // ecx@44 - int v21; // edi@45 + //int v21; // edi@45 int v22; // edi@46 __int16 *v23; // ecx@47 int v24; // edx@48 int v25; // eax@50 int v26; // eax@55 signed int v27; // edi@55 - int v28; // edx@56 + //int v28; // edx@56 int v29; // edx@57 int v30; // eax@59 int v31; // eax@64 signed int v32; // edi@64 - int v33; // edx@65 + //int v33; // edx@65 __int16 *v34; // eax@66 __int16 v35; // dx@66 __int16 v36; // dx@67 __int16 v37; // di@67 __int16 v38; // dx@67 - BspRenderer_stru2 *v39; // ecx@69 + //BspRenderer_stru2 *v39; // ecx@69 int v40; // edx@69 int v41; // edi@70 __int16 *v42; // eax@76 @@ -2274,7 +2274,7 @@ int v49; // esi@93 __int16 *v50; // ecx@94 int v51; // eax@95 - int v52; // eax@97 + //int v52; // eax@97 int v53; // [sp+Ch] [bp-34h]@44 int v54; // [sp+10h] [bp-30h]@0 int v55; // [sp+14h] [bp-2Ch]@12 @@ -2282,7 +2282,7 @@ __int16 *v57; // [sp+14h] [bp-2Ch]@76 __int16 *v58; // [sp+14h] [bp-2Ch]@81 __int16 *v59; // [sp+14h] [bp-2Ch]@87 - BspRenderer_stru2 *v60; // [sp+18h] [bp-28h]@1 + //BspRenderer_stru2 *v60; // [sp+18h] [bp-28h]@1 int v61; // [sp+1Ch] [bp-24h]@29 int v62; // [sp+20h] [bp-20h]@0 signed int v63; // [sp+24h] [bp-1Ch]@3 @@ -2296,29 +2296,34 @@ int v71; // [sp+34h] [bp-Ch]@75 int v72; // [sp+34h] [bp-Ch]@80 int v73; // [sp+38h] [bp-8h]@11 - int v74; // [sp+3Ch] [bp-4h]@1 + //int v74; // [sp+3Ch] [bp-4h]@1 int a3a; // [sp+48h] [bp+8h]@76 int a3b; // [sp+48h] [bp+8h]@87 //try graphic engine with function returning 1 always, and without - return 1; - v4 = a1; - v5 = a2; - v74 = a1; - v60 = a2; - if ( !a1 - || (!stru_50B700.field_0 ? (v64 = -1, v6 = 1, v63 = 1) : (v6 = 1, v63 = -1, v64 = 1), - v7 = stru_50B700._screen_space_y[0], - v65 = 0, - v8 = stru_50B700._screen_space_y[0], - a1 <= v6) ) - return 0; - do + //return true; + if ( !pNumVertices ) + return false; + v7 = stru_50B700._screen_space_y[0]; + v65 = 0; + v8 = stru_50B700._screen_space_y[0]; + if ( !stru_50B700.field_0 ) { - v9 = stru_50B700._screen_space_y[v6]; - if ( v9 >= v7 ) + v63 = 1; + v64 = -1; + } + else + { + v63 = -1; + v64 = 1; + } + if ( pNumVertices <= 1 ) + return false; + for ( v6 = 1; v6 < pNumVertices; ++v6 ) + { + if ( stru_50B700._screen_space_y[v6] >= v7 ) { - if ( v9 > v8 ) + if ( stru_50B700._screen_space_y[v6] > v8 ) v8 = stru_50B700._screen_space_y[v6]; } else @@ -2326,152 +2331,136 @@ v65 = v6; v7 = stru_50B700._screen_space_y[v6]; } - ++v6; } - while ( v6 < v4 ); v73 = v8; if ( v8 == v7 ) - return 0; + return false; v10 = v65; - v68 = 0; - v5->_viewport_space_y = v7; - v5->_viewport_space_w = v8; + a2->_viewport_space_y = v7; + a2->_viewport_space_w = v8; v55 = v65; - if ( v4 > 0 ) + if ( pNumVertices > 0 ) { v11 = v65; - do + for ( v68 = 0; v68 < pNumVertices; ++v68 ) { v10 += v64; - if ( v10 < v74 ) + if ( v10 < pNumVertices ) { if ( v10 < 0 ) - v10 += v74; + v10 += pNumVertices; } else { - v10 -= v74; + v10 -= pNumVertices; } - v12 = stru_50B700._screen_space_y[v10]; - if ( v12 <= stru_50B700._screen_space_y[v11] ) + if ( stru_50B700._screen_space_y[v10] <= stru_50B700._screen_space_y[v11] ) { v55 = v10; v11 = v10; } - if ( v12 == v73 ) + if ( stru_50B700._screen_space_y[v10] == v73 ) break; - ++v68; } - while ( v68 < v74 ); } v13 = v55 + v64; v67 = v55 + v64; - if ( v55 + v64 < v74 ) + if ( v55 + v64 < pNumVertices ) { if ( v13 >= 0 ) goto LABEL_27; - v13 += v74; + v13 += pNumVertices; } else { - v13 -= v74; + v13 -= pNumVertices; } v67 = v13; LABEL_27: if ( stru_50B700._screen_space_y[v13] != stru_50B700._screen_space_y[v55] ) { - v14 = stru_50B700._screen_space_x[v55]; - v62 = v14 << 16; - v54 = ((stru_50B700._screen_space_x[v13] - v14) << 16) / (stru_50B700._screen_space_y[v13] - stru_50B700._screen_space_y[v55]); - v5->array_18[v7] = LOWORD(stru_50B700._screen_space_x[v55]); + v62 = stru_50B700._screen_space_x[v55] << 16; + v54 = ((stru_50B700._screen_space_x[v13] - stru_50B700._screen_space_x[v55]) << 16) / (stru_50B700._screen_space_y[v13] - stru_50B700._screen_space_y[v55]); + a2->array_18[v7] = LOWORD(stru_50B700._screen_space_x[v55]); } v15 = v65; - v69 = 0; v61 = v65; - if ( v74 > 0 ) + if ( pNumVertices > 0 ) { v16 = v65; - do + for ( v69 = 0; v69 < pNumVertices; ++v69 ) { v15 += v63; - if ( v15 < v74 ) + if ( v15 < pNumVertices ) { if ( v15 < 0 ) - v15 += v74; + v15 += pNumVertices; } else { - v15 -= v74; + v15 -= pNumVertices; } - v17 = stru_50B700._screen_space_y[v15]; - if ( v17 <= stru_50B700._screen_space_y[v16] ) + if ( stru_50B700._screen_space_y[v15] <= stru_50B700._screen_space_y[v16] ) { v61 = v15; v16 = v15; } - if ( v17 == v73 ) + if ( stru_50B700._screen_space_y[v15] == v73 ) break; - ++v69; } - while ( v69 < v74 ); } v18 = v63 + v61; v66 = v63 + v61; - if ( v63 + v61 < v74 ) + if ( v63 + v61 < pNumVertices ) { if ( v18 >= 0 ) goto LABEL_44; - v18 += v74; + v18 += pNumVertices; } else { - v18 -= v74; + v18 -= pNumVertices; } v66 = v18; LABEL_44: v19 = v18; v20 = v61; - v53 = stru_50B700._screen_space_y[v19] - stru_50B700._screen_space_y[v61]; if ( stru_50B700._screen_space_y[v19] != stru_50B700._screen_space_y[v61] ) { - v21 = stru_50B700._screen_space_x[v20]; - v5 = v60; - v61 = v21 << 16; - v53 = ((stru_50B700._screen_space_x[v19] - v21) << 16) / v53; - v60->array_3D8[v73] = LOWORD(stru_50B700._screen_space_x[v20]); + v61 = stru_50B700._screen_space_x[v20] << 16; + v53 = ((stru_50B700._screen_space_x[v19] - stru_50B700._screen_space_x[v20]) << 16) / stru_50B700._screen_space_y[v19] - stru_50B700._screen_space_y[v20]; + a2->array_3D8[v73] = LOWORD(stru_50B700._screen_space_x[v20]); } v22 = v7; - v70 = v7; if ( v7 <= v73 ) { - v56 = &v5->array_3D8[v7]; - v23 = &v5->array_18[v7]; - do + v56 = &a2->array_3D8[v7]; + v23 = &a2->array_18[v7]; + for ( v70 = v7; v70 <= v73; ++v70 ) { v24 = v67; if ( v22 < stru_50B700._screen_space_y[v67] || v22 == v73 ) goto LABEL_57; v25 = v64 + v67; v67 = v25; - if ( v25 < v74 ) + if ( v25 < pNumVertices ) { if ( v25 >= 0 ) goto LABEL_55; - v25 += v74; + v25 += pNumVertices; } else { - v25 -= v74; + v25 -= pNumVertices; } v67 = v25; LABEL_55: v26 = v25; - v27 = stru_50B700._screen_space_y[v26] - stru_50B700._screen_space_y[v24]; + //v27 = stru_50B700._screen_space_y[v26] - stru_50B700._screen_space_y[v24]; if ( stru_50B700._screen_space_y[v26] - stru_50B700._screen_space_y[v24] > 0 ) { - v28 = stru_50B700._screen_space_x[v24]; - v54 = ((stru_50B700._screen_space_x[v26] - v28) << 16) / v27; - v62 = v28 << 16; + v54 = ((stru_50B700._screen_space_x[v26] - stru_50B700._screen_space_x[v24]) << 16) / stru_50B700._screen_space_y[v26] - stru_50B700._screen_space_y[v24]; + v62 = stru_50B700._screen_space_x[v24] << 16; } LABEL_57: v29 = v66; @@ -2479,27 +2468,26 @@ { v30 = v63 + v66; v66 += v63; - if ( v66 >= v74 ) + if ( v66 >= pNumVertices ) { - v30 -= v74; + v30 -= pNumVertices; goto LABEL_63; } if ( v30 < 0 ) { - v30 += v74; + v30 += pNumVertices; LABEL_63: v66 = v30; } v31 = v30; - v32 = stru_50B700._screen_space_y[v31] - stru_50B700._screen_space_y[v29]; + //v32 = stru_50B700._screen_space_y[v31] - stru_50B700._screen_space_y[v29]; if ( stru_50B700._screen_space_y[v31] - stru_50B700._screen_space_y[v29] > 0 ) { - v33 = stru_50B700._screen_space_x[v29]; - v53 = ((stru_50B700._screen_space_x[v31] - v33) << 16) / v32; - v61 = v33 << 16; + v53 = ((stru_50B700._screen_space_x[v31] - stru_50B700._screen_space_x[v29]) << 16) / stru_50B700._screen_space_y[v31] - stru_50B700._screen_space_y[v29]; + v61 = stru_50B700._screen_space_x[v29] << 16; } } - *(__int16 *)((char *)v56 + (int)(char *)v5->array_18 - (char *)v5->array_3D8) = HIWORD(v62); + *(__int16 *)((char *)v56 + (int)(char *)a2->array_18 - (char *)a2->array_3D8) = HIWORD(v62); *v56 = HIWORD(v61); v34 = v23 + 480; v35 = v23[480]; @@ -2517,14 +2505,11 @@ v22 = v70 + 1; v61 += v53; ++v23; - ++v70; } - while ( v70 <= v73 ); } - v39 = a3; v40 = v73; if ( v73 < a3->_viewport_space_y || (v41 = a3->_viewport_space_w, v7 > v41) ) - return 0; + return false; if ( v7 < a3->_viewport_space_y ) v7 = a3->_viewport_space_y; if ( v73 > v41 ) @@ -2532,46 +2517,40 @@ v40 = a3->_viewport_space_w; v73 = a3->_viewport_space_w; } - v71 = v7; if ( v7 <= v40 ) { - a3a = (char *)v5 - (char *)a3; - v57 = &v5->array_18[v7]; - v42 = &v39->array_3D8[v7]; - do + a3a = (char *)a2 - (char *)a3; + v57 = &a2->array_18[v7]; + v42 = &a3->array_3D8[v7]; + for ( v71 = v7; v71 <= v40; ++v71 ) { - if ( *(__int16 *)((char *)v42 + a3a) >= *(v42 - 480) && *v57 <= *v42 ) + if ( *(__int16 *)((char *)v42 + a3a) >= *(v42 - 480) && a2->array_18[v71] <= a3->array_3D8[v71] ) break; ++v57; ++v7; - ++v71; ++v42; } - while ( v71 <= v40 ); } - v72 = v40; if ( v40 < v7 ) - return 0; - v58 = &v5->array_18[v40]; - v43 = &v39->array_3D8[v40]; - do + return false; + v58 = &a2->array_18[v40]; + v43 = &a3->array_3D8[v40]; + for ( v72 = v40; v72 >= v7; --v72 ) { - if ( *(__int16 *)((char *)v43 + (int)(char *)v5 - (char *)v39) >= *(v43 - 480) && *v58 <= *v43 ) + if ( *(__int16 *)((char *)v43 + (int)(char *)a2 - (char *)a3) >= *(v43 - 480) && *v58 <= a3->array_3D8[v72] ) break; --v58; --v40; - --v72; --v43; v73 = v40; } - while ( v72 >= v7 ); if ( v7 >= v40 ) - return 0; - a3b = (char *)v39 - (char *)v5; - v59 = &v39->array_3D8[v7]; - v45 = &v5->array_18[v7]; - v46 = v73 - v7 + 1; - do + return false; + a3b = (char *)a3 - (char *)a2; + v59 = &a3->array_3D8[v7]; + v45 = &a2->array_18[v7]; + + for ( v46 = v73 - v7 + 1; v46; --v46 ) { v47 = *(__int16 *)((char *)v45 + a3b); if ( *v45 < v47 ) @@ -2580,40 +2559,35 @@ v45[480] = *v59; ++v59; ++v45; - --v46; } - while ( v46 ); - v5->_viewport_space_y = v7; - v5->_viewport_space_w = v73; - v5->field_8 = v5->array_18[v7]; - v48 = v5->array_3D8[v7]; - v5->field_10 = v7; - v5->field_14 = v7; + a2->_viewport_space_y = v7; + a2->_viewport_space_w = v73; + a2->field_8 = a2->array_18[v7]; + v48 = a2->array_3D8[v7]; + a2->field_10 = v7; + a2->field_14 = v7; + a2->field_C = v48; v49 = v7 + 1; - v5->field_C = v48; if ( v49 <= v73 ) { - v50 = &v5->array_3D8[v49]; - do + v50 = &a2->array_3D8[v49]; + for ( v49; v49 <= v73; ++v49 ) { v51 = *(v50 - 480); - if ( v51 < v5->field_8 ) + if ( v51 < a2->field_8 ) { - v5->field_8 = v51; - v5->field_10 = v49; + a2->field_8 = v51; + a2->field_10 = v49; } - v52 = *v50; - if ( v52 > v5->field_C ) + if ( a2->array_3D8[v49] > a2->field_C ) { - v5->field_C = v52; - v5->field_14 = v49; + a2->field_C = a2->array_3D8[v49]; + a2->field_14 = v49; } - ++v49; ++v50; } - while ( v49 <= v73 ); } - return 1; + return true; } // 50B700: using guessed type int stru_50B700.field_0;
--- a/mm7_data.h Sat Jun 01 20:09:26 2013 +0600 +++ b/mm7_data.h Sun Jun 02 00:43:36 2013 +0600 @@ -1258,7 +1258,7 @@ void __cdecl sub_423B4A(); int __fastcall sub_423B5D(unsigned int uFaceID); signed int __fastcall sub_424579(int uFaceID, struct stru320 *a2); -bool sub_424829(int a1, struct BspRenderer_stru2 *a2, struct BspRenderer_stru2 *a3, int a4); +bool sub_424829(int pNumVertices, struct BspRenderer_stru2 *a2, struct BspRenderer_stru2 *a3, int uFaceID); signed int __fastcall sr_424CD7(unsigned int uVertexID); // idb signed int __fastcall sr_424EE0_MakeFanFromTriangle(unsigned int uVertexID); // idb signed int __fastcall sr_4250FE(unsigned int uVertexID); // idb