[Scummvm-git-logs] scummvm master -> 6db6c8fb691356bba409471f396ff556d081c527

neuromancer noreply at scummvm.org
Sun Jan 30 10:41:06 UTC 2022


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

Summary:
15724b853f HYPNO: added objective support for arcade sequences and some fixes in palettes and frame delay
6db6c8fb69 HYPNO: enable health count


Commit: 15724b853fe7e0efac9e0a141b5193dbf27ee890
    https://github.com/scummvm/scummvm/commit/15724b853fe7e0efac9e0a141b5193dbf27ee890
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-01-30T11:41:11+01:00

Commit Message:
HYPNO: added objective support for arcade sequences and some fixes in palettes and frame delay

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


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index c8fbc0086df..d6e74730f34 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -59,7 +59,8 @@ void HypnoEngine::parseArcadeShooting(const Common::String &prefix, const Common
 	ArcadeShooting *arcade = new ArcadeShooting();
 	*arcade = *g_parsedArc; 
 	_levels[filename] = (Level*) arcade;
-	g_parsedArc->background.clear();
+	g_parsedArc->backgroundVideo.clear();
+	g_parsedArc->transitionPalette.clear();
 	g_parsedArc->player.clear();
 	g_parsedArc->shoots.clear();
 	g_parsedArc->intros.clear();
@@ -163,14 +164,18 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 
 	_playerFrameIdx = -1;
 
-	MVideo background = MVideo(arc->background, Common::Point(0, 0), false, false, false);
+	MVideo background = MVideo(arc->backgroundVideo, Common::Point(0, 0), false, false, false);
 
 	changeCursor("arcade");
 	playVideo(background);
-	loadPalette(arc->palette);
+	loadPalette(arc->backgroundPalette);
 	bool shootingPrimary = false;
 	bool shootingSecondary = false;
 	bool needsUpdate = true;
+	bool transition = false;
+	_obj1KillsCount = 0;
+	_obj1MissesCount = 0;
+	debugC(1, kHypnoDebugArcade, "Using frame delay: %d", arc->frameDelay);
 
 	Common::Event event;
 	while (!shouldQuit()) {
@@ -237,8 +242,11 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 
 		if (_health <= 0) {
 			skipVideo(background);
-			if (!arc->defeatNoEnergyVideo.empty()) {
-				MVideo video(arc->defeatNoEnergyVideo, Common::Point(0, 0), false, true, false);
+			if (!arc->defeatNoEnergySecondVideo.empty() && transition) {
+				MVideo video(arc->defeatNoEnergySecondVideo, Common::Point(0, 0), false, true, false);
+				runIntro(video);
+			} else if (!arc->defeatNoEnergyFirstVideo.empty()) {
+				MVideo video(arc->defeatNoEnergyFirstVideo, Common::Point(0, 0), false, true, false);
 				runIntro(video);
 			}
 			assert(!arc->levelIfLose.empty());
@@ -247,19 +255,19 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			break;
 		}
 
-		if (!arc->transitionVideo.empty() && background.decoder->getCurFrame() >= (int)arc->transitionTime) {
-			const byte *videoPalette = nullptr;
-			videoPalette = background.decoder->getPalette();
+		if (!arc->transitionVideo.empty() && !transition && background.decoder->getCurFrame() >= (int)arc->transitionTime) {
+			transition = true;
 			background.decoder->pauseVideo(true);
 
 			debugC(1, kHypnoDebugArcade, "Playing transition %s", arc->transitionVideo.c_str());
-			arc->transitionTime = background.decoder->getFrameCount() + 1;
-			loadPalette(arc->transitionPalette);
 			MVideo video(arc->transitionVideo, Common::Point(0, 0), false, true, false);
 			runIntro(video);
 
+			if (!arc->transitionPalette.empty())
+				loadPalette(arc->transitionPalette);
+			else
+				loadPalette(arc->backgroundPalette);
 			background.decoder->pauseVideo(false);
-			g_system->getPaletteManager()->setPalette(videoPalette, 0, 256);
 			updateScreen(background);
 			drawScreen();
 		}
@@ -273,6 +281,19 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 
 		if (checkArcadeLevelCompleted(background, segments[segmentIdx])) {
 			skipVideo(background);
+			// Objectives
+			if (arc->obj1KillsRequired > 0 || arc->obj1MissesAllowed > 0) {
+				if (_obj1KillsCount < arc->obj1KillsRequired || _obj1MissesCount > arc->obj1MissesAllowed) {
+					MVideo video(arc->defeatMissBossVideo, Common::Point(0, 0), false, true, false);
+					runIntro(video);
+					assert(!arc->levelIfLose.empty());
+					_nextLevel = arc->levelIfLose;
+					_arcadeMode = "";
+					debugC(1, kHypnoDebugArcade, "Losing level (objectives) and jumping to %s", _nextLevel.c_str());
+					break;
+				}
+			}
+
 			if (!arc->nextLevelVideo.empty()) {
 				MVideo video(arc->nextLevelVideo, Common::Point(0, 0), false, true, false);
 				runIntro(video);
@@ -322,7 +343,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			if (it->video && it->video->decoder) {
 				int frame = it->video->decoder->getCurFrame();
 				if (frame > 0 && frame >= (int)(it->attackFrame) && !it->destroyed) {
-					_health = _health - it->attackWeight;
+					//_health = _health - it->attackWeight;
 					hitPlayer();
 					it->attackFrame = it->video->decoder->getFrameCount() + 1; // It will never attack again
 				}
@@ -362,7 +383,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			drawHealth();
 		}
 
-		g_system->delayMillis(10);
+		g_system->delayMillis(arc->frameDelay);
 	}
 
 	// Deallocate shoots
@@ -412,8 +433,10 @@ bool HypnoEngine::clickedPrimaryShoot(const Common::Point &mousePos) { return tr
 void HypnoEngine::shoot(const Common::Point &mousePos) {
 	int i = detectTarget(mousePos);
 	if (i >= 0) {
-		playSound(_soundPath + _shoots[i].hitSound, 1);
-		playSound(_soundPath + _shoots[i].deathSound, 1);
+		if (!_shoots[i].hitSound.empty())
+			playSound(_soundPath + _shoots[i].hitSound, 1);
+		if (!_shoots[i].deathSound.empty())
+			playSound(_soundPath + _shoots[i].deathSound, 1);
 		_score = _score + _shoots[i].pointsToShoot;
 		_shoots[i].destroyed = true;
 
@@ -423,9 +446,10 @@ void HypnoEngine::shoot(const Common::Point &mousePos) {
 			_shoots[i].video->position = Common::Point(mousePos.x - w / 2, mousePos.y - h / 2);
 			_shoots[i].video->decoder->forceSeekToFrame(_shoots[i].explosionFrame + 2);
 		} else {
-			byte p[3] = {}; // Always black?
+			byte p[3] = {0x00, 0x00, 0x00}; // Always black?
 			assert(_shoots[i].paletteSize == 1 || _shoots[i].paletteSize == 0);
 			loadPalette((byte *) &p, _shoots[i].paletteOffset, _shoots[i].paletteSize);
+			_obj1KillsCount = _obj1KillsCount + _shoots[i].obj1KillsCount;
 		}
 
 	}
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index 958df6d6cff..91085a37f49 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -361,6 +361,9 @@ public:
 		paletteSize = 0;
 		attackFrame = 0;
 		explosionFrame = 0;
+		obj1KillsCount = 0;
+		obj1MissesCount = 0;
+		animation = "NONE";
 	}
 	Common::String name;
 	Filename animation;
@@ -371,6 +374,10 @@ public:
 	uint32 pointsToShoot;
 	uint32 attackWeight;
 
+	// Objectives
+	uint32 obj1KillsCount;
+	uint32 obj1MissesCount;
+
 	// Palette
 	uint32 paletteOffset;
 	uint32 paletteSize;
@@ -420,22 +427,30 @@ public:
 		health = 100;
 		transitionTime = 0;
 		id = 0;
+		obj1KillsRequired = 0;
+		obj1MissesAllowed = 0;
 	}
 	uint32 id;
+	uint32 frameDelay;
 	Common::String mode;
 	uint32 transitionTime;
-	Segments segments; 
+	Segments segments;
+
+	// Objectives
+	uint32 obj1KillsRequired;
+	uint32 obj1MissesAllowed;
 
 	// Videos
 	Filename transitionVideo;
 	Filename transitionPalette;
 	Filename nextLevelVideo;
-	Filename defeatNoEnergyVideo;
+	Filename defeatNoEnergyFirstVideo;
+	Filename defeatNoEnergySecondVideo;
 	Filename defeatMissBossVideo;
 
-	Filename background;
+	Filename backgroundVideo;
+	Filename backgroundPalette;
 	Filename player;
-	Filename palette;
 	int health;
 	Shoots shoots;
 	ShootSequence shootSequence;
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 2a3bf727dc5..0c4f90f5728 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -138,35 +138,35 @@ enum yysymbol_kind_t
   YYSYMBOL_SNTOK = 6,                      /* SNTOK  */
   YYSYMBOL_KNTOK = 7,                      /* KNTOK  */
   YYSYMBOL_YXTOK = 8,                      /* YXTOK  */
-  YYSYMBOL_NUM = 9,                        /* NUM  */
-  YYSYMBOL_BYTE = 10,                      /* BYTE  */
-  YYSYMBOL_COMMENT = 11,                   /* COMMENT  */
-  YYSYMBOL_CTOK = 12,                      /* CTOK  */
-  YYSYMBOL_DTOK = 13,                      /* DTOK  */
-  YYSYMBOL_HTOK = 14,                      /* HTOK  */
-  YYSYMBOL_HETOK = 15,                     /* HETOK  */
-  YYSYMBOL_HLTOK = 16,                     /* HLTOK  */
-  YYSYMBOL_HUTOK = 17,                     /* HUTOK  */
-  YYSYMBOL_RETTOK = 18,                    /* RETTOK  */
-  YYSYMBOL_QTOK = 19,                      /* QTOK  */
-  YYSYMBOL_ENCTOK = 20,                    /* ENCTOK  */
-  YYSYMBOL_RESTOK = 21,                    /* RESTOK  */
-  YYSYMBOL_PTOK = 22,                      /* PTOK  */
-  YYSYMBOL_FTOK = 23,                      /* FTOK  */
-  YYSYMBOL_TTOK = 24,                      /* TTOK  */
-  YYSYMBOL_TPTOK = 25,                     /* TPTOK  */
-  YYSYMBOL_ATOK = 26,                      /* ATOK  */
-  YYSYMBOL_VTOK = 27,                      /* VTOK  */
-  YYSYMBOL_OTOK = 28,                      /* OTOK  */
-  YYSYMBOL_ONTOK = 29,                     /* ONTOK  */
-  YYSYMBOL_NTOK = 30,                      /* NTOK  */
-  YYSYMBOL_NSTOK = 31,                     /* NSTOK  */
-  YYSYMBOL_RTOK = 32,                      /* RTOK  */
-  YYSYMBOL_R0TOK = 33,                     /* R0TOK  */
-  YYSYMBOL_ITOK = 34,                      /* ITOK  */
-  YYSYMBOL_JTOK = 35,                      /* JTOK  */
-  YYSYMBOL_ZTOK = 36,                      /* ZTOK  */
-  YYSYMBOL_FNTOK = 37,                     /* FNTOK  */
+  YYSYMBOL_FNTOK = 9,                      /* FNTOK  */
+  YYSYMBOL_NUM = 10,                       /* NUM  */
+  YYSYMBOL_BYTE = 11,                      /* BYTE  */
+  YYSYMBOL_COMMENT = 12,                   /* COMMENT  */
+  YYSYMBOL_CTOK = 13,                      /* CTOK  */
+  YYSYMBOL_DTOK = 14,                      /* DTOK  */
+  YYSYMBOL_HTOK = 15,                      /* HTOK  */
+  YYSYMBOL_HETOK = 16,                     /* HETOK  */
+  YYSYMBOL_HLTOK = 17,                     /* HLTOK  */
+  YYSYMBOL_HUTOK = 18,                     /* HUTOK  */
+  YYSYMBOL_RETTOK = 19,                    /* RETTOK  */
+  YYSYMBOL_QTOK = 20,                      /* QTOK  */
+  YYSYMBOL_ENCTOK = 21,                    /* ENCTOK  */
+  YYSYMBOL_RESTOK = 22,                    /* RESTOK  */
+  YYSYMBOL_PTOK = 23,                      /* PTOK  */
+  YYSYMBOL_FTOK = 24,                      /* FTOK  */
+  YYSYMBOL_TTOK = 25,                      /* TTOK  */
+  YYSYMBOL_TPTOK = 26,                     /* TPTOK  */
+  YYSYMBOL_ATOK = 27,                      /* ATOK  */
+  YYSYMBOL_VTOK = 28,                      /* VTOK  */
+  YYSYMBOL_OTOK = 29,                      /* OTOK  */
+  YYSYMBOL_ONTOK = 30,                     /* ONTOK  */
+  YYSYMBOL_NTOK = 31,                      /* NTOK  */
+  YYSYMBOL_NSTOK = 32,                     /* NSTOK  */
+  YYSYMBOL_RTOK = 33,                      /* RTOK  */
+  YYSYMBOL_R0TOK = 34,                     /* R0TOK  */
+  YYSYMBOL_ITOK = 35,                      /* ITOK  */
+  YYSYMBOL_JTOK = 36,                      /* JTOK  */
+  YYSYMBOL_ZTOK = 37,                      /* ZTOK  */
   YYSYMBOL_NONETOK = 38,                   /* NONETOK  */
   YYSYMBOL_A0TOK = 39,                     /* A0TOK  */
   YYSYMBOL_P0TOK = 40,                     /* P0TOK  */
@@ -509,7 +509,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  6
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   133
+#define YYLAST   138
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  45
@@ -572,13 +572,13 @@ static const yytype_int8 yytranslate[] =
 static const yytype_int16 yyrline[] =
 {
        0,    75,    75,    75,    76,    79,    80,    81,    84,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,   102,
-     107,   108,   112,   116,   119,   123,   124,   138,   150,   155,
-     158,   161,   168,   169,   172,   173,   174,   177,   182,   187,
-     192,   196,   200,   204,   208,   212,   216,   220,   224,   228,
-     232,   236,   240,   244,   248,   252,   256,   259,   263,   264,
-     265,   266,   272,   276,   279,   280,   283,   286,   290,   297,
-     298
+      88,    92,    93,    94,    95,    96,   101,   102,   103,   109,
+     114,   115,   119,   123,   126,   130,   131,   147,   159,   164,
+     167,   170,   177,   178,   181,   182,   183,   186,   192,   197,
+     202,   206,   210,   214,   218,   222,   226,   230,   234,   238,
+     242,   246,   250,   254,   258,   262,   266,   269,   273,   278,
+     279,   280,   286,   290,   293,   294,   297,   300,   304,   311,
+     312
 };
 #endif
 
@@ -595,11 +595,11 @@ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
 static const char *const yytname[] =
 {
   "\"end of file\"", "error", "\"invalid token\"", "NAME", "FILENAME",
-  "BNTOK", "SNTOK", "KNTOK", "YXTOK", "NUM", "BYTE", "COMMENT", "CTOK",
-  "DTOK", "HTOK", "HETOK", "HLTOK", "HUTOK", "RETTOK", "QTOK", "ENCTOK",
-  "RESTOK", "PTOK", "FTOK", "TTOK", "TPTOK", "ATOK", "VTOK", "OTOK",
-  "ONTOK", "NTOK", "NSTOK", "RTOK", "R0TOK", "ITOK", "JTOK", "ZTOK",
-  "FNTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK", "C02TOK",
+  "BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "NUM", "BYTE", "COMMENT",
+  "CTOK", "DTOK", "HTOK", "HETOK", "HLTOK", "HUTOK", "RETTOK", "QTOK",
+  "ENCTOK", "RESTOK", "PTOK", "FTOK", "TTOK", "TPTOK", "ATOK", "VTOK",
+  "OTOK", "ONTOK", "NTOK", "NSTOK", "RTOK", "R0TOK", "ITOK", "JTOK",
+  "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK", "C02TOK",
   "$accept", "start", "$@1", "header", "hline", "enc", "body", "bline", YY_NULLPTR
 };
 
@@ -610,7 +610,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-75)
+#define YYPACT_NINF (-79)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -624,21 +624,21 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int8 yypact[] =
 {
-      -2,   -75,    -2,    11,    67,   -75,   -75,     8,    13,     6,
-      10,    12,    23,    30,    33,    67,    35,    37,    38,    -1,
-      17,    42,     5,    43,    44,    41,    50,    52,    53,    25,
-      67,   -75,    45,   -75,   -75,    54,    58,    60,    65,   -75,
-      66,    68,   -75,    69,    78,    79,    91,    93,   -75,    94,
-      95,   -75,   -75,   -75,   -75,    87,   -75,   -75,   -75,    97,
-      98,    99,   100,   -75,   -75,   -75,   -75,    72,   -75,   -75,
-     -75,   -75,    -5,   -75,   -75,   -75,   -75,   -75,   101,   107,
-     103,   104,   105,   106,    -5,   112,   108,   -75,   109,   110,
-      36,   111,   -75,     0,   113,   114,   115,    83,    -5,   117,
-      45,   118,   -75,   -75,   -75,   -75,   -75,   119,   120,   121,
-     -75,   -75,   -75,   -75,   -75,   -75,   -75,   -75,   -75,   -75,
-     -75,   -75,   -75,   -75,   -75,   -75,   -75,   -75,   -75,   122,
-     123,   -75,   -75,   -75,   -75,   -75,   -75,   -75,   -75,   -75,
-     -75,   -75
+       4,   -79,     4,    11,    67,   -79,   -79,    12,    13,     5,
+       8,    16,    22,    31,    32,    67,    34,    36,    37,    -1,
+      18,    41,     3,    42,    43,    50,    52,    53,    57,    26,
+      67,   -79,    24,   -79,   -79,    55,    59,    64,    65,   -79,
+      66,    68,   -79,    69,    78,    79,    91,    93,   -79,    94,
+      95,   -79,   -79,   -79,   -79,    48,   -79,   -79,   -79,    96,
+      97,    98,    99,   -79,   -79,   -79,   -79,    73,   -79,   -79,
+     -79,   -79,    -5,   -79,   -79,   -79,   -79,   -79,   100,   107,
+     102,     1,   103,   104,   105,    -5,   112,   108,   -79,   109,
+     110,    35,   111,   -79,   113,   114,   115,    75,    -5,   116,
+      24,   117,   -79,   -79,   -79,   -79,   -79,   -79,   -79,   118,
+     119,   120,   -79,   -79,   -79,   -79,   -79,   -79,   -79,   -79,
+     -79,   -79,   -79,   -79,   -79,   -79,   -79,   -79,   -79,   121,
+     122,   -79,   -79,   -79,   -79,   -79,   -79,   -79,   -79,   -79,
+     -79,   -79
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -654,11 +654,11 @@ static const yytype_int8 yydefact[] =
       17,    21,    22,    23,    24,     0,     5,    32,    27,     0,
        0,     0,     0,    25,    11,    19,    20,     0,    12,    13,
       15,    16,    36,    31,    28,    29,    30,    18,     0,     0,
-       0,     0,     0,     0,    36,     0,     0,    69,     0,     0,
-       0,     0,    70,     0,     0,     0,     0,     0,    36,     0,
-      33,     0,    64,    67,    65,    35,    39,     0,     0,     0,
-      40,    41,    54,    43,    44,    46,    52,    51,    45,    55,
-      42,    50,    49,    53,    47,    48,    56,    37,    38,     0,
+       0,     0,     0,     0,     0,    36,     0,     0,    69,     0,
+       0,     0,     0,    70,     0,     0,     0,     0,    36,     0,
+      33,     0,    37,    38,    64,    67,    65,    35,    39,     0,
+       0,     0,    40,    41,    54,    43,    44,    46,    52,    51,
+      45,    55,    42,    50,    49,    53,    47,    48,    56,     0,
        0,    66,     3,    34,    60,    68,    61,    63,    58,    59,
       57,    62
 };
@@ -666,7 +666,7 @@ static const yytype_int8 yydefact[] =
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -75,   131,   -75,   -10,   -75,    21,   -74,   -75
+     -79,   131,   -79,    -9,   -79,    38,   -78,   -79
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -680,59 +680,59 @@ static const yytype_int8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      78,    79,    80,    43,   127,    39,     1,    81,    82,    83,
-     105,     6,    31,    84,    47,    33,     2,    32,    85,    34,
-      56,    45,    35,    86,   133,    87,    48,    88,    89,    90,
-      91,    92,    93,    36,    94,    95,    96,    44,   128,   110,
-      37,   111,   112,    38,    40,    51,    41,    42,   113,   114,
-     115,    46,    49,    50,    52,   116,    53,    54,   117,   118,
-     119,    55,   120,    59,   121,    57,   122,    60,   123,    61,
-     124,   125,     7,     8,    62,    63,    77,    64,    65,     9,
-      10,    11,    12,    13,    14,    15,    16,    66,    67,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      68,    28,    69,    70,    71,    72,    73,    74,    75,    76,
-      99,   100,   101,   102,   103,   104,   106,   107,   108,   109,
-     126,   135,   129,   130,   131,   132,   134,   136,   137,   138,
-     139,   140,   141,     5
+      78,    79,    80,    43,    81,   102,    39,   107,    82,    83,
+      84,     6,     1,    47,    85,    33,    31,    32,    34,    86,
+     133,    56,    45,     2,    87,    48,    88,    35,    89,    90,
+      91,    92,    93,    36,    94,    95,    96,    44,   112,   103,
+     113,   114,    37,    38,    40,    57,    41,    42,   115,   116,
+     117,    46,    49,    50,    51,   118,    52,    53,   119,   120,
+     121,    54,   122,    55,   123,    59,   124,    72,   125,    60,
+     126,   127,     7,     8,    61,    62,    63,    77,    64,    65,
+       9,    10,    11,    12,    13,    14,    15,    16,    66,    67,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    68,    28,    69,    70,    71,    73,    74,    75,    76,
+      99,   100,   101,   104,   105,   106,   108,   132,   109,   110,
+     111,   128,     0,   129,   130,   131,   134,   136,   137,   138,
+     139,   140,   141,     5,     0,     0,     0,     0,   135
 };
 
 static const yytype_int8 yycheck[] =
 {
-       5,     6,     7,     4,     4,    15,     8,    12,    13,    14,
-      84,     0,     4,    18,     9,     9,    18,     4,    23,     9,
-      30,     4,    10,    28,    98,    30,    21,    32,    33,    34,
-      35,    36,    37,    10,    39,    40,    41,    38,    38,     3,
-      10,     5,     6,    10,     9,     4,     9,     9,    12,    13,
-      14,     9,     9,     9,     4,    19,     4,     4,    22,    23,
-      24,    36,    26,     9,    28,    20,    30,     9,    32,     9,
-      34,    35,     5,     6,     9,     9,     4,     9,     9,    12,
-      13,    14,    15,    16,    17,    18,    19,     9,     9,    22,
+       5,     6,     7,     4,     9,     4,    15,    85,    13,    14,
+      15,     0,     8,    10,    19,    10,     4,     4,    10,    24,
+      98,    30,     4,    19,    29,    22,    31,    11,    33,    34,
+      35,    36,    37,    11,    39,    40,    41,    38,     3,    38,
+       5,     6,    11,    11,    10,    21,    10,    10,    13,    14,
+      15,    10,    10,    10,     4,    20,     4,     4,    23,    24,
+      25,     4,    27,    37,    29,    10,    31,    19,    33,    10,
+      35,    36,     5,     6,    10,    10,    10,     4,    10,    10,
+      13,    14,    15,    16,    17,    18,    19,    20,    10,    10,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-       9,    34,     9,     9,     9,    18,     9,     9,     9,     9,
-       9,     4,     9,     9,     9,     9,     4,     9,     9,     9,
-       9,   100,     9,     9,     9,    42,     9,     9,     9,     9,
-       9,     9,     9,     2
+      33,    10,    35,    10,    10,    10,    10,    10,    10,    10,
+      10,     4,    10,    10,    10,    10,     4,    42,    10,    10,
+      10,    10,    -1,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,     2,    -1,    -1,    -1,    -1,   100
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
    state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
-       0,     8,    18,    46,    47,    46,     0,     5,     6,    12,
-      13,    14,    15,    16,    17,    18,    19,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    34,    48,
-      49,     4,     4,     9,     9,    10,    10,    10,    10,    48,
-       9,     9,     9,     4,    38,     4,     9,     9,    21,     9,
-       9,     4,     4,     4,     4,    36,    48,    20,    50,     9,
-       9,     9,     9,     9,     9,     9,     9,     9,     9,     9,
-       9,     9,    18,     9,     9,     9,     9,     4,     5,     6,
-       7,    12,    13,    14,    18,    23,    28,    30,    32,    33,
-      34,    35,    36,    37,    39,    40,    41,    51,    52,     9,
-       4,     9,     9,     9,     9,    51,     4,     9,     9,     9,
-       3,     5,     6,    12,    13,    14,    19,    22,    23,    24,
-      26,    28,    30,    32,    34,    35,     9,     4,    38,     9,
-       9,     9,    42,    51,     9,    50,     9,     9,     9,     9,
-       9,     9
+       0,     8,    19,    46,    47,    46,     0,     5,     6,    13,
+      14,    15,    16,    17,    18,    19,    20,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    35,    48,
+      49,     4,     4,    10,    10,    11,    11,    11,    11,    48,
+      10,    10,    10,     4,    38,     4,    10,    10,    22,    10,
+      10,     4,     4,     4,     4,    37,    48,    21,    50,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    19,    10,    10,    10,    10,     4,     5,     6,
+       7,     9,    13,    14,    15,    19,    24,    29,    31,    33,
+      34,    35,    36,    37,    39,    40,    41,    51,    52,    10,
+       4,    10,     4,    38,    10,    10,    10,    51,     4,    10,
+      10,    10,     3,     5,     6,    13,    14,    15,    20,    23,
+      24,    25,    27,    29,    31,    33,    35,    36,    10,    10,
+      10,    10,    42,    51,    10,    50,    10,    10,    10,    10,
+      10,    10
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
@@ -1243,122 +1243,129 @@ yyreduce:
 
   case 10: /* hline: DTOK NUM  */
 #line 88 "engines/hypno/grammar_arc.y"
-                    { debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i)); }
-#line 1248 "engines/hypno/grammar_arc.cpp"
+                    { 
+		g_parsedArc->frameDelay = (yyvsp[0].i);
+		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
+	}
+#line 1251 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 11: /* hline: PTOK NUM NUM  */
-#line 89 "engines/hypno/grammar_arc.y"
+#line 92 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1254 "engines/hypno/grammar_arc.cpp"
+#line 1257 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 12: /* hline: ATOK NUM NUM  */
-#line 90 "engines/hypno/grammar_arc.y"
+#line 93 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1260 "engines/hypno/grammar_arc.cpp"
+#line 1263 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 13: /* hline: VTOK NUM NUM  */
-#line 91 "engines/hypno/grammar_arc.y"
+#line 94 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1266 "engines/hypno/grammar_arc.cpp"
+#line 1269 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 14: /* hline: VTOK RESTOK  */
-#line 92 "engines/hypno/grammar_arc.y"
+#line 95 "engines/hypno/grammar_arc.y"
                       { debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1272 "engines/hypno/grammar_arc.cpp"
+#line 1275 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 15: /* hline: OTOK NUM NUM  */
-#line 93 "engines/hypno/grammar_arc.y"
-                       { debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1278 "engines/hypno/grammar_arc.cpp"
+#line 96 "engines/hypno/grammar_arc.y"
+                       {
+		g_parsedArc->obj1KillsRequired = (yyvsp[-1].i);
+		g_parsedArc->obj1MissesAllowed = (yyvsp[0].i);
+		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
+	}
+#line 1285 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 16: /* hline: ONTOK NUM NUM  */
-#line 94 "engines/hypno/grammar_arc.y"
+#line 101 "engines/hypno/grammar_arc.y"
                         { debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1284 "engines/hypno/grammar_arc.cpp"
+#line 1291 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 17: /* hline: ONTOK NUM  */
-#line 95 "engines/hypno/grammar_arc.y"
+#line 102 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i)); }
-#line 1290 "engines/hypno/grammar_arc.cpp"
+#line 1297 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 18: /* hline: TPTOK FILENAME NUM FILENAME  */
-#line 96 "engines/hypno/grammar_arc.y"
+#line 103 "engines/hypno/grammar_arc.y"
                                       {
 		g_parsedArc->transitionVideo = (yyvsp[-2].s);
 		g_parsedArc->transitionTime = (yyvsp[-1].i);
 		g_parsedArc->transitionPalette = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s)); 
 	}
-#line 1301 "engines/hypno/grammar_arc.cpp"
+#line 1308 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 19: /* hline: TTOK FILENAME NUM  */
-#line 102 "engines/hypno/grammar_arc.y"
+#line 109 "engines/hypno/grammar_arc.y"
                             { 
 		g_parsedArc->transitionVideo = (yyvsp[-1].s);
 		g_parsedArc->transitionTime = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i)); 
 	}
-#line 1311 "engines/hypno/grammar_arc.cpp"
+#line 1318 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 20: /* hline: TTOK NONETOK NUM  */
-#line 107 "engines/hypno/grammar_arc.y"
+#line 114 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1317 "engines/hypno/grammar_arc.cpp"
+#line 1324 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 21: /* hline: NTOK FILENAME  */
-#line 108 "engines/hypno/grammar_arc.y"
+#line 115 "engines/hypno/grammar_arc.y"
                          { 
-		g_parsedArc->background = (yyvsp[0].s); 
+		g_parsedArc->backgroundVideo = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s)); 
 	}
