[Scummvm-git-logs] scummvm master -> 7d788fefa7f8e72c93d5b1d368b24fd06b453c0c

neuromancer noreply at scummvm.org
Thu Feb 24 17:12:28 UTC 2022


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

Summary:
9da95b6e0d HYPNO: load H1 and H2 segments in wet
13f53c83a1 HYPNO: load last two levels in wet (but not playing them correctly)
a226d1e7be HYPNO: finally load all the levels in wet
5e6c3af2b3 HYPNO: refactor runBeforeArcade code to include image flipping, if necessary
ebe066bcb5 HYPNO: fixed c400.mi_ id from the original in wet
dddf26620b HYPNO: fixed ids from c401.mi_ and c402.mi_ in wet
26463305d9 HYPNO: allow c40 levels to load player images in wet
7d788fefa7 HYPNO: avoid crashing on level c30 in wet


Commit: 9da95b6e0d608fa75882cbfdbf4e9d6ff90b1038
    https://github.com/scummvm/scummvm/commit/9da95b6e0d608fa75882cbfdbf4e9d6ff90b1038
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-02-24T18:12:29+01:00

Commit Message:
HYPNO: load H1 and H2 segments in wet

Changed paths:
    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
    engines/hypno/wet/wet.cpp


diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 66d0731f864..0681f1590e9 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -150,40 +150,41 @@ enum yysymbol_kind_t
   YYSYMBOL_HTOK = 17,                      /* HTOK  */
   YYSYMBOL_HETOK = 18,                     /* HETOK  */
   YYSYMBOL_HLTOK = 19,                     /* HLTOK  */
-  YYSYMBOL_HUTOK = 20,                     /* HUTOK  */
-  YYSYMBOL_RETTOK = 21,                    /* RETTOK  */
-  YYSYMBOL_QTOK = 22,                      /* QTOK  */
-  YYSYMBOL_RESTOK = 23,                    /* RESTOK  */
-  YYSYMBOL_PTOK = 24,                      /* PTOK  */
-  YYSYMBOL_FTOK = 25,                      /* FTOK  */
-  YYSYMBOL_TTOK = 26,                      /* TTOK  */
-  YYSYMBOL_TPTOK = 27,                     /* TPTOK  */
-  YYSYMBOL_ATOK = 28,                      /* ATOK  */
-  YYSYMBOL_VTOK = 29,                      /* VTOK  */
-  YYSYMBOL_OTOK = 30,                      /* OTOK  */
-  YYSYMBOL_NTOK = 31,                      /* NTOK  */
-  YYSYMBOL_NSTOK = 32,                     /* NSTOK  */
-  YYSYMBOL_RTOK = 33,                      /* RTOK  */
-  YYSYMBOL_R01TOK = 34,                    /* R01TOK  */
-  YYSYMBOL_ITOK = 35,                      /* ITOK  */
-  YYSYMBOL_I1TOK = 36,                     /* I1TOK  */
-  YYSYMBOL_JTOK = 37,                      /* JTOK  */
-  YYSYMBOL_ZTOK = 38,                      /* ZTOK  */
-  YYSYMBOL_NONETOK = 39,                   /* NONETOK  */
-  YYSYMBOL_A0TOK = 40,                     /* A0TOK  */
-  YYSYMBOL_P0TOK = 41,                     /* P0TOK  */
-  YYSYMBOL_WTOK = 42,                      /* WTOK  */
-  YYSYMBOL_XTOK = 43,                      /* XTOK  */
-  YYSYMBOL_CB3TOK = 44,                    /* CB3TOK  */
-  YYSYMBOL_C02TOK = 45,                    /* C02TOK  */
-  YYSYMBOL_YYACCEPT = 46,                  /* $accept  */
-  YYSYMBOL_start = 47,                     /* start  */
-  YYSYMBOL_48_1 = 48,                      /* $@1  */
-  YYSYMBOL_header = 49,                    /* header  */
-  YYSYMBOL_hline = 50,                     /* hline  */
-  YYSYMBOL_enc = 51,                       /* enc  */
-  YYSYMBOL_body = 52,                      /* body  */
-  YYSYMBOL_bline = 53                      /* bline  */
+  YYSYMBOL_H12TOK = 20,                    /* H12TOK  */
+  YYSYMBOL_HUTOK = 21,                     /* HUTOK  */
+  YYSYMBOL_RETTOK = 22,                    /* RETTOK  */
+  YYSYMBOL_QTOK = 23,                      /* QTOK  */
+  YYSYMBOL_RESTOK = 24,                    /* RESTOK  */
+  YYSYMBOL_PTOK = 25,                      /* PTOK  */
+  YYSYMBOL_FTOK = 26,                      /* FTOK  */
+  YYSYMBOL_TTOK = 27,                      /* TTOK  */
+  YYSYMBOL_TPTOK = 28,                     /* TPTOK  */
+  YYSYMBOL_ATOK = 29,                      /* ATOK  */
+  YYSYMBOL_VTOK = 30,                      /* VTOK  */
+  YYSYMBOL_OTOK = 31,                      /* OTOK  */
+  YYSYMBOL_NTOK = 32,                      /* NTOK  */
+  YYSYMBOL_NSTOK = 33,                     /* NSTOK  */
+  YYSYMBOL_RTOK = 34,                      /* RTOK  */
+  YYSYMBOL_R01TOK = 35,                    /* R01TOK  */
+  YYSYMBOL_ITOK = 36,                      /* ITOK  */
+  YYSYMBOL_I1TOK = 37,                     /* I1TOK  */
+  YYSYMBOL_JTOK = 38,                      /* JTOK  */
+  YYSYMBOL_ZTOK = 39,                      /* ZTOK  */
+  YYSYMBOL_NONETOK = 40,                   /* NONETOK  */
+  YYSYMBOL_A0TOK = 41,                     /* A0TOK  */
+  YYSYMBOL_P0TOK = 42,                     /* P0TOK  */
+  YYSYMBOL_WTOK = 43,                      /* WTOK  */
+  YYSYMBOL_XTOK = 44,                      /* XTOK  */
+  YYSYMBOL_CB3TOK = 45,                    /* CB3TOK  */
+  YYSYMBOL_C02TOK = 46,                    /* C02TOK  */
+  YYSYMBOL_YYACCEPT = 47,                  /* $accept  */
+  YYSYMBOL_start = 48,                     /* start  */
+  YYSYMBOL_49_1 = 49,                      /* $@1  */
+  YYSYMBOL_header = 50,                    /* header  */
+  YYSYMBOL_hline = 51,                     /* hline  */
+  YYSYMBOL_enc = 52,                       /* enc  */
+  YYSYMBOL_body = 53,                      /* body  */
+  YYSYMBOL_bline = 54                      /* bline  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -511,19 +512,19 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  6
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   149
+#define YYLAST   162
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  46
+#define YYNTOKENS  47
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  8
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  76
+#define YYNRULES  77
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  158
+#define YYNSTATES  162
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   300
+#define YYMAXUTOK   301
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -567,7 +568,7 @@ static const yytype_int8 yytranslate[] =
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45
+      45,    46
 };
 
 #if HYPNO_ARC_DEBUG
@@ -577,11 +578,11 @@ static const yytype_int16 yyrline[] =
        0,    78,    78,    78,    79,    82,    83,    84,    87,    91,
       95,    99,   100,   101,   102,   103,   108,   118,   127,   133,
      138,   139,   143,   147,   150,   154,   157,   158,   176,   198,
-     204,   209,   214,   220,   225,   230,   235,   242,   243,   246,
-     247,   248,   251,   259,   264,   269,   273,   277,   281,   285,
-     289,   293,   297,   301,   305,   309,   313,   317,   321,   325,
-     329,   333,   336,   340,   345,   349,   354,   359,   363,   369,
-     370,   373,   374,   377,   381,   388,   389
+     204,   209,   214,   220,   225,   230,   235,   240,   247,   248,
+     251,   252,   253,   256,   264,   269,   274,   278,   282,   286,
+     290,   294,   298,   302,   306,   310,   314,   318,   322,   326,
+     330,   334,   338,   341,   345,   350,   354,   359,   364,   368,
+     374,   375,   378,   379,   382,   386,   393,   394
 };
 #endif
 
@@ -599,12 +600,12 @@ static const char *const yytname[] =
 {
   "\"end of file\"", "error", "\"invalid token\"", "NAME", "FILENAME",
   "BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "ENCTOK", "ONTOK", "NUM",
-  "BYTE", "COMMENT", "CTOK", "DTOK", "HTOK", "HETOK", "HLTOK", "HUTOK",
-  "RETTOK", "QTOK", "RESTOK", "PTOK", "FTOK", "TTOK", "TPTOK", "ATOK",
-  "VTOK", "OTOK", "NTOK", "NSTOK", "RTOK", "R01TOK", "ITOK", "I1TOK",
-  "JTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK",
-  "C02TOK", "$accept", "start", "$@1", "header", "hline", "enc", "body",
-  "bline", YY_NULLPTR
+  "BYTE", "COMMENT", "CTOK", "DTOK", "HTOK", "HETOK", "HLTOK", "H12TOK",
+  "HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK", "FTOK", "TTOK", "TPTOK",
+  "ATOK", "VTOK", "OTOK", "NTOK", "NSTOK", "RTOK", "R01TOK", "ITOK",
+  "I1TOK", "JTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK",
+  "CB3TOK", "C02TOK", "$accept", "start", "$@1", "header", "hline", "enc",
+  "body", "bline", YY_NULLPTR
 };
 
 static const char *
@@ -614,7 +615,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-92)
+#define YYPACT_NINF (-95)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -628,22 +629,23 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-       6,   -92,     6,     7,    69,   -92,   -92,     5,     9,     3,
-      19,    31,    44,     4,    32,    33,    69,    37,    38,    42,
-      -1,    14,    43,    11,    47,    15,    40,    52,    59,    61,
-      10,    69,   -92,    60,    64,   -92,   -92,    66,    67,    70,
-      71,    80,    91,    94,    95,   -92,    96,    97,   -92,    98,
-      99,   100,   101,   102,   -92,   103,   -92,   -92,   -92,   -92,
-     -92,   104,   -92,   -92,   -92,   -92,   105,   106,   107,   108,
-     109,   110,   111,   112,   -92,   -92,   -92,   -92,    77,   -92,
-     -92,   -92,    -5,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
-     -92,   -92,   114,   123,   116,     1,   117,   118,   119,    -5,
-     128,   121,   122,   -92,   124,   125,    36,   126,   -92,   127,
-     129,   130,    73,    -5,   131,    60,   132,   -92,   -92,   -92,
-     -92,   -92,   -92,   -92,   -92,   133,   134,   135,   -92,   -92,
-     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
-     -92,   -92,   -92,   -92,   -92,   136,   137,   -92,   -92,   -92,
-     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92
+      -2,   -95,    -2,     8,    71,   -95,   -95,     9,    10,     3,
+       6,     7,    45,    11,    19,    22,    31,    71,    33,    34,
+      35,    -1,    46,    39,     4,    43,    52,    53,    55,    57,
+      61,    28,    71,   -95,    62,    66,   -95,   -95,    68,    69,
+      72,    73,    83,    94,    97,    98,    99,   -95,   100,   101,
+     -95,   102,   103,   104,   105,   106,   -95,   107,   -95,   -95,
+     -95,   -95,   -95,    27,   -95,   -95,   -95,   -95,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   -95,   -95,   -95,
+     -95,    79,   -95,   -95,   -95,    -5,   -95,   -95,   -95,   -95,
+     -95,   -95,   -95,   -95,   -95,   -95,   117,   126,   119,     1,
+     120,   121,   122,    -5,   131,   124,   125,   -95,   127,   128,
+      37,   129,   -95,   130,   132,   133,   118,    -5,   134,    62,
+     135,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   136,
+     137,   138,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,
+     -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   139,
+     140,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,
+     -95,   -95
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -652,33 +654,34 @@ static const yytype_int16 yypact[] =
 static const yytype_int8 yydefact[] =
 {
        0,     2,     0,     0,     7,     4,     1,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     7,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     7,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     7,    27,    38,    17,     8,    10,     0,     0,     0,
-       0,     0,     0,     0,     0,     6,     0,     0,     9,     0,
-       0,     0,     0,     0,    14,     0,    21,    22,    23,    24,
-      25,     0,     5,    37,    28,    16,     0,     0,     0,     0,
-       0,     0,     0,     0,    26,    11,    19,    20,     0,    12,
-      13,    15,    41,    32,    36,    35,    34,    33,    29,    30,
-      31,    18,     0,     0,     0,     0,     0,     0,     0,    41,
-       0,     0,     0,    75,     0,     0,     0,     0,    76,     0,
-       0,     0,     0,    41,     0,    38,     0,    42,    43,    69,
-      73,    70,    40,    44,    71,     0,     0,     0,    45,    46,
-      59,    48,    49,    51,    57,    56,    50,    60,    47,    55,
-      54,    58,    52,    53,    61,     0,     0,    72,     3,    39,
-      65,    74,    66,    68,    63,    64,    62,    67
+       0,     0,     7,    27,    39,    17,     8,    10,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     6,     0,     0,
+       9,     0,     0,     0,     0,     0,    14,     0,    21,    22,
+      23,    24,    25,     0,     5,    38,    28,    16,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    26,    11,    19,
+      20,     0,    12,    13,    15,    42,    32,    37,    35,    34,
+      33,    29,    30,    36,    31,    18,     0,     0,     0,     0,
+       0,     0,     0,    42,     0,     0,     0,    76,     0,     0,
+       0,     0,    77,     0,     0,     0,     0,    42,     0,    39,
+       0,    43,    44,    70,    74,    71,    41,    45,    72,     0,
+       0,     0,    46,    47,    60,    49,    50,    52,    58,    57,
+      51,    61,    48,    56,    55,    59,    53,    54,    62,     0,
+       0,    73,     3,    40,    66,    75,    67,    69,    64,    65,
+      63,    68
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -92,   138,   -92,   -10,   -92,    20,   -91,   -92
+     -95,   141,   -95,   -10,   -95,    36,   -94,   -95
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-       0,     3,     4,    30,    31,    64,   112,   113
+       0,     3,     4,    31,    32,    66,   116,   117
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -686,75 +689,80 @@ static const yytype_int8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      92,    93,    94,    49,    95,   117,    45,     6,   122,    32,
-      96,    97,    98,    33,     1,    34,    99,    42,    51,    56,
-     100,    62,   149,    53,   101,   102,   103,     2,   104,   105,
-     106,    35,   107,   108,    54,   109,   110,   111,    50,   128,
-     118,   129,   130,    36,    57,    43,    44,    37,    61,    46,
-      47,   131,   132,   133,    48,    52,    58,    38,   134,    55,
-     135,   136,   137,    59,   138,    60,   139,   140,    39,   141,
-      63,   142,    40,   143,     7,     8,    65,    41,    66,    67,
-       9,    91,    68,    69,    10,    11,    12,    13,    14,    15,
-      16,    17,    70,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    71,    28,    29,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,   148,    83,    84,    85,
-      86,    87,    88,    89,    90,    82,   114,   115,   116,   119,
-     120,   121,   123,   124,   125,   151,   126,   127,   144,   145,
-       5,   146,   147,   150,   152,   153,   154,   155,   156,   157
+      96,    97,    98,    51,    99,   121,     1,    47,     6,   126,
+     100,   101,   102,    33,    34,    35,    55,   103,    36,    37,
+       2,   104,    64,   153,    43,   105,   106,   107,    56,   108,
+     109,   110,    44,   111,   112,    45,   113,   114,   115,    52,
+     132,   122,   133,   134,    46,    48,    49,    50,    38,    85,
+      53,    54,   135,   136,   137,    57,    58,    59,    39,    60,
+     138,    61,   139,   140,   141,    62,   142,    63,   143,   144,
+      40,   145,    65,   146,    41,   147,     7,     8,    67,    42,
+      68,    69,     9,    95,    70,    71,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    72,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    73,    29,    30,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,   118,
+     119,   120,   123,   124,   125,   127,   128,   129,     0,   130,
+     131,   148,   149,     5,   150,   151,   154,   156,   157,   158,
+     159,   160,   161,     0,     0,   155,     0,     0,     0,     0,
+       0,     0,   152
 };
 
 static const yytype_int8 yycheck[] =
 {
-       5,     6,     7,     4,     9,     4,    16,     0,    99,     4,
-      15,    16,    17,     4,     8,    12,    21,    13,     4,     4,
-      25,    31,   113,    12,    29,    30,    31,    21,    33,    34,
-      35,    12,    37,    38,    23,    40,    41,    42,    39,     3,
-      39,     5,     6,    12,     4,    13,    13,     3,    38,    12,
-      12,    15,    16,    17,    12,    12,     4,    13,    22,    12,
-      24,    25,    26,     4,    28,     4,    30,    31,    24,    33,
-      10,    35,    28,    37,     5,     6,    12,    33,    12,    12,
-      11,     4,    12,    12,    15,    16,    17,    18,    19,    20,
-      21,    22,    12,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    12,    35,    36,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,    12,    43,    12,    12,    12,
-      12,    12,    12,    12,    12,    21,    12,     4,    12,    12,
-      12,    12,     4,    12,    12,   115,    12,    12,    12,    12,
-       2,    12,    12,    12,    12,    12,    12,    12,    12,    12
+       5,     6,     7,     4,     9,     4,     8,    17,     0,   103,
+      15,    16,    17,     4,     4,    12,    12,    22,    12,    12,
+      22,    26,    32,   117,    13,    30,    31,    32,    24,    34,
+      35,    36,    13,    38,    39,    13,    41,    42,    43,    40,
+       3,    40,     5,     6,    13,    12,    12,    12,     3,    22,
+       4,    12,    15,    16,    17,    12,     4,     4,    13,     4,
+      23,     4,    25,    26,    27,     4,    29,    39,    31,    32,
+      25,    34,    10,    36,    29,    38,     5,     6,    12,    34,
+      12,    12,    11,     4,    12,    12,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    12,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    12,    36,    37,    12,
+      12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
+      12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
+       4,    12,    12,    12,    12,     4,    12,    12,    -1,    12,
+      12,    12,    12,     2,    12,    12,    12,    12,    12,    12,
+      12,    12,    12,    -1,    -1,   119,    -1,    -1,    -1,    -1,
+      -1,    -1,    44
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
    state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
-       0,     8,    21,    47,    48,    47,     0,     5,     6,    11,
-      15,    16,    17,    18,    19,    20,    21,    22,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    35,    36,
-      49,    50,     4,     4,    12,    12,    12,     3,    13,    24,
-      28,    33,    13,    13,    13,    49,    12,    12,    12,     4,
-      39,     4,    12,    12,    23,    12,     4,     4,     4,     4,
-       4,    38,    49,    10,    51,    12,    12,    12,    12,    12,
+       0,     8,    22,    48,    49,    48,     0,     5,     6,    11,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    36,
+      37,    50,    51,     4,     4,    12,    12,    12,     3,    13,
+      25,    29,    34,    13,    13,    13,    13,    50,    12,    12,
+      12,     4,    40,     4,    12,    12,    24,    12,     4,     4,
+       4,     4,     4,    39,    50,    10,    52,    12,    12,    12,
       12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-      12,    12,    21,    12,    12,    12,    12,    12,    12,    12,
-      12,     4,     5,     6,     7,     9,    15,    16,    17,    21,
-      25,    29,    30,    31,    33,    34,    35,    37,    38,    40,
-      41,    42,    52,    53,    12,     4,    12,     4,    39,    12,
-      12,    12,    52,     4,    12,    12,    12,    12,     3,     5,
-       6,    15,    16,    17,    22,    24,    25,    26,    28,    30,
-      31,    33,    35,    37,    12,    12,    12,    12,    43,    52,
-      12,    51,    12,    12,    12,    12,    12,    12
+      12,    12,    12,    12,    12,    22,    12,    12,    12,    12,
+      12,    12,    12,    12,    12,     4,     5,     6,     7,     9,
+      15,    16,    17,    22,    26,    30,    31,    32,    34,    35,
+      36,    38,    39,    41,    42,    43,    53,    54,    12,     4,
+      12,     4,    40,    12,    12,    12,    53,     4,    12,    12,
+      12,    12,     3,     5,     6,    15,    16,    17,    23,    25,
+      26,    27,    29,    31,    32,    34,    36,    38,    12,    12,
+      12,    12,    44,    53,    12,    52,    12,    12,    12,    12,
+      12,    12
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_int8 yyr1[] =
 {
-       0,    46,    48,    47,    47,    49,    49,    49,    50,    50,
-      50,    50,    50,    50,    50,    50,    50,    50,    50,    50,
-      50,    50,    50,    50,    50,    50,    50,    50,    50,    50,
-      50,    50,    50,    50,    50,    50,    50,    51,    51,    52,
-      52,    52,    53,    53,    53,    53,    53,    53,    53,    53,
-      53,    53,    53,    53,    53,    53,    53,    53,    53,    53,
-      53,    53,    53,    53,    53,    53,    53,    53,    53,    53,
-      53,    53,    53,    53,    53,    53,    53
+       0,    47,    49,    48,    48,    50,    50,    50,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    52,    52,
+      53,    53,    53,    54,    54,    54,    54,    54,    54,    54,
+      54,    54,    54,    54,    54,    54,    54,    54,    54,    54,
+      54,    54,    54,    54,    54,    54,    54,    54,    54,    54,
+      54,    54,    54,    54,    54,    54,    54,    54
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -763,11 +771,11 @@ static const yytype_int8 yyr2[] =
        0,     2,     0,     7,     2,     2,     2,     0,     2,     2,
        2,     3,     3,     3,     2,     3,     3,     2,     4,     3,
        3,     2,     2,     2,     2,     2,     3,     2,     3,     4,
-       4,     4,     4,     4,     4,     4,     4,     1,     0,     2,
-       2,     0,     2,     2,     2,     2,     2,     2,     2,     2,
+       4,     4,     4,     4,     4,     4,     4,     4,     1,     0,
+       2,     2,     0,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     3,     3,     3,     3,     3,     3,     3,     2,
-       2,     2,     2,     2,     3,     1,     1
+       2,     2,     2,     3,     3,     3,     3,     3,     3,     3,
+       2,     2,     2,     2,     2,     3,     1,     1
 };
 
 
@@ -1233,7 +1241,7 @@ yyreduce:
   case 2: /* $@1: %empty  */
 #line 78 "engines/hypno/grammar_arc.y"
              { g_parsedArc->mode = (yyvsp[0].s); }
