[Scummvm-git-logs] scummvm master -> 1955beaf0f9f622d676fb0f1cdd5724cd6e2987c

neuromancer noreply at scummvm.org
Thu Mar 31 19:38:31 UTC 2022


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

Summary:
7c4183532f HYPNO: better handling of enemies using palette in wet
fbf315272b HYPNO: better handling of transitions and missed targets in wet
1955beaf0f HYPNO: restore music after transition in wet


Commit: 7c4183532f94cf59cb4897acfdb80f2d2625d74c
    https://github.com/scummvm/scummvm/commit/7c4183532f94cf59cb4897acfdb80f2d2625d74c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-03-31T21:38:40+02:00

Commit Message:
HYPNO: better handling of enemies using palette in wet

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


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index d524a7a2ce6..e7b080bd6b5 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -414,6 +414,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 				for (Shoots::iterator it = arc->shoots.begin(); it != arc->shoots.end(); ++it) {
 					if (it->name == si.name) {
 						Shoot s = *it;
+						s.startFrame = si.timestamp;
 						if (it->animation == "NONE") {
 							if ((uint32)(it->name[0]) == _currentPlayerPosition) {
 								_health = _health - it->attackWeight;
@@ -474,6 +475,16 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 				} else if (it->video->decoder->needsUpdate() && needsUpdate) {
 					updateScreen(*it->video);
 				}
+			} {
+				uint32 frame = background.decoder->getCurFrame();
+				uint32 bodyLastFrame = it->bodyFrames[it->bodyFrames.size() - 1].lastFrame();
+				if (frame > it->startFrame && frame - it->startFrame > bodyLastFrame)
+					if (!it->destroyed) {
+						_health = _health - it->attackWeight;
+						hitPlayer();
+						missTarget(it, arc, background);
+						shootsToRemove.push_back(i);
+					}
 			}
 			i++;
 		}
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index d30aa729f19..bc1ea6e6047 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -380,6 +380,7 @@ public:
 		objMissesCount = 0;
 		animation = "NONE";
 		explosionAnimation = "";
+		startFrame = 0;
 		lastFrame = 1024;
 		noEnemySound = false;
 	}
@@ -411,6 +412,7 @@ public:
 	Common::List<uint32> attackFrames;
 	Common::Array<FrameInfo> bodyFrames;
 	Common::Array<FrameInfo> explosionFrames;
