[Scummvm-git-logs] scummvm master -> dbf528d6824d3ba2bc32ff58f4401390904cbcb5

neuromancer noreply at scummvm.org
Wed Dec 22 13:35:28 UTC 2021


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

Summary:
c7e225ceba HYPNO: improved arcade parser to load the fan level and added some intros
dbf528d682 HYPNO: added lock puzzle and added some intros


Commit: c7e225cebaa923e6523c3b82e542ba565c6b6c39
    https://github.com/scummvm/scummvm/commit/c7e225cebaa923e6523c3b82e542ba565c6b6c39
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-12-22T14:34:31+01:00

Commit Message:
HYPNO: improved arcade parser to load the fan level and added some intros

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


diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 68397f39e9..e1d43c7629 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -162,20 +162,21 @@ extern int HYPNO_ARC_debug;
     ATOK = 277,
     VTOK = 278,
     OTOK = 279,
-    O1TOK = 280,
+    ONTOK = 280,
     NTOK = 281,
     RTOK = 282,
-    ITOK = 283,
-    JTOK = 284,
-    ZTOK = 285,
-    FNTOK = 286,
-    NONETOK = 287,
-    A0TOK = 288,
-    P0TOK = 289,
-    WTOK = 290,
-    XTOK = 291,
-    CB3TOK = 292,
-    C02TOK = 293
+    R0TOK = 283,
+    ITOK = 284,
+    JTOK = 285,
+    ZTOK = 286,
+    FNTOK = 287,
+    NONETOK = 288,
+    A0TOK = 289,
+    P0TOK = 290,
+    WTOK = 291,
+    XTOK = 292,
+    CB3TOK = 293,
+    C02TOK = 294
   };
 #endif
 
@@ -189,7 +190,7 @@ union HYPNO_ARC_STYPE
 	char *s; /* string value */
 	int i;	 /* integer value */
 
-#line 193 "engines/hypno/grammar_arc.cpp" /* yacc.c:355  */
+#line 194 "engines/hypno/grammar_arc.cpp" /* yacc.c:355  */
 };
 
 typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;
@@ -206,7 +207,7 @@ int HYPNO_ARC_parse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 210 "engines/hypno/grammar_arc.cpp" /* yacc.c:358  */
+#line 211 "engines/hypno/grammar_arc.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -448,21 +449,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  6
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   123
+#define YYLAST   125
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  39
+#define YYNTOKENS  40
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  8
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  65
+#define YYNRULES  66
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  131
+#define YYNSTATES  134
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   293
+#define YYMAXUTOK   294
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -500,7 +501,7 @@ static const yytype_uint8 yytranslate[] =
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38
+      35,    36,    37,    38,    39
 };
 
 #if HYPNO_ARC_DEBUG
@@ -512,8 +513,8 @@ static const yytype_uint16 yyrline[] =
      110,   111,   115,   116,   130,   142,   143,   144,   149,   150,
      153,   154,   155,   158,   163,   168,   173,   177,   181,   185,
      189,   193,   197,   201,   205,   209,   213,   217,   221,   225,
-     229,   233,   237,   240,   244,   245,   246,   251,   252,   255,
-     256,   259,   262,   266,   273,   274
+     229,   233,   237,   240,   244,   245,   246,   247,   252,   253,
+     256,   257,   260,   263,   267,   274,   275
 };
 #endif
 
@@ -525,8 +526,8 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "NAME", "FILENAME", "BNTOK", "SNTOK",
   "KNTOK", "YXTOK", "NUM", "COMMENT", "CTOK", "DTOK", "HTOK", "HETOK",
   "RETTOK", "QTOK", "ENCTOK", "PTOK", "FTOK", "TTOK", "TPTOK", "ATOK",
-  "VTOK", "OTOK", "O1TOK", "NTOK", "RTOK", "ITOK", "JTOK", "ZTOK", "FNTOK",
-  "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK", "C02TOK",
+  "VTOK", "OTOK", "ONTOK", "NTOK", "RTOK", "R0TOK", "ITOK", "JTOK", "ZTOK",
+  "FNTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK", "C02TOK",
   "$accept", "start", "$@1", "header", "hline", "enc", "body", "bline", YY_NULLPTR
 };
 #endif
@@ -539,14 +540,14 @@ static const yytype_uint16 yytoknum[] =
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294
 };
 # endif
 
-#define YYPACT_NINF -72
+#define YYPACT_NINF -37
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-72)))
+  (!!((Yystate) == (-37)))
 
 #define YYTABLE_NINF -1
 
