[Scummvm-git-logs] scummvm master -> 99044b349ba26877b348166dc66206318abc5471

neuromancer noreply at scummvm.org
Mon Apr 11 19:30:56 UTC 2022


This automated email contains information about 16 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
37ff8859e7 HYPNO: load a few levels more in boyz
f67b4a1fe5 HYPNO: preliminary rendering of health and ammo bars in boyz
c20499b789 HYPNO: change weapons according to the script in boyz
0716bf254f HYPNO: shuffle weapon targets in boyz
6cb99813a2 HYPNO: refactored arcade transitions into a dedicated data structure
2ee96a1d8d HYPNO: add a condition to check if the first door is open in level c60 in wet
fe610854fd HYPNO: return to main menu after game over in the full version of wet
68004ec9b5 HYPNO: improved parser to allow to load c16 level in boyz
b50b506ba4 HYPNO: added Soldier Boyz to the original copyright string
66398db645 HYPNO: implemented sound transition in boyz
034051a5d4 HYPNO: improved parser to load level c17 in boyz
5d0b07c86c HYPNO: fixed ui offsets in last level of wet
1e8343b956 HYPNO: refactor code for handling player frames to allow changes during levels in wet
606dbe60f1 HYPNO: correctly play explosions animations avoiding separator frames in wet
baa7d670da HYPNO: set a better default value for frame separator in wet
99044b349b HYPNO: refactor to use color constants loaded from the current palette


Commit: 37ff8859e7acb91808b6a4d22450c08d3a8110ce
    https://github.com/scummvm/scummvm/commit/37ff8859e7acb91808b6a4d22450c08d3a8110ce
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:33+02:00

Commit Message:
HYPNO: load a few levels more in boyz

Changed paths:
    engines/hypno/boyz/boyz.cpp
    engines/hypno/lexer_arc.cpp
    engines/hypno/lexer_arc.l


diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 0d2722b49af..8c348e9301e 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -40,7 +40,8 @@ void BoyzEngine::loadAssets() {
 	loadArcadeLevel("c11.mi_", "c12.mi_", "??", "");
 	loadArcadeLevel("c12.mi_", "c14.mi_", "??", "");
 	//loadArcadeLevel("c13.mi_", "??", "??", "");
-	loadArcadeLevel("c14.mi_", "??", "??", "");
+	loadArcadeLevel("c14.mi_", "c15.mi_", "??", "");
+	loadArcadeLevel("c15.mi_", "c16.mi_", "??", "");
 
 	loadLib("sound/", "misc/sound.lib", true);
 
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index 34366e36191..19de6982b7f 100644
--- a/engines/hypno/lexer_arc.cpp
+++ b/engines/hypno/lexer_arc.cpp
@@ -689,24 +689,24 @@ static const YY_CHAR yy_ec[256] =
 
 static const YY_CHAR yy_meta[46] =
     {   0,
-        1,    1,    2,    1,    1,    1,    1,    3,    4,    4,
-        4,    4,    4,    1,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    1
+        1,    1,    2,    1,    1,    1,    3,    4,    5,    5,
+        5,    5,    5,    1,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    1
     } ;
 
 static const flex_int16_t yy_base[91] =
     {   0,
-        0,    0,  217,  218,  214,  218,  218,   37,   42,   47,
-       52,   57,    0,   63,   92,  207,  206,  205,   65,  204,
-       87,   72,   75,   77,  203,  202,   86,  108,   84,  201,
-      111,  115,   88,  200,  191,  186,  184,  106,  183,    0,
+        0,    0,  219,  220,  216,  220,  220,   37,   42,   47,
+       52,   57,    0,   63,   92,  209,  208,  207,   65,  206,
+       87,   72,   75,   77,  205,  204,   86,  108,   84,  203,
+      111,  115,   88,  202,  192,  186,  184,  106,  183,    0,
       188,  124,    0,  129,  142,  118,  121,  185,    0,  180,
       178,  176,  175,  174,  173,  172,  171,  170,  169,  168,
-      166,  165,  218,  137,  164,  163,  162,  161,  154,  152,
-        0,    0,  218,    0,  218,  150,  155,  149,  147,  136,
-      122,  120,  218,  218,  193,  197,  199,  201,   77,  203
+      166,  165,  220,  137,  164,  163,  162,  161,  154,  152,
+        0,    0,  220,    0,  220,  150,  155,  149,  147,  136,
+      122,  120,  220,  220,  193,  198,  200,  202,   76,  204
     } ;
 
 static const flex_int16_t yy_def[91] =
@@ -722,7 +722,7 @@ static const flex_int16_t yy_def[91] =
        84,   84,   84,    0,   84,   84,   84,   84,   84,   84
     } ;
 
-static const flex_int16_t yy_nxt[264] =
+static const flex_int16_t yy_nxt[266] =
     {   0,
         4,    5,    6,    7,    4,    4,    8,    4,    9,   10,
        11,   12,    9,   13,   14,   15,   16,   17,   18,   19,
@@ -744,18 +744,18 @@ static const flex_int16_t yy_nxt[264] =
        74,   49,   75,   43,   78,   84,   72,   80,   49,   49,
        49,   49,   49,   49,   43,   49,   49,   49,   49,   49,
        49,   49,   49,   49,   72,   49,   73,   49,   77,   41,
-       49,   49,   43,   49,   84,   43,   43,   48,   49,   48,
+       49,   49,   43,   49,   84,   43,   43,   43,   48,   49,
 
-       48,   51,   51,   70,   70,   49,   49,   49,   49,   49,
-       49,   49,   49,   49,   49,   41,   84,    3,   84,   84,
+       48,   48,   48,   51,   51,   70,   70,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   41,   84,    3,
        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84
+       84,   84,   84,   84,   84
     } ;
 
-static const flex_int16_t yy_chk[264] =
+static const flex_int16_t yy_chk[266] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -777,15 +777,15 @@ static const flex_int16_t yy_chk[264] =
        46,   69,   46,   47,   64,   47,   45,   78,   68,   67,
        66,   65,   62,   61,   76,   60,   59,   58,   57,   56,
        55,   54,   53,   52,   45,   51,   45,   50,   48,   41,
-       39,   37,   76,   36,   76,   85,   85,   86,   35,   86,
+       39,   37,   76,   36,   76,   85,   85,   85,   86,   35,
 
-       86,   87,   87,   88,   88,   90,   90,   34,   30,   26,
-       25,   20,   18,   17,   16,    5,    3,   84,   84,   84,
+       86,   86,   86,   87,   87,   88,   88,   90,   90,   34,
+       30,   26,   25,   20,   18,   17,   16,    5,    3,   84,
        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84
+       84,   84,   84,   84,   84
     } ;
 
 /* Table of booleans, true if rule could match eol. */
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index ae5e0a5f1fd..41a87443f99 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -87,7 +87,7 @@ Y[A-Z0-9]					HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
 [\-]?[0-9]+					HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
 [A-Za-z_][A-Za-z_0-9]*		HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
 [A-Za-z][A-Za-z_0-9\\\.]+	HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
-[0-9][A-Za-z_0-9\\\.]+		HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+[0-9][\-A-Za-z_0-9\\\.]+	HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 320\,200					return RESTOK;
 [\n|\r\n]					return RETTOK;
 \;.+\r						/* ignore comment */


Commit: f67b4a1fe5d20625a30d8b70d2634f069c894e28
    https://github.com/scummvm/scummvm/commit/f67b4a1fe5d20625a30d8b70d2634f069c894e28
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:33+02:00

Commit Message:
HYPNO: preliminary rendering of health and ammo bars in boyz

Changed paths:
    engines/hypno/boyz/arcade.cpp


diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 5eb8e5f3d32..1e965bdd467 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -91,7 +91,17 @@ void BoyzEngine::drawPlayer() {
 
 void BoyzEngine::drawHealth() {
 	updateFromScript();
+
+	// Health
+	Common::Rect healthBarBox(0, 0, _healthBar[_currentActor].w, _healthBar[_currentActor].h/2);
+	uint32 c = 252; // white
+	_compositeSurface->fillRect(healthBarBox, c);
 	drawImage(_healthBar[_currentActor], 0, 0, true);
+
+	// Ammo
+	Common::Rect ammoBarBox(320 - _ammoBar[_currentActor].w, 0, 320, _ammoBar[_currentActor].h/2);
+	c = 251; // green
+	_compositeSurface->fillRect(ammoBarBox, c);
 	drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentActor].w, 0, true);
 }
 void BoyzEngine::hitPlayer() {


Commit: c20499b789c2ec7762962d472a94e4e209c902d9
    https://github.com/scummvm/scummvm/commit/c20499b789c2ec7762962d472a94e4e209c902d9
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:33+02:00

Commit Message:
HYPNO: change weapons according to the script in boyz

Changed paths:
    engines/hypno/boyz/arcade.cpp
    engines/hypno/boyz/boyz.cpp
    engines/hypno/hypno.h


diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 1e965bdd467..7652eb485bc 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -46,10 +46,7 @@ void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
 	_playerFrameIdx = -1;
 
 	_currentScript = arc->script;
-	ScriptInfo si = *_currentScript.begin();
-	_currentActor = si.actor - 1;
-	_currentMode = si.mode;
-	_currentScript.pop_front();
+	updateFromScript();
 }
 
 void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
