[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