+	uint32 startFrame;
 	uint32 lastFrame;
 	Filename explosionAnimation;
 	bool destroyed;
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index ac1fdda9c27..bb2f43538a8 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -416,7 +416,7 @@ void WetEngine::missTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) {
 }
 
 void WetEngine::hitPlayer() {
-	if (_arcadeMode != "Y1" && _arcadeMode != "Y3" && _arcadeMode != "Y4" && _arcadeMode != "Y5") {
+	if (_arcadeMode != "Y1" && _arcadeMode != "Y2" && _arcadeMode != "Y3" && _arcadeMode != "Y4" && _arcadeMode != "Y5") {
 		assert( _playerFrameSep < (int)_playerFrames.size());
 		if (_playerFrameIdx < _playerFrameSep)
 			_playerFrameIdx = _playerFrameSep;


Commit: fbf315272bfcf779a4fecb1a61a62b0a9272e7c0
    https://github.com/scummvm/scummvm/commit/fbf315272bfcf779a4fecb1a61a62b0a9272e7c0
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-03-31T21:38:40+02:00

Commit Message:
HYPNO: better handling of transitions and missed targets in wet

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


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index e7b080bd6b5..80c7daec309 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -58,7 +58,9 @@ void HypnoEngine::parseArcadeShooting(const Common::String &prefix, const Common
 	*arcade = *g_parsedArc;
 	_levels[filename] = (Level*) arcade;
 	g_parsedArc->backgroundVideo.clear();
-	g_parsedArc->transitionPalette.clear();
+	g_parsedArc->transitionVideos.clear();
+	g_parsedArc->transitionTimes.clear();
+	g_parsedArc->transitionPalettes.clear();
 	g_parsedArc->player.clear();
 	g_parsedArc->shoots.clear();
 	g_parsedArc->intros.clear();
@@ -204,7 +206,8 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 		debugC(1, kHypnoDebugArcade, "Used frame rate looks odd: %f, increasing x 10", rate);
 		background.decoder->setRate(10.0);
 	}
-	loadPalette(arc->backgroundPalette);
+	Filename currentPalette = arc->backgroundPalette;
+	loadPalette(currentPalette);
 	bool shootingPrimary = false;
 	bool shootingSecondary = false;
 	bool needsUpdate = true;
@@ -239,12 +242,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 				if (event.kbd.keycode == Common::KEYCODE_c) {
 					background.decoder->pauseVideo(true);
 					showCredits();
-
-					if (transition && !arc->transitionPalette.empty())
-						loadPalette(arc->transitionPalette);
-					else
-						loadPalette(arc->backgroundPalette);
-
+					loadPalette(currentPalette);
 					changeScreenMode("320x200");
 					background.decoder->pauseVideo(false);
 					updateScreen(background);
@@ -328,23 +326,30 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			break;
 		}
 
-		if (!arc->transitionVideo.empty() && !transition && background.decoder->getCurFrame() >= (int)arc->transitionTime) {
+		if (!arc->transitionVideos.empty() && background.decoder->getCurFrame() >= (int)*arc->transitionTimes.begin()) {
 			transition = true;
 			background.decoder->pauseVideo(true);
 
-			debugC(1, kHypnoDebugArcade, "Playing transition %s", arc->transitionVideo.c_str());
-			MVideo video(arc->transitionVideo, Common::Point(0, 0), false, true, false);
+			Filename transitionVideo = *arc->transitionVideos.begin();
+			Filename transitionPalette = *arc->transitionPalettes.begin();
+
+			debugC(1, kHypnoDebugArcade, "Playing transition %s", transitionVideo.c_str());
+			MVideo video(transitionVideo, Common::Point(0, 0), false, true, false);
 			disableCursor();
 			runIntro(video);
 
-			if (!arc->transitionPalette.empty())
-				loadPalette(arc->transitionPalette);
-			else
-				loadPalette(arc->backgroundPalette);
+			if (!transitionPalette.empty())
+				currentPalette = transitionPalette;
+
+			loadPalette(currentPalette);
 			background.decoder->pauseVideo(false);
 			updateScreen(background);
 			drawScreen();
 			drawCursorArcade(mousePos);
+
+			arc->transitionVideos.pop_front();
+			arc->transitionPalettes.pop_front();
+			arc->transitionTimes.pop_front();
 		}
 
 		if (background.decoder && background.decoder->getCurFrame() >= int(segments[_segmentIdx].start + segments[_segmentIdx].size - 2)) {
@@ -475,13 +480,11 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 				} else if (it->video->decoder->needsUpdate() && needsUpdate) {
 					updateScreen(*it->video);
 				}
-			} {
+			} else if (!it->video) {
 				uint32 frame = background.decoder->getCurFrame();
 				uint32 bodyLastFrame = it->bodyFrames[it->bodyFrames.size() - 1].lastFrame();
 				if (frame > it->startFrame && frame - it->startFrame > bodyLastFrame)
 					if (!it->destroyed) {
-						_health = _health - it->attackWeight;
-						hitPlayer();
 						missTarget(it, arc, background);
 						shootsToRemove.push_back(i);
 					}
@@ -617,6 +620,7 @@ void HypnoEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVid
 				MVideo video(arc->hitBoss1Video, Common::Point(0, 0), false, true, false);
 				disableCursor();
 				runIntro(video);
+				// Should be currentPalette?
 				loadPalette(arc->backgroundPalette);
 				background.decoder->pauseVideo(false);
 				updateScreen(background);
@@ -625,6 +629,7 @@ void HypnoEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVid
 				background.decoder->pauseVideo(true);
 				MVideo video(arc->hitBoss2Video, Common::Point(0, 0), false, true, false);
 				runIntro(video);
+				// Should be currentPalette?
 				loadPalette(arc->backgroundPalette);
 				background.decoder->pauseVideo(false);
 				updateScreen(background);
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index bc1ea6e6047..54a9fad99af 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -474,7 +474,6 @@ public:
 	ArcadeShooting()  {
 		type = ArcadeLevel;
 		health = 100;
-		transitionTime = 0;
 		id = 0;
 		objKillsRequired[0] = 0;
 		objKillsRequired[1] = 0;
@@ -485,7 +484,7 @@ public:
 	uint32 id;
 	uint32 frameDelay;
 	Common::String mode;
-	uint32 transitionTime;
+	Common::List<uint32> transitionTimes;
 	Segments segments;
 
 	// Objectives
@@ -493,8 +492,8 @@ public:
 	uint32 objMissesAllowed [2];
 
 	// Videos
-	Filename transitionVideo;
-	Filename transitionPalette;
+	Common::List<Filename> transitionVideos;
+	Common::List<Filename> transitionPalettes;
 	Filename nextLevelVideo;
 	Filename defeatNoEnergyFirstVideo;
 	Filename defeatNoEnergySecondVideo;
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index b8b1f1f34a5..52c6e22964c 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -87,7 +87,7 @@
 Hypno::Shoot *shoot;
 
 extern int HYPNO_ARC_lex();
-//extern int HYPNO_ARC_parse();
+extern int HYPNO_ARC_parse();
 extern int HYPNO_ARC_lineno;
 uint32 HYPNO_ARC_default_sound_rate = 0;
 
@@ -578,13 +578,13 @@ static const yytype_int16 yyrline[] =
 {
        0,    78,    78,    78,    79,    82,    83,    84,    87,    91,
       95,    99,   100,   101,   102,   103,   108,   118,   127,   133,
-     138,   139,   143,   147,   150,   154,   157,   158,   184,   206,
-     212,   217,   222,   228,   233,   238,   243,   248,   253,   260,
-     261,   264,   265,   266,   269,   277,   282,   287,   291,   295,
-     299,   303,   307,   311,   315,   319,   323,   327,   331,   335,
-     339,   343,   347,   351,   355,   358,   362,   367,   371,   376,
-     381,   385,   391,   395,   398,   399,   402,   406,   409,   418,
-     421
+     139,   140,   144,   148,   151,   155,   158,   159,   185,   207,
+     213,   218,   223,   229,   234,   239,   244,   249,   254,   261,
+     262,   265,   266,   267,   270,   278,   283,   288,   292,   296,
+     300,   304,   308,   312,   316,   320,   324,   328,   332,   336,
+     340,   344,   348,   352,   356,   359,   363,   368,   372,   377,
+     382,   386,   392,   396,   399,   400,   403,   407,   410,   419,
+     422
 };
 #endif
 
@@ -1341,9 +1341,9 @@ yyreduce:
   case 18: /* hline: TPTOK FILENAME NUM FILENAME  */
 #line 127 "engines/hypno/grammar_arc.y"
                                       {
-		g_parsedArc->transitionVideo = (yyvsp[-2].s);
-		g_parsedArc->transitionTime = (yyvsp[-1].i);
-		g_parsedArc->transitionPalette = (yyvsp[0].s);
+		g_parsedArc->transitionVideos.push_back((yyvsp[-2].s));
+		g_parsedArc->transitionTimes.push_back((yyvsp[-1].i));
+		g_parsedArc->transitionPalettes.push_back((yyvsp[0].s));
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s));
 	}
 #line 1350 "engines/hypno/grammar_arc.cpp"
@@ -1352,70 +1352,71 @@ yyreduce:
   case 19: /* hline: TTOK FILENAME NUM  */
 #line 133 "engines/hypno/grammar_arc.y"
                             {
-		g_parsedArc->transitionVideo = (yyvsp[-1].s);
-		g_parsedArc->transitionTime = (yyvsp[0].i);
+		g_parsedArc->transitionVideos.push_back((yyvsp[-1].s));
+		g_parsedArc->transitionTimes.push_back((yyvsp[0].i));
+		g_parsedArc->transitionPalettes.push_back("");
 		debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i));
 	}
-#line 1360 "engines/hypno/grammar_arc.cpp"
+#line 1361 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 20: /* hline: TTOK NONETOK NUM  */
-#line 138 "engines/hypno/grammar_arc.y"
+#line 139 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1366 "engines/hypno/grammar_arc.cpp"
+#line 1367 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 21: /* hline: NTOK FILENAME  */
-#line 139 "engines/hypno/grammar_arc.y"
+#line 140 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
 	}
