[Scummvm-cvs-logs] scummvm master -> 3e17373cfab461282c21801ef65081bd6fcb1c6a

Strangerke Strangerke at scummvm.org
Tue Mar 5 08:27:45 CET 2013


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3e17373cfa HOPKINS: Remove the last GOTOs


Commit: 3e17373cfab461282c21801ef65081bd6fcb1c6a
    https://github.com/scummvm/scummvm/commit/3e17373cfab461282c21801ef65081bd6fcb1c6a
Author: Strangerke (strangerke at scummvm.org)
Date: 2013-03-04T23:26:51-08:00

Commit Message:
HOPKINS: Remove the last GOTOs

Changed paths:
    engines/hopkins/lines.cpp
    engines/hopkins/lines.h
    engines/hopkins/objects.cpp



diff --git a/engines/hopkins/lines.cpp b/engines/hopkins/lines.cpp
index 0422dc7..44f4d81 100644
--- a/engines/hopkins/lines.cpp
+++ b/engines/hopkins/lines.cpp
@@ -84,9 +84,9 @@ LinesManager::LinesManager() {
 	_lastLine = 0;
 	_maxLineIdx = 0;
 	_pathFindingMaxDepth = 0;
-	essai0 = NULL;
-	essai1 = NULL;
-	essai2 = NULL;
+	_testRoute0 = NULL;
+	testRoute1 = NULL;
+	testRoute2 = NULL;
 	_lineBuf = (int16 *)g_PTRNUL;
 	_route = (RouteItem *)g_PTRNUL;
 	_currentSegmentId = 0;
@@ -1511,6 +1511,39 @@ RouteItem *LinesManager::PARCOURS2(int fromX, int fromY, int destX, int destY) {
 	return &_bestRoute[0];
 }
 
+void LinesManager::useRoute0(int idx, int curRouteIdx) {
+	if (idx) {
+		int i = 0;
+		do {
+			assert(curRouteIdx <= 8000);
+			_bestRoute[curRouteIdx++] = _testRoute0[i++];
+		} while (_testRoute0[i].isValid());
+	}
+	_bestRoute[curRouteIdx].invalidate();
+}
+
+void LinesManager::useRoute1(int idx, int curRouteIdx) {
+	if (idx) {
+		int i = 0;
+		do {
+			assert(curRouteIdx <= 8000);
+			_bestRoute[curRouteIdx++] = testRoute1[i++];
+		} while (testRoute1[i].isValid());
+	}
+	_bestRoute[curRouteIdx].invalidate();
+}
+
+void LinesManager::useRoute2(int idx, int curRouteIdx) {
+	if (idx) {
+		int i = 0;
+		do {
+			assert(curRouteIdx <= 8000);
+			_bestRoute[curRouteIdx++] = testRoute2[i++];
+		} while (testRoute2[i].isValid());
+	}
+	_bestRoute[curRouteIdx].invalidate();
+}
+
 int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int startLineIdx, int endLineIdx, int routeIdx) {
 	int v18;
 	int v19;
@@ -1544,8 +1577,8 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 	int v109;
 	int v111;
 	int v114;
-	int v115;
-	int v117;
+	int idxRoute0;
+	int idxRoute1;
 	int collLineIdx;
 	int collDataIdx = 0;
 	int v140;
@@ -1595,7 +1628,7 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 	}
 	v98 = curX;
 	v97 = curY;
-	v115 = 0;
+	idxRoute0 = 0;
 	v142 = -1;
 	v140 = -1;
 	collLineIdx = -1;
@@ -1608,8 +1641,9 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 		v111 = curX;
 		v109 = curY;
 		if (destX >= curX - 2 && destX <= curX + 2 && destY >= curY - 2 && destY <= curY + 2) {
-			essai0[v115].invalidate();
-			goto retLABEL_essai0;
+			_testRoute0[idxRoute0].invalidate();
+			useRoute0(idxRoute0, curRouteIdx);
+			return 1;
 		}
 		distX = abs(curX - destX);
 		v10 = distX + 1;
