[Scummvm-git-logs] scummvm master -> 36d437682fafbeef19eb2b6f6dc839b055d8d0df

neuromancer noreply at scummvm.org
Sun May 8 09:38:19 UTC 2022


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

Summary:
44b080a21d HYPNO: implemented basic health handling and some cheats in boyz
36d437682f HYPNO: parse and load almost all the levels in boyz


Commit: 44b080a21df9f622dff3305ce865d8d60e937fb3
    https://github.com/scummvm/scummvm/commit/44b080a21df9f622dff3305ce865d8d60e937fb3
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-05-08T11:35:16+02:00

Commit Message:
HYPNO: implemented basic health handling and some cheats 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 440873efe4a..6b541a43501 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -104,25 +104,33 @@ void BoyzEngine::drawPlayer() {
 void BoyzEngine::drawHealth() {
 	updateFromScript();
 
-	Common::Rect healthBarBox(0, 0, _healthBar[_currentActor].w, _healthBar[_currentActor].h/2);
+	float w = float(_healthTeam[_currentActor]) / float(_maxHealth);
+	Common::Rect healthBarBox(0, 0, int((_healthBar[_currentActor].w - 3) * w), _healthBar[_currentActor].h / 2);
+
 	uint32 c = kHypnoColorWhiteOrBlue; // white
 	_compositeSurface->fillRect(healthBarBox, c);
+
+	for (int i = 0; i < _maxHealth; i = i + 10) {
+		int x = (_healthBar[_currentActor].w - 3) * float(i) / float(_maxHealth);
+		_compositeSurface->drawLine(x, 2, x, 6, 0);
+	}
+
 	drawImage(_healthBar[_currentActor], 0, 0, true);
 }
 
 void BoyzEngine::drawAmmo() {
 	updateFromScript();
 
-	float w = _ammoBar[_currentWeapon].w / _weaponMaxAmmo[_currentWeapon];
+	float w = float(_ammoBar[_currentWeapon].w) / float(_weaponMaxAmmo[_currentWeapon]);
 
-	Common::Rect ammoBarBox(320 - int(_ammoTeam[_currentActor] * w), 0, 320, _ammoBar[_currentActor].h/2);
+	Common::Rect ammoBarBox(320 - int(_ammoTeam[_currentActor] * w), 0, 320, _ammoBar[_currentActor].h / 2);
 	uint32 c = kHypnoColorGreen; // green
 	_compositeSurface->fillRect(ammoBarBox, c);
 
 	drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentWeapon].w, 0, true);
 	for (int i = 1; i < _weaponMaxAmmo[_currentWeapon]; i++) {
 		int x = 320 - _ammoBar[_currentWeapon].w + int (i * w);
-		_compositeSurface->drawLine(x, 2, x, 5, 0);
+		_compositeSurface->drawLine(x, 2, x, 6, 0);
 	}
 }
 
@@ -130,6 +138,8 @@ void BoyzEngine::hitPlayer() {
 	uint32 c = kHypnoColorRed; // red
 	_compositeSurface->fillRect(Common::Rect(0, 0, _screenW, _screenH), c);
 	drawScreen();
+	if (!_infiniteHealthCheat)
+		_healthTeam[_currentActor] = _healthTeam[_currentActor] - 10;
 	if (!_hitSound.empty())
 		playSound(_soundPath + _hitSound, 1, 11025);
 }