@@ -63,25 +60,30 @@ void BoyzEngine::updateFromScript() {
 	if (_currentScript.size() > 0) {
 		ScriptInfo si = *_currentScript.begin();
 		//debug("%d %d %d", si.time, _background->decoder->getCurFrame(), si.actor);
-		if (int(si.time) <= _background->decoder->getCurFrame()) {
+		if (!_background || int(si.time) <= _background->decoder->getCurFrame()) {
 			_currentActor = si.actor - 1;
 			_currentMode = si.mode;
+			_currentWeapon = si.cursor - 1;
 			_currentScript.pop_front();
+
+			if (_currentMode == NonInteractive)
+				changeCursor(_crosshairsInactive[_currentWeapon], _crosshairsPalette, true);
+			else
+				changeCursor(_crosshairsActive[_currentWeapon], _crosshairsPalette, true);
 		}
 	}
 }
 
 void BoyzEngine::drawCursorArcade(const Common::Point &mousePos) {
 	if (_currentMode == NonInteractive) {
-		changeCursor(_crosshairsInactive[0], _crosshairsPalette, true);
 		return;
 	}
 
 	int i = detectTarget(mousePos);
 	if (i >= 0)
-		changeCursor(_crosshairsTarget[0], _crosshairsPalette, true);
+		changeCursor(_crosshairsTarget[_currentWeapon], _crosshairsPalette, true);
 	else
-		changeCursor(_crosshairsActive[0], _crosshairsPalette, true);
+		changeCursor(_crosshairsActive[_currentWeapon], _crosshairsPalette, true);
 }
 
 void BoyzEngine::drawPlayer() {
@@ -141,7 +143,11 @@ int BoyzEngine::detectTarget(const Common::Point &mousePos) {
 }
 
 void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVideo &background) {
-	playSound(_soundPath + _weaponShootSound[0], 1);
+	if (_currentMode == NonInteractive) {
+		return;
+	}
+
+	playSound(_soundPath + _weaponShootSound[_currentWeapon], 1);
 	incShotsFired();
 	int i = detectTarget(mousePos);
 	if (i < 0) {
@@ -161,7 +167,7 @@ void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVide
 		background.decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
 		_masks->decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
 		_shoots.clear();
-		changeCursor(_crosshairsActive[0], _crosshairsPalette, true);
+		changeCursor(_crosshairsActive[_currentWeapon], _crosshairsPalette, true);
 	}
 }
 
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 8c348e9301e..a037bec3ab6 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -30,6 +30,7 @@ BoyzEngine::BoyzEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine
 	_screenW = 320;
 	_screenH = 200;
 	_lives = 2;
+	_currentWeapon = 0;
 }
 
 void BoyzEngine::loadAssets() {
@@ -46,8 +47,11 @@ void BoyzEngine::loadAssets() {
 	loadLib("sound/", "misc/sound.lib", true);
 
 	_weaponShootSound[0] = "pstlfire.raw";
-	_weaponShootSound[2] = "ak47fire.raw";
+	_weaponShootSound[1] = "ak47fire.raw";
+	_weaponShootSound[2] = "dblfire.raw";
+	_weaponShootSound[3] = "m16fire.raw";
 	_weaponShootSound[4] = "shotfire.raw";
+	_weaponShootSound[5] = "glm60fr.raw";
 
 	Graphics::Surface *targets = decodeFrame("preload/targets.smk", 0, &_crosshairsPalette);
 
@@ -63,6 +67,87 @@ void BoyzEngine::loadAssets() {
 	_crosshairsTarget[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsTarget[0].copyRectToSurface(*targets, 0, 0, cursorBox);
 
+	cursorBox = Common::Rect(62, 6, 83, 26);
+	_crosshairsInactive[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsInactive[1].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(62, 38, 83, 58);
+	_crosshairsActive[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsActive[1].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(62, 70, 83, 90);
+	_crosshairsTarget[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsTarget[1].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+    //
+	cursorBox = Common::Rect(104, 7, 136, 25);
+	_crosshairsInactive[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsInactive[2].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(104, 39, 136, 57);
+	_crosshairsActive[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsActive[2].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(104, 71, 136, 83);
+	_crosshairsTarget[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsTarget[2].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	//
+
+	cursorBox = Common::Rect(163, 11, 173, 21);
+	_crosshairsInactive[3].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsInactive[3].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(163, 43, 173, 53);
+	_crosshairsActive[3].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsActive[3].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(163, 75, 173, 85);
+	_crosshairsTarget[3].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsTarget[3].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	// Shotgun
+
+	cursorBox = Common::Rect(203, 11, 229, 21);
+	_crosshairsInactive[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsInactive[4].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(203, 43, 229, 53);
+	_crosshairsActive[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsActive[4].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(203, 75, 229, 85);
+	_crosshairsTarget[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsTarget[4].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	// Granade
+
+	cursorBox = Common::Rect(256, 2, 273, 29);
+	_crosshairsInactive[5].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsInactive[5].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(256, 34, 273, 61);
+	_crosshairsActive[5].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsActive[5].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(256, 66, 273, 93);
+	_crosshairsTarget[5].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsTarget[5].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	// Large crossair
+
+	cursorBox = Common::Rect(56, 98, 88, 125);
+	_crosshairsInactive[6].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsInactive[6].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(57, 130, 88, 158);
+	_crosshairsActive[6].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsActive[6].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(57, 162, 88, 189);
+	_crosshairsTarget[6].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsTarget[6].copyRectToSurface(*targets, 0, 0, cursorBox);
+
 	_nextLevel = "c11.mi_";
 }
 
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 4ec29790cac..281eca5efc5 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -487,7 +487,7 @@ public:
 	Script _currentScript;
 	ScriptMode _currentMode;
 	uint32 _currentActor;
-	uint32 _currentCursor;
+	uint32 _currentWeapon;
 
 };
 


Commit: 0716bf254f0808960e11abe8fc845ea44787f30c
    https://github.com/scummvm/scummvm/commit/0716bf254f0808960e11abe8fc845ea44787f30c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:33+02:00

Commit Message:
HYPNO: shuffle weapon targets in boyz

Changed paths:
    engines/hypno/boyz/boyz.cpp


diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index a037bec3ab6..8b0338387d4 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -55,45 +55,33 @@ void BoyzEngine::loadAssets() {
 
 	Graphics::Surface *targets = decodeFrame("preload/targets.smk", 0, &_crosshairsPalette);
 
-	Common::Rect cursorBox = Common::Rect(16, 8, 32, 24);
+	Common::Rect cursorBox;
+
+	// Pistol?
+	cursorBox = Common::Rect(62, 6, 83, 26);
 	_crosshairsInactive[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsInactive[0].copyRectToSurface(*targets, 0, 0, cursorBox);
 
-	cursorBox = Common::Rect(16, 40, 32, 56);
+	cursorBox = Common::Rect(62, 38, 83, 58);
 	_crosshairsActive[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsActive[0].copyRectToSurface(*targets, 0, 0, cursorBox);
 
-	cursorBox = Common::Rect(16, 72, 32, 88);
+	cursorBox = Common::Rect(62, 70, 83, 90);
 	_crosshairsTarget[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsTarget[0].copyRectToSurface(*targets, 0, 0, cursorBox);
 
-	cursorBox = Common::Rect(62, 6, 83, 26);
-	_crosshairsInactive[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
-	_crosshairsInactive[1].copyRectToSurface(*targets, 0, 0, cursorBox);
-
-	cursorBox = Common::Rect(62, 38, 83, 58);
-	_crosshairsActive[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
-	_crosshairsActive[1].copyRectToSurface(*targets, 0, 0, cursorBox);
-
-	cursorBox = Common::Rect(62, 70, 83, 90);
-	_crosshairsTarget[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
-	_crosshairsTarget[1].copyRectToSurface(*targets, 0, 0, cursorBox);
-
-    //
-	cursorBox = Common::Rect(104, 7, 136, 25);
+	cursorBox = Common::Rect(16, 8, 32, 24);
 	_crosshairsInactive[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsInactive[2].copyRectToSurface(*targets, 0, 0, cursorBox);
 
-	cursorBox = Common::Rect(104, 39, 136, 57);
+	cursorBox = Common::Rect(16, 40, 32, 56);
 	_crosshairsActive[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsActive[2].copyRectToSurface(*targets, 0, 0, cursorBox);
 
-	cursorBox = Common::Rect(104, 71, 136, 83);
+	cursorBox = Common::Rect(16, 72, 32, 88);
 	_crosshairsTarget[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsTarget[2].copyRectToSurface(*targets, 0, 0, cursorBox);
 
-	//
-
 	cursorBox = Common::Rect(163, 11, 173, 21);
 	_crosshairsInactive[3].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsInactive[3].copyRectToSurface(*targets, 0, 0, cursorBox);
@@ -107,7 +95,20 @@ void BoyzEngine::loadAssets() {
 	_crosshairsTarget[3].copyRectToSurface(*targets, 0, 0, cursorBox);
 
 	// Shotgun
+	cursorBox = Common::Rect(104, 7, 136, 25);
+	_crosshairsInactive[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsInactive[4].copyRectToSurface(*targets, 0, 0, cursorBox);
 
+	cursorBox = Common::Rect(104, 39, 136, 57);
+	_crosshairsActive[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsActive[4].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+	cursorBox = Common::Rect(104, 71, 136, 83);
+	_crosshairsTarget[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+	_crosshairsTarget[4].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+    // Double small
+	/*
 	cursorBox = Common::Rect(203, 11, 229, 21);
 	_crosshairsInactive[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsInactive[4].copyRectToSurface(*targets, 0, 0, cursorBox);
@@ -147,7 +148,7 @@ void BoyzEngine::loadAssets() {
 	cursorBox = Common::Rect(57, 162, 88, 189);
 	_crosshairsTarget[6].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
 	_crosshairsTarget[6].copyRectToSurface(*targets, 0, 0, cursorBox);
-
+	*/
 	_nextLevel = "c11.mi_";
 }
 


Commit: 6cb99813a21e6300ebc6e81020235d51c9423d1f
    https://github.com/scummvm/scummvm/commit/6cb99813a21e6300ebc6e81020235d51c9423d1f
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:33+02:00

Commit Message:
HYPNO: refactored arcade transitions into a dedicated data structure

Changed paths:
    engines/hypno/arcade.cpp
    engines/hypno/grammar.h
    engines/hypno/grammar_arc.cpp
    engines/hypno/grammar_arc.y


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index e78aa71b651..b09b8236abb 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -327,32 +327,30 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			break;
 		}
 
-		if (!arc->transitionVideos.empty() && _background->decoder->getCurFrame() > (int)*arc->transitionTimes.begin()) {
-			transition = true;
-			_background->decoder->pauseVideo(true);
-
-			Filename transitionVideo = *arc->transitionVideos.begin();
-			Filename transitionPalette = *arc->transitionPalettes.begin();
-
-			debugC(1, kHypnoDebugArcade, "Playing transition %s", transitionVideo.c_str());
-			MVideo video(transitionVideo, Common::Point(0, 0), false, true, false);
-			disableCursor();
-			runIntro(video);
+		if (!arc->transitions.empty()) {
+			ArcadeTransition at = *arc->transitions.begin();
+			if (_background->decoder->getCurFrame() > (int) at.time) {
+				transition = true;
+				_background->decoder->pauseVideo(true);
+
+				debugC(1, kHypnoDebugArcade, "Playing transition %s", at.video.c_str());
+				MVideo video(at.video, Common::Point(0, 0), false, true, false);
+				disableCursor();
+				runIntro(video);
 
-			if (!transitionPalette.empty())
-				currentPalette = transitionPalette;
+				if (!at.palette.empty())
+					currentPalette = at.palette;
 
-			loadPalette(currentPalette);
-			_background->decoder->pauseVideo(false);
-			updateScreen(*_background);
-			drawScreen();
-			drawCursorArcade(mousePos);
+				loadPalette(currentPalette);
+				_background->decoder->pauseVideo(false);
+				updateScreen(*_background);
+				drawScreen();
+				drawCursorArcade(mousePos);
 
-			arc->transitionVideos.pop_front();
-			arc->transitionPalettes.pop_front();
-			arc->transitionTimes.pop_front();
-			if (!_music.empty())
-				playSound(_music, 0, arc->musicRate); // restore music
+				arc->transitions.pop_front();
+				if (!_music.empty())
+					playSound(_music, 0, arc->musicRate); // restore music
+			}
 		}
 
 		if (_background->decoder && _background->decoder->getCurFrame() >= int(segments[_segmentIdx].start + segments[_segmentIdx].size - 2)) {
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index e4d9c5b78d7..df01dd2ddc8 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -494,6 +494,23 @@ public:
 
 typedef Common::Array<Segment> Segments;
 
+class ArcadeTransition {
+public:
+	ArcadeTransition(Filename video_, Filename palette_, Filename audio_, uint32 time_)  {
+		video = video_;
+		palette = palette_;
+		audio = audio_;
+		time = time_;
+	}
+
+	Filename video;
+	Filename palette;
+	Filename audio;
+	uint32 time;
+};
+
+typedef Common::List<ArcadeTransition> ArcadeTransitions;
+
 class ArcadeShooting : public Level {
 public:
 	ArcadeShooting()  {
@@ -509,9 +526,7 @@ public:
 	void clear() {
 		nextLevelVideo.clear();
 		backgroundVideo.clear();
-		transitionVideos.clear();
-		transitionTimes.clear();
-		transitionPalettes.clear();
+		transitions.clear();
 		maskVideo.clear();
 		player.clear();
 		shoots.clear();
@@ -533,7 +548,7 @@ public:
 	uint32 id;
 	uint32 frameDelay;
 	Common::String mode;
-	Common::List<uint32> transitionTimes;
+	ArcadeTransitions transitions;
 	Segments segments;
 
 	// Objectives
@@ -544,8 +559,6 @@ public:
 	Script script;
 
 	// Videos
-	Common::List<Filename> transitionVideos;
-	Common::List<Filename> transitionPalettes;
 	Filename nextLevelVideo;
 	Filename defeatNoEnergyFirstVideo;
 	Filename defeatNoEnergySecondVideo;
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index bb9712af8e4..8ea27ed10e3 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -585,14 +585,14 @@ static const yytype_int16 yyrline[] =
 {
        0,    78,    78,    78,    79,    82,    83,    84,    87,    91,
       95,    99,   100,   101,   105,   110,   111,   112,   117,   127,
-     136,   142,   148,   149,   153,   157,   160,   164,   167,   168,
-     194,   216,   222,   227,   232,   238,   243,   248,   253,   258,
-     263,   270,   271,   274,   275,   278,   279,   280,   283,   291,
-     294,   297,   300,   305,   310,   314,   318,   322,   326,   330,
-     334,   338,   342,   346,   350,   354,   358,   362,   366,   370,
-     374,   378,   382,   386,   390,   394,   397,   401,   406,   410,
-     415,   420,   424,   430,   434,   437,   438,   441,   445,   448,
-     453,   456,   460,   464,   473,   474,   477,   480,   483,   486
+     136,   141,   146,   147,   151,   155,   158,   162,   165,   166,
+     192,   214,   220,   225,   230,   236,   241,   246,   251,   256,
+     261,   268,   269,   272,   273,   276,   277,   278,   281,   289,
+     292,   295,   298,   303,   308,   312,   316,   320,   324,   328,
+     332,   336,   340,   344,   348,   352,   356,   360,   364,   368,
+     372,   376,   380,   384,   388,   392,   395,   399,   404,   408,
+     413,   418,   422,   428,   432,   435,   436,   439,   443,   446,
+     451,   454,   458,   462,   471,   472,   475,   478,   481,   484
 };
 #endif
 
@@ -1384,82 +1384,80 @@ yyreduce:
   case 20: /* hline: TPTOK FILENAME NUM FILENAME  */
 #line 136 "engines/hypno/grammar_arc.y"
                                       {
-		g_parsedArc->transitionVideos.push_back((yyvsp[-2].s));
-		g_parsedArc->transitionTimes.push_back((yyvsp[-1].i));
-		g_parsedArc->transitionPalettes.push_back((yyvsp[0].s));
+		ArcadeTransition at((yyvsp[-2].s), (yyvsp[0].s), "", (yyvsp[-1].i));
+		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s));
 	}
-#line 1393 "engines/hypno/grammar_arc.cpp"
+#line 1392 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 21: /* hline: TTOK FILENAME NUM  */
-#line 142 "engines/hypno/grammar_arc.y"
+#line 141 "engines/hypno/grammar_arc.y"
                             {
-		g_parsedArc->transitionVideos.push_back((yyvsp[-1].s));
-		g_parsedArc->transitionTimes.push_back((yyvsp[0].i));
-		g_parsedArc->transitionPalettes.push_back("");
+		ArcadeTransition at((yyvsp[-1].s), "", "", (yyvsp[0].i));
+		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i));
 	}
-#line 1404 "engines/hypno/grammar_arc.cpp"
+#line 1402 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 22: /* hline: TTOK NONETOK NUM  */
-#line 148 "engines/hypno/grammar_arc.y"
+#line 146 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1410 "engines/hypno/grammar_arc.cpp"
+#line 1408 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 23: /* hline: NTOK FILENAME  */
-#line 149 "engines/hypno/grammar_arc.y"
+#line 147 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
 	}
-#line 1419 "engines/hypno/grammar_arc.cpp"
+#line 1417 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 24: /* hline: NSTOK FILENAME  */
-#line 153 "engines/hypno/grammar_arc.y"
+#line 151 "engines/hypno/grammar_arc.y"
                           {
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
 	}
-#line 1428 "engines/hypno/grammar_arc.cpp"
+#line 1426 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 25: /* hline: RTOK FILENAME  */
-#line 157 "engines/hypno/grammar_arc.y"
+#line 155 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->backgroundPalette = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1436 "engines/hypno/grammar_arc.cpp"
+#line 1434 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 26: /* hline: ITOK FILENAME  */
-#line 160 "engines/hypno/grammar_arc.y"
+#line 158 "engines/hypno/grammar_arc.y"
                         {
 		g_parsedArc->player = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1445 "engines/hypno/grammar_arc.cpp"
+#line 1443 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 27: /* hline: I1TOK FILENAME  */
-#line 164 "engines/hypno/grammar_arc.y"
+#line 162 "engines/hypno/grammar_arc.y"
                          {
 		debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
 	}
-#line 1453 "engines/hypno/grammar_arc.cpp"
+#line 1451 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 28: /* hline: QTOK NUM NUM  */
-#line 167 "engines/hypno/grammar_arc.y"
+#line 165 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1459 "engines/hypno/grammar_arc.cpp"
+#line 1457 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 29: /* hline: BNTOK FILENAME  */
-#line 168 "engines/hypno/grammar_arc.y"
+#line 166 "engines/hypno/grammar_arc.y"
                          {
 		if (Common::String("B0") == (yyvsp[-1].s))
 			g_parsedArc->beforeVideo = (yyvsp[0].s);
@@ -1486,11 +1484,11 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
 	}
-#line 1490 "engines/hypno/grammar_arc.cpp"
+#line 1488 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 30: /* hline: SNTOK FILENAME enc flag  */
-#line 194 "engines/hypno/grammar_arc.y"
+#line 192 "engines/hypno/grammar_arc.y"
                                   {
 		uint32 sampleRate = 11025;
 		if (Common::String("22K") == (yyvsp[-1].s) || Common::String("22k") == (yyvsp[-1].s))
@@ -1513,137 +1511,137 @@ yyreduce:
 		}
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-2].s));
 	}
-#line 1517 "engines/hypno/grammar_arc.cpp"
+#line 1515 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 31: /* hline: HETOK BYTE NUM NUM  */
-#line 216 "engines/hypno/grammar_arc.y"
+#line 214 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		segment.end = true;
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HE %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1528 "engines/hypno/grammar_arc.cpp"
+#line 1526 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 32: /* hline: HLTOK BYTE NUM NUM  */
-#line 222 "engines/hypno/grammar_arc.y"
+#line 220 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1538 "engines/hypno/grammar_arc.cpp"
+#line 1536 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 33: /* hline: HUTOK BYTE NUM NUM  */
-#line 227 "engines/hypno/grammar_arc.y"
+#line 225 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1548 "engines/hypno/grammar_arc.cpp"
+#line 1546 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 34: /* hline: HTOK NAME NUM NUM  */
-#line 232 "engines/hypno/grammar_arc.y"
+#line 230 "engines/hypno/grammar_arc.y"
                             {
 		assert(Common::String((yyvsp[-2].s)).size() == 1);
 		Segment segment((yyvsp[-2].s)[0], (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1559 "engines/hypno/grammar_arc.cpp"
+#line 1557 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 35: /* hline: HTOK RTOK NUM NUM  */
-#line 238 "engines/hypno/grammar_arc.y"
+#line 236 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == R
 		Segment segment('R', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1569 "engines/hypno/grammar_arc.cpp"
+#line 1567 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 36: /* hline: HTOK ATOK NUM NUM  */
-#line 243 "engines/hypno/grammar_arc.y"
+#line 241 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == A
 		Segment segment('A', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H A %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1579 "engines/hypno/grammar_arc.cpp"
+#line 1577 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 37: /* hline: HTOK PTOK NUM NUM  */
-#line 248 "engines/hypno/grammar_arc.y"
+#line 246 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == P
 		Segment segment('P', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1589 "engines/hypno/grammar_arc.cpp"
+#line 1587 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 38: /* hline: HTOK LTOK NUM NUM  */
-#line 253 "engines/hypno/grammar_arc.y"
+#line 251 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == P
 		Segment segment('L', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1599 "engines/hypno/grammar_arc.cpp"
+#line 1597 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 39: /* hline: H12TOK BYTE NUM NUM  */
-#line 258 "engines/hypno/grammar_arc.y"
+#line 256 "engines/hypno/grammar_arc.y"
                               {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HN %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1609 "engines/hypno/grammar_arc.cpp"
+#line 1607 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 40: /* hline: HTOK BYTE NUM NUM  */
-#line 263 "engines/hypno/grammar_arc.y"
+#line 261 "engines/hypno/grammar_arc.y"
                             {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1619 "engines/hypno/grammar_arc.cpp"
+#line 1617 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 41: /* enc: ENCTOK  */
-#line 270 "engines/hypno/grammar_arc.y"
+#line 268 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1625 "engines/hypno/grammar_arc.cpp"
+#line 1623 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 42: /* enc: %empty  */
-#line 271 "engines/hypno/grammar_arc.y"
+#line 269 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1631 "engines/hypno/grammar_arc.cpp"
+#line 1629 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 43: /* flag: NAME  */
-#line 274 "engines/hypno/grammar_arc.y"
+#line 272 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1637 "engines/hypno/grammar_arc.cpp"
+#line 1635 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 44: /* flag: %empty  */
-#line 275 "engines/hypno/grammar_arc.y"
+#line 273 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1643 "engines/hypno/grammar_arc.cpp"
+#line 1641 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 48: /* bline: FNTOK FILENAME  */
-#line 283 "engines/hypno/grammar_arc.y"
+#line 281 "engines/hypno/grammar_arc.y"
                       {
 		shoot = new Shoot();
 		if (Common::String("F0") == (yyvsp[-1].s))
@@ -1652,404 +1650,404 @@ yyreduce:
 			shoot->explosionAnimation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1656 "engines/hypno/grammar_arc.cpp"
+#line 1654 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 49: /* bline: AVTOK NUM  */
-#line 291 "engines/hypno/grammar_arc.y"
+#line 289 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "AV %d", (yyvsp[0].i));
 	}
-#line 1664 "engines/hypno/grammar_arc.cpp"
+#line 1662 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 50: /* bline: ABTOK NUM  */
-#line 294 "engines/hypno/grammar_arc.y"
+#line 292 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "AB %d", (yyvsp[0].i));
 	}
-#line 1672 "engines/hypno/grammar_arc.cpp"
+#line 1670 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 51: /* bline: J0TOK NUM  */
-#line 297 "engines/hypno/grammar_arc.y"
+#line 295 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J0 %d", (yyvsp[0].i));
 	}
-#line 1680 "engines/hypno/grammar_arc.cpp"
+#line 1678 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 52: /* bline: FNTOK NONETOK  */
-#line 300 "engines/hypno/grammar_arc.y"
+#line 298 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE");
 	}
-#line 1690 "engines/hypno/grammar_arc.cpp"
+#line 1688 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 53: /* bline: FTOK FILENAME  */
-#line 305 "engines/hypno/grammar_arc.y"
+#line 303 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1700 "engines/hypno/grammar_arc.cpp"
+#line 1698 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 54: /* bline: ITOK NAME  */
-#line 310 "engines/hypno/grammar_arc.y"
+#line 308 "engines/hypno/grammar_arc.y"
                      {
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1709 "engines/hypno/grammar_arc.cpp"
+#line 1707 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 55: /* bline: ITOK BNTOK  */
-#line 314 "engines/hypno/grammar_arc.y"
+#line 312 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1718 "engines/hypno/grammar_arc.cpp"
+#line 1716 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 56: /* bline: ITOK ATOK  */
-#line 318 "engines/hypno/grammar_arc.y"
+#line 316 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A");
 	}
-#line 1727 "engines/hypno/grammar_arc.cpp"
+#line 1725 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 57: /* bline: ITOK CTOK  */
-#line 322 "engines/hypno/grammar_arc.y"
+#line 320 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C");
 	}
-#line 1736 "engines/hypno/grammar_arc.cpp"
+#line 1734 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 58: /* bline: ITOK DTOK  */
-#line 326 "engines/hypno/grammar_arc.y"
+#line 324 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D");
 	}
-#line 1745 "engines/hypno/grammar_arc.cpp"
+#line 1743 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 59: /* bline: ITOK FTOK  */
-#line 330 "engines/hypno/grammar_arc.y"
+#line 328 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F");
 	}
-#line 1754 "engines/hypno/grammar_arc.cpp"
+#line 1752 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 60: /* bline: ITOK GTOK  */
-#line 334 "engines/hypno/grammar_arc.y"
+#line 332 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == G
 		shoot->name = "G";
 		debugC(1, kHypnoDebugParser, "I G");
 	}
-#line 1763 "engines/hypno/grammar_arc.cpp"
+#line 1761 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 61: /* bline: ITOK HTOK  */
-#line 338 "engines/hypno/grammar_arc.y"
+#line 336 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H");
 	}
-#line 1772 "engines/hypno/grammar_arc.cpp"
+#line 1770 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 62: /* bline: ITOK ITOK  */
-#line 342 "engines/hypno/grammar_arc.y"
+#line 340 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I");
 	}
-#line 1781 "engines/hypno/grammar_arc.cpp"
+#line 1779 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 63: /* bline: ITOK JTOK  */
-#line 346 "engines/hypno/grammar_arc.y"
+#line 344 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == J
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J");
 	}
-#line 1790 "engines/hypno/grammar_arc.cpp"
+#line 1788 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 64: /* bline: ITOK KTOK  */
-#line 350 "engines/hypno/grammar_arc.y"
+#line 348 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == K
 		shoot->name = "K";
 		debugC(1, kHypnoDebugParser, "I K");
 	}
-#line 1799 "engines/hypno/grammar_arc.cpp"
+#line 1797 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 65: /* bline: ITOK NTOK  */
-#line 354 "engines/hypno/grammar_arc.y"
+#line 352 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N");
 	}
-#line 1808 "engines/hypno/grammar_arc.cpp"
+#line 1806 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 66: /* bline: ITOK OTOK  */
-#line 358 "engines/hypno/grammar_arc.y"
+#line 356 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O");
 	}
-#line 1817 "engines/hypno/grammar_arc.cpp"
+#line 1815 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 67: /* bline: ITOK PTOK  */
-#line 362 "engines/hypno/grammar_arc.y"
+#line 360 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P");
 	}
-#line 1826 "engines/hypno/grammar_arc.cpp"
+#line 1824 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 68: /* bline: ITOK QTOK  */
-#line 366 "engines/hypno/grammar_arc.y"
+#line 364 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q");
 	}
-#line 1835 "engines/hypno/grammar_arc.cpp"
+#line 1833 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 69: /* bline: ITOK RTOK  */
-#line 370 "engines/hypno/grammar_arc.y"
+#line 368 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R");
 	}
-#line 1844 "engines/hypno/grammar_arc.cpp"
+#line 1842 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 70: /* bline: ITOK SNTOK  */
-#line 374 "engines/hypno/grammar_arc.y"
+#line 372 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1853 "engines/hypno/grammar_arc.cpp"
+#line 1851 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 71: /* bline: ITOK TTOK  */
-#line 378 "engines/hypno/grammar_arc.y"
+#line 376 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T");
 	}
-#line 1862 "engines/hypno/grammar_arc.cpp"
+#line 1860 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 72: /* bline: ITOK LTOK  */
-#line 382 "engines/hypno/grammar_arc.y"
+#line 380 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == L
 		shoot->name = "L";
 		debugC(1, kHypnoDebugParser, "I L");
 	}
-#line 1871 "engines/hypno/grammar_arc.cpp"
+#line 1869 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 73: /* bline: ITOK MTOK  */
-#line 386 "engines/hypno/grammar_arc.y"
+#line 384 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == M
 		shoot->name = "M";
 		debugC(1, kHypnoDebugParser, "I M");
 	}
-#line 1880 "engines/hypno/grammar_arc.cpp"
+#line 1878 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 74: /* bline: ITOK UTOK  */
-#line 390 "engines/hypno/grammar_arc.y"
+#line 388 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == U
 		shoot->name = "U";
 		debugC(1, kHypnoDebugParser, "I U");
 	}
-#line 1889 "engines/hypno/grammar_arc.cpp"
+#line 1887 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 75: /* bline: JTOK NUM  */
-#line 394 "engines/hypno/grammar_arc.y"
+#line 392 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
 	}
-#line 1897 "engines/hypno/grammar_arc.cpp"
+#line 1895 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 76: /* bline: A0TOK NUM NUM  */
-#line 397 "engines/hypno/grammar_arc.y"
+#line 395 "engines/hypno/grammar_arc.y"
                         {
 		shoot->position = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "A0 %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1906 "engines/hypno/grammar_arc.cpp"
+#line 1904 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 77: /* bline: RTOK NUM NUM  */
-#line 401 "engines/hypno/grammar_arc.y"
+#line 399 "engines/hypno/grammar_arc.y"
                         {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1916 "engines/hypno/grammar_arc.cpp"
+#line 1914 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 78: /* bline: R01TOK NUM NUM  */
-#line 406 "engines/hypno/grammar_arc.y"
+#line 404 "engines/hypno/grammar_arc.y"
                           {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R0/1 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1925 "engines/hypno/grammar_arc.cpp"
+#line 1923 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 79: /* bline: BNTOK NUM NUM  */
-#line 410 "engines/hypno/grammar_arc.y"
+#line 408 "engines/hypno/grammar_arc.y"
                         {
 		FrameInfo fi((yyvsp[0].i), (yyvsp[-1].i));
 		shoot->bodyFrames.push_back(fi);
 		debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1935 "engines/hypno/grammar_arc.cpp"
+#line 1933 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 80: /* bline: KNTOK NUM NUM  */
-#line 415 "engines/hypno/grammar_arc.y"
+#line 413 "engines/hypno/grammar_arc.y"
                         {
 		FrameInfo fi((yyvsp[0].i), (yyvsp[-1].i));
 		shoot->explosionFrames.push_back(fi);
 		debugC(1, kHypnoDebugParser, "KN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1945 "engines/hypno/grammar_arc.cpp"
+#line 1943 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 81: /* bline: P0TOK NUM NUM  */
-#line 420 "engines/hypno/grammar_arc.y"
+#line 418 "engines/hypno/grammar_arc.y"
                         {
 		shoot->paletteSize = (yyvsp[-1].i);
 		shoot->paletteOffset = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "P0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1954 "engines/hypno/grammar_arc.cpp"
+#line 1952 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 82: /* bline: OTOK NUM NUM  */
-#line 424 "engines/hypno/grammar_arc.y"
+#line 422 "engines/hypno/grammar_arc.y"
                        {
 		if ((yyvsp[-1].i) == 0 && (yyvsp[0].i) == 0)
 			error("Invalid O command (0, 0)");
 		shoot->deathPosition = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1965 "engines/hypno/grammar_arc.cpp"
+#line 1963 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 83: /* bline: CTOK NUM  */
-#line 430 "engines/hypno/grammar_arc.y"
+#line 428 "engines/hypno/grammar_arc.y"
                     {
 		shoot->timesToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
 	}
-#line 1974 "engines/hypno/grammar_arc.cpp"
+#line 1972 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 84: /* bline: HTOK NUM  */
-#line 434 "engines/hypno/grammar_arc.y"
+#line 432 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrames.push_back((yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1982 "engines/hypno/grammar_arc.cpp"
+#line 1980 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 85: /* bline: VTOK NUM  */
-#line 437 "engines/hypno/grammar_arc.y"
+#line 435 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1988 "engines/hypno/grammar_arc.cpp"
+#line 1986 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 86: /* bline: WTOK NUM  */
-#line 438 "engines/hypno/grammar_arc.y"
+#line 436 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1996 "engines/hypno/grammar_arc.cpp"
+#line 1994 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 87: /* bline: DTOK NUM  */
-#line 441 "engines/hypno/grammar_arc.y"
+#line 439 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 2005 "engines/hypno/grammar_arc.cpp"
+#line 2003 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 88: /* bline: LTOK NUM NUM  */
-#line 445 "engines/hypno/grammar_arc.y"
+#line 443 "engines/hypno/grammar_arc.y"
                        {
 		debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 2013 "engines/hypno/grammar_arc.cpp"
+#line 2011 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 89: /* bline: LTOK NUM  */
-#line 448 "engines/hypno/grammar_arc.y"
+#line 446 "engines/hypno/grammar_arc.y"
                    {
 		debugC(1, kHypnoDebugParser, "L %d", (yyvsp[0].i));
 		FrameInfo fi((yyvsp[0].i)-1, 0);
 		shoot->bodyFrames.push_back(fi);
 	}
-#line 2023 "engines/hypno/grammar_arc.cpp"
+#line 2021 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 90: /* bline: MTOK NUM  */
-#line 453 "engines/hypno/grammar_arc.y"
+#line 451 "engines/hypno/grammar_arc.y"
                    { debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i));
 		shoot->missedAnimation = (yyvsp[0].i);
 	}
-#line 2031 "engines/hypno/grammar_arc.cpp"
+#line 2029 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 91: /* bline: KTOK NUM  */
-#line 456 "engines/hypno/grammar_arc.y"
+#line 454 "engines/hypno/grammar_arc.y"
                    { debugC(1, kHypnoDebugParser, "K %d", (yyvsp[0].i));
 		FrameInfo fi((yyvsp[0].i), 1);
 		shoot->explosionFrames.push_back(fi);
 	}
-#line 2040 "engines/hypno/grammar_arc.cpp"
+#line 2038 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 92: /* bline: KTOK NUM NUM  */
-#line 460 "engines/hypno/grammar_arc.y"
+#line 458 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "K %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 		FrameInfo fi((yyvsp[-1].i), 1);
 		shoot->explosionFrames.push_back(fi);
 	}
-#line 2049 "engines/hypno/grammar_arc.cpp"
+#line 2047 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 93: /* bline: SNTOK FILENAME enc  */
-#line 464 "engines/hypno/grammar_arc.y"
+#line 462 "engines/hypno/grammar_arc.y"
                              {
 		if (Common::String("S0") == (yyvsp[-2].s))
 			shoot->enemySound = (yyvsp[-1].s);
@@ -2059,60 +2057,60 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 2063 "engines/hypno/grammar_arc.cpp"
+#line 2061 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 94: /* bline: GTOK  */
-#line 473 "engines/hypno/grammar_arc.y"
+#line 471 "engines/hypno/grammar_arc.y"
                { debugC(1, kHypnoDebugParser, "G"); }
-#line 2069 "engines/hypno/grammar_arc.cpp"
+#line 2067 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 95: /* bline: TTOK NUM  */
-#line 474 "engines/hypno/grammar_arc.y"
+#line 472 "engines/hypno/grammar_arc.y"
                    {
 		debugC(1, kHypnoDebugParser, "T %d", (yyvsp[0].i));
 	}
-#line 2077 "engines/hypno/grammar_arc.cpp"
+#line 2075 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 96: /* bline: TTOK  */
-#line 477 "engines/hypno/grammar_arc.y"
+#line 475 "engines/hypno/grammar_arc.y"
                {
 		debugC(1, kHypnoDebugParser, "T");
 	}
-#line 2085 "engines/hypno/grammar_arc.cpp"
+#line 2083 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 97: /* bline: MTOK  */
-#line 480 "engines/hypno/grammar_arc.y"
+#line 478 "engines/hypno/grammar_arc.y"
                {
 		debugC(1, kHypnoDebugParser, "M");
 	}
-#line 2093 "engines/hypno/grammar_arc.cpp"
+#line 2091 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 98: /* bline: NTOK  */
-#line 483 "engines/hypno/grammar_arc.y"
+#line 481 "engines/hypno/grammar_arc.y"
                {
 		shoot->noEnemySound = true;
 		debugC(1, kHypnoDebugParser, "N"); }
-#line 2101 "engines/hypno/grammar_arc.cpp"
+#line 2099 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 99: /* bline: ZTOK  */
-#line 486 "engines/hypno/grammar_arc.y"
+#line 484 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot);
 		//delete shoot;
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z");
 	}
-#line 2112 "engines/hypno/grammar_arc.cpp"
+#line 2110 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 2116 "engines/hypno/grammar_arc.cpp"
+#line 2114 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 642e7a3fddf..b836af470fc 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -134,15 +134,13 @@ hline: 	CTOK NUM {
 		debugC(1, kHypnoDebugParser, "ON %d", $2);
 	}
 	| TPTOK FILENAME NUM FILENAME {
-		g_parsedArc->transitionVideos.push_back($2);
-		g_parsedArc->transitionTimes.push_back($3);
-		g_parsedArc->transitionPalettes.push_back($4);
+		ArcadeTransition at($2, $4, "", $3);
+		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", $2, $3, $4);
 	}
 	| TTOK FILENAME NUM {
-		g_parsedArc->transitionVideos.push_back($2);
-		g_parsedArc->transitionTimes.push_back($3);
-		g_parsedArc->transitionPalettes.push_back("");
+		ArcadeTransition at($2, "", "", $3);
+		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "T %s %d", $2, $3);
 	}
 	| TTOK NONETOK NUM { debugC(1, kHypnoDebugParser, "T NONE %d", $3); }


Commit: 2ee96a1d8d6e2da8abbde19d74a16e12ecce1e34
    https://github.com/scummvm/scummvm/commit/2ee96a1d8d6e2da8abbde19d74a16e12ecce1e34
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:33+02:00

Commit Message:
HYPNO: add a condition to check if the first door is open in level c60 in wet

Changed paths:
    engines/hypno/arcade.cpp
    engines/hypno/hypno.cpp
    engines/hypno/hypno.h
    engines/hypno/wet/arcade.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index b09b8236abb..1f4828abb66 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -185,6 +185,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 	debugC(1, kHypnoDebugArcade, "Starting segment of type %x", segments[_segmentIdx].type);
 	_shoots.clear();
 	_skipLevel = false;
+	_skipDefeatVideo = false;
 	_mask = nullptr;
 	_masks = nullptr;
 
@@ -311,7 +312,9 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 
 		if (_health <= 0) {
 			skipVideo(*_background);
-			if (!arc->defeatNoEnergySecondVideo.empty() && transition) {
+			if (_skipDefeatVideo)
+				; // No video
+			else if (!arc->defeatNoEnergySecondVideo.empty() && transition) {
 				disableCursor();
 				MVideo video(arc->defeatNoEnergySecondVideo, Common::Point(0, 0), false, true, false);
 				runIntro(video);
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index 3f839aa689d..da05be2e8a3 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -53,7 +53,7 @@ HypnoEngine::HypnoEngine(OSystem *syst, const ADGameDescription *gd)
 	  _levelId(0), _skipLevel(false), _health(0), _maxHealth(0),
 	  _playerFrameIdx(0), _playerFrameSep(0), _refreshConversation(false),
 	  _countdown(0), _timerStarted(false), _score(0), _lives(0),
-	  _defaultCursor(""), _checkpoint(""),
+	  _defaultCursor(""), _checkpoint(""), _skipDefeatVideo(false),
 	  _currentPlayerPosition(kPlayerLeft), _lastPlayerPosition(kPlayerLeft),
 	  _background(nullptr),
 	  _masks(nullptr),
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 281eca5efc5..b49477a7ef1 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -269,6 +269,7 @@ public:
 
 	Common::String _difficulty;
 	bool _skipLevel;
+	bool _skipDefeatVideo;
 
 	virtual void drawCursorArcade(const Common::Point &mousePos);
 	virtual void drawPlayer();
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index 61bb3efe181..82c9b6a0d27 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -464,6 +464,17 @@ void WetEngine::missedTarget(Shoot *s, ArcadeShooting *arc, MVideo &background)
 		background.decoder->pauseVideo(false);
 		updateScreen(background);
 		drawScreen();
+	} else if (_levelId == 60 && s->name == "DOOR1") {
+		_health = 0;
+		background.decoder->pauseVideo(true);
+		// In the last level, the hit boss video is used to store this ending
+		MVideo video(arc->hitBoss1Video, Common::Point(0, 0), false, true, false);
+		runIntro(video);
+		loadPalette(arc->backgroundPalette);
+		background.decoder->pauseVideo(false);
+		updateScreen(background);
+		drawScreen();
+		_skipDefeatVideo = true;
 	} else if (s->attackFrames.empty()) {
 		_health = _health - s->attackWeight;
 		hitPlayer();


Commit: fe610854fdf3d9fbb6830be48addeb010644f4b4
    https://github.com/scummvm/scummvm/commit/fe610854fdf3d9fbb6830be48addeb010644f4b4
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:33+02:00

Commit Message:
HYPNO: return to main menu after game over in the full version of wet

Changed paths:
    engines/hypno/wet/wet.cpp


diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 0112ce208b5..6b1306a93a9 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -259,7 +259,7 @@ void WetEngine::loadAssetsFullGame() {
 	_levels["<level_menu>"] = level_menu;
 	_levels["<level_menu>"]->levelIfWin = "?";
 
-	Transition *over = new Transition("<quit>");
+	Transition *over = new Transition("<main_menu>");
 	over->intros.push_back("c_misc/gameover.smk");
 	_levels["<game_over>"] = over;
 


Commit: 68004ec9b530db319b993e87c165e7b7d364b498
    https://github.com/scummvm/scummvm/commit/68004ec9b530db319b993e87c165e7b7d364b498
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: improved parser to allow to load c16 level in boyz

Changed paths:
    engines/hypno/arcade.cpp
    engines/hypno/boyz/boyz.cpp
    engines/hypno/grammar_arc.cpp
    engines/hypno/grammar_arc.y
    engines/hypno/lexer_arc.cpp
    engines/hypno/lexer_arc.l
    engines/hypno/tokens_arc.h


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 1f4828abb66..d83a92e4225 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -78,6 +78,11 @@ SegmentShootsSequence HypnoEngine::parseShootList(const Common::String &filename
 	Common::String n;
 	ShootInfo si;
 	SegmentShootsSequence seq;
+
+	// Patch to fix an issue in the parsing of the c3 level in Spiderman
+	if (filename == "c3.mi_" || filename == "c3h.mi_")
+		Common::replace(pdata, "92.B", "92,B");
+
 	// Parsing
 	pdata.trim();
 	pdata = "\n" + pdata;
@@ -112,7 +117,7 @@ SegmentShootsSequence HypnoEngine::parseShootList(const Common::String &filename
 		}
 	} else if (pdata[1] == 'S' ) { // Single element
 		SegmentShoots ss;
-		Common::StringTokenizer tok(pdata, " ,.\t\r");
+		Common::StringTokenizer tok(pdata, " ,\t\r");
 		while (!tok.empty()) {
 			t = tok.nextToken();
 			if (t[0] == '\n')
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 8b0338387d4..6a5f62200a9 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -43,6 +43,7 @@ void BoyzEngine::loadAssets() {
 	//loadArcadeLevel("c13.mi_", "??", "??", "");
 	loadArcadeLevel("c14.mi_", "c15.mi_", "??", "");
 	loadArcadeLevel("c15.mi_", "c16.mi_", "??", "");
+	loadArcadeLevel("c16.mi_", "c17.mi_", "??", "");
 
 	loadLib("sound/", "misc/sound.lib", true);
 
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 8ea27ed10e3..663e973cce7 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -159,40 +159,41 @@ enum yysymbol_kind_t
   YYSYMBOL_PTOK = 27,                      /* PTOK  */
   YYSYMBOL_FTOK = 28,                      /* FTOK  */
   YYSYMBOL_TTOK = 29,                      /* TTOK  */
-  YYSYMBOL_TPTOK = 30,                     /* TPTOK  */
-  YYSYMBOL_ATOK = 31,                      /* ATOK  */
-  YYSYMBOL_VTOK = 32,                      /* VTOK  */
-  YYSYMBOL_OTOK = 33,                      /* OTOK  */
-  YYSYMBOL_LTOK = 34,                      /* LTOK  */
-  YYSYMBOL_MTOK = 35,                      /* MTOK  */
-  YYSYMBOL_NTOK = 36,                      /* NTOK  */
-  YYSYMBOL_NSTOK = 37,                     /* NSTOK  */
-  YYSYMBOL_RTOK = 38,                      /* RTOK  */
-  YYSYMBOL_R01TOK = 39,                    /* R01TOK  */
-  YYSYMBOL_ITOK = 40,                      /* ITOK  */
-  YYSYMBOL_I1TOK = 41,                     /* I1TOK  */
-  YYSYMBOL_GTOK = 42,                      /* GTOK  */
-  YYSYMBOL_JTOK = 43,                      /* JTOK  */
-  YYSYMBOL_J0TOK = 44,                     /* J0TOK  */
-  YYSYMBOL_KTOK = 45,                      /* KTOK  */
-  YYSYMBOL_UTOK = 46,                      /* UTOK  */
-  YYSYMBOL_ZTOK = 47,                      /* ZTOK  */
-  YYSYMBOL_NONETOK = 48,                   /* NONETOK  */
-  YYSYMBOL_A0TOK = 49,                     /* A0TOK  */
-  YYSYMBOL_P0TOK = 50,                     /* P0TOK  */
-  YYSYMBOL_WTOK = 51,                      /* WTOK  */
-  YYSYMBOL_XTOK = 52,                      /* XTOK  */
-  YYSYMBOL_CB3TOK = 53,                    /* CB3TOK  */
-  YYSYMBOL_C02TOK = 54,                    /* C02TOK  */
-  YYSYMBOL_YYACCEPT = 55,                  /* $accept  */
-  YYSYMBOL_start = 56,                     /* start  */
-  YYSYMBOL_57_1 = 57,                      /* $@1  */
-  YYSYMBOL_header = 58,                    /* header  */
-  YYSYMBOL_hline = 59,                     /* hline  */
-  YYSYMBOL_enc = 60,                       /* enc  */
-  YYSYMBOL_flag = 61,                      /* flag  */
-  YYSYMBOL_body = 62,                      /* body  */
-  YYSYMBOL_bline = 63                      /* bline  */
+  YYSYMBOL_TATOK = 30,                     /* TATOK  */
+  YYSYMBOL_TPTOK = 31,                     /* TPTOK  */
+  YYSYMBOL_ATOK = 32,                      /* ATOK  */
+  YYSYMBOL_VTOK = 33,                      /* VTOK  */
+  YYSYMBOL_OTOK = 34,                      /* OTOK  */
+  YYSYMBOL_LTOK = 35,                      /* LTOK  */
+  YYSYMBOL_MTOK = 36,                      /* MTOK  */
+  YYSYMBOL_NTOK = 37,                      /* NTOK  */
+  YYSYMBOL_NSTOK = 38,                     /* NSTOK  */
+  YYSYMBOL_RTOK = 39,                      /* RTOK  */
+  YYSYMBOL_R01TOK = 40,                    /* R01TOK  */
+  YYSYMBOL_ITOK = 41,                      /* ITOK  */
+  YYSYMBOL_I1TOK = 42,                     /* I1TOK  */
+  YYSYMBOL_GTOK = 43,                      /* GTOK  */
+  YYSYMBOL_JTOK = 44,                      /* JTOK  */
+  YYSYMBOL_J0TOK = 45,                     /* J0TOK  */
+  YYSYMBOL_KTOK = 46,                      /* KTOK  */
+  YYSYMBOL_UTOK = 47,                      /* UTOK  */
+  YYSYMBOL_ZTOK = 48,                      /* ZTOK  */
+  YYSYMBOL_NONETOK = 49,                   /* NONETOK  */
+  YYSYMBOL_A0TOK = 50,                     /* A0TOK  */
+  YYSYMBOL_P0TOK = 51,                     /* P0TOK  */
+  YYSYMBOL_WTOK = 52,                      /* WTOK  */
+  YYSYMBOL_XTOK = 53,                      /* XTOK  */
+  YYSYMBOL_CB3TOK = 54,                    /* CB3TOK  */
+  YYSYMBOL_C02TOK = 55,                    /* C02TOK  */
+  YYSYMBOL_YYACCEPT = 56,                  /* $accept  */
+  YYSYMBOL_start = 57,                     /* start  */
+  YYSYMBOL_58_1 = 58,                      /* $@1  */
+  YYSYMBOL_header = 59,                    /* header  */
+  YYSYMBOL_hline = 60,                     /* hline  */
+  YYSYMBOL_enc = 61,                       /* enc  */
+  YYSYMBOL_flag = 62,                      /* flag  */
+  YYSYMBOL_body = 63,                      /* body  */
+  YYSYMBOL_bline = 64                      /* bline  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -520,19 +521,19 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  6
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   186
+#define YYLAST   191
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  55
+#define YYNTOKENS  56
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  9
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  99
+#define YYNRULES  100
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  196
+#define YYNSTATES  200
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   309
+#define YYMAXUTOK   310
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -576,7 +577,8 @@ static const yytype_int8 yytranslate[] =
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55
 };
 
 #if HYPNO_ARC_DEBUG
@@ -585,14 +587,15 @@ static const yytype_int16 yyrline[] =
 {
        0,    78,    78,    78,    79,    82,    83,    84,    87,    91,
       95,    99,   100,   101,   105,   110,   111,   112,   117,   127,
-     136,   141,   146,   147,   151,   155,   158,   162,   165,   166,
-     192,   214,   220,   225,   230,   236,   241,   246,   251,   256,
-     261,   268,   269,   272,   273,   276,   277,   278,   281,   289,
-     292,   295,   298,   303,   308,   312,   316,   320,   324,   328,
-     332,   336,   340,   344,   348,   352,   356,   360,   364,   368,
-     372,   376,   380,   384,   388,   392,   395,   399,   404,   408,
-     413,   418,   422,   428,   432,   435,   436,   439,   443,   446,
-     451,   454,   458,   462,   471,   472,   475,   478,   481,   484
+     136,   141,   146,   151,   152,   156,   160,   163,   167,   170,
+     171,   197,   219,   225,   230,   235,   241,   246,   251,   256,
+     261,   266,   273,   274,   277,   278,   281,   282,   283,   286,
+     294,   297,   300,   303,   308,   313,   317,   321,   325,   329,
+     333,   337,   341,   345,   349,   353,   357,   361,   365,   369,
+     373,   377,   381,   385,   389,   393,   397,   400,   404,   409,
+     413,   418,   423,   427,   433,   437,   440,   441,   444,   448,
+     451,   456,   459,   463,   467,   476,   477,   480,   483,   486,
+     489
 };
 #endif
 
@@ -612,11 +615,11 @@ static const char *const yytname[] =
   "BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "ENCTOK", "ONTOK", "NUM",
   "BYTE", "COMMENT", "AVTOK", "ABTOK", "CTOK", "DTOK", "HTOK", "HETOK",
   "HLTOK", "H12TOK", "HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK", "FTOK",
-  "TTOK", "TPTOK", "ATOK", "VTOK", "OTOK", "LTOK", "MTOK", "NTOK", "NSTOK",
-  "RTOK", "R01TOK", "ITOK", "I1TOK", "GTOK", "JTOK", "J0TOK", "KTOK",
-  "UTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK",
-  "C02TOK", "$accept", "start", "$@1", "header", "hline", "enc", "flag",
-  "body", "bline", YY_NULLPTR
+  "TTOK", "TATOK", "TPTOK", "ATOK", "VTOK", "OTOK", "LTOK", "MTOK", "NTOK",
+  "NSTOK", "RTOK", "R01TOK", "ITOK", "I1TOK", "GTOK", "JTOK", "J0TOK",
+  "KTOK", "UTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK",
+  "CB3TOK", "C02TOK", "$accept", "start", "$@1", "header", "hline", "enc",
+  "flag", "body", "bline", YY_NULLPTR
 };
 
 static const char *
@@ -626,7 +629,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-111)
+#define YYPACT_NINF (-114)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -640,26 +643,26 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-       8,  -111,     8,     7,    87,  -111,  -111,     5,    11,     6,
-       9,    29,   118,     4,    30,    39,    40,    87,    42,    43,
-      44,    -1,    16,    46,    10,    47,    53,    56,    57,    61,
-      62,    63,    59,    21,    87,  -111,    65,    70,  -111,  -111,
-      72,    74,    77,    82,    83,    84,    85,    88,    89,    90,
-    -111,    91,   101,  -111,   114,   117,   120,   122,   123,  -111,
-     124,  -111,  -111,  -111,  -111,  -111,  -111,   125,    75,  -111,
-    -111,    66,  -111,   126,   127,   128,   129,   130,   131,   132,
-     134,   135,   136,  -111,  -111,  -111,  -111,    73,  -111,  -111,
-    -111,   138,    -5,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
-    -111,  -111,  -111,  -111,  -111,  -111,   139,   141,   150,   143,
-       1,   145,   146,   147,   148,   149,    -5,   158,   151,   152,
-     153,   154,   155,  -111,   156,   157,    45,  -111,   159,   160,
-     161,  -111,   162,   163,   164,    78,    -5,  -111,   165,    65,
-     166,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
-    -111,  -111,   167,   168,  -111,   169,   170,  -111,  -111,  -111,
-    -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
-    -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
-     171,   172,   173,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
-    -111,  -111,  -111,  -111,  -111,  -111
+      10,  -114,    10,    16,    90,  -114,  -114,     6,    13,     7,
+       9,    26,    65,    15,    30,    32,    42,    90,    44,    45,
+      46,     0,    48,    18,    49,    -3,    50,    55,    59,    63,
+      66,    67,    69,    57,    29,    90,  -114,    70,    73,  -114,
+    -114,    75,    77,    86,    87,    91,    93,    94,   104,   113,
+     118,  -114,   121,   122,  -114,   123,   124,    98,   126,   127,
+     128,  -114,   129,  -114,  -114,  -114,  -114,  -114,  -114,   130,
+     119,  -114,  -114,   141,  -114,   133,   134,   135,   136,   137,
+     138,   139,   140,   142,   143,  -114,  -114,  -114,  -114,    70,
+     149,  -114,  -114,  -114,   144,    -4,  -114,  -114,  -114,  -114,
+    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
+     145,   146,   155,   148,     2,   150,   151,   152,   153,   154,
+      -4,   157,   156,   158,   159,   160,   161,  -114,   162,   163,
+      47,  -114,   164,   165,   166,  -114,   167,   168,   169,   114,
+      -4,  -114,   170,    70,   171,  -114,  -114,  -114,  -114,  -114,
+    -114,  -114,  -114,  -114,  -114,  -114,   172,   173,  -114,   174,
+     175,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
+    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
+    -114,  -114,  -114,  -114,   176,   177,   178,  -114,  -114,  -114,
+    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -670,35 +673,35 @@ static const yytype_int8 yydefact[] =
        0,     2,     0,     0,     7,     4,     1,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     7,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     7,    29,    42,    19,     8,    10,
+       0,     0,     0,     0,     0,     7,    30,    43,    19,     8,
+      10,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     6,     0,     0,     9,     0,     0,     0,     0,     0,
+       0,    16,     0,    13,    24,    25,    26,    27,    28,     0,
+       0,     5,    42,    45,    18,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    29,    11,    22,    23,    43,
+       0,    12,    15,    17,     0,    48,    44,    31,    35,    41,
+      38,    37,    39,    36,    32,    33,    40,    34,    21,    20,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       6,     0,     0,     9,     0,     0,     0,     0,     0,    16,
-       0,    13,    23,    24,    25,    26,    27,     0,     0,     5,
-      41,    44,    18,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    28,    11,    21,    22,     0,    12,    15,
-      17,     0,    47,    43,    30,    34,    40,    37,    36,    38,
-      35,    31,    32,    39,    33,    20,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    47,     0,    96,     0,
-       0,     0,    97,    98,     0,     0,     0,    94,     0,     0,
-       0,    99,     0,     0,     0,     0,    47,    14,     0,    42,
-       0,    48,    52,    49,    50,    83,    87,    84,    46,    53,
-      95,    85,     0,    89,    90,     0,     0,    54,    55,    70,
-      57,    58,    61,    68,    67,    59,    71,    56,    66,    72,
-      73,    65,    69,    62,    60,    63,    64,    74,    75,    51,
-      91,     0,     0,    86,     3,    45,    79,    93,    80,    82,
-      88,    77,    78,    92,    76,    81
+      48,     0,    97,     0,     0,     0,    98,    99,     0,     0,
+       0,    95,     0,     0,     0,   100,     0,     0,     0,     0,
+      48,    14,     0,    43,     0,    49,    53,    50,    51,    84,
+      88,    85,    47,    54,    96,    86,     0,    90,    91,     0,
+       0,    55,    56,    71,    58,    59,    62,    69,    68,    60,
+      72,    57,    67,    73,    74,    66,    70,    63,    61,    64,
+      65,    75,    76,    52,    92,     0,     0,    87,     3,    46,
+      80,    94,    81,    83,    89,    78,    79,    93,    77,    82
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -111,   184,  -111,    -9,  -111,    31,  -111,  -110,  -111
+    -114,   189,  -114,    -9,  -114,   -89,  -114,  -113,  -114
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,     3,     4,    33,    34,    71,    94,   135,   136
+       0,     3,     4,    34,    35,    73,    97,   139,   140
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -706,89 +709,92 @@ static const yytype_uint8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-     107,   108,   109,    54,   110,   141,   148,     6,    50,    35,
-     111,   112,   113,   114,   115,    36,     1,    46,    37,   116,
-      56,    38,    58,   117,   118,    69,   185,   119,   120,   121,
-     122,   123,     2,   124,   125,   126,    59,   127,   128,   129,
-     130,    39,   131,    47,   132,   133,   134,    55,   157,   142,
-     158,   159,    48,    49,    51,    52,    53,    61,    57,    60,
-      62,    63,   160,   161,   162,    64,    65,    66,    68,    93,
-     163,    67,   164,   165,   166,    70,   167,   105,   168,   169,
-     170,   171,    72,   172,    73,   173,    74,   174,   175,    75,
-     176,   177,     7,     8,    76,    77,    78,    79,     9,    92,
-      80,    81,    82,    83,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    84,    19,    20,    21,    22,    23,    24,
-      25,    40,    26,    27,    28,    29,    85,    30,    31,    86,
-     184,    41,    87,    32,    88,    89,    90,    91,    95,    96,
-      97,    98,    99,   100,   101,    42,   102,   103,   104,    43,
-     106,   137,    44,   138,   139,   140,    45,   143,   144,   145,
-     146,   147,   149,   150,   151,   152,   153,   154,   155,   156,
-     187,   178,   179,   180,   181,   182,   183,   186,   188,   189,
-     190,   191,   192,   193,   194,   195,     5
+     108,   111,   112,   113,    55,   114,   145,   152,    51,    60,
+      36,   115,   116,   117,   118,   119,     6,    37,     1,    38,
+     120,    39,    58,    61,   121,   122,    71,   189,    47,   123,
+     124,   125,   126,   127,     2,   128,   129,   130,    40,   131,
+     132,   133,   134,    48,   135,    49,   136,   137,   138,    56,
+     161,   146,   162,   163,   191,    50,    52,    53,    54,    63,
+      57,    59,    62,    64,   164,   165,   166,    65,    41,    69,
+      66,    67,   167,    68,   168,   169,   170,    70,    42,   171,
+      72,   172,   173,   174,   175,    74,   176,    75,   177,    76,
+     178,   179,    43,   180,   181,     7,     8,    44,    77,    78,
+      45,     9,    89,    79,    46,    80,    81,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    82,    19,    20,    21,
+      22,    23,    24,    25,    26,    83,    27,    28,    29,    30,
+      84,    31,    32,    85,    86,    87,    88,    33,    90,    91,
+      92,    93,    94,    95,    96,    98,    99,   100,   101,   102,
+     103,   104,   105,   109,   106,   107,   110,   141,   142,   143,
+     144,   153,   147,   148,   149,   150,   151,   188,   154,     0,
+     155,   156,   157,   158,   159,   160,   182,   183,   184,   185,
+     186,   187,   190,   192,   193,   194,   195,   196,   197,   198,
+     199,     5
 };
 
-static const yytype_uint8 yycheck[] =
+static const yytype_int16 yycheck[] =
 {
-       5,     6,     7,     4,     9,     4,   116,     0,    17,     4,
-      15,    16,    17,    18,    19,     4,     8,    13,    12,    24,
-       4,    12,    12,    28,    29,    34,   136,    32,    33,    34,
-      35,    36,    24,    38,    39,    40,    26,    42,    43,    44,
-      45,    12,    47,    13,    49,    50,    51,    48,     3,    48,
-       5,     6,    13,    13,    12,    12,    12,     4,    12,    12,
-       4,     4,    17,    18,    19,     4,     4,     4,    47,     3,
-      25,    12,    27,    28,    29,    10,    31,     4,    33,    34,
-      35,    36,    12,    38,    12,    40,    12,    42,    43,    12,
-      45,    46,     5,     6,    12,    12,    12,    12,    11,    24,
-      12,    12,    12,    12,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    12,    27,    28,    29,    30,    31,    32,
-      33,     3,    35,    36,    37,    38,    12,    40,    41,    12,
-      52,    13,    12,    46,    12,    12,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,    27,    12,    12,    12,    31,
-      12,    12,    34,    12,     4,    12,    38,    12,    12,    12,
-      12,    12,     4,    12,    12,    12,    12,    12,    12,    12,
-     139,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,    12,     2
+      89,     5,     6,     7,     4,     9,     4,   120,    17,    12,
+       4,    15,    16,    17,    18,    19,     0,     4,     8,    12,
+      24,    12,     4,    26,    28,    29,    35,   140,    13,    33,
+      34,    35,    36,    37,    24,    39,    40,    41,    12,    43,
+      44,    45,    46,    13,    48,    13,    50,    51,    52,    49,
+       3,    49,     5,     6,   143,    13,    12,    12,    12,     4,
+      12,    12,    12,     4,    17,    18,    19,     4,     3,    12,
+       4,     4,    25,     4,    27,    28,    29,    48,    13,    32,
+      10,    34,    35,    36,    37,    12,    39,    12,    41,    12,
+      43,    44,    27,    46,    47,     5,     6,    32,    12,    12,
+      35,    11,     4,    12,    39,    12,    12,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    12,    27,    28,    29,
+      30,    31,    32,    33,    34,    12,    36,    37,    38,    39,
+      12,    41,    42,    12,    12,    12,    12,    47,    12,    12,
+      12,    12,    12,    24,     3,    12,    12,    12,    12,    12,
+      12,    12,    12,     4,    12,    12,    12,    12,    12,     4,
+      12,     4,    12,    12,    12,    12,    12,    53,    12,    -1,
+      12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
+      12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
+      12,     2
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
    state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
-       0,     8,    24,    56,    57,    56,     0,     5,     6,    11,
+       0,     8,    24,    57,    58,    57,     0,     5,     6,    11,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    27,
-      28,    29,    30,    31,    32,    33,    35,    36,    37,    38,
-      40,    41,    46,    58,    59,     4,     4,    12,    12,    12,
-       3,    13,    27,    31,    34,    38,    13,    13,    13,    13,
-      58,    12,    12,    12,     4,    48,     4,    12,    12,    26,
-      12,     4,     4,     4,     4,     4,     4,    12,    47,    58,
-      10,    60,    12,    12,    12,    12,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-      12,    12,    24,     3,    61,    12,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,     4,    12,     5,     6,     7,
-       9,    15,    16,    17,    18,    19,    24,    28,    29,    32,
-      33,    34,    35,    36,    38,    39,    40,    42,    43,    44,
-      45,    47,    49,    50,    51,    62,    63,    12,    12,     4,
-      12,     4,    48,    12,    12,    12,    12,    12,    62,     4,
-      12,    12,    12,    12,    12,    12,    12,     3,     5,     6,
-      17,    18,    19,    25,    27,    28,    29,    31,    33,    34,
-      35,    36,    38,    40,    42,    43,    45,    46,    12,    12,
-      12,    12,    12,    12,    52,    62,    12,    60,    12,    12,
-      12,    12,    12,    12,    12,    12
+      28,    29,    30,    31,    32,    33,    34,    36,    37,    38,
+      39,    41,    42,    47,    59,    60,     4,     4,    12,    12,
+      12,     3,    13,    27,    32,    35,    39,    13,    13,    13,
+      13,    59,    12,    12,    12,     4,    49,    12,     4,    12,
+      12,    26,    12,     4,     4,     4,     4,     4,     4,    12,
+      48,    59,    10,    61,    12,    12,    12,    12,    12,    12,
+      12,    12,    12,    12,    12,    12,    12,    12,    12,     4,
+      12,    12,    12,    12,    12,    24,     3,    62,    12,    12,
+      12,    12,    12,    12,    12,    12,    12,    12,    61,     4,
+      12,     5,     6,     7,     9,    15,    16,    17,    18,    19,
+      24,    28,    29,    33,    34,    35,    36,    37,    39,    40,
+      41,    43,    44,    45,    46,    48,    50,    51,    52,    63,
+      64,    12,    12,     4,    12,     4,    49,    12,    12,    12,
+      12,    12,    63,     4,    12,    12,    12,    12,    12,    12,
+      12,     3,     5,     6,    17,    18,    19,    25,    27,    28,
+      29,    32,    34,    35,    36,    37,    39,    41,    43,    44,
+      46,    47,    12,    12,    12,    12,    12,    12,    53,    63,
+      12,    61,    12,    12,    12,    12,    12,    12,    12,    12
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_int8 yyr1[] =
 {
-       0,    55,    57,    56,    56,    58,    58,    58,    59,    59,
-      59,    59,    59,    59,    59,    59,    59,    59,    59,    59,
-      59,    59,    59,    59,    59,    59,    59,    59,    59,    59,
-      59,    59,    59,    59,    59,    59,    59,    59,    59,    59,
-      59,    60,    60,    61,    61,    62,    62,    62,    63,    63,
-      63,    63,    63,    63,    63,    63,    63,    63,    63,    63,
-      63,    63,    63,    63,    63,    63,    63,    63,    63,    63,
-      63,    63,    63,    63,    63,    63,    63,    63,    63,    63,
-      63,    63,    63,    63,    63,    63,    63,    63,    63,    63,
-      63,    63,    63,    63,    63,    63,    63,    63,    63,    63
+       0,    56,    58,    57,    57,    59,    59,    59,    60,    60,
+      60,    60,    60,    60,    60,    60,    60,    60,    60,    60,
+      60,    60,    60,    60,    60,    60,    60,    60,    60,    60,
+      60,    60,    60,    60,    60,    60,    60,    60,    60,    60,
+      60,    60,    61,    61,    62,    62,    63,    63,    63,    64,
+      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
+      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
+      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
+      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
+      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
+      64
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -796,14 +802,15 @@ static const yytype_int8 yyr2[] =
 {
        0,     2,     0,     7,     2,     2,     2,     0,     2,     2,
        2,     3,     3,     2,     5,     3,     2,     3,     3,     2,
-       4,     3,     3,     2,     2,     2,     2,     2,     3,     2,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     1,     0,     1,     0,     2,     2,     0,     2,     2,
+       4,     4,     3,     3,     2,     2,     2,     2,     2,     3,
+       2,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     1,     0,     1,     0,     2,     2,     0,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     3,     3,     3,     3,
-       3,     3,     3,     2,     2,     2,     2,     2,     3,     2,
-       2,     2,     3,     3,     1,     2,     1,     1,     1,     1
+       2,     2,     2,     2,     2,     2,     2,     3,     3,     3,
+       3,     3,     3,     3,     2,     2,     2,     2,     2,     3,
+       2,     2,     2,     3,     3,     1,     2,     1,     1,     1,
+       1
 };
 
 
@@ -1269,7 +1276,7 @@ yyreduce:
   case 2: /* $@1: %empty  */
 #line 78 "engines/hypno/grammar_arc.y"
              { g_parsedArc->mode = (yyvsp[0].s); }
-#line 1273 "engines/hypno/grammar_arc.cpp"
+#line 1280 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 8: /* hline: CTOK NUM  */
@@ -1278,7 +1285,7 @@ yyreduce:
 		g_parsedArc->id = (yyvsp[0].i);
 		HYPNO_ARC_default_sound_rate = 0;
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1282 "engines/hypno/grammar_arc.cpp"
+#line 1289 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 9: /* hline: FTOK NUM  */
@@ -1287,7 +1294,7 @@ yyreduce:
 		HYPNO_ARC_default_sound_rate = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i));
 	}
-#line 1291 "engines/hypno/grammar_arc.cpp"
+#line 1298 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 10: /* hline: DTOK NUM  */
@@ -1296,19 +1303,19 @@ yyreduce:
 		g_parsedArc->frameDelay = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 1300 "engines/hypno/grammar_arc.cpp"
+#line 1307 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 11: /* hline: PTOK NUM NUM  */
 #line 99 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1306 "engines/hypno/grammar_arc.cpp"
+#line 1313 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 12: /* hline: ATOK NUM NUM  */
 #line 100 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1312 "engines/hypno/grammar_arc.cpp"
+#line 1319 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 13: /* hline: MTOK FILENAME  */
@@ -1317,7 +1324,7 @@ yyreduce:
 		debugC(1, kHypnoDebugParser, "M %s", (yyvsp[0].s));
 		g_parsedArc->maskVideo = (yyvsp[0].s);
 	}
-#line 1321 "engines/hypno/grammar_arc.cpp"
+#line 1328 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 14: /* hline: UTOK NUM NUM NUM NUM  */
@@ -1327,19 +1334,19 @@ yyreduce:
 		ScriptInfo si((yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 		g_parsedArc->script.push_back(si);
 	}
-#line 1331 "engines/hypno/grammar_arc.cpp"
+#line 1338 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 15: /* hline: VTOK NUM NUM  */
 #line 110 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1337 "engines/hypno/grammar_arc.cpp"
+#line 1344 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 16: /* hline: VTOK RESTOK  */
 #line 111 "engines/hypno/grammar_arc.y"
                       { debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1343 "engines/hypno/grammar_arc.cpp"
+#line 1350 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 17: /* hline: OTOK NUM NUM  */
@@ -1349,7 +1356,7 @@ yyreduce:
 		g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1353 "engines/hypno/grammar_arc.cpp"
+#line 1360 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 18: /* hline: ONTOK NUM NUM  */
@@ -1364,7 +1371,7 @@ yyreduce:
 		} else
 			error("Invalid objective: '%s'", (yyvsp[-2].s));
 		debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1368 "engines/hypno/grammar_arc.cpp"
+#line 1375 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 19: /* hline: ONTOK NUM  */
@@ -1378,7 +1385,7 @@ yyreduce:
 			error("Invalid objective: '%s'", (yyvsp[-1].s));
 		debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
 	}
-#line 1382 "engines/hypno/grammar_arc.cpp"
+#line 1389 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 20: /* hline: TPTOK FILENAME NUM FILENAME  */
@@ -1388,76 +1395,86 @@ yyreduce:
 		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s));
 	}
-#line 1392 "engines/hypno/grammar_arc.cpp"
+#line 1399 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 21: /* hline: TTOK FILENAME NUM  */
+  case 21: /* hline: TATOK NUM FILENAME enc  */
 #line 141 "engines/hypno/grammar_arc.y"
+                                 {
+		ArcadeTransition at("", "", (yyvsp[-1].s), (yyvsp[-2].i));
+		g_parsedArc->transitions.push_back(at);
+		debugC(1, kHypnoDebugParser, "Ta %d %s", (yyvsp[-2].i), (yyvsp[-1].s));
+	}
+#line 1409 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 22: /* hline: TTOK FILENAME NUM  */
+#line 146 "engines/hypno/grammar_arc.y"
                             {
 		ArcadeTransition at((yyvsp[-1].s), "", "", (yyvsp[0].i));
 		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i));
 	}
-#line 1402 "engines/hypno/grammar_arc.cpp"
+#line 1419 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 22: /* hline: TTOK NONETOK NUM  */
-#line 146 "engines/hypno/grammar_arc.y"
+  case 23: /* hline: TTOK NONETOK NUM  */
+#line 151 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1408 "engines/hypno/grammar_arc.cpp"
+#line 1425 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 23: /* hline: NTOK FILENAME  */
-#line 147 "engines/hypno/grammar_arc.y"
+  case 24: /* hline: NTOK FILENAME  */
+#line 152 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
 	}
-#line 1417 "engines/hypno/grammar_arc.cpp"
+#line 1434 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 24: /* hline: NSTOK FILENAME  */
-#line 151 "engines/hypno/grammar_arc.y"
+  case 25: /* hline: NSTOK FILENAME  */
+#line 156 "engines/hypno/grammar_arc.y"
                           {
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
 	}
-#line 1426 "engines/hypno/grammar_arc.cpp"
+#line 1443 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 25: /* hline: RTOK FILENAME  */
-#line 155 "engines/hypno/grammar_arc.y"
+  case 26: /* hline: RTOK FILENAME  */
+#line 160 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->backgroundPalette = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1434 "engines/hypno/grammar_arc.cpp"
+#line 1451 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 26: /* hline: ITOK FILENAME  */
-#line 158 "engines/hypno/grammar_arc.y"
+  case 27: /* hline: ITOK FILENAME  */
+#line 163 "engines/hypno/grammar_arc.y"
                         {
 		g_parsedArc->player = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1443 "engines/hypno/grammar_arc.cpp"
+#line 1460 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 27: /* hline: I1TOK FILENAME  */
-#line 162 "engines/hypno/grammar_arc.y"
+  case 28: /* hline: I1TOK FILENAME  */
+#line 167 "engines/hypno/grammar_arc.y"
                          {
 		debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
 	}
-#line 1451 "engines/hypno/grammar_arc.cpp"
+#line 1468 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 28: /* hline: QTOK NUM NUM  */
-#line 165 "engines/hypno/grammar_arc.y"
+  case 29: /* hline: QTOK NUM NUM  */
+#line 170 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1457 "engines/hypno/grammar_arc.cpp"
+#line 1474 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 29: /* hline: BNTOK FILENAME  */
-#line 166 "engines/hypno/grammar_arc.y"
+  case 30: /* hline: BNTOK FILENAME  */
+#line 171 "engines/hypno/grammar_arc.y"
                          {
 		if (Common::String("B0") == (yyvsp[-1].s))
 			g_parsedArc->beforeVideo = (yyvsp[0].s);
@@ -1484,11 +1501,11 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
 	}
-#line 1488 "engines/hypno/grammar_arc.cpp"
+#line 1505 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 30: /* hline: SNTOK FILENAME enc flag  */
-#line 192 "engines/hypno/grammar_arc.y"
+  case 31: /* hline: SNTOK FILENAME enc flag  */
+#line 197 "engines/hypno/grammar_arc.y"
                                   {
 		uint32 sampleRate = 11025;
 		if (Common::String("22K") == (yyvsp[-1].s) || Common::String("22k") == (yyvsp[-1].s))
@@ -1511,137 +1528,137 @@ yyreduce:
 		}
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-2].s));
 	}
-#line 1515 "engines/hypno/grammar_arc.cpp"
+#line 1532 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 31: /* hline: HETOK BYTE NUM NUM  */
-#line 214 "engines/hypno/grammar_arc.y"
+  case 32: /* hline: HETOK BYTE NUM NUM  */
+#line 219 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		segment.end = true;
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HE %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1526 "engines/hypno/grammar_arc.cpp"
+#line 1543 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 32: /* hline: HLTOK BYTE NUM NUM  */
-#line 220 "engines/hypno/grammar_arc.y"
+  case 33: /* hline: HLTOK BYTE NUM NUM  */
+#line 225 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1536 "engines/hypno/grammar_arc.cpp"
+#line 1553 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 33: /* hline: HUTOK BYTE NUM NUM  */
-#line 225 "engines/hypno/grammar_arc.y"
+  case 34: /* hline: HUTOK BYTE NUM NUM  */
+#line 230 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1546 "engines/hypno/grammar_arc.cpp"
+#line 1563 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 34: /* hline: HTOK NAME NUM NUM  */
-#line 230 "engines/hypno/grammar_arc.y"
+  case 35: /* hline: HTOK NAME NUM NUM  */
+#line 235 "engines/hypno/grammar_arc.y"
                             {
 		assert(Common::String((yyvsp[-2].s)).size() == 1);
 		Segment segment((yyvsp[-2].s)[0], (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1557 "engines/hypno/grammar_arc.cpp"
+#line 1574 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 35: /* hline: HTOK RTOK NUM NUM  */
-#line 236 "engines/hypno/grammar_arc.y"
+  case 36: /* hline: HTOK RTOK NUM NUM  */
+#line 241 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == R
 		Segment segment('R', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1567 "engines/hypno/grammar_arc.cpp"
+#line 1584 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 36: /* hline: HTOK ATOK NUM NUM  */
-#line 241 "engines/hypno/grammar_arc.y"
+  case 37: /* hline: HTOK ATOK NUM NUM  */
+#line 246 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == A
 		Segment segment('A', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H A %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1577 "engines/hypno/grammar_arc.cpp"
+#line 1594 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 37: /* hline: HTOK PTOK NUM NUM  */
-#line 246 "engines/hypno/grammar_arc.y"
+  case 38: /* hline: HTOK PTOK NUM NUM  */
+#line 251 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == P
 		Segment segment('P', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1587 "engines/hypno/grammar_arc.cpp"
+#line 1604 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 38: /* hline: HTOK LTOK NUM NUM  */
-#line 251 "engines/hypno/grammar_arc.y"
+  case 39: /* hline: HTOK LTOK NUM NUM  */
+#line 256 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == P
 		Segment segment('L', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1597 "engines/hypno/grammar_arc.cpp"
+#line 1614 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 39: /* hline: H12TOK BYTE NUM NUM  */
-#line 256 "engines/hypno/grammar_arc.y"
+  case 40: /* hline: H12TOK BYTE NUM NUM  */
+#line 261 "engines/hypno/grammar_arc.y"
                               {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HN %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1607 "engines/hypno/grammar_arc.cpp"
+#line 1624 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 40: /* hline: HTOK BYTE NUM NUM  */
-#line 261 "engines/hypno/grammar_arc.y"
+  case 41: /* hline: HTOK BYTE NUM NUM  */
+#line 266 "engines/hypno/grammar_arc.y"
                             {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1617 "engines/hypno/grammar_arc.cpp"
+#line 1634 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 41: /* enc: ENCTOK  */
-#line 268 "engines/hypno/grammar_arc.y"
+  case 42: /* enc: ENCTOK  */
+#line 273 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1623 "engines/hypno/grammar_arc.cpp"
+#line 1640 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 42: /* enc: %empty  */
-#line 269 "engines/hypno/grammar_arc.y"
+  case 43: /* enc: %empty  */
+#line 274 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1629 "engines/hypno/grammar_arc.cpp"
+#line 1646 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 43: /* flag: NAME  */
-#line 272 "engines/hypno/grammar_arc.y"
+  case 44: /* flag: NAME  */
+#line 277 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1635 "engines/hypno/grammar_arc.cpp"
+#line 1652 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 44: /* flag: %empty  */
-#line 273 "engines/hypno/grammar_arc.y"
+  case 45: /* flag: %empty  */
+#line 278 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1641 "engines/hypno/grammar_arc.cpp"
+#line 1658 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 48: /* bline: FNTOK FILENAME  */
-#line 281 "engines/hypno/grammar_arc.y"
+  case 49: /* bline: FNTOK FILENAME  */
+#line 286 "engines/hypno/grammar_arc.y"
                       {
 		shoot = new Shoot();
 		if (Common::String("F0") == (yyvsp[-1].s))
@@ -1650,404 +1667,404 @@ yyreduce:
 			shoot->explosionAnimation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1654 "engines/hypno/grammar_arc.cpp"
+#line 1671 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 49: /* bline: AVTOK NUM  */
-#line 289 "engines/hypno/grammar_arc.y"
+  case 50: /* bline: AVTOK NUM  */
+#line 294 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "AV %d", (yyvsp[0].i));
 	}
-#line 1662 "engines/hypno/grammar_arc.cpp"
+#line 1679 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 50: /* bline: ABTOK NUM  */
-#line 292 "engines/hypno/grammar_arc.y"
+  case 51: /* bline: ABTOK NUM  */
+#line 297 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "AB %d", (yyvsp[0].i));
 	}
-#line 1670 "engines/hypno/grammar_arc.cpp"
+#line 1687 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 51: /* bline: J0TOK NUM  */
-#line 295 "engines/hypno/grammar_arc.y"
+  case 52: /* bline: J0TOK NUM  */
+#line 300 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J0 %d", (yyvsp[0].i));
 	}
-#line 1678 "engines/hypno/grammar_arc.cpp"
+#line 1695 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 52: /* bline: FNTOK NONETOK  */
-#line 298 "engines/hypno/grammar_arc.y"
+  case 53: /* bline: FNTOK NONETOK  */
+#line 303 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE");
 	}
-#line 1688 "engines/hypno/grammar_arc.cpp"
+#line 1705 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 53: /* bline: FTOK FILENAME  */
-#line 303 "engines/hypno/grammar_arc.y"
+  case 54: /* bline: FTOK FILENAME  */
+#line 308 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1698 "engines/hypno/grammar_arc.cpp"
+#line 1715 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 54: /* bline: ITOK NAME  */
-#line 308 "engines/hypno/grammar_arc.y"
+  case 55: /* bline: ITOK NAME  */
+#line 313 "engines/hypno/grammar_arc.y"
                      {
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1707 "engines/hypno/grammar_arc.cpp"
+#line 1724 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 55: /* bline: ITOK BNTOK  */
-#line 312 "engines/hypno/grammar_arc.y"
+  case 56: /* bline: ITOK BNTOK  */
+#line 317 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1716 "engines/hypno/grammar_arc.cpp"
+#line 1733 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 56: /* bline: ITOK ATOK  */
-#line 316 "engines/hypno/grammar_arc.y"
+  case 57: /* bline: ITOK ATOK  */
+#line 321 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A");
 	}
-#line 1725 "engines/hypno/grammar_arc.cpp"
+#line 1742 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 57: /* bline: ITOK CTOK  */
-#line 320 "engines/hypno/grammar_arc.y"
+  case 58: /* bline: ITOK CTOK  */
+#line 325 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C");
 	}
-#line 1734 "engines/hypno/grammar_arc.cpp"
+#line 1751 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 58: /* bline: ITOK DTOK  */
-#line 324 "engines/hypno/grammar_arc.y"
+  case 59: /* bline: ITOK DTOK  */
+#line 329 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D");
 	}
-#line 1743 "engines/hypno/grammar_arc.cpp"
+#line 1760 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 59: /* bline: ITOK FTOK  */
-#line 328 "engines/hypno/grammar_arc.y"
+  case 60: /* bline: ITOK FTOK  */
+#line 333 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F");
 	}
-#line 1752 "engines/hypno/grammar_arc.cpp"
+#line 1769 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 60: /* bline: ITOK GTOK  */
-#line 332 "engines/hypno/grammar_arc.y"
+  case 61: /* bline: ITOK GTOK  */
+#line 337 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == G
 		shoot->name = "G";
 		debugC(1, kHypnoDebugParser, "I G");
 	}
-#line 1761 "engines/hypno/grammar_arc.cpp"
+#line 1778 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 61: /* bline: ITOK HTOK  */
-#line 336 "engines/hypno/grammar_arc.y"
+  case 62: /* bline: ITOK HTOK  */
+#line 341 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H");
 	}
-#line 1770 "engines/hypno/grammar_arc.cpp"
+#line 1787 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 62: /* bline: ITOK ITOK  */
-#line 340 "engines/hypno/grammar_arc.y"
+  case 63: /* bline: ITOK ITOK  */
+#line 345 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I");
 	}
-#line 1779 "engines/hypno/grammar_arc.cpp"
+#line 1796 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 63: /* bline: ITOK JTOK  */
-#line 344 "engines/hypno/grammar_arc.y"
+  case 64: /* bline: ITOK JTOK  */
+#line 349 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == J
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J");
 	}
-#line 1788 "engines/hypno/grammar_arc.cpp"
+#line 1805 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 64: /* bline: ITOK KTOK  */
-#line 348 "engines/hypno/grammar_arc.y"
+  case 65: /* bline: ITOK KTOK  */
+#line 353 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == K
 		shoot->name = "K";
 		debugC(1, kHypnoDebugParser, "I K");
 	}
-#line 1797 "engines/hypno/grammar_arc.cpp"
+#line 1814 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 65: /* bline: ITOK NTOK  */
-#line 352 "engines/hypno/grammar_arc.y"
+  case 66: /* bline: ITOK NTOK  */
+#line 357 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N");
 	}
-#line 1806 "engines/hypno/grammar_arc.cpp"
+#line 1823 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 66: /* bline: ITOK OTOK  */
-#line 356 "engines/hypno/grammar_arc.y"
+  case 67: /* bline: ITOK OTOK  */
+#line 361 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O");
 	}
-#line 1815 "engines/hypno/grammar_arc.cpp"
+#line 1832 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 67: /* bline: ITOK PTOK  */
-#line 360 "engines/hypno/grammar_arc.y"
+  case 68: /* bline: ITOK PTOK  */
+#line 365 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P");
 	}
-#line 1824 "engines/hypno/grammar_arc.cpp"
+#line 1841 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 68: /* bline: ITOK QTOK  */
-#line 364 "engines/hypno/grammar_arc.y"
+  case 69: /* bline: ITOK QTOK  */
+#line 369 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q");
 	}