@@ -557,20 +558,20 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int8 yypact[] =
 {
-       1,   -72,     1,    13,    55,   -72,   -72,    11,    23,     8,
-      28,     2,   -26,    55,    29,    31,    35,    -1,    41,    38,
-      42,    44,    46,    58,    59,    60,    54,    55,   -72,    48,
-     -72,   -72,    63,    76,    77,   -72,    78,    79,   -72,    80,
-      81,    82,    83,    84,    85,    86,   -72,   -72,   -72,    87,
-     -72,   -72,   -72,    88,    89,    90,   -72,   -72,   -72,   -72,
-      92,   -72,   -72,   -72,   -72,    -5,   -72,   -72,   -72,   -72,
-      91,    97,    94,    95,    96,    98,    -5,   102,    99,   -72,
-     100,    30,   101,   -72,     0,   103,   104,   105,    75,    -5,
-     106,    48,   107,   -72,   -72,   -72,   -72,   -72,   108,   109,
-     -72,   -72,   -72,   -72,   -72,   -72,   -72,   -72,   -72,   -72,
-     -72,   -72,   -72,   -72,   -72,   -72,   -72,   -72,   -72,   110,
-     111,   -72,   -72,   -72,   -72,   -72,   -72,   -72,   -72,   -72,
-     -72
+      -3,   -37,    -3,     9,    57,   -37,   -37,     7,    13,     4,
+      11,   -20,   -23,    57,    19,    26,    30,    -1,    37,    36,
+      39,    47,    50,    42,    60,    61,    35,    57,   -37,    68,
+     -37,   -37,    58,    65,    78,   -37,    79,    80,   -37,    81,
+      82,    83,    84,    85,    86,    87,   -37,   -37,   -37,    88,
+     -37,   -37,   -37,    89,    90,    91,   -37,   -37,   -37,   -37,
+      93,   -37,   -37,   -37,   -37,    -5,   -37,   -37,   -37,   -37,
+      92,    98,    95,    96,    97,    99,    -5,   103,   100,   -37,
+     101,   102,    31,   104,   -37,     0,   105,   106,   107,    75,
+      -5,   108,    68,   109,   -37,   -37,   -37,   -37,   -37,   110,
+     111,   112,   -37,   -37,   -37,   -37,   -37,   -37,   -37,   -37,
+     -37,   -37,   -37,   -37,   -37,   -37,   -37,   -37,   -37,   -37,
+     -37,   113,   114,   -37,   -37,   -37,   -37,   -37,   -37,   -37,
+     -37,   -37,   -37,   -37
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -585,25 +586,25 @@ static const yytype_uint8 yydefact[] =
        0,     0,     0,     0,     0,     0,    19,    20,    21,     0,
        5,    28,    24,     0,     0,     0,    22,    11,    17,    18,
        0,    12,    13,    14,    15,    32,    27,    26,    25,    16,
-       0,     0,     0,     0,     0,     0,    32,     0,     0,    64,
-       0,     0,     0,    65,     0,     0,     0,     0,     0,    32,
-       0,    29,     0,    59,    62,    60,    31,    35,     0,     0,
-      36,    37,    50,    39,    40,    42,    48,    47,    41,    51,
-      38,    46,    45,    49,    43,    44,    52,    33,    34,     0,
-       0,    61,     3,    30,    55,    63,    56,    58,    54,    53,
-      57
+       0,     0,     0,     0,     0,     0,    32,     0,     0,    65,
+       0,     0,     0,     0,    66,     0,     0,     0,     0,     0,
+      32,     0,    29,     0,    60,    63,    61,    31,    35,     0,
+       0,     0,    36,    37,    50,    39,    40,    42,    48,    47,
+      41,    51,    38,    46,    45,    49,    43,    44,    52,    33,
+      34,     0,     0,    62,     3,    30,    56,    64,    57,    59,
+      54,    55,    53,    58
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -72,   119,   -72,     7,   -72,    32,   -71,   -72
+     -37,   122,   -37,    25,   -37,    33,   -36,   -37
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     3,     4,    26,    27,    52,    88,    89
+      -1,     3,     4,    26,    27,    52,    89,    90
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -611,68 +612,68 @@ static const yytype_int8 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      70,    71,    72,    39,   117,    96,    73,    74,    75,     1,
-      76,    33,    34,     6,    77,    28,     2,    30,   123,    78,
-      35,    79,    80,    81,    82,    83,    84,    29,    85,    86,
-      87,    40,   118,   100,    50,   101,   102,    31,    36,    32,
-      37,   103,   104,   105,    38,    41,   106,    42,   107,   108,
-     109,    43,   110,    44,   111,    45,   112,   113,   114,   115,
-       7,     8,    46,    47,    48,    51,     9,    10,    11,    12,
-      13,    14,    53,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    49,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    69,    66,    67,    68,
-      90,    91,    65,    92,    93,    94,    97,    95,    98,    99,
-     116,   122,   119,   120,   121,   124,   126,   127,   128,   129,
-     130,     5,     0,   125
+      70,    71,    72,    39,   119,     1,    73,    74,    75,     6,
+      76,    28,     2,    30,    77,    33,    34,    29,    32,    78,
+      31,    79,    80,    81,    82,    83,    84,    85,    36,    86,
+      87,    88,    40,   120,   102,    37,   103,   104,    35,    38,
+      97,    41,   105,   106,   107,    42,    46,   108,    43,   109,
+     110,   111,    50,   112,   125,   113,    44,   114,   115,    45,
+     116,   117,     7,     8,    47,    48,    49,    53,     9,    10,
+      11,    12,    13,    14,    54,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    51,    25,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    69,    66,    67,
+      68,    91,    92,    65,    93,    94,    95,    98,    96,    99,
+     100,   101,   124,   118,   121,   122,   123,   126,   128,   129,
+     130,   131,   132,   133,     5,   127
 };
 