@@ -202,8 +212,8 @@ void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc) {
 
 	if (_ammoTeam[_currentActor] == 0)
 		return; // TODO: out of ammo sound is missing
-
-	_ammoTeam[_currentActor]--;
+	if (!_infiniteAmmoCheat)
+		_ammoTeam[_currentActor]--;
 	playSound(_soundPath + _weaponShootSound[_currentWeapon], 1);
 	incShotsFired();
 	int i = detectTarget(mousePos);
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index bacae6a315e..5c1e6bceff1 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -203,10 +203,17 @@ void BoyzEngine::loadAssets() {
 	_weaponMaxAmmo[1] = 10;
 	_weaponMaxAmmo[2] = 2; // large shotgun
 	_weaponMaxAmmo[3] = 8;
-	_weaponMaxAmmo[4] = 0;
+	_weaponMaxAmmo[4] = 6; // pistol?
 	_weaponMaxAmmo[5] = 6; // small shotgun
 	_weaponMaxAmmo[6] = 0;
 
+	_maxHealth = 100;
+
+	// Set initial health for the team
+	for (int i = 0; i < 7; i++) {
+		_healthTeam[i] = _maxHealth;
+	}
+
 	targets->free();
 	delete targets;
 
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index a0d07705e5a..e95db7c7e5e 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -564,6 +564,7 @@ public:
 	void runMainMenu(Code *code);
 
 	int _ammoTeam[6];
+	int _healthTeam[7];
 	Graphics::Surface _healthBar[7];
 	Graphics::Surface _ammoBar[7];
 	Graphics::Surface _portrait[7];


Commit: 36d437682fafbeef19eb2b6f6dc839b055d8d0df
    https://github.com/scummvm/scummvm/commit/36d437682fafbeef19eb2b6f6dc839b055d8d0df
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-05-08T11:35:16+02:00

Commit Message:
HYPNO: parse and load almost all the levels 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 5c1e6bceff1..c33d97505fd 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -79,13 +79,38 @@ void BoyzEngine::loadAssets() {
 	loadArcadeLevel("c19.mi_", "c11.mi_", "??", "");
 	loadArcadeLevel("c11.mi_", "c12.mi_", "??", "");
 	loadArcadeLevel("c12.mi_", "c14.mi_", "??", "");
-	//loadArcadeLevel("c13.mi_", "??", "??", "");
+	loadArcadeLevel("c13.mi_", "??", "??", "");
 	loadArcadeLevel("c14.mi_", "c15.mi_", "??", "");
 	loadArcadeLevel("c15.mi_", "c16.mi_", "??", "");
 	loadArcadeLevel("c16.mi_", "c17.mi_", "??", "");
 	loadArcadeLevel("c17.mi_", "c18.mi_", "??", "");
 	loadArcadeLevel("c18.mi_", "c21.mi_", "??", "");
 
+	loadArcadeLevel("c21.mi_", "c22.mi_", "??", "");
+	loadArcadeLevel("c22.mi_", "c23.mi_", "??", "");
+	loadArcadeLevel("c31.mi_", "c32.mi_", "??", "");
+	loadArcadeLevel("c32.mi_", "c33.mi_", "??", "");
+	loadArcadeLevel("c33.mi_", "c34.mi_", "??", "");
+	loadArcadeLevel("c34.mi_", "c35.mi_", "??", "");
+	loadArcadeLevel("c35.mi_", "c352.mi_", "??", "");
+	loadArcadeLevel("c352.mi_", "c353.mi_", "??", "");
+	loadArcadeLevel("c353.mi_", "c354.mi_", "??", "");
+	loadArcadeLevel("c354.mi_", "c355.mi_", "??", "");
+	loadArcadeLevel("c355.mi_", "c36.mi_", "??", "");
+	loadArcadeLevel("c36.mi_", "c41.mi_", "??", "");
+	loadArcadeLevel("c41.mi_", "c42.mi_", "??", "");
+	//loadArcadeLevel("c42.mi_", "c51.mi_", "??", "");
+
+	loadArcadeLevel("c51.mi_", "c52.mi_", "??", "");
+	loadArcadeLevel("c52.mi_", "c53.mi_", "??", "");
+	loadArcadeLevel("c53.mi_", "c54.mi_", "??", "");
+	loadArcadeLevel("c54.mi_", "c55.mi_", "??", "");
+	loadArcadeLevel("c55.mi_", "c56.mi_", "??", "");
+	loadArcadeLevel("c56.mi_", "c57.mi_", "??", "");
+	loadArcadeLevel("c57.mi_", "c58.mi_", "??", "");
+	loadArcadeLevel("c58.mi_", "c59.mi_", "??", "");
+	loadArcadeLevel("c59.mi_", "<credits>", "??", "");
+
 	loadSceneLevel(selectBoyz, "<select_boyz>", "", "");
 	Scene *sc = (Scene *) _levels["<select_boyz>"];
 
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 0eb1709b103..99a7cadf9d2 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -100,8 +100,34 @@ int HYPNO_ARC_wrap() {
 
 using namespace Hypno;
 
+void parseSN(const char *sn, const char *path, const char *enc, const char *flag) {
+	uint32 sampleRate = 11025;
+	if (Common::String("22K") == enc || Common::String("22k") == enc)
+		sampleRate = 22050;
+	else if (HYPNO_ARC_default_sound_rate > 0)
+		sampleRate = HYPNO_ARC_default_sound_rate;
+
+	if (Common::String("S0") == sn) {
+		g_parsedArc->music = path;
+		g_parsedArc->musicRate = sampleRate;
+	} else if (Common::String("S1") == sn) {
+		g_parsedArc->shootSound = path;
+		g_parsedArc->shootSoundRate = sampleRate;
+	} else if (Common::String("S2") == sn) {
+		g_parsedArc->hitSound = path;
+		g_parsedArc->hitSoundRate = sampleRate;
+	} else if (Common::String("S4") == sn) {
+		g_parsedArc->enemySound = path;
+		g_parsedArc->enemySoundRate = sampleRate;
+	} else if (Common::String("S5") == sn) {
+		g_parsedArc->additionalSound = path;
+		g_parsedArc->additionalSoundRate = sampleRate;
+	}
+	debugC(1, kHypnoDebugParser, "SN %s", path);
+}
+
 
-#line 105 "engines/hypno/grammar_arc.cpp"
+#line 131 "engines/hypno/grammar_arc.cpp"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -141,18 +167,18 @@ enum yysymbol_kind_t
   YYSYMBOL_FNTOK = 9,                      /* FNTOK  */
   YYSYMBOL_ENCTOK = 10,                    /* ENCTOK  */
   YYSYMBOL_ONTOK = 11,                     /* ONTOK  */
-  YYSYMBOL_NUM = 12,                       /* NUM  */
-  YYSYMBOL_BYTE = 13,                      /* BYTE  */
-  YYSYMBOL_COMMENT = 14,                   /* COMMENT  */
-  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_H12TOK = 12,                    /* H12TOK  */
+  YYSYMBOL_NUM = 13,                       /* NUM  */
+  YYSYMBOL_BYTE = 14,                      /* BYTE  */
+  YYSYMBOL_COMMENT = 15,                   /* COMMENT  */
+  YYSYMBOL_ALTOK = 16,                     /* ALTOK  */
+  YYSYMBOL_AVTOK = 17,                     /* AVTOK  */
+  YYSYMBOL_ABTOK = 18,                     /* ABTOK  */
+  YYSYMBOL_CTOK = 19,                      /* CTOK  */
+  YYSYMBOL_DTOK = 20,                      /* DTOK  */
+  YYSYMBOL_HTOK = 21,                      /* HTOK  */
+  YYSYMBOL_HETOK = 22,                     /* HETOK  */
+  YYSYMBOL_HLTOK = 23,                     /* HLTOK  */
   YYSYMBOL_HUTOK = 24,                     /* HUTOK  */
   YYSYMBOL_RETTOK = 25,                    /* RETTOK  */
   YYSYMBOL_QTOK = 26,                      /* QTOK  */
@@ -162,40 +188,42 @@ enum yysymbol_kind_t
   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_R0TOK = 41,                     /* R0TOK  */
-  YYSYMBOL_R1TOK = 42,                     /* R1TOK  */
-  YYSYMBOL_ITOK = 43,                      /* ITOK  */
-  YYSYMBOL_I1TOK = 44,                     /* I1TOK  */
-  YYSYMBOL_GTOK = 45,                      /* GTOK  */
-  YYSYMBOL_JTOK = 46,                      /* JTOK  */
-  YYSYMBOL_J0TOK = 47,                     /* J0TOK  */
-  YYSYMBOL_KTOK = 48,                      /* KTOK  */
-  YYSYMBOL_UTOK = 49,                      /* UTOK  */
-  YYSYMBOL_ZTOK = 50,                      /* ZTOK  */
-  YYSYMBOL_NONETOK = 51,                   /* NONETOK  */
-  YYSYMBOL_A0TOK = 52,                     /* A0TOK  */
-  YYSYMBOL_P0TOK = 53,                     /* P0TOK  */
-  YYSYMBOL_WTOK = 54,                      /* WTOK  */
-  YYSYMBOL_XTOK = 55,                      /* XTOK  */
-  YYSYMBOL_CB3TOK = 56,                    /* CB3TOK  */
-  YYSYMBOL_C02TOK = 57,                    /* C02TOK  */
-  YYSYMBOL_YYACCEPT = 58,                  /* $accept  */
-  YYSYMBOL_start = 59,                     /* start  */
-  YYSYMBOL_60_1 = 60,                      /* $@1  */
-  YYSYMBOL_header = 61,                    /* header  */
-  YYSYMBOL_hline = 62,                     /* hline  */
-  YYSYMBOL_enc = 63,                       /* enc  */
-  YYSYMBOL_flag = 64,                      /* flag  */
-  YYSYMBOL_body = 65,                      /* body  */
-  YYSYMBOL_bline = 66                      /* bline  */
+  YYSYMBOL_TSTOK = 33,                     /* TSTOK  */
+  YYSYMBOL_ATOK = 34,                      /* ATOK  */
+  YYSYMBOL_VTOK = 35,                      /* VTOK  */
+  YYSYMBOL_OTOK = 36,                      /* OTOK  */
+  YYSYMBOL_LTOK = 37,                      /* LTOK  */
+  YYSYMBOL_MTOK = 38,                      /* MTOK  */
+  YYSYMBOL_NTOK = 39,                      /* NTOK  */
+  YYSYMBOL_NRTOK = 40,                     /* NRTOK  */
+  YYSYMBOL_NSTOK = 41,                     /* NSTOK  */
+  YYSYMBOL_RTOK = 42,                      /* RTOK  */
+  YYSYMBOL_R0TOK = 43,                     /* R0TOK  */
+  YYSYMBOL_R1TOK = 44,                     /* R1TOK  */
+  YYSYMBOL_ITOK = 45,                      /* ITOK  */
+  YYSYMBOL_I1TOK = 46,                     /* I1TOK  */
+  YYSYMBOL_GTOK = 47,                      /* GTOK  */
+  YYSYMBOL_JTOK = 48,                      /* JTOK  */
+  YYSYMBOL_J0TOK = 49,                     /* J0TOK  */
+  YYSYMBOL_KTOK = 50,                      /* KTOK  */
+  YYSYMBOL_UTOK = 51,                      /* UTOK  */
+  YYSYMBOL_ZTOK = 52,                      /* ZTOK  */
+  YYSYMBOL_NONETOK = 53,                   /* NONETOK  */
+  YYSYMBOL_A0TOK = 54,                     /* A0TOK  */
+  YYSYMBOL_P0TOK = 55,                     /* P0TOK  */
+  YYSYMBOL_WTOK = 56,                      /* WTOK  */
+  YYSYMBOL_XTOK = 57,                      /* XTOK  */
+  YYSYMBOL_CB3TOK = 58,                    /* CB3TOK  */
+  YYSYMBOL_C02TOK = 59,                    /* C02TOK  */
+  YYSYMBOL_YYACCEPT = 60,                  /* $accept  */
+  YYSYMBOL_start = 61,                     /* start  */
+  YYSYMBOL_62_1 = 62,                      /* $@1  */
+  YYSYMBOL_header = 63,                    /* header  */
+  YYSYMBOL_hline = 64,                     /* hline  */
+  YYSYMBOL_enc = 65,                       /* enc  */
+  YYSYMBOL_flag = 66,                      /* flag  */
+  YYSYMBOL_body = 67,                      /* body  */
+  YYSYMBOL_bline = 68                      /* bline  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -523,19 +551,19 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  6
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   198
+#define YYLAST   216
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  58
+#define YYNTOKENS  60
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  9
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  102
+#define YYNRULES  113
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  206
+#define YYNSTATES  221
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   312
+#define YYMAXUTOK   314
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -580,24 +608,25 @@ 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,    56,    57
+      55,    56,    57,    58,    59
 };
 
 #if HYPNO_ARC_DEBUG
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,    78,    78,    78,    79,    82,    83,    84,    87,    91,
-      95,    99,   100,   101,   105,   110,   114,   118,   123,   133,
-     142,   147,   152,   157,   158,   162,   166,   169,   173,   176,
-     177,   205,   230,   236,   241,   246,   252,   257,   262,   267,
-     272,   277,   284,   285,   288,   289,   292,   293,   294,   297,
-     305,   308,   311,   314,   317,   322,   327,   331,   335,   339,
-     343,   347,   351,   355,   359,   363,   367,   371,   375,   379,
-     383,   387,   391,   395,   399,   403,   407,   411,   414,   418,
-     423,   428,   431,   436,   441,   445,   451,   455,   458,   459,
-     462,   466,   469,   474,   477,   481,   485,   494,   495,   498,
-     501,   504,   507
+       0,   104,   104,   104,   105,   108,   109,   110,   113,   117,
+     121,   125,   126,   127,   131,   136,   140,   144,   149,   159,
+     168,   173,   176,   181,   186,   191,   192,   196,   200,   203,
+     207,   210,   211,   239,   242,   245,   251,   256,   261,   267,
+     272,   277,   282,   287,   292,   299,   300,   303,   304,   307,
+     308,   309,   312,   320,   323,   326,   329,   331,   334,   339,
+     344,   348,   352,   356,   360,   364,   368,   372,   376,   380,
+     384,   388,   392,   396,   400,   404,   408,   412,   416,   420,
+     424,   428,   432,   435,   439,   444,   449,   452,   457,   462,
+     466,   472,   476,   479,   480,   481,   484,   488,   491,   496,
+     499,   500,   504,   507,   511,   520,   524,   525,   528,   531,
+     534,   537,   540,   542
 };
 #endif
 
@@ -614,14 +643,15 @@ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
 static const char *const yytname[] =
 {
   "\"end of file\"", "error", "\"invalid token\"", "NAME", "FILENAME",
-  "BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "ENCTOK", "ONTOK", "NUM",
-  "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", "R0TOK", "R1TOK", "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
+  "BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "ENCTOK", "ONTOK", "H12TOK",
+  "NUM", "BYTE", "COMMENT", "ALTOK", "AVTOK", "ABTOK", "CTOK", "DTOK",
+  "HTOK", "HETOK", "HLTOK", "HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK",
+  "FTOK", "TTOK", "TATOK", "TPTOK", "TSTOK", "ATOK", "VTOK", "OTOK",
+  "LTOK", "MTOK", "NTOK", "NRTOK", "NSTOK", "RTOK", "R0TOK", "R1TOK",
+  "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 *
@@ -631,7 +661,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-115)
+#define YYPACT_NINF (-123)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -645,27 +675,29 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-       9,  -115,     9,    16,    84,  -115,  -115,     5,    14,     7,
-      10,    11,    98,     8,    26,    42,    43,    84,    15,    45,
-      46,    -1,    47,    56,    50,    34,    51,    60,    61,    65,
-      66,    67,    68,    63,    23,    84,  -115,    69,    70,  -115,
-    -115,    75,    80,    86,    87,    88,   108,   113,   117,   118,
-     120,  -115,   123,   124,  -115,   125,   127,    76,   128,   129,
-     130,  -115,   131,  -115,  -115,  -115,  -115,  -115,  -115,   132,
-     121,  -115,  -115,   142,  -115,   135,   136,   137,   138,   139,
-     140,   141,   143,   144,   145,  -115,  -115,  -115,  -115,   142,
-     150,  -115,  -115,  -115,   146,    -5,  -115,  -115,  -115,  -115,
-    -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,    69,  -115,
-     147,   148,   157,   151,     1,   152,   153,   154,   155,   156,
-     158,    -5,   165,   159,   160,   161,   162,   163,  -115,   164,
-     166,   167,    48,  -115,   168,   169,   170,  -115,   171,   172,
-     173,   107,    -5,  -115,  -115,   174,    69,   175,  -115,  -115,
-    -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,
-     176,   177,  -115,   178,   179,   180,  -115,  -115,  -115,  -115,
-    -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,
-    -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,   181,
-     182,   183,  -115,  -115,  -115,  -115,  -115,  -115,  -115,  -115,
-    -115,  -115,  -115,  -115,  -115,  -115
+      39,  -123,    39,    11,   101,  -123,  -123,    15,    16,    10,
+      40,    45,    48,   135,    51,    53,    55,   101,    49,    57,
+      58,     0,    59,     2,    20,    63,    36,    64,    75,    77,
+      81,    82,    83,    85,    84,    42,   101,  -123,    19,    87,
+      90,  -123,  -123,    95,    96,    97,    98,   102,   103,   104,
+     105,   106,  -123,   115,   128,  -123,   131,   132,    91,   137,
+     138,   140,   141,   142,  -123,   143,  -123,  -123,  -123,  -123,
+    -123,  -123,   144,    43,  -123,  -123,  -123,   111,    88,  -123,
+     145,   146,   147,   148,   149,   151,   152,   153,   154,   155,
+    -123,  -123,  -123,  -123,   111,   166,   167,   160,  -123,  -123,
+    -123,   161,    -4,  -123,  -123,  -123,  -123,  -123,  -123,  -123,
+    -123,  -123,  -123,  -123,  -123,    88,  -123,  -123,  -123,   162,
+     163,   174,   168,     3,   169,   170,   171,   172,     5,   173,
+      -4,   175,   176,   177,   178,   179,   180,  -123,  -123,   181,
+     182,   183,    54,  -123,   184,   185,   186,  -123,   187,   188,
+     189,   123,    -4,  -123,  -123,   190,    88,   191,  -123,  -123,
+    -123,  -123,  -123,  -123,  -123,  -123,  -123,  -123,  -123,   192,
+    -123,   193,   194,  -123,   195,   196,   197,  -123,  -123,  -123,
+    -123,  -123,  -123,  -123,  -123,  -123,  -123,  -123,  -123,  -123,
+    -123,  -123,  -123,  -123,  -123,  -123,  -123,  -123,  -123,  -123,
+    -123,   198,   199,   200,  -123,  -123,  -123,  -123,  -123,  -123,
+     201,  -123,  -123,  -123,  -123,  -123,   202,  -123,  -123,  -123,
+    -123
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -676,36 +708,38 @@ 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,     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,    45,
-       0,    12,    15,    17,     0,    48,    44,    31,    35,    41,
-      38,    37,    39,    36,    32,    33,    40,    34,    43,    20,
+       0,     0,     0,     0,     0,     0,     7,    32,    46,    19,
+       0,     8,    10,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     6,     0,     0,     9,     0,     0,     0,     0,
+       0,     0,     0,     0,    16,     0,    13,    26,    27,    28,
+      29,    30,     0,     0,     5,    47,    45,    48,    46,    18,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    48,     0,    99,     0,     0,     0,   100,   101,     0,
-       0,     0,     0,    97,     0,     0,     0,   102,     0,     0,
-       0,     0,    48,    21,    14,     0,    43,     0,    49,    54,
-      51,    50,    52,    86,    90,    87,    47,    55,    98,    88,
-       0,    92,    93,     0,     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,    94,
-       0,     0,    89,     3,    46,    82,    96,    83,    85,    91,
-      79,    80,    81,    95,    78,    84
+      31,    11,    24,    25,    48,     0,     0,     0,    12,    15,
+      17,     0,    51,    33,    34,    43,    38,    44,    41,    40,
+      42,    39,    35,    36,    37,    46,    22,    20,    21,     0,
+       0,   105,     0,     0,     0,     0,     0,     0,     0,     0,
+      51,     0,   109,    94,     0,     0,   110,   111,   112,     0,
+       0,     0,     0,   106,     0,     0,   100,   113,     0,     0,
+       0,     0,    51,    23,    14,     0,    46,     0,    52,    58,
+      54,    53,    55,    91,    96,    56,    92,    50,    59,   108,
+      93,     0,    98,    99,     0,     0,     0,    60,    61,    77,
+      68,    63,    64,    67,    75,    74,    65,    78,    62,    73,
+      79,    80,    72,    76,    69,    66,    70,    71,    81,    82,
+      57,   101,     0,     0,    95,     3,    49,    87,   104,    88,
+       0,    90,    97,    84,    85,    86,   103,    83,    89,   107,
+     102
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -115,   194,  -115,    -9,  -115,  -102,   109,  -114,  -115
+    -123,   214,  -123,    -8,  -123,   -78,   -67,  -122,  -123
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,     3,     4,    34,    35,    73,    97,   141,   142
+       0,     3,     4,    35,    36,    77,    78,   151,   152
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -713,93 +747,100 @@ static const yytype_uint8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-     111,   112,   113,    55,   114,   148,   143,   156,    51,    36,
-     115,   116,   117,   118,   119,   120,     6,     1,    37,    38,
-     121,    47,    39,    40,   122,   123,    71,    52,   194,   124,
-     125,   126,   127,   128,     2,   129,   130,   131,   132,    48,
-     133,   134,   135,   136,   196,   137,    60,   138,   139,   140,
-      56,   166,   149,   167,   168,    49,    50,    53,    54,    57,
-      58,    61,    59,    62,    63,    64,   169,   170,   171,    65,
-      66,    67,    68,    70,   172,    69,   173,   174,   175,    72,
-      89,   176,    74,   177,   178,   179,   180,    75,   181,     7,
-       8,   182,    76,   183,   184,     9,   185,   186,    77,    78,
-      79,    41,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    42,    19,    20,    21,    22,    23,    24,    25,    26,
-      80,    27,    28,    29,    30,    81,    43,    31,    32,    82,
-      83,    44,    84,    33,    45,    85,    86,    87,    46,    88,
-      90,    91,    92,    93,    94,    96,    95,    98,    99,   100,
-     101,   102,   103,   104,   109,   105,   106,   107,   110,   144,
-     145,   146,   193,   147,   150,   151,   152,   153,   154,   157,
-     155,   158,   159,   160,   161,   162,   163,     0,   164,   165,
-     187,   188,   189,   190,   191,   192,   195,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,     5,     0,   108
+     104,   120,   121,   122,    56,   123,    59,   158,   167,    52,
+     103,     6,   124,   125,   126,   127,   128,   129,   164,    37,
+      38,   130,    75,    39,    61,   131,   132,   115,    74,    76,
+     206,   133,   134,   135,   136,   137,   138,   153,   139,   140,
+     141,   142,   165,   143,   144,   145,   146,     1,   147,    63,
+     148,   149,   150,    57,    40,    60,   159,   177,    41,   178,
+     179,    42,    53,    64,     2,    49,   180,    50,   102,    51,
+      54,    55,    58,   181,   182,   183,    62,    65,   208,    66,
+     184,    67,   185,   186,   187,    68,    69,    70,   188,    71,
+     189,   190,   191,   192,    73,    94,   193,    72,    76,   194,
+      79,   195,   196,    80,   197,   198,     7,     8,    81,    82,
+      83,    84,     9,    10,    75,    85,    86,    87,    88,    89,
+      11,    12,    13,    14,    15,    16,    17,    18,    90,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    43,    28,
+      29,    91,    30,    31,    92,    93,    32,    33,     0,    44,
+      95,    96,    34,    97,    98,    99,   100,   101,   105,   106,
+     107,   108,   109,    45,   110,   111,   112,   113,   114,    46,
+     116,   117,    47,   118,   119,   154,   155,    48,   156,   168,
+     205,   157,   160,   161,   162,   163,   166,     0,     0,   169,
+     170,   171,   172,   173,   174,   175,   176,   199,   200,   201,
+     202,   203,   204,   207,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,     5
 };
 
 static const yytype_int16 yycheck[] =
 {
-       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,    12,   142,    34,
-      35,    36,    37,    38,    25,    40,    41,    42,    43,    13,
-      45,    46,    47,    48,   146,    50,    12,    52,    53,    54,
-      51,     3,    51,     5,     6,    13,    13,    12,    12,    12,
-       4,    27,    12,    12,     4,     4,    18,    19,    20,     4,
-       4,     4,     4,    50,    26,    12,    28,    29,    30,    10,
-       4,    33,    12,    35,    36,    37,    38,    12,    40,     5,
-       6,    43,    12,    45,    46,    11,    48,    49,    12,    12,
-      12,     3,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    13,    28,    29,    30,    31,    32,    33,    34,    35,
-      12,    37,    38,    39,    40,    12,    28,    43,    44,    12,
-      12,    33,    12,    49,    36,    12,    12,    12,    40,    12,
-      12,    12,    12,    12,    12,     3,    25,    12,    12,    12,
-      12,    12,    12,    12,     4,    12,    12,    12,    12,    12,
-      12,     4,    55,    12,    12,    12,    12,    12,    12,     4,
-      12,    12,    12,    12,    12,    12,    12,    -1,    12,    12,
-      12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,    12,     2,    -1,    89
+      78,     5,     6,     7,     4,     9,     4,     4,   130,    17,
+      77,     0,    16,    17,    18,    19,    20,    21,    13,     4,
+       4,    25,     3,    13,     4,    29,    30,    94,    36,    10,
+     152,    35,    36,    37,    38,    39,    40,   115,    42,    43,
+      44,    45,    37,    47,    48,    49,    50,     8,    52,    13,
+      54,    55,    56,    53,    14,    53,    53,     3,    13,     5,
+       6,    13,    13,    27,    25,    14,    12,    14,    25,    14,
+      13,    13,    13,    19,    20,    21,    13,    13,   156,     4,
+      26,     4,    28,    29,    30,     4,     4,     4,    34,     4,
+      36,    37,    38,    39,    52,     4,    42,    13,    10,    45,
+      13,    47,    48,    13,    50,    51,     5,     6,    13,    13,
+      13,    13,    11,    12,     3,    13,    13,    13,    13,    13,
+      19,    20,    21,    22,    23,    24,    25,    26,    13,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,     3,    38,
+      39,    13,    41,    42,    13,    13,    45,    46,    -1,    14,
+      13,    13,    51,    13,    13,    13,    13,    13,    13,    13,
+      13,    13,    13,    28,    13,    13,    13,    13,    13,    34,
+       4,     4,    37,    13,    13,    13,    13,    42,     4,     4,
+      57,    13,    13,    13,    13,    13,    13,    -1,    -1,    13,
+      13,    13,    13,    13,    13,    13,    13,    13,    13,    13,
+      13,    13,    13,    13,    13,    13,    13,    13,    13,    13,
+      13,    13,    13,    13,    13,    13,     2
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
    state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
-       0,     8,    25,    59,    60,    59,     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,    43,    44,    49,    61,    62,     4,     4,    12,    12,
-      12,     3,    13,    28,    33,    36,    40,    13,    13,    13,
-      13,    61,    12,    12,    12,     4,    51,    12,     4,    12,
-      12,    27,    12,     4,     4,     4,     4,     4,     4,    12,
-      50,    61,    10,    63,    12,    12,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,    12,    12,    12,    12,     4,
-      12,    12,    12,    12,    12,    25,     3,    64,    12,    12,
-      12,    12,    12,    12,    12,    12,    12,    12,    64,     4,
-      12,     5,     6,     7,     9,    15,    16,    17,    18,    19,
-      20,    25,    29,    30,    34,    35,    36,    37,    38,    40,
-      41,    42,    43,    45,    46,    47,    48,    50,    52,    53,
-      54,    65,    66,    63,    12,    12,     4,    12,     4,    51,
-      12,    12,    12,    12,    12,    12,    65,     4,    12,    12,
-      12,    12,    12,    12,    12,    12,     3,     5,     6,    18,
-      19,    20,    26,    28,    29,    30,    33,    35,    36,    37,
-      38,    40,    43,    45,    46,    48,    49,    12,    12,    12,
-      12,    12,    12,    55,    65,    12,    63,    12,    12,    12,
-      12,    12,    12,    12,    12,    12
+       0,     8,    25,    61,    62,    61,     0,     5,     6,    11,
+      12,    19,    20,    21,    22,    23,    24,    25,    26,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    38,    39,
+      41,    42,    45,    46,    51,    63,    64,     4,     4,    13,
+      14,    13,    13,     3,    14,    28,    34,    37,    42,    14,
+      14,    14,    63,    13,    13,    13,     4,    53,    13,     4,
+      53,     4,    13,    13,    27,    13,     4,     4,     4,     4,
+       4,     4,    13,    52,    63,     3,    10,    65,    66,    13,
+      13,    13,    13,    13,    13,    13,    13,    13,    13,    13,
+      13,    13,    13,    13,     4,    13,    13,    13,    13,    13,
+      13,    13,    25,    66,    65,    13,    13,    13,    13,    13,
+      13,    13,    13,    13,    13,    66,     4,     4,    13,    13,
+       5,     6,     7,     9,    16,    17,    18,    19,    20,    21,
+      25,    29,    30,    35,    36,    37,    38,    39,    40,    42,
+      43,    44,    45,    47,    48,    49,    50,    52,    54,    55,
+      56,    67,    68,    65,    13,    13,     4,    13,     4,    53,
+      13,    13,    13,    13,    13,    37,    13,    67,     4,    13,
+      13,    13,    13,    13,    13,    13,    13,     3,     5,     6,
+      12,    19,    20,    21,    26,    28,    29,    30,    34,    36,
+      37,    38,    39,    42,    45,    47,    48,    50,    51,    13,
+      13,    13,    13,    13,    13,    57,    67,    13,    65,    13,
+      13,    13,    13,    13,    13,    13,    13,    13,    13,    13,
+      13
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_int8 yyr1[] =
 {
-       0,    58,    60,    59,    59,    61,    61,    61,    62,    62,
-      62,    62,    62,    62,    62,    62,    62,    62,    62,    62,
-      62,    62,    62,    62,    62,    62,    62,    62,    62,    62,
-      62,    62,    62,    62,    62,    62,    62,    62,    62,    62,
-      62,    62,    63,    63,    64,    64,    65,    65,    65,    66,
-      66,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      66,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      66,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      66,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      66,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      66,    66,    66
+       0,    60,    62,    61,    61,    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,    65,    65,    66,    66,    67,
+      67,    67,    68,    68,    68,    68,    68,    68,    68,    68,
+      68,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+      68,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+      68,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+      68,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+      68,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+      68,    68,    68,    68
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -807,15 +848,16 @@ 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,     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,
+       4,     4,     4,     5,     3,     3,     2,     2,     2,     2,
+       2,     3,     2,     4,     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,
-       2,     2,     2,     2,     2,     2,     2,     2,     3,     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,     3,     3,     3,     3,     3,     3,     3,
+       3,     2,     2,     2,     1,     2,     2,     3,     2,     2,
+       1,     2,     4,     3,     3,     1,     1,     4,     2,     1,
+       1,     1,     1,     1
 };
 
 
@@ -1279,99 +1321,99 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* $@1: %empty  */
-#line 78 "engines/hypno/grammar_arc.y"
+#line 104 "engines/hypno/grammar_arc.y"
              { g_parsedArc->mode = (yyvsp[0].s); }
-#line 1285 "engines/hypno/grammar_arc.cpp"
+#line 1327 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 8: /* hline: CTOK NUM  */
-#line 87 "engines/hypno/grammar_arc.y"
+#line 113 "engines/hypno/grammar_arc.y"
                  {
 		g_parsedArc->id = (yyvsp[0].i);
 		HYPNO_ARC_default_sound_rate = 0;
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1294 "engines/hypno/grammar_arc.cpp"
+#line 1336 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 9: /* hline: FTOK NUM  */
-#line 91 "engines/hypno/grammar_arc.y"
+#line 117 "engines/hypno/grammar_arc.y"
                    {
 		HYPNO_ARC_default_sound_rate = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i));
 	}
-#line 1303 "engines/hypno/grammar_arc.cpp"
+#line 1345 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 10: /* hline: DTOK NUM  */
-#line 95 "engines/hypno/grammar_arc.y"
+#line 121 "engines/hypno/grammar_arc.y"
                     {
 		g_parsedArc->frameDelay = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 1312 "engines/hypno/grammar_arc.cpp"
+#line 1354 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 11: /* hline: PTOK NUM NUM  */
-#line 99 "engines/hypno/grammar_arc.y"
+#line 125 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1318 "engines/hypno/grammar_arc.cpp"
+#line 1360 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 12: /* hline: ATOK NUM NUM  */
-#line 100 "engines/hypno/grammar_arc.y"
+#line 126 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1324 "engines/hypno/grammar_arc.cpp"
+#line 1366 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 13: /* hline: MTOK FILENAME  */
-#line 101 "engines/hypno/grammar_arc.y"
+#line 127 "engines/hypno/grammar_arc.y"
                         {
 		debugC(1, kHypnoDebugParser, "M %s", (yyvsp[0].s));
 		g_parsedArc->maskVideo = (yyvsp[0].s);
 	}
-#line 1333 "engines/hypno/grammar_arc.cpp"
+#line 1375 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 14: /* hline: UTOK NUM NUM NUM NUM  */
-#line 105 "engines/hypno/grammar_arc.y"
+#line 131 "engines/hypno/grammar_arc.y"
                                {
 		debugC(1, kHypnoDebugParser, "U %d %d %d %d", (yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 		ScriptInfo si((yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 		g_parsedArc->script.push_back(si);
 	}
-#line 1343 "engines/hypno/grammar_arc.cpp"
+#line 1385 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 15: /* hline: VTOK NUM NUM  */
-#line 110 "engines/hypno/grammar_arc.y"
+#line 136 "engines/hypno/grammar_arc.y"
                        {
 		debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 		g_parsedArc->mouseBox = Common::Rect(0, 0, (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1352 "engines/hypno/grammar_arc.cpp"
+#line 1394 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 16: /* hline: VTOK RESTOK  */
-#line 114 "engines/hypno/grammar_arc.y"
+#line 140 "engines/hypno/grammar_arc.y"
                       {
 		debugC(1, kHypnoDebugParser, "V 320,200");
 		g_parsedArc->mouseBox = Common::Rect(0, 0, 320, 200);
 	}
-#line 1361 "engines/hypno/grammar_arc.cpp"
+#line 1403 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 17: /* hline: OTOK NUM NUM  */
-#line 118 "engines/hypno/grammar_arc.y"
+#line 144 "engines/hypno/grammar_arc.y"
                        {
 		g_parsedArc->objKillsRequired[0] = (yyvsp[-1].i);
 		g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1371 "engines/hypno/grammar_arc.cpp"
+#line 1413 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 18: /* hline: ONTOK NUM NUM  */
-#line 123 "engines/hypno/grammar_arc.y"
+#line 149 "engines/hypno/grammar_arc.y"
                         {
 		if (Common::String("O0") == (yyvsp[-2].s)) {
 			g_parsedArc->objKillsRequired[0] = (yyvsp[-1].i);
@@ -1382,11 +1424,11 @@ yyreduce:
 		} else
 			error("Invalid objective: '%s'", (yyvsp[-2].s));
 		debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1386 "engines/hypno/grammar_arc.cpp"
+#line 1428 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 19: /* hline: ONTOK NUM  */
-#line 133 "engines/hypno/grammar_arc.y"
+#line 159 "engines/hypno/grammar_arc.y"
                     {
 		if (Common::String("O0") == (yyvsp[-1].s)) {
 			g_parsedArc->objKillsRequired[0] = (yyvsp[0].i);
@@ -1396,96 +1438,114 @@ yyreduce:
 			error("Invalid objective: '%s'", (yyvsp[-1].s));
 		debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
 	}
-#line 1400 "engines/hypno/grammar_arc.cpp"
+#line 1442 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 20: /* hline: TPTOK NONETOK NUM FILENAME  */
+#line 168 "engines/hypno/grammar_arc.y"
+                                     {
+		ArcadeTransition at("NONE", (yyvsp[0].s), "", (yyvsp[-1].i));
+		g_parsedArc->transitions.push_back(at);
+		debugC(1, kHypnoDebugParser, "Tp %s %d %s", "NONE", (yyvsp[-1].i), (yyvsp[0].s));
+	}
+#line 1452 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 21: /* hline: TSTOK FILENAME NUM NUM  */
+#line 173 "engines/hypno/grammar_arc.y"
+                                 {
+		debugC(1, kHypnoDebugParser, "Ts %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
+	}
+#line 1460 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 20: /* hline: TPTOK FILENAME NUM FILENAME  */
-#line 142 "engines/hypno/grammar_arc.y"
+  case 22: /* hline: TPTOK FILENAME NUM FILENAME  */
+#line 176 "engines/hypno/grammar_arc.y"
                                       {
 		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 1410 "engines/hypno/grammar_arc.cpp"
+#line 1470 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 21: /* hline: TATOK NUM FILENAME flag enc  */
-#line 147 "engines/hypno/grammar_arc.y"
+  case 23: /* hline: TATOK NUM FILENAME flag enc  */
+#line 181 "engines/hypno/grammar_arc.y"
                                       {
 		ArcadeTransition at("", "", (yyvsp[-2].s), (yyvsp[-3].i));
 		g_parsedArc->transitions.push_back(at);
 		debugC(1, kHypnoDebugParser, "Ta %d %s", (yyvsp[-3].i), (yyvsp[-2].s));
 	}
-#line 1420 "engines/hypno/grammar_arc.cpp"
+#line 1480 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 22: /* hline: TTOK FILENAME NUM  */
-#line 152 "engines/hypno/grammar_arc.y"
+  case 24: /* hline: TTOK FILENAME NUM  */
+#line 186 "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 1430 "engines/hypno/grammar_arc.cpp"
+#line 1490 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 23: /* hline: TTOK NONETOK NUM  */
-#line 157 "engines/hypno/grammar_arc.y"
+  case 25: /* hline: TTOK NONETOK NUM  */
+#line 191 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1436 "engines/hypno/grammar_arc.cpp"
+#line 1496 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 24: /* hline: NTOK FILENAME  */
-#line 158 "engines/hypno/grammar_arc.y"
+  case 26: /* hline: NTOK FILENAME  */
+#line 192 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
 	}
-#line 1445 "engines/hypno/grammar_arc.cpp"
+#line 1505 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 25: /* hline: NSTOK FILENAME  */
-#line 162 "engines/hypno/grammar_arc.y"
+  case 27: /* hline: NSTOK FILENAME  */
+#line 196 "engines/hypno/grammar_arc.y"
                           {
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
 	}
-#line 1454 "engines/hypno/grammar_arc.cpp"
+#line 1514 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 26: /* hline: RTOK FILENAME  */
-#line 166 "engines/hypno/grammar_arc.y"
+  case 28: /* hline: RTOK FILENAME  */
+#line 200 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->backgroundPalette = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1462 "engines/hypno/grammar_arc.cpp"
+#line 1522 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 27: /* hline: ITOK FILENAME  */
-#line 169 "engines/hypno/grammar_arc.y"
+  case 29: /* hline: ITOK FILENAME  */
+#line 203 "engines/hypno/grammar_arc.y"
                         {
 		g_parsedArc->player = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1471 "engines/hypno/grammar_arc.cpp"
+#line 1531 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 28: /* hline: I1TOK FILENAME  */
-#line 173 "engines/hypno/grammar_arc.y"
+  case 30: /* hline: I1TOK FILENAME  */
+#line 207 "engines/hypno/grammar_arc.y"
                          {
 		debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
 	}
-#line 1479 "engines/hypno/grammar_arc.cpp"
+#line 1539 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 29: /* hline: QTOK NUM NUM  */
-#line 176 "engines/hypno/grammar_arc.y"
+  case 31: /* hline: QTOK NUM NUM  */
+#line 210 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1485 "engines/hypno/grammar_arc.cpp"
+#line 1545 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 30: /* hline: BNTOK FILENAME  */
-#line 177 "engines/hypno/grammar_arc.y"
+  case 32: /* hline: BNTOK FILENAME  */
+#line 211 "engines/hypno/grammar_arc.y"
                          {
 		if (Common::String("B0") == (yyvsp[-1].s))
 			g_parsedArc->beforeVideo = (yyvsp[0].s);
@@ -1514,167 +1574,153 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
 	}
-#line 1518 "engines/hypno/grammar_arc.cpp"
+#line 1578 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 31: /* hline: SNTOK FILENAME enc flag  */
-#line 205 "engines/hypno/grammar_arc.y"
+  case 33: /* hline: SNTOK FILENAME enc flag  */
+#line 239 "engines/hypno/grammar_arc.y"
                                   {
-		uint32 sampleRate = 11025;
-		if (Common::String("22K") == (yyvsp[-1].s) || Common::String("22k") == (yyvsp[-1].s))
-			sampleRate = 22050;
-		else if (HYPNO_ARC_default_sound_rate > 0)
-			sampleRate = HYPNO_ARC_default_sound_rate;
-
-		if (Common::String("S0") == (yyvsp[-3].s)) {
-			g_parsedArc->music = (yyvsp[-2].s);
-			g_parsedArc->musicRate = sampleRate;
-		} else if (Common::String("S1") == (yyvsp[-3].s)) {
-			g_parsedArc->shootSound = (yyvsp[-2].s);
-			g_parsedArc->shootSoundRate = sampleRate;
-		} else if (Common::String("S2") == (yyvsp[-3].s)) {
-			g_parsedArc->hitSound = (yyvsp[-2].s);
-			g_parsedArc->hitSoundRate = sampleRate;
-		} else if (Common::String("S4") == (yyvsp[-3].s)) {
-			g_parsedArc->enemySound = (yyvsp[-2].s);
-			g_parsedArc->enemySoundRate = sampleRate;
-		} else if (Common::String("S5") == (yyvsp[-3].s)) {
-			g_parsedArc->additionalSound = (yyvsp[-2].s);
-			g_parsedArc->additionalSoundRate = sampleRate;
-		}
-		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-2].s));
-	}
-#line 1548 "engines/hypno/grammar_arc.cpp"
-    break;
-
-  case 32: /* hline: HETOK BYTE NUM NUM  */
-#line 230 "engines/hypno/grammar_arc.y"
+		parseSN((yyvsp[-3].s), (yyvsp[-2].s), (yyvsp[-1].s), (yyvsp[0].s));
+	}
+#line 1586 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 34: /* hline: SNTOK FILENAME flag enc  */
+#line 242 "engines/hypno/grammar_arc.y"
+                                  {
+		parseSN((yyvsp[-3].s), (yyvsp[-2].s), (yyvsp[0].s), (yyvsp[-1].s));
+	}
+#line 1594 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 35: /* hline: HETOK BYTE NUM NUM  */
+#line 245 "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 1559 "engines/hypno/grammar_arc.cpp"
+#line 1605 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 33: /* hline: HLTOK BYTE NUM NUM  */
-#line 236 "engines/hypno/grammar_arc.y"
+  case 36: /* hline: HLTOK BYTE NUM NUM  */
+#line 251 "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 1569 "engines/hypno/grammar_arc.cpp"
+#line 1615 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 34: /* hline: HUTOK BYTE NUM NUM  */
-#line 241 "engines/hypno/grammar_arc.y"
+  case 37: /* hline: HUTOK BYTE NUM NUM  */
+#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, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1579 "engines/hypno/grammar_arc.cpp"
+#line 1625 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 35: /* hline: HTOK NAME NUM NUM  */
-#line 246 "engines/hypno/grammar_arc.y"
+  case 38: /* hline: HTOK NAME NUM NUM  */
+#line 261 "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 1590 "engines/hypno/grammar_arc.cpp"
+#line 1636 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 36: /* hline: HTOK RTOK NUM NUM  */
-#line 252 "engines/hypno/grammar_arc.y"
+  case 39: /* hline: HTOK RTOK NUM NUM  */
+#line 267 "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 1600 "engines/hypno/grammar_arc.cpp"
+#line 1646 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 37: /* hline: HTOK ATOK NUM NUM  */
-#line 257 "engines/hypno/grammar_arc.y"
+  case 40: /* hline: HTOK ATOK NUM NUM  */
+#line 272 "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 1610 "engines/hypno/grammar_arc.cpp"
+#line 1656 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 38: /* hline: HTOK PTOK NUM NUM  */
-#line 262 "engines/hypno/grammar_arc.y"
+  case 41: /* hline: HTOK PTOK NUM NUM  */
+#line 277 "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 1620 "engines/hypno/grammar_arc.cpp"
+#line 1666 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 39: /* hline: HTOK LTOK NUM NUM  */
-#line 267 "engines/hypno/grammar_arc.y"
+  case 42: /* hline: HTOK LTOK NUM NUM  */
+#line 282 "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 1630 "engines/hypno/grammar_arc.cpp"
+#line 1676 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 40: /* hline: H12TOK BYTE NUM NUM  */
-#line 272 "engines/hypno/grammar_arc.y"
+  case 43: /* hline: H12TOK BYTE NUM NUM  */
+#line 287 "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 1640 "engines/hypno/grammar_arc.cpp"
+#line 1686 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 41: /* hline: HTOK BYTE NUM NUM  */
-#line 277 "engines/hypno/grammar_arc.y"
+  case 44: /* hline: HTOK BYTE NUM NUM  */
+#line 292 "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 1650 "engines/hypno/grammar_arc.cpp"
+#line 1696 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 42: /* enc: ENCTOK  */
-#line 284 "engines/hypno/grammar_arc.y"
+  case 45: /* enc: ENCTOK  */
+#line 299 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1656 "engines/hypno/grammar_arc.cpp"
+#line 1702 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 43: /* enc: %empty  */
-#line 285 "engines/hypno/grammar_arc.y"
+  case 46: /* enc: %empty  */
+#line 300 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1662 "engines/hypno/grammar_arc.cpp"
+#line 1708 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 44: /* flag: NAME  */
-#line 288 "engines/hypno/grammar_arc.y"
+  case 47: /* flag: NAME  */
+#line 303 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1668 "engines/hypno/grammar_arc.cpp"
+#line 1714 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 45: /* flag: %empty  */
-#line 289 "engines/hypno/grammar_arc.y"
+  case 48: /* flag: %empty  */
+#line 304 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1674 "engines/hypno/grammar_arc.cpp"
+#line 1720 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 49: /* bline: FNTOK FILENAME  */
-#line 297 "engines/hypno/grammar_arc.y"
+  case 52: /* bline: FNTOK FILENAME  */
+#line 312 "engines/hypno/grammar_arc.y"
                       {
 		shoot = new Shoot();
 		if (Common::String("F0") == (yyvsp[-1].s))
@@ -1683,421 +1729,457 @@ yyreduce:
 			shoot->explosionAnimation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1687 "engines/hypno/grammar_arc.cpp"
+#line 1733 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 50: /* bline: AVTOK NUM  */
-#line 305 "engines/hypno/grammar_arc.y"
+  case 53: /* bline: AVTOK NUM  */
+#line 320 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "AV %d", (yyvsp[0].i));
 	}
-#line 1695 "engines/hypno/grammar_arc.cpp"
+#line 1741 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 51: /* bline: ALTOK NUM  */
-#line 308 "engines/hypno/grammar_arc.y"
+  case 54: /* bline: ALTOK NUM  */
+#line 323 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "AL %d", (yyvsp[0].i));
 	}
-#line 1703 "engines/hypno/grammar_arc.cpp"
+#line 1749 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 52: /* bline: ABTOK NUM  */
-#line 311 "engines/hypno/grammar_arc.y"
+  case 55: /* bline: ABTOK NUM  */
+#line 326 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "AB %d", (yyvsp[0].i));
 	}
-#line 1711 "engines/hypno/grammar_arc.cpp"
+#line 1757 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 53: /* bline: J0TOK NUM  */
-#line 314 "engines/hypno/grammar_arc.y"
+  case 56: /* bline: DTOK LTOK  */
+#line 329 "engines/hypno/grammar_arc.y"
+                     { debugC(1, kHypnoDebugParser, "D L");
+	}
+#line 1764 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 57: /* bline: J0TOK NUM  */
+#line 331 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J0 %d", (yyvsp[0].i));
 	}
-#line 1719 "engines/hypno/grammar_arc.cpp"
+#line 1772 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 54: /* bline: FNTOK NONETOK  */
-#line 317 "engines/hypno/grammar_arc.y"
+  case 58: /* bline: FNTOK NONETOK  */
+#line 334 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE");
 	}
-#line 1729 "engines/hypno/grammar_arc.cpp"
+#line 1782 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 55: /* bline: FTOK FILENAME  */
-#line 322 "engines/hypno/grammar_arc.y"
+  case 59: /* bline: FTOK FILENAME  */
+#line 339 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1739 "engines/hypno/grammar_arc.cpp"
+#line 1792 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 56: /* bline: ITOK NAME  */
-#line 327 "engines/hypno/grammar_arc.y"
+  case 60: /* bline: ITOK NAME  */
+#line 344 "engines/hypno/grammar_arc.y"
                      {
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1748 "engines/hypno/grammar_arc.cpp"
+#line 1801 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 57: /* bline: ITOK BNTOK  */
-#line 331 "engines/hypno/grammar_arc.y"
+  case 61: /* bline: ITOK BNTOK  */
+#line 348 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1757 "engines/hypno/grammar_arc.cpp"
+#line 1810 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 58: /* bline: ITOK ATOK  */
-#line 335 "engines/hypno/grammar_arc.y"
+  case 62: /* bline: ITOK ATOK  */
+#line 352 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A");
 	}
-#line 1766 "engines/hypno/grammar_arc.cpp"
+#line 1819 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 59: /* bline: ITOK CTOK  */
-#line 339 "engines/hypno/grammar_arc.y"
+  case 63: /* bline: ITOK CTOK  */
+#line 356 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C");
 	}
-#line 1775 "engines/hypno/grammar_arc.cpp"
+#line 1828 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 60: /* bline: ITOK DTOK  */
-#line 343 "engines/hypno/grammar_arc.y"
+  case 64: /* bline: ITOK DTOK  */
+#line 360 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D");
 	}
-#line 1784 "engines/hypno/grammar_arc.cpp"
+#line 1837 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 61: /* bline: ITOK FTOK  */
-#line 347 "engines/hypno/grammar_arc.y"
+  case 65: /* bline: ITOK FTOK  */
+#line 364 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F");
 	}
-#line 1793 "engines/hypno/grammar_arc.cpp"
+#line 1846 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 62: /* bline: ITOK GTOK  */
-#line 351 "engines/hypno/grammar_arc.y"
+  case 66: /* bline: ITOK GTOK  */
+#line 368 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == G
 		shoot->name = "G";
 		debugC(1, kHypnoDebugParser, "I G");
 	}
-#line 1802 "engines/hypno/grammar_arc.cpp"
+#line 1855 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 63: /* bline: ITOK HTOK  */
-#line 355 "engines/hypno/grammar_arc.y"
+  case 67: /* bline: ITOK HTOK  */
+#line 372 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H");
 	}
-#line 1811 "engines/hypno/grammar_arc.cpp"
+#line 1864 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 64: /* bline: ITOK ITOK  */
-#line 359 "engines/hypno/grammar_arc.y"
+  case 68: /* bline: ITOK H12TOK  */
+#line 376 "engines/hypno/grammar_arc.y"
+                       { // Workaround for NAME == H1/H2
+		shoot->name = (yyvsp[0].s);
+		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
+	}
+#line 1873 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 69: /* bline: ITOK ITOK  */
+#line 380 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I");
 	}
-#line 1820 "engines/hypno/grammar_arc.cpp"
+#line 1882 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 65: /* bline: ITOK JTOK  */
-#line 363 "engines/hypno/grammar_arc.y"
+  case 70: /* bline: ITOK JTOK  */
+#line 384 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == J
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J");
 	}
-#line 1829 "engines/hypno/grammar_arc.cpp"
+#line 1891 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 66: /* bline: ITOK KTOK  */
-#line 367 "engines/hypno/grammar_arc.y"
+  case 71: /* bline: ITOK KTOK  */
+#line 388 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == K
 		shoot->name = "K";
 		debugC(1, kHypnoDebugParser, "I K");
 	}