-#line 1833 "engines/hypno/grammar_arc.cpp"
+#line 1850 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 69: /* bline: ITOK RTOK  */
-#line 368 "engines/hypno/grammar_arc.y"
+  case 70: /* bline: ITOK RTOK  */
+#line 373 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R");
 	}
-#line 1842 "engines/hypno/grammar_arc.cpp"
+#line 1859 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 70: /* bline: ITOK SNTOK  */
-#line 372 "engines/hypno/grammar_arc.y"
+  case 71: /* bline: ITOK SNTOK  */
+#line 377 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1851 "engines/hypno/grammar_arc.cpp"
+#line 1868 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 71: /* bline: ITOK TTOK  */
-#line 376 "engines/hypno/grammar_arc.y"
+  case 72: /* bline: ITOK TTOK  */
+#line 381 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T");
 	}
-#line 1860 "engines/hypno/grammar_arc.cpp"
+#line 1877 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 72: /* bline: ITOK LTOK  */
-#line 380 "engines/hypno/grammar_arc.y"
+  case 73: /* bline: ITOK LTOK  */
+#line 385 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == L
 		shoot->name = "L";
 		debugC(1, kHypnoDebugParser, "I L");
 	}
-#line 1869 "engines/hypno/grammar_arc.cpp"
+#line 1886 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 73: /* bline: ITOK MTOK  */
-#line 384 "engines/hypno/grammar_arc.y"
+  case 74: /* bline: ITOK MTOK  */
+#line 389 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == M
 		shoot->name = "M";
 		debugC(1, kHypnoDebugParser, "I M");
 	}
