comparison Render.cpp @ 992:3a3ab572eff5

Merge
author Nomad
date Mon, 13 May 2013 17:07:52 +0200
parents c5d8ea1e6ccb 087a9af8e0ec
children c45d51b3f4f4
comparison
equal deleted inserted replaced
991:c5d8ea1e6ccb 992:3a3ab572eff5
872 int v6; // esi@3 872 int v6; // esi@3
873 unsigned int v7; // eax@3 873 unsigned int v7; // eax@3
874 int v8; // eax@4 874 int v8; // eax@4
875 unsigned int v9; // eax@6 875 unsigned int v9; // eax@6
876 int v10; // eax@7 876 int v10; // eax@7
877 int v11; // ebx@9 877 //int v11; // ebx@9
878 int v12; // edi@9 878 //int v12; // edi@9
879 int v13; // eax@21 879 int v13; // eax@21
880 int v14; // eax@31 880 int v14; // eax@31
881 int v15; // edi@33 881 int v15; // edi@33
882 int v16; // eax@34 882 int v16; // eax@34
883 int v17; // edx@34 883 int v17; // edx@34
884 int v18; // ebx@34 884 int v18; // ebx@34
885 int v19; // eax@36 885 int v19; // eax@36
886 int v20; // eax@39 886 int v20; // eax@39
887 int v21; // ecx@43 887 int v21; // ecx@43
888 char v22; // zf@44 888 //char v22; // zf@44
889 int v23; // ecx@47 889 int v23; // ecx@47
890 int v24; // edi@52 890 //int v24; // edi@52
891 int v25; // eax@54 891 int v25; // eax@54
892 int v26; // ecx@54 892 int v26; // ecx@54
893 int v27; // eax@56 893 int v27; // eax@56
894 int v28; // edx@60 894 int v28; // edx@60
895 int v29; // ecx@61 895 int v29; // ecx@61
930 int v64; // ecx@157 930 int v64; // ecx@157
931 int v65; // eax@159 931 int v65; // eax@159
932 int v66; // edx@163 932 int v66; // edx@163
933 int v67; // ecx@164 933 int v67; // ecx@164
934 int v68; // ecx@167 934 int v68; // ecx@167
935 int v69; // eax@173 935 //int v69; // eax@173
936 int v70; // edi@178 936 int v70; // edi@178
937 int v71; // eax@178 937 //int v71; // eax@178
938 int v72; // ecx@178 938 //int v72; // ecx@178
939 int x; // ebx@180 939 //int x; // ebx@180
940 int v74; // eax@182 940 //int v74; // eax@182
941 int v75; // eax@184 941 int v75; // eax@184
942 IndoorCameraD3D *pIndoorCameraD3D_3; // ecx@184 942 IndoorCameraD3D *pIndoorCameraD3D_3; // ecx@184
943 int uStartZ; // ecx@184 943 int uStartZ; // ecx@184
944 int v79; // ebx@185 944 int v79; // ebx@185
945 int v127; // esi@185 945 int v127; // esi@185
946 int v86; // edi@196 946 int v86; // edi@196
947 int v87; // eax@196 947 //int v87; // eax@196
948 int v88; // ecx@196 948 //int v88; // ecx@196
949 int v89; // eax@198 949 //int v89; // eax@198
950 int v90; // ecx@200 950 //int v90; // ecx@200
951 int v92; // ebx@203 951 int v92; // ebx@203
952 int v93; // ST08_4@204 952 //int v93; // ST08_4@204
953 int v97; // ST08_4@204 953 int v97; // ST08_4@204
954 float result; // eax@212 954 float result; // eax@212
955 struct 955 //struct
956 { 956 //{
957 char v102[4]; // [sp+Ch] [bp-68h]@191 957 int v106; // [sp+Ch] [bp-68h]@191
958 __int16 v103; // [sp+10h] [bp-64h]@190 958 int v103; // [sp+10h] [bp-64h]@190
959 __int16 v104; // [sp+12h] [bp-62h]@190 959 int v104; // [sp+12h] [bp-62h]@190
960 } v102; 960 //} v102;
961 int v105; // [sp+1Ch] [bp-58h]@1 961 int v105; // [sp+1Ch] [bp-58h]@1
962 int v106; // [sp+20h] [bp-54h]@3 962 int v107; // [sp+20h] [bp-54h]@3
963 int uEndZ; // [sp+24h] [bp-50h]@3 963 int uEndZ; // [sp+24h] [bp-50h]@3
964 int v108; // [sp+28h] [bp-4Ch]@9 964 int v108; // [sp+28h] [bp-4Ch]@9
965 int v109; // [sp+2Ch] [bp-48h]@9 965 int v109; // [sp+2Ch] [bp-48h]@9
966 int v110; // [sp+30h] [bp-44h]@9 966 int v110; // [sp+30h] [bp-44h]@9
967 int v111; // [sp+34h] [bp-40h]@3 967 int v111; // [sp+34h] [bp-40h]@3
968 int v112; // [sp+38h] [bp-3Ch]@6 968 int v112; // [sp+38h] [bp-3Ch]@6
969 IndoorCameraD3D *pIndoorCameraD3D_4; // [sp+3Ch] [bp-38h]@9 969 IndoorCameraD3D *pIndoorCameraD3D_4; // [sp+3Ch] [bp-38h]@9
970 int v114; // [sp+40h] [bp-34h]@9 970 int v114; // [sp+40h] [bp-34h]@9
971 int v115; // [sp+44h] [bp-30h]@9 971 int v115; // [sp+44h] [bp-30h]@9
972 int v116; // [sp+48h] [bp-2Ch]@9 972 int v116; // [sp+48h] [bp-2Ch]@9
973 int v117; // [sp+4Ch] [bp-28h]@9 973 //int v117; // [sp+4Ch] [bp-28h]@9
974 int v118; // [sp+50h] [bp-24h]@9 974 int v118; // [sp+50h] [bp-24h]@9
975 int v119; // [sp+54h] [bp-20h]@1 975 int v119; // [sp+54h] [bp-20h]@1
976 int v120; // [sp+58h] [bp-1Ch]@1 976 int v120; // [sp+58h] [bp-1Ch]@1
977 int i; // [sp+5Ch] [bp-18h]@1 977 int i; // [sp+5Ch] [bp-18h]@1
978 int v122; // [sp+60h] [bp-14h]@1 978 int v122; // [sp+60h] [bp-14h]@1
1012 if ( (v5 & stru_5C6E00->uPiMask) >= stru_5C6E00->uIntegerHalfPi ) 1012 if ( (v5 & stru_5C6E00->uPiMask) >= stru_5C6E00->uIntegerHalfPi )
1013 v10 = -stru_5C6E00->pTanTable[stru_5C6E00->uIntegerPi - v9]; 1013 v10 = -stru_5C6E00->pTanTable[stru_5C6E00->uIntegerPi - v9];
1014 else 1014 else
1015 v10 = stru_5C6E00->pTanTable[v9]; 1015 v10 = stru_5C6E00->pTanTable[v9];
1016 v108 = abs(v10); 1016 v108 = abs(v10);
1017 v11 = v124; 1017 //v11 = v124;
1018 v12 = v123; 1018 //v12 = v123;
1019 v114 = 0; 1019 v114 = 0;
1020 v115 = 0; 1020 v115 = 0;
1021 pIndoorCameraD3D_4 = 0; 1021 pIndoorCameraD3D_4 = 0;
1022 v125 = 0; 1022 v125 = 0;
1023 v110 = (v106 >= 0 ? 1: -1);//2 * (v106 >= 0) - 1; 1023 v110 = (v106 >= 0 ? 1: -1);//2 * (v106 >= 0) - 1;
1024 v126 = v124; 1024 v126 = v124;
1025 v118 = v123; 1025 v118 = v123;
1026 v109 = (uEndZ >= 0 ? 1: -1);//2 * (v107 >= 0) - 1; 1026 v109 = (uEndZ >= 0 ? 1: -1);//2 * (v107 >= 0) - 1;
1027 uEndZ = (v111 >= 0 ? 1: -1);//2 * (v111 >= 0) - 1; 1027 uEndZ = (v111 >= 0 ? 1: -1);//2 * (v111 >= 0) - 1;
1028 terrain_76E1C8[0] = 65535; 1028 terrain_76E1C8[0] = 65535;
1029 //v116 = 1; 1029 uint _i = 1;
1030 v106 = (v6 >= 0 ? 1: -1);//2 * (v6 >= 0) - 1; 1030 v106 = (v6 >= 0 ? 1: -1);//2 * (v6 >= 0) - 1;
1031 //v117 = 1; 1031 uint j = 1;
1032 terrain_76E3C8[0] = 65535; 1032 terrain_76E3C8[0] = 65535;
1033 terrain_76DDC8[0] = 65535; 1033 terrain_76DDC8[0] = 65535;
1034 terrain_76DFC8[0] = 65535; 1034 terrain_76DFC8[0] = 65535;
1035 for( v116=1; v116 < 128; v116++) 1035 for( _i = 1; _i < 128; _i++)
1036 { 1036 {
1037 if ( v112 >= 0x10000 ) 1037 if ( v112 >= 0x10000 )
1038 { 1038 {
1039 int v1, v2; 1039 int v1, v2;
1040 /*v111 = 4294967296i64 / v112; 1040 /*v111 = 4294967296i64 / v112;
1046 } 1046 }
1047 v12 += v109;*/ 1047 v12 += v109;*/
1048 } 1048 }
1049 else 1049 else
1050 { 1050 {
1051 v11 += v110; 1051 v124 += v110;
1052 v115 += v112; 1052 v115 += v112;
1053 if ( v112 + v115 >= 65536 ) 1053 if ( v112 + v115 >= 65536 )
1054 { 1054 {
1055 v12 += v109; 1055 v123 += v109;
1056 v115 = (unsigned __int16)v115; 1056 v115 = (unsigned __int16)v115;
1057 } 1057 }
1058 } 1058 }
1059 if ( v11 < i || v11 > v120 || v12 < v122 || v12 > v119 ) 1059 if ( v124 < _i || v124 > v120 || v123 < v122 || v123 > v119 )
1060 break; 1060 break;
1061 //v13 = v116++; 1061 //v13 = v116++;
1062 terrain_76E3C8[v116] = v11; 1062 terrain_76E3C8[_i] = v124;
1063 terrain_76E1C8[v116] = v12; 1063 terrain_76E1C8[_i] = v123;
1064 } 1064 }
1065 1065
1066 for( v117=1; v117 < 128; v117++ ) 1066 for( j = 1; j < 128; j++ )
1067 { 1067 {
1068 if ( v108 >= 65536 ) 1068 if ( v108 >= 65536 )
1069 { 1069 {
1070 v111 = 4294967296i64 / v108; 1070 v111 = 4294967296i64 / v108;
1071 v114 += v111;// 1071 v114 += v111;//
1086 v125 = (unsigned __int16)v125; 1086 v125 = (unsigned __int16)v125;
1087 } 1087 }
1088 } 1088 }
1089 //if ( v117 >= 128 ) 1089 //if ( v117 >= 128 )
1090 //break; 1090 //break;
1091 if ( v126 < i ) 1091 if ( v126 < _i )
1092 break; 1092 break;
1093 if ( v126 > v120 ) 1093 if ( v126 > v120 )
1094 break; 1094 break;
1095 v14 = v118; 1095 v14 = v118;
1096 if ( v118 < v122 ) 1096 if ( v118 < v122 )
1097 break; 1097 break;
1098 if ( v118 > v119 ) 1098 if ( v118 > v119 )
1099 break; 1099 break;
1100 terrain_76DFC8[v117] = v126; 1100 terrain_76DFC8[j] = v126;
1101 terrain_76DDC8[v117] = v14; 1101 terrain_76DDC8[j] = v14;
1102 } 1102 }
1103 v16 = 0; 1103 v16 = 0;
1104 v126 = 0; 1104 v126 = 0;
1105 v17 = v117 - 1; 1105 v17 = j - 1;
1106 v18 = v116 - 1; 1106 v18 = _i - 1;
1107 switch ( v105 ) 1107 switch ( v105 )
1108 { 1108 {
1109 case 0: 1109 case 0:
1110 case 7: 1110 case 7:
1111 { 1111 {
1112 v116 = terrain_76DFC8[v17]; 1112 //v116 = terrain_76DFC8[v17];
1113 if ( v120 > v116 ) 1113 if ( v120 > terrain_76DFC8[v17] )
1114 { 1114 {
1115 v125 = v120; 1115 v125 = v120;
1116 memset32(terrain_76D9C8, v119 + 1, 4 * (v120 - v116 + 1)); 1116 memset32(terrain_76D9C8, v119 + 1, 4 * (v120 - terrain_76DFC8[v17] + 1));
1117 v19 = v120; 1117 v19 = v120;
1118 do 1118 do
1119 terrain_76DBC8[v126++] = v19--; 1119 terrain_76DBC8[v126++] = v19--;
1120 while ( v19 >= v116 ); 1120 while ( v19 >= terrain_76DFC8[v17] );
1121 if ( terrain_76DFC8[v17] == terrain_76DDC8[v17 + 127] ) 1121 if ( terrain_76DFC8[v17] == terrain_76DDC8[v17 + 127] )
1122 { 1122 {
1123 do 1123 do
1124 v20 = terrain_76DDC8[v17-- -1]; 1124 v20 = terrain_76DDC8[v17-- -1];
1125 while ( v20 == terrain_76DDC8[v17 -1] ); 1125 while ( v20 == terrain_76DDC8[v17 -1] );
1130 if ( v17 < 0 ) 1130 if ( v17 < 0 )
1131 v17 = 0; 1131 v17 = 0;
1132 v21 = terrain_76DFC8[v17]; 1132 v21 = terrain_76DFC8[v17];
1133 while ( 1 ) 1133 while ( 1 )
1134 { 1134 {
1135 v125 = v21; 1135 v125 = terrain_76DFC8[v17];
1136 if ( v21 < v124 ) 1136 if ( v21 < v124 )
1137 break; 1137 break;
1138 terrain_76DBC8[v16] = v21; 1138 terrain_76DBC8[v16] = v21;
1139 v22 = terrain_76DDC8[v17] == 65535; 1139 //v22 = terrain_76DDC8[v17] == 65535;
1140 terrain_76D9C8[v16] = terrain_76DDC8[v17] + 1; 1140 terrain_76D9C8[v16] = terrain_76DDC8[v17] + 1;
1141 if ( v22 ) 1141 if ( terrain_76DDC8[v17] == 65535 )
1142 { 1142 {
1143 terrain_76D9C8[v16] = v123 + 1; 1143 terrain_76D9C8[v16] = v123 + 1;
1144 break; 1144 break;
1145 } 1145 }
1146 if ( !v17 ) 1146 if ( !v17 )
1154 --v17; 1154 --v17;
1155 v21 = v125 - 1; 1155 v21 = v125 - 1;
1156 ++v16; 1156 ++v16;
1157 } 1157 }
1158 v16 = 0; 1158 v16 = 0;
1159 v24 = terrain_76E3C8[v18]; 1159 //v24 = terrain_76E3C8[v18];
1160 v126 = 0; 1160 v126 = 0;
1161 if ( v120 > v24 ) 1161 if ( v120 > terrain_76E3C8[v18] )
1162 { 1162 {
1163 v125 = v120; 1163 v125 = v120;
1164 memset32(terrain_76D5C8, v122, 4 * (v120 - v24 + 1)); 1164 memset32(terrain_76D5C8, v122, 4 * (v120 - terrain_76E3C8[v18] + 1));
1165 do 1165 do
1166 { 1166 {
1167 v25 = v126; 1167 v25 = v126;
1168 v26 = v125--; 1168 v26 = v125--;
1169 ++v126; 1169 ++v126;
1208 break; 1208 break;
1209 } 1209 }
1210 case 1: 1210 case 1:
1211 case 2: 1211 case 2:
1212 { 1212 {
1213 v116 = terrain_76DDC8[v17]; 1213 //v116 = terrain_76DDC8[v17];
1214 if ( v122 < v116 ) 1214 if ( v122 < terrain_76DDC8[v17] )
1215 { 1215 {
1216 v106 = v122; 1216 v106 = v122;
1217 memset32(terrain_76DBC8, v120 + 1, 4 * (v116 - v122 + 1)); 1217 memset32(terrain_76DBC8, v120 + 1, 4 * (terrain_76DDC8[v17] - v122 + 1));
1218 v32 = v122; 1218 v32 = v122;
1219 do 1219 do
1220 { 1220 {
1221 v33 = v126++; 1221 v33 = v126++;
1222 terrain_76D9C8[v33] = v32++; 1222 terrain_76D9C8[v33] = v32++;
1223 } 1223 }
1224 while ( v32 <= v116 ); 1224 while ( v32 <= terrain_76DDC8[v17] );
1225 if ( terrain_76DDC8[v17] == terrain_76DBC8[v17 -1] ) 1225 if ( terrain_76DDC8[v17] == terrain_76DBC8[v17 -1] )
1226 { 1226 {
1227 do 1227 do
1228 v34 = terrain_76DBC8[v17-- -1]; 1228 v34 = terrain_76DBC8[v17-- -1];
1229 while ( v34 == terrain_76DBC8[v17 -1] ); 1229 while ( v34 == terrain_76DBC8[v17 -1] );
1235 v17 = 0; 1235 v17 = 0;
1236 v35 = terrain_76DDC8[v17]; 1236 v35 = terrain_76DDC8[v17];
1237 v125 = terrain_76DDC8[v17]; 1237 v125 = terrain_76DDC8[v17];
1238 while ( v35 <= v123 ) 1238 while ( v35 <= v123 )
1239 { 1239 {
1240 v22 = terrain_76DFC8[v17] == 65535; 1240 //v22 = terrain_76DFC8[v17] == 65535;
1241 terrain_76DBC8[v16] = terrain_76DFC8[v17] + 1; 1241 terrain_76DBC8[v16] = terrain_76DFC8[v17] + 1;
1242 terrain_76D9C8[v16] = v125; 1242 terrain_76D9C8[v16] = v125;
1243 if ( v22 ) 1243 if ( terrain_76DFC8[v17] == 65535 )
1244 { 1244 {
1245 terrain_76DBC8[v16] = v124 + 1; 1245 terrain_76DBC8[v16] = v124 + 1;
1246 break; 1246 break;
1247 } 1247 }
1248 if ( !v17 ) 1248 if ( !v17 )
1311 break; 1311 break;
1312 } 1312 }
1313 case 5: 1313 case 5:
1314 case 6: 1314 case 6:
1315 { 1315 {
1316 v116 = terrain_76DDC8[v17]; 1316 //v116 = terrain_76DDC8[v17];
1317 if ( v119 > v116 ) 1317 if ( v119 > terrain_76DDC8[v17] )
1318 { 1318 {
1319 v106 = v119; 1319 v106 = v119;
1320 memset32(terrain_76DBC8, i, 4 * (v119 - v116 + 1)); 1320 memset32(terrain_76DBC8, i, 4 * (v119 - terrain_76DDC8[v17] + 1));
1321 v45 = v119; 1321 v45 = v119;
1322 do 1322 do
1323 terrain_76D9C8[v126++] = v45--; 1323 terrain_76D9C8[v126++] = v45--;
1324 while ( v45 >= v116 ); 1324 while ( v45 >= terrain_76DDC8[v17] );
1325 if ( terrain_76DDC8[v17] == terrain_76DBC8[v17 -1] ) 1325 if ( terrain_76DDC8[v17] == terrain_76DBC8[v17 -1] )
1326 { 1326 {
1327 do 1327 do
1328 v46 = terrain_76DBC8[v17-- -1]; 1328 v46 = terrain_76DBC8[v17-- -1];
1329 while ( v46 == terrain_76DBC8[v17 -1] ); 1329 while ( v46 == terrain_76DBC8[v17 -1] );
1335 v17 = 0; 1335 v17 = 0;
1336 v47 = terrain_76DDC8[v17]; 1336 v47 = terrain_76DDC8[v17];
1337 v125 = terrain_76DDC8[v17]; 1337 v125 = terrain_76DDC8[v17];
1338 while ( v47 >= v123 ) 1338 while ( v47 >= v123 )
1339 { 1339 {
1340 v22 = terrain_76DFC8[v17] == 65535; 1340 //v22 = terrain_76DFC8[v17] == 65535;
1341 terrain_76DBC8[v16] = terrain_76DFC8[v17]; 1341 terrain_76DBC8[v16] = terrain_76DFC8[v17];
1342 terrain_76D9C8[v16] = v125; 1342 terrain_76D9C8[v16] = v125;
1343 if ( v22 ) 1343 if ( terrain_76DFC8[v17] == 65535 )
1344 { 1344 {
1345 terrain_76DBC8[v16] = v124; 1345 terrain_76DBC8[v16] = v124;
1346 break; 1346 break;
1347 } 1347 }
1348 if ( !v17 ) 1348 if ( !v17 )
1410 break; 1410 break;
1411 } 1411 }
1412 case 3: 1412 case 3:
1413 case 4: 1413 case 4:
1414 { 1414 {
1415 v116 = terrain_76DFC8[v17]; 1415 //v116 = terrain_76DFC8[v17];
1416 if ( i < v116 ) 1416 if ( i < terrain_76DFC8[v17] )
1417 { 1417 {
1418 v106 = i; 1418 v106 = i;
1419 memset32(terrain_76D9C8, v122, 4 * (v116 - i + 1)); 1419 memset32(terrain_76D9C8, v122, 4 * (terrain_76DFC8[v17] - i + 1));
1420 v56 = i; 1420 v56 = i;
1421 do 1421 do
1422 { 1422 {
1423 v57 = v126++; 1423 v57 = v126++;
1424 terrain_76DBC8[v57] = v56++; 1424 terrain_76DBC8[v57] = v56++;
1425 } 1425 }
1426 while ( v56 <= v116 ); 1426 while ( v56 <= terrain_76DFC8[v17] );
1427 if ( terrain_76DFC8[v17] == terrain_76DDC8[v17 -1] ) 1427 if ( terrain_76DFC8[v17] == terrain_76DDC8[v17 -1] )
1428 { 1428 {
1429 do 1429 do
1430 v58 = terrain_76DDC8[v17-- -1]; 1430 v58 = terrain_76DDC8[v17-- -1];
1431 while ( v58 == terrain_76DDC8[v17 -1] ); 1431 while ( v58 == terrain_76DDC8[v17 -1] );
1492 while ( v66 <= v124 ) 1492 while ( v66 <= v124 )
1493 { 1493 {
1494 v67 = terrain_76E1C8[v18]; 1494 v67 = terrain_76E1C8[v18];
1495 terrain_76D7C8[v16] = v66; 1495 terrain_76D7C8[v16] = v66;
1496 terrain_76D5C8[v16] = v67 + 1; 1496 terrain_76D5C8[v16] = v67 + 1;
1497 if ( v67 == 65535 ) 1497 if ( terrain_76E1C8[v18] == 65535 )
1498 { 1498 {
1499 v31 = v123 + 1; 1499 v31 = v123 + 1;
1500 terrain_76D5C8[v16] = v31; 1500 terrain_76D5C8[v16] = v31;
1501 break; 1501 break;
1502 } 1502 }
1515 break; 1515 break;
1516 } 1516 }
1517 default: 1517 default:
1518 break; 1518 break;
1519 } 1519 }
1520 v69 = v16 - 1; 1520 //v69 = v16 - 1;
1521 ptr_801A08 = pVerticesSR_806210; 1521 ptr_801A08 = pVerticesSR_806210;
1522 ptr_801A04 = pVerticesSR_801A10; 1522 ptr_801A04 = pVerticesSR_801A10;
1523 v126 = v69; 1523 //v126 = v69;
1524
1524 if ( v105 && v105 != 7 && v105 != 3 && v105 != 4 )//блок 1525 if ( v105 && v105 != 7 && v105 != 3 && v105 != 4 )//блок
1525 { 1526 {
1526 for ( i = v69; i >= 1; --i ) 1527 for ( i = v16 - 1; i >= 1; --i )
1527 { 1528 {
1528 //v70 = i; 1529 //v70 = i;
1529 v71 = terrain_76D7C8[i];//88 1530 //v71 = terrain_76D7C8[i];//88
1530 v72 = terrain_76DBC8[i];//0 1531 //v72 = terrain_76DBC8[i];//0
1531 if ( v71 < v72 )//swap 1532 if ( terrain_76D7C8[i] < terrain_76DBC8[i] )//swap
1532 { 1533 {
1533 terrain_76DBC8[i] = v71; 1534 terrain_76DBC8[i] = terrain_76D7C8[i];
1534 terrain_76D7C8[i] = v72; 1535 terrain_76D7C8[i] = terrain_76DBC8[i];
1535 } 1536 }
1536 x = terrain_76DBC8[i];//0 1537 //x = terrain_76DBC8[i];//0
1537 v111 = 0; 1538 v111 = 0;
1538 if ( x <= 0 ) 1539 if ( terrain_76DBC8[i] <= 0 )
1539 x = -x; 1540 terrain_76DBC8[i] = -terrain_76DBC8[i];
1540 v74 = terrain_76D7C8[i]; 1541 //v74 = terrain_76D7C8[i];
1541 if ( v74 <= 0 ) 1542 if ( terrain_76D7C8[i] <= 0 )
1542 v74 = -v74; 1543 terrain_76D7C8[i] = -terrain_76D7C8[i];
1543 v75 = v74 + 2; 1544 v75 = terrain_76D7C8[i] + 2;
1544 //pIndoorCameraD3D_3 = pGame->pIndoorCameraD3D; 1545 //pIndoorCameraD3D_3 = pGame->pIndoorCameraD3D;
1545 uEndZ = v75; 1546 uEndZ = v75;
1546 //pIndoorCameraD3D_4 = pIndoorCameraD3D_3; 1547 //pIndoorCameraD3D_4 = pIndoorCameraD3D_3;
1547 uStartZ = x - 2; 1548 uStartZ = terrain_76DBC8[i] - 2;
1548 if ( x - 2 < v75 ) 1549 if ( terrain_76DBC8[i] - 2 < v75 )
1549 { 1550 {
1550 v127 = 0; 1551 v127 = 0;
1551 //v79 = (v73 - 66) << 9; 1552 //v79 = (v73 - 66) << 9;
1552 //v116 = v77; 1553 //v116 = v77;
1553 //pHeight = v79; 1554 //pHeight = v79;
1554 v111 = v75 - uStartZ; 1555 v111 = v75 - uStartZ;
1555 for (int z = uStartZ; z < uEndZ; ++z) 1556 for (int z = uStartZ; z < uEndZ; ++z)
1556 { 1557 {
1557 ptr_801A08[v127].vWorldPosition.x = (-64 + x) * 512;//pTerrainVertices[z * 128 + x].vWorldPosition.x = (-64 + (signed)x) * 512; 1558 ptr_801A08[v127].vWorldPosition.x = (-64 + terrain_76DBC8[i]) * 512;//pTerrainVertices[z * 128 + x].vWorldPosition.x = (-64 + (signed)x) * 512;
1558 ptr_801A08[v127].vWorldPosition.y = (64 - terrain_76D9C8[i]) * 512; 1559 ptr_801A08[v127].vWorldPosition.y = (64 - terrain_76D9C8[i]) * 512;
1559 ptr_801A08[v127].vWorldPosition.z = pOutdoor->GetHeightOnTerrain( z, terrain_76D9C8[i]); 1560 ptr_801A08[v127].vWorldPosition.z = pOutdoor->GetHeightOnTerrain( z, terrain_76D9C8[i]);
1560 ptr_801A04[v127].vWorldPosition.x = (-64 + x) * 512; 1561 ptr_801A04[v127].vWorldPosition.x = (-64 + terrain_76DBC8[i]) * 512;
1561 ptr_801A04[v127].vWorldPosition.y = (63 - terrain_76D9C8[i]) * 512; 1562 ptr_801A04[v127].vWorldPosition.y = (63 - terrain_76D9C8[i]) * 512;
1562 ptr_801A04[v127].vWorldPosition.z = pOutdoor->GetHeightOnTerrain( z, terrain_76D9C8[i] + 1); 1563 ptr_801A04[v127].vWorldPosition.z = pOutdoor->GetHeightOnTerrain( z, terrain_76D9C8[i] + 1);
1563 if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) 1564 if ( !byte_4D864C || !(pGame->uFlags & 0x80) )
1564 { 1565 {
1565 pIndoorCameraD3D_4->ViewTransform(&ptr_801A08[v127], 1); 1566 pIndoorCameraD3D_4->ViewTransform(&ptr_801A08[v127], 1);
1572 //++v116; 1573 //++v116;
1573 //pHeight = v79; 1574 //pHeight = v79;
1574 } 1575 }
1575 //while ( v116 < v107 ); 1576 //while ( v116 < v107 );
1576 } 1577 }
1577 v102.v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[i]); 1578 v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[i]);
1578 v102.v104 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[i]); 1579 v104 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[i]);
1579 if ( pRenderer->pRenderD3D )//Ritor1: do comment to test 1580 if ( pRenderer->pRenderD3D )//Ritor1: do comment to test
1580 Render::RenderTerrainD3D();//Render::DrawTerrainD3D(v111, 0, (int)&v102); 1581 Render::DrawTerrainD3D(v111, 0, v103, v104);//Render::RenderTerrainD3D();
1581 else 1582 else
1582 Render::DrawTerrainSW(v111, 0, (int)&v102); 1583 Render::DrawTerrainSW(v111, 0, v103, v104);
1583 } 1584 }
1584 } 1585 }
1585 /* else 1586 else
1586 { 1587 {
1587 for ( i = v69; i >= 1; --i ) 1588 for ( i = v16 - 1; i >= 1; --i )
1588 { 1589 {
1589 v86 = i; 1590 //v86 = i;
1590 v87 = terrain_76D5C8[i]; 1591 //v87 = terrain_76D5C8[i];
1591 v88 = terrain_76D9C8[i]; 1592 //v88 = terrain_76D9C8[i];
1592 if ( v87 < v88 ) 1593 if ( terrain_76D5C8[i] < terrain_76D9C8[i] )
1593 { 1594 {
1594 terrain_76D9C8[v86] = v87; 1595 terrain_76D9C8[i] = terrain_76D5C8[i];
1595 terrain_76D5C8[v86] = v88; 1596 terrain_76D5C8[i] = terrain_76D9C8[i];
1596 } 1597 }
1597 v89 = terrain_76D9C8[v86]; 1598 //v89 = terrain_76D9C8[i];
1598 v111 = 0; 1599 v111 = 0;
1599 if ( v89 <= 0 ) 1600 if ( terrain_76D9C8[i] <= 0 )
1600 v89 = -v89; 1601 terrain_76D9C8[i] = -terrain_76D9C8[i];
1601 v90 = terrain_76D5C8[v86]; 1602 //v90 = terrain_76D5C8[i];
1602 if ( v90 <= 0 ) 1603 if ( terrain_76D5C8[i] <= 0 )
1603 v90 = -v90; 1604 terrain_76D5C8[i] = -terrain_76D5C8[i];
1604 pIndoorCameraD3D_4 = pGame->pIndoorCameraD3D; 1605 pIndoorCameraD3D_4 = pGame->pIndoorCameraD3D;
1605 v107 = v90 + 2; 1606 v107 = terrain_76D5C8[i] + 2;
1606 if ( v89 - 2 < v90 + 2 ) 1607 if ( terrain_76D9C8[i] - 2 < terrain_76D5C8[i] + 2 )
1607 { 1608 {
1608 v86 = 0; 1609 v86 = 0;
1609 v116 = v89 - 2; 1610 //v116 = terrain_76D9C8[i] - 2;
1610 v92 = (66 - v89) << 9; 1611 v92 = (66 - terrain_76D9C8[i]) << 9;
1611 pHeight = (66 - v89) << 9; 1612 //pHeight = (66 - terrain_76D9C8[i]) << 9;
1612 v111 = v90 + 2 - (v89 - 2); 1613 v111 = terrain_76D5C8[i] + 2 - (terrain_76D9C8[i] - 2);
1613 do 1614 //do
1614 { 1615 for ( v116 = terrain_76D9C8[i] - 2; v116 < v107; ++v116 )
1615 v93 = v116; 1616 {
1616 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 64) << 9; 1617 //v93 = v116;
1617 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v86) = (double)v106; 1618 //v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 64) << 9;
1618 *(float *)&pHeight = (double)pHeight; 1619 ptr_801A08[v86].vWorldPosition.x = terrain_76DBC8[v86] - 64 << 9;
1619 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v86) = *(float *)&pHeight; 1620 //*(float *)&pHeight = (double)pHeight;
1620 v106 = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86), v93); 1621 ptr_801A08[v86].vWorldPosition.y = v92;
1621 v97 = v116; 1622 //v106 = ;
1622 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v86) = (double)v106; 1623 //v97 = v116;
1623 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 63) << 9; 1624 ptr_801A08[v86].vWorldPosition.z = pOutdoor->GetHeightOnTerrain(terrain_76DBC8[v86], v116);
1624 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v86) = (double)v106; 1625 //v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 63) << 9;
1625 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v86) = *(float *)&pHeight; 1626 ptr_801A04[v86].vWorldPosition.x = terrain_76DBC8[v86] - 63 << 9;
1626 pHeight = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86) + 1, v97); 1627 ptr_801A04[v86].vWorldPosition.y = v92;
1627 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v86) = (double)pHeight; 1628 //pHeight = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86) + 1, v97);
1629 ptr_801A04[v86].vWorldPosition.z = pOutdoor->GetHeightOnTerrain(terrain_76DBC8[v86] + 1, v116);
1628 if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) 1630 if ( !byte_4D864C || !(pGame->uFlags & 0x80) )
1629 { 1631 {
1630 pIndoorCameraD3D_4->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1); 1632 pIndoorCameraD3D_4->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1);
1631 pIndoorCameraD3D_4->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1); 1633 pIndoorCameraD3D_4->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1);
1632 pIndoorCameraD3D_4->Project((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1, 0); 1634 pIndoorCameraD3D_4->Project((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1, 0);
1633 pIndoorCameraD3D_4->Project((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1, 0); 1635 pIndoorCameraD3D_4->Project((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1, 0);
1634 } 1636 }
1635 v92 -= 512; 1637 v92 -= 512;
1636 v86 += 48; 1638 v86 += 48;
1637 ++v116; 1639 //++v116;
1638 pHeight = v92; 1640 //pHeight = v92;
1639 } 1641 }
1640 while ( v116 < v107 ); 1642 //while ( v116 < v107 );
1641 } 1643 }
1642 v103 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v86]); 1644 v103 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v86]);
1643 v104 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v86]); 1645 v104 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v86]);
1644 if ( pRenderer->pRenderD3D ) 1646 if ( pRenderer->pRenderD3D )
1645 Render::DrawTerrainD3D(v111, 1, (int)&v102); 1647 Render::DrawTerrainD3D(v111, 1, v103, v104);
1646 else 1648 else
1647 Render::DrawTerrainSW(v111, 1, (int)&v102); 1649 Render::DrawTerrainSW(v111, 1, v103, v104);
1648 } 1650 }
1649 }*/ 1651 }
1650 result = v126; 1652 result = v126;
1651 pOutdoorCamera->field_40 = v126; 1653 pOutdoorCamera->field_40 = v126;
1652 return result; 1654 return result;
1653 } 1655 }
1654 // 47FFC4: inconsistent fpu stack 1656 // 47FFC4: inconsistent fpu stack
1655 // 4D864C: using guessed type char byte_4D864C; 1657 // 4D864C: using guessed type char byte_4D864C;
1658
1656 1659
1657 void Render::RenderTerrainD3D() // New function. It's temporary 1660 void Render::RenderTerrainD3D() // New function. It's temporary
1658 { 1661 {
1659 char result; // al@3 1662 char result; // al@3
1660 //int v1; // eax@3 1663 //int v1; // eax@3
1836 } 1839 }
1837 } 1840 }
1838 } 1841 }
1839 1842
1840 //----- (0048034E) -------------------------------------------------------- 1843 //----- (0048034E) --------------------------------------------------------
1841 void Render::DrawTerrainD3D(int a1, int a2, int a3) 1844 void Render::DrawTerrainD3D(int a1, int a2, int a3, int unk4)
1842 { 1845 {
1843 int v3; // esi@1 1846 //int v3; // esi@1
1844 int v4; // edi@1 1847 int v4; // edi@1
1845 int v5; // ebx@2 1848 int v5; // ebx@2
1846 int v6; // eax@2 1849 int v6; // eax@2
1847 int v7; // eax@3 1850 int v7; // eax@3
1848 RenderVertexSoft *v8; // edi@3 1851 RenderVertexSoft *v8; // edi@3
1912 stru148 *v71; // esi@147 1915 stru148 *v71; // esi@147
1913 unsigned int v72; // ecx@147 1916 unsigned int v72; // ecx@147
1914 unsigned int v73; // eax@150 1917 unsigned int v73; // eax@150
1915 int v74; // eax@154 1918 int v74; // eax@154
1916 unsigned int v75; // eax@158 1919 unsigned int v75; // eax@158
1917 unsigned int v76; // [sp-10h] [bp-E0h]@61 1920 //unsigned int v76; // [sp-10h] [bp-E0h]@61
1918 int v77; // [sp-Ch] [bp-DCh]@61 1921 int v77; // [sp-Ch] [bp-DCh]@61
1919 IDirect3DTexture2 *v78; // [sp-8h] [bp-D8h]@61 1922 IDirect3DTexture2 *v78; // [sp-8h] [bp-D8h]@61
1920 int v79; // [sp-4h] [bp-D4h]@61 1923 //int v79; // [sp-4h] [bp-D4h]@61
1921 int v80; // [sp+0h] [bp-D0h]@59 1924 int v80; // [sp+0h] [bp-D0h]@59
1922 int v81; // [sp+0h] [bp-D0h]@109 1925 int v81; // [sp+0h] [bp-D0h]@109
1923 int v82; // [sp+54h] [bp-7Ch]@1 1926 int v82; // [sp+54h] [bp-7Ch]@1
1924 int v83; // [sp+60h] [bp-70h]@1 1927 int v83; // [sp+60h] [bp-70h]@1
1925 int v84; // [sp+6Ch] [bp-64h]@1 1928 int v84; // [sp+6Ch] [bp-64h]@1
1959 char this_3a; // [sp+DBh] [bp+Bh]@82 1962 char this_3a; // [sp+DBh] [bp+Bh]@82
1960 char this_3b; // [sp+DBh] [bp+Bh]@131 1963 char this_3b; // [sp+DBh] [bp+Bh]@131
1961 1964
1962 static stru154 static_sub_0048034E_stru_154; 1965 static stru154 static_sub_0048034E_stru_154;
1963 static stru154 stru_76D5A8; 1966 static stru154 stru_76D5A8;
1964 v3 = a1; 1967 //v3 = a1;
1965 v82 = a2; 1968 v82 = a2;
1966 v83 = *(/*short **/_WORD *)(a3 + 4); 1969 v83 = a3;
1967 X = abs(*(/*short **/_WORD *)(a3 + 6)); 1970 X = abs(unk4);
1968 v4 = 0; 1971 v4 = 0;
1969 v88 = 0; 1972 v88 = 0;
1970 v84 = v3 - 1; 1973 v84 = a1 - 1;
1971 v90 = (float)pOutdoor->vSunlight.x / 65536.0; 1974 v90 = (float)pOutdoor->vSunlight.x / 65536.0;
1972 v91 = (float)pOutdoor->vSunlight.y / 65536.0; 1975 v91 = (float)pOutdoor->vSunlight.y / 65536.0;
1973 v92 = (float)pOutdoor->vSunlight.z / 65536.0; 1976 v92 = (float)pOutdoor->vSunlight.z / 65536.0;
1974 if ( v3 - 1 > 0 ) 1977 if ( a1 - 1 > 0 )
1975 { 1978 {
1976 while ( 1 ) 1979 while ( 1 )
1977 { 1980 {
1978 v5 = abs(X);//v5 = 13108 1981 v5 = abs(X);//v5 = 13108
1979 v6 = abs(v83);//v6 = 13108 1982 v6 = abs(v83);//v6 = 13108
1980 --X; 1983 --X;
1981 __debugbreak(); // uncoment & refactor following large if 1984 //__debugbreak(); // uncoment & refactor following large if
1982 v93 = (int)&stru_76E5C8[(v5 << 7) + v6]; 1985 v93 = (int)&stru_76E5C8[(v5 << 7) + v6];
1983 /*if ( !v93->field_0 || ((v7 = 48 * v4, v8 = &pVerticesSR_806210[v4], a2 = v8, !v82) ? (v9 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7), 1986 /*if ( !v93->field_0 || ((v7 = 48 * v4, v8 = &pVerticesSR_806210[v4], a2 = v8, !v82) ? (v9 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7),
1984 v10 = &pVerticesSR_806210[1] + v7) : (v9 = &pVerticesSR_806210[1] + v7, v10 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7)), 1987 v10 = &pVerticesSR_806210[1] + v7) : (v9 = &pVerticesSR_806210[1] + v7, v10 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7)),
1985 ((a8 = v9, 1988 ((a8 = v9,
1986 pVertices = &pVerticesSR_801A10[1] + v7, 1989 pVertices = &pVerticesSR_801A10[1] + v7,
2409 { 2412 {
2410 v75 = v71->uTileBitmapID; 2413 v75 = v71->uTileBitmapID;
2411 v80 = true; 2414 v80 = true;
2412 } 2415 }
2413 //v79 = 0; 2416 //v79 = 0;
2414 //v78 = pBitmaps_LOD->pHardwareTextures[v75]; 2417 v78 = pBitmaps_LOD->pHardwareTextures[v75];
2415 v71->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v75];// Ritor1: It's temporary 2418 v71->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v75];// Ritor1: It's temporary
2416 //v77 = (int)v71; 2419 //v77 = (int)v71;
2417 //v76 = v71->uNumVertices; 2420 //v76 = v71->uNumVertices;
2418 //goto LABEL_161; 2421 //goto LABEL_161;
2419 pRenderer->DrawTerrainPolygon(v76, (stru148 *)v71, v78, v79, v80); 2422 pRenderer->DrawTerrainPolygon(v71->uNumVertices, (stru148 *)v71, v78, 0, v80);
2420 goto LABEL_162; 2423 goto LABEL_162;
2421 } 2424 }
2422 v38 = (stru148 *)v71; 2425 v38 = (stru148 *)v71;
2423 goto LABEL_56; 2426 goto LABEL_56;
2424 } 2427 }
2433 // 47F458: using guessed type int __stdcall WorldPosToGridCellZ(int); 2436 // 47F458: using guessed type int __stdcall WorldPosToGridCellZ(int);
2434 // 4D864C: using guessed type char byte_4D864C; 2437 // 4D864C: using guessed type char byte_4D864C;
2435 // 76D5C0: using guessed type char static_sub_0048034E_byte_76D5C0__init_flag; 2438 // 76D5C0: using guessed type char static_sub_0048034E_byte_76D5C0__init_flag;
2436 2439
2437 //----- (00481212) -------------------------------------------------------- 2440 //----- (00481212) --------------------------------------------------------
2438 void Render::DrawTerrainSW(int a1, int a2, int a3) 2441 void Render::DrawTerrainSW(int a1, int a2, int a3, int a4)
2439 { 2442 {
2440 int v3; // esi@1 2443 int v3; // esi@1
2441 int v4; // ecx@1 2444 int v4; // ecx@1
2442 int v5; // ST10_4@1 2445 int v5; // ST10_4@1
2443 int v6; // edi@1 2446 int v6; // edi@1
2547 2550
2548 v3 = a1; 2551 v3 = a1;
2549 //v4 = *(short *)(a3 + 4); 2552 //v4 = *(short *)(a3 + 4);
2550 //v5 = *(short *)(a3 + 6); 2553 //v5 = *(short *)(a3 + 6);
2551 v85 = a2; 2554 v85 = a2;
2552 v86 = *(_WORD *)(a3 + 4); //v4; 2555 v86 = a3; //v4;
2553 X = abs(*(_WORD *)(a3 + 6)); //v5 2556 X = abs(a4); //v5
2554 v6 = 0; 2557 v6 = 0;
2555 v90 = 0; 2558 v90 = 0;
2556 v81 = v3 - 1; 2559 v81 = v3 - 1;
2557 v95 = (double)pOutdoor->vSunlight.x / 65536.0; 2560 v95 = (double)pOutdoor->vSunlight.x / 65536.0;
2558 v96 = (double)pOutdoor->vSunlight.y / 65536.0; 2561 v96 = (double)pOutdoor->vSunlight.y / 65536.0;