-#line 1838 "engines/hypno/grammar_arc.cpp"
+#line 1900 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 67: /* bline: ITOK NTOK  */
-#line 371 "engines/hypno/grammar_arc.y"
+  case 72: /* bline: ITOK NTOK  */
+#line 392 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N");
 	}
-#line 1847 "engines/hypno/grammar_arc.cpp"
+#line 1909 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 68: /* bline: ITOK OTOK  */
-#line 375 "engines/hypno/grammar_arc.y"
+  case 73: /* bline: ITOK OTOK  */
+#line 396 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O");
 	}
-#line 1856 "engines/hypno/grammar_arc.cpp"
+#line 1918 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 69: /* bline: ITOK PTOK  */
-#line 379 "engines/hypno/grammar_arc.y"
+  case 74: /* bline: ITOK PTOK  */
+#line 400 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P");
 	}
-#line 1865 "engines/hypno/grammar_arc.cpp"
+#line 1927 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 70: /* bline: ITOK QTOK  */
-#line 383 "engines/hypno/grammar_arc.y"
+  case 75: /* bline: ITOK QTOK  */
+#line 404 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q");
 	}
-#line 1874 "engines/hypno/grammar_arc.cpp"
+#line 1936 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 71: /* bline: ITOK RTOK  */
-#line 387 "engines/hypno/grammar_arc.y"
+  case 76: /* bline: ITOK RTOK  */
+#line 408 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R");
 	}