-#line 1237 "engines/hypno/grammar_arc.cpp"
+#line 1245 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 8: /* hline: CTOK NUM  */
@@ -1242,7 +1250,7 @@ yyreduce:
 		g_parsedArc->id = (yyvsp[0].i); 
 		HYPNO_ARC_default_sound_rate = 0;
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1246 "engines/hypno/grammar_arc.cpp"
+#line 1254 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 9: /* hline: FTOK NUM  */
@@ -1251,7 +1259,7 @@ yyreduce:
 		HYPNO_ARC_default_sound_rate = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i));
 	}
-#line 1255 "engines/hypno/grammar_arc.cpp"
+#line 1263 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 10: /* hline: DTOK NUM  */
@@ -1260,31 +1268,31 @@ yyreduce:
 		g_parsedArc->frameDelay = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 1264 "engines/hypno/grammar_arc.cpp"
+#line 1272 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 11: /* hline: PTOK NUM NUM  */
 #line 99 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1270 "engines/hypno/grammar_arc.cpp"
+#line 1278 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 12: /* hline: ATOK NUM NUM  */
 #line 100 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1276 "engines/hypno/grammar_arc.cpp"
+#line 1284 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 13: /* hline: VTOK NUM NUM  */
 #line 101 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1282 "engines/hypno/grammar_arc.cpp"
+#line 1290 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 14: /* hline: VTOK RESTOK  */
 #line 102 "engines/hypno/grammar_arc.y"
                       { debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1288 "engines/hypno/grammar_arc.cpp"
+#line 1296 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 15: /* hline: OTOK NUM NUM  */
@@ -1294,7 +1302,7 @@ yyreduce:
 		g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1298 "engines/hypno/grammar_arc.cpp"
+#line 1306 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 16: /* hline: ONTOK NUM NUM  */
@@ -1309,7 +1317,7 @@ yyreduce:
 		} else 
 			error("Invalid objective: '%s'", (yyvsp[-2].s));
 		debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1313 "engines/hypno/grammar_arc.cpp"
+#line 1321 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 17: /* hline: ONTOK NUM  */
@@ -1323,7 +1331,7 @@ yyreduce:
 			error("Invalid objective: '%s'", (yyvsp[-1].s));
 		debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
 	}
-#line 1327 "engines/hypno/grammar_arc.cpp"
+#line 1335 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 18: /* hline: TPTOK FILENAME NUM FILENAME  */
@@ -1334,7 +1342,7 @@ yyreduce:
 		g_parsedArc->transitionPalette = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s)); 
 	}
-#line 1338 "engines/hypno/grammar_arc.cpp"
+#line 1346 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 19: /* hline: TTOK FILENAME NUM  */
@@ -1344,13 +1352,13 @@ yyreduce:
 		g_parsedArc->transitionTime = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i)); 
 	}
-#line 1348 "engines/hypno/grammar_arc.cpp"
+#line 1356 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 20: /* hline: TTOK NONETOK NUM  */
 #line 138 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1354 "engines/hypno/grammar_arc.cpp"
+#line 1362 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 21: /* hline: NTOK FILENAME  */
@@ -1359,7 +1367,7 @@ yyreduce:
 		g_parsedArc->backgroundVideo = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s)); 
 	}
-#line 1363 "engines/hypno/grammar_arc.cpp"
+#line 1371 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 22: /* hline: NSTOK FILENAME  */
@@ -1368,7 +1376,7 @@ yyreduce:
 		g_parsedArc->backgroundVideo = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s)); 
 	}
-#line 1372 "engines/hypno/grammar_arc.cpp"
+#line 1380 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 23: /* hline: RTOK FILENAME  */
@@ -1376,7 +1384,7 @@ yyreduce:
                          {
 		g_parsedArc->backgroundPalette = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1380 "engines/hypno/grammar_arc.cpp"
+#line 1388 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 24: /* hline: ITOK FILENAME  */
@@ -1385,7 +1393,7 @@ yyreduce:
 		g_parsedArc->player = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1389 "engines/hypno/grammar_arc.cpp"
+#line 1397 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 25: /* hline: I1TOK FILENAME  */
@@ -1393,13 +1401,13 @@ yyreduce:
                          { 
 		debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s)); 
 	}
-#line 1397 "engines/hypno/grammar_arc.cpp"
+#line 1405 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 26: /* hline: QTOK NUM NUM  */
 #line 157 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1403 "engines/hypno/grammar_arc.cpp"
+#line 1411 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 27: /* hline: BNTOK FILENAME  */
@@ -1422,7 +1430,7 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s)); 
 	}
-#line 1426 "engines/hypno/grammar_arc.cpp"
+#line 1434 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 28: /* hline: SNTOK FILENAME enc  */
@@ -1449,7 +1457,7 @@ yyreduce:
 		}
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); 
 	}
-#line 1453 "engines/hypno/grammar_arc.cpp"
+#line 1461 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 29: /* hline: HETOK BYTE NUM NUM  */
@@ -1460,7 +1468,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HE %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1464 "engines/hypno/grammar_arc.cpp"
+#line 1472 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 30: /* hline: HLTOK BYTE NUM NUM  */
@@ -1470,7 +1478,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment); 
 		debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1474 "engines/hypno/grammar_arc.cpp"
+#line 1482 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 31: /* hline: HUTOK BYTE NUM NUM  */
@@ -1480,7 +1488,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1484 "engines/hypno/grammar_arc.cpp"
+#line 1492 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 32: /* hline: HTOK NAME NUM NUM  */
@@ -1491,7 +1499,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1495 "engines/hypno/grammar_arc.cpp"
+#line 1503 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 33: /* hline: HTOK RTOK NUM NUM  */
@@ -1501,7 +1509,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H R %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1505 "engines/hypno/grammar_arc.cpp"
+#line 1513 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 34: /* hline: HTOK ATOK NUM NUM  */
@@ -1511,7 +1519,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1515 "engines/hypno/grammar_arc.cpp"
+#line 1523 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 35: /* hline: HTOK PTOK NUM NUM  */
@@ -1521,33 +1529,43 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1525 "engines/hypno/grammar_arc.cpp"
+#line 1533 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 36: /* hline: HTOK BYTE NUM NUM  */
+  case 36: /* hline: H12TOK BYTE NUM NUM  */
 #line 235 "engines/hypno/grammar_arc.y"
+                              {
+		Segment segment('P', (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 1543 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 37: /* hline: HTOK BYTE NUM NUM  */
+#line 240 "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 1535 "engines/hypno/grammar_arc.cpp"
+#line 1553 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 37: /* enc: ENCTOK  */
-#line 242 "engines/hypno/grammar_arc.y"
+  case 38: /* enc: ENCTOK  */
+#line 247 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1541 "engines/hypno/grammar_arc.cpp"
+#line 1559 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 38: /* enc: %empty  */
-#line 243 "engines/hypno/grammar_arc.y"
+  case 39: /* enc: %empty  */
+#line 248 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1547 "engines/hypno/grammar_arc.cpp"
+#line 1565 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 42: /* bline: FNTOK FILENAME  */
-#line 251 "engines/hypno/grammar_arc.y"
+  case 43: /* bline: FNTOK FILENAME  */
+#line 256 "engines/hypno/grammar_arc.y"
                       { 
 		shoot = new Shoot();
 		if (Common::String("F0") == (yyvsp[-1].s))
@@ -1556,288 +1574,288 @@ yyreduce:
 			shoot->explosionAnimation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1560 "engines/hypno/grammar_arc.cpp"
+#line 1578 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 43: /* bline: FNTOK NONETOK  */
-#line 259 "engines/hypno/grammar_arc.y"
+  case 44: /* bline: FNTOK NONETOK  */
+#line 264 "engines/hypno/grammar_arc.y"
                         { 
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE"); 
 	}
-#line 1570 "engines/hypno/grammar_arc.cpp"
+#line 1588 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 44: /* bline: FTOK FILENAME  */
-#line 264 "engines/hypno/grammar_arc.y"
+  case 45: /* bline: FTOK FILENAME  */
+#line 269 "engines/hypno/grammar_arc.y"
                         { 
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1580 "engines/hypno/grammar_arc.cpp"
+#line 1598 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 45: /* bline: ITOK NAME  */
-#line 269 "engines/hypno/grammar_arc.y"
+  case 46: /* bline: ITOK NAME  */
+#line 274 "engines/hypno/grammar_arc.y"
                      { 
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1589 "engines/hypno/grammar_arc.cpp"
+#line 1607 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 46: /* bline: ITOK BNTOK  */
-#line 273 "engines/hypno/grammar_arc.y"
+  case 47: /* bline: ITOK BNTOK  */
+#line 278 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1598 "engines/hypno/grammar_arc.cpp"
+#line 1616 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 47: /* bline: ITOK ATOK  */
-#line 277 "engines/hypno/grammar_arc.y"
+  case 48: /* bline: ITOK ATOK  */
+#line 282 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A"); 
 	}
-#line 1607 "engines/hypno/grammar_arc.cpp"
+#line 1625 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 48: /* bline: ITOK CTOK  */
-#line 281 "engines/hypno/grammar_arc.y"
+  case 49: /* bline: ITOK CTOK  */
+#line 286 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C"); 
 	}
-#line 1616 "engines/hypno/grammar_arc.cpp"
+#line 1634 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 49: /* bline: ITOK DTOK  */
-#line 285 "engines/hypno/grammar_arc.y"
+  case 50: /* bline: ITOK DTOK  */
+#line 290 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D"); 
 	}
-#line 1625 "engines/hypno/grammar_arc.cpp"
+#line 1643 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 50: /* bline: ITOK FTOK  */
-#line 289 "engines/hypno/grammar_arc.y"
+  case 51: /* bline: ITOK FTOK  */
+#line 294 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F"); 
 	}
-#line 1634 "engines/hypno/grammar_arc.cpp"
+#line 1652 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 51: /* bline: ITOK HTOK  */
-#line 293 "engines/hypno/grammar_arc.y"
+  case 52: /* bline: ITOK HTOK  */
+#line 298 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H"); 
 	}
-#line 1643 "engines/hypno/grammar_arc.cpp"
+#line 1661 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 52: /* bline: ITOK ITOK  */
-#line 297 "engines/hypno/grammar_arc.y"
+  case 53: /* bline: ITOK ITOK  */
+#line 302 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I"); 
 	}
-#line 1652 "engines/hypno/grammar_arc.cpp"
+#line 1670 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 53: /* bline: ITOK JTOK  */
-#line 301 "engines/hypno/grammar_arc.y"
+  case 54: /* bline: ITOK JTOK  */
+#line 306 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J"); 
 	}
-#line 1661 "engines/hypno/grammar_arc.cpp"
+#line 1679 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 54: /* bline: ITOK NTOK  */
-#line 305 "engines/hypno/grammar_arc.y"
+  case 55: /* bline: ITOK NTOK  */
+#line 310 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N"); 
 	}
