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