@@ -1649,8 +1683,8 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 					break;
 				}
 
-				essai0[v115].set(_smoothRoute[v14]._posX, _smoothRoute[v14]._posY, newDirection);
-				v115++;
+				_testRoute0[idxRoute0].set(_smoothRoute[v14]._posX, _smoothRoute[v14]._posY, newDirection);
+				idxRoute0++;
 
 				if (repeatFlag == 1) {
 					repeatFlag = 2;
@@ -1673,8 +1707,9 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 		if (v20 > (v95 + 1))
 			v108 = v20;
 		if (v108 <= 10) {
-			essai0[v115].invalidate();
-			goto retLABEL_essai0;
+			_testRoute0[idxRoute0].invalidate();
+			useRoute0(idxRoute0, curRouteIdx);
+			return 1;
 		}
 		v21 = v108 - 1;
 		v102 = 1000 * v20 / v21;
@@ -1752,28 +1787,32 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 		}
 		v23 = 0;
 		if (v108 + 1 <= 0) {
-			essai0[v115].invalidate();
-			goto retLABEL_essai0;
+			_testRoute0[idxRoute0].invalidate();
+			useRoute0(idxRoute0, curRouteIdx);
+			return 1;
 		}
 		while (!checkCollisionLine(v104, v103, &v143, &v142, 0, _linesNumb)) {
-			essai0[v115].set(v104, v103, newDirection);
+			_testRoute0[idxRoute0].set(v104, v103, newDirection);
 			v106 += v102;
 			v105 += v100;
 			v104 = v106 / 1000;
 			v103 = v105 / 1000;
-			v115++;
+			idxRoute0++;
 			++v23;
 			if (v23 >= v108 + 1) {
-				essai0[v115].invalidate();
-				goto retLABEL_essai0;
+				_testRoute0[idxRoute0].invalidate();
+				useRoute0(idxRoute0, curRouteIdx);
+				return 1;
 			}
 		}
 		if (_lastLine >= v142)
 			break;
-		v24 = GENIAL(v142, v143, v104, v103, destX, destY, v115, essai0);
-		if (v24 == -1)
-			goto retLABEL_essai0;
-		v115 = v24;
+		v24 = GENIAL(v142, v143, v104, v103, destX, destY, idxRoute0, _testRoute0);
+		if (v24 == -1) {
+			useRoute0(idxRoute0, curRouteIdx);
+			return 1;
+		}
+		idxRoute0 = v24;
 		if (_newPosX != -1 || _newPosY != -1) {
 			v142 = -1;
 			break;
@@ -1782,17 +1821,18 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 		curY = -1;
 	}
 
-	essai0[v115].invalidate();
+	_testRoute0[idxRoute0].invalidate();
 
-	v117 = 0;
+	idxRoute1 = 0;
 	v33 = v98;
 	v92 = v97;
 
 	while (true) {
 
 		if (destX >= v33 - 2 && destX <= v33 + 2 && destY >= v92 - 2 && destY <= v92 + 2) {
-			essai1[v117].invalidate();
-			goto retLABEL_essai1;
+			testRoute1[idxRoute1].invalidate();
+			useRoute1(idxRoute1, curRouteIdx);
+			return 1;
 		}
 		while (v33 != destX) {
 			if (checkCollisionLine(v33, v92, &v141, &v140, 0, _linesNumb)) {
@@ -1802,9 +1842,9 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 			}
 
 			if (v33 < destX)
-				essai1[v117++].set(v33++, v92, DIR_RIGHT);
+				testRoute1[idxRoute1++].set(v33++, v92, DIR_RIGHT);
 			else
-				essai1[v117++].set(v33--, v92, DIR_LEFT);
+				testRoute1[idxRoute1++].set(v33--, v92, DIR_LEFT);
 		}
 		if (v33 != destX)
 			break;
@@ -1815,22 +1855,25 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 				if (v140 <= _lastLine)
 					break;
 
-				int v44 = GENIAL(v140, v141, destX, v43, destX, destY, v117, essai1);
-				if (v44 == -1)
-					goto retLABEL_essai1;
-				v117 = v44;
+				int v44 = GENIAL(v140, v141, destX, v43, destX, destY, idxRoute1, testRoute1);
+				if (v44 == -1) {
+					useRoute1(idxRoute1, curRouteIdx);
+					return 1;
+				}
+				idxRoute1 = v44;
 				if (_newPosX != -1 && _newPosY != -1)
 					break;
 			}
 
 			if (v43 < destY)