-#line 1670 "engines/hypno/grammar_arc.cpp"
+#line 1688 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 55: /* bline: ITOK OTOK  */
-#line 309 "engines/hypno/grammar_arc.y"
+  case 56: /* bline: ITOK OTOK  */
+#line 314 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O"); 
 	}
-#line 1679 "engines/hypno/grammar_arc.cpp"
+#line 1697 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 56: /* bline: ITOK PTOK  */
-#line 313 "engines/hypno/grammar_arc.y"
+  case 57: /* bline: ITOK PTOK  */
+#line 318 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P"); 
 	}
-#line 1688 "engines/hypno/grammar_arc.cpp"
+#line 1706 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 57: /* bline: ITOK QTOK  */
-#line 317 "engines/hypno/grammar_arc.y"
+  case 58: /* bline: ITOK QTOK  */
+#line 322 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q"); 
 	}
-#line 1697 "engines/hypno/grammar_arc.cpp"
+#line 1715 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 58: /* bline: ITOK RTOK  */
-#line 321 "engines/hypno/grammar_arc.y"
+  case 59: /* bline: ITOK RTOK  */
+#line 326 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R"); 
 	}
-#line 1706 "engines/hypno/grammar_arc.cpp"
+#line 1724 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 59: /* bline: ITOK SNTOK  */
-#line 325 "engines/hypno/grammar_arc.y"
+  case 60: /* bline: ITOK SNTOK  */
+#line 330 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1715 "engines/hypno/grammar_arc.cpp"
+#line 1733 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 60: /* bline: ITOK TTOK  */
-#line 329 "engines/hypno/grammar_arc.y"
+  case 61: /* bline: ITOK TTOK  */
+#line 334 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T"); 
 	}
-#line 1724 "engines/hypno/grammar_arc.cpp"
+#line 1742 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 61: /* bline: JTOK NUM  */
-#line 333 "engines/hypno/grammar_arc.y"
+  case 62: /* bline: JTOK NUM  */
+#line 338 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i)); 
 	}
-#line 1732 "engines/hypno/grammar_arc.cpp"
+#line 1750 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 62: /* bline: A0TOK NUM NUM  */
-#line 336 "engines/hypno/grammar_arc.y"
+  case 63: /* bline: A0TOK NUM NUM  */
+#line 341 "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 1741 "engines/hypno/grammar_arc.cpp"
+#line 1759 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 63: /* bline: RTOK NUM NUM  */
-#line 340 "engines/hypno/grammar_arc.y"
+  case 64: /* bline: RTOK NUM NUM  */
+#line 345 "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 1751 "engines/hypno/grammar_arc.cpp"
+#line 1769 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 64: /* bline: R01TOK NUM NUM  */
-#line 345 "engines/hypno/grammar_arc.y"
+  case 65: /* bline: R01TOK NUM NUM  */
+#line 350 "engines/hypno/grammar_arc.y"
                           { 
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R0/1 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1760 "engines/hypno/grammar_arc.cpp"
+#line 1778 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 65: /* bline: BNTOK NUM NUM  */
-#line 349 "engines/hypno/grammar_arc.y"
+  case 66: /* bline: BNTOK NUM NUM  */
+#line 354 "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 1770 "engines/hypno/grammar_arc.cpp"
+#line 1788 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 66: /* bline: KNTOK NUM NUM  */
-#line 354 "engines/hypno/grammar_arc.y"
+  case 67: /* bline: KNTOK NUM NUM  */
+#line 359 "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 1780 "engines/hypno/grammar_arc.cpp"
+#line 1798 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 67: /* bline: P0TOK NUM NUM  */
-#line 359 "engines/hypno/grammar_arc.y"
+  case 68: /* bline: P0TOK NUM NUM  */
+#line 364 "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 1789 "engines/hypno/grammar_arc.cpp"
+#line 1807 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 68: /* bline: OTOK NUM NUM  */
-#line 363 "engines/hypno/grammar_arc.y"
+  case 69: /* bline: OTOK NUM NUM  */
+#line 368 "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 1800 "engines/hypno/grammar_arc.cpp"
+#line 1818 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 69: /* bline: CTOK NUM  */
-#line 369 "engines/hypno/grammar_arc.y"
+  case 70: /* bline: CTOK NUM  */
+#line 374 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1806 "engines/hypno/grammar_arc.cpp"
+#line 1824 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 70: /* bline: HTOK NUM  */
-#line 370 "engines/hypno/grammar_arc.y"
+  case 71: /* bline: HTOK NUM  */
+#line 375 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrames.push_back((yyvsp[0].i)); 
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1814 "engines/hypno/grammar_arc.cpp"
+#line 1832 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 71: /* bline: VTOK NUM  */
-#line 373 "engines/hypno/grammar_arc.y"
+  case 72: /* bline: VTOK NUM  */
+#line 378 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1820 "engines/hypno/grammar_arc.cpp"
+#line 1838 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 72: /* bline: WTOK NUM  */
-#line 374 "engines/hypno/grammar_arc.y"
+  case 73: /* bline: WTOK NUM  */
+#line 379 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1828 "engines/hypno/grammar_arc.cpp"
+#line 1846 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 73: /* bline: DTOK NUM  */
-#line 377 "engines/hypno/grammar_arc.y"
+  case 74: /* bline: DTOK NUM  */
+#line 382 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i)); 
 	}
-#line 1837 "engines/hypno/grammar_arc.cpp"
+#line 1855 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 74: /* bline: SNTOK FILENAME enc  */
-#line 381 "engines/hypno/grammar_arc.y"
+  case 75: /* bline: SNTOK FILENAME enc  */
+#line 386 "engines/hypno/grammar_arc.y"
                              { 
 		if (Common::String("S1") == (yyvsp[-2].s))
 			shoot->deathSound = (yyvsp[-1].s);
@@ -1845,28 +1863,28 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 		 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 1849 "engines/hypno/grammar_arc.cpp"
+#line 1867 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 75: /* bline: NTOK  */
-#line 388 "engines/hypno/grammar_arc.y"
+  case 76: /* bline: NTOK  */
+#line 393 "engines/hypno/grammar_arc.y"
                { debugC(1, kHypnoDebugParser, "N"); }
-#line 1855 "engines/hypno/grammar_arc.cpp"
+#line 1873 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 76: /* bline: ZTOK  */
-#line 389 "engines/hypno/grammar_arc.y"
+  case 77: /* bline: ZTOK  */
+#line 394 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot); 
 		//delete shoot; 
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z"); 
 	}
-#line 1866 "engines/hypno/grammar_arc.cpp"
+#line 1884 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 1870 "engines/hypno/grammar_arc.cpp"
+#line 1888 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 866a2a4b4e7..523254598e9 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -59,7 +59,7 @@ using namespace Hypno;
 %token<s> NAME FILENAME BNTOK SNTOK KNTOK YXTOK FNTOK ENCTOK ONTOK
 %token<i> NUM BYTE
 // header
-%token COMMENT CTOK DTOK HTOK HETOK HLTOK HUTOK RETTOK QTOK RESTOK
+%token COMMENT CTOK DTOK HTOK HETOK HLTOK H12TOK HUTOK RETTOK QTOK RESTOK
 %token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK NTOK NSTOK RTOK R01TOK ITOK I1TOK JTOK ZTOK
 
 // body
@@ -232,6 +232,11 @@ hline: 	CTOK NUM {
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", $3, $4); 
 	}
