[Scummvm-git-logs] scummvm master -> 81cbea9ced021736a6d682956a6993198450d5ba

neuromancer noreply at scummvm.org
Fri Jan 28 22:46:51 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:
e9e53154dc HYPNO: use drawString in runScene
81cbea9ced HYPNO: added basic support for arcade segements and fixed some issues in demos


Commit: e9e53154dcd4cbf3b11744c20169621d5075b991
    https://github.com/scummvm/scummvm/commit/e9e53154dcd4cbf3b11744c20169621d5075b991
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-01-28T23:46:18+01:00

Commit Message:
HYPNO: use drawString in runScene

Changed paths:
    engines/hypno/scene.cpp


diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index 7de14d2d6ce..2f9669089c4 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -286,7 +286,7 @@ void HypnoEngine::runScene(Scene *scene) {
 				runMenu(stack.back());
 				uint32 minutes = _countdown / 60;
 				uint32 seconds = _countdown % 60;
-				_font->drawString(_compositeSurface, Common::String::format("TIME: %d:%d", minutes, seconds), 80, 10, 60, c);
+				drawString(Common::String::format("TIME: %d:%d", minutes, seconds), 80, 10, 60, c);
 				drawScreen();
 			} else {
 				assert(!scene->levelIfLose.empty());


Commit: 81cbea9ced021736a6d682956a6993198450d5ba
    https://github.com/scummvm/scummvm/commit/81cbea9ced021736a6d682956a6993198450d5ba
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-01-28T23:46:18+01:00

Commit Message:
HYPNO: added basic support for arcade segements and fixed some issues in demos

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/scene.cpp
    engines/hypno/spider/arcade.cpp
    engines/hypno/spider/spider.cpp
    engines/hypno/wet/wet.cpp


diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 749f8751dcc..c8fbc0086df 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -62,6 +62,7 @@ void HypnoEngine::parseArcadeShooting(const Common::String &prefix, const Common
 	g_parsedArc->background.clear();
 	g_parsedArc->player.clear();
 	g_parsedArc->shoots.clear();
+	g_parsedArc->intros.clear();
 }
 
 ShootSequence HypnoEngine::parseShootList(const Common::String &filename, const Common::String &data) {
@@ -133,6 +134,8 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 	_score = 0;
 	_health = arc->health;
 	_maxHealth = _health;
+	Segments segments = arc->segments;
+	uint32 segmentIdx = 0;
 	changeCursor("arcade");
 	_shoots.clear();
 	if (!arc->player.empty())
@@ -235,7 +238,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 		if (_health <= 0) {
 			skipVideo(background);
 			if (!arc->defeatNoEnergyVideo.empty()) {
-				MVideo video(arc->defeatNoEnergyVideo, Common::Point(0, 0), false, false, false);
+				MVideo video(arc->defeatNoEnergyVideo, Common::Point(0, 0), false, true, false);
 				runIntro(video);
 			}
 			assert(!arc->levelIfLose.empty());
@@ -245,17 +248,33 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
 		}
 
 		if (!arc->transitionVideo.empty() && background.decoder->getCurFrame() >= (int)arc->transitionTime) {
+			const byte *videoPalette = nullptr;
+			videoPalette = background.decoder->getPalette();
+			background.decoder->pauseVideo(true);
+
 			debugC(1, kHypnoDebugArcade, "Playing transition %s", arc->transitionVideo.c_str());
 			arc->transitionTime = background.decoder->getFrameCount() + 1;
-			MVideo video(arc->transitionVideo, Common::Point(0, 0), false, false, false);
+			loadPalette(arc->transitionPalette);
+			MVideo video(arc->transitionVideo, Common::Point(0, 0), false, true, false);
 			runIntro(video);
-			skipVideo(background);
+
+			background.decoder->pauseVideo(false);
+			g_system->getPaletteManager()->setPalette(videoPalette, 0, 256);
+			updateScreen(background);
+			drawScreen();
+		}
+
+		if (background.decoder && background.decoder->getCurFrame() >= int(segments[segmentIdx].start + segments[segmentIdx].size)) {
+			debugC(1, kHypnoDebugArcade, "Finished segment %d", segmentIdx);
+			segmentIdx++;
+			if (segmentIdx >= segments.size())
+				error("Invalid segment %d", segmentIdx); 
 		}
 
-		if (checkArcadeLevelCompleted(background)) {
+		if (checkArcadeLevelCompleted(background, segments[segmentIdx])) {
 			skipVideo(background);
 			if (!arc->nextLevelVideo.empty()) {
-				MVideo video(arc->nextLevelVideo, Common::Point(0, 0), false, false, false);
+				MVideo video(arc->nextLevelVideo, Common::Point(0, 0), false, true, false);
 				runIntro(video);
 			}
 			assert(!arc->levelIfWin.empty());
@@ -412,8 +431,8 @@ void HypnoEngine::shoot(const Common::Point &mousePos) {
 	}
 }
 
-bool HypnoEngine::checkArcadeLevelCompleted(MVideo &background) {
-	return !background.decoder || background.decoder->endOfVideo() || _skipLevel;
+bool HypnoEngine::checkArcadeLevelCompleted(MVideo &background, Segment segment) {
+	return !background.decoder || background.decoder->endOfVideo() || segment.type == 2 || _skipLevel;
 }
 
 bool HypnoEngine::clickedSecondaryShoot(const Common::Point &mousePos) {
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index 1eddb9d84ae..958df6d6cff 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -400,6 +400,12 @@ typedef Common::Array<Common::String> Sounds;
 
 class Segment {
 public:
+	Segment(byte type_, uint32 start_, uint32 size_)  {
+		type = type_;
+		start = start_;
+		size = size_;
+	}
+
 	byte type;
 	uint32 start;
 	uint32 size;
@@ -422,6 +428,7 @@ public:
 
 	// Videos
 	Filename transitionVideo;
+	Filename transitionPalette;
 	Filename nextLevelVideo;
 	Filename defeatNoEnergyVideo;
 	Filename defeatMissBossVideo;
@@ -449,6 +456,7 @@ public:
 		levelEasy = "";
 		levelHard = "";
 		frameNumber = 0;
+		frameImage = "";
 	}
 	
 	Transition(Common::String easy, Common::String hard)  {
@@ -456,6 +464,7 @@ public:
 		levelEasy = easy;
 		levelHard = hard;
 		frameNumber = 0;
+		frameImage = "";
 	}
 	Common::String nextLevel;
 	Common::String levelEasy;
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 818dc11eaa8..2a3bf727dc5 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -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,   101,
-     106,   107,   111,   115,   118,   122,   123,   137,   149,   152,
-     155,   158,   163,   164,   167,   168,   169,   172,   177,   182,
-     187,   191,   195,   199,   203,   207,   211,   215,   219,   223,
-     227,   231,   235,   239,   243,   247,   251,   254,   258,   259,
-     260,   261,   267,   271,   274,   275,   278,   281,   285,   292,
-     293
+      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
 };
 #endif
 
@@ -1294,70 +1294,71 @@ yyreduce:
                                       {
 		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 1300 "engines/hypno/grammar_arc.cpp"
+#line 1301 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 19: /* hline: TTOK FILENAME NUM  */
-#line 101 "engines/hypno/grammar_arc.y"
+#line 102 "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 1310 "engines/hypno/grammar_arc.cpp"
+#line 1311 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 20: /* hline: TTOK NONETOK NUM  */
-#line 106 "engines/hypno/grammar_arc.y"
+#line 107 "engines/hypno/grammar_arc.y"
                            { debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1316 "engines/hypno/grammar_arc.cpp"
+#line 1317 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 21: /* hline: NTOK FILENAME  */
-#line 107 "engines/hypno/grammar_arc.y"
+#line 108 "engines/hypno/grammar_arc.y"
                          { 
 		g_parsedArc->background = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s)); 
 	}
-#line 1325 "engines/hypno/grammar_arc.cpp"
+#line 1326 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 22: /* hline: NSTOK FILENAME  */
-#line 111 "engines/hypno/grammar_arc.y"
+#line 112 "engines/hypno/grammar_arc.y"
                           { 
 		g_parsedArc->background = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s)); 
 	}
-#line 1334 "engines/hypno/grammar_arc.cpp"
+#line 1335 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 23: /* hline: RTOK FILENAME  */
-#line 115 "engines/hypno/grammar_arc.y"
+#line 116 "engines/hypno/grammar_arc.y"
                          {
 		g_parsedArc->palette = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1342 "engines/hypno/grammar_arc.cpp"
+#line 1343 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 24: /* hline: ITOK FILENAME  */
-#line 118 "engines/hypno/grammar_arc.y"
+#line 119 "engines/hypno/grammar_arc.y"
                         { 
 		g_parsedArc->player = (yyvsp[0].s); 
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 		}
-#line 1351 "engines/hypno/grammar_arc.cpp"
+#line 1352 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 25: /* hline: QTOK NUM NUM  */
-#line 122 "engines/hypno/grammar_arc.y"
+#line 123 "engines/hypno/grammar_arc.y"
                        { debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1357 "engines/hypno/grammar_arc.cpp"
+#line 1358 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 26: /* hline: BNTOK FILENAME  */
-#line 123 "engines/hypno/grammar_arc.y"
+#line 124 "engines/hypno/grammar_arc.y"
                          {
 		if (Common::String("B0") == (yyvsp[-1].s))
 			g_parsedArc->intros.push_back((yyvsp[0].s));
@@ -1372,11 +1373,11 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s)); 
 	}
-#line 1376 "engines/hypno/grammar_arc.cpp"
+#line 1377 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 27: /* hline: SNTOK FILENAME enc  */
-#line 137 "engines/hypno/grammar_arc.y"
+#line 138 "engines/hypno/grammar_arc.y"
                              {
 		if (Common::String("S0") == (yyvsp[-2].s))
 			g_parsedArc->music = (yyvsp[-1].s);
@@ -1389,311 +1390,315 @@ yyreduce:
 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); 
 	}
-#line 1393 "engines/hypno/grammar_arc.cpp"
+#line 1394 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 28: /* hline: HETOK BYTE NUM NUM  */
-#line 149 "engines/hypno/grammar_arc.y"
-                             { 
+#line 150 "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 1401 "engines/hypno/grammar_arc.cpp"
+#line 1404 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 29: /* hline: HLTOK BYTE NUM NUM  */
-#line 152 "engines/hypno/grammar_arc.y"
+#line 155 "engines/hypno/grammar_arc.y"
                              { 
 		debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1409 "engines/hypno/grammar_arc.cpp"
+#line 1412 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 30: /* hline: HUTOK BYTE NUM NUM  */
-#line 155 "engines/hypno/grammar_arc.y"
+#line 158 "engines/hypno/grammar_arc.y"
                              { 
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1417 "engines/hypno/grammar_arc.cpp"
+#line 1420 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 31: /* hline: HTOK BYTE NUM NUM  */
-#line 158 "engines/hypno/grammar_arc.y"
+#line 161 "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 1425 "engines/hypno/grammar_arc.cpp"
+#line 1430 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 37: /* bline: FNTOK FILENAME  */
-#line 172 "engines/hypno/grammar_arc.y"
+#line 177 "engines/hypno/grammar_arc.y"
                       { 
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1435 "engines/hypno/grammar_arc.cpp"
+#line 1440 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 38: /* bline: FNTOK NONETOK  */
-#line 177 "engines/hypno/grammar_arc.y"
+#line 182 "engines/hypno/grammar_arc.y"
                         { 
 		shoot = new Shoot();
 		shoot->animation = "NONE";
 		debugC(1, kHypnoDebugParser, "FN NONE"); 
 	}
-#line 1445 "engines/hypno/grammar_arc.cpp"
+#line 1450 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 39: /* bline: FTOK FILENAME  */
-#line 182 "engines/hypno/grammar_arc.y"
+#line 187 "engines/hypno/grammar_arc.y"
                         { 
 		shoot = new Shoot();
 		shoot->animation = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s)); 
 	}
-#line 1455 "engines/hypno/grammar_arc.cpp"
+#line 1460 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 40: /* bline: ITOK NAME  */
-#line 187 "engines/hypno/grammar_arc.y"
+#line 192 "engines/hypno/grammar_arc.y"
                      { 
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1464 "engines/hypno/grammar_arc.cpp"
+#line 1469 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 41: /* bline: ITOK BNTOK  */
-#line 191 "engines/hypno/grammar_arc.y"
+#line 196 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == B1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1473 "engines/hypno/grammar_arc.cpp"
+#line 1478 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 42: /* bline: ITOK ATOK  */
-#line 195 "engines/hypno/grammar_arc.y"
+#line 200 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == A
 		shoot->name = "A";
 		debugC(1, kHypnoDebugParser, "I A"); 
 	}
-#line 1482 "engines/hypno/grammar_arc.cpp"
+#line 1487 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 43: /* bline: ITOK CTOK  */
-#line 199 "engines/hypno/grammar_arc.y"
+#line 204 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == C
 		shoot->name = "C";
 		debugC(1, kHypnoDebugParser, "I C"); 
 	}
-#line 1491 "engines/hypno/grammar_arc.cpp"
+#line 1496 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 44: /* bline: ITOK DTOK  */
-#line 203 "engines/hypno/grammar_arc.y"
+#line 208 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == D
 		shoot->name = "D";
 		debugC(1, kHypnoDebugParser, "I D"); 
 	}
-#line 1500 "engines/hypno/grammar_arc.cpp"
+#line 1505 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 45: /* bline: ITOK FTOK  */
-#line 207 "engines/hypno/grammar_arc.y"
+#line 212 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == F
 		shoot->name = "F";
 		debugC(1, kHypnoDebugParser, "I F"); 
 	}