-#line 1326 "engines/hypno/grammar_arc.cpp"
+#line 1333 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 22: /* hline: NSTOK FILENAME  */
-#line 112 "engines/hypno/grammar_arc.y"
+#line 119 "engines/hypno/grammar_arc.y"
                           { 
-		g_parsedArc->background = (yyvsp[0].s); 
+		g_parsedArc->backgroundVideo = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s)); 
 	}
-#line 1335 "engines/hypno/grammar_arc.cpp"
+#line 1342 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 23: /* hline: RTOK FILENAME  */
-#line 116 "engines/hypno/grammar_arc.y"
+#line 123 "engines/hypno/grammar_arc.y"
                          {
-		g_parsedArc->palette = (yyvsp[0].s); 
+		g_parsedArc->backgroundPalette = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1343 "engines/hypno/grammar_arc.cpp"
+#line 1350 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 24: /* hline: ITOK FILENAME  */
-#line 119 "engines/hypno/grammar_arc.y"
+#line 126 "engines/hypno/grammar_arc.y"
                         { 
 		g_parsedArc->player = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 		}
-#line 1352 "engines/hypno/grammar_arc.cpp"
+#line 1359 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 25: /* hline: QTOK NUM NUM  */
-#line 123 "engines/hypno/grammar_arc.y"
+#line 130 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1358 "engines/hypno/grammar_arc.cpp"
+#line 1365 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 26: /* hline: BNTOK FILENAME  */
-#line 124 "engines/hypno/grammar_arc.y"
+#line 131 "engines/hypno/grammar_arc.y"
                          {
 		if (Common::String("B0") == (yyvsp[-1].s))
 			g_parsedArc->intros.push_back((yyvsp[0].s));
@@ -1367,17 +1374,19 @@ yyreduce:
 		else if (Common::String("B2") == (yyvsp[-1].s))
 			g_parsedArc->nextLevelVideo = (yyvsp[0].s);
 		else if (Common::String("B3") == (yyvsp[-1].s))
-			g_parsedArc->defeatNoEnergyVideo = (yyvsp[0].s);
+			g_parsedArc->defeatNoEnergyFirstVideo = (yyvsp[0].s);
 		else if (Common::String("B4") == (yyvsp[-1].s))
 			g_parsedArc->defeatMissBossVideo = (yyvsp[0].s);
+		else if (Common::String("B5") == (yyvsp[-1].s))
+			g_parsedArc->defeatNoEnergySecondVideo = (yyvsp[0].s);
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s)); 
 	}