-#line 1375 "engines/hypno/grammar_arc.cpp"
+#line 1376 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 22: /* hline: NSTOK FILENAME  */
-#line 143 "engines/hypno/grammar_arc.y"
+#line 144 "engines/hypno/grammar_arc.y"
                           {
 		g_parsedArc->backgroundVideo = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
 	}
-#line 1384 "engines/hypno/grammar_arc.cpp"
+#line 1385 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 23: /* hline: RTOK FILENAME  */
-#line 147 "engines/hypno/grammar_arc.y"
+#line 148 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->backgroundPalette = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1392 "engines/hypno/grammar_arc.cpp"
+#line 1393 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 24: /* hline: ITOK FILENAME  */
-#line 150 "engines/hypno/grammar_arc.y"
+#line 151 "engines/hypno/grammar_arc.y"
                         {
 		g_parsedArc->player = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1401 "engines/hypno/grammar_arc.cpp"
+#line 1402 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 25: /* hline: I1TOK FILENAME  */
-#line 154 "engines/hypno/grammar_arc.y"
+#line 155 "engines/hypno/grammar_arc.y"
                          {
 		debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
 	}
-#line 1409 "engines/hypno/grammar_arc.cpp"
+#line 1410 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 26: /* hline: QTOK NUM NUM  */
-#line 157 "engines/hypno/grammar_arc.y"
+#line 158 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1415 "engines/hypno/grammar_arc.cpp"
+#line 1416 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 27: /* hline: BNTOK FILENAME  */
-#line 158 "engines/hypno/grammar_arc.y"
+#line 159 "engines/hypno/grammar_arc.y"
                          {
 		if (Common::String("B0") == (yyvsp[-1].s))
 			g_parsedArc->beforeVideo = (yyvsp[0].s);
@@ -1442,11 +1443,11 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
 	}
-#line 1446 "engines/hypno/grammar_arc.cpp"
+#line 1447 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 28: /* hline: SNTOK FILENAME enc  */
-#line 184 "engines/hypno/grammar_arc.y"
+#line 185 "engines/hypno/grammar_arc.y"
                              {
 		uint32 sampleRate = 11025;
 		if (Common::String("22K") == (yyvsp[0].s) || Common::String("22k") == (yyvsp[0].s))
@@ -1469,125 +1470,125 @@ yyreduce:
 		}
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s));
 	}