-#line 1878 "engines/hypno/grammar_arc.cpp"
+#line 1895 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 74: /* bline: ITOK UTOK  */
-#line 388 "engines/hypno/grammar_arc.y"
+  case 75: /* bline: ITOK UTOK  */
+#line 393 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == U
 		shoot->name = "U";
 		debugC(1, kHypnoDebugParser, "I U");
 	}
-#line 1887 "engines/hypno/grammar_arc.cpp"
+#line 1904 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 75: /* bline: JTOK NUM  */
-#line 392 "engines/hypno/grammar_arc.y"
+  case 76: /* bline: JTOK NUM  */
+#line 397 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
 	}
-#line 1895 "engines/hypno/grammar_arc.cpp"
+#line 1912 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 76: /* bline: A0TOK NUM NUM  */
-#line 395 "engines/hypno/grammar_arc.y"
+  case 77: /* bline: A0TOK NUM NUM  */
+#line 400 "engines/hypno/grammar_arc.y"
                         {
 		shoot->position = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "A0 %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1904 "engines/hypno/grammar_arc.cpp"
+#line 1921 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 77: /* bline: RTOK NUM NUM  */
-#line 399 "engines/hypno/grammar_arc.y"
+  case 78: /* bline: RTOK NUM NUM  */
+#line 404 "engines/hypno/grammar_arc.y"
                         {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1914 "engines/hypno/grammar_arc.cpp"
+#line 1931 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 78: /* bline: R01TOK NUM NUM  */
-#line 404 "engines/hypno/grammar_arc.y"
+  case 79: /* bline: R01TOK NUM NUM  */
+#line 409 "engines/hypno/grammar_arc.y"
                           {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R0/1 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1923 "engines/hypno/grammar_arc.cpp"
+#line 1940 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 79: /* bline: BNTOK NUM NUM  */
-#line 408 "engines/hypno/grammar_arc.y"
+  case 80: /* bline: BNTOK NUM NUM  */
+#line 413 "engines/hypno/grammar_arc.y"
                         {
 		FrameInfo fi((yyvsp[0].i), (yyvsp[-1].i));
 		shoot->bodyFrames.push_back(fi);
 		debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1933 "engines/hypno/grammar_arc.cpp"
+#line 1950 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 80: /* bline: KNTOK NUM NUM  */
-#line 413 "engines/hypno/grammar_arc.y"
+  case 81: /* bline: KNTOK NUM NUM  */
+#line 418 "engines/hypno/grammar_arc.y"
                         {
 		FrameInfo fi((yyvsp[0].i), (yyvsp[-1].i));
 		shoot->explosionFrames.push_back(fi);
 		debugC(1, kHypnoDebugParser, "KN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1943 "engines/hypno/grammar_arc.cpp"
+#line 1960 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 81: /* bline: P0TOK NUM NUM  */
-#line 418 "engines/hypno/grammar_arc.y"
+  case 82: /* bline: P0TOK NUM NUM  */
+#line 423 "engines/hypno/grammar_arc.y"
                         {
 		shoot->paletteSize = (yyvsp[-1].i);
 		shoot->paletteOffset = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "P0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1952 "engines/hypno/grammar_arc.cpp"
+#line 1969 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 82: /* bline: OTOK NUM NUM  */
-#line 422 "engines/hypno/grammar_arc.y"
+  case 83: /* bline: OTOK NUM NUM  */
+#line 427 "engines/hypno/grammar_arc.y"
                        {
 		if ((yyvsp[-1].i) == 0 && (yyvsp[0].i) == 0)
 			error("Invalid O command (0, 0)");
 		shoot->deathPosition = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1963 "engines/hypno/grammar_arc.cpp"
+#line 1980 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 83: /* bline: CTOK NUM  */
-#line 428 "engines/hypno/grammar_arc.y"
+  case 84: /* bline: CTOK NUM  */
+#line 433 "engines/hypno/grammar_arc.y"
                     {
 		shoot->timesToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
 	}
-#line 1972 "engines/hypno/grammar_arc.cpp"
+#line 1989 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 84: /* bline: HTOK NUM  */
-#line 432 "engines/hypno/grammar_arc.y"
+  case 85: /* bline: HTOK NUM  */
+#line 437 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrames.push_back((yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1980 "engines/hypno/grammar_arc.cpp"
+#line 1997 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 85: /* bline: VTOK NUM  */
-#line 435 "engines/hypno/grammar_arc.y"
+  case 86: /* bline: VTOK NUM  */
+#line 440 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1986 "engines/hypno/grammar_arc.cpp"
+#line 2003 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 86: /* bline: WTOK NUM  */
-#line 436 "engines/hypno/grammar_arc.y"
+  case 87: /* bline: WTOK NUM  */
+#line 441 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1994 "engines/hypno/grammar_arc.cpp"
+#line 2011 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 87: /* bline: DTOK NUM  */
-#line 439 "engines/hypno/grammar_arc.y"
+  case 88: /* bline: DTOK NUM  */
+#line 444 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 2003 "engines/hypno/grammar_arc.cpp"
+#line 2020 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 88: /* bline: LTOK NUM NUM  */
-#line 443 "engines/hypno/grammar_arc.y"
+  case 89: /* bline: LTOK NUM NUM  */
+#line 448 "engines/hypno/grammar_arc.y"
                        {
 		debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 2011 "engines/hypno/grammar_arc.cpp"
+#line 2028 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 89: /* bline: LTOK NUM  */
-#line 446 "engines/hypno/grammar_arc.y"
+  case 90: /* bline: LTOK NUM  */
+#line 451 "engines/hypno/grammar_arc.y"
                    {
 		debugC(1, kHypnoDebugParser, "L %d", (yyvsp[0].i));
 		FrameInfo fi((yyvsp[0].i)-1, 0);
 		shoot->bodyFrames.push_back(fi);
 	}
-#line 2021 "engines/hypno/grammar_arc.cpp"
+#line 2038 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 90: /* bline: MTOK NUM  */
-#line 451 "engines/hypno/grammar_arc.y"
+  case 91: /* bline: MTOK NUM  */
+#line 456 "engines/hypno/grammar_arc.y"
                    { debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i));
 		shoot->missedAnimation = (yyvsp[0].i);
 	}
-#line 2029 "engines/hypno/grammar_arc.cpp"
+#line 2046 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 91: /* bline: KTOK NUM  */
-#line 454 "engines/hypno/grammar_arc.y"
+  case 92: /* bline: KTOK NUM  */
+#line 459 "engines/hypno/grammar_arc.y"
                    { debugC(1, kHypnoDebugParser, "K %d", (yyvsp[0].i));
 		FrameInfo fi((yyvsp[0].i), 1);
 		shoot->explosionFrames.push_back(fi);
 	}
-#line 2038 "engines/hypno/grammar_arc.cpp"
+#line 2055 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 92: /* bline: KTOK NUM NUM  */
-#line 458 "engines/hypno/grammar_arc.y"
+  case 93: /* bline: KTOK NUM NUM  */
+#line 463 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "K %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 		FrameInfo fi((yyvsp[-1].i), 1);
 		shoot->explosionFrames.push_back(fi);
 	}
-#line 2047 "engines/hypno/grammar_arc.cpp"
+#line 2064 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 93: /* bline: SNTOK FILENAME enc  */
-#line 462 "engines/hypno/grammar_arc.y"
+  case 94: /* bline: SNTOK FILENAME enc  */
+#line 467 "engines/hypno/grammar_arc.y"
                              {
 		if (Common::String("S0") == (yyvsp[-2].s))
 			shoot->enemySound = (yyvsp[-1].s);
@@ -2057,60 +2074,60 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 2061 "engines/hypno/grammar_arc.cpp"
+#line 2078 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 94: /* bline: GTOK  */
-#line 471 "engines/hypno/grammar_arc.y"
+  case 95: /* bline: GTOK  */
+#line 476 "engines/hypno/grammar_arc.y"
                { debugC(1, kHypnoDebugParser, "G"); }
-#line 2067 "engines/hypno/grammar_arc.cpp"
+#line 2084 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 95: /* bline: TTOK NUM  */
-#line 472 "engines/hypno/grammar_arc.y"
+  case 96: /* bline: TTOK NUM  */
+#line 477 "engines/hypno/grammar_arc.y"
                    {
 		debugC(1, kHypnoDebugParser, "T %d", (yyvsp[0].i));
 	}
-#line 2075 "engines/hypno/grammar_arc.cpp"
+#line 2092 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 96: /* bline: TTOK  */
-#line 475 "engines/hypno/grammar_arc.y"
+  case 97: /* bline: TTOK  */
+#line 480 "engines/hypno/grammar_arc.y"
                {
 		debugC(1, kHypnoDebugParser, "T");
 	}
-#line 2083 "engines/hypno/grammar_arc.cpp"
+#line 2100 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 97: /* bline: MTOK  */
-#line 478 "engines/hypno/grammar_arc.y"
+  case 98: /* bline: MTOK  */
+#line 483 "engines/hypno/grammar_arc.y"
                {
 		debugC(1, kHypnoDebugParser, "M");
 	}
-#line 2091 "engines/hypno/grammar_arc.cpp"
+#line 2108 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 98: /* bline: NTOK  */
-#line 481 "engines/hypno/grammar_arc.y"
+  case 99: /* bline: NTOK  */
+#line 486 "engines/hypno/grammar_arc.y"
                {
 		shoot->noEnemySound = true;
 		debugC(1, kHypnoDebugParser, "N"); }
-#line 2099 "engines/hypno/grammar_arc.cpp"
+#line 2116 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 99: /* bline: ZTOK  */
-#line 484 "engines/hypno/grammar_arc.y"
+  case 100: /* bline: ZTOK  */
+#line 489 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot);
 		//delete shoot;
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z");
 	}
-#line 2110 "engines/hypno/grammar_arc.cpp"
+#line 2127 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 2114 "engines/hypno/grammar_arc.cpp"
+#line 2131 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index b836af470fc..225117c19a1 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -59,7 +59,7 @@ using namespace Hypno;
 %token<i> NUM BYTE
 // header
 %token COMMENT AVTOK ABTOK CTOK DTOK HTOK HETOK HLTOK H12TOK HUTOK RETTOK QTOK RESTOK
-%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK LTOK MTOK NTOK NSTOK RTOK R01TOK
+%token PTOK FTOK TTOK TATOK TPTOK ATOK VTOK OTOK LTOK MTOK NTOK NSTOK RTOK R01TOK
 %token ITOK I1TOK GTOK JTOK J0TOK KTOK UTOK ZTOK
 
 // body
@@ -138,6 +138,11 @@ hline: 	CTOK NUM {
 		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", $2, $3, $4);
 	}
+	| TATOK NUM FILENAME enc {
+		ArcadeTransition at("", "", $3, $2);
+		g_parsedArc->transitions.push_back(at);
+		debugC(1, kHypnoDebugParser, "Ta %d %s", $2, $3);
+	}
 	| TTOK FILENAME NUM {
 		ArcadeTransition at($2, "", "", $3);
 		g_parsedArc->transitions.push_back(at);
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index 19de6982b7f..f0f0a0a68c4 100644
--- a/engines/hypno/lexer_arc.cpp
+++ b/engines/hypno/lexer_arc.cpp
@@ -633,8 +633,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 54
-#define YY_END_OF_BUFFER 55
+#define YY_NUM_RULES 55
+#define YY_END_OF_BUFFER 56
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -642,17 +642,19 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[85] =
+static const flex_int16_t yy_accept[92] =
     {   0,
-        0,    0,   55,   53,   52,   50,   50,   53,   45,   45,
-       45,   45,   53,   12,   46,    2,    3,   46,   36,   27,
+        0,    0,   56,   54,   53,   51,   51,   54,   46,   46,
+       46,   46,   54,   12,   47,    2,    3,   47,   37,   27,
         8,   22,   25,   26,   16,   19,   17,   14,    9,   28,
-       20,   46,   33,   29,   13,   31,   32,   46,   30,   46,
-       52,   45,   48,   45,   45,   45,   45,    0,   47,   38,
-       46,   10,   11,   39,   35,    7,    4,    5,    6,   23,
-       24,   40,   18,   46,   15,   41,   21,   37,   34,   42,
-       46,   44,   44,   43,   43,   45,   51,   46,    0,    1,
-        0,    0,   49,    0
+       20,   47,   33,   29,   13,   31,   32,   47,   30,   47,
+       53,   46,   49,   46,   46,   46,   46,    0,   47,   39,
+       47,   47,   10,   11,   48,   40,   40,   36,    7,    4,
+        5,    6,   23,   24,   41,   18,   47,   15,   42,   21,
+       38,   35,   34,   43,   43,   47,   47,   47,   45,   45,
+       44,   44,   46,   52,   47,    0,    1,    0,    0,   50,
+        0
+
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -666,11 +668,11 @@ static const YY_CHAR yy_ec[256] =
         1,    1,    1,    1,   15,   16,   17,   18,   19,   20,
        21,   22,   23,   24,   25,   26,   27,   28,   29,   30,
        31,   32,   33,   34,   35,   36,   37,   38,   39,   40,
-        1,    8,    1,    1,   41,    1,   42,   42,   42,   42,
+        1,   41,    1,    1,   42,    1,   43,   44,   44,   44,
 
-       42,   42,   42,   42,   42,   42,   43,   42,   42,   42,
-       42,   44,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,    1,   45,    1,    1,    1,    1,    1,    1,
+       44,   44,   44,   44,   44,   44,   45,   44,   44,   44,
+       44,   46,   44,   44,   44,   44,   44,   44,   44,   44,
+       44,   44,    1,   47,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -687,113 +689,205 @@ static const YY_CHAR yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static const YY_CHAR yy_meta[46] =
+static const YY_CHAR yy_meta[48] =
     {   0,
-        1,    1,    2,    1,    1,    1,    3,    4,    5,    5,
-        5,    5,    5,    1,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    1
+        1,    1,    2,    1,    1,    1,    3,    4,    4,    4,
+        4,    4,    4,    1,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+        5,    4,    4,    4,    4,    4,    1
     } ;
 
-static const flex_int16_t yy_base[91] =
+static const flex_int16_t yy_base[98] =
     {   0,
-        0,    0,  219,  220,  216,  220,  220,   37,   42,   47,
-       52,   57,    0,   63,   92,  209,  208,  207,   65,  206,
-       87,   72,   75,   77,  205,  204,   86,  108,   84,  203,
-      111,  115,   88,  202,  192,  186,  184,  106,  183,    0,
-      188,  124,    0,  129,  142,  118,  121,  185,    0,  180,
-      178,  176,  175,  174,  173,  172,  171,  170,  169,  168,
-      166,  165,  220,  137,  164,  163,  162,  161,  154,  152,
-        0,    0,  220,    0,  220,  150,  155,  149,  147,  136,
-      122,  120,  220,  220,  193,  198,  200,  202,   76,  204
+        0,    0,  157,  616,  153,  616,  616,   39,   44,   49,
+       54,   59,    0,   65,   99,   79,   85,  119,  125,  133,
+      167,  137,  172,  201,  205,  208,  218,  239,  245,  241,
+      259,  278,  282,  285,  287,  304,  316,  344,  339,  141,
+      137,   73,    0,  112,  382,   55,  159,  109,  335,  349,
+      386,  389,  391,  409,    0,  412,  422,  426,  432,  443,
+      445,  449,  455,  466,  472,  616,  476,  486,  489,  499,
+      503,  509,  520,  522,  526,  368,  554,  560,    0,  616,
+        0,  616,  214,  101,  564,   93,  566,   94,   90,  616,
+      616,  599,  604,  606,  608,   75,  610
+
     } ;
 
-static const flex_int16_t yy_def[91] =
+static const flex_int16_t yy_def[98] =
     {   0,
-       84,    1,   84,   84,   84,   84,   84,   84,   85,   85,
-       85,   85,   86,   87,   87,   87,   87,   87,   87,   87,
-       87,   87,   87,   87,   87,   87,   87,   87,   87,   87,
-       87,   87,   87,   87,   87,   87,   87,   88,   87,   89,
-       84,   84,   85,   85,   85,   45,   45,   86,   90,   87,
-       87,   87,   87,   87,   87,   87,   87,   87,   87,   87,
-       87,   87,   84,   87,   87,   87,   87,   87,   87,   87,
-       89,   85,   84,   85,   84,   45,   86,   87,   84,   87,
-       84,   84,   84,    0,   84,   84,   84,   84,   84,   84
+       91,    1,   91,   91,   91,   91,   91,   91,   92,   92,
+       92,   92,   93,   94,   94,   94,   94,   94,   94,   94,
+       94,   21,   21,   94,   21,   21,   21,   21,   21,   21,
+       21,   94,   21,   21,   21,   21,   21,   95,   21,   96,
+       91,   91,   92,   92,   92,   45,   45,   93,   97,   21,
+       21,   21,   21,   21,   97,   21,   21,   21,   21,   21,
+       21,   21,   21,   21,   21,   91,   21,   21,   21,   21,
+       21,   21,   21,   21,   21,   91,   96,   96,   92,   91,
+       92,   91,   45,   93,   21,   91,   21,   91,   91,   91,
+        0,   91,   91,   91,   91,   91,   91
+
     } ;
 
-static const flex_int16_t yy_nxt[266] =
+static const flex_int16_t yy_nxt[664] =
     {   0,
         4,    5,    6,    7,    4,    4,    8,    4,    9,   10,
        11,   12,    9,   13,   14,   15,   16,   17,   18,   19,
        20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
        30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
-       40,   18,   18,   18,    7,   42,   42,   42,   42,   42,
-       44,   44,   44,   44,   44,   44,   45,   44,   44,   44,
-       44,   44,   46,   44,   44,   44,   44,   47,   44,   44,
-       49,   50,   49,   55,   55,   55,   55,   55,   52,   49,
-       71,   60,   49,   61,   49,   62,   62,   62,   62,   62,
-       63,   49,   66,   49,   49,   49,   56,   56,   53,   49,
-
-       54,   54,   54,   54,   54,   57,   54,   54,   54,   54,
-       54,   54,   58,   49,   64,   49,   65,   65,   49,   67,
-       67,   59,   49,   68,   68,   68,   68,   68,   83,   76,
-       82,   69,   42,   42,   42,   42,   42,   44,   44,   44,
-       44,   44,   74,   49,   49,   43,   51,   51,   51,   51,
-       44,   44,   44,   44,   44,   79,   49,   81,   77,   49,
-       74,   49,   75,   43,   78,   84,   72,   80,   49,   49,
-       49,   49,   49,   49,   43,   49,   49,   49,   49,   49,
-       49,   49,   49,   49,   72,   49,   73,   49,   77,   41,
-       49,   49,   43,   49,   84,   43,   43,   43,   48,   49,
-
-       48,   48,   48,   51,   51,   70,   70,   49,   49,   49,
-       49,   49,   49,   49,   49,   49,   49,   41,   84,    3,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84,   84,   84
+        4,   40,   18,   18,   18,   18,    7,   42,   42,   42,
+       42,   42,   44,   44,   44,   44,   44,   44,   45,   44,
+       44,   44,   44,   44,   46,   44,   44,   44,   44,   47,
+       44,   44,   49,   50,   51,   51,   51,   51,   78,   81,
+       53,   42,   42,   42,   42,   42,   49,   51,   51,   51,
+       51,   51,   49,   51,   51,   51,   51,   51,   90,   81,
+
+       54,   82,   89,   88,   84,   55,   49,   56,   56,   56,
+       56,   56,   84,   57,   57,   57,   57,   57,   57,   55,
+       44,   44,   44,   44,   44,   55,   49,   51,   51,   51,
+       51,   51,   49,   58,   58,   58,   58,   58,   41,   55,
+       49,   51,   51,   51,   51,   51,   63,   51,   76,   77,
+       77,   77,   77,   77,   41,   52,   91,   91,   91,   55,
+       91,   91,   52,   91,   91,   55,   91,   83,   91,   91,
+       91,   52,   91,   55,   49,   51,   59,   59,   51,   51,
+       64,   51,   51,   43,   91,   60,   91,   91,   91,   91,
+       52,   91,   61,   91,   91,   91,   91,   52,   91,   91,
+
+       91,   62,   91,   43,   91,   91,   52,   55,   49,   65,
+       65,   65,   65,   65,   51,   51,   91,   51,   51,   86,
+       91,   91,   66,   52,   91,   91,   52,   51,   51,   91,
+       52,   91,   91,   52,   91,   91,   52,   91,   43,   52,
+       91,   55,   52,   52,   91,   91,   67,   68,   68,   51,
+       51,   51,   52,   69,   51,   51,   91,   52,   43,   52,
+       91,   91,   91,   52,   52,   91,   52,   70,   70,   51,
+       52,   91,   91,   52,   91,   52,   91,   52,   91,   52,
+       91,   91,   91,   91,   52,   49,   71,   71,   71,   71,
+       71,   51,   51,   52,   51,   51,   51,   51,   91,   91,
+
+       52,   91,   91,   52,   91,   52,   91,   52,   91,   91,
+       52,   91,   52,   51,   51,   91,   52,   91,   55,   52,
+       91,   52,   52,   91,   72,   51,   51,   73,   91,   52,
+       91,   91,   91,   91,   52,   91,   91,   91,   52,   91,
+       91,   52,   49,   49,   49,   49,   49,   49,   51,   51,
+       52,   49,   74,   74,   74,   74,   74,   52,   51,   51,
+       91,   91,   91,   91,   52,   91,   91,   52,   91,   91,
+       91,   91,   91,   52,   52,   76,   76,   76,   76,   76,
+       76,   91,   91,   52,   55,   52,   52,   52,   52,   52,
+       44,   44,   44,   44,   44,   51,   51,   91,   51,   51,
+
+       51,   51,   91,   91,   52,   91,   79,   52,   91,   52,
+       91,   52,   91,   91,   52,   91,   52,   91,   51,   51,
+       52,   51,   51,   52,   91,   52,   79,   52,   80,   91,
+       52,   51,   51,   91,   52,   51,   51,   52,   91,   91,
+       52,   51,   51,   52,   52,   91,   52,   52,   91,   91,
+       52,   52,   51,   51,   51,   51,   52,   52,   51,   51,
+       52,   52,   91,   52,   51,   51,   52,   52,   52,   91,
+       52,   91,   91,   52,   52,   51,   51,   52,   91,   52,
+       52,   51,   51,   52,   52,   51,   51,   91,   91,   52,
+       52,   52,   91,   91,   52,   51,   51,   52,   51,   51,
+
+       52,   52,   91,   85,   52,   91,   52,   52,   51,   51,
+       52,   52,   51,   51,   52,   91,   91,   52,   51,   51,
+       52,   52,   91,   52,   52,   91,   91,   52,   52,   51,
+       51,   51,   51,   52,   52,   51,   51,   52,   52,   91,
+       52,   91,   91,   52,   52,   52,   91,   52,   91,   91,
+       91,   52,   91,   91,   52,   91,   52,   91,   91,   91,
+       52,   76,   77,   77,   77,   77,   77,   76,   77,   77,
+       77,   77,   77,   51,   51,   51,   51,   91,   91,   91,
+       91,   91,   87,   91,   52,   91,   91,   91,   91,   52,
+       91,   52,   91,   91,   91,   91,   91,   91,   52,   91,
+
+       52,   43,   43,   43,   48,   91,   48,   48,   48,   52,
+       52,   75,   75,   55,   55,    3,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91
     } ;
 
-static const flex_int16_t yy_chk[266] =
+static const flex_int16_t yy_chk[664] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    8,    8,    8,    8,    8,
-        9,    9,    9,    9,    9,   10,   10,   10,   10,   10,
-       11,   11,   11,   11,   11,   12,   12,   12,   12,   12,
-       14,   14,   19,   19,   19,   19,   19,   19,   14,   22,
-       89,   22,   23,   23,   24,   24,   24,   24,   24,   24,
-       27,   29,   29,   27,   21,   33,   21,   21,   14,   15,
-
-       15,   15,   15,   15,   15,   21,   15,   15,   15,   15,
-       15,   15,   21,   38,   27,   28,   28,   28,   31,   31,
-       31,   21,   32,   32,   32,   32,   32,   32,   82,   47,
-       81,   33,   42,   42,   42,   42,   42,   44,   44,   44,
-       44,   44,   46,   80,   64,   47,   38,   38,   38,   38,
-       45,   45,   45,   45,   45,   76,   78,   79,   77,   70,
-       46,   69,   46,   47,   64,   47,   45,   78,   68,   67,
-       66,   65,   62,   61,   76,   60,   59,   58,   57,   56,
-       55,   54,   53,   52,   45,   51,   45,   50,   48,   41,
-       39,   37,   76,   36,   76,   85,   85,   85,   86,   35,
-
-       86,   86,   86,   87,   87,   88,   88,   90,   90,   34,
-       30,   26,   25,   20,   18,   17,   16,    5,    3,   84,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   84,   84,   84
+        1,    1,    1,    1,    1,    1,    1,    8,    8,    8,
+        8,    8,    9,    9,    9,    9,    9,   10,   10,   10,
+       10,   10,   11,   11,   11,   11,   11,   12,   12,   12,
+       12,   12,   14,   14,   14,   14,   14,   14,   96,   46,
+       14,   42,   42,   42,   42,   42,   16,   16,   16,   16,
+       16,   16,   17,   17,   17,   17,   17,   17,   89,   46,
+
+       14,   46,   88,   86,   84,   14,   15,   15,   15,   15,
+       15,   15,   48,   15,   15,   15,   15,   15,   15,   16,
+       44,   44,   44,   44,   44,   17,   18,   18,   18,   18,
+       18,   18,   19,   19,   19,   19,   19,   19,   41,   15,
+       20,   20,   20,   20,   20,   20,   22,   22,   40,   40,
+       40,   40,   40,   40,    5,   22,    3,    0,    0,   18,
+        0,    0,   22,    0,    0,   19,    0,   47,    0,    0,
+        0,   22,    0,   20,   21,   21,   21,   21,   21,   21,
+       23,   23,   23,   47,    0,   21,    0,    0,    0,    0,
+       23,    0,   21,    0,    0,    0,    0,   23,    0,    0,
+
+        0,   21,    0,   47,    0,   47,   23,   21,   24,   24,
+       24,   24,   24,   24,   25,   25,    0,   26,   26,   83,
+        0,    0,   27,   25,    0,    0,   26,   27,   27,    0,
+       25,    0,    0,   26,    0,    0,   27,    0,   83,   25,
+        0,   24,   26,   27,    0,    0,   27,   28,   28,   28,
+       30,   30,   27,   29,   29,   29,    0,   28,   83,   30,
+       83,    0,    0,   29,   28,    0,   30,   31,   31,   31,
+       29,    0,    0,   28,    0,   30,    0,   31,    0,   29,
+        0,    0,    0,    0,   31,   32,   32,   32,   32,   32,
+       32,   33,   33,   31,   34,   34,   35,   35,    0,    0,
+
+       33,    0,    0,   34,    0,   35,    0,   33,    0,    0,
+       34,    0,   35,   36,   36,    0,   33,    0,   32,   34,
+        0,   35,   36,    0,   33,   37,   37,   33,    0,   36,
+        0,    0,    0,    0,   37,    0,    0,    0,   36,    0,
+        0,   37,   49,   49,   49,   49,   49,   49,   39,   39,
+       37,   38,   38,   38,   38,   38,   38,   39,   50,   50,
+        0,    0,    0,    0,   39,    0,    0,   50,    0,    0,
+        0,    0,    0,   39,   50,   76,   76,   76,   76,   76,
+       76,    0,    0,   50,   38,   38,   38,   38,   38,   38,
+       45,   45,   45,   45,   45,   51,   51,    0,   52,   52,
+
+       53,   53,    0,    0,   51,    0,   45,   52,    0,   53,
+        0,   51,    0,    0,   52,    0,   53,    0,   54,   54,
+       51,   56,   56,   52,    0,   53,   45,   54,   45,    0,
+       56,   57,   57,    0,   54,   58,   58,   56,    0,    0,
+       57,   59,   59,   54,   58,    0,   56,   57,    0,    0,
+       59,   58,   60,   60,   61,   61,   57,   59,   62,   62,
+       58,   60,    0,   61,   63,   63,   59,   62,   60,    0,
+       61,    0,    0,   63,   62,   64,   64,   60,    0,   61,
+       63,   65,   65,   62,   64,   67,   67,    0,    0,   63,
+       65,   64,    0,    0,   67,   68,   68,   65,   69,   69,
+
+       64,   67,    0,   67,   68,    0,   65,   69,   70,   70,
+       67,   68,   71,   71,   69,    0,    0,   70,   72,   72,
+       68,   71,    0,   69,   70,    0,    0,   72,   71,   73,
+       73,   74,   74,   70,   72,   75,   75,   71,   73,    0,
+       74,    0,    0,   72,   75,   73,    0,   74,    0,    0,
+        0,   75,    0,    0,   73,    0,   74,    0,    0,    0,
+       75,   77,   77,   77,   77,   77,   77,   78,   78,   78,
+       78,   78,   78,   85,   85,   87,   87,    0,    0,    0,
+        0,    0,   85,    0,   87,    0,    0,    0,    0,   85,
+        0,   87,    0,    0,    0,    0,    0,    0,   85,    0,
+
+       87,   92,   92,   92,   93,    0,   93,   93,   93,   94,
+       94,   95,   95,   97,   97,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[55] =
+static const flex_int32_t yy_rule_can_match_eol[56] =
     {   0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -840,8 +934,8 @@ char *yytext;
 #include "hypno/grammar.h"
 #include "hypno/tokens_arc.h"
 
-#line 843 "engines/hypno/lexer_arc.cpp"
-#line 844 "engines/hypno/lexer_arc.cpp"
+#line 937 "engines/hypno/lexer_arc.cpp"
+#line 938 "engines/hypno/lexer_arc.cpp"
 
 #define INITIAL 0
 
@@ -1058,7 +1152,7 @@ YY_DECL
 	{
 #line 42 "engines/hypno/lexer_arc.l"
 
-#line 1061 "engines/hypno/lexer_arc.cpp"
+#line 1155 "engines/hypno/lexer_arc.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1085,13 +1179,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 85 )
+				if ( yy_current_state >= 92 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 84 );
+		while ( yy_current_state != 91 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1294,47 +1388,47 @@ return TPTOK;
 case 35:
 YY_RULE_SETUP
 #line 77 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
+return TATOK;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 78 "engines/hypno/lexer_arc.l"
-return FTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 79 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+return FTOK;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 80 "engines/hypno/lexer_arc.l"
-return A0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 81 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+return A0TOK;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 82 "engines/hypno/lexer_arc.l"
-return KNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 83 "engines/hypno/lexer_arc.l"
-return P0TOK;
+return KNTOK;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 84 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
+return P0TOK;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 85 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
@@ -1344,17 +1438,17 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 case 45:
 YY_RULE_SETUP
 #line 87 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 88 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 89 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
@@ -1364,35 +1458,40 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 case 49:
 YY_RULE_SETUP
 #line 91 "engines/hypno/lexer_arc.l"
-return RESTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 	YY_BREAK
 case 50:
-/* rule 50 can match eol */
 YY_RULE_SETUP
 #line 92 "engines/hypno/lexer_arc.l"
-return RETTOK;
+return RESTOK;
 	YY_BREAK
 case 51:
+/* rule 51 can match eol */
 YY_RULE_SETUP
 #line 93 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+return RETTOK;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 94 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+/* ignore comment */
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 95 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+/* ignore whitespace */;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 96 "engines/hypno/lexer_arc.l"
+HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 97 "engines/hypno/lexer_arc.l"
 ECHO;
 	YY_BREAK
-#line 1395 "engines/hypno/lexer_arc.cpp"
+#line 1494 "engines/hypno/lexer_arc.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1690,7 +1789,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 85 )
+			if ( yy_current_state >= 92 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1718,11 +1817,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 85 )
+		if ( yy_current_state >= 92 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 84);
+	yy_is_jam = (yy_current_state == 91);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2369,7 +2468,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 96 "engines/hypno/lexer_arc.l"
+#line 97 "engines/hypno/lexer_arc.l"
 
 
 namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index 41a87443f99..4796325dd9e 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -74,6 +74,7 @@ W							return WTOK;
 X							return XTOK;
 T							return TTOK;
 Tp							return TPTOK;
+Ta							return TATOK;
 F[0-9]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
 F							return FTOK;
 S[0-9]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
@@ -85,7 +86,7 @@ Y[A-Z0-9]					HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
 22[k|K]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 11[k|K]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 [\-]?[0-9]+					HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
-[A-Za-z_][A-Za-z_0-9]*		HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+[A-Za-z_][A-Za-z_0-9]*[0-9\.]*	HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
 [A-Za-z][A-Za-z_0-9\\\.]+	HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 [0-9][\-A-Za-z_0-9\\\.]+	HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 320\,200					return RESTOK;
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index 8130045f4ab..89c00812ec1 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -89,31 +89,32 @@ extern int HYPNO_ARC_debug;
     PTOK = 282,                    /* PTOK  */
     FTOK = 283,                    /* FTOK  */
     TTOK = 284,                    /* TTOK  */
-    TPTOK = 285,                   /* TPTOK  */
-    ATOK = 286,                    /* ATOK  */
-    VTOK = 287,                    /* VTOK  */
-    OTOK = 288,                    /* OTOK  */
-    LTOK = 289,                    /* LTOK  */
-    MTOK = 290,                    /* MTOK  */
-    NTOK = 291,                    /* NTOK  */
-    NSTOK = 292,                   /* NSTOK  */
-    RTOK = 293,                    /* RTOK  */
-    R01TOK = 294,                  /* R01TOK  */
-    ITOK = 295,                    /* ITOK  */
-    I1TOK = 296,                   /* I1TOK  */
-    GTOK = 297,                    /* GTOK  */
-    JTOK = 298,                    /* JTOK  */
-    J0TOK = 299,                   /* J0TOK  */
-    KTOK = 300,                    /* KTOK  */
-    UTOK = 301,                    /* UTOK  */
-    ZTOK = 302,                    /* ZTOK  */
-    NONETOK = 303,                 /* NONETOK  */
-    A0TOK = 304,                   /* A0TOK  */
-    P0TOK = 305,                   /* P0TOK  */
-    WTOK = 306,                    /* WTOK  */
-    XTOK = 307,                    /* XTOK  */
-    CB3TOK = 308,                  /* CB3TOK  */
-    C02TOK = 309                   /* C02TOK  */
+    TATOK = 285,                   /* TATOK  */
+    TPTOK = 286,                   /* TPTOK  */
+    ATOK = 287,                    /* ATOK  */
+    VTOK = 288,                    /* VTOK  */
+    OTOK = 289,                    /* OTOK  */
+    LTOK = 290,                    /* LTOK  */
+    MTOK = 291,                    /* MTOK  */
+    NTOK = 292,                    /* NTOK  */
+    NSTOK = 293,                   /* NSTOK  */
+    RTOK = 294,                    /* RTOK  */
+    R01TOK = 295,                  /* R01TOK  */
+    ITOK = 296,                    /* ITOK  */
+    I1TOK = 297,                   /* I1TOK  */
+    GTOK = 298,                    /* GTOK  */
+    JTOK = 299,                    /* JTOK  */
+    J0TOK = 300,                   /* J0TOK  */
+    KTOK = 301,                    /* KTOK  */
+    UTOK = 302,                    /* UTOK  */
+    ZTOK = 303,                    /* ZTOK  */
+    NONETOK = 304,                 /* NONETOK  */
+    A0TOK = 305,                   /* A0TOK  */
+    P0TOK = 306,                   /* P0TOK  */
+    WTOK = 307,                    /* WTOK  */
+    XTOK = 308,                    /* XTOK  */
+    CB3TOK = 309,                  /* CB3TOK  */
+    C02TOK = 310                   /* C02TOK  */
   };
   typedef enum HYPNO_ARC_tokentype HYPNO_ARC_token_kind_t;
 #endif
@@ -127,7 +128,7 @@ union HYPNO_ARC_STYPE
 	char *s; /* string value */
 	int i;	 /* integer value */
 
-#line 131 "engines/hypno/tokens_arc.h"
+#line 132 "engines/hypno/tokens_arc.h"
 
 };
 typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;


Commit: b50b506ba407815e59d62f626521e4aee7b6318b
    https://github.com/scummvm/scummvm/commit/b50b506ba407815e59d62f626521e4aee7b6318b
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: added Soldier Boyz to the original copyright string

Changed paths:
    engines/hypno/detection.cpp


diff --git a/engines/hypno/detection.cpp b/engines/hypno/detection.cpp
index 2e44e9e9310..5389c88410d 100644
--- a/engines/hypno/detection.cpp
+++ b/engines/hypno/detection.cpp
@@ -218,7 +218,8 @@ public:
 
 	const char *getOriginalCopyright() const override {
 		return	"Marvel Comics Spider-Man: The Sinister Six (C) Brooklyn Multimedia\n"
-				"Wetlands (C) Hypnotix, Inc.";
+				"Wetlands (C) Hypnotix, Inc.\n"
+				"Soldier Bozy (C) Hypnotix, Inc., Motion Picture Corporation of America Interactive";
 	}
 
 	const DebugChannelDef *getDebugChannels() const override {


Commit: 66398db6459046e6bcce784c9b339f230e025c4a
    https://github.com/scummvm/scummvm/commit/66398db6459046e6bcce784c9b339f230e025c4a
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: implemented sound transition in boyz

Changed paths:
    engines/hypno/arcade.cpp
    engines/hypno/grammar.h


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index d83a92e4225..ef1bfcdb830 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -339,21 +339,26 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			ArcadeTransition at = *arc->transitions.begin();
 			if (_background->decoder->getCurFrame() > (int) at.time) {
 				transition = true;
-				_background->decoder->pauseVideo(true);
 
-				debugC(1, kHypnoDebugArcade, "Playing transition %s", at.video.c_str());
-				MVideo video(at.video, Common::Point(0, 0), false, true, false);
-				disableCursor();
-				runIntro(video);
+				if (!at.video.empty()) {
+					_background->decoder->pauseVideo(true);
+					debugC(1, kHypnoDebugArcade, "Playing transition %s", at.video.c_str());
+					MVideo video(at.video, Common::Point(0, 0), false, true, false);
+					disableCursor();
+					runIntro(video);
 
-				if (!at.palette.empty())
-					currentPalette = at.palette;
+					if (!at.palette.empty())
+						currentPalette = at.palette;
 
-				loadPalette(currentPalette);
-				_background->decoder->pauseVideo(false);
-				updateScreen(*_background);
-				drawScreen();
-				drawCursorArcade(mousePos);
+					loadPalette(currentPalette);
+					_background->decoder->pauseVideo(false);
+					updateScreen(*_background);
+					drawScreen();
+					drawCursorArcade(mousePos);
+				} else if (!at.sound.empty()) {
+					playSound(at.sound, 1);
+				} else
+					error ("Invalid transition at %d", at.time);
 
 				arc->transitions.pop_front();
 				if (!_music.empty())
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index df01dd2ddc8..9ce195ecc59 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -496,16 +496,16 @@ typedef Common::Array<Segment> Segments;
 
 class ArcadeTransition {
 public:
-	ArcadeTransition(Filename video_, Filename palette_, Filename audio_, uint32 time_)  {
+	ArcadeTransition(Filename video_, Filename palette_, Filename sound_, uint32 time_)  {
 		video = video_;
 		palette = palette_;
-		audio = audio_;
+		sound = sound_;
 		time = time_;
 	}
 
 	Filename video;
 	Filename palette;
-	Filename audio;
+	Filename sound;
 	uint32 time;
 };
 


Commit: 034051a5d4acd60258e6b2a9192e3a0f0a4130fb
    https://github.com/scummvm/scummvm/commit/034051a5d4acd60258e6b2a9192e3a0f0a4130fb
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: improved parser to load level c17 in boyz

Changed paths:
    engines/hypno/boyz/boyz.cpp
    engines/hypno/grammar_arc.cpp
    engines/hypno/grammar_arc.y
    engines/hypno/lexer_arc.cpp
    engines/hypno/lexer_arc.l
    engines/hypno/tokens_arc.h


diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 6a5f62200a9..e4af91ce13b 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -44,6 +44,7 @@ void BoyzEngine::loadAssets() {
 	loadArcadeLevel("c14.mi_", "c15.mi_", "??", "");
 	loadArcadeLevel("c15.mi_", "c16.mi_", "??", "");
 	loadArcadeLevel("c16.mi_", "c17.mi_", "??", "");
+	loadArcadeLevel("c17.mi_", "c18.mi_", "??", "");
 
 	loadLib("sound/", "misc/sound.lib", true);
 
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 663e973cce7..885d9d440f2 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -144,56 +144,57 @@ enum yysymbol_kind_t
   YYSYMBOL_NUM = 12,                       /* NUM  */
   YYSYMBOL_BYTE = 13,                      /* BYTE  */
   YYSYMBOL_COMMENT = 14,                   /* COMMENT  */
-  YYSYMBOL_AVTOK = 15,                     /* AVTOK  */
-  YYSYMBOL_ABTOK = 16,                     /* ABTOK  */
-  YYSYMBOL_CTOK = 17,                      /* CTOK  */
-  YYSYMBOL_DTOK = 18,                      /* DTOK  */
-  YYSYMBOL_HTOK = 19,                      /* HTOK  */
-  YYSYMBOL_HETOK = 20,                     /* HETOK  */
-  YYSYMBOL_HLTOK = 21,                     /* HLTOK  */
-  YYSYMBOL_H12TOK = 22,                    /* H12TOK  */
-  YYSYMBOL_HUTOK = 23,                     /* HUTOK  */
-  YYSYMBOL_RETTOK = 24,                    /* RETTOK  */
-  YYSYMBOL_QTOK = 25,                      /* QTOK  */
-  YYSYMBOL_RESTOK = 26,                    /* RESTOK  */
-  YYSYMBOL_PTOK = 27,                      /* PTOK  */
-  YYSYMBOL_FTOK = 28,                      /* FTOK  */
-  YYSYMBOL_TTOK = 29,                      /* TTOK  */
-  YYSYMBOL_TATOK = 30,                     /* TATOK  */
-  YYSYMBOL_TPTOK = 31,                     /* TPTOK  */
-  YYSYMBOL_ATOK = 32,                      /* ATOK  */
-  YYSYMBOL_VTOK = 33,                      /* VTOK  */
-  YYSYMBOL_OTOK = 34,                      /* OTOK  */
-  YYSYMBOL_LTOK = 35,                      /* LTOK  */
-  YYSYMBOL_MTOK = 36,                      /* MTOK  */
-  YYSYMBOL_NTOK = 37,                      /* NTOK  */
-  YYSYMBOL_NSTOK = 38,                     /* NSTOK  */
-  YYSYMBOL_RTOK = 39,                      /* RTOK  */
-  YYSYMBOL_R01TOK = 40,                    /* R01TOK  */
-  YYSYMBOL_ITOK = 41,                      /* ITOK  */
-  YYSYMBOL_I1TOK = 42,                     /* I1TOK  */
-  YYSYMBOL_GTOK = 43,                      /* GTOK  */
-  YYSYMBOL_JTOK = 44,                      /* JTOK  */
-  YYSYMBOL_J0TOK = 45,                     /* J0TOK  */
-  YYSYMBOL_KTOK = 46,                      /* KTOK  */
-  YYSYMBOL_UTOK = 47,                      /* UTOK  */
-  YYSYMBOL_ZTOK = 48,                      /* ZTOK  */
-  YYSYMBOL_NONETOK = 49,                   /* NONETOK  */
-  YYSYMBOL_A0TOK = 50,                     /* A0TOK  */
-  YYSYMBOL_P0TOK = 51,                     /* P0TOK  */
-  YYSYMBOL_WTOK = 52,                      /* WTOK  */
-  YYSYMBOL_XTOK = 53,                      /* XTOK  */
-  YYSYMBOL_CB3TOK = 54,                    /* CB3TOK  */
-  YYSYMBOL_C02TOK = 55,                    /* C02TOK  */
-  YYSYMBOL_YYACCEPT = 56,                  /* $accept  */
-  YYSYMBOL_start = 57,                     /* start  */
-  YYSYMBOL_58_1 = 58,                      /* $@1  */
-  YYSYMBOL_header = 59,                    /* header  */
-  YYSYMBOL_hline = 60,                     /* hline  */
-  YYSYMBOL_enc = 61,                       /* enc  */
-  YYSYMBOL_flag = 62,                      /* flag  */
-  YYSYMBOL_body = 63,                      /* body  */
-  YYSYMBOL_bline = 64                      /* bline  */
+  YYSYMBOL_ALTOK = 15,                     /* ALTOK  */
+  YYSYMBOL_AVTOK = 16,                     /* AVTOK  */
+  YYSYMBOL_ABTOK = 17,                     /* ABTOK  */
+  YYSYMBOL_CTOK = 18,                      /* CTOK  */
+  YYSYMBOL_DTOK = 19,                      /* DTOK  */
+  YYSYMBOL_HTOK = 20,                      /* HTOK  */
+  YYSYMBOL_HETOK = 21,                     /* HETOK  */
+  YYSYMBOL_HLTOK = 22,                     /* HLTOK  */
+  YYSYMBOL_H12TOK = 23,                    /* H12TOK  */
+  YYSYMBOL_HUTOK = 24,                     /* HUTOK  */
+  YYSYMBOL_RETTOK = 25,                    /* RETTOK  */
+  YYSYMBOL_QTOK = 26,                      /* QTOK  */
+  YYSYMBOL_RESTOK = 27,                    /* RESTOK  */
+  YYSYMBOL_PTOK = 28,                      /* PTOK  */
+  YYSYMBOL_FTOK = 29,                      /* FTOK  */
+  YYSYMBOL_TTOK = 30,                      /* TTOK  */
+  YYSYMBOL_TATOK = 31,                     /* TATOK  */
+  YYSYMBOL_TPTOK = 32,                     /* TPTOK  */
+  YYSYMBOL_ATOK = 33,                      /* ATOK  */
+  YYSYMBOL_VTOK = 34,                      /* VTOK  */
+  YYSYMBOL_OTOK = 35,                      /* OTOK  */
+  YYSYMBOL_LTOK = 36,                      /* LTOK  */
+  YYSYMBOL_MTOK = 37,                      /* MTOK  */
+  YYSYMBOL_NTOK = 38,                      /* NTOK  */
+  YYSYMBOL_NSTOK = 39,                     /* NSTOK  */
+  YYSYMBOL_RTOK = 40,                      /* RTOK  */
+  YYSYMBOL_R01TOK = 41,                    /* R01TOK  */
+  YYSYMBOL_ITOK = 42,                      /* ITOK  */
+  YYSYMBOL_I1TOK = 43,                     /* I1TOK  */
+  YYSYMBOL_GTOK = 44,                      /* GTOK  */
+  YYSYMBOL_JTOK = 45,                      /* JTOK  */
+  YYSYMBOL_J0TOK = 46,                     /* J0TOK  */
+  YYSYMBOL_KTOK = 47,                      /* KTOK  */
+  YYSYMBOL_UTOK = 48,                      /* UTOK  */
+  YYSYMBOL_ZTOK = 49,                      /* ZTOK  */
+  YYSYMBOL_NONETOK = 50,                   /* NONETOK  */
+  YYSYMBOL_A0TOK = 51,                     /* A0TOK  */
+  YYSYMBOL_P0TOK = 52,                     /* P0TOK  */
+  YYSYMBOL_WTOK = 53,                      /* WTOK  */
+  YYSYMBOL_XTOK = 54,                      /* XTOK  */
+  YYSYMBOL_CB3TOK = 55,                    /* CB3TOK  */
+  YYSYMBOL_C02TOK = 56,                    /* C02TOK  */
+  YYSYMBOL_YYACCEPT = 57,                  /* $accept  */
+  YYSYMBOL_start = 58,                     /* start  */
+  YYSYMBOL_59_1 = 59,                      /* $@1  */
+  YYSYMBOL_header = 60,                    /* header  */
+  YYSYMBOL_hline = 61,                     /* hline  */
+  YYSYMBOL_enc = 62,                       /* enc  */
+  YYSYMBOL_flag = 63,                      /* flag  */
+  YYSYMBOL_body = 64,                      /* body  */
+  YYSYMBOL_bline = 65                      /* bline  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -521,19 +522,19 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  6
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   191
+#define YYLAST   193
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  56
+#define YYNTOKENS  57
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  9
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  100
+#define YYNRULES  101
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  200
+#define YYNSTATES  203
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   310
+#define YYMAXUTOK   311
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -578,7 +579,7 @@ static const yytype_int8 yytranslate[] =
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55
+      55,    56
 };
 
 #if HYPNO_ARC_DEBUG
@@ -590,12 +591,12 @@ static const yytype_int16 yyrline[] =
      136,   141,   146,   151,   152,   156,   160,   163,   167,   170,
      171,   197,   219,   225,   230,   235,   241,   246,   251,   256,
      261,   266,   273,   274,   277,   278,   281,   282,   283,   286,
-     294,   297,   300,   303,   308,   313,   317,   321,   325,   329,
-     333,   337,   341,   345,   349,   353,   357,   361,   365,   369,
-     373,   377,   381,   385,   389,   393,   397,   400,   404,   409,
-     413,   418,   423,   427,   433,   437,   440,   441,   444,   448,
-     451,   456,   459,   463,   467,   476,   477,   480,   483,   486,
-     489
+     294,   297,   300,   303,   306,   311,   316,   320,   324,   328,
+     332,   336,   340,   344,   348,   352,   356,   360,   364,   368,
+     372,   376,   380,   384,   388,   392,   396,   400,   403,   407,
+     412,   416,   421,   426,   430,   436,   440,   443,   444,   447,
+     451,   454,   459,   462,   466,   470,   479,   480,   483,   486,
+     489,   492
 };
 #endif
 
@@ -613,13 +614,13 @@ static const char *const yytname[] =
 {
   "\"end of file\"", "error", "\"invalid token\"", "NAME", "FILENAME",
   "BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "ENCTOK", "ONTOK", "NUM",
-  "BYTE", "COMMENT", "AVTOK", "ABTOK", "CTOK", "DTOK", "HTOK", "HETOK",
-  "HLTOK", "H12TOK", "HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK", "FTOK",
-  "TTOK", "TATOK", "TPTOK", "ATOK", "VTOK", "OTOK", "LTOK", "MTOK", "NTOK",
-  "NSTOK", "RTOK", "R01TOK", "ITOK", "I1TOK", "GTOK", "JTOK", "J0TOK",
-  "KTOK", "UTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK",
-  "CB3TOK", "C02TOK", "$accept", "start", "$@1", "header", "hline", "enc",
-  "flag", "body", "bline", YY_NULLPTR
+  "BYTE", "COMMENT", "ALTOK", "AVTOK", "ABTOK", "CTOK", "DTOK", "HTOK",
+  "HETOK", "HLTOK", "H12TOK", "HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK",
+  "FTOK", "TTOK", "TATOK", "TPTOK", "ATOK", "VTOK", "OTOK", "LTOK", "MTOK",
+  "NTOK", "NSTOK", "RTOK", "R01TOK", "ITOK", "I1TOK", "GTOK", "JTOK",
+  "J0TOK", "KTOK", "UTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK",
+  "XTOK", "CB3TOK", "C02TOK", "$accept", "start", "$@1", "header", "hline",
+  "enc", "flag", "body", "bline", YY_NULLPTR
 };
 
 static const char *
@@ -629,7 +630,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-114)
+#define YYPACT_NINF (-115)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -643,26 +644,27 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      10,  -114,    10,    16,    90,  -114,  -114,     6,    13,     7,
-       9,    26,    65,    15,    30,    32,    42,    90,    44,    45,
-      46,     0,    48,    18,    49,    -3,    50,    55,    59,    63,
-      66,    67,    69,    57,    29,    90,  -114,    70,    73,  -114,
-    -114,    75,    77,    86,    87,    91,    93,    94,   104,   113,
-     118,  -114,   121,   122,  -114,   123,   124,    98,   126,   127,
-     128,  -114,   129,  -114,  -114,  -114,  -114,  -114,  -114,   130,
-     119,  -114,  -114,   141,  -114,   133,   134,   135,   136,   137,
-     138,   139,   140,   142,   143,  -114,  -114,  -114,  -114,    70,
-     149,  -114,  -114,  -114,   144,    -4,  -114,  -114,  -114,  -114,
-    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
-     145,   146,   155,   148,     2,   150,   151,   152,   153,   154,
-      -4,   157,   156,   158,   159,   160,   161,  -114,   162,   163,
-      47,  -114,   164,   165,   166,  -114,   167,   168,   169,   114,
-      -4,  -114,   170,    70,   171,  -114,  -114,  -114,  -114,  -114,
-    -114,  -114,  -114,  -114,  -114,  -114,   172,   173,  -114,   174,
-     175,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
-    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
-    -114,  -114,  -114,  -114,   176,   177,   178,  -114,  -114,  -114,
-    -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114
+       9,  -115,     9,    16,    91,  -115,  -115,     5,    14,     7,
+      10,    33,    65,     8,    15,    41,    42,    91,    44,    45,
+      46,    -1,    48,    55,    49,    11,    50,    59,    60,    66,
+      67,    68,    70,    57,    30,    91,  -115,    71,    74,  -115,
+    -115,    76,    78,    87,    88,    92,    94,    95,    96,   106,
+     115,  -115,   120,   123,  -115,   124,   125,    99,   126,   128,
+     129,  -115,   130,  -115,  -115,  -115,  -115,  -115,  -115,   131,
+     119,  -115,  -115,   142,  -115,   134,   135,   136,   137,   138,
+     139,   140,   141,   143,   144,  -115,  -115,  -115,  -115,   142,
+     150,  -115,  -115,  -115,   145,    -5,  -115,  -115,  -115,  -115,
+    -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,    71,  -115,
+     146,   147,   156,   149,     1,   151,   152,   153,   154,   155,
+     157,    -5,   158,   159,   160,   161,   162,   163,  -115,   164,
+     165,    47,  -115,   166,   167,   168,  -115,   169,   170,   171,
+     114,    -5,  -115,  -115,   172,    71,   173,  -115,  -115,  -115,
+    -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,   174,
+     175,  -115,   176,   177,  -115,  -115,  -115,  -115,  -115,  -115,
+    -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,
+    -115,  -115,  -115,  -115,  -115,  -115,  -115,   178,   179,   180,
+    -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,
+    -115,  -115,  -115
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -678,30 +680,31 @@ static const yytype_int8 yydefact[] =
        0,     6,     0,     0,     9,     0,     0,     0,     0,     0,
        0,    16,     0,    13,    24,    25,    26,    27,    28,     0,
        0,     5,    42,    45,    18,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    29,    11,    22,    23,    43,
+       0,     0,     0,     0,     0,    29,    11,    22,    23,    45,
        0,    12,    15,    17,     0,    48,    44,    31,    35,    41,
-      38,    37,    39,    36,    32,    33,    40,    34,    21,    20,
+      38,    37,    39,    36,    32,    33,    40,    34,    43,    20,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      48,     0,    97,     0,     0,     0,    98,    99,     0,     0,
-       0,    95,     0,     0,     0,   100,     0,     0,     0,     0,
-      48,    14,     0,    43,     0,    49,    53,    50,    51,    84,
-      88,    85,    47,    54,    96,    86,     0,    90,    91,     0,
-       0,    55,    56,    71,    58,    59,    62,    69,    68,    60,
-      72,    57,    67,    73,    74,    66,    70,    63,    61,    64,
-      65,    75,    76,    52,    92,     0,     0,    87,     3,    46,
-      80,    94,    81,    83,    89,    78,    79,    93,    77,    82
+       0,    48,     0,    98,     0,     0,     0,    99,   100,     0,
+       0,     0,    96,     0,     0,     0,   101,     0,     0,     0,
+       0,    48,    21,    14,     0,    43,     0,    49,    54,    51,
+      50,    52,    85,    89,    86,    47,    55,    97,    87,     0,
+      91,    92,     0,     0,    56,    57,    72,    59,    60,    63,
+      70,    69,    61,    73,    58,    68,    74,    75,    67,    71,
+      64,    62,    65,    66,    76,    77,    53,    93,     0,     0,
+      88,     3,    46,    81,    95,    82,    84,    90,    79,    80,
+      94,    78,    83
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -114,   189,  -114,    -9,  -114,   -89,  -114,  -113,  -114
+    -115,   191,  -115,    -9,  -115,  -102,    81,  -114,  -115
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,     3,     4,    34,    35,    73,    97,   139,   140
+       0,     3,     4,    34,    35,    73,    97,   140,   141
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -709,92 +712,93 @@ static const yytype_uint8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-     108,   111,   112,   113,    55,   114,   145,   152,    51,    60,
-      36,   115,   116,   117,   118,   119,     6,    37,     1,    38,
-     120,    39,    58,    61,   121,   122,    71,   189,    47,   123,
-     124,   125,   126,   127,     2,   128,   129,   130,    40,   131,
-     132,   133,   134,    48,   135,    49,   136,   137,   138,    56,
-     161,   146,   162,   163,   191,    50,    52,    53,    54,    63,
-      57,    59,    62,    64,   164,   165,   166,    65,    41,    69,
-      66,    67,   167,    68,   168,   169,   170,    70,    42,   171,
-      72,   172,   173,   174,   175,    74,   176,    75,   177,    76,
-     178,   179,    43,   180,   181,     7,     8,    44,    77,    78,
-      45,     9,    89,    79,    46,    80,    81,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    82,    19,    20,    21,
-      22,    23,    24,    25,    26,    83,    27,    28,    29,    30,
-      84,    31,    32,    85,    86,    87,    88,    33,    90,    91,
-      92,    93,    94,    95,    96,    98,    99,   100,   101,   102,
-     103,   104,   105,   109,   106,   107,   110,   141,   142,   143,
-     144,   153,   147,   148,   149,   150,   151,   188,   154,     0,
-     155,   156,   157,   158,   159,   160,   182,   183,   184,   185,
-     186,   187,   190,   192,   193,   194,   195,   196,   197,   198,
-     199,     5
+     111,   112,   113,    55,   114,   147,   142,   155,    51,    36,
+     115,   116,   117,   118,   119,   120,     6,     1,    37,    38,
+     121,    47,    39,    60,   122,   123,    71,   192,    48,   124,
+     125,   126,   127,   128,     2,   129,   130,   131,    61,   132,
+     133,   134,   135,   194,   136,    40,   137,   138,   139,    56,
+     164,   148,   165,   166,    49,    50,    52,    53,    54,    58,
+      57,    59,    62,    63,    64,   167,   168,   169,    41,    69,
+      65,    66,    67,   170,    68,   171,   172,   173,    42,    70,
+     174,    72,   175,   176,   177,   178,    74,   179,    75,   180,
+      76,   181,   182,    43,   183,   184,     7,     8,    44,    77,
+      78,    45,     9,    89,    79,    46,    80,    81,    82,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    83,    19,
+      20,    21,    22,    23,    24,    25,    26,    84,    27,    28,
+      29,    30,    85,    31,    32,    86,    87,    88,    90,    33,
+      91,    92,    93,    94,    95,    96,    98,    99,   100,   101,
+     102,   103,   104,   105,   109,   106,   107,   110,   143,   144,
+     145,   146,   156,   149,   150,   151,   152,   153,   191,   154,
+     108,   157,   158,   159,   160,   161,   162,   163,   185,   186,
+     187,   188,   189,   190,   193,   195,   196,   197,   198,   199,
+     200,   201,   202,     5
 };
 
-static const yytype_int16 yycheck[] =
+static const yytype_uint8 yycheck[] =
 {
-      89,     5,     6,     7,     4,     9,     4,   120,    17,    12,
-       4,    15,    16,    17,    18,    19,     0,     4,     8,    12,
-      24,    12,     4,    26,    28,    29,    35,   140,    13,    33,
-      34,    35,    36,    37,    24,    39,    40,    41,    12,    43,
-      44,    45,    46,    13,    48,    13,    50,    51,    52,    49,
-       3,    49,     5,     6,   143,    13,    12,    12,    12,     4,
-      12,    12,    12,     4,    17,    18,    19,     4,     3,    12,
-       4,     4,    25,     4,    27,    28,    29,    48,    13,    32,
-      10,    34,    35,    36,    37,    12,    39,    12,    41,    12,
-      43,    44,    27,    46,    47,     5,     6,    32,    12,    12,
-      35,    11,     4,    12,    39,    12,    12,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    12,    27,    28,    29,
-      30,    31,    32,    33,    34,    12,    36,    37,    38,    39,
-      12,    41,    42,    12,    12,    12,    12,    47,    12,    12,
-      12,    12,    12,    24,     3,    12,    12,    12,    12,    12,
-      12,    12,    12,     4,    12,    12,    12,    12,    12,     4,
-      12,     4,    12,    12,    12,    12,    12,    53,    12,    -1,
+       5,     6,     7,     4,     9,     4,   108,   121,    17,     4,
+      15,    16,    17,    18,    19,    20,     0,     8,     4,    12,
+      25,    13,    12,    12,    29,    30,    35,   141,    13,    34,
+      35,    36,    37,    38,    25,    40,    41,    42,    27,    44,
+      45,    46,    47,   145,    49,    12,    51,    52,    53,    50,
+       3,    50,     5,     6,    13,    13,    12,    12,    12,     4,
+      12,    12,    12,     4,     4,    18,    19,    20,     3,    12,
+       4,     4,     4,    26,     4,    28,    29,    30,    13,    49,
+      33,    10,    35,    36,    37,    38,    12,    40,    12,    42,
+      12,    44,    45,    28,    47,    48,     5,     6,    33,    12,
+      12,    36,    11,     4,    12,    40,    12,    12,    12,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    12,    28,
+      29,    30,    31,    32,    33,    34,    35,    12,    37,    38,
+      39,    40,    12,    42,    43,    12,    12,    12,    12,    48,
+      12,    12,    12,    12,    25,     3,    12,    12,    12,    12,
+      12,    12,    12,    12,     4,    12,    12,    12,    12,    12,
+       4,    12,     4,    12,    12,    12,    12,    12,    54,    12,
+      89,    12,    12,    12,    12,    12,    12,    12,    12,    12,
       12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-      12,     2
+      12,    12,    12,     2
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
    state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
-       0,     8,    24,    57,    58,    57,     0,     5,     6,    11,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    27,
-      28,    29,    30,    31,    32,    33,    34,    36,    37,    38,
-      39,    41,    42,    47,    59,    60,     4,     4,    12,    12,
-      12,     3,    13,    27,    32,    35,    39,    13,    13,    13,
-      13,    59,    12,    12,    12,     4,    49,    12,     4,    12,
-      12,    26,    12,     4,     4,     4,     4,     4,     4,    12,
-      48,    59,    10,    61,    12,    12,    12,    12,    12,    12,
+       0,     8,    25,    58,    59,    58,     0,     5,     6,    11,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    28,
+      29,    30,    31,    32,    33,    34,    35,    37,    38,    39,
+      40,    42,    43,    48,    60,    61,     4,     4,    12,    12,
+      12,     3,    13,    28,    33,    36,    40,    13,    13,    13,
+      13,    60,    12,    12,    12,     4,    50,    12,     4,    12,
+      12,    27,    12,     4,     4,     4,     4,     4,     4,    12,
+      49,    60,    10,    62,    12,    12,    12,    12,    12,    12,
       12,    12,    12,    12,    12,    12,    12,    12,    12,     4,
-      12,    12,    12,    12,    12,    24,     3,    62,    12,    12,
-      12,    12,    12,    12,    12,    12,    12,    12,    61,     4,
+      12,    12,    12,    12,    12,    25,     3,    63,    12,    12,
+      12,    12,    12,    12,    12,    12,    12,    12,    63,     4,
       12,     5,     6,     7,     9,    15,    16,    17,    18,    19,
-      24,    28,    29,    33,    34,    35,    36,    37,    39,    40,
-      41,    43,    44,    45,    46,    48,    50,    51,    52,    63,
-      64,    12,    12,     4,    12,     4,    49,    12,    12,    12,
-      12,    12,    63,     4,    12,    12,    12,    12,    12,    12,
-      12,     3,     5,     6,    17,    18,    19,    25,    27,    28,
-      29,    32,    34,    35,    36,    37,    39,    41,    43,    44,
-      46,    47,    12,    12,    12,    12,    12,    12,    53,    63,
-      12,    61,    12,    12,    12,    12,    12,    12,    12,    12
+      20,    25,    29,    30,    34,    35,    36,    37,    38,    40,
+      41,    42,    44,    45,    46,    47,    49,    51,    52,    53,
+      64,    65,    62,    12,    12,     4,    12,     4,    50,    12,
+      12,    12,    12,    12,    12,    64,     4,    12,    12,    12,
+      12,    12,    12,    12,     3,     5,     6,    18,    19,    20,
+      26,    28,    29,    30,    33,    35,    36,    37,    38,    40,
+      42,    44,    45,    47,    48,    12,    12,    12,    12,    12,
+      12,    54,    64,    12,    62,    12,    12,    12,    12,    12,
+      12,    12,    12
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_int8 yyr1[] =
 {
-       0,    56,    58,    57,    57,    59,    59,    59,    60,    60,
-      60,    60,    60,    60,    60,    60,    60,    60,    60,    60,
-      60,    60,    60,    60,    60,    60,    60,    60,    60,    60,
-      60,    60,    60,    60,    60,    60,    60,    60,    60,    60,
-      60,    60,    61,    61,    62,    62,    63,    63,    63,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64
+       0,    57,    59,    58,    58,    60,    60,    60,    61,    61,
+      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
+      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
+      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
+      61,    61,    62,    62,    63,    63,    64,    64,    64,    65,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -802,15 +806,15 @@ static const yytype_int8 yyr2[] =
 {
        0,     2,     0,     7,     2,     2,     2,     0,     2,     2,
        2,     3,     3,     2,     5,     3,     2,     3,     3,     2,
-       4,     4,     3,     3,     2,     2,     2,     2,     2,     3,
+       4,     5,     3,     3,     2,     2,     2,     2,     2,     3,
        2,     4,     4,     4,     4,     4,     4,     4,     4,     4,
        4,     4,     1,     0,     1,     0,     2,     2,     0,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     3,     3,     3,
-       3,     3,     3,     3,     2,     2,     2,     2,     2,     3,
-       2,     2,     2,     3,     3,     1,     2,     1,     1,     1,
-       1
+       2,     2,     2,     2,     2,     2,     2,     2,     3,     3,
+       3,     3,     3,     3,     3,     2,     2,     2,     2,     2,
+       3,     2,     2,     2,     3,     3,     1,     2,     1,     1,
+       1,     1
 };
 
 
@@ -1276,7 +1280,7 @@ yyreduce:
   case 2: /* $@1: %empty  */
 #line 78 "engines/hypno/grammar_arc.y"
              { g_parsedArc->mode = (yyvsp[0].s); }
-#line 1280 "engines/hypno/grammar_arc.cpp"
+#line 1284 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 8: /* hline: CTOK NUM  */
@@ -1285,7 +1289,7 @@ yyreduce:
 		g_parsedArc->id = (yyvsp[0].i);
 		HYPNO_ARC_default_sound_rate = 0;
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1289 "engines/hypno/grammar_arc.cpp"
+#line 1293 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 9: /* hline: FTOK NUM  */
@@ -1294,7 +1298,7 @@ yyreduce:
 		HYPNO_ARC_default_sound_rate = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i));
 	}
-#line 1298 "engines/hypno/grammar_arc.cpp"
+#line 1302 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 10: /* hline: DTOK NUM  */
@@ -1303,19 +1307,19 @@ yyreduce:
 		g_parsedArc->frameDelay = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 1307 "engines/hypno/grammar_arc.cpp"
+#line 1311 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 11: /* hline: PTOK NUM NUM  */
 #line 99 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1313 "engines/hypno/grammar_arc.cpp"
+#line 1317 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 12: /* hline: ATOK NUM NUM  */
 #line 100 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1319 "engines/hypno/grammar_arc.cpp"
+#line 1323 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 13: /* hline: MTOK FILENAME  */
@@ -1324,7 +1328,7 @@ yyreduce:
 		debugC(1, kHypnoDebugParser, "M %s", (yyvsp[0].s));
 		g_parsedArc->maskVideo = (yyvsp[0].s);
 	}
-#line 1328 "engines/hypno/grammar_arc.cpp"
+#line 1332 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 14: /* hline: UTOK NUM NUM NUM NUM  */
@@ -1334,19 +1338,19 @@ yyreduce:
 		ScriptInfo si((yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 		g_parsedArc->script.push_back(si);
 	}
-#line 1338 "engines/hypno/grammar_arc.cpp"
+#line 1342 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 15: /* hline: VTOK NUM NUM  */
 #line 110 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1344 "engines/hypno/grammar_arc.cpp"
+#line 1348 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 16: /* hline: VTOK RESTOK  */
 #line 111 "engines/hypno/grammar_arc.y"
                       { debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1350 "engines/hypno/grammar_arc.cpp"
+#line 1354 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 17: /* hline: OTOK NUM NUM  */
@@ -1356,7 +1360,7 @@ yyreduce:
 		g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1360 "engines/hypno/grammar_arc.cpp"
+#line 1364 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 18: /* hline: ONTOK NUM NUM  */
@@ -1371,7 +1375,7 @@ yyreduce:
 		} else
 			error("Invalid objective: '%s'", (yyvsp[-2].s));
 		debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1375 "engines/hypno/grammar_arc.cpp"
+#line 1379 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 19: /* hline: ONTOK NUM  */
@@ -1385,7 +1389,7 @@ yyreduce:
 			error("Invalid objective: '%s'", (yyvsp[-1].s));
 		debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
 	}
-#line 1389 "engines/hypno/grammar_arc.cpp"
+#line 1393 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 20: /* hline: TPTOK FILENAME NUM FILENAME  */
@@ -1395,17 +1399,17 @@ yyreduce:
 		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s));
 	}
-#line 1399 "engines/hypno/grammar_arc.cpp"
+#line 1403 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 21: /* hline: TATOK NUM FILENAME enc  */
+  case 21: /* hline: TATOK NUM FILENAME flag enc  */
 #line 141 "engines/hypno/grammar_arc.y"
-                                 {
-		ArcadeTransition at("", "", (yyvsp[-1].s), (yyvsp[-2].i));
+                                      {
+		ArcadeTransition at("", "", (yyvsp[-2].s), (yyvsp[-3].i));
 		g_parsedArc->transitions.push_back(at);
-		debugC(1, kHypnoDebugParser, "Ta %d %s", (yyvsp[-2].i), (yyvsp[-1].s));
+		debugC(1, kHypnoDebugParser, "Ta %d %s", (yyvsp[-3].i), (yyvsp[-2].s));
 	}
-#line 1409 "engines/hypno/grammar_arc.cpp"
+#line 1413 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 22: /* hline: TTOK FILENAME NUM  */
@@ -1415,13 +1419,13 @@ yyreduce:
 		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i));
 	}
-#line 1419 "engines/hypno/grammar_arc.cpp"
+#line 1423 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 23: /* hline: TTOK NONETOK NUM  */
 #line 151 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1425 "engines/hypno/grammar_arc.cpp"
+#line 1429 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 24: /* hline: NTOK FILENAME  */
@@ -1430,7 +1434,7 @@ yyreduce:
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
 	}
-#line 1434 "engines/hypno/grammar_arc.cpp"
+#line 1438 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 25: /* hline: NSTOK FILENAME  */
@@ -1439,7 +1443,7 @@ yyreduce:
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
 	}
-#line 1443 "engines/hypno/grammar_arc.cpp"
+#line 1447 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 26: /* hline: RTOK FILENAME  */
@@ -1447,7 +1451,7 @@ yyreduce:
                          {
 		g_parsedArc->backgroundPalette = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1451 "engines/hypno/grammar_arc.cpp"
+#line 1455 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 27: /* hline: ITOK FILENAME  */
@@ -1456,7 +1460,7 @@ yyreduce:
 		g_parsedArc->player = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1460 "engines/hypno/grammar_arc.cpp"
+#line 1464 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 28: /* hline: I1TOK FILENAME  */
@@ -1464,13 +1468,13 @@ yyreduce:
                          {
 		debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
 	}
-#line 1468 "engines/hypno/grammar_arc.cpp"
+#line 1472 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 29: /* hline: QTOK NUM NUM  */
 #line 170 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1474 "engines/hypno/grammar_arc.cpp"
+#line 1478 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 30: /* hline: BNTOK FILENAME  */
@@ -1501,7 +1505,7 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
 	}
-#line 1505 "engines/hypno/grammar_arc.cpp"
+#line 1509 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 31: /* hline: SNTOK FILENAME enc flag  */
@@ -1528,7 +1532,7 @@ yyreduce:
 		}
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-2].s));
 	}