-static const yytype_int8 yycheck[] =
+static const yytype_uint8 yycheck[] =
 {
-       5,     6,     7,     4,     4,    76,    11,    12,    13,     8,
-      15,    37,    38,     0,    19,     4,    15,     9,    89,    24,
-      13,    26,    27,    28,    29,    30,    31,     4,    33,    34,
-      35,    32,    32,     3,    27,     5,     6,     9,     9,    37,
-       9,    11,    12,    13,     9,     4,    16,     9,    18,    19,
-      20,     9,    22,     9,    24,     9,    26,    27,    28,    29,
-       5,     6,     4,     4,     4,    17,    11,    12,    13,    14,
-      15,    16,     9,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    30,     9,     9,     9,     9,     9,
-       9,     9,     9,     9,     9,     9,     4,     9,     9,     9,
-       9,     4,    15,     9,     9,     9,     4,     9,     9,     9,
-       9,    36,     9,     9,     9,     9,     9,     9,     9,     9,
-       9,     2,    -1,    91
+       5,     6,     7,     4,     4,     8,    11,    12,    13,     0,
+      15,     4,    15,     9,    19,    38,    39,     4,    38,    24,
+       9,    26,    27,    28,    29,    30,    31,    32,     9,    34,
+      35,    36,    33,    33,     3,     9,     5,     6,    13,     9,
+      76,     4,    11,    12,    13,     9,     4,    16,     9,    18,
+      19,    20,    27,    22,    90,    24,     9,    26,    27,     9,
+      29,    30,     5,     6,     4,     4,    31,     9,    11,    12,
+      13,    14,    15,    16,     9,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    17,    29,     9,     9,     9,
+       9,     9,     9,     9,     9,     9,     9,     4,     9,     9,
+       9,     9,     4,    15,     9,     9,     9,     4,     9,     9,
+       9,     9,    37,     9,     9,     9,     9,     9,     9,     9,
+       9,     9,     9,     9,     2,    92
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     8,    15,    40,    41,    40,     0,     5,     6,    11,
+       0,     8,    15,    41,    42,    41,     0,     5,     6,    11,
       12,    13,    14,    15,    16,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    42,    43,     4,     4,
-       9,     9,    37,    37,    38,    42,     9,     9,     9,     4,
-      32,     4,     9,     9,     9,     9,     4,     4,     4,    30,
-      42,    17,    44,     9,     9,     9,     9,     9,     9,     9,
+      23,    24,    25,    26,    27,    29,    43,    44,     4,     4,
+       9,     9,    38,    38,    39,    43,     9,     9,     9,     4,
+      33,     4,     9,     9,     9,     9,     4,     4,     4,    31,
+      43,    17,    45,     9,     9,     9,     9,     9,     9,     9,
        9,     9,     9,     9,     9,    15,     9,     9,     9,     4,
        5,     6,     7,    11,    12,    13,    15,    19,    24,    26,
-      27,    28,    29,    30,    31,    33,    34,    35,    45,    46,
-       9,     4,     9,     9,     9,     9,    45,     4,     9,     9,
-       3,     5,     6,    11,    12,    13,    16,    18,    19,    20,
-      22,    24,    26,    27,    28,    29,     9,     4,    32,     9,
-       9,     9,    36,    45,     9,    44,     9,     9,     9,     9,
-       9
+      27,    28,    29,    30,    31,    32,    34,    35,    36,    46,
+      47,     9,     4,     9,     9,     9,     9,    46,     4,     9,
+       9,     9,     3,     5,     6,    11,    12,    13,    16,    18,
+      19,    20,    22,    24,    26,    27,    29,    30,     9,     4,
+      33,     9,     9,     9,    37,    46,     9,    45,     9,     9,
+       9,     9,     9,     9
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    39,    41,    40,    40,    42,    42,    42,    43,    43,
-      43,    43,    43,    43,    43,    43,    43,    43,    43,    43,
-      43,    43,    43,    43,    43,    43,    43,    43,    44,    44,
-      45,    45,    45,    46,    46,    46,    46,    46,    46,    46,
-      46,    46,    46,    46,    46,    46,    46,    46,    46,    46,
-      46,    46,    46,    46,    46,    46,    46,    46,    46,    46,
-      46,    46,    46,    46,    46,    46
+       0,    40,    42,    41,    41,    43,    43,    43,    44,    44,
+      44,    44,    44,    44,    44,    44,    44,    44,    44,    44,
+      44,    44,    44,    44,    44,    44,    44,    44,    45,    45,
+      46,    46,    46,    47,    47,    47,    47,    47,    47,    47,
+      47,    47,    47,    47,    47,    47,    47,    47,    47,    47,
+      47,    47,    47,    47,    47,    47,    47,    47,    47,    47,
+      47,    47,    47,    47,    47,    47,    47
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -683,8 +684,8 @@ static const yytype_uint8 yyr2[] =
        2,     2,     3,     2,     3,     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,     2,     3,     3,     3,     3,     3,     3,     2,
-       2,     2,     2,     3,     1,     1
+       2,     2,     2,     3,     3,     3,     3,     3,     3,     3,
+       2,     2,     2,     2,     3,     1,     1
 };
 
 
@@ -1363,7 +1364,7 @@ yyreduce:
         case 2:
 #line 76 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { g_parsedArc->mode = (yyvsp[0].s); }
-#line 1367 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1368 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 8:
@@ -1371,49 +1372,49 @@ yyreduce:
     {
 		g_parsedArc->id = (yyvsp[0].i); 
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1375 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1376 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 9:
 #line 88 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i)); }
-#line 1381 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1382 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
 #line 89 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i)); }
-#line 1387 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1388 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
 #line 90 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1393 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1394 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 12:
 #line 91 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1399 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1400 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 13:
 #line 92 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1405 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1406 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
 #line 93 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1411 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1412 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 15:
 #line 94 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
-    { debugC(1, kHypnoDebugParser, "O1 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1417 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+    { debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
+#line 1418 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 16:
@@ -1423,7 +1424,7 @@ yyreduce:
 		g_parsedArc->transitionTime = (yyvsp[-1].i);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s)); 
 	}
-#line 1427 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1428 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
@@ -1433,13 +1434,13 @@ yyreduce:
 		g_parsedArc->transitionTime = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i)); 
 	}
-#line 1437 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1438 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
 #line 105 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1443 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1444 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
@@ -1448,13 +1449,13 @@ yyreduce:
 		g_parsedArc->background = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s)); 
 	}
-#line 1452 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1453 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
 #line 110 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1458 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1459 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
@@ -1463,13 +1464,13 @@ yyreduce:
 		g_parsedArc->player = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 		}
-#line 1467 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1468 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 22:
 #line 115 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1473 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1474 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 23:
@@ -1488,7 +1489,7 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s)); 
 	}
-#line 1492 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1493 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 24:
@@ -1505,19 +1506,19 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); 
 	}
-#line 1509 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1510 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
 #line 142 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "HE %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1515 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1516 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
 #line 143 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "HE %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1521 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1522 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
