aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins
diff options
context:
space:
mode:
authorStrangerke2013-01-11 21:27:04 +0100
committerStrangerke2013-01-11 21:27:04 +0100
commit8fa4b4b8466a6b94523c40f57ce6459134fced54 (patch)
tree0aa94fcebad2db93c33374c941f3fbe6df70a35f /engines/hopkins
parent86eb21e8855e885b7a76cd4dfe57997d82e4eb80 (diff)
downloadscummvm-rg350-8fa4b4b8466a6b94523c40f57ce6459134fced54.tar.gz
scummvm-rg350-8fa4b4b8466a6b94523c40f57ce6459134fced54.tar.bz2
scummvm-rg350-8fa4b4b8466a6b94523c40f57ce6459134fced54.zip
HOPKINS: Start refactoring PARC_VOITURE, some renaming
Diffstat (limited to 'engines/hopkins')
-rw-r--r--engines/hopkins/computer.cpp2
-rw-r--r--engines/hopkins/font.cpp47
-rw-r--r--engines/hopkins/font.h2
-rw-r--r--engines/hopkins/lines.cpp24
-rw-r--r--engines/hopkins/objects.cpp113
5 files changed, 88 insertions, 100 deletions
diff --git a/engines/hopkins/computer.cpp b/engines/hopkins/computer.cpp
index d44ff42550..ef56575567 100644
--- a/engines/hopkins/computer.cpp
+++ b/engines/hopkins/computer.cpp
@@ -428,7 +428,7 @@ void ComputerManager::TXT4(int xp, int yp, int textIdx) {
* Outputs a text string
*/
void ComputerManager::outText(const Common::String &msg) {
- _vm->_fontManager.TEXT_COMPUT(_textPosition.x, _textPosition.y, msg, _textColor);
+ _vm->_fontManager.renderTextDisplay(_textPosition.x, _textPosition.y, msg, _textColor);
}
/**
diff --git a/engines/hopkins/font.cpp b/engines/hopkins/font.cpp
index 8b2bc51b90..492bde5ebd 100644
--- a/engines/hopkins/font.cpp
+++ b/engines/hopkins/font.cpp
@@ -450,35 +450,31 @@ void FontManager::displayText(int xp, int yp, const Common::String &message, int
}
}
-void FontManager::TEXT_COMPUT(int xp, int yp, const Common::String &msg, int col) {
- const char *srcP;
- int v5;
- int v6;
- byte v7;
- int fontCol;
- int v9;
-
- srcP = msg.c_str();
- v9 = xp;
- fontCol = col;
- do {
- v7 = *srcP++;
- if (v7 == '&') {
+/**
+ * Compute character width and render text using variable width fonts
+ */
+void FontManager::renderTextDisplay(int xp, int yp, const Common::String &msg, int col) {
+ const char *srcP = msg.c_str();
+ int charEndPosX = xp;
+ int fontCol = col;
+ byte curChar = *srcP++;
+ while (curChar) {
+ if (curChar == '&') {
fontCol = 2;
- v7 = *srcP++;
+ curChar = *srcP++;
}
- if (v7 == '$') {
+ if (curChar == '$') {
fontCol = 4;
- v7 = *srcP++;
+ curChar = *srcP++;
}
- if (!v7)
+ if (!curChar)
break;
- if (v7 >= 32) {
- v5 = v7 - 32;
- _vm->_graphicsManager.displayFont(_vm->_graphicsManager._vesaBuffer, _vm->_globals.police, v9, yp, v7 - 32, fontCol);
- v9 += _vm->_objectsManager.getWidth(_vm->_globals.police, v5);
- v6 = _vm->_objectsManager.getWidth(_vm->_globals.police, v5);
- _vm->_graphicsManager.addVesaSegment(v9 - v6, yp, v9, yp + 12);
+ if (curChar >= 32) {
+ byte printChar = curChar - 32;
+ _vm->_graphicsManager.displayFont(_vm->_graphicsManager._vesaBuffer, _vm->_globals.police, charEndPosX, yp, printChar, fontCol);
+ charEndPosX += _vm->_objectsManager.getWidth(_vm->_globals.police, printChar);
+ int charWidth = _vm->_objectsManager.getWidth(_vm->_globals.police, printChar);
+ _vm->_graphicsManager.addVesaSegment(charEndPosX - charWidth, yp, charEndPosX, yp + 12);
if (_vm->_eventsManager._escKeyFl) {
_vm->_globals.iRegul = 1;
_vm->_eventsManager.VBL();
@@ -488,7 +484,8 @@ void FontManager::TEXT_COMPUT(int xp, int yp, const Common::String &msg, int col
_vm->_globals.iRegul = 1;
}
}
- } while (v7);
+ curChar = *srcP++;
+ }
}
} // End of namespace Hopkins
diff --git a/engines/hopkins/font.h b/engines/hopkins/font.h
index 8970b9c8e8..d9debdee44 100644
--- a/engines/hopkins/font.h
+++ b/engines/hopkins/font.h
@@ -82,7 +82,7 @@ public:
void displayTextVesa(int xp, int yp, const Common::String &message, int col);
void displayText(int xp, int yp, const Common::String &message, int col);
- void TEXT_COMPUT(int xp, int yp, const Common::String &msg, int col);
+ void renderTextDisplay(int xp, int yp, const Common::String &msg, int col);
};
} // End of namespace Hopkins
diff --git a/engines/hopkins/lines.cpp b/engines/hopkins/lines.cpp
index 7816d11836..e55c2b6fca 100644
--- a/engines/hopkins/lines.cpp
+++ b/engines/hopkins/lines.cpp
@@ -3106,7 +3106,6 @@ bool LinesManager::PLAN_TEST(int paramX, int paramY, int a3, int a4, int a5) {
int lineIdxTestLeft;
int lineIdxTestRight;
- int v41 = a3;
int idxTestUp = TEST_LIGNE(paramX, paramY - 2, &v42, &lineIdxTestUp, &dataIdxTestUp);
int idxTestDown = TEST_LIGNE(paramX, paramY + 2, &v43, &lineIdxTestDown, &dataIdxTestDown);
int idxTestLeft = TEST_LIGNE(paramX - 2, paramY, &v44, &lineIdxTestLeft, &dataIdxTestLeft);
@@ -3181,25 +3180,26 @@ bool LinesManager::PLAN_TEST(int paramX, int paramY, int a3, int a4, int a5) {
NV_LIGNEOFS = dataIdxTestRight;
}
+ int superRouteIdx = a3;
if (v33 == 1) {
_vm->_globals.essai0 = _vm->_globals.essai0;
for (int i = 0; i < Ligne[idxTest]._lineDataEndIdx; i++) {
- _vm->_globals.super_parcours[v41] = Ligne[idxTest]._lineData[2 * i];
- _vm->_globals.super_parcours[v41 + 1] = Ligne[idxTest]._lineData[2 * i + 1];
- _vm->_globals.super_parcours[v41 + 2] = Ligne[idxTest].field6;
- _vm->_globals.super_parcours[v41 + 3] = 0;
- v41 += 4;
+ _vm->_globals.super_parcours[superRouteIdx] = Ligne[idxTest]._lineData[2 * i];
+ _vm->_globals.super_parcours[superRouteIdx + 1] = Ligne[idxTest]._lineData[2 * i + 1];
+ _vm->_globals.super_parcours[superRouteIdx + 2] = Ligne[idxTest].field6;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
}
} else if (v33 == 2) {
for (int v19 = Ligne[idxTest]._lineDataEndIdx - 1; v19 > -1; v19--) {
- _vm->_globals.super_parcours[v41] = Ligne[idxTest]._lineData[2 * v19];
- _vm->_globals.super_parcours[v41 + 1] = Ligne[idxTest]._lineData[2 * v19 + 1];
- _vm->_globals.super_parcours[v41 + 2] = Ligne[idxTest].field8;
- _vm->_globals.super_parcours[v41 + 3] = 0;
- v41 += 4;
+ _vm->_globals.super_parcours[superRouteIdx] = Ligne[idxTest]._lineData[2 * v19];
+ _vm->_globals.super_parcours[superRouteIdx + 1] = Ligne[idxTest]._lineData[2 * v19 + 1];
+ _vm->_globals.super_parcours[superRouteIdx + 2] = Ligne[idxTest].field8;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
}
}
- NV_POSI = v41;
+ NV_POSI = superRouteIdx;
return true;
}
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp
index 6953230adf..3877b03017 100644
--- a/engines/hopkins/objects.cpp
+++ b/engines/hopkins/objects.cpp
@@ -2867,22 +2867,16 @@ int16 *ObjectsManager::PARC_VOITURE(int x1, int y1, int x2, int y2) {
int v27;
int v28;
int v29;
- int v32;
- int16 *v33;
int v34;
int v35;
int16 *v37;
- int v39;
int16 *v41;
int16 *v45;
- int v47;
int v48;
int16 *v50;
- int v52;
int16 *v54;
int16 *v58;
int v66;
- int v67;
int v68 = 0;
int v69 = 0;
int j;
@@ -2894,7 +2888,7 @@ int16 *ObjectsManager::PARC_VOITURE(int x1, int y1, int x2, int y2) {
int clipX2 = x2;
int clipY2 = y2;
- v67 = 0;
+ int superRouteIdx = 0;
if (x2 <= 14)
clipX2 = 15;
if (y2 <= 14)
@@ -2993,20 +2987,20 @@ int16 *ObjectsManager::PARC_VOITURE(int x1, int y1, int x2, int y2) {
v29 = _vm->_globals.essai2[v27 + 1];
v66 = _vm->_globals.essai2[v27 + 2];
v27 += 4;
+
if (_vm->_linesManager.checkCollisionLine(v28, v29, &arrDataIdx[1], &arrLineIdx[1], 0, _lastLine))
break;
- v32 = v67;
- _vm->_globals.super_parcours[v32] = v28;
- _vm->_globals.super_parcours[v32 + 1] = v29;
- _vm->_globals.super_parcours[v32 + 2] = v66;
- _vm->_globals.super_parcours[v32 + 3] = 0;
-
- v33 = _vm->_globals.essai0;
- _vm->_globals.essai0[v32] = v28;
- v33[v32 + 1] = v29;
- v33[v32 + 2] = v66;
- v33[v32 + 3] = 0;
- v67 += 4;
+
+ _vm->_globals.super_parcours[superRouteIdx] = v28;
+ _vm->_globals.super_parcours[superRouteIdx + 1] = v29;
+ _vm->_globals.super_parcours[superRouteIdx + 2] = v66;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+
+ _vm->_globals.essai0[superRouteIdx] = v28;
+ _vm->_globals.essai0[superRouteIdx + 1] = v29;
+ _vm->_globals.essai0[superRouteIdx + 2] = v66;
+ _vm->_globals.essai0[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
if (v28 == -1)
break;;
}
@@ -3017,7 +3011,7 @@ int16 *ObjectsManager::PARC_VOITURE(int x1, int y1, int x2, int y2) {
} else {
v69 = 1;
v68 = 1;
- v67 = 0;
+ superRouteIdx = 0;
}
LABEL_90:
if (v69 < v73) {
@@ -3025,12 +3019,11 @@ LABEL_90:
v35 = v68;
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];
- _vm->_globals.super_parcours[v39 + 2] = _vm->_linesManager.Ligne[v69].field6;
- _vm->_globals.super_parcours[v39 + 3] = 0;
- v67 += 4;
+ _vm->_globals.super_parcours[superRouteIdx] = v37[2 * v35];
+ _vm->_globals.super_parcours[superRouteIdx + 1] = v37[2 * v35 + 1];
+ _vm->_globals.super_parcours[superRouteIdx + 2] = _vm->_linesManager.Ligne[v69].field6;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
++v34;
v35 = v34;
}
@@ -3038,20 +3031,20 @@ LABEL_90:
if (_vm->_linesManager.PLAN_TEST(
_vm->_linesManager.Ligne[j]._lineData[0],
_vm->_linesManager.Ligne[j]._lineData[1],
- v67, j, v73)) {
+ superRouteIdx, j, v73)) {
v69 = _vm->_linesManager.NV_LIGNEDEP;
v68 = _vm->_linesManager.NV_LIGNEOFS;
- v67 = _vm->_linesManager.NV_POSI;
+ superRouteIdx = _vm->_linesManager.NV_POSI;
goto LABEL_90;
}
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;
- _vm->_globals.super_parcours[v67 + 3] = 0;
- v67 += 4;
+ _vm->_globals.super_parcours[superRouteIdx] = v41[2 * v40];
+ _vm->_globals.super_parcours[superRouteIdx + 1] = v41[2 * v40 + 1];
+ _vm->_globals.super_parcours[superRouteIdx + 2] = _vm->_linesManager.Ligne[j].field6;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
}
}
}
@@ -3061,33 +3054,31 @@ LABEL_90:
if (v69 > v73) {
for (int k = v68; k > 0; --k) {
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];
- _vm->_globals.super_parcours[v47 + 2] = _vm->_linesManager.Ligne[v69].field8;
- _vm->_globals.super_parcours[v47 + 3] = 0;
- v67 += 4;
+ _vm->_globals.super_parcours[superRouteIdx] = v45[2 * k];
+ _vm->_globals.super_parcours[superRouteIdx + 1] = v45[2 * k + 1];
+ _vm->_globals.super_parcours[superRouteIdx + 2] = _vm->_linesManager.Ligne[v69].field8;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
}
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]._lineDataEndIdx - 2],
_vm->_linesManager.Ligne[l]._lineData[2 * _vm->_linesManager.Ligne[v48]._lineDataEndIdx - 1],
- v67, l, v73)) {
+ superRouteIdx, l, v73)) {
v69 = _vm->_linesManager.NV_LIGNEDEP;
v68 = _vm->_linesManager.NV_LIGNEOFS;
- v67 = _vm->_linesManager.NV_POSI;
+ superRouteIdx = _vm->_linesManager.NV_POSI;
goto LABEL_90;
}
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];
- _vm->_globals.super_parcours[v52 + 2] = _vm->_linesManager.Ligne[l].field8;
- _vm->_globals.super_parcours[v52 + 3] = 0;
- v67 += 4;
+ _vm->_globals.super_parcours[superRouteIdx] = v50[2 * v49];
+ _vm->_globals.super_parcours[superRouteIdx + 1] = v50[2 * v49 + 1];
+ _vm->_globals.super_parcours[superRouteIdx + 2] = _vm->_linesManager.Ligne[l].field8;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
}
}
v68 = _vm->_linesManager.Ligne[v73]._lineDataEndIdx - 1;
@@ -3097,27 +3088,27 @@ LABEL_90:
if (v68 <= v72) {
for (int v57 = v68; v57 < v72; v57++) {
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;
- _vm->_globals.super_parcours[v67 + 3] = 0;
- v67 += 4;
+ _vm->_globals.super_parcours[superRouteIdx] = v58[2 * v57];
+ _vm->_globals.super_parcours[superRouteIdx + 1] = v58[2 * v57 + 1];
+ _vm->_globals.super_parcours[superRouteIdx + 2] = _vm->_linesManager.Ligne[v73].field6;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
}
} else {
for (int v53 = v68; v53 > v72; v53--) {
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;
- _vm->_globals.super_parcours[v67 + 3] = 0;
- v67 += 4;
+ _vm->_globals.super_parcours[superRouteIdx] = v54[2 * v53];
+ _vm->_globals.super_parcours[superRouteIdx + 1] = v54[2 * v53 + 1];
+ _vm->_globals.super_parcours[superRouteIdx + 2] = _vm->_linesManager.Ligne[v73].field8;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = 0;
+ superRouteIdx += 4;
}
}
}
- _vm->_globals.super_parcours[v67] = -1;
- _vm->_globals.super_parcours[v67 + 1] = -1;
- _vm->_globals.super_parcours[v67 + 2] = -1;
- _vm->_globals.super_parcours[v67 + 3] = -1;
+ _vm->_globals.super_parcours[superRouteIdx] = -1;
+ _vm->_globals.super_parcours[superRouteIdx + 1] = -1;
+ _vm->_globals.super_parcours[superRouteIdx + 2] = -1;
+ _vm->_globals.super_parcours[superRouteIdx + 3] = -1;
result = &_vm->_globals.super_parcours[0];
} else {
result = (int16 *)g_PTRNUL;