+	| H12TOK BYTE NUM NUM {
+		Segment segment('P', $4, $3);
+		g_parsedArc->segments.push_back(segment);
+		debugC(1, kHypnoDebugParser, "HN %x %d %d", $2, $3, $4); 
+	}
 	| HTOK BYTE NUM NUM {
 		Segment segment($2, $4, $3);
 		g_parsedArc->segments.push_back(segment);
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index e7d9807c0aa..c0282dba904 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 45
-#define YY_END_OF_BUFFER 46
+#define YY_NUM_RULES 46
+#define YY_END_OF_BUFFER 47
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -642,16 +642,16 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[77] =
+static const flex_int16_t yy_accept[78] =
     {   0,
-        0,    0,   46,   44,   43,   41,   41,   44,   36,   36,
-       36,   36,   44,    9,   37,    2,    3,   37,   27,    7,
-       17,   19,   37,   13,   11,    8,   20,   15,   37,   24,
-       10,   22,   23,   37,   21,   37,   43,   36,   39,   36,
-       36,   36,   36,    0,   38,   29,   37,   30,   26,    4,
-        5,    6,   18,   31,   14,   37,   12,   32,   16,   28,
-       25,   33,   37,   35,   35,   34,   34,   36,   42,   37,
-        0,    1,    0,    0,   40,    0
+        0,    0,   47,   45,   44,   42,   42,   45,   37,   37,
+       37,   37,   45,   10,   38,    2,    3,   38,   28,    8,
+       18,   20,   38,   14,   12,    9,   21,   16,   38,   25,
+       11,   23,   24,   38,   22,   38,   44,   37,   40,   37,
+       37,   37,   37,    0,   39,   30,   38,   31,   27,    7,
+        4,    5,    6,   19,   32,   15,   38,   13,   33,   17,
+       29,   26,   34,   38,   36,   36,   35,   35,   37,   43,
+       38,    0,    1,    0,    0,   41,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -695,33 +695,33 @@ static const YY_CHAR yy_meta[45] =
         4,    4,    4,    1
     } ;
 
-static const flex_int16_t yy_base[83] =
+static const flex_int16_t yy_base[84] =
     {   0,
-        0,    0,  203,  204,  200,  204,  204,   36,   41,   46,
-       51,   56,    0,   62,   64,  185,  180,  178,   77,   83,
-       84,  177,   87,   96,   97,  102,  176,  104,  110,   85,
-      175,  174,  173,   95,  172,    0,  176,  120,    0,  130,
-      135,   83,  125,  172,    0,  167,  166,  165,  164,  163,
-      158,  157,  156,  155,  204,  141,  154,  153,  151,  150,
-      149,  148,    0,    0,  204,    0,  204,  145,  151,  107,
-      143,  145,  143,  107,  204,  204,  187,  191,  193,  195,
-       74,  197
+        0,    0,  206,  207,  203,  207,  207,   36,   41,   46,
+       51,   56,    0,   62,   64,  196,  195,  186,   77,   83,
+       87,  181,   95,   91,  102,   92,  179,  105,  112,   84,
+      177,  175,  174,   90,  173,    0,  178,  125,    0,  130,
+      135,  124,  142,  174,    0,  168,  167,  166,  165,  164,
+      162,  157,  156,  155,  154,  207,  142,  153,  151,  150,
+      149,  148,  147,    0,    0,  207,    0,  207,  146,  150,
+      110,  142,  120,  117,  107,  207,  207,  188,  192,  194,
+      196,   74,  198
     } ;
 
-static const flex_int16_t yy_def[83] =
+static const flex_int16_t yy_def[84] =
     {   0,
-       76,    1,   76,   76,   76,   76,   76,   76,   77,   77,
-       77,   77,   78,   79,   79,   79,   79,   79,   79,   79,
-       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
-       79,   79,   79,   80,   79,   81,   76,   76,   77,   77,
-       77,   41,   41,   78,   82,   79,   79,   79,   79,   79,
-       79,   79,   79,   79,   76,   79,   79,   79,   79,   79,
-       79,   79,   81,   77,   76,   77,   76,   41,   78,   79,
-       76,   79,   76,   76,   76,    0,   76,   76,   76,   76,
-       76,   76
+       77,    1,   77,   77,   77,   77,   77,   77,   78,   78,
+       78,   78,   79,   80,   80,   80,   80,   80,   80,   80,
+       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
+       80,   80,   80,   81,   80,   82,   77,   77,   78,   78,
+       78,   41,   41,   79,   83,   80,   80,   80,   80,   80,
+       80,   80,   80,   80,   80,   77,   80,   80,   80,   80,
+       80,   80,   80,   82,   78,   77,   78,   77,   41,   79,
+       80,   77,   80,   77,   77,   77,    0,   77,   77,   77,
+       77,   77,   77
     } ;
 
-static const flex_int16_t yy_nxt[249] =
+static const flex_int16_t yy_nxt[252] =
     {   0,
         4,    5,    6,    7,    4,    4,    8,    4,    9,   10,
        11,   12,    9,   13,   14,   15,   16,   17,   18,   19,
@@ -730,29 +730,30 @@ static const flex_int16_t yy_nxt[249] =
        18,   18,   18,    7,   38,   38,   38,   38,   38,   40,
        40,   40,   40,   40,   40,   41,   40,   40,   40,   40,
        40,   42,   40,   40,   40,   40,   43,   40,   40,   45,
-       46,   45,   48,   48,   48,   48,   48,   63,   48,   48,
+       46,   45,   48,   48,   48,   48,   48,   64,   48,   48,
        48,   48,   48,   48,   45,   49,   49,   49,   49,   49,
-       45,   45,   45,   53,   45,   54,   54,   54,   54,   54,
-
-       55,   50,   45,   45,   45,   57,   57,   66,   51,   45,
-       58,   45,   59,   59,   45,   75,   52,   45,   60,   60,
-       60,   60,   60,   56,   66,   72,   67,   61,   38,   38,
-       38,   38,   38,   68,   47,   47,   47,   47,   40,   40,
-       40,   40,   40,   40,   40,   40,   40,   40,   45,   39,
-       71,   74,   45,   73,   69,   45,   45,   45,   45,   64,
-       45,   45,   45,   45,   45,   45,   39,   70,   76,   39,
-       45,   45,   45,   45,   45,   69,   64,   37,   65,   45,
-       45,   45,   45,   45,   45,   45,   39,   45,   76,   39,
-       39,   44,   45,   44,   44,   47,   47,   62,   62,   45,
-
-       45,   37,   76,    3,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   76,   76,   76,   76
+       45,   45,   50,   50,   45,   56,   54,   45,   45,   45,
+
+       59,   51,   45,   55,   55,   55,   55,   55,   52,   45,
+       58,   58,   45,   60,   60,   76,   53,   45,   57,   45,
+       61,   61,   61,   61,   61,   75,   62,   45,   73,   47,
+       47,   47,   47,   38,   38,   38,   38,   38,   40,   40,
+       40,   40,   40,   40,   40,   40,   40,   40,   67,   45,
+       69,   72,   74,   70,   45,   45,   45,   45,   45,   65,
+       45,   45,   45,   45,   45,   67,   39,   68,   71,   45,
+       39,   45,   45,   45,   45,   45,   65,   70,   66,   37,
+       45,   45,   45,   39,   45,   77,   45,   39,   45,   77,
+       39,   39,   44,   45,   44,   44,   47,   47,   63,   63,
+
+       45,   45,   45,   45,   37,   77,    3,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77
     } ;
 
-static const flex_int16_t yy_chk[249] =
+static const flex_int16_t yy_chk[252] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -761,34 +762,35 @@ static const flex_int16_t yy_chk[249] =
         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,   15,   15,   15,   15,   15,   15,   81,   15,   15,
+       14,   15,   15,   15,   15,   15,   15,   82,   15,   15,
        15,   15,   15,   15,   19,   19,   19,   19,   19,   19,
-       20,   21,   30,   21,   23,   23,   23,   23,   23,   23,
-
-       24,   20,   34,   24,   25,   25,   25,   42,   20,   26,
-       26,   28,   28,   28,   70,   74,   20,   29,   29,   29,
-       29,   29,   29,   24,   42,   70,   42,   30,   38,   38,
-       38,   38,   38,   43,   34,   34,   34,   34,   40,   40,
-       40,   40,   40,   41,   41,   41,   41,   41,   56,   43,
-       68,   73,   72,   71,   69,   62,   61,   60,   59,   41,
-       58,   57,   54,   53,   52,   51,   43,   56,   43,   68,
-       50,   49,   48,   47,   46,   44,   41,   37,   41,   35,
-       33,   32,   31,   27,   22,   18,   68,   17,   68,   77,
-       77,   78,   16,   78,   78,   79,   79,   80,   80,   82,
-
-       82,    5,    3,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   76,   76,   76,   76
+       20,   30,   20,   20,   21,   24,   21,   34,   24,   26,
+
+       26,   20,   23,   23,   23,   23,   23,   23,   20,   25,
+       25,   25,   28,   28,   28,   75,   20,   71,   24,   29,
+       29,   29,   29,   29,   29,   74,   30,   73,   71,   34,
+       34,   34,   34,   38,   38,   38,   38,   38,   40,   40,
+       40,   40,   40,   41,   41,   41,   41,   41,   42,   57,
+       43,   69,   72,   70,   63,   62,   61,   60,   59,   41,
+       58,   55,   54,   53,   52,   42,   43,   42,   57,   51,
+       69,   50,   49,   48,   47,   46,   41,   44,   41,   37,
+       35,   33,   32,   43,   31,   43,   27,   69,   22,   69,
+       78,   78,   79,   18,   79,   79,   80,   80,   81,   81,
+
+       83,   83,   17,   16,    5,    3,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[46] =
+static const flex_int32_t yy_rule_can_match_eol[47] =
     {   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, 1, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -835,8 +837,8 @@ char *yytext;
 #include "hypno/grammar.h"
 #include "hypno/tokens_arc.h"
 
-#line 838 "engines/hypno/lexer_arc.cpp"
-#line 839 "engines/hypno/lexer_arc.cpp"
+#line 840 "engines/hypno/lexer_arc.cpp"
+#line 841 "engines/hypno/lexer_arc.cpp"
 
 #define INITIAL 0
 
@@ -1053,7 +1055,7 @@ YY_DECL
 	{
 #line 42 "engines/hypno/lexer_arc.l"
 
-#line 1056 "engines/hypno/lexer_arc.cpp"
+#line 1058 "engines/hypno/lexer_arc.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1080,13 +1082,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 >= 77 )
+				if ( yy_current_state >= 78 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 76 );
+		while ( yy_current_state != 77 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1149,142 +1151,142 @@ return HUTOK;
 case 7:
 YY_RULE_SETUP
 #line 49 "engines/hypno/lexer_arc.l"
-return HTOK;
+return H12TOK;
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
 #line 50 "engines/hypno/lexer_arc.l"
-return PTOK;
+return HTOK;
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
 #line 51 "engines/hypno/lexer_arc.l"
-return ATOK;
+return PTOK;
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
 #line 52 "engines/hypno/lexer_arc.l"
-return VTOK;
+return ATOK;
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
 #line 53 "engines/hypno/lexer_arc.l"
-return OTOK;
+return VTOK;
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 54 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
+return OTOK;
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
 #line 55 "engines/hypno/lexer_arc.l"
-return NTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 56 "engines/hypno/lexer_arc.l"
-return NSTOK;
+return NTOK;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 57 "engines/hypno/lexer_arc.l"
-return RTOK;
+return NSTOK;
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 58 "engines/hypno/lexer_arc.l"
-return R01TOK;
+return RTOK;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 59 "engines/hypno/lexer_arc.l"
-return ITOK;
+return R01TOK;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 60 "engines/hypno/lexer_arc.l"
-return I1TOK;
+return ITOK;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 61 "engines/hypno/lexer_arc.l"
-return JTOK;
+return I1TOK;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 62 "engines/hypno/lexer_arc.l"
-return QTOK;
+return JTOK;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 63 "engines/hypno/lexer_arc.l"
-return ZTOK;
+return QTOK;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 64 "engines/hypno/lexer_arc.l"
-return WTOK;
+return ZTOK;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 65 "engines/hypno/lexer_arc.l"
-return XTOK;
+return WTOK;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 66 "engines/hypno/lexer_arc.l"
-return TTOK;
+return XTOK;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 67 "engines/hypno/lexer_arc.l"
-return TPTOK;
+return TTOK;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 68 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
+return TPTOK;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 69 "engines/hypno/lexer_arc.l"
-return FTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 70 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+return FTOK;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 71 "engines/hypno/lexer_arc.l"
-return A0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 72 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+return A0TOK;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 73 "engines/hypno/lexer_arc.l"
-return KNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 74 "engines/hypno/lexer_arc.l"
-return P0TOK;
+return KNTOK;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 75 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
+return P0TOK;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 76 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
@@ -1294,17 +1296,17 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 case 36:
 YY_RULE_SETUP
 #line 78 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 79 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 80 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
@@ -1314,35 +1316,40 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 case 40:
 YY_RULE_SETUP
 #line 82 "engines/hypno/lexer_arc.l"
-return RESTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 	YY_BREAK
 case 41:
-/* rule 41 can match eol */
 YY_RULE_SETUP
 #line 83 "engines/hypno/lexer_arc.l"
-return RETTOK;
+return RESTOK;
 	YY_BREAK
 case 42:
+/* rule 42 can match eol */
 YY_RULE_SETUP
 #line 84 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+return RETTOK;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 85 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+/* ignore comment */
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 86 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+/* ignore whitespace */;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 87 "engines/hypno/lexer_arc.l"
+HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 88 "engines/hypno/lexer_arc.l"
 ECHO;
 	YY_BREAK
-#line 1345 "engines/hypno/lexer_arc.cpp"
+#line 1352 "engines/hypno/lexer_arc.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1640,7 +1647,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 >= 77 )
+			if ( yy_current_state >= 78 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1668,11 +1675,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 >= 77 )
+		if ( yy_current_state >= 78 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 76);
+	yy_is_jam = (yy_current_state == 77);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2319,7 +2326,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 87 "engines/hypno/lexer_arc.l"
+#line 88 "engines/hypno/lexer_arc.l"
 
 
 namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index 22301614634..e0aafb8020f 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -46,6 +46,7 @@ D							return DTOK;
 HE							return HETOK;
 HL							return HLTOK;
 HU							return HUTOK;
+H[1-2]						return H12TOK;
 H							return HTOK;
 P							return PTOK;
 A							return ATOK;
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index b360758c5eb..80b175db597 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -79,32 +79,33 @@ extern int HYPNO_ARC_debug;
     HTOK = 272,                    /* HTOK  */
     HETOK = 273,                   /* HETOK  */
     HLTOK = 274,                   /* HLTOK  */
-    HUTOK = 275,                   /* HUTOK  */
-    RETTOK = 276,                  /* RETTOK  */
-    QTOK = 277,                    /* QTOK  */
-    RESTOK = 278,                  /* RESTOK  */
-    PTOK = 279,                    /* PTOK  */
-    FTOK = 280,                    /* FTOK  */
-    TTOK = 281,                    /* TTOK  */
-    TPTOK = 282,                   /* TPTOK  */
-    ATOK = 283,                    /* ATOK  */
-    VTOK = 284,                    /* VTOK  */
-    OTOK = 285,                    /* OTOK  */
-    NTOK = 286,                    /* NTOK  */
-    NSTOK = 287,                   /* NSTOK  */
-    RTOK = 288,                    /* RTOK  */
-    R01TOK = 289,                  /* R01TOK  */
-    ITOK = 290,                    /* ITOK  */
-    I1TOK = 291,                   /* I1TOK  */
-    JTOK = 292,                    /* JTOK  */
-    ZTOK = 293,                    /* ZTOK  */
-    NONETOK = 294,                 /* NONETOK  */
-    A0TOK = 295,                   /* A0TOK  */
-    P0TOK = 296,                   /* P0TOK  */
-    WTOK = 297,                    /* WTOK  */
-    XTOK = 298,                    /* XTOK  */
-    CB3TOK = 299,                  /* CB3TOK  */
-    C02TOK = 300                   /* C02TOK  */
+    H12TOK = 275,                  /* H12TOK  */
+    HUTOK = 276,                   /* HUTOK  */
+    RETTOK = 277,                  /* RETTOK  */
+    QTOK = 278,                    /* QTOK  */
+    RESTOK = 279,                  /* RESTOK  */
+    PTOK = 280,                    /* PTOK  */
+    FTOK = 281,                    /* FTOK  */
+    TTOK = 282,                    /* TTOK  */
+    TPTOK = 283,                   /* TPTOK  */
+    ATOK = 284,                    /* ATOK  */
+    VTOK = 285,                    /* VTOK  */
+    OTOK = 286,                    /* OTOK  */
+    NTOK = 287,                    /* NTOK  */
+    NSTOK = 288,                   /* NSTOK  */
+    RTOK = 289,                    /* RTOK  */
+    R01TOK = 290,                  /* R01TOK  */
+    ITOK = 291,                    /* ITOK  */
+    I1TOK = 292,                   /* I1TOK  */
+    JTOK = 293,                    /* JTOK  */
+    ZTOK = 294,                    /* ZTOK  */
+    NONETOK = 295,                 /* NONETOK  */
+    A0TOK = 296,                   /* A0TOK  */
+    P0TOK = 297,                   /* P0TOK  */
+    WTOK = 298,                    /* WTOK  */
+    XTOK = 299,                    /* XTOK  */
+    CB3TOK = 300,                  /* CB3TOK  */
+    C02TOK = 301                   /* C02TOK  */
   };
   typedef enum HYPNO_ARC_tokentype HYPNO_ARC_token_kind_t;
 #endif
@@ -118,7 +119,7 @@ union HYPNO_ARC_STYPE
 	char *s; /* string value */
 	int i;	 /* integer value */
 
-#line 122 "engines/hypno/tokens_arc.h"
+#line 123 "engines/hypno/tokens_arc.h"
 
 };
 typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index abb5e6c2d15..5b270e10a51 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -286,13 +286,13 @@ void WetEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c321.mi_", "c41", "<check_lives>", "");
 	loadArcadeLevel("c322.mi_", "c41", "<check_lives>", "");
 
-	//loadArcadeLevel("c330.mi_", "???", "", "");
-	//loadArcadeLevel("c331.mi_", "???", "");
-	//loadArcadeLevel("c332.mi_", "???", "");
+	loadArcadeLevel("c330.mi_", "c30", "<check_lives>", "");
+	loadArcadeLevel("c331.mi_", "c30", "<check_lives>", "");
+	loadArcadeLevel("c332.mi_", "c30", "<check_lives>", "");
 
-	//loadArcadeLevel("c300.mi_", "???", "", "");
-	//loadArcadeLevel("c301.mi_", "???", "");
-	//loadArcadeLevel("c302.mi_", "???", "");
+	loadArcadeLevel("c300.mi_", "c41", "<check_lives>", "");
+	loadArcadeLevel("c301.mi_", "c41", "<check_lives>", "");
+	loadArcadeLevel("c302.mi_", "c41", "<check_lives>", "");
 
 	loadArcadeLevel("c410.mi_", "c42", "<check_lives>", "");
 	loadArcadeLevel("c411.mi_", "c42", "<check_lives>", "");


Commit: 13f53c83a17495c31159701b4e99b7c96bedbac9
    https://github.com/scummvm/scummvm/commit/13f53c83a17495c31159701b4e99b7c96bedbac9
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-02-24T18:12:29+01:00

Commit Message:
HYPNO: load last two levels in wet (but not playing them correctly)

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


diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 5b270e10a51..a156792c113 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -329,13 +329,13 @@ void WetEngine::loadAssetsFullGame() {
 	//loadArcadeLevel("c501.mi_", "???", "");
 	//loadArcadeLevel("c502.mi_", "???", "");
 
-	loadArcadeLevel("c610.mi_", "<quit>", "<check_lives>", "");
-	loadArcadeLevel("c611.mi_", "<quit>", "<check_lives>", "");
-	loadArcadeLevel("c612.mi_", "<quit>", "<check_lives>", "");
+	loadArcadeLevel("c610.mi_", "c60", "<check_lives>", "");
+	loadArcadeLevel("c611.mi_", "c60", "<check_lives>", "");
+	loadArcadeLevel("c612.mi_", "c60", "<check_lives>", "");
 
-	//loadArcadeLevel("c600.mi_", "???", "");
-	//loadArcadeLevel("c601.mi_", "???", "");
-	//loadArcadeLevel("c602.mi_", "???", "");
+	loadArcadeLevel("c600.mi_", "<quit>", "<check_lives>", "");
+	loadArcadeLevel("c601.mi_", "<quit>", "<check_lives>", "");
+	loadArcadeLevel("c602.mi_", "<quit>", "<check_lives>", "");
 
 	loadLib("", "c_misc/fonts.lib", true);
 	loadFonts();


Commit: a226d1e7bea77e72a894ce73a4c2cc09c60841e4
    https://github.com/scummvm/scummvm/commit/a226d1e7bea77e72a894ce73a4c2cc09c60841e4
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-02-24T18:12:29+01:00

Commit Message:
HYPNO: finally load all the levels in wet

Changed paths:
    engines/hypno/arcade.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
    engines/hypno/wet/wet.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 70d364b9d4a..96bd0420a2d 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -113,7 +113,7 @@ SegmentShootsSequence HypnoEngine::parseShootList(const Common::String &filename
 
 			si.name = n;
 			si.timestamp = atoi(t.c_str());
-			if (si.timestamp == 0)
+			if (si.timestamp == 0 && si.name != "0") // 0,0 is a special case
 				error("Error at parsing '%s' with timestamp: %s", n.c_str(), t.c_str());
 			ss.shootSequence.push_back(si);
 			debugC(1, kHypnoDebugParser, "%d -> %s", si.timestamp, si.name.c_str());
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 0681f1590e9..c27435382c4 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -162,29 +162,30 @@ enum yysymbol_kind_t
   YYSYMBOL_ATOK = 29,                      /* ATOK  */
   YYSYMBOL_VTOK = 30,                      /* VTOK  */
   YYSYMBOL_OTOK = 31,                      /* OTOK  */
-  YYSYMBOL_NTOK = 32,                      /* NTOK  */
-  YYSYMBOL_NSTOK = 33,                     /* NSTOK  */
-  YYSYMBOL_RTOK = 34,                      /* RTOK  */
-  YYSYMBOL_R01TOK = 35,                    /* R01TOK  */
-  YYSYMBOL_ITOK = 36,                      /* ITOK  */
-  YYSYMBOL_I1TOK = 37,                     /* I1TOK  */
-  YYSYMBOL_JTOK = 38,                      /* JTOK  */
-  YYSYMBOL_ZTOK = 39,                      /* ZTOK  */
-  YYSYMBOL_NONETOK = 40,                   /* NONETOK  */
-  YYSYMBOL_A0TOK = 41,                     /* A0TOK  */
-  YYSYMBOL_P0TOK = 42,                     /* P0TOK  */
-  YYSYMBOL_WTOK = 43,                      /* WTOK  */
-  YYSYMBOL_XTOK = 44,                      /* XTOK  */
-  YYSYMBOL_CB3TOK = 45,                    /* CB3TOK  */
-  YYSYMBOL_C02TOK = 46,                    /* C02TOK  */
-  YYSYMBOL_YYACCEPT = 47,                  /* $accept  */
-  YYSYMBOL_start = 48,                     /* start  */
-  YYSYMBOL_49_1 = 49,                      /* $@1  */
-  YYSYMBOL_header = 50,                    /* header  */
-  YYSYMBOL_hline = 51,                     /* hline  */
-  YYSYMBOL_enc = 52,                       /* enc  */
-  YYSYMBOL_body = 53,                      /* body  */
-  YYSYMBOL_bline = 54                      /* bline  */
+  YYSYMBOL_LTOK = 32,                      /* LTOK  */
+  YYSYMBOL_NTOK = 33,                      /* NTOK  */
+  YYSYMBOL_NSTOK = 34,                     /* NSTOK  */
+  YYSYMBOL_RTOK = 35,                      /* RTOK  */
+  YYSYMBOL_R01TOK = 36,                    /* R01TOK  */
+  YYSYMBOL_ITOK = 37,                      /* ITOK  */
+  YYSYMBOL_I1TOK = 38,                     /* I1TOK  */
+  YYSYMBOL_JTOK = 39,                      /* JTOK  */
+  YYSYMBOL_ZTOK = 40,                      /* ZTOK  */
+  YYSYMBOL_NONETOK = 41,                   /* NONETOK  */
+  YYSYMBOL_A0TOK = 42,                     /* A0TOK  */
+  YYSYMBOL_P0TOK = 43,                     /* P0TOK  */
+  YYSYMBOL_WTOK = 44,                      /* WTOK  */
+  YYSYMBOL_XTOK = 45,                      /* XTOK  */
+  YYSYMBOL_CB3TOK = 46,                    /* CB3TOK  */
+  YYSYMBOL_C02TOK = 47,                    /* C02TOK  */
+  YYSYMBOL_YYACCEPT = 48,                  /* $accept  */
+  YYSYMBOL_start = 49,                     /* start  */
+  YYSYMBOL_50_1 = 50,                      /* $@1  */
+  YYSYMBOL_header = 51,                    /* header  */
+  YYSYMBOL_hline = 52,                     /* hline  */
+  YYSYMBOL_enc = 53,                       /* enc  */
+  YYSYMBOL_body = 54,                      /* body  */
+  YYSYMBOL_bline = 55                      /* bline  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -512,19 +513,19 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  6
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   162
+#define YYLAST   160
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  47
+#define YYNTOKENS  48
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  8
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  77
+#define YYNRULES  80
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  162
+#define YYNSTATES  169
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   301
+#define YYMAXUTOK   302
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -568,7 +569,7 @@ static const yytype_int8 yytranslate[] =
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46
+      45,    46,    47
 };
 
 #if HYPNO_ARC_DEBUG
@@ -578,11 +579,12 @@ static const yytype_int16 yyrline[] =
        0,    78,    78,    78,    79,    82,    83,    84,    87,    91,
       95,    99,   100,   101,   102,   103,   108,   118,   127,   133,
      138,   139,   143,   147,   150,   154,   157,   158,   176,   198,
-     204,   209,   214,   220,   225,   230,   235,   240,   247,   248,
-     251,   252,   253,   256,   264,   269,   274,   278,   282,   286,
-     290,   294,   298,   302,   306,   310,   314,   318,   322,   326,
-     330,   334,   338,   341,   345,   350,   354,   359,   364,   368,
-     374,   375,   378,   379,   382,   386,   393,   394
+     204,   209,   214,   220,   225,   230,   235,   240,   245,   252,
+     253,   256,   257,   258,   261,   269,   274,   279,   283,   287,
+     291,   295,   299,   303,   307,   311,   315,   319,   323,   327,
+     331,   335,   339,   343,   347,   350,   354,   359,   363,   368,
+     373,   377,   383,   384,   387,   388,   391,   395,   398,   405,
+     406
 };
 #endif
 
@@ -602,10 +604,10 @@ static const char *const yytname[] =
   "BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "ENCTOK", "ONTOK", "NUM",
   "BYTE", "COMMENT", "CTOK", "DTOK", "HTOK", "HETOK", "HLTOK", "H12TOK",
   "HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK", "FTOK", "TTOK", "TPTOK",
-  "ATOK", "VTOK", "OTOK", "NTOK", "NSTOK", "RTOK", "R01TOK", "ITOK",
-  "I1TOK", "JTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK",
-  "CB3TOK", "C02TOK", "$accept", "start", "$@1", "header", "hline", "enc",
-  "body", "bline", YY_NULLPTR
+  "ATOK", "VTOK", "OTOK", "LTOK", "NTOK", "NSTOK", "RTOK", "R01TOK",
+  "ITOK", "I1TOK", "JTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK",
+  "XTOK", "CB3TOK", "C02TOK", "$accept", "start", "$@1", "header", "hline",
+  "enc", "body", "bline", YY_NULLPTR
 };
 
 static const char *
@@ -615,7 +617,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-95)
+#define YYPACT_NINF (-99)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -629,23 +631,23 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      -2,   -95,    -2,     8,    71,   -95,   -95,     9,    10,     3,
-       6,     7,    45,    11,    19,    22,    31,    71,    33,    34,
-      35,    -1,    46,    39,     4,    43,    52,    53,    55,    57,
-      61,    28,    71,   -95,    62,    66,   -95,   -95,    68,    69,
-      72,    73,    83,    94,    97,    98,    99,   -95,   100,   101,
-     -95,   102,   103,   104,   105,   106,   -95,   107,   -95,   -95,
-     -95,   -95,   -95,    27,   -95,   -95,   -95,   -95,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   -95,   -95,   -95,
-     -95,    79,   -95,   -95,   -95,    -5,   -95,   -95,   -95,   -95,
-     -95,   -95,   -95,   -95,   -95,   -95,   117,   126,   119,     1,
-     120,   121,   122,    -5,   131,   124,   125,   -95,   127,   128,
-      37,   129,   -95,   130,   132,   133,   118,    -5,   134,    62,
-     135,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   136,
-     137,   138,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,
-     -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   139,
-     140,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,   -95,
-     -95,   -95
+      -2,   -99,    -2,     9,    73,   -99,   -99,    10,    11,     4,
+       6,     7,    84,     0,    16,    20,    32,    73,    34,    35,
+      36,    -1,    45,    39,    12,    40,    46,    52,    53,    54,
+      55,    22,    73,   -99,    50,    56,   -99,   -99,    60,    62,
+      64,    68,    69,    70,    71,    74,    93,   100,   -99,   102,
+     103,   -99,   105,   106,   108,   109,   110,   -99,   111,   -99,
+     -99,   -99,   -99,   -99,    44,   -99,   -99,   -99,   -99,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   -99,
+     -99,   -99,   -99,    81,   -99,   -99,   -99,    -5,   -99,   -99,
+     -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   122,
+     131,   124,     1,   125,   126,   127,    -5,   136,   129,   130,
+     132,   -99,   133,   134,    38,   135,   -99,   137,   138,   139,
+      98,    -5,   140,    50,   141,   -99,   -99,   -99,   -99,   -99,
+     -99,   -99,   -99,   142,   143,   144,   145,   -99,   -99,   -99,
+     -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,
+     -99,   -99,   -99,   -99,   -99,   146,   147,   -99,   -99,   -99,
+     -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -656,32 +658,32 @@ 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,     7,    27,    39,    17,     8,    10,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     6,     0,     0,
-       9,     0,     0,     0,     0,     0,    14,     0,    21,    22,
-      23,    24,    25,     0,     5,    38,    28,    16,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    26,    11,    19,
-      20,     0,    12,    13,    15,    42,    32,    37,    35,    34,
-      33,    29,    30,    36,    31,    18,     0,     0,     0,     0,
-       0,     0,     0,    42,     0,     0,     0,    76,     0,     0,
-       0,     0,    77,     0,     0,     0,     0,    42,     0,    39,
-       0,    43,    44,    70,    74,    71,    41,    45,    72,     0,
-       0,     0,    46,    47,    60,    49,    50,    52,    58,    57,
-      51,    61,    48,    56,    55,    59,    53,    54,    62,     0,
-       0,    73,     3,    40,    66,    75,    67,    69,    64,    65,
-      63,    68
+       0,     0,     7,    27,    40,    17,     8,    10,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     6,     0,
+       0,     9,     0,     0,     0,     0,     0,    14,     0,    21,
+      22,    23,    24,    25,     0,     5,    39,    28,    16,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
+      11,    19,    20,     0,    12,    13,    15,    43,    32,    38,
+      35,    34,    36,    33,    29,    30,    37,    31,    18,     0,
+       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
+       0,    79,     0,     0,     0,     0,    80,     0,     0,     0,
+       0,    43,     0,    40,     0,    44,    45,    72,    76,    73,
+      42,    46,    74,     0,     0,     0,     0,    47,    48,    61,
+      50,    51,    53,    59,    58,    52,    62,    49,    57,    63,
+      56,    60,    54,    55,    64,     0,     0,    75,     3,    41,
+      68,    78,    69,    71,    77,    66,    67,    65,    70
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -95,   141,   -95,   -10,   -95,    36,   -94,   -95
+     -99,   158,   -99,   -10,   -99,    25,   -98,   -99
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-       0,     3,     4,    31,    32,    66,   116,   117
+       0,     3,     4,    31,    32,    67,   120,   121
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -689,80 +691,81 @@ static const yytype_int8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      96,    97,    98,    51,    99,   121,     1,    47,     6,   126,
-     100,   101,   102,    33,    34,    35,    55,   103,    36,    37,
-       2,   104,    64,   153,    43,   105,   106,   107,    56,   108,
-     109,   110,    44,   111,   112,    45,   113,   114,   115,    52,
-     132,   122,   133,   134,    46,    48,    49,    50,    38,    85,
-      53,    54,   135,   136,   137,    57,    58,    59,    39,    60,
-     138,    61,   139,   140,   141,    62,   142,    63,   143,   144,
-      40,   145,    65,   146,    41,   147,     7,     8,    67,    42,
-      68,    69,     9,    95,    70,    71,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    72,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    73,    29,    30,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,   118,
-     119,   120,   123,   124,   125,   127,   128,   129,     0,   130,
-     131,   148,   149,     5,   150,   151,   154,   156,   157,   158,
-     159,   160,   161,     0,     0,   155,     0,     0,     0,     0,
-       0,     0,   152
+      99,   100,   101,    52,   102,   125,     1,    48,   130,     6,
+     103,   104,   105,    44,    33,    34,    35,   106,    36,    37,
+       2,   107,    65,   159,    56,   108,   109,   110,   111,    45,
+     112,   113,   114,    46,   115,   116,    57,   117,   118,   119,
+      53,   137,   126,   138,   139,    47,    49,    50,    51,    54,
+      59,    55,    58,   140,   141,   142,    60,    61,    62,    63,
+      66,   143,    64,   144,   145,   146,    87,   147,    68,   148,
+     149,   150,    69,   151,    70,   152,    71,   153,     7,     8,
+      72,    73,    74,    75,     9,    98,    76,    38,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    39,    19,    20,
+      21,    22,    23,    24,    25,    77,    26,    27,    28,    40,
+      29,    30,    78,    41,    79,    80,    42,    81,    82,    43,
+      83,    84,    85,    86,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,   122,   123,   124,   127,   128,   129,
+     131,   132,   133,   158,   134,   135,   136,   154,   161,   155,
+     156,   157,   160,   162,   163,   164,   165,   166,   167,   168,
+       5
 };
 
 static const yytype_int8 yycheck[] =
 {
-       5,     6,     7,     4,     9,     4,     8,    17,     0,   103,
-      15,    16,    17,     4,     4,    12,    12,    22,    12,    12,
-      22,    26,    32,   117,    13,    30,    31,    32,    24,    34,
-      35,    36,    13,    38,    39,    13,    41,    42,    43,    40,
-       3,    40,     5,     6,    13,    12,    12,    12,     3,    22,
-       4,    12,    15,    16,    17,    12,     4,     4,    13,     4,
-      23,     4,    25,    26,    27,     4,    29,    39,    31,    32,
-      25,    34,    10,    36,    29,    38,     5,     6,    12,    34,
-      12,    12,    11,     4,    12,    12,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    12,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    12,    36,    37,    12,
+       5,     6,     7,     4,     9,     4,     8,    17,   106,     0,
+      15,    16,    17,    13,     4,     4,    12,    22,    12,    12,
+      22,    26,    32,   121,    12,    30,    31,    32,    33,    13,
+      35,    36,    37,    13,    39,    40,    24,    42,    43,    44,
+      41,     3,    41,     5,     6,    13,    12,    12,    12,     4,
+       4,    12,    12,    15,    16,    17,     4,     4,     4,     4,
+      10,    23,    40,    25,    26,    27,    22,    29,    12,    31,
+      32,    33,    12,    35,    12,    37,    12,    39,     5,     6,
+      12,    12,    12,    12,    11,     4,    12,     3,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    13,    25,    26,
+      27,    28,    29,    30,    31,    12,    33,    34,    35,    25,
+      37,    38,    12,    29,    12,    12,    32,    12,    12,    35,
       12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
+      12,    12,    12,    12,    12,     4,    12,    12,    12,    12,
+       4,    12,    12,    45,    12,    12,    12,    12,   123,    12,
       12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-       4,    12,    12,    12,    12,     4,    12,    12,    -1,    12,
-      12,    12,    12,     2,    12,    12,    12,    12,    12,    12,
-      12,    12,    12,    -1,    -1,   119,    -1,    -1,    -1,    -1,
-      -1,    -1,    44
+       2
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
    state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
-       0,     8,    22,    48,    49,    48,     0,     5,     6,    11,
+       0,     8,    22,    49,    50,    49,     0,     5,     6,    11,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    36,
-      37,    50,    51,     4,     4,    12,    12,    12,     3,    13,
-      25,    29,    34,    13,    13,    13,    13,    50,    12,    12,
-      12,     4,    40,     4,    12,    12,    24,    12,     4,     4,
-       4,     4,     4,    39,    50,    10,    52,    12,    12,    12,
+      26,    27,    28,    29,    30,    31,    33,    34,    35,    37,
+      38,    51,    52,     4,     4,    12,    12,    12,     3,    13,
+      25,    29,    32,    35,    13,    13,    13,    13,    51,    12,
+      12,    12,     4,    41,     4,    12,    12,    24,    12,     4,
+       4,     4,     4,     4,    40,    51,    10,    53,    12,    12,
       12,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,    22,    12,    12,    12,    12,
-      12,    12,    12,    12,    12,     4,     5,     6,     7,     9,
-      15,    16,    17,    22,    26,    30,    31,    32,    34,    35,
-      36,    38,    39,    41,    42,    43,    53,    54,    12,     4,
-      12,     4,    40,    12,    12,    12,    53,     4,    12,    12,
-      12,    12,     3,     5,     6,    15,    16,    17,    23,    25,
-      26,    27,    29,    31,    32,    34,    36,    38,    12,    12,
-      12,    12,    44,    53,    12,    52,    12,    12,    12,    12,
-      12,    12
+      12,    12,    12,    12,    12,    12,    12,    22,    12,    12,
+      12,    12,    12,    12,    12,    12,    12,    12,     4,     5,
+       6,     7,     9,    15,    16,    17,    22,    26,    30,    31,
+      32,    33,    35,    36,    37,    39,    40,    42,    43,    44,
+      54,    55,    12,     4,    12,     4,    41,    12,    12,    12,
+      54,     4,    12,    12,    12,    12,    12,     3,     5,     6,
+      15,    16,    17,    23,    25,    26,    27,    29,    31,    32,
+      33,    35,    37,    39,    12,    12,    12,    12,    45,    54,
+      12,    53,    12,    12,    12,    12,    12,    12,    12
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_int8 yyr1[] =
 {
-       0,    47,    49,    48,    48,    50,    50,    50,    51,    51,
-      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
-      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
-      51,    51,    51,    51,    51,    51,    51,    51,    52,    52,
-      53,    53,    53,    54,    54,    54,    54,    54,    54,    54,
-      54,    54,    54,    54,    54,    54,    54,    54,    54,    54,
-      54,    54,    54,    54,    54,    54,    54,    54,    54,    54,
-      54,    54,    54,    54,    54,    54,    54,    54
+       0,    48,    50,    49,    49,    51,    51,    51,    52,    52,
+      52,    52,    52,    52,    52,    52,    52,    52,    52,    52,
+      52,    52,    52,    52,    52,    52,    52,    52,    52,    52,
+      52,    52,    52,    52,    52,    52,    52,    52,    52,    53,
+      53,    54,    54,    54,    55,    55,    55,    55,    55,    55,
+      55,    55,    55,    55,    55,    55,    55,    55,    55,    55,
+      55,    55,    55,    55,    55,    55,    55,    55,    55,    55,
+      55,    55,    55,    55,    55,    55,    55,    55,    55,    55,
+      55
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -771,11 +774,12 @@ static const yytype_int8 yyr2[] =
        0,     2,     0,     7,     2,     2,     2,     0,     2,     2,
        2,     3,     3,     3,     2,     3,     3,     2,     4,     3,
        3,     2,     2,     2,     2,     2,     3,     2,     3,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     1,     0,
-       2,     2,     0,     2,     2,     2,     2,     2,     2,     2,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     1,
+       0,     2,     2,     0,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     3,     3,     3,     3,     3,     3,     3,
-       2,     2,     2,     2,     2,     3,     1,     1
+       2,     2,     2,     2,     2,     3,     3,     3,     3,     3,
+       3,     3,     2,     2,     2,     2,     2,     3,     3,     1,
+       1
 };
 
 
@@ -1241,7 +1245,7 @@ yyreduce:
   case 2: /* $@1: %empty  */
 #line 78 "engines/hypno/grammar_arc.y"
              { g_parsedArc->mode = (yyvsp[0].s); }
-#line 1245 "engines/hypno/grammar_arc.cpp"
+#line 1249 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 8: /* hline: CTOK NUM  */
@@ -1250,7 +1254,7 @@ yyreduce:
 		g_parsedArc->id = (yyvsp[0].i); 
 		HYPNO_ARC_default_sound_rate = 0;
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1254 "engines/hypno/grammar_arc.cpp"
+#line 1258 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 9: /* hline: FTOK NUM  */
@@ -1259,7 +1263,7 @@ yyreduce:
 		HYPNO_ARC_default_sound_rate = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i));
 	}
-#line 1263 "engines/hypno/grammar_arc.cpp"
+#line 1267 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 10: /* hline: DTOK NUM  */
@@ -1268,31 +1272,31 @@ yyreduce:
 		g_parsedArc->frameDelay = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 1272 "engines/hypno/grammar_arc.cpp"
+#line 1276 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 11: /* hline: PTOK NUM NUM  */
 #line 99 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1278 "engines/hypno/grammar_arc.cpp"
+#line 1282 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 12: /* hline: ATOK NUM NUM  */
 #line 100 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1284 "engines/hypno/grammar_arc.cpp"
+#line 1288 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 13: /* hline: VTOK NUM NUM  */
 #line 101 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1290 "engines/hypno/grammar_arc.cpp"
+#line 1294 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 14: /* hline: VTOK RESTOK  */
 #line 102 "engines/hypno/grammar_arc.y"
                       { debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1296 "engines/hypno/grammar_arc.cpp"
+#line 1300 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 15: /* hline: OTOK NUM NUM  */
@@ -1302,7 +1306,7 @@ yyreduce:
 		g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1306 "engines/hypno/grammar_arc.cpp"
+#line 1310 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 16: /* hline: ONTOK NUM NUM  */
@@ -1317,7 +1321,7 @@ yyreduce:
 		} else 
 			error("Invalid objective: '%s'", (yyvsp[-2].s));
 		debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1321 "engines/hypno/grammar_arc.cpp"
+#line 1325 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 17: /* hline: ONTOK NUM  */
@@ -1331,7 +1335,7 @@ yyreduce:
 			error("Invalid objective: '%s'", (yyvsp[-1].s));
 		debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
 	}
