aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorStrangerke2013-02-12 23:48:03 +0100
committerStrangerke2013-02-12 23:48:03 +0100
commit2b865f6fe2603f25c7554cb19609e4ca72205d38 (patch)
tree6a679167029d04a3596c86a582a118ce533533b0 /engines
parent9223719f2a7ca153ada953fc12a717f9547476d2 (diff)
downloadscummvm-rg350-2b865f6fe2603f25c7554cb19609e4ca72205d38.tar.gz
scummvm-rg350-2b865f6fe2603f25c7554cb19609e4ca72205d38.tar.bz2
scummvm-rg350-2b865f6fe2603f25c7554cb19609e4ca72205d38.zip
HOPKINS: Move some zone code to LinesManager
Diffstat (limited to 'engines')
-rw-r--r--engines/hopkins/globals.cpp12
-rw-r--r--engines/hopkins/globals.h20
-rw-r--r--engines/hopkins/hopkins.cpp10
-rw-r--r--engines/hopkins/lines.cpp158
-rw-r--r--engines/hopkins/lines.h25
-rw-r--r--engines/hopkins/objects.cpp408
-rw-r--r--engines/hopkins/objects.h5
-rw-r--r--engines/hopkins/script.cpp8
-rw-r--r--engines/hopkins/talk.cpp14
9 files changed, 335 insertions, 325 deletions
diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp
index bd20b82ec9..516eb4d1ac 100644
--- a/engines/hopkins/globals.cpp
+++ b/engines/hopkins/globals.cpp
@@ -68,8 +68,6 @@ Globals::Globals() {
// Initialise array properties
for (int i = 0; i < 6; ++i)
CACHE_BANQUE[i] = g_PTRNUL;
- for (int i = 0; i < 106; ++i)
- Common::fill((byte *)&ZONEP[i], (byte *)&ZONEP[i] + sizeof(ZonePItem), 0);
for (int i = 0; i < 35; ++i)
Common::fill((byte *)&Bqe_Anim[i], (byte *)&Bqe_Anim[i] + sizeof(BqeAnimItem), 0);
for (int i = 0; i < 8; ++i)
@@ -87,10 +85,6 @@ Globals::Globals() {
for (int i = 0; i < 25; ++i)
Common::fill((byte *)&Cache[i], (byte *)&Cache[i] + sizeof(CacheItem), 0);
- for (int i = 0; i < 105; ++i) {
- BOBZONE[i] = 0;
- BOBZONE_FLAG[i] = false;
- }
for (int i = 0; i < 500; ++i)
_spriteSize[i] = 0;
for (int i = 0; i < 70; ++i)
@@ -269,12 +263,6 @@ void Globals::clearAll() {
_saveData = (Sauvegarde *)g_PTRNUL;
_vm->_objectsManager._curObjectIndex = 0;
- for (int idx = 0; idx < 105; ++idx) {
- ZONEP[idx]._destX = 0;
- ZONEP[idx]._destY = 0;
- ZONEP[idx]._spriteIndex = 0;
- }
-
_vm->_linesManager.clearAll();
_vm->_objectsManager.clearAll();
diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h
index e50ec48324..e3dd68046b 100644
--- a/engines/hopkins/globals.h
+++ b/engines/hopkins/globals.h
@@ -29,23 +29,6 @@
namespace Hopkins {
-struct ZonePItem {
- int _destX;
- int _destY;
- int _spriteIndex;
- int field6;
- int field7;
- int field8;
- int field9;
- int fieldA;
- int fieldB;
- int fieldC;
- int fieldD;
- int fieldE;
- int fieldF;
- bool _enabledFl;
- int field12;
-};
struct BqeAnimItem {
byte *_data;
@@ -317,10 +300,7 @@ public:
byte *SPRITE_ECRAN;
byte *PERSO;
int PERSO_TYPE;
- int BOBZONE[105];
- bool BOBZONE_FLAG[105];
bool NOT_VERIF;
- ZonePItem ZONEP[106];
ObjetWItem ObjetW[300];
int NUM_FICHIER_OBJ;
byte *ADR_FICHIER_OBJ;
diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp
index 444c349d4d..876acec78f 100644
--- a/engines/hopkins/hopkins.cpp
+++ b/engines/hopkins/hopkins.cpp
@@ -2723,13 +2723,13 @@ void HopkinsEngine::OCEAN(int16 curExitId, Common::String backgroundFilename, in
_objectsManager.INILINK("ocean");
if (!exit1)
- _objectsManager.disableZone(1);
+ _linesManager.disableZone(1);
if (!exit2)
- _objectsManager.disableZone(2);
+ _linesManager.disableZone(2);
if (!exit3)
- _objectsManager.disableZone(3);
+ _linesManager.disableZone(3);
if (!exit4)
- _objectsManager.disableZone(4);
+ _linesManager.disableZone(4);
if (!_globals._oceanDirection)
_globals._oceanDirection = defaultDirection;
@@ -2775,7 +2775,7 @@ void HopkinsEngine::OCEAN(int16 curExitId, Common::String backgroundFilename, in
int mouseButton = _eventsManager.getMouseButton();
if (mouseButton && mouseButton == 1)
BTOCEAN();
- _objectsManager.checkZone();
+ _linesManager.checkZone();
OCEAN_HOME();
_eventsManager.VBL();
if (_globals._exitId || g_system->getEventManager()->shouldQuit())
diff --git a/engines/hopkins/lines.cpp b/engines/hopkins/lines.cpp
index 93ffd5647c..db9ea2f3eb 100644
--- a/engines/hopkins/lines.cpp
+++ b/engines/hopkins/lines.cpp
@@ -33,16 +33,26 @@ LinesManager::LinesManager() {
Common::fill((byte *)&_zoneLine[i], (byte *)&_zoneLine[i] + sizeof(LigneZoneItem), 0);
Common::fill((byte *)&Ligne[i], (byte *)&Ligne[i] + sizeof(LigneItem), 0);
}
- for (int i = 0; i < 4000; ++i) {
+
+ for (int i = 0; i < 4000; ++i)
Common::fill((byte *)&_smoothRoute[i], (byte *)&_smoothRoute[i] + sizeof(SmoothItem), 0);
- }
+
for (int i = 0; i < 32002; ++i)
super_parcours[i] = 0;
+
for (int i = 0; i < 101; ++i) {
Common::fill((byte *)&_segment[i], (byte *)&_segment[i] + sizeof(SegmentItem), 0);
Common::fill((byte *)&_squareZone[i], (byte *)&_squareZone[i] + sizeof(SquareZoneItem), 0);
}
+ for (int i = 0; i < 105; ++i) {
+ BOBZONE[i] = 0;
+ BOBZONE_FLAG[i] = false;
+ }
+
+ for (int i = 0; i < 106; ++i)
+ Common::fill((byte *)&ZONEP[i], (byte *)&ZONEP[i] + sizeof(ZonePItem), 0);
+
_linesNumb = 0;
NV_LIGNEDEP = 0;
NV_LIGNEOFS = 0;
@@ -160,8 +170,8 @@ void LinesManager::addZoneLine(int idx, int a2, int a3, int a4, int a5, int bobZ
int16 *zoneData;
if (a2 == a3 && a3 == a4 && a3 == a5) {
- _vm->_globals.BOBZONE_FLAG[bobZoneIdx] = true;
- _vm->_globals.BOBZONE[bobZoneIdx] = a3;
+ BOBZONE_FLAG[bobZoneIdx] = true;
+ BOBZONE[bobZoneIdx] = a3;
} else {
assert (idx <= MAX_LINES);
_zoneLine[idx]._zoneData = (int16 *)_vm->_globals.freeMemory((byte *)_zoneLine[idx]._zoneData);
@@ -2965,19 +2975,19 @@ int LinesManager::MZONE() {
int yp = _vm->_eventsManager._mousePos.y + _vm->_eventsManager._mouseOffset.y;
if ((_vm->_eventsManager._mousePos.y + _vm->_eventsManager._mouseOffset.y) > 19) {
for (int bobZoneId = 0; bobZoneId <= 48; bobZoneId++) {
- int bobId = _vm->_globals.BOBZONE[bobZoneId];
- if (bobId && _vm->_globals.BOBZONE_FLAG[bobZoneId] && _vm->_objectsManager._bob[bobId].field0 && _vm->_objectsManager._bob[bobId]._frameIndex != 250 &&
+ int bobId = BOBZONE[bobZoneId];
+ if (bobId && BOBZONE_FLAG[bobZoneId] && _vm->_objectsManager._bob[bobId].field0 && _vm->_objectsManager._bob[bobId]._frameIndex != 250 &&
!_vm->_objectsManager._bob[bobId]._disabledAnimationFl && xp > _vm->_objectsManager._bob[bobId]._oldX &&
xp < _vm->_objectsManager._bob[bobId]._oldWidth + _vm->_objectsManager._bob[bobId]._oldX && yp > _vm->_objectsManager._bob[bobId]._oldY) {
if (yp < _vm->_objectsManager._bob[bobId]._oldHeight + _vm->_objectsManager._bob[bobId]._oldY) {
- if (_vm->_globals.ZONEP[bobZoneId]._spriteIndex == -1) {
- _vm->_globals.ZONEP[bobZoneId]._destX = 0;
- _vm->_globals.ZONEP[bobZoneId]._destY = 0;
+ if (ZONEP[bobZoneId]._spriteIndex == -1) {
+ ZONEP[bobZoneId]._destX = 0;
+ ZONEP[bobZoneId]._destY = 0;
}
- if (!_vm->_globals.ZONEP[bobZoneId]._destX && !_vm->_globals.ZONEP[bobZoneId]._destY) {
- _vm->_globals.ZONEP[bobZoneId]._destX = _vm->_objectsManager._bob[bobId]._oldWidth + _vm->_objectsManager._bob[bobId]._oldX;
- _vm->_globals.ZONEP[bobZoneId]._destY = _vm->_objectsManager._bob[bobId]._oldHeight + _vm->_objectsManager._bob[bobId]._oldY + 6;
- _vm->_globals.ZONEP[bobZoneId]._spriteIndex = -1;
+ if (!ZONEP[bobZoneId]._destX && !ZONEP[bobZoneId]._destY) {
+ ZONEP[bobZoneId]._destX = _vm->_objectsManager._bob[bobId]._oldWidth + _vm->_objectsManager._bob[bobId]._oldX;
+ ZONEP[bobZoneId]._destY = _vm->_objectsManager._bob[bobId]._oldHeight + _vm->_objectsManager._bob[bobId]._oldY + 6;
+ ZONEP[bobZoneId]._spriteIndex = -1;
}
return bobZoneId;
}
@@ -2985,7 +2995,7 @@ int LinesManager::MZONE() {
}
_currentSegmentId = 0;
for (int squareZoneId = 0; squareZoneId <= 99; squareZoneId++) {
- if (_vm->_globals.ZONEP[squareZoneId]._enabledFl && _squareZone[squareZoneId]._enabledFl == 1
+ if (ZONEP[squareZoneId]._enabledFl && _squareZone[squareZoneId]._enabledFl == 1
&& _squareZone[squareZoneId]._left <= xp && _squareZone[squareZoneId]._right >= xp
&& _squareZone[squareZoneId]._top <= yp && _squareZone[squareZoneId]._bottom >= yp) {
if (_squareZone[squareZoneId]._squareZoneFl)
@@ -3003,7 +3013,7 @@ int LinesManager::MZONE() {
int colRes1 = 0;
for (int yCurrent = yp; yCurrent >= 0; --yCurrent) {
colRes1 = colision(xp, yCurrent);
- if (colRes1 != -1 && _vm->_globals.ZONEP[colRes1]._enabledFl)
+ if (colRes1 != -1 && ZONEP[colRes1]._enabledFl)
break;
}
@@ -3013,7 +3023,7 @@ int LinesManager::MZONE() {
int colRes2 = 0;
for (int j = yp; j < _vm->_graphicsManager._maxY; ++j) {
colRes2 = colision(xp, j);
- if (colRes2 != -1 && _vm->_globals.ZONEP[colRes1]._enabledFl)
+ if (colRes2 != -1 && ZONEP[colRes1]._enabledFl)
break;
}
@@ -3023,7 +3033,7 @@ int LinesManager::MZONE() {
int colRes3 = 0;
for (int k = xp; k >= 0; --k) {
colRes3 = colision(k, yp);
- if (colRes3 != -1 && _vm->_globals.ZONEP[colRes1]._enabledFl)
+ if (colRes3 != -1 && ZONEP[colRes1]._enabledFl)
break;
}
if (colRes3 == -1)
@@ -3032,7 +3042,7 @@ int LinesManager::MZONE() {
int colRes4 = 0;
for (int xCurrent = xp; _vm->_graphicsManager._maxX > xCurrent; ++xCurrent) {
colRes4 = colision(xCurrent, yp);
- if (colRes4 != -1 && _vm->_globals.ZONEP[colRes1]._enabledFl)
+ if (colRes4 != -1 && ZONEP[colRes1]._enabledFl)
break;
}
if (colRes1 == colRes2 && colRes1 == colRes3 && colRes1 == colRes4)
@@ -3145,6 +3155,12 @@ void LinesManager::CARRE_ZONE() {
}
void LinesManager::clearAll() {
+ for (int idx = 0; idx < 105; ++idx) {
+ _vm->_linesManager.ZONEP[idx]._destX = 0;
+ _vm->_linesManager.ZONEP[idx]._destY = 0;
+ _vm->_linesManager.ZONEP[idx]._spriteIndex = 0;
+ }
+
_vm->_linesManager.essai0 = (int16 *)g_PTRNUL;
_vm->_linesManager.essai1 = (int16 *)g_PTRNUL;
_vm->_linesManager.essai2 = (int16 *)g_PTRNUL;
@@ -3217,4 +3233,110 @@ void LinesManager::resetLastLine() {
void LinesManager::resetLinesNumb() {
_linesNumb = 0;
}
+
+void LinesManager::enableZone(int idx) {
+ if (BOBZONE[idx]) {
+ BOBZONE_FLAG[idx] = true;
+ } else {
+ ZONEP[idx]._enabledFl = true;
+ }
+}
+
+void LinesManager::disableZone(int idx) {
+ if (BOBZONE[idx]) {
+ BOBZONE_FLAG[idx] = false;
+ } else {
+ ZONEP[idx]._enabledFl = false;
+ }
+}
+
+void LinesManager::checkZone() {
+ int mouseX = _vm->_eventsManager.getMouseX();
+ int mouseY = _vm->_eventsManager.getMouseY();
+ int oldMouseY = mouseY;
+ if (_vm->_globals._cityMapEnabledFl
+ || _vm->_eventsManager._startPos.x >= mouseX
+ || (mouseY = _vm->_graphicsManager._scrollOffset + 54, mouseX >= mouseY)
+ || (mouseY = oldMouseY - 1, mouseY < 0 || mouseY > 59)) {
+ if (_vm->_objectsManager._visibleFl)
+ _vm->_objectsManager._eraseVisibleCounter = 4;
+ _vm->_objectsManager._visibleFl = false;
+ } else {
+ _vm->_objectsManager._visibleFl = true;
+ }
+ if (_vm->_objectsManager._forceZoneFl) {
+ _vm->_globals.compteur_71 = 100;
+ _vm->_globals._oldMouseZoneId = -1;
+ _vm->_globals._oldMouseX = -200;
+ _vm->_globals._oldMouseY = -220;
+ _vm->_objectsManager._forceZoneFl = false;
+ }
+
+ _vm->_globals.compteur_71++;
+ if (_vm->_globals.compteur_71 <= 1)
+ return;
+
+ if (_vm->_globals.NOMARCHE || (_vm->_linesManager._route == (int16 *)g_PTRNUL) || _vm->_globals.compteur_71 > 4) {
+ _vm->_globals.compteur_71 = 0;
+ int zoneId;
+ if (_vm->_globals._oldMouseX != mouseX || _vm->_globals._oldMouseY != oldMouseY) {
+ zoneId = _vm->_linesManager.MZONE();
+ } else {
+ zoneId = _vm->_globals._oldMouseZoneId;
+ }
+ if (_vm->_globals._oldMouseZoneId != zoneId) {
+ _vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
+ _vm->_eventsManager._mouseCursorId = 4;
+ _vm->_eventsManager.changeMouseCursor(4);
+ if (_vm->_globals._forceHideText) {
+ _vm->_fontManager.hideText(5);
+ _vm->_globals._forceHideText = false;
+ return;
+ }
+ }
+ if (zoneId != -1) {
+ if (ZONEP[zoneId].field6 || ZONEP[zoneId].field7 ||
+ ZONEP[zoneId].field8 || ZONEP[zoneId].field9 ||
+ ZONEP[zoneId].fieldA || ZONEP[zoneId].fieldB ||
+ ZONEP[zoneId].fieldC || ZONEP[zoneId].fieldD ||
+ ZONEP[zoneId].fieldE || ZONEP[zoneId].fieldF) {
+ if (_vm->_globals._oldMouseZoneId != zoneId) {
+ _vm->_fontManager.initTextBuffers(5, ZONEP[zoneId].field12, _vm->_globals.FICH_ZONE, 0, 430, 0, 0, 252);
+ _vm->_fontManager.showText(5);
+ _vm->_globals._forceHideText = true;
+ }
+ _vm->_globals._hotspotTextColor += 25;
+ if (_vm->_globals._hotspotTextColor > 100)
+ _vm->_globals._hotspotTextColor = 0;
+ _vm->_graphicsManager.SETCOLOR4(251, _vm->_globals._hotspotTextColor, _vm->_globals._hotspotTextColor,
+ _vm->_globals._hotspotTextColor);
+ if (_vm->_eventsManager._mouseCursorId == 4) {
+ if (ZONEP[zoneId].field6 == 2) {
+ _vm->_eventsManager.changeMouseCursor(16);
+ _vm->_eventsManager._mouseCursorId = 16;
+ _vm->_objectsManager.setVerb(16);
+ }
+ }
+ } else {
+ _vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
+ _vm->_eventsManager._mouseCursorId = 4;
+ _vm->_eventsManager.changeMouseCursor(4);
+ }
+ }
+ _vm->_objectsManager._zoneNum = zoneId;
+ _vm->_globals._oldMouseX = mouseX;
+ _vm->_globals._oldMouseY = oldMouseY;
+ _vm->_globals._oldMouseZoneId = zoneId;
+ if (_vm->_globals.NOMARCHE && (_vm->_eventsManager._mouseCursorId == 4)) {
+ if (zoneId != -1 && zoneId != 0)
+ _vm->_objectsManager.handleRightButton();
+ }
+ if ((_vm->_globals._cityMapEnabledFl && zoneId == -1) || !zoneId) {
+ _vm->_objectsManager.setVerb(0);
+ _vm->_eventsManager._mouseCursorId = 0;
+ _vm->_eventsManager.changeMouseCursor(0);
+ }
+ }
+}
+
} // End of namespace Hopkins
diff --git a/engines/hopkins/lines.h b/engines/hopkins/lines.h
index 7eb73409a3..b9ae3e6e31 100644
--- a/engines/hopkins/lines.h
+++ b/engines/hopkins/lines.h
@@ -65,6 +65,24 @@ struct SquareZoneItem {
bool _squareZoneFl;
};
+struct ZonePItem {
+ int _destX;
+ int _destY;
+ int _spriteIndex;
+ int field6;
+ int field7;
+ int field8;
+ int field9;
+ int fieldA;
+ int fieldB;
+ int fieldC;
+ int fieldD;
+ int fieldE;
+ int fieldF;
+ bool _enabledFl;
+ int field12;
+};
+
class LinesManager {
private:
HopkinsEngine *_vm;
@@ -112,6 +130,10 @@ public:
int16 *_route;
int16 *essai2;
+ int BOBZONE[105];
+ bool BOBZONE_FLAG[105];
+ ZonePItem ZONEP[106];
+
LinesManager();
~LinesManager();
void setParent(HopkinsEngine *vm);
@@ -128,6 +150,9 @@ public:
void resetLines();
void resetLinesNumb();
void resetLastLine();
+ void enableZone(int idx);
+ void disableZone(int idx);
+ void checkZone();
int MZONE();
void CARRE_ZONE();
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp
index 8173a1ff2b..bd45bbc24b 100644
--- a/engines/hopkins/objects.cpp
+++ b/engines/hopkins/objects.cpp
@@ -34,9 +34,9 @@
namespace Hopkins {
ObjectsManager::ObjectsManager() {
- for (int i = 0; i < 6; ++i) {
+ for (int i = 0; i < 6; ++i)
Common::fill((byte *)&_sprite[i], (byte *)&_sprite[i] + sizeof(SpriteItem), 0);
- }
+
for (int i = 0; i < 36; ++i)
Common::fill((byte *)&_bob[i], (byte *)&_bob[i] + sizeof(BobItem), 0);
@@ -1264,95 +1264,6 @@ void ObjectsManager::setFlipSprite(int idx, bool flipFl) {
_sprite[idx]._flipFl = flipFl;
}
-void ObjectsManager::checkZone() {
- int mouseX = _vm->_eventsManager.getMouseX();
- int mouseY = _vm->_eventsManager.getMouseY();
- int oldMouseY = mouseY;
- if (_vm->_globals._cityMapEnabledFl
- || _vm->_eventsManager._startPos.x >= mouseX
- || (mouseY = _vm->_graphicsManager._scrollOffset + 54, mouseX >= mouseY)
- || (mouseY = oldMouseY - 1, mouseY < 0 || mouseY > 59)) {
- if (_visibleFl)
- _eraseVisibleCounter = 4;
- _visibleFl = false;
- } else {
- _visibleFl = true;
- }
- if (_forceZoneFl) {
- _vm->_globals.compteur_71 = 100;
- _vm->_globals._oldMouseZoneId = -1;
- _vm->_globals._oldMouseX = -200;
- _vm->_globals._oldMouseY = -220;
- _forceZoneFl = false;
- }
-
- _vm->_globals.compteur_71++;
- if (_vm->_globals.compteur_71 <= 1)
- return;
-
- if (_vm->_globals.NOMARCHE || (_vm->_linesManager._route == (int16 *)g_PTRNUL) || _vm->_globals.compteur_71 > 4) {
- _vm->_globals.compteur_71 = 0;
- int zoneId;
- if (_vm->_globals._oldMouseX != mouseX || _vm->_globals._oldMouseY != oldMouseY) {
- zoneId = _vm->_linesManager.MZONE();
- } else {
- zoneId = _vm->_globals._oldMouseZoneId;
- }
- if (_vm->_globals._oldMouseZoneId != zoneId) {
- _vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
- _vm->_eventsManager._mouseCursorId = 4;
- _vm->_eventsManager.changeMouseCursor(4);
- if (_vm->_globals._forceHideText) {
- _vm->_fontManager.hideText(5);
- _vm->_globals._forceHideText = false;
- return;
- }
- }
- if (zoneId != -1) {
- if (_vm->_globals.ZONEP[zoneId].field6 || _vm->_globals.ZONEP[zoneId].field7 ||
- _vm->_globals.ZONEP[zoneId].field8 || _vm->_globals.ZONEP[zoneId].field9 ||
- _vm->_globals.ZONEP[zoneId].fieldA || _vm->_globals.ZONEP[zoneId].fieldB ||
- _vm->_globals.ZONEP[zoneId].fieldC || _vm->_globals.ZONEP[zoneId].fieldD ||
- _vm->_globals.ZONEP[zoneId].fieldE || _vm->_globals.ZONEP[zoneId].fieldF) {
- if (_vm->_globals._oldMouseZoneId != zoneId) {
- _vm->_fontManager.initTextBuffers(5, _vm->_globals.ZONEP[zoneId].field12, _vm->_globals.FICH_ZONE, 0, 430, 0, 0, 252);
- _vm->_fontManager.showText(5);
- _vm->_globals._forceHideText = true;
- }
- _vm->_globals._hotspotTextColor += 25;
- if (_vm->_globals._hotspotTextColor > 100)
- _vm->_globals._hotspotTextColor = 0;
- _vm->_graphicsManager.SETCOLOR4(251, _vm->_globals._hotspotTextColor, _vm->_globals._hotspotTextColor,
- _vm->_globals._hotspotTextColor);
- if (_vm->_eventsManager._mouseCursorId == 4) {
- if (_vm->_globals.ZONEP[zoneId].field6 == 2) {
- _vm->_eventsManager.changeMouseCursor(16);
- _vm->_eventsManager._mouseCursorId = 16;
- _verb = 16;
- }
- }
- } else {
- _vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
- _vm->_eventsManager._mouseCursorId = 4;
- _vm->_eventsManager.changeMouseCursor(4);
- }
- }
- _zoneNum = zoneId;
- _vm->_globals._oldMouseX = mouseX;
- _vm->_globals._oldMouseY = oldMouseY;
- _vm->_globals._oldMouseZoneId = zoneId;
- if (_vm->_globals.NOMARCHE && (_vm->_eventsManager._mouseCursorId == 4)) {
- if (zoneId != -1 && zoneId != 0)
- handleRightButton();
- }
- if ((_vm->_globals._cityMapEnabledFl && zoneId == -1) || !zoneId) {
- _verb = 0;
- _vm->_eventsManager._mouseCursorId = 0;
- _vm->_eventsManager.changeMouseCursor(0);
- }
- }
-}
-
void ObjectsManager::GOHOME() {
int v0 = 0;
int v58 = 0;
@@ -1399,14 +1310,14 @@ void ObjectsManager::GOHOME() {
_vm->_linesManager._route = (int16 *)g_PTRNUL;
_vm->_globals._oldDirection = -1;
if (zoneId > 0) {
- if (_vm->_globals.ZONEP[zoneId]._destX && _vm->_globals.ZONEP[zoneId]._destY && _vm->_globals.ZONEP[zoneId]._destY != 31) {
- if (_vm->_globals.ZONEP[zoneId]._spriteIndex == -1) {
- _vm->_globals.ZONEP[zoneId]._destX = 0;
- _vm->_globals.ZONEP[zoneId]._destY = 0;
- _vm->_globals.ZONEP[zoneId]._spriteIndex = 0;
+ if (_vm->_linesManager.ZONEP[zoneId]._destX && _vm->_linesManager.ZONEP[zoneId]._destY && _vm->_linesManager.ZONEP[zoneId]._destY != 31) {
+ if (_vm->_linesManager.ZONEP[zoneId]._spriteIndex == -1) {
+ _vm->_linesManager.ZONEP[zoneId]._destX = 0;
+ _vm->_linesManager.ZONEP[zoneId]._destY = 0;
+ _vm->_linesManager.ZONEP[zoneId]._spriteIndex = 0;
} else {
- setSpriteIndex(0, _vm->_globals.ZONEP[zoneId]._spriteIndex);
- _vm->_globals._actionDirection = _vm->_globals.ZONEP[zoneId]._spriteIndex - 59;
+ setSpriteIndex(0, _vm->_linesManager.ZONEP[zoneId]._spriteIndex);
+ _vm->_globals._actionDirection = _vm->_linesManager.ZONEP[zoneId]._spriteIndex - 59;
}
}
}
@@ -1621,14 +1532,14 @@ void ObjectsManager::GOHOME() {
_oldCharacterPosY = getSpriteY(0);
if (zoneId > 0) {
- if (_vm->_globals.ZONEP[zoneId]._destX && _vm->_globals.ZONEP[zoneId]._destY && _vm->_globals.ZONEP[zoneId]._destY != 31) {
- if ( _vm->_globals.ZONEP[zoneId]._spriteIndex == -1) {
- _vm->_globals.ZONEP[zoneId]._destX = 0;
- _vm->_globals.ZONEP[zoneId]._destY = 0;
- _vm->_globals.ZONEP[zoneId]._spriteIndex = 0;
+ if (_vm->_linesManager.ZONEP[zoneId]._destX && _vm->_linesManager.ZONEP[zoneId]._destY && _vm->_linesManager.ZONEP[zoneId]._destY != 31) {
+ if ( _vm->_linesManager.ZONEP[zoneId]._spriteIndex == -1) {
+ _vm->_linesManager.ZONEP[zoneId]._destX = 0;
+ _vm->_linesManager.ZONEP[zoneId]._destY = 0;
+ _vm->_linesManager.ZONEP[zoneId]._spriteIndex = 0;
} else {
- setSpriteIndex(0, _vm->_globals.ZONEP[zoneId]._spriteIndex);
- _vm->_globals._actionDirection = _vm->_globals.ZONEP[zoneId]._spriteIndex - 59;
+ setSpriteIndex(0, _vm->_linesManager.ZONEP[zoneId]._spriteIndex);
+ _vm->_globals._actionDirection = _vm->_linesManager.ZONEP[zoneId]._spriteIndex - 59;
}
}
}
@@ -1726,21 +1637,21 @@ void ObjectsManager::GOHOME2() {
*/
void ObjectsManager::loadZone(const Common::String &file) {
for (int i = 1; i <= 100; i++) {
- _vm->_globals.ZONEP[i]._destX = 0;
- _vm->_globals.ZONEP[i]._destY = 0;
- _vm->_globals.ZONEP[i]._spriteIndex = 0;
- _vm->_globals.ZONEP[i].field6 = 0;
- _vm->_globals.ZONEP[i].field7 = 0;
- _vm->_globals.ZONEP[i].field8 = 0;
- _vm->_globals.ZONEP[i].field9 = 0;
- _vm->_globals.ZONEP[i].fieldA = 0;
- _vm->_globals.ZONEP[i].fieldB = 0;
- _vm->_globals.ZONEP[i].fieldC = 0;
- _vm->_globals.ZONEP[i].fieldD = 0;
- _vm->_globals.ZONEP[i].fieldE = 0;
- _vm->_globals.ZONEP[i].fieldF = 0;
- _vm->_globals.ZONEP[i].field12 = 0;
- _vm->_globals.ZONEP[i]._enabledFl = false;
+ _vm->_linesManager.ZONEP[i]._destX = 0;
+ _vm->_linesManager.ZONEP[i]._destY = 0;
+ _vm->_linesManager.ZONEP[i]._spriteIndex = 0;
+ _vm->_linesManager.ZONEP[i].field6 = 0;
+ _vm->_linesManager.ZONEP[i].field7 = 0;
+ _vm->_linesManager.ZONEP[i].field8 = 0;
+ _vm->_linesManager.ZONEP[i].field9 = 0;
+ _vm->_linesManager.ZONEP[i].fieldA = 0;
+ _vm->_linesManager.ZONEP[i].fieldB = 0;
+ _vm->_linesManager.ZONEP[i].fieldC = 0;
+ _vm->_linesManager.ZONEP[i].fieldD = 0;
+ _vm->_linesManager.ZONEP[i].fieldE = 0;
+ _vm->_linesManager.ZONEP[i].fieldF = 0;
+ _vm->_linesManager.ZONEP[i].field12 = 0;
+ _vm->_linesManager.ZONEP[i]._enabledFl = false;
}
Common::File f;
@@ -1761,38 +1672,38 @@ void ObjectsManager::loadZone(const Common::String &file) {
READ_LE_UINT16((uint16 *)ptr + bufId + 3),
READ_LE_UINT16((uint16 *)ptr + bufId + 4),
bobZoneIdx);
- _vm->_globals.ZONEP[bobZoneIdx]._enabledFl = true;
+ _vm->_linesManager.ZONEP[bobZoneIdx]._enabledFl = true;
}
bufId += 5;
++zoneLineIdx;
} while (bobZoneIdx != -1);
for (int i = 1; i <= 100; i++) {
- _vm->_globals.ZONEP[i]._destX = (int16)READ_LE_UINT16((uint16 *)ptr + bufId);
- _vm->_globals.ZONEP[i]._destY = (int16)READ_LE_UINT16((uint16 *)ptr + bufId + 1);
- _vm->_globals.ZONEP[i]._spriteIndex = (int16)READ_LE_UINT16((uint16 *)ptr + bufId + 2);
+ _vm->_linesManager.ZONEP[i]._destX = (int16)READ_LE_UINT16((uint16 *)ptr + bufId);
+ _vm->_linesManager.ZONEP[i]._destY = (int16)READ_LE_UINT16((uint16 *)ptr + bufId + 1);
+ _vm->_linesManager.ZONEP[i]._spriteIndex = (int16)READ_LE_UINT16((uint16 *)ptr + bufId + 2);
bufId += 3;
}
byte *v9 = (ptr + 10 * zoneLineIdx + 606);
bufId = 0;
for (int i = 1; i <= 100; i++) {
- _vm->_globals.ZONEP[i].field6 = v9[bufId];
- _vm->_globals.ZONEP[i].field7 = v9[bufId + 1];
- _vm->_globals.ZONEP[i].field8 = v9[bufId + 2];
- _vm->_globals.ZONEP[i].field9 = v9[bufId + 3];
- _vm->_globals.ZONEP[i].fieldA = v9[bufId + 4];
- _vm->_globals.ZONEP[i].fieldB = v9[bufId + 5];
- _vm->_globals.ZONEP[i].fieldC = v9[bufId + 6];
- _vm->_globals.ZONEP[i].fieldD = v9[bufId + 7];
- _vm->_globals.ZONEP[i].fieldE = v9[bufId + 8];
- _vm->_globals.ZONEP[i].fieldF = v9[bufId + 9];
+ _vm->_linesManager.ZONEP[i].field6 = v9[bufId];
+ _vm->_linesManager.ZONEP[i].field7 = v9[bufId + 1];
+ _vm->_linesManager.ZONEP[i].field8 = v9[bufId + 2];
+ _vm->_linesManager.ZONEP[i].field9 = v9[bufId + 3];
+ _vm->_linesManager.ZONEP[i].fieldA = v9[bufId + 4];
+ _vm->_linesManager.ZONEP[i].fieldB = v9[bufId + 5];
+ _vm->_linesManager.ZONEP[i].fieldC = v9[bufId + 6];
+ _vm->_linesManager.ZONEP[i].fieldD = v9[bufId + 7];
+ _vm->_linesManager.ZONEP[i].fieldE = v9[bufId + 8];
+ _vm->_linesManager.ZONEP[i].fieldF = v9[bufId + 9];
bufId += 10;
}
v9 += 1010;
for (int i = 0; i < 100; i++)
- _vm->_globals.ZONEP[i + 1].field12 = READ_LE_UINT16(v9 + 2 * i);
+ _vm->_linesManager.ZONEP[i + 1].field12 = READ_LE_UINT16(v9 + 2 * i);
_vm->_globals.freeMemory(ptr);
_vm->_linesManager.CARRE_ZONE();
@@ -1872,7 +1783,7 @@ void ObjectsManager::handleCityMap() {
handleLeftButton();
}
- checkZone();
+ _vm->_linesManager.checkZone();
GOHOME2();
if (_vm->_linesManager._route == (int16 *)g_PTRNUL && _vm->_globals.GOACTION)
@@ -1940,7 +1851,7 @@ void ObjectsManager::handleLeftButton() {
}
}
if (_vm->_globals._cityMapEnabledFl && _vm->_globals.GOACTION) {
- checkZone();
+ _vm->_linesManager.checkZone();
if (_zoneNum <= 0)
return;
int routeIdx = 0;
@@ -1956,7 +1867,7 @@ void ObjectsManager::handleLeftButton() {
}
if (_vm->_globals.GOACTION) {
- checkZone();
+ _vm->_linesManager.checkZone();
_vm->_globals.GOACTION = false;
_vm->_globals._saveData->_data[svField1] = 0;
_vm->_globals._saveData->_data[svField2] = 0;
@@ -1965,9 +1876,9 @@ void ObjectsManager::handleLeftButton() {
if (_vm->_globals._cityMapEnabledFl && (_vm->_eventsManager._mouseCursorId != 4 || _zoneNum <= 0))
return;
if (_zoneNum != -1 && _zoneNum != 0) {
- if (_vm->_globals.ZONEP[_zoneNum]._destX && _vm->_globals.ZONEP[_zoneNum]._destY && _vm->_globals.ZONEP[_zoneNum]._destY != 31) {
- destX = _vm->_globals.ZONEP[_zoneNum]._destX;
- destY = _vm->_globals.ZONEP[_zoneNum]._destY;
+ if (_vm->_linesManager.ZONEP[_zoneNum]._destX && _vm->_linesManager.ZONEP[_zoneNum]._destY && _vm->_linesManager.ZONEP[_zoneNum]._destY != 31) {
+ destX = _vm->_linesManager.ZONEP[_zoneNum]._destX;
+ destY = _vm->_linesManager.ZONEP[_zoneNum]._destY;
}
}
_vm->_globals.GOACTION = false;
@@ -2092,7 +2003,7 @@ void ObjectsManager::PARADISE() {
_vm->_talkManager.REPONSE2(_vm->_globals._saveData->_data[svField2], _vm->_globals._saveData->_data[svField1]);
}
_vm->_eventsManager.changeMouseCursor(4);
- if (_zoneNum != -1 && _zoneNum != 0 && !_vm->_globals.ZONEP[_zoneNum]._enabledFl) {
+ if (_zoneNum != -1 && _zoneNum != 0 && !_vm->_linesManager.ZONEP[_zoneNum]._enabledFl) {
_zoneNum = -1;
_forceZoneFl = true;
}
@@ -2140,8 +2051,8 @@ void ObjectsManager::clearScreen() {
_vm->_globals.resetCache();
for (int i = 0; i <= 48; i++) {
- _vm->_globals.BOBZONE[i] = 0;
- _vm->_globals.BOBZONE_FLAG[i] = false;
+ _vm->_linesManager.BOBZONE[i] = 0;
+ _vm->_linesManager.BOBZONE_FLAG[i] = false;
}
_vm->_eventsManager._mouseCursorId = 4;
_verb = 4;
@@ -2309,139 +2220,139 @@ void ObjectsManager::nextVerbIcon() {
if (_vm->_eventsManager._mouseCursorId == 5 || _vm->_eventsManager._mouseCursorId == 6) {
_vm->_eventsManager._mouseCursorId = 6;
- if (_vm->_globals.ZONEP[_zoneNum].field6 == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].field6 == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 7) {
- if (_vm->_globals.ZONEP[_zoneNum].field7 == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].field7 == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 8) {
- if (_vm->_globals.ZONEP[_zoneNum].field8 == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].field8 == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 9) {
- if (_vm->_globals.ZONEP[_zoneNum].field9 == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].field9 == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 10) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldA == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldA == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 11) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldB == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldB == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 12) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldC == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldC == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 13) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldD == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldD == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 14) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldE == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldE == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 15) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldF == 1)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldF == 1)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 16) {
- if (_vm->_globals.ZONEP[_zoneNum].field6 == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].field6 == 2)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 17) {
- if (_vm->_globals.ZONEP[_zoneNum].field9 == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].field9 == 2)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 18) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldA == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldA == 2)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 19) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldB == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldB == 2)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 20) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldC == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldC == 2)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 21) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldF == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldF == 2)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 22) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldD == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldD == 2)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 23) {
- if (_vm->_globals.ZONEP[_zoneNum].field8 == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].field8 == 2)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 24) {
- if (_vm->_globals.ZONEP[_zoneNum].field9 == 3)
+ if (_vm->_linesManager.ZONEP[_zoneNum].field9 == 3)
return;
++_vm->_eventsManager._mouseCursorId;
}
if (_vm->_eventsManager._mouseCursorId == 25) {
- if (_vm->_globals.ZONEP[_zoneNum].fieldE == 2)
+ if (_vm->_linesManager.ZONEP[_zoneNum].fieldE == 2)
return;
}
_vm->_eventsManager._mouseCursorId = 4;
@@ -2744,14 +2655,14 @@ void ObjectsManager::handleSpecialGames() {
setBobAnimDataIdx(5, 0);
setBobAnimation(6);
_vm->_globals._saveData->_data[svField261] = 2;
- disableZone(15);
+ _vm->_linesManager.disableZone(15);
_vm->_soundManager.playSound("SOUND75.WAV");
}
if (_vm->_globals._saveData->_data[svField261] == 2 && getBobAnimDataIdx(6) == 6) {
stopBobAnimation(6);
setBobAnimDataIdx(6, 0);
setBobAnimation(7);
- enableZone(14);
+ _vm->_linesManager.enableZone(14);
_vm->_globals._saveData->_data[svField261] = 3;
}
_vm->_globals._disableInventFl = false;
@@ -3051,22 +2962,6 @@ void ObjectsManager::ACTION_GAUCHE(int idx) {
}
}
-void ObjectsManager::enableZone(int idx) {
- if (_vm->_globals.BOBZONE[idx]) {
- _vm->_globals.BOBZONE_FLAG[idx] = true;
- } else {
- _vm->_globals.ZONEP[idx]._enabledFl = true;
- }
-}
-
-void ObjectsManager::disableZone(int idx) {
- if (_vm->_globals.BOBZONE[idx]) {
- _vm->_globals.BOBZONE_FLAG[idx] = false;
- } else {
- _vm->_globals.ZONEP[idx]._enabledFl = false;
- }
-}
-
void ObjectsManager::OPTI_ONE(int idx, int animIdx, int destPosi, int animAction) {
// Set Hopkins animation and position
if (animAction != 3) {
@@ -3226,20 +3121,20 @@ void ObjectsManager::INILINK(const Common::String &file) {
byte *curDataPtr = &ptr[idx + 4];
int curDataIdx = 0;
for (int i = 1; i <= 100; i++) {
- _vm->_globals.ZONEP[i]._destX = 0;
- _vm->_globals.ZONEP[i]._destY = 0;
- _vm->_globals.ZONEP[i]._spriteIndex = 0;
- _vm->_globals.ZONEP[i].field6 = 0;
- _vm->_globals.ZONEP[i].field7 = 0;
- _vm->_globals.ZONEP[i].field8 = 0;
- _vm->_globals.ZONEP[i].field9 = 0;
- _vm->_globals.ZONEP[i].fieldA = 0;
- _vm->_globals.ZONEP[i].fieldB = 0;
- _vm->_globals.ZONEP[i].fieldC = 0;
- _vm->_globals.ZONEP[i].fieldD = 0;
- _vm->_globals.ZONEP[i].fieldE = 0;
- _vm->_globals.ZONEP[i].fieldF = 0;
- _vm->_globals.ZONEP[i].field12 = 0;
+ _vm->_linesManager.ZONEP[i]._destX = 0;
+ _vm->_linesManager.ZONEP[i]._destY = 0;
+ _vm->_linesManager.ZONEP[i]._spriteIndex = 0;
+ _vm->_linesManager.ZONEP[i].field6 = 0;
+ _vm->_linesManager.ZONEP[i].field7 = 0;
+ _vm->_linesManager.ZONEP[i].field8 = 0;
+ _vm->_linesManager.ZONEP[i].field9 = 0;
+ _vm->_linesManager.ZONEP[i].fieldA = 0;
+ _vm->_linesManager.ZONEP[i].fieldB = 0;
+ _vm->_linesManager.ZONEP[i].fieldC = 0;
+ _vm->_linesManager.ZONEP[i].fieldD = 0;
+ _vm->_linesManager.ZONEP[i].fieldE = 0;
+ _vm->_linesManager.ZONEP[i].fieldF = 0;
+ _vm->_linesManager.ZONEP[i].field12 = 0;
}
int curLineIdx = 0;
@@ -3254,35 +3149,35 @@ void ObjectsManager::INILINK(const Common::String &file) {
(int16)READ_LE_UINT16(curDataPtr + 2 * curDataIdx + 6),
(int16)READ_LE_UINT16(curDataPtr + 2 * curDataIdx + 8),
v28);
- _vm->_globals.ZONEP[v28]._enabledFl = true;
+ _vm->_linesManager.ZONEP[v28]._enabledFl = true;
}
curDataIdx += 5;
++curLineIdx;
} while (v28 != -1);
for (int i = 1; i <= 100; i++) {
- _vm->_globals.ZONEP[i]._destX = (int16)READ_LE_UINT16(curDataPtr + 2 * curDataIdx);
- _vm->_globals.ZONEP[i]._destY = (int16)READ_LE_UINT16(curDataPtr + 2 * curDataIdx + 2);
- _vm->_globals.ZONEP[i]._spriteIndex = (int16)READ_LE_UINT16(curDataPtr + 2 * curDataIdx + 4);
+ _vm->_linesManager.ZONEP[i]._destX = (int16)READ_LE_UINT16(curDataPtr + 2 * curDataIdx);
+ _vm->_linesManager.ZONEP[i]._destY = (int16)READ_LE_UINT16(curDataPtr + 2 * curDataIdx + 2);
+ _vm->_linesManager.ZONEP[i]._spriteIndex = (int16)READ_LE_UINT16(curDataPtr + 2 * curDataIdx + 4);
curDataIdx += 3;
}
byte *v22 = ptr + idx + (10 * curLineIdx + 606) + 4;
for (int i = 1; i <= 100; i++) {
int j = (i - 1) * 10;
- _vm->_globals.ZONEP[i].field6 = v22[j];
- _vm->_globals.ZONEP[i].field7 = v22[j + 1];
- _vm->_globals.ZONEP[i].field8 = v22[j + 2];
- _vm->_globals.ZONEP[i].field9 = v22[j + 3];
- _vm->_globals.ZONEP[i].fieldA = v22[j + 4];
- _vm->_globals.ZONEP[i].fieldB = v22[j + 5];
- _vm->_globals.ZONEP[i].fieldC = v22[j + 6];
- _vm->_globals.ZONEP[i].fieldD = v22[j + 7];
- _vm->_globals.ZONEP[i].fieldE = v22[j + 8];
- _vm->_globals.ZONEP[i].fieldF = v22[j + 9];
+ _vm->_linesManager.ZONEP[i].field6 = v22[j];
+ _vm->_linesManager.ZONEP[i].field7 = v22[j + 1];
+ _vm->_linesManager.ZONEP[i].field8 = v22[j + 2];
+ _vm->_linesManager.ZONEP[i].field9 = v22[j + 3];
+ _vm->_linesManager.ZONEP[i].fieldA = v22[j + 4];
+ _vm->_linesManager.ZONEP[i].fieldB = v22[j + 5];
+ _vm->_linesManager.ZONEP[i].fieldC = v22[j + 6];
+ _vm->_linesManager.ZONEP[i].fieldD = v22[j + 7];
+ _vm->_linesManager.ZONEP[i].fieldE = v22[j + 8];
+ _vm->_linesManager.ZONEP[i].fieldF = v22[j + 9];
}
int dep = 1010;
for (int i = 1; i <= 100; i++) {
- _vm->_globals.ZONEP[i].field12 = (int16)READ_LE_UINT16(v22 + dep);
+ _vm->_linesManager.ZONEP[i].field12 = (int16)READ_LE_UINT16(v22 + dep);
dep += 2;
}
_vm->_linesManager.CARRE_ZONE();
@@ -3355,22 +3250,22 @@ void ObjectsManager::SPECIAL_INI() {
case 39:
case 40:
case 41:
- _vm->_globals.BOBZONE[20] = 1;
- _vm->_globals.BOBZONE[21] = 2;
- _vm->_globals.BOBZONE[22] = 3;
- _vm->_globals.BOBZONE[23] = 4;
- _vm->_globals.BOBZONE_FLAG[20] = true;
- _vm->_globals.BOBZONE_FLAG[21] = true;
- _vm->_globals.BOBZONE_FLAG[22] = true;
- _vm->_globals.BOBZONE_FLAG[23] = true;
+ _vm->_linesManager.BOBZONE[20] = 1;
+ _vm->_linesManager.BOBZONE[21] = 2;
+ _vm->_linesManager.BOBZONE[22] = 3;
+ _vm->_linesManager.BOBZONE[23] = 4;
+ _vm->_linesManager.BOBZONE_FLAG[20] = true;
+ _vm->_linesManager.BOBZONE_FLAG[21] = true;
+ _vm->_linesManager.BOBZONE_FLAG[22] = true;
+ _vm->_linesManager.BOBZONE_FLAG[23] = true;
enableVerb(20, 5);
enableVerb(21, 5);
enableVerb(22, 5);
enableVerb(23, 5);
- _vm->_globals.ZONEP[20].field12 = 30;
- _vm->_globals.ZONEP[21].field12 = 30;
- _vm->_globals.ZONEP[22].field12 = 30;
- _vm->_globals.ZONEP[23].field12 = 30;
+ _vm->_linesManager.ZONEP[20].field12 = 30;
+ _vm->_linesManager.ZONEP[21].field12 = 30;
+ _vm->_linesManager.ZONEP[22].field12 = 30;
+ _vm->_linesManager.ZONEP[23].field12 = 30;
for (int i = 200; i <= 214; i++) {
if (_vm->_globals._saveData->_data[i] != 2)
_vm->_globals._saveData->_data[i] = 0;
@@ -3428,42 +3323,42 @@ void ObjectsManager::disableVerb(int idx, int a2) {
switch (a2) {
case 6:
case 16:
- _vm->_globals.ZONEP[idx].field6 = 0;
+ _vm->_linesManager.ZONEP[idx].field6 = 0;
break;
case 7:
- _vm->_globals.ZONEP[idx].field7 = 0;
+ _vm->_linesManager.ZONEP[idx].field7 = 0;
break;
case 5:
case 8:
- _vm->_globals.ZONEP[idx].field8 = 0;
+ _vm->_linesManager.ZONEP[idx].field8 = 0;
break;
case 9:
case 17:
case 24:
- _vm->_globals.ZONEP[idx].field9 = 0;
+ _vm->_linesManager.ZONEP[idx].field9 = 0;
break;
case 10:
case 18:
- _vm->_globals.ZONEP[idx].fieldA = 0;
+ _vm->_linesManager.ZONEP[idx].fieldA = 0;
break;
case 11:
case 19:
- _vm->_globals.ZONEP[idx].fieldB = 0;
+ _vm->_linesManager.ZONEP[idx].fieldB = 0;
break;
case 12:
case 20:
- _vm->_globals.ZONEP[idx].fieldC = 0;
+ _vm->_linesManager.ZONEP[idx].fieldC = 0;
break;
case 13:
case 22:
- _vm->_globals.ZONEP[idx].fieldD = 0;
+ _vm->_linesManager.ZONEP[idx].fieldD = 0;
case 14:
case 21:
case 25:
- _vm->_globals.ZONEP[idx].fieldE = 0;
+ _vm->_linesManager.ZONEP[idx].fieldE = 0;
break;
case 15:
- _vm->_globals.ZONEP[idx].fieldF = 0;
+ _vm->_linesManager.ZONEP[idx].fieldF = 0;
break;
}
_changeVerbFl = true;
@@ -3472,64 +3367,64 @@ void ObjectsManager::disableVerb(int idx, int a2) {
void ObjectsManager::enableVerb(int idx, int a2) {
switch (a2) {
case 5:
- _vm->_globals.ZONEP[idx].field8 = 2;
+ _vm->_linesManager.ZONEP[idx].field8 = 2;
break;
case 6:
- _vm->_globals.ZONEP[idx].field6 = 1;
+ _vm->_linesManager.ZONEP[idx].field6 = 1;
break;
case 7:
- _vm->_globals.ZONEP[idx].field7 = 1;
+ _vm->_linesManager.ZONEP[idx].field7 = 1;
break;
case 8:
- _vm->_globals.ZONEP[idx].field8 = 1;
+ _vm->_linesManager.ZONEP[idx].field8 = 1;
break;
case 9:
- _vm->_globals.ZONEP[idx].field9 = 1;
+ _vm->_linesManager.ZONEP[idx].field9 = 1;
break;
case 10:
- _vm->_globals.ZONEP[idx].fieldA = 1;
+ _vm->_linesManager.ZONEP[idx].fieldA = 1;
break;
case 11:
- _vm->_globals.ZONEP[idx].fieldB = 1;
+ _vm->_linesManager.ZONEP[idx].fieldB = 1;
break;
case 12:
- _vm->_globals.ZONEP[idx].fieldC = 1;
+ _vm->_linesManager.ZONEP[idx].fieldC = 1;
break;
case 13:
- _vm->_globals.ZONEP[idx].fieldD = 1;
+ _vm->_linesManager.ZONEP[idx].fieldD = 1;
break;
case 14:
- _vm->_globals.ZONEP[idx].fieldD = 1;
+ _vm->_linesManager.ZONEP[idx].fieldD = 1;
break;
case 15:
- _vm->_globals.ZONEP[idx].fieldE = 1;
+ _vm->_linesManager.ZONEP[idx].fieldE = 1;
break;
case 16:
- _vm->_globals.ZONEP[idx].field6 = 2;
+ _vm->_linesManager.ZONEP[idx].field6 = 2;
break;
case 17:
- _vm->_globals.ZONEP[idx].field9 = 2;
+ _vm->_linesManager.ZONEP[idx].field9 = 2;
break;
case 18:
- _vm->_globals.ZONEP[idx].fieldA = 2;
+ _vm->_linesManager.ZONEP[idx].fieldA = 2;
break;
case 19:
- _vm->_globals.ZONEP[idx].fieldB = 2;
+ _vm->_linesManager.ZONEP[idx].fieldB = 2;
break;
case 20:
- _vm->_globals.ZONEP[idx].fieldC = 2;
+ _vm->_linesManager.ZONEP[idx].fieldC = 2;
break;
case 21:
- _vm->_globals.ZONEP[idx].fieldE = 2;
+ _vm->_linesManager.ZONEP[idx].fieldE = 2;
break;
case 22:
- _vm->_globals.ZONEP[idx].fieldD = 2;
+ _vm->_linesManager.ZONEP[idx].fieldD = 2;
break;
case 24:
- _vm->_globals.ZONEP[idx].field9 = 3;
+ _vm->_linesManager.ZONEP[idx].field9 = 3;
break;
case 25:
- _vm->_globals.ZONEP[idx].fieldE = 2;
+ _vm->_linesManager.ZONEP[idx].fieldE = 2;
break;
}
}
@@ -3824,7 +3719,7 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo
} else if (mouseButton == 2)
handleRightButton();
_vm->_dialogsManager.testDialogOpening();
- checkZone();
+ _vm->_linesManager.checkZone();
if (_vm->_globals.GOACTION)
PARADISE();
if (!_vm->_globals._exitId)
@@ -3962,7 +3857,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
}
if (!_vm->_globals._exitId) {
_vm->_dialogsManager.testDialogOpening();
- checkZone();
+ _vm->_linesManager.checkZone();
if (_vm->_linesManager._route == (int16 *)g_PTRNUL
|| (GOHOME(), _vm->_linesManager._route == (int16 *)g_PTRNUL)) {
if (_vm->_globals.GOACTION)
@@ -3994,4 +3889,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
_vm->_globals.iRegul = 0;
}
+void ObjectsManager::setVerb(int id) {
+ _verb = id;
+}
} // End of namespace Hopkins
diff --git a/engines/hopkins/objects.h b/engines/hopkins/objects.h
index a75e36acd5..7448040862 100644
--- a/engines/hopkins/objects.h
+++ b/engines/hopkins/objects.h
@@ -200,10 +200,6 @@ public:
void changeObject(int objIndex);
void removeObject(int objIndex);
- void checkZone();
- void enableZone(int idx);
- void disableZone(int idx);
-
void resetBob(int idx);
void setBobAnimDataIdx(int idx, int animIdx);
void setBobAnimation(int idx);
@@ -219,6 +215,7 @@ public:
void handleLeftButton();
void handleRightButton();
void setOffsetXY(byte *data, int idx, int xp, int yp, bool isSize);
+ void setVerb(int id);
void PERSONAGE(const Common::String &backgroundFile, const Common::String &linkFile,
const Common::String &animFile, const Common::String &s4, int v, bool initializeScreen);
diff --git a/engines/hopkins/script.cpp b/engines/hopkins/script.cpp
index af21b099fe..c75443ff8a 100644
--- a/engines/hopkins/script.cpp
+++ b/engines/hopkins/script.cpp
@@ -477,11 +477,11 @@ int ScriptManager::handleOpcode(byte *dataP) {
opcodeType = 2;
break;
case MKTAG24('Z', 'O', 'N'):
- _vm->_objectsManager.enableZone((int16)READ_LE_UINT16(dataP + 5));
+ _vm->_linesManager.enableZone((int16)READ_LE_UINT16(dataP + 5));
opcodeType = 1;
break;
case MKTAG24('Z', 'O', 'F'):
- _vm->_objectsManager.disableZone((int16)READ_LE_UINT16(dataP + 5));
+ _vm->_linesManager.disableZone((int16)READ_LE_UINT16(dataP + 5));
opcodeType = 1;
break;
case MKTAG24('E', 'X', 'I'):
@@ -2229,7 +2229,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
case 245:
_vm->_soundManager.playSound("SOUND89.WAV");
_vm->_objectsManager.OPTI_ONE(5, 0, 6, 0);
- _vm->_globals.ZONEP[4]._destX = 276;
+ _vm->_linesManager.ZONEP[4]._destX = 276;
_vm->_objectsManager.enableVerb(4, 19);
_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 285, 379, 0);
_vm->_globals._saveData->_data[svField399] = 1;
@@ -2390,7 +2390,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
opcodeType = 1;
break;
case MKTAG24('Z', 'C', 'H'):
- _vm->_globals.ZONEP[(int16)READ_LE_UINT16(dataP + 5)].field12 = (int16)READ_LE_UINT16(dataP + 7);
+ _vm->_linesManager.ZONEP[(int16)READ_LE_UINT16(dataP + 5)].field12 = (int16)READ_LE_UINT16(dataP + 7);
opcodeType = 1;
break;
case MKTAG24('J', 'U', 'M'):
diff --git a/engines/hopkins/talk.cpp b/engines/hopkins/talk.cpp
index ec5b1f518b..7b12ca301b 100644
--- a/engines/hopkins/talk.cpp
+++ b/engines/hopkins/talk.cpp
@@ -905,8 +905,8 @@ void TalkManager::REPONSE2(int zone, int verb) {
break;
}
_vm->_globals._saveData->_data[indx] = 2;
- _vm->_objectsManager.disableZone(22);
- _vm->_objectsManager.disableZone(23);
+ _vm->_linesManager.disableZone(22);
+ _vm->_linesManager.disableZone(23);
} else if (zone == 20 || zone == 21) {
_vm->_objectsManager.setFlipSprite(0, true);
_vm->_objectsManager.setSpriteIndex(0, 62);
@@ -952,8 +952,8 @@ void TalkManager::REPONSE2(int zone, int verb) {
break;
}
_vm->_globals._saveData->_data[indx] = 2;
- _vm->_objectsManager.disableZone(21);
- _vm->_objectsManager.disableZone(20);
+ _vm->_linesManager.disableZone(21);
+ _vm->_linesManager.disableZone(20);
}
}
@@ -967,7 +967,7 @@ void TalkManager::OBJET_VIVANT(const Common::String &a2) {
_vm->_globals.resetCache();
for (int i = 0; i <= 44; i++)
- _vm->_globals.BOBZONE[i] = 0;
+ _vm->_linesManager.BOBZONE[i] = 0;
_vm->_objectsManager._zoneNum = -1;
_vm->_eventsManager._mouseCursorId = 4;
@@ -1028,7 +1028,7 @@ void TalkManager::OBJET_VIVANT(const Common::String &a2) {
else if (mouseButton == 2)
_vm->_objectsManager.handleRightButton();
- _vm->_objectsManager.checkZone();
+ _vm->_linesManager.checkZone();
if (_vm->_globals.GOACTION)
_vm->_objectsManager.PARADISE();
_vm->_eventsManager.VBL();
@@ -1045,7 +1045,7 @@ void TalkManager::OBJET_VIVANT(const Common::String &a2) {
_vm->_linesManager.resetLines();
_vm->_globals.resetCache();
for (int i = 0; i <= 44; i++)
- _vm->_globals.BOBZONE[i] = 0;
+ _vm->_linesManager.BOBZONE[i] = 0;
_vm->_globals.freeMemory(_vm->_globals._answerBuffer);
_vm->_globals._answerBuffer = oldAnswerBufferPtr;