-				essai1[v117++].set(destX, v43++, DIR_DOWN);
+				testRoute1[idxRoute1++].set(destX, v43++, DIR_DOWN);
 			else
-				essai1[v117++].set(destX, v43--, DIR_UP);
+				testRoute1[idxRoute1++].set(destX, v43--, DIR_UP);
 		}
 		if (v43 == destY) {
-			essai1[v117].invalidate();
-			goto retLABEL_essai1;
+			testRoute1[idxRoute1].invalidate();
+			useRoute1(idxRoute1, curRouteIdx);
+			return 1;
 		}
 		if (v140 <= _lastLine)
 			break;
@@ -1841,16 +1884,17 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 			break;
 	}
 
-	essai1[v117].invalidate();
-	v117 = 0;
+	testRoute1[idxRoute1].invalidate();
+	idxRoute1 = 0;
 	v54 = v98;
 	v93 = v97;
 	while (true) {
 		int v61;
 		v114 = v54;
 		if (destX >= v54 - 2 && destX <= v54 + 2 && destY >= v93 - 2 && destY <= v93 + 2) {
-			essai2[v117].invalidate();
-			goto retLABEL_essai2;
+			testRoute2[idxRoute1].invalidate();
+			useRoute2(idxRoute1, curRouteIdx);
+			return 1;
 		}
 
 		v55 = v93;
@@ -1862,9 +1906,9 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 			}
 
 			if (v55 < destY)
-				essai2[v117++].set(v114, v55++, DIR_DOWN);
+				testRoute2[idxRoute1++].set(v114, v55++, DIR_DOWN);
 			else
-				essai2[v117++].set(v114, v55--, DIR_UP);
+				testRoute2[idxRoute1++].set(v114, v55--, DIR_UP);
 		}
 		if (v55 != destY)
 			break;
@@ -1875,25 +1919,26 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 				if (collLineIdx <= _lastLine)
 					break;
 
-				int v62 = GENIAL(collLineIdx, collDataIdx, v61, destY, destX, destY, v117, essai2);
+				int v62 = GENIAL(collLineIdx, collDataIdx, v61, destY, destX, destY, idxRoute1, testRoute2);
 				if (v62 == -1) {
-					// CHECKME: This goto was to retLABEL_essai1... 
-					goto retLABEL_essai2;
+					useRoute2(idxRoute1, curRouteIdx);
+					return 1;
 				}
-				v117 = v62;
+				idxRoute1 = v62;
 				if (_newPosX != -1 && _newPosY != -1)
 					break;
 			}
 
 			if (v61 < destX)
-				essai2[v117++].set(v61++, destY, DIR_RIGHT);
+				testRoute2[idxRoute1++].set(v61++, destY, DIR_RIGHT);
 			else
-				essai2[v117++].set(v61--, destY, DIR_LEFT);
+				testRoute2[idxRoute1++].set(v61--, destY, DIR_LEFT);
 		}
 		if (v61 == destX) {
 			collLineIdx = -1;
-			essai2[v117].invalidate();
-			goto retLABEL_essai2;
+			testRoute2[idxRoute1].invalidate();
+			useRoute2(idxRoute1, curRouteIdx);
+			return 1;
 		}
 		if (collLineIdx <= _lastLine)
 			break;
@@ -1905,40 +1950,40 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 			break;
 	}
 