-#line 1335 "engines/hypno/grammar_arc.cpp"
+#line 1339 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 18: /* hline: TPTOK FILENAME NUM FILENAME  */
@@ -1342,7 +1346,7 @@ yyreduce:
 		g_parsedArc->transitionPalette = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s)); 
 	}
-#line 1346 "engines/hypno/grammar_arc.cpp"
+#line 1350 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 19: /* hline: TTOK FILENAME NUM  */
@@ -1352,13 +1356,13 @@ yyreduce:
 		g_parsedArc->transitionTime = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i)); 
 	}
-#line 1356 "engines/hypno/grammar_arc.cpp"
+#line 1360 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 20: /* hline: TTOK NONETOK NUM  */
 #line 138 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1362 "engines/hypno/grammar_arc.cpp"
+#line 1366 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 21: /* hline: NTOK FILENAME  */
@@ -1367,7 +1371,7 @@ yyreduce:
 		g_parsedArc->backgroundVideo = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s)); 
 	}
-#line 1371 "engines/hypno/grammar_arc.cpp"
+#line 1375 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 22: /* hline: NSTOK FILENAME  */
@@ -1376,7 +1380,7 @@ yyreduce:
 		g_parsedArc->backgroundVideo = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s)); 
 	}
-#line 1380 "engines/hypno/grammar_arc.cpp"
+#line 1384 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 23: /* hline: RTOK FILENAME  */
@@ -1384,7 +1388,7 @@ yyreduce:
                          {
 		g_parsedArc->backgroundPalette = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1388 "engines/hypno/grammar_arc.cpp"
+#line 1392 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 24: /* hline: ITOK FILENAME  */
@@ -1393,7 +1397,7 @@ yyreduce:
 		g_parsedArc->player = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1397 "engines/hypno/grammar_arc.cpp"
+#line 1401 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 25: /* hline: I1TOK FILENAME  */
@@ -1401,13 +1405,13 @@ yyreduce:
                          { 
 		debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s)); 
 	}
