diff --git a/engines/hopkins/anim.cpp b/engines/hopkins/anim.cpp
index 25c6913..70cfce2 100644
--- a/engines/hopkins/anim.cpp
+++ b/engines/hopkins/anim.cpp
@@ -226,129 +226,109 @@ void AnimationManager::playAnim2(const Common::String &filename, uint32 a2, uint
 		return;
 
 	bool hasScreenCopy = false;
-	while (!_vm->shouldQuit()) {
-		memcpy(_vm->_graphicsManager._oldPalette, _vm->_graphicsManager._palette, 769);
+	memcpy(_vm->_graphicsManager._oldPalette, _vm->_graphicsManager._palette, 769);
 
-		if (_vm->_graphicsManager._lineNbr == SCREEN_WIDTH)
-			_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager._vesaScreen, 307200);
-		else if (_vm->_graphicsManager._lineNbr == (SCREEN_WIDTH * 2))
-			_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager._vesaScreen, 614400);
-		if (!_vm->_graphicsManager._lineNbr)
-			_vm->_graphicsManager._scrollOffset = 0;
-
-		screenP = _vm->_graphicsManager._vesaScreen;
-		ptr = _vm->_globals.allocMemory(20);
+	if (_vm->_graphicsManager._lineNbr == SCREEN_WIDTH)
+		_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager._vesaScreen, 307200);
+	else if (_vm->_graphicsManager._lineNbr == (SCREEN_WIDTH * 2))
+		_vm->_saveLoadManager.saveFile("TEMP.SCR", _vm->_graphicsManager._vesaScreen, 614400);
+	if (!_vm->_graphicsManager._lineNbr)
+		_vm->_graphicsManager._scrollOffset = 0;
 
-		if (!f.open(filename))
-			error("Error opening file - %s", filename.c_str());
+	screenP = _vm->_graphicsManager._vesaScreen;
+	ptr = _vm->_globals.allocMemory(20);
+	if (!f.open(filename))
+		error("Error opening file - %s", filename.c_str());
 
-		f.read(&buf, 6);
-		f.read(_vm->_graphicsManager._palette, 800);
-		f.read(&buf, 4);
-		nbytes = f.readUint32LE();
-		f.readUint32LE();
-		f.readUint16LE();
-		f.readUint16LE();
-		f.readUint16LE();
-		f.readUint16LE();
-		f.readUint16LE();
+	f.read(&buf, 6);
+	f.read(_vm->_graphicsManager._palette, 800);
+	f.read(&buf, 4);
+	nbytes = f.readUint32LE();
+	f.readUint32LE();
+	f.readUint16LE();
+	f.readUint16LE();
+	f.readUint16LE();
+	f.readUint16LE();
+	f.readUint16LE();
 
-		f.read(screenP, nbytes);
+	f.read(screenP, nbytes);
 