-#line 1473 "engines/hypno/grammar_arc.cpp"
+#line 1474 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 29: /* hline: HETOK BYTE NUM NUM  */
-#line 206 "engines/hypno/grammar_arc.y"
+#line 207 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		segment.end = true;
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HE %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1484 "engines/hypno/grammar_arc.cpp"
+#line 1485 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 30: /* hline: HLTOK BYTE NUM NUM  */
-#line 212 "engines/hypno/grammar_arc.y"
+#line 213 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1494 "engines/hypno/grammar_arc.cpp"
+#line 1495 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 31: /* hline: HUTOK BYTE NUM NUM  */
-#line 217 "engines/hypno/grammar_arc.y"
+#line 218 "engines/hypno/grammar_arc.y"
                              {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1504 "engines/hypno/grammar_arc.cpp"
+#line 1505 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 32: /* hline: HTOK NAME NUM NUM  */
-#line 222 "engines/hypno/grammar_arc.y"
+#line 223 "engines/hypno/grammar_arc.y"
                             {
 		assert(Common::String((yyvsp[-2].s)).size() == 1);
 		Segment segment((yyvsp[-2].s)[0], (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1515 "engines/hypno/grammar_arc.cpp"
+#line 1516 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 33: /* hline: HTOK RTOK NUM NUM  */
-#line 228 "engines/hypno/grammar_arc.y"
+#line 229 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == R
 		Segment segment('R', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1525 "engines/hypno/grammar_arc.cpp"
+#line 1526 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 34: /* hline: HTOK ATOK NUM NUM  */
-#line 233 "engines/hypno/grammar_arc.y"
+#line 234 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == A
 		Segment segment('A', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H A %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1535 "engines/hypno/grammar_arc.cpp"
+#line 1536 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 35: /* hline: HTOK PTOK NUM NUM  */
-#line 238 "engines/hypno/grammar_arc.y"
+#line 239 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == P
 		Segment segment('P', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1545 "engines/hypno/grammar_arc.cpp"
+#line 1546 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 36: /* hline: HTOK LTOK NUM NUM  */
-#line 243 "engines/hypno/grammar_arc.y"
+#line 244 "engines/hypno/grammar_arc.y"
                             { // Workaround for BYTE == P
 		Segment segment('L', (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1555 "engines/hypno/grammar_arc.cpp"
+#line 1556 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 37: /* hline: H12TOK BYTE NUM NUM  */
-#line 248 "engines/hypno/grammar_arc.y"
+#line 249 "engines/hypno/grammar_arc.y"
                               {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HN %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1565 "engines/hypno/grammar_arc.cpp"
+#line 1566 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 38: /* hline: HTOK BYTE NUM NUM  */
-#line 253 "engines/hypno/grammar_arc.y"
+#line 254 "engines/hypno/grammar_arc.y"
                             {
 		Segment segment((yyvsp[-2].i), (yyvsp[0].i), (yyvsp[-1].i));
 		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1575 "engines/hypno/grammar_arc.cpp"
+#line 1576 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 39: /* enc: ENCTOK  */
-#line 260 "engines/hypno/grammar_arc.y"
+#line 261 "engines/hypno/grammar_arc.y"
                      { (yyval.s) = (yyvsp[0].s); }
-#line 1581 "engines/hypno/grammar_arc.cpp"
+#line 1582 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 40: /* enc: %empty  */
-#line 261 "engines/hypno/grammar_arc.y"
+#line 262 "engines/hypno/grammar_arc.y"
                          { (yyval.s) = scumm_strdup(""); }
-#line 1587 "engines/hypno/grammar_arc.cpp"
+#line 1588 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 44: /* bline: FNTOK FILENAME  */
-#line 269 "engines/hypno/grammar_arc.y"
+#line 270 "engines/hypno/grammar_arc.y"
                       {
 		shoot = new Shoot();
 		if (Common::String("F0") == (yyvsp[-1].s))
@@ -1596,308 +1597,308 @@ yyreduce:
 			shoot->explosionAnimation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1600 "engines/hypno/grammar_arc.cpp"
+#line 1601 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 45: /* bline: FNTOK NONETOK  */
-#line 277 "engines/hypno/grammar_arc.y"
+#line 278 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE");
 	}
-#line 1610 "engines/hypno/grammar_arc.cpp"
+#line 1611 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 46: /* bline: FTOK FILENAME  */
-#line 282 "engines/hypno/grammar_arc.y"
+#line 283 "engines/hypno/grammar_arc.y"
                         {
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
 	}
-#line 1620 "engines/hypno/grammar_arc.cpp"
+#line 1621 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 47: /* bline: ITOK NAME  */
-#line 287 "engines/hypno/grammar_arc.y"
+#line 288 "engines/hypno/grammar_arc.y"
                      {
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1629 "engines/hypno/grammar_arc.cpp"
+#line 1630 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 48: /* bline: ITOK BNTOK  */
-#line 291 "engines/hypno/grammar_arc.y"
+#line 292 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1638 "engines/hypno/grammar_arc.cpp"
+#line 1639 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 49: /* bline: ITOK ATOK  */
-#line 295 "engines/hypno/grammar_arc.y"
+#line 296 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A");
 	}
-#line 1647 "engines/hypno/grammar_arc.cpp"
+#line 1648 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 50: /* bline: ITOK CTOK  */
-#line 299 "engines/hypno/grammar_arc.y"
+#line 300 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C");
 	}
-#line 1656 "engines/hypno/grammar_arc.cpp"
+#line 1657 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 51: /* bline: ITOK DTOK  */
-#line 303 "engines/hypno/grammar_arc.y"
+#line 304 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D");
 	}
-#line 1665 "engines/hypno/grammar_arc.cpp"
+#line 1666 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 52: /* bline: ITOK FTOK  */
-#line 307 "engines/hypno/grammar_arc.y"
+#line 308 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F");
 	}
-#line 1674 "engines/hypno/grammar_arc.cpp"
+#line 1675 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 53: /* bline: ITOK HTOK  */
-#line 311 "engines/hypno/grammar_arc.y"
+#line 312 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H");
 	}
-#line 1683 "engines/hypno/grammar_arc.cpp"
+#line 1684 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 54: /* bline: ITOK ITOK  */
-#line 315 "engines/hypno/grammar_arc.y"
+#line 316 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I");
 	}
-#line 1692 "engines/hypno/grammar_arc.cpp"
+#line 1693 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 55: /* bline: ITOK JTOK  */
-#line 319 "engines/hypno/grammar_arc.y"
+#line 320 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J");
 	}
-#line 1701 "engines/hypno/grammar_arc.cpp"
+#line 1702 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 56: /* bline: ITOK NTOK  */
-#line 323 "engines/hypno/grammar_arc.y"
+#line 324 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N");
 	}
-#line 1710 "engines/hypno/grammar_arc.cpp"
+#line 1711 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 57: /* bline: ITOK OTOK  */
-#line 327 "engines/hypno/grammar_arc.y"
+#line 328 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O");
 	}
-#line 1719 "engines/hypno/grammar_arc.cpp"
+#line 1720 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 58: /* bline: ITOK PTOK  */
-#line 331 "engines/hypno/grammar_arc.y"
+#line 332 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P");
 	}
-#line 1728 "engines/hypno/grammar_arc.cpp"
+#line 1729 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 59: /* bline: ITOK QTOK  */
-#line 335 "engines/hypno/grammar_arc.y"
+#line 336 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q");
 	}
-#line 1737 "engines/hypno/grammar_arc.cpp"
+#line 1738 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 60: /* bline: ITOK RTOK  */
-#line 339 "engines/hypno/grammar_arc.y"
+#line 340 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R");
 	}
-#line 1746 "engines/hypno/grammar_arc.cpp"
+#line 1747 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 61: /* bline: ITOK SNTOK  */
-#line 343 "engines/hypno/grammar_arc.y"
+#line 344 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
 	}
