[Scummvm-cvs-logs] scummvm master -> 852e65bd02bc1278386d79ca68f81e3d15e9fa43

Strangerke Strangerke at scummvm.org
Wed Mar 20 07:28:46 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:
852e65bd02 HOPKINS: Remove setParent() from Globals


Commit: 852e65bd02bc1278386d79ca68f81e3d15e9fa43
    https://github.com/scummvm/scummvm/commit/852e65bd02bc1278386d79ca68f81e3d15e9fa43
Author: Strangerke (strangerke at scummvm.org)
Date: 2013-03-19T23:27:42-07:00

Commit Message:
HOPKINS: Remove setParent() from Globals

Changed paths:
    engines/hopkins/anim.cpp
    engines/hopkins/computer.cpp
    engines/hopkins/dialogs.cpp
    engines/hopkins/events.cpp
    engines/hopkins/files.cpp
    engines/hopkins/font.cpp
    engines/hopkins/globals.cpp
    engines/hopkins/globals.h
    engines/hopkins/graphics.cpp
    engines/hopkins/hopkins.cpp
    engines/hopkins/hopkins.h
    engines/hopkins/lines.cpp
    engines/hopkins/menu.cpp
    engines/hopkins/objects.cpp
    engines/hopkins/saveload.cpp
    engines/hopkins/script.cpp
    engines/hopkins/sound.cpp
    engines/hopkins/talk.cpp



diff --git a/engines/hopkins/anim.cpp b/engines/hopkins/anim.cpp
index 2d66aee..8f0ce67 100644
--- a/engines/hopkins/anim.cpp
+++ b/engines/hopkins/anim.cpp
@@ -86,7 +86,7 @@ void AnimationManager::playAnim(const Common::String &filename, uint32 rate1, ui
 	}
 	if (_vm->_graphicsManager.WinScan / 2 > SCREEN_WIDTH) {
 		hasScreenCopy = true;
-		screenCopy = _vm->_globals.allocMemory(307200);
+		screenCopy = _vm->_globals->allocMemory(307200);
 		memcpy(screenCopy, screenP, 307200);
 	}
 	if (NO_SEQ) {
@@ -109,7 +109,7 @@ void AnimationManager::playAnim(const Common::String &filename, uint32 rate1, ui
 	_vm->_eventsManager->_escKeyFl = false;
 	_vm->_soundManager.loadAnimSound();
 
-	if (_vm->_globals.iRegul == 1) {
+	if (_vm->_globals->iRegul == 1) {
 		// Do pre-animation delay
 		do {
 			if (_vm->_eventsManager->_escKeyFl)
@@ -136,7 +136,7 @@ void AnimationManager::playAnim(const Common::String &filename, uint32 rate1, ui
 
 			f.read(screenP, READ_LE_UINT32(imageStr + 8));
 
-			if (_vm->_globals.iRegul == 1) {
+			if (_vm->_globals->iRegul == 1) {
 				do {
 					if (_vm->_eventsManager->_escKeyFl)
 						break;
@@ -166,7 +166,7 @@ void AnimationManager::playAnim(const Common::String &filename, uint32 rate1, ui
 		}
 	}
 
-	if (_vm->_globals.iRegul == 1 && !_vm->_eventsManager->_escKeyFl) {
+	if (_vm->_globals->iRegul == 1 && !_vm->_eventsManager->_escKeyFl) {
 		// Do post-animation delay
 		do {
 			if (_vm->_eventsManager->_escKeyFl)
@@ -183,7 +183,7 @@ void AnimationManager::playAnim(const Common::String &filename, uint32 rate1, ui
 	}
 
 	if (_vm->_graphicsManager.FADE_LINUX == 2 && !hasScreenCopy) {
-		screenCopy = _vm->_globals.allocMemory(307200);
+		screenCopy = _vm->_globals->allocMemory(307200);
 
 		f.seek(6);
 		f.read(_vm->_graphicsManager._palette, 800);
@@ -208,12 +208,12 @@ void AnimationManager::playAnim(const Common::String &filename, uint32 rate1, ui
 				_vm->_graphicsManager.copyWinscanVbe3(screenP, screenCopy);
 		}
 		_vm->_graphicsManager.fadeOutDefaultLength(screenCopy);
-		screenCopy = _vm->_globals.freeMemory(screenCopy);
+		screenCopy = _vm->_globals->freeMemory(screenCopy);
 	}
 	if (hasScreenCopy) {
 		if (_vm->_graphicsManager.FADE_LINUX == 2)
 			_vm->_graphicsManager.fadeOutDefaultLength(screenCopy);
-		screenCopy = _vm->_globals.freeMemory(screenCopy);
+		screenCopy = _vm->_globals->freeMemory(screenCopy);
 	}
 
 	_vm->_graphicsManager.FADE_LINUX = 0;
@@ -272,7 +272,7 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 rate1, u
 		_vm->_graphicsManager._maxX = SCREEN_WIDTH;
 		if (_vm->_graphicsManager.WinScan / 2 > SCREEN_WIDTH) {
 			hasScreenCopy = true;
-			screenCopy = _vm->_globals.allocMemory(307200);
+			screenCopy = _vm->_globals->allocMemory(307200);
 			memcpy(screenCopy, screenP, 307200);
 		}
 		if (NO_SEQ) {
@@ -295,7 +295,7 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 rate1, u
 		_vm->_eventsManager->_rateCounter = 0;
 		_vm->_eventsManager->_escKeyFl = false;
 		_vm->_soundManager.loadAnimSound();
-		if (_vm->_globals.iRegul == 1) {
+		if (_vm->_globals->iRegul == 1) {
 			while (!_vm->_eventsManager->_escKeyFl && _vm->_eventsManager->_rateCounter < rate1) {
 				_vm->_eventsManager->refreshEvents();
 			}
@@ -320,7 +320,7 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 rate1, u
 				break;
 
 			f.read(screenP, READ_LE_UINT32(imageStr + 8));
-			if (_vm->_globals.iRegul == 1) {
+			if (_vm->_globals->iRegul == 1) {
 				while (!_vm->_eventsManager->_escKeyFl && _vm->_eventsManager->_rateCounter < rate2) {
 					_vm->_eventsManager->refreshEvents();
 					_vm->_soundManager.checkSoundEnd();
@@ -344,7 +344,7 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 rate1, u
 			_vm->_soundManager.checkSoundEnd();
 		}
 
-		if (_vm->_globals.iRegul == 1) {
+		if (_vm->_globals->iRegul == 1) {
 			while (!_vm->_eventsManager->_escKeyFl && _vm->_eventsManager->_rateCounter < rate3) {
 				_vm->_eventsManager->refreshEvents();
 				_vm->_soundManager.checkSoundEnd();
@@ -362,7 +362,7 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 rate1, u
 		size_t nbytes = f.readUint32LE();
 		f.skip(14);
 		f.read(screenP, nbytes);
-		byte *ptra = _vm->_globals.allocMemory(307200);
+		byte *ptra = _vm->_globals->allocMemory(307200);
 		memcpy(ptra, screenP, 307200);
 
 		for (;;) {
@@ -379,12 +379,12 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 rate1, u
 				_vm->_graphicsManager.copyWinscanVbe3(screenP, ptra);
 		}
 		_vm->_graphicsManager.fadeOutDefaultLength(ptra);
-		ptra = _vm->_globals.freeMemory(ptra);
+		ptra = _vm->_globals->freeMemory(ptra);
 	}
 	if (hasScreenCopy) {
 		if (_vm->_graphicsManager.FADE_LINUX == 2)
 			_vm->_graphicsManager.fadeOutDefaultLength(screenCopy);
-		_vm->_globals.freeMemory(screenCopy);
+		_vm->_globals->freeMemory(screenCopy);
 	}
 	_vm->_graphicsManager.FADE_LINUX = 0;
 
@@ -467,14 +467,14 @@ void AnimationManager::loadAnim(const Common::String &animName) {
 		}
 	}
 
-	byte *data = _vm->_globals.allocMemory(nbytes + 1);
+	byte *data = _vm->_globals->allocMemory(nbytes + 1);
 	f.read(data, nbytes);
 	f.close();
 
 	for (int idx = 1; idx <= 20; ++idx)
 		searchAnim(data, idx, nbytes);
 
-	_vm->_globals.freeMemory(data);
+	_vm->_globals->freeMemory(data);
 }
 
 /**
@@ -482,15 +482,15 @@ void AnimationManager::loadAnim(const Common::String &animName) {
  */
 void AnimationManager::clearAnim() {
 	for (int idx = 0; idx < 35; ++idx) {
-		_vm->_globals._animBqe[idx]._data = _vm->_globals.freeMemory(_vm->_globals._animBqe[idx]._data);
-		_vm->_globals._animBqe[idx]._enabledFl = false;
+		_vm->_globals->_animBqe[idx]._data = _vm->_globals->freeMemory(_vm->_globals->_animBqe[idx]._data);
+		_vm->_globals->_animBqe[idx]._enabledFl = false;
 	}
 
 	for (int idx = 0; idx < 8; ++idx) {
-		_vm->_globals.Bank[idx]._data = _vm->_globals.freeMemory(_vm->_globals.Bank[idx]._data);
-		_vm->_globals.Bank[idx]._loadedFl = false;
-		_vm->_globals.Bank[idx]._filename = "";
-		_vm->_globals.Bank[idx]._fileHeader = 0;
+		_vm->_globals->Bank[idx]._data = _vm->_globals->freeMemory(_vm->_globals->Bank[idx]._data);
+		_vm->_globals->Bank[idx]._loadedFl = false;
+		_vm->_globals->Bank[idx]._filename = "";
+		_vm->_globals->Bank[idx]._fileHeader = 0;
 	}
 }
 
@@ -499,24 +499,24 @@ void AnimationManager::clearAnim() {
  */
 int AnimationManager::loadSpriteBank(int idx, const Common::String &filename) {
 	int result = 0;
-	_vm->_globals.Bank[idx]._loadedFl = true;
-	_vm->_globals.Bank[idx]._filename = filename;
+	_vm->_globals->Bank[idx]._loadedFl = true;
+	_vm->_globals->Bank[idx]._filename = filename;
 
 	byte *fileDataPtr = _vm->_fileManager->loadFile(filename);
 
-	_vm->_globals.Bank[idx]._fileHeader = 0;
+	_vm->_globals->Bank[idx]._fileHeader = 0;
 	if (fileDataPtr[1] == 'L' && fileDataPtr[2] == 'E')
-		_vm->_globals.Bank[idx]._fileHeader = 1;
+		_vm->_globals->Bank[idx]._fileHeader = 1;
 	else if (fileDataPtr[1] == 'O' && fileDataPtr[2] == 'R')
-		_vm->_globals.Bank[idx]._fileHeader = 2;
+		_vm->_globals->Bank[idx]._fileHeader = 2;
 
-	if (!_vm->_globals.Bank[idx]._fileHeader) {
-		_vm->_globals.freeMemory(fileDataPtr);
-		_vm->_globals.Bank[idx]._loadedFl = false;
+	if (!_vm->_globals->Bank[idx]._fileHeader) {
+		_vm->_globals->freeMemory(fileDataPtr);
+		_vm->_globals->Bank[idx]._loadedFl = false;
 		result = -1;
 	}
 	
-	_vm->_globals.Bank[idx]._data = fileDataPtr;
+	_vm->_globals->Bank[idx]._data = fileDataPtr;
 
 	int objectDataIdx = 0;
 	for(objectDataIdx = 0; objectDataIdx <= 249; objectDataIdx++) {
@@ -527,13 +527,13 @@ int AnimationManager::loadSpriteBank(int idx, const Common::String &filename) {
 	}
 
 	if (objectDataIdx > 249) {
-		_vm->_globals.freeMemory(fileDataPtr);
-		_vm->_globals.Bank[idx]._loadedFl = false;
+		_vm->_globals->freeMemory(fileDataPtr);
+		_vm->_globals->Bank[idx]._loadedFl = false;
 		result = -2;
 	}
-	_vm->_globals.Bank[idx]._objDataIdx = objectDataIdx;
+	_vm->_globals->Bank[idx]._objDataIdx = objectDataIdx;
 
-	Common::String ofsFilename = _vm->_globals.Bank[idx]._filename;
+	Common::String ofsFilename = _vm->_globals->Bank[idx]._filename;
 	char ch;
 	do {
 		ch = ofsFilename.lastChar();
@@ -545,18 +545,18 @@ int AnimationManager::loadSpriteBank(int idx, const Common::String &filename) {
 	if (f.exists(ofsFilename)) {
 		byte *ofsData = _vm->_fileManager->loadFile(ofsFilename);
 		byte *curOfsData = ofsData;
-		for (int objIdx = 0; objIdx < _vm->_globals.Bank[idx]._objDataIdx; ++objIdx, curOfsData += 8) {
+		for (int objIdx = 0; objIdx < _vm->_globals->Bank[idx]._objDataIdx; ++objIdx, curOfsData += 8) {
 			int x1 = READ_LE_INT16(curOfsData);
 			int y1 = READ_LE_INT16(curOfsData + 2);
 			int x2 = READ_LE_INT16(curOfsData + 4);
 			int y2 = READ_LE_INT16(curOfsData + 6);
 
-			_vm->_objectsManager.setOffsetXY(_vm->_globals.Bank[idx]._data, objIdx, x1, y1, 0);
-			if (_vm->_globals.Bank[idx]._fileHeader == 2)
-				_vm->_objectsManager.setOffsetXY(_vm->_globals.Bank[idx]._data, objIdx, x2, y2, 1);
+			_vm->_objectsManager.setOffsetXY(_vm->_globals->Bank[idx]._data, objIdx, x1, y1, 0);
+			if (_vm->_globals->Bank[idx]._fileHeader == 2)
+				_vm->_objectsManager.setOffsetXY(_vm->_globals->Bank[idx]._data, objIdx, x2, y2, 1);
 		}
 
-		_vm->_globals.freeMemory(ofsData);
+		_vm->_globals->freeMemory(ofsData);
 		result = 0;
 	}
 
@@ -578,18 +578,18 @@ void AnimationManager::searchAnim(const byte *data, int animIndex, int bufSize)
 					if (READ_BE_UINT32(&data[curBufferPos]) == MKTAG('A', 'N', 'I', 'M') || READ_BE_UINT24(&data[curBufferPos]) == MKTAG24('F', 'I', 'N'))
 						innerLoopCond = true;
 					if (bufSize < curBufferPos) {
-						_vm->_globals._animBqe[animIndex]._enabledFl = false;
-						_vm->_globals._animBqe[animIndex]._data = g_PTRNUL;
+						_vm->_globals->_animBqe[animIndex]._enabledFl = false;
+						_vm->_globals->_animBqe[animIndex]._data = g_PTRNUL;
 						return;
 					}
 					++curBufferPos;
 					++count;
 				} while (!innerLoopCond);
-				_vm->_globals._animBqe[animIndex]._data = _vm->_globals.allocMemory(count + 50);
-				_vm->_globals._animBqe[animIndex]._enabledFl = true;
-				memcpy(_vm->_globals._animBqe[animIndex]._data, data + dataIdx + 5, 20);
+				_vm->_globals->_animBqe[animIndex]._data = _vm->_globals->allocMemory(count + 50);
+				_vm->_globals->_animBqe[animIndex]._enabledFl = true;
+				memcpy(_vm->_globals->_animBqe[animIndex]._data, data + dataIdx + 5, 20);
 
-				byte *dataP = _vm->_globals._animBqe[animIndex]._data;
+				byte *dataP = _vm->_globals->_animBqe[animIndex]._data;
 				int curDestDataIndx = 20;
 				int curSrcDataIndx = dataIdx + 25;
 
@@ -642,7 +642,7 @@ void AnimationManager::playSequence(const Common::String &file, uint32 rate1, ui
 	byte *screenCopy = NULL;
 	if (_vm->_graphicsManager.WinScan / 2 > SCREEN_WIDTH) {
 		hasScreenCopy = true;
-		screenCopy = _vm->_globals.allocMemory(307200);
+		screenCopy = _vm->_globals->allocMemory(307200);
 		memcpy(screenCopy, screenP, 307200);
 	}
 	if (NO_SEQ) {
@@ -671,7 +671,7 @@ void AnimationManager::playSequence(const Common::String &file, uint32 rate1, ui
 		_vm->_eventsManager->_rateCounter = 0;
 		_vm->_eventsManager->_escKeyFl = false;
 		_vm->_soundManager.loadAnimSound();
-		if (_vm->_globals.iRegul == 1) {
+		if (_vm->_globals->iRegul == 1) {
 			do {
 				if (_vm->shouldQuit() || (_vm->_eventsManager->_escKeyFl && !skipEscFl)) {
 					skipFl = true;
@@ -689,7 +689,7 @@ void AnimationManager::playSequence(const Common::String &file, uint32 rate1, ui
 		_vm->_eventsManager->_rateCounter = 0;
 		_vm->_eventsManager->_escKeyFl = false;
 		_vm->_soundManager.loadAnimSound();
-		if (_vm->_globals.iRegul == 1) {
+		if (_vm->_globals->iRegul == 1) {
 			do {
 				if (_vm->shouldQuit() || (_vm->_eventsManager->_escKeyFl && !skipEscFl)) {
 					skipFl = true;
@@ -717,7 +717,7 @@ void AnimationManager::playSequence(const Common::String &file, uint32 rate1, ui
 				break;
 
 			f.read(screenP, READ_LE_UINT32(imageStr + 8));
-			if (_vm->_globals.iRegul == 1) {
+			if (_vm->_globals->iRegul == 1) {
 				do {
 					if (_vm->shouldQuit() || (_vm->_eventsManager->_escKeyFl && !skipEscFl)) {
 						skipFl = true;
@@ -751,7 +751,7 @@ void AnimationManager::playSequence(const Common::String &file, uint32 rate1, ui
 		}
 	}
 
-	if (_vm->_globals.iRegul == 1 && !skipFl) {
+	if (_vm->_globals->iRegul == 1 && !skipFl) {
 		do {
 			if (_vm->shouldQuit() || (_vm->_eventsManager->_escKeyFl && !skipEscFl)) {
 				skipFl = true;
@@ -777,7 +777,7 @@ void AnimationManager::playSequence(const Common::String &file, uint32 rate1, ui
 		_vm->_eventsManager->_mouseFl = true;
 	}
 	if (hasScreenCopy)
-		_vm->_globals.freeMemory(screenCopy);
+		_vm->_globals->freeMemory(screenCopy);
 }
 
 /**
@@ -809,7 +809,7 @@ void AnimationManager::playSequence2(const Common::String &file, uint32 rate1, u
 
 		if (_vm->_graphicsManager.WinScan / 2 > SCREEN_WIDTH) {
 			multiScreenFl = true;
-			screenCopy = _vm->_globals.allocMemory(307200);
+			screenCopy = _vm->_globals->allocMemory(307200);
 			memcpy((void *)screenCopy, screenP, 307200);
 		}
 		if (NO_SEQ) {
@@ -833,7 +833,7 @@ void AnimationManager::playSequence2(const Common::String &file, uint32 rate1, u
 		_vm->_eventsManager->_rateCounter = 0;
 		_vm->_eventsManager->_escKeyFl = false;
 		_vm->_soundManager.loadAnimSound();
-		if (_vm->_globals.iRegul == 1) {
+		if (_vm->_globals->iRegul == 1) {
 			do {
 				_vm->_eventsManager->refreshEvents();
 				_vm->_soundManager.checkSoundEnd();
@@ -857,7 +857,7 @@ void AnimationManager::playSequence2(const Common::String &file, uint32 rate1, u
 				break;
 
 			f.read(screenP, READ_LE_UINT32(imageStr + 8));
-			if (_vm->_globals.iRegul == 1) {
+			if (_vm->_globals->iRegul == 1) {
 				do {
 					_vm->_eventsManager->refreshEvents();
 				} while (!_vm->shouldQuit() && !_vm->_eventsManager->_escKeyFl && _vm->_eventsManager->_rateCounter < rate2);
@@ -881,7 +881,7 @@ void AnimationManager::playSequence2(const Common::String &file, uint32 rate1, u
 		}
 	}
 
-	if (_vm->_globals.iRegul == 1) {
+	if (_vm->_globals->iRegul == 1) {
 		// Wait for third rate delay
 		do {
 			_vm->_eventsManager->refreshEvents();
@@ -892,7 +892,7 @@ void AnimationManager::playSequence2(const Common::String &file, uint32 rate1, u
 	_vm->_eventsManager->_rateCounter = 0;
 
 	if (_vm->_graphicsManager.FADE_LINUX == 2 && !multiScreenFl) {
-		byte *ptra = _vm->_globals.allocMemory(307200);
+		byte *ptra = _vm->_globals->allocMemory(307200);
 
 		f.seek(6);
 		f.read(_vm->_graphicsManager._palette, 800);
@@ -916,12 +916,12 @@ void AnimationManager::playSequence2(const Common::String &file, uint32 rate1, u
 				_vm->_graphicsManager.copyWinscanVbe(screenP, ptra);
 		}
 		_vm->_graphicsManager.fadeOutDefaultLength(ptra);
-		ptra = _vm->_globals.freeMemory(ptra);
+		ptra = _vm->_globals->freeMemory(ptra);
 	}
 	if (multiScreenFl) {
 		if (_vm->_graphicsManager.FADE_LINUX == 2)
 			_vm->_graphicsManager.fadeOutDefaultLength(screenCopy);
-		_vm->_globals.freeMemory(screenCopy);
+		_vm->_globals->freeMemory(screenCopy);
 	}
 	_vm->_graphicsManager.FADE_LINUX = 0;
 
diff --git a/engines/hopkins/computer.cpp b/engines/hopkins/computer.cpp
index d273050..f9b3325 100644
--- a/engines/hopkins/computer.cpp
+++ b/engines/hopkins/computer.cpp
@@ -77,7 +77,7 @@ void ComputerManager::setTextMode() {
 	_vm->_graphicsManager.unlockScreen();
 
 	_vm->_graphicsManager._lineNbr = SCREEN_WIDTH;
-	_vm->_fontManager->_font = _vm->_globals.freeMemory(_vm->_fontManager->_font);
+	_vm->_fontManager->_font = _vm->_globals->freeMemory(_vm->_fontManager->_font);
 
 	Common::String filename = "STFONT.SPR";
 	Common::File f;
@@ -253,7 +253,7 @@ void ComputerManager::showComputer(ComputerEnum mode) {
 					break;
 				case '6':
 					readText(10);
-					_vm->_globals._saveData->_data[svField270] = 4;
+					_vm->_globals->_saveData->_data[svField270] = 4;
 					break;
 				}
 			}
@@ -281,9 +281,9 @@ void ComputerManager::showComputer(ComputerEnum mode) {
 	}
 
 	if (mode == COMPUTER_HOPKINS)
-		_vm->_globals._exitId = 13;
+		_vm->_globals->_exitId = 13;
 	else // Free access or Samantha
-		_vm->_globals._exitId = 14;
+		_vm->_globals->_exitId = 14;
 
 	_vm->_graphicsManager.resetDirtyRects();
 }
@@ -354,14 +354,14 @@ void ComputerManager::loadMenu() {
 	char *ptr;
 	if (_vm->_fileManager->fileExists("COMPUTAN.TXT")) {
 		ptr = (char *)_vm->_fileManager->loadFile("COMPUTAN.TXT");
-	} else if (_vm->_globals._language == LANG_FR) {
-		ptr = (char *)_vm->_globals.allocMemory(sizeof(_frenchText));
+	} else if (_vm->_globals->_language == LANG_FR) {
+		ptr = (char *)_vm->_globals->allocMemory(sizeof(_frenchText));
 		strcpy(ptr, _frenchText);
-	} else if (_vm->_globals._language == LANG_SP) {
-		ptr = (char *)_vm->_globals.allocMemory(sizeof(_spanishText));
+	} else if (_vm->_globals->_language == LANG_SP) {
+		ptr = (char *)_vm->_globals->allocMemory(sizeof(_spanishText));
 		strcpy(ptr, _spanishText);
 	} else {
-		ptr = (char *)_vm->_globals.allocMemory(sizeof(_englishText));
+		ptr = (char *)_vm->_globals->allocMemory(sizeof(_englishText));
 		strcpy(ptr, _englishText);
 	}
 
@@ -392,7 +392,7 @@ void ComputerManager::loadMenu() {
 		}
 		++tmpPtr;
 	} while (!loopCond);
-	_vm->_globals.freeMemory((byte *)ptr);
+	_vm->_globals->freeMemory((byte *)ptr);
 }
 
 void ComputerManager::displayMessage(int xp, int yp, int textIdx) {
@@ -467,7 +467,7 @@ void ComputerManager::outText2(const Common::String &msg) {
  * Restores the scene for the FBI headquarters room
  */
 void ComputerManager::restoreFBIRoom() {
-	_vm->_globals.freeMemory(_vm->_fontManager->_font);
+	_vm->_globals->freeMemory(_vm->_fontManager->_font);
 	_vm->_fontManager->_font = _vm->_fileManager->loadFile("FONTE3.SPR");
 	_vm->_fontManager->_fontFixedWidth = 12;
 	_vm->_fontManager->_fontFixedHeight = 21;
@@ -482,11 +482,11 @@ void ComputerManager::readText(int idx) {
 	_vm->_eventsManager->_escKeyFl = false;
 
 	Common::String filename;
-	if (_vm->_globals._language == LANG_EN)
+	if (_vm->_globals->_language == LANG_EN)
 		filename = "THOPKAN.TXT";
-	else if (_vm->_globals._language == LANG_FR)
+	else if (_vm->_globals->_language == LANG_FR)
 		filename = "THOPK.TXT";
-	else if (_vm->_globals._language == LANG_SP)
+	else if (_vm->_globals->_language == LANG_SP)
 		filename = "THOPKES.TXT";
 
 	byte *ptr = _vm->_fileManager->loadFile(filename);
@@ -523,7 +523,7 @@ void ComputerManager::readText(int idx) {
 	} while (curChar != '%');
 
 	_vm->_eventsManager->waitKeyPress();
-	ptr = _vm->_globals.freeMemory(ptr);
+	ptr = _vm->_globals->freeMemory(ptr);
 }
 
 /**
@@ -531,9 +531,9 @@ void ComputerManager::readText(int idx) {
  */
 void ComputerManager::displayGamesSubMenu() {
 	const byte *oldSpriteData = _vm->_objectsManager._sprite[0]._spriteData;
-	uint oldSpeed = _vm->_globals._speed;
+	uint oldSpeed = _vm->_globals->_speed;
 
-	_vm->_globals._speed = 1;
+	_vm->_globals->_speed = 1;
 	_vm->_eventsManager->changeMouseCursor(0);
 	_breakoutSpr = g_PTRNUL;
 	_vm->_eventsManager->_breakoutFl = true;
@@ -560,14 +560,14 @@ void ComputerManager::displayGamesSubMenu() {
 
 	playBreakout();
 	_vm->_graphicsManager.resetDirtyRects();
-	_breakoutSpr = _vm->_globals.freeMemory(_breakoutSpr);
-	_breakoutLevel = (int16 *)_vm->_globals.freeMemory((byte *)_breakoutLevel);
+	_breakoutSpr = _vm->_globals->freeMemory(_breakoutSpr);
+	_breakoutLevel = (int16 *)_vm->_globals->freeMemory((byte *)_breakoutLevel);
 	_vm->_objectsManager._sprite[0]._spriteData = oldSpriteData;
 
 	_vm->_soundManager.removeSample(1);
 	_vm->_soundManager.removeSample(2);
 	_vm->_soundManager.removeSample(3);
-	_vm->_globals._speed = oldSpeed;
+	_vm->_globals->_speed = oldSpeed;
 	_vm->_eventsManager->_breakoutFl = false;
 	setVideoMode();
 	setTextColor(15);
@@ -581,7 +581,7 @@ void ComputerManager::displayGamesSubMenu() {
  * Load Highscore from file
  */
 void ComputerManager::loadHiscore() {
-	byte *ptr = _vm->_globals.allocMemory(100);
+	byte *ptr = _vm->_globals->allocMemory(100);
 	_vm->_saveLoadManager.load("HISCORE.DAT", ptr);
 
 	for (int scoreIndex = 0; scoreIndex < 6; ++scoreIndex) {
@@ -600,7 +600,7 @@ void ComputerManager::loadHiscore() {
 		}
 	}
 
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 	_breakoutHiscore = atol(_score[5]._score.c_str());
 }
 
@@ -626,7 +626,7 @@ void ComputerManager::newLevel() {
 		_breakoutLives = 11;
 	_vm->_graphicsManager.loadVgaImage("CASSEF.PCX");
 	displayLives();
-	_breakoutLevel = (int16 *)_vm->_globals.freeMemory((byte *)_breakoutLevel);
+	_breakoutLevel = (int16 *)_vm->_globals->freeMemory((byte *)_breakoutLevel);
 
 	++_breakoutLevelNbr;
 	Common::String file;
@@ -850,7 +850,7 @@ int ComputerManager::displayHiscores() {
 
 	_vm->_eventsManager->mouseOff();
 	_vm->_graphicsManager.fadeOutBreakout();
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 	return buttonIndex;
 }
 
@@ -893,7 +893,7 @@ void ComputerManager::getScoreName() {
 		_score[5]._score.setChar(score[i], scorePos--);
 	}
 	_vm->_graphicsManager.fadeOutBreakout();
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 	saveScore();
 }
 
@@ -970,7 +970,7 @@ void ComputerManager::saveScore() {
 		}
 	}
 
-	byte *ptr = _vm->_globals.allocMemory(100);
+	byte *ptr = _vm->_globals->allocMemory(100);
 	memset(ptr, 0, 99);
 	for (int scorePlaceIdx = 0; scorePlaceIdx <= 5; scorePlaceIdx++) {
 		int curBufPtr = 16 * scorePlaceIdx;
@@ -993,7 +993,7 @@ void ComputerManager::saveScore() {
 	}
 
 	_vm->_saveLoadManager.saveFile("HISCORE.DAT", ptr, 100);
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 }
 
 /**
diff --git a/engines/hopkins/dialogs.cpp b/engines/hopkins/dialogs.cpp
index 7e3281e..2474aac 100644
--- a/engines/hopkins/dialogs.cpp
+++ b/engines/hopkins/dialogs.cpp
@@ -50,8 +50,8 @@ DialogsManager::DialogsManager(HopkinsEngine *vm) {
 }
 
 DialogsManager::~DialogsManager() {
-	_vm->_globals.freeMemory(_inventWin1);
-	_vm->_globals.freeMemory(_inventoryIcons);
+	_vm->_globals->freeMemory(_inventWin1);
+	_vm->_globals->freeMemory(_inventoryIcons);
 }
 
 void DialogsManager::showOptionsDialog() {
@@ -61,16 +61,16 @@ void DialogsManager::showOptionsDialog() {
 	if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
 		filename = "OPTION.SPR";
 	else {
-		if (_vm->_globals._language == LANG_FR)
+		if (_vm->_globals->_language == LANG_FR)
 			filename = "OPTIFR.SPR";
-		else if (_vm->_globals._language == LANG_EN)
+		else if (_vm->_globals->_language == LANG_EN)
 			filename = "OPTIAN.SPR";
-		else if (_vm->_globals._language == LANG_SP)
+		else if (_vm->_globals->_language == LANG_SP)
 			filename = "OPTIES.SPR";
 	}
 
-	_vm->_globals._optionDialogSpr = _vm->_fileManager->loadFile(filename);
-	_vm->_globals._optionDialogFl = true;
+	_vm->_globals->_optionDialogSpr = _vm->_fileManager->loadFile(filename);
+	_vm->_globals->_optionDialogFl = true;
 
 	int scrollOffset = _vm->_graphicsManager._scrollOffset;
 	bool doneFlag = false;
@@ -190,7 +190,7 @@ void DialogsManager::showOptionsDialog() {
 			}
 
 			if (mousePos.x >= scrollOffset + 175 && mousePos.y > 285 && mousePos.x <= scrollOffset + 281 && mousePos.y <= 310) {
-				_vm->_globals._exitId = 300;
+				_vm->_globals->_exitId = 300;
 				doneFlag = true;
 			}
 			if (mousePos.x >= scrollOffset + 355 && mousePos.y > 285 && mousePos.x <= scrollOffset + 490 && mousePos.y <= 310)
@@ -235,63 +235,63 @@ void DialogsManager::showOptionsDialog() {
 
 			// Values are blocked, thus handling the zone is useless
 			//if (mousePos.x >= _vm->_graphicsManager.ofscroll + 348 && mousePos.y > 248 && mousePos.x <= _vm->_graphicsManager.ofscroll + 394 && mousePos.y <= 273)
-			//	_vm->_globals._speed = 2;
+			//	_vm->_globals->_speed = 2;
 
 			if (   mousePos.x < scrollOffset + 165 || mousePos.x > scrollOffset + 496 
 				|| mousePos.y < 107 || mousePos.y > 318)
 				doneFlag = true;
 		}
 
-		if (_vm->_globals._speed == 1)
-			_vm->_globals._menuSpeed = 6;
-		else if (_vm->_globals._speed == 2)
-			_vm->_globals._menuSpeed = 5;
-		else if (_vm->_globals._speed == 3)
-			_vm->_globals._menuSpeed = 4;
+		if (_vm->_globals->_speed == 1)
+			_vm->_globals->_menuSpeed = 6;
+		else if (_vm->_globals->_speed == 2)
+			_vm->_globals->_menuSpeed = 5;
+		else if (_vm->_globals->_speed == 3)
+			_vm->_globals->_menuSpeed = 4;
 
-		_vm->_globals._menuTextOff = !_vm->_soundManager._textOffFl ? 7 : 8;
-		_vm->_globals._menuVoiceOff = !_vm->_soundManager._voiceOffFl ? 7 : 8;
-		_vm->_globals._menuSoundOff = !_vm->_soundManager._soundOffFl ? 7 : 8;
-		_vm->_globals._menuMusicOff = !_vm->_soundManager._musicOffFl ? 7 : 8;
+		_vm->_globals->_menuTextOff = !_vm->_soundManager._textOffFl ? 7 : 8;
+		_vm->_globals->_menuVoiceOff = !_vm->_soundManager._voiceOffFl ? 7 : 8;
+		_vm->_globals->_menuSoundOff = !_vm->_soundManager._soundOffFl ? 7 : 8;
+		_vm->_globals->_menuMusicOff = !_vm->_soundManager._musicOffFl ? 7 : 8;
 
-		_vm->_globals._menuDisplayType = 9;
+		_vm->_globals->_menuDisplayType = 9;
 
 		switch (_vm->_graphicsManager._scrollSpeed) {
 		case 1:
-			_vm->_globals._menuScrollSpeed = 12;
+			_vm->_globals->_menuScrollSpeed = 12;
 			break;
 		case 2:
-			_vm->_globals._menuScrollSpeed = 13;
+			_vm->_globals->_menuScrollSpeed = 13;
 			break;
 		case 4:
-			_vm->_globals._menuScrollSpeed = 14;
+			_vm->_globals->_menuScrollSpeed = 14;
 			break;
 		case 8:
-			_vm->_globals._menuScrollSpeed = 15;
+			_vm->_globals->_menuScrollSpeed = 15;
 			break;
 		case 16:
-			_vm->_globals._menuScrollSpeed = 16;
+			_vm->_globals->_menuScrollSpeed = 16;
 			break;
 		case 32:
-			_vm->_globals._menuScrollSpeed = 17;
+			_vm->_globals->_menuScrollSpeed = 17;
 			break;
 		case 48:
-			_vm->_globals._menuScrollSpeed = 18;
+			_vm->_globals->_menuScrollSpeed = 18;
 			break;
 		case 64:
-			_vm->_globals._menuScrollSpeed = 19;
+			_vm->_globals->_menuScrollSpeed = 19;
 			break;
 		case 128:
-			_vm->_globals._menuScrollSpeed = 20;
+			_vm->_globals->_menuScrollSpeed = 20;
 			break;
 		case 160:
-			_vm->_globals._menuScrollSpeed = 21;
+			_vm->_globals->_menuScrollSpeed = 21;
 			break;
 		case 320:
-			_vm->_globals._menuScrollSpeed = 22;
+			_vm->_globals->_menuScrollSpeed = 22;
 			break;
 		case 640:
-			_vm->_globals._menuScrollSpeed = 23;
+			_vm->_globals->_menuScrollSpeed = 23;
 			break;
 		}
 
@@ -302,12 +302,12 @@ void DialogsManager::showOptionsDialog() {
 		107, 335, 215, _vm->_graphicsManager._vesaBuffer, scrollOffset + 164, 107);
 	_vm->_graphicsManager.addDirtyRect(scrollOffset + 164, 107, scrollOffset + 498, 320);
 
-	_vm->_globals._optionDialogSpr = _vm->_globals.freeMemory(_vm->_globals._optionDialogSpr);
-	_vm->_globals._optionDialogFl = false;
+	_vm->_globals->_optionDialogSpr = _vm->_globals->freeMemory(_vm->_globals->_optionDialogSpr);
+	_vm->_globals->_optionDialogFl = false;
 }
 
 void DialogsManager::showInventory() {
-	if (_removeInventFl || _inventDisplayedFl || _vm->_globals._disableInventFl)
+	if (_removeInventFl || _inventDisplayedFl || _vm->_globals->_disableInventFl)
 		return;
 
 	_vm->_graphicsManager._scrollStatus = 1;
@@ -326,14 +326,14 @@ void DialogsManager::showInventory() {
 		loopFl = false;
 		_vm->_eventsManager->_curMouseButton = 0;
 		_vm->_eventsManager->_mouseButton = 0;
-		_vm->_globals._disableInventFl = true;
+		_vm->_globals->_disableInventFl = true;
 		_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
 
 		Common::String filename;
 		if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
 			filename = "INVENT.SPR";
 		else {
-			switch (_vm->_globals._language) {
+			switch (_vm->_globals->_language) {
 			case LANG_EN:
 				filename = "INVENTAN.SPR";
 				break;
@@ -351,7 +351,7 @@ void DialogsManager::showInventory() {
 			error("Error opening file - %s", filename.c_str());
 
 		size_t filesize = f.size();
-		_inventWin1 = _vm->_globals.allocMemory(filesize);
+		_inventWin1 = _vm->_globals->allocMemory(filesize);
 		_vm->_fileManager->readStream(f, _inventWin1, filesize);
 		f.close();
 
@@ -369,13 +369,13 @@ void DialogsManager::showInventory() {
 			int curPosX = 0;
 			for (int inventCol = 1; inventCol <= 6; inventCol++) {
 				++inventCount;
-				int inventIdx = _vm->_globals._inventory[inventCount];
+				int inventIdx = _vm->_globals->_inventory[inventCount];
 				// The last two zones are not reserved for the inventory: Options and Save/Load
 				if (inventIdx && inventCount <= 29) {
 					byte *obj = _vm->_objectsManager.loadObjectFromFile(inventIdx, false);
 					_vm->_graphicsManager.restoreSurfaceRect(_vm->_graphicsManager._vesaBuffer, obj, _inventX + curPosX + 6,
-						curPosY + 120, _vm->_globals._objectWidth, _vm->_globals._objectHeight);
-					_vm->_globals.freeMemory(obj);
+						curPosY + 120, _vm->_globals->_objectWidth, _vm->_globals->_objectHeight);
+					_vm->_globals->freeMemory(obj);
 				}
 				curPosX += 54;
 			};
@@ -407,32 +407,32 @@ void DialogsManager::showInventory() {
 			if (mouseButton == 1) {
 				if (_vm->_eventsManager->_mouseCursorId == 1 || _vm->_eventsManager->_mouseCursorId == 2 || _vm->_eventsManager->_mouseCursorId == 3 || _vm->_eventsManager->_mouseCursorId == 16 || !_vm->_eventsManager->_mouseCursorId)
 					break;
-				_vm->_objectsManager.takeInventoryObject(_vm->_globals._inventory[newInventoryItem]);
+				_vm->_objectsManager.takeInventoryObject(_vm->_globals->_inventory[newInventoryItem]);
 				if (_vm->_eventsManager->_mouseCursorId == 8)
 					break;
 
 				_vm->_scriptManager._tempObjectFl = true;
-				_vm->_globals._saveData->_data[svLastObjectIndex] = _vm->_objectsManager._curObjectIndex;
-				_vm->_globals._saveData->_data[svLastInventoryItem] = _vm->_globals._inventory[newInventoryItem];
-				_vm->_globals._saveData->_data[svLastInvMouseCursor] = _vm->_eventsManager->_mouseCursorId;
+				_vm->_globals->_saveData->_data[svLastObjectIndex] = _vm->_objectsManager._curObjectIndex;
+				_vm->_globals->_saveData->_data[svLastInventoryItem] = _vm->_globals->_inventory[newInventoryItem];
+				_vm->_globals->_saveData->_data[svLastInvMouseCursor] = _vm->_eventsManager->_mouseCursorId;
 				_vm->_objectsManager.OPTI_OBJET();
 				_vm->_scriptManager._tempObjectFl = false;
 
 				if (_vm->_soundManager._voiceOffFl) {
 					do
 						_vm->_eventsManager->refreshScreenAndEvents();
-					while (!_vm->_globals._exitId && _vm->_eventsManager->getMouseButton() != 1);
+					while (!_vm->_globals->_exitId && _vm->_eventsManager->getMouseButton() != 1);
 					_vm->_fontManager->hideText(9);
 				}
-				if (_vm->_globals._exitId) {
-					if (_vm->_globals._exitId == 2) {
-						_vm->_globals._exitId = 0;
+				if (_vm->_globals->_exitId) {
+					if (_vm->_globals->_exitId == 2) {
+						_vm->_globals->_exitId = 0;
 						break;
 					}
 
-					_vm->_globals._exitId = 0;
-					_inventBuf2 = _vm->_globals.freeMemory(_inventBuf2);
-					_inventWin1 = _vm->_globals.freeMemory(_inventWin1);
+					_vm->_globals->_exitId = 0;
+					_inventBuf2 = _vm->_globals->freeMemory(_inventBuf2);
+					_inventWin1 = _vm->_globals->freeMemory(_inventWin1);
 					loopFl = true;
 					break;
 				} else
@@ -441,7 +441,7 @@ void DialogsManager::showInventory() {
 			if (_removeInventFl)
 				break;
 			_vm->_eventsManager->refreshScreenAndEvents();
-			if (_vm->_globals._screenId >= 35 && _vm->_globals._screenId <= 40)
+			if (_vm->_globals->_screenId >= 35 && _vm->_globals->_screenId <= 40)
 				_vm->_objectsManager.handleSpecialGames();
 		}
 	} while (loopFl);
@@ -454,8 +454,8 @@ void DialogsManager::showInventory() {
 		_vm->_objectsManager.BOBTOUS = true;
 	}
 
-	_inventWin1 = _vm->_globals.freeMemory(_inventWin1);
-	_inventBuf2 = _vm->_globals.freeMemory(_inventBuf2);
+	_inventWin1 = _vm->_globals->freeMemory(_inventWin1);
+	_inventBuf2 = _vm->_globals->freeMemory(_inventBuf2);
 
 	if (_vm->_eventsManager->_mouseCursorId == 1)
 		showOptionsDialog();
@@ -468,7 +468,7 @@ void DialogsManager::showInventory() {
 	_vm->_eventsManager->changeMouseCursor(4);
 	_vm->_objectsManager._oldBorderPos = Common::Point(0, 0);
 	_vm->_objectsManager._borderPos = Common::Point(0, 0);
-	_vm->_globals._disableInventFl = false;
+	_vm->_globals->_disableInventFl = false;
 	_vm->_graphicsManager._scrollStatus = 0;
 }
 
@@ -476,7 +476,7 @@ void DialogsManager::showInventory() {
  * Inventory Animations
  */
 void DialogsManager::inventAnim() {
-	if (_vm->_globals._disableInventFl)
+	if (_vm->_globals->_disableInventFl)
 		return;
 
 	if (_vm->_objectsManager._eraseVisibleCounter && !_vm->_objectsManager._visibleFl) {
@@ -499,20 +499,20 @@ void DialogsManager::inventAnim() {
 		_vm->_objectsManager._oldInventoryPosX = newOffset;
 	}
 
-	if (_vm->_globals._saveData->_data[svField357] == 1) {
-		if (_vm->_globals._saveData->_data[svField353] == 1)
+	if (_vm->_globals->_saveData->_data[svField357] == 1) {
+		if (_vm->_globals->_saveData->_data[svField353] == 1)
 			_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager._vesaBuffer, _vm->_objectsManager._headSprites, 832, 325, 0, 0, 0, false);
-		if (_vm->_globals._saveData->_data[svField355] == 1)
+		if (_vm->_globals->_saveData->_data[svField355] == 1)
 			_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager._vesaBuffer, _vm->_objectsManager._headSprites, 866, 325, 1, 0, 0, false);
 		_vm->_graphicsManager.addDirtyRect(532, 25, 560, 60);
 		_vm->_graphicsManager.addDirtyRect(566, 25, 594, 60);
 	}
-	if (_vm->_globals._saveData->_data[svField356] == 1) {
+	if (_vm->_globals->_saveData->_data[svField356] == 1) {
 		_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager._vesaBuffer, _vm->_objectsManager._headSprites, 832, 325, 0, 0, 0, false);
 		_vm->_graphicsManager.addDirtyRect(532, 25, 560, 60);
 	}
 
-	if (_vm->_globals._saveData->_data[svField354] == 1) {
+	if (_vm->_globals->_saveData->_data[svField354] == 1) {
 		_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager._vesaBuffer, _vm->_objectsManager._headSprites, 832, 325, 0, 0, 0, false);
 		_vm->_graphicsManager.addDirtyRect(532, 25, 560, 60);
 	}
@@ -522,7 +522,7 @@ void DialogsManager::inventAnim() {
  * Test dialog opening
  */
 void DialogsManager::testDialogOpening() {
-	if (_vm->_globals._cityMapEnabledFl)
+	if (_vm->_globals->_cityMapEnabledFl)
 		_vm->_eventsManager->_gameKey = KEY_NONE;
 
 	if ((_vm->_eventsManager->_gameKey == KEY_NONE) || _inventFl)
@@ -575,8 +575,8 @@ void DialogsManager::showLoadGame() {
 	_vm->_graphicsManager.copySurface(_vm->_graphicsManager._vesaScreen, _vm->_eventsManager->_startPos.x + 183, 60, 274, 353, _vm->_graphicsManager._vesaBuffer, _vm->_eventsManager->_startPos.x + 183, 60);
 	_vm->_graphicsManager.addDirtyRect(_vm->_eventsManager->_startPos.x + 183, 60, 457, 413);
 	_vm->_objectsManager.BOBTOUS = true;
-	_vm->_objectsManager._saveLoadSprite = _vm->_globals.freeMemory(_vm->_objectsManager._saveLoadSprite);
-	_vm->_objectsManager._saveLoadSprite2 = _vm->_globals.freeMemory(_vm->_objectsManager._saveLoadSprite2);
+	_vm->_objectsManager._saveLoadSprite = _vm->_globals->freeMemory(_vm->_objectsManager._saveLoadSprite);
+	_vm->_objectsManager._saveLoadSprite2 = _vm->_globals->freeMemory(_vm->_objectsManager._saveLoadSprite2);
 	_vm->_objectsManager._saveLoadX = 0;
 	_vm->_objectsManager._saveLoadY = 0;
 
@@ -604,8 +604,8 @@ void DialogsManager::showSaveGame() {
 	_vm->_graphicsManager.copySurface(_vm->_graphicsManager._vesaScreen, _vm->_eventsManager->_startPos.x + 183, 60, 274, 353, _vm->_graphicsManager._vesaBuffer, _vm->_eventsManager->_startPos.x + 183, 60);
 	_vm->_graphicsManager.addDirtyRect(_vm->_eventsManager->_startPos.x + 183, 60, _vm->_eventsManager->_startPos.x + 457, 413);
 	_vm->_objectsManager.BOBTOUS = true;
-	_vm->_objectsManager._saveLoadSprite = _vm->_globals.freeMemory(_vm->_objectsManager._saveLoadSprite);
-	_vm->_objectsManager._saveLoadSprite2 = _vm->_globals.freeMemory(_vm->_objectsManager._saveLoadSprite2);
+	_vm->_objectsManager._saveLoadSprite = _vm->_globals->freeMemory(_vm->_objectsManager._saveLoadSprite);
+	_vm->_objectsManager._saveLoadSprite2 = _vm->_globals->freeMemory(_vm->_objectsManager._saveLoadSprite2);
 	_vm->_objectsManager._saveLoadX = 0;
 	_vm->_objectsManager._saveLoadY = 0;
 
@@ -627,7 +627,7 @@ void DialogsManager::showSaveLoad(SaveLoadMode mode) {
 	if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
 		filename = "SAVE.SPR";
 	else {
-		switch (_vm->_globals._language) {
+		switch (_vm->_globals->_language) {
 		case LANG_EN:
 			filename = "SAVEAN.SPR";
 			break;
@@ -644,7 +644,7 @@ void DialogsManager::showSaveLoad(SaveLoadMode mode) {
 	_vm->_objectsManager._saveLoadSprite2 = _vm->_objectsManager.loadSprite("SAVE2.SPR");
 	_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_objectsManager._saveLoadSprite, _vm->_eventsManager->_startPos.x + 483, 360, 0);
 
-	if (_vm->_globals._language == LANG_FR) {
+	if (_vm->_globals->_language == LANG_FR) {
 		if (mode == MODE_SAVE)
 			_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_objectsManager._saveLoadSprite, _vm->_eventsManager->_startPos.x + 525, 375, 1);
 		else if (mode == MODE_LOAD)
diff --git a/engines/hopkins/events.cpp b/engines/hopkins/events.cpp
index 0f5135b..1e1ebd5 100644
--- a/engines/hopkins/events.cpp
+++ b/engines/hopkins/events.cpp
@@ -59,8 +59,8 @@ EventsManager::EventsManager(HopkinsEngine *vm) {
 }
 
 EventsManager::~EventsManager() {
-	_vm->_globals.freeMemory(_objectBuf);
-	_vm->_globals.freeMemory(_mouseCursor);
+	_vm->_globals->freeMemory(_objectBuf);
+	_vm->_globals->freeMemory(_mouseCursor);
 }
 
 void EventsManager::initMouseData() {
@@ -77,7 +77,7 @@ void EventsManager::initMouseData() {
 		_mouseSizeY = 20;
 	}
 
-	switch (_vm->_globals._language) {
+	switch (_vm->_globals->_language) {
 	case LANG_EN:
 		if (!_mouseLinuxFl)
 			_mouseCursor = _vm->_fileManager->loadFile("SOUAN.SPR");
@@ -185,7 +185,7 @@ void EventsManager::changeMouseCursor(int id) {
 	if (_mouseCursorId == 23)
 		return;
 
-	if (id == 4 && _mouseCursorId == 4 && _vm->_globals._freezeCharacterFl)
+	if (id == 4 && _mouseCursorId == 4 && _vm->_globals->_freezeCharacterFl)
 		cursorId = 0;
 	if (cursorId == 25)
 		cursorId = 5;
@@ -364,8 +364,8 @@ void EventsManager::refreshScreenAndEvents() {
 		width = _mouseSizeX;
 		height = _mouseSizeY;
 		if (_mouseCursorId == 23) {
-			width = _vm->_globals._objectWidth;
-			height = _vm->_globals._objectHeight;
+			width = _vm->_globals->_objectWidth;
+			height = _vm->_globals->_objectHeight;
 		} else {
 			if (_breakoutFl) {
 				if (xp < _vm->_graphicsManager._minX)
@@ -392,7 +392,7 @@ void EventsManager::refreshScreenAndEvents() {
 		}
 	}
 
-	if (!_vm->_globals._linuxEndDemoFl)
+	if (!_vm->_globals->_linuxEndDemoFl)
 		_vm->_objectsManager.displaySprite();
 	if (!_mouseFl) {
 		updateCursor();
@@ -411,14 +411,14 @@ void EventsManager::refreshScreenAndEvents() {
 		_vm->_graphicsManager.addDirtyRect(xp, yp, right, bottom);
 	}
 
-	_vm->_globals._speed = 2;
+	_vm->_globals->_speed = 2;
 	bool externalLoopFl = false;
 	do {
 		while (!_vm->shouldQuit()) {
 			checkForNextFrameCounter();
 			bool innerLoopFl = false;
 
-			while (_breakoutFl || _vm->_globals.iRegul != 1) {
+			while (_breakoutFl || _vm->_globals->iRegul != 1) {
 				checkForNextFrameCounter();
 
 				if (!_breakoutFl) {
@@ -430,7 +430,7 @@ void EventsManager::refreshScreenAndEvents() {
 					break;
 				}
 			}
-			if (innerLoopFl || _vm->_globals._speed != 2)
+			if (innerLoopFl || _vm->_globals->_speed != 2)
 				break;
 			if (externalLoopFl ||_rateCounter > 9) {
 				externalLoopFl = true;
@@ -439,8 +439,8 @@ void EventsManager::refreshScreenAndEvents() {
 		}
 		if (externalLoopFl)
 			break;
-	} while (!_vm->shouldQuit() && _vm->_globals.iRegul == 3 && _rateCounter <= 15);
-	_vm->_globals._speed = 2;
+	} while (!_vm->shouldQuit() && _vm->_globals->iRegul == 3 && _rateCounter <= 15);
+	_vm->_globals->_speed = 2;
 	_rateCounter = 0;
 	if (!_vm->_graphicsManager._largeScreenFl || _vm->_graphicsManager._scrollStatus == 1) {
 		_vm->_graphicsManager.displayDirtyRects();
@@ -487,14 +487,14 @@ void EventsManager::updateCursor() {
 	Common::Rect clipBounds(_vm->_graphicsManager._minX, _vm->_graphicsManager._minY,
 		_vm->_graphicsManager._maxX, _vm->_graphicsManager._maxY);
 	_vm->_graphicsManager._minX = _vm->_graphicsManager._minY = 0;
-	_vm->_graphicsManager._maxX = _vm->_globals._objectWidth;
-	_vm->_graphicsManager._maxY = _vm->_globals._objectHeight;
+	_vm->_graphicsManager._maxX = _vm->_globals->_objectWidth;
+	_vm->_graphicsManager._maxY = _vm->_globals->_objectHeight;
 	int pitch = _vm->_graphicsManager._lineNbr2;
-	_vm->_graphicsManager._lineNbr2 = _vm->_globals._objectWidth;
+	_vm->_graphicsManager._lineNbr2 = _vm->_globals->_objectWidth;
 
 	// Create the temporary cursor surface
-	byte *cursorSurface = new byte[_vm->_globals._objectHeight * _vm->_globals._objectWidth];
-	Common::fill(cursorSurface, cursorSurface + _vm->_globals._objectHeight * _vm->_globals._objectWidth, 0);
+	byte *cursorSurface = new byte[_vm->_globals->_objectHeight * _vm->_globals->_objectWidth];
+	Common::fill(cursorSurface, cursorSurface + _vm->_globals->_objectHeight * _vm->_globals->_objectWidth, 0);
 
 	if (_mouseCursorId != 23) {
 		// Draw standard cursor
@@ -530,7 +530,7 @@ void EventsManager::updateCursor() {
 
 	// Set the ScummVM cursor from the surface
 	CursorMan.replaceCursorPalette(cursorPalette, 0, PALETTE_SIZE - 1);
-	CursorMan.replaceCursor(cursorSurface, _vm->_globals._objectWidth, _vm->_globals._objectHeight,
+	CursorMan.replaceCursor(cursorSurface, _vm->_globals->_objectWidth, _vm->_globals->_objectHeight,
 		xOffset, 0, 0, true);
 
 	// Delete the cursor surface and palette
diff --git a/engines/hopkins/files.cpp b/engines/hopkins/files.cpp
index 1d63d16..42521bd 100644
--- a/engines/hopkins/files.cpp
+++ b/engines/hopkins/files.cpp
@@ -47,7 +47,7 @@ byte *FileManager::loadFile(const Common::String &file) {
 
 	// Allocate space for the file contents
 	size_t filesize = f.size();
-	byte *data = _vm->_globals.allocMemory(filesize);
+	byte *data = _vm->_globals->allocMemory(filesize);
 	if (!data)
 		error("Error allocating space for file being loaded - %s", file.c_str());
 
@@ -68,16 +68,16 @@ int FileManager::readStream(Common::ReadStream &stream, void *buf, size_t nbytes
  * Initialize censorship based on blood.dat file
  */
 void FileManager::initCensorship() {
-	_vm->_globals._censorshipFl = false;
+	_vm->_globals->_censorshipFl = false;
 
 	// If file doesn't exist, fallback to uncensored
 	if (fileExists("BLOOD.DAT")) {
 		char *data = (char *)loadFile("BLOOD.DAT");
 
 		if ((data[6] == 'u' && data[7] == 'k') || (data[6] == 'U' && data[7] == 'K'))
-			_vm->_globals._censorshipFl = true;
+			_vm->_globals->_censorshipFl = true;
 
-		_vm->_globals.freeMemory((byte *)data);
+		_vm->_globals->freeMemory((byte *)data);
 	}
 }
 
@@ -169,7 +169,7 @@ byte *FileManager::searchCat(const Common::String &file, CatMode mode) {
 			tmpFilename = "ENG_VOI.CAT";
 		// Win95 and Linux versions uses another set of names
 		else {
-			switch (_vm->_globals._language) {
+			switch (_vm->_globals->_language) {
 			case LANG_EN:
 				tmpFilename = "RES_VAN.CAT";
 				break;
@@ -204,32 +204,32 @@ byte *FileManager::searchCat(const Common::String &file, CatMode mode) {
 		if (name == filename) {
 			// Found entry for file, so get it's details from the catalogue entry
 			const byte *pData = ptr + offsetVal;
-			_vm->_globals._catalogPos = READ_LE_UINT32(pData + 15);
-			_vm->_globals._catalogSize = READ_LE_UINT32(pData + 19);
+			_vm->_globals->_catalogPos = READ_LE_UINT32(pData + 15);
+			_vm->_globals->_catalogSize = READ_LE_UINT32(pData + 19);
 			matchFlag = true;
 		}
 
 		if (name == "FINIS") {
-			_vm->_globals.freeMemory(ptr);
+			_vm->_globals->freeMemory(ptr);
 			return g_PTRNUL;
 		}
 
 		offsetVal += 23;
 	}
 
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 
 	if (secondaryFilename != "") {
 		if (!f.open(secondaryFilename))
 			error("CHARGE_FICHIER");
 
-		f.seek(_vm->_globals._catalogPos);
+		f.seek(_vm->_globals->_catalogPos);
 
-		byte *catData = _vm->_globals.allocMemory(_vm->_globals._catalogSize);
+		byte *catData = _vm->_globals->allocMemory(_vm->_globals->_catalogSize);
 		if (catData == g_PTRNUL)
 			error("CHARGE_FICHIER");
 
-		readStream(f, catData, _vm->_globals._catalogSize);
+		readStream(f, catData, _vm->_globals->_catalogSize);
 		f.close();
 		result = catData;
 	} else {
diff --git a/engines/hopkins/font.cpp b/engines/hopkins/font.cpp
index 7985597..4885ccd 100644
--- a/engines/hopkins/font.cpp
+++ b/engines/hopkins/font.cpp
@@ -40,12 +40,12 @@ FontManager::FontManager(HopkinsEngine *vm) {
 }
 
 FontManager::~FontManager() {
-	_vm->_globals.freeMemory(_font);
-	_vm->_globals.freeMemory(_zoneText);
+	_vm->_globals->freeMemory(_font);
+	_vm->_globals->freeMemory(_zoneText);
 }
 
 void FontManager::loadZoneText() {
-	switch (_vm->_globals._language) {
+	switch (_vm->_globals->_language) {
 	case LANG_EN:
 		_zoneText = _vm->_fileManager->loadFile("ZONEAN.TXT");
 		break;
@@ -103,7 +103,7 @@ void FontManager::showText(int idx) {
 	txt._textOnFl = true;
 	txt._textLoadedFl = false;
 
-	txt._textBlock = _vm->_globals.freeMemory(txt._textBlock);
+	txt._textBlock = _vm->_globals->freeMemory(txt._textBlock);
 }
 
 /**
@@ -116,7 +116,7 @@ void FontManager::hideText(int idx) {
 	TxtItem &txt = _text[idx - 5];
 	txt._textOnFl = false;
 	txt._textLoadedFl = false;
-	txt._textBlock = _vm->_globals.freeMemory(txt._textBlock);
+	txt._textBlock = _vm->_globals->freeMemory(txt._textBlock);
 }
 
 /**
@@ -160,7 +160,7 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 		error("Bad number for text");
 	_fontFixedWidth = 11;
 
-	_vm->_globals._boxWidth = 11 * _text[idx]._length;
+	_vm->_globals->_boxWidth = 11 * _text[idx]._length;
 	if (_text[idx]._textLoadedFl) {
 		int textType = _text[idx]._textType;
 		if (textType != 6 && textType != 1 && textType != 3 && textType != 5) {
@@ -211,7 +211,7 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 			bufSize = 2048;
 			f.seek(_index[messageId]);
 
-			_tempText = _vm->_globals.allocMemory(2058);
+			_tempText = _vm->_globals->allocMemory(2058);
 			if (_tempText == g_PTRNUL)
 				error("Error allocating text");
 
@@ -220,7 +220,7 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 			f.close();
 		} else {
 			bufSize = 100;
-			_tempText = _vm->_globals.allocMemory(110);
+			_tempText = _vm->_globals->allocMemory(110);
 			Common::fill(&_tempText[0], &_tempText[110], 0);
 			memcpy(_tempText, _zoneText + _index[messageId], 96);
 			WRITE_LE_UINT16((uint16 *)_tempText + 48, READ_LE_INT16(_zoneText + _index[messageId] + 96));
@@ -254,29 +254,29 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 
 		if (bufSize && bufSize > textLength) {
 			_text[idx]._length = textLength;
-			_vm->_globals._boxWidth = 0;
+			_vm->_globals->_boxWidth = 0;
 
 			for (int curStrIdx = 0; curStrIdx < textLength + 1; curStrIdx++) {
 				byte curChar = _tempText[curStrIdx];
 				if (curChar <= 31)
 					curChar = ' ';
-				_vm->_globals._boxWidth += _vm->_objectsManager.getWidth(_font, curChar - 32);
+				_vm->_globals->_boxWidth += _vm->_objectsManager.getWidth(_font, curChar - 32);
 			}
 
-			_vm->_globals._boxWidth += 2;
-			_text[idx]._pos.x = 320 - abs(_vm->_globals._boxWidth / 2);
+			_vm->_globals->_boxWidth += 2;
+			_text[idx]._pos.x = 320 - abs(_vm->_globals->_boxWidth / 2);
 			textPosX = _vm->_eventsManager->_startPos.x + _text[idx]._pos.x;
 			lineCount = 1;
 			_text[idx]._lines[0] = Common::String((const char *)_tempText, textLength);
 		} else {
-			if (!_vm->_globals._boxWidth)
-				_vm->_globals._boxWidth = 240;
+			if (!_vm->_globals->_boxWidth)
+				_vm->_globals->_boxWidth = 240;
 			int tempTextIdx = 0;
 			int lineSize;
 			byte curChar;
 			do {
 				int curLineSize = 0;
-				int ptrb = _vm->_globals._boxWidth - 4;
+				int ptrb = _vm->_globals->_boxWidth - 4;
 				for (;;) {
 					lineSize = curLineSize;
 					do
@@ -330,12 +330,12 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 
 			for (int i = 0; i <= 19; i++) {
 				if (_textSortArray[i])
-					_vm->_globals._boxWidth = _textSortArray[i];
+					_vm->_globals->_boxWidth = _textSortArray[i];
 			}
 
 			if ((_text[idx]._textType < 2) || (_text[idx]._textType > 3)) {
 				int i;
-				for (i = xp - _vm->_eventsManager->_startPos.x; _vm->_globals._boxWidth + i > 638 && i > -2 && _text[idx]._textType; i -= 2)
+				for (i = xp - _vm->_eventsManager->_startPos.x; _vm->_globals->_boxWidth + i > 638 && i > -2 && _text[idx]._textType; i -= 2)
 					;
 				_text[idx]._pos.x = i;
 				textPosX = _vm->_eventsManager->_startPos.x + i;
@@ -345,7 +345,7 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 		}
 		int posX = textPosX;
 		int posY = yp;
-		int saveWidth = _vm->_globals._boxWidth + 10;
+		int saveWidth = _vm->_globals->_boxWidth + 10;
 		int saveHeight = (_fontFixedHeight + 1) * lineCount + 12;
 		if (_text[idx]._textType == 6) {
 			_text[idx]._pos.x = 315 - abs(saveWidth / 2);
@@ -355,14 +355,14 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 		int textType = _text[idx]._textType;
 		if (textType == 1 || textType == 3 || textType == 5 || textType == 6) {
 			int size = saveHeight * saveWidth;
-			byte *ptrd = _vm->_globals.allocMemory(size);
+			byte *ptrd = _vm->_globals->allocMemory(size);
 			if (ptrd == g_PTRNUL)
 				error("Cutting a block for text box (%d)", size);
 
 			_vm->_graphicsManager.copySurfaceRect(_vm->_graphicsManager._vesaBuffer, ptrd, posX, posY, saveWidth, saveHeight);
 			_vm->_graphicsManager.Trans_bloc2(ptrd, _vm->_graphicsManager._colorTable, size);
 			_vm->_graphicsManager.restoreSurfaceRect(_vm->_graphicsManager._vesaBuffer, ptrd, posX, posY, saveWidth, saveHeight);
-			_vm->_globals.freeMemory(ptrd);
+			_vm->_globals->freeMemory(ptrd);
 
 			_vm->_graphicsManager.drawHorizontalLine(_vm->_graphicsManager._vesaBuffer, posX, posY, saveWidth, (byte)-2);
 			_vm->_graphicsManager.drawHorizontalLine(_vm->_graphicsManager._vesaBuffer, posX, saveHeight + posY, saveWidth, (byte)-2);
@@ -384,9 +384,9 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 		_text[idx]._height = blockHeight;
 		textType = _text[idx]._textType;
 		if (textType == 6 || textType == 1 || textType == 3 || textType == 5) {
-			_text[idx]._textBlock = _vm->_globals.freeMemory(_text[idx]._textBlock);
+			_text[idx]._textBlock = _vm->_globals->freeMemory(_text[idx]._textBlock);
 			int blockSize = blockHeight * blockWidth;
-			byte *ptre = _vm->_globals.allocMemory(blockSize + 20);
+			byte *ptre = _vm->_globals->allocMemory(blockSize + 20);
 			if (ptre == g_PTRNUL)
 				error("Cutting a block for text box (%d)", blockSize);
 
@@ -395,7 +395,7 @@ void FontManager::box(int idx, int messageId, const Common::String &filename, in
 			_text[idx]._height = blockHeight;
 			_vm->_graphicsManager.copySurfaceRect(_vm->_graphicsManager._vesaBuffer, _text[idx]._textBlock, posX, posY, _text[idx]._width, blockHeight);
 		}
-		_tempText = _vm->_globals.freeMemory(_tempText);
+		_tempText = _vm->_globals->freeMemory(_tempText);
 	}
 }
 
@@ -478,12 +478,12 @@ void FontManager::renderTextDisplay(int xp, int yp, const Common::String &msg, i
 			charEndPosX += charWidth;
 			_vm->_graphicsManager.addDirtyRect(charStartPosX, yp, charEndPosX, yp + 12);
 			if (_vm->_eventsManager->_escKeyFl) {
-				_vm->_globals.iRegul = 1;
+				_vm->_globals->iRegul = 1;
 				_vm->_eventsManager->refreshScreenAndEvents();
 			} else {
-				_vm->_globals.iRegul = 4;
+				_vm->_globals->iRegul = 4;
 				_vm->_eventsManager->refreshScreenAndEvents();
-				_vm->_globals.iRegul = 1;
+				_vm->_globals->iRegul = 1;
 			}
 		}
 		curChar = *srcP++;
diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp
index 6c10807..fb0dbf3 100644
--- a/engines/hopkins/globals.cpp
+++ b/engines/hopkins/globals.cpp
@@ -62,7 +62,9 @@ const int HOPKINS_PERSO_2[] = {
 		0, 2, 0, 2, 0, 2, 0, 1, 0, 2, 0, 2
 };
 
-Globals::Globals() {
+Globals::Globals(HopkinsEngine *vm) {
+	_vm = vm;
+
 	// Set up the special g_PTRNUL variable
 	g_PTRNUL = (byte *)malloc(16);
 	strcpy((char *)g_PTRNUL, "POINTERNULL");
@@ -187,10 +189,6 @@ Globals::~Globals() {
 	free(g_PTRNUL);
 }
 
-void Globals::setParent(HopkinsEngine *vm) {
-	_vm = vm;
-}
-
 void Globals::setConfig() {
 	// CHECKME: Should be in Globals() but it doesn't work
 	// The Polish version is a translation of the English version. The filenames are the same.
diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h
index c0b7130..026b85c 100644
--- a/engines/hopkins/globals.h
+++ b/engines/hopkins/globals.h
@@ -314,9 +314,8 @@ public:
 	int Compteur;
 	int compteur_71;
 
-	Globals();
+	Globals(HopkinsEngine *vm);
 	~Globals();
-	void setParent(HopkinsEngine *vm);
 	byte *allocMemory(int count);
 	byte *freeMemory(byte *p);
 	void setConfig();
diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp
index 870599d..4ae251f 100644
--- a/engines/hopkins/graphics.cpp
+++ b/engines/hopkins/graphics.cpp
@@ -78,9 +78,9 @@ GraphicsManager::GraphicsManager() {
 }
 
 GraphicsManager::~GraphicsManager() {
-	_vm->_globals.freeMemory(_vesaScreen);
-	_vm->_globals.freeMemory(_vesaBuffer);
-	_vm->_globals.freeMemory(_screenBuffer);
+	_vm->_globals->freeMemory(_vesaScreen);
+	_vm->_globals->freeMemory(_vesaBuffer);
+	_vm->_globals->freeMemory(_screenBuffer);
 }
 
 void GraphicsManager::setParent(HopkinsEngine *vm) {
@@ -105,9 +105,9 @@ void GraphicsManager::setGraphicalMode(int width, int height) {
 		initGraphics(width, height, true, &pixelFormat16);
 
 		// Init surfaces
-		_vesaScreen = _vm->_globals.allocMemory(SCREEN_WIDTH * 2 * SCREEN_HEIGHT);
-		_vesaBuffer = _vm->_globals.allocMemory(SCREEN_WIDTH * 2 * SCREEN_HEIGHT);
-		_screenBuffer = _vm->_globals.allocMemory(SCREEN_WIDTH * 2 * SCREEN_HEIGHT);
+		_vesaScreen = _vm->_globals->allocMemory(SCREEN_WIDTH * 2 * SCREEN_HEIGHT);
+		_vesaBuffer = _vm->_globals->allocMemory(SCREEN_WIDTH * 2 * SCREEN_HEIGHT);
+		_screenBuffer = _vm->_globals->allocMemory(SCREEN_WIDTH * 2 * SCREEN_HEIGHT);
 
 		_videoPtr = NULL;
 		_screenWidth = width;
@@ -312,7 +312,7 @@ void GraphicsManager::loadPCX640(byte *surface, const Common::String &file, byte
 		// Load PCX from within the PIC resource
 		if (!f.open("PIC.RES"))
 			error("Error opening PIC.RES.");
-		f.seek(_vm->_globals._catalogPos);
+		f.seek(_vm->_globals->_catalogPos);
 	} else {
 		// Load stand alone PCX file
 		if (!f.open(file))
@@ -345,7 +345,7 @@ void GraphicsManager::loadPCX320(byte *surface, const Common::String &file, byte
 
 	f.read(surface, 128);
 	int imageSize = filesize - 896;
-	byte *ptr = _vm->_globals.allocMemory(65024);
+	byte *ptr = _vm->_globals->allocMemory(65024);
 	size_t curBufSize;
 	int imageNumb;
 	int imageDataSize;
@@ -396,7 +396,7 @@ void GraphicsManager::loadPCX320(byte *surface, const Common::String &file, byte
 	f.read(palette, 768);
 	f.close();
 
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 }
 
 // Clear Palette
@@ -1063,7 +1063,7 @@ void GraphicsManager::Sprite_Vesa(byte *surface, const byte *spriteData, int xp,
 
 void GraphicsManager::endDisplayBob() {
 	for (int idx = 1; idx <= 20; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			_vm->_objectsManager.hideBob(idx);
 	}
 
@@ -1071,22 +1071,22 @@ void GraphicsManager::endDisplayBob() {
 	_vm->_eventsManager->refreshScreenAndEvents();
 
 	for (int idx = 1; idx <= 20; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			_vm->_objectsManager.resetBob(idx);
 	}
 
 	for (int idx = 1; idx <= 29; ++idx) {
-		_vm->_globals._lockedAnims[idx]._enableFl = false;
+		_vm->_globals->_lockedAnims[idx]._enableFl = false;
 	}
 
 	for (int idx = 1; idx <= 20; ++idx) {
-		_vm->_globals._animBqe[idx]._enabledFl = false;
+		_vm->_globals->_animBqe[idx]._enabledFl = false;
 	}
 }
 
 void GraphicsManager::displayAllBob() {
 	for (int idx = 1; idx <= 20; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			_vm->_objectsManager.displayBob(idx);
 	}
 }
@@ -1747,13 +1747,13 @@ void GraphicsManager::initScreen(const Common::String &file, int mode, bool init
 	}
 	if (!mode) {
 		filename = file + ".spr";
-		_vm->_globals.SPRITE_ECRAN = _vm->_globals.freeMemory(_vm->_globals.SPRITE_ECRAN);
+		_vm->_globals->SPRITE_ECRAN = _vm->_globals->freeMemory(_vm->_globals->SPRITE_ECRAN);
 		if (initializeScreen) {
-			_vm->_globals.SPRITE_ECRAN = _vm->_fileManager->searchCat(filename, RES_SLI);
-			if (_vm->_globals.SPRITE_ECRAN) {
-				_vm->_globals.SPRITE_ECRAN = _vm->_fileManager->loadFile(filename);
+			_vm->_globals->SPRITE_ECRAN = _vm->_fileManager->searchCat(filename, RES_SLI);
+			if (_vm->_globals->SPRITE_ECRAN) {
+				_vm->_globals->SPRITE_ECRAN = _vm->_fileManager->loadFile(filename);
 			} else {
-				_vm->_globals.SPRITE_ECRAN = _vm->_fileManager->loadFile("RES_SLI.RES");
+				_vm->_globals->SPRITE_ECRAN = _vm->_fileManager->loadFile("RES_SLI.RES");
 			}
 		}
 	}
@@ -1780,15 +1780,15 @@ void GraphicsManager::initScreen(const Common::String &file, int mode, bool init
 				doneFlag = true;
 		} while (!doneFlag);
 	}
-	_vm->_globals.freeMemory(ptr);
-	_vm->_globals._answerBuffer = _vm->_globals.freeMemory(_vm->_globals._answerBuffer);
+	_vm->_globals->freeMemory(ptr);
+	_vm->_globals->_answerBuffer = _vm->_globals->freeMemory(_vm->_globals->_answerBuffer);
 
 	filename = file + ".rep";
 	byte *dataP = _vm->_fileManager->searchCat(filename, RES_REP);
 	if (dataP == g_PTRNUL)
 		dataP = _vm->_fileManager->loadFile(filename);
 
-	_vm->_globals._answerBuffer = dataP;
+	_vm->_globals->_answerBuffer = dataP;
 	_vm->_objectsManager._forceZoneFl = true;
 	_vm->_objectsManager._changeVerbFl = false;
 }
diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp
index 1742294..01c67f6 100644
--- a/engines/hopkins/hopkins.cpp
+++ b/engines/hopkins/hopkins.cpp
@@ -47,8 +47,8 @@ HopkinsEngine::HopkinsEngine(OSystem *syst, const HopkinsGameDescription *gameDe
 	_eventsManager = new EventsManager(this);
 	_fileManager = new FileManager(this);
 	_fontManager = new FontManager(this);
+	_globals = new Globals(this);
 
-	_globals.setParent(this);
 	_graphicsManager.setParent(this);
 	_linesManager.setParent(this);
 	_menuManager.setParent(this);
@@ -60,6 +60,7 @@ HopkinsEngine::HopkinsEngine(OSystem *syst, const HopkinsGameDescription *gameDe
 }
 
 HopkinsEngine::~HopkinsEngine() {
+	delete _globals;
 	delete _fontManager;
 	delete _fileManager;
 	delete _eventsManager;
@@ -77,14 +78,14 @@ Common::String HopkinsEngine::generateSaveName(int slot) {
  * Returns true if it is currently okay to restore a game
  */
 bool HopkinsEngine::canLoadGameStateCurrently() {
-	return !_globals._exitId && !_globals._cityMapEnabledFl && _eventsManager->_mouseFl;
+	return !_globals->_exitId && !_globals->_cityMapEnabledFl && _eventsManager->_mouseFl;
 }
 
 /**
  * Returns true if it is currently okay to save the game
  */
 bool HopkinsEngine::canSaveGameStateCurrently() {
-	return !_globals._exitId && !_globals._cityMapEnabledFl && _eventsManager->_mouseFl;
+	return !_globals->_exitId && !_globals->_cityMapEnabledFl && _eventsManager->_mouseFl;
 }
 
 /**
@@ -104,7 +105,7 @@ Common::Error HopkinsEngine::saveGameState(int slot, const Common::String &desc)
 Common::Error HopkinsEngine::run() {
 	_saveLoadManager.initSaves();
 
-	_globals.setConfig();
+	_globals->setConfig();
 	_fileManager->initCensorship();
 	initializeSystem();
 
@@ -123,12 +124,12 @@ Common::Error HopkinsEngine::run() {
 }
 
 bool HopkinsEngine::runWin95Demo() {
-	_globals.loadObjects();
+	_globals->loadObjects();
 	_objectsManager.changeObject(14);
 	_objectsManager.addObject(14);
 	_objectsManager._helicopterFl = false;
 
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 
 	_graphicsManager.lockScreen();
 	_graphicsManager.clearScreen();
@@ -142,39 +143,39 @@ bool HopkinsEngine::runWin95Demo() {
 		playIntro();
 
 	_eventsManager->_rateCounter = 0;
-	_globals.iRegul = 1;
-	_globals._speed = 1;
+	_globals->iRegul = 1;
+	_globals->_speed = 1;
 
 	for (int i = 1; i < 50; i++) {
 		_graphicsManager.copySurface(_graphicsManager._vesaScreen, 0, 0, 640, 440, _graphicsManager._vesaBuffer, 0, 0);
 		_eventsManager->refreshScreenAndEvents();
 	}
 
-	_globals.iRegul = 0;
+	_globals->iRegul = 0;
 	if (_eventsManager->_rateCounter > 475)
-		_globals._speed = 2;
+		_globals->_speed = 2;
 	if (_eventsManager->_rateCounter > 700)
-		_globals._speed = 3;
+		_globals->_speed = 3;
 	_graphicsManager.fadeOutLong();
-	_globals.iRegul = 1;
-	_globals.PERSO = _fileManager->loadFile("PERSO.SPR");
-	_globals._characterType = 0;
+	_globals->iRegul = 1;
+	_globals->PERSO = _fileManager->loadFile("PERSO.SPR");
+	_globals->_characterType = 0;
 	_objectsManager._mapCarPosX = _objectsManager._mapCarPosY = 0;
-	memset(_globals._saveData, 0, 2000);
-	_globals._exitId = 0;
+	memset(_globals->_saveData, 0, 2000);
+	_globals->_exitId = 0;
 
 	if (getLanguage() != Common::PL_POL)
 		if (!displayAdultDisclaimer())
 			return Common::kNoError;
 
 	for (;;) {
-		if (_globals._exitId == 300)
-			_globals._exitId = 0;
+		if (_globals->_exitId == 300)
+			_globals->_exitId = 0;
 
-		if (!_globals._exitId) {
-			_globals._exitId = _menuManager.menu();
-			if (_globals._exitId == -1) {
-				_globals.PERSO = _globals.freeMemory(_globals.PERSO);
+		if (!_globals->_exitId) {
+			_globals->_exitId = _menuManager.menu();
+			if (_globals->_exitId == -1) {
+				_globals->PERSO = _globals->freeMemory(_globals->PERSO);
 				restoreSystem();
 				return false;
 			}
@@ -183,36 +184,36 @@ bool HopkinsEngine::runWin95Demo() {
 		if (shouldQuit())
 			return false;
 
-		switch (_globals._exitId) {
+		switch (_globals->_exitId) {
 		case 1:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM01", "IM01", "ANIM01", "IM01", 2, true);
 			break;
 
 		case 3:
-			if (!_globals._saveData->_data[svBankAttackAnimPlayedFl]) {
+			if (!_globals->_saveData->_data[svBankAttackAnimPlayedFl]) {
 				_soundManager.playSound(3);
 				if (getPlatform() == Common::kPlatformOS2 || getPlatform() == Common::kPlatformBeOS)
 					_graphicsManager.loadImage("fond");
 				else {
-					if (_globals._language == LANG_FR)
+					if (_globals->_language == LANG_FR)
 						_graphicsManager.loadImage("fondfr");
-					else if (_globals._language == LANG_EN)
+					else if (_globals->_language == LANG_EN)
 						_graphicsManager.loadImage("fondan");
-					else if (_globals._language == LANG_SP)
+					else if (_globals->_language == LANG_SP)
 						_graphicsManager.loadImage("fondes");
 				}
 				_graphicsManager.fadeInLong();
 				_eventsManager->delay(500);
 				_graphicsManager.fadeOutLong();
-				_globals.iRegul = 1;
+				_globals->iRegul = 1;
 				_soundManager._specialSoundNum = 2;
 				_graphicsManager.lockScreen();
 				_graphicsManager.clearScreen();
 				_graphicsManager.unlockScreen();
 				_graphicsManager.clearPalette();
-				if (!_globals._censorshipFl)
+				if (!_globals->_censorshipFl)
 					_animationManager->playAnim("BANQUE.ANM", 200, 28, 200);
 				else
 					_animationManager->playAnim("BANKUK.ANM", 200, 28, 200);
@@ -222,25 +223,25 @@ bool HopkinsEngine::runWin95Demo() {
 				_soundManager.removeSample(3);
 				_soundManager.removeSample(4);
 				_graphicsManager.fadeOutLong();
-				_globals._saveData->_data[svBankAttackAnimPlayedFl] = 1;
+				_globals->_saveData->_data[svBankAttackAnimPlayedFl] = 1;
 			}
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM03", "IM03", "ANIM03", "IM03", 2, false);
 			break;
 
 		case 4:
-			_globals._disableInventFl = true;
+			_globals->_disableInventFl = true;
 			_objectsManager.handleCityMap();
-			_globals._disableInventFl = false;
+			_globals->_disableInventFl = false;
 			break;
 
 		case 5:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 455;
+			_globals->_characterMaxPosY = 455;
 
-			if (_globals._saveData->_data[svFreedHostageFl]) {
-				if (_globals._saveData->_data[svFreedHostageFl] == 1)
+			if (_globals->_saveData->_data[svFreedHostageFl]) {
+				if (_globals->_saveData->_data[svFreedHostageFl] == 1)
 					_objectsManager.PERSONAGE2("IM05", "IM05A", "ANIM05B", "IM05", 3, false);
 			} else {
 				_objectsManager.PERSONAGE2("IM05", "IM05", "ANIM05", "IM05", 3, false);
@@ -249,12 +250,12 @@ bool HopkinsEngine::runWin95Demo() {
 
 		case 6:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 460;
+			_globals->_characterMaxPosY = 460;
 			_objectsManager.PERSONAGE2("IM06", "IM06", "ANIM06", "IM06", 2, true);
 			break;
 
 		case 7:
-			if (_globals._saveData->_data[svBombBoxOpenedFl])
+			if (_globals->_saveData->_data[svBombBoxOpenedFl])
 				_objectsManager.PERSONAGE("BOMBEB", "BOMBE", "BOMBE", "BOMBE", 2, true);
 			else
 				_objectsManager.PERSONAGE("BOMBEA", "BOMBE", "BOMBE", "BOMBE", 2, true);
@@ -262,14 +263,14 @@ bool HopkinsEngine::runWin95Demo() {
 
 		case 8:
 			_linesManager.setMaxLineIdx(15);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM08", "IM08", "ANIM08", "IM08", 2, true);
 			break;
 
 		case 9:
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_linesManager.setMaxLineIdx(20);
-			if (_globals._saveData->_data[svBombDisarmedFl])
+			if (_globals->_saveData->_data[svBombDisarmedFl])
 			  _objectsManager.PERSONAGE2("IM09", "IM09", "ANIM09", "IM09", 10, true);
 			else
 			  bombExplosion();
@@ -281,15 +282,15 @@ bool HopkinsEngine::runWin95Demo() {
 
 		case 11:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM11", "IM11", "ANIM11", "IM11", 2, false);
 			break;
 
 		case 12:
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_linesManager.setMaxLineIdx(20);
-			if (_globals._saveData->_data[svBombDisarmedFl]) {
-				if (_globals._language == LANG_FR)
+			if (_globals->_saveData->_data[svBombDisarmedFl]) {
+				if (_globals->_language == LANG_FR)
 					_graphicsManager.loadImage("ENDFR");
 				else
 					_graphicsManager.loadImage("ENDUK");
@@ -338,11 +339,11 @@ bool HopkinsEngine::runWin95Demo() {
 			break;
 
 		case 113:
-			_globals._exitId = 0;
-			_globals._prevScreenId = _globals._screenId;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._screenId;
-			_globals._screenId = 113;
-			_globals._saveData->_data[svLastScreenId] = _globals._screenId;
+			_globals->_exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_screenId;
+			_globals->_screenId = 113;
+			_globals->_saveData->_data[svLastScreenId] = _globals->_screenId;
 			_computerManager->showComputer(COMPUTER_HOPKINS);
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -355,11 +356,11 @@ bool HopkinsEngine::runWin95Demo() {
 			break;
 
 		case 114:
-			_globals._prevScreenId = _globals._screenId;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._screenId;
-			_globals._screenId = 114;
-			_globals._saveData->_data[svLastScreenId] = _globals._screenId;
-			_globals._exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_screenId;
+			_globals->_screenId = 114;
+			_globals->_saveData->_data[svLastScreenId] = _globals->_screenId;
+			_globals->_exitId = 0;
 			_computerManager->showComputer(COMPUTER_SAMANTHA);
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -367,11 +368,11 @@ bool HopkinsEngine::runWin95Demo() {
 			break;
 
 		case 115:
-			_globals._exitId = 0;
-			_globals._prevScreenId = _globals._screenId;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._screenId;
-			_globals._screenId = 115;
-			_globals._saveData->_data[svLastScreenId] = _globals._screenId;
+			_globals->_exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_screenId;
+			_globals->_screenId = 115;
+			_globals->_saveData->_data[svLastScreenId] = _globals->_screenId;
 			_computerManager->showComputer(COMPUTER_PUBLIC);
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -380,19 +381,19 @@ bool HopkinsEngine::runWin95Demo() {
 
 		case 150:
 			_soundManager.playSound(28);
-			_globals.iRegul = 4; // CHECKME!
+			_globals->iRegul = 4; // CHECKME!
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
 			_graphicsManager.unlockScreen();
 			_graphicsManager.clearPalette();
 			_animationManager->playAnim("JOUR1A.anm", 12, 12, 2000);
-			_globals.iRegul = 0;
-			_globals._exitId = 300;
+			_globals->iRegul = 0;
+			_globals->_exitId = 300;
 			break;
 
 		case 151:
 			_soundManager.playSound(28);
-			_globals.iRegul = 4; // CHECKME!
+			_globals->iRegul = 4; // CHECKME!
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
 			_graphicsManager.unlockScreen();
@@ -401,20 +402,20 @@ bool HopkinsEngine::runWin95Demo() {
 			_graphicsManager.fadeInLong();
 			_eventsManager->delay(5000);
 			_graphicsManager.fadeOutLong();
-			_globals._exitId = 300;
-			_globals.iRegul = 0;
+			_globals->_exitId = 300;
+			_globals->iRegul = 0;
 			break;
 
 		case 152:
 			_soundManager.playSound(28);
-			_globals.iRegul = 4; // CHECKME!
+			_globals->iRegul = 4; // CHECKME!
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
 			_graphicsManager.unlockScreen();
 			_graphicsManager.clearPalette();
 			_animationManager->playAnim("JOUR4A.anm", 12, 12, 2000);
-			_globals.iRegul = 0;
-			_globals._exitId = 300;
+			_globals->iRegul = 0;
+			_globals->_exitId = 300;
 			break;
 		}
 	}
@@ -422,7 +423,7 @@ bool HopkinsEngine::runWin95Demo() {
 }
 
 bool HopkinsEngine::runLinuxDemo() {
-	_globals.loadObjects();
+	_globals->loadObjects();
 	_objectsManager.changeObject(14);
 	_objectsManager.addObject(14);
 	_objectsManager._helicopterFl = false;
@@ -446,23 +447,23 @@ bool HopkinsEngine::runLinuxDemo() {
 	if (!_eventsManager->_escKeyFl)
 		playIntro();
 
-	_globals.iRegul = 0;
-	_globals.PERSO = _fileManager->loadFile("PERSO.SPR");
-	_globals._characterType = 0;
+	_globals->iRegul = 0;
+	_globals->PERSO = _fileManager->loadFile("PERSO.SPR");
+	_globals->_characterType = 0;
 	_objectsManager._mapCarPosX = _objectsManager._mapCarPosY = 0;
-	memset(_globals._saveData, 0, 2000);
-	_globals._exitId = 0;
+	memset(_globals->_saveData, 0, 2000);
+	_globals->_exitId = 0;
 
 	for (;;) {
-		if (_globals._exitId == 300)
-			_globals._exitId = 0;
+		if (_globals->_exitId == 300)
+			_globals->_exitId = 0;
 
-		if (!_globals._exitId) {
-			_globals._exitId = _menuManager.menu();
-			if (_globals._exitId == -1) {
+		if (!_globals->_exitId) {
+			_globals->_exitId = _menuManager.menu();
+			if (_globals->_exitId == -1) {
 				if (!shouldQuit())
 					endLinuxDemo();
-				_globals.PERSO = _globals.freeMemory(_globals.PERSO);
+				_globals->PERSO = _globals->freeMemory(_globals->PERSO);
 				restoreSystem();
 			}
 		}
@@ -470,7 +471,7 @@ bool HopkinsEngine::runLinuxDemo() {
 		if (shouldQuit())
 			return false;
 
-		switch (_globals._exitId) {
+		switch (_globals->_exitId) {
 		case 17:
 		case 18:
 		case 19:
@@ -491,27 +492,27 @@ bool HopkinsEngine::runLinuxDemo() {
 
 		case 1:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM01", "IM01", "ANIM01", "IM01", 1, true);
 			break;
 
 		case 3:
-			if (!_globals._saveData->_data[svBankAttackAnimPlayedFl]) {
+			if (!_globals->_saveData->_data[svBankAttackAnimPlayedFl]) {
 				_soundManager.playSound(3);
 				if (getPlatform() == Common::kPlatformOS2 || getPlatform() == Common::kPlatformBeOS)
 					_graphicsManager.loadImage("fond");
 				else {
-					if (_globals._language == LANG_FR)
+					if (_globals->_language == LANG_FR)
 						_graphicsManager.loadImage("fondfr");
-					else if (_globals._language == LANG_EN)
+					else if (_globals->_language == LANG_EN)
 						_graphicsManager.loadImage("fondan");
-					else if (_globals._language == LANG_SP)
+					else if (_globals->_language == LANG_SP)
 						_graphicsManager.loadImage("fondes");
 				}
 				_graphicsManager.fadeInLong();
 				_eventsManager->delay(500);
 				_graphicsManager.fadeOutLong();
-				_globals.iRegul = 1;
+				_globals->iRegul = 1;
 				_soundManager._specialSoundNum = 2;
 
 				_graphicsManager.lockScreen();
@@ -520,7 +521,7 @@ bool HopkinsEngine::runLinuxDemo() {
 				_graphicsManager.clearPalette();
 				_graphicsManager.FADE_LINUX = 2;
 
-				if (!_globals._censorshipFl)
+				if (!_globals->_censorshipFl)
 					_animationManager->playAnim("BANQUE.ANM", 200, 28, 200);
 				else
 					_animationManager->playAnim("BANKUK.ANM", 200, 28, 200);
@@ -529,24 +530,24 @@ bool HopkinsEngine::runLinuxDemo() {
 				_soundManager.removeSample(2);
 				_soundManager.removeSample(3);
 				_soundManager.removeSample(4);
-				_globals._saveData->_data[svBankAttackAnimPlayedFl] = 1;
+				_globals->_saveData->_data[svBankAttackAnimPlayedFl] = 1;
 			}
 
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM03", "IM03", "ANIM03", "IM03", 2, false);
 			break;
 
 		case 4:
-			_globals._disableInventFl = true;
+			_globals->_disableInventFl = true;
 			_objectsManager.handleCityMap();
-			_globals._disableInventFl = false;
+			_globals->_disableInventFl = false;
 			break;
 
 		case 5:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 455;
-			if (_globals._saveData->_data[svFreedHostageFl] == 1)
+			_globals->_characterMaxPosY = 455;
+			if (_globals->_saveData->_data[svFreedHostageFl] == 1)
 					_objectsManager.PERSONAGE2("IM05", "IM05A", "ANIM05B", "IM05", 3, false);
 			else
 				_objectsManager.PERSONAGE2("IM05", "IM05", "ANIM05", "IM05", 3, false);
@@ -554,12 +555,12 @@ bool HopkinsEngine::runLinuxDemo() {
 
 		case 6:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 460;
+			_globals->_characterMaxPosY = 460;
 			_objectsManager.PERSONAGE2("IM06", "IM06", "ANIM06", "IM06", 2, true);
 			break;
 
 		case 7:
-			if (_globals._saveData->_data[svBombBoxOpenedFl])
+			if (_globals->_saveData->_data[svBombBoxOpenedFl])
 				_objectsManager.PERSONAGE("BOMBEB", "BOMBE", "BOMBE", "BOMBE", 2, true);
 			else
 				_objectsManager.PERSONAGE("BOMBEA", "BOMBE", "BOMBE", "BOMBE", 2, true);
@@ -567,15 +568,15 @@ bool HopkinsEngine::runLinuxDemo() {
 
 		case 8:
 			_linesManager.setMaxLineIdx(15);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM08", "IM08", "ANIM08", "IM08", 2, true);
 			break;
 
 		case 9:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 
-			if (!_globals._saveData->_data[svBombDisarmedFl])
+			if (!_globals->_saveData->_data[svBombDisarmedFl])
 				bombExplosion();
 			else 
 				_objectsManager.PERSONAGE2("IM09", "IM09", "ANIM09", "IM09", 10, true);
@@ -587,14 +588,14 @@ bool HopkinsEngine::runLinuxDemo() {
 
 		case 11:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM11", "IM11", "ANIM11", "IM11", 2, false);
 			break;
 
 		case 12:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 450;
-			if (_globals._saveData->_data[svBombDisarmedFl])
+			_globals->_characterMaxPosY = 450;
+			if (_globals->_saveData->_data[svBombDisarmedFl])
 				_objectsManager.PERSONAGE2("IM12", "IM12", "ANIM12", "IM12", 1, false);
 			else
 				bombExplosion();
@@ -602,13 +603,13 @@ bool HopkinsEngine::runLinuxDemo() {
 
 		case 13:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM13", "IM13", "ANIM13", "IM13", 1, true);
 			break;
 
 		case 14:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM14", "IM14", "ANIM14", "IM14", 1, true);
 			break;
 
@@ -618,24 +619,24 @@ bool HopkinsEngine::runLinuxDemo() {
 
 		case 16:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 
-			if (_globals._saveData->_data[svForestAvailableFl] == 1) {
+			if (_globals->_saveData->_data[svForestAvailableFl] == 1) {
 				_objectsManager.PERSONAGE2("IM16", "IM16A", "ANIM16", "IM16", 7, true);
-			} else if (!_globals._saveData->_data[svForestAvailableFl]) {
+			} else if (!_globals->_saveData->_data[svForestAvailableFl]) {
 				_objectsManager.PERSONAGE2("IM16", "IM16", "ANIM16", "IM16", 7, true);
 			}
 			break;
 
 		case 25:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM25", "IM25", "ANIM25", "IM25", 30, true);
 			break;
 
 		case 26:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM26", "IM26", "ANIM26", "IM26", 30, true);
 
 		case 33:
@@ -655,11 +656,11 @@ bool HopkinsEngine::runLinuxDemo() {
 			break;
 
 		case 113:
-			_globals._exitId = 0;
-			_globals._prevScreenId = _globals._screenId;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._screenId;
-			_globals._screenId = 113;
-			_globals._saveData->_data[svLastScreenId] = 113;
+			_globals->_exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_screenId;
+			_globals->_screenId = 113;
+			_globals->_saveData->_data[svLastScreenId] = 113;
 			_computerManager->showComputer(COMPUTER_HOPKINS);
 
 			_graphicsManager.lockScreen();
@@ -673,11 +674,11 @@ bool HopkinsEngine::runLinuxDemo() {
 			break;
 
 		case 114:
-			_globals._exitId = 0;
-			_globals._prevScreenId = _globals._screenId;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._screenId;
-			_globals._screenId = 114;
-			_globals._saveData->_data[svLastScreenId] = 114;
+			_globals->_exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_screenId;
+			_globals->_screenId = 114;
+			_globals->_saveData->_data[svLastScreenId] = 114;
 			_computerManager->showComputer(COMPUTER_SAMANTHA);
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -685,11 +686,11 @@ bool HopkinsEngine::runLinuxDemo() {
 			break;
 
 		case 115:
-			_globals._exitId = 0;
-			_globals._prevScreenId = _globals._screenId;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._screenId;
-			_globals._screenId = 115;
-			_globals._saveData->_data[svLastScreenId] = 115;
+			_globals->_exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_screenId;
+			_globals->_screenId = 115;
+			_globals->_saveData->_data[svLastScreenId] = 115;
 			_computerManager->showComputer(COMPUTER_PUBLIC);
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -698,7 +699,7 @@ bool HopkinsEngine::runLinuxDemo() {
 
 		case 150:
 			_soundManager.playSound(16);
-			_globals.iRegul = 1;
+			_globals->iRegul = 1;
 
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -706,13 +707,13 @@ bool HopkinsEngine::runLinuxDemo() {
 			_graphicsManager.clearPalette();
 			_graphicsManager.FADE_LINUX = 2;
 			_animationManager->playAnim("JOUR1A.anm", 12, 12, 2000);
-			_globals.iRegul = 0;
-			_globals._exitId = 300;
+			_globals->iRegul = 0;
+			_globals->_exitId = 300;
 			break;
 
 		case 151:
 			_soundManager.playSound(16);
-			_globals.iRegul = 1;
+			_globals->iRegul = 1;
 
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -720,13 +721,13 @@ bool HopkinsEngine::runLinuxDemo() {
 			_graphicsManager.clearPalette();
 			_graphicsManager.FADE_LINUX = 2;
 			_animationManager->playAnim("JOUR3A.anm", 12, 12, 2000);
-			_globals.iRegul = 0;
-			_globals._exitId = 300;
+			_globals->iRegul = 0;
+			_globals->_exitId = 300;
 			break;
 
 		case 152:
 			_soundManager.playSound(16);
-			_globals.iRegul = 1;
+			_globals->iRegul = 1;
 
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -734,8 +735,8 @@ bool HopkinsEngine::runLinuxDemo() {
 			_graphicsManager.clearPalette();
 			_graphicsManager.FADE_LINUX = 2;
 			_animationManager->playAnim("JOUR4A.anm", 12, 12, 2000);
-			_globals.iRegul = 0;
-			_globals._exitId = 300;
+			_globals->iRegul = 0;
+			_globals->_exitId = 300;
 			break;
 		}
 	}
@@ -746,7 +747,7 @@ bool HopkinsEngine::runFull() {
 	if (getPlatform() == Common::kPlatformLinux)
 		_soundManager.playSound(16);
 
-	_globals.loadObjects();
+	_globals->loadObjects();
 	_objectsManager.changeObject(14);
 	_objectsManager.addObject(14);
 
@@ -757,7 +758,7 @@ bool HopkinsEngine::runFull() {
 		// in my copy: it mentions a Win95 version v4 using DirectDraw (Strangerke)
 	} else if (getPlatform() == Common::kPlatformWindows) {
 		_objectsManager._helicopterFl = false;
-		_globals.iRegul = 1;
+		_globals->iRegul = 1;
 		// This code displays the game version.
 		// It wasn't present in the original and could be put in the debugger
 		// It has been added there for debug purposes
@@ -775,7 +776,7 @@ bool HopkinsEngine::runFull() {
 		_graphicsManager.fadeOutLong();
 		_graphicsManager.clearVesaScreen();
 
-		_globals.iRegul = 1;
+		_globals->iRegul = 1;
 	}
 
 	_graphicsManager.lockScreen();
@@ -789,8 +790,8 @@ bool HopkinsEngine::runFull() {
 		_eventsManager->delay(500);
 		_graphicsManager.fadeOutLong();
 
-		_globals._speed = 2;
-		_globals.iRegul = 1;
+		_globals->_speed = 2;
+		_globals->iRegul = 1;
 		_graphicsManager.FADE_LINUX = 2;
 		_animationManager->playAnim("MP.ANM", 10, 16, 200);
 	} else {
@@ -810,21 +811,21 @@ bool HopkinsEngine::runFull() {
 		_eventsManager->delay(500);
 		_graphicsManager.fadeOutLong();
 	}
-	_globals.iRegul = 0;
-	_globals.PERSO = _fileManager->loadFile("PERSO.SPR");
-	_globals._characterType = 0;
+	_globals->iRegul = 0;
+	_globals->PERSO = _fileManager->loadFile("PERSO.SPR");
+	_globals->_characterType = 0;
 	_objectsManager._mapCarPosX = _objectsManager._mapCarPosY = 0;
-	memset(_globals._saveData, 0, 2000);
+	memset(_globals->_saveData, 0, 2000);
 	
-	_globals._exitId = 0;
+	_globals->_exitId = 0;
 
 	for (;;) {
-		if (_globals._exitId == 300)
-			_globals._exitId = 0;
-		if (!_globals._exitId) {
-			_globals._exitId = _menuManager.menu();
-			if (_globals._exitId == -1) {
-				_globals.PERSO = _globals.freeMemory(_globals.PERSO);
+		if (_globals->_exitId == 300)
+			_globals->_exitId = 0;
+		if (!_globals->_exitId) {
+			_globals->_exitId = _menuManager.menu();
+			if (_globals->_exitId == -1) {
+				_globals->PERSO = _globals->freeMemory(_globals->PERSO);
 				restoreSystem();
 				return false;
 			}
@@ -833,31 +834,31 @@ bool HopkinsEngine::runFull() {
 		if (shouldQuit())
 			return false;
 
-		switch (_globals._exitId) {
+		switch (_globals->_exitId) {
 		case 1:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM01", "IM01", "ANIM01", "IM01", 1, true);
 			break;
 
 		case 3:
-			if (!_globals._saveData->_data[svBankAttackAnimPlayedFl]) {
+			if (!_globals->_saveData->_data[svBankAttackAnimPlayedFl]) {
 				// Play the bank attack animation
 				_soundManager.playSound(3);
 				if (getPlatform() == Common::kPlatformOS2 || getPlatform() == Common::kPlatformBeOS)
 					_graphicsManager.loadImage("fond");
 				else {
-					if (_globals._language == LANG_FR)
+					if (_globals->_language == LANG_FR)
 						_graphicsManager.loadImage("fondfr");
-					else if (_globals._language == LANG_EN)
+					else if (_globals->_language == LANG_EN)
 						_graphicsManager.loadImage("fondan");
-					else if (_globals._language == LANG_SP)
+					else if (_globals->_language == LANG_SP)
 						_graphicsManager.loadImage("fondes");
 				}
 				_graphicsManager.fadeInLong();
 				_eventsManager->delay(500);
 				_graphicsManager.fadeOutLong();
-				_globals.iRegul = 1;
+				_globals->iRegul = 1;
 				_soundManager._specialSoundNum = 2;
 				_graphicsManager.lockScreen();
 				_graphicsManager.clearScreen();
@@ -867,7 +868,7 @@ bool HopkinsEngine::runFull() {
 					if (getPlatform() == Common::kPlatformLinux)
 						_graphicsManager.FADE_LINUX = 2;
 
-					if (!_globals._censorshipFl)
+					if (!_globals->_censorshipFl)
 						_animationManager->playAnim("BANQUE.ANM", 200, 28, 200);
 					else
 						_animationManager->playAnim("BANKUK.ANM", 200, 28, 200);
@@ -888,23 +889,23 @@ bool HopkinsEngine::runFull() {
 					_graphicsManager.fadeOutLong();
 				}
 
-				_globals._saveData->_data[svBankAttackAnimPlayedFl] = 1;
+				_globals->_saveData->_data[svBankAttackAnimPlayedFl] = 1;
 			}
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM03", "IM03", "ANIM03", "IM03", 2, false);
 			break;
 
 		case 4:
-			_globals._disableInventFl = true;
+			_globals->_disableInventFl = true;
 			_objectsManager.handleCityMap();
-			_globals._disableInventFl = false;
+			_globals->_disableInventFl = false;
 			break;
 
 		case 5:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 455;
-			if (_globals._saveData->_data[svFreedHostageFl] == 1)
+			_globals->_characterMaxPosY = 455;
+			if (_globals->_saveData->_data[svFreedHostageFl] == 1)
 				_objectsManager.PERSONAGE2("IM05", "IM05A", "ANIM05B", "IM05", 3, false);
 			else
 				_objectsManager.PERSONAGE2("IM05", "IM05", "ANIM05", "IM05", 3, false);
@@ -912,12 +913,12 @@ bool HopkinsEngine::runFull() {
 
 		case 6:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 460;
+			_globals->_characterMaxPosY = 460;
 			_objectsManager.PERSONAGE2("IM06", "IM06", "ANIM06", "IM06", 2, true);
 			break;
 
 		case 7:
-			if (_globals._saveData->_data[svBombBoxOpenedFl])
+			if (_globals->_saveData->_data[svBombBoxOpenedFl])
 				_objectsManager.PERSONAGE("BOMBEB", "BOMBE", "BOMBE", "BOMBE", 2, true);
 			else
 				_objectsManager.PERSONAGE("BOMBEA", "BOMBE", "BOMBE", "BOMBE", 2, true);
@@ -925,14 +926,14 @@ bool HopkinsEngine::runFull() {
 
 		case 8:
 			_linesManager.setMaxLineIdx(15);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM08", "IM08", "ANIM08", "IM08", 2, true);
 			break;
 
 		case 9:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 440;
-			if (_globals._saveData->_data[svBombDisarmedFl])
+			_globals->_characterMaxPosY = 440;
+			if (_globals->_saveData->_data[svBombDisarmedFl])
 				_objectsManager.PERSONAGE2("IM09", "IM09", "ANIM09", "IM09", 10, true);
 			else
 				bombExplosion();
@@ -944,14 +945,14 @@ bool HopkinsEngine::runFull() {
 
 		case 11:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			_objectsManager.PERSONAGE2("IM11", "IM11", "ANIM11", "IM11", 2, false);
 			break;
 
 		case 12:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 450;
-			if (_globals._saveData->_data[svBombDisarmedFl])
+			_globals->_characterMaxPosY = 450;
+			if (_globals->_saveData->_data[svBombDisarmedFl])
 				_objectsManager.PERSONAGE2("IM12", "IM12", "ANIM12", "IM12", 1, false);
 			else
 				bombExplosion();
@@ -959,13 +960,13 @@ bool HopkinsEngine::runFull() {
 
 		case 13:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM13", "IM13", "ANIM13", "IM13", 1, true);
 			break;
 
 		case 14:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM14", "IM14", "ANIM14", "IM14", 1, true);
 			break;
 
@@ -978,8 +979,8 @@ bool HopkinsEngine::runFull() {
 
 		case 16:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 450;
-			if (_globals._saveData->_data[svForestAvailableFl] == 1)
+			_globals->_characterMaxPosY = 450;
+			if (_globals->_saveData->_data[svForestAvailableFl] == 1)
 				_objectsManager.PERSONAGE2("IM16", "IM16A", "ANIM16", "IM16", 7, true);
 			else
 				_objectsManager.PERSONAGE2("IM16", "IM16", "ANIM16", "IM16", 7, true);
@@ -987,13 +988,13 @@ bool HopkinsEngine::runFull() {
 
 		case 17:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 440;
-			if (_globals._saveData->_data[svHutBurningFl] == 1)
+			_globals->_characterMaxPosY = 440;
+			if (_globals->_saveData->_data[svHutBurningFl] == 1)
 				_objectsManager.PERSONAGE2("IM17", "IM17A", "ANIM17", "IM17", 11, true);
-			else if (!_globals._saveData->_data[svHutBurningFl])
+			else if (!_globals->_saveData->_data[svHutBurningFl])
 				_objectsManager.PERSONAGE2("IM17", "IM17", "ANIM17", "IM17", 11, true);
-			if (_globals._exitId == 18) {
-				_globals.iRegul = 1;
+			if (_globals->_exitId == 18) {
+				_globals->iRegul = 1;
 				_graphicsManager.lockScreen();
 				_graphicsManager.clearScreen();
 				_graphicsManager.unlockScreen();
@@ -1012,13 +1013,13 @@ bool HopkinsEngine::runFull() {
 					_animationManager->playAnim("PURG1A.ANM", 12, 18, 50);
 					_graphicsManager.fadeOutShort();
 				}
-				_globals.iRegul = 0;
+				_globals->iRegul = 0;
 			}
 			break;
 
 		case 18:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 450;
+			_globals->_characterMaxPosY = 450;
 			if (getPlatform() == Common::kPlatformLinux || getPlatform() == Common::kPlatformWindows)
 				_objectsManager.PERSONAGE2("IM18", "IM18", "ANIM18", "IM18", 29, false);
 			else
@@ -1027,8 +1028,8 @@ bool HopkinsEngine::runFull() {
 
 		case 19:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 440;
-			if (_globals._saveData->_data[svHeavenGuardGoneFl])
+			_globals->_characterMaxPosY = 440;
+			if (_globals->_saveData->_data[svHeavenGuardGoneFl])
 				_objectsManager.PERSONAGE2("IM19", "IM19A", "ANIM19", "IM19", 6, true);
 			else
 				_objectsManager.PERSONAGE2("IM19", "IM19", "ANIM19", "IM19", 6, true);
@@ -1036,10 +1037,10 @@ bool HopkinsEngine::runFull() {
 
 		case 20:
 			_linesManager.setMaxLineIdx(10);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM20", "IM20", "ANIM20", "IM20", 6, true);
-			if (_globals._exitId == 17) {
-				_globals.iRegul = 1;
+			if (_globals->_exitId == 17) {
+				_globals->iRegul = 1;
 				_soundManager.stopSound();
 				_graphicsManager.lockScreen();
 				_graphicsManager.clearScreen();
@@ -1051,26 +1052,26 @@ bool HopkinsEngine::runFull() {
 				_animationManager->playAnim("PURG2A.ANM", 12, 18, 50);
 				if (getPlatform() != Common::kPlatformLinux)
 					_graphicsManager.fadeOutShort();
-				_globals.iRegul = 0;
+				_globals->iRegul = 0;
 			}
 			break;
 
 		case 22:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM22", "IM22", "ANIM22", "IM22", 6, true);
 			break;
 
 		case 23:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM23", "IM23", "ANIM23", "IM23", 6, true);
 			break;
 
 		case 24:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 450;
-			if (_globals._saveData->_data[svCinemaDogGoneFl] == 1)
+			_globals->_characterMaxPosY = 450;
+			if (_globals->_saveData->_data[svCinemaDogGoneFl] == 1)
 				_objectsManager.PERSONAGE2("IM24", "IM24A", "ANIM24", "IM24", 1, true);
 			else
 				_objectsManager.PERSONAGE2("IM24", "IM24", "ANIM24", "IM24", 1, true);
@@ -1078,7 +1079,7 @@ bool HopkinsEngine::runFull() {
 
 		case 25:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			if (getPlatform() == Common::kPlatformLinux || getPlatform() == Common::kPlatformWindows)
 				_objectsManager.PERSONAGE2("IM25", "IM25", "ANIM25", "IM25", 30, true);
 			else
@@ -1087,7 +1088,7 @@ bool HopkinsEngine::runFull() {
 
 		case 26:
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			if (getPlatform() == Common::kPlatformLinux || getPlatform() == Common::kPlatformWindows)
 				_objectsManager.PERSONAGE2("IM26", "IM26", "ANIM26", "IM26", 30, true);
 			else
@@ -1096,8 +1097,8 @@ bool HopkinsEngine::runFull() {
 
 		case 27:
 			_linesManager.setMaxLineIdx(15);
-			_globals._characterMaxPosY = 440;
-			if (_globals._saveData->_data[svPoolDogGoneFl] == 1)
+			_globals->_characterMaxPosY = 440;
+			if (_globals->_saveData->_data[svPoolDogGoneFl] == 1)
 				_objectsManager.PERSONAGE2("IM27", "IM27A", "ANIM27", "IM27", 27, true);
 			else
 				_objectsManager.PERSONAGE2("IM27", "IM27", "ANIM27", "IM27", 27, true);
@@ -1105,8 +1106,8 @@ bool HopkinsEngine::runFull() {
 
 		case 28:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 450;
-			if (_globals._saveData->_data[svCinemaCurtainCond1] != 1 || _globals._saveData->_data[svCinemaCurtainCond2] != 1)
+			_globals->_characterMaxPosY = 450;
+			if (_globals->_saveData->_data[svCinemaCurtainCond1] != 1 || _globals->_saveData->_data[svCinemaCurtainCond2] != 1)
 				_objectsManager.PERSONAGE2("IM28", "IM28", "ANIM28", "IM28", 1, false);
 			else
 				_objectsManager.PERSONAGE2("IM28A", "IM28", "ANIM28", "IM28", 1, false);
@@ -1114,13 +1115,13 @@ bool HopkinsEngine::runFull() {
 
 		case 29:
 			_linesManager.setMaxLineIdx(50);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM29", "IM29", "ANIM29", "IM29", 1, true);
 			break;
 
 		case 30:
 			_linesManager.setMaxLineIdx(15);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM30", "IM30", "ANIM30", "IM30", 24, false);
 			break;
 
@@ -1130,7 +1131,7 @@ bool HopkinsEngine::runFull() {
 
 		case 32:
 			_linesManager.setMaxLineIdx(20);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM32", "IM32", "ANIM32", "IM32", 2, true);
 			break;
 
@@ -1150,18 +1151,18 @@ bool HopkinsEngine::runFull() {
 		case 40:
 		case 41: {
 			_linesManager.setMaxLineIdx(40);
-			_globals._characterMaxPosY = 435;
-			_globals._disableInventFl = false;
+			_globals->_characterMaxPosY = 435;
+			_globals->_disableInventFl = false;
 			_objectsManager._forestFl = true;
-			Common::String im = Common::String::format("IM%d", _globals._exitId);
+			Common::String im = Common::String::format("IM%d", _globals->_exitId);
 			_soundManager.playSound(13);
 			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) {
-				_objectsManager._forestSprite = _globals.freeMemory(_objectsManager._forestSprite);
+			if (_globals->_exitId < 35 || _globals->_exitId > 49) {
+				_objectsManager._forestSprite = _globals->freeMemory(_objectsManager._forestSprite);
 				_objectsManager._forestFl = false;
 				_soundManager.removeSample(1);
 			}
@@ -1170,133 +1171,133 @@ bool HopkinsEngine::runFull() {
 
 		case 50:
 			playPlaneCutscene();
-			_globals._exitId = 51;
+			_globals->_exitId = 51;
 			break;
 
 		case 51:
 			_linesManager.setMaxLineIdx(10);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM51", "IM51", "ANIM51", "IM51", 14, true);
 			break;
 
 		case 52:
 			_linesManager.setMaxLineIdx(15);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM52", "IM52", "ANIM52", "IM52", 14, true);
 			break;
 
 		case 54:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM54", "IM54", "ANIM54", "IM54", 14, true);
 			break;
 
 		case 55:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 460;
+			_globals->_characterMaxPosY = 460;
 			_objectsManager.PERSONAGE2("IM55", "IM55", "ANIM55", "IM55", 14, false);
 			break;
 
 		case 56:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM56", "IM56", "ANIM56", "IM56", 14, false);
 			break;
 
 		case 57:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM57", "IM57", "ANIM57", "IM57", 14, true);
 			break;
 
 		case 58:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM58", "IM58", "ANIM58", "IM58", 14, false);
 			break;
 
 		case 59:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM59", "IM59", "ANIM59", "IM59", 21, false);
 			break;
 
 		case 60:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM60", "IM60", "ANIM60", "IM60", 21, false);
 			break;
 
 		case 61:
-			if (_globals._saveData->_data[svBaseElevatorCond1] == 1 && !_globals._saveData->_data[svBaseFireFl])
+			if (_globals->_saveData->_data[svBaseElevatorCond1] == 1 && !_globals->_saveData->_data[svBaseFireFl])
 				handleConflagration();
 			_objectsManager.PERSONAGE("IM61", "IM61", "ANIM61", "IM61", 21, false);
 			break;
 
 		case 62:
 			_linesManager.setMaxLineIdx(8);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM62", "IM62", NULL, "IM62", 21, false);
 			break;
 
 		case 63:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM63", "IM63", "ANIM63", "IM63", 21, false);
 			break;
 
 		case 64:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM64", "IM64", "ANIM64", "IM64", 21, true);
 			break;
 
 		case 65:
 			_linesManager.setMaxLineIdx(30);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM65", "IM65", "ANIM65", "IM65", 21, false);
 			break;
 
 		case 66:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM66", "IM66", "ANIM66", "IM66", 21, false);
 			break;
 
 		case 67:
 			_linesManager.setMaxLineIdx(8);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM67", "IM67", NULL, "IM67", 21, false);
 			break;
 
 		case 68:
 			_linesManager.setMaxLineIdx(8);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM68", "IM68", "ANIM68", "IM68", 21, true);
 			break;
 
 		case 69:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM69", "IM69", "ANIM69", "IM69", 21, false);
 			break;
 
 		case 70:
 			_linesManager.setMaxLineIdx(8);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM70", "IM70", NULL, "IM70", 21, false);
 			break;
 
 		case 71:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 445;
+			_globals->_characterMaxPosY = 445;
 			_objectsManager.PERSONAGE2("IM71", "IM71", "ANIM71", "IM71", 21, false);
 			break;
 
 		case 73:
 			_linesManager.setMaxLineIdx(15);
-			_globals._characterMaxPosY = 445;
-			if (_globals._saveData->_data[svSecondElevatorAvailableFl] == 1)
+			_globals->_characterMaxPosY = 445;
+			if (_globals->_saveData->_data[svSecondElevatorAvailableFl] == 1)
 				_objectsManager.PERSONAGE2("IM73", "IM73A", "ANIM73", "IM73", 21, true);
 			else
 				_objectsManager.PERSONAGE2("IM73", "IM73", "ANIM73", "IM73", 21, true);
@@ -1368,8 +1369,8 @@ bool HopkinsEngine::runFull() {
 
 		case 93:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 445;
-			if (_globals._saveData->_data[svEscapeLeftJailFl]) {
+			_globals->_characterMaxPosY = 445;
+			if (_globals->_saveData->_data[svEscapeLeftJailFl]) {
 				if (getPlatform() == Common::kPlatformLinux || getPlatform() == Common::kPlatformWindows)
 					_objectsManager.PERSONAGE2("IM93", "IM93C", "ANIM93", "IM93", 29, true);
 				else
@@ -1384,28 +1385,28 @@ bool HopkinsEngine::runFull() {
 
 		case 94:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 440;
+			_globals->_characterMaxPosY = 440;
 			_objectsManager.PERSONAGE2("IM94", "IM94", "ANIM94", "IM94", 19, true);
 			break;
 
 		case 95:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM95", "IM95", "ANIM95", "IM95", 19, false);
 			break;
 
 		case 96:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM96", "IM96", "ANIM96", "IM96", 19, false);
 			break;
 
 		case 97:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM97", "IM97", "ANIM97", "IM97", 19, false);
-			if (_globals._exitId == 18) {
-				_globals.iRegul = 1;
+			if (_globals->_exitId == 18) {
+				_globals->iRegul = 1;
 				_soundManager.stopSound();
 				_graphicsManager.lockScreen();
 				_graphicsManager.clearScreen();
@@ -1414,19 +1415,19 @@ bool HopkinsEngine::runFull() {
 				_soundManager.playSound(6);
 				_animationManager->playAnim("PURG1A.ANM", 12, 18, 50);
 				_graphicsManager.fadeOutShort();
-				_globals.iRegul = 0;
+				_globals->iRegul = 0;
 			}
 			break;
 
 		case 98:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM98", "IM98", "ANIM98", "IM98", 19, true);
 			break;
 
 		case 99:
 			_linesManager.setMaxLineIdx(5);
-			_globals._characterMaxPosY = 435;
+			_globals->_characterMaxPosY = 435;
 			_objectsManager.PERSONAGE2("IM99", "IM99", "ANIM99", "IM99", 19, true);
 			break;
 
@@ -1443,11 +1444,11 @@ bool HopkinsEngine::runFull() {
 			break;
 
 		case 113:
-			_globals._prevScreenId = _globals._screenId;
-			_globals._screenId = 113;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._prevScreenId;
-			_globals._saveData->_data[svLastScreenId] = _globals._screenId;
-			_globals._exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_screenId = 113;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_prevScreenId;
+			_globals->_saveData->_data[svLastScreenId] = _globals->_screenId;
+			_globals->_exitId = 0;
 			_computerManager->showComputer(COMPUTER_HOPKINS);
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -1460,11 +1461,11 @@ bool HopkinsEngine::runFull() {
 			break;
 
 		case 114:
-			_globals._exitId = 0;
-			_globals._prevScreenId = _globals._screenId;
-			_globals._screenId = 114;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._prevScreenId;
-			_globals._saveData->_data[svLastScreenId] = _globals._screenId;
+			_globals->_exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_screenId = 114;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_prevScreenId;
+			_globals->_saveData->_data[svLastScreenId] = _globals->_screenId;
 			_computerManager->showComputer(COMPUTER_SAMANTHA);
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -1472,11 +1473,11 @@ bool HopkinsEngine::runFull() {
 			break;
 
 		case 115:
-			_globals._prevScreenId = _globals._screenId;
-			_globals._screenId = 115;
-			_globals._saveData->_data[svLastPrevScreenId] = _globals._prevScreenId;
-			_globals._saveData->_data[svLastScreenId] = _globals._screenId;
-			_globals._exitId = 0;
+			_globals->_prevScreenId = _globals->_screenId;
+			_globals->_screenId = 115;
+			_globals->_saveData->_data[svLastPrevScreenId] = _globals->_prevScreenId;
+			_globals->_saveData->_data[svLastScreenId] = _globals->_screenId;
+			_globals->_exitId = 0;
 			_computerManager->showComputer(COMPUTER_PUBLIC);
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
@@ -1485,7 +1486,7 @@ bool HopkinsEngine::runFull() {
 
 		case 150:
 			_soundManager.playSound(16);
-			_globals.iRegul = 1;
+			_globals->iRegul = 1;
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
 			_graphicsManager.unlockScreen();
@@ -1493,13 +1494,13 @@ bool HopkinsEngine::runFull() {
 			if (getPlatform() == Common::kPlatformLinux)
 				_graphicsManager.FADE_LINUX = 2;
 			_animationManager->playAnim("JOUR1A.ANM", 12, 12, 2000);
-			_globals.iRegul = 0;
-			_globals._exitId = 300;
+			_globals->iRegul = 0;
+			_globals->_exitId = 300;
 			break;
 
 		case 151:
 			_soundManager.playSound(16);
-			_globals.iRegul = 1;
+			_globals->iRegul = 1;
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
 			_graphicsManager.unlockScreen();
@@ -1507,13 +1508,13 @@ bool HopkinsEngine::runFull() {
 			if (getPlatform() == Common::kPlatformLinux)
 				_graphicsManager.FADE_LINUX = 2;
 			_animationManager->playAnim("JOUR3A.ANM", 12, 12, 2000);
-			_globals.iRegul = 0;
-			_globals._exitId = 300;
+			_globals->iRegul = 0;
+			_globals->_exitId = 300;
 			break;
 
 		case 152:
 			_soundManager.playSound(16);
-			_globals.iRegul = 1;
+			_globals->iRegul = 1;
 			_graphicsManager.lockScreen();
 			_graphicsManager.clearScreen();
 			_graphicsManager.unlockScreen();
@@ -1521,8 +1522,8 @@ bool HopkinsEngine::runFull() {
 			if (getPlatform() == Common::kPlatformLinux)
 				_graphicsManager.FADE_LINUX = 2;
 			_animationManager->playAnim("JOUR4A.ANM", 12, 12, 2000);
-			_globals.iRegul = 0;
-			_globals._exitId = 300;
+			_globals->iRegul = 0;
+			_globals->_exitId = 300;
 			break;
 
 		case 194:
@@ -1531,21 +1532,21 @@ bool HopkinsEngine::runFull() {
 		case 197:
 		case 198:
 		case 199:
-			_globals.PERSO = _globals.freeMemory(_globals.PERSO);
-			_globals.iRegul = 1;
+			_globals->PERSO = _globals->freeMemory(_globals->PERSO);
+			_globals->iRegul = 1;
 			_soundManager.stopSound();
 			_soundManager.playSound(23);
-			_globals._exitId = handleBaseMap();	// Handles the base map (non-Windows)
-			//_globals._exitId = WBASE();	// Handles the 3D Doom level (Windows)
+			_globals->_exitId = handleBaseMap();	// Handles the base map (non-Windows)
+			//_globals->_exitId = WBASE();	// Handles the 3D Doom level (Windows)
 			_soundManager.stopSound();
-			_globals.PERSO = _fileManager->loadFile("PERSO.SPR");
-			_globals._characterType = 0;
-			_globals.iRegul = 0;
+			_globals->PERSO = _fileManager->loadFile("PERSO.SPR");
+			_globals->_characterType = 0;
+			_globals->iRegul = 0;
 			_graphicsManager._lineNbr = SCREEN_WIDTH;
 			break;
 		}
 	}
-	_globals.PERSO = _globals.freeMemory(_globals.PERSO);
+	_globals->PERSO = _globals->freeMemory(_globals->PERSO);
 	restoreSystem();
 	return true;
 }
@@ -1580,7 +1581,7 @@ void HopkinsEngine::initializeSystem() {
 	SearchMan.addSubDirectoryMatching(gameDataDir, "VOICE");
 	SearchMan.addSubDirectoryMatching(gameDataDir, "TSVGA");
 
-	_globals.clearAll();
+	_globals->clearAll();
 
 	_eventsManager->initMouseData();
 	_fontManager->initData();
@@ -1591,7 +1592,7 @@ void HopkinsEngine::initializeSystem() {
 	_eventsManager->setMouseOn();
 	_eventsManager->_mouseFl = false;
 
-	_globals.loadCharacterData();
+	_globals->loadCharacterData();
 
 	_eventsManager->_mouseOffset.x = 0;
 	_eventsManager->_mouseOffset.y = 0;
@@ -1611,7 +1612,7 @@ void HopkinsEngine::playIntro() {
 	memset(&paletteData, 0, PALETTE_EXT_BLOCK_SIZE);
 	_eventsManager->refreshScreenAndEvents();
 	_eventsManager->_mouseFl = false;
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 	_eventsManager->refreshScreenAndEvents();
 	_soundManager.playSound(16);
 	_animationManager->_clearAnimationFl = true;
@@ -1648,7 +1649,7 @@ void HopkinsEngine::playIntro() {
 	for (int i = 0; i <= 4; i++)
 		_eventsManager->refreshScreenAndEvents();
 
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 	_graphicsManager.fadeInLong();
 	if (_graphicsManager._largeScreenFl) {
 		_graphicsManager._scrollStatus = 2;
@@ -1693,9 +1694,9 @@ void HopkinsEngine::playIntro() {
 	for (int i = 0; i <= 4; i++)
 		_eventsManager->refreshScreenAndEvents();
 
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 	_graphicsManager.fadeInLong();
-	for (uint i = 0; i < 200 / _globals._speed; ++i)
+	for (uint i = 0; i < 200 / _globals->_speed; ++i)
 		_eventsManager->refreshScreenAndEvents();
 
 	_objectsManager.setBobAnimation(3);
@@ -1735,7 +1736,7 @@ void HopkinsEngine::playIntro() {
 	for (int i = 0; i <= 3; i++)
 		_eventsManager->refreshScreenAndEvents();
 
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 	_graphicsManager.setPaletteVGA256WithRefresh(paletteData2, _graphicsManager._vesaBuffer);
 
 	int introIndex = 0;
@@ -1768,24 +1769,24 @@ void HopkinsEngine::playIntro() {
 		introIndex += 2;
 		if (introIndex > 15) {
 			_graphicsManager.setPaletteVGA256WithRefresh(paletteData, _graphicsManager._vesaBuffer);
-			for (uint j = 1; j < 100 / _globals._speed; ++j)
+			for (uint j = 1; j < 100 / _globals->_speed; ++j)
 				_eventsManager->refreshScreenAndEvents();
 
 			_objectsManager.setBobAnimation(3);
 			_soundManager.mixVoice(7, 3);
 			_objectsManager.stopBobAnimation(3);
 
-			for (uint k = 1; k < 60 / _globals._speed; ++k)
+			for (uint k = 1; k < 60 / _globals->_speed; ++k)
 				_eventsManager->refreshScreenAndEvents();
 			_objectsManager.setBobAnimation(5);
-			for (uint l = 0; l < 20 / _globals._speed; ++l)
+			for (uint l = 0; l < 20 / _globals->_speed; ++l)
 				_eventsManager->refreshScreenAndEvents();
 
 			Common::copy(&paletteData2[0], &paletteData2[PALETTE_BLOCK_SIZE], &_graphicsManager._palette[0]);
 			_graphicsManager.setPaletteVGA256WithRefresh(_graphicsManager._palette, _graphicsManager._vesaBuffer);
 
-			for (uint m = 0; m < 50 / _globals._speed; ++m) {
-				if (m == 30 / _globals._speed) {
+			for (uint m = 0; m < 50 / _globals->_speed; ++m) {
+				if (m == 30 / _globals->_speed) {
 					_objectsManager.setBobAnimation(3);
 					_soundManager.mixVoice(8, 3);
 					_objectsManager.stopBobAnimation(3);
@@ -1829,7 +1830,7 @@ void HopkinsEngine::displayNotAvailable() {
 	if (!getIsDemo())
 		return;
 
-	if (_globals._language == LANG_FR)
+	if (_globals->_language == LANG_FR)
 		_graphicsManager.loadImage("ndfr");
 	else
 		_graphicsManager.loadImage("nduk");
@@ -1841,19 +1842,19 @@ void HopkinsEngine::displayNotAvailable() {
 		_soundManager.mixVoice(628, 4);
 
 	_graphicsManager.fadeOutLong();
-	_globals._exitId = 4;
+	_globals->_exitId = 4;
 }
 
 void HopkinsEngine::handleNotAvailable(int sortie) {
 	// Use the code of the linux demo instead of the code of the Windows demo.
 	// The behavior is somewhat better, and common code is easier to maintain.
 	displayNotAvailable();
-	_globals._exitId = sortie;
+	_globals->_exitId = sortie;
 }
 
 void HopkinsEngine::displayEndDemo() {
 	_soundManager.playSound(28);
-	if (_globals._language == LANG_FR)
+	if (_globals->_language == LANG_FR)
 		_graphicsManager.loadImage("endfr");
 	else
 		_graphicsManager.loadImage("enduk");
@@ -1861,7 +1862,7 @@ void HopkinsEngine::displayEndDemo() {
 	_graphicsManager.fadeInLong();
 	_eventsManager->delay(1500);
 	_graphicsManager.fadeOutLong();
-	_globals._exitId = 0;
+	_globals->_exitId = 0;
 }
 
 void HopkinsEngine::bombExplosion() {
@@ -1872,7 +1873,7 @@ void HopkinsEngine::bombExplosion() {
 	_graphicsManager.unlockScreen();
 	_graphicsManager.clearPalette();
 
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 	_soundManager._specialSoundNum = 199;
 	_graphicsManager.FADE_LINUX = 2;
 	_animationManager->playAnim("BOMBE2A.ANM", 50, 14, 500);
@@ -1893,9 +1894,9 @@ void HopkinsEngine::bombExplosion() {
 		_eventsManager->refreshScreenAndEvents();
 	}
 
-	_globals._introSpeechOffFl = true;
+	_globals->_introSpeechOffFl = true;
 	_talkManager.startStaticCharacterDialogue("vire.pe2");
-	_globals._introSpeechOffFl = false;
+	_globals->_introSpeechOffFl = false;
 	_objectsManager.setBobAnimation(7);
 
 	for (int idx = 0; idx < 100; ++idx) {
@@ -1904,8 +1905,8 @@ void HopkinsEngine::bombExplosion() {
 
 	_graphicsManager.fadeOutLong();
 	_graphicsManager.endDisplayBob();
-	_globals.iRegul = 0;
-	_globals._exitId = 151;
+	_globals->iRegul = 0;
+	_globals->_exitId = 151;
 }
 
 void HopkinsEngine::restoreSystem() {
@@ -1914,11 +1915,11 @@ void HopkinsEngine::restoreSystem() {
 }
 
 void HopkinsEngine::endLinuxDemo() {
-	_globals._linuxEndDemoFl = true;
+	_globals->_linuxEndDemoFl = true;
 	_graphicsManager.resetDirtyRects();
 	_objectsManager._forestFl = false;
 	_eventsManager->_breakoutFl = false;
-	_globals._disableInventFl = true;
+	_globals->_disableInventFl = true;
 	_graphicsManager.loadImage("BOX");
 	_soundManager.playSound(28);
 	_graphicsManager.fadeInLong();
@@ -1943,8 +1944,8 @@ void HopkinsEngine::endLinuxDemo() {
 }
 
 void HopkinsEngine::handleConflagration() {
-	_globals._disableInventFl = true;
-	_globals.iRegul = 1;
+	_globals->_disableInventFl = true;
+	_globals->iRegul = 1;
 	_graphicsManager.loadImage("IM71");
 	_animationManager->loadAnim("ANIM71");
 	_graphicsManager.SETCOLOR3(252, 100, 100, 100);
@@ -1957,26 +1958,26 @@ void HopkinsEngine::handleConflagration() {
 		_eventsManager->refreshScreenAndEvents();
 
 	_graphicsManager.fadeInLong();
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 
 	for (int cpt = 0; cpt <= 249; cpt++)
 		_eventsManager->refreshScreenAndEvents();
 
-	_globals._introSpeechOffFl = true;
+	_globals->_introSpeechOffFl = true;
 	_talkManager.startAnimatedCharacterDialogue("SVGARD1.pe2");
-	_globals._introSpeechOffFl = false;
+	_globals->_introSpeechOffFl = false;
 
 	for (int cpt = 0; cpt <= 49; cpt++)
 		_eventsManager->refreshScreenAndEvents();
 
 	_graphicsManager.fadeOutLong();
 	_graphicsManager.endDisplayBob();
-	_globals._saveData->_data[svBaseFireFl] = 1;
-	_globals._disableInventFl = false;
+	_globals->_saveData->_data[svBaseFireFl] = 1;
+	_globals->_disableInventFl = false;
 }
 
 void HopkinsEngine::playSubmarineCutscene() {
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 	_graphicsManager._lineNbr = SCREEN_WIDTH;
 	_graphicsManager.lockScreen();
 	_graphicsManager.clearScreen();
@@ -2013,7 +2014,7 @@ void HopkinsEngine::playSubmarineCutscene() {
 
 	_eventsManager->_escKeyFl = false;
 	_animationManager->_clearAnimationFl = false;
-	_globals._exitId = 85;
+	_globals->_exitId = 85;
 }
 
 void HopkinsEngine::playUnderwaterBaseCutscene() {
@@ -2023,8 +2024,8 @@ void HopkinsEngine::playUnderwaterBaseCutscene() {
 	_graphicsManager.clearPalette();
 	_animationManager->NO_SEQ = false;
 	_soundManager.playSound(26);
-	_globals.iRegul = 1;
-	_globals._disableInventFl = true;
+	_globals->iRegul = 1;
+	_globals->_disableInventFl = true;
 	_animationManager->NO_COUL = true;
 	_graphicsManager.FADE_LINUX = 2;
 	_animationManager->playSequence("abase.seq", 50, 15, 50);
@@ -2038,7 +2039,7 @@ void HopkinsEngine::playUnderwaterBaseCutscene() {
 		_eventsManager->refreshScreenAndEvents();
 
 	_graphicsManager.fadeInLong();
-	_globals.enableHiding();
+	_globals->enableHiding();
 
 	do
 		_eventsManager->refreshScreenAndEvents();
@@ -2046,23 +2047,23 @@ void HopkinsEngine::playUnderwaterBaseCutscene() {
 
 	_graphicsManager.fadeOutLong();
 	_graphicsManager.endDisplayBob();
-	_globals.resetHidingItems();
-	_globals._disableInventFl = false;
-	_globals._exitId = 93;
-	_globals.iRegul = 0;
+	_globals->resetHidingItems();
+	_globals->_disableInventFl = false;
+	_globals->_exitId = 93;
+	_globals->iRegul = 0;
 }
 
 void HopkinsEngine::playEnding() {
-	_globals.PERSO = _globals.freeMemory(_globals.PERSO);
+	_globals->PERSO = _globals->freeMemory(_globals->PERSO);
 	_dialogsManager->_removeInventFl = true;
-	_globals._disableInventFl = true;
+	_globals->_disableInventFl = true;
 	_graphicsManager._scrollOffset = 0;
-	_globals._cityMapEnabledFl = false;
-	_globals.iRegul = 1;
+	_globals->_cityMapEnabledFl = false;
+	_globals->iRegul = 1;
 	_soundManager.playSound(26);
 	_linesManager._route = (RouteItem *)g_PTRNUL;
-	_globals._freezeCharacterFl = true;
-	_globals._exitId = 0;
+	_globals->_freezeCharacterFl = true;
+	_globals->_exitId = 0;
 	_soundManager.loadSample(1, "SOUND90.WAV");
 	_graphicsManager.loadImage("IM100");
 	_animationManager->loadAnim("ANIM100");
@@ -2081,15 +2082,15 @@ void HopkinsEngine::playEnding() {
 		_eventsManager->refreshScreenAndEvents();
 
 	_graphicsManager.fadeInLong();
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 
 	do
 		_eventsManager->refreshScreenAndEvents();
 	while (_objectsManager.getBobAnimDataIdx(6) != 54);
 
-	_globals._introSpeechOffFl = true;
+	_globals->_introSpeechOffFl = true;
 	_talkManager.startAnimatedCharacterDialogue("GM4.PE2");
-	_globals._disableInventFl = true;
+	_globals->_disableInventFl = true;
 	_objectsManager.stopBobAnimation(6);
 	_objectsManager.stopBobAnimation(10);
 	_objectsManager.setBobAnimation(9);
@@ -2105,23 +2106,23 @@ void HopkinsEngine::playEnding() {
 		_eventsManager->refreshScreenAndEvents();
 	while (_objectsManager.getBobAnimDataIdx(7) != 65);
 
-	_globals._introSpeechOffFl = true;
+	_globals->_introSpeechOffFl = true;
 	_talkManager.startAnimatedCharacterDialogue("DUELB4.PE2");
 	_eventsManager->mouseOff();
-	_globals._disableInventFl = true;
+	_globals->_disableInventFl = true;
 
 	do
 		_eventsManager->refreshScreenAndEvents();
 	while (_objectsManager.getBobAnimDataIdx(7) != 72);
 
-	_globals._introSpeechOffFl = true;
+	_globals->_introSpeechOffFl = true;
 	_talkManager.startAnimatedCharacterDialogue("DUELH1.PE2");
 
 	do
 		_eventsManager->refreshScreenAndEvents();
 	while (_objectsManager.getBobAnimDataIdx(7) != 81);
 
-	_globals._introSpeechOffFl = true;
+	_globals->_introSpeechOffFl = true;
 	_talkManager.startAnimatedCharacterDialogue("DUELB5.PE2");
 
 	do
@@ -2129,7 +2130,7 @@ void HopkinsEngine::playEnding() {
 	while (_objectsManager.getBobAnimDataIdx(7) != 120);
 
 	_objectsManager.stopBobAnimation(7);
-	if (_globals._saveData->_data[svGameWonFl] == 1) {
+	if (_globals->_saveData->_data[svGameWonFl] == 1) {
 		_soundManager._specialSoundNum = 200;
 		_soundManager._skipRefreshFl = true;
 		_graphicsManager.FADE_LINUX = 2;
@@ -2143,11 +2144,11 @@ void HopkinsEngine::playEnding() {
 		if (!_eventsManager->_escKeyFl) {
 			do
 				_eventsManager->refreshEvents();
-			while (_eventsManager->_rateCounter < 2000 / _globals._speed && !_eventsManager->_escKeyFl);
+			while (_eventsManager->_rateCounter < 2000 / _globals->_speed && !_eventsManager->_escKeyFl);
 		}
 		_eventsManager->_escKeyFl = false;
 		_graphicsManager.fadeOutLong();
-		_globals.iRegul = 1;
+		_globals->iRegul = 1;
 		_soundManager._specialSoundNum = 0;
 		_graphicsManager.FADE_LINUX = 2;
 		_animationManager->playAnim("JOUR2A.anm", 12, 12, 1000);
@@ -2162,19 +2163,19 @@ void HopkinsEngine::playEnding() {
 		_animationManager->playAnim("FF1a.anm", 9, 18, 9);
 		_animationManager->playAnim("FF2a.anm", 24, 24, 100);
 		displayCredits();
-		_globals.iRegul = 0;
-		_globals._exitId = 300;
+		_globals->iRegul = 0;
+		_globals->_exitId = 300;
 		_dialogsManager->_removeInventFl = false;
-		_globals._disableInventFl = false;
+		_globals->_disableInventFl = false;
 	} else {
 		_soundManager._specialSoundNum = 200;
 		_soundManager._skipRefreshFl = true;
 		_animationManager->playAnim2("BERM.ANM", 100, 24, 300);
 		_objectsManager.stopBobAnimation(7);
 		_objectsManager.setBobAnimation(8);
-		_globals._introSpeechOffFl = true;
+		_globals->_introSpeechOffFl = true;
 		_talkManager.startAnimatedCharacterDialogue("GM5.PE2");
-		_globals._disableInventFl = true;
+		_globals->_disableInventFl = true;
 
 		do
 			_eventsManager->refreshScreenAndEvents();
@@ -2190,22 +2191,22 @@ void HopkinsEngine::playEnding() {
 		_graphicsManager.endDisplayBob();
 		_soundManager.removeSample(1);
 		_soundManager.playSound(16);
-		_globals.iRegul = 1;
+		_globals->iRegul = 1;
 		_soundManager._specialSoundNum = 0;
 		_dialogsManager->_removeInventFl = false;
-		_globals._disableInventFl = false;
+		_globals->_disableInventFl = false;
 		_animationManager->playAnim("JOUR4A.anm", 12, 12, 1000);
-		_globals.iRegul = 0;
-		_globals._exitId = 300;
+		_globals->iRegul = 0;
+		_globals->_exitId = 300;
 	}
-	_globals.PERSO = _fileManager->loadFile("PERSO.SPR");
-	_globals._characterType = 0;
-	_globals.iRegul = 0;
+	_globals->PERSO = _fileManager->loadFile("PERSO.SPR");
+	_globals->_characterType = 0;
+	_globals->iRegul = 0;
 }
 
 void HopkinsEngine::playPlaneCutscene() {
 	_soundManager.playSound(28);
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 	_graphicsManager.lockScreen();
 	_graphicsManager.clearScreen();
 	_graphicsManager.unlockScreen();
@@ -2293,7 +2294,7 @@ void HopkinsEngine::drawBaseMap() {
 }
 
 int HopkinsEngine::handleBaseMap() {
-	_globals._disableInventFl = true;
+	_globals->_disableInventFl = true;
 
 	// Load the map image
 	loadBaseMap();
@@ -2335,10 +2336,10 @@ int HopkinsEngine::handleBaseMap() {
 			zone = 6;
 		if (zone) {
 			_eventsManager->changeMouseCursor(4);
-			_globals._baseMapColor += 25;
-			if (_globals._baseMapColor > 100)
-				_globals._baseMapColor = 0;
-			_graphicsManager.SETCOLOR4(251, _globals._baseMapColor, _globals._baseMapColor, _globals._baseMapColor);
+			_globals->_baseMapColor += 25;
+			if (_globals->_baseMapColor > 100)
+				_globals->_baseMapColor = 0;
+			_graphicsManager.SETCOLOR4(251, _globals->_baseMapColor, _globals->_baseMapColor, _globals->_baseMapColor);
 		} else {
 			_eventsManager->changeMouseCursor(0);
 			_graphicsManager.SETCOLOR4(251, 100, 100, 100);
@@ -2348,7 +2349,7 @@ int HopkinsEngine::handleBaseMap() {
 			loopCond = true;
 	} while (!loopCond);
 
-	_globals._disableInventFl = false;
+	_globals->_disableInventFl = false;
 	_graphicsManager.fadeOutLong();
 
 	int result;
@@ -2379,10 +2380,10 @@ int HopkinsEngine::handleBaseMap() {
 }
 
 void HopkinsEngine::loadCredits() {
-	_globals._creditsPosY = 440;
-	_globals._creditsStep = 45;
+	_globals->_creditsPosY = 440;
+	_globals->_creditsStep = 45;
 	byte *bufPtr;
-	switch (_globals._language) {
+	switch (_globals->_language) {
 	case LANG_EN:
 		bufPtr = _fileManager->loadFile("CREAN.TXT");
 		break;
@@ -2406,28 +2407,28 @@ void HopkinsEngine::loadCredits() {
 				loopCond = true;
 				break;
 			}
-			_globals._creditsItem[idxLines]._color = curPtr[1];
-			_globals._creditsItem[idxLines]._actvFl = true;
-			_globals._creditsItem[idxLines]._linePosY = _globals._creditsPosY + idxLines * _globals._creditsStep;
+			_globals->_creditsItem[idxLines]._color = curPtr[1];
+			_globals->_creditsItem[idxLines]._actvFl = true;
+			_globals->_creditsItem[idxLines]._linePosY = _globals->_creditsPosY + idxLines * _globals->_creditsStep;
 
 			int idxBuf = 0;
 			for(; idxBuf < 49; idxBuf++) {
 				byte curChar = curPtr[idxBuf + 3];
 				if (curChar == '%' || curChar == 10)
 					break;
-				_globals._creditsItem[idxLines]._line[idxBuf] = curChar;
+				_globals->_creditsItem[idxLines]._line[idxBuf] = curChar;
 			}
-			_globals._creditsItem[idxLines]._line[idxBuf] = 0;
-			_globals._creditsItem[idxLines]._lineSize = idxBuf - 1;
+			_globals->_creditsItem[idxLines]._line[idxBuf] = 0;
+			_globals->_creditsItem[idxLines]._lineSize = idxBuf - 1;
 			curPtr = curPtr + idxBuf + 2;
 			++idxLines;
 		} else {
 			curPtr++;
 		}
-		_globals._creditsLineNumb = idxLines;
+		_globals->_creditsLineNumb = idxLines;
 	} while (!loopCond);
 
-	_globals.freeMemory(bufPtr);
+	_globals->freeMemory(bufPtr);
 }
 
 void HopkinsEngine::displayCredits(int startPosY, byte *buffer, char color) {
@@ -2444,20 +2445,20 @@ void HopkinsEngine::displayCredits(int startPosY, byte *buffer, char color) {
 	int startPosX = 320 - strWidth / 2;
 	int endPosX = strWidth + startPosX;
 	int endPosY = startPosY + 12;
-	if ((_globals._creditsStartX == -1) && (_globals._creditsEndX == -1) && (_globals._creditsStartY == -1) && (_globals._creditsEndY == -1)) {
-		_globals._creditsStartX = startPosX;
-		_globals._creditsEndX = endPosX;
-		_globals._creditsStartY = startPosY;
-		_globals._creditsEndY = endPosY;
+	if ((_globals->_creditsStartX == -1) && (_globals->_creditsEndX == -1) && (_globals->_creditsStartY == -1) && (_globals->_creditsEndY == -1)) {
+		_globals->_creditsStartX = startPosX;
+		_globals->_creditsEndX = endPosX;
+		_globals->_creditsStartY = startPosY;
+		_globals->_creditsEndY = endPosY;
 	}
-	if (startPosX < _globals._creditsStartX)
-		_globals._creditsStartX = startPosX;
-	if (endPosX > _globals._creditsEndX)
-		_globals._creditsEndX = endPosX;
-	if (_globals._creditsStartY > startPosY)
-		_globals._creditsStartY = startPosY;
-	if (endPosY > _globals._creditsEndY)
-		_globals._creditsEndY = endPosY;
+	if (startPosX < _globals->_creditsStartX)
+		_globals->_creditsStartX = startPosX;
+	if (endPosX > _globals->_creditsEndX)
+		_globals->_creditsEndX = endPosX;
+	if (_globals->_creditsStartY > startPosY)
+		_globals->_creditsStartY = startPosY;
+	if (endPosY > _globals->_creditsEndY)
+		_globals->_creditsEndY = endPosY;
 
 	bufPtr = buffer;
 	for (;;) {
@@ -2473,23 +2474,23 @@ void HopkinsEngine::displayCredits(int startPosY, byte *buffer, char color) {
 
 void HopkinsEngine::displayCredits() {
 	loadCredits();
-	_globals._creditsPosY = 436;
+	_globals->_creditsPosY = 436;
 	_graphicsManager.loadImage("GENERIC");
 	_graphicsManager.fadeInLong();
 	_soundManager.playSound(28);
 	_eventsManager->_mouseFl = false;
-	_globals.iRegul = 3;
-	_globals._creditsStartX = _globals._creditsEndX = _globals._creditsStartY = _globals._creditsEndY = -1;
+	_globals->iRegul = 3;
+	_globals->_creditsStartX = _globals->_creditsEndX = _globals->_creditsStartY = _globals->_creditsEndY = -1;
 	int soundId = 28;
 	do {
-		for (int i = 0; i < _globals._creditsLineNumb; ++i) {
-			if (_globals._creditsItem[i]._actvFl) {
-				int nextY = _globals._creditsPosY + i * _globals._creditsStep;
-				_globals._creditsItem[i]._linePosY = nextY;
+		for (int i = 0; i < _globals->_creditsLineNumb; ++i) {
+			if (_globals->_creditsItem[i]._actvFl) {
+				int nextY = _globals->_creditsPosY + i * _globals->_creditsStep;
+				_globals->_creditsItem[i]._linePosY = nextY;
 
 				if ((nextY - 21  >= 0) && (nextY - 21 <= 418)) {
 					int col = 0;
-					switch (_globals._creditsItem[i]._color) {
+					switch (_globals->_creditsItem[i]._color) {
 					case '1':
 						col = 163;
 						break;
@@ -2504,32 +2505,32 @@ void HopkinsEngine::displayCredits() {
 						col = 163;
 						break;
 					}
-					if (_globals._creditsItem[i]._lineSize != -1)
-						displayCredits(nextY, _globals._creditsItem[i]._line, col);
+					if (_globals->_creditsItem[i]._lineSize != -1)
+						displayCredits(nextY, _globals->_creditsItem[i]._line, col);
 				}
 			}
 		}
-		--_globals._creditsPosY;
-		if (_globals._creditsStartX != -1 || _globals._creditsEndX != -1 || _globals._creditsStartY != -1 || _globals._creditsEndY != -1) {
+		--_globals->_creditsPosY;
+		if (_globals->_creditsStartX != -1 || _globals->_creditsEndX != -1 || _globals->_creditsStartY != -1 || _globals->_creditsEndY != -1) {
 			_eventsManager->refreshScreenAndEvents();
 			_graphicsManager.copySurface(_graphicsManager._vesaScreen, 60, 50, 520, 380, _graphicsManager._vesaBuffer, 60, 50);
 		} else {
 			_eventsManager->refreshScreenAndEvents();
 		}
-		if (_globals._creditsItem[_globals._creditsLineNumb - 1]._linePosY <= 39) {
-			_globals._creditsPosY = 440;
+		if (_globals->_creditsItem[_globals->_creditsLineNumb - 1]._linePosY <= 39) {
+			_globals->_creditsPosY = 440;
 			++soundId;
 			if (soundId > 31)
 				soundId = 28;
 			_soundManager.playSound(soundId);
 		}
-		_globals._creditsStartX = -1;
-		_globals._creditsEndX = -1;
-		_globals._creditsStartY = -1;
-		_globals._creditsEndY = -1;
+		_globals->_creditsStartX = -1;
+		_globals->_creditsEndX = -1;
+		_globals->_creditsStartY = -1;
+		_globals->_creditsEndY = -1;
 	} while ((_eventsManager->getMouseButton() != 1) && (!shouldQuit()));
 	_graphicsManager.fadeOutLong();
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 	_eventsManager->_mouseFl = true;
 }
 
@@ -2548,29 +2549,29 @@ void HopkinsEngine::handleOceanMouseEvents() {
 	int oldX;
 	switch (_objectsManager._zoneNum) {
 	case 1:
-		switch (_globals._oceanDirection) {
+		switch (_globals->_oceanDirection) {
 		case DIR_UP:
-			_objectsManager.SPACTION(_globals.PERSO, "27,26,25,24,23,22,21,20,19,18,-1,", 6, false);
+			_objectsManager.SPACTION(_globals->PERSO, "27,26,25,24,23,22,21,20,19,18,-1,", 6, false);
 			break;
 		case DIR_RIGHT:
-			_objectsManager.SPACTION(_globals.PERSO, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,-1,", 6, false);
+			_objectsManager.SPACTION(_globals->PERSO, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,-1,", 6, false);
 			break;
 		case DIR_DOWN:
-			_objectsManager.SPACTION(_globals.PERSO, "9,10,11,12,13,14,15,16,17,18,-1,", 6, false);
+			_objectsManager.SPACTION(_globals->PERSO, "9,10,11,12,13,14,15,16,17,18,-1,", 6, false);
 			break;
 		default:
 			break;
 		}
 
-		_globals._oceanDirection = DIR_LEFT;
-		_globals._exitId = 1;
+		_globals->_oceanDirection = DIR_LEFT;
+		_globals->_exitId = 1;
 		oldX = _objectsManager.getSpriteX(0);
 		for (;;) {
-			if (_globals._speed == 1)
+			if (_globals->_speed == 1)
 				oldX -= 2;
-			else if (_globals._speed == 2)
+			else if (_globals->_speed == 2)
 				oldX -= 4;
-			else if (_globals._speed == 3)
+			else if (_globals->_speed == 3)
 				oldX -= 6;
 			_objectsManager.setSpriteX(0, oldX);
 			setSubmarineSprites();
@@ -2585,28 +2586,28 @@ void HopkinsEngine::handleOceanMouseEvents() {
 		}
 		break;
 	case 2:
-		switch (_globals._oceanDirection) {
+		switch (_globals->_oceanDirection) {
 		case DIR_UP:
-			_objectsManager.SPACTION(_globals.PERSO, "27,28,29,30,31,32,33,34,35,36,-1,", 6, false);
+			_objectsManager.SPACTION(_globals->PERSO, "27,28,29,30,31,32,33,34,35,36,-1,", 6, false);
 			break;
 		case DIR_DOWN:
-			_objectsManager.SPACTION(_globals.PERSO, "9,8,7,6,5,4,3,2,1,0,-1,", 6, false);
+			_objectsManager.SPACTION(_globals->PERSO, "9,8,7,6,5,4,3,2,1,0,-1,", 6, false);
 			break;
 		case DIR_LEFT:
-			_objectsManager.SPACTION(_globals.PERSO, "18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,-1,", 6, false);
+			_objectsManager.SPACTION(_globals->PERSO, "18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,-1,", 6, false);
 			break;
 		default:
 			break;
 		}
-		_globals._oceanDirection = DIR_RIGHT;
-		_globals._exitId = 2;
+		_globals->_oceanDirection = DIR_RIGHT;
+		_globals->_exitId = 2;
 		oldX = _objectsManager.getSpriteX(0);
 		for (;;) {
-			if (_globals._speed == 1)
+			if (_globals->_speed == 1)
 				oldX += 2;
-			else if (_globals._speed == 2)
+			else if (_globals->_speed == 2)
 				oldX += 4;
-			else if (_globals._speed == 3)
+			else if (_globals->_speed == 3)
 				oldX += 6;
 			_objectsManager.setSpriteX(0, oldX);
 			setSubmarineSprites();
@@ -2620,15 +2621,15 @@ void HopkinsEngine::handleOceanMouseEvents() {
 		}
 		break;
 	case 3:
-		switch (_globals._oceanDirection) {
+		switch (_globals->_oceanDirection) {
 		case DIR_RIGHT:
 			oldX = _objectsManager.getSpriteX(0);
 			do {
-				if (_globals._speed == 1)
+				if (_globals->_speed == 1)
 					oldX += 2;
-				else if (_globals._speed == 2)
+				else if (_globals->_speed == 2)
 					oldX += 4;
-				else if (_globals._speed == 3)
+				else if (_globals->_speed == 3)
 					oldX += 6;
 				_objectsManager.setSpriteX(0, oldX);
 				setSubmarineSprites();
@@ -2639,19 +2640,19 @@ void HopkinsEngine::handleOceanMouseEvents() {
 				}
 			} while (oldX <= 235);
 			if (!displAnim)
-				_objectsManager.SPACTION(_globals.PERSO, "36,35,34,33,32,31,30,29,28,27,-1,", 6, false);
+				_objectsManager.SPACTION(_globals->PERSO, "36,35,34,33,32,31,30,29,28,27,-1,", 6, false);
 			break;
 		case DIR_DOWN:
-			_objectsManager.SPACTION(_globals.PERSO, "9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,-1,", 6, false);
+			_objectsManager.SPACTION(_globals->PERSO, "9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,-1,", 6, false);
 			break;
 		case DIR_LEFT:
 			oldX = _objectsManager.getSpriteX(0);
 			do {
-				if (_globals._speed == 1)
+				if (_globals->_speed == 1)
 					oldX -= 2;
-				else if (_globals._speed == 2)
+				else if (_globals->_speed == 2)
 					oldX -= 4;
-				else if (_globals._speed == 3)
+				else if (_globals->_speed == 3)
 					oldX -= 6;
 				_objectsManager.setSpriteX(0, oldX);
 				setSubmarineSprites();
@@ -2662,27 +2663,27 @@ void HopkinsEngine::handleOceanMouseEvents() {
 				}
 			} while (oldX > 236);
 			if (!displAnim)
-				_objectsManager.SPACTION(_globals.PERSO, "18,19,20,21,22,23,24,25,26,27,-1,", 6, false);
+				_objectsManager.SPACTION(_globals->PERSO, "18,19,20,21,22,23,24,25,26,27,-1,", 6, false);
 			break;
 		default:
 			break;
 		}
-		_globals._oceanDirection = DIR_UP;
-		_globals._exitId = 3;
+		_globals->_oceanDirection = DIR_UP;
+		_globals->_exitId = 3;
 		break;
 	case 4:
-		switch (_globals._oceanDirection) {
+		switch (_globals->_oceanDirection) {
 		case DIR_UP:
-			_objectsManager.SPACTION(_globals.PERSO, "27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,-1,", 6, false);
+			_objectsManager.SPACTION(_globals->PERSO, "27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,-1,", 6, false);
 			break;
 		case DIR_RIGHT:
 			oldX = _objectsManager.getSpriteX(0);
 			do {
-				if (_globals._speed == 1)
+				if (_globals->_speed == 1)
 					oldX += 2;
-				else if (_globals._speed == 2)
+				else if (_globals->_speed == 2)
 					oldX += 4;
-				else if (_globals._speed == 3)
+				else if (_globals->_speed == 3)
 					oldX += 6;
 				_objectsManager.setSpriteX(0, oldX);
 				setSubmarineSprites();
@@ -2693,16 +2694,16 @@ void HopkinsEngine::handleOceanMouseEvents() {
 				}
 			} while (oldX <= 235);
 			if (!displAnim)
-				_objectsManager.SPACTION(_globals.PERSO, "0,1,2,3,4,5,6,7,8,9,-1,", 6, false);
+				_objectsManager.SPACTION(_globals->PERSO, "0,1,2,3,4,5,6,7,8,9,-1,", 6, false);
 			break;
 		case DIR_LEFT:
 			oldX = _objectsManager.getSpriteX(0);
 			for (;;) {
-				if (_globals._speed == 1)
+				if (_globals->_speed == 1)
 					oldX -= 2;
-				else if (_globals._speed == 2)
+				else if (_globals->_speed == 2)
 					oldX -= 4;
-				else if (_globals._speed == 3)
+				else if (_globals->_speed == 3)
 					oldX -= 6;
 				_objectsManager.setSpriteX(0, oldX);
 				setSubmarineSprites();
@@ -2712,7 +2713,7 @@ void HopkinsEngine::handleOceanMouseEvents() {
 
 				if (oldX <= 236) {
 					if (!displAnim)
-						_objectsManager.SPACTION(_globals.PERSO, "18,17,16,15,14,13,12,11,10,9,-1,", 6, false);
+						_objectsManager.SPACTION(_globals->PERSO, "18,17,16,15,14,13,12,11,10,9,-1,", 6, false);
 					break;
 				}
 			}
@@ -2720,14 +2721,14 @@ void HopkinsEngine::handleOceanMouseEvents() {
 		default:
 			break;
 		}
-		_globals._oceanDirection = DIR_DOWN;
-		_globals._exitId = 4;
+		_globals->_oceanDirection = DIR_DOWN;
+		_globals->_exitId = 4;
 		break;
 	}
 }
 
 void HopkinsEngine::setSubmarineSprites() {
-	switch (_globals._oceanDirection) {
+	switch (_globals->_oceanDirection) {
 	case DIR_UP:
 		_objectsManager.setSpriteIndex(0, 27);
 		break;
@@ -2746,13 +2747,13 @@ void HopkinsEngine::setSubmarineSprites() {
 }
 
 void HopkinsEngine::handleOceanMaze(int16 curExitId, Common::String backgroundFilename, Directions defaultDirection, int16 exit1, int16 exit2, int16 exit3, int16 exit4, int16 soundId) {
-	_globals._cityMapEnabledFl = false;
+	_globals->_cityMapEnabledFl = false;
 	_graphicsManager._noFadingFl = false;
-	_globals._freezeCharacterFl = false;
-	_globals._exitId = 0;
-	_globals._disableInventFl = true;
+	_globals->_freezeCharacterFl = false;
+	_globals->_exitId = 0;
+	_globals->_disableInventFl = true;
 	_soundManager.playSound(soundId);
-	_globals.PERSO = _fileManager->loadFile("VAISSEAU.SPR");
+	_globals->PERSO = _fileManager->loadFile("VAISSEAU.SPR");
 	if (backgroundFilename.size())
 		_graphicsManager.loadImage(backgroundFilename);
 
@@ -2774,10 +2775,10 @@ void HopkinsEngine::handleOceanMaze(int16 curExitId, Common::String backgroundFi
 	if (!exit4)
 		_linesManager.disableZone(4);
 
-	if (!_globals._oceanDirection)
-		_globals._oceanDirection = defaultDirection;
+	if (!_globals->_oceanDirection)
+		_globals->_oceanDirection = defaultDirection;
 
-	switch (_globals._oceanDirection) {
+	switch (_globals->_oceanDirection) {
 	case DIR_UP:
 		_objectsManager._characterPos.x = 236;
 		_objectsManager._startSpriteIndex = 27;
@@ -2798,7 +2799,7 @@ void HopkinsEngine::handleOceanMaze(int16 curExitId, Common::String backgroundFi
 		break;
 	}
 
-	_objectsManager.addStaticSprite(_globals.PERSO, Common::Point(_objectsManager._characterPos.x, 110), 0, _objectsManager._startSpriteIndex, 0, false, 0, 0);
+	_objectsManager.addStaticSprite(_globals->PERSO, Common::Point(_objectsManager._characterPos.x, 110), 0, _objectsManager._startSpriteIndex, 0, false, 0, 0);
 	_graphicsManager.SETCOLOR3(252, 100, 100, 100);
 	_graphicsManager.SETCOLOR3(253, 100, 100, 100);
 	_graphicsManager.SETCOLOR3(251, 100, 100, 100);
@@ -2814,7 +2815,7 @@ void HopkinsEngine::handleOceanMaze(int16 curExitId, Common::String backgroundFi
 	if (!_graphicsManager._noFadingFl)
 		_graphicsManager.fadeInLong();
 	_graphicsManager._noFadingFl = false;
-	_globals.iRegul = 1;
+	_globals->iRegul = 1;
 
 	for (;;) {
 		int mouseButton = _eventsManager->getMouseButton();
@@ -2824,23 +2825,23 @@ void HopkinsEngine::handleOceanMaze(int16 curExitId, Common::String backgroundFi
 		setSubmarineSprites();
 
 		_eventsManager->refreshScreenAndEvents();
-		if (_globals._exitId || shouldQuit())
+		if (_globals->_exitId || shouldQuit())
 			break;
 	}
 
-	if (_globals._exitId == 1)
-		_globals._exitId = exit1;
-	else if (_globals._exitId == 2)
-		_globals._exitId = exit2;
-	else if (_globals._exitId == 3)
-		_globals._exitId = exit3;
-	else if (_globals._exitId == 4)
-		_globals._exitId = exit4;
+	if (_globals->_exitId == 1)
+		_globals->_exitId = exit1;
+	else if (_globals->_exitId == 2)
+		_globals->_exitId = exit2;
+	else if (_globals->_exitId == 3)
+		_globals->_exitId = exit3;
+	else if (_globals->_exitId == 4)
+		_globals->_exitId = exit4;
 	_graphicsManager.fadeOutLong();
 	_objectsManager.removeSprite(0);
 	_objectsManager.clearScreen();
-	_globals.PERSO = _fileManager->loadFile("PERSO.SPR");
-	_globals._characterType = 0;
+	_globals->PERSO = _fileManager->loadFile("PERSO.SPR");
+	_globals->_characterType = 0;
 }
 
 void HopkinsEngine::syncSoundSettings() {
@@ -2859,8 +2860,8 @@ bool HopkinsEngine::displayAdultDisclaimer() {
 	_graphicsManager._maxY = SCREEN_HEIGHT - 1;
 	_eventsManager->_breakoutFl = false;
 	_objectsManager._forestFl = false;
-	_globals._disableInventFl = true;
-	_globals._exitId = 0;
+	_globals->_disableInventFl = true;
+	_globals->_exitId = 0;
 
 	_graphicsManager.loadImage("ADULT");
 	_graphicsManager.fadeInLong();
@@ -2882,7 +2883,7 @@ bool HopkinsEngine::displayAdultDisclaimer() {
 		_eventsManager->refreshScreenAndEvents();
 	} while (!shouldQuit() && (buttonIndex == 0 || _eventsManager->getMouseButton() != 1));
 
-	_globals._disableInventFl = false;
+	_globals->_disableInventFl = false;
 	_graphicsManager.fadeOutLong();
 
 	if (buttonIndex != 2) {
diff --git a/engines/hopkins/hopkins.h b/engines/hopkins/hopkins.h
index c751a66..5f88385 100644
--- a/engines/hopkins/hopkins.h
+++ b/engines/hopkins/hopkins.h
@@ -149,8 +149,8 @@ public:
 	EventsManager *_eventsManager;
 	FileManager *_fileManager;
 	FontManager *_fontManager;
+	Globals *_globals;
 
-	Globals _globals;
 	GraphicsManager _graphicsManager;
 	LinesManager _linesManager;
 	MenuManager _menuManager;
diff --git a/engines/hopkins/lines.cpp b/engines/hopkins/lines.cpp
index 2eaefb1..dac2a30 100644
--- a/engines/hopkins/lines.cpp
+++ b/engines/hopkins/lines.cpp
@@ -94,10 +94,10 @@ LinesManager::LinesManager() {
 }
 
 LinesManager::~LinesManager() {
-	_vm->_globals.freeMemory(_largeBuf);
-	_vm->_globals.freeMemory((byte *) _testRoute0);
-	_vm->_globals.freeMemory((byte *) _testRoute1);
-	_vm->_globals.freeMemory((byte *) _testRoute2);
+	_vm->_globals->freeMemory(_largeBuf);
+	_vm->_globals->freeMemory((byte *) _testRoute0);
+	_vm->_globals->freeMemory((byte *) _testRoute1);
+	_vm->_globals->freeMemory((byte *) _testRoute2);
 }
 
 void LinesManager::setParent(HopkinsEngine *vm) {
@@ -121,7 +121,7 @@ void LinesManager::loadLines(const Common::String &file) {
 		    READ_LE_INT16((uint16 *)ptr + (idx * 5) + 4));
 	}
 	initRoute();
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 }
 
 /** 
@@ -199,7 +199,7 @@ void LinesManager::addZoneLine(int idx, int fromX, int fromY, int destX, int des
 		BOBZONE[bobZoneIdx] = fromY;
 	} else {
 		assert (idx <= MAX_LINES);
-		_zoneLine[idx]._zoneData = (int16 *)_vm->_globals.freeMemory((byte *)_zoneLine[idx]._zoneData);
+		_zoneLine[idx]._zoneData = (int16 *)_vm->_globals->freeMemory((byte *)_zoneLine[idx]._zoneData);
 
 		int distX = abs(fromX - destX);
 		int distY = abs(fromY - destY);
@@ -209,7 +209,7 @@ void LinesManager::addZoneLine(int idx, int fromX, int fromY, int destX, int des
 		else
 			maxDist += distX;
 
-		zoneData = (int16 *)_vm->_globals.allocMemory(2 * sizeof(int16) * maxDist + (4 * sizeof(int16)));
+		zoneData = (int16 *)_vm->_globals->allocMemory(2 * sizeof(int16) * maxDist + (4 * sizeof(int16)));
 		assert(zoneData != (int16 *)g_PTRNUL);
 
 		_zoneLine[idx]._zoneData = zoneData;
@@ -247,14 +247,14 @@ void LinesManager::addLine(int lineIdx, Directions direction, int fromX, int fro
 	if (_linesNumb < lineIdx)
 		_linesNumb = lineIdx;
 
-	_lineItem[lineIdx]._lineData = (int16 *)_vm->_globals.freeMemory((byte *)_lineItem[lineIdx]._lineData);
+	_lineItem[lineIdx]._lineData = (int16 *)_vm->_globals->freeMemory((byte *)_lineItem[lineIdx]._lineData);
 	int distX = abs(fromX - destX) + 1;
 	int distY = abs(fromY - destY) + 1;
 	int maxDist = distY;
 	if (distX > maxDist)
 		maxDist = distX;
 
-	byte *zoneData = _vm->_globals.allocMemory(4 * maxDist + 8);
+	byte *zoneData = _vm->_globals->allocMemory(4 * maxDist + 8);
 	assert (zoneData != g_PTRNUL);
 
 	Common::fill(zoneData, zoneData + 4 * maxDist + 8, 0);
@@ -935,7 +935,7 @@ int LinesManager::GENIAL(int lineIdx, int dataIdx, int fromX, int fromY, int des
 				break;
 
 			lineIdxDown = foundLineIdx;
-			if (_vm->_globals._characterMaxPosY <= curY || maxLineY <= curY)
+			if (_vm->_globals->_characterMaxPosY <= curY || maxLineY <= curY)
 				break;
 		}
 		int curX = destX;
@@ -1081,23 +1081,23 @@ RouteItem *LinesManager::PARCOURS2(int fromX, int fromY, int destX, int destY) {
 	Directions newDir = DIR_NONE;
 	if (destY <= 24)
 		clipDestY = 25;
-	if (!_vm->_globals._checkDistanceFl) {
-		if (abs(fromX - _vm->_globals._oldRouteFromX) <= 4 && abs(fromY - _vm->_globals._oldRouteFromY) <= 4 &&
-		    abs(_vm->_globals._oldRouteDestX - destX) <= 4 && abs(_vm->_globals._oldRouteDestY - clipDestY) <= 4)
+	if (!_vm->_globals->_checkDistanceFl) {
+		if (abs(fromX - _vm->_globals->_oldRouteFromX) <= 4 && abs(fromY - _vm->_globals->_oldRouteFromY) <= 4 &&
+		    abs(_vm->_globals->_oldRouteDestX - destX) <= 4 && abs(_vm->_globals->_oldRouteDestY - clipDestY) <= 4)
 			return (RouteItem *)g_PTRNUL;
 
 		if (abs(fromX - destX) <= 4 && abs(fromY - clipDestY) <= 4)
 			return (RouteItem *)g_PTRNUL;
 
-		if (_vm->_globals._oldZoneNum > 0 && _vm->_objectsManager._zoneNum > 0 && _vm->_globals._oldZoneNum == _vm->_objectsManager._zoneNum)
+		if (_vm->_globals->_oldZoneNum > 0 && _vm->_objectsManager._zoneNum > 0 && _vm->_globals->_oldZoneNum == _vm->_objectsManager._zoneNum)
 			return (RouteItem *)g_PTRNUL;
 	}
-	_vm->_globals._checkDistanceFl = false;
-	_vm->_globals._oldZoneNum = _vm->_objectsManager._zoneNum;
-	_vm->_globals._oldRouteFromX = fromX;
-	_vm->_globals._oldRouteDestX = destX;
-	_vm->_globals._oldRouteFromY = fromY;
-	_vm->_globals._oldRouteDestY = clipDestY;
+	_vm->_globals->_checkDistanceFl = false;
+	_vm->_globals->_oldZoneNum = _vm->_objectsManager._zoneNum;
+	_vm->_globals->_oldRouteFromX = fromX;
+	_vm->_globals->_oldRouteDestX = destX;
+	_vm->_globals->_oldRouteFromY = fromY;
+	_vm->_globals->_oldRouteDestY = clipDestY;
 	_pathFindingMaxDepth = 0;
 	int routeIdx = 0;
 	if (destX <= 19)
@@ -1106,8 +1106,8 @@ RouteItem *LinesManager::PARCOURS2(int fromX, int fromY, int destX, int destY) {
 		clipDestY = 20;
 	if (clipDestX > _vm->_graphicsManager._maxX - 10)
 		clipDestX = _vm->_graphicsManager._maxX - 10;
-	if (clipDestY > _vm->_globals._characterMaxPosY)
-		clipDestY = _vm->_globals._characterMaxPosY;
+	if (clipDestY > _vm->_globals->_characterMaxPosY)
+		clipDestY = _vm->_globals->_characterMaxPosY;
 
 	if (abs(fromX - clipDestX) <= 3 && abs(fromY - clipDestY) <= 3)
 		return (RouteItem *)g_PTRNUL;
@@ -2196,9 +2196,9 @@ bool LinesManager::makeSmoothMove(int fromX, int fromY, int destX, int destY) {
 		int smoothIdx = 0;
 		int stepCount = 0;
 		while (curX > destX && destY > curY) {
-			int realSpeedX = _vm->_globals._hopkinsItem[hopkinsIdx]._speedX;
-			int realSpeedY = _vm->_globals._hopkinsItem[hopkinsIdx]._speedY;
-			int spriteSize = _vm->_globals._spriteSize[curY];
+			int realSpeedX = _vm->_globals->_hopkinsItem[hopkinsIdx]._speedX;
+			int realSpeedY = _vm->_globals->_hopkinsItem[hopkinsIdx]._speedY;
+			int spriteSize = _vm->_globals->_spriteSize[curY];
 			if (spriteSize < 0) {
 				realSpeedX = _vm->_graphicsManager.zoomOut(realSpeedX, -spriteSize);
 				realSpeedY = _vm->_graphicsManager.zoomOut(realSpeedY, -spriteSize);
@@ -2230,9 +2230,9 @@ bool LinesManager::makeSmoothMove(int fromX, int fromY, int destX, int destY) {
 		int smoothIdx = 0;
 		int stepCount = 0;
 		while (curX < destX && destY > curY) {
-			int realSpeedX = _vm->_globals._hopkinsItem[hopkinsIdx]._speedX;
-			int realSpeedY = _vm->_globals._hopkinsItem[hopkinsIdx]._speedY;
-			int spriteSize = _vm->_globals._spriteSize[curY];
+			int realSpeedX = _vm->_globals->_hopkinsItem[hopkinsIdx]._speedX;
+			int realSpeedY = _vm->_globals->_hopkinsItem[hopkinsIdx]._speedY;
+			int spriteSize = _vm->_globals->_spriteSize[curY];
 			if (spriteSize < 0) {
 				realSpeedX = _vm->_graphicsManager.zoomOut(realSpeedX, -spriteSize);
 				realSpeedY = _vm->_graphicsManager.zoomOut(realSpeedY, -spriteSize);
@@ -2264,8 +2264,8 @@ bool LinesManager::makeSmoothMove(int fromX, int fromY, int destX, int destY) {
 		int smoothIdx = 0;
 		int stepCount = 0;
 		while (curX > destX && destY < curY) {
-			int realSpeedX = _vm->_graphicsManager.zoomOut(_vm->_globals._hopkinsItem[hopkinsIdx]._speedX, 25);
-			int realSpeedY = _vm->_graphicsManager.zoomOut(_vm->_globals._hopkinsItem[hopkinsIdx]._speedY, 25);
+			int realSpeedX = _vm->_graphicsManager.zoomOut(_vm->_globals->_hopkinsItem[hopkinsIdx]._speedX, 25);
+			int realSpeedY = _vm->_graphicsManager.zoomOut(_vm->_globals->_hopkinsItem[hopkinsIdx]._speedY, 25);
 			int oldY = curY;
 			for (int i = 0; i < realSpeedX; i++) {
 				--curX;
@@ -2292,8 +2292,8 @@ bool LinesManager::makeSmoothMove(int fromX, int fromY, int destX, int destY) {
 		int stepCount = 0;
 		while (curX < destX && destY < curY) {
 			int oldY = curY;
-			int realSpeedX = _vm->_graphicsManager.zoomOut(_vm->_globals._hopkinsItem[hopkinsIdx]._speedX, 25);
-			int realSpeedY = _vm->_graphicsManager.zoomOut(_vm->_globals._hopkinsItem[hopkinsIdx]._speedY, 25);
+			int realSpeedX = _vm->_graphicsManager.zoomOut(_vm->_globals->_hopkinsItem[hopkinsIdx]._speedX, 25);
+			int realSpeedY = _vm->_graphicsManager.zoomOut(_vm->_globals->_hopkinsItem[hopkinsIdx]._speedY, 25);
 			for (int i = 0; i < realSpeedX; i++) {
 				++curX;
 				_smoothRoute[smoothIdx]._posX = curX;
@@ -2460,12 +2460,12 @@ int LinesManager::testLine(int paramX, int paramY, int *a3, int *foundLineIdx, i
 }
 
 int LinesManager::CALC_PROPRE(int idx) {
-	int size = _vm->_globals._spriteSize[idx];
-	if (_vm->_globals._characterType == 1) {
+	int size = _vm->_globals->_spriteSize[idx];
+	if (_vm->_globals->_characterType == 1) {
 		if (size < 0)
 			size = -size;
 		size = 20 * (5 * size - 100) / -80;
-	} else if (_vm->_globals._characterType == 2) {
+	} else if (_vm->_globals->_characterType == 2) {
 		if (size < 0)
 			size = -size;
 		size = 20 * (5 * size - 165) / -67;
@@ -2748,7 +2748,7 @@ void LinesManager::clearAll() {
 	if (!_testRoute2)
 		_testRoute2 = (RouteItem*)g_PTRNUL;
 	
-	_largeBuf = _vm->_globals.allocMemory(10000);
+	_largeBuf = _vm->_globals->allocMemory(10000);
 	_lineBuf = (int16 *)(_largeBuf);
 }
 
@@ -2765,7 +2765,7 @@ void LinesManager::clearAllZones() {
  */
 void LinesManager::removeZoneLine(int idx) {
 	assert (idx <= MAX_LINES);
-	_zoneLine[idx]._zoneData = (int16 *)_vm->_globals.freeMemory((byte *)_zoneLine[idx]._zoneData);
+	_zoneLine[idx]._zoneData = (int16 *)_vm->_globals->freeMemory((byte *)_zoneLine[idx]._zoneData);
 }
 
 void LinesManager::resetLines() {
@@ -2780,7 +2780,7 @@ void LinesManager::resetLines() {
 void LinesManager::removeLine(int idx) {
 	if (idx > MAX_LINES)
 		error("Attempting to add a line obstacle > MAX_LIGNE.");
-	_lineItem[idx]._lineData = (int16 *)_vm->_globals.freeMemory((byte *)_lineItem[idx]._lineData);
+	_lineItem[idx]._lineData = (int16 *)_vm->_globals->freeMemory((byte *)_lineItem[idx]._lineData);
 }
 
 void LinesManager::setMaxLineIdx(int idx) {
@@ -2815,7 +2815,7 @@ void LinesManager::checkZone() {
 	int mouseX = _vm->_eventsManager->getMouseX();
 	int mouseY = _vm->_eventsManager->getMouseY();
 	int oldMouseY = mouseY;
-	if (_vm->_globals._cityMapEnabledFl
+	if (_vm->_globals->_cityMapEnabledFl
 		|| _vm->_eventsManager->_startPos.x >= mouseX
 		|| (mouseY = _vm->_graphicsManager._scrollOffset + 54, mouseX >= mouseY)
 		|| (mouseY = oldMouseY - 1, mouseY < 0 || mouseY > 59)) {
@@ -2826,32 +2826,32 @@ void LinesManager::checkZone() {
 		_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->_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)
+	_vm->_globals->compteur_71++;
+	if (_vm->_globals->compteur_71 <= 1)
 		return;
 
-	if (_vm->_globals._freezeCharacterFl || (_route == (RouteItem *)g_PTRNUL) || _vm->_globals.compteur_71 > 4) {
-		_vm->_globals.compteur_71 = 0;
+	if (_vm->_globals->_freezeCharacterFl || (_route == (RouteItem *)g_PTRNUL) || _vm->_globals->compteur_71 > 4) {
+		_vm->_globals->compteur_71 = 0;
 		int zoneId;
-		if (_vm->_globals._oldMouseX != mouseX || _vm->_globals._oldMouseY != oldMouseY) {
+		if (_vm->_globals->_oldMouseX != mouseX || _vm->_globals->_oldMouseY != oldMouseY) {
 			zoneId = getMouseZone();
 		} else {
-			zoneId = _vm->_globals._oldMouseZoneId;
+			zoneId = _vm->_globals->_oldMouseZoneId;
 		}
-		if (_vm->_globals._oldMouseZoneId != zoneId) {
+		if (_vm->_globals->_oldMouseZoneId != zoneId) {
 			_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
 			_vm->_eventsManager->_mouseCursorId = 4;
 			_vm->_eventsManager->changeMouseCursor(4);
-			if (_vm->_globals._forceHideText) {
+			if (_vm->_globals->_forceHideText) {
 				_vm->_fontManager->hideText(5);
-				_vm->_globals._forceHideText = false;
+				_vm->_globals->_forceHideText = false;
 				return;
 			}
 		}
@@ -2861,16 +2861,16 @@ void LinesManager::checkZone() {
 				ZONEP[zoneId]._verbFl5 || ZONEP[zoneId]._verbFl6 ||
 				ZONEP[zoneId]._verbFl7 || ZONEP[zoneId]._verbFl8 ||
 				ZONEP[zoneId]._verbFl9 || ZONEP[zoneId]._verbFl10) {
-					if (_vm->_globals._oldMouseZoneId != zoneId) {
-						_vm->_fontManager->initTextBuffers(5, ZONEP[zoneId]._messageId, _vm->_globals._zoneFilename, 0, 430, 0, 0, 252);
+					if (_vm->_globals->_oldMouseZoneId != zoneId) {
+						_vm->_fontManager->initTextBuffers(5, ZONEP[zoneId]._messageId, _vm->_globals->_zoneFilename, 0, 430, 0, 0, 252);
 						_vm->_fontManager->showText(5);
-						_vm->_globals._forceHideText = true;
+						_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);
+					_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]._verbFl1 == 2) {
 							_vm->_eventsManager->changeMouseCursor(16);
@@ -2885,14 +2885,14 @@ void LinesManager::checkZone() {
 			}
 		}
 		_vm->_objectsManager._zoneNum = zoneId;
-		_vm->_globals._oldMouseX = mouseX;
-		_vm->_globals._oldMouseY = oldMouseY;
-		_vm->_globals._oldMouseZoneId = zoneId;
-		if (_vm->_globals._freezeCharacterFl && (_vm->_eventsManager->_mouseCursorId == 4)) {
+		_vm->_globals->_oldMouseX = mouseX;
+		_vm->_globals->_oldMouseY = oldMouseY;
+		_vm->_globals->_oldMouseZoneId = zoneId;
+		if (_vm->_globals->_freezeCharacterFl && (_vm->_eventsManager->_mouseCursorId == 4)) {
 			if (zoneId != -1 && zoneId != 0)
 				_vm->_objectsManager.handleRightButton();
 		}
-		if ((_vm->_globals._cityMapEnabledFl && zoneId == -1) || !zoneId) {
+		if ((_vm->_globals->_cityMapEnabledFl && zoneId == -1) || !zoneId) {
 			_vm->_objectsManager.setVerb(0);
 			_vm->_eventsManager->_mouseCursorId = 0;
 			_vm->_eventsManager->changeMouseCursor(0);
diff --git a/engines/hopkins/menu.cpp b/engines/hopkins/menu.cpp
index eb3f7ef..eca853f 100644
--- a/engines/hopkins/menu.cpp
+++ b/engines/hopkins/menu.cpp
@@ -57,34 +57,34 @@ int MenuManager::menu() {
 	while (!g_system->getEventManager()->shouldQuit()) {
 		_vm->_objectsManager._forestFl = false;
 		_vm->_eventsManager->_breakoutFl = false;
-		_vm->_globals._disableInventFl = true;
-		_vm->_globals._exitId = 0;
+		_vm->_globals->_disableInventFl = true;
+		_vm->_globals->_exitId = 0;
 
 		for (int idx = 0; idx < 31; ++idx)
-			_vm->_globals._inventory[idx] = 0;
+			_vm->_globals->_inventory[idx] = 0;
 
-		memset(_vm->_globals._saveData, 0, 2000);
+		memset(_vm->_globals->_saveData, 0, 2000);
 		_vm->_objectsManager.addObject(14);
 		memset(frameIndex, 0, sizeof(int) * ARRAYSIZE(frameIndex));
 
 		if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
 			_vm->_graphicsManager.loadImage("MENU");
-		else if (_vm->_globals._language == LANG_EN)
+		else if (_vm->_globals->_language == LANG_EN)
 			_vm->_graphicsManager.loadImage("MENUAN");
-		else if (_vm->_globals._language == LANG_FR)
+		else if (_vm->_globals->_language == LANG_FR)
 			_vm->_graphicsManager.loadImage("MENUFR");
-		else if (_vm->_globals._language == LANG_SP)
+		else if (_vm->_globals->_language == LANG_SP)
 			_vm->_graphicsManager.loadImage("MENUES");
 
 		_vm->_graphicsManager.fadeInLong();
 
 		if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
 			spriteData = _vm->_objectsManager.loadSprite("MENU.SPR");
-		else if (_vm->_globals._language == LANG_EN)
+		else if (_vm->_globals->_language == LANG_EN)
 			spriteData = _vm->_objectsManager.loadSprite("MENUAN.SPR");
-		else if (_vm->_globals._language == LANG_FR)
+		else if (_vm->_globals->_language == LANG_FR)
 			spriteData = _vm->_objectsManager.loadSprite("MENUFR.SPR");
-		else if (_vm->_globals._language == LANG_SP)
+		else if (_vm->_globals->_language == LANG_SP)
 			spriteData = _vm->_objectsManager.loadSprite("MENUES.SPR");
 
 		_vm->_eventsManager->mouseOn();
@@ -141,14 +141,14 @@ int MenuManager::menu() {
 			result = 1;
 			break;
 		} else if (menuIndex == LOAD_GAME) {
-			_vm->_globals._exitId = -1;
+			_vm->_globals->_exitId = -1;
 			_vm->_dialogsManager->showLoadGame();
 
-			if (_vm->_globals._exitId != -1) {
-				result = _vm->_globals._exitId;
+			if (_vm->_globals->_exitId != -1) {
+				result = _vm->_globals->_exitId;
 				break;
 			}
-			_vm->_globals._exitId = 0;
+			_vm->_globals->_exitId = 0;
 		} else if (menuIndex == OPTIONS) {
 			_vm->_dialogsManager->showOptionsDialog();
 		} else if (menuIndex == INTRODUCTION) {
@@ -159,8 +159,8 @@ int MenuManager::menu() {
 		}
 	}
 
-	_vm->_globals.freeMemory(spriteData);
-	_vm->_globals._disableInventFl = false;
+	_vm->_globals->freeMemory(spriteData);
+	_vm->_globals->_disableInventFl = false;
 	_vm->_graphicsManager.fadeOutLong();
 	return result;
 }
diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp
index fee2f66..ce4f06e 100644
--- a/engines/hopkins/objects.cpp
+++ b/engines/hopkins/objects.cpp
@@ -84,9 +84,9 @@ ObjectsManager::ObjectsManager() {
 }
 
 ObjectsManager::~ObjectsManager() {
-	_vm->_globals.freeMemory(_forestSprite);
-	_vm->_globals.freeMemory(_gestureBuf);
-	_vm->_globals.freeMemory(_headSprites);
+	_vm->_globals->freeMemory(_forestSprite);
+	_vm->_globals->freeMemory(_gestureBuf);
+	_vm->_globals->freeMemory(_headSprites);
 }
 
 void ObjectsManager::setParent(HopkinsEngine *vm) {
@@ -95,9 +95,9 @@ void ObjectsManager::setParent(HopkinsEngine *vm) {
 
 void ObjectsManager::clearAll() {
 	_forestFl = false;
-	_forestSprite = _vm->_globals.freeMemory(_forestSprite);
+	_forestSprite = _vm->_globals->freeMemory(_forestSprite);
 	_curGestureFile = 0;
-	_gestureBuf = _vm->_globals.freeMemory(_gestureBuf);
+	_gestureBuf = _vm->_globals->freeMemory(_gestureBuf);
 }
 
 /**
@@ -110,35 +110,35 @@ void ObjectsManager::changeObject(int objIndex) {
 
 byte *ObjectsManager::loadObjectFromFile(int objIndex, bool mode) {
 	byte *dataP = NULL;
-	int objectFileNum = _vm->_globals._objectAuthIcons[objIndex]._objectFileNum;
-	int idx = _vm->_globals._objectAuthIcons[objIndex]._idx;
+	int objectFileNum = _vm->_globals->_objectAuthIcons[objIndex]._objectFileNum;
+	int idx = _vm->_globals->_objectAuthIcons[objIndex]._idx;
 
 	if (mode)
 		++idx;
 
-	if (objectFileNum != _vm->_globals._curObjectFileNum) {
-		if (_vm->_globals._objectDataBuf != g_PTRNUL)
+	if (objectFileNum != _vm->_globals->_curObjectFileNum) {
+		if (_vm->_globals->_objectDataBuf != g_PTRNUL)
 			ObjectsManager::removeObjectDataBuf();
 		if (objectFileNum == 1) {
-			_vm->_globals._objectDataBuf = ObjectsManager::loadSprite("OBJET1.SPR");
+			_vm->_globals->_objectDataBuf = ObjectsManager::loadSprite("OBJET1.SPR");
 		}
-		_vm->_globals._curObjectFileNum = objectFileNum;
+		_vm->_globals->_curObjectFileNum = objectFileNum;
 	}
 
-	int width = ObjectsManager::getWidth(_vm->_globals._objectDataBuf, idx);
-	int height = ObjectsManager::getHeight(_vm->_globals._objectDataBuf, idx);
-	_vm->_globals._objectWidth = width;
-	_vm->_globals._objectHeight = height;
+	int width = ObjectsManager::getWidth(_vm->_globals->_objectDataBuf, idx);
+	int height = ObjectsManager::getHeight(_vm->_globals->_objectDataBuf, idx);
+	_vm->_globals->_objectWidth = width;
+	_vm->_globals->_objectHeight = height;
 
 	if (mode) {
-		sprite_alone(_vm->_globals._objectDataBuf, _vm->_eventsManager->_objectBuf, idx);
+		sprite_alone(_vm->_globals->_objectDataBuf, _vm->_eventsManager->_objectBuf, idx);
 		dataP = _vm->_eventsManager->_objectBuf;
 	} else { 
-		dataP = _vm->_globals.allocMemory(height * width);
+		dataP = _vm->_globals->allocMemory(height * width);
 		if (dataP == g_PTRNUL)
 			error("CAPTURE_OBJET");
 
-		capture_mem_sprite(_vm->_globals._objectDataBuf, dataP, idx);
+		capture_mem_sprite(_vm->_globals->_objectDataBuf, dataP, idx);
 	}
 
 	return dataP;
@@ -150,16 +150,16 @@ byte *ObjectsManager::loadObjectFromFile(int objIndex, bool mode) {
 void ObjectsManager::removeObject(int objIndex) {
 	int idx;
 	for (idx = 1; idx <= 32; ++idx) {
-		if (_vm->_globals._inventory[idx] == objIndex)
+		if (_vm->_globals->_inventory[idx] == objIndex)
 			break;
 	}
 
 	if (idx <= 32) {
 		if (idx == 32) {
-			_vm->_globals._inventory[32] = 0;
+			_vm->_globals->_inventory[32] = 0;
 		} else {
 			for (int i = idx; i < 32; ++i)
-				_vm->_globals._inventory[i] = _vm->_globals._inventory[i + 1];
+				_vm->_globals->_inventory[i] = _vm->_globals->_inventory[i + 1];
 		}
 	}
 	changeObject(14);
@@ -261,8 +261,8 @@ void ObjectsManager::capture_mem_sprite(const byte *objectData, byte *sprite, in
 }
 
 void ObjectsManager::removeObjectDataBuf() {
-	_vm->_globals._curObjectFileNum = 0;
-	_vm->_globals._objectDataBuf = _vm->_globals.freeMemory(_vm->_globals._objectDataBuf);
+	_vm->_globals->_curObjectFileNum = 0;
+	_vm->_globals->_objectDataBuf = _vm->_globals->freeMemory(_vm->_globals->_objectDataBuf);
 }
 
 /**
@@ -279,11 +279,11 @@ void ObjectsManager::addObject(int objIndex) {
 	int arrIndex = 0;
 	for (;;) {
 		++arrIndex;
-		if ((!_vm->_globals._inventory[arrIndex]) || (arrIndex == 32))
+		if ((!_vm->_globals->_inventory[arrIndex]) || (arrIndex == 32))
 			break;
 	}
 
-	_vm->_globals._inventory[arrIndex] = objIndex;
+	_vm->_globals->_inventory[arrIndex] = objIndex;
 }
 
 /**
@@ -296,7 +296,7 @@ void ObjectsManager::displaySprite() {
 	uint16 arr[50];
 
 	// Handle copying any background areas that text are going to be drawn on
-	_vm->_globals._sortedDisplayCount = 0;
+	_vm->_globals->_sortedDisplayCount = 0;
 	for (int idx = 0; idx <= 10; ++idx) {
 		if (_vm->_fontManager->_textList[idx]._enabledFl && _vm->_fontManager->_text[idx]._textType != 2) {
 			clipX = _vm->_fontManager->_textList[idx]._pos.x - 2;
@@ -317,19 +317,19 @@ void ObjectsManager::displaySprite() {
 
 	if (!PERSO_ON) {
 		for (int idx = 0; idx < MAX_SPRITE; ++idx) {
-			if (_vm->_globals.Liste[idx]._visibleFl) {
-				clipX = _vm->_globals.Liste[idx]._posX - 2;
+			if (_vm->_globals->Liste[idx]._visibleFl) {
+				clipX = _vm->_globals->Liste[idx]._posX - 2;
 				if (clipX < _vm->_graphicsManager._minX)
 					clipX = _vm->_graphicsManager._minX;
 
-				clipY = _vm->_globals.Liste[idx]._posY - 2;
+				clipY = _vm->_globals->Liste[idx]._posY - 2;
 				if (clipY < _vm->_graphicsManager._minY)
 					clipY = _vm->_graphicsManager._minY;
 
 				_vm->_graphicsManager.copySurface(_vm->_graphicsManager._vesaScreen, clipX, clipY,
-					_vm->_globals.Liste[idx]._width + 4, _vm->_globals.Liste[idx]._height + 4,
+					_vm->_globals->Liste[idx]._width + 4, _vm->_globals->Liste[idx]._height + 4,
 					_vm->_graphicsManager._vesaBuffer, clipX, clipY);
-				_vm->_globals.Liste[idx]._visibleFl = false;
+				_vm->_globals->Liste[idx]._visibleFl = false;
 			}
 		}
 	}
@@ -340,7 +340,7 @@ void ObjectsManager::displaySprite() {
 	if (!PERSO_ON) {
 		// Handle drawing characters on the screen
 		for (int idx = 0; idx < MAX_SPRITE; ++idx) {
-			_vm->_globals.Liste[idx]._visibleFl = false;
+			_vm->_globals->Liste[idx]._visibleFl = false;
 			if (_sprite[idx]._animationType == 1) {
 				computeSprite(idx);
 				if (_sprite[idx]._activeFl)
@@ -348,68 +348,68 @@ void ObjectsManager::displaySprite() {
 			}
 		}
 
-		if (_vm->_globals._hidingActiveFl)
+		if (_vm->_globals->_hidingActiveFl)
 			checkHidingItem();
 	}
 
-	if (_priorityFl && _vm->_globals._sortedDisplayCount) {
+	if (_priorityFl && _vm->_globals->_sortedDisplayCount) {
 		for (int i = 1; i <= 48; i++) 
 			arr[i] = i;
 
 		do {
 			loopCondFl = false;
-			for (int sortIdx = 1; sortIdx < _vm->_globals._sortedDisplayCount; sortIdx++) {
-				if (_vm->_globals._sortedDisplay[arr[sortIdx]]._priority > _vm->_globals._sortedDisplay[arr[sortIdx + 1]]._priority) {
+			for (int sortIdx = 1; sortIdx < _vm->_globals->_sortedDisplayCount; sortIdx++) {
+				if (_vm->_globals->_sortedDisplay[arr[sortIdx]]._priority > _vm->_globals->_sortedDisplay[arr[sortIdx + 1]]._priority) {
 					SWAP(arr[sortIdx], arr[sortIdx + 1]);
 					loopCondFl = true;
 				}
 			}
 		} while (loopCondFl);
 
-		for (int sortIdx = 1; sortIdx < _vm->_globals._sortedDisplayCount + 1; sortIdx++) {
+		for (int sortIdx = 1; sortIdx < _vm->_globals->_sortedDisplayCount + 1; sortIdx++) {
 			int idx = arr[sortIdx];
-			switch (_vm->_globals._sortedDisplay[idx]._sortMode) {
+			switch (_vm->_globals->_sortedDisplay[idx]._sortMode) {
 			case SORT_BOB:
-				setBobInfo(_vm->_globals._sortedDisplay[idx]._index);
+				setBobInfo(_vm->_globals->_sortedDisplay[idx]._index);
 				break;
 			case SORT_SPRITE:
-				DEF_SPRITE(_vm->_globals._sortedDisplay[idx]._index);
+				DEF_SPRITE(_vm->_globals->_sortedDisplay[idx]._index);
 				break;
 			case SORT_HIDING:
-				displayHiding(_vm->_globals._sortedDisplay[idx]._index);
+				displayHiding(_vm->_globals->_sortedDisplay[idx]._index);
 				break;
 			default:
 				break;
 			}
-			_vm->_globals._sortedDisplay[idx]._sortMode = SORT_NONE;
+			_vm->_globals->_sortedDisplay[idx]._sortMode = SORT_NONE;
 		}
 	} else {
-		for (int idx = 1; idx < _vm->_globals._sortedDisplayCount + 1; ++idx) {
-			switch (_vm->_globals._sortedDisplay[idx]._sortMode) {
+		for (int idx = 1; idx < _vm->_globals->_sortedDisplayCount + 1; ++idx) {
+			switch (_vm->_globals->_sortedDisplay[idx]._sortMode) {
 			case SORT_BOB:
-				setBobInfo(_vm->_globals._sortedDisplay[idx]._index);
+				setBobInfo(_vm->_globals->_sortedDisplay[idx]._index);
 				break;
 			case SORT_SPRITE:
-				DEF_SPRITE(_vm->_globals._sortedDisplay[idx]._index);
+				DEF_SPRITE(_vm->_globals->_sortedDisplay[idx]._index);
 				break;
 			case SORT_HIDING:
-				displayHiding(_vm->_globals._sortedDisplay[idx]._index);
+				displayHiding(_vm->_globals->_sortedDisplay[idx]._index);
 				break;
 			default:
 				break;
 			}
-			_vm->_globals._sortedDisplay[idx]._sortMode = SORT_NONE;
+			_vm->_globals->_sortedDisplay[idx]._sortMode = SORT_NONE;
 		}
 	}
 
 	// Reset the Sort array
 	for (int idx = 0; idx < 50; ++idx) {
-		_vm->_globals._sortedDisplay[idx]._sortMode = SORT_NONE;
-		_vm->_globals._sortedDisplay[idx]._index = 0;
-		_vm->_globals._sortedDisplay[idx]._priority = 0;
+		_vm->_globals->_sortedDisplay[idx]._sortMode = SORT_NONE;
+		_vm->_globals->_sortedDisplay[idx]._index = 0;
+		_vm->_globals->_sortedDisplay[idx]._priority = 0;
 	}
 
-	_vm->_globals._sortedDisplayCount = 0;
+	_vm->_globals->_sortedDisplayCount = 0;
 	if (_vm->_dialogsManager->_inventDisplayedFl) {
 		_vm->_graphicsManager.restoreSurfaceRect(_vm->_graphicsManager._vesaBuffer, _vm->_dialogsManager->_inventWin1, _vm->_dialogsManager->_inventX, _vm->_dialogsManager->_inventY, _vm->_dialogsManager->_inventWidth, _vm->_dialogsManager->_inventHeight);
 		if (_oldBorderPos.x && _oldBorderPos.y)
@@ -428,23 +428,23 @@ void ObjectsManager::displaySprite() {
 	}
 
 	// If the Options dialog is activated, draw the elements
-	if (_vm->_globals._optionDialogFl) {
-		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._optionDialogSpr,
+	if (_vm->_globals->_optionDialogFl) {
+		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_optionDialogSpr,
 			_vm->_eventsManager->_startPos.x + 464, 407, 0);
-		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._optionDialogSpr,
-			_vm->_eventsManager->_startPos.x + 657, 556, _vm->_globals._menuSpeed);
-		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._optionDialogSpr,
-			_vm->_eventsManager->_startPos.x + 731, 495, _vm->_globals._menuTextOff);
-		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._optionDialogSpr,
-			_vm->_eventsManager->_startPos.x + 731, 468, _vm->_globals._menuVoiceOff);
-		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._optionDialogSpr,
-			_vm->_eventsManager->_startPos.x + 731, 441, _vm->_globals._menuSoundOff);
-		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._optionDialogSpr,
-			_vm->_eventsManager->_startPos.x + 731, 414, _vm->_globals._menuMusicOff);
-		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._optionDialogSpr,
-			_vm->_eventsManager->_startPos.x + 600, 522, _vm->_globals._menuDisplayType);
-		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._optionDialogSpr,
-			_vm->_eventsManager->_startPos.x + 611, 502, _vm->_globals._menuScrollSpeed);
+		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_optionDialogSpr,
+			_vm->_eventsManager->_startPos.x + 657, 556, _vm->_globals->_menuSpeed);
+		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_optionDialogSpr,
+			_vm->_eventsManager->_startPos.x + 731, 495, _vm->_globals->_menuTextOff);
+		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_optionDialogSpr,
+			_vm->_eventsManager->_startPos.x + 731, 468, _vm->_globals->_menuVoiceOff);
+		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_optionDialogSpr,
+			_vm->_eventsManager->_startPos.x + 731, 441, _vm->_globals->_menuSoundOff);
+		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_optionDialogSpr,
+			_vm->_eventsManager->_startPos.x + 731, 414, _vm->_globals->_menuMusicOff);
+		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_optionDialogSpr,
+			_vm->_eventsManager->_startPos.x + 600, 522, _vm->_globals->_menuDisplayType);
+		_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_optionDialogSpr,
+			_vm->_eventsManager->_startPos.x + 611, 502, _vm->_globals->_menuScrollSpeed);
 		_vm->_graphicsManager.addDirtyRect(_vm->_eventsManager->_startPos.x + 164, 107, _vm->_eventsManager->_startPos.x + 498, 320);
 	}
 
@@ -496,7 +496,7 @@ void ObjectsManager::initBob() {
 
 void ObjectsManager::resetBob(int idx) {
 	BobItem &bob = _bob[idx];
-	ListeItem &item = _vm->_globals.Liste2[idx];
+	ListeItem &item = _vm->_globals->Liste2[idx];
 
 	bob._bobMode = 0;
 	bob._spriteData = g_PTRNUL;
@@ -540,38 +540,38 @@ void ObjectsManager::setBobInfo(int idx) {
 			_bob[idx]._zoomOutFactor, _bob[idx]._zooInmFactor,
 			_bob[idx]._flipFl);
 
-	_vm->_globals.Liste2[idx]._visibleFl = true;
-	_vm->_globals.Liste2[idx]._posX = xp;
-	_vm->_globals.Liste2[idx]._posY = yp;
+	_vm->_globals->Liste2[idx]._visibleFl = true;
+	_vm->_globals->Liste2[idx]._posX = xp;
+	_vm->_globals->Liste2[idx]._posY = yp;
 
-	_vm->_globals.Liste2[idx]._width = _bob[idx]._oldWidth;
-	_vm->_globals.Liste2[idx]._height = _bob[idx]._oldHeight;
+	_vm->_globals->Liste2[idx]._width = _bob[idx]._oldWidth;
+	_vm->_globals->Liste2[idx]._height = _bob[idx]._oldHeight;
 
-	if (_vm->_globals.Liste2[idx]._posX < _vm->_graphicsManager._minX) {
-		_vm->_globals.Liste2[idx]._width -= _vm->_graphicsManager._minX - _vm->_globals.Liste2[idx]._posX;
-		_vm->_globals.Liste2[idx]._posX = _vm->_graphicsManager._minX;
+	if (_vm->_globals->Liste2[idx]._posX < _vm->_graphicsManager._minX) {
+		_vm->_globals->Liste2[idx]._width -= _vm->_graphicsManager._minX - _vm->_globals->Liste2[idx]._posX;
+		_vm->_globals->Liste2[idx]._posX = _vm->_graphicsManager._minX;
 	}
 
-	if (_vm->_globals.Liste2[idx]._posY < _vm->_graphicsManager._minY) {
-		_vm->_globals.Liste2[idx]._height -= _vm->_graphicsManager._minY - _vm->_globals.Liste2[idx]._posY;
-		_vm->_globals.Liste2[idx]._posY = _vm->_graphicsManager._minY;
+	if (_vm->_globals->Liste2[idx]._posY < _vm->_graphicsManager._minY) {
+		_vm->_globals->Liste2[idx]._height -= _vm->_graphicsManager._minY - _vm->_globals->Liste2[idx]._posY;
+		_vm->_globals->Liste2[idx]._posY = _vm->_graphicsManager._minY;
 	}
 
-	if (_vm->_globals.Liste2[idx]._width + _vm->_globals.Liste2[idx]._posX > _vm->_graphicsManager._maxX)
-		_vm->_globals.Liste2[idx]._width = _vm->_graphicsManager._maxX - _vm->_globals.Liste2[idx]._posX;
+	if (_vm->_globals->Liste2[idx]._width + _vm->_globals->Liste2[idx]._posX > _vm->_graphicsManager._maxX)
+		_vm->_globals->Liste2[idx]._width = _vm->_graphicsManager._maxX - _vm->_globals->Liste2[idx]._posX;
 
-	if (_vm->_globals.Liste2[idx]._height + _vm->_globals.Liste2[idx]._posY > _vm->_graphicsManager._maxY)
-		_vm->_globals.Liste2[idx]._height = _vm->_graphicsManager._maxY - _vm->_globals.Liste2[idx]._posY;
+	if (_vm->_globals->Liste2[idx]._height + _vm->_globals->Liste2[idx]._posY > _vm->_graphicsManager._maxY)
+		_vm->_globals->Liste2[idx]._height = _vm->_graphicsManager._maxY - _vm->_globals->Liste2[idx]._posY;
 
-	if (_vm->_globals.Liste2[idx]._width <= 0 || _vm->_globals.Liste2[idx]._height <= 0)
-		_vm->_globals.Liste2[idx]._visibleFl = false;
+	if (_vm->_globals->Liste2[idx]._width <= 0 || _vm->_globals->Liste2[idx]._height <= 0)
+		_vm->_globals->Liste2[idx]._visibleFl = false;
 
-	if (_vm->_globals.Liste2[idx]._visibleFl)
+	if (_vm->_globals->Liste2[idx]._visibleFl)
 		_vm->_graphicsManager.addDirtyRect(
-             _vm->_globals.Liste2[idx]._posX,
-             _vm->_globals.Liste2[idx]._posY,
-             _vm->_globals.Liste2[idx]._posX + _vm->_globals.Liste2[idx]._width,
-             _vm->_globals.Liste2[idx]._posY + _vm->_globals.Liste2[idx]._height);
+             _vm->_globals->Liste2[idx]._posX,
+             _vm->_globals->Liste2[idx]._posY,
+             _vm->_globals->Liste2[idx]._posX + _vm->_globals->Liste2[idx]._width,
+             _vm->_globals->Liste2[idx]._posY + _vm->_globals->Liste2[idx]._height);
 }
 
 void ObjectsManager::displayBob(int idx) {
@@ -582,11 +582,11 @@ void ObjectsManager::displayBob(int idx) {
 
 	resetBob(idx);
 
-	const byte *data = _vm->_globals._animBqe[idx]._data;
+	const byte *data = _vm->_globals->_animBqe[idx]._data;
 	int bankIdx = READ_LE_INT16(data);
 	if (!bankIdx)
 		return;
-	if ((!_vm->_globals.Bank[bankIdx]._loadedFl) || (!READ_LE_UINT16(data + 24)))
+	if ((!_vm->_globals->Bank[bankIdx]._loadedFl) || (!READ_LE_UINT16(data + 24)))
 		return;
 
 
@@ -602,15 +602,15 @@ void ObjectsManager::displayBob(int idx) {
 
 	_bob[idx]._isSpriteFl = false;
 
-	if (_vm->_globals.Bank[bankIdx]._fileHeader == 1) {
+	if (_vm->_globals->Bank[bankIdx]._fileHeader == 1) {
 		_bob[idx]._isSpriteFl = true;
 		_bob[idx]._zoomFactor = 0;
 		_bob[idx]._flipFl = false;
 	}
 
-	_bob[idx]._animData = _vm->_globals._animBqe[idx]._data;
+	_bob[idx]._animData = _vm->_globals->_animBqe[idx]._data;
 	_bob[idx]._bobMode = 10;
-	_bob[idx]._spriteData = _vm->_globals.Bank[bankIdx]._data;
+	_bob[idx]._spriteData = _vm->_globals->Bank[bankIdx]._data;
 
 	_bob[idx]._bobModeChange = v9;
 	_bob[idx].field20 = v6;
@@ -627,7 +627,7 @@ void ObjectsManager::setBobOffset(int idx, int offset) {
 }
 
 void ObjectsManager::SCBOB(int idx) {
-	HidingItem *hid = &_vm->_globals._hidingItem[idx];
+	HidingItem *hid = &_vm->_globals->_hidingItem[idx];
 	if (hid->_useCount == 0)
 		return;
 
@@ -710,9 +710,9 @@ void ObjectsManager::CALCUL_BOB(int idx) {
 	_bob[idx]._zooInmFactor = posZoom;
 	_bob[idx]._zoomOutFactor = negZoom;
 
-	_vm->_globals.Liste2[idx]._visibleFl = true;
-	_vm->_globals.Liste2[idx]._posX = newX;
-	_vm->_globals.Liste2[idx]._posY = newY;
+	_vm->_globals->Liste2[idx]._visibleFl = true;
+	_vm->_globals->Liste2[idx]._posX = newX;
+	_vm->_globals->Liste2[idx]._posY = newY;
 
 	int width = getWidth(_bob[idx]._spriteData, _bob[idx]._frameIndex);
 	int height = getHeight(_bob[idx]._spriteData, _bob[idx]._frameIndex);
@@ -726,15 +726,15 @@ void ObjectsManager::CALCUL_BOB(int idx) {
 		width = _vm->_graphicsManager.zoomOut(width, negZoom);
 	}
 
-	_vm->_globals.Liste2[idx]._width = width;
-	_vm->_globals.Liste2[idx]._height = height;
+	_vm->_globals->Liste2[idx]._width = width;
+	_vm->_globals->Liste2[idx]._height = height;
 	_bob[idx]._oldWidth = width;
 	_bob[idx]._oldHeight = height;
 }
 
 void ObjectsManager::checkHidingItem() {
 	for (int hidingItemIdx = 0; hidingItemIdx <= 19; hidingItemIdx++) {
-		HidingItem *hid = &_vm->_globals._hidingItem[hidingItemIdx];
+		HidingItem *hid = &_vm->_globals->_hidingItem[hidingItemIdx];
 		if (hid->_useCount == 0)
 			continue;
 
@@ -786,7 +786,7 @@ void ObjectsManager::DEF_SPRITE(int idx) {
 		_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager._vesaBuffer, spr->_spriteData,
 		    spr->_destX + 300, spr->_destY + 300,  spr->_spriteIndex, spr->_reducePct, spr->_zoomPct, spr->_flipFl);
 
-	ListeItem *list = &_vm->_globals.Liste[idx];
+	ListeItem *list = &_vm->_globals->Liste[idx];
 	list->_width = spr->_width;
 	list->_height = spr->_height;
 
@@ -814,9 +814,9 @@ void ObjectsManager::DEF_SPRITE(int idx) {
 }
 
 void ObjectsManager::displayHiding(int idx) {
-	HidingItem *hid = &_vm->_globals._hidingItem[idx];
+	HidingItem *hid = &_vm->_globals->_hidingItem[idx];
 
-	_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals._hidingItemData[1], 
+	_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager._vesaBuffer, _vm->_globals->_hidingItemData[1], 
 		hid->_x + 300, hid->_y + 300, hid->_spriteIndex);
 	_vm->_graphicsManager.addDirtyRect(hid->_x, hid->_y, hid->_x + hid->_width, hid->_y + hid->_height);
 }
@@ -888,9 +888,9 @@ void ObjectsManager::computeSprite(int idx) {
 	spr->_zoomPct = zoomPercent;
 	spr->_reducePct = reducePercent;
 
-	_vm->_globals.Liste[idx]._visibleFl = true;
-	_vm->_globals.Liste[idx]._posX = newPosX;
-	_vm->_globals.Liste[idx]._posY = newPosY;
+	_vm->_globals->Liste[idx]._visibleFl = true;
+	_vm->_globals->Liste[idx]._posX = newPosX;
+	_vm->_globals->Liste[idx]._posY = newPosY;
 
 	int width = getWidth(spr->_spriteData, spr->_spriteIndex);
 	int height = getHeight(spr->_spriteData, spr->_spriteIndex);
@@ -909,12 +909,12 @@ void ObjectsManager::computeSprite(int idx) {
 
 // Before Sort
 void ObjectsManager::beforeSort(SortMode sortMode, int index, int priority) {
-	++_vm->_globals._sortedDisplayCount;
-	assert (_vm->_globals._sortedDisplayCount <= 48);
+	++_vm->_globals->_sortedDisplayCount;
+	assert (_vm->_globals->_sortedDisplayCount <= 48);
 
-	_vm->_globals._sortedDisplay[_vm->_globals._sortedDisplayCount]._sortMode = sortMode;
-	_vm->_globals._sortedDisplay[_vm->_globals._sortedDisplayCount]._index = index;
-	_vm->_globals._sortedDisplay[_vm->_globals._sortedDisplayCount]._priority = priority;
+	_vm->_globals->_sortedDisplay[_vm->_globals->_sortedDisplayCount]._sortMode = sortMode;
+	_vm->_globals->_sortedDisplay[_vm->_globals->_sortedDisplayCount]._index = index;
+	_vm->_globals->_sortedDisplay[_vm->_globals->_sortedDisplayCount]._priority = priority;
 }
 
 // Display BOB Anim
@@ -951,8 +951,8 @@ void ObjectsManager::displayBobAnim() {
 		byte *dataPtr = _bob[idx]._animData + 20;
 		int dataIdx = _bob[idx]._animDataIdx;
 		_bob[idx]._xp = READ_LE_INT16(dataPtr + 2 * dataIdx);
-		if (_vm->_globals._lockedAnims[idx]._enableFl)
-			_bob[idx]._xp = _vm->_globals._lockedAnims[idx]._posX;
+		if (_vm->_globals->_lockedAnims[idx]._enableFl)
+			_bob[idx]._xp = _vm->_globals->_lockedAnims[idx]._posX;
 		if ( PERSO_ON && idx > 20 )
 			_bob[idx]._xp += _vm->_eventsManager->_startPos.x;
 
@@ -964,7 +964,7 @@ void ObjectsManager::displayBobAnim() {
 		_bob[idx]._animDataIdx += 5;
 
 		if (_bob[idx]._moveChange1 > 0) {
-			_bob[idx]._moveChange1 /= _vm->_globals._speed;
+			_bob[idx]._moveChange1 /= _vm->_globals->_speed;
 			if (_bob[idx]._moveChange1 > 0) {
 				_bob[idx]._moveChange2 = 1;
 				if (_bob[idx]._bobModeChange == 1 || _bob[idx]._bobModeChange == 2)
@@ -984,8 +984,8 @@ void ObjectsManager::displayBobAnim() {
 				byte *bobData = _bob[idx]._animData + 20;
 				_bob[idx]._xp = READ_LE_INT16(bobData);
 
-				if (_vm->_globals._lockedAnims[idx]._enableFl)
-					_bob[idx]._xp = _vm->_globals._lockedAnims[idx]._posX;
+				if (_vm->_globals->_lockedAnims[idx]._enableFl)
+					_bob[idx]._xp = _vm->_globals->_lockedAnims[idx]._posX;
 				if (PERSO_ON && idx > 20)
 					_bob[idx]._xp += _vm->_eventsManager->_startPos.x;
 
@@ -997,7 +997,7 @@ void ObjectsManager::displayBobAnim() {
 				_bob[idx]._animDataIdx += 5;
 
 				if (_bob[idx]._moveChange1 > 0) {
-					_bob[idx]._moveChange1 /= _vm->_globals._speed;
+					_bob[idx]._moveChange1 /= _vm->_globals->_speed;
 					// Original code. It can't be negative, so the check is on == 0
 					if (_bob[idx]._moveChange1 <= 0)
 						_bob[idx]._moveChange1 = 1;
@@ -1023,25 +1023,25 @@ void ObjectsManager::displayBobAnim() {
 		if (i > 20 || !PERSO_ON) {
 			if ((_bob[i]._bobMode == 10) && (_bob[i]._bobMode10)) {
 				if ((_bob[i]._bobModeChange != 2) && (_bob[i]._bobModeChange != 4)) {
-					if (_vm->_globals.Liste2[i]._visibleFl) {
+					if (_vm->_globals->Liste2[i]._visibleFl) {
 						_vm->_graphicsManager.copySurface(_vm->_graphicsManager._vesaScreen,
-							_vm->_globals.Liste2[i]._posX, _vm->_globals.Liste2[i]._posY,
-							_vm->_globals.Liste2[i]._width, _vm->_globals.Liste2[i]._height,
-							_vm->_graphicsManager._vesaBuffer, _vm->_globals.Liste2[i]._posX,
-							_vm->_globals.Liste2[i]._posY);
-						_vm->_globals.Liste2[i]._visibleFl = false;
+							_vm->_globals->Liste2[i]._posX, _vm->_globals->Liste2[i]._posY,
+							_vm->_globals->Liste2[i]._width, _vm->_globals->Liste2[i]._height,
+							_vm->_graphicsManager._vesaBuffer, _vm->_globals->Liste2[i]._posX,
+							_vm->_globals->Liste2[i]._posY);
+						_vm->_globals->Liste2[i]._visibleFl = false;
 					}
 				}
 			}
 
 			if (_bob[i]._bobMode == 11) {
-				if (_vm->_globals.Liste2[i]._visibleFl) {
+				if (_vm->_globals->Liste2[i]._visibleFl) {
 					_vm->_graphicsManager.copySurface(_vm->_graphicsManager._vesaScreen,
-						_vm->_globals.Liste2[i]._posX, _vm->_globals.Liste2[i]._posY,
-						_vm->_globals.Liste2[i]._width, _vm->_globals.Liste2[i]._height,
+						_vm->_globals->Liste2[i]._posX, _vm->_globals->Liste2[i]._posY,
+						_vm->_globals->Liste2[i]._width, _vm->_globals->Liste2[i]._height,
 						_vm->_graphicsManager._vesaBuffer,
-						_vm->_globals.Liste2[i]._posX, _vm->_globals.Liste2[i]._posY);
-					_vm->_globals.Liste2[i]._visibleFl = false;
+						_vm->_globals->Liste2[i]._posX, _vm->_globals->Liste2[i]._posY);
+					_vm->_globals->Liste2[i]._visibleFl = false;
 				}
 
 				_bob[i]._bobMode = 0;
@@ -1069,7 +1069,7 @@ void ObjectsManager::displayVBob() {
 	int width, height;
 
 	for (int idx = 0; idx <= 29; idx++) {
-		VBobItem *vbob = &_vm->_globals.VBob[idx];
+		VBobItem *vbob = &_vm->_globals->VBob[idx];
 		if (vbob->_displayMode == 4) {
 			width = getWidth(vbob->_spriteData, vbob->_frameIndex);
 			height = getHeight(vbob->_spriteData, vbob->_frameIndex);
@@ -1081,7 +1081,7 @@ void ObjectsManager::displayVBob() {
 				vbob->_xp, vbob->_yp, width, height);
 
 			_vm->_graphicsManager.addDirtyRect(vbob->_xp, vbob->_yp, vbob->_xp + width, height + vbob->_yp);
-			vbob->_surface = _vm->_globals.freeMemory(vbob->_surface);
+			vbob->_surface = _vm->_globals->freeMemory(vbob->_surface);
 
 			vbob->_displayMode = 0;
 			vbob->_spriteData = g_PTRNUL;
@@ -1109,7 +1109,7 @@ void ObjectsManager::displayVBob() {
 			vbob->_displayMode = 1;
 			vbob->_oldSpriteData = vbob->_spriteData;
 
-			vbob->_surface = _vm->_globals.freeMemory(vbob->_surface);
+			vbob->_surface = _vm->_globals->freeMemory(vbob->_surface);
 
 			vbob->_oldX = vbob->_xp;
 			vbob->_oldY = vbob->_yp;
@@ -1120,9 +1120,9 @@ void ObjectsManager::displayVBob() {
 			width = getWidth(vbob->_spriteData, vbob->_frameIndex);
 			height = getHeight(vbob->_spriteData, vbob->_frameIndex);
 
-			vbob->_surface = _vm->_globals.freeMemory(vbob->_surface);
+			vbob->_surface = _vm->_globals->freeMemory(vbob->_surface);
 
-			byte *surface = _vm->_globals.allocMemory(height * width);
+			byte *surface = _vm->_globals->allocMemory(height * width);
 			vbob->_surface = surface;
 
 			_vm->_graphicsManager.copySurfaceRect(_vm->_graphicsManager._vesaScreen, surface,
@@ -1174,7 +1174,7 @@ void ObjectsManager::clearSprite() {
 	}
 
 	for (int idx = 0; idx < MAX_SPRITE; idx++) {
-		ListeItem *list = &_vm->_globals.Liste[idx];
+		ListeItem *list = &_vm->_globals->Liste[idx];
 		list->_visibleFl = false;
 		list->_posX = 0;
 		list->_posY = 0;
@@ -1259,8 +1259,8 @@ void ObjectsManager::GOHOME() {
 	if (_vm->_linesManager._route == (RouteItem *)g_PTRNUL)
 		return;
 
-	if (_vm->_globals.Compteur > 1) {
-		--_vm->_globals.Compteur;
+	if (_vm->_globals->Compteur > 1) {
+		--_vm->_globals->Compteur;
 		return;
 	}
 
@@ -1271,8 +1271,8 @@ void ObjectsManager::GOHOME() {
 	int oldPosX = 0;
 	int oldPosY = 0;
 	int oldFrameIdx = 0;
-	_vm->_globals.Compteur = 0;
-	if (_vm->_globals._oldDirection == DIR_NONE) {
+	_vm->_globals->Compteur = 0;
+	if (_vm->_globals->_oldDirection == DIR_NONE) {
 		computeAndSetSpriteSize();
 		newPosX = _vm->_linesManager._route->_x;
 		newPosY = _vm->_linesManager._route->_y;
@@ -1280,25 +1280,25 @@ void ObjectsManager::GOHOME() {
 		_vm->_linesManager._route++;
 
 		if (newPosX != -1 || newPosY != -1) {
-			_vm->_globals._oldDirection = newDirection;
-			_vm->_globals._oldDirectionSpriteIdx = newDirection + 59;
-			_vm->_globals._oldFrameIndex = 0;
+			_vm->_globals->_oldDirection = newDirection;
+			_vm->_globals->_oldDirectionSpriteIdx = newDirection + 59;
+			_vm->_globals->_oldFrameIndex = 0;
 			_oldCharacterPosX = newPosX;
 			_oldCharacterPosY = newPosY;
 		} else {
-			setSpriteIndex(0, _vm->_globals._oldDirection + 59);
-			_vm->_globals._actionDirection = DIR_NONE;
+			setSpriteIndex(0, _vm->_globals->_oldDirection + 59);
+			_vm->_globals->_actionDirection = DIR_NONE;
 			int zoneId;
-			if (_vm->_globals._actionMoveTo)
-				zoneId = _vm->_globals._saveData->_data[svLastZoneNum];
+			if (_vm->_globals->_actionMoveTo)
+				zoneId = _vm->_globals->_saveData->_data[svLastZoneNum];
 			else
 				zoneId = _zoneNum;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			computeAndSetSpriteSize();
 			setFlipSprite(0, false);
-			_vm->_globals.Compteur = 0;
+			_vm->_globals->Compteur = 0;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
-			_vm->_globals._oldDirection = DIR_NONE;
+			_vm->_globals->_oldDirection = DIR_NONE;
 			if (zoneId > 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) {
@@ -1307,22 +1307,22 @@ void ObjectsManager::GOHOME() {
 						_vm->_linesManager.ZONEP[zoneId]._spriteIndex = 0;
 					} else {
 						setSpriteIndex(0, _vm->_linesManager.ZONEP[zoneId]._spriteIndex);
-						_vm->_globals._actionDirection = _vm->_linesManager.ZONEP[zoneId]._spriteIndex - 59;
+						_vm->_globals->_actionDirection = _vm->_linesManager.ZONEP[zoneId]._spriteIndex - 59;
 					}
 				}
 			}
 		}
-		_vm->_globals.Compteur = 0;
+		_vm->_globals->Compteur = 0;
 		return;
 	}
-	if (_vm->_globals._oldDirection == DIR_RIGHT) {
-		if (_vm->_globals._oldFrameIndex < 24 || _vm->_globals._oldFrameIndex > 35) {
+	if (_vm->_globals->_oldDirection == DIR_RIGHT) {
+		if (_vm->_globals->_oldFrameIndex < 24 || _vm->_globals->_oldFrameIndex > 35) {
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY;
 			oldFrameIdx = 24;
 		} else {
-			int deltaX = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedX;
-			int deltaY = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedY;
+			int deltaX = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedX;
+			int deltaY = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedY;
 
 			if (_sprite[0]._zoomFactor < 0) {
 				deltaX = _vm->_graphicsManager.zoomOut(deltaX, -_sprite[0]._zoomFactor);
@@ -1333,20 +1333,20 @@ void ObjectsManager::GOHOME() {
 			}
 			oldPosX = _oldCharacterPosX + deltaX;
 			oldPosY = _oldCharacterPosY + deltaY;
-			oldFrameIdx = _vm->_globals._oldFrameIndex + 1;
+			oldFrameIdx = _vm->_globals->_oldFrameIndex + 1;
 			if (oldFrameIdx > 35)
 				oldFrameIdx = 24;
 		}
-		_vm->_globals.Compteur = 5 / _vm->_globals._speed;
+		_vm->_globals->Compteur = 5 / _vm->_globals->_speed;
 	}
-	if (_vm->_globals._oldDirection == DIR_LEFT) {
-		if (_vm->_globals._oldFrameIndex < 24 || _vm->_globals._oldFrameIndex > 35) {
+	if (_vm->_globals->_oldDirection == DIR_LEFT) {
+		if (_vm->_globals->_oldFrameIndex < 24 || _vm->_globals->_oldFrameIndex > 35) {
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY;
 			oldFrameIdx = 24;
 		} else {
-			int deltaX = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedX;
-			int deltaY = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedY;
+			int deltaX = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedX;
+			int deltaY = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedY;
 			if (_sprite[0]._zoomFactor < 0) {
 				deltaX = _vm->_graphicsManager.zoomOut(deltaX, -_sprite[0]._zoomFactor);
 				deltaY = _vm->_graphicsManager.zoomOut(deltaY, -_sprite[0]._zoomFactor);
@@ -1356,19 +1356,19 @@ void ObjectsManager::GOHOME() {
 			}
 			oldPosX = _oldCharacterPosX - deltaX;
 			oldPosY = _oldCharacterPosY - deltaY;
-			oldFrameIdx = _vm->_globals._oldFrameIndex + 1;
+			oldFrameIdx = _vm->_globals->_oldFrameIndex + 1;
 			if (oldFrameIdx > 35)
 				oldFrameIdx = 24;
 		}
-		_vm->_globals.Compteur = 5 / _vm->_globals._speed;
+		_vm->_globals->Compteur = 5 / _vm->_globals->_speed;
 	}
-	if (_vm->_globals._oldDirection == DIR_UP) {
-		if (_vm->_globals._oldFrameIndex > 11) {
+	if (_vm->_globals->_oldDirection == DIR_UP) {
+		if (_vm->_globals->_oldFrameIndex > 11) {
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY;
 			oldFrameIdx = 0;
 		} else {
-			int deltaY = abs(_vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedY);
+			int deltaY = abs(_vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedY);
 			if (_sprite[0]._zoomFactor < 0) {
 				deltaY = _vm->_graphicsManager.zoomOut(deltaY, -_sprite[0]._zoomFactor);
 			} else if (_sprite[0]._zoomFactor > 0) {
@@ -1376,20 +1376,20 @@ void ObjectsManager::GOHOME() {
 			}
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY - deltaY;
-			oldFrameIdx = _vm->_globals._oldFrameIndex + 1;
+			oldFrameIdx = _vm->_globals->_oldFrameIndex + 1;
 			if (oldFrameIdx > 11)
 				oldFrameIdx = 0;
 		}
-		_vm->_globals.Compteur = 4 / _vm->_globals._speed;
+		_vm->_globals->Compteur = 4 / _vm->_globals->_speed;
 	}
 
-	if (_vm->_globals._oldDirection == DIR_DOWN) {
-		if (_vm->_globals._oldFrameIndex < 48 || _vm->_globals._oldFrameIndex > 59) {
+	if (_vm->_globals->_oldDirection == DIR_DOWN) {
+		if (_vm->_globals->_oldFrameIndex < 48 || _vm->_globals->_oldFrameIndex > 59) {
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY;
 			oldFrameIdx = 48;
 		} else {
-			int deltaY = abs(_vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedY);
+			int deltaY = abs(_vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedY);
 			if (_sprite[0]._zoomFactor < 0) {
 				deltaY = _vm->_graphicsManager.zoomOut(deltaY, -_sprite[0]._zoomFactor);
 			} else if (_sprite[0]._zoomFactor > 0) {
@@ -1397,20 +1397,20 @@ void ObjectsManager::GOHOME() {
 			}
 			oldPosX = _oldCharacterPosX;
 			oldPosY = deltaY + _oldCharacterPosY;
-			oldFrameIdx = _vm->_globals._oldFrameIndex + 1;
+			oldFrameIdx = _vm->_globals->_oldFrameIndex + 1;
 			if (oldFrameIdx > 59)
 				oldFrameIdx = 48;
 		}
-		_vm->_globals.Compteur = 4 / _vm->_globals._speed;
+		_vm->_globals->Compteur = 4 / _vm->_globals->_speed;
 	}
-	if (_vm->_globals._oldDirection == DIR_UP_RIGHT) {
-		if (_vm->_globals._oldFrameIndex < 12 || _vm->_globals._oldFrameIndex > 23) {
+	if (_vm->_globals->_oldDirection == DIR_UP_RIGHT) {
+		if (_vm->_globals->_oldFrameIndex < 12 || _vm->_globals->_oldFrameIndex > 23) {
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY;
 			oldFrameIdx = 12;
 		} else {
-			int deltaX = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedX;
-			int deltaY = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedY;
+			int deltaX = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedX;
+			int deltaY = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedY;
 			if (_sprite[0]._zoomFactor < 0) {
 				deltaX = _vm->_graphicsManager.zoomOut(deltaX, -_sprite[0]._zoomFactor);
 				deltaY = _vm->_graphicsManager.zoomOut(deltaY, -_sprite[0]._zoomFactor);
@@ -1421,20 +1421,20 @@ void ObjectsManager::GOHOME() {
 			}
 			oldPosX = deltaX + _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY + deltaY;
-			oldFrameIdx = _vm->_globals._oldFrameIndex + 1;
+			oldFrameIdx = _vm->_globals->_oldFrameIndex + 1;
 			if (oldFrameIdx > 23)
 				oldFrameIdx = 12;
 		}
-		_vm->_globals.Compteur = 5 / _vm->_globals._speed;
+		_vm->_globals->Compteur = 5 / _vm->_globals->_speed;
 	}
-	if (_vm->_globals._oldDirection == DIR_UP_LEFT) {
-		if (_vm->_globals._oldFrameIndex < 12 || _vm->_globals._oldFrameIndex > 23) {
+	if (_vm->_globals->_oldDirection == DIR_UP_LEFT) {
+		if (_vm->_globals->_oldFrameIndex < 12 || _vm->_globals->_oldFrameIndex > 23) {
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY;
 			oldFrameIdx = 12;
 		} else {
-			int deltaX = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedX;
-			int deltaY = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedY;
+			int deltaX = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedX;
+			int deltaY = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedY;
 			if (_sprite[0]._zoomFactor < 0) {
 				deltaX = _vm->_graphicsManager.zoomOut(deltaX, -_sprite[0]._zoomFactor);
 				deltaY = _vm->_graphicsManager.zoomOut(deltaY, -_sprite[0]._zoomFactor);
@@ -1444,20 +1444,20 @@ void ObjectsManager::GOHOME() {
 			}
 			oldPosX = _oldCharacterPosX - deltaX;
 			oldPosY = _oldCharacterPosY + deltaY;
-			oldFrameIdx = _vm->_globals._oldFrameIndex + 1;
+			oldFrameIdx = _vm->_globals->_oldFrameIndex + 1;
 			if (oldFrameIdx > 23)
 				oldFrameIdx = 12;
 		}
-		_vm->_globals.Compteur = 5 / _vm->_globals._speed;
+		_vm->_globals->Compteur = 5 / _vm->_globals->_speed;
 	}
-	if (_vm->_globals._oldDirection == DIR_DOWN_RIGHT) {
-		if (_vm->_globals._oldFrameIndex < 36 || _vm->_globals._oldFrameIndex > 47) {
+	if (_vm->_globals->_oldDirection == DIR_DOWN_RIGHT) {
+		if (_vm->_globals->_oldFrameIndex < 36 || _vm->_globals->_oldFrameIndex > 47) {
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY;
 			oldFrameIdx = 36;
 		} else {
-			int deltaX = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedX;
-			int deltaY = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedY;
+			int deltaX = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedX;
+			int deltaY = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedY;
 			if (_sprite[0]._zoomFactor < 0) {
 				deltaX = _vm->_graphicsManager.zoomOut(deltaX, -_sprite[0]._zoomFactor);
 				deltaY = _vm->_graphicsManager.zoomOut(deltaY, -_sprite[0]._zoomFactor);
@@ -1468,20 +1468,20 @@ void ObjectsManager::GOHOME() {
 			}
 			oldPosX = deltaX + _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY + deltaY;
-			oldFrameIdx = _vm->_globals._oldFrameIndex + 1;
+			oldFrameIdx = _vm->_globals->_oldFrameIndex + 1;
 			if (oldFrameIdx > 47)
 				oldFrameIdx = 36;
 		}
-		_vm->_globals.Compteur = 5 / _vm->_globals._speed;
+		_vm->_globals->Compteur = 5 / _vm->_globals->_speed;
 	}
-	if (_vm->_globals._oldDirection == DIR_DOWN_LEFT) {
-		if (_vm->_globals._oldFrameIndex < 36 || _vm->_globals._oldFrameIndex > 47) {
+	if (_vm->_globals->_oldDirection == DIR_DOWN_LEFT) {
+		if (_vm->_globals->_oldFrameIndex < 36 || _vm->_globals->_oldFrameIndex > 47) {
 			oldPosX = _oldCharacterPosX;
 			oldPosY = _oldCharacterPosY;
 			oldFrameIdx = 36;
 		} else {
-			int deltaX = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedX;
-			int deltaY = _vm->_globals._hopkinsItem[_vm->_globals._oldFrameIndex]._speedY;
+			int deltaX = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedX;
+			int deltaY = _vm->_globals->_hopkinsItem[_vm->_globals->_oldFrameIndex]._speedY;
 			if (_sprite[0]._zoomFactor < 0) {
 				deltaX = _vm->_graphicsManager.zoomOut(deltaX, -_sprite[0]._zoomFactor);
 				deltaY = _vm->_graphicsManager.zoomOut(deltaY, -_sprite[0]._zoomFactor);
@@ -1492,11 +1492,11 @@ void ObjectsManager::GOHOME() {
 			}
 			oldPosX = _oldCharacterPosX - deltaX;
 			oldPosY = _oldCharacterPosY + deltaY;
-			oldFrameIdx = _vm->_globals._oldFrameIndex + 1;
+			oldFrameIdx = _vm->_globals->_oldFrameIndex + 1;
 			if (oldFrameIdx > 47)
 				oldFrameIdx = 36;
 		}
-		_vm->_globals.Compteur = 5 / _vm->_globals._speed;
+		_vm->_globals->Compteur = 5 / _vm->_globals->_speed;
 	}
 	bool loopCond = false;
 	do {
@@ -1507,17 +1507,17 @@ void ObjectsManager::GOHOME() {
 
 		if (newPosX == -1 && newPosY == -1) {
 			int zoneId;
-			if (_vm->_globals._actionMoveTo)
-				zoneId = _vm->_globals._saveData->_data[svLastZoneNum];
+			if (_vm->_globals->_actionMoveTo)
+				zoneId = _vm->_globals->_saveData->_data[svLastZoneNum];
 			else
 				zoneId = _zoneNum;
-			setSpriteIndex(0, _vm->_globals._oldDirection + 59);
-			_vm->_globals._actionDirection = DIR_NONE;
+			setSpriteIndex(0, _vm->_globals->_oldDirection + 59);
+			_vm->_globals->_actionDirection = DIR_NONE;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			computeAndSetSpriteSize();
 			setFlipSprite(0, false);
-			_vm->_globals.Compteur = 0;
-			_vm->_globals._oldDirection = DIR_NONE;
+			_vm->_globals->Compteur = 0;
+			_vm->_globals->_oldDirection = DIR_NONE;
 			_oldCharacterPosX = getSpriteX(0);
 			_oldCharacterPosY = getSpriteY(0);
 
@@ -1529,45 +1529,45 @@ void ObjectsManager::GOHOME() {
 						_vm->_linesManager.ZONEP[zoneId]._spriteIndex = 0;
 					} else {
 						setSpriteIndex(0,  _vm->_linesManager.ZONEP[zoneId]._spriteIndex);
-						_vm->_globals._actionDirection = _vm->_linesManager.ZONEP[zoneId]._spriteIndex - 59;
+						_vm->_globals->_actionDirection = _vm->_linesManager.ZONEP[zoneId]._spriteIndex - 59;
 					}
 				}
 			}
-			_vm->_globals.Compteur = 0;
+			_vm->_globals->Compteur = 0;
 			return;
 		}
-		if (_vm->_globals._oldDirection != newDirection)
+		if (_vm->_globals->_oldDirection != newDirection)
 			break;
-		if ((newDirection == DIR_RIGHT && newPosX >= oldPosX) || (_vm->_globals._oldDirection == DIR_LEFT && newPosX <= oldPosX) ||
-		    (_vm->_globals._oldDirection == DIR_UP && newPosY <= oldPosY) || (_vm->_globals._oldDirection == DIR_DOWN && newPosY >= oldPosY) ||
-		    (_vm->_globals._oldDirection == DIR_UP_RIGHT && newPosX >= oldPosX)  || (_vm->_globals._oldDirection == DIR_UP_LEFT && newPosX <= oldPosX) ||
-		    (_vm->_globals._oldDirection == DIR_DOWN_RIGHT && newPosX >= oldPosX) || (_vm->_globals._oldDirection == DIR_DOWN_LEFT && newPosX <= oldPosX))
+		if ((newDirection == DIR_RIGHT && newPosX >= oldPosX) || (_vm->_globals->_oldDirection == DIR_LEFT && newPosX <= oldPosX) ||
+		    (_vm->_globals->_oldDirection == DIR_UP && newPosY <= oldPosY) || (_vm->_globals->_oldDirection == DIR_DOWN && newPosY >= oldPosY) ||
+		    (_vm->_globals->_oldDirection == DIR_UP_RIGHT && newPosX >= oldPosX)  || (_vm->_globals->_oldDirection == DIR_UP_LEFT && newPosX <= oldPosX) ||
+		    (_vm->_globals->_oldDirection == DIR_DOWN_RIGHT && newPosX >= oldPosX) || (_vm->_globals->_oldDirection == DIR_DOWN_LEFT && newPosX <= oldPosX))
 			loopCond = true;
 	} while (!loopCond);
 	if (loopCond) {
 		computeAndSetSpriteSize();
-		if ((_vm->_globals._oldDirection == DIR_DOWN_LEFT) || (_vm->_globals._oldDirection == DIR_LEFT) || (_vm->_globals._oldDirection == DIR_UP_LEFT))
+		if ((_vm->_globals->_oldDirection == DIR_DOWN_LEFT) || (_vm->_globals->_oldDirection == DIR_LEFT) || (_vm->_globals->_oldDirection == DIR_UP_LEFT))
 			setFlipSprite(0, true);
 
-		if ((_vm->_globals._oldDirection == DIR_UP) || (_vm->_globals._oldDirection == DIR_UP_RIGHT) || (_vm->_globals._oldDirection == DIR_RIGHT) ||
-		    (_vm->_globals._oldDirection == DIR_DOWN_RIGHT) || (_vm->_globals._oldDirection == DIR_DOWN))
+		if ((_vm->_globals->_oldDirection == DIR_UP) || (_vm->_globals->_oldDirection == DIR_UP_RIGHT) || (_vm->_globals->_oldDirection == DIR_RIGHT) ||
+		    (_vm->_globals->_oldDirection == DIR_DOWN_RIGHT) || (_vm->_globals->_oldDirection == DIR_DOWN))
 			setFlipSprite(0, false);
 
 		setSpriteX(0, newPosX);
 		setSpriteY(0, newPosY);
 		setSpriteIndex(0, oldFrameIdx);
 	} else {
-		if ((_vm->_globals._oldDirection == DIR_DOWN_LEFT) || (_vm->_globals._oldDirection == DIR_LEFT) || (_vm->_globals._oldDirection == DIR_UP_LEFT))
+		if ((_vm->_globals->_oldDirection == DIR_DOWN_LEFT) || (_vm->_globals->_oldDirection == DIR_LEFT) || (_vm->_globals->_oldDirection == DIR_UP_LEFT))
 			setFlipSprite(0, true);
 
-		if ((_vm->_globals._oldDirection == DIR_UP) || (_vm->_globals._oldDirection == DIR_UP_RIGHT) || (_vm->_globals._oldDirection == DIR_RIGHT) ||
-		    (_vm->_globals._oldDirection == DIR_DOWN_RIGHT) || (_vm->_globals._oldDirection == DIR_DOWN))
+		if ((_vm->_globals->_oldDirection == DIR_UP) || (_vm->_globals->_oldDirection == DIR_UP_RIGHT) || (_vm->_globals->_oldDirection == DIR_RIGHT) ||
+		    (_vm->_globals->_oldDirection == DIR_DOWN_RIGHT) || (_vm->_globals->_oldDirection == DIR_DOWN))
 			setFlipSprite(0, false);
-		_vm->_globals.Compteur = 0;
+		_vm->_globals->Compteur = 0;
 	}
-	_vm->_globals._oldDirection = newDirection;
-	_vm->_globals._oldDirectionSpriteIdx = newDirection + 59;
-	_vm->_globals._oldFrameIndex = oldFrameIdx;
+	_vm->_globals->_oldDirection = newDirection;
+	_vm->_globals->_oldDirectionSpriteIdx = newDirection + 59;
+	_vm->_globals->_oldFrameIndex = oldFrameIdx;
 	_oldCharacterPosX = newPosX;
 	_oldCharacterPosY = newPosY;
 }
@@ -1577,9 +1577,9 @@ void ObjectsManager::GOHOME2() {
 		return;
 
 	int realSpeed = 2;
-	if (_vm->_globals._speed == 2)
+	if (_vm->_globals->_speed == 2)
 		realSpeed = 4;
-	else if (_vm->_globals._speed == 3)
+	else if (_vm->_globals->_speed == 3)
 		realSpeed = 6;
 
 	int countColisionPixel = 0;
@@ -1595,10 +1595,10 @@ void ObjectsManager::GOHOME2() {
 
 		++countColisionPixel;
 		if (countColisionPixel >= realSpeed) {
-			_vm->_globals._lastDirection = newDirection;
+			_vm->_globals->_lastDirection = newDirection;
 			setSpriteX(0, nexPosX);
 			setSpriteY(0, newPosY);
-			switch (_vm->_globals._lastDirection) {
+			switch (_vm->_globals->_lastDirection) {
 			case DIR_UP:
 				setSpriteIndex(0, 4);
 				break;
@@ -1619,7 +1619,7 @@ void ObjectsManager::GOHOME2() {
 		}
 	}
 
-	switch (_vm->_globals._lastDirection) {
+	switch (_vm->_globals->_lastDirection) {
 	case DIR_UP:
 		setSpriteIndex(0, 0);
 		break;
@@ -1712,7 +1712,7 @@ void ObjectsManager::loadZone(const Common::String &file) {
 	for (int i = 0; i < 100; i++)
 		_vm->_linesManager.ZONEP[i + 1]._messageId = READ_LE_UINT16(verbData + 2 * i);
 
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 	_vm->_linesManager.CARRE_ZONE();
 }
 
@@ -1720,28 +1720,28 @@ void ObjectsManager::handleCityMap() {
 	_vm->_dialogsManager->_inventFl = false;
 	_vm->_eventsManager->_gameKey = KEY_NONE;
 	_vm->_linesManager.setMaxLineIdx(1);
-	_vm->_globals._characterMaxPosY = 440;
-	_vm->_globals._cityMapEnabledFl = true;
+	_vm->_globals->_characterMaxPosY = 440;
+	_vm->_globals->_cityMapEnabledFl = true;
 	_vm->_graphicsManager._noFadingFl = false;
-	_vm->_globals._freezeCharacterFl = false;
+	_vm->_globals->_freezeCharacterFl = false;
 	_spritePtr = g_PTRNUL;
-	_vm->_globals._exitId = 0;
-	_vm->_globals._checkDistanceFl = true;
+	_vm->_globals->_exitId = 0;
+	_vm->_globals->_checkDistanceFl = true;
 	_vm->_soundManager.playSound(31);
-	_vm->_globals.iRegul = 1;
+	_vm->_globals->iRegul = 1;
 	_vm->_graphicsManager.loadImage("PLAN");
 	_vm->_linesManager.loadLines("PLAN.OB2");
-	_vm->_globals.loadHidingItems("PLAN.CA2");
+	_vm->_globals->loadHidingItems("PLAN.CA2");
 	loadZone("PLAN.ZO2");
 	_spritePtr = _vm->_fileManager->loadFile("VOITURE.SPR");
 	_vm->_animationManager->loadAnim("PLAN");
 	_vm->_graphicsManager.displayAllBob();
 	_vm->_graphicsManager.initScreen("PLAN", 2, false);
 	for (int i = 0; i <= 15; i++)
-		_vm->_globals.B_CACHE_OFF(i);
-	_vm->_globals.B_CACHE_OFF(19);
-	_vm->_globals.B_CACHE_OFF(20);
-	_vm->_globals.enableHiding();
+		_vm->_globals->B_CACHE_OFF(i);
+	_vm->_globals->B_CACHE_OFF(19);
+	_vm->_globals->B_CACHE_OFF(20);
+	_vm->_globals->enableHiding();
 
 	if (!_mapCarPosX && !_mapCarPosY) {
 		_mapCarPosX = 900;
@@ -1762,7 +1762,7 @@ void ObjectsManager::handleCityMap() {
 	for (int i = 0; i <= 4; i++)
 		_vm->_eventsManager->refreshScreenAndEvents();
 
-	_vm->_globals.iRegul = 1;
+	_vm->_globals->iRegul = 1;
 	_vm->_graphicsManager.fadeInLong();
 	_vm->_eventsManager->changeMouseCursor(4);
 	_vm->_graphicsManager._noFadingFl = false;
@@ -1772,19 +1772,19 @@ void ObjectsManager::handleCityMap() {
 		int mouseButton = _vm->_eventsManager->getMouseButton();
 		if (mouseButton) {
 			// First cop call : Go to the bank and free the hostages
-			if (_vm->_globals._saveData->_data[svBankAttackAnimPlayedFl] == 1 && !_vm->_globals._saveData->_data[svCopCall1PlayedFl]) {
-				_vm->_globals._saveData->_data[svCopCall1PlayedFl] = 1;
-				_vm->_globals._introSpeechOffFl = true;
+			if (_vm->_globals->_saveData->_data[svBankAttackAnimPlayedFl] == 1 && !_vm->_globals->_saveData->_data[svCopCall1PlayedFl]) {
+				_vm->_globals->_saveData->_data[svCopCall1PlayedFl] = 1;
+				_vm->_globals->_introSpeechOffFl = true;
 				_vm->_talkManager.startAnimatedCharacterDialogue("APPEL1.pe2");
-				_vm->_globals._introSpeechOffFl = false;
+				_vm->_globals->_introSpeechOffFl = false;
 				mouseButton = 0;
 			}
 			// Second cop call: Helico has been found in the empty lot
-			if (_vm->_globals._saveData->_data[svFreedHostageFl] == 1 && !_vm->_globals._saveData->_data[svCopCall2PlayedFl]) {
-				_vm->_globals._saveData->_data[svCopCall2PlayedFl] = 1;
-				_vm->_globals._introSpeechOffFl = true;
+			if (_vm->_globals->_saveData->_data[svFreedHostageFl] == 1 && !_vm->_globals->_saveData->_data[svCopCall2PlayedFl]) {
+				_vm->_globals->_saveData->_data[svCopCall2PlayedFl] = 1;
+				_vm->_globals->_introSpeechOffFl = true;
 				_vm->_talkManager.startAnimatedCharacterDialogue("APPEL2.pe2");
-				_vm->_globals._introSpeechOffFl = false;
+				_vm->_globals->_introSpeechOffFl = false;
 				mouseButton = 0;
 				_vm->_eventsManager->_curMouseButton = 0;
 			}
@@ -1795,24 +1795,24 @@ void ObjectsManager::handleCityMap() {
 		_vm->_linesManager.checkZone();
 		GOHOME2();
 
-		if (_vm->_linesManager._route == (RouteItem *)g_PTRNUL && _vm->_globals._actionMoveTo)
+		if (_vm->_linesManager._route == (RouteItem *)g_PTRNUL && _vm->_globals->_actionMoveTo)
 			PARADISE();
 		_vm->_eventsManager->refreshScreenAndEvents();
 
-		if (_vm->_globals._exitId)
+		if (_vm->_globals->_exitId)
 			loopCond = true;
 	} while (!_vm->shouldQuit() && !loopCond);
 
 	if (!_vm->_graphicsManager._noFadingFl)
 		_vm->_graphicsManager.fadeOutLong();
-	_vm->_globals.iRegul = 0;
+	_vm->_globals->iRegul = 0;
 	_vm->_graphicsManager._noFadingFl = false;
 	_mapCarPosX = getSpriteX(0);
 	_mapCarPosY = getSpriteY(0);
 	removeSprite(0);
-	_spritePtr = _vm->_globals.freeMemory(_spritePtr);
+	_spritePtr = _vm->_globals->freeMemory(_spritePtr);
 	clearScreen();
-	_vm->_globals._cityMapEnabledFl = false;
+	_vm->_globals->_cityMapEnabledFl = false;
 }
 
 /**
@@ -1823,7 +1823,7 @@ void ObjectsManager::handleLeftButton() {
 	int destX = _vm->_eventsManager->getMouseX();
 	int destY = _vm->_eventsManager->getMouseY();
 
-	if (!_vm->_dialogsManager->_inventFl && !_vm->_globals._cityMapEnabledFl && 
+	if (!_vm->_dialogsManager->_inventFl && !_vm->_globals->_cityMapEnabledFl && 
 		destX > _vm->_graphicsManager._scrollOffset - 30 && destX < _vm->_graphicsManager._scrollOffset + 50 && 
 		destY > -30 && destY < 50) {
 		int oldMouseCursor = _vm->_eventsManager->_mouseCursorId;
@@ -1831,35 +1831,35 @@ void ObjectsManager::handleLeftButton() {
 		_vm->_dialogsManager->showInventory();
 		_vm->_dialogsManager->_inventFl = false;
 		_vm->_eventsManager->_gameKey = KEY_NONE;
-		if (!_vm->_globals._exitId) {
+		if (!_vm->_globals->_exitId) {
 			_vm->_dialogsManager->_inventFl = false;
 			_vm->_eventsManager->_mouseCursorId = oldMouseCursor;
 		}
 		return;
 	}
-	if (_vm->_globals._saveData->_data[svField354] == 1 && !_vm->_globals._cityMapEnabledFl
+	if (_vm->_globals->_saveData->_data[svField354] == 1 && !_vm->_globals->_cityMapEnabledFl
 	    && destX >= 533 && destX <= 559 && destY >= 26 && destY <= 59) {
 		changeCharacterHead(CHARACTER_HOPKINS_CLONE, CHARACTER_HOPKINS);
 		return;
 	}
-	if (_vm->_globals._saveData->_data[svField356] == 1 && !_vm->_globals._cityMapEnabledFl
+	if (_vm->_globals->_saveData->_data[svField356] == 1 && !_vm->_globals->_cityMapEnabledFl
 	    && destX >= 533 && destX <= 559 && destY >= 26 && destY <= 48) {
 		changeCharacterHead(CHARACTER_SAMANTHA, CHARACTER_HOPKINS);
 		return;
 	}
-	if (_vm->_globals._saveData->_data[svField357] == 1) {
-		if (_vm->_globals._saveData->_data[svField353] == 1 && !_vm->_globals._cityMapEnabledFl
+	if (_vm->_globals->_saveData->_data[svField357] == 1) {
+		if (_vm->_globals->_saveData->_data[svField353] == 1 && !_vm->_globals->_cityMapEnabledFl
 		    && destX >= 533 && destX <= 559 && destY >= 26 && destY <= 59) {
 			changeCharacterHead(CHARACTER_HOPKINS, CHARACTER_HOPKINS_CLONE);
 			return;
 		}
-		if (_vm->_globals._saveData->_data[svField355] == 1 && !_vm->_globals._cityMapEnabledFl
+		if (_vm->_globals->_saveData->_data[svField355] == 1 && !_vm->_globals->_cityMapEnabledFl
 		    && destX >= 567 && destX <= 593 && destY >= 26 && destY <= 59) {
 			changeCharacterHead(CHARACTER_HOPKINS, CHARACTER_SAMANTHA);
 			return;
 		}
 	}
-	if (_vm->_globals._cityMapEnabledFl && _vm->_globals._actionMoveTo) {
+	if (_vm->_globals->_cityMapEnabledFl && _vm->_globals->_actionMoveTo) {
 		_vm->_linesManager.checkZone();
 		if (_zoneNum <= 0)
 			return;
@@ -1872,14 +1872,14 @@ void ObjectsManager::handleLeftButton() {
 		_vm->_linesManager._testRoute2[routeIdx].invalidate();
 	}
 
-	if (_vm->_globals._actionMoveTo) {
+	if (_vm->_globals->_actionMoveTo) {
 		_vm->_linesManager.checkZone();
-		_vm->_globals._actionMoveTo = false;
-		_vm->_globals._saveData->_data[svLastMouseCursor] = 0;
-		_vm->_globals._saveData->_data[svLastZoneNum] = 0;
+		_vm->_globals->_actionMoveTo = false;
+		_vm->_globals->_saveData->_data[svLastMouseCursor] = 0;
+		_vm->_globals->_saveData->_data[svLastZoneNum] = 0;
 	}
 
-	if (_vm->_globals._cityMapEnabledFl && (_vm->_eventsManager->_mouseCursorId != 4 || _zoneNum <= 0))
+	if (_vm->_globals->_cityMapEnabledFl && (_vm->_eventsManager->_mouseCursorId != 4 || _zoneNum <= 0))
 		return;
 	if (_zoneNum != -1 && _zoneNum != 0) {
 		if (_vm->_linesManager.ZONEP[_zoneNum]._destX && _vm->_linesManager.ZONEP[_zoneNum]._destY && _vm->_linesManager.ZONEP[_zoneNum]._destY != 31) {
@@ -1887,65 +1887,65 @@ void ObjectsManager::handleLeftButton() {
 			destY = _vm->_linesManager.ZONEP[_zoneNum]._destY;
 		}
 	}
-	_vm->_globals._actionMoveTo = false;
+	_vm->_globals->_actionMoveTo = false;
 	RouteItem *oldRoute = _vm->_linesManager._route;
 	_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 	if (_forestFl && _zoneNum >= 20 && _zoneNum <= 23) {
 		if (getSpriteY(0) > 374 && getSpriteY(0) <= 410) {
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
-			setSpriteIndex(0, _vm->_globals._oldDirectionSpriteIdx);
-			_vm->_globals._actionDirection = DIR_NONE;
+			setSpriteIndex(0, _vm->_globals->_oldDirectionSpriteIdx);
+			_vm->_globals->_actionDirection = DIR_NONE;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			computeAndSetSpriteSize();
 			setFlipSprite(0, false);
-			_vm->_globals.Compteur = 0;
-			_vm->_globals._oldDirection = DIR_NONE;
+			_vm->_globals->Compteur = 0;
+			_vm->_globals->_oldDirection = DIR_NONE;
 		} else {
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(getSpriteX(0), getSpriteY(0), getSpriteX(0), 390);
 			if (_vm->_linesManager._route != (RouteItem *)g_PTRNUL)
 				_vm->_linesManager.PACOURS_PROPRE(_vm->_linesManager._route);
 			_oldCharacterPosX = getSpriteX(0);
 			_oldCharacterPosY = getSpriteY(0);
-			_vm->_globals.Compteur = 0;
+			_vm->_globals->Compteur = 0;
 			if (_vm->_linesManager._route != (RouteItem *)g_PTRNUL || oldRoute == _vm->_linesManager._route) {
-				_vm->_globals._oldDirection = DIR_NONE;
+				_vm->_globals->_oldDirection = DIR_NONE;
 			} else {
 				_vm->_linesManager._route = oldRoute;
 			}
 		}
 	} else {
-		if (!_vm->_globals._freezeCharacterFl && !_vm->_globals._cityMapEnabledFl) {
+		if (!_vm->_globals->_freezeCharacterFl && !_vm->_globals->_cityMapEnabledFl) {
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(getSpriteX(0), getSpriteY(0), destX, destY);
 			if (_vm->_linesManager._route != (RouteItem *)g_PTRNUL)
 				_vm->_linesManager.PACOURS_PROPRE(_vm->_linesManager._route);
 			_oldCharacterPosX = getSpriteX(0);
 			_oldCharacterPosY = getSpriteY(0);
-			_vm->_globals.Compteur = 0;
+			_vm->_globals->Compteur = 0;
 			if (_vm->_linesManager._route != (RouteItem *)g_PTRNUL || oldRoute == _vm->_linesManager._route)
-				_vm->_globals._oldDirection = DIR_NONE;
+				_vm->_globals->_oldDirection = DIR_NONE;
 			else
 				_vm->_linesManager._route = oldRoute;
 		}
 	}
 
-	if (!_vm->_globals._freezeCharacterFl && _vm->_globals._cityMapEnabledFl)
+	if (!_vm->_globals->_freezeCharacterFl && _vm->_globals->_cityMapEnabledFl)
 		_vm->_linesManager._route = _vm->_linesManager.cityMapCarRoute(getSpriteX(0), getSpriteY(0), destX, destY);
 
 	if (_zoneNum != -1 && _zoneNum != 0) {
 		if (_vm->_eventsManager->_mouseCursorId == 23)
-			_vm->_globals._saveData->_data[svLastMouseCursor] = 5;
+			_vm->_globals->_saveData->_data[svLastMouseCursor] = 5;
 		else 
-			_vm->_globals._saveData->_data[svLastMouseCursor] = _vm->_eventsManager->_mouseCursorId;
+			_vm->_globals->_saveData->_data[svLastMouseCursor] = _vm->_eventsManager->_mouseCursorId;
 
-		if (_vm->_globals._cityMapEnabledFl)
-			_vm->_globals._saveData->_data[svLastMouseCursor] = 6;
-		_vm->_globals._saveData->_data[svLastZoneNum] = _zoneNum;
-		_vm->_globals._saveData->_data[svLastObjectIndex] = _curObjectIndex;
-		_vm->_globals._actionMoveTo = true;
+		if (_vm->_globals->_cityMapEnabledFl)
+			_vm->_globals->_saveData->_data[svLastMouseCursor] = 6;
+		_vm->_globals->_saveData->_data[svLastZoneNum] = _zoneNum;
+		_vm->_globals->_saveData->_data[svLastObjectIndex] = _curObjectIndex;
+		_vm->_globals->_actionMoveTo = true;
 	}
 	_vm->_fontManager->hideText(5);
 	_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
-	if (_vm->_globals._screenId == 20 && _vm->_globals._saveData->_data[svField132] == 1
+	if (_vm->_globals->_screenId == 20 && _vm->_globals->_saveData->_data[svField132] == 1
 				&& _curObjectIndex == 20 && _zoneNum == 12
 				&& _vm->_eventsManager->_mouseCursorId == 23) {
 		// Special case for throwing darts at the switch in Purgatory - the player shouldn't move
@@ -1956,8 +1956,8 @@ void ObjectsManager::handleLeftButton() {
 }
 
 void ObjectsManager::PARADISE() {
-	char result = _vm->_globals._saveData->_data[svLastMouseCursor];
-	if (result && _vm->_globals._saveData->_data[svLastZoneNum] && result != 4 && result > 3) {
+	char result = _vm->_globals->_saveData->_data[svLastMouseCursor];
+	if (result && _vm->_globals->_saveData->_data[svLastZoneNum] && result != 4 && result > 3) {
 		_vm->_fontManager->hideText(5);
 		if (!_forestFl || _zoneNum < 20 || _zoneNum > 23) {
 			if (_vm->_graphicsManager._largeScreenFl) {
@@ -2004,20 +2004,20 @@ void ObjectsManager::PARADISE() {
 				_vm->_eventsManager->refreshScreenAndEvents();
 				_vm->_graphicsManager._scrollStatus = 0;
 			}
-			_vm->_talkManager.REPONSE(_vm->_globals._saveData->_data[svLastZoneNum], _vm->_globals._saveData->_data[svLastMouseCursor]);
+			_vm->_talkManager.REPONSE(_vm->_globals->_saveData->_data[svLastZoneNum], _vm->_globals->_saveData->_data[svLastMouseCursor]);
 		} else {
-			_vm->_talkManager.REPONSE2(_vm->_globals._saveData->_data[svLastZoneNum], _vm->_globals._saveData->_data[svLastMouseCursor]);
+			_vm->_talkManager.REPONSE2(_vm->_globals->_saveData->_data[svLastZoneNum], _vm->_globals->_saveData->_data[svLastMouseCursor]);
 		}
 		_vm->_eventsManager->changeMouseCursor(4);
 		if (_zoneNum != -1 && _zoneNum != 0 && !_vm->_linesManager.ZONEP[_zoneNum]._enabledFl) {
 			_zoneNum = -1;
 			_forceZoneFl = true;
 		}
-		if (_zoneNum != _vm->_globals._saveData->_data[svLastZoneNum] || _zoneNum == -1 || _zoneNum == 0) {
+		if (_zoneNum != _vm->_globals->_saveData->_data[svLastZoneNum] || _zoneNum == -1 || _zoneNum == 0) {
 			_vm->_eventsManager->_mouseCursorId = 4;
 			_changeVerbFl = false;
 		} else {
-			_vm->_eventsManager->_mouseCursorId = _vm->_globals._saveData->_data[svLastMouseCursor];
+			_vm->_eventsManager->_mouseCursorId = _vm->_globals->_saveData->_data[svLastMouseCursor];
 			if (_changeVerbFl) {
 				nextVerbIcon();
 				_changeVerbFl = false;
@@ -2028,18 +2028,18 @@ void ObjectsManager::PARADISE() {
 		if (_vm->_eventsManager->_mouseCursorId != 23)
 			_vm->_eventsManager->changeMouseCursor(_vm->_eventsManager->_mouseCursorId);
 		_zoneNum = 0;
-		_vm->_globals._saveData->_data[svLastMouseCursor] = 0;
-		_vm->_globals._saveData->_data[svLastZoneNum] = 0;
+		_vm->_globals->_saveData->_data[svLastMouseCursor] = 0;
+		_vm->_globals->_saveData->_data[svLastZoneNum] = 0;
 	}
-	if (_vm->_globals._cityMapEnabledFl) {
+	if (_vm->_globals->_cityMapEnabledFl) {
 		_vm->_eventsManager->_mouseCursorId = 0;
 		_vm->_eventsManager->changeMouseCursor(0);
 	}
-	if (_vm->_globals._freezeCharacterFl && _vm->_eventsManager->_mouseCursorId == 4) {
+	if (_vm->_globals->_freezeCharacterFl && _vm->_eventsManager->_mouseCursorId == 4) {
 		if (_zoneNum != -1 && _zoneNum != 0)
 			handleRightButton();
 	}
-	_vm->_globals._actionMoveTo = false;
+	_vm->_globals->_actionMoveTo = false;
 }
 
 /**
@@ -2050,11 +2050,11 @@ void ObjectsManager::clearScreen() {
 	_vm->_graphicsManager.endDisplayBob();
 	_vm->_fontManager->hideText(5);
 	_vm->_fontManager->hideText(9);
-	_vm->_globals.clearVBob();
+	_vm->_globals->clearVBob();
 	_vm->_animationManager->clearAnim();
 	_vm->_linesManager.clearAllZones();
 	_vm->_linesManager.resetLines();
-	_vm->_globals.resetHidingItems();
+	_vm->_globals->resetHidingItems();
 
 	for (int i = 0; i <= 48; i++) {
 		_vm->_linesManager.BOBZONE[i] = 0;
@@ -2067,17 +2067,17 @@ void ObjectsManager::clearScreen() {
 	_vm->_linesManager.resetLinesNumb();
 	_vm->_linesManager.resetLastLine();
 	_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
-	_vm->_globals._answerBuffer = _vm->_globals.freeMemory(_vm->_globals._answerBuffer);
-	_vm->_globals.SPRITE_ECRAN = _vm->_globals.freeMemory(_vm->_globals.SPRITE_ECRAN);
+	_vm->_globals->_answerBuffer = _vm->_globals->freeMemory(_vm->_globals->_answerBuffer);
+	_vm->_globals->SPRITE_ECRAN = _vm->_globals->freeMemory(_vm->_globals->SPRITE_ECRAN);
 	_vm->_eventsManager->_startPos.x = 0;
 	_vm->_eventsManager->_mouseSpriteId = 0;
-	_vm->_globals._saveData->_data[svLastMouseCursor] = 0;
-	_vm->_globals._saveData->_data[svLastZoneNum] = 0;
-	_vm->_globals._actionMoveTo = false;
+	_vm->_globals->_saveData->_data[svLastMouseCursor] = 0;
+	_vm->_globals->_saveData->_data[svLastZoneNum] = 0;
+	_vm->_globals->_actionMoveTo = false;
 	_forceZoneFl = true;
 	_changeVerbFl = false;
 	_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
-	_vm->_globals._oldDirection = DIR_NONE;
+	_vm->_globals->_oldDirection = DIR_NONE;
 	_vm->_graphicsManager.resetDirtyRects();
 }
 
@@ -2092,17 +2092,17 @@ void ObjectsManager::changeCharacterHead(PlayerCharacter oldCharacter, PlayerCha
 	_changeHeadFl = true;
 	_vm->_graphicsManager.copySurface(_vm->_graphicsManager._vesaScreen, 532, 25, 65, 40, _vm->_graphicsManager._vesaBuffer, 532, 25);
 	_vm->_graphicsManager.addDirtyRect(532, 25, 597, 65);
-	_vm->_globals._checkDistanceFl = true;
+	_vm->_globals->_checkDistanceFl = true;
 	_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 
 	if (oldCharacter == CHARACTER_SAMANTHA && newCharacter == CHARACTER_HOPKINS
-		&& _vm->_globals._saveData->_realHopkins._location == _vm->_globals._screenId) {
+		&& _vm->_globals->_saveData->_realHopkins._location == _vm->_globals->_screenId) {
 		_changeHeadFl = false;
-		loc = &_vm->_globals._saveData->_samantha;
+		loc = &_vm->_globals->_saveData->_samantha;
 		loc->_pos.x = getSpriteX(0);
 		loc->_pos.y = getSpriteY(0);
 		loc->_startSpriteIndex = 64;
-		loc->_location = _vm->_globals._screenId;
+		loc->_location = _vm->_globals->_screenId;
 		loc->_zoomFactor = _sprite[0]._animationType;
 
 		removeSprite(1);
@@ -2110,24 +2110,24 @@ void ObjectsManager::changeCharacterHead(PlayerCharacter oldCharacter, PlayerCha
 		animateSprite(1);
 		removeSprite(0);
 
-		_vm->_globals._saveData->_data[svField354] = 0;
-		_vm->_globals._saveData->_data[svField356] = 0;
-		_vm->_globals._saveData->_data[svField357] = 1;
+		_vm->_globals->_saveData->_data[svField354] = 0;
+		_vm->_globals->_saveData->_data[svField356] = 0;
+		_vm->_globals->_saveData->_data[svField357] = 1;
 
-		loc = &_vm->_globals._saveData->_realHopkins;
-		_vm->_globals.PERSO = _vm->_fileManager->loadFile("PERSO.SPR");
-		_vm->_globals._characterType = 0;
-		addStaticSprite(_vm->_globals.PERSO, loc->_pos, 0, 64, loc->_zoomFactor, false, 34, 190);
+		loc = &_vm->_globals->_saveData->_realHopkins;
+		_vm->_globals->PERSO = _vm->_fileManager->loadFile("PERSO.SPR");
+		_vm->_globals->_characterType = 0;
+		addStaticSprite(_vm->_globals->PERSO, loc->_pos, 0, 64, loc->_zoomFactor, false, 34, 190);
 		animateSprite(0);
-		_vm->_globals.loadCharacterData();
+		_vm->_globals->loadCharacterData();
 	} else if (oldCharacter == CHARACTER_HOPKINS && newCharacter == CHARACTER_SAMANTHA
-			&& _vm->_globals._saveData->_samantha._location == _vm->_globals._screenId) {
+			&& _vm->_globals->_saveData->_samantha._location == _vm->_globals->_screenId) {
 		_changeHeadFl = false;
-		loc = &_vm->_globals._saveData->_realHopkins;
+		loc = &_vm->_globals->_saveData->_realHopkins;
 		loc->_pos.x = getSpriteX(0);
 		loc->_pos.y = getSpriteY(0);
 		loc->_startSpriteIndex = 64;
-		loc->_location = _vm->_globals._screenId;
+		loc->_location = _vm->_globals->_screenId;
 		loc->_zoomFactor = _sprite[0]._zoomFactor;
 
 		removeSprite(1);
@@ -2135,40 +2135,40 @@ void ObjectsManager::changeCharacterHead(PlayerCharacter oldCharacter, PlayerCha
 		animateSprite(1);
 		removeSprite(0);
 
-		_vm->_globals._saveData->_data[svField354] = 0;
-		_vm->_globals._saveData->_data[svField356] = 1;
-		_vm->_globals._saveData->_data[svField357] = 0;
+		_vm->_globals->_saveData->_data[svField354] = 0;
+		_vm->_globals->_saveData->_data[svField356] = 1;
+		_vm->_globals->_saveData->_data[svField357] = 0;
 
-		loc = &_vm->_globals._saveData->_samantha;
-		_vm->_globals.PERSO = _vm->_fileManager->loadFile("PSAMAN.SPR");
-		_vm->_globals._characterType = 2;
-		addStaticSprite(_vm->_globals.PERSO, loc->_pos, 0, 64, loc->_zoomFactor, false, 20, 127);
+		loc = &_vm->_globals->_saveData->_samantha;
+		_vm->_globals->PERSO = _vm->_fileManager->loadFile("PSAMAN.SPR");
+		_vm->_globals->_characterType = 2;
+		addStaticSprite(_vm->_globals->PERSO, loc->_pos, 0, 64, loc->_zoomFactor, false, 20, 127);
 		animateSprite(0);
-		_vm->_globals.loadCharacterData();
+		_vm->_globals->loadCharacterData();
 	} else {
 		switch (oldCharacter) {
 		case CHARACTER_HOPKINS:
-			loc = &_vm->_globals._saveData->_realHopkins;
+			loc = &_vm->_globals->_saveData->_realHopkins;
 			loc->_pos.x = getSpriteX(0);
 			loc->_pos.y = getSpriteY(0);
 			loc->_startSpriteIndex = 64;
-			loc->_location = _vm->_globals._screenId;
+			loc->_location = _vm->_globals->_screenId;
 			loc->_zoomFactor = _sprite[0]._zoomFactor;
 			break;
 		case CHARACTER_HOPKINS_CLONE:
-			loc = &_vm->_globals._saveData->_cloneHopkins;
+			loc = &_vm->_globals->_saveData->_cloneHopkins;
 			loc->_pos.x = getSpriteX(0);
 			loc->_pos.y = getSpriteY(0);
 			loc->_startSpriteIndex = 64;
-			loc->_location = _vm->_globals._screenId;
+			loc->_location = _vm->_globals->_screenId;
 			loc->_zoomFactor = _sprite[0]._zoomFactor;
 			break;
 		case CHARACTER_SAMANTHA:
-			loc = &_vm->_globals._saveData->_samantha;
+			loc = &_vm->_globals->_saveData->_samantha;
 			loc->_pos.x = getSpriteX(0);
 			loc->_pos.y = getSpriteY(0);
 			loc->_startSpriteIndex = 64;
-			loc->_location = _vm->_globals._screenId;
+			loc->_location = _vm->_globals->_screenId;
 			loc->_zoomFactor = _sprite[0]._zoomFactor;
 			break;
 		default:
@@ -2177,25 +2177,25 @@ void ObjectsManager::changeCharacterHead(PlayerCharacter oldCharacter, PlayerCha
 
 		switch (newCharacter) {
 		case CHARACTER_HOPKINS:
-			_vm->_globals._saveData->_data[svHopkinsCloneFl] = 0;
-			_vm->_globals._saveData->_data[svField354] = 0;
-			_vm->_globals._saveData->_data[svField356] = 0;
-			_vm->_globals._saveData->_data[svField357] = 1;
-			_vm->_globals._exitId = _vm->_globals._saveData->_realHopkins._location;
+			_vm->_globals->_saveData->_data[svHopkinsCloneFl] = 0;
+			_vm->_globals->_saveData->_data[svField354] = 0;
+			_vm->_globals->_saveData->_data[svField356] = 0;
+			_vm->_globals->_saveData->_data[svField357] = 1;
+			_vm->_globals->_exitId = _vm->_globals->_saveData->_realHopkins._location;
 			break;
 		case CHARACTER_HOPKINS_CLONE:
-			_vm->_globals._saveData->_data[svHopkinsCloneFl] = 1;
-			_vm->_globals._saveData->_data[svField354] = 1;
-			_vm->_globals._saveData->_data[svField356] = 0;
-			_vm->_globals._saveData->_data[svField357] = 0;
-			_vm->_globals._exitId = _vm->_globals._saveData->_cloneHopkins._location;
+			_vm->_globals->_saveData->_data[svHopkinsCloneFl] = 1;
+			_vm->_globals->_saveData->_data[svField354] = 1;
+			_vm->_globals->_saveData->_data[svField356] = 0;
+			_vm->_globals->_saveData->_data[svField357] = 0;
+			_vm->_globals->_exitId = _vm->_globals->_saveData->_cloneHopkins._location;
 			break;
 		case CHARACTER_SAMANTHA:
-			_vm->_globals._saveData->_data[svHopkinsCloneFl] = 0;
-			_vm->_globals._saveData->_data[svField354] = 0;
-			_vm->_globals._saveData->_data[svField356] = 1;
-			_vm->_globals._saveData->_data[svField357] = 0;
-			_vm->_globals._exitId = _vm->_globals._saveData->_samantha._location;
+			_vm->_globals->_saveData->_data[svHopkinsCloneFl] = 0;
+			_vm->_globals->_saveData->_data[svField354] = 0;
+			_vm->_globals->_saveData->_data[svField356] = 1;
+			_vm->_globals->_saveData->_data[svField357] = 0;
+			_vm->_globals->_exitId = _vm->_globals->_saveData->_samantha._location;
 			break;
 		}
 	}
@@ -2203,10 +2203,10 @@ void ObjectsManager::changeCharacterHead(PlayerCharacter oldCharacter, PlayerCha
 
 // Check Size
 void ObjectsManager::computeAndSetSpriteSize() {
-	int size = _vm->_globals._spriteSize[getSpriteY(0)];
-	if (_vm->_globals._characterType == 1) {
+	int size = _vm->_globals->_spriteSize[getSpriteY(0)];
+	if (_vm->_globals->_characterType == 1) {
 		size = 20 * (5 * abs(size) - 100) / -80;
-	} else if (_vm->_globals._characterType == 2) {
+	} else if (_vm->_globals->_characterType == 2) {
 		size = 20 * (5 * abs(size) - 165) / -67;
 	}
 	setSpriteZoom(0, size);
@@ -2220,7 +2220,7 @@ void ObjectsManager::nextVerbIcon() {
 
 	for(;;) {
 		if (_vm->_eventsManager->_mouseCursorId == 4) {
-			if (!_vm->_globals._freezeCharacterFl || _zoneNum == -1 || _zoneNum == 0)
+			if (!_vm->_globals->_freezeCharacterFl || _zoneNum == -1 || _zoneNum == 0)
 				return;
 
 			++_vm->_eventsManager->_mouseCursorId;
@@ -2436,7 +2436,7 @@ void ObjectsManager::initBorder(int zoneIdx) {
 	else if (zoneIdx == 32)
 		_vm->_eventsManager->_mouseCursorId = 16;
 
-	if (zoneIdx >= 1 && zoneIdx <= 28 && !_vm->_globals._inventory[zoneIdx]) {
+	if (zoneIdx >= 1 && zoneIdx <= 28 && !_vm->_globals->_inventory[zoneIdx]) {
 		_vm->_eventsManager->_mouseCursorId = 0;
 		_borderPos = Common::Point(0, 0);
 		_borderSpriteIndex = 0;
@@ -2463,13 +2463,13 @@ void ObjectsManager::nextObjectIcon(int idx) {
 	do {
 		if (nextCursorId == 2 || nextCursorId == 5 || nextCursorId == 6) {
 			_vm->_eventsManager->_mouseCursorId = 6;
-			if (_vm->_globals._objectAuthIcons[_vm->_globals._inventory[idx]]._flag1 == 1)
+			if (_vm->_globals->_objectAuthIcons[_vm->_globals->_inventory[idx]]._flag1 == 1)
 				return;
 			nextCursorId++;
 		}
 		if (nextCursorId == 7) {
 			_vm->_eventsManager->_mouseCursorId = 7;
-			if (_vm->_globals._objectAuthIcons[_vm->_globals._inventory[idx]]._flag2 == 1)
+			if (_vm->_globals->_objectAuthIcons[_vm->_globals->_inventory[idx]]._flag2 == 1)
 				return;
 			nextCursorId++;
 		}	
@@ -2479,35 +2479,35 @@ void ObjectsManager::nextObjectIcon(int idx) {
 		}
 		if (nextCursorId == 9 || nextCursorId == 10) {
 			_vm->_eventsManager->_mouseCursorId = 10;
-			if (_vm->_globals._objectAuthIcons[_vm->_globals._inventory[idx]]._flag6 == 1)
+			if (_vm->_globals->_objectAuthIcons[_vm->_globals->_inventory[idx]]._flag6 == 1)
 				return;
 			nextCursorId = 11;
 		}
 
 		if (nextCursorId == 11) {
 			_vm->_eventsManager->_mouseCursorId = 11;
-			if (_vm->_globals._objectAuthIcons[_vm->_globals._inventory[idx]]._flag3 == 1)
+			if (_vm->_globals->_objectAuthIcons[_vm->_globals->_inventory[idx]]._flag3 == 1)
 				return;
 			nextCursorId++;
 		}
 
 		if (nextCursorId == 12 || nextCursorId == 13) {
 			_vm->_eventsManager->_mouseCursorId = 13;
-			if (_vm->_globals._objectAuthIcons[_vm->_globals._inventory[idx]]._flag4 == 1)
+			if (_vm->_globals->_objectAuthIcons[_vm->_globals->_inventory[idx]]._flag4 == 1)
 				return;
 			nextCursorId = 14;
 		}
 
 		if (nextCursorId == 14 || nextCursorId == 15) {
 			_vm->_eventsManager->_mouseCursorId = 15;
-			if (_vm->_globals._objectAuthIcons[_vm->_globals._inventory[idx]]._flag5 == 1)
+			if (_vm->_globals->_objectAuthIcons[_vm->_globals->_inventory[idx]]._flag5 == 1)
 				return;
 			nextCursorId = 23;
 		}
 
 		if (nextCursorId >= 16 && nextCursorId <= 23) {
 			_vm->_eventsManager->_mouseCursorId = 23;
-			if (_vm->_globals._objectAuthIcons[_vm->_globals._inventory[idx]]._flag5 == 2)
+			if (_vm->_globals->_objectAuthIcons[_vm->_globals->_inventory[idx]]._flag5 == 2)
 				return;
 			nextCursorId = 24;
 		}
@@ -2517,7 +2517,7 @@ void ObjectsManager::nextObjectIcon(int idx) {
 		}
 		
 		nextCursorId = 6;
-	} while (_vm->_globals._objectAuthIcons[_vm->_globals._inventory[idx]]._flag6 != 2);
+	} while (_vm->_globals->_objectAuthIcons[_vm->_globals->_inventory[idx]]._flag6 != 2);
 }
 
 void ObjectsManager::takeInventoryObject(int idx) {
@@ -2560,26 +2560,26 @@ void ObjectsManager::OPTI_OBJET() {
 			break;
 	}
 
-	_vm->_globals.freeMemory(data);
+	_vm->_globals->freeMemory(data);
 }
 
 void ObjectsManager::handleSpecialGames() {
 	byte *oldPalette;
 
-	switch (_vm->_globals._screenId) {
+	switch (_vm->_globals->_screenId) {
 	case 5:
-		if ((getSpriteY(0) > 399) || _vm->_globals._saveData->_data[svField173])
+		if ((getSpriteY(0) > 399) || _vm->_globals->_saveData->_data[svField173])
 			break;
 
-		_vm->_globals._saveData->_data[svField173] = 1;
-		_vm->_globals._introSpeechOffFl = true;
+		_vm->_globals->_saveData->_data[svField173] = 1;
+		_vm->_globals->_introSpeechOffFl = true;
 		_vm->_talkManager.startAnimatedCharacterDialogue("flicspe1.pe2");
-		_vm->_globals._introSpeechOffFl = false;
+		_vm->_globals->_introSpeechOffFl = false;
 
-		if (_vm->_globals._censorshipFl)
+		if (_vm->_globals->_censorshipFl)
 			break;
 
-		oldPalette = _vm->_globals.allocMemory(1000);
+		oldPalette = _vm->_globals->allocMemory(1000);
 		memcpy(oldPalette, _vm->_graphicsManager._palette, 769);
 
 		_vm->_saveLoadManager.saveFile("TEMP1.SCR", _vm->_graphicsManager._vesaScreen, 307200);
@@ -2602,7 +2602,7 @@ void ObjectsManager::handleSpecialGames() {
 		PERSO_ON = false;
 		memcpy(_vm->_graphicsManager._palette, oldPalette, 769);
 		_vm->_graphicsManager.setPaletteVGA256(_vm->_graphicsManager._palette);
-		_vm->_globals.freeMemory(oldPalette);
+		_vm->_globals->freeMemory(oldPalette);
 		_vm->_graphicsManager.lockScreen();
 		_vm->_graphicsManager.m_scroll16(_vm->_graphicsManager._vesaScreen, _vm->_eventsManager->_startPos.x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
 		_vm->_graphicsManager.unlockScreen();
@@ -2612,82 +2612,82 @@ void ObjectsManager::handleSpecialGames() {
 		_vm->_graphicsManager.updateScreen();
 		break;
 	case 20:
-		_vm->_globals._saveData->_data[svField132] = (getSpriteX(0) > 65 && getSpriteX(0) <= 124 && getSpriteY(0) > 372 && getSpriteY(0) <= 398) ? 1 : 0;
+		_vm->_globals->_saveData->_data[svField132] = (getSpriteX(0) > 65 && getSpriteX(0) <= 124 && getSpriteY(0) > 372 && getSpriteY(0) <= 398) ? 1 : 0;
 		break;
 	case 35:
-		if (_vm->_globals._prevScreenId == 16)
+		if (_vm->_globals->_prevScreenId == 16)
 			handleForest(35, 500, 555, 100, 440, 1);
-		else if (_vm->_globals._prevScreenId == 36)
+		else if (_vm->_globals->_prevScreenId == 36)
 			handleForest(35, 6, 84, 100, 440, 4);
 		break;
 	case 36:
-		if (_vm->_globals._prevScreenId == 35)
+		if (_vm->_globals->_prevScreenId == 35)
 			handleForest(36, 551, 633, 100, 440, 2);
-		else if (_vm->_globals._prevScreenId == 37)
+		else if (_vm->_globals->_prevScreenId == 37)
 			handleForest(36, 6, 84, 100, 440, 4);
 		break;
 	case 37:
-		if (_vm->_globals._prevScreenId == 36)
+		if (_vm->_globals->_prevScreenId == 36)
 			handleForest(37, 551, 633, 100, 440, 1);
-		else if (_vm->_globals._prevScreenId == 38)
+		else if (_vm->_globals->_prevScreenId == 38)
 			handleForest(37, 392, 529, 100, 440, 2);
 		break;
 	case 38:
-		if (_vm->_globals._prevScreenId == 37)
+		if (_vm->_globals->_prevScreenId == 37)
 			handleForest(38, 133, 252, 100, 440, 4);
-		else if (_vm->_globals._prevScreenId == 39)
+		else if (_vm->_globals->_prevScreenId == 39)
 			handleForest(38, 6, 84, 100, 440, 3);
 		break;
 	case 39:
-		if (_vm->_globals._prevScreenId == 38)
+		if (_vm->_globals->_prevScreenId == 38)
 			handleForest(39, 551, 633, 100, 440, 2);
-		else if (_vm->_globals._prevScreenId == 40)
+		else if (_vm->_globals->_prevScreenId == 40)
 			handleForest(39, 6, 84, 100, 440, 3);
 		break;
 	case 40:
-		if (_vm->_globals._prevScreenId == 39)
+		if (_vm->_globals->_prevScreenId == 39)
 			handleForest(40, 133, 252, 100, 440, 4);
-		else if (_vm->_globals._prevScreenId == 41)
+		else if (_vm->_globals->_prevScreenId == 41)
 			handleForest(40, 392, 529, 100, 440, 2);
 		break;
 	case 41:
-		if (_vm->_globals._prevScreenId == 40)
+		if (_vm->_globals->_prevScreenId == 40)
 			handleForest(41, 551, 633, 100, 440, 1);
-		else if (_vm->_globals._prevScreenId == 17)
+		else if (_vm->_globals->_prevScreenId == 17)
 			handleForest(41, 6, 84, 100, 440, 3);
 		break;
 	case 57:
-		_vm->_globals._disableInventFl = true;
-		if (_vm->_globals._saveData->_data[svField261] == 1 && getBobAnimDataIdx(5) == 37) {
+		_vm->_globals->_disableInventFl = true;
+		if (_vm->_globals->_saveData->_data[svField261] == 1 && getBobAnimDataIdx(5) == 37) {
 			stopBobAnimation(5);
 			setBobAnimDataIdx(5, 0);
 			setBobAnimation(6);
-			_vm->_globals._saveData->_data[svField261] = 2;
+			_vm->_globals->_saveData->_data[svField261] = 2;
 			_vm->_linesManager.disableZone(15);
 			_vm->_soundManager.playSoundFile("SOUND75.WAV");
 		}
-		if (_vm->_globals._saveData->_data[svField261] == 2 && getBobAnimDataIdx(6) == 6) {
+		if (_vm->_globals->_saveData->_data[svField261] == 2 && getBobAnimDataIdx(6) == 6) {
 			stopBobAnimation(6);
 			setBobAnimDataIdx(6, 0);
 			setBobAnimation(7);
 			_vm->_linesManager.enableZone(14);
-			_vm->_globals._saveData->_data[svField261] = 3;
+			_vm->_globals->_saveData->_data[svField261] = 3;
 		}
-		_vm->_globals._disableInventFl = false;
+		_vm->_globals->_disableInventFl = false;
 		break;
 	case 93:
-		if (_vm->_globals._saveData->_data[svField333])
+		if (_vm->_globals->_saveData->_data[svField333])
 			break;
 
-		_vm->_globals._disableInventFl = true;
+		_vm->_globals->_disableInventFl = true;
 		do
 			_vm->_eventsManager->refreshScreenAndEvents();
 		while (getBobAnimDataIdx(8) != 3);
-		_vm->_globals._introSpeechOffFl = true;
+		_vm->_globals->_introSpeechOffFl = true;
 		_vm->_talkManager.startAnimatedCharacterDialogue("GM3.PE2");
 		stopBobAnimation(8);
-		_vm->_globals._saveData->_data[svField333] = 1;
-		_vm->_globals._disableInventFl = false;
+		_vm->_globals->_saveData->_data[svField333] = 1;
+		_vm->_globals->_disableInventFl = false;
 		break;
 	}
 }
@@ -2708,7 +2708,7 @@ void ObjectsManager::VBOB(byte *src, int idx, int xp, int yp, int frameIndex) {
 	if (idx > 29)
 		error("MAX_VBOB exceeded");
 
-	VBobItem *vbob = &_vm->_globals.VBob[idx];
+	VBobItem *vbob = &_vm->_globals->VBob[idx];
 	if (vbob->_displayMode <= 1) {
 		vbob->_displayMode = 1;
 		vbob->_xp = xp;
@@ -2719,7 +2719,7 @@ void ObjectsManager::VBOB(byte *src, int idx, int xp, int yp, int frameIndex) {
 		vbob->_oldFrameIndex = frameIndex;
 		vbob->_spriteData = src;
 		vbob->_oldSpriteData = src;
-		vbob->_surface = _vm->_globals.freeMemory(vbob->_surface);
+		vbob->_surface = _vm->_globals->freeMemory(vbob->_surface);
 	} else if (vbob->_displayMode == 2 || vbob->_displayMode == 4) {
 		vbob->_displayMode = 3;
 		vbob->_oldX = vbob->_xp;
@@ -2737,7 +2737,7 @@ void ObjectsManager::VBOB_OFF(int idx) {
 	if (idx > 29)
 		error("MAX_VBOB exceeded");
 
-	VBobItem *vbob = &_vm->_globals.VBob[idx];
+	VBobItem *vbob = &_vm->_globals->VBob[idx];
 	if (vbob->_displayMode <= 1)
 		vbob->_displayMode = 0;
 	else
@@ -2746,7 +2746,7 @@ void ObjectsManager::VBOB_OFF(int idx) {
 
 void ObjectsManager::doActionBack(int idx) {
 	if (_curGestureFile != 1) {
-		_gestureBuf = _vm->_globals.freeMemory(_gestureBuf);
+		_gestureBuf = _vm->_globals->freeMemory(_gestureBuf);
 		_curGestureFile = 1;
 		_gestureBuf = _vm->_fileManager->loadFile("DOS.SPR");
 	}
@@ -2787,7 +2787,7 @@ void ObjectsManager::doActionBack(int idx) {
 
 void ObjectsManager::doActionRight(int idx) {
 	if (_curGestureFile != 3) {
-		_gestureBuf = _vm->_globals.freeMemory(_gestureBuf);
+		_gestureBuf = _vm->_globals->freeMemory(_gestureBuf);
 		_curGestureFile = 3;
 		_gestureBuf = _vm->_fileManager->loadFile("PROFIL.SPR");
 	}
@@ -2828,7 +2828,7 @@ void ObjectsManager::doActionRight(int idx) {
 
 void ObjectsManager::doActionDiagRight(int idx) {
 	if (_curGestureFile != 4) {
-		_gestureBuf = _vm->_globals.freeMemory(_gestureBuf);
+		_gestureBuf = _vm->_globals->freeMemory(_gestureBuf);
 		_curGestureFile = 4;
 		_gestureBuf = _vm->_fileManager->loadFile("3Q.SPR");
 	}
@@ -2869,7 +2869,7 @@ void ObjectsManager::doActionDiagRight(int idx) {
 
 void ObjectsManager::doActionFront(int idx) {
 	if (_curGestureFile != 2) {
-		_gestureBuf = _vm->_globals.freeMemory(_gestureBuf);
+		_gestureBuf = _vm->_globals->freeMemory(_gestureBuf);
 		_curGestureFile = 2;
 		_gestureBuf = _vm->_fileManager->loadFile("FACE.SPR");
 	}
@@ -2892,7 +2892,7 @@ void ObjectsManager::doActionFront(int idx) {
 
 void ObjectsManager::doActionDiagLeft(int idx) {
 	if (_curGestureFile != 4) {
-		_gestureBuf = _vm->_globals.freeMemory(_gestureBuf);
+		_gestureBuf = _vm->_globals->freeMemory(_gestureBuf);
 		_curGestureFile = 4;
 		_gestureBuf = _vm->_fileManager->loadFile("3Q.SPR");
 	}
@@ -2933,7 +2933,7 @@ void ObjectsManager::doActionDiagLeft(int idx) {
 
 void ObjectsManager::doActionLeft(int idx) {
 	if (_curGestureFile != 3) {
-		_gestureBuf = _vm->_globals.freeMemory(_gestureBuf);
+		_gestureBuf = _vm->_globals->freeMemory(_gestureBuf);
 		_curGestureFile = 3;
 		_gestureBuf = _vm->_fileManager->loadFile("PROFIL.SPR");
 	}
@@ -3044,13 +3044,13 @@ void ObjectsManager::loadLinkFile(const Common::String &file) {
 	Common::File f;
 	Common::String filename = file + ".LNK";
 	byte *ptr = _vm->_fileManager->searchCat(filename, RES_LIN);
-	size_t nbytes = _vm->_globals._catalogSize;
+	size_t nbytes = _vm->_globals->_catalogSize;
 	if (ptr == g_PTRNUL) {
 		if (!f.open(filename))
 			error("Error opening file - %s", filename.c_str());
 
 		nbytes = f.size();
-		ptr = _vm->_globals.allocMemory(nbytes);
+		ptr = _vm->_globals->allocMemory(nbytes);
 		if (g_PTRNUL == ptr)
 			error("INILINK");
 		_vm->_fileManager->readStream(f, ptr, nbytes);
@@ -3058,36 +3058,36 @@ void ObjectsManager::loadLinkFile(const Common::String &file) {
 	}
 	if (!OBSSEUL) {
 		for (int idx = 0; idx < 500; ++idx)
-			_vm->_globals._spriteSize[idx] = READ_LE_INT16((uint16 *)ptr + idx);
+			_vm->_globals->_spriteSize[idx] = READ_LE_INT16((uint16 *)ptr + idx);
 
-		_vm->_globals.resetHidingItems();
+		_vm->_globals->resetHidingItems();
 
 		Common::String filename2 = Common::String((const char *)ptr + 1000);
 		if (!filename2.empty()) {
-			_vm->_globals._hidingItemData[1] = _vm->_fileManager->searchCat(filename2, RES_SLI);
+			_vm->_globals->_hidingItemData[1] = _vm->_fileManager->searchCat(filename2, RES_SLI);
 
-			if (_vm->_globals._hidingItemData[1] || _vm->_globals._hidingItemData[1] == g_PTRNUL) {
-				_vm->_globals._hidingItemData[1] = _vm->_fileManager->loadFile(filename2);
+			if (_vm->_globals->_hidingItemData[1] || _vm->_globals->_hidingItemData[1] == g_PTRNUL) {
+				_vm->_globals->_hidingItemData[1] = _vm->_fileManager->loadFile(filename2);
 			} else {
-				_vm->_globals._hidingItemData[1] = _vm->_fileManager->loadFile("RES_SLI.RES");
+				_vm->_globals->_hidingItemData[1] = _vm->_fileManager->loadFile("RES_SLI.RES");
 			}
 
 			int curDataCacheId = 60;
 			byte *curDataPtr = ptr + 1000;
 			for (int hidingIdx = 0; hidingIdx <= 21; hidingIdx++) {
-				HidingItem *hid = &_vm->_globals._hidingItem[hidingIdx];
+				HidingItem *hid = &_vm->_globals->_hidingItem[hidingIdx];
 				int curSpriteId = READ_LE_INT16(curDataPtr + 2 * curDataCacheId);
 				hid->_spriteIndex = curSpriteId;
 				hid->_x = READ_LE_INT16(curDataPtr + 2 * curDataCacheId + 2);
 				hid->_y = READ_LE_INT16(curDataPtr + 2 * curDataCacheId + 4);
 				hid->_yOffset = READ_LE_INT16(curDataPtr + 2 * curDataCacheId + 8);
 
-				if (!_vm->_globals._hidingItemData[1]) {
+				if (!_vm->_globals->_hidingItemData[1]) {
 					hid->_useCount = 0;
 				} else {
-					hid->_spriteData = _vm->_globals._hidingItemData[1];
-					hid->_width = getWidth(_vm->_globals._hidingItemData[1], curSpriteId);
-					hid->_height = getHeight(_vm->_globals._hidingItemData[1], curSpriteId);
+					hid->_spriteData = _vm->_globals->_hidingItemData[1];
+					hid->_width = getWidth(_vm->_globals->_hidingItemData[1], curSpriteId);
+					hid->_height = getHeight(_vm->_globals->_hidingItemData[1], curSpriteId);
 					hid->_useCount = 1;
 				}
 				if (!hid->_x && !hid->_y && !hid->_spriteIndex)
@@ -3095,7 +3095,7 @@ void ObjectsManager::loadLinkFile(const Common::String &file) {
 
 				curDataCacheId += 5;
 			}
-			_vm->_globals.enableHiding();
+			_vm->_globals->enableHiding();
 		}
 	}
 
@@ -3195,14 +3195,14 @@ void ObjectsManager::loadLinkFile(const Common::String &file) {
 			}
 		}
 	}
-	_vm->_globals.freeMemory(ptr);
+	_vm->_globals->freeMemory(ptr);
 }
 
 void ObjectsManager::sceneSpecialIni() {
-	switch (_vm->_globals._screenId) {
+	switch (_vm->_globals->_screenId) {
 	case 17:
-		if (_vm->_globals._prevScreenId == 20) {
-			_vm->_globals._disableInventFl = true;
+		if (_vm->_globals->_prevScreenId == 20) {
+			_vm->_globals->_disableInventFl = true;
 			_vm->_graphicsManager.SETCOLOR3(252, 100, 100, 100);
 			_vm->_graphicsManager.SETCOLOR3(253, 100, 100, 100);
 			_vm->_graphicsManager.SETCOLOR3(251, 100, 100, 100);
@@ -3213,19 +3213,19 @@ void ObjectsManager::sceneSpecialIni() {
 			animateSprite(0);
 			for (int i = 0; i <= 4; i++)
 				_vm->_eventsManager->refreshScreenAndEvents();
-			VBOB(_vm->_globals.SPRITE_ECRAN, 5, 15, 28, 1);
+			VBOB(_vm->_globals->SPRITE_ECRAN, 5, 15, 28, 1);
 			_vm->_fontManager->hideText(9);
 			bool displayedTxtFl = false;
 			if (!_vm->_soundManager._textOffFl) {
-				_vm->_fontManager->initTextBuffers(9, 383, _vm->_globals._textFilename, 220, 72, 6, 36, 253);
+				_vm->_fontManager->initTextBuffers(9, 383, _vm->_globals->_textFilename, 220, 72, 6, 36, 253);
 				_vm->_fontManager->showText(9);
 				displayedTxtFl = true;
 			}
 			if (!_vm->_soundManager._voiceOffFl)
 				_vm->_soundManager.mixVoice(383, 4, displayedTxtFl);
-			_vm->_globals._saveData->_data[svField270] = 1;
-			_vm->_globals._saveData->_data[svField300] = 1;
-			_vm->_globals._saveData->_data[svField320] = 1;
+			_vm->_globals->_saveData->_data[svField270] = 1;
+			_vm->_globals->_saveData->_data[svField300] = 1;
+			_vm->_globals->_saveData->_data[svField320] = 1;
 			if (_vm->_soundManager._voiceOffFl) {
 				for (int i = 0; i <= 199; i++)
 					_vm->_eventsManager->refreshScreenAndEvents();
@@ -3235,23 +3235,23 @@ void ObjectsManager::sceneSpecialIni() {
 			for (int i = 0; i <= 3; i++)
 				_vm->_eventsManager->refreshScreenAndEvents();
 			_vm->_graphicsManager._noFadingFl = true;
-			_vm->_globals._disableInventFl = false;
+			_vm->_globals->_disableInventFl = false;
 		}
 		break;
 
 	case 18:
-		if (_vm->_globals._prevScreenId == 17) {
+		if (_vm->_globals->_prevScreenId == 17) {
 			_vm->_eventsManager->_mouseSpriteId = 4;
 			for (int i = 0; i <= 4; i++)
 				_vm->_eventsManager->refreshScreenAndEvents();
 			_vm->_graphicsManager.fadeInLong();
-			_vm->_globals.iRegul = 1;
-			_vm->_globals._disableInventFl = false;
+			_vm->_globals->iRegul = 1;
+			_vm->_globals->_disableInventFl = false;
 			_vm->_graphicsManager._noFadingFl = true;
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("MAGE1.pe2");
 			_vm->_graphicsManager._noFadingFl = true;
-			_vm->_globals._disableInventFl = false;
+			_vm->_globals->_disableInventFl = false;
 		}
 		break;
 
@@ -3279,20 +3279,20 @@ void ObjectsManager::sceneSpecialIni() {
 		_vm->_linesManager.ZONEP[22]._messageId = 30;
 		_vm->_linesManager.ZONEP[23]._messageId = 30;
 		for (int i = svField200; i <= svField214; i++) {
-			if (_vm->_globals._saveData->_data[i] != 2)
-				_vm->_globals._saveData->_data[i] = 0;
+			if (_vm->_globals->_saveData->_data[i] != 2)
+				_vm->_globals->_saveData->_data[i] = 0;
 		}
 		break;
 
 	case 73:
-		if (!_vm->_globals._saveData->_data[svSecondElevatorAvailableFl]) {
-			_vm->_globals.resetHidingUseCount(0);
-			_vm->_globals.resetHidingUseCount(1);
+		if (!_vm->_globals->_saveData->_data[svSecondElevatorAvailableFl]) {
+			_vm->_globals->resetHidingUseCount(0);
+			_vm->_globals->resetHidingUseCount(1);
 		}
 		break;
 
 	case 93:
-		if (!_vm->_globals._saveData->_data[svField333])
+		if (!_vm->_globals->_saveData->_data[svField333])
 			setBobAnimation(8);
 		break;
 	}
@@ -3444,9 +3444,9 @@ void ObjectsManager::enableVerb(int idx, int a2) {
 void ObjectsManager::ACTION(const byte *spriteData, const Common::String &actionStr, int speed, bool flipFl) {
 	Common::String tmpStr = "";
 	int realSpeed = speed;
-	if (_vm->_globals._speed == 2)
+	if (_vm->_globals->_speed == 2)
 		realSpeed = speed / 2;
-	else if (_vm->_globals._speed == 3)
+	else if (_vm->_globals->_speed == 3)
 		realSpeed = speed / 3;
 	const byte *oldSpriteData = _sprite[0]._spriteData;
 	int spriteIndex = _sprite[0]._spriteIndex;
@@ -3486,9 +3486,9 @@ void ObjectsManager::SPACTION(byte *spriteData, const Common::String &animationS
 	Common::String tmpStr = "";
 
 	int realSpeed = speed;
-	if (_vm->_globals._speed == 2)
+	if (_vm->_globals->_speed == 2)
 		realSpeed = speed / 2;
-	else if (_vm->_globals._speed == 3)
+	else if (_vm->_globals->_speed == 3)
 		realSpeed = speed / 3;
 
 	_oldSpriteData = _sprite[0]._spriteData;
@@ -3527,9 +3527,9 @@ void ObjectsManager::SPACTION(byte *spriteData, const Common::String &animationS
 void ObjectsManager::SPACTION1(byte *spriteData, const Common::String &animString, int speed) {
 	Common::String tmpStr = "";
 	int realSpeed = speed;
-	if (_vm->_globals._speed == 2)
+	if (_vm->_globals->_speed == 2)
 		realSpeed = speed / 2;
-	else if (_vm->_globals._speed == 3)
+	else if (_vm->_globals->_speed == 3)
 		realSpeed = speed / 3;
 
 	int spriteIndex = 0;
@@ -3568,10 +3568,10 @@ void ObjectsManager::SPACTION1(byte *spriteData, const Common::String &animStrin
 
 void ObjectsManager::handleForest(int screenId, int minX, int maxX, int minY, int maxY, int idx) {
 	int savegameIdx = screenId;
-	if (_vm->_globals._screenId != screenId)
+	if (_vm->_globals->_screenId != screenId)
 		return;
 
-	switch (_vm->_globals._screenId) {
+	switch (_vm->_globals->_screenId) {
 	case 35:
 		if (idx > 2)
 			savegameIdx = 201;
@@ -3616,25 +3616,25 @@ void ObjectsManager::handleForest(int screenId, int minX, int maxX, int minY, in
 		break;
 	}
 
-	if (_vm->_globals._saveData->_data[savegameIdx] == 2)
+	if (_vm->_globals->_saveData->_data[savegameIdx] == 2)
 		return;
 
-	if (_vm->_globals._saveData->_data[savegameIdx]) {
-		if (_vm->_globals._saveData->_data[savegameIdx] == 1) {
+	if (_vm->_globals->_saveData->_data[savegameIdx]) {
+		if (_vm->_globals->_saveData->_data[savegameIdx] == 1) {
 			if (((idx == 1 || idx == 2) && getBobAnimDataIdx(idx) == 26) || ((idx == 3 || idx == 4) && getBobAnimDataIdx(idx) == 27)) {
 				_vm->_dialogsManager->_removeInventFl = true;
 				_vm->_soundManager.playSample(1);
-				_vm->_globals._saveData->_data[savegameIdx] = 4;
+				_vm->_globals->_saveData->_data[savegameIdx] = 4;
 			}
 		}
-		if (_vm->_globals._saveData->_data[savegameIdx] == 4) {
+		if (_vm->_globals->_saveData->_data[savegameIdx] == 4) {
 			if (idx >= 1 && idx <= 4 && getBobAnimDataIdx(idx) > 30)
-				_vm->_globals._saveData->_data[savegameIdx] = 3;
+				_vm->_globals->_saveData->_data[savegameIdx] = 3;
 		}
-		if (_vm->_globals._saveData->_data[savegameIdx] == 3) {
+		if (_vm->_globals->_saveData->_data[savegameIdx] == 3) {
 			_vm->_graphicsManager.FADE_LINUX = 2;
 			_vm->_animationManager->playAnim("CREVE2.ANM", 100, 24, 500);
-			_vm->_globals._exitId = 150;
+			_vm->_globals->_exitId = 150;
 			_vm->_graphicsManager._noFadingFl = true;
 			hideBob(1);
 			hideBob(2);
@@ -3647,13 +3647,13 @@ void ObjectsManager::handleForest(int screenId, int minX, int maxX, int minY, in
 	           && maxY > getSpriteY(0)) {
 		if (idx >= 1 && idx <= 4)
 			setBobAnimation(idx);
-		_vm->_globals._saveData->_data[savegameIdx] = 1;
+		_vm->_globals->_saveData->_data[savegameIdx] = 1;
 	}
 }
 
 void ObjectsManager::lockAnimX(int idx, int x) {
-	_vm->_globals._lockedAnims[idx]._enableFl = true;
-	_vm->_globals._lockedAnims[idx]._posX = x;
+	_vm->_globals->_lockedAnims[idx]._enableFl = true;
+	_vm->_globals->_lockedAnims[idx]._posX = x;
 }
 
 /**
@@ -3665,12 +3665,12 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo
 	_vm->_eventsManager->_gameKey = KEY_NONE;
 	_vm->_dialogsManager->_removeInventFl = false;
 	_vm->_graphicsManager._scrollOffset = 0;
-	_vm->_globals._cityMapEnabledFl = false;
-	_vm->_globals.iRegul = 1;
+	_vm->_globals->_cityMapEnabledFl = false;
+	_vm->_globals->iRegul = 1;
 	_vm->_soundManager.playSound(soundNum);
 	_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
-	_vm->_globals._freezeCharacterFl = true;
-	_vm->_globals._exitId = 0;
+	_vm->_globals->_freezeCharacterFl = true;
+	_vm->_globals->_exitId = 0;
 	if (!backgroundFile.empty())
 		_vm->_graphicsManager.loadImage(backgroundFile);
 	if (!linkFile.empty())
@@ -3685,8 +3685,8 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo
 			_vm->_graphicsManager.initScreen(s4, 2, initializeScreen);
 	}
 	_vm->_eventsManager->mouseOn();
-	if (_vm->_globals._screenId == 61) {
-		addStaticSprite(_vm->_globals.PERSO, Common::Point(330, 418), 0, 60, 0, false, 34, 190);
+	if (_vm->_globals->_screenId == 61) {
+		addStaticSprite(_vm->_globals->PERSO, Common::Point(330, 418), 0, 60, 0, false, 34, 190);
 		animateSprite(0);
 		_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 		computeAndSetSpriteSize();
@@ -3699,16 +3699,16 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo
 	for (int i = 0; i <= 4; i++)
 		_vm->_eventsManager->refreshScreenAndEvents();
 	_vm->_graphicsManager.fadeInLong();
-	if (_vm->_globals._screenId == 61) {
+	if (_vm->_globals->_screenId == 61) {
 		_vm->_animationManager->playSequence("OUVRE.SEQ", 10, 4, 10);
 		stopBobAnimation(3);
-		_vm->_globals._checkDistanceFl = true;
+		_vm->_globals->_checkDistanceFl = true;
 		_oldCharacterPosX = getSpriteX(0);
-		_vm->_globals._oldDirection = DIR_NONE;
-		_vm->_globals.Compteur = 0;
+		_vm->_globals->_oldDirection = DIR_NONE;
+		_vm->_globals->Compteur = 0;
 		_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 		_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(getSpriteX(0), getSpriteY(0), 330, 345);
-		_vm->_globals._checkDistanceFl = true;
+		_vm->_globals->_checkDistanceFl = true;
 		do {
 			GOHOME();
 			_vm->_eventsManager->refreshScreenAndEvents();
@@ -3724,12 +3724,12 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo
 			handleRightButton();
 		_vm->_dialogsManager->testDialogOpening();
 		_vm->_linesManager.checkZone();
-		if (_vm->_globals._actionMoveTo)
+		if (_vm->_globals->_actionMoveTo)
 			PARADISE();
-		if (!_vm->_globals._exitId)
+		if (!_vm->_globals->_exitId)
 			_vm->_eventsManager->refreshScreenAndEvents();
 
-		if (_vm->_globals._exitId)
+		if (_vm->_globals->_exitId)
 			break;
 	} while (!_vm->shouldQuit());
 	if (_vm->shouldQuit())
@@ -3738,10 +3738,10 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo
 	_vm->_graphicsManager.fadeOutLong();
 	if (!animFile.empty())
 		_vm->_graphicsManager.endDisplayBob();
-	if (_vm->_globals._screenId == 61)
+	if (_vm->_globals->_screenId == 61)
 		removeSprite(0);
 	clearScreen();
-	_vm->_globals.iRegul = 0;
+	_vm->_globals->iRegul = 0;
 }
 
 /**
@@ -3754,13 +3754,13 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
 	_verb = 4;
 	_vm->_graphicsManager._scrollOffset = 0;
 	_vm->_dialogsManager->_removeInventFl = false;
-	_vm->_globals._cityMapEnabledFl = false;
+	_vm->_globals->_cityMapEnabledFl = false;
 	_vm->_graphicsManager._noFadingFl = false;
-	_vm->_globals._freezeCharacterFl = false;
-	_vm->_globals._exitId = 0;
-	_vm->_globals._checkDistanceFl = true;
+	_vm->_globals->_freezeCharacterFl = false;
+	_vm->_globals->_exitId = 0;
+	_vm->_globals->_checkDistanceFl = true;
 	_vm->_soundManager.playSound(soundNum);
-	_vm->_globals.iRegul = 1;
+	_vm->_globals->iRegul = 1;
 	if (!backgroundFile.empty())
 		_vm->_graphicsManager.loadImage(backgroundFile);
 	if (!linkFile.empty())
@@ -3781,31 +3781,31 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
 	_vm->_graphicsManager.SETCOLOR3(253, 100, 100, 100);
 	_vm->_graphicsManager.SETCOLOR3(251, 100, 100, 100);
 	_vm->_graphicsManager.SETCOLOR3(254, 0, 0, 0);
-	if (_vm->_globals._characterType) {
-		if (!_vm->_globals._saveData->_data[svAlternateSpriteFl] && !_vm->_globals._saveData->_data[svField356]) {
-			_vm->_globals.PERSO = _vm->_fileManager->loadFile("PERSO.SPR");
-			_vm->_globals._characterType = 0;
+	if (_vm->_globals->_characterType) {
+		if (!_vm->_globals->_saveData->_data[svAlternateSpriteFl] && !_vm->_globals->_saveData->_data[svField356]) {
+			_vm->_globals->PERSO = _vm->_fileManager->loadFile("PERSO.SPR");
+			_vm->_globals->_characterType = 0;
 		}
 	}
-	if (!_vm->_globals._characterType && _vm->_globals._saveData->_data[svAlternateSpriteFl] == 1) {
-		_vm->_globals.PERSO = _vm->_fileManager->loadFile("HOPFEM.SPR");
-		_vm->_globals._characterType = 1;
+	if (!_vm->_globals->_characterType && _vm->_globals->_saveData->_data[svAlternateSpriteFl] == 1) {
+		_vm->_globals->PERSO = _vm->_fileManager->loadFile("HOPFEM.SPR");
+		_vm->_globals->_characterType = 1;
 	}
 
-	if (_vm->_globals._characterType != 2 && _vm->_globals._saveData->_data[svField356] == 1) {
-		_vm->_globals.PERSO = _vm->_fileManager->loadFile("PSAMAN.SPR");
-		_vm->_globals._characterType = 2;
+	if (_vm->_globals->_characterType != 2 && _vm->_globals->_saveData->_data[svField356] == 1) {
+		_vm->_globals->PERSO = _vm->_fileManager->loadFile("PSAMAN.SPR");
+		_vm->_globals->_characterType = 2;
 	}
-	_vm->_globals.loadCharacterData();
-	switch (_vm->_globals._characterType) {
+	_vm->_globals->loadCharacterData();
+	switch (_vm->_globals->_characterType) {
 	case 0:
-		addStaticSprite(_vm->_globals.PERSO, _characterPos, 0, _startSpriteIndex, 0, false, 34, 190);
+		addStaticSprite(_vm->_globals->PERSO, _characterPos, 0, _startSpriteIndex, 0, false, 34, 190);
 		break;
 	case 1:
-		addStaticSprite(_vm->_globals.PERSO, _characterPos, 0, _startSpriteIndex, 0, false, 28, 155);
+		addStaticSprite(_vm->_globals->PERSO, _characterPos, 0, _startSpriteIndex, 0, false, 28, 155);
 		break;
 	case 2:
-		addStaticSprite(_vm->_globals.PERSO, _characterPos, 0, _startSpriteIndex, 0, false, 20, 127);
+		addStaticSprite(_vm->_globals->PERSO, _characterPos, 0, _startSpriteIndex, 0, false, 20, 127);
 		break;
 	}
 	_vm->_eventsManager->setMouseXY(_characterPos);
@@ -3813,20 +3813,20 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
 		_vm->_graphicsManager._scrollPosX = (int16)getSpriteX(0) - 320;
 	computeAndSetSpriteSize();
 	animateSprite(0);
-	_vm->_globals.enableHiding();
+	_vm->_globals->enableHiding();
 	_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 	computeAndSetSpriteSize();
 	sceneSpecialIni();
 	_vm->_eventsManager->_mouseSpriteId = 4;
 	_oldCharacterPosX = _characterPos.x;
 	_oldCharacterPosY = _characterPos.y;
-	_vm->_globals._oldDirection = DIR_NONE;
-	_vm->_globals.Compteur = 0;
+	_vm->_globals->_oldDirection = DIR_NONE;
+	_vm->_globals->Compteur = 0;
 
 	for (int idx = 0; idx < 5; ++idx)
 		_vm->_eventsManager->refreshScreenAndEvents();
 
-	_vm->_globals.iRegul = 1;
+	_vm->_globals->iRegul = 1;
 	if (!_vm->_graphicsManager._noFadingFl)
 		_vm->_graphicsManager.fadeInLong();
 	_vm->_graphicsManager._noFadingFl = false;
@@ -3847,7 +3847,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
 					if ((xCheck == xp) && (yCheck == yp)) {
 						_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 						PARADISE();
-						if (_vm->_globals._exitId)
+						if (_vm->_globals->_exitId)
 							breakFlag = true;
 					}
 					xCheck = xp;
@@ -3858,23 +3858,23 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
 				handleRightButton();
 			}
 		}
-		if (!_vm->_globals._exitId) {
+		if (!_vm->_globals->_exitId) {
 			_vm->_dialogsManager->testDialogOpening();
 			_vm->_linesManager.checkZone();
 			if (_vm->_linesManager._route == (RouteItem *)g_PTRNUL
 					|| (GOHOME(), _vm->_linesManager._route == (RouteItem *)g_PTRNUL)) {
-				if (_vm->_globals._actionMoveTo)
+				if (_vm->_globals->_actionMoveTo)
 					PARADISE();
 			}
 			handleSpecialGames();
 			_vm->_eventsManager->refreshScreenAndEvents();
-			if (!_vm->_globals._exitId)
+			if (!_vm->_globals->_exitId)
 				continue;
 		}
 		breakFlag = true;
 	}
 
-	if (_vm->_globals._exitId != 8 || _vm->_globals._screenId != 5 || !_helicopterFl) {
+	if (_vm->_globals->_exitId != 8 || _vm->_globals->_screenId != 5 || !_helicopterFl) {
 		if (!_vm->_graphicsManager._noFadingFl)
 			_vm->_graphicsManager.fadeOutLong();
 		_vm->_graphicsManager._noFadingFl = false;
@@ -3889,7 +3889,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm
 	} else {
 		_helicopterFl = false;
 	}
-	_vm->_globals.iRegul = 0;
+	_vm->_globals->iRegul = 0;
 }
 
 void ObjectsManager::setVerb(int id) {
diff --git a/engines/hopkins/saveload.cpp b/engines/hopkins/saveload.cpp
index 78673f4..35b41c7 100644
--- a/engines/hopkins/saveload.cpp
+++ b/engines/hopkins/saveload.cpp
@@ -142,14 +142,14 @@ void SaveLoadManager::writeSavegameHeader(Common::OutSaveFile *out, hopkinsSaveg
 Common::Error SaveLoadManager::saveGame(int slot, const Common::String &saveName) {
 	/* Pack any necessary data into the savegame data structure */
 	// Set the selected slot number
-	_vm->_globals._saveData->_data[svLastSavegameSlot] = slot;
+	_vm->_globals->_saveData->_data[svLastSavegameSlot] = slot;
 
 	// Set up the inventory
 	for (int i = 0; i < 35; ++i)
-		_vm->_globals._saveData->_inventory[i] = _vm->_globals._inventory[i];
+		_vm->_globals->_saveData->_inventory[i] = _vm->_globals->_inventory[i];
 
-	_vm->_globals._saveData->_mapCarPosX = _vm->_objectsManager._mapCarPosX;
-	_vm->_globals._saveData->_mapCarPosY = _vm->_objectsManager._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));
@@ -200,15 +200,15 @@ Common::Error SaveLoadManager::loadGame(int slot) {
 
 	// Unpack the inventory
 	for (int i = 0; i < 35; ++i)
-		_vm->_globals._inventory[i] = _vm->_globals._saveData->_inventory[i];
+		_vm->_globals->_inventory[i] = _vm->_globals->_saveData->_inventory[i];
 
 	// Set variables from loaded data as necessary
-	_vm->_globals._saveData->_data[svLastSavegameSlot] = slot;
-	_vm->_globals._exitId = _vm->_globals._saveData->_data[svLastScreenId];
-	_vm->_globals._saveData->_data[svLastPrevScreenId] = 0;
-	_vm->_globals._screenId = 0;
-	_vm->_objectsManager._mapCarPosX = _vm->_globals._saveData->_mapCarPosX;
-	_vm->_objectsManager._mapCarPosY = _vm->_globals._saveData->_mapCarPosY;
+	_vm->_globals->_saveData->_data[svLastSavegameSlot] = slot;
+	_vm->_globals->_exitId = _vm->_globals->_saveData->_data[svLastScreenId];
+	_vm->_globals->_saveData->_data[svLastPrevScreenId] = 0;
+	_vm->_globals->_screenId = 0;
+	_vm->_objectsManager._mapCarPosX = _vm->_globals->_saveData->_mapCarPosX;
+	_vm->_objectsManager._mapCarPosY = _vm->_globals->_saveData->_mapCarPosY;
 
 	return Common::kNoError;
 }
@@ -259,19 +259,19 @@ void SaveLoadManager::createThumbnail(Graphics::Surface *s) {
 }
 
 void SaveLoadManager::syncSavegameData(Common::Serializer &s, int version) {
-	s.syncBytes(&_vm->_globals._saveData->_data[0], 2050);
-	syncCharacterLocation(s, _vm->_globals._saveData->_cloneHopkins);
-	syncCharacterLocation(s, _vm->_globals._saveData->_realHopkins);
-	syncCharacterLocation(s, _vm->_globals._saveData->_samantha);
+	s.syncBytes(&_vm->_globals->_saveData->_data[0], 2050);
+	syncCharacterLocation(s, _vm->_globals->_saveData->_cloneHopkins);
+	syncCharacterLocation(s, _vm->_globals->_saveData->_realHopkins);
+	syncCharacterLocation(s, _vm->_globals->_saveData->_samantha);
 
 	for (int i = 0; i < 35; ++i)
-		s.syncAsSint16LE(_vm->_globals._saveData->_inventory[i]);
+		s.syncAsSint16LE(_vm->_globals->_saveData->_inventory[i]);
 
 	if (version > 1) {
-		s.syncAsSint16LE(_vm->_globals._saveData->_mapCarPosX);
-		s.syncAsSint16LE(_vm->_globals._saveData->_mapCarPosY);
+		s.syncAsSint16LE(_vm->_globals->_saveData->_mapCarPosX);
+		s.syncAsSint16LE(_vm->_globals->_saveData->_mapCarPosY);
 	} else {
-		_vm->_globals._saveData->_mapCarPosX = _vm->_globals._saveData->_mapCarPosY = 0;
+		_vm->_globals->_saveData->_mapCarPosX = _vm->_globals->_saveData->_mapCarPosY = 0;
 	}
 
 }
diff --git a/engines/hopkins/script.cpp b/engines/hopkins/script.cpp
index 20bc7de..6de67df 100644
--- a/engines/hopkins/script.cpp
+++ b/engines/hopkins/script.cpp
@@ -57,7 +57,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 		int mesgId = READ_LE_INT16(dataP + 13);
 		opcodeType = 1;
 		if (!_tempObjectFl) {
-			if (_vm->_globals._saveData->_data[svField356] == 1) {
+			if (_vm->_globals->_saveData->_data[svField356] == 1) {
 				if (mesgId == 53)
 					mesgId = 644;
 				if (mesgId == 624)
@@ -136,15 +136,15 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			if (!_vm->_soundManager._textOffFl) {
 				int textPosX = READ_LE_INT16(dataP + 9);
 				int textPosY = READ_LE_INT16(dataP + 11);
-				_vm->_fontManager->initTextBuffers(9, mesgId, _vm->_globals._textFilename, 2 * textPosX, 2 * textPosY + 40, 6, dataP[7], 253);
+				_vm->_fontManager->initTextBuffers(9, mesgId, _vm->_globals->_textFilename, 2 * textPosX, 2 * textPosY + 40, 6, dataP[7], 253);
 				_vm->_fontManager->showText(9);
 				displayedTxtFl = true;
 			}
 			if (!_vm->_soundManager._voiceOffFl)
 				_vm->_soundManager.mixVoice(mesgId, 4, displayedTxtFl);
 		} else { // if (_tempObjectFl)
-			if (_vm->_globals._saveData->_data[svField356]) {
-				_vm->_fontManager->initTextBuffers(9, 635, _vm->_globals._textFilename, 55, 20, dataP[8], 35, 253);
+			if (_vm->_globals->_saveData->_data[svField356]) {
+				_vm->_fontManager->initTextBuffers(9, 635, _vm->_globals->_textFilename, 55, 20, dataP[8], 35, 253);
 				bool displayedTxtFl = false;
 				if (!_vm->_soundManager._textOffFl) {
 					_vm->_fontManager->showText(9);
@@ -155,11 +155,11 @@ int ScriptManager::handleOpcode(byte *dataP) {
 					_vm->_soundManager.mixVoice(635, 4, displayedTxtFl);
 			} else {
 				int textPosX = READ_LE_INT16(dataP + 9);
-				if (_vm->_globals._language == LANG_FR && !_vm->_soundManager._textOffFl)
+				if (_vm->_globals->_language == LANG_FR && !_vm->_soundManager._textOffFl)
 					_vm->_fontManager->initTextBuffers(9, mesgId, "OBJET1.TXT", 2 * textPosX, 60, 6, dataP[7], 253);
-				else if (_vm->_globals._language == LANG_EN && !_vm->_soundManager._textOffFl)
+				else if (_vm->_globals->_language == LANG_EN && !_vm->_soundManager._textOffFl)
 					_vm->_fontManager->initTextBuffers(9, mesgId, "OBJETAN.TXT", 2 * textPosX, 60, 6, dataP[7], 253);
-				else if (_vm->_globals._language == LANG_SP && !_vm->_soundManager._textOffFl) {
+				else if (_vm->_globals->_language == LANG_SP && !_vm->_soundManager._textOffFl) {
 					_vm->_fontManager->initTextBuffers(9, mesgId, "OBJETES.TXT", 2 * textPosX, 60, 6, dataP[7], 253);
 				}
 
@@ -183,13 +183,13 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			int vbobPosX = READ_LE_INT16(dataP + 8);
 			int vbobPosY = READ_LE_INT16(dataP + 10);
 			if (vbobIdx == 52) {
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, vbobPosX, READ_LE_INT16(dataP + 10), vbobFrameIndex);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, vbobPosX, READ_LE_INT16(dataP + 10), vbobFrameIndex);
 			} else if (vbobIdx == 51) {
 				_vm->_objectsManager.BOB_VIVANT(vbobFrameIndex);
 			} else if (vbobIdx != 50) {
-				_vm->_objectsManager.VBOB(_vm->_globals.SPRITE_ECRAN, vbobIdx, vbobPosX, vbobPosY, vbobFrameIndex);
+				_vm->_objectsManager.VBOB(_vm->_globals->SPRITE_ECRAN, vbobIdx, vbobPosX, vbobPosY, vbobFrameIndex);
 				if (v4)
-					v4 /= _vm->_globals._speed;
+					v4 /= _vm->_globals->_speed;
 				if (v4 > 1) {
 					do {
 						if (_vm->shouldQuit())
@@ -210,49 +210,49 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				_vm->_objectsManager._characterPos.y = READ_LE_INT16(dataP + 8);
 				_vm->_objectsManager._startSpriteIndex = dataP[5];
 				if (_vm->_objectsManager._changeHeadFl) {
-					if (_vm->_globals._saveData->_data[svField354] == 1
-							&& _vm->_globals._saveData->_cloneHopkins._pos.x && _vm->_globals._saveData->_cloneHopkins._pos.y
-							&& _vm->_globals._saveData->_cloneHopkins._startSpriteIndex && _vm->_globals._saveData->_cloneHopkins._location) {
+					if (_vm->_globals->_saveData->_data[svField354] == 1
+							&& _vm->_globals->_saveData->_cloneHopkins._pos.x && _vm->_globals->_saveData->_cloneHopkins._pos.y
+							&& _vm->_globals->_saveData->_cloneHopkins._startSpriteIndex && _vm->_globals->_saveData->_cloneHopkins._location) {
 
-						_vm->_objectsManager._characterPos = _vm->_globals._saveData->_cloneHopkins._pos;
-						_vm->_objectsManager._startSpriteIndex = _vm->_globals._saveData->_cloneHopkins._startSpriteIndex;
+						_vm->_objectsManager._characterPos = _vm->_globals->_saveData->_cloneHopkins._pos;
+						_vm->_objectsManager._startSpriteIndex = _vm->_globals->_saveData->_cloneHopkins._startSpriteIndex;
 					}
-					if (_vm->_globals._saveData->_data[svField356] == 1
-							&& _vm->_globals._saveData->_samantha._pos.x && _vm->_globals._saveData->_samantha._pos.y
-							&& _vm->_globals._saveData->_samantha._startSpriteIndex && _vm->_globals._saveData->_samantha._location) {
-						_vm->_objectsManager._characterPos = _vm->_globals._saveData->_samantha._pos;
-						_vm->_objectsManager._startSpriteIndex = _vm->_globals._saveData->_samantha._startSpriteIndex;
+					if (_vm->_globals->_saveData->_data[svField356] == 1
+							&& _vm->_globals->_saveData->_samantha._pos.x && _vm->_globals->_saveData->_samantha._pos.y
+							&& _vm->_globals->_saveData->_samantha._startSpriteIndex && _vm->_globals->_saveData->_samantha._location) {
+						_vm->_objectsManager._characterPos = _vm->_globals->_saveData->_samantha._pos;
+						_vm->_objectsManager._startSpriteIndex = _vm->_globals->_saveData->_samantha._startSpriteIndex;
 					}
-					if (_vm->_globals._saveData->_data[svField357] == 1
-							&& _vm->_globals._saveData->_realHopkins._pos.x && _vm->_globals._saveData->_realHopkins._pos.y
-							&& _vm->_globals._saveData->_realHopkins._startSpriteIndex && _vm->_globals._saveData->_realHopkins._location) {
-						_vm->_objectsManager._characterPos = _vm->_globals._saveData->_realHopkins._pos;
-						_vm->_objectsManager._startSpriteIndex = _vm->_globals._saveData->_realHopkins._startSpriteIndex;
+					if (_vm->_globals->_saveData->_data[svField357] == 1
+							&& _vm->_globals->_saveData->_realHopkins._pos.x && _vm->_globals->_saveData->_realHopkins._pos.y
+							&& _vm->_globals->_saveData->_realHopkins._startSpriteIndex && _vm->_globals->_saveData->_realHopkins._location) {
+						_vm->_objectsManager._characterPos = _vm->_globals->_saveData->_realHopkins._pos;
+						_vm->_objectsManager._startSpriteIndex = _vm->_globals->_saveData->_realHopkins._startSpriteIndex;
 					}
 				}
-				if (_vm->_globals._saveData->_data[svField356] == 1
-						&& _vm->_globals._saveData->_realHopkins._location == _vm->_globals._screenId) {
+				if (_vm->_globals->_saveData->_data[svField356] == 1
+						&& _vm->_globals->_saveData->_realHopkins._location == _vm->_globals->_screenId) {
 					_vm->_objectsManager.addStaticSprite(
 					    _vm->_objectsManager._headSprites,
-					    _vm->_globals._saveData->_realHopkins._pos,
+					    _vm->_globals->_saveData->_realHopkins._pos,
 					    1,
 					    2,
-					    _vm->_globals._saveData->_realHopkins._zoomFactor,
+					    _vm->_globals->_saveData->_realHopkins._zoomFactor,
 					    false,
 					    34,
 					    190);
 					_vm->_objectsManager.animateSprite(1);
 					_vm->_objectsManager._twoCharactersFl = true;
 				}
-				if (_vm->_globals._saveData->_data[svField357] == 1
-				        && _vm->_globals._saveData->_data[svField355] == 1
-				        && _vm->_globals._saveData->_samantha._location == _vm->_globals._screenId) {
+				if (_vm->_globals->_saveData->_data[svField357] == 1
+				        && _vm->_globals->_saveData->_data[svField355] == 1
+				        && _vm->_globals->_saveData->_samantha._location == _vm->_globals->_screenId) {
 					_vm->_objectsManager.addStaticSprite(
 					    _vm->_objectsManager._headSprites,
-					    _vm->_globals._saveData->_samantha._pos,
+					    _vm->_globals->_saveData->_samantha._pos,
 					    1,
 					    3,
-					    _vm->_globals._saveData->_samantha._zoomFactor,
+					    _vm->_globals->_saveData->_samantha._zoomFactor,
 					    false,
 					    20,
 					    127);
@@ -265,9 +265,9 @@ int ScriptManager::handleOpcode(byte *dataP) {
 		break;
 	case MKTAG24('S', 'T', 'E'):
 		if (!_vm->_objectsManager._disableFl) {
-			_vm->_globals._prevScreenId = _vm->_globals._screenId;
-			_vm->_globals._saveData->_data[svLastPrevScreenId] = _vm->_globals._screenId;
-			_vm->_globals._screenId = _vm->_globals._saveData->_data[svLastScreenId] = dataP[5];
+			_vm->_globals->_prevScreenId = _vm->_globals->_screenId;
+			_vm->_globals->_saveData->_data[svLastPrevScreenId] = _vm->_globals->_screenId;
+			_vm->_globals->_screenId = _vm->_globals->_saveData->_data[svLastScreenId] = dataP[5];
 			vbobFrameIndex = dataP[6];
 		}
 		opcodeType = 1;
@@ -279,178 +279,178 @@ int ScriptManager::handleOpcode(byte *dataP) {
 		break;
 	case MKTAG24('P', 'E', 'R'): {
 		int specialOpcode = READ_LE_INT16(dataP + 5);
-		if (!_vm->_globals._saveData->_data[svAlternateSpriteFl] && !_vm->_globals._saveData->_data[svField356]) {
+		if (!_vm->_globals->_saveData->_data[svAlternateSpriteFl] && !_vm->_globals->_saveData->_data[svField356]) {
 			vbobFrameIndex = 0;
 
 			switch (specialOpcode) {
 			case 1:
 			case 14:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(4);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(4);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(4);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(4);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(4);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(4);
 				break;
 			case 2:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(7);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(7);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(7);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(7);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(7);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(7);
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(8);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(8);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(8);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(8);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(8);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(8);
 				break;
 			case 19:
 			case 4:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(1);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(1);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(1);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(1);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(1);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(1);
 				break;
 			case 5:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(5);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(5);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(5);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(5);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(5);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(5);
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(6);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(6);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(6);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(6);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(6);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(6);
 				break;
 			case 17:
 			case 7:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(2);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(2);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(2);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(2);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(2);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(2);
 				break;
 			case 18:
 			case 8:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(3);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(3);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(3);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(3);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(3);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(3);
 				break;
 			case 9:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(5);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(5);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(5);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(5);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(5);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(5);
 				break;
 			case 10:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(6);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(6);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(6);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(6);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(6);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(6);
 				break;
 			case 15:
 			case 11:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(7);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(7);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(7);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(7);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(7);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(7);
 				break;
 			case 16:
 			case 12:
-				if (_vm->_globals._actionDirection == DIR_UP)
+				if (_vm->_globals->_actionDirection == DIR_UP)
 					_vm->_objectsManager.doActionBack(8);
-				if (_vm->_globals._actionDirection == DIR_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_RIGHT)
 					_vm->_objectsManager.doActionRight(8);
-				if (_vm->_globals._actionDirection == DIR_UP_RIGHT)
+				if (_vm->_globals->_actionDirection == DIR_UP_RIGHT)
 					_vm->_objectsManager.doActionDiagRight(8);
-				if (_vm->_globals._actionDirection == DIR_DOWN)
+				if (_vm->_globals->_actionDirection == DIR_DOWN)
 					_vm->_objectsManager.doActionFront(8);
-				if (_vm->_globals._actionDirection == DIR_UP_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_UP_LEFT)
 					_vm->_objectsManager.doActionDiagLeft(8);
-				if (_vm->_globals._actionDirection == DIR_LEFT)
+				if (_vm->_globals->_actionDirection == DIR_LEFT)
 					_vm->_objectsManager.doActionLeft(8);
 				break;
 			}
@@ -462,7 +462,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 		opcodeType = 1;
 		break;
 	case MKTAG24('W', 'A', 'I'): {
-		uint frameNumb = READ_LE_UINT16(dataP + 5) / _vm->_globals._speed;
+		uint frameNumb = READ_LE_UINT16(dataP + 5) / _vm->_globals->_speed;
 		if (!frameNumb)
 			frameNumb = 1;
 		for (uint i = 0; i < frameNumb + 1; i++) {
@@ -497,11 +497,11 @@ int ScriptManager::handleOpcode(byte *dataP) {
 		opcodeType = 5;
 		break;
 	case MKTAG24('S', 'O', 'R'):
-		_vm->_globals._exitId = READ_LE_INT16(dataP + 5);
+		_vm->_globals->_exitId = READ_LE_INT16(dataP + 5);
 		opcodeType = 5;
 		break;
 	case MKTAG24('B', 'C', 'A'):
-		_vm->_globals.B_CACHE_OFF(READ_LE_INT16(dataP + 5));
+		_vm->_globals->B_CACHE_OFF(READ_LE_INT16(dataP + 5));
 		opcodeType = 1;
 		break;
 	case MKTAG24('A', 'N', 'I'): {
@@ -545,9 +545,9 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 		case 13:
 			_vm->_eventsManager->_mouseButton = _vm->_eventsManager->_curMouseButton;
-			_vm->_globals._disableInventFl = true;
+			_vm->_globals->_disableInventFl = true;
 			_vm->_graphicsManager.fadeOutLong();
-			_vm->_globals.disableHiding();
+			_vm->_globals->disableHiding();
 			_vm->_objectsManager.removeSprite(0);
 			_vm->_fontManager->hideText(5);
 			_vm->_fontManager->hideText(9);
@@ -585,7 +585,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_graphicsManager.endDisplayBob();
 
 			// If uncensored, rip the throat of the hostage
-			if (!_vm->_globals._censorshipFl) {
+			if (!_vm->_globals->_censorshipFl) {
 				_vm->_soundManager._specialSoundNum = 16;
 				_vm->_graphicsManager.FADE_LINUX = 2;
 				_vm->_animationManager->playAnim("EGORGE.ANM", 50, 28, 500);
@@ -620,7 +620,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			if ((_vm->getPlatform() == Common::kPlatformWindows) && _vm->getIsDemo())
 				_vm->_graphicsManager.fadeOutLong();
 
-			_vm->_globals._disableInventFl = false;
+			_vm->_globals->_disableInventFl = false;
 			_vm->_objectsManager._helicopterFl = true;
 			break;
 
@@ -661,16 +661,16 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 27:
-			if (_vm->_globals._saveData->_data[svField94] != 1 || _vm->_globals._saveData->_data[svField95] != 1)
+			if (_vm->_globals->_saveData->_data[svField94] != 1 || _vm->_globals->_saveData->_data[svField95] != 1)
 				_vm->_talkManager.startAnimatedCharacterDialogue("STANDAR.pe2");
 			else
 				_vm->_talkManager.startAnimatedCharacterDialogue("STANDAR1.pe2");
 			break;
 
 		case 29:
-			_vm->_globals._disableInventFl = true;
+			_vm->_globals->_disableInventFl = true;
 			_vm->_talkManager.animateObject("TELEP.pe2");
-			_vm->_globals._disableInventFl = false;
+			_vm->_globals->_disableInventFl = false;
 			break;
 
 		case 32:
@@ -690,19 +690,19 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 36:
-			if (_vm->_globals._saveData->_data[svField270] == 2 && _vm->_globals._saveData->_data[svField94] == 1 && _vm->_globals._saveData->_data[svField95] == 1)
-				_vm->_globals._saveData->_data[svField270] = 3;
-			if (!_vm->_globals._saveData->_data[svField270])
+			if (_vm->_globals->_saveData->_data[svField270] == 2 && _vm->_globals->_saveData->_data[svField94] == 1 && _vm->_globals->_saveData->_data[svField95] == 1)
+				_vm->_globals->_saveData->_data[svField270] = 3;
+			if (!_vm->_globals->_saveData->_data[svField270])
 				_vm->_talkManager.startStaticCharacterDialogue("PATRON0.pe2");
-			if (_vm->_globals._saveData->_data[svField270] == 1)
+			if (_vm->_globals->_saveData->_data[svField270] == 1)
 				_vm->_talkManager.startStaticCharacterDialogue("PATRON1.pe2");
-			if (_vm->_globals._saveData->_data[svField270] == 2)
+			if (_vm->_globals->_saveData->_data[svField270] == 2)
 				_vm->_talkManager.startStaticCharacterDialogue("PATRON2.pe2");
-			if (_vm->_globals._saveData->_data[svField270] == 3)
+			if (_vm->_globals->_saveData->_data[svField270] == 3)
 				_vm->_talkManager.startStaticCharacterDialogue("PATRON3.pe2");
-			if (_vm->_globals._saveData->_data[svField270] > 3) {
+			if (_vm->_globals->_saveData->_data[svField270] > 3) {
 				_vm->_talkManager.startStaticCharacterDialogue("PATRON4.pe2");
-				_vm->_globals._saveData->_data[svField270] = 5;
+				_vm->_globals->_saveData->_data[svField270] = 5;
 			}
 			break;
 
@@ -752,7 +752,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 46: {
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 564, 420);
 			_vm->_objectsManager._zoneNum = -1;
@@ -764,7 +764,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				_vm->_eventsManager->refreshScreenAndEvents();
 			} while (_vm->_linesManager._route != (RouteItem *)g_PTRNUL);
 			_vm->_objectsManager.removeSprite(0);
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_soundManager.loadSample(1, "SOUND44.WAV");
 			_vm->_soundManager.loadSample(2, "SOUND45.WAV");
 			_vm->_objectsManager.OPTI_BOBON(9, 10, -1, 0, 0, 0);
@@ -802,14 +802,14 @@ int ScriptManager::handleOpcode(byte *dataP) {
 					playFl = false;
 					break;
 				case 12:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 249, 1);
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 249, 1);
 					break;
 				case 23:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 249, 2);
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 249, 2);
 					playFl = false;
 					break;
 				case 34:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 249, 3);
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 249, 3);
 					playFl = false;
 					break;
 				}
@@ -834,12 +834,12 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 49: {
-			_vm->_globals.disableHiding();
+			_vm->_globals->disableHiding();
 			_vm->_objectsManager.removeSprite(0);
 			_vm->_objectsManager.OPTI_BOBON(9, 10, -1, 0, 0, 0);
 
 			int endIdx;
-			if (_vm->_globals._saveData->_data[svField133] == 1)
+			if (_vm->_globals->_saveData->_data[svField133] == 1)
 				endIdx = 41;
 			else
 				endIdx = 12;
@@ -882,7 +882,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				_vm->_objectsManager.animateSprite(0);
 				_vm->_objectsManager.stopBobAnimation(9);
 			}
-			_vm->_globals.enableHiding();
+			_vm->_globals->enableHiding();
 			break;
 			}
 
@@ -893,7 +893,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 		case 51: {
 			_vm->_graphicsManager.fadeOutLong();
-			_vm->_globals.disableHiding();
+			_vm->_globals->disableHiding();
 			_vm->_objectsManager.removeSprite(0);
 			_vm->_fontManager->hideText(5);
 			_vm->_fontManager->hideText(9);
@@ -920,14 +920,14 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_objectsManager.stopBobAnimation(2);
 			_vm->_graphicsManager.fadeOutLong();
 			_vm->_graphicsManager._noFadingFl = true;
-			_vm->_globals._exitId = 20;
+			_vm->_globals->_exitId = 20;
 			break;
 			}
 
 		case 52:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("GARDE.PE2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 53:
@@ -948,41 +948,41 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 56:
-			_vm->_globals.PERSO = _vm->_fileManager->loadFile("HOPFEM.SPR");
-			_vm->_globals._characterType = 1;
-			_vm->_globals._saveData->_data[svAlternateSpriteFl] = 1;
-			_vm->_globals.loadCharacterData();
+			_vm->_globals->PERSO = _vm->_fileManager->loadFile("HOPFEM.SPR");
+			_vm->_globals->_characterType = 1;
+			_vm->_globals->_saveData->_data[svAlternateSpriteFl] = 1;
+			_vm->_globals->loadCharacterData();
 			_vm->_objectsManager._sprite[0]._deltaX = 28;
 			_vm->_objectsManager._sprite[0]._deltaY = 155;
 			_vm->_objectsManager.computeAndSetSpriteSize();
 			break;
 
 		case 57:
-			_vm->_globals.PERSO = _vm->_fileManager->loadFile("PERSO.SPR");
-			_vm->_globals._characterType = 0;
-			_vm->_globals._saveData->_data[svAlternateSpriteFl] = 0;
-			_vm->_globals.loadCharacterData();
+			_vm->_globals->PERSO = _vm->_fileManager->loadFile("PERSO.SPR");
+			_vm->_globals->_characterType = 0;
+			_vm->_globals->_saveData->_data[svAlternateSpriteFl] = 0;
+			_vm->_globals->loadCharacterData();
 			_vm->_objectsManager._sprite[0]._deltaX = 34;
 			_vm->_objectsManager._sprite[0]._deltaY = 190;
 			_vm->_objectsManager.computeAndSetSpriteSize();
 			break;
 
 		case 58:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("Gm1.PE2");
-			_vm->_globals._saveData->_data[svField176] = 1;
-			_vm->_globals._saveData->_data[svField270] = 2;
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_saveData->_data[svField176] = 1;
+			_vm->_globals->_saveData->_data[svField270] = 2;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 59: {
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._oldCharacterPosX = _vm->_objectsManager.getSpriteX(0);
-			_vm->_globals._oldDirection = DIR_NONE;
-			_vm->_globals.Compteur = 0;
+			_vm->_globals->_oldDirection = DIR_NONE;
+			_vm->_globals->Compteur = 0;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 445, 332);
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			do {
 				if (_vm->shouldQuit())
 					return -1; // Exiting game
@@ -1094,13 +1094,13 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			}
 
 		case 81: {
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._oldCharacterPosX = _vm->_objectsManager.getSpriteX(0);
-			_vm->_globals._oldDirection = DIR_NONE;
-			_vm->_globals.Compteur = 0;
+			_vm->_globals->_oldDirection = DIR_NONE;
+			_vm->_globals->Compteur = 0;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 119, 268);
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			do {
 				if (_vm->shouldQuit())
 					return -1; // Exiting game
@@ -1149,7 +1149,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				if (_vm->_objectsManager.getBobAnimDataIdx(8) == 32)
 					break;
 			}
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 201, 14, 1);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 201, 14, 1);
 			_vm->_objectsManager.animateSprite(0);
 			_vm->_objectsManager.stopBobAnimation(11);
 			_vm->_objectsManager.stopBobAnimation(8);
@@ -1176,9 +1176,9 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 84:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("CVIGIL1.PE2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 85:
@@ -1199,24 +1199,24 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 86:
-			if (_vm->_globals._saveData->_data[svField231] == 1) {
+			if (_vm->_globals->_saveData->_data[svField231] == 1) {
 				_vm->_talkManager.startAnimatedCharacterDialogue("chotess1.pe2");
 			} else {
-				_vm->_globals._introSpeechOffFl = true;
+				_vm->_globals->_introSpeechOffFl = true;
 				_vm->_talkManager.startAnimatedCharacterDialogue("chotesse.pe2");
-				_vm->_globals._introSpeechOffFl = false;
+				_vm->_globals->_introSpeechOffFl = false;
 			}
 			break;
 
 		case 87:
-			if (_vm->_globals._saveData->_data[svField188])
+			if (_vm->_globals->_saveData->_data[svField188])
 				_vm->_talkManager.startAnimatedCharacterDialogue("stand2.pe2");
 			else
 				_vm->_talkManager.startAnimatedCharacterDialogue("stand1.pe2");
 			break;
 
 		case 88:
-			if (_vm->_globals._saveData->_data[svField183] == 1) {
+			if (_vm->_globals->_saveData->_data[svField183] == 1) {
 				_vm->_objectsManager.setBobAnimDataIdx(1, 0);
 				_vm->_objectsManager.setBobAnimDataIdx(2, 0);
 				_vm->_objectsManager.setBobAnimation(1);
@@ -1250,10 +1250,10 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				}
 				_vm->_objectsManager.stopBobAnimation(1);
 				_vm->_objectsManager.stopBobAnimation(2);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 283, 160, 6);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 283, 160, 6);
 				_vm->_soundManager.removeSample(1);
 			}
-			if (_vm->_globals._saveData->_data[svField183] == 2) {
+			if (_vm->_globals->_saveData->_data[svField183] == 2) {
 				_vm->_objectsManager.setBobAnimDataIdx(1, 0);
 				_vm->_objectsManager.setBobAnimDataIdx(3, 0);
 				_vm->_objectsManager.setBobAnimation(1);
@@ -1287,67 +1287,67 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				}
 				_vm->_objectsManager.stopBobAnimation(1);
 				_vm->_objectsManager.stopBobAnimation(3);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 283, 161, 8);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 283, 161, 8);
 				_vm->_soundManager.removeSample(1);
 			}
 			break;
 
 		case 90:
 			_vm->_soundManager.playSoundFile("SOUND52.WAV");
-			if (!_vm->_globals._saveData->_data[svField186]) {
+			if (!_vm->_globals->_saveData->_data[svField186]) {
 				_vm->_animationManager->playSequence("CIB5A.SEQ", 1, 12, 1);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 155, 29, 0);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 155, 29, 0);
 			}
-			if (_vm->_globals._saveData->_data[svField186] == 1) {
+			if (_vm->_globals->_saveData->_data[svField186] == 1) {
 				_vm->_animationManager->playSequence("CIB5C.SEQ", 1, 12, 1);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 155, 29, 0);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 329, 87, 2);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 155, 29, 0);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 329, 87, 2);
 			}
 			break;
 
 		case 91:
 			_vm->_soundManager.playSoundFile("SOUND52.WAV");
-			if (!_vm->_globals._saveData->_data[svField186]) {
+			if (!_vm->_globals->_saveData->_data[svField186]) {
 				_vm->_animationManager->playSequence("CIB5B.SEQ", 1, 12, 1);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 155, 29, 5);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 155, 29, 5);
 			}
-			if (_vm->_globals._saveData->_data[svField186] == 1) {
+			if (_vm->_globals->_saveData->_data[svField186] == 1) {
 				_vm->_animationManager->playSequence("CIB5D.SEQ", 1, 12, 1);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 155, 29, 5);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 283, 160, 6);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 155, 29, 5);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 283, 160, 6);
 			}
 			break;
 
 		case 92:
 			_vm->_soundManager.playSoundFile("SOUND52.WAV");
-			if (!_vm->_globals._saveData->_data[svField184]) {
+			if (!_vm->_globals->_saveData->_data[svField184]) {
 				_vm->_animationManager->playSequence("CIB6A.SEQ", 1, 12, 1);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 155, 29, 0);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 155, 29, 0);
 			}
-			if (_vm->_globals._saveData->_data[svField184] == 1) {
+			if (_vm->_globals->_saveData->_data[svField184] == 1) {
 				_vm->_animationManager->playSequence("CIB6C.SEQ", 1, 12, 1);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 155, 29, 0);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 293, 139, 3);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 155, 29, 0);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 293, 139, 3);
 			}
 			break;
 
 		case 93:
 			_vm->_soundManager.playSoundFile("SOUND52.WAV");
-			if (!_vm->_globals._saveData->_data[svField184]) {
+			if (!_vm->_globals->_saveData->_data[svField184]) {
 				_vm->_animationManager->playSequence("CIB6B.SEQ", 1, 12, 1);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 155, 29, 5);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 155, 29, 5);
 			}
-			if (_vm->_globals._saveData->_data[svField184] == 1) {
+			if (_vm->_globals->_saveData->_data[svField184] == 1) {
 				_vm->_animationManager->playSequence("CIB6D.SEQ", 1, 12, 1);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 155, 29, 5);
-				_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 283, 161, 8);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 155, 29, 5);
+				_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 283, 161, 8);
 			}
 			break;
 
 		case 94:
-			if (!_vm->_globals._saveData->_data[svField228])
+			if (!_vm->_globals->_saveData->_data[svField228])
 				_vm->_talkManager.startAnimatedCharacterDialogue("flicn.pe2");
-			if (_vm->_globals._saveData->_data[svField228] == 1)
+			if (_vm->_globals->_saveData->_data[svField228] == 1)
 				_vm->_talkManager.startAnimatedCharacterDialogue("flicn1.pe2");
 			break;
 
@@ -1374,16 +1374,16 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 				_vm->_eventsManager->refreshScreenAndEvents();
 			} while (_vm->_objectsManager.getBobAnimDataIdx(12) != 117);
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 830, 122, 0);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 830, 122, 0);
 			_vm->_objectsManager.stopBobAnimation(12);
 			_vm->_objectsManager.stopBobAnimation(10);
 			_vm->_objectsManager.setBobAnimation(11);
 			break;
 
 		case 98:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("CVIGIL2.PE2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 100:
@@ -1396,40 +1396,40 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 		case 103:
 			// Dice game
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("tourist1.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			_vm->_animationManager->playAnim2("T421.ANM", 100, 14, 500);
 			_vm->_eventsManager->refreshScreenAndEvents();
 			_vm->_eventsManager->refreshScreenAndEvents();
 			_vm->_eventsManager->refreshScreenAndEvents();
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("tourist2.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 104:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("tourist3.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 105:
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._oldCharacterPosX = _vm->_objectsManager.getSpriteX(0);
-			_vm->_globals._oldDirection = DIR_NONE;
-			_vm->_globals.Compteur = 0;
+			_vm->_globals->_oldDirection = DIR_NONE;
+			_vm->_globals->Compteur = 0;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
-			if (_vm->_globals._saveData->_data[svField253] == 1) {
+			if (_vm->_globals->_saveData->_data[svField253] == 1) {
 				_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 201, 294);
 			}
-			if (_vm->_globals._saveData->_data[svField253] == 2) {
+			if (_vm->_globals->_saveData->_data[svField253] == 2) {
 				_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 158, 338);
 			}
-			if (_vm->_globals._saveData->_data[svField253] > 2) {
+			if (_vm->_globals->_saveData->_data[svField253] > 2) {
 				_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 211, 393);
 			}
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			do {
 				if (_vm->shouldQuit())
 					return -1; // Exiting game
@@ -1440,7 +1440,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_objectsManager.removeSprite(0);
 			_vm->_objectsManager.setSpriteIndex(0, 60);
 			_vm->_soundManager.loadSample(1, "SOUND63.WAV");
-			if (_vm->_globals._saveData->_data[svField253] > 2) {
+			if (_vm->_globals->_saveData->_data[svField253] > 2) {
 				_vm->_objectsManager.setBobAnimation(4);
 				bool playFl = false;
 				for (;;) {
@@ -1468,7 +1468,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				}
 				_vm->_objectsManager.stopBobAnimation(4);
 			}
-			if (_vm->_globals._saveData->_data[svField253] == 1) {
+			if (_vm->_globals->_saveData->_data[svField253] == 1) {
 				_vm->_objectsManager.setBobAnimation(6);
 				bool playFl = false;
 				for (;;) {
@@ -1496,7 +1496,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				}
 				_vm->_objectsManager.stopBobAnimation(6);
 			}
-			if (_vm->_globals._saveData->_data[svField253] == 2) {
+			if (_vm->_globals->_saveData->_data[svField253] == 2) {
 				_vm->_objectsManager.setBobAnimation(5);
 				bool playFl = false;
 				for (;;) {
@@ -1606,33 +1606,33 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 108:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("peche1.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 109:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("peche2.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 110:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("peche3.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 111:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("peche4.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 112:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("teint1.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 113:
@@ -1656,17 +1656,17 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 171: {
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("gred1.pe2");
-			_vm->_globals._introSpeechOffFl = false;
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_introSpeechOffFl = false;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._oldCharacterPosX = _vm->_objectsManager.getSpriteX(0);
-			_vm->_globals._oldDirection = DIR_NONE;
-			_vm->_globals.Compteur = 0;
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_oldDirection = DIR_NONE;
+			_vm->_globals->Compteur = 0;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 361, 325);
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._zoneNum = -1;
 			do {
 				if (_vm->shouldQuit())
@@ -1675,7 +1675,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				_vm->_objectsManager.GOHOME();
 				_vm->_eventsManager->refreshScreenAndEvents();
 			} while (_vm->_linesManager._route != (RouteItem *)g_PTRNUL);
-			_vm->_globals._exitId = 59;
+			_vm->_globals->_exitId = 59;
 			break;
 			}
 
@@ -1684,17 +1684,17 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 173: {
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("gbleu1.pe2");
-			_vm->_globals._introSpeechOffFl = false;
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_introSpeechOffFl = false;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._oldCharacterPosX = _vm->_objectsManager.getSpriteX(0);
-			_vm->_globals._oldDirection = DIR_NONE;
-			_vm->_globals.Compteur = 0;
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_oldDirection = DIR_NONE;
+			_vm->_globals->Compteur = 0;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 361, 325);
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._zoneNum = -1;
 			do {
 				if (_vm->shouldQuit())
@@ -1703,7 +1703,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				_vm->_objectsManager.GOHOME();
 				_vm->_eventsManager->refreshScreenAndEvents();
 			} while (_vm->_linesManager._route != (RouteItem *)g_PTRNUL);
-			_vm->_globals._exitId = 59;
+			_vm->_globals->_exitId = 59;
 			break;
 			}
 
@@ -1759,21 +1759,21 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 176:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("gred2.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 177:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("gbleu2.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 200:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("Gm2.PE2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 201:
@@ -1789,9 +1789,9 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 202:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("SVGARD2.PE2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 203:
@@ -1803,7 +1803,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 				_vm->_eventsManager->refreshScreenAndEvents();
 				if (_vm->_objectsManager.getBobAnimDataIdx(4) == 18)
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 18, 334, 0, false);
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 18, 334, 0, false);
 			} while (_vm->_objectsManager.getBobAnimDataIdx(4) != 26);
 			_vm->_objectsManager.stopBobAnimation(4);
 			_vm->_objectsManager.animateSprite(0);
@@ -1872,16 +1872,16 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 208: {
-			_vm->_globals._disableInventFl = true;
-			if (_vm->_globals._saveData->_data[svLastPrevScreenId] != _vm->_globals._saveData->_data[svField401]) {
+			_vm->_globals->_disableInventFl = true;
+			if (_vm->_globals->_saveData->_data[svLastPrevScreenId] != _vm->_globals->_saveData->_data[svField401]) {
 				_vm->_soundManager._specialSoundNum = 208;
 				_vm->_animationManager->playSequence("SORT.SEQ", 10, 4, 10, true);
 				_vm->_soundManager._specialSoundNum = 0;
 			}
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 330, 418);
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._zoneNum = 0;
 			do {
 				if (_vm->shouldQuit())
@@ -1891,8 +1891,8 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				_vm->_eventsManager->refreshScreenAndEvents();
 			} while (_vm->_linesManager._route != (RouteItem *)g_PTRNUL);
 			_vm->_objectsManager.setSpriteIndex(0, 64);
-			_vm->_globals._exitId = _vm->_globals._saveData->_data[svField401];
-			_vm->_globals._disableInventFl = false;
+			_vm->_globals->_exitId = _vm->_globals->_saveData->_data[svField401];
+			_vm->_globals->_disableInventFl = false;
 			break;
 			}
 
@@ -1910,10 +1910,10 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			} while (_vm->_objectsManager.getBobAnimDataIdx(1) != 9);
 			_vm->_objectsManager.stopBobAnimation(1);
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 330, 314);
 			_vm->_objectsManager._zoneNum = 0;
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			do {
 				if (_vm->shouldQuit())
 					return -1; // Exiting game
@@ -1940,15 +1940,15 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_soundManager._specialSoundNum = 210;
 			_vm->_animationManager->playSequence2("SECRET1.SEQ", 1, 12, 1);
 			_vm->_soundManager._specialSoundNum = 0;
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 192, 152, 0);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 192, 152, 0);
 			_vm->_objectsManager.setBobAnimation(9);
 			_vm->_objectsManager.OBSSEUL = true;
 			_vm->_objectsManager.loadLinkFile("IM73a");
 			_vm->_objectsManager.OBSSEUL = false;
-			_vm->_globals.enableHiding();
+			_vm->_globals->enableHiding();
 			_vm->_animationManager->NO_SEQ = false;
-			_vm->_globals.setHidingUseCount(0);
-			_vm->_globals.setHidingUseCount(1);
+			_vm->_globals->setHidingUseCount(0);
+			_vm->_globals->setHidingUseCount(1);
 			_vm->_graphicsManager.SETCOLOR4(252, 100, 100, 100);
 			_vm->_graphicsManager.SETCOLOR4(253, 100, 100, 100);
 			_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
@@ -1957,7 +1957,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 		case 211:
 			_vm->_objectsManager.removeSprite(0);
-			_vm->_globals.disableHiding();
+			_vm->_globals->disableHiding();
 			_vm->_animationManager->NO_SEQ = true;
 			_vm->_soundManager._specialSoundNum = 211;
 			_vm->_animationManager->playSequence("SECRET2.SEQ", 1, 12, 100);
@@ -1980,37 +1980,37 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 215:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("aviat.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 216:
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("aviat1.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			break;
 
 		case 229:
 			_vm->_soundManager._specialSoundNum = 229;
 			_vm->_animationManager->playSequence("MUR.SEQ", 1, 12, 1);
 			_vm->_soundManager._specialSoundNum = 0;
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 340, 157, 2);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 340, 157, 2);
 			break;
 
 		case 230: {
 			_vm->_objectsManager.OBSSEUL = true;
 			_vm->_objectsManager.loadLinkFile("IM93a");
 			_vm->_objectsManager.OBSSEUL = false;
-			_vm->_globals.enableHiding();
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->enableHiding();
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_objectsManager._oldCharacterPosX = _vm->_objectsManager.getSpriteX(0);
-			_vm->_globals._oldDirection = DIR_NONE;
-			_vm->_globals.Compteur = 0;
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_oldDirection = DIR_NONE;
+			_vm->_globals->Compteur = 0;
+			_vm->_globals->_checkDistanceFl = true;
 			_vm->_linesManager._route = (RouteItem *)g_PTRNUL;
 			_vm->_linesManager._route = _vm->_linesManager.PARCOURS2(_vm->_objectsManager.getSpriteX(0), _vm->_objectsManager.getSpriteY(0), 488, 280);
-			_vm->_globals._checkDistanceFl = true;
+			_vm->_globals->_checkDistanceFl = true;
 			do {
 				if (_vm->shouldQuit())
 					return -1; // Exiting game
@@ -2035,16 +2035,16 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_objectsManager.setSpriteX(0, 476);
 			_vm->_objectsManager.setSpriteY(0, 278);
 			_vm->_objectsManager.animateSprite(0);
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 337, 154, 3);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 337, 154, 3);
 			_vm->_objectsManager.OBSSEUL = true;
 			_vm->_objectsManager.loadLinkFile("IM93c");
 			_vm->_objectsManager.OBSSEUL = false;
-			_vm->_globals.enableHiding();
+			_vm->_globals->enableHiding();
 			break;
 			}
 
 		case 231:
-			_vm->_globals.disableHiding();
+			_vm->_globals->disableHiding();
 			_vm->_objectsManager.removeSprite(0);
 			_vm->_objectsManager.setBobAnimation(12);
 			do {
@@ -2053,9 +2053,9 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 				_vm->_eventsManager->refreshScreenAndEvents();
 			} while (_vm->_objectsManager.getBobAnimDataIdx(12) != 6);
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("PRMORT.pe2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			do {
 				if (_vm->shouldQuit())
 					return -1; // Exiting game
@@ -2064,11 +2064,11 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			} while (_vm->_objectsManager.getBobAnimDataIdx(12) != 12);
 			_vm->_objectsManager.animateSprite(0);
 			_vm->_objectsManager.stopBobAnimation(12);
-			_vm->_globals.enableHiding();
+			_vm->_globals->enableHiding();
 			break;
 
 		case 233: {
-			_vm->_globals.disableHiding();
+			_vm->_globals->disableHiding();
 			_vm->_objectsManager.removeSprite(0);
 			_vm->_objectsManager.setBobAnimation(11);
 			bool playFl = false;
@@ -2081,7 +2081,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 					playFl = true;
 			} while (_vm->_objectsManager.getBobAnimDataIdx(11) != 13);
 			_vm->_objectsManager.stopBobAnimation(11);
-			_vm->_globals.enableHiding();
+			_vm->_globals->enableHiding();
 			_vm->_objectsManager.setBobAnimation(13);
 			do {
 				if (_vm->shouldQuit())
@@ -2089,18 +2089,18 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 				_vm->_eventsManager->refreshScreenAndEvents();
 			} while (_vm->_objectsManager.getBobAnimDataIdx(13) != 48);
-			_vm->_globals._introSpeechOffFl = true;
+			_vm->_globals->_introSpeechOffFl = true;
 			_vm->_talkManager.startAnimatedCharacterDialogue("HRADIO.PE2");
-			_vm->_globals._introSpeechOffFl = false;
+			_vm->_globals->_introSpeechOffFl = false;
 			_vm->_graphicsManager.fadeOutLong();
 			_vm->_objectsManager.stopBobAnimation(13);
 			_vm->_graphicsManager._noFadingFl = true;
-			_vm->_globals._exitId = 94;
+			_vm->_globals->_exitId = 94;
 			break;
 			}
 
 		case 236: {
-			char v47 = _vm->_globals._saveData->_data[svField341];
+			char v47 = _vm->_globals->_saveData->_data[svField341];
 			if (v47) {
 				if (v47 == 2)
 					vbobFrameIndex = 5;
@@ -2110,27 +2110,27 @@ int ScriptManager::handleOpcode(byte *dataP) {
 					vbobFrameIndex = 6;
 				_vm->_soundManager.playSoundFile("SOUND83.WAV");
 				_vm->_objectsManager.OPTI_ONE(vbobFrameIndex, 26, 50, 0);
-				if (_vm->_globals._saveData->_data[svField341] == 1)
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 27, 117, 0);
-				if (_vm->_globals._saveData->_data[svField341] == 2)
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 145, 166, 2);
-				if (_vm->_globals._saveData->_data[svField341] == 3)
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 296, 212, 4);
-				if (_vm->_globals._saveData->_data[svField341] == 1)
-					_vm->_globals._saveData->_data[svField338] = 0;
-				if (_vm->_globals._saveData->_data[svField341] == 2)
-					_vm->_globals._saveData->_data[svField339] = 0;
-				if (_vm->_globals._saveData->_data[svField341] == 3)
-					_vm->_globals._saveData->_data[svField340] = 0;
+				if (_vm->_globals->_saveData->_data[svField341] == 1)
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 27, 117, 0);
+				if (_vm->_globals->_saveData->_data[svField341] == 2)
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 145, 166, 2);
+				if (_vm->_globals->_saveData->_data[svField341] == 3)
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 296, 212, 4);
+				if (_vm->_globals->_saveData->_data[svField341] == 1)
+					_vm->_globals->_saveData->_data[svField338] = 0;
+				if (_vm->_globals->_saveData->_data[svField341] == 2)
+					_vm->_globals->_saveData->_data[svField339] = 0;
+				if (_vm->_globals->_saveData->_data[svField341] == 3)
+					_vm->_globals->_saveData->_data[svField340] = 0;
 			}
 			_vm->_soundManager.playSoundFile("SOUND83.WAV");
 			_vm->_objectsManager.OPTI_ONE(6, 0, 23, 0);
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 27, 117, 1);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 27, 117, 1);
 			break;
 			}
 
 		case 237: {
-			switch (_vm->_globals._saveData->_data[svField341]) {
+			switch (_vm->_globals->_saveData->_data[svField341]) {
 			case 1:
 				vbobFrameIndex = 6;
 				break;
@@ -2142,34 +2142,34 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				break;
 			}
 
-			if (_vm->_globals._saveData->_data[svField341]) {
+			if (_vm->_globals->_saveData->_data[svField341]) {
 				_vm->_soundManager.playSoundFile("SOUND83.WAV");
 				_vm->_objectsManager.OPTI_ONE(vbobFrameIndex, 26, 50, 0);
 				
-				switch (_vm->_globals._saveData->_data[svField341]) {
+				switch (_vm->_globals->_saveData->_data[svField341]) {
 				case 1:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 27, 117, 0);
-					_vm->_globals._saveData->_data[svField338] = 0;
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 27, 117, 0);
+					_vm->_globals->_saveData->_data[svField338] = 0;
 					break;
 				case 2:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 145, 166, 2);
-					_vm->_globals._saveData->_data[svField339] = 0;
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 145, 166, 2);
+					_vm->_globals->_saveData->_data[svField339] = 0;
 					break;
 				case 3:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 296, 212, 4);
-					_vm->_globals._saveData->_data[svField340] = 0;
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 296, 212, 4);
+					_vm->_globals->_saveData->_data[svField340] = 0;
 					break;
 				}
 			}
 
 			_vm->_soundManager.playSoundFile("SOUND83.WAV");
 			_vm->_objectsManager.OPTI_ONE(5, 0, 23, 0);
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 145, 166, 3);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 145, 166, 3);
 			break;
 			}
 
 		case 238: {
-			switch (_vm->_globals._saveData->_data[svField341]) {
+			switch (_vm->_globals->_saveData->_data[svField341]) {
 			case 1:
 				vbobFrameIndex = 6;
 				break;
@@ -2181,27 +2181,27 @@ int ScriptManager::handleOpcode(byte *dataP) {
 				break;
 			}
 
-			if (_vm->_globals._saveData->_data[svField341]) {
+			if (_vm->_globals->_saveData->_data[svField341]) {
 				_vm->_soundManager.playSoundFile("SOUND83.WAV");
 				_vm->_objectsManager.OPTI_ONE(vbobFrameIndex, 26, 50, 0);
-				switch (_vm->_globals._saveData->_data[svField341]) {
+				switch (_vm->_globals->_saveData->_data[svField341]) {
 				case 1:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 27, 117, 0);
-					_vm->_globals._saveData->_data[svField338] = 0;
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 27, 117, 0);
+					_vm->_globals->_saveData->_data[svField338] = 0;
 					break;
 				case 2:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 145, 166, 2);
-					_vm->_globals._saveData->_data[svField339] = 0;
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 145, 166, 2);
+					_vm->_globals->_saveData->_data[svField339] = 0;
 					break;
 				case 3:
-					_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 296, 212, 4);
-					_vm->_globals._saveData->_data[svField340] = 0;
+					_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 296, 212, 4);
+					_vm->_globals->_saveData->_data[svField340] = 0;
 					break;
 				}
 			}
 			_vm->_soundManager.playSoundFile("SOUND83.WAV");
 			_vm->_objectsManager.OPTI_ONE(4, 0, 23, 0);
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 296, 212, 5);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 296, 212, 5);
 			break;
 			}
 
@@ -2237,7 +2237,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_fontManager->hideText(9);
 			bool displayedTxtFl = false;
 			if (!_vm->_soundManager._textOffFl) {
-				_vm->_fontManager->initTextBuffers(9, 617, _vm->_globals._textFilename, 91, 41, 3, 30, 253);
+				_vm->_fontManager->initTextBuffers(9, 617, _vm->_globals->_textFilename, 91, 41, 3, 30, 253);
 				_vm->_fontManager->showText(9);
 				displayedTxtFl = true;
 			}
@@ -2249,15 +2249,15 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 				_vm->_eventsManager->refreshScreenAndEvents();
 			}
-			CharacterLocation *realHopkins = &_vm->_globals._saveData->_realHopkins;
+			CharacterLocation *realHopkins = &_vm->_globals->_saveData->_realHopkins;
 			realHopkins->_pos.x = _vm->_objectsManager.getSpriteX(0);
 			realHopkins->_pos.y = _vm->_objectsManager.getSpriteY(0);
 			realHopkins->_startSpriteIndex = 57;
 			realHopkins->_location = 97;
-			_vm->_globals._saveData->_data[svHopkinsCloneFl] = 1;
-			_vm->_globals._saveData->_data[svField352] = 1;
-			_vm->_globals._saveData->_data[svField353] = 1;
-			_vm->_globals._saveData->_data[svField354] = 1;
+			_vm->_globals->_saveData->_data[svHopkinsCloneFl] = 1;
+			_vm->_globals->_saveData->_data[svField352] = 1;
+			_vm->_globals->_saveData->_data[svField353] = 1;
+			_vm->_globals->_saveData->_data[svField354] = 1;
 			break;
 			}
 
@@ -2272,19 +2272,19 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_animationManager->playSequence("RESUF.SEQ", 1, 24, 1);
 			_vm->_animationManager->NO_SEQ = false;
 
-			CharacterLocation *samantha = &_vm->_globals._saveData->_samantha;
+			CharacterLocation *samantha = &_vm->_globals->_saveData->_samantha;
 			samantha->_pos.x = 404;
 			samantha->_pos.y = 395;
 			samantha->_startSpriteIndex = 64;
-			samantha->_location = _vm->_globals._screenId;
-			samantha->_zoomFactor = -(100 * (67 - (100 - abs(_vm->_globals._spriteSize[790 / 2]))) / 67);
+			samantha->_location = _vm->_globals->_screenId;
+			samantha->_zoomFactor = -(100 * (67 - (100 - abs(_vm->_globals->_spriteSize[790 / 2]))) / 67);
 
-			_vm->_globals._saveData->_data[svField357] = 1;
-			_vm->_globals._saveData->_data[svField354] = 0;
-			_vm->_globals._saveData->_data[svField356] = 0;
-			_vm->_globals._saveData->_data[svField355] = 1;
+			_vm->_globals->_saveData->_data[svField357] = 1;
+			_vm->_globals->_saveData->_data[svField354] = 0;
+			_vm->_globals->_saveData->_data[svField356] = 0;
+			_vm->_globals->_saveData->_data[svField355] = 1;
 			_vm->_objectsManager._twoCharactersFl = true;
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 373, 191, 3);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 373, 191, 3);
 			_vm->_objectsManager.addStaticSprite(_vm->_objectsManager._headSprites, samantha->_pos, 1, 3, samantha->_zoomFactor, false, 20, 127);
 			_vm->_objectsManager.animateSprite(1);
 			break;
@@ -2292,7 +2292,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 
 		case 243:
 			_vm->_soundManager.playSoundFile("SOUND88.WAV");
-			if (_vm->_globals._saveData->_data[svField341] == 2) {
+			if (_vm->_globals->_saveData->_data[svField341] == 2) {
 				_vm->_animationManager->NO_SEQ = true;
 				_vm->_animationManager->playSequence("RESU.SEQ", 2, 24, 2);
 				_vm->_animationManager->NO_SEQ = false;
@@ -2306,8 +2306,8 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_objectsManager.OPTI_ONE(5, 0, 6, 0);
 			_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;
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 285, 379, 0);
+			_vm->_globals->_saveData->_data[svField399] = 1;
 			break;
 
 		case 246:
@@ -2321,7 +2321,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_graphicsManager._noFadingFl = true;
 			_vm->_graphicsManager.fadeOutLong();
 			_vm->_objectsManager.PERSO_ON = false;
-			_vm->_globals._exitId = 100;
+			_vm->_globals->_exitId = 100;
 			break;
 
 		case 600:
@@ -2340,17 +2340,17 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			break;
 
 		case 601:
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 163, 7, false);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 163, 7, false);
 			_vm->_objectsManager.OPTI_ONE(2, 0, 16, 4);
 			break;
 
 		case 602:
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 163, 7, false);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 163, 7, false);
 			_vm->_objectsManager.OPTI_ONE(4, 0, 16, 4);
 			break;
 
 		case 603:
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 163, 7, false);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 163, 7, false);
 			_vm->_objectsManager.OPTI_ONE(3, 0, 16, 4);
 			_vm->_soundManager._specialSoundNum = 199;
 			_vm->_graphicsManager.FADE_LINUX = 2;
@@ -2358,22 +2358,22 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_soundManager._specialSoundNum = 0;
 			memset(_vm->_graphicsManager._vesaBuffer, 0, 614400);
 			_vm->_graphicsManager._noFadingFl = true;
-			_vm->_globals._exitId = 151;
+			_vm->_globals->_exitId = 151;
 			break;
 
 		case 604:
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 163, 7, false);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 163, 7, false);
 			_vm->_objectsManager.OPTI_ONE(1, 0, 16, 4);
 			_vm->_soundManager._specialSoundNum = 199;
 			_vm->_animationManager->playAnim("BOMBE2A.ANM", 50, 14, 500);
 			_vm->_soundManager._specialSoundNum = 0;
 			_vm->_graphicsManager._noFadingFl = true;
 			memset(_vm->_graphicsManager._vesaBuffer, 0, 614400);
-			_vm->_globals._exitId = 151;
+			_vm->_globals->_exitId = 151;
 			break;
 
 		case 605:
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 163, 7, false);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 163, 7, false);
 			_vm->_objectsManager.OPTI_ONE(5, 0, 16, 4);
 			_vm->_graphicsManager.fadeOutShort();
 			_vm->_soundManager._specialSoundNum = 199;
@@ -2382,17 +2382,17 @@ int ScriptManager::handleOpcode(byte *dataP) {
 			_vm->_soundManager._specialSoundNum = 0;
 			_vm->_graphicsManager._noFadingFl = true;
 			memset(_vm->_graphicsManager._vesaBuffer, 0, 614400);
-			_vm->_globals._exitId = 151;
+			_vm->_globals->_exitId = 151;
 			break;
 
 		case 606:
-			_vm->_graphicsManager.fastDisplay(_vm->_globals.SPRITE_ECRAN, 513, 163, 7, false);
+			_vm->_graphicsManager.fastDisplay(_vm->_globals->SPRITE_ECRAN, 513, 163, 7, false);
 			_vm->_objectsManager.OPTI_ONE(6, 0, 16, 4);
 			if ((_vm->getPlatform() != Common::kPlatformWindows) || !_vm->getIsDemo()) {
 				_vm->_animationManager->playAnim("BOMBE3A.ANM", 50, 14, 500);
 				memset(_vm->_graphicsManager._vesaBuffer, 0, 614400);
 			}
-			_vm->_globals._exitId = 6;
+			_vm->_globals->_exitId = 6;
 			break;
 
 		case 607:
@@ -2449,12 +2449,12 @@ int ScriptManager::handleOpcode(byte *dataP) {
 		opcodeType = 1;
 		int idx = READ_LE_INT16(dataP + 5);
 		assert(idx >= 0 && idx < 2050);
-		_vm->_globals._saveData->_data[idx] = dataP[7];
+		_vm->_globals->_saveData->_data[idx] = dataP[7];
 		break;
 		}
 	case MKTAG24('A', 'D', 'D'):
 		opcodeType = 1;
-		_vm->_globals._saveData->_data[READ_LE_INT16(dataP + 5)] += dataP[7];
+		_vm->_globals->_saveData->_data[READ_LE_INT16(dataP + 5)] += dataP[7];
 		break;
 	case MKTAG24('B', 'O', 'S'):
 		opcodeType = 1;
@@ -2542,24 +2542,24 @@ int ScriptManager::handleIf(const byte *dataP, int offset) {
 	int saveDataIdx1 = READ_LE_INT16(buf + 5);
 	int compVal1 = READ_LE_INT16(buf + 7);
 	bool check1Fl = false;
-	if ((oper == 1 && _vm->_globals._saveData->_data[saveDataIdx1] == compVal1) ||
-	    (oper == 2 && _vm->_globals._saveData->_data[saveDataIdx1] != compVal1) ||
-	    (oper == 3 && _vm->_globals._saveData->_data[saveDataIdx1] <= compVal1) ||
-	    (oper == 4 && _vm->_globals._saveData->_data[saveDataIdx1] >= compVal1) ||
-	    (oper == 5 && _vm->_globals._saveData->_data[saveDataIdx1] > compVal1) ||
-	    (oper == 6 && _vm->_globals._saveData->_data[saveDataIdx1] < compVal1))
+	if ((oper == 1 && _vm->_globals->_saveData->_data[saveDataIdx1] == compVal1) ||
+	    (oper == 2 && _vm->_globals->_saveData->_data[saveDataIdx1] != compVal1) ||
+	    (oper == 3 && _vm->_globals->_saveData->_data[saveDataIdx1] <= compVal1) ||
+	    (oper == 4 && _vm->_globals->_saveData->_data[saveDataIdx1] >= compVal1) ||
+	    (oper == 5 && _vm->_globals->_saveData->_data[saveDataIdx1] > compVal1) ||
+	    (oper == 6 && _vm->_globals->_saveData->_data[saveDataIdx1] < compVal1))
 		check1Fl = true;
 
 	bool check2Fl = false;
 	if (operType != 3) {
 		int saveDataIdx2 = READ_LE_INT16(buf + 9);
 		int compVal2 = READ_LE_INT16(buf + 11);
-		if ((oper2 == 1 && compVal2 == _vm->_globals._saveData->_data[saveDataIdx2]) ||
-		    (oper2 == 2 && compVal2 != _vm->_globals._saveData->_data[saveDataIdx2]) ||
-		    (oper2 == 3 && compVal2 >= _vm->_globals._saveData->_data[saveDataIdx2]) ||
-		    (oper2 == 4 && compVal2 <= _vm->_globals._saveData->_data[saveDataIdx2]) ||
-		    (oper2 == 5 && compVal2 < _vm->_globals._saveData->_data[saveDataIdx2]) ||
-		    (oper2 == 6 && compVal2 > _vm->_globals._saveData->_data[saveDataIdx2]))
+		if ((oper2 == 1 && compVal2 == _vm->_globals->_saveData->_data[saveDataIdx2]) ||
+		    (oper2 == 2 && compVal2 != _vm->_globals->_saveData->_data[saveDataIdx2]) ||
+		    (oper2 == 3 && compVal2 >= _vm->_globals->_saveData->_data[saveDataIdx2]) ||
+		    (oper2 == 4 && compVal2 <= _vm->_globals->_saveData->_data[saveDataIdx2]) ||
+		    (oper2 == 5 && compVal2 < _vm->_globals->_saveData->_data[saveDataIdx2]) ||
+		    (oper2 == 6 && compVal2 > _vm->_globals->_saveData->_data[saveDataIdx2]))
 			check2Fl = true;
 	}
 	
diff --git a/engines/hopkins/sound.cpp b/engines/hopkins/sound.cpp
index d7a6c81..600ecba 100644
--- a/engines/hopkins/sound.cpp
+++ b/engines/hopkins/sound.cpp
@@ -273,7 +273,7 @@ void SoundManager::loadAnimSound() {
 }
 
 void SoundManager::playAnimSound(int soundNumber) {
-	if (!_vm->_globals._censorshipFl && _specialSoundNum == 2) {
+	if (!_vm->_globals->_censorshipFl && _specialSoundNum == 2) {
 		switch (soundNumber) {
 		case 20:
 			playSample(5);
@@ -524,41 +524,41 @@ bool SoundManager::mixVoice(int voiceId, int voiceMode, bool dispTxtFl) {
 		if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
 			filename = "ENG_VOI.RES";
 		// Win95 and Linux versions uses another set of names
-		else if (_vm->_globals._language == LANG_FR)
+		else if (_vm->_globals->_language == LANG_FR)
 			filename = "RES_VFR.RES";
-		else if (_vm->_globals._language == LANG_EN)
+		else if (_vm->_globals->_language == LANG_EN)
 			filename = "RES_VAN.RES";
-		else if (_vm->_globals._language == LANG_SP)
+		else if (_vm->_globals->_language == LANG_SP)
 			filename = "RES_VES.RES";
 
-		catPos = _vm->_globals._catalogPos;
-		catLen = _vm->_globals._catalogSize;
+		catPos = _vm->_globals->_catalogPos;
+		catLen = _vm->_globals->_catalogSize;
 	} else if (!_vm->_fileManager->searchCat(filename + ".APC", RES_VOI)) {
 		if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
 			filename = "ENG_VOI.RES";
 		// Win95 and Linux versions uses another set of names
-		else if (_vm->_globals._language == LANG_FR)
+		else if (_vm->_globals->_language == LANG_FR)
 			filename = "RES_VFR.RES";
-		else if (_vm->_globals._language == LANG_EN)
+		else if (_vm->_globals->_language == LANG_EN)
 			filename = "RES_VAN.RES";
-		else if (_vm->_globals._language == LANG_SP)
+		else if (_vm->_globals->_language == LANG_SP)
 			filename = "RES_VES.RES";
 
-		catPos = _vm->_globals._catalogPos;
-		catLen = _vm->_globals._catalogSize;
+		catPos = _vm->_globals->_catalogPos;
+		catLen = _vm->_globals->_catalogSize;
 	} else if (!_vm->_fileManager->searchCat(filename + ".RAW", RES_VOI)) {
 		if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
 			filename = "ENG_VOI.RES";
 		// Win95 and Linux versions uses another set of names
-		else if (_vm->_globals._language == LANG_FR)
+		else if (_vm->_globals->_language == LANG_FR)
 			filename = "RES_VFR.RES";
-		else if (_vm->_globals._language == LANG_EN)
+		else if (_vm->_globals->_language == LANG_EN)
 			filename = "RES_VAN.RES";
-		else if (_vm->_globals._language == LANG_SP)
+		else if (_vm->_globals->_language == LANG_SP)
 			filename = "RES_VES.RES";
 
-		catPos = _vm->_globals._catalogPos;
-		catLen = _vm->_globals._catalogSize;
+		catPos = _vm->_globals->_catalogPos;
+		catLen = _vm->_globals->_catalogSize;
 	} else {
 		if (!f.exists(filename + ".WAV")) {
 			if (!f.exists(filename + ".APC"))
diff --git a/engines/hopkins/talk.cpp b/engines/hopkins/talk.cpp
index ccbaf9e..1256261 100644
--- a/engines/hopkins/talk.cpp
+++ b/engines/hopkins/talk.cpp
@@ -56,25 +56,25 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
 	_vm->_fontManager->hideText(9);
 	_vm->_eventsManager->refreshScreenAndEvents();
 	_vm->_graphicsManager._scrollStatus = 1;
-	bool oldDisableInventFl = _vm->_globals._disableInventFl;
-	_vm->_globals._disableInventFl = true;
+	bool oldDisableInventFl = _vm->_globals->_disableInventFl;
+	_vm->_globals->_disableInventFl = true;
 	_characterBuffer = _vm->_fileManager->searchCat(filename, RES_PER);
-	_characterSize = _vm->_globals._catalogSize;
+	_characterSize = _vm->_globals->_catalogSize;
 	if (_characterBuffer == g_PTRNUL) {
 		_characterBuffer = _vm->_fileManager->loadFile(filename);
 		_characterSize = _vm->_fileManager->fileSize(filename);
 	}
 
-	_vm->_globals._saveData->_data[svDialogField4] = 0;
+	_vm->_globals->_saveData->_data[svDialogField4] = 0;
 
 	getStringFromBuffer(40, spriteFilename, (const char *)_characterBuffer);
 	getStringFromBuffer(0, _questionsFilename, (const char *)_characterBuffer);
 	getStringFromBuffer(20, _answersFilename, (const char *)_characterBuffer);
-	if (_vm->_globals._language == LANG_FR) {
+	if (_vm->_globals->_language == LANG_FR) {
 		_answersFilename = _questionsFilename = "RUE.TXT";
-	} else if (_vm->_globals._language == LANG_EN) {
+	} else if (_vm->_globals->_language == LANG_EN) {
 		_answersFilename = _questionsFilename = "RUEAN.TXT";
-	} else if (_vm->_globals._language == LANG_SP) {
+	} else if (_vm->_globals->_language == LANG_SP) {
 		_answersFilename = _questionsFilename = "RUEES.TXT";
 	}
 	_dialogueMesgId1 = READ_LE_INT16((uint16 *)_characterBuffer + 40);
@@ -104,7 +104,7 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
 	int oldMouseCursorId = _vm->_eventsManager->_mouseCursorId;
 	_vm->_eventsManager->_mouseCursorId = 4;
 	_vm->_eventsManager->changeMouseCursor(0);
-	if (!_vm->_globals._introSpeechOffFl) {
+	if (!_vm->_globals->_introSpeechOffFl) {
 		int answer = 0;
 		int dlgAnswer;
 		do {
@@ -116,7 +116,7 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
 			_vm->_eventsManager->refreshScreenAndEvents();
 		} while (dlgAnswer != _dialogueMesgId4);
 	}
-	if (_vm->_globals._introSpeechOffFl) {
+	if (_vm->_globals->_introSpeechOffFl) {
 		int idx = 1;
 		int answer;
 		do
@@ -124,9 +124,9 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
 		while (answer != -1);
 	}
 	clearCharacterAnim();
-	_vm->_globals._introSpeechOffFl = false;
-	_characterBuffer = _vm->_globals.freeMemory(_characterBuffer);
-	_characterSprite = _vm->_globals.freeMemory(_characterSprite);
+	_vm->_globals->_introSpeechOffFl = false;
+	_characterBuffer = _vm->_globals->freeMemory(_characterBuffer);
+	_characterSprite = _vm->_globals->freeMemory(_characterSprite);
 	_vm->_graphicsManager.NB_SCREEN(false);
 
 	_vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager._vesaScreen);
@@ -147,7 +147,7 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
 	_vm->_graphicsManager.m_scroll16(_vm->_graphicsManager._vesaScreen, _vm->_eventsManager->_startPos.x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
 	_vm->_graphicsManager.unlockScreen();
 	memcpy(_vm->_graphicsManager._vesaBuffer, _vm->_graphicsManager._vesaScreen, 614399);
-	_vm->_globals._disableInventFl = oldDisableInventFl;
+	_vm->_globals->_disableInventFl = oldDisableInventFl;
 	_vm->_graphicsManager.updateScreen();
 	for (int i = 0; i <= 4; i++)
 		_vm->_eventsManager->refreshScreenAndEvents();
@@ -156,21 +156,21 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
 
 void TalkManager::startStaticCharacterDialogue(const Common::String &filename) {
 	// TODO: The original disables the mouse cursor here
-	bool oldDisableInventFl = _vm->_globals._disableInventFl;
-	_vm->_globals._disableInventFl = true;
+	bool oldDisableInventFl = _vm->_globals->_disableInventFl;
+	_vm->_globals->_disableInventFl = true;
 	_characterBuffer = _vm->_fileManager->searchCat(filename, RES_PER);
-	_characterSize = _vm->_globals._catalogSize;
+	_characterSize = _vm->_globals->_catalogSize;
 	if (_characterBuffer == g_PTRNUL) {
 		_characterBuffer = _vm->_fileManager->loadFile(filename);
 		_characterSize = _vm->_fileManager->fileSize(filename);
 	}
 
-	_vm->_globals._saveData->_data[svDialogField4] = 0;
+	_vm->_globals->_saveData->_data[svDialogField4] = 0;
 
 	getStringFromBuffer(0, _questionsFilename, (const char *)_characterBuffer);
 	getStringFromBuffer(20, _answersFilename, (const char *)_characterBuffer);
 
-	switch (_vm->_globals._language) {
+	switch (_vm->_globals->_language) {
 	case LANG_EN:
 		_questionsFilename = "RUEAN.TXT";
 		_answersFilename = "RUEAN.TXT";
@@ -195,7 +195,7 @@ void TalkManager::startStaticCharacterDialogue(const Common::String &filename) {
 	_vm->_eventsManager->_mouseCursorId = 4;
 	_vm->_eventsManager->changeMouseCursor(0);
 
-	if (!_vm->_globals._introSpeechOffFl) {
+	if (!_vm->_globals->_introSpeechOffFl) {
 		int answer;
 		do {
 			answer = dialogQuestion(true);
@@ -206,7 +206,7 @@ void TalkManager::startStaticCharacterDialogue(const Common::String &filename) {
 		} while (answer != _dialogueMesgId4);
 	}
 
-	if (_vm->_globals._introSpeechOffFl) {
+	if (_vm->_globals->_introSpeechOffFl) {
 		int idx = 1;
 		int answer;
 		do
@@ -214,14 +214,14 @@ void TalkManager::startStaticCharacterDialogue(const Common::String &filename) {
 		while (answer != -1);
 	}
 
-	_characterBuffer = _vm->_globals.freeMemory(_characterBuffer);
+	_characterBuffer = _vm->_globals->freeMemory(_characterBuffer);
 	_vm->_eventsManager->_mouseCursorId = oldMouseCursorId;
 
 	_vm->_eventsManager->changeMouseCursor(oldMouseCursorId);
 	_vm->_graphicsManager.initColorTable(145, 150, _vm->_graphicsManager._palette);
 	_vm->_graphicsManager.setPaletteVGA256(_vm->_graphicsManager._palette);
 	// TODO: The original re-enables the mouse cursor here
-	_vm->_globals._disableInventFl = oldDisableInventFl;
+	_vm->_globals->_disableInventFl = oldDisableInventFl;
 }
 
 void TalkManager::getStringFromBuffer(int srcStart, Common::String &dest, const char *srcData) {
@@ -349,7 +349,7 @@ int TalkManager::dialogAnswer(int idx, bool animatedFl) {
 
 	int curBufVal = READ_LE_INT16((uint16 *)charBuf + 9);
 	if (curBufVal)
-		_vm->_globals._saveData->_data[svDialogField4] = curBufVal;
+		_vm->_globals->_saveData->_data[svDialogField4] = curBufVal;
 
 	if (!frameNumb)
 		frameNumb = 10;
@@ -473,26 +473,26 @@ void TalkManager::searchCharacterPalette(int startIdx, bool dark) {
 
 void TalkManager::dialogWait() {
 	for (int idx = 26; idx <= 30; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			BOB_VISU_PARLE(idx);
 	}
 }
 
 void TalkManager::dialogTalk() {
 	for (int idx = 26; idx <= 30; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			_vm->_objectsManager.hideBob(idx);
 	}
 
 	for (int idx = 26; idx <= 30; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			_vm->_objectsManager.resetBob(idx);
 	}
 }
 
 void TalkManager::dialogEndTalk() {
 	for (int idx = 21; idx <= 25; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			_vm->_objectsManager.hideBob(idx);
 	}
 
@@ -500,7 +500,7 @@ void TalkManager::dialogEndTalk() {
 	_vm->_eventsManager->refreshScreenAndEvents();
 
 	for (int idx = 21; idx <= 25; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			_vm->_objectsManager.resetBob(idx);
 	}
 }
@@ -531,7 +531,7 @@ int TalkManager::countBoxLines(int idx, const Common::String &file) {
 		error("Error opening file - %s", dest.c_str());
 
 	f.seek(indexData[idx]);
-	byte *decryptBuf = _vm->_globals.allocMemory(2058);
+	byte *decryptBuf = _vm->_globals->allocMemory(2058);
 	assert(decryptBuf != g_PTRNUL);
 
 	f.read(decryptBuf, 2048);
@@ -589,13 +589,13 @@ int TalkManager::countBoxLines(int idx, const Common::String &file) {
 		++lineCount;
 		curBufIndx += lineSize;
 	} while (curChar != '%');
-	_vm->_globals.freeMemory(decryptBuf);
+	_vm->_globals->freeMemory(decryptBuf);
 	return lineCount;
 }
 
 void TalkManager::VISU_PARLE() {
 	for (int idx = 21; idx <= 25; ++idx) {
-		if (_vm->_globals._animBqe[idx]._enabledFl)
+		if (_vm->_globals->_animBqe[idx]._enabledFl)
 			BOB_VISU_PARLE(idx);
 	}
 }
@@ -604,7 +604,7 @@ void TalkManager::BOB_VISU_PARLE(int idx) {
 	_vm->_objectsManager._priorityFl = true;
 	if (!_vm->_objectsManager._bob[idx]._bobMode) {
 		_vm->_objectsManager.resetBob(idx);
-		byte *bqeData = _vm->_globals._animBqe[idx]._data;
+		byte *bqeData = _vm->_globals->_animBqe[idx]._data;
 		int newMode = READ_LE_INT16(bqeData + 2);
 		if (!newMode)
 			newMode = 1;
@@ -612,7 +612,7 @@ void TalkManager::BOB_VISU_PARLE(int idx) {
 			_vm->_objectsManager._bob[idx]._isSpriteFl = true;
 			_vm->_objectsManager._bob[idx]._zoomFactor = 0;
 			_vm->_objectsManager._bob[idx]._flipFl = false;
-			_vm->_objectsManager._bob[idx]._animData = _vm->_globals._animBqe[idx]._data;
+			_vm->_objectsManager._bob[idx]._animData = _vm->_globals->_animBqe[idx]._data;
 			_vm->_objectsManager._bob[idx]._bobMode = 10;
 			bqeData = _characterSprite;
 			_vm->_objectsManager._bob[idx]._spriteData = _characterSprite;
@@ -641,11 +641,11 @@ void TalkManager::startCharacterAnim0(int startIdx, bool readOnlyFl) {
 		do {
 			if (!READ_LE_INT16(&_characterAnim[2 * idx + 4]))
 				break;
-			if (_vm->_globals._speed != 501)
+			if (_vm->_globals->_speed != 501)
 				_vm->_graphicsManager.fastDisplay(_characterSprite, _vm->_eventsManager->_startPos.x + READ_LE_INT16(&_characterAnim[2 * idx]),
 				    READ_LE_INT16(&_characterAnim[2 * idx + 2]), _characterAnim[2 * idx + 8]);
 			idx += 5;
-		} while (_vm->_globals._speed != 501);
+		} while (_vm->_globals->_speed != 501);
 	}
 }
 
@@ -698,8 +698,8 @@ void TalkManager::initCharacterAnim() {
 
 void TalkManager::clearCharacterAnim() {
 	for (int idx = 21; idx <= 34; ++idx) {
-		_vm->_globals._animBqe[idx]._data = _vm->_globals.freeMemory(_vm->_globals._animBqe[idx]._data);
-		_vm->_globals._animBqe[idx]._enabledFl = false;
+		_vm->_globals->_animBqe[idx]._data = _vm->_globals->freeMemory(_vm->_globals->_animBqe[idx]._data);
+		_vm->_globals->_animBqe[idx]._enabledFl = false;
 	}
 }
 
@@ -716,25 +716,25 @@ bool TalkManager::searchCharacterAnim(int idx, const byte *bufPerso, int animId,
 				if (READ_BE_UINT32(curPtr) == MKTAG('A', 'N', 'I', 'M') || READ_BE_UINT24(curPtr) == MKTAG24('F', 'I', 'N'))
 					loopCond = true;
 				if (bufIndx > bufferSize) {
-					_vm->_globals._animBqe[idx]._enabledFl = false;
-					_vm->_globals._animBqe[idx]._data = g_PTRNUL;
+					_vm->_globals->_animBqe[idx]._enabledFl = false;
+					_vm->_globals->_animBqe[idx]._data = g_PTRNUL;
 					return false;
 				}
 				++bufIndx;
 				++animLength;
 				++curPtr;
 			} while (!loopCond);
-			_vm->_globals._animBqe[idx]._data = _vm->_globals.allocMemory(animLength + 50);
-			_vm->_globals._animBqe[idx]._enabledFl = true;
-			memcpy(_vm->_globals._animBqe[idx]._data, (const byte *)(bufPerso + bufPos + 5), 20);
+			_vm->_globals->_animBqe[idx]._data = _vm->_globals->allocMemory(animLength + 50);
+			_vm->_globals->_animBqe[idx]._enabledFl = true;
+			memcpy(_vm->_globals->_animBqe[idx]._data, (const byte *)(bufPerso + bufPos + 5), 20);
 			int bqeVal = READ_LE_INT16(bufPos + bufPerso + 29);
-			WRITE_LE_UINT16(_vm->_globals._animBqe[idx]._data + 20, READ_LE_INT16(bufPos + bufPerso + 25));
-			WRITE_LE_UINT16(_vm->_globals._animBqe[idx]._data + 22, READ_LE_INT16(bufPos + bufPerso + 27));
-			WRITE_LE_UINT16(_vm->_globals._animBqe[idx]._data + 24, bqeVal);
-			WRITE_LE_UINT16(_vm->_globals._animBqe[idx]._data + 26, READ_LE_INT16(bufPos + bufPerso + 31));
-			_vm->_globals._animBqe[idx]._data[28] = bufPerso[bufPos + 33];
-			_vm->_globals._animBqe[idx]._data[29] = bufPerso[bufPos + 34];
-			byte *bqeCurData = _vm->_globals._animBqe[idx]._data + 20;
+			WRITE_LE_UINT16(_vm->_globals->_animBqe[idx]._data + 20, READ_LE_INT16(bufPos + bufPerso + 25));
+			WRITE_LE_UINT16(_vm->_globals->_animBqe[idx]._data + 22, READ_LE_INT16(bufPos + bufPerso + 27));
+			WRITE_LE_UINT16(_vm->_globals->_animBqe[idx]._data + 24, bqeVal);
+			WRITE_LE_UINT16(_vm->_globals->_animBqe[idx]._data + 26, READ_LE_INT16(bufPos + bufPerso + 31));
+			_vm->_globals->_animBqe[idx]._data[28] = bufPerso[bufPos + 33];
+			_vm->_globals->_animBqe[idx]._data[29] = bufPerso[bufPos + 34];
+			byte *bqeCurData = _vm->_globals->_animBqe[idx]._data + 20;
 			const byte *curBufPerso = bufPos + bufPerso + 25;
 			for (int i = 1; i < 5000; i++) {
 				bqeCurData += 10;
@@ -770,10 +770,10 @@ void TalkManager::REPONSE(int zone, int verb) {
 	do {
 		outerLoopFl = false;
 		bool tagFound = false;
-		if (_vm->_globals._answerBuffer == g_PTRNUL)
+		if (_vm->_globals->_answerBuffer == g_PTRNUL)
 			return;
 
-		byte *curAnswerBuf = _vm->_globals._answerBuffer;
+		byte *curAnswerBuf = _vm->_globals->_answerBuffer;
 		for (;;) {
 			if (READ_BE_UINT24(curAnswerBuf) == MKTAG24('F', 'I', 'N'))
 				return;
@@ -789,7 +789,7 @@ void TalkManager::REPONSE(int zone, int verb) {
 
 		// 'COD' tag found
 		curAnswerBuf += 5;
-		ptr = _vm->_globals.allocMemory(620);
+		ptr = _vm->_globals->allocMemory(620);
 		assert(ptr != g_PTRNUL);
 		memset(ptr, 0, 620);
 		uint16 curAnswerIdx = 0;
@@ -847,7 +847,7 @@ void TalkManager::REPONSE(int zone, int verb) {
 				innerLoopCond = true;
 			else if (opcodeType == 6) {
 				// JUMP
-				_vm->_globals.freeMemory(ptr);
+				_vm->_globals->freeMemory(ptr);
 				zoneObj = _vm->_objectsManager._jumpZone;
 				verbObj = _vm->_objectsManager._jumpVerb;
 				outerLoopFl = true;
@@ -855,14 +855,14 @@ void TalkManager::REPONSE(int zone, int verb) {
 			}
 		} while (!innerLoopCond);
 	} while (outerLoopFl);
-	_vm->_globals.freeMemory(ptr);
-	_vm->_globals._saveData->_data[svLastZoneNum] = 0;
+	_vm->_globals->freeMemory(ptr);
+	_vm->_globals->_saveData->_data[svLastZoneNum] = 0;
 	return;
 }
 
 void TalkManager::REPONSE2(int zone, int verb) {
 	int indx = 0;
-	if (verb != 5 || _vm->_globals._saveData->_data[svLastObjectIndex] != 4)
+	if (verb != 5 || _vm->_globals->_saveData->_data[svLastObjectIndex] != 4)
 		return;
 
 	if (zone == 22 || zone == 23) {
@@ -887,7 +887,7 @@ void TalkManager::REPONSE2(int zone, int verb) {
 		_vm->_objectsManager.stopBobAnimation(6);
 		_vm->_objectsManager.setBobAnimation(8);
 		
-		switch (_vm->_globals._screenId) {
+		switch (_vm->_globals->_screenId) {
 		case 35:
 			indx = 201;
 			break;
@@ -910,7 +910,7 @@ void TalkManager::REPONSE2(int zone, int verb) {
 			indx = 213;
 			break;
 		}
-		_vm->_globals._saveData->_data[indx] = 2;
+		_vm->_globals->_saveData->_data[indx] = 2;
 		_vm->_linesManager.disableZone(22);
 		_vm->_linesManager.disableZone(23);
 	} else if (zone == 20 || zone == 21) {
@@ -934,7 +934,7 @@ void TalkManager::REPONSE2(int zone, int verb) {
 		while (_vm->_objectsManager.getBobAnimDataIdx(5) < 12);
 		_vm->_objectsManager.stopBobAnimation(5);
 		_vm->_objectsManager.setBobAnimation(7);
-		switch (_vm->_globals._screenId) {
+		switch (_vm->_globals->_screenId) {
 		case 35:
 			indx = 200;
 			break;
@@ -957,7 +957,7 @@ void TalkManager::REPONSE2(int zone, int verb) {
 			indx = 212;
 			break;
 		}
-		_vm->_globals._saveData->_data[indx] = 2;
+		_vm->_globals->_saveData->_data[indx] = 2;
 		_vm->_linesManager.disableZone(21);
 		_vm->_linesManager.disableZone(20);
 	}
@@ -970,7 +970,7 @@ void TalkManager::animateObject(const Common::String &filename) {
 	_vm->_graphicsManager._scrollStatus = 1;
 	_vm->_linesManager.clearAllZones();
 	_vm->_linesManager.resetLines();
-	_vm->_globals.resetHidingItems();
+	_vm->_globals->resetHidingItems();
 	
 	for (int i = 0; i <= 44; i++)
 		_vm->_linesManager.BOBZONE[i] = 0;
@@ -979,7 +979,7 @@ void TalkManager::animateObject(const Common::String &filename) {
 	_vm->_eventsManager->_mouseCursorId = 4;
 	_vm->_eventsManager->changeMouseCursor(0);
 	_characterBuffer = _vm->_fileManager->searchCat(filename, RES_PER);
-	_characterSize = _vm->_globals._catalogSize;
+	_characterSize = _vm->_globals->_catalogSize;
 	if (_characterBuffer == g_PTRNUL) {
 		_characterBuffer = _vm->_fileManager->loadFile(filename);
 		_characterSize = _vm->_fileManager->fileSize(filename);
@@ -992,7 +992,7 @@ void TalkManager::animateObject(const Common::String &filename) {
 	getStringFromBuffer(20, curScreenFilename, (const char *)_characterBuffer);
 
 	if (curScreenFilename == "NULL")
-		curScreenFilename = Common::String::format("IM%d", _vm->_globals._screenId);
+		curScreenFilename = Common::String::format("IM%d", _vm->_globals->_screenId);
 
 	_characterSprite = _vm->_fileManager->searchCat(spriteFilename, RES_SAN);
 	if (_characterSprite)
@@ -1013,18 +1013,18 @@ void TalkManager::animateObject(const Common::String &filename) {
 	_vm->_objectsManager.PERSO_ON = true;
 	searchCharacterPalette(_paletteBufferIdx, true);
 	startCharacterAnim0(_paletteBufferIdx, false);
-	byte *oldAnswerBufferPtr = _vm->_globals._answerBuffer;
-	_vm->_globals._answerBuffer = g_PTRNUL;
-	_vm->_globals._freezeCharacterFl = true;
+	byte *oldAnswerBufferPtr = _vm->_globals->_answerBuffer;
+	_vm->_globals->_answerBuffer = g_PTRNUL;
+	_vm->_globals->_freezeCharacterFl = true;
 	_vm->_objectsManager.loadLinkFile(screenFilename);
 	_vm->_objectsManager.PERSO_ON = true;
-	_vm->_globals._actionMoveTo = false;
+	_vm->_globals->_actionMoveTo = false;
 	_vm->_objectsManager._zoneNum = -1;
 	initCharacterAnim();
 	VISU_PARLE();
 	dialogWait();
 	_vm->_graphicsManager.initScreen(screenFilename, 2, true);
-	_vm->_globals._freezeCharacterFl = true;
+	_vm->_globals->_freezeCharacterFl = true;
 	_vm->_objectsManager._forceZoneFl = true;
 	_vm->_objectsManager._zoneNum = -1;
 	do {
@@ -1035,33 +1035,33 @@ void TalkManager::animateObject(const Common::String &filename) {
 			_vm->_objectsManager.handleRightButton();
 
 		_vm->_linesManager.checkZone();
-		if (_vm->_globals._actionMoveTo)
+		if (_vm->_globals->_actionMoveTo)
 			_vm->_objectsManager.PARADISE();
 		_vm->_eventsManager->refreshScreenAndEvents();
-	} while (!_vm->_globals._exitId);
+	} while (!_vm->_globals->_exitId);
 	dialogEndTalk();
 	dialogTalk();
 	clearCharacterAnim();
 	clearCharacterAnim();
-	_vm->_globals._introSpeechOffFl = false;
-	_characterBuffer = _vm->_globals.freeMemory(_characterBuffer);
-	_characterSprite = _vm->_globals.freeMemory(_characterSprite);
+	_vm->_globals->_introSpeechOffFl = false;
+	_characterBuffer = _vm->_globals->freeMemory(_characterBuffer);
+	_characterSprite = _vm->_globals->freeMemory(_characterSprite);
 	_vm->_graphicsManager.NB_SCREEN(false);
 	_vm->_linesManager.clearAllZones();
 	_vm->_linesManager.resetLines();
-	_vm->_globals.resetHidingItems();
+	_vm->_globals->resetHidingItems();
 	for (int i = 0; i <= 44; i++)
 		_vm->_linesManager.BOBZONE[i] = 0;
 
-	_vm->_globals.freeMemory(_vm->_globals._answerBuffer);
-	_vm->_globals._answerBuffer = oldAnswerBufferPtr;
+	_vm->_globals->freeMemory(_vm->_globals->_answerBuffer);
+	_vm->_globals->_answerBuffer = oldAnswerBufferPtr;
 	_vm->_objectsManager._disableFl = true;
 	_vm->_objectsManager.loadLinkFile(curScreenFilename);
 	_vm->_graphicsManager.initScreen(curScreenFilename, 2, true);
 	_vm->_objectsManager._disableFl = false;
-	_vm->_globals._freezeCharacterFl = false;
-	if (_vm->_globals._exitId == 101)
-		_vm->_globals._exitId = 0;
+	_vm->_globals->_freezeCharacterFl = false;
+	if (_vm->_globals->_exitId == 101)
+		_vm->_globals->_exitId = 0;
 
 	_vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager._vesaScreen);
 	g_system->getSavefileManager()->removeSavefile("TEMP.SCR");
@@ -1081,7 +1081,7 @@ void TalkManager::animateObject(const Common::String &filename) {
 	_vm->_graphicsManager.unlockScreen();
 	_vm->_graphicsManager.setPaletteVGA256(_vm->_graphicsManager._palette);
 	memcpy(_vm->_graphicsManager._vesaBuffer, _vm->_graphicsManager._vesaScreen, 614399);
-	_vm->_globals._disableInventFl = false;
+	_vm->_globals->_disableInventFl = false;
 	_vm->_graphicsManager.updateScreen();
 	for (int i = 0; i <= 4; i++)
 		_vm->_eventsManager->refreshScreenAndEvents();






More information about the Scummvm-git-logs mailing list