aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins/objects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/hopkins/objects.cpp')
-rw-r--r--engines/hopkins/objects.cpp912
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;
}
}
}