-#line 1755 "engines/hypno/grammar_arc.cpp"
+#line 1756 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 62: /* bline: ITOK TTOK  */
-#line 347 "engines/hypno/grammar_arc.y"
+#line 348 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T");
 	}
-#line 1764 "engines/hypno/grammar_arc.cpp"
+#line 1765 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 63: /* bline: ITOK LTOK  */
-#line 351 "engines/hypno/grammar_arc.y"
+#line 352 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == L
 		shoot->name = "L";
 		debugC(1, kHypnoDebugParser, "I L");
 	}
-#line 1773 "engines/hypno/grammar_arc.cpp"
+#line 1774 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 64: /* bline: JTOK NUM  */
-#line 355 "engines/hypno/grammar_arc.y"
+#line 356 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
 	}
-#line 1781 "engines/hypno/grammar_arc.cpp"
+#line 1782 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 65: /* bline: A0TOK NUM NUM  */
-#line 358 "engines/hypno/grammar_arc.y"
+#line 359 "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 1790 "engines/hypno/grammar_arc.cpp"
+#line 1791 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 66: /* bline: RTOK NUM NUM  */
-#line 362 "engines/hypno/grammar_arc.y"
+#line 363 "engines/hypno/grammar_arc.y"
                         {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1800 "engines/hypno/grammar_arc.cpp"
+#line 1801 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 67: /* bline: R01TOK NUM NUM  */
-#line 367 "engines/hypno/grammar_arc.y"
+#line 368 "engines/hypno/grammar_arc.y"
                           {
 		shoot->objKillsCount = (yyvsp[-1].i);
 		shoot->objMissesCount = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "R0/1 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1809 "engines/hypno/grammar_arc.cpp"
+#line 1810 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 68: /* bline: BNTOK NUM NUM  */
-#line 371 "engines/hypno/grammar_arc.y"
+#line 372 "engines/hypno/grammar_arc.y"
                         {
 		FrameInfo fi((yyvsp[0].i), (yyvsp[-1].i));
 		shoot->bodyFrames.push_back(fi);
 		debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1819 "engines/hypno/grammar_arc.cpp"
+#line 1820 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 69: /* bline: KNTOK NUM NUM  */
-#line 376 "engines/hypno/grammar_arc.y"
+#line 377 "engines/hypno/grammar_arc.y"
                         {
 		FrameInfo fi((yyvsp[0].i), (yyvsp[-1].i));
 		shoot->explosionFrames.push_back(fi);
 		debugC(1, kHypnoDebugParser, "KN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1829 "engines/hypno/grammar_arc.cpp"
+#line 1830 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 70: /* bline: P0TOK NUM NUM  */
-#line 381 "engines/hypno/grammar_arc.y"
+#line 382 "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 1838 "engines/hypno/grammar_arc.cpp"
+#line 1839 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 71: /* bline: OTOK NUM NUM  */
-#line 385 "engines/hypno/grammar_arc.y"
+#line 386 "engines/hypno/grammar_arc.y"
                        {
 		if ((yyvsp[-1].i) == 0 && (yyvsp[0].i) == 0)
 			error("Invalid O command (0, 0)");
 		shoot->deathPosition = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1849 "engines/hypno/grammar_arc.cpp"
+#line 1850 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 72: /* bline: CTOK NUM  */
-#line 391 "engines/hypno/grammar_arc.y"
+#line 392 "engines/hypno/grammar_arc.y"
                     {
 		shoot->timesToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
 	}
-#line 1858 "engines/hypno/grammar_arc.cpp"
+#line 1859 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 73: /* bline: HTOK NUM  */
-#line 395 "engines/hypno/grammar_arc.y"
+#line 396 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrames.push_back((yyvsp[0].i));
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1866 "engines/hypno/grammar_arc.cpp"
+#line 1867 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 74: /* bline: VTOK NUM  */
-#line 398 "engines/hypno/grammar_arc.y"
+#line 399 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1872 "engines/hypno/grammar_arc.cpp"
+#line 1873 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 75: /* bline: WTOK NUM  */
-#line 399 "engines/hypno/grammar_arc.y"
+#line 400 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1880 "engines/hypno/grammar_arc.cpp"
+#line 1881 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 76: /* bline: DTOK NUM  */
-#line 402 "engines/hypno/grammar_arc.y"
+#line 403 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
 	}
-#line 1889 "engines/hypno/grammar_arc.cpp"
+#line 1890 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 77: /* bline: LTOK NUM NUM  */
-#line 406 "engines/hypno/grammar_arc.y"
+#line 407 "engines/hypno/grammar_arc.y"
                        {
 		debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
 	}
-#line 1897 "engines/hypno/grammar_arc.cpp"
+#line 1898 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 78: /* bline: SNTOK FILENAME enc  */
-#line 409 "engines/hypno/grammar_arc.y"
+#line 410 "engines/hypno/grammar_arc.y"
                              {
 		if (Common::String("S0") == (yyvsp[-2].s))
 			shoot->enemySound = (yyvsp[-1].s);
@@ -1907,30 +1908,30 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 1911 "engines/hypno/grammar_arc.cpp"
+#line 1912 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 79: /* bline: NTOK  */
-#line 418 "engines/hypno/grammar_arc.y"
+#line 419 "engines/hypno/grammar_arc.y"
                {
 		shoot->noEnemySound = true;
 		debugC(1, kHypnoDebugParser, "N"); }
-#line 1919 "engines/hypno/grammar_arc.cpp"
+#line 1920 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 80: /* bline: ZTOK  */
-#line 421 "engines/hypno/grammar_arc.y"
+#line 422 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot);
 		//delete shoot;
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z");
 	}
-#line 1930 "engines/hypno/grammar_arc.cpp"
+#line 1931 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 1934 "engines/hypno/grammar_arc.cpp"
+#line 1935 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 71f3792a0fd..a96b5cb23bb 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -125,14 +125,15 @@ hline: 	CTOK NUM {
 		debugC(1, kHypnoDebugParser, "ON %d", $2);
 	}
 	| TPTOK FILENAME NUM FILENAME {
-		g_parsedArc->transitionVideo = $2;
-		g_parsedArc->transitionTime = $3;
-		g_parsedArc->transitionPalette = $4;
+		g_parsedArc->transitionVideos.push_back($2);
+		g_parsedArc->transitionTimes.push_back($3);
+		g_parsedArc->transitionPalettes.push_back($4);
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", $2, $3, $4);
 	}
 	| TTOK FILENAME NUM {
-		g_parsedArc->transitionVideo = $2;
-		g_parsedArc->transitionTime = $3;
+		g_parsedArc->transitionVideos.push_back($2);
+		g_parsedArc->transitionTimes.push_back($3);
+		g_parsedArc->transitionPalettes.push_back("");
 		debugC(1, kHypnoDebugParser, "T %s %d", $2, $3);
 	}
 	| TTOK NONETOK NUM { debugC(1, kHypnoDebugParser, "T NONE %d", $3); }
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index bb2f43538a8..7cb9487d370 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -412,6 +412,9 @@ void WetEngine::missTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) {
 		background.decoder->pauseVideo(false);
 		updateScreen(background);
 		drawScreen();
+	} else if (s->attackFrames.empty()) {
+		_health = _health - s->attackWeight;
+		hitPlayer();
 	}
 }
 


Commit: 1955beaf0f9f622d676fb0f1cdd5724cd6e2987c
    https://github.com/scummvm/scummvm/commit/1955beaf0f9f622d676fb0f1cdd5724cd6e2987c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-03-31T21:38:40+02:00

Commit Message:
HYPNO: restore music after transition in wet

Changed paths:
    engines/hypno/arcade.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 80c7daec309..2db58ae1240 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -350,6 +350,8 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 			arc->transitionVideos.pop_front();
 			arc->transitionPalettes.pop_front();
 			arc->transitionTimes.pop_front();
+			if (!_music.empty())
+				playSound(_music, 0, arc->musicRate); // restore music
 		}
 
 		if (background.decoder && background.decoder->getCurFrame() >= int(segments[_segmentIdx].start + segments[_segmentIdx].size - 2)) {
@@ -625,6 +627,8 @@ void HypnoEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVid
 				background.decoder->pauseVideo(false);
 				updateScreen(background);
 				drawScreen();
+				if (!_music.empty())
+					playSound(_music, 0, arc->musicRate); // restore music
 			} else if (_objIdx == 1 && !arc->hitBoss2Video.empty()) {
 				background.decoder->pauseVideo(true);
 				MVideo video(arc->hitBoss2Video, Common::Point(0, 0), false, true, false);
@@ -635,6 +639,8 @@ void HypnoEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVid
 				updateScreen(background);
 				drawScreen();
 				drawCursorArcade(mousePos);
+				if (!_music.empty())
+					playSound(_music, 0, arc->musicRate); // restore music
 			}
 			byte p[3] = {0x00, 0x00, 0x00}; // Always black?
 			assert(_shoots[i].paletteSize == 1 || _shoots[i].paletteSize == 0);




More information about the Scummvm-git-logs mailing list