-		_vm->_graphicsManager.clearPalette();
-		oldScrollVal = _vm->_graphicsManager.SCROLL;
-		_vm->_graphicsManager.SCANLINE(SCREEN_WIDTH);
-		_vm->_graphicsManager.scrollScreen(0);
-		_vm->_graphicsManager.lockScreen();
-		_vm->_graphicsManager.clearScreen();
-		_vm->_graphicsManager.unlockScreen();
-		_vm->_graphicsManager.max_x = SCREEN_WIDTH;
-		if (_vm->_graphicsManager.WinScan / 2 > SCREEN_WIDTH) {
-			hasScreenCopy = true;
-			screenCopy = _vm->_globals.allocMemory(307200);
-			memcpy(screenCopy, screenP, 307200);
-		}
-		if (NO_SEQ) {
-			if (hasScreenCopy)
-				memcpy(screenCopy, _vm->_graphicsManager._vesaBuffer, 307200);
-			_vm->_graphicsManager.setPaletteVGA256(_vm->_graphicsManager._palette);
-		} else {
-			_vm->_graphicsManager.setPaletteVGA256(_vm->_graphicsManager._palette);
-			_vm->_graphicsManager.lockScreen();
-			if (hasScreenCopy)
-				_vm->_graphicsManager.m_scroll16A(screenCopy, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
-			else
-				_vm->_graphicsManager.m_scroll16(screenP, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
-			_vm->_graphicsManager.unlockScreen();
-			_vm->_graphicsManager.DD_VBL();
-		}
-		_vm->_eventsManager._rateCounter = 0;
-		_vm->_eventsManager._escKeyFl = false;
-		_vm->_soundManager.LOAD_ANM_SOUND();
-		if (_vm->_globals.iRegul != 1)
-			break;
-		for (;;) {
-			if (_vm->_eventsManager._escKeyFl)
-				goto LABEL_114;
-			_vm->_eventsManager.refreshEvents();
-			if (_vm->_eventsManager._rateCounter >= a2)
-				goto LABEL_48;
-		}
-		if (_vm->_graphicsManager._skipVideoLockFl)
-			goto LABEL_114;
+	_vm->_graphicsManager.clearPalette();
+	oldScrollVal = _vm->_graphicsManager.SCROLL;
+	_vm->_graphicsManager.SCANLINE(SCREEN_WIDTH);
+	_vm->_graphicsManager.scrollScreen(0);
+	_vm->_graphicsManager.lockScreen();
+	_vm->_graphicsManager.clearScreen();
+	_vm->_graphicsManager.unlockScreen();
+	_vm->_graphicsManager.max_x = SCREEN_WIDTH;
+	if (_vm->_graphicsManager.WinScan / 2 > SCREEN_WIDTH) {
+		hasScreenCopy = true;
+		screenCopy = _vm->_globals.allocMemory(307200);
+		memcpy(screenCopy, screenP, 307200);
+	}
+	if (NO_SEQ) {
 		if (hasScreenCopy)
-			screenCopy = _vm->_globals.freeMemory(screenCopy);
-		_vm->_globals.freeMemory(ptr);
-		f.close();
-
-		_vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager._vesaScreen);
-		g_system->getSavefileManager()->removeSavefile("TEMP.SCR");
-
-		memcpy(_vm->_graphicsManager._palette, _vm->_graphicsManager._oldPalette, 769);
-		_vm->_graphicsManager.clearPalette();
+			memcpy(screenCopy, _vm->_graphicsManager._vesaBuffer, 307200);
+		_vm->_graphicsManager.setPaletteVGA256(_vm->_graphicsManager._palette);
+	} else {
+		_vm->_graphicsManager.setPaletteVGA256(_vm->_graphicsManager._palette);
 		_vm->_graphicsManager.lockScreen();
-		_vm->_graphicsManager.clearScreen();
-		_vm->_graphicsManager.unlockScreen();
-		_vm->_graphicsManager.SCROLL = oldScrollVal;
-		_vm->_graphicsManager.scrollScreen(oldScrollVal);
-		if (_vm->_graphicsManager._largeScreenFl) {
-			_vm->_graphicsManager.SCANLINE(1280);
-			_vm->_graphicsManager.max_x = 1280;
-			_vm->_graphicsManager.lockScreen();
-			_vm->_graphicsManager.m_scroll16(_vm->_graphicsManager._vesaBuffer, _vm->_eventsManager._startPos.x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
-		} else {
-			_vm->_graphicsManager.SCANLINE(SCREEN_WIDTH * 2);
-			_vm->_graphicsManager.max_x = SCREEN_WIDTH;
-			_vm->_graphicsManager.lockScreen();
-			_vm->_graphicsManager.clearScreen();
-			_vm->_graphicsManager.m_scroll16(_vm->_graphicsManager._vesaBuffer, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
-		}
+		if (hasScreenCopy)
+			_vm->_graphicsManager.m_scroll16A(screenCopy, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
+		else
+			_vm->_graphicsManager.m_scroll16(screenP, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
 		_vm->_graphicsManager.unlockScreen();
-		_vm->_eventsManager.VBL();
-		_vm->_graphicsManager.fadeInShort();
+		_vm->_graphicsManager.DD_VBL();
 	}
-LABEL_48:
 	_vm->_eventsManager._rateCounter = 0;
-	v5 = 0;
-	frameNumber = 0;
-	for (;;) {
+	_vm->_eventsManager._escKeyFl = false;
+	_vm->_soundManager.LOAD_ANM_SOUND();
+	bool abort = false;
+	if (_vm->_globals.iRegul == 1) {
+		do {
+			if (_vm->_eventsManager._escKeyFl) {
+				abort = true;
+				break;
+			}
+			_vm->_eventsManager.refreshEvents();
+		while (_vm->_eventsManager._rateCounter < a2);
+	}
+	if (!abort) {
+		_vm->_eventsManager._rateCounter = 0;
+		frameNumber = 0;
+	}
+	while (!abort) {
 		++frameNumber;
 		_vm->_soundManager.playAnim_SOUND(frameNumber);
 		memset(&buf, 0, 6);
 		memset(ptr, 0, 19);
 
-		if (f.read(ptr, 16) != 16)
-			v5 = -1;
-
-		if (strncmp((const char *)ptr, "IMAGE=", 6))
-			v5 = -1;
-
-		if (v5)
-			goto LABEL_88;
+		if (f.read(ptr, 16) != 16 || strncmp((const char *)ptr, "IMAGE=", 6))
+			if (_vm->_globals.iRegul == 1) {
+				do {
+					if (_vm->_eventsManager._escKeyFl) {
+						abort = true;
+						break;
+					}
+					_vm->_eventsManager.refreshEvents();
+					_vm->_soundManager.VERIF_SOUND();
+				while (_vm->_eventsManager._rateCounter < a4);
+			}
+			break;
+		}
 		f.read(screenP, READ_LE_UINT32(ptr + 8));
-		if (_vm->_globals.iRegul == 1)
+		if (_vm->_globals.iRegul == 1) {
+			do {
+				if (_vm->_eventsManager._escKeyFl) {
+					abort = true;
+					break;
+				}
+				_vm->_eventsManager.refreshEvents();
+				_vm->_soundManager.VERIF_SOUND();
+			while (_vm->_eventsManager._rateCounter < a3)
+		}
+		if (abort)
 			break;
-LABEL_77:
 		_vm->_eventsManager._rateCounter = 0;
 		_vm->_graphicsManager.lockScreen();
 		if (hasScreenCopy) {
@@ -362,26 +342,7 @@ LABEL_77:
 		_vm->_graphicsManager.unlockScreen();
 		_vm->_graphicsManager.DD_VBL();
 		_vm->_soundManager.VERIF_SOUND();
-LABEL_88:
-		if (v5 == -1) {
-			if (_vm->_globals.iRegul == 1) {
-				while (!_vm->_eventsManager._escKeyFl) {
-					_vm->_eventsManager.refreshEvents();
-					_vm->_soundManager.VERIF_SOUND();
-					if (_vm->_eventsManager._rateCounter >= a4)
-						goto LABEL_114;
-				}
-			}
-			goto LABEL_114;
-		}
-	}
-	while (!_vm->_eventsManager._escKeyFl) {
-		_vm->_eventsManager.refreshEvents();
-		_vm->_soundManager.VERIF_SOUND();
-		if (_vm->_eventsManager._rateCounter >= a3)
-			goto LABEL_77;
 	}
-LABEL_114:
 	_vm->_graphicsManager._skipVideoLockFl = false;
 	f.close();
 