-#line 1509 "engines/hypno/grammar_arc.cpp"
+#line 1514 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 46: /* bline: ITOK HTOK  */
-#line 211 "engines/hypno/grammar_arc.y"
+#line 216 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == H
 		shoot->name = "H";
 		debugC(1, kHypnoDebugParser, "I H"); 
 	}
-#line 1518 "engines/hypno/grammar_arc.cpp"
+#line 1523 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 47: /* bline: ITOK ITOK  */
-#line 215 "engines/hypno/grammar_arc.y"
+#line 220 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "I";
 		debugC(1, kHypnoDebugParser, "I I"); 
 	}
-#line 1527 "engines/hypno/grammar_arc.cpp"
+#line 1532 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 48: /* bline: ITOK JTOK  */
-#line 219 "engines/hypno/grammar_arc.y"
+#line 224 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == I
 		shoot->name = "J";
 		debugC(1, kHypnoDebugParser, "I J"); 
 	}
-#line 1536 "engines/hypno/grammar_arc.cpp"
+#line 1541 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 49: /* bline: ITOK NTOK  */
-#line 223 "engines/hypno/grammar_arc.y"
+#line 228 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == N
 		shoot->name = "N";
 		debugC(1, kHypnoDebugParser, "I N"); 
 	}
-#line 1545 "engines/hypno/grammar_arc.cpp"
+#line 1550 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 50: /* bline: ITOK OTOK  */
-#line 227 "engines/hypno/grammar_arc.y"
+#line 232 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == O
 		shoot->name = "O";
 		debugC(1, kHypnoDebugParser, "I O"); 
 	}