-#line 1405 "engines/hypno/grammar_arc.cpp"
+#line 1409 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 26: /* hline: QTOK NUM NUM  */
 #line 157 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1411 "engines/hypno/grammar_arc.cpp"
+#line 1415 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 27: /* hline: BNTOK FILENAME  */
@@ -1430,7 +1434,7 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s)); 
 	}
-#line 1434 "engines/hypno/grammar_arc.cpp"
+#line 1438 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 28: /* hline: SNTOK FILENAME enc  */
@@ -1457,7 +1461,7 @@ yyreduce:
 		}
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); 
 	}
-#line 1461 "engines/hypno/grammar_arc.cpp"
+#line 1465 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 29: /* hline: HETOK BYTE NUM NUM  */
@@ -1468,7 +1472,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HE %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1472 "engines/hypno/grammar_arc.cpp"
+#line 1476 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 30: /* hline: HLTOK BYTE NUM NUM  */
@@ -1478,7 +1482,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment); 
 		debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1482 "engines/hypno/grammar_arc.cpp"
+#line 1486 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 31: /* hline: HUTOK BYTE NUM NUM  */
@@ -1488,7 +1492,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1492 "engines/hypno/grammar_arc.cpp"
+#line 1496 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 32: /* hline: HTOK NAME NUM NUM  */
@@ -1499,7 +1503,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1503 "engines/hypno/grammar_arc.cpp"
+#line 1507 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 33: /* hline: HTOK RTOK NUM NUM  */
@@ -1509,7 +1513,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H R %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1513 "engines/hypno/grammar_arc.cpp"
+#line 1517 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 34: /* hline: HTOK ATOK NUM NUM  */
@@ -1519,7 +1523,7 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1523 "engines/hypno/grammar_arc.cpp"
+#line 1527 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 35: /* hline: HTOK PTOK NUM NUM  */
@@ -1529,43 +1533,53 @@ yyreduce:
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1533 "engines/hypno/grammar_arc.cpp"
+#line 1537 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 36: /* hline: H12TOK BYTE NUM NUM  */
+  case 36: /* hline: HTOK LTOK NUM NUM  */
 #line 235 "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 1547 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 37: /* hline: H12TOK BYTE NUM NUM  */
+#line 240 "engines/hypno/grammar_arc.y"
                               {
 		Segment segment('P', (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 1543 "engines/hypno/grammar_arc.cpp"
+#line 1557 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 37: /* hline: HTOK BYTE NUM NUM  */
-#line 240 "engines/hypno/grammar_arc.y"
+  case 38: /* hline: HTOK BYTE NUM NUM  */
+#line 245 "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 1553 "engines/hypno/grammar_arc.cpp"
+#line 1567 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 38: /* enc: ENCTOK  */
-#line 247 "engines/hypno/grammar_arc.y"
+  case 39: /* enc: ENCTOK  */
+#line 252 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1559 "engines/hypno/grammar_arc.cpp"
+#line 1573 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 39: /* enc: %empty  */
-#line 248 "engines/hypno/grammar_arc.y"
+  case 40: /* enc: %empty  */
+#line 253 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1565 "engines/hypno/grammar_arc.cpp"
+#line 1579 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 43: /* bline: FNTOK FILENAME  */
-#line 256 "engines/hypno/grammar_arc.y"
+  case 44: /* bline: FNTOK FILENAME  */
+#line 261 "engines/hypno/grammar_arc.y"
                       { 
 		shoot = new Shoot();
 		if (Common::String("F0") == (yyvsp[-1].s))
@@ -1574,288 +1588,305 @@ yyreduce:
 			shoot->explosionAnimation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1578 "engines/hypno/grammar_arc.cpp"
+#line 1592 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 44: /* bline: FNTOK NONETOK  */
-#line 264 "engines/hypno/grammar_arc.y"
+  case 45: /* bline: FNTOK NONETOK  */
+#line 269 "engines/hypno/grammar_arc.y"
                         { 
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE"); 
 	}
-#line 1588 "engines/hypno/grammar_arc.cpp"
+#line 1602 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 45: /* bline: FTOK FILENAME  */
-#line 269 "engines/hypno/grammar_arc.y"
+  case 46: /* bline: FTOK FILENAME  */
+#line 274 "engines/hypno/grammar_arc.y"
                         { 
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1598 "engines/hypno/grammar_arc.cpp"
+#line 1612 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 46: /* bline: ITOK NAME  */
-#line 274 "engines/hypno/grammar_arc.y"
+  case 47: /* bline: ITOK NAME  */
+#line 279 "engines/hypno/grammar_arc.y"
                      { 
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1607 "engines/hypno/grammar_arc.cpp"
+#line 1621 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 47: /* bline: ITOK BNTOK  */
-#line 278 "engines/hypno/grammar_arc.y"
+  case 48: /* bline: ITOK BNTOK  */
+#line 283 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1616 "engines/hypno/grammar_arc.cpp"
+#line 1630 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 48: /* bline: ITOK ATOK  */
-#line 282 "engines/hypno/grammar_arc.y"
+  case 49: /* bline: ITOK ATOK  */
+#line 287 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A"); 
 	}
-#line 1625 "engines/hypno/grammar_arc.cpp"
+#line 1639 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 49: /* bline: ITOK CTOK  */
-#line 286 "engines/hypno/grammar_arc.y"
+  case 50: /* bline: ITOK CTOK  */
+#line 291 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C"); 
 	}
-#line 1634 "engines/hypno/grammar_arc.cpp"
+#line 1648 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 50: /* bline: ITOK DTOK  */
-#line 290 "engines/hypno/grammar_arc.y"
+  case 51: /* bline: ITOK DTOK  */
+#line 295 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D"); 
 	}
-#line 1643 "engines/hypno/grammar_arc.cpp"
+#line 1657 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 51: /* bline: ITOK FTOK  */
-#line 294 "engines/hypno/grammar_arc.y"
+  case 52: /* bline: ITOK FTOK  */
+#line 299 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F"); 
 	}
-#line 1652 "engines/hypno/grammar_arc.cpp"
+#line 1666 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 52: /* bline: ITOK HTOK  */
-#line 298 "engines/hypno/grammar_arc.y"
+  case 53: /* bline: ITOK HTOK  */
+#line 303 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H"); 
 	}
-#line 1661 "engines/hypno/grammar_arc.cpp"
+#line 1675 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 53: /* bline: ITOK ITOK  */
-#line 302 "engines/hypno/grammar_arc.y"
+  case 54: /* bline: ITOK ITOK  */
+#line 307 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I"); 
 	}
-#line 1670 "engines/hypno/grammar_arc.cpp"
+#line 1684 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 54: /* bline: ITOK JTOK  */
-#line 306 "engines/hypno/grammar_arc.y"
+  case 55: /* bline: ITOK JTOK  */
+#line 311 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J"); 
 	}
-#line 1679 "engines/hypno/grammar_arc.cpp"
+#line 1693 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 55: /* bline: ITOK NTOK  */
-#line 310 "engines/hypno/grammar_arc.y"
+  case 56: /* bline: ITOK NTOK  */
+#line 315 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N"); 
 	}
-#line 1688 "engines/hypno/grammar_arc.cpp"
+#line 1702 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 56: /* bline: ITOK OTOK  */
-#line 314 "engines/hypno/grammar_arc.y"
+  case 57: /* bline: ITOK OTOK  */
+#line 319 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O"); 
 	}
-#line 1697 "engines/hypno/grammar_arc.cpp"
+#line 1711 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 57: /* bline: ITOK PTOK  */
-#line 318 "engines/hypno/grammar_arc.y"
+  case 58: /* bline: ITOK PTOK  */
+#line 323 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P"); 
 	}
-#line 1706 "engines/hypno/grammar_arc.cpp"
+#line 1720 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 58: /* bline: ITOK QTOK  */
-#line 322 "engines/hypno/grammar_arc.y"
+  case 59: /* bline: ITOK QTOK  */
+#line 327 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q"); 
 	}
-#line 1715 "engines/hypno/grammar_arc.cpp"
+#line 1729 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 59: /* bline: ITOK RTOK  */
-#line 326 "engines/hypno/grammar_arc.y"
+  case 60: /* bline: ITOK RTOK  */
+#line 331 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R"); 
 	}
-#line 1724 "engines/hypno/grammar_arc.cpp"
+#line 1738 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 60: /* bline: ITOK SNTOK  */
-#line 330 "engines/hypno/grammar_arc.y"
+  case 61: /* bline: ITOK SNTOK  */
+#line 335 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1733 "engines/hypno/grammar_arc.cpp"
+#line 1747 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 61: /* bline: ITOK TTOK  */
-#line 334 "engines/hypno/grammar_arc.y"
+  case 62: /* bline: ITOK TTOK  */
+#line 339 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T"); 
 	}
-#line 1742 "engines/hypno/grammar_arc.cpp"
+#line 1756 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 63: /* bline: ITOK LTOK  */
+#line 343 "engines/hypno/grammar_arc.y"
+                     { // Workaround for NAME == L
+		shoot->name = "L";
+		debugC(1, kHypnoDebugParser, "I L"); 
+	}
+#line 1765 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 62: /* bline: JTOK NUM  */
-#line 338 "engines/hypno/grammar_arc.y"
+  case 64: /* bline: JTOK NUM  */
+#line 347 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i)); 
 	}
-#line 1750 "engines/hypno/grammar_arc.cpp"
+#line 1773 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 63: /* bline: A0TOK NUM NUM  */
-#line 341 "engines/hypno/grammar_arc.y"
+  case 65: /* bline: A0TOK NUM NUM  */
+#line 350 "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 1759 "engines/hypno/grammar_arc.cpp"
+#line 1782 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 64: /* bline: RTOK NUM NUM  */
-#line 345 "engines/hypno/grammar_arc.y"
+  case 66: /* bline: RTOK NUM NUM  */
+#line 354 "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 1769 "engines/hypno/grammar_arc.cpp"
+#line 1792 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 65: /* bline: R01TOK NUM NUM  */
-#line 350 "engines/hypno/grammar_arc.y"
+  case 67: /* bline: R01TOK NUM NUM  */
+#line 359 "engines/hypno/grammar_arc.y"
                           { 
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R0/1 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1778 "engines/hypno/grammar_arc.cpp"
+#line 1801 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 66: /* bline: BNTOK NUM NUM  */
-#line 354 "engines/hypno/grammar_arc.y"
+  case 68: /* bline: BNTOK NUM NUM  */
+#line 363 "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 1788 "engines/hypno/grammar_arc.cpp"
+#line 1811 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 67: /* bline: KNTOK NUM NUM  */
-#line 359 "engines/hypno/grammar_arc.y"
+  case 69: /* bline: KNTOK NUM NUM  */
+#line 368 "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 1798 "engines/hypno/grammar_arc.cpp"
+#line 1821 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 68: /* bline: P0TOK NUM NUM  */
-#line 364 "engines/hypno/grammar_arc.y"
+  case 70: /* bline: P0TOK NUM NUM  */
+#line 373 "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 1807 "engines/hypno/grammar_arc.cpp"
+#line 1830 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 69: /* bline: OTOK NUM NUM  */
-#line 368 "engines/hypno/grammar_arc.y"
+  case 71: /* bline: OTOK NUM NUM  */
+#line 377 "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 1818 "engines/hypno/grammar_arc.cpp"
+#line 1841 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 70: /* bline: CTOK NUM  */
-#line 374 "engines/hypno/grammar_arc.y"
+  case 72: /* bline: CTOK NUM  */
+#line 383 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1824 "engines/hypno/grammar_arc.cpp"
+#line 1847 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 71: /* bline: HTOK NUM  */
-#line 375 "engines/hypno/grammar_arc.y"
+  case 73: /* bline: HTOK NUM  */
+#line 384 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrames.push_back((yyvsp[0].i)); 
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1832 "engines/hypno/grammar_arc.cpp"
+#line 1855 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 72: /* bline: VTOK NUM  */
-#line 378 "engines/hypno/grammar_arc.y"
+  case 74: /* bline: VTOK NUM  */
+#line 387 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1838 "engines/hypno/grammar_arc.cpp"
+#line 1861 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 73: /* bline: WTOK NUM  */
-#line 379 "engines/hypno/grammar_arc.y"
+  case 75: /* bline: WTOK NUM  */
+#line 388 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1846 "engines/hypno/grammar_arc.cpp"
+#line 1869 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 74: /* bline: DTOK NUM  */
-#line 382 "engines/hypno/grammar_arc.y"
+  case 76: /* bline: DTOK NUM  */
+#line 391 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i)); 
 	}
-#line 1855 "engines/hypno/grammar_arc.cpp"
+#line 1878 "engines/hypno/grammar_arc.cpp"
+    break;
+
+  case 77: /* bline: LTOK NUM NUM  */
+#line 395 "engines/hypno/grammar_arc.y"
+                       {
+		debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
+	}
+#line 1886 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 75: /* bline: SNTOK FILENAME enc  */
-#line 386 "engines/hypno/grammar_arc.y"
+  case 78: /* bline: SNTOK FILENAME enc  */
+#line 398 "engines/hypno/grammar_arc.y"
                              { 
 		if (Common::String("S1") == (yyvsp[-2].s))
 			shoot->deathSound = (yyvsp[-1].s);
@@ -1863,28 +1894,28 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 		 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 1867 "engines/hypno/grammar_arc.cpp"
+#line 1898 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 76: /* bline: NTOK  */
-#line 393 "engines/hypno/grammar_arc.y"
+  case 79: /* bline: NTOK  */
+#line 405 "engines/hypno/grammar_arc.y"
                { debugC(1, kHypnoDebugParser, "N"); }
-#line 1873 "engines/hypno/grammar_arc.cpp"
+#line 1904 "engines/hypno/grammar_arc.cpp"
     break;
 
-  case 77: /* bline: ZTOK  */
-#line 394 "engines/hypno/grammar_arc.y"
+  case 80: /* bline: ZTOK  */
+#line 406 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot); 
 		//delete shoot; 
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z"); 
 	}
-#line 1884 "engines/hypno/grammar_arc.cpp"
+#line 1915 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 1888 "engines/hypno/grammar_arc.cpp"
+#line 1919 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 523254598e9..85e8973b62f 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -60,7 +60,7 @@ using namespace Hypno;
 %token<i> NUM BYTE
 // header
 %token COMMENT CTOK DTOK HTOK HETOK HLTOK H12TOK HUTOK RETTOK QTOK RESTOK