-#line 1883 "engines/hypno/grammar_arc.cpp"
+#line 1945 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 72: /* bline: ITOK SNTOK  */
-#line 391 "engines/hypno/grammar_arc.y"
+  case 77: /* bline: ITOK SNTOK  */
+#line 412 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1892 "engines/hypno/grammar_arc.cpp"
+#line 1954 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 73: /* bline: ITOK TTOK  */
-#line 395 "engines/hypno/grammar_arc.y"
+  case 78: /* bline: ITOK TTOK  */
+#line 416 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T");
 	}
-#line 1901 "engines/hypno/grammar_arc.cpp"
+#line 1963 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 74: /* bline: ITOK LTOK  */
-#line 399 "engines/hypno/grammar_arc.y"
+  case 79: /* bline: ITOK LTOK  */
+#line 420 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == L
 		shoot->name = "L";
 		debugC(1, kHypnoDebugParser, "I L");
 	}
-#line 1910 "engines/hypno/grammar_arc.cpp"
+#line 1972 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 75: /* bline: ITOK MTOK  */
-#line 403 "engines/hypno/grammar_arc.y"
+  case 80: /* bline: ITOK MTOK  */
+#line 424 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == M
 		shoot->name = "M";
 		debugC(1, kHypnoDebugParser, "I M");
 	}
