diff options
Diffstat (limited to 'engines/hopkins/objects.cpp')
-rw-r--r-- | engines/hopkins/objects.cpp | 912 |
1 files changed, 58 insertions, 854 deletions
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp index 5309df0a89..6771f24958 100644 --- a/engines/hopkins/objects.cpp +++ b/engines/hopkins/objects.cpp @@ -2078,7 +2078,7 @@ LABEL_38: v10 = XSPR(0); v11 = YSPR(0); v12 = XSPR(0); - v13 = PARCOURS2(v12, v11, v10, 390); + v13 = _vm->_linesManager.PARCOURS2(v12, v11, v10, 390); _vm->_globals.chemin = v13; if (PTRNUL != v13) PACOURS_PROPRE(v13); @@ -2106,7 +2106,7 @@ LABEL_64: if (!_vm->_globals.PLAN_FLAG) { v14 = YSPR(0); v15 = XSPR(0); - v16 = PARCOURS2(v15, v14, v19, v0); + v16 = _vm->_linesManager.PARCOURS2(v15, v14, v19, v0); _vm->_globals.chemin = v16; if (PTRNUL != v16) PACOURS_PROPRE(v16); @@ -2274,7 +2274,7 @@ void ObjectsManager::CLEAR_ECRAN() { _vm->_fontManager.TEXTE_OFF(9); _vm->_globals.CLEAR_VBOB(); _vm->_animationManager.CLEAR_ANIM(); - CLEAR_ZONE(); + _vm->_linesManager.CLEAR_ZONE(); RESET_OBSTACLE(); _vm->_globals.RESET_CACHE(); @@ -2295,7 +2295,7 @@ void ObjectsManager::CLEAR_ECRAN() { SPEED_Y = 0; SPEED_IMAGE = 0; FORCEZONE = 1; - TOTAL_LIGNES = 0; + _vm->_linesManager.TOTAL_LIGNES = 0; DERLIGNE = 0; _vm->_globals.chemin = PTRNUL; if (_vm->_globals.COUCOU != PTRNUL) @@ -2618,789 +2618,6 @@ LABEL_9: } } -// TODO: method casting int arrays as byte pointers. Double-check later whether -// we can convert the return to a uint16 * -byte *ObjectsManager::PARCOURS2(int a1, int a2, int a3, int a4) { - int v4; - int v5; - int v6; - int v7; - int v8; - int v9; - int v10; - int v11; - int v12; - int v13; - int v14; - int v15; - int v16; - int v17; - int v18; - int v19; - int v20; - int v21; - int v22; - int v23; - int v24; - int v25; - int v26; - int v27; - int v28; - int v29; - int v31; - int v32; - int v33; - int v34; - int v35; - int v36; - int v37; - int v38; - int v39; - int v40; - int v41; - int v42; - int v43; - int v44; - int v45; - int v46; - int v47; - int v48; - int v49; - int v50; - int v51; - int v52; - int v53; - int v54; - int v55; - int v56; - int v57; - int v58; - int v59; - int v60; - int v61; - int v62; - int v63; - int v64; - int v65; - int v66; - int v67; - int v68; - int i; - byte *v70; - int v71; - int v72; - int j; - byte *v74; - int v75; - int v76; - int v77; - int v78; - int v79; - int v80; - byte *v81; - int v82; - int v83; - byte *v84; - int v85; - int v86; - int v87; - int v88; - int v89; - int v90; - byte *v91; - int v92; - int v93; - int v94; - byte *v95; - int v96; - int v97; - int v98; - int v99; - int v100; - int v101; - int v102; - int v103; - int v104; - int v105; - int v106; - int v107; - int v108; - int v109; - int v110; - int v111; - int v112; - int v113; - int v114; - int v115; - int v116; - int v117; - int v118 = 0; - int v119 = 0; - int v120; - int v121; - int v122; - int v123; - int v124; - int v125; - int v126; - int v127 = 0; - int v128 = 0; - int v129 = 0; - int v130 = 0; - int v131; - int v132; - int v133; - int v134; - int v135; - int v136; - int v137 = 0; - int v138 = 0; - int v139 = 0; - int v140 = 0; - int v141; - int v142 = 0; - int v143 = 0; - int v144 = 0; - int v145 = 0; - - v123 = a3; - v122 = a4; - v121 = 0; - v120 = 0; - v115 = 0; - v114 = 0; - v113 = 0; - v111 = 0; - if (a4 <= 24) - v122 = 25; - if (!_vm->_globals.NOT_VERIF) { - v4 = a1 - _vm->_globals.old_x1_65; - if (v4 < 0) - v4 = -v4; - if (v4 <= 4) { - v5 = a2 - _vm->_globals.old_y1_66; - if (v5 < 0) - v5 = -v5; - if (v5 <= 4) { - v6 = _vm->_globals.old_x2_67 - a3; - if (v6 < 0) - v6 = -v6; - if (v6 <= 4) { - v7 = _vm->_globals.old_y2_68 - v122; - if (v7 < 0) - v7 = -v7; - if (v7 <= 4) - return PTRNUL; - } - } - } - v8 = a1 - a3; - if (v8 < 0) - v8 = -v8; - if (v8 <= 4) { - v9 = a2 - v122; - if (v9 < 0) - v9 = -v9; - if (v9 <= 4) - return PTRNUL; - } - if (_vm->_globals.old_z_69 > 0 && _vm->_objectsManager.NUMZONE > 0 && _vm->_globals.old_z_69 == _vm->_objectsManager.NUMZONE) - return PTRNUL; - } - _vm->_globals.NOT_VERIF = 0; - _vm->_globals.old_z_69 = _vm->_objectsManager.NUMZONE; - _vm->_globals.old_x1_65 = a1; - _vm->_globals.old_x2_67 = a3; - _vm->_globals.old_y1_66 = a2; - _vm->_globals.old_y2_68 = v122; - _vm->_globals.STOP_BUG = 0; - v112 = 0; - if (a3 <= 19) - v123 = 20; - if (v122 <= 19) - v122 = 20; - if (v123 > _vm->_graphicsManager.max_x - 10) - v123 = _vm->_graphicsManager.max_x - 10; - if (v122 > _vm->_globals.Max_Perso_Y) - v122 = _vm->_globals.Max_Perso_Y; - v10 = a1 - v123; - if (v10 < 0) - v10 = -v10; - if (v10 <= 3) { - v11 = a2 - v122; - if (v11 < 0) - v11 = -v11; - if (v11 <= 3) - return PTRNUL; - } - v12 = 0; - do { - v13 = v12; - *(&v141 + v13) = -1; - *(&v136 + v13) = 0; - *(&v131 + v13) = 1300; - *(&v126 + v13) = 1300; - ++v12; - } while (v12 <= 8); - if (PARC_PERS(a1, a2, v123, v122, -1, -1, 0) != 1) { - v14 = 0; - v15 = v122; - if (_vm->_graphicsManager.max_y > v122) { - v16 = 5; - do { - v101 = v16; - v17 = _vm->_graphicsManager.colision2_ligne(v123, v15, &v139, &v144, 0, _vm->_objectsManager.DERLIGNE); - v16 = v101; - if (v17 == 1 && *(&v141 + v101) <= _vm->_objectsManager.DERLIGNE) - break; - *(&v136 + v101) = 0; - *(&v141 + v101) = -1; - ++v14; - ++v15; - } while (_vm->_graphicsManager.max_y > v15); - } - v134 = v14; - v18 = 0; - v19 = v122; - if (_vm->_graphicsManager.min_y < v122) { - v20 = 1; - do { - v102 = v20; - v21 = _vm->_graphicsManager.colision2_ligne(v123, v19, &v137, &v142, 0, _vm->_objectsManager.DERLIGNE); - v20 = v102; - if (v21 == 1 && *(&v141 + v102) <= _vm->_objectsManager.DERLIGNE) - break; - *(&v136 + v102) = 0; - *(&v141 + v102) = -1; - if (v134 < v18) { - if (v144 != -1) - break; - } - ++v18; - --v19; - } while (_vm->_graphicsManager.min_y < v19); - } - v132 = v18; - v22 = 0; - v23 = v123; - if (_vm->_graphicsManager.max_x > v123) { - v24 = 3; - do { - v103 = v24; - v25 = _vm->_graphicsManager.colision2_ligne(v23, v122, &v138, &v143, 0, _vm->_objectsManager.DERLIGNE); - v24 = v103; - if (v25 == 1 && *(&v141 + v103) <= _vm->_objectsManager.DERLIGNE) - break; - *(&v136 + v103) = 0; - *(&v141 + v103) = -1; - ++v22; - if (v132 < v22) { - if (v142 != -1) - break; - } - if (v134 < v22 && v144 != -1) - break; - ++v23; - } while (_vm->_graphicsManager.max_x > v23); - } - v133 = v22; - v26 = 0; - v27 = v123; - if (_vm->_graphicsManager.min_x < v123) { - v28 = 7; - do { - v104 = v28; - v29 = _vm->_graphicsManager.colision2_ligne(v27, v122, &v140, &v145, 0, _vm->_objectsManager.DERLIGNE); - v28 = v104; - if (v29 == 1 && *(&v141 + v104) <= _vm->_objectsManager.DERLIGNE) - break; - *(&v136 + v104) = 0; - *(&v141 + v104) = -1; - ++v26; - if (v132 < v26) { - if (v142 != -1) - break; - } - if (v134 < v26 && v144 != -1) - break; - if (v133 < v26 && v143 != -1) - break; - --v27; - } while (_vm->_graphicsManager.min_x < v27); - } - v135 = v26; - if (v142 < 0 || _vm->_objectsManager.DERLIGNE < v142) - v142 = -1; - if (v143 < 0 || _vm->_objectsManager.DERLIGNE < v143) - v143 = -1; - if (v144 < 0 || _vm->_objectsManager.DERLIGNE < v144) - v144 = -1; - if (v145 < 0 || _vm->_objectsManager.DERLIGNE < v145) - v145 = -1; - if (v142 < 0) - v132 = 1300; - if (v143 < 0) - v133 = 1300; - if (v144 < 0) - v134 = 1300; - if (v145 < 0) - v135 = 1300; - if (v142 == -1 && v143 == -1 && v144 == -1 && v145 == -1) - return PTRNUL; - v31 = 0; - if (v144 != -1 && v132 >= v134 && v133 >= v134 && v135 >= v134) { - v121 = v144; - v120 = v139; - v31 = 1; - } - if (v142 != -1 && !v31 && v134 >= v132 && v133 >= v132 && v135 >= v132) { - v121 = v142; - v120 = v137; - v31 = 1; - } - if (v143 != -1 && !v31 && v132 >= v133 && v134 >= v133 && v135 >= v133) { - v121 = v143; - v120 = v138; - v31 = 1; - } - if (v145 != -1 && !v31 && v134 >= v135 && v133 >= v135 && v132 >= v135) { - v121 = v145; - v120 = v140; - } - v32 = 0; - do { - v33 = v32; - *(&v141 + v33) = -1; - *(&v136 + v33) = 0; - *(&v131 + v33) = 1300; - *(&v126 + v33) = 1300; - ++v32; - } while (v32 <= 8); - v34 = 0; - v35 = a2; - if (_vm->_graphicsManager.max_y > a2) { - v36 = 5; - do { - v105 = v36; - v37 = _vm->_graphicsManager.colision2_ligne(a1, v35, &v139, &v144, 0, _vm->_objectsManager.DERLIGNE); - v36 = v105; - if (v37 == 1 && *(&v141 + v105) <= _vm->_objectsManager.DERLIGNE) - break; - *(&v136 + v105) = 0; - *(&v141 + v105) = -1; - ++v34; - ++v35; - } while (_vm->_graphicsManager.max_y > v35); - } - v134 = v34 + 1; - v38 = 0; - v39 = a2; - if (_vm->_graphicsManager.min_y < a2) { - v40 = 1; - do { - v106 = v40; - v41 = _vm->_graphicsManager.colision2_ligne(a1, v39, &v137, &v142, 0, _vm->_objectsManager.DERLIGNE); - v40 = v106; - if (v41 == 1 && *(&v141 + v106) <= _vm->_objectsManager.DERLIGNE) - break; - *(&v136 + v106) = 0; - *(&v141 + v106) = -1; - ++v38; - if (v144 != -1) { - if (v38 > 80) - break; - } - --v39; - } while (_vm->_graphicsManager.min_y < v39); - } - v132 = v38 + 1; - v42 = 0; - v43 = a1; - if (_vm->_graphicsManager.max_x > a1) { - v44 = 3; - do { - v107 = v44; - v45 = _vm->_graphicsManager.colision2_ligne(v43, a2, &v138, &v143, 0, _vm->_objectsManager.DERLIGNE); - v44 = v107; - if (v45 == 1 && *(&v141 + v107) <= _vm->_objectsManager.DERLIGNE) - break; - *(&v136 + v107) = 0; - *(&v141 + v107) = -1; - ++v42; - if (v144 != -1 || v142 != -1) { - if (v42 > 100) - break; - } - ++v43; - } while (_vm->_graphicsManager.max_x > v43); - } - v133 = v42 + 1; - v46 = 0; - v47 = a1; - if (_vm->_graphicsManager.min_x < a1) { - v48 = 7; - do { - v108 = v48; - v49 = _vm->_graphicsManager.colision2_ligne(v47, a2, &v140, &v145, 0, _vm->_objectsManager.DERLIGNE); - v48 = v108; - if (v49 == 1 && *(&v141 + v108) <= _vm->_objectsManager.DERLIGNE) - break; - *(&v136 + v108) = 0; - *(&v141 + v108) = -1; - ++v46; - if (v144 != -1 || v142 != -1 || v143 != -1) { - if (v46 > 100) - break; - } - --v47; - } while (_vm->_graphicsManager.min_x < v47); - } - v135 = v46 + 1; - if (v142 != -1) { - v50 = v142 - v121; - if (v50 < 0) - v50 = -v50; - v127 = v50; - } - if (v143 != -1) { - v51 = v143 - v121; - if (v51 < 0) - v51 = -v51; - v128 = v51; - } - if (v144 != -1) { - v52 = v144 - v121; - if (v52 < 0) - v52 = -v52; - v129 = v52; - } - if (v145 != -1) { - v53 = v145 - v121; - if (v53 < 0) - v53 = -v53; - v130 = v53; - } - if (v142 == -1 && v143 == -1 && v144 == -1 && v145 == -1) - error("ERREUR POINT PLUS PROCHE Du perso NON TROUVE"); - v54 = 0; - if (v142 != -1 && v128 >= v127 && v129 >= v127 && v130 >= v127) { - v54 = 1; - v115 = v142; - v111 = v132; - v113 = 1; - v114 = v137; - } - if (!v54) { - if (v144 != -1 && v128 >= v129 && v127 >= v129 && v130 >= v129) { - v54 = 1; - v115 = v144; - v111 = v134; - v113 = 5; - v114 = v139; - } - if (!v54) { - if (v143 != -1 && v127 >= v128 && v129 >= v128 && v130 >= v128) { - v54 = 1; - v115 = v143; - v111 = v133; - v113 = 3; - v114 = v138; - } - if (!v54 && v145 != -1 && v127 >= v130 && v129 >= v130 && v128 >= v130) { - v115 = v145; - v111 = v135; - v113 = 7; - v114 = v140; - } - } - } - v55 = PARC_PERS(a1, a2, v123, v122, v115, v121, 0); - if (v55 != 1) { - if (v55 == 2) { -LABEL_201: - v115 = NV_LIGNEDEP; - v114 = NV_LIGNEOFS; - v112 = NV_POSI; - } else { - if (v113 == 1) { - v56 = 0; - if (v111 > 0) { - do { - if ((uint16)_vm->_graphicsManager.colision2_ligne(a1, a2 - v56, &v125, &v124, _vm->_objectsManager.DERLIGNE + 1, TOTAL_LIGNES) == 1 - && _vm->_objectsManager.DERLIGNE < v124) { - v57 = v112; - v58 = GENIAL(v124, v125, a1, a2 - v56, a1, a2 - v111, v112, _vm->_globals.super_parcours, 4); - if (v58 == -1) - goto LABEL_282; - v112 = v58; - if (NVPY != -1) - v56 = a2 - NVPY; - } - v59 = v112; - _vm->_globals.super_parcours[v59] = a1; - _vm->_globals.super_parcours[v59 + 1] = a2 - v56; - _vm->_globals.super_parcours[v59 + 2] = 1; - _vm->_globals.super_parcours[v59 + 3] = 0; - v112 += 4; - ++v56; - } while (v111 > v56); - } - } - if (v113 == 5) { - v60 = 0; - if (v111 > 0) { - do { - if ((uint16)_vm->_graphicsManager.colision2_ligne(a1, v60 + a2, &v125, &v124, _vm->_objectsManager.DERLIGNE + 1, TOTAL_LIGNES) == 1 - && _vm->_objectsManager.DERLIGNE < v124) { - v57 = v112; - v61 = GENIAL(v124, v125, a1, v60 + a2, a1, v111 + a2, v112, _vm->_globals.super_parcours, 4); - if (v61 == -1) - goto LABEL_282; - v112 = v61; - if (NVPY != -1) - v60 = NVPY - a2; - } - v62 = v112; - _vm->_globals.super_parcours[v62] = a1; - _vm->_globals.super_parcours[v62 + 1] = v60 + a2; - _vm->_globals.super_parcours[v62 + 2] = 5; - _vm->_globals.super_parcours[v62 + 3] = 0; - v112 += 4; - ++v60; - } while (v111 > v60); - } - } - if (v113 == 7) { - v63 = 0; - if (v111 > 0) { - do { - if ((uint16)_vm->_graphicsManager.colision2_ligne(a1 - v63, a2, &v125, &v124, _vm->_objectsManager.DERLIGNE + 1, TOTAL_LIGNES) == 1 - && _vm->_objectsManager.DERLIGNE < v124) { - v57 = v112; - v64 = GENIAL(v124, v125, a1 - v63, a2, a1 - v111, a2, v112, _vm->_globals.super_parcours, 4); - if (v64 == -1) - goto LABEL_282; - v112 = v64; - if (NVPX != -1) - v63 = a1 - NVPX; - } - v65 = v112; - _vm->_globals.super_parcours[v65] = a1 - v63; - _vm->_globals.super_parcours[v65 + 1] = a2; - _vm->_globals.super_parcours[v65 + 2] = 7; - _vm->_globals.super_parcours[v65 + 3] = 0; - v112 += 4; - ++v63; - } while (v111 > v63); - } - } - if (v113 == 3) { - v66 = 0; - if (v111 > 0) { - do { - if ((uint16)_vm->_graphicsManager.colision2_ligne(v66 + a1, a2, &v125, &v124, _vm->_objectsManager.DERLIGNE + 1, TOTAL_LIGNES) == 1 - && _vm->_objectsManager.DERLIGNE < v124) { - v57 = v112; - v67 = GENIAL(v124, v125, v66 + a1, a2, v111 + a1, a2, v112, _vm->_globals.super_parcours, 4); - if (v67 == -1) - goto LABEL_282; - v112 = v67; - if (NVPX != -1) - v66 = NVPX - a1; - } - v68 = v112; - _vm->_globals.super_parcours[v68] = v66 + a1; - _vm->_globals.super_parcours[v68 + 1] = a2; - _vm->_globals.super_parcours[v68 + 2] = 3; - _vm->_globals.super_parcours[v68 + 3] = 0; - v112 += 4; - ++v66; - } while (v111 > v66); - } - } - } -LABEL_234: - if (v115 < v121) { - for (i = v114; _vm->_globals.Ligne[v115].field0 > i; ++i) { - v70 = _vm->_globals.Ligne[v115].fieldC; - v119 = READ_LE_UINT16(v70 + 4 * i); - v118 = READ_LE_UINT16(v70 + 4 * i + 2); - v71 = v112; - _vm->_globals.super_parcours[v71] = v119; - _vm->_globals.super_parcours[v71 + 1] = v118; - _vm->_globals.super_parcours[v71 + 2] = _vm->_globals.Ligne[v115].field6; - _vm->_globals.super_parcours[v71 + 3] = 0; - v112 += 4; - } - v116 = v115 + 1; - if ((v115 + 1) < v121) { - do { - v72 = 0; - v110 = v116; - for (j = v116; _vm->_globals.Ligne[j].field0 > v72; j = v116) { - v74 = _vm->_globals.Ligne[v110].fieldC; - v119 = READ_LE_UINT16(v74 + 4 * v72); - v118 = READ_LE_UINT16(v74 + 4 * v72 + 2); - v75 = v112; - _vm->_globals.super_parcours[v75] = v119; - _vm->_globals.super_parcours[v75 + 1] = v118; - _vm->_globals.super_parcours[v75 + 2] = _vm->_globals.Ligne[v110].field6; - _vm->_globals.super_parcours[v75 + 3] = 0; - v112 += 4; - v76 = _vm->_globals.Ligne[v110].field0; - if (v76 > 30) { - v77 = v76 / 2; - if (v77 < 0) - v77 = -v77; - if (v72 == v77) { - v78 = PARC_PERS(v119, v118, v123, v122, v110, v121, v112); - if (v78 == 1) - return (byte *)&_vm->_globals.super_parcours[0]; - if (v78 == 2) - goto LABEL_200; - if (MIRACLE(v119, v118, v110, v121, v112) == 1) - goto LABEL_201; - } - } - ++v72; - v110 = v116; - } - v79 = PARC_PERS(v119, v118, v123, v122, v116, v121, v112); - if (v79 == 1) - return (byte *)&_vm->_globals.super_parcours[0]; - if (v79 == 2) { -LABEL_200: - v115 = NV_LIGNEDEP; - v114 = NV_LIGNEOFS; - v112 = NV_POSI; - goto LABEL_234; - } - if (MIRACLE(v119, v118, v116, v121, v112) == 1) - goto LABEL_201; - ++v116; - } while (v116 < v121); - } - v114 = 0; - v115 = v121; - } - if (v115 > v121) { - v80 = v114; - if (v114 > 0) { - v98 = 16 * v115; - do { - v81 = _vm->_globals.Ligne[v98].fieldC; - v119 = READ_LE_UINT16(v81 + 4 * v80); - v118 = READ_LE_UINT16(v81 + 4 * v80 + 2); - v82 = v112; - _vm->_globals.super_parcours[v82] = v119; - _vm->_globals.super_parcours[v82 + 1] = v118; - _vm->_globals.super_parcours[v82 + 2] = _vm->_globals.Ligne[v98].field8; - _vm->_globals.super_parcours[v82 + 3] = 0; - v112 += 4; - --v80; - } while (v80 > 0); - } - v117 = v115 - 1; - if ((v115 - 1) > v121) { - do { - v83 = _vm->_globals.Ligne[v117].field0 - 1; - if (v83 > -1) { - v109 = 16 * v117; - do { - v84 = _vm->_globals.Ligne[v109].fieldC; - v119 = READ_LE_UINT16(v84 + 4 * v83); - v118 = READ_LE_UINT16(v84 + 4 * v83 + 2); - v85 = v112; - _vm->_globals.super_parcours[v85] = v119; - _vm->_globals.super_parcours[v85 + 1] = v118; - _vm->_globals.super_parcours[v85 + 2] = _vm->_globals.Ligne[v109].field8; - _vm->_globals.super_parcours[v85 + 3] = 0; - v112 += 4; - v86 = _vm->_globals.Ligne[v109].field0; - if (v86 > 30) { - v87 = v86 / 2; - if (v87 < 0) - v87 = -v87; - if (v83 == v87) { - v88 = PARC_PERS(v119, v118, v123, v122, v117, v121, v112); - if (v88 == 1) - return (byte *)&_vm->_globals.super_parcours[0]; - if (v88 == 2) - goto LABEL_200; - if (MIRACLE(v119, v118, v117, v121, v112) == 1) - goto LABEL_201; - } - } - --v83; - } while (v83 > -1); - } - v89 = PARC_PERS(v119, v118, v123, v122, v117, v121, v112); - if (v89 == 1) - return (byte *)&_vm->_globals.super_parcours[0]; - if (v89 == 2) - goto LABEL_200; - if (MIRACLE(v119, v118, v117, v121, v112) == 1) - goto LABEL_201; - --v117; - } while (v117 > v121); - } - v114 = _vm->_globals.Ligne[v121].field0 - 1; - v115 = v121; - } - if (v115 == v121) { - if (v114 <= v120) { - if (v114 < v120) { - v94 = v114; - v100 = 16 * v121; - do { - v95 = _vm->_globals.Ligne[v100].fieldC;; - v96 = READ_LE_UINT16(v95 + 4 * v94 + 2); - v97 = v112; - _vm->_globals.super_parcours[v97] = READ_LE_UINT16(v95 + 4 * v94); - _vm->_globals.super_parcours[v97 + 1] = v96; - _vm->_globals.super_parcours[v97 + 2] = _vm->_globals.Ligne[v100].field6; - _vm->_globals.super_parcours[v97 + 3] = 0; - v112 += 4; - ++v94; - } while (v120 > v94); - } - } else { - v90 = v114; - v99 = 16 * v121; - do { - v91 = _vm->_globals.Ligne[v99].fieldC; - v92 = READ_LE_UINT16(v91 + 4 * v90 + 2); - v93 = v112; - _vm->_globals.super_parcours[v93] = READ_LE_UINT16(v91 + 4 * v90); - _vm->_globals.super_parcours[v93 + 1] = v92; - _vm->_globals.super_parcours[v93 + 2] = _vm->_globals.Ligne[v99].field8; - _vm->_globals.super_parcours[v93 + 3] = 0; - v112 += 4; - --v90; - } while (v120 < v90); - } - } - v57 = v112; - if (PARC_PERS( - _vm->_globals.Param[v112 + 4192 / 2], - _vm->_globals.Param[v112 + 4194 / 2], - v123, - v122, - -1, - -1, - v112) != 1) { -LABEL_282: - _vm->_globals.super_parcours[v57] = -1; - _vm->_globals.super_parcours[v57 + 1] = -1; - _vm->_globals.super_parcours[v57 + 2] = -1; - _vm->_globals.super_parcours[v57 + 3] = -1; - } - return (byte *)&_vm->_globals.super_parcours[0]; - } - } - return (byte *)&_vm->_globals.super_parcours[0]; -} - void ObjectsManager::VERIFTAILLE() { int v0; int v1; @@ -3604,7 +2821,7 @@ byte *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) { v8 = 5; do { v62 = v8; - v9 = _vm->_graphicsManager.colision2_ligne(v75, v7, &v85, &v90, 0, _vm->_objectsManager.DERLIGNE); + v9 = _vm->_linesManager.colision2_ligne(v75, v7, &v85, &v90, 0, _vm->_objectsManager.DERLIGNE); v8 = v62; if (v9 == 1 && *(&v87 + v62) <= _vm->_objectsManager.DERLIGNE) break; @@ -3621,7 +2838,7 @@ byte *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) { v12 = 1; do { v63 = v12; - v13 = _vm->_graphicsManager.colision2_ligne(v75, v11, &v83, &v88, 0, _vm->_objectsManager.DERLIGNE); + v13 = _vm->_linesManager.colision2_ligne(v75, v11, &v83, &v88, 0, _vm->_objectsManager.DERLIGNE); v12 = v63; if (v13 == 1 && *(&v87 + v63) <= _vm->_objectsManager.DERLIGNE) break; @@ -3642,7 +2859,7 @@ byte *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) { v16 = 3; do { v64 = v16; - v17 = _vm->_graphicsManager.colision2_ligne(v15, v74, &v84, &v89, 0, _vm->_objectsManager.DERLIGNE); + v17 = _vm->_linesManager.colision2_ligne(v15, v74, &v84, &v89, 0, _vm->_objectsManager.DERLIGNE); v16 = v64; if (v17 == 1 && *(&v87 + v64) <= _vm->_objectsManager.DERLIGNE) break; @@ -3665,7 +2882,7 @@ byte *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) { v20 = 7; do { v65 = v20; - v21 = _vm->_graphicsManager.colision2_ligne(v19, v74, &v86, &v91, 0, _vm->_objectsManager.DERLIGNE); + v21 = _vm->_linesManager.colision2_ligne(v19, v74, &v86, &v91, 0, _vm->_objectsManager.DERLIGNE); v20 = v65; if (v21 == 1 && *(&v87 + v65) <= _vm->_objectsManager.DERLIGNE) break; @@ -3722,13 +2939,13 @@ byte *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) { v76[v25] = 1300; ++v24; } while (v24 <= 8); - v26 = _vm->_graphicsManager.colision2_ligne(a1, a2, &v83, &v88, 0, _vm->_objectsManager.DERLIGNE); + v26 = _vm->_linesManager.colision2_ligne(a1, a2, &v83, &v88, 0, _vm->_objectsManager.DERLIGNE); if (v26 == 1) { v69 = v88; v68 = v83; } if (!v26) { - if (_vm->_graphicsManager.colision2_ligne(a1, a2, &v83, &v88, 0, TOTAL_LIGNES) == 1) { + if (_vm->_linesManager.colision2_ligne(a1, a2, &v83, &v88, 0, _vm->_linesManager.TOTAL_LIGNES) == 1) { v27 = 0; while (1) { v28 = READ_LE_UINT16(_vm->_globals.essai2 + 2 * (signed __int16)v27); @@ -3736,7 +2953,7 @@ byte *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) { v66 = READ_LE_UINT16(_vm->_globals.essai2 + 2 * (signed __int16)v27 + 4); v27 = v27 + 4; v30 = v27; - v31 = _vm->_graphicsManager.colision2_ligne(v28, v29, &v83, &v88, 0, _vm->_objectsManager.DERLIGNE); + v31 = _vm->_linesManager.colision2_ligne(v28, v29, &v83, &v88, 0, _vm->_objectsManager.DERLIGNE); v27 = v30; if (v31) break; @@ -3766,14 +2983,14 @@ LABEL_90: if (v69 < v73) { v34 = v68; v35 = v68; - for (i = _vm->_globals.Ligne[v69].field0; v35 < (i - 2); i = _vm->_globals.Ligne[v69].field0) { - v37 = _vm->_globals.Ligne[v69].fieldC; + for (i = _vm->_linesManager.Ligne[v69].field0; v35 < (i - 2); i = _vm->_linesManager.Ligne[v69].field0) { + v37 = _vm->_linesManager.Ligne[v69].fieldC; v38 = READ_LE_UINT16(v37 + 4 * v35); int v37_2 = READ_LE_UINT16(v37 + 4 * v35 + 2); v39 = v67; _vm->_globals.super_parcours[v39] = v38; _vm->_globals.super_parcours[v39 + 1] = v37_2; - _vm->_globals.super_parcours[v39 + 2] = _vm->_globals.Ligne[v69].field6; + _vm->_globals.super_parcours[v39 + 2] = _vm->_linesManager.Ligne[v69].field6; _vm->_globals.super_parcours[v39 + 3] = 0; v67 += 4; ++v34; @@ -3781,32 +2998,33 @@ LABEL_90: } for (j = v69 + 1; j < v73; ++j) { if (PLAN_TEST( - _vm->_globals.Ligne[j].fieldC, - READ_LE_UINT16(_vm->_globals.Ligne[j].fieldC + 2), + _vm->_linesManager.Ligne[j].fieldC, + READ_LE_UINT16(_vm->_linesManager.Ligne[j].fieldC + 2), v67, j, v73, 0) == 1) { LABEL_88: - v69 = NV_LIGNEDEP; - v68 = NV_LIGNEOFS; - v67 = NV_POSI; - goto LABEL_90; + v69 = _vm->_linesManager.NV_LIGNEDEP; + v68 = _vm->_linesManager.NV_LIGNEOFS; + v67 = _vm->_linesManager.NV_POSI; + goto LABEL_90; } + v40 = 0; - if (_vm->_globals.Ligne[j].field0 - 2 > 0) { + if (_vm->_linesManager.Ligne[j].field0 - 2 > 0) { do { - v41 = _vm->_globals.Ligne[j].fieldC; + v41 = _vm->_linesManager.Ligne[j].fieldC; v42 = READ_LE_UINT16(v41 + 4 * v40); int v41_2 = READ_LE_UINT16(v41 + 4 * v40 + 2); v43 = v67; _vm->_globals.super_parcours[v43] = v42; _vm->_globals.super_parcours[v43 + 1] = v41_2; - _vm->_globals.super_parcours[v43 + 2] = _vm->_globals.Ligne[j].field6; + _vm->_globals.super_parcours[v43 + 2] = _vm->_linesManager.Ligne[j].field6; _vm->_globals.super_parcours[v43 + 3] = 0; v67 += 4; ++v40; - } while (v40 < _vm->_globals.Ligne[j].field0 - 2); + } while (v40 < _vm->_linesManager.Ligne[j].field0 - 2); } } v68 = 0; @@ -3814,43 +3032,43 @@ LABEL_88: } if (v69 > v73) { for (k = v68; k > 0; --k) { - v45 = _vm->_globals.Ligne[v69].fieldC; + v45 = _vm->_linesManager.Ligne[v69].fieldC; v46 = READ_LE_UINT16(v45 + 4 * k); int v45_2 = READ_LE_UINT16(v45 + 4 * k + 2); v47 = v67; _vm->_globals.super_parcours[v47] = v46; _vm->_globals.super_parcours[v47 + 1] = v45_2; - _vm->_globals.super_parcours[v47 + 2] = _vm->_globals.Ligne[v69].field8; + _vm->_globals.super_parcours[v47 + 2] = _vm->_linesManager.Ligne[v69].field8; _vm->_globals.super_parcours[v47 + 3] = 0; v67 += 4; } for (l = v69 - 1; l > v73; --l) { v48 = l; if (PLAN_TEST( - _vm->_globals.Ligne[l].fieldC + 4 * _vm->_globals.Ligne[v48].field0 - 4, - READ_LE_UINT16(_vm->_globals.Ligne[l].fieldC + 4 * _vm->_globals.Ligne[v48].field0 - 2), + _vm->_linesManager.Ligne[l].fieldC + 4 * _vm->_linesManager.Ligne[v48].field0 - 4, + READ_LE_UINT16(_vm->_linesManager.Ligne[l].fieldC + 4 * _vm->_linesManager.Ligne[v48].field0 - 2), v67, l, v73, 0) == 1) goto LABEL_88; - v49 = _vm->_globals.Ligne[v48].field0 - 2; - if ((_vm->_globals.Ligne[v48].field0 - 2) > 0) { + v49 = _vm->_linesManager.Ligne[v48].field0 - 2; + if ((_vm->_linesManager.Ligne[v48].field0 - 2) > 0) { do { - v50 = _vm->_globals.Ligne[l].fieldC; + v50 = _vm->_linesManager.Ligne[l].fieldC; v51 = READ_LE_UINT16(v50 + 4 * v49); int v50_2 = READ_LE_UINT16(v50 + 4 * v49 + 2); v52 = v67; _vm->_globals.super_parcours[v52] = v51; _vm->_globals.super_parcours[v52 + 1] = v50_2; - _vm->_globals.super_parcours[v52 + 2] = _vm->_globals.Ligne[l].field8; + _vm->_globals.super_parcours[v52 + 2] = _vm->_linesManager.Ligne[l].field8; _vm->_globals.super_parcours[v52 + 3] = 0; v67 += 4; --v49; } while (v49 > 0); } } - v68 = _vm->_globals.Ligne[v73].field0 - 1; + v68 = _vm->_linesManager.Ligne[v73].field0 - 1; v69 = v73; } if (v69 == v73) { @@ -3858,13 +3076,13 @@ LABEL_88: if (v68 < v72) { v57 = v68; do { - v58 = _vm->_globals.Ligne[v73].fieldC; + v58 = _vm->_linesManager.Ligne[v73].fieldC; v59 = READ_LE_UINT16(v58 + 4 * v57); int v58_2 = READ_LE_UINT16(v58 + 4 * v57 + 2); v60 = v67; _vm->_globals.super_parcours[v60] = v59; _vm->_globals.super_parcours[v60 + 1] = v58_2; - _vm->_globals.super_parcours[v60 + 2] = _vm->_globals.Ligne[v73].field6; + _vm->_globals.super_parcours[v60 + 2] = _vm->_linesManager.Ligne[v73].field6; _vm->_globals.super_parcours[v60 + 3] = 0; v67 += 4; ++v57; @@ -3873,13 +3091,13 @@ LABEL_88: } else { v53 = v68; do { - v54 = _vm->_globals.Ligne[v73].fieldC; + v54 = _vm->_linesManager.Ligne[v73].fieldC; v55 = READ_LE_UINT16(v54 + 4 * v53); int v54_2 = READ_LE_UINT16(v54 + 4 * v53 + 2); v56 = v67; _vm->_globals.super_parcours[2 * v56] = v55; _vm->_globals.super_parcours[2 * v56 + 1] = v54_2; - _vm->_globals.super_parcours[2 * v56 + 2] = _vm->_globals.Ligne[v73].field8; + _vm->_globals.super_parcours[2 * v56 + 2] = _vm->_linesManager.Ligne[v73].field8; _vm->_globals.super_parcours[2 * v56 + 3] = 0; v67 += 4; --v53; @@ -4190,7 +3408,7 @@ int ObjectsManager::MZONE() { && _vm->_globals.CarreZone[v7].field6 <= v20 && _vm->_globals.CarreZone[v7].field8 >= v20) { if (_vm->_globals.CarreZone[v7].fieldE == 1) { - _vm->_globals.oldzone_46 = _vm->_globals.LigneZone[_vm->_globals.CarreZone[v7].fieldA].field2; + _vm->_globals.oldzone_46 = _vm->_linesManager.LigneZone[_vm->_globals.CarreZone[v7].fieldA].field2; return _vm->_globals.oldzone_46; } v9 = _vm->_globals.SegmentEnCours; @@ -4245,10 +3463,6 @@ LABEL_58: return result; } -void ObjectsManager::CLEAR_ZONE() { - warning("TODO: CLEAR_ZONE"); -} - void ObjectsManager::RESET_OBSTACLE() { warning("TODO: CLEAR_ZONE"); } @@ -5120,7 +4334,7 @@ LABEL_1141: _vm->_globals.chemin = PTRNUL; v13 = YSPR(0); v14 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v14, v13, 564, 420); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v14, v13, 564, 420); _vm->_objectsManager.NUMZONE = -1; do { GOHOME(); @@ -5191,7 +4405,7 @@ LABEL_1141: _vm->_globals.chemin = PTRNUL; v16 = YSPR(0); v17 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v17, v16, 445, 332); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v17, v16, 445, 332); _vm->_globals.NOT_VERIF = 1; do { GOHOME(); @@ -5311,7 +4525,7 @@ LABEL_1141: _vm->_globals.chemin = PTRNUL; v22 = YSPR(0); v23 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v23, v22, 119, 268); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v23, v22, 119, 268); _vm->_globals.NOT_VERIF = 1; do { GOHOME(); @@ -5534,17 +4748,17 @@ LABEL_1141: if (_vm->_globals.SAUVEGARDE->data[svField253] == 1) { v27 = YSPR(0); v28 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v28, v27, 201, 294); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v28, v27, 201, 294); } if (_vm->_globals.SAUVEGARDE->data[svField253] == 2) { v29 = YSPR(0); v30 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v30, v29, 158, 338); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v30, v29, 158, 338); } if (_vm->_globals.SAUVEGARDE->data[svField253] > 2) { v31 = YSPR(0); v32 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v32, v31, 211, 393); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v32, v31, 211, 393); } _vm->_globals.NOT_VERIF = 1; do { @@ -5741,7 +4955,7 @@ LABEL_1141: _vm->_globals.chemin = PTRNUL; v37 = YSPR(0); v38 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v38, v37, 330, 418); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v38, v37, 330, 418); _vm->_globals.NOT_VERIF = 1; _vm->_objectsManager.NUMZONE = 0; do { @@ -5767,7 +4981,7 @@ LABEL_1141: _vm->_globals.NOT_VERIF = 1; v39 = YSPR(0); v40 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v40, v39, 330, 314); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v40, v39, 330, 314); _vm->_objectsManager.NUMZONE = 0; _vm->_globals.NOT_VERIF = 1; do { @@ -5891,7 +5105,7 @@ LABEL_1141: _vm->_globals.NOT_VERIF = 1; v43 = YSPR(0); v44 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v44, v43, 488, 280); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v44, v43, 488, 280); _vm->_globals.NOT_VERIF = 1; do { GOHOME(); @@ -6378,7 +5592,7 @@ LABEL_1141: _vm->_globals.NOT_VERIF = 1; v55 = YSPR(0); v56 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v56, v55, 361, 325); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v56, v55, 361, 325); _vm->_globals.NOT_VERIF = 1; _vm->_objectsManager.NUMZONE = -1; do { @@ -6399,7 +5613,7 @@ LABEL_1141: _vm->_globals.NOT_VERIF = 1; v57 = YSPR(0); v58 = XSPR(0); - _vm->_globals.chemin = PARCOURS2(v58, v57, 361, 325); + _vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v58, v57, 361, 325); _vm->_globals.NOT_VERIF = 1; _vm->_objectsManager.NUMZONE = -1; do { @@ -6579,16 +5793,6 @@ void ObjectsManager::VERBE_ON(int a1, int a2) { warning("TODO: VERBE_ON"); } -int ObjectsManager::PARC_PERS(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { - warning("TODO: PARC_PERS"); - return 0; -} - -int ObjectsManager::MIRACLE(int a1, int a2, int a3, int a4, int a5) { - warning("TODO: MIRACLE"); - return 0; -} - int ObjectsManager::GENIAL(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int16 *a8, int a9) { warning("TODO: GENIAL"); return 0; @@ -6646,13 +5850,13 @@ int ObjectsManager::colision(int a1, int a2) { int v9 = v3 + 1; do { - byte *srcP = _vm->_globals.LigneZone[v8].field4; + byte *srcP = _vm->_linesManager.LigneZone[v8].field4; if (srcP != PTRNUL) { bool flag = true; - int v11 = READ_LE_UINT16(srcP + _vm->_globals.LigneZone[v8].field0 * 2); - int dataV2 = READ_LE_UINT16(srcP + _vm->_globals.LigneZone[v8].field0 * 2 + 2); - int v12 = READ_LE_UINT16(srcP + _vm->_globals.LigneZone[v8].field0 * 4 - 4); - int v13 = READ_LE_UINT16(srcP + _vm->_globals.LigneZone[v8].field0 * 4 - 2); + int v11 = READ_LE_UINT16(srcP + _vm->_linesManager.LigneZone[v8].field0 * 2); + int dataV2 = READ_LE_UINT16(srcP + _vm->_linesManager.LigneZone[v8].field0 * 2 + 2); + int v12 = READ_LE_UINT16(srcP + _vm->_linesManager.LigneZone[v8].field0 * 4 - 4); + int v13 = READ_LE_UINT16(srcP + _vm->_linesManager.LigneZone[v8].field0 * 4 - 2); int v10 = v13; if (v11 < v12 && v4 >= v11 && v5 > v13) @@ -6666,14 +5870,14 @@ int ObjectsManager::colision(int a1, int a2) { if (!flag) { - if (v11 < _vm->_globals.LigneZone[v8].field0) { - for (; v11 < _vm->_globals.LigneZone[v8].field0; ++idx) { + if (v11 < _vm->_linesManager.LigneZone[v8].field0) { + for (; v11 < _vm->_linesManager.LigneZone[v8].field0; ++idx) { int v11 = READ_LE_UINT16(srcP); int v12 = READ_LE_UINT16(srcP + 2); srcP += 4; if ((v2 == v11 || v9 == v11) && a2 == v12) - return _vm->_globals.LigneZone[v8].field2; + return _vm->_linesManager.LigneZone[v8].field2; } } } |