-#line 1377 "engines/hypno/grammar_arc.cpp"
+#line 1386 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 27: /* hline: SNTOK FILENAME enc  */
-#line 138 "engines/hypno/grammar_arc.y"
+#line 147 "engines/hypno/grammar_arc.y"
                              {
 		if (Common::String("S0") == (yyvsp[-2].s))
 			g_parsedArc->music = (yyvsp[-1].s);
@@ -1390,315 +1399,320 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); 
 	}
-#line 1394 "engines/hypno/grammar_arc.cpp"
+#line 1403 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 28: /* hline: HETOK BYTE NUM NUM  */
-#line 150 "engines/hypno/grammar_arc.y"
+#line 159 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HE %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1404 "engines/hypno/grammar_arc.cpp"
+#line 1413 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 29: /* hline: HLTOK BYTE NUM NUM  */
-#line 155 "engines/hypno/grammar_arc.y"
+#line 164 "engines/hypno/grammar_arc.y"
                              { 
 		debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1412 "engines/hypno/grammar_arc.cpp"
+#line 1421 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 30: /* hline: HUTOK BYTE NUM NUM  */
-#line 158 "engines/hypno/grammar_arc.y"
+#line 167 "engines/hypno/grammar_arc.y"
                              { 
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1420 "engines/hypno/grammar_arc.cpp"
+#line 1429 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 31: /* hline: HTOK BYTE NUM NUM  */
-#line 161 "engines/hypno/grammar_arc.y"
+#line 170 "engines/hypno/grammar_arc.y"
                             {
 		Segment segment((yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1430 "engines/hypno/grammar_arc.cpp"
+#line 1439 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 37: /* bline: FNTOK FILENAME  */
-#line 177 "engines/hypno/grammar_arc.y"
+#line 186 "engines/hypno/grammar_arc.y"
                       { 
 		shoot = new Shoot();
-		shoot->animation = (yyvsp[0].s);
+		if (Common::String("F0") == (yyvsp[-1].s))
+			shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1440 "engines/hypno/grammar_arc.cpp"
+#line 1450 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 38: /* bline: FNTOK NONETOK  */
-#line 182 "engines/hypno/grammar_arc.y"
+#line 192 "engines/hypno/grammar_arc.y"
                         { 
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE"); 
 	}
-#line 1450 "engines/hypno/grammar_arc.cpp"
+#line 1460 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 39: /* bline: FTOK FILENAME  */
-#line 187 "engines/hypno/grammar_arc.y"
+#line 197 "engines/hypno/grammar_arc.y"
                         { 
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1460 "engines/hypno/grammar_arc.cpp"
+#line 1470 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 40: /* bline: ITOK NAME  */
-#line 192 "engines/hypno/grammar_arc.y"
+#line 202 "engines/hypno/grammar_arc.y"
                      { 
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1469 "engines/hypno/grammar_arc.cpp"
+#line 1479 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 41: /* bline: ITOK BNTOK  */
-#line 196 "engines/hypno/grammar_arc.y"
+#line 206 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1478 "engines/hypno/grammar_arc.cpp"
+#line 1488 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 42: /* bline: ITOK ATOK  */
-#line 200 "engines/hypno/grammar_arc.y"
+#line 210 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A"); 
 	}
-#line 1487 "engines/hypno/grammar_arc.cpp"
+#line 1497 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 43: /* bline: ITOK CTOK  */
-#line 204 "engines/hypno/grammar_arc.y"
+#line 214 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C"); 
 	}
-#line 1496 "engines/hypno/grammar_arc.cpp"
+#line 1506 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 44: /* bline: ITOK DTOK  */
-#line 208 "engines/hypno/grammar_arc.y"
+#line 218 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D"); 
 	}
-#line 1505 "engines/hypno/grammar_arc.cpp"
+#line 1515 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 45: /* bline: ITOK FTOK  */
-#line 212 "engines/hypno/grammar_arc.y"
+#line 222 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F"); 
 	}
-#line 1514 "engines/hypno/grammar_arc.cpp"
+#line 1524 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 46: /* bline: ITOK HTOK  */
-#line 216 "engines/hypno/grammar_arc.y"
+#line 226 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H"); 
 	}
-#line 1523 "engines/hypno/grammar_arc.cpp"
+#line 1533 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 47: /* bline: ITOK ITOK  */
-#line 220 "engines/hypno/grammar_arc.y"
+#line 230 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I"); 
 	}
-#line 1532 "engines/hypno/grammar_arc.cpp"
+#line 1542 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 48: /* bline: ITOK JTOK  */
-#line 224 "engines/hypno/grammar_arc.y"
+#line 234 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J"); 
 	}
-#line 1541 "engines/hypno/grammar_arc.cpp"
+#line 1551 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 49: /* bline: ITOK NTOK  */
-#line 228 "engines/hypno/grammar_arc.y"
+#line 238 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N"); 
 	}