-#line 1919 "engines/hypno/grammar_arc.cpp"
+#line 1981 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 76: /* bline: ITOK UTOK  */
-#line 407 "engines/hypno/grammar_arc.y"
+  case 81: /* bline: ITOK UTOK  */
+#line 428 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == U
 		shoot->name = "U";
 		debugC(1, kHypnoDebugParser, "I U");
 	}
-#line 1928 "engines/hypno/grammar_arc.cpp"
+#line 1990 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 77: /* bline: JTOK NUM  */
-#line 411 "engines/hypno/grammar_arc.y"
+  case 82: /* bline: JTOK NUM  */
+#line 432 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
 	}
-#line 1936 "engines/hypno/grammar_arc.cpp"
+#line 1998 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 78: /* bline: A0TOK NUM NUM  */
-#line 414 "engines/hypno/grammar_arc.y"
+  case 83: /* bline: A0TOK NUM NUM  */
+#line 435 "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 1945 "engines/hypno/grammar_arc.cpp"
+#line 2007 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 79: /* bline: RTOK NUM NUM  */
-#line 418 "engines/hypno/grammar_arc.y"
+  case 84: /* bline: RTOK NUM NUM  */
+#line 439 "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 1955 "engines/hypno/grammar_arc.cpp"
+#line 2017 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 80: /* bline: R0TOK NUM NUM  */
-#line 423 "engines/hypno/grammar_arc.y"
+  case 85: /* bline: R0TOK NUM NUM  */
+#line 444 "engines/hypno/grammar_arc.y"
                          {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R0 %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1965 "engines/hypno/grammar_arc.cpp"
+#line 2027 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 81: /* bline: R1TOK NUM NUM  */
-#line 428 "engines/hypno/grammar_arc.y"
+  case 86: /* bline: R1TOK NUM NUM  */
+#line 449 "engines/hypno/grammar_arc.y"
                          {
 		debugC(1, kHypnoDebugParser, "R1 %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1973 "engines/hypno/grammar_arc.cpp"
+#line 2035 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 82: /* bline: BNTOK NUM NUM  */
-#line 431 "engines/hypno/grammar_arc.y"
+  case 87: /* bline: BNTOK NUM NUM  */
+#line 452 "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 1983 "engines/hypno/grammar_arc.cpp"
+#line 2045 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 83: /* bline: KNTOK NUM NUM  */
-#line 436 "engines/hypno/grammar_arc.y"
+  case 88: /* bline: KNTOK NUM NUM  */
+#line 457 "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 1993 "engines/hypno/grammar_arc.cpp"
+#line 2055 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 84: /* bline: P0TOK NUM NUM  */
-#line 441 "engines/hypno/grammar_arc.y"
+  case 89: /* bline: P0TOK NUM NUM  */
+#line 462 "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 2002 "engines/hypno/grammar_arc.cpp"
+#line 2064 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 85: /* bline: OTOK NUM NUM  */
-#line 445 "engines/hypno/grammar_arc.y"
+  case 90: /* bline: OTOK NUM NUM  */
+#line 466 "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 2013 "engines/hypno/grammar_arc.cpp"
+#line 2075 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 86: /* bline: CTOK NUM  */
-#line 451 "engines/hypno/grammar_arc.y"
+  case 91: /* bline: CTOK NUM  */
+#line 472 "engines/hypno/grammar_arc.y"
                     {
 		shoot->timesToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
 	}
-#line 2022 "engines/hypno/grammar_arc.cpp"
+#line 2084 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 87: /* bline: HTOK NUM  */
-#line 455 "engines/hypno/grammar_arc.y"
+  case 92: /* bline: HTOK NUM  */
+#line 476 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrames.push_back((yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 2030 "engines/hypno/grammar_arc.cpp"
+#line 2092 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 88: /* bline: VTOK NUM  */
-#line 458 "engines/hypno/grammar_arc.y"
+  case 93: /* bline: VTOK NUM  */
+#line 479 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 2036 "engines/hypno/grammar_arc.cpp"
+#line 2098 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 89: /* bline: WTOK NUM  */
-#line 459 "engines/hypno/grammar_arc.y"
+  case 94: /* bline: VTOK  */
+#line 480 "engines/hypno/grammar_arc.y"
+               { debugC(1, kHypnoDebugParser, "V"); }
+#line 2104 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 95: /* bline: WTOK NUM  */
+#line 481 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 2044 "engines/hypno/grammar_arc.cpp"
+#line 2112 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 90: /* bline: DTOK NUM  */
-#line 462 "engines/hypno/grammar_arc.y"
+  case 96: /* bline: DTOK NUM  */
+#line 484 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 2053 "engines/hypno/grammar_arc.cpp"
+#line 2121 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 91: /* bline: LTOK NUM NUM  */
-#line 466 "engines/hypno/grammar_arc.y"
+  case 97: /* bline: LTOK NUM NUM  */
+#line 488 "engines/hypno/grammar_arc.y"
                        {
 		debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 2061 "engines/hypno/grammar_arc.cpp"
+#line 2129 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 92: /* bline: LTOK NUM  */
-#line 469 "engines/hypno/grammar_arc.y"
+  case 98: /* bline: LTOK NUM  */
+#line 491 "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 2071 "engines/hypno/grammar_arc.cpp"
+#line 2139 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 93: /* bline: MTOK NUM  */
-#line 474 "engines/hypno/grammar_arc.y"
+  case 99: /* bline: MTOK NUM  */
+#line 496 "engines/hypno/grammar_arc.y"
                    { debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i));
 		shoot->missedAnimation = (yyvsp[0].i);
 	}
-#line 2079 "engines/hypno/grammar_arc.cpp"
+#line 2147 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 94: /* bline: KTOK NUM  */
-#line 477 "engines/hypno/grammar_arc.y"
+  case 100: /* bline: KTOK  */
+#line 499 "engines/hypno/grammar_arc.y"
+               { debugC(1, kHypnoDebugParser, "K"); }
+#line 2153 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 101: /* bline: KTOK NUM  */
+#line 500 "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 2088 "engines/hypno/grammar_arc.cpp"
+#line 2162 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 95: /* bline: KTOK NUM NUM  */
-#line 481 "engines/hypno/grammar_arc.y"
+  case 102: /* bline: KTOK NUM NUM NUM  */
+#line 504 "engines/hypno/grammar_arc.y"
+                           {
+		debugC(1, kHypnoDebugParser, "K %d %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
+	}
+#line 2170 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 103: /* bline: KTOK NUM NUM  */
+#line 507 "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 2097 "engines/hypno/grammar_arc.cpp"
+#line 2179 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 96: /* bline: SNTOK FILENAME enc  */
-#line 485 "engines/hypno/grammar_arc.y"
+  case 104: /* bline: SNTOK FILENAME enc  */
+#line 511 "engines/hypno/grammar_arc.y"
                              {
 		if (Common::String("S0") == (yyvsp[-2].s))
 			shoot->enemySound = (yyvsp[-1].s);
@@ -2107,60 +2189,83 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 2111 "engines/hypno/grammar_arc.cpp"
+#line 2193 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 105: /* bline: SNTOK  */
+#line 520 "engines/hypno/grammar_arc.y"
+                {
+		debugC(1, kHypnoDebugParser, "SN");
+	}
+#line 2201 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 97: /* bline: GTOK  */
-#line 494 "engines/hypno/grammar_arc.y"
+  case 106: /* bline: GTOK  */
+#line 524 "engines/hypno/grammar_arc.y"
                { debugC(1, kHypnoDebugParser, "G"); }
-#line 2117 "engines/hypno/grammar_arc.cpp"
+#line 2207 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 107: /* bline: TTOK NUM NUM NUM  */
+#line 525 "engines/hypno/grammar_arc.y"
+                           {
+		debugC(1, kHypnoDebugParser, "T %d %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
+	}
+#line 2215 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 98: /* bline: TTOK NUM  */
-#line 495 "engines/hypno/grammar_arc.y"
+  case 108: /* bline: TTOK NUM  */
+#line 528 "engines/hypno/grammar_arc.y"
                    {
 		debugC(1, kHypnoDebugParser, "T %d", (yyvsp[0].i));
 	}
-#line 2125 "engines/hypno/grammar_arc.cpp"
+#line 2223 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 99: /* bline: TTOK  */
-#line 498 "engines/hypno/grammar_arc.y"
+  case 109: /* bline: TTOK  */
+#line 531 "engines/hypno/grammar_arc.y"
                {
 		debugC(1, kHypnoDebugParser, "T");
 	}
-#line 2133 "engines/hypno/grammar_arc.cpp"
+#line 2231 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 100: /* bline: MTOK  */
-#line 501 "engines/hypno/grammar_arc.y"
+  case 110: /* bline: MTOK  */
+#line 534 "engines/hypno/grammar_arc.y"
                {
 		debugC(1, kHypnoDebugParser, "M");
 	}
-#line 2141 "engines/hypno/grammar_arc.cpp"
+#line 2239 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 101: /* bline: NTOK  */
-#line 504 "engines/hypno/grammar_arc.y"
+  case 111: /* bline: NTOK  */
+#line 537 "engines/hypno/grammar_arc.y"
                {
 		shoot->noEnemySound = true;
 		debugC(1, kHypnoDebugParser, "N"); }
-#line 2149 "engines/hypno/grammar_arc.cpp"
+#line 2247 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 102: /* bline: ZTOK  */
-#line 507 "engines/hypno/grammar_arc.y"
+  case 112: /* bline: NRTOK  */
+#line 540 "engines/hypno/grammar_arc.y"
+                {
+		debugC(1, kHypnoDebugParser, "NR"); }
+#line 2254 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 113: /* bline: ZTOK  */
+#line 542 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot);
 		//delete shoot;
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z");
 	}
-#line 2160 "engines/hypno/grammar_arc.cpp"
+#line 2265 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 2164 "engines/hypno/grammar_arc.cpp"
+#line 2269 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 35825e5d05f..66a62703717 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -48,6 +48,32 @@ int HYPNO_ARC_wrap() {
 
 using namespace Hypno;
 
+void parseSN(const char *sn, const char *path, const char *enc, const char *flag) {
+	uint32 sampleRate = 11025;
+	if (Common::String("22K") == enc || Common::String("22k") == enc)
+		sampleRate = 22050;
+	else if (HYPNO_ARC_default_sound_rate > 0)
+		sampleRate = HYPNO_ARC_default_sound_rate;
+
+	if (Common::String("S0") == sn) {
+		g_parsedArc->music = path;
+		g_parsedArc->musicRate = sampleRate;
+	} else if (Common::String("S1") == sn) {
+		g_parsedArc->shootSound = path;
+		g_parsedArc->shootSoundRate = sampleRate;
+	} else if (Common::String("S2") == sn) {
+		g_parsedArc->hitSound = path;
+		g_parsedArc->hitSoundRate = sampleRate;
+	} else if (Common::String("S4") == sn) {
+		g_parsedArc->enemySound = path;
+		g_parsedArc->enemySoundRate = sampleRate;
+	} else if (Common::String("S5") == sn) {
+		g_parsedArc->additionalSound = path;
+		g_parsedArc->additionalSoundRate = sampleRate;
+	}
+	debugC(1, kHypnoDebugParser, "SN %s", path);
+}
+
 %}
 
 %union {
@@ -55,11 +81,11 @@ using namespace Hypno;
 	int i;	 /* integer value */
 }
 
-%token<s> NAME FILENAME BNTOK SNTOK KNTOK YXTOK FNTOK ENCTOK ONTOK
+%token<s> NAME FILENAME BNTOK SNTOK KNTOK YXTOK FNTOK ENCTOK ONTOK H12TOK
 %token<i> NUM BYTE
 // header
-%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 R0TOK R1TOK
+%token COMMENT ALTOK AVTOK ABTOK CTOK DTOK HTOK HETOK HLTOK HUTOK RETTOK QTOK RESTOK
+%token PTOK FTOK TTOK TATOK TPTOK TSTOK ATOK VTOK OTOK LTOK MTOK NTOK NRTOK NSTOK RTOK R0TOK R1TOK
 %token ITOK I1TOK GTOK JTOK J0TOK KTOK UTOK ZTOK
 
 // body
@@ -139,6 +165,14 @@ hline: 	CTOK NUM {
 			error("Invalid objective: '%s'", $1);
 		debugC(1, kHypnoDebugParser, "ON %d", $2);
 	}
+	| TPTOK NONETOK NUM FILENAME {
+		ArcadeTransition at("NONE", $4, "", $3);
+		g_parsedArc->transitions.push_back(at);
+		debugC(1, kHypnoDebugParser, "Tp %s %d %s", "NONE", $3, $4);
+	}
+	| TSTOK FILENAME NUM NUM {
+		debugC(1, kHypnoDebugParser, "Ts %s %d %d", $2, $3, $4);
+	}
 	| TPTOK FILENAME NUM FILENAME {
 		ArcadeTransition at($2, $4, "", $3);
 		g_parsedArc->transitions.push_back(at);
@@ -203,29 +237,10 @@ hline: 	CTOK NUM {
 		debugC(1, kHypnoDebugParser, "BN %s", $2);
 	}
 	| SNTOK FILENAME enc flag {
-		uint32 sampleRate = 11025;
-		if (Common::String("22K") == $3 || Common::String("22k") == $3)
-			sampleRate = 22050;
-		else if (HYPNO_ARC_default_sound_rate > 0)
-			sampleRate = HYPNO_ARC_default_sound_rate;
-
-		if (Common::String("S0") == $1) {
-			g_parsedArc->music = $2;
-			g_parsedArc->musicRate = sampleRate;
-		} else if (Common::String("S1") == $1) {
-			g_parsedArc->shootSound = $2;
-			g_parsedArc->shootSoundRate = sampleRate;
-		} else if (Common::String("S2") == $1) {
-			g_parsedArc->hitSound = $2;
-			g_parsedArc->hitSoundRate = sampleRate;
-		} else if (Common::String("S4") == $1) {
-			g_parsedArc->enemySound = $2;
-			g_parsedArc->enemySoundRate = sampleRate;
-		} else if (Common::String("S5") == $1) {
-			g_parsedArc->additionalSound = $2;
-			g_parsedArc->additionalSoundRate = sampleRate;
-		}
-		debugC(1, kHypnoDebugParser, "SN %s", $2);
+		parseSN($1, $2, $3, $4);
+	}
+	| SNTOK FILENAME flag enc {
+		parseSN($1, $2, $4, $3);
 	}
 	| HETOK BYTE NUM NUM {
 		Segment segment($2, $4, $3);
@@ -311,6 +326,8 @@ bline: FNTOK FILENAME {
 	| ABTOK NUM {
 		debugC(1, kHypnoDebugParser, "AB %d", $2);
 	}
+	| DTOK LTOK  { debugC(1, kHypnoDebugParser, "D L");
+	}
 	| J0TOK NUM {
 		debugC(1, kHypnoDebugParser, "J0 %d", $2);
 	}
@@ -356,6 +373,10 @@ bline: FNTOK FILENAME {
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H");
 	}
+	| ITOK H12TOK  { // Workaround for NAME == H1/H2
+		shoot->name = $2;
+		debugC(1, kHypnoDebugParser, "I %s", $2);
+	}
 	| ITOK ITOK  { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I");
@@ -456,6 +477,7 @@ bline: FNTOK FILENAME {
 		shoot->attackFrames.push_back($2);
 		debugC(1, kHypnoDebugParser, "H %d", $2); }
 	| VTOK NUM  { debugC(1, kHypnoDebugParser, "V %d", $2); }
+	| VTOK { debugC(1, kHypnoDebugParser, "V"); }
 	| WTOK NUM  {
 		shoot->attackWeight = $2;
 		debugC(1, kHypnoDebugParser, "W %d", $2); }
@@ -474,10 +496,14 @@ bline: FNTOK FILENAME {
 	| MTOK NUM { debugC(1, kHypnoDebugParser, "M %d", $2);
 		shoot->missedAnimation = $2;
 	}
+	| KTOK { debugC(1, kHypnoDebugParser, "K"); }
 	| KTOK NUM { debugC(1, kHypnoDebugParser, "K %d", $2);
 		FrameInfo fi($2, 1);
 		shoot->explosionFrames.push_back(fi);
 	}
+	| KTOK NUM NUM NUM {
+		debugC(1, kHypnoDebugParser, "K %d %d %d", $2, $3, $4);
+	}
 	| KTOK NUM NUM { debugC(1, kHypnoDebugParser, "K %d %d", $2, $3);
 		FrameInfo fi($2, 1);
 		shoot->explosionFrames.push_back(fi);
@@ -491,7 +517,14 @@ bline: FNTOK FILENAME {
 			shoot->hitSound = $2;
 
 		debugC(1, kHypnoDebugParser, "SN %s", $2); }
+	| SNTOK {
+		debugC(1, kHypnoDebugParser, "SN");
+	}
+
 	| GTOK { debugC(1, kHypnoDebugParser, "G"); }
+	| TTOK NUM NUM NUM {
+		debugC(1, kHypnoDebugParser, "T %d %d %d", $2, $3, $4);
+	}
 	| TTOK NUM {
 		debugC(1, kHypnoDebugParser, "T %d", $2);
 	}
@@ -504,6 +537,8 @@ bline: FNTOK FILENAME {
 	| NTOK {
 		shoot->noEnemySound = true;
 		debugC(1, kHypnoDebugParser, "N"); }
+	| NRTOK {
+		debugC(1, kHypnoDebugParser, "NR"); }
 	| ZTOK {
 		g_parsedArc->shoots.push_back(*shoot);
 		//delete shoot;
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index 21d71e305a0..4b495e2621b 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 57
-#define YY_END_OF_BUFFER 58
+#define YY_NUM_RULES 60
+#define YY_END_OF_BUFFER 61
 /* 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[94] =
+static const flex_int16_t yy_accept[97] =
     {   0,
-        0,    0,   58,   56,   55,   53,   53,   56,   48,   48,
-       48,   48,   56,   13,   49,    2,    3,   49,   39,   29,
-        8,   24,   27,   28,   17,   20,   18,   15,    9,   30,
-       21,   49,   35,   31,   14,   33,   34,   49,   32,   49,
-       55,   48,   51,   48,   48,   48,   48,    0,   49,   41,
-       49,   49,   10,   11,   12,   50,   42,   42,   38,    7,
-        4,    5,    6,   25,   26,   43,   19,   49,   16,   44,
-       22,   23,   40,   37,   36,   45,   45,   49,   49,   49,
-       47,   47,   46,   46,   48,   54,   49,    0,    1,    0,
-        0,   52,    0
+        0,    0,   61,   59,   58,   56,   56,   59,   51,   51,
+       51,   51,   59,   13,   52,    2,    3,   52,   41,   30,
+        8,   25,   28,   29,   17,   21,   18,   15,    9,   31,
+       22,   52,   36,   32,   14,   34,   35,   52,   33,   52,
+       58,   51,   54,   51,   51,   51,   51,    0,   53,   52,
+       44,   52,   52,   10,   11,   12,   45,   45,   40,    7,
+        4,    5,    6,   26,   27,   46,   20,   52,   19,   16,
+       47,   23,   24,   42,   43,   39,   37,   38,   48,   48,
+       52,   52,   52,   50,   50,   49,   49,   51,   57,   52,
+        0,    1,    0,    0,   55,    0
 
     } ;
 
@@ -671,8 +671,8 @@ static const YY_CHAR yy_ec[256] =
         1,   41,    1,    1,   42,    1,   43,   44,   44,   44,
 
        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,
+       44,   46,   44,   44,   47,   44,   44,   44,   44,   44,
+       44,   44,    1,   48,    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,
@@ -689,207 +689,142 @@ static const YY_CHAR yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static const YY_CHAR yy_meta[48] =
+static const YY_CHAR yy_meta[49] =
     {   0,
         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
+        3,    4,    4,    4,    4,    4,    4,    1
     } ;
 
-static const flex_int16_t yy_base[100] =
+static const flex_int16_t yy_base[103] =
     {   0,
-        0,    0,  105,  629,  102,  629,  629,   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,  629,  495,  501,  505,
-      515,  518,  528,  532,  538,  549,  551,  364,  373,  570,
-        0,  629,    0,  629,  151,   94,  577,   79,  579,   80,
-       79,  629,  629,  612,  617,  619,  621,   75,  623
-
+        0,    0,  177,  321,  174,  321,  321,   40,   45,   50,
+       55,   60,    0,   67,  102,  137,    0,    0,   75,    0,
+       71,  165,  165,   89,    0,    0,   99,   82,  164,    0,
+       85,  170,   80,    0,    0,    0,    0,  181,    0,  124,
+      128,  129,    0,  142,  220,  260,  147,  125,    0,  153,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  321,   97,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      159,  187,  193,    0,  321,    0,  321,  201,  120,   97,
+       96,    0,   96,   87,  321,  321,  306,  310,  312,  314,
+
+       85,  316
     } ;
 
-static const flex_int16_t yy_def[100] =
+static const flex_int16_t yy_def[103] =
     {   0,
-       93,    1,   93,   93,   93,   93,   93,   93,   94,   94,
-       94,   94,   95,   96,   96,   96,   96,   96,   96,   96,
-       96,   21,   21,   96,   21,   21,   21,   21,   21,   21,
-       21,   96,   21,   21,   21,   21,   21,   97,   21,   98,
-       93,   93,   94,   94,   94,   45,   45,   95,   99,   21,
-       21,   21,   21,   21,   21,   99,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   21,   93,   21,   21,   21,
-       21,   21,   21,   21,   21,   21,   21,   93,   98,   98,
-       94,   93,   94,   93,   45,   95,   21,   93,   21,   93,
-       93,   93,    0,   93,   93,   93,   93,   93,   93
-
+       96,    1,   96,   96,   96,   96,   96,   96,   97,   97,
+       97,   97,   98,   99,   99,   99,   16,   16,   16,   16,
+       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
+       16,   16,   16,   16,   16,   16,   16,  100,   16,  101,
+       96,   96,   97,   97,   97,   97,   97,   98,  102,  102,
+       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
+       16,   16,   16,   16,   16,   16,   96,   16,   16,   16,
+       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
+       96,  101,  101,   97,   96,   97,   96,   97,   98,   16,
+       96,   16,   96,   96,   96,    0,   96,   96,   96,   96,
+
+       96,   96
     } ;
 
-static const flex_int16_t yy_nxt[677] =
+static const flex_int16_t yy_nxt[370] =
     {   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,
-        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,   80,   83,
-       53,   78,   79,   79,   79,   79,   79,   92,   91,   90,
-       54,   49,   51,   51,   51,   51,   51,   86,   86,   83,
-
-       55,   84,   41,   41,   93,   56,   49,   57,   57,   57,
-       57,   57,   93,   58,   58,   58,   58,   58,   58,   42,
-       42,   42,   42,   42,   56,   49,   51,   51,   51,   51,
-       51,   49,   51,   51,   51,   51,   51,   93,   85,   56,
-       49,   59,   59,   59,   59,   59,   49,   51,   51,   51,
-       51,   51,   64,   51,   43,   93,   88,   93,   56,   93,
-       93,   52,   93,   93,   56,   93,   93,   93,   52,   93,
-       93,   93,   93,   56,   43,   43,   93,   52,   93,   56,
-       49,   51,   60,   60,   51,   51,   65,   51,   51,   93,
-       93,   61,   93,   93,   93,   43,   52,   93,   62,   93,
-
-       93,   93,   93,   52,   93,   93,   93,   63,   93,   93,
-       93,   93,   52,   56,   49,   66,   66,   66,   66,   66,
-       51,   51,   93,   51,   51,   93,   93,   93,   67,   52,
-       93,   93,   52,   51,   51,   93,   52,   93,   93,   52,
-       93,   93,   52,   93,   93,   52,   93,   56,   52,   52,
-       93,   93,   68,   69,   69,   51,   51,   51,   52,   70,
-       51,   51,   93,   52,   93,   52,   93,   93,   93,   52,
-       52,   93,   52,   71,   72,   51,   52,   93,   93,   52,
-       93,   52,   93,   52,   93,   52,   93,   93,   93,   93,
-       52,   49,   73,   73,   73,   73,   73,   51,   51,   52,
-
-       51,   51,   51,   51,   93,   93,   52,   93,   93,   52,
-       93,   52,   93,   52,   93,   93,   52,   93,   52,   51,
-       51,   93,   52,   93,   56,   52,   93,   52,   52,   93,
-       74,   51,   51,   75,   93,   52,   93,   93,   93,   93,
-       52,   93,   93,   93,   52,   93,   93,   52,   44,   44,
-       44,   44,   44,   93,   51,   51,   52,   49,   76,   76,
-       76,   76,   76,   52,   49,   49,   49,   49,   49,   49,
-       52,   78,   78,   78,   78,   78,   78,   93,   93,   52,
-       78,   79,   79,   79,   79,   79,   93,   93,   93,   93,
-       56,   52,   52,   52,   52,   52,   44,   44,   44,   44,
-
-       44,   51,   51,   93,   51,   51,   51,   51,   93,   93,
-       52,   93,   81,   52,   93,   52,   93,   52,   93,   93,
-       52,   93,   52,   93,   51,   51,   52,   51,   51,   52,
-       93,   52,   81,   52,   82,   93,   52,   51,   51,   93,
-       52,   51,   51,   52,   93,   93,   52,   51,   51,   52,
-       52,   93,   52,   52,   93,   93,   52,   52,   51,   51,
-       51,   51,   52,   52,   51,   51,   52,   52,   93,   52,
-       51,   51,   52,   52,   52,   93,   52,   93,   93,   52,
-       52,   51,   51,   52,   93,   52,   52,   51,   51,   52,
-       52,   51,   51,   51,   51,   52,   52,   52,   93,   93,
-
-       52,   93,   52,   52,   51,   51,   52,   52,   93,   52,
-       51,   51,   52,   52,   51,   51,   52,   93,   52,   52,
-       52,   93,   87,   52,   51,   51,   52,   51,   51,   52,
-       52,   93,   93,   52,   93,   52,   52,   51,   51,   52,
-       52,   51,   51,   52,   93,   93,   52,   51,   51,   52,
-       52,   93,   52,   52,   93,   93,   52,   52,   51,   51,
-       51,   51,   52,   52,   93,   93,   52,   52,   93,   52,
-       93,   93,   52,   93,   52,   93,   52,   78,   79,   79,
-       79,   79,   79,   52,   93,   52,   51,   51,   51,   51,
-       93,   93,   93,   93,   93,   89,   93,   52,   93,   93,
-
-       93,   93,   52,   93,   52,   93,   93,   93,   93,   93,
-       93,   52,   93,   52,   43,   43,   43,   48,   93,   48,
-       48,   48,   52,   52,   77,   77,   56,   56,    3,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   93,   93,   93
+        4,   40,   18,   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,   52,   52,   52,   52,
+       60,   60,   54,   59,   59,   59,   59,   59,   83,   61,
+       70,   70,   55,   72,   73,   95,   62,   66,   66,   66,
+
+       66,   66,   56,   67,   94,   63,   93,   49,   49,   50,
+       57,   57,   57,   57,   57,   92,   58,   58,   58,   58,
+       58,   58,   76,   89,   90,   77,   78,   68,   89,   41,
+       69,   81,   82,   82,   82,   82,   82,   42,   42,   42,
+       42,   42,   49,   49,   50,   52,   52,   52,   52,   52,
+       44,   44,   44,   44,   44,   88,   44,   44,   44,   44,
+       50,   50,   50,   50,   50,   50,   81,   81,   81,   81,
+       81,   81,   71,   65,   64,   41,   96,   49,   74,   74,
+       74,   74,   74,   96,   75,   75,   75,   49,   50,   79,
+       79,   79,   79,   79,   81,   82,   82,   82,   82,   82,
+
+       81,   82,   82,   82,   82,   82,   91,   96,   96,   44,
+       44,   44,   44,   44,   96,   96,   96,   96,   96,   96,
+       96,   49,   53,   53,   53,   53,   53,   53,   44,   44,
+       44,   44,   44,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   84,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   84,   96,   96,   85,   44,   44,
+       44,   44,   44,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   86,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+
+       96,   96,   96,   96,   86,   96,   96,   87,   43,   43,
+       48,   96,   48,   48,   53,   53,   80,   80,   49,   49,
+        3,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96
     } ;
 
-static const flex_int16_t yy_chk[677] =
+static const flex_int16_t yy_chk[370] =
     {   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,    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,   98,   46,
-       14,   40,   40,   40,   40,   40,   40,   91,   90,   88,
-       14,   16,   16,   16,   16,   16,   16,   86,   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,   85,    0,   17,    0,
-        0,   22,    0,    0,   18,    0,    0,    0,   22,    0,
-        0,    0,    0,   19,   47,   85,   47,   22,    0,   20,
-       21,   21,   21,   21,   21,   21,   23,   23,   23,    0,
-        0,   21,    0,    0,    0,   85,   23,   85,   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,   78,   78,   78,   78,   78,   78,    0,    0,   39,
-       79,   79,   79,   79,   79,   79,    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,
-       77,   77,   73,   75,    0,    0,   74,   76,    0,   77,
-        0,    0,   75,    0,   76,    0,   77,   80,   80,   80,
-       80,   80,   80,   76,    0,   77,   87,   87,   89,   89,
-        0,    0,    0,    0,    0,   87,    0,   89,    0,    0,
-
-        0,    0,   87,    0,   89,    0,    0,    0,    0,    0,
-        0,   87,    0,   89,   94,   94,   94,   95,    0,   95,
-       95,   95,   96,   96,   97,   97,   99,   99,   93,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   93,   93,   93
+        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,   14,   14,   14,   14,   14,
+       21,   21,   14,   19,   19,   19,   19,   19,  101,   21,
+       28,   28,   14,   31,   31,   94,   21,   24,   24,   24,
+
+       24,   24,   14,   27,   93,   21,   91,   14,   15,   15,
+       15,   15,   15,   15,   15,   90,   15,   15,   15,   15,
+       15,   15,   33,   89,   68,   33,   33,   27,   48,   41,
+       27,   40,   40,   40,   40,   40,   40,   42,   42,   42,
+       42,   42,   15,   16,   16,   16,   16,   16,   16,   16,
+       44,   44,   44,   44,   44,   47,   47,   47,   47,   47,
+       50,   50,   50,   50,   50,   50,   81,   81,   81,   81,
+       81,   81,   29,   23,   22,    5,    3,   16,   32,   32,
+       32,   32,   32,    0,   32,   32,   32,   38,   38,   38,
+       38,   38,   38,   38,   82,   82,   82,   82,   82,   82,
+
+       83,   83,   83,   83,   83,   83,   88,    0,    0,   88,
+       88,   88,   88,   88,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,   38,   38,   38,   38,   38,   45,   45,
+       45,   45,   45,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   45,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   45,    0,    0,   45,   46,   46,
+       46,   46,   46,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   46,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,   46,    0,    0,   46,   97,   97,
+       98,    0,   98,   98,   99,   99,  100,  100,  102,  102,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[58] =
+static const flex_int32_t yy_rule_can_match_eol[61] =
     {   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, 0, 0, 1, 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,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -936,8 +871,8 @@ char *yytext;
 #include "hypno/grammar.h"
 #include "hypno/tokens_arc.h"
 
-#line 939 "engines/hypno/lexer_arc.cpp"
-#line 940 "engines/hypno/lexer_arc.cpp"
+#line 874 "engines/hypno/lexer_arc.cpp"
+#line 875 "engines/hypno/lexer_arc.cpp"
 
 #define INITIAL 0
 
@@ -1154,7 +1089,7 @@ YY_DECL
 	{
 #line 42 "engines/hypno/lexer_arc.l"
 
-#line 1157 "engines/hypno/lexer_arc.cpp"
+#line 1092 "engines/hypno/lexer_arc.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1181,13 +1116,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 >= 94 )
+				if ( yy_current_state >= 97 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 93 );
+		while ( yy_current_state != 96 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1250,7 +1185,7 @@ return HUTOK;
 case 7:
 YY_RULE_SETUP
 #line 49 "engines/hypno/lexer_arc.l"
-return H12TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return H12TOK;
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
@@ -1310,200 +1245,215 @@ return NTOK;
 case 19:
 YY_RULE_SETUP
 #line 61 "engines/hypno/lexer_arc.l"
-return NSTOK;
+return NRTOK;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 62 "engines/hypno/lexer_arc.l"
-return MTOK;
+return NSTOK;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 63 "engines/hypno/lexer_arc.l"
-return RTOK;
+return MTOK;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 64 "engines/hypno/lexer_arc.l"
-return R0TOK;
+return RTOK;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 65 "engines/hypno/lexer_arc.l"
-return R1TOK;
+return R0TOK;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 66 "engines/hypno/lexer_arc.l"
-return ITOK;
+return R1TOK;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 67 "engines/hypno/lexer_arc.l"
-return I1TOK;
+return ITOK;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 68 "engines/hypno/lexer_arc.l"
-return J0TOK;
+return I1TOK;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 69 "engines/hypno/lexer_arc.l"
-return JTOK;
+return J0TOK;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 70 "engines/hypno/lexer_arc.l"
-return KTOK;
+return JTOK;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 71 "engines/hypno/lexer_arc.l"
-return GTOK;
+return KTOK;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 72 "engines/hypno/lexer_arc.l"
-return QTOK;
+return GTOK;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 73 "engines/hypno/lexer_arc.l"
-return UTOK;
+return QTOK;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 74 "engines/hypno/lexer_arc.l"
-return ZTOK;
+return UTOK;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 75 "engines/hypno/lexer_arc.l"
-return WTOK;
+return ZTOK;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 76 "engines/hypno/lexer_arc.l"
-return XTOK;
+return WTOK;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 77 "engines/hypno/lexer_arc.l"
-return TTOK;
+return XTOK;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 78 "engines/hypno/lexer_arc.l"
-return TPTOK;
+return TTOK;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 79 "engines/hypno/lexer_arc.l"
-return TATOK;
+return TPTOK;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 80 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
+return TSTOK;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 81 "engines/hypno/lexer_arc.l"
-return FTOK;
+return TATOK;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 82 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 83 "engines/hypno/lexer_arc.l"
-return A0TOK;
+return FTOK;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 84 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 85 "engines/hypno/lexer_arc.l"
-return KNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 86 "engines/hypno/lexer_arc.l"
-return P0TOK;
+return A0TOK;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 87 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 88 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+return KNTOK;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 89 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+return P0TOK;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 90 "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 YXTOK;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 91 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 92 "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 ENCTOK;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 93 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 94 "engines/hypno/lexer_arc.l"
-return RESTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
 	YY_BREAK
 case 53:
-/* rule 53 can match eol */
 YY_RULE_SETUP
 #line 95 "engines/hypno/lexer_arc.l"
-return RETTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 96 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 97 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+return RESTOK;
 	YY_BREAK
 case 56:
+/* rule 56 can match eol */
 YY_RULE_SETUP
 #line 98 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+return RETTOK;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 99 "engines/hypno/lexer_arc.l"
+/* ignore comment */
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 100 "engines/hypno/lexer_arc.l"
+/* ignore whitespace */;
+	YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 101 "engines/hypno/lexer_arc.l"
+HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+	YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 102 "engines/hypno/lexer_arc.l"
 ECHO;
 	YY_BREAK
-#line 1506 "engines/hypno/lexer_arc.cpp"
+#line 1456 "engines/hypno/lexer_arc.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1801,7 +1751,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 >= 94 )
+			if ( yy_current_state >= 97 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1829,11 +1779,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 >= 94 )
+		if ( yy_current_state >= 97 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 93);
+	yy_is_jam = (yy_current_state == 96);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2480,7 +2430,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 99 "engines/hypno/lexer_arc.l"
+#line 102 "engines/hypno/lexer_arc.l"
 
 
 namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index 6843600c2de..06b42dfec20 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -46,7 +46,7 @@ D							return DTOK;
 HE							return HETOK;
 HL							return HLTOK;
 HU							return HUTOK;
-H[1-2]						return H12TOK;
+H[1-2]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return H12TOK;
 H							return HTOK;
 P							return PTOK;
 AB							return ABTOK;
@@ -58,6 +58,7 @@ O							return OTOK;
 O[0-1]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
 L							return LTOK;
 N							return NTOK;
+NR							return NRTOK;
 N\*							return NSTOK;
 M							return MTOK;
 R							return RTOK;
@@ -76,10 +77,12 @@ W							return WTOK;
 X							return XTOK;
 T							return TTOK;
 Tp							return TPTOK;
+Ts							return TSTOK;
 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;
+S[A-C]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 A0							return A0TOK;
 B[0-9A-F]					HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
 K[0-9]						return KNTOK;
@@ -89,7 +92,7 @@ Y[A-Z0-9]					HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
 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]*[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;
+[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;
 [\n|\r\n]					return RETTOK;
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index 4653e887c56..ccae1f669ce 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -71,18 +71,18 @@ extern int HYPNO_ARC_debug;
     FNTOK = 264,                   /* FNTOK  */
     ENCTOK = 265,                  /* ENCTOK  */
     ONTOK = 266,                   /* ONTOK  */
-    NUM = 267,                     /* NUM  */
-    BYTE = 268,                    /* BYTE  */
-    COMMENT = 269,                 /* COMMENT  */
-    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  */
+    H12TOK = 267,                  /* H12TOK  */
+    NUM = 268,                     /* NUM  */
+    BYTE = 269,                    /* BYTE  */
+    COMMENT = 270,                 /* COMMENT  */
+    ALTOK = 271,                   /* ALTOK  */
+    AVTOK = 272,                   /* AVTOK  */
+    ABTOK = 273,                   /* ABTOK  */
+    CTOK = 274,                    /* CTOK  */
+    DTOK = 275,                    /* DTOK  */
+    HTOK = 276,                    /* HTOK  */
+    HETOK = 277,                   /* HETOK  */
+    HLTOK = 278,                   /* HLTOK  */
     HUTOK = 279,                   /* HUTOK  */
     RETTOK = 280,                  /* RETTOK  */
     QTOK = 281,                    /* QTOK  */
@@ -92,31 +92,33 @@ extern int HYPNO_ARC_debug;
     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  */
-    R0TOK = 296,                   /* R0TOK  */
-    R1TOK = 297,                   /* R1TOK  */
-    ITOK = 298,                    /* ITOK  */
-    I1TOK = 299,                   /* I1TOK  */
-    GTOK = 300,                    /* GTOK  */
-    JTOK = 301,                    /* JTOK  */
-    J0TOK = 302,                   /* J0TOK  */
-    KTOK = 303,                    /* KTOK  */
-    UTOK = 304,                    /* UTOK  */
-    ZTOK = 305,                    /* ZTOK  */
-    NONETOK = 306,                 /* NONETOK  */
-    A0TOK = 307,                   /* A0TOK  */
-    P0TOK = 308,                   /* P0TOK  */
-    WTOK = 309,                    /* WTOK  */
-    XTOK = 310,                    /* XTOK  */
-    CB3TOK = 311,                  /* CB3TOK  */
-    C02TOK = 312                   /* C02TOK  */
+    TSTOK = 288,                   /* TSTOK  */
+    ATOK = 289,                    /* ATOK  */
+    VTOK = 290,                    /* VTOK  */
+    OTOK = 291,                    /* OTOK  */
+    LTOK = 292,                    /* LTOK  */
+    MTOK = 293,                    /* MTOK  */
+    NTOK = 294,                    /* NTOK  */
+    NRTOK = 295,                   /* NRTOK  */
+    NSTOK = 296,                   /* NSTOK  */
+    RTOK = 297,                    /* RTOK  */
+    R0TOK = 298,                   /* R0TOK  */
+    R1TOK = 299,                   /* R1TOK  */
+    ITOK = 300,                    /* ITOK  */
+    I1TOK = 301,                   /* I1TOK  */
+    GTOK = 302,                    /* GTOK  */
+    JTOK = 303,                    /* JTOK  */
+    J0TOK = 304,                   /* J0TOK  */
+    KTOK = 305,                    /* KTOK  */
+    UTOK = 306,                    /* UTOK  */
+    ZTOK = 307,                    /* ZTOK  */
+    NONETOK = 308,                 /* NONETOK  */
+    A0TOK = 309,                   /* A0TOK  */
+    P0TOK = 310,                   /* P0TOK  */
+    WTOK = 311,                    /* WTOK  */
+    XTOK = 312,                    /* XTOK  */
+    CB3TOK = 313,                  /* CB3TOK  */
+    C02TOK = 314                   /* C02TOK  */
   };
   typedef enum HYPNO_ARC_tokentype HYPNO_ARC_token_kind_t;
 #endif
@@ -125,12 +127,12 @@ extern int HYPNO_ARC_debug;
 #if ! defined HYPNO_ARC_STYPE && ! defined HYPNO_ARC_STYPE_IS_DECLARED
 union HYPNO_ARC_STYPE
 {
-#line 53 "engines/hypno/grammar_arc.y"
+#line 79 "engines/hypno/grammar_arc.y"
 
 	char *s; /* string value */
 	int i;	 /* integer value */
 
-#line 134 "engines/hypno/tokens_arc.h"
+#line 136 "engines/hypno/tokens_arc.h"
 
 };
 typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;




More information about the Scummvm-git-logs mailing list