-#line 1532 "engines/hypno/grammar_arc.cpp"
+#line 1536 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 32: /* hline: HETOK BYTE NUM NUM  */
@@ -1539,7 +1543,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HE %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1543 "engines/hypno/grammar_arc.cpp"
+#line 1547 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 33: /* hline: HLTOK BYTE NUM NUM  */
@@ -1549,7 +1553,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1553 "engines/hypno/grammar_arc.cpp"
+#line 1557 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 34: /* hline: HUTOK BYTE NUM NUM  */
@@ -1559,7 +1563,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1563 "engines/hypno/grammar_arc.cpp"
+#line 1567 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 35: /* hline: HTOK NAME NUM NUM  */
@@ -1570,7 +1574,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1574 "engines/hypno/grammar_arc.cpp"
+#line 1578 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 36: /* hline: HTOK RTOK NUM NUM  */
@@ -1580,7 +1584,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1584 "engines/hypno/grammar_arc.cpp"
+#line 1588 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 37: /* hline: HTOK ATOK NUM NUM  */
@@ -1590,7 +1594,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H A %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1594 "engines/hypno/grammar_arc.cpp"
+#line 1598 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 38: /* hline: HTOK PTOK NUM NUM  */
@@ -1600,7 +1604,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1604 "engines/hypno/grammar_arc.cpp"
+#line 1608 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 39: /* hline: HTOK LTOK NUM NUM  */
@@ -1610,7 +1614,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1614 "engines/hypno/grammar_arc.cpp"
+#line 1618 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 40: /* hline: H12TOK BYTE NUM NUM  */
@@ -1620,7 +1624,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HN %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1624 "engines/hypno/grammar_arc.cpp"
+#line 1628 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 41: /* hline: HTOK BYTE NUM NUM  */
@@ -1630,31 +1634,31 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1634 "engines/hypno/grammar_arc.cpp"
+#line 1638 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 42: /* enc: ENCTOK  */
 #line 273 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1640 "engines/hypno/grammar_arc.cpp"