-#line 1550 "engines/hypno/grammar_arc.cpp"
+#line 1560 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 50: /* bline: ITOK OTOK  */
-#line 232 "engines/hypno/grammar_arc.y"
+#line 242 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O"); 
 	}
-#line 1559 "engines/hypno/grammar_arc.cpp"
+#line 1569 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 51: /* bline: ITOK PTOK  */
-#line 236 "engines/hypno/grammar_arc.y"
+#line 246 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P"); 
 	}
-#line 1568 "engines/hypno/grammar_arc.cpp"
+#line 1578 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 52: /* bline: ITOK QTOK  */
-#line 240 "engines/hypno/grammar_arc.y"
+#line 250 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q"); 
 	}
-#line 1577 "engines/hypno/grammar_arc.cpp"
+#line 1587 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 53: /* bline: ITOK RTOK  */
-#line 244 "engines/hypno/grammar_arc.y"
+#line 254 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R"); 
 	}
-#line 1586 "engines/hypno/grammar_arc.cpp"
+#line 1596 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 54: /* bline: ITOK SNTOK  */
-#line 248 "engines/hypno/grammar_arc.y"
+#line 258 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1595 "engines/hypno/grammar_arc.cpp"
+#line 1605 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 55: /* bline: ITOK TTOK  */
-#line 252 "engines/hypno/grammar_arc.y"
+#line 262 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T"); 
 	}
