aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins
diff options
context:
space:
mode:
Diffstat (limited to 'engines/hopkins')
-rw-r--r--engines/hopkins/globals.cpp8
-rw-r--r--engines/hopkins/globals.h4
-rw-r--r--engines/hopkins/hopkins.cpp28
-rw-r--r--engines/hopkins/menu.cpp2
-rw-r--r--engines/hopkins/objects.cpp35
-rw-r--r--engines/hopkins/objects.h7
-rw-r--r--engines/hopkins/saveload.cpp8
-rw-r--r--engines/hopkins/script.cpp2
-rw-r--r--engines/hopkins/talk.cpp8
9 files changed, 56 insertions, 46 deletions
diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp
index e90748236a..837aad1313 100644
--- a/engines/hopkins/globals.cpp
+++ b/engines/hopkins/globals.cpp
@@ -116,14 +116,11 @@ Globals::Globals() {
NUM_FICHIER_OBJ = 0;
nbrligne = 0;
_boxWidth = 0;
- _forestFl = false;
_objectWidth = _objectHeight = 0;
- _helicopterFl = false;
_catalogPos = 0;
_catalogSize = 0;
iRegul = 0;
_exitId = 0;
- _mapCarPosX = _mapCarPosY = 0;
PERSO = 0;
_screenId = 0;
_prevScreenId = 0;
@@ -163,7 +160,6 @@ Globals::Globals() {
_saveData = NULL;
GESTE = NULL;
_inventoryObject = NULL;
- _forestSprite = NULL;
_answerBuffer = g_PTRNUL;
ADR_FICHIER_OBJ = NULL;
PERSO = NULL;
@@ -204,7 +200,6 @@ Globals::~Globals() {
freeMemory((byte *)_saveData);
freeMemory(GESTE);
freeMemory(_inventoryObject);
- freeMemory(_forestSprite);
freeMemory(_answerBuffer);
freeMemory(ADR_FICHIER_OBJ);
freeMemory(PERSO);
@@ -283,6 +278,7 @@ void Globals::clearAll() {
}
_vm->_linesManager.clearAll();
+ _vm->_objectsManager.clearAll();
_saveData = (Sauvegarde *)malloc(sizeof(Sauvegarde));
memset(_saveData, 0, sizeof(Sauvegarde));
@@ -293,8 +289,6 @@ void Globals::clearAll() {
_inventoryObject = allocMemory(2500);
ADR_FICHIER_OBJ = g_PTRNUL;
- _forestSprite = g_PTRNUL;
- _forestFl = false;
GESTE = g_PTRNUL;
GESTE_FLAG = 0;
diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h
index c2b9ec6e69..9c730bb1da 100644
--- a/engines/hopkins/globals.h
+++ b/engines/hopkins/globals.h
@@ -282,8 +282,6 @@ public:
bool _cityMapEnabledFl;
bool _linuxEndDemoFl;
bool _censorshipFl;
- bool _helicopterFl;
- bool _forestFl;
bool _introSpeechOffFl;
bool _cacheFl;
bool _forceHideText;
@@ -299,7 +297,6 @@ public:
int _screenId;
int _prevScreenId;
int _boxWidth;
- int _mapCarPosX, _mapCarPosY;
int _characterMaxPosY;
int _baseMapColor;
int _spriteSize[500];
@@ -307,7 +304,6 @@ public:
int _oldMouseZoneId;
int _oldMouseX, _oldMouseY;
uint _speed;
- byte *_forestSprite;
byte *_answerBuffer;
Sauvegarde *_saveData;
Language _language;
diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp
index 0b5aa67aae..f899ee3e61 100644
--- a/engines/hopkins/hopkins.cpp
+++ b/engines/hopkins/hopkins.cpp
@@ -117,8 +117,8 @@ bool HopkinsEngine::runWin95Demo() {
_globals.loadObjects();
_objectsManager.changeObject(14);
_objectsManager.addObject(14);
+ _objectsManager._helicopterFl = false;
- _globals._helicopterFl = false;
_globals.iRegul = 1;
_graphicsManager.lockScreen();
@@ -162,7 +162,7 @@ bool HopkinsEngine::runWin95Demo() {
_globals.iRegul = 1;
_globals.PERSO = _fileManager.loadFile("PERSO.SPR");
_globals.PERSO_TYPE = 0;
- _globals._mapCarPosX = _globals._mapCarPosY = 0;
+ _objectsManager._mapCarPosX = _objectsManager._mapCarPosY = 0;
memset(_globals._saveData, 0, 2000);
_globals._exitId = 0;
@@ -428,8 +428,8 @@ bool HopkinsEngine::runLinuxDemo() {
_globals.loadObjects();
_objectsManager.changeObject(14);
_objectsManager.addObject(14);
+ _objectsManager._helicopterFl = false;
- _globals._helicopterFl = false;
_eventsManager.mouseOff();
_graphicsManager.lockScreen();
@@ -452,7 +452,7 @@ bool HopkinsEngine::runLinuxDemo() {
_globals.iRegul = 0;
_globals.PERSO = _fileManager.loadFile("PERSO.SPR");
_globals.PERSO_TYPE = 0;
- _globals._mapCarPosX = _globals._mapCarPosY = 0;
+ _objectsManager._mapCarPosX = _objectsManager._mapCarPosY = 0;
memset(_globals._saveData, 0, 2000);
_globals._exitId = 0;
@@ -755,12 +755,12 @@ bool HopkinsEngine::runFull() {
_objectsManager.addObject(14);
if (getPlatform() == Common::kPlatformLinux) {
- _globals._helicopterFl = false;
+ _objectsManager._helicopterFl = false;
_eventsManager.mouseOff();
// No code has been added to display the version as it's wrong
// in my copy: it mentions a Win95 version v4 using DirectDraw (Strangerke)
} else if (getPlatform() == Common::kPlatformWindows) {
- _globals._helicopterFl = false;
+ _objectsManager._helicopterFl = false;
_globals.iRegul = 1;
// This code displays the game version.
// It wasn't present in the original and could be put in the debugger
@@ -811,7 +811,7 @@ bool HopkinsEngine::runFull() {
_globals.iRegul = 0;
_globals.PERSO = _fileManager.loadFile("PERSO.SPR");
_globals.PERSO_TYPE = 0;
- _globals._mapCarPosX = _globals._mapCarPosY = 0;
+ _objectsManager._mapCarPosX = _objectsManager._mapCarPosY = 0;
memset(_globals._saveData, 0, 2000);
_globals._exitId = 0;
@@ -1142,17 +1142,17 @@ bool HopkinsEngine::runFull() {
_linesManager.setMaxLineIdx(40);
_globals._characterMaxPosY = 435;
_globals._disableInventFl = false;
- _globals._forestFl = true;
+ _objectsManager._forestFl = true;
Common::String im = Common::String::format("IM%d", _globals._exitId);
_soundManager.WSOUND(13);
- if (_globals._forestSprite == g_PTRNUL) {
- _globals._forestSprite = _objectsManager.loadSprite("HOPDEG.SPR");
+ if (_objectsManager._forestSprite == g_PTRNUL) {
+ _objectsManager._forestSprite = _objectsManager.loadSprite("HOPDEG.SPR");
_soundManager.loadSample(1, "SOUND41.WAV");
}
_objectsManager.PERSONAGE2(im, im, "BANDIT", im, 13, false);
if (_globals._exitId < 35 || _globals._exitId > 49) {
- _globals._forestSprite = _globals.freeMemory(_globals._forestSprite);
- _globals._forestFl = false;
+ _objectsManager._forestSprite = _globals.freeMemory(_objectsManager._forestSprite);
+ _objectsManager._forestFl = false;
_soundManager.DEL_SAMPLE(1);
}
break;
@@ -1956,7 +1956,7 @@ void HopkinsEngine::restoreSystem() {
void HopkinsEngine::endLinuxDemo() {
_globals._linuxEndDemoFl = true;
_graphicsManager.RESET_SEGMENT_VESA();
- _globals._forestFl = false;
+ _objectsManager._forestFl = false;
_eventsManager._breakoutFl = false;
_globals._disableInventFl = true;
_graphicsManager.loadImage("BOX");
@@ -2832,7 +2832,7 @@ bool HopkinsEngine::displayAdultDisclaimer() {
_graphicsManager._maxX = SCREEN_WIDTH;
_graphicsManager._maxY = SCREEN_HEIGHT - 1;
_eventsManager._breakoutFl = false;
- _globals._forestFl = false;
+ _objectsManager._forestFl = false;
_globals._disableInventFl = true;
_globals._exitId = 0;
diff --git a/engines/hopkins/menu.cpp b/engines/hopkins/menu.cpp
index 33369a47ec..798acc2a8e 100644
--- a/engines/hopkins/menu.cpp
+++ b/engines/hopkins/menu.cpp
@@ -53,7 +53,7 @@ int MenuManager::menu() {
result = 0;
while (!g_system->getEventManager()->shouldQuit()) {
- _vm->_globals._forestFl = false;
+ _vm->_objectsManager._forestFl = false;
_vm->_eventsManager._breakoutFl = false;
_vm->_globals._disableInventFl = true;
_vm->_globals._exitId = 0;
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp
index e9db707e98..7c30286e5e 100644
--- a/engines/hopkins/objects.cpp
+++ b/engines/hopkins/objects.cpp
@@ -38,6 +38,7 @@ ObjectsManager::ObjectsManager() {
Common::fill((byte *)&_sprite[i], (byte *)&_sprite[i] + sizeof(SpriteItem), 0);
}
+ _helicopterFl = false;
_priorityFl = false;
_oldBorderPos = Common::Point(0, 0);
_oldBorderSpriteIndex = 0;
@@ -70,12 +71,24 @@ ObjectsManager::ObjectsManager() {
_oldSpriteIndex = 0;
_oldFlipFl = false;
_curObjectIndex = 0;
+ _forestFl = false;
+ _mapCarPosX = _mapCarPosY = 0;
+ _forestSprite = NULL;
+}
+
+ObjectsManager::~ObjectsManager() {
+ _vm->_globals.freeMemory(_forestSprite);
}
void ObjectsManager::setParent(HopkinsEngine *vm) {
_vm = vm;
}
+void ObjectsManager::clearAll() {
+ _forestFl = false;
+ _forestSprite = g_PTRNUL;
+}
+
/**
* Change Object
*/
@@ -1810,12 +1823,12 @@ void ObjectsManager::handleCityMap() {
_vm->_globals.CACHE_OFF(20);
_vm->_globals.CACHE_ON();
- if (!_vm->_globals._mapCarPosX && !_vm->_globals._mapCarPosY) {
- _vm->_globals._mapCarPosX = 900;
- _vm->_globals._mapCarPosY = 319;
+ if (!_mapCarPosX && !_mapCarPosY) {
+ _mapCarPosX = 900;
+ _mapCarPosY = 319;
}
- addStaticSprite(_spritePtr, Common::Point(_vm->_globals._mapCarPosX, _vm->_globals._mapCarPosY), 0, 1, 0, false, 5, 5);
- _vm->_eventsManager.setMouseXY(_vm->_globals._mapCarPosX, _vm->_globals._mapCarPosY);
+ addStaticSprite(_spritePtr, Common::Point(_mapCarPosX, _mapCarPosY), 0, 1, 0, false, 5, 5);
+ _vm->_eventsManager.setMouseXY(_mapCarPosX, _mapCarPosY);
_vm->_eventsManager.mouseOn();
_vm->_graphicsManager.scrollScreen(getSpriteX(0) - 320);
_vm->_graphicsManager._scrollOffset = getSpriteX(0) - 320;
@@ -1872,8 +1885,8 @@ void ObjectsManager::handleCityMap() {
_vm->_graphicsManager.fadeOutLong();
_vm->_globals.iRegul = 0;
_vm->_graphicsManager._noFadingFl = false;
- _vm->_globals._mapCarPosX = getSpriteX(0);
- _vm->_globals._mapCarPosY = getSpriteY(0);
+ _mapCarPosX = getSpriteX(0);
+ _mapCarPosY = getSpriteY(0);
removeSprite(0);
_spritePtr = _vm->_globals.freeMemory(_spritePtr);
clearScreen();
@@ -1958,7 +1971,7 @@ void ObjectsManager::handleLeftButton() {
_vm->_globals.GOACTION = false;
int16 *oldRoute = _vm->_linesManager._route;
_vm->_linesManager._route = (int16 *)g_PTRNUL;
- if (_vm->_globals._forestFl && _zoneNum >= 20 && _zoneNum <= 23) {
+ if (_forestFl && _zoneNum >= 20 && _zoneNum <= 23) {
if (getSpriteY(0) > 374 && getSpriteY(0) <= 410) {
_vm->_linesManager._route = (int16 *)g_PTRNUL;
setSpriteIndex(0, _vm->_globals._oldDirectionSpriteIdx);
@@ -2027,7 +2040,7 @@ void ObjectsManager::PARADISE() {
char result = _vm->_globals._saveData->_data[svField1];
if (result && _vm->_globals._saveData->_data[svField2] && result != 4 && result > 3) {
_vm->_fontManager.hideText(5);
- if (!_vm->_globals._forestFl || _zoneNum < 20 || _zoneNum > 23) {
+ if (!_forestFl || _zoneNum < 20 || _zoneNum > 23) {
if (_vm->_graphicsManager._largeScreenFl) {
_vm->_graphicsManager._scrollStatus = 2;
if (_vm->_eventsManager._startPos.x + 320 - getSpriteX(0) > 160) {
@@ -3955,7 +3968,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
breakFlag = true;
}
- if (_vm->_globals._exitId != 8 || _vm->_globals._screenId != 5 || !_vm->_globals._helicopterFl) {
+ if (_vm->_globals._exitId != 8 || _vm->_globals._screenId != 5 || !_helicopterFl) {
if (!_vm->_graphicsManager._noFadingFl)
_vm->_graphicsManager.fadeOutLong();
_vm->_graphicsManager._noFadingFl = false;
@@ -3968,7 +3981,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
_vm->_graphicsManager.FIN_VISU();
clearScreen();
} else {
- _vm->_globals._helicopterFl = false;
+ _helicopterFl = false;
}
_vm->_globals.iRegul = 0;
}
diff --git a/engines/hopkins/objects.h b/engines/hopkins/objects.h
index c10b895399..816e616a3f 100644
--- a/engines/hopkins/objects.h
+++ b/engines/hopkins/objects.h
@@ -66,10 +66,12 @@ public:
int _saveLoadX, _saveLoadY;
int _oldInventoryPosX, _oldInventoryPosY;
int _oldCharacterPosX, _oldCharacterPosY;
+ int _mapCarPosX, _mapCarPosY;
int _eraseVisibleCounter;
byte *_saveLoadSprite;
byte *_saveLoadSprite2;
byte *_spritePtr;
+ byte *_forestSprite;
const byte *_oldSpriteData;
bool PERSO_ON;
bool _saveLoadFl;
@@ -90,9 +92,14 @@ public:
int _oldSpriteIndex;
bool _oldFlipFl;
int _curObjectIndex;
+ bool _helicopterFl;
+ bool _forestFl;
public:
ObjectsManager();
+ ~ObjectsManager();
+
void setParent(HopkinsEngine *vm);
+ void clearAll();
void changeObject(int objIndex);
byte *CAPTURE_OBJET(int objIndex, bool mode);
diff --git a/engines/hopkins/saveload.cpp b/engines/hopkins/saveload.cpp
index e692aef81c..7f0dd9cd60 100644
--- a/engines/hopkins/saveload.cpp
+++ b/engines/hopkins/saveload.cpp
@@ -146,8 +146,8 @@ Common::Error SaveLoadManager::saveGame(int slot, const Common::String &saveName
for (int i = 0; i < 35; ++i)
_vm->_globals._saveData->_inventory[i] = _vm->_globals._inventory[i];
- _vm->_globals._saveData->_mapCarPosX = _vm->_globals._mapCarPosX;
- _vm->_globals._saveData->_mapCarPosY = _vm->_globals._mapCarPosY;
+ _vm->_globals._saveData->_mapCarPosX = _vm->_objectsManager._mapCarPosX;
+ _vm->_globals._saveData->_mapCarPosY = _vm->_objectsManager._mapCarPosY;
/* Create the savegame */
Common::OutSaveFile *savefile = g_system->getSavefileManager()->openForSaving(_vm->generateSaveName(slot));
@@ -205,8 +205,8 @@ Common::Error SaveLoadManager::loadGame(int slot) {
_vm->_globals._exitId = _vm->_globals._saveData->_data[svField5];
_vm->_globals._saveData->_data[svField6] = 0;
_vm->_globals._screenId = 0;
- _vm->_globals._mapCarPosX = _vm->_globals._saveData->_mapCarPosX;
- _vm->_globals._mapCarPosY = _vm->_globals._saveData->_mapCarPosY;
+ _vm->_objectsManager._mapCarPosX = _vm->_globals._saveData->_mapCarPosX;
+ _vm->_objectsManager._mapCarPosY = _vm->_globals._saveData->_mapCarPosY;
return Common::kNoError;
}
diff --git a/engines/hopkins/script.cpp b/engines/hopkins/script.cpp
index c25aacc414..f124280c75 100644
--- a/engines/hopkins/script.cpp
+++ b/engines/hopkins/script.cpp
@@ -614,7 +614,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
_vm->_graphicsManager.fadeOutLong();
_vm->_globals._disableInventFl = false;
- _vm->_globals._helicopterFl = true;
+ _vm->_objectsManager._helicopterFl = true;
break;
case 16:
diff --git a/engines/hopkins/talk.cpp b/engines/hopkins/talk.cpp
index 319b9f93a6..a05e42c2a9 100644
--- a/engines/hopkins/talk.cpp
+++ b/engines/hopkins/talk.cpp
@@ -884,7 +884,7 @@ void TalkManager::REPONSE2(int a1, int a2) {
if (a1 == 22 || a1 == 23) {
_vm->_objectsManager.setFlipSprite(0, false);
_vm->_objectsManager.setSpriteIndex(0, 62);
- _vm->_objectsManager.SPACTION(_vm->_globals._forestSprite, "2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 4, false);
+ _vm->_objectsManager.SPACTION(_vm->_objectsManager._forestSprite, "2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 4, false);
if (a1 == 22) {
_vm->_objectsManager.lockAnimX(6, _vm->_objectsManager.getBobPosX(3));
_vm->_objectsManager.lockAnimX(8, _vm->_objectsManager.getBobPosX(3));
@@ -896,7 +896,7 @@ void TalkManager::REPONSE2(int a1, int a2) {
_vm->_objectsManager.stopBobAnimation(4);
_vm->_objectsManager.setBobAnimation(6);
_vm->_soundManager.PLAY_SAMPLE2(1);
- _vm->_objectsManager.SPACTION1(_vm->_globals._forestSprite, "13,14,15,14,13,12,13,14,15,16,-1,", 0, 0, 4);
+ _vm->_objectsManager.SPACTION1(_vm->_objectsManager._forestSprite, "13,14,15,14,13,12,13,14,15,16,-1,", 0, 0, 4);
do
_vm->_eventsManager.VBL();
while (_vm->_objectsManager.getBobAnimDataIdx(6) < 12);
@@ -932,7 +932,7 @@ void TalkManager::REPONSE2(int a1, int a2) {
} else if (a1 == 20 || a1 == 21) {
_vm->_objectsManager.setFlipSprite(0, true);
_vm->_objectsManager.setSpriteIndex(0, 62);
- _vm->_objectsManager.SPACTION(_vm->_globals._forestSprite, "2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 4, true);
+ _vm->_objectsManager.SPACTION(_vm->_objectsManager._forestSprite, "2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 4, true);
if (a1 == 20) {
_vm->_objectsManager.lockAnimX(5, _vm->_objectsManager.getBobPosX(1));
_vm->_objectsManager.lockAnimX(7, _vm->_objectsManager.getBobPosX(1));
@@ -944,7 +944,7 @@ void TalkManager::REPONSE2(int a1, int a2) {
_vm->_objectsManager.stopBobAnimation(2);
_vm->_objectsManager.setBobAnimation(5);
_vm->_soundManager.PLAY_SAMPLE2(1);
- _vm->_objectsManager.SPACTION1(_vm->_globals._forestSprite, "13,14,15,14,13,12,13,14,15,16,-1,", 0, 0, 4);
+ _vm->_objectsManager.SPACTION1(_vm->_objectsManager._forestSprite, "13,14,15,14,13,12,13,14,15,16,-1,", 0, 0, 4);
do
_vm->_eventsManager.VBL();
while (_vm->_objectsManager.getBobAnimDataIdx(5) < 12);