-	essai2[v117].invalidate();
+	testRoute2[idxRoute1].invalidate();
 
 	if (!v136) {
 		if (endLineIdx > foundLineIdx) {
-			if (essai0[0]._x != -1 && v142 > foundLineIdx && v140 <= v142 && collLineIdx <= v142 && endLineIdx >= v142) {
+			if (_testRoute0[0]._x != -1 && v142 > foundLineIdx && v140 <= v142 && collLineIdx <= v142 && endLineIdx >= v142) {
 				_newLineIdx = v142;
 				_newLineDataIdx = v143;
 				int i = 0;
 				do {
 					assert(curRouteIdx <= 8000);
-					_bestRoute[curRouteIdx++] = essai0[i++];
-				} while (essai0[i].isValid());
+					_bestRoute[curRouteIdx++] = _testRoute0[i++];
+				} while (_testRoute0[i].isValid());
 				_newRouteIdx = curRouteIdx;
 				return 2;
 			}
-			if (essai1[0]._x != -1 && foundLineIdx < v140 && collLineIdx <= v140 && v142 <= v140 && endLineIdx >= v140) {
+			if (testRoute1[0]._x != -1 && foundLineIdx < v140 && collLineIdx <= v140 && v142 <= v140 && endLineIdx >= v140) {
 				_newLineIdx = v140;
 				_newLineDataIdx = v141;
 				int i = 0;
 				do {
 					assert(curRouteIdx <= 8000);
-					_bestRoute[curRouteIdx++] = essai1[i++];
-				} while (essai1[i].isValid());
+					_bestRoute[curRouteIdx++] = testRoute1[i++];
+				} while (testRoute1[i].isValid());
 				_newRouteIdx = curRouteIdx;
 				return 2;
 			}
-			if (essai2[0]._x != -1 && foundLineIdx < collLineIdx && v140 < collLineIdx && v142 < collLineIdx && endLineIdx >= collLineIdx) {
+			if (testRoute2[0]._x != -1 && foundLineIdx < collLineIdx && v140 < collLineIdx && v142 < collLineIdx && endLineIdx >= collLineIdx) {
 				_newLineIdx = collLineIdx;
 				_newLineDataIdx = collDataIdx;
 				int i = 0;
 				do {
 					assert(curRouteIdx <= 8000);
-					_bestRoute[curRouteIdx++] = essai2[i++];
-				} while (essai2[i].isValid());
+					_bestRoute[curRouteIdx++] = testRoute2[i++];
+				} while (testRoute2[i].isValid());
 				_newRouteIdx = curRouteIdx;
 				return 2;
 			}
@@ -1950,76 +1995,43 @@ int LinesManager::characterRoute(int fromX, int fromY, int destX, int destY, int
 				v142 = 1300;
 			if (collLineIdx == -1)
 				v142 = 1300;
-			if (essai1[0]._x != -1 && v140 < foundLineIdx && collLineIdx >= v140 && v142 >= v140 && endLineIdx <= v140) {
+			if (testRoute1[0]._x != -1 && v140 < foundLineIdx && collLineIdx >= v140 && v142 >= v140 && endLineIdx <= v140) {
 				_newLineIdx = v140;
 				_newLineDataIdx = v141;
 				int i = 0;
 				do {
 					assert(curRouteIdx <= 8000);
-					_bestRoute[curRouteIdx++] = essai1[i++];
-				} while (essai1[i].isValid());
+					_bestRoute[curRouteIdx++] = testRoute1[i++];
+				} while (testRoute1[i].isValid());
 				_newRouteIdx = curRouteIdx;
 				return 2;
 			}
-			if (essai2[0]._x != -1 && foundLineIdx > collLineIdx && v140 >= collLineIdx && v142 >= collLineIdx && endLineIdx <= collLineIdx) {
+			if (testRoute2[0]._x != -1 && foundLineIdx > collLineIdx && v140 >= collLineIdx && v142 >= collLineIdx && endLineIdx <= collLineIdx) {
 				_newLineIdx = collLineIdx;
 				_newLineDataIdx = collDataIdx;
 				int i = 0;
 				do {
 					assert(curRouteIdx <= 8000);
-					_bestRoute[curRouteIdx++] = essai2[i++];
-				} while (essai2[i].isValid());
+					_bestRoute[curRouteIdx++] = testRoute2[i++];
+				} while (testRoute2[i].isValid());
 				_newRouteIdx = curRouteIdx;
 				return 2;
 			}
 			// CHECKME: Checking essai0[0]._X might make more sense here?
-			if (essai1[0]._x != -1 && foundLineIdx > v142 && v140 >= v142 && collLineIdx >= v142 && endLineIdx <= v142) {
+			if (testRoute1[0]._x != -1 && foundLineIdx > v142 && v140 >= v142 && collLineIdx >= v142 && endLineIdx <= v142) {
 				_newLineIdx = v142;
 				_newLineDataIdx = v143;
 				int i = 0;
 				do {
 					assert(curRouteIdx <= 8000);
-					_bestRoute[curRouteIdx++] = essai0[i++];
-				} while (essai0[i].isValid());
+					_bestRoute[curRouteIdx++] = _testRoute0[i++];
+				} while (_testRoute0[i].isValid());
 				_newRouteIdx = curRouteIdx;
 				return 2;
 			}
 		}
 	}
 	return 0;
-
-retLABEL_essai0:
-	if (v115) {
-		int i = 0;
-		do {
-			assert(curRouteIdx <= 8000);
-			_bestRoute[curRouteIdx++] = essai0[i++];
-		} while (essai0[i].isValid());
-	}
-	_bestRoute[curRouteIdx].invalidate();
-	return 1;
-
-retLABEL_essai1:
-	if (v117) {
-		int i = 0;
-		do {
-			assert(curRouteIdx <= 8000);
-			_bestRoute[curRouteIdx++] = essai1[i++];
-		} while (essai1[i].isValid());
-	}
-	_bestRoute[curRouteIdx].invalidate();
-	return 1;
-
-retLABEL_essai2:
-	if (v117) {
-		int i = 0;
-		do {
-			assert(curRouteIdx <= 8000);
-			_bestRoute[curRouteIdx++] = essai2[i++];
-		} while (essai2[i].isValid());
-	}
-	_bestRoute[curRouteIdx].invalidate();
-	return 1;
 }
 
 RouteItem *LinesManager::cityMapCarRoute(int x1, int y1, int x2, int y2) {
@@ -2127,9 +2139,9 @@ RouteItem *LinesManager::cityMapCarRoute(int x1, int y1, int x2, int y2) {
 			int v27 = 0;
 			int v28;
 			for (;;) {
-				v28 = essai2[v27]._x;
-				int v29 = essai2[v27]._y;
-				Directions v66 = essai2[v27]._dir;
+				v28 = testRoute2[v27]._x;
+				int v29 = testRoute2[v27]._y;
+				Directions v66 = testRoute2[v27]._dir;
 				v27++;
 
 				if (checkCollisionLine(v28, v29, &arrDataIdx[1], &arrLineIdx[1], 0, _lastLine))
@@ -2137,7 +2149,7 @@ RouteItem *LinesManager::cityMapCarRoute(int x1, int y1, int x2, int y2) {
 
 				_bestRoute[superRouteIdx].set(v28, v29, v66);
 
-				essai0[superRouteIdx].set(v28, v29, v66);
+				_testRoute0[superRouteIdx].set(v28, v29, v66);
 				superRouteIdx++;
 				if (v28 == -1)
 					break;;
@@ -2775,9 +2787,9 @@ void LinesManager::clearAll() {
 		ZONEP[idx]._spriteIndex = 0;
 	}
 
-	essai0 = (RouteItem *)g_PTRNUL;
-	essai1 = (RouteItem *)g_PTRNUL;
-	essai2 = (RouteItem *)g_PTRNUL;
+	_testRoute0 = (RouteItem *)g_PTRNUL;
+	testRoute1 = (RouteItem *)g_PTRNUL;
+	testRoute2 = (RouteItem *)g_PTRNUL;
 	_lineBuf = (int16 *)g_PTRNUL;
 	_route = (RouteItem *)g_PTRNUL;
 
@@ -2797,15 +2809,15 @@ void LinesManager::clearAll() {
 		_squareZone[idx]._enabledFl = false;
 
 	// FIXME: Delete these somewhere
-	_vm->_linesManager.essai0 = new RouteItem[8334];
-	_vm->_linesManager.essai1 = new RouteItem[8334];
-	_vm->_linesManager.essai2 = new RouteItem[8334];
-	if (!_vm->_linesManager.essai0)
-		_vm->_linesManager.essai0 = (RouteItem*)g_PTRNUL;
-	if (!_vm->_linesManager.essai1)
-		_vm->_linesManager.essai1 = (RouteItem*)g_PTRNUL;
-	if (!_vm->_linesManager.essai2)
-		_vm->_linesManager.essai2 = (RouteItem*)g_PTRNUL;
+	_vm->_linesManager._testRoute0 = new RouteItem[8334];
+	_vm->_linesManager.testRoute1 = new RouteItem[8334];
+	_vm->_linesManager.testRoute2 = new RouteItem[8334];
+	if (!_vm->_linesManager._testRoute0)
+		_vm->_linesManager._testRoute0 = (RouteItem*)g_PTRNUL;
+	if (!_vm->_linesManager.testRoute1)
+		_vm->_linesManager.testRoute1 = (RouteItem*)g_PTRNUL;
+	if (!_vm->_linesManager.testRoute2)
+		_vm->_linesManager.testRoute2 = (RouteItem*)g_PTRNUL;
 	
 	_largeBuf = _vm->_globals.allocMemory(10000);
 	_vm->_linesManager._lineBuf = (int16 *)(_largeBuf);
diff --git a/engines/hopkins/lines.h b/engines/hopkins/lines.h
index a2cecbf..66a0a4c 100644
--- a/engines/hopkins/lines.h
+++ b/engines/hopkins/lines.h
@@ -121,8 +121,8 @@ private:
 	int _newPosY;
 
 	byte *_largeBuf;
-	RouteItem *essai0;
-	RouteItem *essai1;
+	RouteItem *_testRoute0;
+	RouteItem *testRoute1;
 	int16 *_lineBuf;
 	LigneItem _lineItem[400];
 	RouteItem _bestRoute[8001];
@@ -136,6 +136,9 @@ private:
 	bool makeSmoothMove(int fromX, int fromY, int destX, int destY);
 	int characterRoute(int fromX, int fromY, int destX, int destY, int startLineIdx, int endLineIdx, int routeIdx);
 	int testLine(int paramX, int paramY, int *a3, int *foundLineIdx, int *foundDataIdx);
+	void useRoute0(int idx, int curRouteIdx);
+	void useRoute1(int idx, int curRouteIdx);
+	void useRoute2(int idx, int curRouteIdx);
 
 	int CALC_PROPRE(int idx);
 	int CONTOURNE(int lineIdx, int lineDataIdx, int routeIdx, int destLineIdx, int destLineDataIdx, RouteItem *route);
@@ -146,7 +149,7 @@ private:
 
 public:
 	RouteItem *_route;
-	RouteItem *essai2;
+	RouteItem *testRoute2;
 
 	int BOBZONE[105];
 	bool BOBZONE_FLAG[105];
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp
index 67d620c..c2ab49e 100644
--- a/engines/hopkins/objects.cpp
+++ b/engines/hopkins/objects.cpp
@@ -1871,11 +1871,11 @@ void ObjectsManager::handleLeftButton() {
 			return;
 		int routeIdx = 0;
 		do {
-			_vm->_linesManager.essai2[routeIdx] = _vm->_linesManager._route[routeIdx];
+			_vm->_linesManager.testRoute2[routeIdx] = _vm->_linesManager._route[routeIdx];
 			++routeIdx;
 		} while (_vm->_linesManager._route[routeIdx]._x != -1);
 
-		_vm->_linesManager.essai2[routeIdx].invalidate();
+		_vm->_linesManager.testRoute2[routeIdx].invalidate();
 	}
 
 	if (_vm->_globals._actionMoveTo) {






More information about the Scummvm-git-logs mailing list