-#line 1604 "engines/hypno/grammar_arc.cpp"
+#line 1614 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 56: /* bline: JTOK NUM  */
-#line 256 "engines/hypno/grammar_arc.y"
+#line 266 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i)); 
 	}
-#line 1612 "engines/hypno/grammar_arc.cpp"
+#line 1622 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 57: /* bline: A0TOK NUM NUM  */
-#line 259 "engines/hypno/grammar_arc.y"
+#line 269 "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 1621 "engines/hypno/grammar_arc.cpp"
+#line 1631 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 58: /* bline: RTOK NUM NUM  */
-#line 263 "engines/hypno/grammar_arc.y"
-                        { debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1627 "engines/hypno/grammar_arc.cpp"
+#line 273 "engines/hypno/grammar_arc.y"
+                        {
+		shoot->obj1KillsCount = (yyvsp[-1].i);
+		shoot->obj1MissesCount = (yyvsp[0].i); 
+		debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
+	}
+#line 1641 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 59: /* bline: R0TOK NUM NUM  */
-#line 264 "engines/hypno/grammar_arc.y"
+#line 278 "engines/hypno/grammar_arc.y"
                          { debugC(1, kHypnoDebugParser, "R0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1633 "engines/hypno/grammar_arc.cpp"
+#line 1647 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 60: /* bline: BNTOK NUM NUM  */
-#line 265 "engines/hypno/grammar_arc.y"
+#line 279 "engines/hypno/grammar_arc.y"
                         { debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1639 "engines/hypno/grammar_arc.cpp"
+#line 1653 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 61: /* bline: KNTOK NUM NUM  */
-#line 266 "engines/hypno/grammar_arc.y"
+#line 280 "engines/hypno/grammar_arc.y"
                         { 
 		shoot->explosionFrame = (yyvsp[0].i);
 		if (shoot->attackFrame == 0) // Override attack frame if it is not specified
 			shoot->attackFrame = (yyvsp[0].i) - 4;
 		debugC(1, kHypnoDebugParser, "KN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1650 "engines/hypno/grammar_arc.cpp"
+#line 1664 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 62: /* bline: P0TOK NUM NUM  */
-#line 272 "engines/hypno/grammar_arc.y"
+#line 286 "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 1659 "engines/hypno/grammar_arc.cpp"
+#line 1673 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 63: /* bline: OTOK NUM NUM  */
-#line 276 "engines/hypno/grammar_arc.y"
+#line 290 "engines/hypno/grammar_arc.y"
                        { 
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1667 "engines/hypno/grammar_arc.cpp"
+#line 1681 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 64: /* bline: CTOK NUM  */
-#line 279 "engines/hypno/grammar_arc.y"
+#line 293 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1673 "engines/hypno/grammar_arc.cpp"
+#line 1687 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 65: /* bline: HTOK NUM  */
-#line 280 "engines/hypno/grammar_arc.y"
+#line 294 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrame = (yyvsp[0].i); 
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1681 "engines/hypno/grammar_arc.cpp"
+#line 1695 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 66: /* bline: WTOK NUM  */
-#line 283 "engines/hypno/grammar_arc.y"
+#line 297 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1689 "engines/hypno/grammar_arc.cpp"
+#line 1703 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 67: /* bline: DTOK NUM  */
-#line 286 "engines/hypno/grammar_arc.y"
+#line 300 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i)); 
 	}
-#line 1698 "engines/hypno/grammar_arc.cpp"
+#line 1712 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 68: /* bline: SNTOK FILENAME enc  */
-#line 290 "engines/hypno/grammar_arc.y"
+#line 304 "engines/hypno/grammar_arc.y"
                              { 
 		if (Common::String("S1") == (yyvsp[-2].s))
 			shoot->deathSound = (yyvsp[-1].s);
@@ -1706,28 +1720,28 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 		 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 1710 "engines/hypno/grammar_arc.cpp"
+#line 1724 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 69: /* bline: NTOK  */
-#line 297 "engines/hypno/grammar_arc.y"
+#line 311 "engines/hypno/grammar_arc.y"
                { debugC(1, kHypnoDebugParser, "N"); }
-#line 1716 "engines/hypno/grammar_arc.cpp"
+#line 1730 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 70: /* bline: ZTOK  */
-#line 298 "engines/hypno/grammar_arc.y"
+#line 312 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot); 
 		//delete shoot; 
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z"); 
 	}
-#line 1727 "engines/hypno/grammar_arc.cpp"
+#line 1741 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 1731 "engines/hypno/grammar_arc.cpp"
+#line 1745 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index c8461a92e37..0a481aa1f88 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -55,14 +55,14 @@ using namespace Hypno;
 	int i;	 /* integer value */
 }
 
-%token<s> NAME FILENAME BNTOK SNTOK KNTOK YXTOK
+%token<s> NAME FILENAME BNTOK SNTOK KNTOK YXTOK FNTOK
 %token<i> NUM BYTE
 // header
 %token COMMENT CTOK DTOK HTOK HETOK HLTOK HUTOK RETTOK QTOK ENCTOK RESTOK
 %token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK ONTOK NTOK NSTOK RTOK R0TOK ITOK JTOK ZTOK
 
 // body
-%token FNTOK NONETOK A0TOK P0TOK WTOK
+%token NONETOK A0TOK P0TOK WTOK
 
 // end
 %token XTOK
@@ -85,12 +85,19 @@ hline: 	CTOK NUM {
 		g_parsedArc->id = $2; 
 		debugC(1, kHypnoDebugParser, "C %d", $2); }
 	| FTOK NUM { debugC(1, kHypnoDebugParser, "F %d", $2); }
-	| DTOK NUM  { debugC(1, kHypnoDebugParser, "D %d", $2); }
+	| DTOK NUM  { 
+		g_parsedArc->frameDelay = $2;
+		debugC(1, kHypnoDebugParser, "D %d", $2);
+	}
 	| PTOK NUM NUM { debugC(1, kHypnoDebugParser, "P %d %d", $2, $3); }
 	| ATOK NUM NUM { debugC(1, kHypnoDebugParser, "A %d %d", $2, $3); }
 	| VTOK NUM NUM { debugC(1, kHypnoDebugParser, "V %d %d", $2, $3); }
 	| VTOK RESTOK { debugC(1, kHypnoDebugParser, "V 320,200"); }
-	| OTOK NUM NUM { debugC(1, kHypnoDebugParser, "O %d %d", $2, $3); }
+	| OTOK NUM NUM {
+		g_parsedArc->obj1KillsRequired = $2;
+		g_parsedArc->obj1MissesAllowed = $3;
+		debugC(1, kHypnoDebugParser, "O %d %d", $2, $3);
+	}
 	| ONTOK NUM NUM { debugC(1, kHypnoDebugParser, "ON %d %d", $2, $3); }
 	| ONTOK NUM { debugC(1, kHypnoDebugParser, "ON %d", $2); }
 	| TPTOK FILENAME NUM FILENAME {
@@ -106,15 +113,15 @@ hline: 	CTOK NUM {
 	}
 	| TTOK NONETOK NUM { debugC(1, kHypnoDebugParser, "T NONE %d", $3); }
 	| NTOK FILENAME  { 
-		g_parsedArc->background = $2; 
+		g_parsedArc->backgroundVideo = $2; 
 		debugC(1, kHypnoDebugParser, "N %s", $2); 
 	}
 	| NSTOK FILENAME  { 
-		g_parsedArc->background = $2; 
+		g_parsedArc->backgroundVideo = $2; 
 		debugC(1, kHypnoDebugParser, "N* %s", $2); 
 	}
 	| RTOK FILENAME  {
-		g_parsedArc->palette = $2; 
+		g_parsedArc->backgroundPalette = $2; 
 		debugC(1, kHypnoDebugParser, "R %s", $2); }
 	| ITOK FILENAME { 
 		g_parsedArc->player = $2; 
@@ -129,9 +136,11 @@ hline: 	CTOK NUM {
 		else if (Common::String("B2") == $1)
 			g_parsedArc->nextLevelVideo = $2;
 		else if (Common::String("B3") == $1)
-			g_parsedArc->defeatNoEnergyVideo = $2;
+			g_parsedArc->defeatNoEnergyFirstVideo = $2;
 		else if (Common::String("B4") == $1)
 			g_parsedArc->defeatMissBossVideo = $2;
+		else if (Common::String("B5") == $1)
+			g_parsedArc->defeatNoEnergySecondVideo = $2;
 
 		debugC(1, kHypnoDebugParser, "BN %s", $2); 
 	}
@@ -176,7 +185,8 @@ body: bline body
 
 bline: FNTOK FILENAME { 
 		shoot = new Shoot();
-		shoot->animation = $2;
+		if (Common::String("F0") == $1)
+			shoot->animation = $2;
 		debugC(1, kHypnoDebugParser, "FN %s", $2); 
 	}
 	| FNTOK NONETOK { 
@@ -260,7 +270,11 @@ bline: FNTOK FILENAME {
 		shoot->position = Common::Point($2, $3);
 		debugC(1, kHypnoDebugParser, "A0 %d %d", $2, $3); 
 	}
-	| RTOK NUM NUM  { debugC(1, kHypnoDebugParser, "R %d %d", $2, $3); }
+	| RTOK NUM NUM  {
+		shoot->obj1KillsCount = $2;
+		shoot->obj1MissesCount = $3; 
+		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 { 
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index 2d9e10b027a..6e23ef90b16 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -55,6 +55,7 @@ HypnoEngine::HypnoEngine(OSystem *syst, const ADGameDescription *gd)
 	  _countdown(0), _timerStarted(false), _score(0),
 	  _defaultCursor(""), _checkpoint(""),
 	  _currentPlayerPosition(kPlayerLeft), _lastPlayerPosition(kPlayerLeft),
+	  _obj1KillsCount(0), _obj1MissesCount(0),
 	  _screenW(0), _screenH(0) { // Every games initializes its own resolution
 	_rnd = new Common::RandomSource("hypno");
 
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 66592de600d..a8adce8463a 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -239,6 +239,10 @@ public:
 	int _playerFrameIdx;
 	int _playerFrameSep;
 
+	// Objectives
+	uint32 _obj1KillsCount;
+	uint32 _obj1MissesCount;
+
 	void loadFont(const Filename &name);
 	void drawString(const Common::String &str, int x, int y, int w, uint32 c);
 	const Graphics::Font *_font;
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index 7d1cfeab1c1..530131c06a6 100644
--- a/engines/hypno/lexer_arc.cpp
+++ b/engines/hypno/lexer_arc.cpp
@@ -1239,7 +1239,7 @@ return TPTOK;
 case 25:
 YY_RULE_SETUP
 #line 67 "engines/hypno/lexer_arc.l"
-return FNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index a28e87b0143..3956cb8e968 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -64,7 +64,7 @@ W							return WTOK;
 X							return XTOK;
 T							return TTOK;
 Tp							return TPTOK;
-F[0-9]						return FNTOK;
+F[0-9]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
 F							return FTOK;
 S[0-9]						HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
 A0							return A0TOK;
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index 2b9f6bf2d70..367c396e062 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -68,35 +68,35 @@ extern int HYPNO_ARC_debug;
     SNTOK = 261,                   /* SNTOK  */
     KNTOK = 262,                   /* KNTOK  */
     YXTOK = 263,                   /* YXTOK  */
-    NUM = 264,                     /* NUM  */
-    BYTE = 265,                    /* BYTE  */
-    COMMENT = 266,                 /* COMMENT  */
-    CTOK = 267,                    /* CTOK  */
-    DTOK = 268,                    /* DTOK  */
-    HTOK = 269,                    /* HTOK  */
-    HETOK = 270,                   /* HETOK  */
-    HLTOK = 271,                   /* HLTOK  */
-    HUTOK = 272,                   /* HUTOK  */
-    RETTOK = 273,                  /* RETTOK  */
-    QTOK = 274,                    /* QTOK  */
-    ENCTOK = 275,                  /* ENCTOK  */
-    RESTOK = 276,                  /* RESTOK  */
-    PTOK = 277,                    /* PTOK  */
-    FTOK = 278,                    /* FTOK  */
-    TTOK = 279,                    /* TTOK  */
-    TPTOK = 280,                   /* TPTOK  */
-    ATOK = 281,                    /* ATOK  */
-    VTOK = 282,                    /* VTOK  */
-    OTOK = 283,                    /* OTOK  */
-    ONTOK = 284,                   /* ONTOK  */
-    NTOK = 285,                    /* NTOK  */
-    NSTOK = 286,                   /* NSTOK  */
-    RTOK = 287,                    /* RTOK  */
-    R0TOK = 288,                   /* R0TOK  */
-    ITOK = 289,                    /* ITOK  */
-    JTOK = 290,                    /* JTOK  */
-    ZTOK = 291,                    /* ZTOK  */
-    FNTOK = 292,                   /* FNTOK  */
+    FNTOK = 264,                   /* FNTOK  */
+    NUM = 265,                     /* NUM  */
+    BYTE = 266,                    /* BYTE  */
+    COMMENT = 267,                 /* COMMENT  */
+    CTOK = 268,                    /* CTOK  */
+    DTOK = 269,                    /* DTOK  */
+    HTOK = 270,                    /* HTOK  */
+    HETOK = 271,                   /* HETOK  */
+    HLTOK = 272,                   /* HLTOK  */
+    HUTOK = 273,                   /* HUTOK  */
+    RETTOK = 274,                  /* RETTOK  */
+    QTOK = 275,                    /* QTOK  */
+    ENCTOK = 276,                  /* ENCTOK  */
+    RESTOK = 277,                  /* RESTOK  */
+    PTOK = 278,                    /* PTOK  */
+    FTOK = 279,                    /* FTOK  */
+    TTOK = 280,                    /* TTOK  */
+    TPTOK = 281,                   /* TPTOK  */
+    ATOK = 282,                    /* ATOK  */
+    VTOK = 283,                    /* VTOK  */
+    OTOK = 284,                    /* OTOK  */
+    ONTOK = 285,                   /* ONTOK  */
+    NTOK = 286,                    /* NTOK  */
+    NSTOK = 287,                   /* NSTOK  */
+    RTOK = 288,                    /* RTOK  */
+    R0TOK = 289,                   /* R0TOK  */
+    ITOK = 290,                    /* ITOK  */
+    JTOK = 291,                    /* JTOK  */
+    ZTOK = 292,                    /* ZTOK  */
     NONETOK = 293,                 /* NONETOK  */
     A0TOK = 294,                   /* A0TOK  */
     P0TOK = 295,                   /* P0TOK  */
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index 8173b6ca975..73c8ffe6547 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -55,7 +55,7 @@ void WetEngine::drawPlayer() {
 
 	if (_playerFrameIdx < _playerFrameSep) {
 		// TARGET ACQUIRED frame
-		uint32 c = 251;
+		uint32 c = 251; // green
 		_compositeSurface->drawLine(113, 1, 119, 1, c);
 		_compositeSurface->drawLine(200, 1, 206, 1, c);
 
@@ -65,7 +65,7 @@ void WetEngine::drawPlayer() {
 		_compositeSurface->drawLine(113, 9, 119, 9, c);
 		_compositeSurface->drawLine(200, 9, 206, 9, c);
 
-		c = _pixelFormat.RGBToColor(255, 0, 0);
+		c = 250; // red ?
 		Common::Point mousePos = g_system->getEventManager()->getMousePos();
 		int i = detectTarget(mousePos);
 		if (i > 0)
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 398e181f7e3..1adb7ab7c1b 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -28,6 +28,9 @@ namespace Hypno {
 
 static const chapterEntry rawChapterTable[] = {
 	{11, {44, 172}, {218, 172}, {0, 0}}, 		// c11
+	{20, {44, 172}, {218, 172}, {0, 0}}, 		// c20
+	{21, {70, 160}, {180, 160}, {220, 185}}, 	// c21
+	{22, {70, 160}, {180, 160}, {220, 185}}, 	// c22
 	{31, {70, 160}, {180, 160}, {220, 185}}, 	// c31
 	{52, {60, 167}, {190, 167}, {135, 187}}, 	// c52
 	{0,  {0,  0},   {0,   0},   {0,   0}}    	// NULL
@@ -216,23 +219,28 @@ void WetEngine::loadAssetsFullGame() {
 	_levels["<main_menu>"]->levelIfWin = "c11";
 
 	loadArcadeLevel("c110.mi_", "c10", "");
+	_levels["c110.mi_"]->levelIfLose = "<quit>";
 	_levels["c110.mi_"]->intros.push_front("c_misc/intros.smk");
 
 	loadArcadeLevel("c111.mi_", "c10", "");
+	_levels["c111.mi_"]->levelIfLose = "<quit>";
 	_levels["c111.mi_"]->intros.push_front("c_misc/intros.smk");
 
-	 loadArcadeLevel("c112.mi_", "c10", "");
-	 _levels["c112.mi_"]->intros.push_front("c_misc/intros.smk");
+	loadArcadeLevel("c112.mi_", "c10", "");
+	_levels["c112.mi_"]->levelIfLose = "<quit>";
+	_levels["c112.mi_"]->intros.push_front("c_misc/intros.smk");
 
-	loadArcadeLevel("c100.mi_", "c20", "");
-	loadArcadeLevel("c101.mi_", "c20", "");
-	loadArcadeLevel("c102.mi_", "c20", "");
+	loadArcadeLevel("c100.mi_", "c21", "");
+	loadArcadeLevel("c101.mi_", "c21", "");
+	loadArcadeLevel("c102.mi_", "c21", "");
 
-	//loadArcadeLevel("c300.mi_", "???", "");
-	//loadArcadeLevel("c201.mi_", "???", "");
-	//loadArcadeLevel("c202.mi_", "???", "");
+	loadArcadeLevel("c210.mi_", "c22", "");
+	loadArcadeLevel("c211.mi_", "c22", "");
+	loadArcadeLevel("c212.mi_", "c22", "");
 
-	//loadArcadeLevel("c20", "", "");
+	loadArcadeLevel("c220.mi_", "???", "");
+	loadArcadeLevel("c201.mi_", "???", "");
+	loadArcadeLevel("c202.mi_", "???", "");
 
 	loadLib("", "c_misc/fonts.lib", true);
 	loadLib("sound/", "c_misc/sound.lib", true);


Commit: 6db6c8fb691356bba409471f396ff556d081c527
    https://github.com/scummvm/scummvm/commit/6db6c8fb691356bba409471f396ff556d081c527
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-01-30T11:41:11+01:00

Commit Message:
HYPNO: enable health count

Changed paths:
    engines/hypno/arcade.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index d6e74730f34..dc6446dc2db 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -343,7 +343,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			if (it->video && it->video->decoder) {
 				int frame = it->video->decoder->getCurFrame();
 				if (frame > 0 && frame >= (int)(it->attackFrame) && !it->destroyed) {
-					//_health = _health - it->attackWeight;
+					_health = _health - it->attackWeight;
 					hitPlayer();
 					it->attackFrame = it->video->decoder->getFrameCount() + 1; // It will never attack again
 				}




More information about the Scummvm-git-logs mailing list