+#line 1644 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 43: /* enc: %empty  */
 #line 274 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1646 "engines/hypno/grammar_arc.cpp"
+#line 1650 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 44: /* flag: NAME  */
 #line 277 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1652 "engines/hypno/grammar_arc.cpp"
+#line 1656 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 45: /* flag: %empty  */
 #line 278 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1658 "engines/hypno/grammar_arc.cpp"
+#line 1662 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 49: /* bline: FNTOK FILENAME  */
@@ -1667,7 +1671,7 @@ yyreduce:
 			shoot->explosionAnimation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1671 "engines/hypno/grammar_arc.cpp"
+#line 1675 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 50: /* bline: AVTOK NUM  */
@@ -1675,396 +1679,404 @@ yyreduce:
                     {
 		debugC(1, kHypnoDebugParser, "AV %d", (yyvsp[0].i));
 	}
-#line 1679 "engines/hypno/grammar_arc.cpp"
+#line 1683 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 51: /* bline: ABTOK NUM  */
+  case 51: /* bline: ALTOK NUM  */
 #line 297 "engines/hypno/grammar_arc.y"
                     {
-		debugC(1, kHypnoDebugParser, "AB %d", (yyvsp[0].i));
+		debugC(1, kHypnoDebugParser, "AL %d", (yyvsp[0].i));
 	}
-#line 1687 "engines/hypno/grammar_arc.cpp"
+#line 1691 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 52: /* bline: J0TOK NUM  */
+  case 52: /* bline: ABTOK NUM  */
 #line 300 "engines/hypno/grammar_arc.y"
                     {
-		debugC(1, kHypnoDebugParser, "J0 %d", (yyvsp[0].i));
+		debugC(1, kHypnoDebugParser, "AB %d", (yyvsp[0].i));
 	}
-#line 1695 "engines/hypno/grammar_arc.cpp"
+#line 1699 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 53: /* bline: FNTOK NONETOK  */
+  case 53: /* bline: J0TOK NUM  */
 #line 303 "engines/hypno/grammar_arc.y"
+                    {
+		debugC(1, kHypnoDebugParser, "J0 %d", (yyvsp[0].i));
+	}
+#line 1707 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 54: /* bline: FNTOK NONETOK  */
+#line 306 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE");
 	}
-#line 1705 "engines/hypno/grammar_arc.cpp"
+#line 1717 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 54: /* bline: FTOK FILENAME  */
-#line 308 "engines/hypno/grammar_arc.y"
+  case 55: /* bline: FTOK FILENAME  */
+#line 311 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1715 "engines/hypno/grammar_arc.cpp"
+#line 1727 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 55: /* bline: ITOK NAME  */
-#line 313 "engines/hypno/grammar_arc.y"
+  case 56: /* bline: ITOK NAME  */
+#line 316 "engines/hypno/grammar_arc.y"
                      {
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1724 "engines/hypno/grammar_arc.cpp"
+#line 1736 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 56: /* bline: ITOK BNTOK  */
-#line 317 "engines/hypno/grammar_arc.y"
+  case 57: /* bline: ITOK BNTOK  */
+#line 320 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1733 "engines/hypno/grammar_arc.cpp"
+#line 1745 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 57: /* bline: ITOK ATOK  */
-#line 321 "engines/hypno/grammar_arc.y"
+  case 58: /* bline: ITOK ATOK  */
+#line 324 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A");
 	}
-#line 1742 "engines/hypno/grammar_arc.cpp"
+#line 1754 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 58: /* bline: ITOK CTOK  */
-#line 325 "engines/hypno/grammar_arc.y"
+  case 59: /* bline: ITOK CTOK  */
+#line 328 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C");
 	}
-#line 1751 "engines/hypno/grammar_arc.cpp"
+#line 1763 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 59: /* bline: ITOK DTOK  */
-#line 329 "engines/hypno/grammar_arc.y"
+  case 60: /* bline: ITOK DTOK  */
+#line 332 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D");
 	}
-#line 1760 "engines/hypno/grammar_arc.cpp"
+#line 1772 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 60: /* bline: ITOK FTOK  */
-#line 333 "engines/hypno/grammar_arc.y"
+  case 61: /* bline: ITOK FTOK  */
+#line 336 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F");
 	}
-#line 1769 "engines/hypno/grammar_arc.cpp"
+#line 1781 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 61: /* bline: ITOK GTOK  */
-#line 337 "engines/hypno/grammar_arc.y"
+  case 62: /* bline: ITOK GTOK  */
+#line 340 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == G
 		shoot->name = "G";
 		debugC(1, kHypnoDebugParser, "I G");
 	}
-#line 1778 "engines/hypno/grammar_arc.cpp"
+#line 1790 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 62: /* bline: ITOK HTOK  */
-#line 341 "engines/hypno/grammar_arc.y"
+  case 63: /* bline: ITOK HTOK  */
+#line 344 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H");
 	}
-#line 1787 "engines/hypno/grammar_arc.cpp"
+#line 1799 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 63: /* bline: ITOK ITOK  */
-#line 345 "engines/hypno/grammar_arc.y"
+  case 64: /* bline: ITOK ITOK  */
+#line 348 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I");
 	}
-#line 1796 "engines/hypno/grammar_arc.cpp"
+#line 1808 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 64: /* bline: ITOK JTOK  */
-#line 349 "engines/hypno/grammar_arc.y"
+  case 65: /* bline: ITOK JTOK  */
+#line 352 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == J
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J");
 	}
-#line 1805 "engines/hypno/grammar_arc.cpp"
+#line 1817 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 65: /* bline: ITOK KTOK  */
-#line 353 "engines/hypno/grammar_arc.y"
+  case 66: /* bline: ITOK KTOK  */
+#line 356 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == K
 		shoot->name = "K";
 		debugC(1, kHypnoDebugParser, "I K");
 	}
-#line 1814 "engines/hypno/grammar_arc.cpp"
+#line 1826 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 66: /* bline: ITOK NTOK  */
-#line 357 "engines/hypno/grammar_arc.y"
+  case 67: /* bline: ITOK NTOK  */
+#line 360 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N");
 	}
-#line 1823 "engines/hypno/grammar_arc.cpp"
+#line 1835 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 67: /* bline: ITOK OTOK  */
-#line 361 "engines/hypno/grammar_arc.y"
+  case 68: /* bline: ITOK OTOK  */
+#line 364 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O");
 	}
-#line 1832 "engines/hypno/grammar_arc.cpp"
+#line 1844 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 68: /* bline: ITOK PTOK  */
-#line 365 "engines/hypno/grammar_arc.y"
+  case 69: /* bline: ITOK PTOK  */
+#line 368 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P");
 	}
-#line 1841 "engines/hypno/grammar_arc.cpp"
+#line 1853 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 69: /* bline: ITOK QTOK  */
-#line 369 "engines/hypno/grammar_arc.y"
+  case 70: /* bline: ITOK QTOK  */
+#line 372 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q");
 	}
-#line 1850 "engines/hypno/grammar_arc.cpp"
+#line 1862 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 70: /* bline: ITOK RTOK  */
-#line 373 "engines/hypno/grammar_arc.y"
+  case 71: /* bline: ITOK RTOK  */
+#line 376 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R");
 	}
-#line 1859 "engines/hypno/grammar_arc.cpp"
+#line 1871 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 71: /* bline: ITOK SNTOK  */
-#line 377 "engines/hypno/grammar_arc.y"
+  case 72: /* bline: ITOK SNTOK  */
+#line 380 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1868 "engines/hypno/grammar_arc.cpp"
+#line 1880 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 72: /* bline: ITOK TTOK  */
-#line 381 "engines/hypno/grammar_arc.y"
+  case 73: /* bline: ITOK TTOK  */
+#line 384 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T");
 	}
-#line 1877 "engines/hypno/grammar_arc.cpp"
+#line 1889 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 73: /* bline: ITOK LTOK  */
-#line 385 "engines/hypno/grammar_arc.y"
+  case 74: /* bline: ITOK LTOK  */
+#line 388 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == L
 		shoot->name = "L";
 		debugC(1, kHypnoDebugParser, "I L");
 	}
-#line 1886 "engines/hypno/grammar_arc.cpp"
+#line 1898 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 74: /* bline: ITOK MTOK  */
-#line 389 "engines/hypno/grammar_arc.y"
+  case 75: /* bline: ITOK MTOK  */
+#line 392 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == M
 		shoot->name = "M";
 		debugC(1, kHypnoDebugParser, "I M");
 	}
-#line 1895 "engines/hypno/grammar_arc.cpp"
+#line 1907 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 75: /* bline: ITOK UTOK  */
-#line 393 "engines/hypno/grammar_arc.y"
+  case 76: /* bline: ITOK UTOK  */
+#line 396 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == U
 		shoot->name = "U";
 		debugC(1, kHypnoDebugParser, "I U");
 	}
-#line 1904 "engines/hypno/grammar_arc.cpp"
+#line 1916 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 76: /* bline: JTOK NUM  */
-#line 397 "engines/hypno/grammar_arc.y"
+  case 77: /* bline: JTOK NUM  */
+#line 400 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
 	}
