aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2013-01-10 08:28:15 +0100
committerStrangerke2013-01-10 08:28:15 +0100
commit36894babe1ddecc10c9fedba36c5649f3e21b84e (patch)
tree9a616ce828ab2e595224f768bba4bb7c496b6a30
parent0bf6d54d6bbddcb490aecdeaf6844957ee5faa56 (diff)
downloadscummvm-rg350-36894babe1ddecc10c9fedba36c5649f3e21b84e.tar.gz
scummvm-rg350-36894babe1ddecc10c9fedba36c5649f3e21b84e.tar.bz2
scummvm-rg350-36894babe1ddecc10c9fedba36c5649f3e21b84e.zip
HOPKINS: Refactor checkCollisionLine
-rw-r--r--engines/hopkins/globals.cpp4
-rw-r--r--engines/hopkins/lines.cpp361
-rw-r--r--engines/hopkins/lines.h6
-rw-r--r--engines/hopkins/objects.cpp56
4 files changed, 200 insertions, 227 deletions
diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp
index 7d93e31af7..2392376a97 100644
--- a/engines/hopkins/globals.cpp
+++ b/engines/hopkins/globals.cpp
@@ -325,12 +325,12 @@ void Globals::clearAll() {
chemin = (int16 *)g_PTRNUL;
for (int idx = 0; idx < 400; ++idx) {
- _vm->_linesManager.Ligne[idx].field0 = 0;
+ _vm->_linesManager.Ligne[idx]._lineDataEndIdx = 0;
_vm->_linesManager.Ligne[idx].field2 = 0;
_vm->_linesManager.Ligne[idx].field4 = 0;
_vm->_linesManager.Ligne[idx].field6 = 0;
_vm->_linesManager.Ligne[idx].field8 = 0;
- _vm->_linesManager.Ligne[idx].lineData = (int16 *)g_PTRNUL;
+ _vm->_linesManager.Ligne[idx]._lineData = (int16 *)g_PTRNUL;
_vm->_linesManager._zoneLine[idx].count = 0;
_vm->_linesManager._zoneLine[idx].field2 = 0;
diff --git a/engines/hopkins/lines.cpp b/engines/hopkins/lines.cpp
index 1fb48047eb..d9052859eb 100644
--- a/engines/hopkins/lines.cpp
+++ b/engines/hopkins/lines.cpp
@@ -183,8 +183,8 @@ void LinesManager::addZoneLine(int idx, int a2, int a3, int a4, int a5, int bobZ
void LinesManager::RESET_OBSTACLE() {
for (int idx = 0; idx < 400; ++idx) {
RETIRE_LIGNE(idx);
- Ligne[idx].field0 = 0;
- Ligne[idx].lineData = (int16 *)g_PTRNUL;
+ Ligne[idx]._lineDataEndIdx = 0;
+ Ligne[idx]._lineData = (int16 *)g_PTRNUL;
}
}
@@ -192,7 +192,7 @@ void LinesManager::RESET_OBSTACLE() {
void LinesManager::RETIRE_LIGNE(int idx) {
if (idx > 400)
error("Attempting to add a line obstacle > MAX_LIGNE.");
- Ligne[idx].lineData = (int16 *)_vm->_globals.freeMemory((byte *)Ligne[idx].lineData);
+ Ligne[idx]._lineData = (int16 *)_vm->_globals.freeMemory((byte *)Ligne[idx]._lineData);
}
// Add Line
@@ -225,7 +225,7 @@ void LinesManager::AJOUTE_LIGNE(int idx, int a2, int a3, int a4, int a5, int a6,
if (_linesNumb < idx)
_linesNumb = idx;
- Ligne[idx].lineData = (int16 *)_vm->_globals.freeMemory((byte *)Ligne[idx].lineData);
+ Ligne[idx]._lineData = (int16 *)_vm->_globals.freeMemory((byte *)Ligne[idx]._lineData);
v7 = abs(a3 - a5);
v8 = v7 + 1;
v9 = abs(a4 - a6);
@@ -239,9 +239,9 @@ void LinesManager::AJOUTE_LIGNE(int idx, int a2, int a3, int a4, int a5, int a6,
error("AJOUTE LIGNE OBSTACLE");
Common::fill(v10, v10 + 4 * v34 + 8, 0);
- Ligne[idx].lineData = (int16 *)v10;
+ Ligne[idx]._lineData = (int16 *)v10;
- v32 = Ligne[idx].lineData;
+ v32 = Ligne[idx]._lineData;
v36 = 1000 * v8;
v39 = 1000 * v8 / (v34 - 1);
v37 = 1000 * v33 / (v34 - 1);
@@ -337,91 +337,68 @@ void LinesManager::AJOUTE_LIGNE(int idx, int a2, int a3, int a4, int a5, int a6,
v27[0] = -1;
v27[1] = -1;
- Ligne[idx].field0 = v35 + 1;
+ Ligne[idx]._lineDataEndIdx = v35 + 1;
Ligne[idx].field2 = a7;
Ligne[idx].field4 = a2;
}
-// Line Collision 2
-bool LinesManager::colision2_ligne(int a1, int a2, int *a3, int *a4, int a5, int a6) {
- int16 *v7;
- int16 *v13;
-
- int v24 = a5;
- int v6 = a5;
- if (a5 >= a6 + 1)
- return false;
-
- int v11;
- int v22 = a1 + 4;
- int v21 = a1 - 4;
- int v20 = a2 + 4;
- int v19 = a2 - 4;
- int v17;
- for (;;) {
- v7 = Ligne[v6].lineData;
-
- if (v7 != (int16 *)g_PTRNUL) {
- int v23 = 1;
- int v8 = 2 * Ligne[v6].field0;
- int v9 = v7[0];
- int v16 = v7[1];
- int v10 = v7[v8 - 2];
- int v18 = v7[v8 - 1];
- if (v7[0] >= v10) {
- if (v21 > v9 || v22 < v10)
- v23 = 0;
- } else {
- if (v22 < v9 || v21 > v10)
- v23 = 0;
- if (v9 >= v10) {
- if (v21 > v9 || v22 < v10)
- v23 = 0;
- }
- }
- if (v16 >= v18) {
- if (v19 > v16 || v20 < v18)
- v23 = 0;
- } else {
- if (v20 < v16 || v19 > v18)
- v23 = 0;
- if (v16 >= v18) {
- if (v19 > v16 || v20 < v18)
- v23 = 0;
- }
- }
-
- if (v23 == 1) {
- v11 = 0;
- v17 = Ligne[v24].field0;
- if (v17 > 0)
- break;
+/**
+ * Check collision line
+ */
+bool LinesManager::checkCollisionLine(int xp, int yp, int *foundDataIdx, int *foundLineIdx, int startLineIdx, int endLineIdx) {
+ int16 *lineData;
+
+ int left = xp + 4;
+ int right = xp - 4;
+ int top = yp + 4;
+ int bottom = yp - 4;
+
+ *foundDataIdx = -1;
+ *foundLineIdx = -1;
+
+ for (int curLineIdx = startLineIdx; curLineIdx <= endLineIdx; curLineIdx++) {
+ lineData = Ligne[curLineIdx]._lineData;
+
+ if (lineData == (int16 *)g_PTRNUL)
+ continue;
+
+ bool collisionFl = true;
+ int lineStartX = lineData[0];
+ int lineStartY = lineData[1];
+ int lineDataIdx = 2 * Ligne[curLineIdx]._lineDataEndIdx;
+ int lineEndX = lineData[lineDataIdx - 2];
+ int lineEndY = lineData[lineDataIdx - 1];
+ if (lineStartX >= lineEndX) {
+ if (right > lineStartX || left < lineEndX)
+ collisionFl = false;
+ } else { // lineStartX < lineEndX
+ if (left < lineStartX || right > lineEndX)
+ collisionFl = false;
+ }
+ if (lineStartY >= lineEndY) {
+ if (bottom > lineStartY || top < lineEndY)
+ collisionFl = false;
+ } else { // lineStartY < lineEndY
+ if (top < lineStartY || bottom > lineEndY)
+ collisionFl = false;
+ }
+
+ if (!collisionFl)
+ continue;
+
+ for (int idx = 0; idx < Ligne[curLineIdx]._lineDataEndIdx; idx++) {
+ int lineX = lineData[0];
+ int lineY = lineData[1];
+ lineData += 2;
+
+ if ((xp == lineX || xp + 1 == lineX) && (yp == lineY || yp + 1 == lineY)) {
+ *foundDataIdx = idx;
+ *foundLineIdx = curLineIdx;
+ return true;
}
}
-LABEL_28:
- ++v24;
- v6 = v24;
- if (v24 >= a6 + 1)
- return false;
- }
- for (;;) {
- int v12 = v7[0];
-
- v13 = v7 + 1;
- int v14 = v13[0];
- v7 = v13 + 1;
-
- if (a1 == v12 || a1 + 1 == v12) {
- if (a2 == v14 || a2 + 1 == v14)
- break;
- }
- ++v11;
- if (v17 <= v11)
- goto LABEL_28;
}
- *a3 = v11;
- *a4 = v24;
- return true;
+ return false;
}
// Init route
@@ -436,14 +413,14 @@ void LinesManager::INIPARCOURS() {
int v12;
int v13;
- int v15 = Ligne[0].lineData[0];
- int v14 = Ligne[0].lineData[1];
+ int v15 = Ligne[0]._lineData[0];
+ int v14 = Ligne[0]._lineData[1];
int v0 = 1;
bool v1 = false;
do {
- v2 = Ligne[v0].field0;
- v3 = Ligne[v0].lineData;
+ v2 = Ligne[v0]._lineDataEndIdx;
+ v3 = Ligne[v0]._lineData;
v4 = v3[2 * v2 - 2];
v5 = v3[2 * v2 - 1];
@@ -455,7 +432,7 @@ void LinesManager::INIPARCOURS() {
if (v0 == 400)
error("ERROR - LAST LINE NOT FOUND");
- v7 = Ligne[v0 + 1].lineData;
+ v7 = Ligne[v0 + 1]._lineData;
if (v7[0] != v4 && v7[1] != v5)
v1 = true;
if (!v1)
@@ -467,7 +444,7 @@ void LinesManager::INIPARCOURS() {
v9 = _vm->_objectsManager._lastLine + 1;
for (int v8 = 1; v8 != 400; v8++) {
v11 = v8;
- if (Ligne[v11].field0 < v13) {
+ if (Ligne[v11]._lineDataEndIdx < v13) {
if (v8 != v9) {
v12 = v8 - 1;
Ligne[v11].field6 = Ligne[v12].field6;
@@ -484,8 +461,8 @@ int LinesManager::CONTOURNE(int a1, int a2, int a3, int a4, int a5, int16 *a6, i
int v8 = a3;
int v50;
if (a1 < a4) {
- for (int i = a2; Ligne[a1].field0 > i; ++i) {
- int16 *v10 = Ligne[a1].lineData;
+ for (int i = a2; Ligne[a1]._lineDataEndIdx > i; ++i) {
+ int16 *v10 = Ligne[a1]._lineData;
int v11 = v10[2 * i];
v50 = v10[2 * i + 1];
@@ -497,8 +474,8 @@ int LinesManager::CONTOURNE(int a1, int a2, int a3, int a4, int a5, int16 *a6, i
}
for (int v34 = a1 + 1; v34 < a4; v34++) {
- for (int i = 0; i < Ligne[v34].field0; i++) {
- int16 *v14 = Ligne[v34].lineData;
+ for (int i = 0; i < Ligne[v34]._lineDataEndIdx; i++) {
+ int16 *v14 = Ligne[v34]._lineData;
int v15 = v14[2 * i];
v50 = v14[2 * i + 1];
int v16 = v8;
@@ -515,7 +492,7 @@ int LinesManager::CONTOURNE(int a1, int a2, int a3, int a4, int a5, int16 *a6, i
}
if (v36 > a4) {
for (int j = v7; j > 0; --j) {
- int16 *v18 = Ligne[v36].lineData;
+ int16 *v18 = Ligne[v36]._lineData;
int v19 = v18[2 * j];
v50 = v18[2 * j + 1];
@@ -527,8 +504,8 @@ int LinesManager::CONTOURNE(int a1, int a2, int a3, int a4, int a5, int16 *a6, i
}
if ((int)(v36 - 1) > a4) {
for (int v35 = v36 - 1; v35 > a4; v35--) {
- for (int k = Ligne[v35].field0 - 1; k > 0; --k) {
- int16 *v22 = Ligne[v35].lineData;
+ for (int k = Ligne[v35]._lineDataEndIdx - 1; k > 0; --k) {
+ int16 *v22 = Ligne[v35]._lineData;
int v23 = v22[2 * k];
v50 = v22[2 * k + 1];
@@ -541,13 +518,13 @@ int LinesManager::CONTOURNE(int a1, int a2, int a3, int a4, int a5, int16 *a6, i
}
}
- v7 = Ligne[a4].field0 - 1;
+ v7 = Ligne[a4]._lineDataEndIdx - 1;
v36 = a4;
}
if (v36 == a4) {
if (a5 >= v7) {
for (int i = v7; i > a5; i++) {
- int16 *v30 = Ligne[a4].lineData;
+ int16 *v30 = Ligne[a4]._lineData;
int v31 = v30[2 * i];
v50 = v30[2 * i + 1];
@@ -559,7 +536,7 @@ int LinesManager::CONTOURNE(int a1, int a2, int a3, int a4, int a5, int16 *a6, i
}
} else {
for (int i = v7; i > a5; --i) {
- int16 *v26 = Ligne[a4].lineData;
+ int16 *v26 = Ligne[a4]._lineData;
int v27 = v26[2 * i];
v50 = v26[2 * i+ 1];
@@ -581,8 +558,8 @@ int LinesManager::CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *a6,
int v40 = a3;
int v50;
if (a4 < a1) {
- for (int i = a2; Ligne[a1].field0 > i; ++i) {
- int16 *v12 = Ligne[a1].lineData;
+ for (int i = a2; Ligne[a1]._lineDataEndIdx > i; ++i) {
+ int16 *v12 = Ligne[a1]._lineData;
int v13 = v12[2 * i];
v50 = v12[2 * i + 1];
@@ -596,8 +573,8 @@ int LinesManager::CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *a6,
if (a1 + 1 == a9 + 1)
v15 = a8;
while (a4 != v15) {
- for (int v16 = 0; v16 < Ligne[v15].field0; v16++) {
- int16 *v17 = Ligne[v15].lineData;
+ for (int v16 = 0; v16 < Ligne[v15]._lineDataEndIdx; v16++) {
+ int16 *v17 = Ligne[v15]._lineData;
int v18 = v17[2 * v16];
v50 = v17[2 * v16 + 1];
@@ -617,7 +594,7 @@ int LinesManager::CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *a6,
}
if (a4 > v9) {
for (int j = v10; j > 0; --j) {
- int16 *v21 = Ligne[v9].lineData;
+ int16 *v21 = Ligne[v9]._lineData;
int v22 = v21[2 * j];
v50 = v21[2 * j + 1];
@@ -631,8 +608,8 @@ int LinesManager::CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *a6,
if (v24 == a8 - 1)
v24 = a9;
while (a4 != v24) {
- for (int k = Ligne[v24].field0 - 1; k > 0; --k) {
- int16 *v26 = Ligne[v24].lineData;
+ for (int k = Ligne[v24]._lineDataEndIdx - 1; k > 0; --k) {
+ int16 *v26 = Ligne[v24]._lineData;
int v27 = v26[2 * k];
v50 = v26[2 * k + 1];
@@ -646,7 +623,7 @@ int LinesManager::CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *a6,
if (a8 - 1 == v24)
v24 = a9;
}
- v10 = Ligne[a4].field0 - 1;
+ v10 = Ligne[a4]._lineDataEndIdx - 1;
v9 = a4;
}
if (a4 == v9) {
@@ -654,7 +631,7 @@ int LinesManager::CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *a6,
if (a5 > v10) {
int v39 = a4;
for (int v33 = v10; v33 < a5; v33++) {
- int16 *v34 = Ligne[v39].lineData;
+ int16 *v34 = Ligne[v39]._lineData;
int v35 = v34[2 * v33];
v50 = v34[2 * v33 + 1];
@@ -668,7 +645,7 @@ int LinesManager::CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *a6,
} else {
int v38 = a4;
for (int v29 = v10; v29 > a5; v29--) {
- int16 *v30 = Ligne[v38].lineData;
+ int16 *v30 = Ligne[v38]._lineData;
int v31 = v30[2 * v29];
v50 = v30[2 * v29 + 1];
@@ -731,7 +708,7 @@ int LinesManager::MIRACLE(int a1, int a2, int a3, int a4, int a5) {
v6 = a2;
v50 = a3;
v7 = a5;
- if (colision2_ligne(a1, a2, &v51, &v50, 0, _linesNumb)) {
+ if (checkCollisionLine(a1, a2, &v51, &v50, 0, _linesNumb)) {
v8 = Ligne[v50].field4;
if (v8 == 1)
v6 = a2 - 2;
@@ -763,7 +740,7 @@ int LinesManager::MIRACLE(int a1, int a2, int a3, int a4, int a5) {
v9 = 0;
v10 = v40;
for (i = v40; v40 + 200 > v10; i = v10) {
- if (colision2_ligne(v41, i, &v49, &v48, 0, _vm->_objectsManager._lastLine) == 1 && v48 <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(v41, i, &v49, &v48, 0, _vm->_objectsManager._lastLine) == 1 && v48 <= _vm->_objectsManager._lastLine)
break;
v49 = 0;
v48 = -1;
@@ -774,7 +751,7 @@ int LinesManager::MIRACLE(int a1, int a2, int a3, int a4, int a5) {
v12 = 0;
v13 = v40;
for (j = v40; v40 - 200 < v13; j = v13) {
- if (colision2_ligne(v41, j, &v47, &v46, 0, _vm->_objectsManager._lastLine) == 1 && v46 <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(v41, j, &v47, &v46, 0, _vm->_objectsManager._lastLine) == 1 && v46 <= _vm->_objectsManager._lastLine)
break;
v47 = 0;
v46 = -1;
@@ -785,7 +762,7 @@ int LinesManager::MIRACLE(int a1, int a2, int a3, int a4, int a5) {
v15 = 0;
v16 = v41;
for (k = v41; v41 + 200 > v16; k = v16) {
- if (colision2_ligne(k, v40, &v45, &v44, 0, _vm->_objectsManager._lastLine) == 1 && v44 <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(k, v40, &v45, &v44, 0, _vm->_objectsManager._lastLine) == 1 && v44 <= _vm->_objectsManager._lastLine)
break;
v45 = 0;
v44 = -1;
@@ -796,7 +773,7 @@ int LinesManager::MIRACLE(int a1, int a2, int a3, int a4, int a5) {
v18 = 0;
v19 = v41;
for (l = v41; v41 - 200 < v19; l = v19) {
- if (colision2_ligne(l, v40, &v43, &v42, 0, _vm->_objectsManager._lastLine) == 1 && v42 <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(l, v40, &v43, &v42, 0, _vm->_objectsManager._lastLine) == 1 && v42 <= _vm->_objectsManager._lastLine)
break;
v43 = 0;
v42 = -1;
@@ -888,7 +865,7 @@ int LinesManager::MIRACLE(int a1, int a2, int a3, int a4, int a5) {
}
if (v21 == 1) {
for (int v22 = 0; v22 < v39; v22++) {
- if (colision2_ligne(v41, v40 - v22, &v47, &v46, _vm->_objectsManager._lastLine + 1, _linesNumb)
+ if (checkCollisionLine(v41, v40 - v22, &v47, &v46, _vm->_objectsManager._lastLine + 1, _linesNumb)
&& _vm->_objectsManager._lastLine < v46) {
v23 = GENIAL(v46, v47, v41, v40 - v22, v41, v40 - v39, v7, &_vm->_globals.super_parcours[0], 4);
if (v23 == -1)
@@ -912,7 +889,7 @@ LABEL_186:
}
if (v21 == 5) {
for (int v25 = 0; v25 < v37; v25++) {
- if (colision2_ligne(v41, v25 + v40, &v47, &v46, _vm->_objectsManager._lastLine + 1, _linesNumb)
+ if (checkCollisionLine(v41, v25 + v40, &v47, &v46, _vm->_objectsManager._lastLine + 1, _linesNumb)
&& _vm->_objectsManager._lastLine < v46) {
v26 = GENIAL(v46, v47, v41, v25 + v40, v41, v37 + v40, v7, &_vm->_globals.super_parcours[0], 4);
if (v26 == -1)
@@ -932,7 +909,7 @@ LABEL_186:
}
if (v21 == 7) {
for (int v28 = 0; v28 < v18; v28++) {
- if (colision2_ligne(v41 - v28, v40, &v47, &v46, _vm->_objectsManager._lastLine + 1, _linesNumb)
+ if (checkCollisionLine(v41 - v28, v40, &v47, &v46, _vm->_objectsManager._lastLine + 1, _linesNumb)
&& _vm->_objectsManager._lastLine < v46) {
v29 = GENIAL(v46, v47, v41 - v28, v40, v41 - v18, v40, v7, &_vm->_globals.super_parcours[0], 4);
if (v29 == -1)
@@ -952,7 +929,7 @@ LABEL_186:
}
if (v21 == 3) {
for (int v31 = 0; v31 < v38; v31++) {
- if (colision2_ligne(v31 + v41, v40, &v47, &v46, _vm->_objectsManager._lastLine + 1, _linesNumb)
+ if (checkCollisionLine(v31 + v41, v40, &v47, &v46, _vm->_objectsManager._lastLine + 1, _linesNumb)
&& _vm->_objectsManager._lastLine < v46) {
v32 = GENIAL(v46, v47, v31 + v41, v40, v38 + v41, v40, v7, &_vm->_globals.super_parcours[0], 4);
if (v32 == -1)
@@ -988,7 +965,7 @@ LABEL_112:
a8[v9 + 2] = -1;
return -1;
}
- int16 *v10 = Ligne[a1].lineData;
+ int16 *v10 = Ligne[a1]._lineData;
int v98 = v10[0];
int v97 = v10[1];
int v92 = a1;
@@ -996,16 +973,16 @@ LABEL_112:
int v65;
for (;;) {
int v86 = v92 - 1;
- int v11 = 2 * Ligne[v92 - 1].field0;
+ int v11 = 2 * Ligne[v92 - 1]._lineDataEndIdx;
- int16 *v12 = Ligne[v92 - 1].lineData;
+ int16 *v12 = Ligne[v92 - 1]._lineData;
if (v12 == (int16 *)g_PTRNUL)
break;
while (v12[v11 - 2] != v98 || v97 != v12[v11 - 1]) {
--v86;
if (_vm->_objectsManager._lastLine - 1 != v86) {
- v11 = 2 * Ligne[v86].field0;
- v12 = Ligne[v86].lineData;
+ v11 = 2 * Ligne[v86]._lineDataEndIdx;
+ v12 = Ligne[v86]._lineData;
if (v12 != (int16 *)g_PTRNUL)
continue;
}
@@ -1017,16 +994,16 @@ LABEL_112:
v97 = v12[1];
}
LABEL_11:
- int16 *v13 = Ligne[a1].lineData;
- int v14 = 2 * Ligne[a1].field0;
+ int16 *v13 = Ligne[a1]._lineData;
+ int v14 = 2 * Ligne[a1]._lineDataEndIdx;
int v95 = v13[v14 - 2];
int v93 = v13[v14 - 1];
int v91 = a1;
int v100, v101;
for (;;) {
int v87 = v91 + 1;
- int v15 = 2 * Ligne[v91 + 1].field0;
- int16 *v16 = Ligne[v91 + 1].lineData;
+ int v15 = 2 * Ligne[v91 + 1]._lineDataEndIdx;
+ int16 *v16 = Ligne[v91 + 1]._lineData;
if (v16 == (int16 *)g_PTRNUL)
break;
int v17;
@@ -1039,8 +1016,8 @@ LABEL_11:
}
++v87;
if (v87 != _linesNumb + 1) {
- v15 = 2 * Ligne[v87].field0;
- v16 = Ligne[v87].lineData;
+ v15 = 2 * Ligne[v87]._lineDataEndIdx;
+ v16 = Ligne[v87]._lineData;
if (v16 != (int16 *)g_PTRNUL)
continue;
}
@@ -1094,7 +1071,7 @@ LABEL_17:
for (int v89 = v85 + 1; v89 > 0; v89--) {
int v96 = _vm->_globals.BufLig[v25];
int v94 = _vm->_globals.BufLig[v25 + 1];
- if (colision2_ligne(v96, v94, &v101, &v100, v92, v91) && _vm->_objectsManager._lastLine < v100) {
+ if (checkCollisionLine(v96, v94, &v101, &v100, v92, v91) && _vm->_objectsManager._lastLine < v100) {
v80 = v100;
v77 = v101;
v78 = v96;
@@ -1110,8 +1087,8 @@ LABEL_17:
int v70 = 0;
int v72 = 0;
for (int i = v92; i < v91 + 1; ++i) {
- int v27 = 2 * Ligne[i].field0;
- int16 *v28 = Ligne[i].lineData;
+ int v27 = 2 * Ligne[i]._lineDataEndIdx;
+ int16 *v28 = Ligne[i]._lineData;
if (v28 == (int16 *)g_PTRNUL)
error("error in genial routine");
int v29 = v28[0];
@@ -1162,7 +1139,7 @@ LABEL_17:
loopCond = false;
do {
--v34;
- loopCond = colision2_ligne(a5, v34, &v101, &v100, v92, v91);
+ loopCond = checkCollisionLine(a5, v34, &v101, &v100, v92, v91);
if (loopCond)
v76 = v100;
if (!v34 || v73 > v34)
@@ -1173,7 +1150,7 @@ LABEL_17:
loopCond = false;
do {
++v35;
- loopCond = colision2_ligne(a5, v35, &v101, &v100, v92, v91);
+ loopCond = checkCollisionLine(a5, v35, &v101, &v100, v92, v91);
if (loopCond)
v75 = v100;
if (_vm->_globals.Max_Perso_Y <= v35 || v71 <= v35)
@@ -1184,7 +1161,7 @@ LABEL_17:
loopCond = false;
do {
++v36;
- loopCond = colision2_ligne(v36, a6, &v101, &v100, v92, v91);
+ loopCond = checkCollisionLine(v36, a6, &v101, &v100, v92, v91);
if (loopCond)
v74 = v100;
if (_vm->_graphicsManager.max_x <= v36 || v67 <= v36)
@@ -1195,7 +1172,7 @@ LABEL_17:
loopCond = false;
do {
--v37;
- loopCond = colision2_ligne(v37, a6, &v101, &v100, v92, v91);
+ loopCond = checkCollisionLine(v37, a6, &v101, &v100, v92, v91);
if (loopCond)
v38 = v100;
if (v37 <= 0 || v69 >= v37)
@@ -1224,7 +1201,7 @@ LABEL_17:
v42 = v91;
} while (v80 != v42);
if (v41 == v43) {
- int v44 = Ligne[a1].field0 / 2;
+ int v44 = Ligne[a1]._lineDataEndIdx / 2;
int v54 = abs(v44);
if (a2 > v54) {
v99 = CONTOURNE(a1, a2, a7, v80, v77, a8, a9);
@@ -1252,7 +1229,7 @@ LABEL_17:
v47 = v92;
} while (v80 != v47);
if (v46 == v48) {
- int v49 = Ligne[a1].field0 / 2;
+ int v49 = Ligne[a1]._lineDataEndIdx / 2;
int v56 = abs(v49);
if (a2 > v56) {
v99 = CONTOURNE1(a1, a2, v99, v80, v77, a8, a9, v92, v91);
@@ -1269,7 +1246,7 @@ LABEL_17:
v99 = CONTOURNE(a1, a2, v99, a1, v77, a8, a9);
loopCond = false;
do {
- loopCond = colision2_ligne(NVPX, NVPY, &v101, &v100, _vm->_objectsManager._lastLine + 1, _linesNumb);
+ loopCond = checkCollisionLine(NVPX, NVPY, &v101, &v100, _vm->_objectsManager._lastLine + 1, _linesNumb);
if (loopCond) {
int v50 = v100;
if (Ligne[v50].field4 == 1)
@@ -1493,7 +1470,7 @@ int16 *LinesManager::PARCOURS2(int srcX, int srcY, int destX, int destY) {
do {
v101 = v16;
v16 = v101;
- if (colision2_ligne(v123, v15, &v136[5], &v141[5], 0, _vm->_objectsManager._lastLine) && v141[v101] <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(v123, v15, &v136[5], &v141[5], 0, _vm->_objectsManager._lastLine) && v141[v101] <= _vm->_objectsManager._lastLine)
break;
v136[v101] = 0;
v141[v101] = -1;
@@ -1509,7 +1486,7 @@ int16 *LinesManager::PARCOURS2(int srcX, int srcY, int destX, int destY) {
do {
v102 = v20;
v20 = v102;
- if (colision2_ligne(v123, v19, &v136[1], &v141[1], 0, _vm->_objectsManager._lastLine) && v141[v102] <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(v123, v19, &v136[1], &v141[1], 0, _vm->_objectsManager._lastLine) && v141[v102] <= _vm->_objectsManager._lastLine)
break;
v136[v102] = 0;
v141[v102] = -1;
@@ -1529,7 +1506,7 @@ int16 *LinesManager::PARCOURS2(int srcX, int srcY, int destX, int destY) {
do {
v103 = v24;
v24 = v103;
- if (colision2_ligne(v23, v122, &v136[3], &v141[3], 0, _vm->_objectsManager._lastLine) && v141[v103] <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(v23, v122, &v136[3], &v141[3], 0, _vm->_objectsManager._lastLine) && v141[v103] <= _vm->_objectsManager._lastLine)
break;
v136[v103] = 0;
v141[v103] = -1;
@@ -1551,7 +1528,7 @@ int16 *LinesManager::PARCOURS2(int srcX, int srcY, int destX, int destY) {
do {
v104 = v28;
v28 = v104;
- if (colision2_ligne(v27, v122, &v136[7], &v141[7], 0, _vm->_objectsManager._lastLine) && v141[v104] <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(v27, v122, &v136[7], &v141[7], 0, _vm->_objectsManager._lastLine) && v141[v104] <= _vm->_objectsManager._lastLine)
break;
v136[v104] = 0;
v141[v104] = -1;
@@ -1621,7 +1598,7 @@ int16 *LinesManager::PARCOURS2(int srcX, int srcY, int destX, int destY) {
do {
v105 = v36;
v36 = v105;
- if (colision2_ligne(srcX, v35, &v136[5], &v141[5], 0, _vm->_objectsManager._lastLine) && v141[v105] <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(srcX, v35, &v136[5], &v141[5], 0, _vm->_objectsManager._lastLine) && v141[v105] <= _vm->_objectsManager._lastLine)
break;
v136[v105] = 0;
v141[v105] = -1;
@@ -1637,7 +1614,7 @@ int16 *LinesManager::PARCOURS2(int srcX, int srcY, int destX, int destY) {
do {
v106 = v40;
v40 = v106;
- if (colision2_ligne(srcX, v39, &v136[1], &v141[1], 0, _vm->_objectsManager._lastLine) && v141[v106] <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(srcX, v39, &v136[1], &v141[1], 0, _vm->_objectsManager._lastLine) && v141[v106] <= _vm->_objectsManager._lastLine)
break;
v136[v106] = 0;
v141[v106] = -1;
@@ -1657,7 +1634,7 @@ int16 *LinesManager::PARCOURS2(int srcX, int srcY, int destX, int destY) {
do {
v107 = v44;
v44 = v107;
- if (colision2_ligne(v43, srcY, &v136[3], &v141[3], 0, _vm->_objectsManager._lastLine) && v141[v107] <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(v43, srcY, &v136[3], &v141[3], 0, _vm->_objectsManager._lastLine) && v141[v107] <= _vm->_objectsManager._lastLine)
break;
v136[v107] = 0;
v141[v107] = -1;
@@ -1677,7 +1654,7 @@ int16 *LinesManager::PARCOURS2(int srcX, int srcY, int destX, int destY) {
do {
v108 = v48;
v48 = v108;
- if (colision2_ligne(v47, srcY, &v136[7], &v141[7], 0, _vm->_objectsManager._lastLine) && v141[v108] <= _vm->_objectsManager._lastLine)
+ if (checkCollisionLine(v47, srcY, &v136[7], &v141[7], 0, _vm->_objectsManager._lastLine) && v141[v108] <= _vm->_objectsManager._lastLine)
break;
v136[v108] = 0;
v141[v108] = -1;
@@ -1752,7 +1729,7 @@ LABEL_201:
v56 = 0;
if (v111 > 0) {
do {
- if (colision2_ligne(srcX, srcY - v56, &v125, &v124, _vm->_objectsManager._lastLine + 1, _linesNumb)
+ if (checkCollisionLine(srcX, srcY - v56, &v125, &v124, _vm->_objectsManager._lastLine + 1, _linesNumb)
&& _vm->_objectsManager._lastLine < v124) {
v57 = v112;
v58 = GENIAL(v124, v125, srcX, srcY - v56, srcX, srcY - v111, v112, &_vm->_globals.super_parcours[0], 4);
@@ -1776,7 +1753,7 @@ LABEL_201:
v60 = 0;
if (v111 > 0) {
do {
- if (colision2_ligne(srcX, v60 + srcY, &v125, &v124, _vm->_objectsManager._lastLine + 1, _linesNumb)
+ if (checkCollisionLine(srcX, v60 + srcY, &v125, &v124, _vm->_objectsManager._lastLine + 1, _linesNumb)
&& _vm->_objectsManager._lastLine < v124) {
v57 = v112;
v61 = GENIAL(v124, v125, srcX, v60 + srcY, srcX, v111 + srcY, v112, &_vm->_globals.super_parcours[0], 4);
@@ -1800,7 +1777,7 @@ LABEL_201:
v63 = 0;
if (v111 > 0) {
do {
- if (colision2_ligne(srcX - v63, srcY, &v125, &v124, _vm->_objectsManager._lastLine + 1, _linesNumb)
+ if (checkCollisionLine(srcX - v63, srcY, &v125, &v124, _vm->_objectsManager._lastLine + 1, _linesNumb)
&& _vm->_objectsManager._lastLine < v124) {
v57 = v112;
v64 = GENIAL(v124, v125, srcX - v63, srcY, srcX - v111, srcY, v112, &_vm->_globals.super_parcours[0], 4);
@@ -1824,7 +1801,7 @@ LABEL_201:
v66 = 0;
if (v111 > 0) {
do {
- if (colision2_ligne(v66 + srcX, srcY, &v125, &v124, _vm->_objectsManager._lastLine + 1, _linesNumb)
+ if (checkCollisionLine(v66 + srcX, srcY, &v125, &v124, _vm->_objectsManager._lastLine + 1, _linesNumb)
&& _vm->_objectsManager._lastLine < v124) {
v57 = v112;
v67 = GENIAL(v124, v125, v66 + srcX, srcY, v111 + srcX, srcY, v112, &_vm->_globals.super_parcours[0], 4);
@@ -1847,8 +1824,8 @@ LABEL_201:
}
LABEL_234:
if (v115 < v121) {
- for (i = v114; Ligne[v115].field0 > i; ++i) {
- v70 = Ligne[v115].lineData;
+ for (i = v114; Ligne[v115]._lineDataEndIdx > i; ++i) {
+ v70 = Ligne[v115]._lineData;
v119 = v70[2 * i];
v118 = v70[2 * i + 1];
v71 = v112;
@@ -1863,8 +1840,8 @@ LABEL_234:
do {
v72 = 0;
v110 = v116;
- for (j = v116; Ligne[j].field0 > v72; j = v116) {
- v74 = Ligne[v110].lineData;
+ for (j = v116; Ligne[j]._lineDataEndIdx > v72; j = v116) {
+ v74 = Ligne[v110]._lineData;
v119 = v74[2 * v72];
v118 = v74[2 * v72 + 1];
v75 = v112;
@@ -1873,7 +1850,7 @@ LABEL_234:
_vm->_globals.super_parcours[v75 + 2] = Ligne[v110].field6;
_vm->_globals.super_parcours[v75 + 3] = 0;
v112 += 4;
- v76 = Ligne[v110].field0;
+ v76 = Ligne[v110]._lineDataEndIdx;
if (v76 > 30) {
v77 = abs(v76 / 2);
if (v72 == v77) {
@@ -1912,7 +1889,7 @@ LABEL_200:
if (v114 > 0) {
v98 = v115;
do {
- v81 = Ligne[v98].lineData;
+ v81 = Ligne[v98]._lineData;
v119 = v81[2 * v80];
v118 = v81[2 * v80 + 1];
@@ -1928,11 +1905,11 @@ LABEL_200:
v117 = v115 - 1;
if ((v115 - 1) > v121) {
do {
- v83 = Ligne[v117].field0 - 1;
+ v83 = Ligne[v117]._lineDataEndIdx - 1;
if (v83 > -1) {
v109 = v117;
do {
- v84 = Ligne[v109].lineData;
+ v84 = Ligne[v109]._lineData;
v119 = v84[2 * v83];
v118 = v84[2 * v83 + 1];
v85 = v112;
@@ -1941,7 +1918,7 @@ LABEL_200:
_vm->_globals.super_parcours[v85 + 2] = Ligne[v109].field8;
_vm->_globals.super_parcours[v85 + 3] = 0;
v112 += 4;
- v86 = Ligne[v109].field0;
+ v86 = Ligne[v109]._lineDataEndIdx;
if (v86 > 30) {
v87 = abs(v86 / 2);
if (v83 == v87) {
@@ -1967,7 +1944,7 @@ LABEL_200:
--v117;
} while (v117 > v121);
}
- v114 = Ligne[v121].field0 - 1;
+ v114 = Ligne[v121]._lineDataEndIdx - 1;
v115 = v121;
}
if (v115 == v121) {
@@ -1976,7 +1953,7 @@ LABEL_200:
v94 = v114;
v100 = v121;
do {
- v95 = Ligne[v100].lineData;
+ v95 = Ligne[v100]._lineData;
v96 = v95[2 * v94 + 1];
v97 = v112;
_vm->_globals.super_parcours[v97] = v95[2 * v94];
@@ -1991,7 +1968,7 @@ LABEL_200:
v90 = v114;
v99 = v121;
do {
- v91 = Ligne[v99].lineData;
+ v91 = Ligne[v99]._lineData;
v92 = v91[2 * v90 + 1];
v93 = v112;
_vm->_globals.super_parcours[v93] = v91[2 * v90];
@@ -2161,7 +2138,7 @@ int LinesManager::PARC_PERS(int a1, int a2, int a3, int a4, int a5, int a6, int
if (a5 == -1 && a6 == -1)
v136 = 1;
v144 = a5;
- if (colision2_ligne(a1, a2, &v145, &v144, 0, _linesNumb)) {
+ if (checkCollisionLine(a1, a2, &v145, &v144, 0, _linesNumb)) {
int v8 = Ligne[v144].field4;
if (v8 == 1)
v90 = a2 - 2;
@@ -2359,7 +2336,7 @@ LABEL_103:
v23 = 0;
if (v108 + 1 <= 0)
goto LABEL_149;
- while (!colision2_ligne(v104, v103, &v143, &v142, 0, _linesNumb)) {
+ while (!checkCollisionLine(v104, v103, &v143, &v142, 0, _linesNumb)) {
v25 = v115;
v26 = _vm->_globals.essai0;
v26[v25] = v104;
@@ -2399,7 +2376,7 @@ LABEL_67:
v126 = 1;
goto LABEL_70;
}
- if (colision2_ligne(v15, v110, &v143, &v142, 0, _linesNumb))
+ if (checkCollisionLine(v15, v110, &v143, &v142, 0, _linesNumb))
break;
v16 = v115;
@@ -2437,7 +2414,7 @@ LABEL_158:
LABEL_165:
if (v113 > a3) {
v36 = v113;
- while (!colision2_ligne(v36, v92, &v141, &v140, 0, _linesNumb)) {
+ while (!checkCollisionLine(v36, v92, &v141, &v140, 0, _linesNumb)) {
v37 = v117;
v38 = _vm->_globals.essai1;
v38[v37] = v36;
@@ -2456,7 +2433,7 @@ LABEL_181:
if (v92 > a4) {
v43 = v92;
do {
- if (colision2_ligne(a3, v43, &v141, &v140, 0, _linesNumb)) {
+ if (checkCollisionLine(a3, v43, &v141, &v140, 0, _linesNumb)) {
if (_vm->_objectsManager._lastLine < v140) {
v44 = GENIAL(v140, v141, a3, v43, a3, a4, v117, _vm->_globals.essai1, 3);
if (v44 == -1)
@@ -2466,7 +2443,7 @@ LABEL_181:
if (NVPY != -1) {
v33 = NVPX;
v92 = NVPY;
- v45 = colision2_ligne(NVPX, NVPY, &v141, &v140, 0, _vm->_objectsManager._lastLine);
+ v45 = checkCollisionLine(NVPX, NVPY, &v141, &v140, 0, _vm->_objectsManager._lastLine);
goto LABEL_189;
}
}
@@ -2510,7 +2487,7 @@ LABEL_195:
}
v39 = v92;
for (;;) {
- if (colision2_ligne(a3, v39, &v141, &v140, 0, _linesNumb)) {
+ if (checkCollisionLine(a3, v39, &v141, &v140, 0, _linesNumb)) {
if (_vm->_objectsManager._lastLine < v140) {
v40 = GENIAL(v140, v141, a3, v39, a3, a4, v117, _vm->_globals.essai1, 3);
if (v40 == -1)
@@ -2520,7 +2497,7 @@ LABEL_195:
if (NVPY != -1) {
v33 = NVPX;
v92 = NVPY;
- v45 = colision2_ligne(NVPX, NVPY, &v141, &v140, 0, _vm->_objectsManager._lastLine);
+ v45 = checkCollisionLine(NVPX, NVPY, &v141, &v140, 0, _vm->_objectsManager._lastLine);
LABEL_189:
if (v45 && v140 <= _vm->_objectsManager._lastLine)
goto LABEL_202;
@@ -2543,7 +2520,7 @@ LABEL_189:
goto LABEL_181;
}
}
- while (!colision2_ligne(v33, v92, &v141, &v140, 0, _linesNumb)) {
+ while (!checkCollisionLine(v33, v92, &v141, &v140, 0, _linesNumb)) {
v34 = v117;
v35 = _vm->_globals.essai1;
v35[v34] = v33;
@@ -2572,7 +2549,7 @@ LABEL_203:
goto LABEL_241;
if (v93 < a4) {
v55 = v93;
- while (!colision2_ligne(v114, v55, &v139, &v138, 0, _linesNumb)) {
+ while (!checkCollisionLine(v114, v55, &v139, &v138, 0, _linesNumb)) {
v56 = v117;
v57 = _vm->_globals.essai2;
v57[v56] = v114;
@@ -2588,7 +2565,7 @@ LABEL_203:
LABEL_211:
if (v93 > a4) {
v58 = v93;
- while (!colision2_ligne(v114, v58, &v139, &v138, 0, _linesNumb)) {
+ while (!checkCollisionLine(v114, v58, &v139, &v138, 0, _linesNumb)) {
v59 = v117;
v60 = _vm->_globals.essai2;
v60[v59] = v114;
@@ -2754,7 +2731,7 @@ LABEL_217:
if (v114 < a3) {
v61 = v114;
do {
- if (colision2_ligne(v61, a4, &v139, &v138, 0, _linesNumb)) {
+ if (checkCollisionLine(v61, a4, &v139, &v138, 0, _linesNumb)) {
if (_vm->_objectsManager._lastLine < v138) {
v62 = GENIAL(v138, v139, v61, a4, a3, a4, v117, _vm->_globals.essai2, 3);
if (v62 == -1)
@@ -2764,7 +2741,7 @@ LABEL_217:
if (NVPY != -1) {
v54 = NVPX;
v93 = NVPY;
- colResult = colision2_ligne(NVPX, NVPY, &v139, &v138, 0, _vm->_objectsManager._lastLine);
+ colResult = checkCollisionLine(NVPX, NVPY, &v139, &v138, 0, _vm->_objectsManager._lastLine);
LABEL_235:
if (colResult && v138 <= _vm->_objectsManager._lastLine)
goto LABEL_249;
@@ -2788,7 +2765,7 @@ LABEL_235:
if (v114 > a3) {
v65 = v114;
do {
- if (colision2_ligne(v65, a4, &v139, &v138, 0, _linesNumb)) {
+ if (checkCollisionLine(v65, a4, &v139, &v138, 0, _linesNumb)) {
if (_vm->_objectsManager._lastLine < v138) {
v66 = GENIAL(v138, v139, v65, a4, a3, a4, v117, _vm->_globals.essai2, 3);
if (v66 == -1)
@@ -2798,7 +2775,7 @@ LABEL_235:
if (NVPY != -1) {
v54 = NVPX;
v93 = NVPY;
- colResult = colision2_ligne(NVPX, NVPY, &v139, &v138, 0, _vm->_objectsManager._lastLine);
+ colResult = checkCollisionLine(NVPX, NVPY, &v139, &v138, 0, _vm->_objectsManager._lastLine);
goto LABEL_235;
}
}
@@ -2885,7 +2862,7 @@ int LinesManager::VERIF_SMOOTH(int a1, int a2, int a3, int a4) {
v12 = 1000 * a2 / 1000;
v14 = 0;
if (v13 + 1 > 0) {
- while (!colision2_ligne(v9, v12, &v18, &v17, 0, _linesNumb) || v17 > _vm->_objectsManager._lastLine) {
+ while (!checkCollisionLine(v9, v12, &v18, &v17, 0, _linesNumb) || v17 > _vm->_objectsManager._lastLine) {
v7 += v16;
v8 += v15;
v9 = v7 / 1000;
@@ -3271,11 +3248,11 @@ LABEL_60:
}
if (v33 == 1) {
v14 = 0;
- if (Ligne[v34].field0 > 0) {
+ if (Ligne[v34]._lineDataEndIdx > 0) {
v32 = v34;
v25 = _vm->_globals.essai0;
do {
- v15 = Ligne[v32].lineData;
+ v15 = Ligne[v32]._lineData;
v16 = v15[2 * v14];
v29 = v15[2 * v14 + 1];
if (!a6) {
@@ -3294,16 +3271,16 @@ LABEL_60:
}
v41 += 4;
++v14;
- } while (Ligne[v32].field0 > v14);
+ } while (Ligne[v32]._lineDataEndIdx > v14);
}
}
if (v33 == 2) {
- v19 = Ligne[v34].field0 - 1;
+ v19 = Ligne[v34]._lineDataEndIdx - 1;
if (v19 > -1) {
v31 = v34;
v26 = _vm->_globals.essai0;
do {
- v20 = Ligne[v31].lineData;
+ v20 = Ligne[v31]._lineData;
v21 = v20[2 * v19];
v30 = v20[2 * v19 + 1];
if (a6) {
@@ -3359,8 +3336,8 @@ int LinesManager::TEST_LIGNE(int a1, int a2, int *a3, int *a4, int *a5) {
v25 = _vm->_objectsManager._lastLine + 1;
for (i = (int)(_vm->_objectsManager._lastLine + 1); i < _vm->_linesManager._linesNumb + 1; i = v25) {
v6 = i;
- v7 = Ligne[i].lineData;
- v8 = Ligne[v6].field0;
+ v7 = Ligne[i]._lineData;
+ v8 = Ligne[v6]._lineDataEndIdx;
v23 = v7[2 * v8 - 2];
v9 = v7[2 * v8 - 1];
if (v7[0] == a1 && a2 == v7[1]) {
@@ -3382,8 +3359,8 @@ int LinesManager::TEST_LIGNE(int a1, int a2, int *a3, int *a4, int *a5) {
LABEL_12:
if (*a3 == 1) {
v10 = v24;
- v11 = Ligne[v10].field0;
- v12 = Ligne[v10].lineData;
+ v11 = Ligne[v10]._lineDataEndIdx;
+ v12 = Ligne[v10]._lineData;
v13 = v12[2 * v11 - 2];
v14 = v12[2 * v11 - 1];
v15 = Ligne[v10].field6;
@@ -3392,13 +3369,13 @@ LABEL_12:
v16 = v24;
if (Ligne[v16].field6 == 3 || Ligne[v16].field8 == 7)
v13 += 2;
- if (!colision2_ligne(v13, v14, &v28, &v27, 0, _vm->_objectsManager._lastLine))
+ if (!checkCollisionLine(v13, v14, &v28, &v27, 0, _vm->_objectsManager._lastLine))
error("error");
*a4 = v27;
*a5 = v28;
}
if (v26 == 1 && *a3 == 2) {
- v17 = Ligne[v25].lineData;
+ v17 = Ligne[v25]._lineData;
v18 = v17[0];
v19 = v17[1];
v20 = Ligne[v24].field6;
@@ -3407,7 +3384,7 @@ LABEL_12:
v21 = v24;
if (Ligne[v21].field6 == 3 || Ligne[v21].field8 == 7)
v18 -= 2;
- if (!colision2_ligne(v18, v19, &v28, &v27, 0, _vm->_objectsManager._lastLine))
+ if (!checkCollisionLine(v18, v19, &v28, &v27, 0, _vm->_objectsManager._lastLine))
error("erreure");
*a4 = v27;
*a5 = v28;
diff --git a/engines/hopkins/lines.h b/engines/hopkins/lines.h
index e951fcd4a2..a4ace29b4c 100644
--- a/engines/hopkins/lines.h
+++ b/engines/hopkins/lines.h
@@ -37,12 +37,12 @@ struct LigneZoneItem {
};
struct LigneItem {
- int field0;
+ int _lineDataEndIdx;
int field2;
int field4;
int field6;
int field8;
- int16 *lineData;
+ int16 *_lineData;
};
struct SmoothItem {
@@ -78,7 +78,7 @@ public:
void RESET_OBSTACLE();
void RETIRE_LIGNE(int idx);
void AJOUTE_LIGNE(int idx, int a2, int a3, int a4, int a5, int a6, int a7);
- bool colision2_ligne(int a1, int a2, int *a3, int *a4, int a5, int a6);
+ bool checkCollisionLine(int xp, int yp, int *foundDataIdx, int *foundLineIdx, int startLineIdx, int endLineIdx);
void INIPARCOURS();
int CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *a6, int a7, int a8, int a9);
int CONTOURNE(int a1, int a2, int a3, int a4, int a5, int16 *a6, int a7);
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp
index df8f3d75b9..a4b34e3ad8 100644
--- a/engines/hopkins/objects.cpp
+++ b/engines/hopkins/objects.cpp
@@ -2886,7 +2886,6 @@ int16 *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) {
int v5;
int v6;
int v7;
- int v8;
int v10;
int v11;
int v12;
@@ -2915,7 +2914,6 @@ int16 *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) {
int v52;
int16 *v54;
int16 *v58;
- int v62;
int v63;
int v64;
int v65;
@@ -2945,17 +2943,15 @@ int16 *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) {
v5 = 440;
v75 = v4;
v74 = v5;
- v6 = 0;
v7 = v74;
+
+ v6 = 0;
if (_vm->_graphicsManager.max_y > v74) {
- v8 = 5;
do {
- v62 = v8;
- v8 = v62;
- if (_vm->_linesManager.colision2_ligne(v75, v7, &v82[5], &v87[5], 0, _lastLine) && v87[v62] <= _lastLine)
+ if (_vm->_linesManager.checkCollisionLine(v75, v7, &v82[5], &v87[5], 0, _lastLine) && v87[5] <= _lastLine)
break;
- v82[v62] = 0;
- v87[v62] = -1;
+ v82[5] = 0;
+ v87[5] = -1;
++v6;
++v7;
} while (_vm->_graphicsManager.max_y > v7);
@@ -2968,7 +2964,7 @@ int16 *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) {
do {
v63 = v12;
v12 = v63;
- if (_vm->_linesManager.colision2_ligne(v75, v11, &v82[1], &v87[1], 0, _lastLine) && v87[v63] <= _lastLine)
+ if (_vm->_linesManager.checkCollisionLine(v75, v11, &v82[1], &v87[1], 0, _lastLine) && v87[v63] <= _lastLine)
break;
v82[v63] = 0;
v87[v63] = -1;
@@ -2988,7 +2984,7 @@ int16 *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) {
do {
v64 = v16;
v16 = v64;
- if (_vm->_linesManager.colision2_ligne(v15, v74, &v82[3], &v87[3], 0, _lastLine) && v87[v64] <= _lastLine)
+ if (_vm->_linesManager.checkCollisionLine(v15, v74, &v82[3], &v87[3], 0, _lastLine) && v87[v64] <= _lastLine)
break;
v82[v64] = 0;
v87[v64] = -1;
@@ -3010,7 +3006,7 @@ int16 *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) {
do {
v65 = v20;
v20 = v65;
- if (_vm->_linesManager.colision2_ligne(v19, v74, &v82[7], &v87[7], 0, _lastLine) && v87[v65] <= _lastLine)
+ if (_vm->_linesManager.checkCollisionLine(v19, v74, &v82[7], &v87[7], 0, _lastLine) && v87[v65] <= _lastLine)
break;
v82[v65] = 0;
v87[v65] = -1;
@@ -3061,17 +3057,17 @@ int16 *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) {
v82[v24] = 0;
v77[v24] = 1300;
}
- if (_vm->_linesManager.colision2_ligne(a1, a2, &v82[1], &v87[1], 0, _lastLine)) {
+ if (_vm->_linesManager.checkCollisionLine(a1, a2, &v82[1], &v87[1], 0, _lastLine)) {
v69 = v87[1];
v68 = v82[1];
- } else if (_vm->_linesManager.colision2_ligne(a1, a2, &v82[1], &v87[1], 0, _vm->_linesManager._linesNumb)) {
+ } else if (_vm->_linesManager.checkCollisionLine(a1, a2, &v82[1], &v87[1], 0, _vm->_linesManager._linesNumb)) {
v27 = 0;
for (;;) {
v28 = _vm->_globals.essai2[v27];
v29 = _vm->_globals.essai2[v27 + 1];
v66 = _vm->_globals.essai2[v27 + 2];
v27 += 4;
- if (_vm->_linesManager.colision2_ligne(v28, v29, &v82[1], &v87[1], 0, _lastLine))
+ if (_vm->_linesManager.checkCollisionLine(v28, v29, &v82[1], &v87[1], 0, _lastLine))
break;
v32 = v67;
_vm->_globals.super_parcours[v32] = v28;
@@ -3101,8 +3097,8 @@ LABEL_90:
if (v69 < v73) {
v34 = v68;
v35 = v68;
- for (int i = _vm->_linesManager.Ligne[v69].field0; v35 < i - 2; i = _vm->_linesManager.Ligne[v69].field0) {
- v37 = _vm->_linesManager.Ligne[v69].lineData;
+ for (int i = _vm->_linesManager.Ligne[v69]._lineDataEndIdx; v35 < i - 2; i = _vm->_linesManager.Ligne[v69]._lineDataEndIdx) {
+ v37 = _vm->_linesManager.Ligne[v69]._lineData;
v39 = v67;
_vm->_globals.super_parcours[v39] = v37[2 * v35];
_vm->_globals.super_parcours[v39 + 1] = v37[2 * v35 + 1];
@@ -3114,8 +3110,8 @@ LABEL_90:
}
for (j = v69 + 1; j < v73; ++j) {
if (_vm->_linesManager.PLAN_TEST(
- _vm->_linesManager.Ligne[j].lineData[0],
- _vm->_linesManager.Ligne[j].lineData[1],
+ _vm->_linesManager.Ligne[j]._lineData[0],
+ _vm->_linesManager.Ligne[j]._lineData[1],
v67,
j,
v73,
@@ -3126,9 +3122,9 @@ LABEL_88:
v67 = _vm->_linesManager.NV_POSI;
goto LABEL_90;
}
- if (_vm->_linesManager.Ligne[j].field0 - 2 > 0) {
- for (int v40 = 0; v40 < _vm->_linesManager.Ligne[j].field0 - 2; v40++) {
- v41 = _vm->_linesManager.Ligne[j].lineData;
+ if (_vm->_linesManager.Ligne[j]._lineDataEndIdx - 2 > 0) {
+ for (int v40 = 0; v40 < _vm->_linesManager.Ligne[j]._lineDataEndIdx - 2; v40++) {
+ v41 = _vm->_linesManager.Ligne[j]._lineData;
_vm->_globals.super_parcours[v67] = v41[2 * v40];
_vm->_globals.super_parcours[v67 + 1] = v41[2 * v40 + 1];
_vm->_globals.super_parcours[v67 + 2] = _vm->_linesManager.Ligne[j].field6;
@@ -3142,7 +3138,7 @@ LABEL_88:
}
if (v69 > v73) {
for (int k = v68; k > 0; --k) {
- v45 = _vm->_linesManager.Ligne[v69].lineData;
+ v45 = _vm->_linesManager.Ligne[v69]._lineData;
v47 = v67;
_vm->_globals.super_parcours[v47] = v45[2 * k];
_vm->_globals.super_parcours[v47 + 1] = v45[2 * k + 1];
@@ -3153,16 +3149,16 @@ LABEL_88:
for (int l = v69 - 1; l > v73; --l) {
v48 = l;
if (_vm->_linesManager.PLAN_TEST(
- _vm->_linesManager.Ligne[l].lineData[2 * _vm->_linesManager.Ligne[v48].field0 - 2],
- _vm->_linesManager.Ligne[l].lineData[2 * _vm->_linesManager.Ligne[v48].field0 - 1],
+ _vm->_linesManager.Ligne[l]._lineData[2 * _vm->_linesManager.Ligne[v48]._lineDataEndIdx - 2],
+ _vm->_linesManager.Ligne[l]._lineData[2 * _vm->_linesManager.Ligne[v48]._lineDataEndIdx - 1],
v67,
l,
v73,
0) == 1)
goto LABEL_88;
- for (int v49 = _vm->_linesManager.Ligne[v48].field0 - 2; v49 > 0; v49 --) {
- v50 = _vm->_linesManager.Ligne[l].lineData;
+ for (int v49 = _vm->_linesManager.Ligne[v48]._lineDataEndIdx - 2; v49 > 0; v49 --) {
+ v50 = _vm->_linesManager.Ligne[l]._lineData;
v52 = v67;
_vm->_globals.super_parcours[v52] = v50[2 * v49];
_vm->_globals.super_parcours[v52 + 1] = v50[2 * v49 + 1];
@@ -3171,13 +3167,13 @@ LABEL_88:
v67 += 4;
}
}
- v68 = _vm->_linesManager.Ligne[v73].field0 - 1;
+ v68 = _vm->_linesManager.Ligne[v73]._lineDataEndIdx - 1;
v69 = v73;
}
if (v69 == v73) {
if (v68 <= v72) {
for (int v57 = v68; v57 < v72; v57++) {
- v58 = _vm->_linesManager.Ligne[v73].lineData;
+ v58 = _vm->_linesManager.Ligne[v73]._lineData;
_vm->_globals.super_parcours[v67] = v58[2 * v57];
_vm->_globals.super_parcours[v67 + 1] = v58[2 * v57 + 1];
_vm->_globals.super_parcours[v67 + 2] = _vm->_linesManager.Ligne[v73].field6;
@@ -3186,7 +3182,7 @@ LABEL_88:
}
} else {
for (int v53 = v68; v53 > v72; v53--) {
- v54 = _vm->_linesManager.Ligne[v73].lineData;
+ v54 = _vm->_linesManager.Ligne[v73]._lineData;
_vm->_globals.super_parcours[v67] = v54[2 * v53];
_vm->_globals.super_parcours[v67 + 1] = v54[2 * v53 + 1];
_vm->_globals.super_parcours[v67 + 2] = _vm->_linesManager.Ligne[v73].field8;