@@ -1525,7 +1526,7 @@ yyreduce:
     {
 		debugC(1, kHypnoDebugParser, "H %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1529 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1530 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
@@ -1535,7 +1536,7 @@ yyreduce:
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1539 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1540 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 34:
@@ -1545,7 +1546,7 @@ yyreduce:
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE"); 
 	}
-#line 1549 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1550 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 35:
@@ -1555,7 +1556,7 @@ yyreduce:
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1559 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1560 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 36:
@@ -1564,7 +1565,7 @@ yyreduce:
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1568 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1569 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 37:
@@ -1573,7 +1574,7 @@ yyreduce:
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1577 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1578 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 38:
@@ -1582,7 +1583,7 @@ yyreduce:
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A"); 
 	}
-#line 1586 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1587 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 39:
@@ -1591,7 +1592,7 @@ yyreduce:
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C"); 
 	}
-#line 1595 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1596 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
@@ -1600,7 +1601,7 @@ yyreduce:
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D"); 
 	}
-#line 1604 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1605 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
@@ -1609,7 +1610,7 @@ yyreduce:
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F"); 
 	}
-#line 1613 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1614 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
@@ -1618,7 +1619,7 @@ yyreduce:
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H"); 
 	}
-#line 1622 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1623 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
@@ -1627,7 +1628,7 @@ yyreduce:
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I"); 
 	}
-#line 1631 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1632 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
@@ -1636,7 +1637,7 @@ yyreduce:
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J"); 
 	}
-#line 1640 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1641 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 45:
@@ -1645,7 +1646,7 @@ yyreduce:
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N"); 
 	}
-#line 1649 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1650 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 46:
@@ -1654,7 +1655,7 @@ yyreduce:
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O"); 
 	}
-#line 1658 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1659 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 47:
@@ -1663,7 +1664,7 @@ yyreduce:
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P"); 
 	}
-#line 1667 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1668 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 48:
@@ -1672,7 +1673,7 @@ yyreduce:
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q"); 
 	}
-#line 1676 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1677 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 49:
@@ -1681,7 +1682,7 @@ yyreduce:
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R"); 
 	}
-#line 1685 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1686 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 50:
@@ -1690,7 +1691,7 @@ yyreduce:
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1694 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1695 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 51:
@@ -1699,7 +1700,7 @@ yyreduce:
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T"); 
 	}
-#line 1703 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1704 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
@@ -1707,7 +1708,7 @@ yyreduce:
     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i)); 
 	}
-#line 1711 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1712 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 53:
@@ -1716,78 +1717,84 @@ yyreduce:
 		shoot->position = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "A0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1720 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1721 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 54:
 #line 244 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1726 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1727 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 55:
 #line 245 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
-    { debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1732 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+    { debugC(1, kHypnoDebugParser, "R0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
+#line 1733 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
   case 56:
 #line 246 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+    { debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
+#line 1739 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+    break;
+
+  case 57:
+#line 247 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { 
 		//if (Common::String("K0") == $1)
 		shoot->explosionFrame = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "KN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1742 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1749 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 251 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 58:
+#line 252 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "P0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1748 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1755 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 252 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 59:
+#line 253 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { 
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1756 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1763 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 59:
-#line 255 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 60:
+#line 256 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1762 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1769 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 60:
-#line 256 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 61:
+#line 257 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     {
 		shoot->attackFrame = (yyvsp[0].i); 
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1770 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1777 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 61:
-#line 259 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 62:
+#line 260 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     {
 		shoot->attackWeight = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1778 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1785 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 62:
-#line 262 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 63:
+#line 263 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     {
 		shoot->pointsToShoot = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i)); 
 	}
-#line 1787 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1794 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 63:
-#line 266 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 64:
+#line 267 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { 
 		if (Common::String("S1") == (yyvsp[-2].s))
 			shoot->deathSound = (yyvsp[-1].s);
@@ -1795,28 +1802,28 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 		 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 1799 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1806 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 273 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 65:
+#line 274 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     { debugC(1, kHypnoDebugParser, "N"); }
-#line 1805 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1812 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
-  case 65:
-#line 274 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
+  case 66:
+#line 275 "engines/hypno/grammar_arc.y" /* yacc.c:1646  */
     {
 		g_parsedArc->shoots.push_back(*shoot); 
 		//delete shoot; 
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z"); 
 	}
-#line 1816 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1823 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 1820 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
+#line 1827 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 9e19740c5e..d190b4449f 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -60,7 +60,7 @@ using namespace Hypno;
 %token<i> NUM
 // header
 %token COMMENT CTOK DTOK HTOK HETOK RETTOK QTOK ENCTOK
-%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK O1TOK NTOK RTOK ITOK JTOK ZTOK
+%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK ONTOK NTOK RTOK R0TOK ITOK JTOK ZTOK
 
 // body
 %token FNTOK NONETOK A0TOK P0TOK WTOK