-#line 1554 "engines/hypno/grammar_arc.cpp"
+#line 1559 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 51: /* bline: ITOK PTOK  */
-#line 231 "engines/hypno/grammar_arc.y"
+#line 236 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == P
 		shoot->name = "P";
 		debugC(1, kHypnoDebugParser, "I P"); 
 	}
-#line 1563 "engines/hypno/grammar_arc.cpp"
+#line 1568 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 52: /* bline: ITOK QTOK  */
-#line 235 "engines/hypno/grammar_arc.y"
+#line 240 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == Q
 		shoot->name = "Q";
 		debugC(1, kHypnoDebugParser, "I Q"); 
 	}
-#line 1572 "engines/hypno/grammar_arc.cpp"
+#line 1577 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 53: /* bline: ITOK RTOK  */
-#line 239 "engines/hypno/grammar_arc.y"
+#line 244 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == R
 		shoot->name = "R";
 		debugC(1, kHypnoDebugParser, "I R"); 
 	}
-#line 1581 "engines/hypno/grammar_arc.cpp"
+#line 1586 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 54: /* bline: ITOK SNTOK  */
-#line 243 "engines/hypno/grammar_arc.y"
+#line 248 "engines/hypno/grammar_arc.y"
                       {  // Workaround for NAME == S1
 		shoot->name = (yyvsp[0].s);
 		debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s)); 
 	}