-#line 1912 "engines/hypno/grammar_arc.cpp"
+#line 1924 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 77: /* bline: A0TOK NUM NUM  */
-#line 400 "engines/hypno/grammar_arc.y"
+  case 78: /* bline: A0TOK NUM NUM  */
+#line 403 "engines/hypno/grammar_arc.y"
                         {
 		shoot->position = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "A0 %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1921 "engines/hypno/grammar_arc.cpp"
+#line 1933 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 78: /* bline: RTOK NUM NUM  */
-#line 404 "engines/hypno/grammar_arc.y"
+  case 79: /* bline: RTOK NUM NUM  */
+#line 407 "engines/hypno/grammar_arc.y"
                         {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1931 "engines/hypno/grammar_arc.cpp"
+#line 1943 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 79: /* bline: R01TOK NUM NUM  */
-#line 409 "engines/hypno/grammar_arc.y"
+  case 80: /* bline: R01TOK NUM NUM  */
+#line 412 "engines/hypno/grammar_arc.y"
                           {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R0/1 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1940 "engines/hypno/grammar_arc.cpp"
+#line 1952 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 80: /* bline: BNTOK NUM NUM  */
-#line 413 "engines/hypno/grammar_arc.y"
+  case 81: /* bline: BNTOK NUM NUM  */
+#line 416 "engines/hypno/grammar_arc.y"
                         {
 		FrameInfo fi((yyvsp[0].i), (yyvsp[-1].i));
 		shoot->bodyFrames.push_back(fi);
 		debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1950 "engines/hypno/grammar_arc.cpp"
+#line 1962 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 81: /* bline: KNTOK NUM NUM  */
-#line 418 "engines/hypno/grammar_arc.y"
+  case 82: /* bline: KNTOK NUM NUM  */
+#line 421 "engines/hypno/grammar_arc.y"
                         {
 		FrameInfo fi((yyvsp[0].i), (yyvsp[-1].i));
 		shoot->explosionFrames.push_back(fi);
 		debugC(1, kHypnoDebugParser, "KN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1960 "engines/hypno/grammar_arc.cpp"
+#line 1972 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 82: /* bline: P0TOK NUM NUM  */
-#line 423 "engines/hypno/grammar_arc.y"
+  case 83: /* bline: P0TOK NUM NUM  */
+#line 426 "engines/hypno/grammar_arc.y"
                         {
 		shoot->paletteSize = (yyvsp[-1].i);
 		shoot->paletteOffset = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "P0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1969 "engines/hypno/grammar_arc.cpp"
+#line 1981 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 83: /* bline: OTOK NUM NUM  */
-#line 427 "engines/hypno/grammar_arc.y"
+  case 84: /* bline: OTOK NUM NUM  */
+#line 430 "engines/hypno/grammar_arc.y"
                        {
 		if ((yyvsp[-1].i) == 0 && (yyvsp[0].i) == 0)
 			error("Invalid O command (0, 0)");
 		shoot->deathPosition = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1980 "engines/hypno/grammar_arc.cpp"
+#line 1992 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 84: /* bline: CTOK NUM  */
-#line 433 "engines/hypno/grammar_arc.y"
+  case 85: /* bline: CTOK NUM  */
+#line 436 "engines/hypno/grammar_arc.y"
                     {
 		shoot->timesToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
 	}
-#line 1989 "engines/hypno/grammar_arc.cpp"
+#line 2001 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 85: /* bline: HTOK NUM  */
-#line 437 "engines/hypno/grammar_arc.y"
+  case 86: /* bline: HTOK NUM  */
+#line 440 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrames.push_back((yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1997 "engines/hypno/grammar_arc.cpp"
+#line 2009 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 86: /* bline: VTOK NUM  */
-#line 440 "engines/hypno/grammar_arc.y"
+  case 87: /* bline: VTOK NUM  */
+#line 443 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 2003 "engines/hypno/grammar_arc.cpp"
+#line 2015 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 87: /* bline: WTOK NUM  */
-#line 441 "engines/hypno/grammar_arc.y"
+  case 88: /* bline: WTOK NUM  */
+#line 444 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 2011 "engines/hypno/grammar_arc.cpp"
+#line 2023 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 88: /* bline: DTOK NUM  */
-#line 444 "engines/hypno/grammar_arc.y"
+  case 89: /* bline: DTOK NUM  */
+#line 447 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 2020 "engines/hypno/grammar_arc.cpp"
+#line 2032 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 89: /* bline: LTOK NUM NUM  */
-#line 448 "engines/hypno/grammar_arc.y"
+  case 90: /* bline: LTOK NUM NUM  */
+#line 451 "engines/hypno/grammar_arc.y"
                        {
 		debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 2028 "engines/hypno/grammar_arc.cpp"
+#line 2040 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 90: /* bline: LTOK NUM  */
-#line 451 "engines/hypno/grammar_arc.y"
+  case 91: /* bline: LTOK NUM  */
+#line 454 "engines/hypno/grammar_arc.y"
                    {
 		debugC(1, kHypnoDebugParser, "L %d", (yyvsp[0].i));
 		FrameInfo fi((yyvsp[0].i)-1, 0);
 		shoot->bodyFrames.push_back(fi);
 	}
-#line 2038 "engines/hypno/grammar_arc.cpp"
+#line 2050 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 91: /* bline: MTOK NUM  */
-#line 456 "engines/hypno/grammar_arc.y"
+  case 92: /* bline: MTOK NUM  */
+#line 459 "engines/hypno/grammar_arc.y"
                    { debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i));
 		shoot->missedAnimation = (yyvsp[0].i);
 	}
-#line 2046 "engines/hypno/grammar_arc.cpp"
+#line 2058 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 92: /* bline: KTOK NUM  */
-#line 459 "engines/hypno/grammar_arc.y"
+  case 93: /* bline: KTOK NUM  */
+#line 462 "engines/hypno/grammar_arc.y"
                    { debugC(1, kHypnoDebugParser, "K %d", (yyvsp[0].i));
 		FrameInfo fi((yyvsp[0].i), 1);
 		shoot->explosionFrames.push_back(fi);
 	}
-#line 2055 "engines/hypno/grammar_arc.cpp"
+#line 2067 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 93: /* bline: KTOK NUM NUM  */
-#line 463 "engines/hypno/grammar_arc.y"
+  case 94: /* bline: KTOK NUM NUM  */
+#line 466 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "K %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 		FrameInfo fi((yyvsp[-1].i), 1);
 		shoot->explosionFrames.push_back(fi);
 	}
-#line 2064 "engines/hypno/grammar_arc.cpp"
+#line 2076 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 94: /* bline: SNTOK FILENAME enc  */
-#line 467 "engines/hypno/grammar_arc.y"
+  case 95: /* bline: SNTOK FILENAME enc  */
+#line 470 "engines/hypno/grammar_arc.y"
                              {
 		if (Common::String("S0") == (yyvsp[-2].s))
 			shoot->enemySound = (yyvsp[-1].s);
@@ -2074,60 +2086,60 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 2078 "engines/hypno/grammar_arc.cpp"
+#line 2090 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 95: /* bline: GTOK  */
-#line 476 "engines/hypno/grammar_arc.y"
+  case 96: /* bline: GTOK  */
+#line 479 "engines/hypno/grammar_arc.y"
                { debugC(1, kHypnoDebugParser, "G"); }
-#line 2084 "engines/hypno/grammar_arc.cpp"
+#line 2096 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 96: /* bline: TTOK NUM  */
-#line 477 "engines/hypno/grammar_arc.y"
+  case 97: /* bline: TTOK NUM  */
+#line 480 "engines/hypno/grammar_arc.y"
                    {
 		debugC(1, kHypnoDebugParser, "T %d", (yyvsp[0].i));
 	}
-#line 2092 "engines/hypno/grammar_arc.cpp"
+#line 2104 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 97: /* bline: TTOK  */
-#line 480 "engines/hypno/grammar_arc.y"
+  case 98: /* bline: TTOK  */
+#line 483 "engines/hypno/grammar_arc.y"
                {
 		debugC(1, kHypnoDebugParser, "T");
 	}
-#line 2100 "engines/hypno/grammar_arc.cpp"
+#line 2112 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 98: /* bline: MTOK  */
-#line 483 "engines/hypno/grammar_arc.y"
+  case 99: /* bline: MTOK  */
+#line 486 "engines/hypno/grammar_arc.y"
                {
 		debugC(1, kHypnoDebugParser, "M");
 	}
-#line 2108 "engines/hypno/grammar_arc.cpp"
+#line 2120 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 99: /* bline: NTOK  */
-#line 486 "engines/hypno/grammar_arc.y"
+  case 100: /* bline: NTOK  */
+#line 489 "engines/hypno/grammar_arc.y"
                {
 		shoot->noEnemySound = true;
 		debugC(1, kHypnoDebugParser, "N"); }
-#line 2116 "engines/hypno/grammar_arc.cpp"
+#line 2128 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 100: /* bline: ZTOK  */
-#line 489 "engines/hypno/grammar_arc.y"
+  case 101: /* bline: ZTOK  */
+#line 492 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot);
 		//delete shoot;
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z");
 	}
-#line 2127 "engines/hypno/grammar_arc.cpp"
+#line 2139 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 2131 "engines/hypno/grammar_arc.cpp"
+#line 2143 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 225117c19a1..6cb8442edfd 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -58,7 +58,7 @@ using namespace Hypno;
 %token<s> NAME FILENAME BNTOK SNTOK KNTOK YXTOK FNTOK ENCTOK ONTOK
 %token<i> NUM BYTE
 // header
-%token COMMENT AVTOK ABTOK CTOK DTOK HTOK HETOK HLTOK H12TOK HUTOK RETTOK QTOK RESTOK
+%token COMMENT ALTOK AVTOK ABTOK CTOK DTOK HTOK HETOK HLTOK H12TOK HUTOK RETTOK QTOK RESTOK
 %token PTOK FTOK TTOK TATOK TPTOK ATOK VTOK OTOK LTOK MTOK NTOK NSTOK RTOK R01TOK
 %token ITOK I1TOK GTOK JTOK J0TOK KTOK UTOK ZTOK
 
@@ -138,7 +138,7 @@ hline: 	CTOK NUM {
 		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", $2, $3, $4);
 	}
-	| TATOK NUM FILENAME enc {
+	| TATOK NUM FILENAME flag enc {
 		ArcadeTransition at("", "", $3, $2);
 		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "Ta %d %s", $2, $3);
@@ -294,6 +294,9 @@ bline: FNTOK FILENAME {
 	| AVTOK NUM {
 		debugC(1, kHypnoDebugParser, "AV %d", $2);
 	}
+	| ALTOK NUM {
+		debugC(1, kHypnoDebugParser, "AL %d", $2);
+	}
 	| ABTOK NUM {
 		debugC(1, kHypnoDebugParser, "AB %d", $2);
 	}
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index f0f0a0a68c4..2e9b822f657 100644
--- a/engines/hypno/lexer_arc.cpp
+++ b/engines/hypno/lexer_arc.cpp
@@ -633,8 +633,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 55
-#define YY_END_OF_BUFFER 56
+#define YY_NUM_RULES 56
+#define YY_END_OF_BUFFER 57
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -642,18 +642,18 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[92] =
+static const flex_int16_t yy_accept[93] =
     {   0,
-        0,    0,   56,   54,   53,   51,   51,   54,   46,   46,
-       46,   46,   54,   12,   47,    2,    3,   47,   37,   27,
-        8,   22,   25,   26,   16,   19,   17,   14,    9,   28,
-       20,   47,   33,   29,   13,   31,   32,   47,   30,   47,
-       53,   46,   49,   46,   46,   46,   46,    0,   47,   39,
-       47,   47,   10,   11,   48,   40,   40,   36,    7,    4,
-        5,    6,   23,   24,   41,   18,   47,   15,   42,   21,
-       38,   35,   34,   43,   43,   47,   47,   47,   45,   45,
-       44,   44,   46,   52,   47,    0,    1,    0,    0,   50,
-        0
+        0,    0,   57,   55,   54,   52,   52,   55,   47,   47,
+       47,   47,   55,   13,   48,    2,    3,   48,   38,   28,
+        8,   23,   26,   27,   17,   20,   18,   15,    9,   29,
+       21,   48,   34,   30,   14,   32,   33,   48,   31,   48,
+       54,   47,   50,   47,   47,   47,   47,    0,   48,   40,
+       48,   48,   10,   11,   12,   49,   41,   41,   37,    7,
+        4,    5,    6,   24,   25,   42,   19,   48,   16,   43,
+       22,   39,   36,   35,   44,   44,   48,   48,   48,   46,
+       46,   45,   45,   47,   53,   48,    0,    1,    0,    0,
+       51,    0
 
     } ;
 
@@ -698,37 +698,37 @@ static const YY_CHAR yy_meta[48] =
         5,    4,    4,    4,    4,    4,    1
     } ;
 
-static const flex_int16_t yy_base[98] =
+static const flex_int16_t yy_base[99] =
     {   0,
-        0,    0,  157,  616,  153,  616,  616,   39,   44,   49,
-       54,   59,    0,   65,   99,   79,   85,  119,  125,  133,
-      167,  137,  172,  201,  205,  208,  218,  239,  245,  241,
-      259,  278,  282,  285,  287,  304,  316,  344,  339,  141,
-      137,   73,    0,  112,  382,   55,  159,  109,  335,  349,
-      386,  389,  391,  409,    0,  412,  422,  426,  432,  443,
-      445,  449,  455,  466,  472,  616,  476,  486,  489,  499,
-      503,  509,  520,  522,  526,  368,  554,  560,    0,  616,
-        0,  616,  214,  101,  564,   93,  566,   94,   90,  616,
-      616,  599,  604,  606,  608,   75,  610
+        0,    0,  105,  625,  102,  625,  625,   39,   44,   49,
+       54,   59,    0,   65,   99,   84,  118,  124,  133,  139,
+      173,  143,  178,  207,  211,  214,  224,  245,  251,  247,
+      265,  284,  288,  291,  293,  310,  322,  350,  345,   74,
+      101,  111,    0,  340,  388,   55,  130,   95,  357,  392,
+      395,  397,  415,  418,  428,    0,  432,  438,  449,  451,
+      455,  461,  472,  478,  482,  484,  625,  495,  501,  505,
+      515,  518,  528,  532,  538,  549,  364,  373,  568,    0,
+      625,    0,  625,  151,   94,  572,   79,  575,   80,   79,
+      625,  625,  608,  613,  615,  617,   75,  619
 
     } ;
 
-static const flex_int16_t yy_def[98] =
+static const flex_int16_t yy_def[99] =
     {   0,
-       91,    1,   91,   91,   91,   91,   91,   91,   92,   92,
-       92,   92,   93,   94,   94,   94,   94,   94,   94,   94,
-       94,   21,   21,   94,   21,   21,   21,   21,   21,   21,
-       21,   94,   21,   21,   21,   21,   21,   95,   21,   96,
-       91,   91,   92,   92,   92,   45,   45,   93,   97,   21,
-       21,   21,   21,   21,   97,   21,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   91,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   91,   96,   96,   92,   91,
-       92,   91,   45,   93,   21,   91,   21,   91,   91,   91,
-        0,   91,   91,   91,   91,   91,   91
+       92,    1,   92,   92,   92,   92,   92,   92,   93,   93,
+       93,   93,   94,   95,   95,   95,   95,   95,   95,   95,
+       95,   21,   21,   95,   21,   21,   21,   21,   21,   21,
+       21,   95,   21,   21,   21,   21,   21,   96,   21,   97,
+       92,   92,   93,   93,   93,   45,   45,   94,   98,   21,
+       21,   21,   21,   21,   21,   98,   21,   21,   21,   21,
+       21,   21,   21,   21,   21,   21,   92,   21,   21,   21,
+       21,   21,   21,   21,   21,   21,   92,   97,   97,   93,
+       92,   93,   92,   45,   94,   21,   92,   21,   92,   92,
+       92,    0,   92,   92,   92,   92,   92,   92
 
     } ;
 
-static const flex_int16_t yy_nxt[664] =
+static const flex_int16_t yy_nxt[673] =
     {   0,
         4,    5,    6,    7,    4,    4,    8,    4,    9,   10,
        11,   12,    9,   13,   14,   15,   16,   17,   18,   19,
@@ -737,75 +737,76 @@ static const flex_int16_t yy_nxt[664] =
         4,   40,   18,   18,   18,   18,    7,   42,   42,   42,
        42,   42,   44,   44,   44,   44,   44,   44,   45,   44,
        44,   44,   44,   44,   46,   44,   44,   44,   44,   47,
-       44,   44,   49,   50,   51,   51,   51,   51,   78,   81,
-       53,   42,   42,   42,   42,   42,   49,   51,   51,   51,
-       51,   51,   49,   51,   51,   51,   51,   51,   90,   81,
-
-       54,   82,   89,   88,   84,   55,   49,   56,   56,   56,
-       56,   56,   84,   57,   57,   57,   57,   57,   57,   55,
-       44,   44,   44,   44,   44,   55,   49,   51,   51,   51,
-       51,   51,   49,   58,   58,   58,   58,   58,   41,   55,
-       49,   51,   51,   51,   51,   51,   63,   51,   76,   77,
-       77,   77,   77,   77,   41,   52,   91,   91,   91,   55,
-       91,   91,   52,   91,   91,   55,   91,   83,   91,   91,
-       91,   52,   91,   55,   49,   51,   59,   59,   51,   51,
-       64,   51,   51,   43,   91,   60,   91,   91,   91,   91,
-       52,   91,   61,   91,   91,   91,   91,   52,   91,   91,
-
-       91,   62,   91,   43,   91,   91,   52,   55,   49,   65,
-       65,   65,   65,   65,   51,   51,   91,   51,   51,   86,
-       91,   91,   66,   52,   91,   91,   52,   51,   51,   91,
-       52,   91,   91,   52,   91,   91,   52,   91,   43,   52,
-       91,   55,   52,   52,   91,   91,   67,   68,   68,   51,
-       51,   51,   52,   69,   51,   51,   91,   52,   43,   52,
-       91,   91,   91,   52,   52,   91,   52,   70,   70,   51,
-       52,   91,   91,   52,   91,   52,   91,   52,   91,   52,
-       91,   91,   91,   91,   52,   49,   71,   71,   71,   71,
-       71,   51,   51,   52,   51,   51,   51,   51,   91,   91,
-
-       52,   91,   91,   52,   91,   52,   91,   52,   91,   91,
-       52,   91,   52,   51,   51,   91,   52,   91,   55,   52,
-       91,   52,   52,   91,   72,   51,   51,   73,   91,   52,
-       91,   91,   91,   91,   52,   91,   91,   91,   52,   91,
-       91,   52,   49,   49,   49,   49,   49,   49,   51,   51,
-       52,   49,   74,   74,   74,   74,   74,   52,   51,   51,
-       91,   91,   91,   91,   52,   91,   91,   52,   91,   91,
-       91,   91,   91,   52,   52,   76,   76,   76,   76,   76,
-       76,   91,   91,   52,   55,   52,   52,   52,   52,   52,
-       44,   44,   44,   44,   44,   51,   51,   91,   51,   51,
-
-       51,   51,   91,   91,   52,   91,   79,   52,   91,   52,
-       91,   52,   91,   91,   52,   91,   52,   91,   51,   51,
-       52,   51,   51,   52,   91,   52,   79,   52,   80,   91,
-       52,   51,   51,   91,   52,   51,   51,   52,   91,   91,
-       52,   51,   51,   52,   52,   91,   52,   52,   91,   91,
-       52,   52,   51,   51,   51,   51,   52,   52,   51,   51,
-       52,   52,   91,   52,   51,   51,   52,   52,   52,   91,
-       52,   91,   91,   52,   52,   51,   51,   52,   91,   52,
-       52,   51,   51,   52,   52,   51,   51,   91,   91,   52,
-       52,   52,   91,   91,   52,   51,   51,   52,   51,   51,
-
-       52,   52,   91,   85,   52,   91,   52,   52,   51,   51,
-       52,   52,   51,   51,   52,   91,   91,   52,   51,   51,
-       52,   52,   91,   52,   52,   91,   91,   52,   52,   51,
-       51,   51,   51,   52,   52,   51,   51,   52,   52,   91,
-       52,   91,   91,   52,   52,   52,   91,   52,   91,   91,
-       91,   52,   91,   91,   52,   91,   52,   91,   91,   91,
-       52,   76,   77,   77,   77,   77,   77,   76,   77,   77,
-       77,   77,   77,   51,   51,   51,   51,   91,   91,   91,
-       91,   91,   87,   91,   52,   91,   91,   91,   91,   52,
-       91,   52,   91,   91,   91,   91,   91,   91,   52,   91,
-
-       52,   43,   43,   43,   48,   91,   48,   48,   48,   52,
-       52,   75,   75,   55,   55,    3,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91
+       44,   44,   49,   50,   51,   51,   51,   51,   79,   82,
+       53,   77,   78,   78,   78,   78,   78,   91,   90,   89,
+       54,   49,   51,   51,   51,   51,   51,   85,   85,   82,
+
+       55,   83,   41,   41,   92,   56,   49,   57,   57,   57,
+       57,   57,   92,   58,   58,   58,   58,   58,   58,   42,
+       42,   42,   42,   42,   56,   49,   51,   51,   51,   51,
+       51,   49,   51,   51,   51,   51,   51,   92,   84,   56,
+       49,   59,   59,   59,   59,   59,   49,   51,   51,   51,
+       51,   51,   64,   51,   43,   92,   87,   92,   56,   92,
+       92,   52,   92,   92,   56,   92,   92,   92,   52,   92,
+       92,   92,   92,   56,   43,   43,   92,   52,   92,   56,
+       49,   51,   60,   60,   51,   51,   65,   51,   51,   92,
+       92,   61,   92,   92,   92,   43,   52,   92,   62,   92,
+
+       92,   92,   92,   52,   92,   92,   92,   63,   92,   92,
+       92,   92,   52,   56,   49,   66,   66,   66,   66,   66,
+       51,   51,   92,   51,   51,   92,   92,   92,   67,   52,
+       92,   92,   52,   51,   51,   92,   52,   92,   92,   52,
+       92,   92,   52,   92,   92,   52,   92,   56,   52,   52,
+       92,   92,   68,   69,   69,   51,   51,   51,   52,   70,
+       51,   51,   92,   52,   92,   52,   92,   92,   92,   52,
+       52,   92,   52,   71,   71,   51,   52,   92,   92,   52,
+       92,   52,   92,   52,   92,   52,   92,   92,   92,   92,
+       52,   49,   72,   72,   72,   72,   72,   51,   51,   52,
+
+       51,   51,   51,   51,   92,   92,   52,   92,   92,   52,
+       92,   52,   92,   52,   92,   92,   52,   92,   52,   51,
+       51,   92,   52,   92,   56,   52,   92,   52,   52,   92,
+       73,   51,   51,   74,   92,   52,   92,   92,   92,   92,
+       52,   92,   92,   92,   52,   92,   92,   52,   44,   44,
+       44,   44,   44,   92,   51,   51,   52,   49,   75,   75,
+       75,   75,   75,   52,   49,   49,   49,   49,   49,   49,
+       52,   77,   77,   77,   77,   77,   77,   92,   92,   52,
+       77,   78,   78,   78,   78,   78,   92,   92,   92,   92,
+       56,   52,   52,   52,   52,   52,   44,   44,   44,   44,
+
+       44,   51,   51,   92,   51,   51,   51,   51,   92,   92,
+       52,   92,   80,   52,   92,   52,   92,   52,   92,   92,
+       52,   92,   52,   92,   51,   51,   52,   51,   51,   52,
+       92,   52,   80,   52,   81,   92,   52,   51,   51,   92,
+       52,   51,   51,   52,   92,   92,   52,   51,   51,   52,
+       52,   92,   52,   52,   92,   92,   52,   52,   51,   51,
+       51,   51,   52,   52,   51,   51,   52,   52,   92,   52,
+       51,   51,   52,   52,   52,   92,   52,   92,   92,   52,
+       52,   51,   51,   52,   92,   52,   52,   51,   51,   52,
+       52,   51,   51,   51,   51,   52,   52,   52,   92,   92,
+
+       52,   92,   52,   52,   51,   51,   52,   52,   92,   52,
+       51,   51,   52,   52,   51,   51,   52,   92,   52,   52,
+       52,   92,   86,   52,   51,   51,   52,   51,   51,   52,
+       52,   92,   92,   52,   92,   52,   52,   51,   51,   52,
+       52,   51,   51,   52,   92,   92,   52,   51,   51,   52,
+       52,   92,   52,   52,   92,   92,   52,   52,   51,   51,
+       92,   92,   52,   52,   92,   92,   52,   52,   92,   92,
+       92,   92,   52,   92,   52,   77,   78,   78,   78,   78,
+       78,   51,   51,   52,   51,   51,   92,   92,   92,   92,
+       88,   92,   92,   52,   92,   92,   92,   52,   92,   92,
+
+       52,   92,   92,   92,   92,   92,   52,   92,   92,   52,
+       43,   43,   43,   48,   92,   48,   48,   48,   52,   52,
+       76,   76,   56,   56,    3,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92
     } ;
 
-static const flex_int16_t yy_chk[664] =
+static const flex_int16_t yy_chk[673] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -814,80 +815,81 @@ static const flex_int16_t yy_chk[664] =
         1,    1,    1,    1,    1,    1,    1,    8,    8,    8,
         8,    8,    9,    9,    9,    9,    9,   10,   10,   10,
        10,   10,   11,   11,   11,   11,   11,   12,   12,   12,
-       12,   12,   14,   14,   14,   14,   14,   14,   96,   46,
-       14,   42,   42,   42,   42,   42,   16,   16,   16,   16,
-       16,   16,   17,   17,   17,   17,   17,   17,   89,   46,
-
-       14,   46,   88,   86,   84,   14,   15,   15,   15,   15,
-       15,   15,   48,   15,   15,   15,   15,   15,   15,   16,
-       44,   44,   44,   44,   44,   17,   18,   18,   18,   18,
-       18,   18,   19,   19,   19,   19,   19,   19,   41,   15,
-       20,   20,   20,   20,   20,   20,   22,   22,   40,   40,
-       40,   40,   40,   40,    5,   22,    3,    0,    0,   18,
-        0,    0,   22,    0,    0,   19,    0,   47,    0,    0,
-        0,   22,    0,   20,   21,   21,   21,   21,   21,   21,
-       23,   23,   23,   47,    0,   21,    0,    0,    0,    0,
-       23,    0,   21,    0,    0,    0,    0,   23,    0,    0,
-
-        0,   21,    0,   47,    0,   47,   23,   21,   24,   24,
-       24,   24,   24,   24,   25,   25,    0,   26,   26,   83,
-        0,    0,   27,   25,    0,    0,   26,   27,   27,    0,
-       25,    0,    0,   26,    0,    0,   27,    0,   83,   25,
-        0,   24,   26,   27,    0,    0,   27,   28,   28,   28,
-       30,   30,   27,   29,   29,   29,    0,   28,   83,   30,
-       83,    0,    0,   29,   28,    0,   30,   31,   31,   31,
-       29,    0,    0,   28,    0,   30,    0,   31,    0,   29,
-        0,    0,    0,    0,   31,   32,   32,   32,   32,   32,
-       32,   33,   33,   31,   34,   34,   35,   35,    0,    0,
-
-       33,    0,    0,   34,    0,   35,    0,   33,    0,    0,
-       34,    0,   35,   36,   36,    0,   33,    0,   32,   34,
-        0,   35,   36,    0,   33,   37,   37,   33,    0,   36,
-        0,    0,    0,    0,   37,    0,    0,    0,   36,    0,
-        0,   37,   49,   49,   49,   49,   49,   49,   39,   39,
-       37,   38,   38,   38,   38,   38,   38,   39,   50,   50,
-        0,    0,    0,    0,   39,    0,    0,   50,    0,    0,
-        0,    0,    0,   39,   50,   76,   76,   76,   76,   76,
-       76,    0,    0,   50,   38,   38,   38,   38,   38,   38,
-       45,   45,   45,   45,   45,   51,   51,    0,   52,   52,
-
-       53,   53,    0,    0,   51,    0,   45,   52,    0,   53,
-        0,   51,    0,    0,   52,    0,   53,    0,   54,   54,
-       51,   56,   56,   52,    0,   53,   45,   54,   45,    0,
-       56,   57,   57,    0,   54,   58,   58,   56,    0,    0,
-       57,   59,   59,   54,   58,    0,   56,   57,    0,    0,
-       59,   58,   60,   60,   61,   61,   57,   59,   62,   62,
-       58,   60,    0,   61,   63,   63,   59,   62,   60,    0,
-       61,    0,    0,   63,   62,   64,   64,   60,    0,   61,
-       63,   65,   65,   62,   64,   67,   67,    0,    0,   63,
-       65,   64,    0,    0,   67,   68,   68,   65,   69,   69,
-
-       64,   67,    0,   67,   68,    0,   65,   69,   70,   70,
-       67,   68,   71,   71,   69,    0,    0,   70,   72,   72,
-       68,   71,    0,   69,   70,    0,    0,   72,   71,   73,
-       73,   74,   74,   70,   72,   75,   75,   71,   73,    0,
-       74,    0,    0,   72,   75,   73,    0,   74,    0,    0,
-        0,   75,    0,    0,   73,    0,   74,    0,    0,    0,
-       75,   77,   77,   77,   77,   77,   77,   78,   78,   78,
-       78,   78,   78,   85,   85,   87,   87,    0,    0,    0,
-        0,    0,   85,    0,   87,    0,    0,    0,    0,   85,
-        0,   87,    0,    0,    0,    0,    0,    0,   85,    0,
-
-       87,   92,   92,   92,   93,    0,   93,   93,   93,   94,
-       94,   95,   95,   97,   97,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91
+       12,   12,   14,   14,   14,   14,   14,   14,   97,   46,
+       14,   40,   40,   40,   40,   40,   40,   90,   89,   87,
+       14,   16,   16,   16,   16,   16,   16,   85,   48,   46,
+
+       14,   46,   41,    5,    3,   14,   15,   15,   15,   15,
+       15,   15,    0,   15,   15,   15,   15,   15,   15,   42,
+       42,   42,   42,   42,   16,   17,   17,   17,   17,   17,
+       17,   18,   18,   18,   18,   18,   18,    0,   47,   15,
+       19,   19,   19,   19,   19,   19,   20,   20,   20,   20,
+       20,   20,   22,   22,   47,    0,   84,    0,   17,    0,
+        0,   22,    0,    0,   18,    0,    0,    0,   22,    0,
+        0,    0,    0,   19,   47,   84,   47,   22,    0,   20,
+       21,   21,   21,   21,   21,   21,   23,   23,   23,    0,
+        0,   21,    0,    0,    0,   84,   23,   84,   21,    0,
+
+        0,    0,    0,   23,    0,    0,    0,   21,    0,    0,
+        0,    0,   23,   21,   24,   24,   24,   24,   24,   24,
+       25,   25,    0,   26,   26,    0,    0,    0,   27,   25,
+        0,    0,   26,   27,   27,    0,   25,    0,    0,   26,
+        0,    0,   27,    0,    0,   25,    0,   24,   26,   27,
+        0,    0,   27,   28,   28,   28,   30,   30,   27,   29,
+       29,   29,    0,   28,    0,   30,    0,    0,    0,   29,
+       28,    0,   30,   31,   31,   31,   29,    0,    0,   28,
+        0,   30,    0,   31,    0,   29,    0,    0,    0,    0,
+       31,   32,   32,   32,   32,   32,   32,   33,   33,   31,
+
+       34,   34,   35,   35,    0,    0,   33,    0,    0,   34,
+        0,   35,    0,   33,    0,    0,   34,    0,   35,   36,
+       36,    0,   33,    0,   32,   34,    0,   35,   36,    0,
+       33,   37,   37,   33,    0,   36,    0,    0,    0,    0,
+       37,    0,    0,    0,   36,    0,    0,   37,   44,   44,
+       44,   44,   44,    0,   39,   39,   37,   38,   38,   38,
+       38,   38,   38,   39,   49,   49,   49,   49,   49,   49,
+       39,   77,   77,   77,   77,   77,   77,    0,    0,   39,
+       78,   78,   78,   78,   78,   78,    0,    0,    0,    0,
+       38,   38,   38,   38,   38,   38,   45,   45,   45,   45,
+
+       45,   50,   50,    0,   51,   51,   52,   52,    0,    0,
+       50,    0,   45,   51,    0,   52,    0,   50,    0,    0,
+       51,    0,   52,    0,   53,   53,   50,   54,   54,   51,
+        0,   52,   45,   53,   45,    0,   54,   55,   55,    0,
+       53,   57,   57,   54,    0,    0,   55,   58,   58,   53,
+       57,    0,   54,   55,    0,    0,   58,   57,   59,   59,
+       60,   60,   55,   58,   61,   61,   57,   59,    0,   60,
+       62,   62,   58,   61,   59,    0,   60,    0,    0,   62,
+       61,   63,   63,   59,    0,   60,   62,   64,   64,   61,
+       63,   65,   65,   66,   66,   62,   64,   63,    0,    0,
+
+       65,    0,   66,   64,   68,   68,   63,   65,    0,   66,
+       69,   69,   64,   68,   70,   70,   65,    0,   66,   69,
+       68,    0,   68,   70,   71,   71,   69,   72,   72,   68,
+       70,    0,    0,   71,    0,   69,   72,   73,   73,   70,
+       71,   74,   74,   72,    0,    0,   73,   75,   75,   71,
+       74,    0,   72,   73,    0,    0,   75,   74,   76,   76,
+        0,    0,   73,   75,    0,    0,   74,   76,    0,    0,
+        0,    0,   75,    0,   76,   79,   79,   79,   79,   79,
+       79,   86,   86,   76,   88,   88,    0,    0,    0,    0,
+       86,    0,    0,   88,    0,    0,    0,   86,    0,    0,
+
+       88,    0,    0,    0,    0,    0,   86,    0,    0,   88,
+       93,   93,   93,   94,    0,   94,   94,   94,   95,   95,
+       96,   96,   98,   98,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[56] =
+static const flex_int32_t yy_rule_can_match_eol[57] =
     {   0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -934,8 +936,8 @@ char *yytext;
 #include "hypno/grammar.h"
 #include "hypno/tokens_arc.h"
 
-#line 937 "engines/hypno/lexer_arc.cpp"
-#line 938 "engines/hypno/lexer_arc.cpp"
+#line 939 "engines/hypno/lexer_arc.cpp"
+#line 940 "engines/hypno/lexer_arc.cpp"
 
 #define INITIAL 0
 
@@ -1152,7 +1154,7 @@ YY_DECL
 	{
 #line 42 "engines/hypno/lexer_arc.l"
 
-#line 1155 "engines/hypno/lexer_arc.cpp"
+#line 1157 "engines/hypno/lexer_arc.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1179,13 +1181,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 92 )
+				if ( yy_current_state >= 93 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 91 );
+		while ( yy_current_state != 92 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1268,172 +1270,172 @@ return ABTOK;
 case 11:
 YY_RULE_SETUP
 #line 53 "engines/hypno/lexer_arc.l"
-return AVTOK;
+return ALTOK;
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 54 "engines/hypno/lexer_arc.l"
-return ATOK;
+return AVTOK;
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
 #line 55 "engines/hypno/lexer_arc.l"
-return VTOK;
+return ATOK;
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 56 "engines/hypno/lexer_arc.l"
-return OTOK;
+return VTOK;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 57 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
+return OTOK;
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 58 "engines/hypno/lexer_arc.l"
-return LTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 59 "engines/hypno/lexer_arc.l"
-return NTOK;
+return LTOK;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 60 "engines/hypno/lexer_arc.l"
-return NSTOK;
+return NTOK;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 61 "engines/hypno/lexer_arc.l"
-return MTOK;
+return NSTOK;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 62 "engines/hypno/lexer_arc.l"
-return RTOK;
+return MTOK;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 63 "engines/hypno/lexer_arc.l"
-return R01TOK;
+return RTOK;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 64 "engines/hypno/lexer_arc.l"
-return ITOK;
+return R01TOK;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 65 "engines/hypno/lexer_arc.l"
-return I1TOK;
+return ITOK;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 66 "engines/hypno/lexer_arc.l"
-return J0TOK;
+return I1TOK;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 67 "engines/hypno/lexer_arc.l"
-return JTOK;
+return J0TOK;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 68 "engines/hypno/lexer_arc.l"
-return KTOK;
+return JTOK;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 69 "engines/hypno/lexer_arc.l"
-return GTOK;
+return KTOK;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 70 "engines/hypno/lexer_arc.l"
-return QTOK;
+return GTOK;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 71 "engines/hypno/lexer_arc.l"
-return UTOK;
+return QTOK;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 72 "engines/hypno/lexer_arc.l"
-return ZTOK;
+return UTOK;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 73 "engines/hypno/lexer_arc.l"
-return WTOK;
+return ZTOK;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 74 "engines/hypno/lexer_arc.l"
-return XTOK;
+return WTOK;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 75 "engines/hypno/lexer_arc.l"
-return TTOK;
+return XTOK;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 76 "engines/hypno/lexer_arc.l"
-return TPTOK;
+return TTOK;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 77 "engines/hypno/lexer_arc.l"
-return TATOK;
+return TPTOK;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 78 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
+return TATOK;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 79 "engines/hypno/lexer_arc.l"
-return FTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 80 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+return FTOK;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 81 "engines/hypno/lexer_arc.l"
-return A0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 82 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+return A0TOK;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 83 "engines/hypno/lexer_arc.l"
-return KNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 84 "engines/hypno/lexer_arc.l"
-return P0TOK;
+return KNTOK;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 85 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
+return P0TOK;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 86 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
@@ -1443,17 +1445,17 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 case 46:
 YY_RULE_SETUP
 #line 88 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 89 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 90 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
@@ -1463,35 +1465,40 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 case 50:
 YY_RULE_SETUP
 #line 92 "engines/hypno/lexer_arc.l"
-return RESTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 	YY_BREAK
 case 51:
-/* rule 51 can match eol */
 YY_RULE_SETUP
 #line 93 "engines/hypno/lexer_arc.l"
-return RETTOK;
+return RESTOK;
 	YY_BREAK
 case 52:
+/* rule 52 can match eol */
 YY_RULE_SETUP
 #line 94 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+return RETTOK;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 95 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+/* ignore comment */
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 96 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+/* ignore whitespace */;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 97 "engines/hypno/lexer_arc.l"
+HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+	YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 98 "engines/hypno/lexer_arc.l"
 ECHO;
 	YY_BREAK
-#line 1494 "engines/hypno/lexer_arc.cpp"
+#line 1501 "engines/hypno/lexer_arc.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1789,7 +1796,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 92 )
+			if ( yy_current_state >= 93 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1817,11 +1824,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 92 )
+		if ( yy_current_state >= 93 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 91);
+	yy_is_jam = (yy_current_state == 92);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2468,7 +2475,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 97 "engines/hypno/lexer_arc.l"
+#line 98 "engines/hypno/lexer_arc.l"
 
 
 namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index 4796325dd9e..59800c0cbf5 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -50,6 +50,7 @@ H[1-2]						return H12TOK;
 H							return HTOK;
 P							return PTOK;
 AB							return ABTOK;
+AL							return ALTOK;
 AV							return AVTOK;
 A							return ATOK;
 V							return VTOK;
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index 89c00812ec1..16afaeeabe3 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -74,47 +74,48 @@ extern int HYPNO_ARC_debug;
     NUM = 267,                     /* NUM  */
     BYTE = 268,                    /* BYTE  */
     COMMENT = 269,                 /* COMMENT  */
-    AVTOK = 270,                   /* AVTOK  */
-    ABTOK = 271,                   /* ABTOK  */
-    CTOK = 272,                    /* CTOK  */
-    DTOK = 273,                    /* DTOK  */
-    HTOK = 274,                    /* HTOK  */
-    HETOK = 275,                   /* HETOK  */
-    HLTOK = 276,                   /* HLTOK  */
-    H12TOK = 277,                  /* H12TOK  */
-    HUTOK = 278,                   /* HUTOK  */
-    RETTOK = 279,                  /* RETTOK  */
-    QTOK = 280,                    /* QTOK  */
-    RESTOK = 281,                  /* RESTOK  */
-    PTOK = 282,                    /* PTOK  */
-    FTOK = 283,                    /* FTOK  */
-    TTOK = 284,                    /* TTOK  */
-    TATOK = 285,                   /* TATOK  */
-    TPTOK = 286,                   /* TPTOK  */
-    ATOK = 287,                    /* ATOK  */
-    VTOK = 288,                    /* VTOK  */
-    OTOK = 289,                    /* OTOK  */
-    LTOK = 290,                    /* LTOK  */
-    MTOK = 291,                    /* MTOK  */
-    NTOK = 292,                    /* NTOK  */
-    NSTOK = 293,                   /* NSTOK  */
-    RTOK = 294,                    /* RTOK  */
-    R01TOK = 295,                  /* R01TOK  */
-    ITOK = 296,                    /* ITOK  */
-    I1TOK = 297,                   /* I1TOK  */
-    GTOK = 298,                    /* GTOK  */
-    JTOK = 299,                    /* JTOK  */
-    J0TOK = 300,                   /* J0TOK  */
-    KTOK = 301,                    /* KTOK  */
-    UTOK = 302,                    /* UTOK  */
-    ZTOK = 303,                    /* ZTOK  */
-    NONETOK = 304,                 /* NONETOK  */
-    A0TOK = 305,                   /* A0TOK  */
-    P0TOK = 306,                   /* P0TOK  */
-    WTOK = 307,                    /* WTOK  */
-    XTOK = 308,                    /* XTOK  */
-    CB3TOK = 309,                  /* CB3TOK  */
-    C02TOK = 310                   /* C02TOK  */
+    ALTOK = 270,                   /* ALTOK  */
+    AVTOK = 271,                   /* AVTOK  */
+    ABTOK = 272,                   /* ABTOK  */
+    CTOK = 273,                    /* CTOK  */
+    DTOK = 274,                    /* DTOK  */
+    HTOK = 275,                    /* HTOK  */
+    HETOK = 276,                   /* HETOK  */
+    HLTOK = 277,                   /* HLTOK  */
+    H12TOK = 278,                  /* H12TOK  */
+    HUTOK = 279,                   /* HUTOK  */
+    RETTOK = 280,                  /* RETTOK  */
+    QTOK = 281,                    /* QTOK  */
+    RESTOK = 282,                  /* RESTOK  */
+    PTOK = 283,                    /* PTOK  */
+    FTOK = 284,                    /* FTOK  */
+    TTOK = 285,                    /* TTOK  */
+    TATOK = 286,                   /* TATOK  */
+    TPTOK = 287,                   /* TPTOK  */
+    ATOK = 288,                    /* ATOK  */
+    VTOK = 289,                    /* VTOK  */
+    OTOK = 290,                    /* OTOK  */
+    LTOK = 291,                    /* LTOK  */
+    MTOK = 292,                    /* MTOK  */
+    NTOK = 293,                    /* NTOK  */
+    NSTOK = 294,                   /* NSTOK  */
+    RTOK = 295,                    /* RTOK  */
+    R01TOK = 296,                  /* R01TOK  */
+    ITOK = 297,                    /* ITOK  */
+    I1TOK = 298,                   /* I1TOK  */
+    GTOK = 299,                    /* GTOK  */
+    JTOK = 300,                    /* JTOK  */
+    J0TOK = 301,                   /* J0TOK  */
+    KTOK = 302,                    /* KTOK  */
+    UTOK = 303,                    /* UTOK  */
+    ZTOK = 304,                    /* ZTOK  */
+    NONETOK = 305,                 /* NONETOK  */
+    A0TOK = 306,                   /* A0TOK  */
+    P0TOK = 307,                   /* P0TOK  */
+    WTOK = 308,                    /* WTOK  */
+    XTOK = 309,                    /* XTOK  */
+    CB3TOK = 310,                  /* CB3TOK  */
+    C02TOK = 311                   /* C02TOK  */
   };
   typedef enum HYPNO_ARC_tokentype HYPNO_ARC_token_kind_t;
 #endif
@@ -128,7 +129,7 @@ union HYPNO_ARC_STYPE
 	char *s; /* string value */
 	int i;	 /* integer value */
 
-#line 132 "engines/hypno/tokens_arc.h"
+#line 133 "engines/hypno/tokens_arc.h"
 
 };
 typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;


Commit: 5d0b07c86c99b617364df41ea019b94b70ccf298
    https://github.com/scummvm/scummvm/commit/5d0b07c86c99b617364df41ea019b94b70ccf298
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: fixed ui offsets in last level of wet

Changed paths:
    engines/hypno/wet/wet.cpp


diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 6b1306a93a9..a0829d5085a 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -46,8 +46,8 @@ static const chapterEntry rawChapterTable[] = {
 	{51, {60, 167}, {190, 167}, {135, 187}}, 	// c51
 	{52, {60, 167}, {190, 167}, {135, 187}}, 	// c52
 	{50, {19, 3},   {246, 3}, 	{246, 11}}, 	// c50 (fixed)
-	{61, {44, 172}, {218, 172}, {0, 0}}, 		// c61
-	{60, {44, 172}, {218, 172}, {0, 0}}, 		// c60
+	{61, {63, 167}, {187, 167}, {192, 188}}, 	// c61
+	{60, {63, 167}, {187, 167}, {192, 188}}, 	// c60
 	{0,  {0,  0},   {0,   0},   {0,   0}}    	// NULL
 };
 


Commit: 1e8343b95621c26137e409a926d2e4631b8be8dc
    https://github.com/scummvm/scummvm/commit/1e8343b95621c26137e409a926d2e4631b8be8dc
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: refactor code for handling player frames to allow changes during levels in wet

Changed paths:
    engines/hypno/arcade.cpp
    engines/hypno/hypno.h
    engines/hypno/wet/arcade.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index ef1bfcdb830..ab76f30de87 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -340,6 +340,23 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			if (_background->decoder->getCurFrame() > (int) at.time) {
 				transition = true;
 
+				if (_playerFrameSeps.size() == 1) {
+					_playerFrameStart = _playerFrameEnd + 1;
+					_playerFrameSep = *_playerFrameSeps.begin();
+					_playerFrameSeps.pop_front();
+					_playerFrameEnd = _playerFrames.size();
+					_playerFrameIdx = _playerFrameStart;
+					debugC(1, kHypnoDebugArcade, "New separator frames %d %d %d", _playerFrameStart, _playerFrameSep, _playerFrameEnd);
+				} else if (_playerFrameSeps.size() >= 2) {
+					_playerFrameStart = _playerFrameEnd + 1;
+					_playerFrameSep = *_playerFrameSeps.begin();
+					_playerFrameSeps.pop_front();
+					_playerFrameEnd = *_playerFrameSeps.begin();
+					_playerFrameSeps.pop_front();
+					_playerFrameIdx = _playerFrameStart;
+					debugC(1, kHypnoDebugArcade, "New separator frames %d %d %d", _playerFrameStart, _playerFrameSep, _playerFrameEnd);
+				}
+
 				if (!at.video.empty()) {
 					_background->decoder->pauseVideo(true);
 					debugC(1, kHypnoDebugArcade, "Playing transition %s", at.video.c_str());
@@ -352,6 +369,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 
 					loadPalette(currentPalette);
 					_background->decoder->pauseVideo(false);
+					drawPlayer();
 					updateScreen(*_background);
 					drawScreen();
 					drawCursorArcade(mousePos);
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index b49477a7ef1..9e94b619f1c 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -284,7 +284,10 @@ public:
 	Shoots _shoots;
 	Frames _playerFrames;
 	int _playerFrameIdx;
+	Common::List<int> _playerFrameSeps;
+	int _playerFrameStart;
 	int _playerFrameSep;
+	int _playerFrameEnd;
 
 	// Objectives
 	uint32 _objIdx;
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index 82c9b6a0d27..ac277ff8ded 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -414,22 +414,32 @@ void WetEngine::runBeforeArcade(ArcadeShooting *arc) {
 		}
 	}
 
-	_playerFrameSep = 0;
 
-	for (Frames::iterator it =_playerFrames.begin(); it != _playerFrames.end(); ++it) {
-		if ((*it)->getPixel(0, 0) == 255)
-			break;
-		if ((*it)->getPixel(0, 0) == 252)
-			break;
-
-		_playerFrameSep++;
+	for (int i = 0; i < int(_playerFrames.size()); i++) {
+		if (_playerFrames[i]->getPixel(0, 0) == 255)
+			_playerFrameSeps.push_back(i);
+		else if (_playerFrames[i]->getPixel(0, 0) == 252)
+			_playerFrameSeps.push_back(i);
 	}
 
-	if (_playerFrameSep == (int)_playerFrames.size()) {
+	if (_playerFrameSeps.size() == 0) {
 		debugC(1, kHypnoDebugArcade, "No player separator frame found in %s! (size: %d)", arc->player.c_str(), _playerFrames.size());
-		//_playerFrameSep = -1;
 	} else
-		debugC(1, kHypnoDebugArcade, "Separator frame found at %d", _playerFrameSep);
+		debugC(1, kHypnoDebugArcade, "Number of separator frames: %d", _playerFrameSeps.size());
+
+	_playerFrameStart = 0;
+
+	if (_playerFrameSeps.size() > 0) {
+		_playerFrameSep = *_playerFrameSeps.begin();
+		_playerFrameSeps.pop_front();
+	}
+
+	if (_playerFrameSeps.size() > 0) {
+		_playerFrameEnd = *_playerFrameSeps.begin();
+		_playerFrameSeps.pop_front();
+	} else {
+		_playerFrameEnd = _playerFrames.size();
+	}
 
 	_playerFrameIdx = -1;
 }
@@ -573,13 +583,9 @@ void WetEngine::drawPlayer() {
 	if (_arcadeMode == "Y1" || _arcadeMode == "Y3")
 		return;
 
-	if (_playerFrameIdx < _playerFrameSep) {
-		_playerFrameIdx++;
-		_playerFrameIdx = _playerFrameIdx % _playerFrameSep;
-	} else {
-		_playerFrameIdx++;
-		if (_playerFrameIdx >= (int)_playerFrames.size())
-			_playerFrameIdx = 0;
+	_playerFrameIdx++;
+	if (_playerFrameIdx == _playerFrameSep || _playerFrameIdx >= _playerFrameEnd) {
+		_playerFrameIdx = _playerFrameStart;
 	}
 
 	if (_arcadeMode == "Y5")


Commit: 606dbe60f105738795217327a9f38983226ce44b
    https://github.com/scummvm/scummvm/commit/606dbe60f105738795217327a9f38983226ce44b
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: correctly play explosions animations avoiding separator frames in wet

Changed paths:
    engines/hypno/arcade.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index ab76f30de87..a11feac0282 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -665,7 +665,9 @@ void HypnoEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVid
 				playVideo(*_shoots[i].video);
 				int w = _shoots[i].video->decoder->getWidth();
 				int h = _shoots[i].video->decoder->getHeight();
+				uint32 explosionLastFrame = _shoots[i].video->decoder->getFrameCount() - 1;
 				_shoots[i].video->position = Common::Point(position.x - w / 2, position.y - h / 2);
+				_shoots[i].lastFrame = explosionLastFrame - 1;
 			} else if (_objIdx == 0 && !arc->hitBoss1Video.empty()) {
 				background.decoder->pauseVideo(true);
 				MVideo video(arc->hitBoss1Video, Common::Point(0, 0), false, true, false);


Commit: baa7d670daf723997bfaa86bd386d5377988b9d9
    https://github.com/scummvm/scummvm/commit/baa7d670daf723997bfaa86bd386d5377988b9d9
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: set a better default value for frame separator in wet

Changed paths:
    engines/hypno/wet/arcade.cpp


diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index ac277ff8ded..f24d5690144 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -428,6 +428,7 @@ void WetEngine::runBeforeArcade(ArcadeShooting *arc) {
 		debugC(1, kHypnoDebugArcade, "Number of separator frames: %d", _playerFrameSeps.size());
 
 	_playerFrameStart = 0;
+	_playerFrameSep = _playerFrames.size();
 
 	if (_playerFrameSeps.size() > 0) {
 		_playerFrameSep = *_playerFrameSeps.begin();


Commit: 99044b349ba26877b348166dc66206318abc5471
    https://github.com/scummvm/scummvm/commit/99044b349ba26877b348166dc66206318abc5471
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-11T21:17:34+02:00

Commit Message:
HYPNO: refactor to use color constants loaded from the current palette

Changed paths:
    engines/hypno/arcade.cpp
    engines/hypno/boyz/arcade.cpp
    engines/hypno/hypno.cpp
    engines/hypno/hypno.h
    engines/hypno/spider/arcade.cpp
    engines/hypno/wet/arcade.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index a11feac0282..0db30aa2538 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -463,9 +463,9 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 								_health = _health - it->attackWeight;
 								hitPlayer();
 							}
-							byte p[3] = {0xff, 0x00, 0x00}; // Always red?
+							byte *c = getPalette(kHypnoColorRed);
 							assert(s.paletteSize == 1 || s.paletteSize == 0);
-							loadPalette((byte *) &p, s.paletteOffset, s.paletteSize);
+							loadPalette(c, s.paletteOffset, s.paletteSize);
 							_shoots.push_back(s);
 						} else {
 							s.video = new MVideo(it->animation, offset + it->position, true, false, false);
diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 7652eb485bc..6c37210f841 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -96,18 +96,18 @@ void BoyzEngine::drawHealth() {
 
 	// Health
 	Common::Rect healthBarBox(0, 0, _healthBar[_currentActor].w, _healthBar[_currentActor].h/2);
-	uint32 c = 252; // white
+	uint32 c = kHypnoColorWhite; // white
 	_compositeSurface->fillRect(healthBarBox, c);
 	drawImage(_healthBar[_currentActor], 0, 0, true);
 
 	// Ammo
 	Common::Rect ammoBarBox(320 - _ammoBar[_currentActor].w, 0, 320, _ammoBar[_currentActor].h/2);
-	c = 251; // green
+	c = kHypnoColorGreen; // green
 	_compositeSurface->fillRect(ammoBarBox, c);
 	drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentActor].w, 0, true);
 }
 void BoyzEngine::hitPlayer() {
-	uint32 c = 250; // red
+	uint32 c = kHypnoColorRed; // red
 	_compositeSurface->fillRect(Common::Rect(0, 0, _screenW, _screenH), c);
 	drawScreen();
 	if (!_hitSound.empty())
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index da05be2e8a3..dba13b95174 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -433,6 +433,13 @@ void HypnoEngine::loadPalette(const byte *palette, uint32 offset, uint32 size) {
 	g_system->getPaletteManager()->setPalette(palette, offset, size);
 }
 
+
+byte *HypnoEngine::getPalette(uint idx) {
+	byte *videoPalette = (byte *)malloc(3);
+	g_system->getPaletteManager()->grabPalette(videoPalette, idx, 1);
+	return videoPalette;
+}
+
 void HypnoEngine::updateVideo(MVideo &video) {
 	video.decoder->decodeNextFrame();
 }
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 9e94b619f1c..bc29e28b746 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -68,6 +68,21 @@ enum PlayerPosition {
 	kPlayerRight = 'R'
 };
 
+// Common colors
+enum HypnoColors {
+	kHypnoColorRed = 250,
+	kHypnoColorGreen = 251,
+	kHypnoColorWhite = 252,
+	kHypnoColorYellow = 253,
+};
+
+// Spider colors
+enum SpiderColors {
+	kSpiderColorWhite = 248,
+	kSpiderColorBlue = 252,
+};
+
+
 class HypnoEngine : public Engine {
 private:
 	Image::ImageDecoder *_image;
@@ -144,6 +159,7 @@ public:
 	void drawImage(Graphics::Surface &image, int x, int y, bool transparent);
 	void loadPalette(const Common::String &fname);
 	void loadPalette(const byte *palette, uint32 offset, uint32 size);
+	byte *getPalette(uint32 idx);
 
 	// Cursors
 	Common::String _defaultCursor;
diff --git a/engines/hypno/spider/arcade.cpp b/engines/hypno/spider/arcade.cpp
index eb3cc0e3393..6df9bdb9e83 100644
--- a/engines/hypno/spider/arcade.cpp
+++ b/engines/hypno/spider/arcade.cpp
@@ -88,7 +88,7 @@ void SpiderEngine::hitPlayer() {
 		if (_playerFrameIdx < _playerFrameSep)
 			_playerFrameIdx = _playerFrameSep;
 	} else {
-		uint32 c = 250; // red
+		uint32 c = kHypnoColorRed; // red
 		_compositeSurface->fillRect(Common::Rect(0, 0, 640, 480), c);
 		drawScreen();
 	}
@@ -97,7 +97,7 @@ void SpiderEngine::hitPlayer() {
 }
 
 void SpiderEngine::drawShoot(const Common::Point &target) {
-	uint32 c = 248; // white
+	uint32 c = kSpiderColorWhite; // white
 	uint32 ox = 0;
 	uint32 oy = 0;
 
@@ -270,14 +270,14 @@ void SpiderEngine::drawHealth() {
 		return;
 	r = Common::Rect(256, 152 + d, 272, 174);
 	if (d >= 11)
-		c = 250; // red
+		c = kHypnoColorRed; // red
 	else
-		c = 251; // green
+		c = kHypnoColorGreen; // green
 
 	_compositeSurface->fillRect(r, c);
 
 	r = Common::Rect(256, 152, 272, 174);
-	c = 252; // blue
+	c = kSpiderColorBlue; // blue
 	_compositeSurface->frameRect(r, c);
 
 	drawString("block05.fgx", "ENERGY", 248, 180, 38, c);
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index f24d5690144..12dd96858ad 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -232,7 +232,7 @@ void WetEngine::runAfterArcade(ArcadeShooting *arc) {
 		byte *palette;
 		Graphics::Surface *frame = decodeFrame("c_misc/zones.smk", 12, &palette);
 		loadPalette(palette, 0, 256);
-		uint32 c = 251; // green
+		uint32 c = kHypnoColorGreen; // green
 		int bonusCounter = 0;
 		int scoreCounter = _score - _bonus;
 		assert(scoreCounter >= 0);
@@ -357,7 +357,7 @@ void WetEngine::runBeforeArcade(ArcadeShooting *arc) {
 		bool endedBriefing = false;
 		Common::Event event;
 
-		uint32 c = 251; // green
+		uint32 c = kHypnoColorGreen; // green
 		drawString("scifi08.fgx", Common::String::format("Lives : %d", _lives), 36, 2, 0, c);
 		while (!shouldQuit() && !endedBriefing) {
 
@@ -544,7 +544,7 @@ Common::Point WetEngine::computeTargetPosition(const Common::Point &mousePos) {
 }
 
 void WetEngine::drawShoot(const Common::Point &mousePos) {
-	uint32 c = 253;
+	uint32 c = kHypnoColorYellow;
 
 	if (_arcadeMode == "YT") {
 		_compositeSurface->drawLine(mousePos.x, mousePos.y - 20, mousePos.x, mousePos.y + 1, c);
@@ -565,7 +565,7 @@ void WetEngine::drawShoot(const Common::Point &mousePos) {
 
 void WetEngine::drawPlayer() {
 	// TARGET ACQUIRED frame
-	uint32 c = 251; // green
+	uint32 c = kHypnoColorGreen; // green
 	_compositeSurface->drawLine(113, 1, 119, 1, c);
 	_compositeSurface->drawLine(200, 1, 206, 1, c);
 
@@ -575,7 +575,7 @@ void WetEngine::drawPlayer() {
 	_compositeSurface->drawLine(113, 9, 119, 9, c);
 	_compositeSurface->drawLine(200, 9, 206, 9, c);
 
-	c = 250; // red ?
+	c = kHypnoColorRed; // red ?
 	Common::Point mousePos = g_system->getEventManager()->getMousePos();
 	int i = detectTarget(mousePos);
 	if (i > 0)
@@ -605,7 +605,7 @@ void WetEngine::drawPlayer() {
 }
 
 void WetEngine::drawHealth() {
-	uint32 c = 253;
+	uint32 c = kHypnoColorYellow;
 	int p = (100 * _health) / _maxHealth;
 	int s = _score;
 	int mo = _objKillsCount[_objIdx];




More information about the Scummvm-git-logs mailing list