@@ -91,7 +91,7 @@ hline: 	CTOK NUM {
 	| ATOK NUM NUM { debugC(1, kHypnoDebugParser, "A %d %d", $2, $3); }
 	| VTOK NUM NUM { debugC(1, kHypnoDebugParser, "V %d %d", $2, $3); }
 	| OTOK NUM NUM { debugC(1, kHypnoDebugParser, "O %d %d", $2, $3); }
-	| O1TOK NUM NUM { debugC(1, kHypnoDebugParser, "O1 %d %d", $2, $3); }
+	| ONTOK NUM NUM { debugC(1, kHypnoDebugParser, "ON %d %d", $2, $3); }
 	| TPTOK FILENAME NUM FILENAME {
 		g_parsedArc->transitionVideo = $2;
 		g_parsedArc->transitionTime = $3;
@@ -242,6 +242,7 @@ bline: FNTOK FILENAME {
 		debugC(1, kHypnoDebugParser, "A0 %d %d", $2, $3); 
 	}
 	| RTOK NUM NUM  { debugC(1, kHypnoDebugParser, "R %d %d", $2, $3); }
+	| R0TOK NUM NUM  { debugC(1, kHypnoDebugParser, "R0 %d %d", $2, $3); }
 	| BNTOK NUM NUM { debugC(1, kHypnoDebugParser, "BN %d %d", $2, $3); }
 	| KNTOK NUM NUM { 
 		//if (Common::String("K0") == $1)
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index e9c5106850..1de6d201a8 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 41
-#define YY_END_OF_BUFFER 42
+#define YY_NUM_RULES 42
+#define YY_END_OF_BUFFER 43
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -642,15 +642,15 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[67] =
+static const flex_int16_t yy_accept[68] =
     {   0,
-        0,    0,   42,   40,   37,   39,   35,   35,   40,   31,
-       31,   31,   40,    7,   32,    2,    3,   32,   22,    5,
-       13,   14,   32,   11,    9,    6,   15,   12,   32,   19,
-        8,   17,   18,   32,   16,   32,   36,   39,   31,   34,
-       31,   31,   31,    0,   33,   24,   32,   25,   21,    4,
-       26,   32,   10,   27,   23,   20,   28,   32,   30,   30,
-       29,   29,   38,   32,    1,    0
+        0,    0,   43,   41,   38,   40,   36,   36,   41,   32,
+       32,   32,   41,    7,   33,    2,    3,   33,   23,    5,
+       14,   15,   33,   11,    9,    6,   16,   12,   33,   20,
+        8,   18,   19,   33,   17,   33,   37,   40,   32,   35,
+       32,   32,   32,    0,   34,   25,   33,   26,   22,    4,
+       27,   33,   10,   28,   13,   24,   21,   29,   33,   31,
+       31,   30,   30,   39,   33,    1,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -694,31 +694,31 @@ static const YY_CHAR yy_meta[42] =
         1
     } ;
 
-static const flex_int16_t yy_base[73] =
+static const flex_int16_t yy_base[74] =
     {   0,
-        0,    0,  149,  173,  173,  145,  173,  173,   34,   38,
-       42,   46,    0,   51,   53,  140,  139,  138,   65,   70,
-      137,  135,   71,   58,   77,   81,  134,  133,   83,   78,
-      132,  131,  130,   88,  129,    0,  173,  132,   88,    0,
-       92,  120,   81,  129,    0,  126,  125,  116,  113,  111,
-      108,   98,  107,  106,  105,  104,  103,    0,    0,  173,
-        0,  173,  104,   99,  101,  173,  158,  162,  164,  166,
-      103,  168
+        0,    0,  152,  179,  179,  148,  179,  179,   34,   38,
+       42,   46,    0,   51,   53,  143,  141,  140,   65,   70,
+      139,  138,   71,   58,   77,   81,  137,   83,   85,   90,
+      136,  135,  134,   94,  133,    0,  179,  136,   94,    0,
+       98,  126,   75,  133,    0,  121,  120,  119,  118,  117,
+      116,   92,  115,  114,  113,  112,  111,  110,    0,    0,
+      179,    0,  179,  109,   93,  105,  179,  164,  168,  170,
+      172,  107,  174
     } ;
 
-static const flex_int16_t yy_def[73] =
+static const flex_int16_t yy_def[74] =
     {   0,
-       66,    1,   66,   66,   66,   66,   66,   66,   66,   67,
-       67,   67,   68,   69,   69,   69,   69,   69,   69,   69,
-       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
-       69,   69,   69,   70,   69,   71,   66,   66,   66,   67,
-       67,   67,   42,   68,   72,   69,   69,   69,   69,   69,
-       69,   69,   69,   69,   69,   69,   69,   71,   67,   66,
-       67,   66,   68,   69,   69,    0,   66,   66,   66,   66,
-       66,   66
+       67,    1,   67,   67,   67,   67,   67,   67,   67,   68,
+       68,   68,   69,   70,   70,   70,   70,   70,   70,   70,
+       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
+       70,   70,   70,   71,   70,   72,   67,   67,   67,   68,
+       68,   68,   42,   69,   73,   70,   70,   70,   70,   70,
+       70,   70,   70,   70,   70,   70,   70,   70,   72,   68,
+       67,   68,   67,   69,   70,   70,    0,   67,   67,   67,
+       67,   67,   67
     } ;
 
-static const flex_int16_t yy_nxt[215] =
+static const flex_int16_t yy_nxt[221] =
     {   0,
         4,    5,    6,    7,    8,    9,    4,   10,   11,   12,
        10,   13,   14,   15,   16,   17,   18,   19,   18,   20,
@@ -728,25 +728,25 @@ static const flex_int16_t yy_nxt[215] =
        42,   41,   41,   41,   41,   43,   41,   45,   46,   45,
        48,   48,   48,   48,   45,   48,   48,   48,   48,   48,
        48,   45,   49,   49,   49,   49,   45,   45,   51,   51,
-       51,   51,   52,   45,   45,   53,   50,   45,   54,   45,
-       55,   55,   55,   55,   45,   39,   39,   39,   39,   41,
-
-       41,   41,   41,   61,   45,   45,   58,   45,   63,   45,
-       45,   45,   45,   45,   45,   65,   56,   45,   61,   45,
-       62,   64,   45,   47,   47,   47,   47,   41,   41,   41,
-       41,   45,   45,   63,   38,   45,   45,   45,   45,   45,
-       45,   45,   59,   45,   45,   45,   45,   38,   66,   66,
-       66,   66,   66,   66,   66,   66,   66,   59,   66,   60,
-       40,   40,   44,   66,   44,   44,   47,   47,   57,   57,
-       45,   45,    3,   66,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-
-       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,   66
+       51,   51,   52,   45,   53,   53,   50,   45,   54,   45,
+       55,   45,   56,   56,   56,   56,   45,   62,   45,   45,
+
+       45,   39,   39,   39,   39,   41,   41,   41,   41,   66,
+       59,   45,   62,   64,   63,   65,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   57,   47,
+       47,   47,   47,   41,   41,   41,   41,   64,   38,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   60,   45,
+       38,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   60,   67,   61,   40,   40,   44,   67,
+       44,   44,   47,   47,   58,   58,   45,   45,    3,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67
     } ;
 
-static const flex_int16_t yy_chk[215] =
+static const flex_int16_t yy_chk[221] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -756,30 +756,30 @@ static const flex_int16_t yy_chk[215] =
        11,   11,   11,   12,   12,   12,   12,   14,   14,   15,
        15,   15,   15,   15,   24,   15,   15,   15,   15,   15,
        15,   19,   19,   19,   19,   19,   20,   23,   23,   23,
-       23,   23,   24,   25,   30,   25,   20,   26,   26,   29,
-       29,   29,   29,   29,   34,   39,   39,   39,   39,   41,
-
-       41,   41,   41,   43,   52,   64,   71,   65,   63,   57,
-       56,   55,   54,   53,   51,   64,   30,   50,   43,   49,
-       43,   52,   48,   34,   34,   34,   34,   42,   42,   42,
-       42,   47,   46,   44,   38,   35,   33,   32,   31,   28,
-       27,   22,   42,   21,   18,   17,   16,    6,    3,    0,
-        0,    0,    0,    0,    0,    0,    0,   42,    0,   42,
-       67,   67,   68,    0,   68,   68,   69,   69,   70,   70,
-       72,   72,   66,   66,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-
-       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,   66
+       23,   23,   24,   25,   25,   25,   20,   26,   26,   28,
+       28,   29,   29,   29,   29,   29,   30,   43,   52,   65,
+
+       34,   39,   39,   39,   39,   41,   41,   41,   41,   65,
+       72,   66,   43,   64,   43,   52,   58,   57,   56,   55,
+       54,   53,   51,   50,   49,   48,   47,   46,   30,   34,
+       34,   34,   34,   42,   42,   42,   42,   44,   38,   35,
+       33,   32,   31,   27,   22,   21,   18,   17,   42,   16,
+        6,    3,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   42,    0,   42,   68,   68,   69,    0,
+       69,   69,   70,   70,   71,   71,   73,   73,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[42] =
+static const flex_int32_t yy_rule_can_match_eol[43] =
     {   0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-    0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+    0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -1072,13 +1072,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 >= 67 )
+				if ( yy_current_state >= 68 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 66 );
+		while ( yy_current_state != 67 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1156,7 +1156,7 @@ return OTOK;
 case 10:
 YY_RULE_SETUP
 #line 53 "engines/hypno/lexer_arc.l"
-return O1TOK;
+return ONTOK;
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
@@ -1171,87 +1171,87 @@ return RTOK;
 case 13:
 YY_RULE_SETUP
 #line 56 "engines/hypno/lexer_arc.l"
-return ITOK;
+return R0TOK;
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 57 "engines/hypno/lexer_arc.l"
-return JTOK;
+return ITOK;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 58 "engines/hypno/lexer_arc.l"
-return QTOK;
+return JTOK;
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 59 "engines/hypno/lexer_arc.l"
-return ZTOK;
+return QTOK;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 60 "engines/hypno/lexer_arc.l"
-return WTOK;
+return ZTOK;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 61 "engines/hypno/lexer_arc.l"
-return XTOK;
+return WTOK;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 62 "engines/hypno/lexer_arc.l"
-return TTOK;
+return XTOK;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 63 "engines/hypno/lexer_arc.l"
-return TPTOK;
+return TTOK;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 64 "engines/hypno/lexer_arc.l"
-return FNTOK;
+return TPTOK;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 65 "engines/hypno/lexer_arc.l"
-return FTOK;
+return FNTOK;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 66 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+return FTOK;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 67 "engines/hypno/lexer_arc.l"
-return A0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 68 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+return A0TOK;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 69 "engines/hypno/lexer_arc.l"
-return KNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 70 "engines/hypno/lexer_arc.l"
-return P0TOK;
+return KNTOK;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 71 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
+return P0TOK;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 72 "engines/hypno/lexer_arc.l"
-return ENCTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
@@ -1261,17 +1261,17 @@ return ENCTOK;
 case 31:
 YY_RULE_SETUP
 #line 74 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
+return ENCTOK;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 75 "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 33:
 YY_RULE_SETUP
 #line 76 "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 34:
 YY_RULE_SETUP
@@ -1279,42 +1279,47 @@ YY_RULE_SETUP
 HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 	YY_BREAK
 case 35:
-/* rule 35 can match eol */
 YY_RULE_SETUP
 #line 78 "engines/hypno/lexer_arc.l"
-return RETTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
 	YY_BREAK
 case 36:
+/* rule 36 can match eol */
 YY_RULE_SETUP
 #line 79 "engines/hypno/lexer_arc.l"
-return CB3TOK;
+return RETTOK;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 80 "engines/hypno/lexer_arc.l"
-return C02TOK;
+return CB3TOK;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 81 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+return C02TOK;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 82 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+/* ignore comment */
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 83 "engines/hypno/lexer_arc.l"
-debugC(1, Hypno::kHypnoDebugParser, "<no match: %c>", *yytext); return *yytext;
+/* ignore whitespace */;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 84 "engines/hypno/lexer_arc.l"
+debugC(1, Hypno::kHypnoDebugParser, "<no match: %c>", *yytext); return *yytext;
+	YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 85 "engines/hypno/lexer_arc.l"
 ECHO;
 	YY_BREAK
-#line 1318 "engines/hypno/lexer_arc.cpp"
+#line 1323 "engines/hypno/lexer_arc.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1612,7 +1617,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 >= 67 )
+			if ( yy_current_state >= 68 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1640,11 +1645,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 >= 67 )
+		if ( yy_current_state >= 68 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 66);
+	yy_is_jam = (yy_current_state == 67);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2291,7 +2296,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 84 "engines/hypno/lexer_arc.l"
+#line 85 "engines/hypno/lexer_arc.l"
 
 
 namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index 27003be1a9..f6d044dce0 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -50,9 +50,10 @@ P							return PTOK;
 A							return ATOK;
 V							return VTOK;
 O							return OTOK;
-O1							return O1TOK;
+O[0-1]						return ONTOK;
 N							return NTOK;
 R							return RTOK;
+R0							return R0TOK;
 I							return ITOK;
 J							return JTOK;
 Q							return QTOK;
diff --git a/engines/hypno/spider/arcade.cpp b/engines/hypno/spider/arcade.cpp
index 7e1206189a..966f75d8c0 100644
--- a/engines/hypno/spider/arcade.cpp
+++ b/engines/hypno/spider/arcade.cpp
@@ -40,7 +40,7 @@ void SpiderEngine::drawShoot(const Common::Point &target) {
 
 	if (_arcadeMode == "YC" || _arcadeMode == "YD") {
 		return; // Nothing to shoot
-	} else if (_arcadeMode == "YE") { 
+	} else if (_arcadeMode == "YE" || _arcadeMode == "YF") { 
 		ox = _screenW/2;
 		oy = _screenH - _playerFrames[0]->h/2;
 	} else if (_arcadeMode == "YB") {
@@ -138,7 +138,7 @@ void SpiderEngine::drawPlayer() {
 			_playerFrameIdx++;
 			_lastPlayerPosition = _currentPlayerPosition;
 		}
-	} else if (_arcadeMode == "YE") {
+	} else if (_arcadeMode == "YE" || _arcadeMode == "YF") {
 		Common::Point mousePos = g_system->getEventManager()->getMousePos();
 		uint32 idx = mousePos.x / (_screenW / 5);
 		_playerFrameIdx = oIndexYE[idx];
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index c055d0fd2b..e160b52535 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -304,16 +304,19 @@ void SpiderEngine::loadAssetsFullGame() {
 	_levels["factory1.mi_"]->intros.push_back("cine/swc003s.smk");
 	loadSceneLevel("intercom.mi_", "c3", prefix);
 
-	loadArcadeLevel("c3.mi_", "", prefix);
-	_levels["c3.mi_"]->intros.push_back("cine/ctss001s.smk");
+	loadArcadeLevel("c3.mi_", "c6", prefix);
+	_levels["c3.mi_"]->intros.push_back("cine/vrfs001s.smk");
 
-	loadArcadeLevel("c3h.mi_", "", prefix);
+	loadArcadeLevel("c3h.mi_", "c6", prefix);
+	_levels["c3h.mi_"]->intros.push_back("cine/vrfs001s.smk");
 
 	loadSceneLevel("movie2.mi_", "", prefix);
 
 	// Easy arcade levels
 
-	//loadArcadeLevel("c6.mi_", "", "spider");
+	loadArcadeLevel("c6.mi_", "", "spider");
+	_levels["c6.mi_"]->intros.push_back("cine/vrfs002s.smk");
+	_levels["c6.mi_"]->intros.push_back("cine/dia007s.smk");
 	// No c7 level?
 	loadArcadeLevel("c8.mi_", "", prefix);
 	loadArcadeLevel("c9.mi_", "", prefix);
@@ -324,7 +327,10 @@ void SpiderEngine::loadAssetsFullGame() {
 
 	// // Hard arcade levels
 
-	//loadArcadeLevel("c6h.mi_", "", "spider");
+	loadArcadeLevel("c6h.mi_", "", "spider");
+	_levels["c6h.mi_"]->intros.push_back("cine/vrfs002s.smk");
+	_levels["c6h.mi_"]->intros.push_back("cine/dia007s.smk");
+
 	// No c7h level?
 	loadArcadeLevel("c8h.mi_", "", prefix);
 	loadArcadeLevel("c9h.mi_", "", prefix);
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index 7793598630..5c05a00422 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -75,20 +75,21 @@ extern int HYPNO_ARC_debug;
     ATOK = 277,
     VTOK = 278,
     OTOK = 279,
-    O1TOK = 280,
+    ONTOK = 280,
     NTOK = 281,
     RTOK = 282,
-    ITOK = 283,
-    JTOK = 284,
-    ZTOK = 285,
-    FNTOK = 286,
-    NONETOK = 287,
-    A0TOK = 288,
-    P0TOK = 289,
-    WTOK = 290,
-    XTOK = 291,
-    CB3TOK = 292,
-    C02TOK = 293
+    R0TOK = 283,
+    ITOK = 284,
+    JTOK = 285,
+    ZTOK = 286,
+    FNTOK = 287,
+    NONETOK = 288,
+    A0TOK = 289,
+    P0TOK = 290,
+    WTOK = 291,
+    XTOK = 292,
+    CB3TOK = 293,
+    C02TOK = 294
   };
 #endif
 
@@ -102,7 +103,7 @@ union HYPNO_ARC_STYPE
 	char *s; /* string value */
 	int i;	 /* integer value */
 
-#line 106 "engines/hypno/tokens_arc.h" /* yacc.c:1909  */
+#line 107 "engines/hypno/tokens_arc.h" /* yacc.c:1909  */
 };
 
 typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;


Commit: dbf528d6824d3ba2bc32ff58f4401390904cbcb5
    https://github.com/scummvm/scummvm/commit/dbf528d6824d3ba2bc32ff58f4401390904cbcb5
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-12-22T14:34:31+01:00

Commit Message:
HYPNO: added lock puzzle and added some intros

Changed paths:
    engines/hypno/hypno.h
    engines/hypno/spider/hard.cpp
    engines/hypno/spider/spider.cpp


diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index c96c4453b7..642df3360d 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -302,6 +302,7 @@ private:
 	void runRecept(Code *code);
 	void runOffice(Code *code);
 	void runFileCabinet(Code *code);
+	void runLock(Code *code);
 
 	bool isFuseRust = true;
 	bool isFuseUnreadable = false;
diff --git a/engines/hypno/spider/hard.cpp b/engines/hypno/spider/hard.cpp
index a7eb319581..b60b80cd25 100644
--- a/engines/hypno/spider/hard.cpp
+++ b/engines/hypno/spider/hard.cpp
@@ -39,6 +39,8 @@ void SpiderEngine::runCode(Code *code) {
 		runOffice(code);
 	else if (code->name == "<file_cabinet>") 
 		runFileCabinet(code);
+	else if (code->name == "<lock>") 
+		runLock(code);
 	else if (code->name == "<credits>")
 		showCredits();
 	else
@@ -544,6 +546,79 @@ void SpiderEngine::runFileCabinet(Code *code) {
 	}
 }
 
+void SpiderEngine::runLock(Code *code) {
+	changeScreenMode("640x480");
+	Common::Point mousePos;
+	Common::Event event;
+
+	uint32 comb[5] = {};
+	Common::Rect sel[5];
+
+	sel[0] = Common::Rect(276, 57, 324, 134);
+	sel[1] = Common::Rect(348, 57, 396, 134);
+	sel[2] = Common::Rect(416, 57, 464, 134);
+	sel[3] = Common::Rect(484, 57, 532, 134);
+	sel[4] = Common::Rect(552, 57, 601, 134);
+	Common::Rect act(345, 337, 537, 404);
+
+	Common::String intro = "spider/cine/spv051s.smk"; 
+	if (!_intros.contains(intro)) {
+		MVideo v(intro, Common::Point(0, 0), false, false, false);
+		runIntro(v);
+		_intros[intro] = true;
+	}
+
+	Frames nums = decodeFrames("spider/factory/button.smk");
+	if (nums.size() != 5)
+		error("Invalid number of colors: %d", nums.size());
+
+	defaultCursor();
+	loadImage("spider/factory/elockbg.smk", 0, 0, false);
+	for (int i = 0; i < 5; i++) {
+		drawImage(*nums[comb[i]], sel[i].left, sel[i].top, true);
+	}
+
+	while (!shouldQuit()) {
+
+		while (g_system->getEventManager()->pollEvent(event)) {
+			mousePos = g_system->getEventManager()->getMousePos();
+			// Events
+			switch (event.type) {
+
+			case Common::EVENT_QUIT:
+			case Common::EVENT_RETURN_TO_LAUNCHER:
+				break;
+
+			case Common::EVENT_LBUTTONDOWN:
+				if (act.contains(mousePos)) {
+					if (comb[0] == 1 && comb[1] == 1 && comb[2] == 1 && comb[3] == 1 && comb[4] == 1) {
+					 	_nextLevel = code->levelIfWin;
+					 	return;
+					}
+				}
+
+				for (int i = 0; i < 5; i++) {
+					if (sel[i].contains(mousePos))
+						comb[i] = (comb[i] + 1) % 5;
+				}
+
+				loadImage("spider/factory/elockbg.smk", 0, 0, false);
+				for (int i = 0; i < 5; i++) {
+					drawImage(*nums[comb[i]], sel[i].left, sel[i].top, true);
+				}
+				break;
+
+			default:
+				break;
+			}
+		}
+
+		drawScreen();
+		g_system->delayMillis(10);
+	}
+}
+
+
 void SpiderEngine::showCredits() {
 	changeScreenMode("640x480");
 	MVideo video("cine/credits.smk", Common::Point(0, 0), false, false, false);
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index e160b52535..4011a86f27 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -310,13 +310,29 @@ void SpiderEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c3h.mi_", "c6", prefix);
 	_levels["c3h.mi_"]->intros.push_back("cine/vrfs001s.smk");
 
-	loadSceneLevel("movie2.mi_", "", prefix);
-
 	// Easy arcade levels
 
-	loadArcadeLevel("c6.mi_", "", "spider");
+	loadArcadeLevel("c6.mi_", "<lock>", "spider");
 	_levels["c6.mi_"]->intros.push_back("cine/vrfs002s.smk");
 	_levels["c6.mi_"]->intros.push_back("cine/dia007s.smk");
+
+	Code *lock = new Code();
+	lock->name = "<lock>";
+	lock->levelIfWin = "movie2.mi_";
+	_levels["<lock>"] = lock;
+
+	loadSceneLevel("movie2.mi_", "decide5.mi_", prefix);
+	_levels["movie2.mi_"]->intros.push_back("cine/vrfs003s.smk");
+	loadSceneLevel("decide5.mi_", "", prefix);
+	sc = (Scene *) _levels["decide5.mi_"];
+
+	cl = new ChangeLevel("movie3.mi_");
+	sc->hots[2].actions.push_back(cl);
+
+	loadSceneLevel("movie3.mi_", "movie4.mi_", prefix);
+	loadSceneLevel("movie4.mi_", "", prefix);
+
+
 	// No c7 level?
 	loadArcadeLevel("c8.mi_", "", prefix);
 	loadArcadeLevel("c9.mi_", "", prefix);
@@ -327,7 +343,7 @@ void SpiderEngine::loadAssetsFullGame() {
 
 	// // Hard arcade levels
 
-	loadArcadeLevel("c6h.mi_", "", "spider");
+	loadArcadeLevel("c6h.mi_", "<lock>", "spider");
 	_levels["c6h.mi_"]->intros.push_back("cine/vrfs002s.smk");
 	_levels["c6h.mi_"]->intros.push_back("cine/dia007s.smk");
 
@@ -422,7 +438,7 @@ void SpiderEngine::loadAssetsFullGame() {
 	over_apt_5->intros.push_back("spider/cine/apts05as.smk");
 	_levels["<over_apt_5>"] = over_apt_5;
 	
-	_nextLevel = "<start>";
+	_nextLevel = "decide5.mi_";
 }
 
 void SpiderEngine::loadAssetsDemo() {




More information about the Scummvm-git-logs mailing list