-%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK NTOK NSTOK RTOK R01TOK ITOK I1TOK JTOK ZTOK
+%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK LTOK NTOK NSTOK RTOK R01TOK ITOK I1TOK JTOK ZTOK
 
 // body
 %token NONETOK A0TOK P0TOK WTOK
@@ -232,6 +232,11 @@ hline: 	CTOK NUM {
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", $3, $4); 
 	}
+	| HTOK LTOK NUM NUM { // Workaround for BYTE == P
+		Segment segment('L', $4, $3);
+		g_parsedArc->segments.push_back(segment);
+		debugC(1, kHypnoDebugParser, "H P %d %d", $3, $4); 
+	}
 	| H12TOK BYTE NUM NUM {
 		Segment segment('P', $4, $3);
 		g_parsedArc->segments.push_back(segment);
@@ -335,6 +340,10 @@ bline: FNTOK FILENAME {
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T"); 
 	}
+	| ITOK LTOK  { // Workaround for NAME == L
+		shoot->name = "L";
+		debugC(1, kHypnoDebugParser, "I L"); 
+	}
 	| JTOK NUM  {
 		debugC(1, kHypnoDebugParser, "J %d", $2); 
 	}
@@ -383,6 +392,9 @@ bline: FNTOK FILENAME {
 		shoot->pointsToShoot = $2;  
 		debugC(1, kHypnoDebugParser, "D %d", $2); 
 	}
+	| LTOK NUM NUM {
+		debugC(1, kHypnoDebugParser, "L %d %d", $2, $3); 
+	}
 	| SNTOK FILENAME enc { 
 		if (Common::String("S1") == $1)
 			shoot->deathSound = $2;
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index c0282dba904..2358f521601 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 46
-#define YY_END_OF_BUFFER 47
+#define YY_NUM_RULES 47
+#define YY_END_OF_BUFFER 48
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -642,16 +642,16 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[78] =
+static const flex_int16_t yy_accept[79] =
     {   0,
-        0,    0,   47,   45,   44,   42,   42,   45,   37,   37,
-       37,   37,   45,   10,   38,    2,    3,   38,   28,    8,
-       18,   20,   38,   14,   12,    9,   21,   16,   38,   25,
-       11,   23,   24,   38,   22,   38,   44,   37,   40,   37,
-       37,   37,   37,    0,   39,   30,   38,   31,   27,    7,
-        4,    5,    6,   19,   32,   15,   38,   13,   33,   17,
-       29,   26,   34,   38,   36,   36,   35,   35,   37,   43,
-       38,    0,    1,    0,    0,   41,    0
+        0,    0,   48,   46,   45,   43,   43,   46,   38,   38,
+       38,   38,   46,   10,   39,    2,    3,   39,   29,    8,
+       19,   21,   39,   14,   15,   12,    9,   22,   17,   39,
+       26,   11,   24,   25,   39,   23,   39,   45,   38,   41,
+       38,   38,   38,   38,    0,   40,   31,   39,   32,   28,
+        7,    4,    5,    6,   20,   33,   16,   39,   13,   34,
+       18,   30,   27,   35,   39,   37,   37,   36,   36,   38,
+       44,   39,    0,    1,    0,    0,   42,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -695,65 +695,65 @@ static const YY_CHAR yy_meta[45] =
         4,    4,    4,    1
     } ;
 
-static const flex_int16_t yy_base[84] =
+static const flex_int16_t yy_base[85] =
     {   0,
-        0,    0,  206,  207,  203,  207,  207,   36,   41,   46,
-       51,   56,    0,   62,   64,  196,  195,  186,   77,   83,
-       87,  181,   95,   91,  102,   92,  179,  105,  112,   84,
-      177,  175,  174,   90,  173,    0,  178,  125,    0,  130,
-      135,  124,  142,  174,    0,  168,  167,  166,  165,  164,
-      162,  157,  156,  155,  154,  207,  142,  153,  151,  150,
-      149,  148,  147,    0,    0,  207,    0,  207,  146,  150,
-      110,  142,  120,  117,  107,  207,  207,  188,  192,  194,
-      196,   74,  198
+        0,    0,  207,  208,  204,  208,  208,   36,   41,   46,
+       51,   56,    0,   62,   64,  197,  196,  195,   77,   83,
+       87,  186,   95,  181,   91,  102,   92,  179,  105,  112,
+       84,  177,  175,  174,   90,  173,    0,  178,  125,    0,
+      130,  135,  124,  142,  174,    0,  168,  167,  166,  165,
+      164,  162,  157,  156,  155,  154,  208,  142,  153,  151,
+      150,  149,  148,  147,    0,    0,  208,    0,  208,  146,
+      150,  110,  142,  120,  117,  107,  208,  208,  188,  192,
+      194,  196,   74,  198
     } ;
 
-static const flex_int16_t yy_def[84] =
+static const flex_int16_t yy_def[85] =
     {   0,
-       77,    1,   77,   77,   77,   77,   77,   77,   78,   78,
-       78,   78,   79,   80,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   81,   80,   82,   77,   77,   78,   78,
-       78,   41,   41,   79,   83,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   77,   80,   80,   80,   80,
-       80,   80,   80,   82,   78,   77,   78,   77,   41,   79,
-       80,   77,   80,   77,   77,   77,    0,   77,   77,   77,
-       77,   77,   77
+       78,    1,   78,   78,   78,   78,   78,   78,   79,   79,
+       79,   79,   80,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   82,   81,   83,   78,   78,   79,
+       79,   79,   42,   42,   80,   84,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   78,   81,   81,   81,
+       81,   81,   81,   81,   83,   79,   78,   79,   78,   42,
+       80,   81,   78,   81,   78,   78,   78,    0,   78,   78,
+       78,   78,   78,   78
     } ;
 
-static const flex_int16_t yy_nxt[252] =
+static const flex_int16_t yy_nxt[253] =
     {   0,
         4,    5,    6,    7,    4,    4,    8,    4,    9,   10,
        11,   12,    9,   13,   14,   15,   16,   17,   18,   19,
-       18,   20,   21,   22,   23,   18,   24,   25,   26,   27,
-       28,   29,   30,   18,   31,   32,   33,   34,   35,   36,
-       18,   18,   18,    7,   38,   38,   38,   38,   38,   40,
-       40,   40,   40,   40,   40,   41,   40,   40,   40,   40,
-       40,   42,   40,   40,   40,   40,   43,   40,   40,   45,
-       46,   45,   48,   48,   48,   48,   48,   64,   48,   48,
-       48,   48,   48,   48,   45,   49,   49,   49,   49,   49,
-       45,   45,   50,   50,   45,   56,   54,   45,   45,   45,
-
-       59,   51,   45,   55,   55,   55,   55,   55,   52,   45,
-       58,   58,   45,   60,   60,   76,   53,   45,   57,   45,
-       61,   61,   61,   61,   61,   75,   62,   45,   73,   47,
-       47,   47,   47,   38,   38,   38,   38,   38,   40,   40,
-       40,   40,   40,   40,   40,   40,   40,   40,   67,   45,
-       69,   72,   74,   70,   45,   45,   45,   45,   45,   65,
-       45,   45,   45,   45,   45,   67,   39,   68,   71,   45,
-       39,   45,   45,   45,   45,   45,   65,   70,   66,   37,
-       45,   45,   45,   39,   45,   77,   45,   39,   45,   77,
-       39,   39,   44,   45,   44,   44,   47,   47,   63,   63,
-
-       45,   45,   45,   45,   37,   77,    3,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77
+       18,   20,   21,   22,   23,   24,   25,   26,   27,   28,
+       29,   30,   31,   18,   32,   33,   34,   35,   36,   37,
+       18,   18,   18,    7,   39,   39,   39,   39,   39,   41,
+       41,   41,   41,   41,   41,   42,   41,   41,   41,   41,
+       41,   43,   41,   41,   41,   41,   44,   41,   41,   46,
+       47,   46,   49,   49,   49,   49,   49,   65,   49,   49,
+       49,   49,   49,   49,   46,   50,   50,   50,   50,   50,
+       46,   46,   51,   51,   46,   57,   55,   46,   46,   46,
+
+       60,   52,   46,   56,   56,   56,   56,   56,   53,   46,
+       59,   59,   46,   61,   61,   77,   54,   46,   58,   46,
+       62,   62,   62,   62,   62,   76,   63,   46,   74,   48,
+       48,   48,   48,   39,   39,   39,   39,   39,   41,   41,
+       41,   41,   41,   41,   41,   41,   41,   41,   68,   46,
+       70,   73,   75,   71,   46,   46,   46,   46,   46,   66,
+       46,   46,   46,   46,   46,   68,   40,   69,   72,   46,
+       40,   46,   46,   46,   46,   46,   66,   71,   67,   38,
+       46,   46,   46,   40,   46,   78,   46,   40,   46,   78,
+       40,   40,   45,   46,   45,   45,   48,   48,   64,   64,
+
+       46,   46,   46,   46,   46,   38,   78,    3,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78
     } ;
 
-static const flex_int16_t yy_chk[252] =
+static const flex_int16_t yy_chk[253] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -762,35 +762,35 @@ static const flex_int16_t yy_chk[252] =
         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,   15,   15,   15,   15,   15,   15,   82,   15,   15,
+       14,   15,   15,   15,   15,   15,   15,   83,   15,   15,
        15,   15,   15,   15,   19,   19,   19,   19,   19,   19,
-       20,   30,   20,   20,   21,   24,   21,   34,   24,   26,
-
-       26,   20,   23,   23,   23,   23,   23,   23,   20,   25,
-       25,   25,   28,   28,   28,   75,   20,   71,   24,   29,
-       29,   29,   29,   29,   29,   74,   30,   73,   71,   34,
-       34,   34,   34,   38,   38,   38,   38,   38,   40,   40,
-       40,   40,   40,   41,   41,   41,   41,   41,   42,   57,
-       43,   69,   72,   70,   63,   62,   61,   60,   59,   41,
-       58,   55,   54,   53,   52,   42,   43,   42,   57,   51,
-       69,   50,   49,   48,   47,   46,   41,   44,   41,   37,
-       35,   33,   32,   43,   31,   43,   27,   69,   22,   69,
-       78,   78,   79,   18,   79,   79,   80,   80,   81,   81,
-
-       83,   83,   17,   16,    5,    3,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77
+       20,   31,   20,   20,   21,   25,   21,   35,   25,   27,
+
+       27,   20,   23,   23,   23,   23,   23,   23,   20,   26,
+       26,   26,   29,   29,   29,   76,   20,   72,   25,   30,
+       30,   30,   30,   30,   30,   75,   31,   74,   72,   35,
+       35,   35,   35,   39,   39,   39,   39,   39,   41,   41,
+       41,   41,   41,   42,   42,   42,   42,   42,   43,   58,
+       44,   70,   73,   71,   64,   63,   62,   61,   60,   42,
+       59,   56,   55,   54,   53,   43,   44,   43,   58,   52,
+       70,   51,   50,   49,   48,   47,   42,   45,   42,   38,
+       36,   34,   33,   44,   32,   44,   28,   70,   24,   70,
+       79,   79,   80,   22,   80,   80,   81,   81,   82,   82,
+
+       84,   84,   18,   17,   16,    5,    3,   78,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[47] =
+static const flex_int32_t yy_rule_can_match_eol[48] =
     {   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, 1, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -1082,13 +1082,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 >= 78 )
+				if ( yy_current_state >= 79 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 77 );
+		while ( yy_current_state != 78 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1186,112 +1186,112 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
 case 14:
 YY_RULE_SETUP
 #line 56 "engines/hypno/lexer_arc.l"
-return NTOK;
+return LTOK;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 57 "engines/hypno/lexer_arc.l"
-return NSTOK;
+return NTOK;
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 58 "engines/hypno/lexer_arc.l"
-return RTOK;
+return NSTOK;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 59 "engines/hypno/lexer_arc.l"
-return R01TOK;
+return RTOK;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 60 "engines/hypno/lexer_arc.l"
-return ITOK;
+return R01TOK;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 61 "engines/hypno/lexer_arc.l"
-return I1TOK;
+return ITOK;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 62 "engines/hypno/lexer_arc.l"
-return JTOK;
+return I1TOK;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 63 "engines/hypno/lexer_arc.l"
-return QTOK;
+return JTOK;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 64 "engines/hypno/lexer_arc.l"
-return ZTOK;
+return QTOK;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 65 "engines/hypno/lexer_arc.l"
-return WTOK;
+return ZTOK;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 66 "engines/hypno/lexer_arc.l"
-return XTOK;
+return WTOK;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 67 "engines/hypno/lexer_arc.l"
-return TTOK;
+return XTOK;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 68 "engines/hypno/lexer_arc.l"
-return TPTOK;
+return TTOK;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 69 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
+return TPTOK;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 70 "engines/hypno/lexer_arc.l"
-return FTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 71 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+return FTOK;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 72 "engines/hypno/lexer_arc.l"
-return A0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 73 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+return A0TOK;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 74 "engines/hypno/lexer_arc.l"
-return KNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 75 "engines/hypno/lexer_arc.l"
-return P0TOK;
+return KNTOK;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 76 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
+return P0TOK;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 77 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
@@ -1301,17 +1301,17 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 case 37:
 YY_RULE_SETUP
 #line 79 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 80 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 81 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
@@ -1321,35 +1321,40 @@ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 case 41:
 YY_RULE_SETUP
 #line 83 "engines/hypno/lexer_arc.l"
-return RESTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 	YY_BREAK
 case 42:
-/* rule 42 can match eol */
 YY_RULE_SETUP
 #line 84 "engines/hypno/lexer_arc.l"
-return RETTOK;
+return RESTOK;
 	YY_BREAK
 case 43:
+/* rule 43 can match eol */
 YY_RULE_SETUP
 #line 85 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+return RETTOK;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 86 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+/* ignore comment */
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 87 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+/* ignore whitespace */;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 88 "engines/hypno/lexer_arc.l"
+HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 89 "engines/hypno/lexer_arc.l"
 ECHO;
 	YY_BREAK
-#line 1352 "engines/hypno/lexer_arc.cpp"
+#line 1357 "engines/hypno/lexer_arc.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1647,7 +1652,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 >= 78 )
+			if ( yy_current_state >= 79 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1675,11 +1680,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 >= 78 )
+		if ( yy_current_state >= 79 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 77);
+	yy_is_jam = (yy_current_state == 78);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2326,7 +2331,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 88 "engines/hypno/lexer_arc.l"
+#line 89 "engines/hypno/lexer_arc.l"
 
 
 namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index e0aafb8020f..801082e1b60 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -53,6 +53,7 @@ A							return ATOK;
 V							return VTOK;
 O							return OTOK;
 O[0-1]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
+L							return LTOK;
 N							return NTOK;
 N\*							return NSTOK;
 R							return RTOK;
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index 80b175db597..f44ce29257b 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -91,21 +91,22 @@ extern int HYPNO_ARC_debug;
     ATOK = 284,                    /* ATOK  */
     VTOK = 285,                    /* VTOK  */
     OTOK = 286,                    /* OTOK  */
-    NTOK = 287,                    /* NTOK  */
-    NSTOK = 288,                   /* NSTOK  */
-    RTOK = 289,                    /* RTOK  */
-    R01TOK = 290,                  /* R01TOK  */
-    ITOK = 291,                    /* ITOK  */
-    I1TOK = 292,                   /* I1TOK  */
-    JTOK = 293,                    /* JTOK  */
-    ZTOK = 294,                    /* ZTOK  */
-    NONETOK = 295,                 /* NONETOK  */
-    A0TOK = 296,                   /* A0TOK  */
-    P0TOK = 297,                   /* P0TOK  */
-    WTOK = 298,                    /* WTOK  */
-    XTOK = 299,                    /* XTOK  */
-    CB3TOK = 300,                  /* CB3TOK  */
-    C02TOK = 301                   /* C02TOK  */
+    LTOK = 287,                    /* LTOK  */
+    NTOK = 288,                    /* NTOK  */
+    NSTOK = 289,                   /* NSTOK  */
+    RTOK = 290,                    /* RTOK  */
+    R01TOK = 291,                  /* R01TOK  */
+    ITOK = 292,                    /* ITOK  */
+    I1TOK = 293,                   /* I1TOK  */
+    JTOK = 294,                    /* JTOK  */
+    ZTOK = 295,                    /* ZTOK  */
+    NONETOK = 296,                 /* NONETOK  */
+    A0TOK = 297,                   /* A0TOK  */
+    P0TOK = 298,                   /* P0TOK  */
+    WTOK = 299,                    /* WTOK  */
+    XTOK = 300,                    /* XTOK  */
+    CB3TOK = 301,                  /* CB3TOK  */
+    C02TOK = 302                   /* C02TOK  */
   };
   typedef enum HYPNO_ARC_tokentype HYPNO_ARC_token_kind_t;
 #endif
@@ -119,7 +120,7 @@ union HYPNO_ARC_STYPE
 	char *s; /* string value */
 	int i;	 /* integer value */
 
-#line 123 "engines/hypno/tokens_arc.h"
+#line 124 "engines/hypno/tokens_arc.h"
 
 };
 typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index a156792c113..60bc339ce22 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -310,9 +310,9 @@ void WetEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c441.mi_", "c51", "<check_lives>", "");
 	loadArcadeLevel("c442.mi_", "c51", "<check_lives>", "");
 
-	//loadArcadeLevel("c400.mi_", "???", "");
-	//loadArcadeLevel("c401.mi_", "???", "");
-	//loadArcadeLevel("c402.mi_", "???", "");
+	loadArcadeLevel("c400.mi_", "c51", "<check_lives>", "");
+	loadArcadeLevel("c401.mi_", "c51", "<check_lives>", "");
+	loadArcadeLevel("c402.mi_", "c51", "<check_lives>", "");
 
 	loadArcadeLevel("c510.mi_", "c52", "<check_lives>", "");
 	loadArcadeLevel("c511.mi_", "c52", "<check_lives>", "");
@@ -326,8 +326,13 @@ void WetEngine::loadAssetsFullGame() {
 	ArcadeShooting *arc = (ArcadeShooting*) _levels["c500.mi_"];
 	arc->id = 50; // Fixed from the original (5)
 
-	//loadArcadeLevel("c501.mi_", "???", "");
-	//loadArcadeLevel("c502.mi_", "???", "");
+	loadArcadeLevel("c501.mi_", "c61", "<check_lives>", "");
+	arc = (ArcadeShooting*) _levels["c501.mi_"];
+	arc->id = 50; // Fixed from the original (5)
+
+	loadArcadeLevel("c502.mi_", "c61", "<check_lives>", "");
+	arc = (ArcadeShooting*) _levels["c502.mi_"];
+	arc->id = 50; // Fixed from the original (5)
 
 	loadArcadeLevel("c610.mi_", "c60", "<check_lives>", "");
 	loadArcadeLevel("c611.mi_", "c60", "<check_lives>", "");


Commit: 5e6c3af2b3cad0c4f8afaaa21f080310b9524b05
    https://github.com/scummvm/scummvm/commit/5e6c3af2b3cad0c4f8afaaa21f080310b9524b05
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-02-24T18:12:29+01:00

Commit Message:
HYPNO: refactor runBeforeArcade code to include image flipping, if necessary

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


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 96bd0420a2d..6e72049aa69 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -186,31 +186,8 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 	debugC(1, kHypnoDebugArcade, "Starting segment of type %x", segments[_segmentIdx].type);
 	changeCursor("arcade");
 	_shoots.clear();
-	if (!arc->player.empty())
-		_playerFrames = decodeFrames(arc->player);
-	_playerFrameSep = 0;
-	// Only used in spider
-	_currentPlayerPosition = kPlayerLeft;
-	_lastPlayerPosition = kPlayerLeft;
 	_skipLevel = false;
 
-	for (Frames::iterator it =_playerFrames.begin(); it != _playerFrames.end(); ++it) {
-		if ((*it)->getPixel(0, 0) == 255)
-			break;
-		if ((*it)->getPixel(0, 0) == 252)
-			break;
-
-		_playerFrameSep++;
-	}
-
-	if (_playerFrameSep == (int)_playerFrames.size()) {
-		debugC(1, kHypnoDebugArcade, "No player separator frame found in %s! (size: %d)", arc->player.c_str(), _playerFrames.size());
-		//_playerFrameSep = -1;
-	} else 
-		debugC(1, kHypnoDebugArcade, "Separator frame found at %d", _playerFrameSep);
-
-	_playerFrameIdx = -1;
-
 	MVideo background = MVideo(arc->backgroundVideo, Common::Point(0, 0), false, false, false);
 
 	changeCursor("arcade");
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 9ff9ed7f483..c85e758437f 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -337,6 +337,8 @@ public:
 	void drawHealth() override;
 	void hitPlayer() override;
 
+	// Arcade
+	void runBeforeArcade(ArcadeShooting *arc) override;
 	void findNextSegment(ArcadeShooting *arc) override;
 	void initSegment(ArcadeShooting *arc) override;
 	bool checkArcadeLevelCompleted(MVideo &background, Segment segment) override;
diff --git a/engines/hypno/spider/arcade.cpp b/engines/hypno/spider/arcade.cpp
index cfb30704840..b32732f1370 100644
--- a/engines/hypno/spider/arcade.cpp
+++ b/engines/hypno/spider/arcade.cpp
@@ -33,6 +33,30 @@ static const int oIndexYE[9] = {4, 3, 2, 1, 0};
 static const int shootOriginIndex[9][2] = {
 	{41, 3}, {51, 3}, {65, 6}, {68, 9}, {71, 22}, {57, 20}, {37, 14}, {37, 11}, {57, 20}};
 
+void SpiderEngine::runBeforeArcade(ArcadeShooting *arc) {
+	assert(!arc->player.empty());
+	_playerFrames = decodeFrames(arc->player);
+	_playerFrameSep = 0;
+
+	for (Frames::iterator it =_playerFrames.begin(); it != _playerFrames.end(); ++it) {
+		if ((*it)->getPixel(0, 0) == 255)
+			break;
+		if ((*it)->getPixel(0, 0) == 252)
+			break;
+
+		_playerFrameSep++;
+	}
+
+	if (_playerFrameSep == (int)_playerFrames.size()) {
+		debugC(1, kHypnoDebugArcade, "No player separator frame found in %s! (size: %d)", arc->player.c_str(), _playerFrames.size());
+	} else 
+		debugC(1, kHypnoDebugArcade, "Separator frame found at %d", _playerFrameSep);
+
+	_playerFrameIdx = -1;
+	_currentPlayerPosition = kPlayerLeft;
+	_lastPlayerPosition = kPlayerLeft;
+}
+
 void SpiderEngine::initSegment(ArcadeShooting *arc) {
 	_segmentShootSequenceOffset = 0;
 	_segmentShootSequenceMax = 0;
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index 58c9ecca581..6525c2d0b9a 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -195,6 +195,41 @@ void WetEngine::runBeforeArcade(ArcadeShooting *arc) {
 		runIntro(*video);
 		delete video;
 	}
+
+	if (!arc->player.empty()) {
+		_playerFrames = decodeFrames(arc->player);
+	}
+
+	if (arc->mode == "Y5")  { // This image is flipped, for some reason
+		for (Frames::iterator it = _playerFrames.begin(); it != _playerFrames.end(); ++it) {
+			for (int i = 0 ; i < (*it)->w ; i++) 
+				for (int j = 0 ; j < (*it)->h/2 ; j++) {
+					uint32 p1 = (*it)->getPixel(i, j);
+					uint32 p2 = (*it)->getPixel(i, (*it)->h - j - 1);
+					(*it)->setPixel(i, j, p2);
+					(*it)->setPixel(i, (*it)->h - j - 1, p1);
+				}
+		}
+	}
+
+	_playerFrameSep = 0;
+
+	for (Frames::iterator it =_playerFrames.begin(); it != _playerFrames.end(); ++it) {
+		if ((*it)->getPixel(0, 0) == 255)
+			break;
+		if ((*it)->getPixel(0, 0) == 252)
+			break;
+
+		_playerFrameSep++;
+	}
+
+	if (_playerFrameSep == (int)_playerFrames.size()) {
+		debugC(1, kHypnoDebugArcade, "No player separator frame found in %s! (size: %d)", arc->player.c_str(), _playerFrames.size());
+		//_playerFrameSep = -1;
+	} else 
+		debugC(1, kHypnoDebugArcade, "Separator frame found at %d", _playerFrameSep);
+
+	_playerFrameIdx = -1;
 }
 
 bool WetEngine::clickedSecondaryShoot(const Common::Point &mousePos) {


Commit: ebe066bcb5e6d5823f7fb6eff520e7988ba56a6a
    https://github.com/scummvm/scummvm/commit/ebe066bcb5e6d5823f7fb6eff520e7988ba56a6a
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-02-24T18:12:30+01:00

Commit Message:
HYPNO: fixed c400.mi_ id from the original in wet

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


diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 60bc339ce22..05e6bbfda05 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -41,6 +41,7 @@ static const chapterEntry rawChapterTable[] = {
 	{42, {70, 160}, {180, 160}, {220, 185}}, 	// c42
 	{43, {70, 160}, {180, 160}, {220, 185}}, 	// c43
 	{44, {70, 160}, {180, 160}, {220, 185}}, 	// c44
+	{40, {70, 160}, {180, 160}, {220, 185}}, 	// c40
 	{51, {60, 167}, {190, 167}, {135, 187}}, 	// c51
 	{52, {60, 167}, {190, 167}, {135, 187}}, 	// c52
 	{50, {19, 3},   {246, 3}, 	{246, 11}}, 	// c50 (fixed)
@@ -311,6 +312,9 @@ void WetEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c442.mi_", "c51", "<check_lives>", "");
 
 	loadArcadeLevel("c400.mi_", "c51", "<check_lives>", "");
+	ArcadeShooting *arc = (ArcadeShooting*) _levels["c400.mi_"];
+	arc->id = 40; // Fixed from the original (4)
+
 	loadArcadeLevel("c401.mi_", "c51", "<check_lives>", "");
 	loadArcadeLevel("c402.mi_", "c51", "<check_lives>", "");
 
@@ -323,7 +327,7 @@ void WetEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c522.mi_", "c61", "<check_lives>", "");
 
 	loadArcadeLevel("c500.mi_", "c61", "<check_lives>", "");
-	ArcadeShooting *arc = (ArcadeShooting*) _levels["c500.mi_"];
+	arc = (ArcadeShooting*) _levels["c500.mi_"];
 	arc->id = 50; // Fixed from the original (5)
 
 	loadArcadeLevel("c501.mi_", "c61", "<check_lives>", "");
@@ -345,7 +349,7 @@ void WetEngine::loadAssetsFullGame() {
 	loadLib("", "c_misc/fonts.lib", true);
 	loadFonts();
 	loadLib("sound/", "c_misc/sound.lib", true);
-	_nextLevel = "<start>";
+	_nextLevel = "c400.mi_";
 }
 
 void WetEngine::showCredits() {


Commit: dddf26620b7fbb504cd290cf0917651dbb60e0bf
    https://github.com/scummvm/scummvm/commit/dddf26620b7fbb504cd290cf0917651dbb60e0bf
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-02-24T18:12:30+01:00

Commit Message:
HYPNO: fixed ids from c401.mi_ and c402.mi_ in wet

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


diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 05e6bbfda05..94ff26e0423 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -316,7 +316,12 @@ void WetEngine::loadAssetsFullGame() {
 	arc->id = 40; // Fixed from the original (4)
 
 	loadArcadeLevel("c401.mi_", "c51", "<check_lives>", "");
+	arc = (ArcadeShooting*) _levels["c401.mi_"];
+	arc->id = 40; // Fixed from the original (4)
+
 	loadArcadeLevel("c402.mi_", "c51", "<check_lives>", "");
+	arc = (ArcadeShooting*) _levels["c402.mi_"];
+	arc->id = 40; // Fixed from the original (4)
 
 	loadArcadeLevel("c510.mi_", "c52", "<check_lives>", "");
 	loadArcadeLevel("c511.mi_", "c52", "<check_lives>", "");
@@ -349,7 +354,7 @@ void WetEngine::loadAssetsFullGame() {
 	loadLib("", "c_misc/fonts.lib", true);
 	loadFonts();
 	loadLib("sound/", "c_misc/sound.lib", true);
-	_nextLevel = "c400.mi_";
+	_nextLevel = "<start>";
 }
 
 void WetEngine::showCredits() {


Commit: 26463305d983bbf4404d18a4d6c2fe34687a41c1
    https://github.com/scummvm/scummvm/commit/26463305d983bbf4404d18a4d6c2fe34687a41c1
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-02-24T18:12:30+01:00

Commit Message:
HYPNO: allow c40 levels to load player images in wet

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


diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index 6525c2d0b9a..35e069c8625 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -200,7 +200,7 @@ void WetEngine::runBeforeArcade(ArcadeShooting *arc) {
 		_playerFrames = decodeFrames(arc->player);
 	}
 
-	if (arc->mode == "Y5")  { // This image is flipped, for some reason
+	if (arc->mode == "Y4" || arc->mode == "Y5")  { // These images are flipped, for some reason
 		for (Frames::iterator it = _playerFrames.begin(); it != _playerFrames.end(); ++it) {
 			for (int i = 0 ; i < (*it)->w ; i++) 
 				for (int j = 0 ; j < (*it)->h/2 ; j++) {
@@ -237,7 +237,7 @@ bool WetEngine::clickedSecondaryShoot(const Common::Point &mousePos) {
 }
 
 void WetEngine::hitPlayer() {
-	if (_arcadeMode != "Y1" && _arcadeMode != "Y5") {
+	if (_arcadeMode != "Y1" && _arcadeMode != "Y4" && _arcadeMode != "Y5") {
 		assert( _playerFrameSep < (int)_playerFrames.size());
 		if (_playerFrameIdx < _playerFrameSep)
 			_playerFrameIdx = _playerFrameSep;
@@ -288,6 +288,8 @@ void WetEngine::drawPlayer() {
 
 	if (_arcadeMode == "Y5")
 		_playerFrameIdx = 1;
+	else if (_arcadeMode == "Y4")
+		_playerFrameIdx = 2;
 
 	drawImage(*_playerFrames[_playerFrameIdx], 0, 200 - _playerFrames[_playerFrameIdx]->h + 1, true);
 }


Commit: 7d788fefa7f8e72c93d5b1d368b24fd06b453c0c
    https://github.com/scummvm/scummvm/commit/7d788fefa7f8e72c93d5b1d368b24fd06b453c0c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-02-24T18:12:30+01:00

Commit Message:
HYPNO: avoid crashing on level c30 in wet

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


diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index 35e069c8625..253a4623926 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -237,7 +237,7 @@ bool WetEngine::clickedSecondaryShoot(const Common::Point &mousePos) {
 }
 
 void WetEngine::hitPlayer() {
-	if (_arcadeMode != "Y1" && _arcadeMode != "Y4" && _arcadeMode != "Y5") {
+	if (_arcadeMode != "Y1" && _arcadeMode != "Y3" && _arcadeMode != "Y4" && _arcadeMode != "Y5") {
 		assert( _playerFrameSep < (int)_playerFrames.size());
 		if (_playerFrameIdx < _playerFrameSep)
 			_playerFrameIdx = _playerFrameSep;
@@ -274,7 +274,7 @@ void WetEngine::drawPlayer() {
 	if (i > 0)
 		drawString("block05.fgx", "TARGET  ACQUIRED", 116, 3, 80, c);
 
-	if (_arcadeMode == "Y1")
+	if (_arcadeMode == "Y1" || _arcadeMode == "Y3")
 		return;
 
 	if (_playerFrameIdx < _playerFrameSep) {
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 94ff26e0423..ce55d421bb5 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -37,6 +37,7 @@ static const chapterEntry rawChapterTable[] = {
 	{31, {70, 160}, {180, 160}, {220, 185}}, 	// c31
 	{32, {70, 160}, {180, 160}, {220, 185}}, 	// c32
 	{33, {70, 160}, {180, 160}, {220, 185}}, 	// c33
+	{30, {19, 3},   {246, 3}, 	{246, 11}}, 	// c30
 	{41, {70, 160}, {180, 160}, {220, 185}}, 	// c41
 	{42, {70, 160}, {180, 160}, {220, 185}}, 	// c42
 	{43, {70, 160}, {180, 160}, {220, 185}}, 	// c43
@@ -292,6 +293,9 @@ void WetEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c332.mi_", "c30", "<check_lives>", "");
 
 	loadArcadeLevel("c300.mi_", "c41", "<check_lives>", "");
+	ArcadeShooting *arc = (ArcadeShooting*) _levels["c300.mi_"];
+	arc->id = 30; // Fixed from the original (3)
+
 	loadArcadeLevel("c301.mi_", "c41", "<check_lives>", "");
 	loadArcadeLevel("c302.mi_", "c41", "<check_lives>", "");
 
@@ -312,7 +316,7 @@ void WetEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c442.mi_", "c51", "<check_lives>", "");
 
 	loadArcadeLevel("c400.mi_", "c51", "<check_lives>", "");
-	ArcadeShooting *arc = (ArcadeShooting*) _levels["c400.mi_"];
+	arc = (ArcadeShooting*) _levels["c400.mi_"];
 	arc->id = 40; // Fixed from the original (4)
 
 	loadArcadeLevel("c401.mi_", "c51", "<check_lives>", "");




More information about the Scummvm-git-logs mailing list