-#line 1590 "engines/hypno/grammar_arc.cpp"
+#line 1595 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 55: /* bline: ITOK TTOK  */
-#line 247 "engines/hypno/grammar_arc.y"
+#line 252 "engines/hypno/grammar_arc.y"
                      { // Workaround for NAME == T
 		shoot->name = "T";
 		debugC(1, kHypnoDebugParser, "I T"); 
 	}
-#line 1599 "engines/hypno/grammar_arc.cpp"
+#line 1604 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 56: /* bline: JTOK NUM  */
-#line 251 "engines/hypno/grammar_arc.y"
+#line 256 "engines/hypno/grammar_arc.y"
                     {
 		debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i)); 
 	}
-#line 1607 "engines/hypno/grammar_arc.cpp"
+#line 1612 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 57: /* bline: A0TOK NUM NUM  */
-#line 254 "engines/hypno/grammar_arc.y"
+#line 259 "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 1616 "engines/hypno/grammar_arc.cpp"
+#line 1621 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 58: /* bline: RTOK NUM NUM  */
-#line 258 "engines/hypno/grammar_arc.y"
+#line 263 "engines/hypno/grammar_arc.y"
                         { debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1622 "engines/hypno/grammar_arc.cpp"
+#line 1627 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 59: /* bline: R0TOK NUM NUM  */
-#line 259 "engines/hypno/grammar_arc.y"
+#line 264 "engines/hypno/grammar_arc.y"
                          { debugC(1, kHypnoDebugParser, "R0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1628 "engines/hypno/grammar_arc.cpp"
+#line 1633 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 60: /* bline: BNTOK NUM NUM  */
-#line 260 "engines/hypno/grammar_arc.y"
+#line 265 "engines/hypno/grammar_arc.y"
                         { debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1634 "engines/hypno/grammar_arc.cpp"
+#line 1639 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 61: /* bline: KNTOK NUM NUM  */
-#line 261 "engines/hypno/grammar_arc.y"
+#line 266 "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 1645 "engines/hypno/grammar_arc.cpp"
+#line 1650 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 62: /* bline: P0TOK NUM NUM  */
-#line 267 "engines/hypno/grammar_arc.y"
+#line 272 "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 1654 "engines/hypno/grammar_arc.cpp"
+#line 1659 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 63: /* bline: OTOK NUM NUM  */
-#line 271 "engines/hypno/grammar_arc.y"
+#line 276 "engines/hypno/grammar_arc.y"
                        { 
 		debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i)); 
 	}
-#line 1662 "engines/hypno/grammar_arc.cpp"
+#line 1667 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 64: /* bline: CTOK NUM  */
-#line 274 "engines/hypno/grammar_arc.y"
+#line 279 "engines/hypno/grammar_arc.y"
                     { debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1668 "engines/hypno/grammar_arc.cpp"
+#line 1673 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 65: /* bline: HTOK NUM  */
-#line 275 "engines/hypno/grammar_arc.y"
+#line 280 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackFrame = (yyvsp[0].i); 
 		debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1676 "engines/hypno/grammar_arc.cpp"
+#line 1681 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 66: /* bline: WTOK NUM  */
-#line 278 "engines/hypno/grammar_arc.y"
+#line 283 "engines/hypno/grammar_arc.y"
                     {
 		shoot->attackWeight = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1684 "engines/hypno/grammar_arc.cpp"
+#line 1689 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 67: /* bline: DTOK NUM  */
-#line 281 "engines/hypno/grammar_arc.y"
+#line 286 "engines/hypno/grammar_arc.y"
                     {
 		shoot->pointsToShoot = (yyvsp[0].i);  
 		debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i)); 
 	}
-#line 1693 "engines/hypno/grammar_arc.cpp"
+#line 1698 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 68: /* bline: SNTOK FILENAME enc  */
-#line 285 "engines/hypno/grammar_arc.y"
+#line 290 "engines/hypno/grammar_arc.y"
                              { 
 		if (Common::String("S1") == (yyvsp[-2].s))
 			shoot->deathSound = (yyvsp[-1].s);
@@ -1701,28 +1706,28 @@ yyreduce:
 			shoot->hitSound = (yyvsp[-1].s);
 		 
 		debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 1705 "engines/hypno/grammar_arc.cpp"
+#line 1710 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 69: /* bline: NTOK  */
-#line 292 "engines/hypno/grammar_arc.y"
+#line 297 "engines/hypno/grammar_arc.y"
                { debugC(1, kHypnoDebugParser, "N"); }
-#line 1711 "engines/hypno/grammar_arc.cpp"
+#line 1716 "engines/hypno/grammar_arc.cpp"
     break;
 
   case 70: /* bline: ZTOK  */
-#line 293 "engines/hypno/grammar_arc.y"
+#line 298 "engines/hypno/grammar_arc.y"
                {
 		g_parsedArc->shoots.push_back(*shoot); 
 		//delete shoot; 
 		//shoot = nullptr;
 		debugC(1, kHypnoDebugParser, "Z"); 
 	}
-#line 1722 "engines/hypno/grammar_arc.cpp"
+#line 1727 "engines/hypno/grammar_arc.cpp"
     break;
 
 
-#line 1726 "engines/hypno/grammar_arc.cpp"
+#line 1731 "engines/hypno/grammar_arc.cpp"
 
       default: break;
     }
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 8ab25ab5fd2..c8461a92e37 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -96,6 +96,7 @@ hline: 	CTOK NUM {
 	| TPTOK FILENAME NUM FILENAME {
 		g_parsedArc->transitionVideo = $2;
 		g_parsedArc->transitionTime = $3;
+		g_parsedArc->transitionPalette = $4;
 		debugC(1, kHypnoDebugParser, "Tp %s %d %s", $2, $3, $4); 
 	}
 	| TTOK FILENAME NUM { 
@@ -146,7 +147,9 @@ hline: 	CTOK NUM {
 
 		debugC(1, kHypnoDebugParser, "SN %s", $2); 
 	}
-	| HETOK BYTE NUM NUM { 
+	| HETOK BYTE NUM NUM {
+		Segment segment($2, $3, $4);
+		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "HE %x %d %d", $2, $3, $4); 
 	}
 	| HLTOK BYTE NUM NUM { 
@@ -156,6 +159,8 @@ hline: 	CTOK NUM {
 		debugC(1, kHypnoDebugParser, "HU %x %d %d", $2, $3, $4); 
 	}
 	| HTOK BYTE NUM NUM {
+		Segment segment($2, $3, $4);
+		g_parsedArc->segments.push_back(segment);
 		debugC(1, kHypnoDebugParser, "H %x %d %d", $2, $3, $4); 
 	}
 	;
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index 26a8d9cec7a..2d9e10b027a 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -55,7 +55,7 @@ HypnoEngine::HypnoEngine(OSystem *syst, const ADGameDescription *gd)
 	  _countdown(0), _timerStarted(false), _score(0),
 	  _defaultCursor(""), _checkpoint(""),
 	  _currentPlayerPosition(kPlayerLeft), _lastPlayerPosition(kPlayerLeft),
-	  _screenW(640), _screenH(480) {
+	  _screenW(0), _screenH(0) { // Every games initializes its own resolution
 	_rnd = new Common::RandomSource("hypno");
 
 	if (gd->extra)
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 944e941c8ef..66592de600d 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -222,7 +222,7 @@ public:
 	virtual void drawShoot(const Common::Point &mousePos);
 	virtual void shoot(const Common::Point &mousePos);
 	virtual void hitPlayer();
-	virtual bool checkArcadeLevelCompleted(MVideo &background);
+	virtual bool checkArcadeLevelCompleted(MVideo &background, Segment segment);
 	Common::String _difficulty;
 	bool _skipLevel;
 
@@ -308,7 +308,7 @@ public:
 	void drawPlayer() override;
 	void drawHealth() override;
 	void hitPlayer() override;
-	bool checkArcadeLevelCompleted(MVideo &background) override;
+	bool checkArcadeLevelCompleted(MVideo &background, Segment segment) override;
 
 	void drawBackToMenu(Hotspot *h) override;
 	void runCode(Code *code) override;
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index 2f9669089c4..6e4c4e39cc4 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -243,14 +243,8 @@ void HypnoEngine::runTransition(Transition *trans) {
 	Common::String nextLevel = findNextLevel(trans);
 	if (!trans->frameImage.empty()) {
 		debugC(1, kHypnoDebugScene, "Rendering %s frame in transaction", trans->frameImage.c_str());
-		Graphics::Surface *frame = decodeFrame(trans->frameImage, trans->frameNumber);
-		Graphics::Surface *sframe = frame->scale(_screenW, _screenH);
-		drawImage(*sframe, 0, 0, false);
+		loadImage(trans->frameImage, 0, 0, false, true, trans->frameNumber);
 		drawScreen();
-		frame->free();
-		delete frame;
-		sframe->free();
-		delete sframe;
 		Common::String *ptr = new Common::String(nextLevel);
 		if (!startAlarm(2 * 1000000, ptr)) // 2 seconds
 			error("Failed to install alarm");
diff --git a/engines/hypno/spider/arcade.cpp b/engines/hypno/spider/arcade.cpp
index 92457f9ae35..1cfa01add93 100644
--- a/engines/hypno/spider/arcade.cpp
+++ b/engines/hypno/spider/arcade.cpp
@@ -201,7 +201,7 @@ void SpiderEngine::drawHealth() {
 	drawString("ENERGY", 248, 180, 38, c);
 }
 
-bool SpiderEngine::checkArcadeLevelCompleted(MVideo &background) {
+bool SpiderEngine::checkArcadeLevelCompleted(MVideo &background, Segment segment) {
 	if (_skipLevel)
 		return true;
 
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index daf94dcac22..4a1c113af9e 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -30,7 +30,10 @@ namespace Hypno {
 
 extern const char *sceneVariables[];
 
-SpiderEngine::SpiderEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine(syst, gd) {}
+SpiderEngine::SpiderEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine(syst, gd) {
+	_screenW = 640;
+	_screenH = 480;
+}
 
 void SpiderEngine::loadAssets() {
 	if (!isDemo())
@@ -971,7 +974,7 @@ void SpiderEngine::loadAssetsDemo() {
 	start->intros.push_back("demo/dcine2.smk");
 	_levels["<start>"] = start;
 
-	loadArcadeLevel("c1.mi_", "mis/demo.mis", prefix);
+	loadArcadeLevel("c1.mi_", "sixdemo/mis/demo.mis", prefix);
 	_levels["c1.mi_"]->levelIfLose = "sixdemo/mis/demo.mis";
 
 	loadLib("", "c_misc/fonts.lib", true);
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index e2726f8fb63..398e181f7e3 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -34,6 +34,9 @@ static const chapterEntry rawChapterTable[] = {
 };
 
 WetEngine::WetEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine(syst, gd) {
+	_screenW = 320;
+	_screenH = 200;
+ 
     const chapterEntry *entry = rawChapterTable;
     while (entry->id) {
 		_chapterTable[entry->id] = entry;
@@ -156,13 +159,12 @@ void WetEngine::loadAssetsPCW() {
 	intro->intros.push_back("c_misc/nw_logo.smk");
 	intro->intros.push_back("c_misc/h.s");
 	intro->intros.push_back("c_misc/wet.smk");
-	intro->frameImage.clear();
 	_levels["<start>"] = intro;
 
 	loadArcadeLevel("c11.mis", "<gameover>", "");
+	_levels["c11.mis"]->levelIfLose = "<gameover>";
 
 	Transition *over = new Transition("<quit>");
-	over->intros.push_back("movie/gameover.smk");
 	_levels["<gameover>"] = over;
 
 	loadLib("", "c_misc/sound.lib", false);
@@ -180,13 +182,15 @@ void WetEngine::loadAssetsPCG() {
 	intro->intros.push_back("nw_logo.smk");
 	intro->intros.push_back("h.s");
 	intro->intros.push_back("wet.smk");
-	intro->frameImage.clear();
+	intro->frameImage = "c.s";
+	intro->frameNumber = 0;
 	_levels["<start>"] = intro;
 
 	loadArcadeLevel("c31.mis", "<gameover>", "");
+	_levels["c31.mis"]->levelIfLose = "<gameover>";
 
 	Transition *over = new Transition("<quit>");
-	over->intros.push_back("gameover.smk");
+	over->intros.push_back("g.s");
 	_levels["<gameover>"] = over;
 
 	loadLib("", "sound.lib", false);
@@ -211,20 +215,22 @@ void WetEngine::loadAssetsFullGame() {
 	_levels["<main_menu>"] = menu;
 	_levels["<main_menu>"]->levelIfWin = "c11";
 
-	loadArcadeLevel("c110.mi_", "c20", "");
+	loadArcadeLevel("c110.mi_", "c10", "");
 	_levels["c110.mi_"]->intros.push_front("c_misc/intros.smk");
 
-	loadArcadeLevel("c111.mi_", "c20", "");
+	loadArcadeLevel("c111.mi_", "c10", "");
 	_levels["c111.mi_"]->intros.push_front("c_misc/intros.smk");
 
-	loadArcadeLevel("c112.mi_", "c20", "");
-	_levels["c112.mi_"]->intros.push_front("c_misc/intros.smk");
+	 loadArcadeLevel("c112.mi_", "c10", "");
+	 _levels["c112.mi_"]->intros.push_front("c_misc/intros.smk");
 
-	loadArcadeLevel("c100.mi_", "", "");
+	loadArcadeLevel("c100.mi_", "c20", "");
+	loadArcadeLevel("c101.mi_", "c20", "");
+	loadArcadeLevel("c102.mi_", "c20", "");
 
-	loadArcadeLevel("c200.mi_", "???", "");
-	loadArcadeLevel("c201.mi_", "???", "");
-	loadArcadeLevel("c202.mi_", "???", "");
+	//loadArcadeLevel("c300.mi_", "???", "");
+	//loadArcadeLevel("c201.mi_", "???", "");
+	//loadArcadeLevel("c202.mi_", "???", "");
 
 	//loadArcadeLevel("c20", "", "");
 
@@ -234,6 +240,11 @@ void WetEngine::loadAssetsFullGame() {
 }
 
 void WetEngine::showCredits() {
+	if (_cheatsEnabled && !_arcadeMode.empty()) {
+		_skipLevel = true;
+		return;
+	}
+
 	if (!isDemo() || _variant == "Demo") {
 		MVideo video("c_misc/credits.smk", Common::Point(0, 0), false, false, false);
 		runIntro(video);
@@ -255,7 +266,7 @@ void WetEngine::runMainMenu(Code *code) {
 	Graphics::Surface *frame = decodeFrame("c_misc/menus.smk", 16, &palette);
 	loadPalette(palette, 0, 256);
 	Common::String _name = "";
-	drawImage(*frame, 0, 0, true);
+	drawImage(*frame, 0, 0, false);
 	drawString("ENTER NAME :", 48, 50, 100, c);
 	while (!shouldQuit()) {
 




More information about the Scummvm-git-logs mailing list