[Scummvm-git-logs] scummvm master -> 4d21757e2bb708c1b944d21297992e6215d6904f
neuromancer
noreply at scummvm.org
Wed Apr 6 14:42:47 UTC 2022
This automated email contains information about 13 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
cb159a4a24 HYPNO: first attempt to parse and implement the Soldier Boyz engine
42d0d8e06c HYPNO: refactored findNextLevel in boyz
07b68841ce HYPNO: correctly implemented hit/miss shoots using masks in boyz
7f97e634e0 HYPNO: added the first two levels and some preliminary code to render the ui in boyz
2ad13fad89 HYPNO: parse script lines from levels in boyz
403ac8a1ff HYPNO: missing derreference in runBeforeArcade in boyz
ab56306b61 HYPNO: use a class variable instead of local variable to access the background video in arcade sequences
fc3e7d18be HYPNO: update actor, mode and cursor from the script in boyz
dccdeabaef HYPNO: improved parsing to support level c14 in boyz
a8d20101b7 HYPNO: moved arcade code to a specific file in boyz
5229ac6018 HYPNO: check language to avoid crashes in wet demo
ed64428e67 HYPNO: initial support for crossairs in boyz
4d21757e2b HYPNO: initial implementation of hitPlayer and weapon sounds in boyz
Commit: cb159a4a2490f8a9b558eeb44a1bd39923188156
https://github.com/scummvm/scummvm/commit/cb159a4a2490f8a9b558eeb44a1bd39923188156
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: first attempt to parse and implement the Soldier Boyz engine
Changed paths:
engines/hypno/arcade.cpp
engines/hypno/boyz/boyz.cpp
engines/hypno/detection.cpp
engines/hypno/grammar.h
engines/hypno/grammar_arc.cpp
engines/hypno/grammar_arc.y
engines/hypno/hypno.h
engines/hypno/lexer_arc.cpp
engines/hypno/lexer_arc.l
engines/hypno/scene.cpp
engines/hypno/tokens_arc.h
diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index c285761da24..13b167806ca 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -412,7 +412,9 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
if (it->name == si.name) {
Shoot s = *it;
s.startFrame = si.timestamp;
- if (it->animation == "NONE") {
+ if (it->maskOffset > 0) {
+ // TODO
+ } else if (it->animation == "NONE") {
if ((uint32)(it->name[0]) == _currentPlayerPosition) {
_health = _health - it->attackWeight;
hitPlayer();
@@ -472,7 +474,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
} else if (it->video->decoder->needsUpdate() && needsUpdate) {
updateScreen(*it->video);
}
- } else if (!it->video) {
+ } else if (!it->video && it->bodyFrames.size() > 0) {
uint32 frame = background.decoder->getCurFrame();
uint32 bodyLastFrame = it->bodyFrames[it->bodyFrames.size() - 1].lastFrame();
if (frame > it->startFrame && frame - it->startFrame > bodyLastFrame)
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 03a8019470c..748a66152bf 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -26,13 +26,57 @@
namespace Hypno {
-BoyzEngine::BoyzEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine(syst, gd) {}
+BoyzEngine::BoyzEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine(syst, gd) {
+ _screenW = 320;
+ _screenH = 200;
+ _lives = 2;
+}
void BoyzEngine::loadAssets() {
- LibFile *missions = loadLib("", "boyz/preload/missions.lib", true);
+ LibFile *missions = loadLib("", "preload/missions.lib", true);
Common::ArchiveMemberList files;
if (missions->listMembers(files) == 0)
error("Failed to load any files from missions.lib");
+ loadArcadeLevel("c11.mi_", "", "", "");
+ loadLib("sound/", "misc/sound.lib", true);
+ _nextLevel = "c11.mi_";
+}
+
+void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
+ _checkpoint = _currentLevel;
+ assert(!arc->player.empty());
+ _playerFrames = decodeFrames(arc->player);
+ _playerFrameSep = 0;
+
+ for (Frames::iterator it =_playerFrames.begin(); it != _playerFrames.end(); ++it) {
+ if ((*it)->getPixel(0, 0) == 255)
+ break;
+ if ((*it)->getPixel(0, 0) == 252)
+ break;
+
+ _playerFrameSep++;
+ }
+ _playerFrameIdx = -1;
+}
+
+void BoyzEngine::drawPlayer() {
+ drawImage(*_playerFrames[0], 0, 0, true);
+}
+void BoyzEngine::drawHealth() {}
+void BoyzEngine::hitPlayer() {}
+void BoyzEngine::drawShoot(const Common::Point &target) {}
+
+void BoyzEngine::initSegment(ArcadeShooting *arc) {
+ _segmentShootSequenceOffset = 0;
+ _segmentShootSequenceMax = 0;
+
+ uint32 randomSegmentShootSequence = _segmentShootSequenceOffset + _rnd->getRandomNumber(_segmentShootSequenceMax);
+ SegmentShoots segmentShoots = arc->shootSequence[randomSegmentShootSequence];
+ _shootSequence = segmentShoots.shootSequence;
+ _segmentRepetitionMax = segmentShoots.segmentRepetition; // Usually zero
+ _segmentRepetition = 0;
+ _segmentOffset = 0;
+ _segmentIdx = _segmentOffset;
}
} // namespace Hypno
diff --git a/engines/hypno/detection.cpp b/engines/hypno/detection.cpp
index 9b147965cc0..2e44e9e9310 100644
--- a/engines/hypno/detection.cpp
+++ b/engines/hypno/detection.cpp
@@ -162,12 +162,12 @@ static const ADGameDescription gameDescriptions[] = {
GUIO1(GUIO_NOMIDI)},
{
"soldierboyz", // Solidier Boyz (US)
- _s("Missing game code"),
+ nullptr,
AD_ENTRY2s("boyz.exe", "bac1d734f2606dbdd0816dfa7a5cf518", 263347,
"setup.exe", "bac1d734f2606dbdd0816dfa7a5cf518", 160740),
Common::EN_USA,
Common::kPlatformWindows,
- ADGF_UNSUPPORTED,
+ ADGF_UNSTABLE,
GUIO1(GUIO_NOMIDI)
},
AD_TABLE_END_MARKER
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index bce95a06be0..db1e688644a 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -376,6 +376,7 @@ public:
attackWeight = 0;
paletteOffset = 0;
paletteSize = 0;
+ maskOffset = 0;
objKillsCount = 0;
objMissesCount = 0;
animation = "NONE";
@@ -403,6 +404,9 @@ public:
uint32 paletteOffset;
uint32 paletteSize;
+ // Mask
+ uint32 maskOffset;
+
// Sounds
Filename enemySound;
Filename deathSound;
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 9bca233f646..ab8fc8b132b 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -101,7 +101,7 @@ int HYPNO_ARC_wrap() {
using namespace Hypno;
-#line 106 "engines/hypno/grammar_arc.cpp"
+#line 105 "engines/hypno/grammar_arc.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -162,29 +162,34 @@ enum yysymbol_kind_t
YYSYMBOL_VTOK = 30, /* VTOK */
YYSYMBOL_OTOK = 31, /* OTOK */
YYSYMBOL_LTOK = 32, /* LTOK */
- YYSYMBOL_NTOK = 33, /* NTOK */
- YYSYMBOL_NSTOK = 34, /* NSTOK */
- YYSYMBOL_RTOK = 35, /* RTOK */
- YYSYMBOL_R01TOK = 36, /* R01TOK */
- YYSYMBOL_ITOK = 37, /* ITOK */
- YYSYMBOL_I1TOK = 38, /* I1TOK */
- YYSYMBOL_JTOK = 39, /* JTOK */
- YYSYMBOL_ZTOK = 40, /* ZTOK */
- YYSYMBOL_NONETOK = 41, /* NONETOK */
- YYSYMBOL_A0TOK = 42, /* A0TOK */
- YYSYMBOL_P0TOK = 43, /* P0TOK */
- YYSYMBOL_WTOK = 44, /* WTOK */
- YYSYMBOL_XTOK = 45, /* XTOK */
- YYSYMBOL_CB3TOK = 46, /* CB3TOK */
- YYSYMBOL_C02TOK = 47, /* C02TOK */
- YYSYMBOL_YYACCEPT = 48, /* $accept */
- YYSYMBOL_start = 49, /* start */
- YYSYMBOL_50_1 = 50, /* $@1 */
- YYSYMBOL_header = 51, /* header */
- YYSYMBOL_hline = 52, /* hline */
- YYSYMBOL_enc = 53, /* enc */
- YYSYMBOL_body = 54, /* body */
- YYSYMBOL_bline = 55 /* bline */
+ YYSYMBOL_MTOK = 33, /* MTOK */
+ YYSYMBOL_NTOK = 34, /* NTOK */
+ YYSYMBOL_NSTOK = 35, /* NSTOK */
+ YYSYMBOL_RTOK = 36, /* RTOK */
+ YYSYMBOL_R01TOK = 37, /* R01TOK */
+ YYSYMBOL_ITOK = 38, /* ITOK */
+ YYSYMBOL_I1TOK = 39, /* I1TOK */
+ YYSYMBOL_GTOK = 40, /* GTOK */
+ YYSYMBOL_JTOK = 41, /* JTOK */
+ YYSYMBOL_KTOK = 42, /* KTOK */
+ YYSYMBOL_UTOK = 43, /* UTOK */
+ YYSYMBOL_ZTOK = 44, /* ZTOK */
+ YYSYMBOL_NONETOK = 45, /* NONETOK */
+ YYSYMBOL_A0TOK = 46, /* A0TOK */
+ YYSYMBOL_P0TOK = 47, /* P0TOK */
+ YYSYMBOL_WTOK = 48, /* WTOK */
+ YYSYMBOL_XTOK = 49, /* XTOK */
+ YYSYMBOL_CB3TOK = 50, /* CB3TOK */
+ YYSYMBOL_C02TOK = 51, /* C02TOK */
+ YYSYMBOL_YYACCEPT = 52, /* $accept */
+ YYSYMBOL_start = 53, /* start */
+ YYSYMBOL_54_1 = 54, /* $@1 */
+ YYSYMBOL_header = 55, /* header */
+ YYSYMBOL_hline = 56, /* hline */
+ YYSYMBOL_enc = 57, /* enc */
+ YYSYMBOL_flag = 58, /* flag */
+ YYSYMBOL_body = 59, /* body */
+ YYSYMBOL_bline = 60 /* bline */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -512,19 +517,19 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 6
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 160
+#define YYLAST 178
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 48
+#define YYNTOKENS 52
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 8
+#define YYNNTS 9
/* YYNRULES -- Number of rules. */
-#define YYNRULES 80
+#define YYNRULES 92
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 169
+#define YYNSTATES 187
/* YYMAXUTOK -- Last valid token kind. */
-#define YYMAXUTOK 302
+#define YYMAXUTOK 306
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -568,7 +573,7 @@ static const yytype_int8 yytranslate[] =
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47
+ 45, 46, 47, 48, 49, 50, 51
};
#if HYPNO_ARC_DEBUG
@@ -576,14 +581,15 @@ static const yytype_int8 yytranslate[] =
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,
- 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
+ 95, 99, 100, 101, 102, 103, 104, 105, 110, 120,
+ 129, 135, 141, 142, 146, 150, 153, 157, 160, 161,
+ 187, 209, 215, 220, 225, 231, 236, 241, 246, 251,
+ 256, 263, 264, 267, 268, 271, 272, 273, 276, 284,
+ 289, 294, 298, 302, 306, 310, 314, 318, 322, 326,
+ 330, 334, 338, 342, 346, 350, 354, 358, 362, 366,
+ 370, 374, 378, 381, 385, 390, 394, 399, 404, 408,
+ 414, 418, 421, 422, 425, 429, 432, 435, 436, 439,
+ 448, 449, 452
};
#endif
@@ -603,10 +609,11 @@ static const char *const yytname[] =
"BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "ENCTOK", "ONTOK", "NUM",
"BYTE", "COMMENT", "CTOK", "DTOK", "HTOK", "HETOK", "HLTOK", "H12TOK",
"HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK", "FTOK", "TTOK", "TPTOK",
- "ATOK", "VTOK", "OTOK", "LTOK", "NTOK", "NSTOK", "RTOK", "R01TOK",
- "ITOK", "I1TOK", "JTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK",
- "XTOK", "CB3TOK", "C02TOK", "$accept", "start", "$@1", "header", "hline",
- "enc", "body", "bline", YY_NULLPTR
+ "ATOK", "VTOK", "OTOK", "LTOK", "MTOK", "NTOK", "NSTOK", "RTOK",
+ "R01TOK", "ITOK", "I1TOK", "GTOK", "JTOK", "KTOK", "UTOK", "ZTOK",
+ "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK", "C02TOK",
+ "$accept", "start", "$@1", "header", "hline", "enc", "flag", "body",
+ "bline", YY_NULLPTR
};
static const char *
@@ -616,7 +623,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
}
#endif
-#define YYPACT_NINF (-99)
+#define YYPACT_NINF (-109)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -630,23 +637,25 @@ yysymbol_name (yysymbol_kind_t yysymbol)
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- -2, -99, -2, 9, 73, -99, -99, 10, 11, 4,
- 6, 7, 84, 0, 16, 20, 32, 73, 34, 35,
- 36, -1, 45, 39, 12, 40, 46, 52, 53, 54,
- 55, 22, 73, -99, 50, 56, -99, -99, 60, 62,
- 64, 68, 69, 70, 71, 74, 93, 100, -99, 102,
- 103, -99, 105, 106, 108, 109, 110, -99, 111, -99,
- -99, -99, -99, -99, 44, -99, -99, -99, -99, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, -99,
- -99, -99, -99, 81, -99, -99, -99, -5, -99, -99,
- -99, -99, -99, -99, -99, -99, -99, -99, -99, 122,
- 131, 124, 1, 125, 126, 127, -5, 136, 129, 130,
- 132, -99, 133, 134, 38, 135, -99, 137, 138, 139,
- 98, -5, 140, 50, 141, -99, -99, -99, -99, -99,
- -99, -99, -99, 142, 143, 144, 145, -99, -99, -99,
- -99, -99, -99, -99, -99, -99, -99, -99, -99, -99,
- -99, -99, -99, -99, -99, 146, 147, -99, -99, -99,
- -99, -99, -99, -99, -99, -99, -99, -99, -99
+ 0, -109, 0, 7, 81, -109, -109, 5, 10, 3,
+ 4, 6, 110, 21, 27, 36, 38, 81, 8, 11,
+ 40, -1, 15, 41, 26, 43, 50, 52, 56, 57,
+ 58, 59, 54, 20, 81, -109, 60, 65, -109, -109,
+ 67, 69, 76, 77, 78, 79, 82, 83, 93, 106,
+ -109, 109, 113, -109, 114, 115, 116, 117, 118, -109,
+ 119, -109, -109, -109, -109, -109, -109, 120, 71, -109,
+ -109, 130, -109, 122, 124, 125, 126, 128, 129, 131,
+ 132, 133, 135, -109, -109, -109, -109, 68, -109, -109,
+ -109, 136, -5, -109, -109, -109, -109, -109, -109, -109,
+ -109, -109, -109, -109, -109, -109, 137, 138, 147, 140,
+ 1, 141, 142, 143, -5, 152, 145, 146, 148, 149,
+ -109, 150, 151, 42, -109, 153, 154, -109, 155, 156,
+ 157, 73, -5, -109, 158, 60, 159, -109, -109, -109,
+ -109, -109, -109, -109, -109, 160, 161, -109, 162, 163,
+ -109, -109, -109, -109, -109, -109, -109, -109, -109, -109,
+ -109, -109, -109, -109, -109, -109, -109, -109, -109, -109,
+ -109, -109, -109, 164, 165, -109, -109, -109, -109, -109,
+ -109, -109, -109, -109, -109, -109, -109
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -657,32 +666,34 @@ static const yytype_int8 yydefact[] =
0, 2, 0, 0, 7, 4, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 7, 27, 40, 17, 8, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 0,
- 0, 9, 0, 0, 0, 0, 0, 14, 0, 21,
- 22, 23, 24, 25, 0, 5, 39, 28, 16, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 26,
- 11, 19, 20, 0, 12, 13, 15, 43, 32, 38,
- 35, 34, 36, 33, 29, 30, 37, 31, 18, 0,
- 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
- 0, 79, 0, 0, 0, 0, 80, 0, 0, 0,
- 0, 43, 0, 40, 0, 44, 45, 72, 76, 73,
- 42, 46, 74, 0, 0, 0, 0, 47, 48, 61,
- 50, 51, 53, 59, 58, 52, 62, 49, 57, 63,
- 56, 60, 54, 55, 64, 0, 0, 75, 3, 41,
- 68, 78, 69, 71, 77, 66, 67, 65, 70
+ 0, 0, 0, 0, 7, 29, 42, 19, 8, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 9, 0, 0, 0, 0, 0, 16,
+ 0, 13, 23, 24, 25, 26, 27, 0, 0, 5,
+ 41, 44, 18, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 28, 11, 21, 22, 0, 12, 15,
+ 17, 0, 47, 43, 30, 34, 40, 37, 36, 38,
+ 35, 31, 32, 39, 33, 20, 0, 0, 0, 0,
+ 0, 0, 0, 0, 47, 0, 0, 0, 0, 0,
+ 91, 0, 0, 0, 90, 0, 0, 92, 0, 0,
+ 0, 0, 47, 14, 0, 42, 0, 48, 49, 80,
+ 84, 81, 46, 50, 82, 0, 86, 87, 0, 0,
+ 51, 52, 67, 54, 55, 58, 65, 64, 56, 68,
+ 53, 63, 69, 70, 62, 66, 59, 57, 60, 61,
+ 71, 72, 88, 0, 0, 83, 3, 45, 76, 89,
+ 77, 79, 85, 74, 75, 73, 78
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -99, 158, -99, -10, -99, 25, -98, -99
+ -109, 176, -109, -4, -109, 24, -109, -108, -109
};
/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int8 yydefgoto[] =
+static const yytype_uint8 yydefgoto[] =
{
- 0, 3, 4, 31, 32, 67, 120, 121
+ 0, 3, 4, 33, 34, 71, 94, 131, 132
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -690,95 +701,101 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
- 99, 100, 101, 52, 102, 125, 1, 48, 130, 6,
- 103, 104, 105, 44, 33, 34, 35, 106, 36, 37,
- 2, 107, 65, 159, 56, 108, 109, 110, 111, 45,
- 112, 113, 114, 46, 115, 116, 57, 117, 118, 119,
- 53, 137, 126, 138, 139, 47, 49, 50, 51, 54,
- 59, 55, 58, 140, 141, 142, 60, 61, 62, 63,
- 66, 143, 64, 144, 145, 146, 87, 147, 68, 148,
- 149, 150, 69, 151, 70, 152, 71, 153, 7, 8,
- 72, 73, 74, 75, 9, 98, 76, 38, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 39, 19, 20,
- 21, 22, 23, 24, 25, 77, 26, 27, 28, 40,
- 29, 30, 78, 41, 79, 80, 42, 81, 82, 43,
- 83, 84, 85, 86, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 122, 123, 124, 127, 128, 129,
- 131, 132, 133, 158, 134, 135, 136, 154, 161, 155,
- 156, 157, 160, 162, 163, 164, 165, 166, 167, 168,
- 5
+ 107, 108, 109, 54, 110, 137, 142, 6, 1, 35,
+ 111, 112, 113, 50, 36, 37, 38, 114, 39, 56,
+ 51, 115, 2, 52, 177, 116, 117, 118, 119, 120,
+ 69, 121, 122, 123, 46, 124, 125, 126, 58, 127,
+ 47, 128, 129, 130, 55, 150, 138, 151, 152, 48,
+ 59, 49, 53, 57, 61, 60, 62, 153, 154, 155,
+ 63, 64, 65, 66, 68, 156, 67, 157, 158, 159,
+ 70, 160, 105, 161, 162, 163, 164, 72, 165, 73,
+ 166, 74, 167, 168, 169, 170, 7, 8, 75, 76,
+ 77, 78, 9, 92, 79, 80, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 81, 19, 20, 21, 22,
+ 23, 24, 25, 40, 26, 27, 28, 29, 82, 30,
+ 31, 83, 176, 41, 32, 84, 85, 86, 87, 88,
+ 89, 90, 91, 93, 95, 42, 96, 97, 98, 43,
+ 99, 100, 44, 101, 102, 103, 45, 104, 106, 133,
+ 134, 135, 136, 139, 140, 141, 143, 144, 145, 179,
+ 146, 147, 148, 149, 0, 171, 172, 173, 174, 175,
+ 178, 180, 181, 182, 183, 184, 185, 186, 5
};
-static const yytype_int8 yycheck[] =
+static const yytype_int16 yycheck[] =
{
- 5, 6, 7, 4, 9, 4, 8, 17, 106, 0,
- 15, 16, 17, 13, 4, 4, 12, 22, 12, 12,
- 22, 26, 32, 121, 12, 30, 31, 32, 33, 13,
- 35, 36, 37, 13, 39, 40, 24, 42, 43, 44,
- 41, 3, 41, 5, 6, 13, 12, 12, 12, 4,
- 4, 12, 12, 15, 16, 17, 4, 4, 4, 4,
- 10, 23, 40, 25, 26, 27, 22, 29, 12, 31,
- 32, 33, 12, 35, 12, 37, 12, 39, 5, 6,
- 12, 12, 12, 12, 11, 4, 12, 3, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 13, 25, 26,
- 27, 28, 29, 30, 31, 12, 33, 34, 35, 25,
- 37, 38, 12, 29, 12, 12, 32, 12, 12, 35,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 4, 12, 12, 12, 12,
- 4, 12, 12, 45, 12, 12, 12, 12, 123, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 2
+ 5, 6, 7, 4, 9, 4, 114, 0, 8, 4,
+ 15, 16, 17, 17, 4, 12, 12, 22, 12, 4,
+ 12, 26, 22, 12, 132, 30, 31, 32, 33, 34,
+ 34, 36, 37, 38, 13, 40, 41, 42, 12, 44,
+ 13, 46, 47, 48, 45, 3, 45, 5, 6, 13,
+ 24, 13, 12, 12, 4, 12, 4, 15, 16, 17,
+ 4, 4, 4, 4, 44, 23, 12, 25, 26, 27,
+ 10, 29, 4, 31, 32, 33, 34, 12, 36, 12,
+ 38, 12, 40, 41, 42, 43, 5, 6, 12, 12,
+ 12, 12, 11, 22, 12, 12, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 12, 25, 26, 27, 28,
+ 29, 30, 31, 3, 33, 34, 35, 36, 12, 38,
+ 39, 12, 49, 13, 43, 12, 12, 12, 12, 12,
+ 12, 12, 12, 3, 12, 25, 12, 12, 12, 29,
+ 12, 12, 32, 12, 12, 12, 36, 12, 12, 12,
+ 12, 4, 12, 12, 12, 12, 4, 12, 12, 135,
+ 12, 12, 12, 12, -1, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 2
};
/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
state STATE-NUM. */
static const yytype_int8 yystos[] =
{
- 0, 8, 22, 49, 50, 49, 0, 5, 6, 11,
+ 0, 8, 22, 53, 54, 53, 0, 5, 6, 11,
15, 16, 17, 18, 19, 20, 21, 22, 23, 25,
- 26, 27, 28, 29, 30, 31, 33, 34, 35, 37,
- 38, 51, 52, 4, 4, 12, 12, 12, 3, 13,
- 25, 29, 32, 35, 13, 13, 13, 13, 51, 12,
- 12, 12, 4, 41, 4, 12, 12, 24, 12, 4,
- 4, 4, 4, 4, 40, 51, 10, 53, 12, 12,
+ 26, 27, 28, 29, 30, 31, 33, 34, 35, 36,
+ 38, 39, 43, 55, 56, 4, 4, 12, 12, 12,
+ 3, 13, 25, 29, 32, 36, 13, 13, 13, 13,
+ 55, 12, 12, 12, 4, 45, 4, 12, 12, 24,
+ 12, 4, 4, 4, 4, 4, 4, 12, 44, 55,
+ 10, 57, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 22, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 4, 5,
- 6, 7, 9, 15, 16, 17, 22, 26, 30, 31,
- 32, 33, 35, 36, 37, 39, 40, 42, 43, 44,
- 54, 55, 12, 4, 12, 4, 41, 12, 12, 12,
- 54, 4, 12, 12, 12, 12, 12, 3, 5, 6,
- 15, 16, 17, 23, 25, 26, 27, 29, 31, 32,
- 33, 35, 37, 39, 12, 12, 12, 12, 45, 54,
- 12, 53, 12, 12, 12, 12, 12, 12, 12
+ 12, 12, 22, 3, 58, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 4, 12, 5, 6, 7,
+ 9, 15, 16, 17, 22, 26, 30, 31, 32, 33,
+ 34, 36, 37, 38, 40, 41, 42, 44, 46, 47,
+ 48, 59, 60, 12, 12, 4, 12, 4, 45, 12,
+ 12, 12, 59, 4, 12, 12, 12, 12, 12, 12,
+ 3, 5, 6, 15, 16, 17, 23, 25, 26, 27,
+ 29, 31, 32, 33, 34, 36, 38, 40, 41, 42,
+ 43, 12, 12, 12, 12, 12, 49, 59, 12, 57,
+ 12, 12, 12, 12, 12, 12, 12
};
/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
static const yytype_int8 yyr1[] =
{
- 0, 48, 50, 49, 49, 51, 51, 51, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 53,
- 53, 54, 54, 54, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55
+ 0, 52, 54, 53, 53, 55, 55, 55, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 57, 57, 58, 58, 59, 59, 59, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60
};
/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
static const yytype_int8 yyr2[] =
{
0, 2, 0, 7, 2, 2, 2, 0, 2, 2,
- 2, 3, 3, 3, 2, 3, 3, 2, 4, 3,
- 3, 2, 2, 2, 2, 2, 3, 2, 3, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 0, 2, 2, 0, 2, 2, 2, 2, 2, 2,
+ 2, 3, 3, 2, 5, 3, 2, 3, 3, 2,
+ 4, 3, 3, 2, 2, 2, 2, 2, 3, 2,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 1, 0, 1, 0, 2, 2, 0, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
- 3, 3, 2, 2, 2, 2, 2, 3, 3, 1,
- 1
+ 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 2, 3, 2, 2, 2, 3,
+ 1, 1, 1
};
@@ -1244,7 +1261,7 @@ yyreduce:
case 2: /* $@1: %empty */
#line 78 "engines/hypno/grammar_arc.y"
{ g_parsedArc->mode = (yyvsp[0].s); }
-#line 1249 "engines/hypno/grammar_arc.cpp"
+#line 1265 "engines/hypno/grammar_arc.cpp"
break;
case 8: /* hline: CTOK NUM */
@@ -1253,7 +1270,7 @@ yyreduce:
g_parsedArc->id = (yyvsp[0].i);
HYPNO_ARC_default_sound_rate = 0;
debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1258 "engines/hypno/grammar_arc.cpp"
+#line 1274 "engines/hypno/grammar_arc.cpp"
break;
case 9: /* hline: FTOK NUM */
@@ -1262,7 +1279,7 @@ yyreduce:
HYPNO_ARC_default_sound_rate = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i));
}
-#line 1267 "engines/hypno/grammar_arc.cpp"
+#line 1283 "engines/hypno/grammar_arc.cpp"
break;
case 10: /* hline: DTOK NUM */
@@ -1271,45 +1288,57 @@ yyreduce:
g_parsedArc->frameDelay = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
}
-#line 1276 "engines/hypno/grammar_arc.cpp"
+#line 1292 "engines/hypno/grammar_arc.cpp"
break;
case 11: /* hline: PTOK NUM NUM */
#line 99 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1282 "engines/hypno/grammar_arc.cpp"
+#line 1298 "engines/hypno/grammar_arc.cpp"
break;
case 12: /* hline: ATOK NUM NUM */
#line 100 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1288 "engines/hypno/grammar_arc.cpp"
+#line 1304 "engines/hypno/grammar_arc.cpp"
break;
- case 13: /* hline: VTOK NUM NUM */
+ case 13: /* hline: MTOK FILENAME */
#line 101 "engines/hypno/grammar_arc.y"
- { debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1294 "engines/hypno/grammar_arc.cpp"
+ { debugC(1, kHypnoDebugParser, "M %s", (yyvsp[0].s)); }
+#line 1310 "engines/hypno/grammar_arc.cpp"
break;
- case 14: /* hline: VTOK RESTOK */
+ case 14: /* hline: UTOK NUM NUM NUM NUM */
#line 102 "engines/hypno/grammar_arc.y"
- { debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1300 "engines/hypno/grammar_arc.cpp"
+ { debugC(1, kHypnoDebugParser, "U %d %d %d %d", (yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); }
+#line 1316 "engines/hypno/grammar_arc.cpp"
break;
- case 15: /* hline: OTOK NUM NUM */
+ case 15: /* hline: VTOK NUM NUM */
#line 103 "engines/hypno/grammar_arc.y"
+ { debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
+#line 1322 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 16: /* hline: VTOK RESTOK */
+#line 104 "engines/hypno/grammar_arc.y"
+ { debugC(1, kHypnoDebugParser, "V 320,200"); }
+#line 1328 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 17: /* hline: OTOK NUM NUM */
+#line 105 "engines/hypno/grammar_arc.y"
{
g_parsedArc->objKillsRequired[0] = (yyvsp[-1].i);
g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1310 "engines/hypno/grammar_arc.cpp"
+#line 1338 "engines/hypno/grammar_arc.cpp"
break;
- case 16: /* hline: ONTOK NUM NUM */
-#line 108 "engines/hypno/grammar_arc.y"
+ case 18: /* hline: ONTOK NUM NUM */
+#line 110 "engines/hypno/grammar_arc.y"
{
if (Common::String("O0") == (yyvsp[-2].s)) {
g_parsedArc->objKillsRequired[0] = (yyvsp[-1].i);
@@ -1320,11 +1349,11 @@ yyreduce:
} else
error("Invalid objective: '%s'", (yyvsp[-2].s));
debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1325 "engines/hypno/grammar_arc.cpp"
+#line 1353 "engines/hypno/grammar_arc.cpp"
break;
- case 17: /* hline: ONTOK NUM */
-#line 118 "engines/hypno/grammar_arc.y"
+ case 19: /* hline: ONTOK NUM */
+#line 120 "engines/hypno/grammar_arc.y"
{
if (Common::String("O0") == (yyvsp[-1].s)) {
g_parsedArc->objKillsRequired[0] = (yyvsp[0].i);
@@ -1334,88 +1363,88 @@ yyreduce:
error("Invalid objective: '%s'", (yyvsp[-1].s));
debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
}
-#line 1339 "engines/hypno/grammar_arc.cpp"
+#line 1367 "engines/hypno/grammar_arc.cpp"
break;
- case 18: /* hline: TPTOK FILENAME NUM FILENAME */
-#line 127 "engines/hypno/grammar_arc.y"
+ case 20: /* hline: TPTOK FILENAME NUM FILENAME */
+#line 129 "engines/hypno/grammar_arc.y"
{
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"
+#line 1378 "engines/hypno/grammar_arc.cpp"
break;
- case 19: /* hline: TTOK FILENAME NUM */
-#line 133 "engines/hypno/grammar_arc.y"
+ case 21: /* hline: TTOK FILENAME NUM */
+#line 135 "engines/hypno/grammar_arc.y"
{
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 1361 "engines/hypno/grammar_arc.cpp"
+#line 1389 "engines/hypno/grammar_arc.cpp"
break;
- case 20: /* hline: TTOK NONETOK NUM */
-#line 139 "engines/hypno/grammar_arc.y"
+ case 22: /* hline: TTOK NONETOK NUM */
+#line 141 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1367 "engines/hypno/grammar_arc.cpp"
+#line 1395 "engines/hypno/grammar_arc.cpp"
break;
- case 21: /* hline: NTOK FILENAME */
-#line 140 "engines/hypno/grammar_arc.y"
+ case 23: /* hline: NTOK FILENAME */
+#line 142 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundVideo = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
}
-#line 1376 "engines/hypno/grammar_arc.cpp"
+#line 1404 "engines/hypno/grammar_arc.cpp"
break;
- case 22: /* hline: NSTOK FILENAME */
-#line 144 "engines/hypno/grammar_arc.y"
+ case 24: /* hline: NSTOK FILENAME */
+#line 146 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundVideo = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
}
-#line 1385 "engines/hypno/grammar_arc.cpp"
+#line 1413 "engines/hypno/grammar_arc.cpp"
break;
- case 23: /* hline: RTOK FILENAME */
-#line 148 "engines/hypno/grammar_arc.y"
+ case 25: /* hline: RTOK FILENAME */
+#line 150 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundPalette = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1393 "engines/hypno/grammar_arc.cpp"
+#line 1421 "engines/hypno/grammar_arc.cpp"
break;
- case 24: /* hline: ITOK FILENAME */
-#line 151 "engines/hypno/grammar_arc.y"
+ case 26: /* hline: ITOK FILENAME */
+#line 153 "engines/hypno/grammar_arc.y"
{
g_parsedArc->player = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1402 "engines/hypno/grammar_arc.cpp"
+#line 1430 "engines/hypno/grammar_arc.cpp"
break;
- case 25: /* hline: I1TOK FILENAME */
-#line 155 "engines/hypno/grammar_arc.y"
+ case 27: /* hline: I1TOK FILENAME */
+#line 157 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
}
-#line 1410 "engines/hypno/grammar_arc.cpp"
+#line 1438 "engines/hypno/grammar_arc.cpp"
break;
- case 26: /* hline: QTOK NUM NUM */
-#line 158 "engines/hypno/grammar_arc.y"
+ case 28: /* hline: QTOK NUM NUM */
+#line 160 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1416 "engines/hypno/grammar_arc.cpp"
+#line 1444 "engines/hypno/grammar_arc.cpp"
break;
- case 27: /* hline: BNTOK FILENAME */
-#line 159 "engines/hypno/grammar_arc.y"
+ case 29: /* hline: BNTOK FILENAME */
+#line 161 "engines/hypno/grammar_arc.y"
{
if (Common::String("B0") == (yyvsp[-1].s))
g_parsedArc->beforeVideo = (yyvsp[0].s);
@@ -1442,152 +1471,164 @@ yyreduce:
debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
}
-#line 1447 "engines/hypno/grammar_arc.cpp"
+#line 1475 "engines/hypno/grammar_arc.cpp"
break;
- case 28: /* hline: SNTOK FILENAME enc */
-#line 185 "engines/hypno/grammar_arc.y"
- {
+ case 30: /* hline: SNTOK FILENAME enc flag */
+#line 187 "engines/hypno/grammar_arc.y"
+ {
uint32 sampleRate = 11025;
- if (Common::String("22K") == (yyvsp[0].s) || Common::String("22k") == (yyvsp[0].s))
+ if (Common::String("22K") == (yyvsp[-1].s) || Common::String("22k") == (yyvsp[-1].s))
sampleRate = 22050;
else if (HYPNO_ARC_default_sound_rate > 0)
sampleRate = HYPNO_ARC_default_sound_rate;
- if (Common::String("S0") == (yyvsp[-2].s)) {
- g_parsedArc->music = (yyvsp[-1].s);
+ if (Common::String("S0") == (yyvsp[-3].s)) {
+ g_parsedArc->music = (yyvsp[-2].s);
g_parsedArc->musicRate = sampleRate;
- } else if (Common::String("S1") == (yyvsp[-2].s)) {
- g_parsedArc->shootSound = (yyvsp[-1].s);
+ } else if (Common::String("S1") == (yyvsp[-3].s)) {
+ g_parsedArc->shootSound = (yyvsp[-2].s);
g_parsedArc->shootSoundRate = sampleRate;
- } else if (Common::String("S2") == (yyvsp[-2].s)) {
- g_parsedArc->hitSound = (yyvsp[-1].s);
+ } else if (Common::String("S2") == (yyvsp[-3].s)) {
+ g_parsedArc->hitSound = (yyvsp[-2].s);
g_parsedArc->hitSoundRate = sampleRate;
- } else if (Common::String("S4") == (yyvsp[-2].s)) {
- g_parsedArc->enemySound = (yyvsp[-1].s);
+ } else if (Common::String("S4") == (yyvsp[-3].s)) {
+ g_parsedArc->enemySound = (yyvsp[-2].s);
g_parsedArc->enemySoundRate = sampleRate;
}
- debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s));
+ debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-2].s));
}
-#line 1474 "engines/hypno/grammar_arc.cpp"
+#line 1502 "engines/hypno/grammar_arc.cpp"
break;
- case 29: /* hline: HETOK BYTE NUM NUM */
-#line 207 "engines/hypno/grammar_arc.y"
+ case 31: /* hline: HETOK BYTE NUM NUM */
+#line 209 "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 1485 "engines/hypno/grammar_arc.cpp"
+#line 1513 "engines/hypno/grammar_arc.cpp"
break;
- case 30: /* hline: HLTOK BYTE NUM NUM */
-#line 213 "engines/hypno/grammar_arc.y"
+ case 32: /* hline: HLTOK BYTE NUM NUM */
+#line 215 "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 1495 "engines/hypno/grammar_arc.cpp"
+#line 1523 "engines/hypno/grammar_arc.cpp"
break;
- case 31: /* hline: HUTOK BYTE NUM NUM */
-#line 218 "engines/hypno/grammar_arc.y"
+ case 33: /* hline: HUTOK BYTE NUM NUM */
+#line 220 "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 1505 "engines/hypno/grammar_arc.cpp"
+#line 1533 "engines/hypno/grammar_arc.cpp"
break;
- case 32: /* hline: HTOK NAME NUM NUM */
-#line 223 "engines/hypno/grammar_arc.y"
+ case 34: /* hline: HTOK NAME NUM NUM */
+#line 225 "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 1516 "engines/hypno/grammar_arc.cpp"
+#line 1544 "engines/hypno/grammar_arc.cpp"
break;
- case 33: /* hline: HTOK RTOK NUM NUM */
-#line 229 "engines/hypno/grammar_arc.y"
+ case 35: /* hline: HTOK RTOK NUM NUM */
+#line 231 "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 1526 "engines/hypno/grammar_arc.cpp"
+#line 1554 "engines/hypno/grammar_arc.cpp"
break;
- case 34: /* hline: HTOK ATOK NUM NUM */
-#line 234 "engines/hypno/grammar_arc.y"
+ case 36: /* hline: HTOK ATOK NUM NUM */
+#line 236 "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 1536 "engines/hypno/grammar_arc.cpp"
+#line 1564 "engines/hypno/grammar_arc.cpp"
break;
- case 35: /* hline: HTOK PTOK NUM NUM */
-#line 239 "engines/hypno/grammar_arc.y"
+ case 37: /* hline: HTOK PTOK NUM NUM */
+#line 241 "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 1546 "engines/hypno/grammar_arc.cpp"
+#line 1574 "engines/hypno/grammar_arc.cpp"
break;
- case 36: /* hline: HTOK LTOK NUM NUM */
-#line 244 "engines/hypno/grammar_arc.y"
+ case 38: /* hline: HTOK LTOK NUM NUM */
+#line 246 "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 1556 "engines/hypno/grammar_arc.cpp"
+#line 1584 "engines/hypno/grammar_arc.cpp"
break;
- case 37: /* hline: H12TOK BYTE NUM NUM */
-#line 249 "engines/hypno/grammar_arc.y"
+ case 39: /* hline: H12TOK BYTE NUM NUM */
+#line 251 "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 1566 "engines/hypno/grammar_arc.cpp"
+#line 1594 "engines/hypno/grammar_arc.cpp"
break;
- case 38: /* hline: HTOK BYTE NUM NUM */
-#line 254 "engines/hypno/grammar_arc.y"
+ case 40: /* hline: HTOK BYTE NUM NUM */
+#line 256 "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 1576 "engines/hypno/grammar_arc.cpp"
+#line 1604 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 41: /* enc: ENCTOK */
+#line 263 "engines/hypno/grammar_arc.y"
+ { (yyval.s) = (yyvsp[0].s); }
+#line 1610 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 42: /* enc: %empty */
+#line 264 "engines/hypno/grammar_arc.y"
+ { (yyval.s) = scumm_strdup(""); }
+#line 1616 "engines/hypno/grammar_arc.cpp"
break;
- case 39: /* enc: ENCTOK */
-#line 261 "engines/hypno/grammar_arc.y"
+ case 43: /* flag: NAME */
+#line 267 "engines/hypno/grammar_arc.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1582 "engines/hypno/grammar_arc.cpp"
+#line 1622 "engines/hypno/grammar_arc.cpp"
break;
- case 40: /* enc: %empty */
-#line 262 "engines/hypno/grammar_arc.y"
+ case 44: /* flag: %empty */
+#line 268 "engines/hypno/grammar_arc.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1588 "engines/hypno/grammar_arc.cpp"
+#line 1628 "engines/hypno/grammar_arc.cpp"
break;
- case 44: /* bline: FNTOK FILENAME */
-#line 270 "engines/hypno/grammar_arc.y"
+ case 48: /* bline: FNTOK FILENAME */
+#line 276 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
if (Common::String("F0") == (yyvsp[-1].s))
@@ -1596,308 +1637,366 @@ yyreduce:
shoot->explosionAnimation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1601 "engines/hypno/grammar_arc.cpp"
+#line 1641 "engines/hypno/grammar_arc.cpp"
break;
- case 45: /* bline: FNTOK NONETOK */
-#line 278 "engines/hypno/grammar_arc.y"
+ case 49: /* bline: FNTOK NONETOK */
+#line 284 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
shoot->animation = "NONE";
debugC(1, kHypnoDebugParser, "FN NONE");
}
-#line 1611 "engines/hypno/grammar_arc.cpp"
+#line 1651 "engines/hypno/grammar_arc.cpp"
break;
- case 46: /* bline: FTOK FILENAME */
-#line 283 "engines/hypno/grammar_arc.y"
+ case 50: /* bline: FTOK FILENAME */
+#line 289 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
shoot->animation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1621 "engines/hypno/grammar_arc.cpp"
+#line 1661 "engines/hypno/grammar_arc.cpp"
break;
- case 47: /* bline: ITOK NAME */
-#line 288 "engines/hypno/grammar_arc.y"
+ case 51: /* bline: ITOK NAME */
+#line 294 "engines/hypno/grammar_arc.y"
{
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1630 "engines/hypno/grammar_arc.cpp"
+#line 1670 "engines/hypno/grammar_arc.cpp"
break;
- case 48: /* bline: ITOK BNTOK */
-#line 292 "engines/hypno/grammar_arc.y"
+ case 52: /* bline: ITOK BNTOK */
+#line 298 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == B1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1639 "engines/hypno/grammar_arc.cpp"
+#line 1679 "engines/hypno/grammar_arc.cpp"
break;
- case 49: /* bline: ITOK ATOK */
-#line 296 "engines/hypno/grammar_arc.y"
+ case 53: /* bline: ITOK ATOK */
+#line 302 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == A
shoot->name = "A";
debugC(1, kHypnoDebugParser, "I A");
}
-#line 1648 "engines/hypno/grammar_arc.cpp"
+#line 1688 "engines/hypno/grammar_arc.cpp"
break;
- case 50: /* bline: ITOK CTOK */
-#line 300 "engines/hypno/grammar_arc.y"
+ case 54: /* bline: ITOK CTOK */
+#line 306 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == C
shoot->name = "C";
debugC(1, kHypnoDebugParser, "I C");
}
-#line 1657 "engines/hypno/grammar_arc.cpp"
+#line 1697 "engines/hypno/grammar_arc.cpp"
break;
- case 51: /* bline: ITOK DTOK */
-#line 304 "engines/hypno/grammar_arc.y"
+ case 55: /* bline: ITOK DTOK */
+#line 310 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == D
shoot->name = "D";
debugC(1, kHypnoDebugParser, "I D");
}
-#line 1666 "engines/hypno/grammar_arc.cpp"
+#line 1706 "engines/hypno/grammar_arc.cpp"
break;
- case 52: /* bline: ITOK FTOK */
-#line 308 "engines/hypno/grammar_arc.y"
+ case 56: /* bline: ITOK FTOK */
+#line 314 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == F
shoot->name = "F";
debugC(1, kHypnoDebugParser, "I F");
}
-#line 1675 "engines/hypno/grammar_arc.cpp"
+#line 1715 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 57: /* bline: ITOK GTOK */
+#line 318 "engines/hypno/grammar_arc.y"
+ { // Workaround for NAME == G
+ shoot->name = "G";
+ debugC(1, kHypnoDebugParser, "I G");
+ }
+#line 1724 "engines/hypno/grammar_arc.cpp"
break;
- case 53: /* bline: ITOK HTOK */
-#line 312 "engines/hypno/grammar_arc.y"
+ case 58: /* bline: ITOK HTOK */
+#line 322 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == H
shoot->name = "H";
debugC(1, kHypnoDebugParser, "I H");
}
-#line 1684 "engines/hypno/grammar_arc.cpp"
+#line 1733 "engines/hypno/grammar_arc.cpp"
break;
- case 54: /* bline: ITOK ITOK */
-#line 316 "engines/hypno/grammar_arc.y"
+ case 59: /* bline: ITOK ITOK */
+#line 326 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == I
shoot->name = "I";
debugC(1, kHypnoDebugParser, "I I");
}
-#line 1693 "engines/hypno/grammar_arc.cpp"
+#line 1742 "engines/hypno/grammar_arc.cpp"
break;
- case 55: /* bline: ITOK JTOK */
-#line 320 "engines/hypno/grammar_arc.y"
- { // Workaround for NAME == I
+ case 60: /* bline: ITOK JTOK */
+#line 330 "engines/hypno/grammar_arc.y"
+ { // Workaround for NAME == J
shoot->name = "J";
debugC(1, kHypnoDebugParser, "I J");
}
-#line 1702 "engines/hypno/grammar_arc.cpp"
+#line 1751 "engines/hypno/grammar_arc.cpp"
break;
- case 56: /* bline: ITOK NTOK */
-#line 324 "engines/hypno/grammar_arc.y"
+ case 61: /* bline: ITOK KTOK */
+#line 334 "engines/hypno/grammar_arc.y"
+ { // Workaround for NAME == K
+ shoot->name = "K";
+ debugC(1, kHypnoDebugParser, "I K");
+ }
+#line 1760 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 62: /* bline: ITOK NTOK */
+#line 338 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == N
shoot->name = "N";
debugC(1, kHypnoDebugParser, "I N");
}
-#line 1711 "engines/hypno/grammar_arc.cpp"
+#line 1769 "engines/hypno/grammar_arc.cpp"
break;
- case 57: /* bline: ITOK OTOK */
-#line 328 "engines/hypno/grammar_arc.y"
+ case 63: /* bline: ITOK OTOK */
+#line 342 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == O
shoot->name = "O";
debugC(1, kHypnoDebugParser, "I O");
}
-#line 1720 "engines/hypno/grammar_arc.cpp"
+#line 1778 "engines/hypno/grammar_arc.cpp"
break;
- case 58: /* bline: ITOK PTOK */
-#line 332 "engines/hypno/grammar_arc.y"
+ case 64: /* bline: ITOK PTOK */
+#line 346 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == P
shoot->name = "P";
debugC(1, kHypnoDebugParser, "I P");
}
-#line 1729 "engines/hypno/grammar_arc.cpp"
+#line 1787 "engines/hypno/grammar_arc.cpp"
break;
- case 59: /* bline: ITOK QTOK */
-#line 336 "engines/hypno/grammar_arc.y"
+ case 65: /* bline: ITOK QTOK */
+#line 350 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == Q
shoot->name = "Q";
debugC(1, kHypnoDebugParser, "I Q");
}
-#line 1738 "engines/hypno/grammar_arc.cpp"
+#line 1796 "engines/hypno/grammar_arc.cpp"
break;
- case 60: /* bline: ITOK RTOK */
-#line 340 "engines/hypno/grammar_arc.y"
+ case 66: /* bline: ITOK RTOK */
+#line 354 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == R
shoot->name = "R";
debugC(1, kHypnoDebugParser, "I R");
}
-#line 1747 "engines/hypno/grammar_arc.cpp"
+#line 1805 "engines/hypno/grammar_arc.cpp"
break;
- case 61: /* bline: ITOK SNTOK */
-#line 344 "engines/hypno/grammar_arc.y"
+ case 67: /* bline: ITOK SNTOK */
+#line 358 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == S1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1756 "engines/hypno/grammar_arc.cpp"
+#line 1814 "engines/hypno/grammar_arc.cpp"
break;
- case 62: /* bline: ITOK TTOK */
-#line 348 "engines/hypno/grammar_arc.y"
+ case 68: /* bline: ITOK TTOK */
+#line 362 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == T
shoot->name = "T";
debugC(1, kHypnoDebugParser, "I T");
}
-#line 1765 "engines/hypno/grammar_arc.cpp"
+#line 1823 "engines/hypno/grammar_arc.cpp"
break;
- case 63: /* bline: ITOK LTOK */
-#line 352 "engines/hypno/grammar_arc.y"
+ case 69: /* bline: ITOK LTOK */
+#line 366 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == L
shoot->name = "L";
debugC(1, kHypnoDebugParser, "I L");
}
-#line 1774 "engines/hypno/grammar_arc.cpp"
+#line 1832 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 70: /* bline: ITOK MTOK */
+#line 370 "engines/hypno/grammar_arc.y"
+ { // Workaround for NAME == M
+ shoot->name = "M";
+ debugC(1, kHypnoDebugParser, "I M");
+ }
+#line 1841 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 71: /* bline: ITOK UTOK */
+#line 374 "engines/hypno/grammar_arc.y"
+ { // Workaround for NAME == U
+ shoot->name = "U";
+ debugC(1, kHypnoDebugParser, "I U");
+ }
+#line 1850 "engines/hypno/grammar_arc.cpp"
break;
- case 64: /* bline: JTOK NUM */
-#line 356 "engines/hypno/grammar_arc.y"
+ case 72: /* bline: JTOK NUM */
+#line 378 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
}
-#line 1782 "engines/hypno/grammar_arc.cpp"
+#line 1858 "engines/hypno/grammar_arc.cpp"
break;
- case 65: /* bline: A0TOK NUM NUM */
-#line 359 "engines/hypno/grammar_arc.y"
+ case 73: /* bline: A0TOK NUM NUM */
+#line 381 "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 1791 "engines/hypno/grammar_arc.cpp"
+#line 1867 "engines/hypno/grammar_arc.cpp"
break;
- case 66: /* bline: RTOK NUM NUM */
-#line 363 "engines/hypno/grammar_arc.y"
+ case 74: /* bline: RTOK NUM NUM */
+#line 385 "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 1801 "engines/hypno/grammar_arc.cpp"
+#line 1877 "engines/hypno/grammar_arc.cpp"
break;
- case 67: /* bline: R01TOK NUM NUM */
-#line 368 "engines/hypno/grammar_arc.y"
+ case 75: /* bline: R01TOK NUM NUM */
+#line 390 "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 1810 "engines/hypno/grammar_arc.cpp"
+#line 1886 "engines/hypno/grammar_arc.cpp"
break;
- case 68: /* bline: BNTOK NUM NUM */
-#line 372 "engines/hypno/grammar_arc.y"
+ case 76: /* bline: BNTOK NUM NUM */
+#line 394 "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 1820 "engines/hypno/grammar_arc.cpp"
+#line 1896 "engines/hypno/grammar_arc.cpp"
break;
- case 69: /* bline: KNTOK NUM NUM */
-#line 377 "engines/hypno/grammar_arc.y"
+ case 77: /* bline: KNTOK NUM NUM */
+#line 399 "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 1830 "engines/hypno/grammar_arc.cpp"
+#line 1906 "engines/hypno/grammar_arc.cpp"
break;
- case 70: /* bline: P0TOK NUM NUM */
-#line 382 "engines/hypno/grammar_arc.y"
+ case 78: /* bline: P0TOK NUM NUM */
+#line 404 "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 1839 "engines/hypno/grammar_arc.cpp"
+#line 1915 "engines/hypno/grammar_arc.cpp"
break;
- case 71: /* bline: OTOK NUM NUM */
-#line 386 "engines/hypno/grammar_arc.y"
+ case 79: /* bline: OTOK NUM NUM */
+#line 408 "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 1850 "engines/hypno/grammar_arc.cpp"
+#line 1926 "engines/hypno/grammar_arc.cpp"
break;
- case 72: /* bline: CTOK NUM */
-#line 392 "engines/hypno/grammar_arc.y"
+ case 80: /* bline: CTOK NUM */
+#line 414 "engines/hypno/grammar_arc.y"
{
shoot->timesToShoot = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
}
-#line 1859 "engines/hypno/grammar_arc.cpp"
+#line 1935 "engines/hypno/grammar_arc.cpp"
break;
- case 73: /* bline: HTOK NUM */
-#line 396 "engines/hypno/grammar_arc.y"
+ case 81: /* bline: HTOK NUM */
+#line 418 "engines/hypno/grammar_arc.y"
{
shoot->attackFrames.push_back((yyvsp[0].i));
debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1867 "engines/hypno/grammar_arc.cpp"
+#line 1943 "engines/hypno/grammar_arc.cpp"
break;
- case 74: /* bline: VTOK NUM */
-#line 399 "engines/hypno/grammar_arc.y"
+ case 82: /* bline: VTOK NUM */
+#line 421 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1873 "engines/hypno/grammar_arc.cpp"
+#line 1949 "engines/hypno/grammar_arc.cpp"
break;
- case 75: /* bline: WTOK NUM */
-#line 400 "engines/hypno/grammar_arc.y"
+ case 83: /* bline: WTOK NUM */
+#line 422 "engines/hypno/grammar_arc.y"
{
shoot->attackWeight = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1881 "engines/hypno/grammar_arc.cpp"
+#line 1957 "engines/hypno/grammar_arc.cpp"
break;
- case 76: /* bline: DTOK NUM */
-#line 403 "engines/hypno/grammar_arc.y"
+ case 84: /* bline: DTOK NUM */
+#line 425 "engines/hypno/grammar_arc.y"
{
shoot->pointsToShoot = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
}
-#line 1890 "engines/hypno/grammar_arc.cpp"
+#line 1966 "engines/hypno/grammar_arc.cpp"
break;
- case 77: /* bline: LTOK NUM NUM */
-#line 407 "engines/hypno/grammar_arc.y"
+ case 85: /* bline: LTOK NUM NUM */
+#line 429 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1898 "engines/hypno/grammar_arc.cpp"
+#line 1974 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 86: /* bline: LTOK NUM */
+#line 432 "engines/hypno/grammar_arc.y"
+ {
+ debugC(1, kHypnoDebugParser, "L %d", (yyvsp[0].i));
+ }
+#line 1982 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 87: /* bline: MTOK NUM */
+#line 435 "engines/hypno/grammar_arc.y"
+ { debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i)); }
+#line 1988 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 88: /* bline: KTOK NUM */
+#line 436 "engines/hypno/grammar_arc.y"
+ { debugC(1, kHypnoDebugParser, "K %d", (yyvsp[0].i));
+ shoot->maskOffset = (yyvsp[0].i);
+ }
+#line 1996 "engines/hypno/grammar_arc.cpp"
break;
- case 78: /* bline: SNTOK FILENAME enc */
-#line 410 "engines/hypno/grammar_arc.y"
+ case 89: /* bline: SNTOK FILENAME enc */
+#line 439 "engines/hypno/grammar_arc.y"
{
if (Common::String("S0") == (yyvsp[-2].s))
shoot->enemySound = (yyvsp[-1].s);
@@ -1907,30 +2006,36 @@ yyreduce:
shoot->hitSound = (yyvsp[-1].s);
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 1912 "engines/hypno/grammar_arc.cpp"
+#line 2010 "engines/hypno/grammar_arc.cpp"
break;
- case 79: /* bline: NTOK */
-#line 419 "engines/hypno/grammar_arc.y"
+ case 90: /* bline: GTOK */
+#line 448 "engines/hypno/grammar_arc.y"
+ { debugC(1, kHypnoDebugParser, "G"); }
+#line 2016 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 91: /* bline: NTOK */
+#line 449 "engines/hypno/grammar_arc.y"
{
shoot->noEnemySound = true;
debugC(1, kHypnoDebugParser, "N"); }
-#line 1920 "engines/hypno/grammar_arc.cpp"
+#line 2024 "engines/hypno/grammar_arc.cpp"
break;
- case 80: /* bline: ZTOK */
-#line 422 "engines/hypno/grammar_arc.y"
+ case 92: /* bline: ZTOK */
+#line 452 "engines/hypno/grammar_arc.y"
{
g_parsedArc->shoots.push_back(*shoot);
//delete shoot;
//shoot = nullptr;
debugC(1, kHypnoDebugParser, "Z");
}
-#line 1931 "engines/hypno/grammar_arc.cpp"
+#line 2035 "engines/hypno/grammar_arc.cpp"
break;
-#line 1935 "engines/hypno/grammar_arc.cpp"
+#line 2039 "engines/hypno/grammar_arc.cpp"
default: break;
}
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 1380b9e2c81..538e092e0a3 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -59,7 +59,8 @@ using namespace Hypno;
%token<i> NUM BYTE
// header
%token COMMENT CTOK DTOK HTOK HETOK HLTOK H12TOK HUTOK RETTOK QTOK RESTOK
-%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK LTOK NTOK NSTOK RTOK R01TOK ITOK I1TOK JTOK ZTOK
+%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK LTOK MTOK NTOK NSTOK RTOK R01TOK
+%token ITOK I1TOK GTOK JTOK KTOK UTOK ZTOK
// body
%token NONETOK A0TOK P0TOK WTOK
@@ -70,7 +71,7 @@ using namespace Hypno;
// bytes??
%token CB3TOK C02TOK
-%type<s> enc
+%type<s> enc flag
%%
@@ -97,6 +98,8 @@ hline: CTOK NUM {
}
| PTOK NUM NUM { debugC(1, kHypnoDebugParser, "P %d %d", $2, $3); }
| ATOK NUM NUM { debugC(1, kHypnoDebugParser, "A %d %d", $2, $3); }
+ | MTOK FILENAME { debugC(1, kHypnoDebugParser, "M %s", $2); }
+ | UTOK NUM NUM NUM NUM { debugC(1, kHypnoDebugParser, "U %d %d %d %d", $2, $3, $4, $5); }
| VTOK NUM NUM { debugC(1, kHypnoDebugParser, "V %d %d", $2, $3); }
| VTOK RESTOK { debugC(1, kHypnoDebugParser, "V 320,200"); }
| OTOK NUM NUM {
@@ -181,7 +184,7 @@ hline: CTOK NUM {
debugC(1, kHypnoDebugParser, "BN %s", $2);
}
- | SNTOK FILENAME enc {
+ | SNTOK FILENAME enc flag {
uint32 sampleRate = 11025;
if (Common::String("22K") == $3 || Common::String("22k") == $3)
sampleRate = 22050;
@@ -261,6 +264,10 @@ enc: ENCTOK { $$ = $1; }
| /* nothing */ { $$ = scumm_strdup(""); }
;
+flag: NAME { $$ = $1; }
+ | /* nothing */ { $$ = scumm_strdup(""); }
+ ;
+
body: bline body
| RETTOK body
| /* nothing */
@@ -308,6 +315,10 @@ bline: FNTOK FILENAME {
shoot->name = "F";
debugC(1, kHypnoDebugParser, "I F");
}
+ | ITOK GTOK { // Workaround for NAME == G
+ shoot->name = "G";
+ debugC(1, kHypnoDebugParser, "I G");
+ }
| ITOK HTOK { // Workaround for NAME == H
shoot->name = "H";
debugC(1, kHypnoDebugParser, "I H");
@@ -316,10 +327,14 @@ bline: FNTOK FILENAME {
shoot->name = "I";
debugC(1, kHypnoDebugParser, "I I");
}
- | ITOK JTOK { // Workaround for NAME == I
+ | ITOK JTOK { // Workaround for NAME == J
shoot->name = "J";
debugC(1, kHypnoDebugParser, "I J");
}
+ | ITOK KTOK { // Workaround for NAME == K
+ shoot->name = "K";
+ debugC(1, kHypnoDebugParser, "I K");
+ }
| ITOK NTOK { // Workaround for NAME == N
shoot->name = "N";
debugC(1, kHypnoDebugParser, "I N");
@@ -352,6 +367,14 @@ bline: FNTOK FILENAME {
shoot->name = "L";
debugC(1, kHypnoDebugParser, "I L");
}
+ | ITOK MTOK { // Workaround for NAME == M
+ shoot->name = "M";
+ debugC(1, kHypnoDebugParser, "I M");
+ }
+ | ITOK UTOK { // Workaround for NAME == U
+ shoot->name = "U";
+ debugC(1, kHypnoDebugParser, "I U");
+ }
| JTOK NUM {
debugC(1, kHypnoDebugParser, "J %d", $2);
}
@@ -406,6 +429,13 @@ bline: FNTOK FILENAME {
| LTOK NUM NUM {
debugC(1, kHypnoDebugParser, "L %d %d", $2, $3);
}
+ | LTOK NUM {
+ debugC(1, kHypnoDebugParser, "L %d", $2);
+ }
+ | MTOK NUM { debugC(1, kHypnoDebugParser, "M %d", $2); }
+ | KTOK NUM { debugC(1, kHypnoDebugParser, "K %d", $2);
+ shoot->maskOffset = $2;
+ }
| SNTOK FILENAME enc {
if (Common::String("S0") == $1)
shoot->enemySound = $2;
@@ -415,6 +445,7 @@ bline: FNTOK FILENAME {
shoot->hitSound = $2;
debugC(1, kHypnoDebugParser, "SN %s", $2); }
+ | GTOK { debugC(1, kHypnoDebugParser, "G"); }
| NTOK {
shoot->noEnemySound = true;
debugC(1, kHypnoDebugParser, "N"); }
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index e75d23e11b2..16fa11c08a7 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -449,6 +449,13 @@ class BoyzEngine : public HypnoEngine {
public:
BoyzEngine(OSystem *syst, const ADGameDescription *gd);
void loadAssets() override;
+
+ void runBeforeArcade(ArcadeShooting *arc) override;
+ void drawHealth() override;
+ void drawShoot(const Common::Point &target) override;
+ void hitPlayer() override;
+ void drawPlayer() override;
+ void initSegment(ArcadeShooting *arc) override;
};
} // End of namespace Hypno
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index 2358f521601..8ab05f3dcab 100644
--- a/engines/hypno/lexer_arc.cpp
+++ b/engines/hypno/lexer_arc.cpp
@@ -633,8 +633,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
(yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 47
-#define YY_END_OF_BUFFER 48
+#define YY_NUM_RULES 51
+#define YY_END_OF_BUFFER 52
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -642,16 +642,17 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[79] =
+static const flex_int16_t yy_accept[82] =
{ 0,
- 0, 0, 48, 46, 45, 43, 43, 46, 38, 38,
- 38, 38, 46, 10, 39, 2, 3, 39, 29, 8,
- 19, 21, 39, 14, 15, 12, 9, 22, 17, 39,
- 26, 11, 24, 25, 39, 23, 39, 45, 38, 41,
- 38, 38, 38, 38, 0, 40, 31, 39, 32, 28,
- 7, 4, 5, 6, 20, 33, 16, 39, 13, 34,
- 18, 30, 27, 35, 39, 37, 37, 36, 36, 38,
- 44, 39, 0, 1, 0, 0, 42, 0
+ 0, 0, 52, 50, 49, 47, 47, 50, 42, 42,
+ 42, 42, 50, 10, 43, 2, 3, 43, 33, 24,
+ 8, 20, 22, 23, 14, 17, 15, 12, 9, 25,
+ 18, 43, 30, 26, 11, 28, 29, 43, 27, 43,
+ 49, 42, 45, 42, 42, 42, 42, 0, 44, 35,
+ 43, 36, 32, 7, 4, 5, 6, 21, 37, 16,
+ 43, 13, 38, 19, 34, 31, 39, 43, 41, 41,
+ 40, 40, 42, 48, 43, 0, 1, 0, 0, 46,
+ 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -663,13 +664,13 @@ static const YY_CHAR yy_ec[256] =
1, 5, 1, 6, 7, 8, 1, 9, 10, 11,
12, 13, 13, 13, 13, 13, 13, 1, 14, 1,
1, 1, 1, 1, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 21, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 1, 8, 1, 1, 40, 1, 41, 41, 41, 41,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 1, 8, 1, 1, 41, 1, 42, 42, 42, 42,
- 41, 41, 41, 41, 41, 41, 42, 41, 41, 41,
- 41, 43, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 1, 44, 1, 1, 1, 1, 1, 1,
+ 42, 42, 42, 42, 42, 42, 43, 42, 42, 42,
+ 42, 44, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 1, 45, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -686,111 +687,111 @@ static const YY_CHAR yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static const YY_CHAR yy_meta[45] =
+static const YY_CHAR yy_meta[46] =
{ 0,
1, 1, 2, 1, 1, 1, 1, 3, 4, 4,
4, 4, 4, 1, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 1
+ 4, 4, 4, 4, 1
} ;
-static const flex_int16_t yy_base[85] =
+static const flex_int16_t yy_base[88] =
{ 0,
- 0, 0, 207, 208, 204, 208, 208, 36, 41, 46,
- 51, 56, 0, 62, 64, 197, 196, 195, 77, 83,
- 87, 186, 95, 181, 91, 102, 92, 179, 105, 112,
- 84, 177, 175, 174, 90, 173, 0, 178, 125, 0,
- 130, 135, 124, 142, 174, 0, 168, 167, 166, 165,
- 164, 162, 157, 156, 155, 154, 208, 142, 153, 151,
- 150, 149, 148, 147, 0, 0, 208, 0, 208, 146,
- 150, 110, 142, 120, 117, 107, 208, 208, 188, 192,
- 194, 196, 74, 198
+ 0, 0, 211, 212, 208, 212, 212, 37, 42, 47,
+ 52, 57, 0, 63, 65, 201, 200, 199, 78, 190,
+ 84, 88, 185, 96, 183, 182, 92, 103, 93, 181,
+ 106, 114, 85, 179, 177, 176, 175, 91, 173, 0,
+ 177, 127, 0, 132, 137, 126, 143, 174, 0, 169,
+ 168, 167, 164, 162, 159, 158, 157, 156, 155, 212,
+ 145, 153, 152, 151, 150, 149, 148, 0, 0, 212,
+ 0, 212, 149, 150, 109, 120, 122, 111, 109, 212,
+ 212, 192, 196, 198, 200, 75, 202
} ;
-static const flex_int16_t yy_def[85] =
+static const flex_int16_t yy_def[88] =
{ 0,
- 78, 1, 78, 78, 78, 78, 78, 78, 79, 79,
- 79, 79, 80, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 82, 81, 83, 78, 78, 79,
- 79, 79, 42, 42, 80, 84, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 78, 81, 81, 81,
- 81, 81, 81, 81, 83, 79, 78, 79, 78, 42,
- 80, 81, 78, 81, 78, 78, 78, 0, 78, 78,
- 78, 78, 78, 78
+ 81, 1, 81, 81, 81, 81, 81, 81, 82, 82,
+ 82, 82, 83, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 85, 84, 86,
+ 81, 81, 82, 82, 82, 45, 45, 83, 87, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 81,
+ 84, 84, 84, 84, 84, 84, 84, 86, 82, 81,
+ 82, 81, 45, 83, 84, 81, 84, 81, 81, 81,
+ 0, 81, 81, 81, 81, 81, 81
} ;
-static const flex_int16_t yy_nxt[253] =
+static const flex_int16_t yy_nxt[258] =
{ 0,
4, 5, 6, 7, 4, 4, 8, 4, 9, 10,
11, 12, 9, 13, 14, 15, 16, 17, 18, 19,
- 18, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 18, 32, 33, 34, 35, 36, 37,
- 18, 18, 18, 7, 39, 39, 39, 39, 39, 41,
- 41, 41, 41, 41, 41, 42, 41, 41, 41, 41,
- 41, 43, 41, 41, 41, 41, 44, 41, 41, 46,
- 47, 46, 49, 49, 49, 49, 49, 65, 49, 49,
- 49, 49, 49, 49, 46, 50, 50, 50, 50, 50,
- 46, 46, 51, 51, 46, 57, 55, 46, 46, 46,
-
- 60, 52, 46, 56, 56, 56, 56, 56, 53, 46,
- 59, 59, 46, 61, 61, 77, 54, 46, 58, 46,
- 62, 62, 62, 62, 62, 76, 63, 46, 74, 48,
- 48, 48, 48, 39, 39, 39, 39, 39, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 68, 46,
- 70, 73, 75, 71, 46, 46, 46, 46, 46, 66,
- 46, 46, 46, 46, 46, 68, 40, 69, 72, 46,
- 40, 46, 46, 46, 46, 46, 66, 71, 67, 38,
- 46, 46, 46, 40, 46, 78, 46, 40, 46, 78,
- 40, 40, 45, 46, 45, 45, 48, 48, 64, 64,
-
- 46, 46, 46, 46, 46, 38, 78, 3, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 18, 18, 18, 7, 42, 42, 42, 42, 42,
+ 44, 44, 44, 44, 44, 44, 45, 44, 44, 44,
+ 44, 44, 46, 44, 44, 44, 44, 47, 44, 44,
+ 49, 50, 49, 52, 52, 52, 52, 52, 68, 52,
+ 52, 52, 52, 52, 52, 49, 53, 53, 53, 53,
+ 53, 49, 49, 54, 54, 49, 60, 58, 49, 49,
+
+ 49, 63, 55, 49, 59, 59, 59, 59, 59, 56,
+ 49, 62, 62, 49, 64, 64, 49, 80, 57, 79,
+ 61, 49, 65, 65, 65, 65, 65, 77, 66, 49,
+ 78, 51, 51, 51, 51, 42, 42, 42, 42, 42,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 71, 73, 49, 74, 76, 49, 49, 49, 49, 49,
+ 49, 69, 49, 49, 49, 49, 49, 43, 71, 49,
+ 72, 49, 75, 43, 49, 49, 49, 74, 41, 69,
+ 49, 70, 49, 49, 49, 43, 49, 81, 49, 49,
+ 49, 43, 49, 81, 43, 43, 48, 49, 48, 48,
+
+ 51, 51, 67, 67, 49, 49, 49, 49, 49, 41,
+ 81, 3, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81
} ;
-static const flex_int16_t yy_chk[253] =
+static const flex_int16_t yy_chk[258] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 10, 10, 10, 10, 10, 11,
- 11, 11, 11, 11, 12, 12, 12, 12, 12, 14,
- 14, 15, 15, 15, 15, 15, 15, 83, 15, 15,
- 15, 15, 15, 15, 19, 19, 19, 19, 19, 19,
- 20, 31, 20, 20, 21, 25, 21, 35, 25, 27,
-
- 27, 20, 23, 23, 23, 23, 23, 23, 20, 26,
- 26, 26, 29, 29, 29, 76, 20, 72, 25, 30,
- 30, 30, 30, 30, 30, 75, 31, 74, 72, 35,
- 35, 35, 35, 39, 39, 39, 39, 39, 41, 41,
- 41, 41, 41, 42, 42, 42, 42, 42, 43, 58,
- 44, 70, 73, 71, 64, 63, 62, 61, 60, 42,
- 59, 56, 55, 54, 53, 43, 44, 43, 58, 52,
- 70, 51, 50, 49, 48, 47, 42, 45, 42, 38,
- 36, 34, 33, 44, 32, 44, 28, 70, 24, 70,
- 79, 79, 80, 22, 80, 80, 81, 81, 82, 82,
-
- 84, 84, 18, 17, 16, 5, 3, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78
+ 1, 1, 1, 1, 1, 8, 8, 8, 8, 8,
+ 9, 9, 9, 9, 9, 10, 10, 10, 10, 10,
+ 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
+ 14, 14, 15, 15, 15, 15, 15, 15, 86, 15,
+ 15, 15, 15, 15, 15, 19, 19, 19, 19, 19,
+ 19, 21, 33, 21, 21, 22, 27, 22, 38, 27,
+
+ 29, 29, 21, 24, 24, 24, 24, 24, 24, 21,
+ 28, 28, 28, 31, 31, 31, 75, 79, 21, 78,
+ 27, 32, 32, 32, 32, 32, 32, 75, 33, 77,
+ 76, 38, 38, 38, 38, 42, 42, 42, 42, 42,
+ 44, 44, 44, 44, 44, 45, 45, 45, 45, 45,
+ 46, 47, 61, 74, 73, 67, 66, 65, 64, 63,
+ 62, 45, 59, 58, 57, 56, 55, 47, 46, 54,
+ 46, 53, 61, 73, 52, 51, 50, 48, 41, 45,
+ 39, 45, 37, 36, 35, 47, 34, 47, 30, 26,
+ 25, 73, 23, 73, 82, 82, 83, 20, 83, 83,
+
+ 84, 84, 85, 85, 87, 87, 18, 17, 16, 5,
+ 3, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81
} ;
/* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[48] =
+static const flex_int32_t yy_rule_can_match_eol[52] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, };
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, };
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
@@ -837,8 +838,8 @@ char *yytext;
#include "hypno/grammar.h"
#include "hypno/tokens_arc.h"
-#line 840 "engines/hypno/lexer_arc.cpp"
#line 841 "engines/hypno/lexer_arc.cpp"
+#line 842 "engines/hypno/lexer_arc.cpp"
#define INITIAL 0
@@ -1055,7 +1056,7 @@ YY_DECL
{
#line 42 "engines/hypno/lexer_arc.l"
-#line 1058 "engines/hypno/lexer_arc.cpp"
+#line 1059 "engines/hypno/lexer_arc.cpp"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -1082,13 +1083,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 79 )
+ if ( yy_current_state >= 82 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_current_state != 78 );
+ while ( yy_current_state != 81 );
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
@@ -1201,160 +1202,180 @@ return NSTOK;
case 17:
YY_RULE_SETUP
#line 59 "engines/hypno/lexer_arc.l"
-return RTOK;
+return MTOK;
YY_BREAK
case 18:
YY_RULE_SETUP
#line 60 "engines/hypno/lexer_arc.l"
-return R01TOK;
+return RTOK;
YY_BREAK
case 19:
YY_RULE_SETUP
#line 61 "engines/hypno/lexer_arc.l"
-return ITOK;
+return R01TOK;
YY_BREAK
case 20:
YY_RULE_SETUP
#line 62 "engines/hypno/lexer_arc.l"
-return I1TOK;
+return ITOK;
YY_BREAK
case 21:
YY_RULE_SETUP
#line 63 "engines/hypno/lexer_arc.l"
-return JTOK;
+return I1TOK;
YY_BREAK
case 22:
YY_RULE_SETUP
#line 64 "engines/hypno/lexer_arc.l"
-return QTOK;
+return JTOK;
YY_BREAK
case 23:
YY_RULE_SETUP
#line 65 "engines/hypno/lexer_arc.l"
-return ZTOK;
+return KTOK;
YY_BREAK
case 24:
YY_RULE_SETUP
#line 66 "engines/hypno/lexer_arc.l"
-return WTOK;
+return GTOK;
YY_BREAK
case 25:
YY_RULE_SETUP
#line 67 "engines/hypno/lexer_arc.l"
-return XTOK;
+return QTOK;
YY_BREAK
case 26:
YY_RULE_SETUP
#line 68 "engines/hypno/lexer_arc.l"
-return TTOK;
+return UTOK;
YY_BREAK
case 27:
YY_RULE_SETUP
#line 69 "engines/hypno/lexer_arc.l"
-return TPTOK;
+return ZTOK;
YY_BREAK
case 28:
YY_RULE_SETUP
#line 70 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
+return WTOK;
YY_BREAK
case 29:
YY_RULE_SETUP
#line 71 "engines/hypno/lexer_arc.l"
-return FTOK;
+return XTOK;
YY_BREAK
case 30:
YY_RULE_SETUP
#line 72 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+return TTOK;
YY_BREAK
case 31:
YY_RULE_SETUP
#line 73 "engines/hypno/lexer_arc.l"
-return A0TOK;
+return TPTOK;
YY_BREAK
case 32:
YY_RULE_SETUP
#line 74 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
YY_BREAK
case 33:
YY_RULE_SETUP
#line 75 "engines/hypno/lexer_arc.l"
-return KNTOK;
+return FTOK;
YY_BREAK
case 34:
YY_RULE_SETUP
#line 76 "engines/hypno/lexer_arc.l"
-return P0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
YY_BREAK
case 35:
YY_RULE_SETUP
#line 77 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
+return A0TOK;
YY_BREAK
case 36:
YY_RULE_SETUP
#line 78 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
YY_BREAK
case 37:
YY_RULE_SETUP
#line 79 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+return KNTOK;
YY_BREAK
case 38:
YY_RULE_SETUP
#line 80 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
+return P0TOK;
YY_BREAK
case 39:
YY_RULE_SETUP
#line 81 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
YY_BREAK
case 40:
YY_RULE_SETUP
#line 82 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
YY_BREAK
case 41:
YY_RULE_SETUP
#line 83 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
YY_BREAK
case 42:
YY_RULE_SETUP
#line 84 "engines/hypno/lexer_arc.l"
-return RESTOK;
+HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
YY_BREAK
case 43:
-/* rule 43 can match eol */
YY_RULE_SETUP
#line 85 "engines/hypno/lexer_arc.l"
-return RETTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
YY_BREAK
case 44:
YY_RULE_SETUP
#line 86 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
YY_BREAK
case 45:
YY_RULE_SETUP
#line 87 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
YY_BREAK
case 46:
YY_RULE_SETUP
#line 88 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+return RESTOK;
YY_BREAK
case 47:
+/* rule 47 can match eol */
YY_RULE_SETUP
#line 89 "engines/hypno/lexer_arc.l"
+return RETTOK;
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 90 "engines/hypno/lexer_arc.l"
+/* ignore comment */
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 91 "engines/hypno/lexer_arc.l"
+/* ignore whitespace */;
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 92 "engines/hypno/lexer_arc.l"
+HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 93 "engines/hypno/lexer_arc.l"
ECHO;
YY_BREAK
-#line 1357 "engines/hypno/lexer_arc.cpp"
+#line 1378 "engines/hypno/lexer_arc.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -1652,7 +1673,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 79 )
+ if ( yy_current_state >= 82 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1680,11 +1701,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 79 )
+ if ( yy_current_state >= 82 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 78);
+ yy_is_jam = (yy_current_state == 81);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -2331,7 +2352,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 89 "engines/hypno/lexer_arc.l"
+#line 93 "engines/hypno/lexer_arc.l"
namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index 801082e1b60..7338b2608c2 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -56,12 +56,16 @@ O[0-1] HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
L return LTOK;
N return NTOK;
N\* return NSTOK;
+M return MTOK;
R return RTOK;
R[0-1] return R01TOK;
I return ITOK;
I1 return I1TOK;
J return JTOK;
+K return KTOK;
+G return GTOK;
Q return QTOK;
+U return UTOK;
Z return ZTOK;
W return WTOK;
X return XTOK;
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index aabfbe92ff2..011c76d2d89 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -237,7 +237,7 @@ bool HypnoEngine::hoverHotspot(Common::Point mousePos) {
}
Common::String HypnoEngine::findNextLevel(const Transition *trans) { error("Function \"%s\" not implemented", __FUNCTION__); }
-Common::String HypnoEngine::findNextLevel(const Common::String &level) { error("Function \"%s\" not implemented", __FUNCTION__); }
+Common::String HypnoEngine::findNextLevel(const Common::String &level) { return level; }
void HypnoEngine::runTransition(Transition *trans) {
Common::String nextLevel = findNextLevel(trans);
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index f44ce29257b..c208a69d312 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -92,21 +92,25 @@ extern int HYPNO_ARC_debug;
VTOK = 285, /* VTOK */
OTOK = 286, /* OTOK */
LTOK = 287, /* LTOK */
- NTOK = 288, /* NTOK */
- NSTOK = 289, /* NSTOK */
- RTOK = 290, /* RTOK */
- R01TOK = 291, /* R01TOK */
- ITOK = 292, /* ITOK */
- I1TOK = 293, /* I1TOK */
- JTOK = 294, /* JTOK */
- ZTOK = 295, /* ZTOK */
- NONETOK = 296, /* NONETOK */
- A0TOK = 297, /* A0TOK */
- P0TOK = 298, /* P0TOK */
- WTOK = 299, /* WTOK */
- XTOK = 300, /* XTOK */
- CB3TOK = 301, /* CB3TOK */
- C02TOK = 302 /* C02TOK */
+ MTOK = 288, /* MTOK */
+ NTOK = 289, /* NTOK */
+ NSTOK = 290, /* NSTOK */
+ RTOK = 291, /* RTOK */
+ R01TOK = 292, /* R01TOK */
+ ITOK = 293, /* ITOK */
+ I1TOK = 294, /* I1TOK */
+ GTOK = 295, /* GTOK */
+ JTOK = 296, /* JTOK */
+ KTOK = 297, /* KTOK */
+ UTOK = 298, /* UTOK */
+ ZTOK = 299, /* ZTOK */
+ NONETOK = 300, /* NONETOK */
+ A0TOK = 301, /* A0TOK */
+ P0TOK = 302, /* P0TOK */
+ WTOK = 303, /* WTOK */
+ XTOK = 304, /* XTOK */
+ CB3TOK = 305, /* CB3TOK */
+ C02TOK = 306 /* C02TOK */
};
typedef enum HYPNO_ARC_tokentype HYPNO_ARC_token_kind_t;
#endif
@@ -115,12 +119,12 @@ extern int HYPNO_ARC_debug;
#if ! defined HYPNO_ARC_STYPE && ! defined HYPNO_ARC_STYPE_IS_DECLARED
union HYPNO_ARC_STYPE
{
-#line 54 "engines/hypno/grammar_arc.y"
+#line 53 "engines/hypno/grammar_arc.y"
char *s; /* string value */
int i; /* integer value */
-#line 124 "engines/hypno/tokens_arc.h"
+#line 128 "engines/hypno/tokens_arc.h"
};
typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;
Commit: 42d0d8e06c3df4c153840ed2de6fa1aa6da2cf65
https://github.com/scummvm/scummvm/commit/42d0d8e06c3df4c153840ed2de6fa1aa6da2cf65
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: refactored findNextLevel in boyz
Changed paths:
engines/hypno/boyz/boyz.cpp
engines/hypno/hypno.cpp
engines/hypno/hypno.h
engines/hypno/scene.cpp
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 748a66152bf..5db3326e214 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -66,6 +66,8 @@ void BoyzEngine::drawHealth() {}
void BoyzEngine::hitPlayer() {}
void BoyzEngine::drawShoot(const Common::Point &target) {}
+Common::String BoyzEngine::findNextLevel(const Common::String &level) { return level; }
+
void BoyzEngine::initSegment(ArcadeShooting *arc) {
_segmentShootSequenceOffset = 0;
_segmentShootSequenceMax = 0;
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index e9d66e9d318..d1a8d7a97da 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -117,6 +117,7 @@ LibFile *HypnoEngine::loadLib(const Filename &prefix, const Filename &filename,
}
void HypnoEngine::loadAssets() { error("Function \"%s\" not implemented", __FUNCTION__); }
+Common::String HypnoEngine::findNextLevel(const Common::String &level) { error("Function \"%s\" not implemented", __FUNCTION__); }
Common::Error HypnoEngine::run() {
Graphics::ModeList modes;
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 16fa11c08a7..e2d2323005b 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -449,6 +449,7 @@ class BoyzEngine : public HypnoEngine {
public:
BoyzEngine(OSystem *syst, const ADGameDescription *gd);
void loadAssets() override;
+ Common::String findNextLevel(const Common::String &level) override;
void runBeforeArcade(ArcadeShooting *arc) override;
void drawHealth() override;
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index 011c76d2d89..2f992f28be4 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -237,7 +237,6 @@ bool HypnoEngine::hoverHotspot(Common::Point mousePos) {
}
Common::String HypnoEngine::findNextLevel(const Transition *trans) { error("Function \"%s\" not implemented", __FUNCTION__); }
-Common::String HypnoEngine::findNextLevel(const Common::String &level) { return level; }
void HypnoEngine::runTransition(Transition *trans) {
Common::String nextLevel = findNextLevel(trans);
Commit: 07b68841ce73e1db138f82134898616cc83d0677
https://github.com/scummvm/scummvm/commit/07b68841ce73e1db138f82134898616cc83d0677
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: correctly implemented hit/miss shoots using masks in boyz
Changed paths:
engines/hypno/arcade.cpp
engines/hypno/boyz/boyz.cpp
engines/hypno/grammar.h
engines/hypno/grammar_arc.cpp
engines/hypno/grammar_arc.y
engines/hypno/hypno.cpp
engines/hypno/hypno.h
diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 13b167806ca..03c39cf4dde 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -185,12 +185,21 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
debugC(1, kHypnoDebugArcade, "Starting segment of type %x", segments[_segmentIdx].type);
_shoots.clear();
_skipLevel = false;
+ _mask = nullptr;
+ _masks = nullptr;
Common::Point offset;
MVideo background = MVideo(arc->backgroundVideo, offset, false, false, false);
drawCursorArcade(mousePos);
playVideo(background);
+
+ if (!arc->maskVideo.empty()) {
+ _masks = new MVideo(arc->maskVideo, offset, false, false, false);
+ playVideo(*_masks);
+ _mask = _masks->decoder->decodeNextFrame();
+ }
+
float rate = background.decoder->getFrameRate().toDouble();
if (rate < 10) {
debugC(1, kHypnoDebugArcade, "Used frame rate looks odd: %f, increasing x 10", rate);
@@ -296,6 +305,8 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
if (needsUpdate) {
drawScreen();
updateScreen(background);
+ if (!arc->maskVideo.empty() && _masks->decoder->needsUpdate())
+ _mask = _masks->decoder->decodeNextFrame();
}
if (_health <= 0) {
@@ -412,8 +423,12 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
if (it->name == si.name) {
Shoot s = *it;
s.startFrame = si.timestamp;
- if (it->maskOffset > 0) {
- // TODO
+ if (_masks) {
+ s.startFrame = 0;
+ if (_shoots.size() == 0)
+ _shoots.push_back(s);
+ else
+ _shoots[0] = s;
} else if (it->animation == "NONE") {
if ((uint32)(it->name[0]) == _currentPlayerPosition) {
_health = _health - it->attackWeight;
@@ -522,6 +537,13 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
if (background.decoder)
skipVideo(background);
+ if (_masks) {
+ skipVideo(*_masks);
+ delete _masks;
+ _mask = nullptr;
+ _masks = nullptr;
+ }
+
stopSound();
_music.clear();
}
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 5db3326e214..c6669f17e65 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -81,4 +81,55 @@ void BoyzEngine::initSegment(ArcadeShooting *arc) {
_segmentIdx = _segmentOffset;
}
+void BoyzEngine::findNextSegment(ArcadeShooting *arc) {
+ _segmentIdx = _segmentIdx + 1;
+}
+
+int BoyzEngine::detectTarget(const Common::Point &mousePos) {
+ Common::Point target = computeTargetPosition(mousePos);
+ assert(_shoots.size() <= 1);
+ for (Shoots::iterator it = _shoots.begin(); it != _shoots.end(); ++it) {
+ if (_mask->getPixel(target.x, target.y) == 1)
+ return 0;
+ }
+ return -1;
+}
+
+void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVideo &background) {
+ incShotsFired();
+ int i = detectTarget(mousePos);
+ if (i < 0) {
+ missNoTarget(arc, background);
+ } else {
+ if (!_shoots[i].hitSound.empty())
+ playSound(_soundPath + _shoots[i].hitSound, 1);
+
+ incEnemyHits();
+ if (!_shoots[i].deathSound.empty())
+ playSound(_soundPath + _shoots[i].deathSound, 1);
+
+ incTargetsDestroyed();
+ incScore(_shoots[i].pointsToShoot);
+ incBonus(_shoots[i].pointsToShoot);
+ _shoots[i].destroyed = true;
+ background.decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
+ _masks->decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
+ _shoots.clear();
+ }
+}
+
+void BoyzEngine::missedTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) {
+ if (s->missedAnimation == uint32(-1)) {
+ uint32 last = background.decoder->getFrameCount()-1;
+ background.decoder->forceSeekToFrame(last);
+ _masks->decoder->forceSeekToFrame(last);
+ return;
+ }
+
+ s->missedAnimation = s->missedAnimation + 3;
+ background.decoder->forceSeekToFrame(s->missedAnimation);
+ _masks->decoder->forceSeekToFrame(s->missedAnimation);
+}
+
+
} // namespace Hypno
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index db1e688644a..01ba1fe062c 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -376,7 +376,7 @@ public:
attackWeight = 0;
paletteOffset = 0;
paletteSize = 0;
- maskOffset = 0;
+ missedAnimation = 0;
objKillsCount = 0;
objMissesCount = 0;
animation = "NONE";
@@ -405,7 +405,7 @@ public:
uint32 paletteSize;
// Mask
- uint32 maskOffset;
+ uint32 missedAnimation;
// Sounds
Filename enemySound;
@@ -491,6 +491,7 @@ public:
transitionVideos.clear();
transitionTimes.clear();
transitionPalettes.clear();
+ maskVideo.clear();
player.clear();
shoots.clear();
intros.clear();
@@ -534,6 +535,7 @@ public:
Filename backgroundVideo;
Filename backgroundPalette;
+ Filename maskVideo;
Filename player;
int health;
Shoots shoots;
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index ab8fc8b132b..73c20b9f7f2 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -581,15 +581,15 @@ static const yytype_int8 yytranslate[] =
static const yytype_int16 yyrline[] =
{
0, 78, 78, 78, 79, 82, 83, 84, 87, 91,
- 95, 99, 100, 101, 102, 103, 104, 105, 110, 120,
- 129, 135, 141, 142, 146, 150, 153, 157, 160, 161,
- 187, 209, 215, 220, 225, 231, 236, 241, 246, 251,
- 256, 263, 264, 267, 268, 271, 272, 273, 276, 284,
- 289, 294, 298, 302, 306, 310, 314, 318, 322, 326,
- 330, 334, 338, 342, 346, 350, 354, 358, 362, 366,
- 370, 374, 378, 381, 385, 390, 394, 399, 404, 408,
- 414, 418, 421, 422, 425, 429, 432, 435, 436, 439,
- 448, 449, 452
+ 95, 99, 100, 101, 105, 106, 107, 108, 113, 123,
+ 132, 138, 144, 145, 149, 153, 156, 160, 163, 164,
+ 190, 212, 218, 223, 228, 234, 239, 244, 249, 254,
+ 259, 266, 267, 270, 271, 274, 275, 276, 279, 287,
+ 292, 297, 301, 305, 309, 313, 317, 321, 325, 329,
+ 333, 337, 341, 345, 349, 353, 357, 361, 365, 369,
+ 373, 377, 381, 384, 388, 393, 397, 402, 407, 411,
+ 417, 421, 424, 425, 428, 432, 435, 440, 443, 447,
+ 456, 457, 460
};
#endif
@@ -1305,40 +1305,43 @@ yyreduce:
case 13: /* hline: MTOK FILENAME */
#line 101 "engines/hypno/grammar_arc.y"
- { debugC(1, kHypnoDebugParser, "M %s", (yyvsp[0].s)); }
-#line 1310 "engines/hypno/grammar_arc.cpp"
+ {
+ debugC(1, kHypnoDebugParser, "M %s", (yyvsp[0].s));
+ g_parsedArc->maskVideo = (yyvsp[0].s);
+ }
+#line 1313 "engines/hypno/grammar_arc.cpp"
break;
case 14: /* hline: UTOK NUM NUM NUM NUM */
-#line 102 "engines/hypno/grammar_arc.y"
+#line 105 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "U %d %d %d %d", (yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1316 "engines/hypno/grammar_arc.cpp"
+#line 1319 "engines/hypno/grammar_arc.cpp"
break;
case 15: /* hline: VTOK NUM NUM */
-#line 103 "engines/hypno/grammar_arc.y"
+#line 106 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1322 "engines/hypno/grammar_arc.cpp"
+#line 1325 "engines/hypno/grammar_arc.cpp"
break;
case 16: /* hline: VTOK RESTOK */
-#line 104 "engines/hypno/grammar_arc.y"
+#line 107 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1328 "engines/hypno/grammar_arc.cpp"
+#line 1331 "engines/hypno/grammar_arc.cpp"
break;
case 17: /* hline: OTOK NUM NUM */
-#line 105 "engines/hypno/grammar_arc.y"
+#line 108 "engines/hypno/grammar_arc.y"
{
g_parsedArc->objKillsRequired[0] = (yyvsp[-1].i);
g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1338 "engines/hypno/grammar_arc.cpp"
+#line 1341 "engines/hypno/grammar_arc.cpp"
break;
case 18: /* hline: ONTOK NUM NUM */
-#line 110 "engines/hypno/grammar_arc.y"
+#line 113 "engines/hypno/grammar_arc.y"
{
if (Common::String("O0") == (yyvsp[-2].s)) {
g_parsedArc->objKillsRequired[0] = (yyvsp[-1].i);
@@ -1349,11 +1352,11 @@ yyreduce:
} else
error("Invalid objective: '%s'", (yyvsp[-2].s));
debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1353 "engines/hypno/grammar_arc.cpp"
+#line 1356 "engines/hypno/grammar_arc.cpp"
break;
case 19: /* hline: ONTOK NUM */
-#line 120 "engines/hypno/grammar_arc.y"
+#line 123 "engines/hypno/grammar_arc.y"
{
if (Common::String("O0") == (yyvsp[-1].s)) {
g_parsedArc->objKillsRequired[0] = (yyvsp[0].i);
@@ -1363,88 +1366,88 @@ yyreduce:
error("Invalid objective: '%s'", (yyvsp[-1].s));
debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
}
-#line 1367 "engines/hypno/grammar_arc.cpp"
+#line 1370 "engines/hypno/grammar_arc.cpp"
break;
case 20: /* hline: TPTOK FILENAME NUM FILENAME */
-#line 129 "engines/hypno/grammar_arc.y"
+#line 132 "engines/hypno/grammar_arc.y"
{
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 1378 "engines/hypno/grammar_arc.cpp"
+#line 1381 "engines/hypno/grammar_arc.cpp"
break;
case 21: /* hline: TTOK FILENAME NUM */
-#line 135 "engines/hypno/grammar_arc.y"
+#line 138 "engines/hypno/grammar_arc.y"
{
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 1389 "engines/hypno/grammar_arc.cpp"
+#line 1392 "engines/hypno/grammar_arc.cpp"
break;
case 22: /* hline: TTOK NONETOK NUM */
-#line 141 "engines/hypno/grammar_arc.y"
+#line 144 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1395 "engines/hypno/grammar_arc.cpp"
+#line 1398 "engines/hypno/grammar_arc.cpp"
break;
case 23: /* hline: NTOK FILENAME */
-#line 142 "engines/hypno/grammar_arc.y"
+#line 145 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundVideo = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
}
-#line 1404 "engines/hypno/grammar_arc.cpp"
+#line 1407 "engines/hypno/grammar_arc.cpp"
break;
case 24: /* hline: NSTOK FILENAME */
-#line 146 "engines/hypno/grammar_arc.y"
+#line 149 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundVideo = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
}
-#line 1413 "engines/hypno/grammar_arc.cpp"
+#line 1416 "engines/hypno/grammar_arc.cpp"
break;
case 25: /* hline: RTOK FILENAME */
-#line 150 "engines/hypno/grammar_arc.y"
+#line 153 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundPalette = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1421 "engines/hypno/grammar_arc.cpp"
+#line 1424 "engines/hypno/grammar_arc.cpp"
break;
case 26: /* hline: ITOK FILENAME */
-#line 153 "engines/hypno/grammar_arc.y"
+#line 156 "engines/hypno/grammar_arc.y"
{
g_parsedArc->player = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1430 "engines/hypno/grammar_arc.cpp"
+#line 1433 "engines/hypno/grammar_arc.cpp"
break;
case 27: /* hline: I1TOK FILENAME */
-#line 157 "engines/hypno/grammar_arc.y"
+#line 160 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
}
-#line 1438 "engines/hypno/grammar_arc.cpp"
+#line 1441 "engines/hypno/grammar_arc.cpp"
break;
case 28: /* hline: QTOK NUM NUM */
-#line 160 "engines/hypno/grammar_arc.y"
+#line 163 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1444 "engines/hypno/grammar_arc.cpp"
+#line 1447 "engines/hypno/grammar_arc.cpp"
break;
case 29: /* hline: BNTOK FILENAME */
-#line 161 "engines/hypno/grammar_arc.y"
+#line 164 "engines/hypno/grammar_arc.y"
{
if (Common::String("B0") == (yyvsp[-1].s))
g_parsedArc->beforeVideo = (yyvsp[0].s);
@@ -1471,11 +1474,11 @@ yyreduce:
debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
}
-#line 1475 "engines/hypno/grammar_arc.cpp"
+#line 1478 "engines/hypno/grammar_arc.cpp"
break;
case 30: /* hline: SNTOK FILENAME enc flag */
-#line 187 "engines/hypno/grammar_arc.y"
+#line 190 "engines/hypno/grammar_arc.y"
{
uint32 sampleRate = 11025;
if (Common::String("22K") == (yyvsp[-1].s) || Common::String("22k") == (yyvsp[-1].s))
@@ -1498,137 +1501,137 @@ yyreduce:
}
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-2].s));
}
-#line 1502 "engines/hypno/grammar_arc.cpp"
+#line 1505 "engines/hypno/grammar_arc.cpp"
break;
case 31: /* hline: HETOK BYTE NUM NUM */
-#line 209 "engines/hypno/grammar_arc.y"
+#line 212 "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 1513 "engines/hypno/grammar_arc.cpp"
+#line 1516 "engines/hypno/grammar_arc.cpp"
break;
case 32: /* hline: HLTOK BYTE NUM NUM */
-#line 215 "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, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1523 "engines/hypno/grammar_arc.cpp"
+#line 1526 "engines/hypno/grammar_arc.cpp"
break;
case 33: /* hline: HUTOK BYTE NUM NUM */
-#line 220 "engines/hypno/grammar_arc.y"
+#line 223 "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 1533 "engines/hypno/grammar_arc.cpp"
+#line 1536 "engines/hypno/grammar_arc.cpp"
break;
case 34: /* hline: HTOK NAME NUM NUM */
-#line 225 "engines/hypno/grammar_arc.y"
+#line 228 "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 1544 "engines/hypno/grammar_arc.cpp"
+#line 1547 "engines/hypno/grammar_arc.cpp"
break;
case 35: /* hline: HTOK RTOK NUM NUM */
-#line 231 "engines/hypno/grammar_arc.y"
+#line 234 "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 1554 "engines/hypno/grammar_arc.cpp"
+#line 1557 "engines/hypno/grammar_arc.cpp"
break;
case 36: /* hline: HTOK ATOK NUM NUM */
-#line 236 "engines/hypno/grammar_arc.y"
+#line 239 "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 1564 "engines/hypno/grammar_arc.cpp"
+#line 1567 "engines/hypno/grammar_arc.cpp"
break;
case 37: /* hline: HTOK PTOK NUM NUM */
-#line 241 "engines/hypno/grammar_arc.y"
+#line 244 "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 1574 "engines/hypno/grammar_arc.cpp"
+#line 1577 "engines/hypno/grammar_arc.cpp"
break;
case 38: /* hline: HTOK LTOK NUM NUM */
-#line 246 "engines/hypno/grammar_arc.y"
+#line 249 "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 1584 "engines/hypno/grammar_arc.cpp"
+#line 1587 "engines/hypno/grammar_arc.cpp"
break;
case 39: /* hline: H12TOK BYTE NUM NUM */
-#line 251 "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, "HN %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1594 "engines/hypno/grammar_arc.cpp"
+#line 1597 "engines/hypno/grammar_arc.cpp"
break;
case 40: /* hline: HTOK BYTE NUM NUM */
-#line 256 "engines/hypno/grammar_arc.y"
+#line 259 "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 1604 "engines/hypno/grammar_arc.cpp"
+#line 1607 "engines/hypno/grammar_arc.cpp"
break;
case 41: /* enc: ENCTOK */
-#line 263 "engines/hypno/grammar_arc.y"
+#line 266 "engines/hypno/grammar_arc.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1610 "engines/hypno/grammar_arc.cpp"
+#line 1613 "engines/hypno/grammar_arc.cpp"
break;
case 42: /* enc: %empty */
-#line 264 "engines/hypno/grammar_arc.y"
+#line 267 "engines/hypno/grammar_arc.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1616 "engines/hypno/grammar_arc.cpp"
+#line 1619 "engines/hypno/grammar_arc.cpp"
break;
case 43: /* flag: NAME */
-#line 267 "engines/hypno/grammar_arc.y"
+#line 270 "engines/hypno/grammar_arc.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1622 "engines/hypno/grammar_arc.cpp"
+#line 1625 "engines/hypno/grammar_arc.cpp"
break;
case 44: /* flag: %empty */
-#line 268 "engines/hypno/grammar_arc.y"
+#line 271 "engines/hypno/grammar_arc.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1628 "engines/hypno/grammar_arc.cpp"
+#line 1631 "engines/hypno/grammar_arc.cpp"
break;
case 48: /* bline: FNTOK FILENAME */
-#line 276 "engines/hypno/grammar_arc.y"
+#line 279 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
if (Common::String("F0") == (yyvsp[-1].s))
@@ -1637,366 +1640,371 @@ yyreduce:
shoot->explosionAnimation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1641 "engines/hypno/grammar_arc.cpp"
+#line 1644 "engines/hypno/grammar_arc.cpp"
break;
case 49: /* bline: FNTOK NONETOK */
-#line 284 "engines/hypno/grammar_arc.y"
+#line 287 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
shoot->animation = "NONE";
debugC(1, kHypnoDebugParser, "FN NONE");
}
-#line 1651 "engines/hypno/grammar_arc.cpp"
+#line 1654 "engines/hypno/grammar_arc.cpp"
break;
case 50: /* bline: FTOK FILENAME */
-#line 289 "engines/hypno/grammar_arc.y"
+#line 292 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
shoot->animation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1661 "engines/hypno/grammar_arc.cpp"
+#line 1664 "engines/hypno/grammar_arc.cpp"
break;
case 51: /* bline: ITOK NAME */
-#line 294 "engines/hypno/grammar_arc.y"
+#line 297 "engines/hypno/grammar_arc.y"
{
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1670 "engines/hypno/grammar_arc.cpp"
+#line 1673 "engines/hypno/grammar_arc.cpp"
break;
case 52: /* bline: ITOK BNTOK */
-#line 298 "engines/hypno/grammar_arc.y"
+#line 301 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == B1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1679 "engines/hypno/grammar_arc.cpp"
+#line 1682 "engines/hypno/grammar_arc.cpp"
break;
case 53: /* bline: ITOK ATOK */
-#line 302 "engines/hypno/grammar_arc.y"
+#line 305 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == A
shoot->name = "A";
debugC(1, kHypnoDebugParser, "I A");
}
-#line 1688 "engines/hypno/grammar_arc.cpp"
+#line 1691 "engines/hypno/grammar_arc.cpp"
break;
case 54: /* bline: ITOK CTOK */
-#line 306 "engines/hypno/grammar_arc.y"
+#line 309 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == C
shoot->name = "C";
debugC(1, kHypnoDebugParser, "I C");
}
-#line 1697 "engines/hypno/grammar_arc.cpp"
+#line 1700 "engines/hypno/grammar_arc.cpp"
break;
case 55: /* bline: ITOK DTOK */
-#line 310 "engines/hypno/grammar_arc.y"
+#line 313 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == D
shoot->name = "D";
debugC(1, kHypnoDebugParser, "I D");
}
-#line 1706 "engines/hypno/grammar_arc.cpp"
+#line 1709 "engines/hypno/grammar_arc.cpp"
break;
case 56: /* bline: ITOK FTOK */
-#line 314 "engines/hypno/grammar_arc.y"
+#line 317 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == F
shoot->name = "F";
debugC(1, kHypnoDebugParser, "I F");
}
-#line 1715 "engines/hypno/grammar_arc.cpp"
+#line 1718 "engines/hypno/grammar_arc.cpp"
break;
case 57: /* bline: ITOK GTOK */
-#line 318 "engines/hypno/grammar_arc.y"
+#line 321 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == G
shoot->name = "G";
debugC(1, kHypnoDebugParser, "I G");
}
-#line 1724 "engines/hypno/grammar_arc.cpp"
+#line 1727 "engines/hypno/grammar_arc.cpp"
break;
case 58: /* bline: ITOK HTOK */
-#line 322 "engines/hypno/grammar_arc.y"
+#line 325 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == H
shoot->name = "H";
debugC(1, kHypnoDebugParser, "I H");
}
-#line 1733 "engines/hypno/grammar_arc.cpp"
+#line 1736 "engines/hypno/grammar_arc.cpp"
break;
case 59: /* bline: ITOK ITOK */
-#line 326 "engines/hypno/grammar_arc.y"
+#line 329 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == I
shoot->name = "I";
debugC(1, kHypnoDebugParser, "I I");
}
-#line 1742 "engines/hypno/grammar_arc.cpp"
+#line 1745 "engines/hypno/grammar_arc.cpp"
break;
case 60: /* bline: ITOK JTOK */
-#line 330 "engines/hypno/grammar_arc.y"
+#line 333 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == J
shoot->name = "J";
debugC(1, kHypnoDebugParser, "I J");
}
-#line 1751 "engines/hypno/grammar_arc.cpp"
+#line 1754 "engines/hypno/grammar_arc.cpp"
break;
case 61: /* bline: ITOK KTOK */
-#line 334 "engines/hypno/grammar_arc.y"
+#line 337 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == K
shoot->name = "K";
debugC(1, kHypnoDebugParser, "I K");
}
-#line 1760 "engines/hypno/grammar_arc.cpp"
+#line 1763 "engines/hypno/grammar_arc.cpp"
break;
case 62: /* bline: ITOK NTOK */
-#line 338 "engines/hypno/grammar_arc.y"
+#line 341 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == N
shoot->name = "N";
debugC(1, kHypnoDebugParser, "I N");
}
-#line 1769 "engines/hypno/grammar_arc.cpp"
+#line 1772 "engines/hypno/grammar_arc.cpp"
break;
case 63: /* bline: ITOK OTOK */
-#line 342 "engines/hypno/grammar_arc.y"
+#line 345 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == O
shoot->name = "O";
debugC(1, kHypnoDebugParser, "I O");
}
-#line 1778 "engines/hypno/grammar_arc.cpp"
+#line 1781 "engines/hypno/grammar_arc.cpp"
break;
case 64: /* bline: ITOK PTOK */
-#line 346 "engines/hypno/grammar_arc.y"
+#line 349 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == P
shoot->name = "P";
debugC(1, kHypnoDebugParser, "I P");
}
-#line 1787 "engines/hypno/grammar_arc.cpp"
+#line 1790 "engines/hypno/grammar_arc.cpp"
break;
case 65: /* bline: ITOK QTOK */
-#line 350 "engines/hypno/grammar_arc.y"
+#line 353 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == Q
shoot->name = "Q";
debugC(1, kHypnoDebugParser, "I Q");
}
-#line 1796 "engines/hypno/grammar_arc.cpp"
+#line 1799 "engines/hypno/grammar_arc.cpp"
break;
case 66: /* bline: ITOK RTOK */
-#line 354 "engines/hypno/grammar_arc.y"
+#line 357 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == R
shoot->name = "R";
debugC(1, kHypnoDebugParser, "I R");
}
-#line 1805 "engines/hypno/grammar_arc.cpp"
+#line 1808 "engines/hypno/grammar_arc.cpp"
break;
case 67: /* bline: ITOK SNTOK */
-#line 358 "engines/hypno/grammar_arc.y"
+#line 361 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == S1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1814 "engines/hypno/grammar_arc.cpp"
+#line 1817 "engines/hypno/grammar_arc.cpp"
break;
case 68: /* bline: ITOK TTOK */
-#line 362 "engines/hypno/grammar_arc.y"
+#line 365 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == T
shoot->name = "T";
debugC(1, kHypnoDebugParser, "I T");
}
-#line 1823 "engines/hypno/grammar_arc.cpp"
+#line 1826 "engines/hypno/grammar_arc.cpp"
break;
case 69: /* bline: ITOK LTOK */
-#line 366 "engines/hypno/grammar_arc.y"
+#line 369 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == L
shoot->name = "L";
debugC(1, kHypnoDebugParser, "I L");
}
-#line 1832 "engines/hypno/grammar_arc.cpp"
+#line 1835 "engines/hypno/grammar_arc.cpp"
break;
case 70: /* bline: ITOK MTOK */
-#line 370 "engines/hypno/grammar_arc.y"
+#line 373 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == M
shoot->name = "M";
debugC(1, kHypnoDebugParser, "I M");
}
-#line 1841 "engines/hypno/grammar_arc.cpp"
+#line 1844 "engines/hypno/grammar_arc.cpp"
break;
case 71: /* bline: ITOK UTOK */
-#line 374 "engines/hypno/grammar_arc.y"
+#line 377 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == U
shoot->name = "U";
debugC(1, kHypnoDebugParser, "I U");
}
-#line 1850 "engines/hypno/grammar_arc.cpp"
+#line 1853 "engines/hypno/grammar_arc.cpp"
break;
case 72: /* bline: JTOK NUM */
-#line 378 "engines/hypno/grammar_arc.y"
+#line 381 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
}
-#line 1858 "engines/hypno/grammar_arc.cpp"
+#line 1861 "engines/hypno/grammar_arc.cpp"
break;
case 73: /* bline: A0TOK NUM NUM */
-#line 381 "engines/hypno/grammar_arc.y"
+#line 384 "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 1867 "engines/hypno/grammar_arc.cpp"
+#line 1870 "engines/hypno/grammar_arc.cpp"
break;
case 74: /* bline: RTOK NUM NUM */
-#line 385 "engines/hypno/grammar_arc.y"
+#line 388 "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 1877 "engines/hypno/grammar_arc.cpp"
+#line 1880 "engines/hypno/grammar_arc.cpp"
break;
case 75: /* bline: R01TOK NUM NUM */
-#line 390 "engines/hypno/grammar_arc.y"
+#line 393 "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 1886 "engines/hypno/grammar_arc.cpp"
+#line 1889 "engines/hypno/grammar_arc.cpp"
break;
case 76: /* bline: BNTOK NUM NUM */
-#line 394 "engines/hypno/grammar_arc.y"
+#line 397 "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 1896 "engines/hypno/grammar_arc.cpp"
+#line 1899 "engines/hypno/grammar_arc.cpp"
break;
case 77: /* bline: KNTOK NUM NUM */
-#line 399 "engines/hypno/grammar_arc.y"
+#line 402 "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 1906 "engines/hypno/grammar_arc.cpp"
+#line 1909 "engines/hypno/grammar_arc.cpp"
break;
case 78: /* bline: P0TOK NUM NUM */
-#line 404 "engines/hypno/grammar_arc.y"
+#line 407 "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 1915 "engines/hypno/grammar_arc.cpp"
+#line 1918 "engines/hypno/grammar_arc.cpp"
break;
case 79: /* bline: OTOK NUM NUM */
-#line 408 "engines/hypno/grammar_arc.y"
+#line 411 "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 1926 "engines/hypno/grammar_arc.cpp"
+#line 1929 "engines/hypno/grammar_arc.cpp"
break;
case 80: /* bline: CTOK NUM */
-#line 414 "engines/hypno/grammar_arc.y"
+#line 417 "engines/hypno/grammar_arc.y"
{
shoot->timesToShoot = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
}
-#line 1935 "engines/hypno/grammar_arc.cpp"
+#line 1938 "engines/hypno/grammar_arc.cpp"
break;
case 81: /* bline: HTOK NUM */
-#line 418 "engines/hypno/grammar_arc.y"
+#line 421 "engines/hypno/grammar_arc.y"
{
shoot->attackFrames.push_back((yyvsp[0].i));
debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1943 "engines/hypno/grammar_arc.cpp"
+#line 1946 "engines/hypno/grammar_arc.cpp"
break;
case 82: /* bline: VTOK NUM */
-#line 421 "engines/hypno/grammar_arc.y"
+#line 424 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1949 "engines/hypno/grammar_arc.cpp"
+#line 1952 "engines/hypno/grammar_arc.cpp"
break;
case 83: /* bline: WTOK NUM */
-#line 422 "engines/hypno/grammar_arc.y"
+#line 425 "engines/hypno/grammar_arc.y"
{
shoot->attackWeight = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1957 "engines/hypno/grammar_arc.cpp"
+#line 1960 "engines/hypno/grammar_arc.cpp"
break;
case 84: /* bline: DTOK NUM */
-#line 425 "engines/hypno/grammar_arc.y"
+#line 428 "engines/hypno/grammar_arc.y"
{
shoot->pointsToShoot = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
}
-#line 1966 "engines/hypno/grammar_arc.cpp"
+#line 1969 "engines/hypno/grammar_arc.cpp"
break;
case 85: /* bline: LTOK NUM NUM */
-#line 429 "engines/hypno/grammar_arc.y"
+#line 432 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1974 "engines/hypno/grammar_arc.cpp"
+#line 1977 "engines/hypno/grammar_arc.cpp"
break;
case 86: /* bline: LTOK NUM */
-#line 432 "engines/hypno/grammar_arc.y"
+#line 435 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "L %d", (yyvsp[0].i));
+ FrameInfo fi((yyvsp[0].i)-1, 0);
+ shoot->bodyFrames.push_back(fi);
}
-#line 1982 "engines/hypno/grammar_arc.cpp"
+#line 1987 "engines/hypno/grammar_arc.cpp"
break;
case 87: /* bline: MTOK NUM */
-#line 435 "engines/hypno/grammar_arc.y"
- { debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i)); }
-#line 1988 "engines/hypno/grammar_arc.cpp"
+#line 440 "engines/hypno/grammar_arc.y"
+ { debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i));
+ shoot->missedAnimation = (yyvsp[0].i);
+ }
+#line 1995 "engines/hypno/grammar_arc.cpp"
break;
case 88: /* bline: KTOK NUM */
-#line 436 "engines/hypno/grammar_arc.y"
+#line 443 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "K %d", (yyvsp[0].i));
- shoot->maskOffset = (yyvsp[0].i);
+ FrameInfo fi((yyvsp[0].i), 1);
+ shoot->explosionFrames.push_back(fi);
}
-#line 1996 "engines/hypno/grammar_arc.cpp"
+#line 2004 "engines/hypno/grammar_arc.cpp"
break;
case 89: /* bline: SNTOK FILENAME enc */
-#line 439 "engines/hypno/grammar_arc.y"
+#line 447 "engines/hypno/grammar_arc.y"
{
if (Common::String("S0") == (yyvsp[-2].s))
shoot->enemySound = (yyvsp[-1].s);
@@ -2006,36 +2014,36 @@ yyreduce:
shoot->hitSound = (yyvsp[-1].s);
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 2010 "engines/hypno/grammar_arc.cpp"
+#line 2018 "engines/hypno/grammar_arc.cpp"
break;
case 90: /* bline: GTOK */
-#line 448 "engines/hypno/grammar_arc.y"
+#line 456 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "G"); }
-#line 2016 "engines/hypno/grammar_arc.cpp"
+#line 2024 "engines/hypno/grammar_arc.cpp"
break;
case 91: /* bline: NTOK */
-#line 449 "engines/hypno/grammar_arc.y"
+#line 457 "engines/hypno/grammar_arc.y"
{
shoot->noEnemySound = true;
debugC(1, kHypnoDebugParser, "N"); }
-#line 2024 "engines/hypno/grammar_arc.cpp"
+#line 2032 "engines/hypno/grammar_arc.cpp"
break;
case 92: /* bline: ZTOK */
-#line 452 "engines/hypno/grammar_arc.y"
+#line 460 "engines/hypno/grammar_arc.y"
{
g_parsedArc->shoots.push_back(*shoot);
//delete shoot;
//shoot = nullptr;
debugC(1, kHypnoDebugParser, "Z");
}
-#line 2035 "engines/hypno/grammar_arc.cpp"
+#line 2043 "engines/hypno/grammar_arc.cpp"
break;
-#line 2039 "engines/hypno/grammar_arc.cpp"
+#line 2047 "engines/hypno/grammar_arc.cpp"
default: break;
}
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 538e092e0a3..bd5cbd1fc2f 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -98,7 +98,10 @@ hline: CTOK NUM {
}
| PTOK NUM NUM { debugC(1, kHypnoDebugParser, "P %d %d", $2, $3); }
| ATOK NUM NUM { debugC(1, kHypnoDebugParser, "A %d %d", $2, $3); }
- | MTOK FILENAME { debugC(1, kHypnoDebugParser, "M %s", $2); }
+ | MTOK FILENAME {
+ debugC(1, kHypnoDebugParser, "M %s", $2);
+ g_parsedArc->maskVideo = $2;
+ }
| UTOK NUM NUM NUM NUM { debugC(1, kHypnoDebugParser, "U %d %d %d %d", $2, $3, $4, $5); }
| VTOK NUM NUM { debugC(1, kHypnoDebugParser, "V %d %d", $2, $3); }
| VTOK RESTOK { debugC(1, kHypnoDebugParser, "V 320,200"); }
@@ -431,10 +434,15 @@ bline: FNTOK FILENAME {
}
| LTOK NUM {
debugC(1, kHypnoDebugParser, "L %d", $2);
+ FrameInfo fi($2-1, 0);
+ shoot->bodyFrames.push_back(fi);
+ }
+ | MTOK NUM { debugC(1, kHypnoDebugParser, "M %d", $2);
+ shoot->missedAnimation = $2;
}
- | MTOK NUM { debugC(1, kHypnoDebugParser, "M %d", $2); }
| KTOK NUM { debugC(1, kHypnoDebugParser, "K %d", $2);
- shoot->maskOffset = $2;
+ FrameInfo fi($2, 1);
+ shoot->explosionFrames.push_back(fi);
}
| SNTOK FILENAME enc {
if (Common::String("S0") == $1)
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index d1a8d7a97da..fc5ce1eaffa 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -56,6 +56,7 @@ HypnoEngine::HypnoEngine(OSystem *syst, const ADGameDescription *gd)
_defaultCursor(""), _checkpoint(""),
_currentPlayerPosition(kPlayerLeft), _lastPlayerPosition(kPlayerLeft),
//_obj1KillsCount(0), _obj1MissesCount(0),
+ _masks(nullptr),
_screenW(0), _screenH(0) { // Every games initializes its own resolution
_rnd = new Common::RandomSource("hypno");
@@ -432,6 +433,10 @@ void HypnoEngine::loadPalette(const byte *palette, uint32 offset, uint32 size) {
g_system->getPaletteManager()->setPalette(palette, offset, size);
}
+void HypnoEngine::updateVideo(MVideo &video) {
+ video.decoder->decodeNextFrame();
+}
+
void HypnoEngine::updateScreen(MVideo &video) {
const Graphics::Surface *frame = video.decoder->decodeNextFrame();
bool dirtyPalette = video.decoder->hasDirtyPalette();
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index e2d2323005b..2ea4f3e0eec 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -182,6 +182,7 @@ public:
uint32 _transparentColor;
Common::Rect screenRect;
void updateScreen(MVideo &video);
+ void updateVideo(MVideo &video);
void drawScreen();
// intros
@@ -207,6 +208,8 @@ public:
Videos _escapeSequentialVideoToPlay;
Videos _videosPlaying;
Videos _videosLooping;
+ MVideo *_masks;
+ const Graphics::Surface *_mask;
// Sounds
Filename _soundPath;
@@ -219,7 +222,7 @@ public:
uint32 _currentPlayerPosition;
uint32 _lastPlayerPosition;
virtual Common::Point computeTargetPosition(const Common::Point &mousePos);
- int detectTarget(const Common::Point &mousePos);
+ virtual int detectTarget(const Common::Point &mousePos);
virtual bool clickedPrimaryShoot(const Common::Point &mousePos);
virtual bool clickedSecondaryShoot(const Common::Point &mousePos);
virtual void drawShoot(const Common::Point &mousePos);
@@ -452,10 +455,15 @@ public:
Common::String findNextLevel(const Common::String &level) override;
void runBeforeArcade(ArcadeShooting *arc) override;
+ int detectTarget(const Common::Point &mousePos) override;
+ void shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVideo &background) override;
+
+ void missedTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) override;
void drawHealth() override;
void drawShoot(const Common::Point &target) override;
void hitPlayer() override;
void drawPlayer() override;
+ void findNextSegment(ArcadeShooting *arc) override;
void initSegment(ArcadeShooting *arc) override;
};
Commit: 7f97e634e0359d36d2d93a3e59643195c683fa67
https://github.com/scummvm/scummvm/commit/7f97e634e0359d36d2d93a3e59643195c683fa67
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: added the first two levels and some preliminary code to render the ui in boyz
Changed paths:
engines/hypno/boyz/boyz.cpp
engines/hypno/hypno.h
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index c6669f17e65..336c8b4120b 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -37,7 +37,9 @@ void BoyzEngine::loadAssets() {
Common::ArchiveMemberList files;
if (missions->listMembers(files) == 0)
error("Failed to load any files from missions.lib");
- loadArcadeLevel("c11.mi_", "", "", "");
+ loadArcadeLevel("c11.mi_", "c12.mi_", "??", "");
+ loadArcadeLevel("c12.mi_", "??", "??", "");
+
loadLib("sound/", "misc/sound.lib", true);
_nextLevel = "c11.mi_";
}
@@ -48,21 +50,35 @@ void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
_playerFrames = decodeFrames(arc->player);
_playerFrameSep = 0;
- for (Frames::iterator it =_playerFrames.begin(); it != _playerFrames.end(); ++it) {
- if ((*it)->getPixel(0, 0) == 255)
- break;
- if ((*it)->getPixel(0, 0) == 252)
- break;
+ Common::Rect healthBarBox(0, 3, 107, 18);
+ Common::Rect ammoBarBox(0, 20, 103, 34);
+ Common::Rect portraitBox(0, 40, 57, 94);
- _playerFrameSep++;
+ for (int i = 0; i < int(_playerFrames.size()); i++) {
+ _healthBar[i] = _playerFrames[i]->getSubArea(healthBarBox);
+ _ammoBar[i] = _playerFrames[i]->getSubArea(ammoBarBox);
+ _portrait[i] = _playerFrames[i]->getSubArea(portraitBox);
}
+
+ _playerFrameSep = _playerFrames.size();
_playerFrameIdx = -1;
}
+void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
+ for (int i = 0; i < int(_playerFrames.size()); i++) {
+ _playerFrames[i]->free();
+ delete _playerFrames[i];
+ }
+}
+
void BoyzEngine::drawPlayer() {
- drawImage(*_playerFrames[0], 0, 0, true);
+ drawImage(_portrait[0], 0, 200 - _portrait[2].h, true);
+}
+
+void BoyzEngine::drawHealth() {
+ drawImage(_healthBar[0], 0, 0, true);
+ drawImage(_ammoBar[0], 320 - _ammoBar[0].w, 0, true);
}
-void BoyzEngine::drawHealth() {}
void BoyzEngine::hitPlayer() {}
void BoyzEngine::drawShoot(const Common::Point &target) {}
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 2ea4f3e0eec..7913002ee08 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -455,6 +455,7 @@ public:
Common::String findNextLevel(const Common::String &level) override;
void runBeforeArcade(ArcadeShooting *arc) override;
+ void runAfterArcade(ArcadeShooting *arc) override;
int detectTarget(const Common::Point &mousePos) override;
void shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVideo &background) override;
@@ -465,6 +466,11 @@ public:
void drawPlayer() override;
void findNextSegment(ArcadeShooting *arc) override;
void initSegment(ArcadeShooting *arc) override;
+
+ private:
+ Graphics::Surface _healthBar[6];
+ Graphics::Surface _ammoBar[6];
+ Graphics::Surface _portrait[6];
};
} // End of namespace Hypno
Commit: 2ad13fad89595a50f767c796796baeb7c2108ef3
https://github.com/scummvm/scummvm/commit/2ad13fad89595a50f767c796796baeb7c2108ef3
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: parse script lines from levels in boyz
Changed paths:
engines/hypno/boyz/boyz.cpp
engines/hypno/grammar.h
engines/hypno/grammar_arc.cpp
engines/hypno/grammar_arc.y
engines/hypno/hypno.h
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 336c8b4120b..ddd7bf1b7c2 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -62,6 +62,12 @@ void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
_playerFrameSep = _playerFrames.size();
_playerFrameIdx = -1;
+
+ _currentScript = arc->script;
+ ScriptInfo si = _currentScript.begin();
+ _currentActor = si.actor - 1;
+ _currentMode = si.mode;
+ _currentScript.pop_front();
}
void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
@@ -72,12 +78,12 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
}
void BoyzEngine::drawPlayer() {
- drawImage(_portrait[0], 0, 200 - _portrait[2].h, true);
+ drawImage(_portrait[_currentActor], 0, 200 - _portrait[_currentActor].h, true);
}
void BoyzEngine::drawHealth() {
- drawImage(_healthBar[0], 0, 0, true);
- drawImage(_ammoBar[0], 320 - _ammoBar[0].w, 0, true);
+ drawImage(_healthBar[_currentActor], 0, 0, true);
+ drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentActor].w, 0, true);
}
void BoyzEngine::hitPlayer() {}
void BoyzEngine::drawShoot(const Common::Point &target) {}
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index 01ba1fe062c..159edb5807c 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -366,6 +366,27 @@ public:
uint32 length;
};
+enum ScriptMode {
+ NonInteractive = 1,
+ Interactive,
+};
+
+class ScriptInfo {
+public:
+ ScriptInfo(uint32 time_, uint32 mode_, uint32 actor_, uint32 cursor_) {
+ time = time_;
+ mode = ScriptMode(mode_);
+ actor = actor_;
+ cursor = cursor_;
+ }
+ uint32 time;
+ ScriptMode mode;
+ uint32 actor;
+ uint32 cursor;
+};
+
+typedef Common::List<ScriptInfo> Script;
+
class Shoot {
public:
Shoot() {
@@ -506,6 +527,7 @@ public:
briefingVideo.clear();
additionalVideo.clear();
segments.clear();
+ script.clear();
}
uint32 id;
@@ -518,6 +540,9 @@ public:
uint32 objKillsRequired [2];
uint32 objMissesAllowed [2];
+ // Script
+ Script script;
+
// Videos
Common::List<Filename> transitionVideos;
Common::List<Filename> transitionPalettes;
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index 73c20b9f7f2..da2ea892085 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -581,15 +581,15 @@ static const yytype_int8 yytranslate[] =
static const yytype_int16 yyrline[] =
{
0, 78, 78, 78, 79, 82, 83, 84, 87, 91,
- 95, 99, 100, 101, 105, 106, 107, 108, 113, 123,
- 132, 138, 144, 145, 149, 153, 156, 160, 163, 164,
- 190, 212, 218, 223, 228, 234, 239, 244, 249, 254,
- 259, 266, 267, 270, 271, 274, 275, 276, 279, 287,
- 292, 297, 301, 305, 309, 313, 317, 321, 325, 329,
- 333, 337, 341, 345, 349, 353, 357, 361, 365, 369,
- 373, 377, 381, 384, 388, 393, 397, 402, 407, 411,
- 417, 421, 424, 425, 428, 432, 435, 440, 443, 447,
- 456, 457, 460
+ 95, 99, 100, 101, 105, 110, 111, 112, 117, 127,
+ 136, 142, 148, 149, 153, 157, 160, 164, 167, 168,
+ 194, 216, 222, 227, 232, 238, 243, 248, 253, 258,
+ 263, 270, 271, 274, 275, 278, 279, 280, 283, 291,
+ 296, 301, 305, 309, 313, 317, 321, 325, 329, 333,
+ 337, 341, 345, 349, 353, 357, 361, 365, 369, 373,
+ 377, 381, 385, 388, 392, 397, 401, 406, 411, 415,
+ 421, 425, 428, 429, 432, 436, 439, 444, 447, 451,
+ 460, 461, 464
};
#endif
@@ -1314,34 +1314,38 @@ yyreduce:
case 14: /* hline: UTOK NUM NUM NUM NUM */
#line 105 "engines/hypno/grammar_arc.y"
- { debugC(1, kHypnoDebugParser, "U %d %d %d %d", (yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1319 "engines/hypno/grammar_arc.cpp"
+ {
+ debugC(1, kHypnoDebugParser, "U %d %d %d %d", (yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
+ ScriptInfo si((yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
+ g_parsedArc->script.push_back(si);
+ }
+#line 1323 "engines/hypno/grammar_arc.cpp"
break;
case 15: /* hline: VTOK NUM NUM */
-#line 106 "engines/hypno/grammar_arc.y"
+#line 110 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1325 "engines/hypno/grammar_arc.cpp"
+#line 1329 "engines/hypno/grammar_arc.cpp"
break;
case 16: /* hline: VTOK RESTOK */
-#line 107 "engines/hypno/grammar_arc.y"
+#line 111 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1331 "engines/hypno/grammar_arc.cpp"
+#line 1335 "engines/hypno/grammar_arc.cpp"
break;
case 17: /* hline: OTOK NUM NUM */
-#line 108 "engines/hypno/grammar_arc.y"
+#line 112 "engines/hypno/grammar_arc.y"
{
g_parsedArc->objKillsRequired[0] = (yyvsp[-1].i);
g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1341 "engines/hypno/grammar_arc.cpp"
+#line 1345 "engines/hypno/grammar_arc.cpp"
break;
case 18: /* hline: ONTOK NUM NUM */
-#line 113 "engines/hypno/grammar_arc.y"
+#line 117 "engines/hypno/grammar_arc.y"
{
if (Common::String("O0") == (yyvsp[-2].s)) {
g_parsedArc->objKillsRequired[0] = (yyvsp[-1].i);
@@ -1352,11 +1356,11 @@ yyreduce:
} else
error("Invalid objective: '%s'", (yyvsp[-2].s));
debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1356 "engines/hypno/grammar_arc.cpp"
+#line 1360 "engines/hypno/grammar_arc.cpp"
break;
case 19: /* hline: ONTOK NUM */
-#line 123 "engines/hypno/grammar_arc.y"
+#line 127 "engines/hypno/grammar_arc.y"
{
if (Common::String("O0") == (yyvsp[-1].s)) {
g_parsedArc->objKillsRequired[0] = (yyvsp[0].i);
@@ -1366,88 +1370,88 @@ yyreduce:
error("Invalid objective: '%s'", (yyvsp[-1].s));
debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
}
-#line 1370 "engines/hypno/grammar_arc.cpp"
+#line 1374 "engines/hypno/grammar_arc.cpp"
break;
case 20: /* hline: TPTOK FILENAME NUM FILENAME */
-#line 132 "engines/hypno/grammar_arc.y"
+#line 136 "engines/hypno/grammar_arc.y"
{
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 1381 "engines/hypno/grammar_arc.cpp"
+#line 1385 "engines/hypno/grammar_arc.cpp"
break;
case 21: /* hline: TTOK FILENAME NUM */
-#line 138 "engines/hypno/grammar_arc.y"
+#line 142 "engines/hypno/grammar_arc.y"
{
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 1392 "engines/hypno/grammar_arc.cpp"
+#line 1396 "engines/hypno/grammar_arc.cpp"
break;
case 22: /* hline: TTOK NONETOK NUM */
-#line 144 "engines/hypno/grammar_arc.y"
+#line 148 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1398 "engines/hypno/grammar_arc.cpp"
+#line 1402 "engines/hypno/grammar_arc.cpp"
break;
case 23: /* hline: NTOK FILENAME */
-#line 145 "engines/hypno/grammar_arc.y"
+#line 149 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundVideo = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
}
-#line 1407 "engines/hypno/grammar_arc.cpp"
+#line 1411 "engines/hypno/grammar_arc.cpp"
break;
case 24: /* hline: NSTOK FILENAME */
-#line 149 "engines/hypno/grammar_arc.y"
+#line 153 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundVideo = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
}
-#line 1416 "engines/hypno/grammar_arc.cpp"
+#line 1420 "engines/hypno/grammar_arc.cpp"
break;
case 25: /* hline: RTOK FILENAME */
-#line 153 "engines/hypno/grammar_arc.y"
+#line 157 "engines/hypno/grammar_arc.y"
{
g_parsedArc->backgroundPalette = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1424 "engines/hypno/grammar_arc.cpp"
+#line 1428 "engines/hypno/grammar_arc.cpp"
break;
case 26: /* hline: ITOK FILENAME */
-#line 156 "engines/hypno/grammar_arc.y"
+#line 160 "engines/hypno/grammar_arc.y"
{
g_parsedArc->player = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1433 "engines/hypno/grammar_arc.cpp"
+#line 1437 "engines/hypno/grammar_arc.cpp"
break;
case 27: /* hline: I1TOK FILENAME */
-#line 160 "engines/hypno/grammar_arc.y"
+#line 164 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
}
-#line 1441 "engines/hypno/grammar_arc.cpp"
+#line 1445 "engines/hypno/grammar_arc.cpp"
break;
case 28: /* hline: QTOK NUM NUM */
-#line 163 "engines/hypno/grammar_arc.y"
+#line 167 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1447 "engines/hypno/grammar_arc.cpp"
+#line 1451 "engines/hypno/grammar_arc.cpp"
break;
case 29: /* hline: BNTOK FILENAME */
-#line 164 "engines/hypno/grammar_arc.y"
+#line 168 "engines/hypno/grammar_arc.y"
{
if (Common::String("B0") == (yyvsp[-1].s))
g_parsedArc->beforeVideo = (yyvsp[0].s);
@@ -1474,11 +1478,11 @@ yyreduce:
debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
}
-#line 1478 "engines/hypno/grammar_arc.cpp"
+#line 1482 "engines/hypno/grammar_arc.cpp"
break;
case 30: /* hline: SNTOK FILENAME enc flag */
-#line 190 "engines/hypno/grammar_arc.y"
+#line 194 "engines/hypno/grammar_arc.y"
{
uint32 sampleRate = 11025;
if (Common::String("22K") == (yyvsp[-1].s) || Common::String("22k") == (yyvsp[-1].s))
@@ -1501,137 +1505,137 @@ yyreduce:
}
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-2].s));
}
-#line 1505 "engines/hypno/grammar_arc.cpp"
+#line 1509 "engines/hypno/grammar_arc.cpp"
break;
case 31: /* hline: HETOK BYTE NUM NUM */
-#line 212 "engines/hypno/grammar_arc.y"
+#line 216 "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 1516 "engines/hypno/grammar_arc.cpp"
+#line 1520 "engines/hypno/grammar_arc.cpp"
break;
case 32: /* hline: HLTOK BYTE NUM NUM */
-#line 218 "engines/hypno/grammar_arc.y"
+#line 222 "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 1526 "engines/hypno/grammar_arc.cpp"
+#line 1530 "engines/hypno/grammar_arc.cpp"
break;
case 33: /* hline: HUTOK BYTE NUM NUM */
-#line 223 "engines/hypno/grammar_arc.y"
+#line 227 "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 1536 "engines/hypno/grammar_arc.cpp"
+#line 1540 "engines/hypno/grammar_arc.cpp"
break;
case 34: /* hline: HTOK NAME NUM NUM */
-#line 228 "engines/hypno/grammar_arc.y"
+#line 232 "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 1547 "engines/hypno/grammar_arc.cpp"
+#line 1551 "engines/hypno/grammar_arc.cpp"
break;
case 35: /* hline: HTOK RTOK NUM NUM */
-#line 234 "engines/hypno/grammar_arc.y"
+#line 238 "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 1557 "engines/hypno/grammar_arc.cpp"
+#line 1561 "engines/hypno/grammar_arc.cpp"
break;
case 36: /* hline: HTOK ATOK NUM NUM */
-#line 239 "engines/hypno/grammar_arc.y"
+#line 243 "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 1567 "engines/hypno/grammar_arc.cpp"
+#line 1571 "engines/hypno/grammar_arc.cpp"
break;
case 37: /* hline: HTOK PTOK NUM NUM */
-#line 244 "engines/hypno/grammar_arc.y"
+#line 248 "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 1577 "engines/hypno/grammar_arc.cpp"
+#line 1581 "engines/hypno/grammar_arc.cpp"
break;
case 38: /* hline: HTOK LTOK NUM NUM */
-#line 249 "engines/hypno/grammar_arc.y"
+#line 253 "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 1587 "engines/hypno/grammar_arc.cpp"
+#line 1591 "engines/hypno/grammar_arc.cpp"
break;
case 39: /* hline: H12TOK BYTE NUM NUM */
-#line 254 "engines/hypno/grammar_arc.y"
+#line 258 "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 1597 "engines/hypno/grammar_arc.cpp"
+#line 1601 "engines/hypno/grammar_arc.cpp"
break;
case 40: /* hline: HTOK BYTE NUM NUM */
-#line 259 "engines/hypno/grammar_arc.y"
+#line 263 "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 1607 "engines/hypno/grammar_arc.cpp"
+#line 1611 "engines/hypno/grammar_arc.cpp"
break;
case 41: /* enc: ENCTOK */
-#line 266 "engines/hypno/grammar_arc.y"
+#line 270 "engines/hypno/grammar_arc.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1613 "engines/hypno/grammar_arc.cpp"
+#line 1617 "engines/hypno/grammar_arc.cpp"
break;
case 42: /* enc: %empty */
-#line 267 "engines/hypno/grammar_arc.y"
+#line 271 "engines/hypno/grammar_arc.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1619 "engines/hypno/grammar_arc.cpp"
+#line 1623 "engines/hypno/grammar_arc.cpp"
break;
case 43: /* flag: NAME */
-#line 270 "engines/hypno/grammar_arc.y"
+#line 274 "engines/hypno/grammar_arc.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1625 "engines/hypno/grammar_arc.cpp"
+#line 1629 "engines/hypno/grammar_arc.cpp"
break;
case 44: /* flag: %empty */
-#line 271 "engines/hypno/grammar_arc.y"
+#line 275 "engines/hypno/grammar_arc.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1631 "engines/hypno/grammar_arc.cpp"
+#line 1635 "engines/hypno/grammar_arc.cpp"
break;
case 48: /* bline: FNTOK FILENAME */
-#line 279 "engines/hypno/grammar_arc.y"
+#line 283 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
if (Common::String("F0") == (yyvsp[-1].s))
@@ -1640,371 +1644,371 @@ yyreduce:
shoot->explosionAnimation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1644 "engines/hypno/grammar_arc.cpp"
+#line 1648 "engines/hypno/grammar_arc.cpp"
break;
case 49: /* bline: FNTOK NONETOK */
-#line 287 "engines/hypno/grammar_arc.y"
+#line 291 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
shoot->animation = "NONE";
debugC(1, kHypnoDebugParser, "FN NONE");
}
-#line 1654 "engines/hypno/grammar_arc.cpp"
+#line 1658 "engines/hypno/grammar_arc.cpp"
break;
case 50: /* bline: FTOK FILENAME */
-#line 292 "engines/hypno/grammar_arc.y"
+#line 296 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
shoot->animation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1664 "engines/hypno/grammar_arc.cpp"
+#line 1668 "engines/hypno/grammar_arc.cpp"
break;
case 51: /* bline: ITOK NAME */
-#line 297 "engines/hypno/grammar_arc.y"
+#line 301 "engines/hypno/grammar_arc.y"
{
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1673 "engines/hypno/grammar_arc.cpp"
+#line 1677 "engines/hypno/grammar_arc.cpp"
break;
case 52: /* bline: ITOK BNTOK */
-#line 301 "engines/hypno/grammar_arc.y"
+#line 305 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == B1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1682 "engines/hypno/grammar_arc.cpp"
+#line 1686 "engines/hypno/grammar_arc.cpp"
break;
case 53: /* bline: ITOK ATOK */
-#line 305 "engines/hypno/grammar_arc.y"
+#line 309 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == A
shoot->name = "A";
debugC(1, kHypnoDebugParser, "I A");
}
-#line 1691 "engines/hypno/grammar_arc.cpp"
+#line 1695 "engines/hypno/grammar_arc.cpp"
break;
case 54: /* bline: ITOK CTOK */
-#line 309 "engines/hypno/grammar_arc.y"
+#line 313 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == C
shoot->name = "C";
debugC(1, kHypnoDebugParser, "I C");
}
-#line 1700 "engines/hypno/grammar_arc.cpp"
+#line 1704 "engines/hypno/grammar_arc.cpp"
break;
case 55: /* bline: ITOK DTOK */
-#line 313 "engines/hypno/grammar_arc.y"
+#line 317 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == D
shoot->name = "D";
debugC(1, kHypnoDebugParser, "I D");
}
-#line 1709 "engines/hypno/grammar_arc.cpp"
+#line 1713 "engines/hypno/grammar_arc.cpp"
break;
case 56: /* bline: ITOK FTOK */
-#line 317 "engines/hypno/grammar_arc.y"
+#line 321 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == F
shoot->name = "F";
debugC(1, kHypnoDebugParser, "I F");
}
-#line 1718 "engines/hypno/grammar_arc.cpp"
+#line 1722 "engines/hypno/grammar_arc.cpp"
break;
case 57: /* bline: ITOK GTOK */
-#line 321 "engines/hypno/grammar_arc.y"
+#line 325 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == G
shoot->name = "G";
debugC(1, kHypnoDebugParser, "I G");
}
-#line 1727 "engines/hypno/grammar_arc.cpp"
+#line 1731 "engines/hypno/grammar_arc.cpp"
break;
case 58: /* bline: ITOK HTOK */
-#line 325 "engines/hypno/grammar_arc.y"
+#line 329 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == H
shoot->name = "H";
debugC(1, kHypnoDebugParser, "I H");
}
-#line 1736 "engines/hypno/grammar_arc.cpp"
+#line 1740 "engines/hypno/grammar_arc.cpp"
break;
case 59: /* bline: ITOK ITOK */
-#line 329 "engines/hypno/grammar_arc.y"
+#line 333 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == I
shoot->name = "I";
debugC(1, kHypnoDebugParser, "I I");
}
-#line 1745 "engines/hypno/grammar_arc.cpp"
+#line 1749 "engines/hypno/grammar_arc.cpp"
break;
case 60: /* bline: ITOK JTOK */
-#line 333 "engines/hypno/grammar_arc.y"
+#line 337 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == J
shoot->name = "J";
debugC(1, kHypnoDebugParser, "I J");
}
-#line 1754 "engines/hypno/grammar_arc.cpp"
+#line 1758 "engines/hypno/grammar_arc.cpp"
break;
case 61: /* bline: ITOK KTOK */
-#line 337 "engines/hypno/grammar_arc.y"
+#line 341 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == K
shoot->name = "K";
debugC(1, kHypnoDebugParser, "I K");
}
-#line 1763 "engines/hypno/grammar_arc.cpp"
+#line 1767 "engines/hypno/grammar_arc.cpp"
break;
case 62: /* bline: ITOK NTOK */
-#line 341 "engines/hypno/grammar_arc.y"
+#line 345 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == N
shoot->name = "N";
debugC(1, kHypnoDebugParser, "I N");
}
-#line 1772 "engines/hypno/grammar_arc.cpp"
+#line 1776 "engines/hypno/grammar_arc.cpp"
break;
case 63: /* bline: ITOK OTOK */
-#line 345 "engines/hypno/grammar_arc.y"
+#line 349 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == O
shoot->name = "O";
debugC(1, kHypnoDebugParser, "I O");
}
-#line 1781 "engines/hypno/grammar_arc.cpp"
+#line 1785 "engines/hypno/grammar_arc.cpp"
break;
case 64: /* bline: ITOK PTOK */
-#line 349 "engines/hypno/grammar_arc.y"
+#line 353 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == P
shoot->name = "P";
debugC(1, kHypnoDebugParser, "I P");
}
-#line 1790 "engines/hypno/grammar_arc.cpp"
+#line 1794 "engines/hypno/grammar_arc.cpp"
break;
case 65: /* bline: ITOK QTOK */
-#line 353 "engines/hypno/grammar_arc.y"
+#line 357 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == Q
shoot->name = "Q";
debugC(1, kHypnoDebugParser, "I Q");
}
-#line 1799 "engines/hypno/grammar_arc.cpp"
+#line 1803 "engines/hypno/grammar_arc.cpp"
break;
case 66: /* bline: ITOK RTOK */
-#line 357 "engines/hypno/grammar_arc.y"
+#line 361 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == R
shoot->name = "R";
debugC(1, kHypnoDebugParser, "I R");
}
-#line 1808 "engines/hypno/grammar_arc.cpp"
+#line 1812 "engines/hypno/grammar_arc.cpp"
break;
case 67: /* bline: ITOK SNTOK */
-#line 361 "engines/hypno/grammar_arc.y"
+#line 365 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == S1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1817 "engines/hypno/grammar_arc.cpp"
+#line 1821 "engines/hypno/grammar_arc.cpp"
break;
case 68: /* bline: ITOK TTOK */
-#line 365 "engines/hypno/grammar_arc.y"
+#line 369 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == T
shoot->name = "T";
debugC(1, kHypnoDebugParser, "I T");
}
-#line 1826 "engines/hypno/grammar_arc.cpp"
+#line 1830 "engines/hypno/grammar_arc.cpp"
break;
case 69: /* bline: ITOK LTOK */
-#line 369 "engines/hypno/grammar_arc.y"
+#line 373 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == L
shoot->name = "L";
debugC(1, kHypnoDebugParser, "I L");
}
-#line 1835 "engines/hypno/grammar_arc.cpp"
+#line 1839 "engines/hypno/grammar_arc.cpp"
break;
case 70: /* bline: ITOK MTOK */
-#line 373 "engines/hypno/grammar_arc.y"
+#line 377 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == M
shoot->name = "M";
debugC(1, kHypnoDebugParser, "I M");
}
-#line 1844 "engines/hypno/grammar_arc.cpp"
+#line 1848 "engines/hypno/grammar_arc.cpp"
break;
case 71: /* bline: ITOK UTOK */
-#line 377 "engines/hypno/grammar_arc.y"
+#line 381 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == U
shoot->name = "U";
debugC(1, kHypnoDebugParser, "I U");
}
-#line 1853 "engines/hypno/grammar_arc.cpp"
+#line 1857 "engines/hypno/grammar_arc.cpp"
break;
case 72: /* bline: JTOK NUM */
-#line 381 "engines/hypno/grammar_arc.y"
+#line 385 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
}
-#line 1861 "engines/hypno/grammar_arc.cpp"
+#line 1865 "engines/hypno/grammar_arc.cpp"
break;
case 73: /* bline: A0TOK NUM NUM */
-#line 384 "engines/hypno/grammar_arc.y"
+#line 388 "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 1870 "engines/hypno/grammar_arc.cpp"
+#line 1874 "engines/hypno/grammar_arc.cpp"
break;
case 74: /* bline: RTOK NUM NUM */
-#line 388 "engines/hypno/grammar_arc.y"
+#line 392 "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 1880 "engines/hypno/grammar_arc.cpp"
+#line 1884 "engines/hypno/grammar_arc.cpp"
break;
case 75: /* bline: R01TOK NUM NUM */
-#line 393 "engines/hypno/grammar_arc.y"
+#line 397 "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 1889 "engines/hypno/grammar_arc.cpp"
+#line 1893 "engines/hypno/grammar_arc.cpp"
break;
case 76: /* bline: BNTOK NUM NUM */
-#line 397 "engines/hypno/grammar_arc.y"
+#line 401 "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 1899 "engines/hypno/grammar_arc.cpp"
+#line 1903 "engines/hypno/grammar_arc.cpp"
break;
case 77: /* bline: KNTOK NUM NUM */
-#line 402 "engines/hypno/grammar_arc.y"
+#line 406 "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 1909 "engines/hypno/grammar_arc.cpp"
+#line 1913 "engines/hypno/grammar_arc.cpp"
break;
case 78: /* bline: P0TOK NUM NUM */
-#line 407 "engines/hypno/grammar_arc.y"
+#line 411 "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 1918 "engines/hypno/grammar_arc.cpp"
+#line 1922 "engines/hypno/grammar_arc.cpp"
break;
case 79: /* bline: OTOK NUM NUM */
-#line 411 "engines/hypno/grammar_arc.y"
+#line 415 "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 1929 "engines/hypno/grammar_arc.cpp"
+#line 1933 "engines/hypno/grammar_arc.cpp"
break;
case 80: /* bline: CTOK NUM */
-#line 417 "engines/hypno/grammar_arc.y"
+#line 421 "engines/hypno/grammar_arc.y"
{
shoot->timesToShoot = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
}
-#line 1938 "engines/hypno/grammar_arc.cpp"
+#line 1942 "engines/hypno/grammar_arc.cpp"
break;
case 81: /* bline: HTOK NUM */
-#line 421 "engines/hypno/grammar_arc.y"
+#line 425 "engines/hypno/grammar_arc.y"
{
shoot->attackFrames.push_back((yyvsp[0].i));
debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1946 "engines/hypno/grammar_arc.cpp"
+#line 1950 "engines/hypno/grammar_arc.cpp"
break;
case 82: /* bline: VTOK NUM */
-#line 424 "engines/hypno/grammar_arc.y"
+#line 428 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1952 "engines/hypno/grammar_arc.cpp"
+#line 1956 "engines/hypno/grammar_arc.cpp"
break;
case 83: /* bline: WTOK NUM */
-#line 425 "engines/hypno/grammar_arc.y"
+#line 429 "engines/hypno/grammar_arc.y"
{
shoot->attackWeight = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1960 "engines/hypno/grammar_arc.cpp"
+#line 1964 "engines/hypno/grammar_arc.cpp"
break;
case 84: /* bline: DTOK NUM */
-#line 428 "engines/hypno/grammar_arc.y"
+#line 432 "engines/hypno/grammar_arc.y"
{
shoot->pointsToShoot = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
}
-#line 1969 "engines/hypno/grammar_arc.cpp"
+#line 1973 "engines/hypno/grammar_arc.cpp"
break;
case 85: /* bline: LTOK NUM NUM */
-#line 432 "engines/hypno/grammar_arc.y"
+#line 436 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1977 "engines/hypno/grammar_arc.cpp"
+#line 1981 "engines/hypno/grammar_arc.cpp"
break;
case 86: /* bline: LTOK NUM */
-#line 435 "engines/hypno/grammar_arc.y"
+#line 439 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "L %d", (yyvsp[0].i));
FrameInfo fi((yyvsp[0].i)-1, 0);
shoot->bodyFrames.push_back(fi);
}
-#line 1987 "engines/hypno/grammar_arc.cpp"
+#line 1991 "engines/hypno/grammar_arc.cpp"
break;
case 87: /* bline: MTOK NUM */
-#line 440 "engines/hypno/grammar_arc.y"
+#line 444 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i));
shoot->missedAnimation = (yyvsp[0].i);
}
-#line 1995 "engines/hypno/grammar_arc.cpp"
+#line 1999 "engines/hypno/grammar_arc.cpp"
break;
case 88: /* bline: KTOK NUM */
-#line 443 "engines/hypno/grammar_arc.y"
+#line 447 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "K %d", (yyvsp[0].i));
FrameInfo fi((yyvsp[0].i), 1);
shoot->explosionFrames.push_back(fi);
}
-#line 2004 "engines/hypno/grammar_arc.cpp"
+#line 2008 "engines/hypno/grammar_arc.cpp"
break;
case 89: /* bline: SNTOK FILENAME enc */
-#line 447 "engines/hypno/grammar_arc.y"
+#line 451 "engines/hypno/grammar_arc.y"
{
if (Common::String("S0") == (yyvsp[-2].s))
shoot->enemySound = (yyvsp[-1].s);
@@ -2014,36 +2018,36 @@ yyreduce:
shoot->hitSound = (yyvsp[-1].s);
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 2018 "engines/hypno/grammar_arc.cpp"
+#line 2022 "engines/hypno/grammar_arc.cpp"
break;
case 90: /* bline: GTOK */
-#line 456 "engines/hypno/grammar_arc.y"
+#line 460 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "G"); }
-#line 2024 "engines/hypno/grammar_arc.cpp"
+#line 2028 "engines/hypno/grammar_arc.cpp"
break;
case 91: /* bline: NTOK */
-#line 457 "engines/hypno/grammar_arc.y"
+#line 461 "engines/hypno/grammar_arc.y"
{
shoot->noEnemySound = true;
debugC(1, kHypnoDebugParser, "N"); }
-#line 2032 "engines/hypno/grammar_arc.cpp"
+#line 2036 "engines/hypno/grammar_arc.cpp"
break;
case 92: /* bline: ZTOK */
-#line 460 "engines/hypno/grammar_arc.y"
+#line 464 "engines/hypno/grammar_arc.y"
{
g_parsedArc->shoots.push_back(*shoot);
//delete shoot;
//shoot = nullptr;
debugC(1, kHypnoDebugParser, "Z");
}
-#line 2043 "engines/hypno/grammar_arc.cpp"
+#line 2047 "engines/hypno/grammar_arc.cpp"
break;
-#line 2047 "engines/hypno/grammar_arc.cpp"
+#line 2051 "engines/hypno/grammar_arc.cpp"
default: break;
}
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index bd5cbd1fc2f..8fae79690d8 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -102,7 +102,11 @@ hline: CTOK NUM {
debugC(1, kHypnoDebugParser, "M %s", $2);
g_parsedArc->maskVideo = $2;
}
- | UTOK NUM NUM NUM NUM { debugC(1, kHypnoDebugParser, "U %d %d %d %d", $2, $3, $4, $5); }
+ | UTOK NUM NUM NUM NUM {
+ debugC(1, kHypnoDebugParser, "U %d %d %d %d", $2, $3, $4, $5);
+ ScriptInfo si($2, $3, $4, $5);
+ g_parsedArc->script.push_back(si);
+ }
| VTOK NUM NUM { debugC(1, kHypnoDebugParser, "V %d %d", $2, $3); }
| VTOK RESTOK { debugC(1, kHypnoDebugParser, "V 320,200"); }
| OTOK NUM NUM {
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 7913002ee08..5afeca46eac 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -471,6 +471,12 @@ public:
Graphics::Surface _healthBar[6];
Graphics::Surface _ammoBar[6];
Graphics::Surface _portrait[6];
+
+ Script _currentScript;
+ ScriptMode _currentMode;
+ uint32 _currentActor;
+ uint32 _currentCursor;
+
};
} // End of namespace Hypno
Commit: 403ac8a1ff6c689f1307d04289fec264c23f76ae
https://github.com/scummvm/scummvm/commit/403ac8a1ff6c689f1307d04289fec264c23f76ae
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: missing derreference in runBeforeArcade in boyz
Changed paths:
engines/hypno/boyz/boyz.cpp
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index ddd7bf1b7c2..c94ac70c14d 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -64,7 +64,7 @@ void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
_playerFrameIdx = -1;
_currentScript = arc->script;
- ScriptInfo si = _currentScript.begin();
+ ScriptInfo si = *_currentScript.begin();
_currentActor = si.actor - 1;
_currentMode = si.mode;
_currentScript.pop_front();
Commit: ab56306b616ea21e1d097f152d6314ff57f9d7ab
https://github.com/scummvm/scummvm/commit/ab56306b616ea21e1d097f152d6314ff57f9d7ab
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: use a class variable instead of local variable to access the background video in arcade sequences
Changed paths:
engines/hypno/arcade.cpp
engines/hypno/hypno.cpp
engines/hypno/hypno.h
diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 03c39cf4dde..e78aa71b651 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -189,10 +189,10 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
_masks = nullptr;
Common::Point offset;
- MVideo background = MVideo(arc->backgroundVideo, offset, false, false, false);
+ _background = new MVideo(arc->backgroundVideo, offset, false, false, false);
drawCursorArcade(mousePos);
- playVideo(background);
+ playVideo(*_background);
if (!arc->maskVideo.empty()) {
_masks = new MVideo(arc->maskVideo, offset, false, false, false);
@@ -200,10 +200,10 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
_mask = _masks->decoder->decodeNextFrame();
}
- float rate = background.decoder->getFrameRate().toDouble();
+ float rate = _background->decoder->getFrameRate().toDouble();
if (rate < 10) {
debugC(1, kHypnoDebugArcade, "Used frame rate looks odd: %f, increasing x 10", rate);
- background.decoder->setRate(10.0);
+ _background->decoder->setRate(10.0);
}
Filename currentPalette = arc->backgroundPalette;
loadPalette(currentPalette);
@@ -227,7 +227,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
Common::Event event;
while (!shouldQuit()) {
- needsUpdate = background.decoder->needsUpdate();
+ needsUpdate = _background->decoder->needsUpdate();
while (g_system->getEventManager()->pollEvent(event)) {
mousePos = g_system->getEventManager()->getMousePos();
// Events
@@ -239,12 +239,12 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
case Common::EVENT_KEYDOWN:
if (event.kbd.keycode == Common::KEYCODE_c) {
- background.decoder->pauseVideo(true);
+ _background->decoder->pauseVideo(true);
showCredits();
loadPalette(currentPalette);
changeScreenMode("320x200");
- background.decoder->pauseVideo(false);
- updateScreen(background);
+ _background->decoder->pauseVideo(false);
+ updateScreen(*_background);
drawScreen();
} else if (event.kbd.keycode == Common::KEYCODE_k) { // Added for testing
_health = 0;
@@ -286,7 +286,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
}
offset.x = offset.x + 1;
needsUpdate = true;
- } else if (mousePos.x >= 300 && offset.x > 320 - background.decoder->getWidth()) {
+ } else if (mousePos.x >= 300 && offset.x > 320 - _background->decoder->getWidth()) {
for (Shoots::iterator it = _shoots.begin(); it != _shoots.end(); ++it) {
if (it->video && it->video->decoder)
it->video->position.x = it->video->position.x - 1;
@@ -294,7 +294,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
offset.x = offset.x - 1;
needsUpdate = true;
}
- background.position = offset;
+ _background->position = offset;
break;
default:
@@ -304,13 +304,13 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
if (needsUpdate) {
drawScreen();
- updateScreen(background);
+ updateScreen(*_background);
if (!arc->maskVideo.empty() && _masks->decoder->needsUpdate())
_mask = _masks->decoder->decodeNextFrame();
}
if (_health <= 0) {
- skipVideo(background);
+ skipVideo(*_background);
if (!arc->defeatNoEnergySecondVideo.empty() && transition) {
disableCursor();
MVideo video(arc->defeatNoEnergySecondVideo, Common::Point(0, 0), false, true, false);
@@ -327,9 +327,9 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
break;
}
- if (!arc->transitionVideos.empty() && background.decoder->getCurFrame() > (int)*arc->transitionTimes.begin()) {
+ if (!arc->transitionVideos.empty() && _background->decoder->getCurFrame() > (int)*arc->transitionTimes.begin()) {
transition = true;
- background.decoder->pauseVideo(true);
+ _background->decoder->pauseVideo(true);
Filename transitionVideo = *arc->transitionVideos.begin();
Filename transitionPalette = *arc->transitionPalettes.begin();
@@ -343,8 +343,8 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
currentPalette = transitionPalette;
loadPalette(currentPalette);
- background.decoder->pauseVideo(false);
- updateScreen(background);
+ _background->decoder->pauseVideo(false);
+ updateScreen(*_background);
drawScreen();
drawCursorArcade(mousePos);
@@ -355,7 +355,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
playSound(_music, 0, arc->musicRate); // restore music
}
- if (background.decoder && background.decoder->getCurFrame() >= int(segments[_segmentIdx].start + segments[_segmentIdx].size - 2)) {
+ if (_background->decoder && _background->decoder->getCurFrame() >= int(segments[_segmentIdx].start + segments[_segmentIdx].size - 2)) {
debugC(1, kHypnoDebugArcade, "Finished segment %d of type %x", _segmentIdx, segments[_segmentIdx].type);
// Clear shoots
@@ -372,13 +372,13 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
debugC(1, kHypnoDebugArcade, "Starting segment %d of type %x at %d", _segmentIdx, segments[_segmentIdx].type, segments[_segmentIdx].start);
if (!segments[_segmentIdx].end) { // If it is not the end segment
- background.decoder->forceSeekToFrame(segments[_segmentIdx].start);
+ _background->decoder->forceSeekToFrame(segments[_segmentIdx].start);
continue;
}
}
if (segments[_segmentIdx].end || _skipLevel) {
- skipVideo(background);
+ skipVideo(*_background);
// Objectives
if ((_objKillsRequired[_objIdx] > 0 || _objMissesAllowed[_objIdx] > 0) && !_skipLevel) {
if (_objKillsCount[_objIdx] < _objKillsRequired[_objIdx] || _objMissesCount[_objIdx] > _objMissesAllowed[_objIdx]) {
@@ -413,7 +413,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
if (_shootSequence.size() > 0) {
ShootInfo si = _shootSequence.front();
int idx = (int)segments[_segmentIdx].size * _segmentRepetition \
- + background.decoder->getCurFrame() \
+ + _background->decoder->getCurFrame() \
- (int)segments[_segmentIdx].start + 3;
//debug("%d %d", si.timestamp, idx);
if ((int)si.timestamp <= idx) {
@@ -479,7 +479,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
uint32 bodyLastFrame = it->bodyFrames[it->bodyFrames.size() - 1].lastFrame();
if (frame > 0 && frame >= (int)(bodyLastFrame - 3) && !it->destroyed) {
- missedTarget(it, arc, background);
+ missedTarget(it, arc, *_background);
incTargetsMissed();
// No need to pop attackFrames or explosionFrames
skipVideo(*it->video);
@@ -490,11 +490,11 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
updateScreen(*it->video);
}
} else if (!it->video && it->bodyFrames.size() > 0) {
- uint32 frame = background.decoder->getCurFrame();
+ 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) {
- missedTarget(it, arc, background);
+ missedTarget(it, arc, *_background);
shootsToRemove.push_back(i);
}
}
@@ -515,7 +515,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
if (needsUpdate) {
if (shootingPrimary || shootingSecondary) {
- shoot(mousePos, arc, background);
+ shoot(mousePos, arc, *_background);
drawShoot(mousePos);
shootingPrimary = false;
}
@@ -534,8 +534,12 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
delete it->video;
}
- if (background.decoder)
- skipVideo(background);
+ if (_background->decoder) {
+ skipVideo(*_background);
+ }
+
+ delete _background;
+ _background = nullptr;
if (_masks) {
skipVideo(*_masks);
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index fc5ce1eaffa..3f839aa689d 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), _lives(0),
_defaultCursor(""), _checkpoint(""),
_currentPlayerPosition(kPlayerLeft), _lastPlayerPosition(kPlayerLeft),
- //_obj1KillsCount(0), _obj1MissesCount(0),
+ _background(nullptr),
_masks(nullptr),
_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 5afeca46eac..e548e1c4af8 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -219,6 +219,7 @@ public:
// Arcade
Common::String _arcadeMode;
+ MVideo *_background;
uint32 _currentPlayerPosition;
uint32 _lastPlayerPosition;
virtual Common::Point computeTargetPosition(const Common::Point &mousePos);
Commit: fc3e7d18be0e910bea652f8681c6f250af471993
https://github.com/scummvm/scummvm/commit/fc3e7d18be0e910bea652f8681c6f250af471993
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: update actor, mode and cursor from the script in boyz
Changed paths:
engines/hypno/boyz/boyz.cpp
engines/hypno/hypno.h
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index c94ac70c14d..76802fd3dbf 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -77,11 +77,25 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
}
}
+void BoyzEngine::updateFromScript() {
+ if (_currentScript.size() > 0) {
+ ScriptInfo si = *_currentScript.begin();
+ //debug("%d %d %d", si.time, _background->decoder->getCurFrame(), si.actor);
+ if (int(si.time) <= _background->decoder->getCurFrame()) {
+ _currentActor = si.actor - 1;
+ _currentMode = si.mode;
+ _currentScript.pop_front();
+ }
+ }
+}
+
void BoyzEngine::drawPlayer() {
+ updateFromScript();
drawImage(_portrait[_currentActor], 0, 200 - _portrait[_currentActor].h, true);
}
void BoyzEngine::drawHealth() {
+ updateFromScript();
drawImage(_healthBar[_currentActor], 0, 0, true);
drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentActor].w, 0, true);
}
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index e548e1c4af8..20ef3822f67 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -473,6 +473,8 @@ public:
Graphics::Surface _ammoBar[6];
Graphics::Surface _portrait[6];
+ void updateFromScript();
+
Script _currentScript;
ScriptMode _currentMode;
uint32 _currentActor;
Commit: dccdeabaeff39d48bea193932a2b0289d71ca6a8
https://github.com/scummvm/scummvm/commit/dccdeabaeff39d48bea193932a2b0289d71ca6a8
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: improved parsing to support level c14 in boyz
Changed paths:
engines/hypno/boyz/boyz.cpp
engines/hypno/grammar_arc.cpp
engines/hypno/grammar_arc.y
engines/hypno/lexer_arc.cpp
engines/hypno/lexer_arc.l
engines/hypno/tokens_arc.h
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 76802fd3dbf..c74d042c359 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -38,7 +38,9 @@ void BoyzEngine::loadAssets() {
if (missions->listMembers(files) == 0)
error("Failed to load any files from missions.lib");
loadArcadeLevel("c11.mi_", "c12.mi_", "??", "");
- loadArcadeLevel("c12.mi_", "??", "??", "");
+ loadArcadeLevel("c12.mi_", "c14.mi_", "??", "");
+ //loadArcadeLevel("c13.mi_", "??", "??", "");
+ loadArcadeLevel("c14.mi_", "??", "??", "");
loadLib("sound/", "misc/sound.lib", true);
_nextLevel = "c11.mi_";
@@ -155,7 +157,10 @@ void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVide
}
void BoyzEngine::missedTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) {
- if (s->missedAnimation == uint32(-1)) {
+
+ if (s->missedAnimation == 0)
+ return;
+ else if (s->missedAnimation == uint32(-1)) {
uint32 last = background.decoder->getFrameCount()-1;
background.decoder->forceSeekToFrame(last);
_masks->decoder->forceSeekToFrame(last);
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index da2ea892085..bb9712af8e4 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -144,52 +144,55 @@ enum yysymbol_kind_t
YYSYMBOL_NUM = 12, /* NUM */
YYSYMBOL_BYTE = 13, /* BYTE */
YYSYMBOL_COMMENT = 14, /* COMMENT */
- YYSYMBOL_CTOK = 15, /* CTOK */
- YYSYMBOL_DTOK = 16, /* DTOK */
- YYSYMBOL_HTOK = 17, /* HTOK */
- YYSYMBOL_HETOK = 18, /* HETOK */
- YYSYMBOL_HLTOK = 19, /* HLTOK */
- YYSYMBOL_H12TOK = 20, /* H12TOK */
- YYSYMBOL_HUTOK = 21, /* HUTOK */
- YYSYMBOL_RETTOK = 22, /* RETTOK */
- YYSYMBOL_QTOK = 23, /* QTOK */
- YYSYMBOL_RESTOK = 24, /* RESTOK */
- YYSYMBOL_PTOK = 25, /* PTOK */
- YYSYMBOL_FTOK = 26, /* FTOK */
- YYSYMBOL_TTOK = 27, /* TTOK */
- YYSYMBOL_TPTOK = 28, /* TPTOK */
- YYSYMBOL_ATOK = 29, /* ATOK */
- YYSYMBOL_VTOK = 30, /* VTOK */
- YYSYMBOL_OTOK = 31, /* OTOK */
- YYSYMBOL_LTOK = 32, /* LTOK */
- YYSYMBOL_MTOK = 33, /* MTOK */
- YYSYMBOL_NTOK = 34, /* NTOK */
- YYSYMBOL_NSTOK = 35, /* NSTOK */
- YYSYMBOL_RTOK = 36, /* RTOK */
- YYSYMBOL_R01TOK = 37, /* R01TOK */
- YYSYMBOL_ITOK = 38, /* ITOK */
- YYSYMBOL_I1TOK = 39, /* I1TOK */
- YYSYMBOL_GTOK = 40, /* GTOK */
- YYSYMBOL_JTOK = 41, /* JTOK */
- YYSYMBOL_KTOK = 42, /* KTOK */
- YYSYMBOL_UTOK = 43, /* UTOK */
- YYSYMBOL_ZTOK = 44, /* ZTOK */
- YYSYMBOL_NONETOK = 45, /* NONETOK */
- YYSYMBOL_A0TOK = 46, /* A0TOK */
- YYSYMBOL_P0TOK = 47, /* P0TOK */
- YYSYMBOL_WTOK = 48, /* WTOK */
- YYSYMBOL_XTOK = 49, /* XTOK */
- YYSYMBOL_CB3TOK = 50, /* CB3TOK */
- YYSYMBOL_C02TOK = 51, /* C02TOK */
- YYSYMBOL_YYACCEPT = 52, /* $accept */
- YYSYMBOL_start = 53, /* start */
- YYSYMBOL_54_1 = 54, /* $@1 */
- YYSYMBOL_header = 55, /* header */
- YYSYMBOL_hline = 56, /* hline */
- YYSYMBOL_enc = 57, /* enc */
- YYSYMBOL_flag = 58, /* flag */
- YYSYMBOL_body = 59, /* body */
- YYSYMBOL_bline = 60 /* bline */
+ YYSYMBOL_AVTOK = 15, /* AVTOK */
+ YYSYMBOL_ABTOK = 16, /* ABTOK */
+ YYSYMBOL_CTOK = 17, /* CTOK */
+ YYSYMBOL_DTOK = 18, /* DTOK */
+ YYSYMBOL_HTOK = 19, /* HTOK */
+ YYSYMBOL_HETOK = 20, /* HETOK */
+ YYSYMBOL_HLTOK = 21, /* HLTOK */
+ YYSYMBOL_H12TOK = 22, /* H12TOK */
+ YYSYMBOL_HUTOK = 23, /* HUTOK */
+ YYSYMBOL_RETTOK = 24, /* RETTOK */
+ YYSYMBOL_QTOK = 25, /* QTOK */
+ YYSYMBOL_RESTOK = 26, /* RESTOK */
+ YYSYMBOL_PTOK = 27, /* PTOK */
+ YYSYMBOL_FTOK = 28, /* FTOK */
+ YYSYMBOL_TTOK = 29, /* TTOK */
+ YYSYMBOL_TPTOK = 30, /* TPTOK */
+ YYSYMBOL_ATOK = 31, /* ATOK */
+ YYSYMBOL_VTOK = 32, /* VTOK */
+ YYSYMBOL_OTOK = 33, /* OTOK */
+ YYSYMBOL_LTOK = 34, /* LTOK */
+ YYSYMBOL_MTOK = 35, /* MTOK */
+ YYSYMBOL_NTOK = 36, /* NTOK */
+ YYSYMBOL_NSTOK = 37, /* NSTOK */
+ YYSYMBOL_RTOK = 38, /* RTOK */
+ YYSYMBOL_R01TOK = 39, /* R01TOK */
+ YYSYMBOL_ITOK = 40, /* ITOK */
+ YYSYMBOL_I1TOK = 41, /* I1TOK */
+ YYSYMBOL_GTOK = 42, /* GTOK */
+ YYSYMBOL_JTOK = 43, /* JTOK */
+ YYSYMBOL_J0TOK = 44, /* J0TOK */
+ YYSYMBOL_KTOK = 45, /* KTOK */
+ YYSYMBOL_UTOK = 46, /* UTOK */
+ YYSYMBOL_ZTOK = 47, /* ZTOK */
+ YYSYMBOL_NONETOK = 48, /* NONETOK */
+ YYSYMBOL_A0TOK = 49, /* A0TOK */
+ YYSYMBOL_P0TOK = 50, /* P0TOK */
+ YYSYMBOL_WTOK = 51, /* WTOK */
+ YYSYMBOL_XTOK = 52, /* XTOK */
+ YYSYMBOL_CB3TOK = 53, /* CB3TOK */
+ YYSYMBOL_C02TOK = 54, /* C02TOK */
+ YYSYMBOL_YYACCEPT = 55, /* $accept */
+ YYSYMBOL_start = 56, /* start */
+ YYSYMBOL_57_1 = 57, /* $@1 */
+ YYSYMBOL_header = 58, /* header */
+ YYSYMBOL_hline = 59, /* hline */
+ YYSYMBOL_enc = 60, /* enc */
+ YYSYMBOL_flag = 61, /* flag */
+ YYSYMBOL_body = 62, /* body */
+ YYSYMBOL_bline = 63 /* bline */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -517,19 +520,19 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 6
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 178
+#define YYLAST 186
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 52
+#define YYNTOKENS 55
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 9
/* YYNRULES -- Number of rules. */
-#define YYNRULES 92
+#define YYNRULES 99
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 187
+#define YYNSTATES 196
/* YYMAXUTOK -- Last valid token kind. */
-#define YYMAXUTOK 306
+#define YYMAXUTOK 309
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -573,7 +576,7 @@ static const yytype_int8 yytranslate[] =
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54
};
#if HYPNO_ARC_DEBUG
@@ -585,11 +588,11 @@ static const yytype_int16 yyrline[] =
136, 142, 148, 149, 153, 157, 160, 164, 167, 168,
194, 216, 222, 227, 232, 238, 243, 248, 253, 258,
263, 270, 271, 274, 275, 278, 279, 280, 283, 291,
- 296, 301, 305, 309, 313, 317, 321, 325, 329, 333,
- 337, 341, 345, 349, 353, 357, 361, 365, 369, 373,
- 377, 381, 385, 388, 392, 397, 401, 406, 411, 415,
- 421, 425, 428, 429, 432, 436, 439, 444, 447, 451,
- 460, 461, 464
+ 294, 297, 300, 305, 310, 314, 318, 322, 326, 330,
+ 334, 338, 342, 346, 350, 354, 358, 362, 366, 370,
+ 374, 378, 382, 386, 390, 394, 397, 401, 406, 410,
+ 415, 420, 424, 430, 434, 437, 438, 441, 445, 448,
+ 453, 456, 460, 464, 473, 474, 477, 480, 483, 486
};
#endif
@@ -607,13 +610,13 @@ static const char *const yytname[] =
{
"\"end of file\"", "error", "\"invalid token\"", "NAME", "FILENAME",
"BNTOK", "SNTOK", "KNTOK", "YXTOK", "FNTOK", "ENCTOK", "ONTOK", "NUM",
- "BYTE", "COMMENT", "CTOK", "DTOK", "HTOK", "HETOK", "HLTOK", "H12TOK",
- "HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK", "FTOK", "TTOK", "TPTOK",
- "ATOK", "VTOK", "OTOK", "LTOK", "MTOK", "NTOK", "NSTOK", "RTOK",
- "R01TOK", "ITOK", "I1TOK", "GTOK", "JTOK", "KTOK", "UTOK", "ZTOK",
- "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK", "C02TOK",
- "$accept", "start", "$@1", "header", "hline", "enc", "flag", "body",
- "bline", YY_NULLPTR
+ "BYTE", "COMMENT", "AVTOK", "ABTOK", "CTOK", "DTOK", "HTOK", "HETOK",
+ "HLTOK", "H12TOK", "HUTOK", "RETTOK", "QTOK", "RESTOK", "PTOK", "FTOK",
+ "TTOK", "TPTOK", "ATOK", "VTOK", "OTOK", "LTOK", "MTOK", "NTOK", "NSTOK",
+ "RTOK", "R01TOK", "ITOK", "I1TOK", "GTOK", "JTOK", "J0TOK", "KTOK",
+ "UTOK", "ZTOK", "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK",
+ "C02TOK", "$accept", "start", "$@1", "header", "hline", "enc", "flag",
+ "body", "bline", YY_NULLPTR
};
static const char *
@@ -623,7 +626,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
}
#endif
-#define YYPACT_NINF (-109)
+#define YYPACT_NINF (-111)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -637,25 +640,26 @@ yysymbol_name (yysymbol_kind_t yysymbol)
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 0, -109, 0, 7, 81, -109, -109, 5, 10, 3,
- 4, 6, 110, 21, 27, 36, 38, 81, 8, 11,
- 40, -1, 15, 41, 26, 43, 50, 52, 56, 57,
- 58, 59, 54, 20, 81, -109, 60, 65, -109, -109,
- 67, 69, 76, 77, 78, 79, 82, 83, 93, 106,
- -109, 109, 113, -109, 114, 115, 116, 117, 118, -109,
- 119, -109, -109, -109, -109, -109, -109, 120, 71, -109,
- -109, 130, -109, 122, 124, 125, 126, 128, 129, 131,
- 132, 133, 135, -109, -109, -109, -109, 68, -109, -109,
- -109, 136, -5, -109, -109, -109, -109, -109, -109, -109,
- -109, -109, -109, -109, -109, -109, 137, 138, 147, 140,
- 1, 141, 142, 143, -5, 152, 145, 146, 148, 149,
- -109, 150, 151, 42, -109, 153, 154, -109, 155, 156,
- 157, 73, -5, -109, 158, 60, 159, -109, -109, -109,
- -109, -109, -109, -109, -109, 160, 161, -109, 162, 163,
- -109, -109, -109, -109, -109, -109, -109, -109, -109, -109,
- -109, -109, -109, -109, -109, -109, -109, -109, -109, -109,
- -109, -109, -109, 164, 165, -109, -109, -109, -109, -109,
- -109, -109, -109, -109, -109, -109, -109
+ 8, -111, 8, 7, 87, -111, -111, 5, 11, 6,
+ 9, 29, 118, 4, 30, 39, 40, 87, 42, 43,
+ 44, -1, 16, 46, 10, 47, 53, 56, 57, 61,
+ 62, 63, 59, 21, 87, -111, 65, 70, -111, -111,
+ 72, 74, 77, 82, 83, 84, 85, 88, 89, 90,
+ -111, 91, 101, -111, 114, 117, 120, 122, 123, -111,
+ 124, -111, -111, -111, -111, -111, -111, 125, 75, -111,
+ -111, 66, -111, 126, 127, 128, 129, 130, 131, 132,
+ 134, 135, 136, -111, -111, -111, -111, 73, -111, -111,
+ -111, 138, -5, -111, -111, -111, -111, -111, -111, -111,
+ -111, -111, -111, -111, -111, -111, 139, 141, 150, 143,
+ 1, 145, 146, 147, 148, 149, -5, 158, 151, 152,
+ 153, 154, 155, -111, 156, 157, 45, -111, 159, 160,
+ 161, -111, 162, 163, 164, 78, -5, -111, 165, 65,
+ 166, -111, -111, -111, -111, -111, -111, -111, -111, -111,
+ -111, -111, 167, 168, -111, 169, 170, -111, -111, -111,
+ -111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
+ -111, -111, -111, -111, -111, -111, -111, -111, -111, -111,
+ 171, 172, 173, -111, -111, -111, -111, -111, -111, -111,
+ -111, -111, -111, -111, -111, -111
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -674,26 +678,27 @@ static const yytype_int8 yydefact[] =
0, 0, 0, 28, 11, 21, 22, 0, 12, 15,
17, 0, 47, 43, 30, 34, 40, 37, 36, 38,
35, 31, 32, 39, 33, 20, 0, 0, 0, 0,
- 0, 0, 0, 0, 47, 0, 0, 0, 0, 0,
- 91, 0, 0, 0, 90, 0, 0, 92, 0, 0,
- 0, 0, 47, 14, 0, 42, 0, 48, 49, 80,
- 84, 81, 46, 50, 82, 0, 86, 87, 0, 0,
- 51, 52, 67, 54, 55, 58, 65, 64, 56, 68,
- 53, 63, 69, 70, 62, 66, 59, 57, 60, 61,
- 71, 72, 88, 0, 0, 83, 3, 45, 76, 89,
- 77, 79, 85, 74, 75, 73, 78
+ 0, 0, 0, 0, 0, 0, 47, 0, 96, 0,
+ 0, 0, 97, 98, 0, 0, 0, 94, 0, 0,
+ 0, 99, 0, 0, 0, 0, 47, 14, 0, 42,
+ 0, 48, 52, 49, 50, 83, 87, 84, 46, 53,
+ 95, 85, 0, 89, 90, 0, 0, 54, 55, 70,
+ 57, 58, 61, 68, 67, 59, 71, 56, 66, 72,
+ 73, 65, 69, 62, 60, 63, 64, 74, 75, 51,
+ 91, 0, 0, 86, 3, 45, 79, 93, 80, 82,
+ 88, 77, 78, 92, 76, 81
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -109, 176, -109, -4, -109, 24, -109, -108, -109
+ -111, 184, -111, -9, -111, 31, -111, -110, -111
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_uint8 yydefgoto[] =
{
- 0, 3, 4, 33, 34, 71, 94, 131, 132
+ 0, 3, 4, 33, 34, 71, 94, 135, 136
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -701,86 +706,89 @@ static const yytype_uint8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
- 107, 108, 109, 54, 110, 137, 142, 6, 1, 35,
- 111, 112, 113, 50, 36, 37, 38, 114, 39, 56,
- 51, 115, 2, 52, 177, 116, 117, 118, 119, 120,
- 69, 121, 122, 123, 46, 124, 125, 126, 58, 127,
- 47, 128, 129, 130, 55, 150, 138, 151, 152, 48,
- 59, 49, 53, 57, 61, 60, 62, 153, 154, 155,
- 63, 64, 65, 66, 68, 156, 67, 157, 158, 159,
- 70, 160, 105, 161, 162, 163, 164, 72, 165, 73,
- 166, 74, 167, 168, 169, 170, 7, 8, 75, 76,
- 77, 78, 9, 92, 79, 80, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 81, 19, 20, 21, 22,
- 23, 24, 25, 40, 26, 27, 28, 29, 82, 30,
- 31, 83, 176, 41, 32, 84, 85, 86, 87, 88,
- 89, 90, 91, 93, 95, 42, 96, 97, 98, 43,
- 99, 100, 44, 101, 102, 103, 45, 104, 106, 133,
- 134, 135, 136, 139, 140, 141, 143, 144, 145, 179,
- 146, 147, 148, 149, 0, 171, 172, 173, 174, 175,
- 178, 180, 181, 182, 183, 184, 185, 186, 5
+ 107, 108, 109, 54, 110, 141, 148, 6, 50, 35,
+ 111, 112, 113, 114, 115, 36, 1, 46, 37, 116,
+ 56, 38, 58, 117, 118, 69, 185, 119, 120, 121,
+ 122, 123, 2, 124, 125, 126, 59, 127, 128, 129,
+ 130, 39, 131, 47, 132, 133, 134, 55, 157, 142,
+ 158, 159, 48, 49, 51, 52, 53, 61, 57, 60,
+ 62, 63, 160, 161, 162, 64, 65, 66, 68, 93,
+ 163, 67, 164, 165, 166, 70, 167, 105, 168, 169,
+ 170, 171, 72, 172, 73, 173, 74, 174, 175, 75,
+ 176, 177, 7, 8, 76, 77, 78, 79, 9, 92,
+ 80, 81, 82, 83, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 84, 19, 20, 21, 22, 23, 24,
+ 25, 40, 26, 27, 28, 29, 85, 30, 31, 86,
+ 184, 41, 87, 32, 88, 89, 90, 91, 95, 96,
+ 97, 98, 99, 100, 101, 42, 102, 103, 104, 43,
+ 106, 137, 44, 138, 139, 140, 45, 143, 144, 145,
+ 146, 147, 149, 150, 151, 152, 153, 154, 155, 156,
+ 187, 178, 179, 180, 181, 182, 183, 186, 188, 189,
+ 190, 191, 192, 193, 194, 195, 5
};
-static const yytype_int16 yycheck[] =
+static const yytype_uint8 yycheck[] =
{
- 5, 6, 7, 4, 9, 4, 114, 0, 8, 4,
- 15, 16, 17, 17, 4, 12, 12, 22, 12, 4,
- 12, 26, 22, 12, 132, 30, 31, 32, 33, 34,
- 34, 36, 37, 38, 13, 40, 41, 42, 12, 44,
- 13, 46, 47, 48, 45, 3, 45, 5, 6, 13,
- 24, 13, 12, 12, 4, 12, 4, 15, 16, 17,
- 4, 4, 4, 4, 44, 23, 12, 25, 26, 27,
- 10, 29, 4, 31, 32, 33, 34, 12, 36, 12,
- 38, 12, 40, 41, 42, 43, 5, 6, 12, 12,
- 12, 12, 11, 22, 12, 12, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 12, 25, 26, 27, 28,
- 29, 30, 31, 3, 33, 34, 35, 36, 12, 38,
- 39, 12, 49, 13, 43, 12, 12, 12, 12, 12,
- 12, 12, 12, 3, 12, 25, 12, 12, 12, 29,
- 12, 12, 32, 12, 12, 12, 36, 12, 12, 12,
- 12, 4, 12, 12, 12, 12, 4, 12, 12, 135,
- 12, 12, 12, 12, -1, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 2
+ 5, 6, 7, 4, 9, 4, 116, 0, 17, 4,
+ 15, 16, 17, 18, 19, 4, 8, 13, 12, 24,
+ 4, 12, 12, 28, 29, 34, 136, 32, 33, 34,
+ 35, 36, 24, 38, 39, 40, 26, 42, 43, 44,
+ 45, 12, 47, 13, 49, 50, 51, 48, 3, 48,
+ 5, 6, 13, 13, 12, 12, 12, 4, 12, 12,
+ 4, 4, 17, 18, 19, 4, 4, 4, 47, 3,
+ 25, 12, 27, 28, 29, 10, 31, 4, 33, 34,
+ 35, 36, 12, 38, 12, 40, 12, 42, 43, 12,
+ 45, 46, 5, 6, 12, 12, 12, 12, 11, 24,
+ 12, 12, 12, 12, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 12, 27, 28, 29, 30, 31, 32,
+ 33, 3, 35, 36, 37, 38, 12, 40, 41, 12,
+ 52, 13, 12, 46, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 27, 12, 12, 12, 31,
+ 12, 12, 34, 12, 4, 12, 38, 12, 12, 12,
+ 12, 12, 4, 12, 12, 12, 12, 12, 12, 12,
+ 139, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 2
};
/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
state STATE-NUM. */
static const yytype_int8 yystos[] =
{
- 0, 8, 22, 53, 54, 53, 0, 5, 6, 11,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 25,
- 26, 27, 28, 29, 30, 31, 33, 34, 35, 36,
- 38, 39, 43, 55, 56, 4, 4, 12, 12, 12,
- 3, 13, 25, 29, 32, 36, 13, 13, 13, 13,
- 55, 12, 12, 12, 4, 45, 4, 12, 12, 24,
- 12, 4, 4, 4, 4, 4, 4, 12, 44, 55,
- 10, 57, 12, 12, 12, 12, 12, 12, 12, 12,
+ 0, 8, 24, 56, 57, 56, 0, 5, 6, 11,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 27,
+ 28, 29, 30, 31, 32, 33, 35, 36, 37, 38,
+ 40, 41, 46, 58, 59, 4, 4, 12, 12, 12,
+ 3, 13, 27, 31, 34, 38, 13, 13, 13, 13,
+ 58, 12, 12, 12, 4, 48, 4, 12, 12, 26,
+ 12, 4, 4, 4, 4, 4, 4, 12, 47, 58,
+ 10, 60, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 22, 3, 58, 12, 12, 12, 12, 12,
+ 12, 12, 24, 3, 61, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 4, 12, 5, 6, 7,
- 9, 15, 16, 17, 22, 26, 30, 31, 32, 33,
- 34, 36, 37, 38, 40, 41, 42, 44, 46, 47,
- 48, 59, 60, 12, 12, 4, 12, 4, 45, 12,
- 12, 12, 59, 4, 12, 12, 12, 12, 12, 12,
- 3, 5, 6, 15, 16, 17, 23, 25, 26, 27,
- 29, 31, 32, 33, 34, 36, 38, 40, 41, 42,
- 43, 12, 12, 12, 12, 12, 49, 59, 12, 57,
- 12, 12, 12, 12, 12, 12, 12
+ 9, 15, 16, 17, 18, 19, 24, 28, 29, 32,
+ 33, 34, 35, 36, 38, 39, 40, 42, 43, 44,
+ 45, 47, 49, 50, 51, 62, 63, 12, 12, 4,
+ 12, 4, 48, 12, 12, 12, 12, 12, 62, 4,
+ 12, 12, 12, 12, 12, 12, 12, 3, 5, 6,
+ 17, 18, 19, 25, 27, 28, 29, 31, 33, 34,
+ 35, 36, 38, 40, 42, 43, 45, 46, 12, 12,
+ 12, 12, 12, 12, 52, 62, 12, 60, 12, 12,
+ 12, 12, 12, 12, 12, 12
};
/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
static const yytype_int8 yyr1[] =
{
- 0, 52, 54, 53, 53, 55, 55, 55, 56, 56,
- 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 57, 57, 58, 58, 59, 59, 59, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60
+ 0, 55, 57, 56, 56, 58, 58, 58, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 60, 60, 61, 61, 62, 62, 62, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63
};
/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
@@ -793,9 +801,9 @@ static const yytype_int8 yyr2[] =
4, 1, 0, 1, 0, 2, 2, 0, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
- 2, 2, 2, 2, 2, 3, 2, 2, 2, 3,
- 1, 1, 1
+ 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
+ 3, 3, 3, 2, 2, 2, 2, 2, 3, 2,
+ 2, 2, 3, 3, 1, 2, 1, 1, 1, 1
};
@@ -1261,7 +1269,7 @@ yyreduce:
case 2: /* $@1: %empty */
#line 78 "engines/hypno/grammar_arc.y"
{ g_parsedArc->mode = (yyvsp[0].s); }
-#line 1265 "engines/hypno/grammar_arc.cpp"
+#line 1273 "engines/hypno/grammar_arc.cpp"
break;
case 8: /* hline: CTOK NUM */
@@ -1270,7 +1278,7 @@ yyreduce:
g_parsedArc->id = (yyvsp[0].i);
HYPNO_ARC_default_sound_rate = 0;
debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1274 "engines/hypno/grammar_arc.cpp"
+#line 1282 "engines/hypno/grammar_arc.cpp"
break;
case 9: /* hline: FTOK NUM */
@@ -1279,7 +1287,7 @@ yyreduce:
HYPNO_ARC_default_sound_rate = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i));
}
-#line 1283 "engines/hypno/grammar_arc.cpp"
+#line 1291 "engines/hypno/grammar_arc.cpp"
break;
case 10: /* hline: DTOK NUM */
@@ -1288,19 +1296,19 @@ yyreduce:
g_parsedArc->frameDelay = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
}
-#line 1292 "engines/hypno/grammar_arc.cpp"
+#line 1300 "engines/hypno/grammar_arc.cpp"
break;
case 11: /* hline: PTOK NUM NUM */
#line 99 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1298 "engines/hypno/grammar_arc.cpp"
+#line 1306 "engines/hypno/grammar_arc.cpp"
break;
case 12: /* hline: ATOK NUM NUM */
#line 100 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1304 "engines/hypno/grammar_arc.cpp"
+#line 1312 "engines/hypno/grammar_arc.cpp"
break;
case 13: /* hline: MTOK FILENAME */
@@ -1309,7 +1317,7 @@ yyreduce:
debugC(1, kHypnoDebugParser, "M %s", (yyvsp[0].s));
g_parsedArc->maskVideo = (yyvsp[0].s);
}
-#line 1313 "engines/hypno/grammar_arc.cpp"
+#line 1321 "engines/hypno/grammar_arc.cpp"
break;
case 14: /* hline: UTOK NUM NUM NUM NUM */
@@ -1319,19 +1327,19 @@ yyreduce:
ScriptInfo si((yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
g_parsedArc->script.push_back(si);
}
-#line 1323 "engines/hypno/grammar_arc.cpp"
+#line 1331 "engines/hypno/grammar_arc.cpp"
break;
case 15: /* hline: VTOK NUM NUM */
#line 110 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1329 "engines/hypno/grammar_arc.cpp"
+#line 1337 "engines/hypno/grammar_arc.cpp"
break;
case 16: /* hline: VTOK RESTOK */
#line 111 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V 320,200"); }
-#line 1335 "engines/hypno/grammar_arc.cpp"
+#line 1343 "engines/hypno/grammar_arc.cpp"
break;
case 17: /* hline: OTOK NUM NUM */
@@ -1341,7 +1349,7 @@ yyreduce:
g_parsedArc->objMissesAllowed[0] = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1345 "engines/hypno/grammar_arc.cpp"
+#line 1353 "engines/hypno/grammar_arc.cpp"
break;
case 18: /* hline: ONTOK NUM NUM */
@@ -1356,7 +1364,7 @@ yyreduce:
} else
error("Invalid objective: '%s'", (yyvsp[-2].s));
debugC(1, kHypnoDebugParser, "ON %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1360 "engines/hypno/grammar_arc.cpp"
+#line 1368 "engines/hypno/grammar_arc.cpp"
break;
case 19: /* hline: ONTOK NUM */
@@ -1370,7 +1378,7 @@ yyreduce:
error("Invalid objective: '%s'", (yyvsp[-1].s));
debugC(1, kHypnoDebugParser, "ON %d", (yyvsp[0].i));
}
-#line 1374 "engines/hypno/grammar_arc.cpp"
+#line 1382 "engines/hypno/grammar_arc.cpp"
break;
case 20: /* hline: TPTOK FILENAME NUM FILENAME */
@@ -1381,7 +1389,7 @@ yyreduce:
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 1385 "engines/hypno/grammar_arc.cpp"
+#line 1393 "engines/hypno/grammar_arc.cpp"
break;
case 21: /* hline: TTOK FILENAME NUM */
@@ -1392,13 +1400,13 @@ yyreduce:
g_parsedArc->transitionPalettes.push_back("");
debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i));
}
-#line 1396 "engines/hypno/grammar_arc.cpp"
+#line 1404 "engines/hypno/grammar_arc.cpp"
break;
case 22: /* hline: TTOK NONETOK NUM */
#line 148 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1402 "engines/hypno/grammar_arc.cpp"
+#line 1410 "engines/hypno/grammar_arc.cpp"
break;
case 23: /* hline: NTOK FILENAME */
@@ -1407,7 +1415,7 @@ yyreduce:
g_parsedArc->backgroundVideo = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
}
-#line 1411 "engines/hypno/grammar_arc.cpp"
+#line 1419 "engines/hypno/grammar_arc.cpp"
break;
case 24: /* hline: NSTOK FILENAME */
@@ -1416,7 +1424,7 @@ yyreduce:
g_parsedArc->backgroundVideo = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N* %s", (yyvsp[0].s));
}
-#line 1420 "engines/hypno/grammar_arc.cpp"
+#line 1428 "engines/hypno/grammar_arc.cpp"
break;
case 25: /* hline: RTOK FILENAME */
@@ -1424,7 +1432,7 @@ yyreduce:
{
g_parsedArc->backgroundPalette = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1428 "engines/hypno/grammar_arc.cpp"
+#line 1436 "engines/hypno/grammar_arc.cpp"
break;
case 26: /* hline: ITOK FILENAME */
@@ -1433,7 +1441,7 @@ yyreduce:
g_parsedArc->player = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1437 "engines/hypno/grammar_arc.cpp"
+#line 1445 "engines/hypno/grammar_arc.cpp"
break;
case 27: /* hline: I1TOK FILENAME */
@@ -1441,13 +1449,13 @@ yyreduce:
{
debugC(1, kHypnoDebugParser, "I1 %s", (yyvsp[0].s));
}
-#line 1445 "engines/hypno/grammar_arc.cpp"
+#line 1453 "engines/hypno/grammar_arc.cpp"
break;
case 28: /* hline: QTOK NUM NUM */
#line 167 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1451 "engines/hypno/grammar_arc.cpp"
+#line 1459 "engines/hypno/grammar_arc.cpp"
break;
case 29: /* hline: BNTOK FILENAME */
@@ -1478,7 +1486,7 @@ yyreduce:
debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
}
-#line 1482 "engines/hypno/grammar_arc.cpp"
+#line 1490 "engines/hypno/grammar_arc.cpp"
break;
case 30: /* hline: SNTOK FILENAME enc flag */
@@ -1505,7 +1513,7 @@ yyreduce:
}
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-2].s));
}
-#line 1509 "engines/hypno/grammar_arc.cpp"
+#line 1517 "engines/hypno/grammar_arc.cpp"
break;
case 31: /* hline: HETOK BYTE NUM NUM */
@@ -1516,7 +1524,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "HE %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1520 "engines/hypno/grammar_arc.cpp"
+#line 1528 "engines/hypno/grammar_arc.cpp"
break;
case 32: /* hline: HLTOK BYTE NUM NUM */
@@ -1526,7 +1534,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "HL %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1530 "engines/hypno/grammar_arc.cpp"
+#line 1538 "engines/hypno/grammar_arc.cpp"
break;
case 33: /* hline: HUTOK BYTE NUM NUM */
@@ -1536,7 +1544,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "HU %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1540 "engines/hypno/grammar_arc.cpp"
+#line 1548 "engines/hypno/grammar_arc.cpp"
break;
case 34: /* hline: HTOK NAME NUM NUM */
@@ -1547,7 +1555,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "H %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1551 "engines/hypno/grammar_arc.cpp"
+#line 1559 "engines/hypno/grammar_arc.cpp"
break;
case 35: /* hline: HTOK RTOK NUM NUM */
@@ -1557,7 +1565,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "H R %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1561 "engines/hypno/grammar_arc.cpp"
+#line 1569 "engines/hypno/grammar_arc.cpp"
break;
case 36: /* hline: HTOK ATOK NUM NUM */
@@ -1567,7 +1575,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "H A %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1571 "engines/hypno/grammar_arc.cpp"
+#line 1579 "engines/hypno/grammar_arc.cpp"
break;
case 37: /* hline: HTOK PTOK NUM NUM */
@@ -1577,7 +1585,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1581 "engines/hypno/grammar_arc.cpp"
+#line 1589 "engines/hypno/grammar_arc.cpp"
break;
case 38: /* hline: HTOK LTOK NUM NUM */
@@ -1587,7 +1595,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "H P %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1591 "engines/hypno/grammar_arc.cpp"
+#line 1599 "engines/hypno/grammar_arc.cpp"
break;
case 39: /* hline: H12TOK BYTE NUM NUM */
@@ -1597,7 +1605,7 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "HN %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1601 "engines/hypno/grammar_arc.cpp"
+#line 1609 "engines/hypno/grammar_arc.cpp"
break;
case 40: /* hline: HTOK BYTE NUM NUM */
@@ -1607,31 +1615,31 @@ yyreduce:
g_parsedArc->segments.push_back(segment);
debugC(1, kHypnoDebugParser, "H %x %d %d", (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1611 "engines/hypno/grammar_arc.cpp"
+#line 1619 "engines/hypno/grammar_arc.cpp"
break;
case 41: /* enc: ENCTOK */
#line 270 "engines/hypno/grammar_arc.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1617 "engines/hypno/grammar_arc.cpp"
+#line 1625 "engines/hypno/grammar_arc.cpp"
break;
case 42: /* enc: %empty */
#line 271 "engines/hypno/grammar_arc.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1623 "engines/hypno/grammar_arc.cpp"
+#line 1631 "engines/hypno/grammar_arc.cpp"
break;
case 43: /* flag: NAME */
#line 274 "engines/hypno/grammar_arc.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1629 "engines/hypno/grammar_arc.cpp"
+#line 1637 "engines/hypno/grammar_arc.cpp"
break;
case 44: /* flag: %empty */
#line 275 "engines/hypno/grammar_arc.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1635 "engines/hypno/grammar_arc.cpp"
+#line 1643 "engines/hypno/grammar_arc.cpp"
break;
case 48: /* bline: FNTOK FILENAME */
@@ -1644,371 +1652,404 @@ yyreduce:
shoot->explosionAnimation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1648 "engines/hypno/grammar_arc.cpp"
+#line 1656 "engines/hypno/grammar_arc.cpp"
break;
- case 49: /* bline: FNTOK NONETOK */
+ case 49: /* bline: AVTOK NUM */
#line 291 "engines/hypno/grammar_arc.y"
+ {
+ debugC(1, kHypnoDebugParser, "AV %d", (yyvsp[0].i));
+ }
+#line 1664 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 50: /* bline: ABTOK NUM */
+#line 294 "engines/hypno/grammar_arc.y"
+ {
+ debugC(1, kHypnoDebugParser, "AB %d", (yyvsp[0].i));
+ }
+#line 1672 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 51: /* bline: J0TOK NUM */
+#line 297 "engines/hypno/grammar_arc.y"
+ {
+ debugC(1, kHypnoDebugParser, "J0 %d", (yyvsp[0].i));
+ }
+#line 1680 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 52: /* bline: FNTOK NONETOK */
+#line 300 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
shoot->animation = "NONE";
debugC(1, kHypnoDebugParser, "FN NONE");
}
-#line 1658 "engines/hypno/grammar_arc.cpp"
+#line 1690 "engines/hypno/grammar_arc.cpp"
break;
- case 50: /* bline: FTOK FILENAME */
-#line 296 "engines/hypno/grammar_arc.y"
+ case 53: /* bline: FTOK FILENAME */
+#line 305 "engines/hypno/grammar_arc.y"
{
shoot = new Shoot();
shoot->animation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1668 "engines/hypno/grammar_arc.cpp"
+#line 1700 "engines/hypno/grammar_arc.cpp"
break;
- case 51: /* bline: ITOK NAME */
-#line 301 "engines/hypno/grammar_arc.y"
+ case 54: /* bline: ITOK NAME */
+#line 310 "engines/hypno/grammar_arc.y"
{
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1677 "engines/hypno/grammar_arc.cpp"
+#line 1709 "engines/hypno/grammar_arc.cpp"
break;
- case 52: /* bline: ITOK BNTOK */
-#line 305 "engines/hypno/grammar_arc.y"
+ case 55: /* bline: ITOK BNTOK */
+#line 314 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == B1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1686 "engines/hypno/grammar_arc.cpp"
+#line 1718 "engines/hypno/grammar_arc.cpp"
break;
- case 53: /* bline: ITOK ATOK */
-#line 309 "engines/hypno/grammar_arc.y"
+ case 56: /* bline: ITOK ATOK */
+#line 318 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == A
shoot->name = "A";
debugC(1, kHypnoDebugParser, "I A");
}
-#line 1695 "engines/hypno/grammar_arc.cpp"
+#line 1727 "engines/hypno/grammar_arc.cpp"
break;
- case 54: /* bline: ITOK CTOK */
-#line 313 "engines/hypno/grammar_arc.y"
+ case 57: /* bline: ITOK CTOK */
+#line 322 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == C
shoot->name = "C";
debugC(1, kHypnoDebugParser, "I C");
}
-#line 1704 "engines/hypno/grammar_arc.cpp"
+#line 1736 "engines/hypno/grammar_arc.cpp"
break;
- case 55: /* bline: ITOK DTOK */
-#line 317 "engines/hypno/grammar_arc.y"
+ case 58: /* bline: ITOK DTOK */
+#line 326 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == D
shoot->name = "D";
debugC(1, kHypnoDebugParser, "I D");
}
-#line 1713 "engines/hypno/grammar_arc.cpp"
+#line 1745 "engines/hypno/grammar_arc.cpp"
break;
- case 56: /* bline: ITOK FTOK */
-#line 321 "engines/hypno/grammar_arc.y"
+ case 59: /* bline: ITOK FTOK */
+#line 330 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == F
shoot->name = "F";
debugC(1, kHypnoDebugParser, "I F");
}
-#line 1722 "engines/hypno/grammar_arc.cpp"
+#line 1754 "engines/hypno/grammar_arc.cpp"
break;
- case 57: /* bline: ITOK GTOK */
-#line 325 "engines/hypno/grammar_arc.y"
+ case 60: /* bline: ITOK GTOK */
+#line 334 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == G
shoot->name = "G";
debugC(1, kHypnoDebugParser, "I G");
}
-#line 1731 "engines/hypno/grammar_arc.cpp"
+#line 1763 "engines/hypno/grammar_arc.cpp"
break;
- case 58: /* bline: ITOK HTOK */
-#line 329 "engines/hypno/grammar_arc.y"
+ case 61: /* bline: ITOK HTOK */
+#line 338 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == H
shoot->name = "H";
debugC(1, kHypnoDebugParser, "I H");
}
-#line 1740 "engines/hypno/grammar_arc.cpp"
+#line 1772 "engines/hypno/grammar_arc.cpp"
break;
- case 59: /* bline: ITOK ITOK */
-#line 333 "engines/hypno/grammar_arc.y"
+ case 62: /* bline: ITOK ITOK */
+#line 342 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == I
shoot->name = "I";
debugC(1, kHypnoDebugParser, "I I");
}
-#line 1749 "engines/hypno/grammar_arc.cpp"
+#line 1781 "engines/hypno/grammar_arc.cpp"
break;
- case 60: /* bline: ITOK JTOK */
-#line 337 "engines/hypno/grammar_arc.y"
+ case 63: /* bline: ITOK JTOK */
+#line 346 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == J
shoot->name = "J";
debugC(1, kHypnoDebugParser, "I J");
}
-#line 1758 "engines/hypno/grammar_arc.cpp"
+#line 1790 "engines/hypno/grammar_arc.cpp"
break;
- case 61: /* bline: ITOK KTOK */
-#line 341 "engines/hypno/grammar_arc.y"
+ case 64: /* bline: ITOK KTOK */
+#line 350 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == K
shoot->name = "K";
debugC(1, kHypnoDebugParser, "I K");
}
-#line 1767 "engines/hypno/grammar_arc.cpp"
+#line 1799 "engines/hypno/grammar_arc.cpp"
break;
- case 62: /* bline: ITOK NTOK */
-#line 345 "engines/hypno/grammar_arc.y"
+ case 65: /* bline: ITOK NTOK */
+#line 354 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == N
shoot->name = "N";
debugC(1, kHypnoDebugParser, "I N");
}
-#line 1776 "engines/hypno/grammar_arc.cpp"
+#line 1808 "engines/hypno/grammar_arc.cpp"
break;
- case 63: /* bline: ITOK OTOK */
-#line 349 "engines/hypno/grammar_arc.y"
+ case 66: /* bline: ITOK OTOK */
+#line 358 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == O
shoot->name = "O";
debugC(1, kHypnoDebugParser, "I O");
}
-#line 1785 "engines/hypno/grammar_arc.cpp"
+#line 1817 "engines/hypno/grammar_arc.cpp"
break;
- case 64: /* bline: ITOK PTOK */
-#line 353 "engines/hypno/grammar_arc.y"
+ case 67: /* bline: ITOK PTOK */
+#line 362 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == P
shoot->name = "P";
debugC(1, kHypnoDebugParser, "I P");
}
-#line 1794 "engines/hypno/grammar_arc.cpp"
+#line 1826 "engines/hypno/grammar_arc.cpp"
break;
- case 65: /* bline: ITOK QTOK */
-#line 357 "engines/hypno/grammar_arc.y"
+ case 68: /* bline: ITOK QTOK */
+#line 366 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == Q
shoot->name = "Q";
debugC(1, kHypnoDebugParser, "I Q");
}
-#line 1803 "engines/hypno/grammar_arc.cpp"
+#line 1835 "engines/hypno/grammar_arc.cpp"
break;
- case 66: /* bline: ITOK RTOK */
-#line 361 "engines/hypno/grammar_arc.y"
+ case 69: /* bline: ITOK RTOK */
+#line 370 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == R
shoot->name = "R";
debugC(1, kHypnoDebugParser, "I R");
}
-#line 1812 "engines/hypno/grammar_arc.cpp"
+#line 1844 "engines/hypno/grammar_arc.cpp"
break;
- case 67: /* bline: ITOK SNTOK */
-#line 365 "engines/hypno/grammar_arc.y"
+ case 70: /* bline: ITOK SNTOK */
+#line 374 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == S1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1821 "engines/hypno/grammar_arc.cpp"
+#line 1853 "engines/hypno/grammar_arc.cpp"
break;
- case 68: /* bline: ITOK TTOK */
-#line 369 "engines/hypno/grammar_arc.y"
+ case 71: /* bline: ITOK TTOK */
+#line 378 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == T
shoot->name = "T";
debugC(1, kHypnoDebugParser, "I T");
}
-#line 1830 "engines/hypno/grammar_arc.cpp"
+#line 1862 "engines/hypno/grammar_arc.cpp"
break;
- case 69: /* bline: ITOK LTOK */
-#line 373 "engines/hypno/grammar_arc.y"
+ case 72: /* bline: ITOK LTOK */
+#line 382 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == L
shoot->name = "L";
debugC(1, kHypnoDebugParser, "I L");
}
-#line 1839 "engines/hypno/grammar_arc.cpp"
+#line 1871 "engines/hypno/grammar_arc.cpp"
break;
- case 70: /* bline: ITOK MTOK */
-#line 377 "engines/hypno/grammar_arc.y"
+ case 73: /* bline: ITOK MTOK */
+#line 386 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == M
shoot->name = "M";
debugC(1, kHypnoDebugParser, "I M");
}
-#line 1848 "engines/hypno/grammar_arc.cpp"
+#line 1880 "engines/hypno/grammar_arc.cpp"
break;
- case 71: /* bline: ITOK UTOK */
-#line 381 "engines/hypno/grammar_arc.y"
+ case 74: /* bline: ITOK UTOK */
+#line 390 "engines/hypno/grammar_arc.y"
{ // Workaround for NAME == U
shoot->name = "U";
debugC(1, kHypnoDebugParser, "I U");
}
-#line 1857 "engines/hypno/grammar_arc.cpp"
+#line 1889 "engines/hypno/grammar_arc.cpp"
break;
- case 72: /* bline: JTOK NUM */
-#line 385 "engines/hypno/grammar_arc.y"
+ case 75: /* bline: JTOK NUM */
+#line 394 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
}
-#line 1865 "engines/hypno/grammar_arc.cpp"
+#line 1897 "engines/hypno/grammar_arc.cpp"
break;
- case 73: /* bline: A0TOK NUM NUM */
-#line 388 "engines/hypno/grammar_arc.y"
+ case 76: /* bline: A0TOK NUM NUM */
+#line 397 "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 1874 "engines/hypno/grammar_arc.cpp"
+#line 1906 "engines/hypno/grammar_arc.cpp"
break;
- case 74: /* bline: RTOK NUM NUM */
-#line 392 "engines/hypno/grammar_arc.y"
+ case 77: /* bline: RTOK NUM NUM */
+#line 401 "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 1884 "engines/hypno/grammar_arc.cpp"
+#line 1916 "engines/hypno/grammar_arc.cpp"
break;
- case 75: /* bline: R01TOK NUM NUM */
-#line 397 "engines/hypno/grammar_arc.y"
+ case 78: /* bline: R01TOK NUM NUM */
+#line 406 "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 1893 "engines/hypno/grammar_arc.cpp"
+#line 1925 "engines/hypno/grammar_arc.cpp"
break;
- case 76: /* bline: BNTOK NUM NUM */
-#line 401 "engines/hypno/grammar_arc.y"
+ case 79: /* bline: BNTOK NUM NUM */
+#line 410 "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 1903 "engines/hypno/grammar_arc.cpp"
+#line 1935 "engines/hypno/grammar_arc.cpp"
break;
- case 77: /* bline: KNTOK NUM NUM */
-#line 406 "engines/hypno/grammar_arc.y"
+ case 80: /* bline: KNTOK NUM NUM */
+#line 415 "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 1913 "engines/hypno/grammar_arc.cpp"
+#line 1945 "engines/hypno/grammar_arc.cpp"
break;
- case 78: /* bline: P0TOK NUM NUM */
-#line 411 "engines/hypno/grammar_arc.y"
+ case 81: /* bline: P0TOK NUM NUM */
+#line 420 "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 1922 "engines/hypno/grammar_arc.cpp"
+#line 1954 "engines/hypno/grammar_arc.cpp"
break;
- case 79: /* bline: OTOK NUM NUM */
-#line 415 "engines/hypno/grammar_arc.y"
+ case 82: /* bline: OTOK NUM NUM */
+#line 424 "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 1933 "engines/hypno/grammar_arc.cpp"
+#line 1965 "engines/hypno/grammar_arc.cpp"
break;
- case 80: /* bline: CTOK NUM */
-#line 421 "engines/hypno/grammar_arc.y"
+ case 83: /* bline: CTOK NUM */
+#line 430 "engines/hypno/grammar_arc.y"
{
shoot->timesToShoot = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i));
}
-#line 1942 "engines/hypno/grammar_arc.cpp"
+#line 1974 "engines/hypno/grammar_arc.cpp"
break;
- case 81: /* bline: HTOK NUM */
-#line 425 "engines/hypno/grammar_arc.y"
+ case 84: /* bline: HTOK NUM */
+#line 434 "engines/hypno/grammar_arc.y"
{
shoot->attackFrames.push_back((yyvsp[0].i));
debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1950 "engines/hypno/grammar_arc.cpp"
+#line 1982 "engines/hypno/grammar_arc.cpp"
break;
- case 82: /* bline: VTOK NUM */
-#line 428 "engines/hypno/grammar_arc.y"
+ case 85: /* bline: VTOK NUM */
+#line 437 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "V %d", (yyvsp[0].i)); }
-#line 1956 "engines/hypno/grammar_arc.cpp"
+#line 1988 "engines/hypno/grammar_arc.cpp"
break;
- case 83: /* bline: WTOK NUM */
-#line 429 "engines/hypno/grammar_arc.y"
+ case 86: /* bline: WTOK NUM */
+#line 438 "engines/hypno/grammar_arc.y"
{
shoot->attackWeight = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1964 "engines/hypno/grammar_arc.cpp"
+#line 1996 "engines/hypno/grammar_arc.cpp"
break;
- case 84: /* bline: DTOK NUM */
-#line 432 "engines/hypno/grammar_arc.y"
+ case 87: /* bline: DTOK NUM */
+#line 441 "engines/hypno/grammar_arc.y"
{
shoot->pointsToShoot = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
}
-#line 1973 "engines/hypno/grammar_arc.cpp"
+#line 2005 "engines/hypno/grammar_arc.cpp"
break;
- case 85: /* bline: LTOK NUM NUM */
-#line 436 "engines/hypno/grammar_arc.y"
+ case 88: /* bline: LTOK NUM NUM */
+#line 445 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "L %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1981 "engines/hypno/grammar_arc.cpp"
+#line 2013 "engines/hypno/grammar_arc.cpp"
break;
- case 86: /* bline: LTOK NUM */
-#line 439 "engines/hypno/grammar_arc.y"
+ case 89: /* bline: LTOK NUM */
+#line 448 "engines/hypno/grammar_arc.y"
{
debugC(1, kHypnoDebugParser, "L %d", (yyvsp[0].i));
FrameInfo fi((yyvsp[0].i)-1, 0);
shoot->bodyFrames.push_back(fi);
}
-#line 1991 "engines/hypno/grammar_arc.cpp"
+#line 2023 "engines/hypno/grammar_arc.cpp"
break;
- case 87: /* bline: MTOK NUM */
-#line 444 "engines/hypno/grammar_arc.y"
+ case 90: /* bline: MTOK NUM */
+#line 453 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "M %d", (yyvsp[0].i));
shoot->missedAnimation = (yyvsp[0].i);
}
-#line 1999 "engines/hypno/grammar_arc.cpp"
+#line 2031 "engines/hypno/grammar_arc.cpp"
break;
- case 88: /* bline: KTOK NUM */
-#line 447 "engines/hypno/grammar_arc.y"
+ case 91: /* bline: KTOK NUM */
+#line 456 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "K %d", (yyvsp[0].i));
FrameInfo fi((yyvsp[0].i), 1);
shoot->explosionFrames.push_back(fi);
}
-#line 2008 "engines/hypno/grammar_arc.cpp"
+#line 2040 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 92: /* bline: KTOK NUM NUM */
+#line 460 "engines/hypno/grammar_arc.y"
+ { debugC(1, kHypnoDebugParser, "K %d %d", (yyvsp[-1].i), (yyvsp[0].i));
+ FrameInfo fi((yyvsp[-1].i), 1);
+ shoot->explosionFrames.push_back(fi);
+ }
+#line 2049 "engines/hypno/grammar_arc.cpp"
break;
- case 89: /* bline: SNTOK FILENAME enc */
-#line 451 "engines/hypno/grammar_arc.y"
+ case 93: /* bline: SNTOK FILENAME enc */
+#line 464 "engines/hypno/grammar_arc.y"
{
if (Common::String("S0") == (yyvsp[-2].s))
shoot->enemySound = (yyvsp[-1].s);
@@ -2018,36 +2059,60 @@ yyreduce:
shoot->hitSound = (yyvsp[-1].s);
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 2022 "engines/hypno/grammar_arc.cpp"
+#line 2063 "engines/hypno/grammar_arc.cpp"
break;
- case 90: /* bline: GTOK */
-#line 460 "engines/hypno/grammar_arc.y"
+ case 94: /* bline: GTOK */
+#line 473 "engines/hypno/grammar_arc.y"
{ debugC(1, kHypnoDebugParser, "G"); }
-#line 2028 "engines/hypno/grammar_arc.cpp"
+#line 2069 "engines/hypno/grammar_arc.cpp"
break;
- case 91: /* bline: NTOK */
-#line 461 "engines/hypno/grammar_arc.y"
+ case 95: /* bline: TTOK NUM */
+#line 474 "engines/hypno/grammar_arc.y"
+ {
+ debugC(1, kHypnoDebugParser, "T %d", (yyvsp[0].i));
+ }
+#line 2077 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 96: /* bline: TTOK */
+#line 477 "engines/hypno/grammar_arc.y"
+ {
+ debugC(1, kHypnoDebugParser, "T");
+ }
+#line 2085 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 97: /* bline: MTOK */
+#line 480 "engines/hypno/grammar_arc.y"
+ {
+ debugC(1, kHypnoDebugParser, "M");
+ }
+#line 2093 "engines/hypno/grammar_arc.cpp"
+ break;
+
+ case 98: /* bline: NTOK */
+#line 483 "engines/hypno/grammar_arc.y"
{
shoot->noEnemySound = true;
debugC(1, kHypnoDebugParser, "N"); }
-#line 2036 "engines/hypno/grammar_arc.cpp"
+#line 2101 "engines/hypno/grammar_arc.cpp"
break;
- case 92: /* bline: ZTOK */
-#line 464 "engines/hypno/grammar_arc.y"
+ case 99: /* bline: ZTOK */
+#line 486 "engines/hypno/grammar_arc.y"
{
g_parsedArc->shoots.push_back(*shoot);
//delete shoot;
//shoot = nullptr;
debugC(1, kHypnoDebugParser, "Z");
}
-#line 2047 "engines/hypno/grammar_arc.cpp"
+#line 2112 "engines/hypno/grammar_arc.cpp"
break;
-#line 2051 "engines/hypno/grammar_arc.cpp"
+#line 2116 "engines/hypno/grammar_arc.cpp"
default: break;
}
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 8fae79690d8..642e7a3fddf 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -58,9 +58,9 @@ using namespace Hypno;
%token<s> NAME FILENAME BNTOK SNTOK KNTOK YXTOK FNTOK ENCTOK ONTOK
%token<i> NUM BYTE
// header
-%token COMMENT CTOK DTOK HTOK HETOK HLTOK H12TOK HUTOK RETTOK QTOK RESTOK
+%token COMMENT AVTOK ABTOK CTOK DTOK HTOK HETOK HLTOK H12TOK HUTOK RETTOK QTOK RESTOK
%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK LTOK MTOK NTOK NSTOK RTOK R01TOK
-%token ITOK I1TOK GTOK JTOK KTOK UTOK ZTOK
+%token ITOK I1TOK GTOK JTOK J0TOK KTOK UTOK ZTOK
// body
%token NONETOK A0TOK P0TOK WTOK
@@ -288,6 +288,15 @@ bline: FNTOK FILENAME {
shoot->explosionAnimation = $2;
debugC(1, kHypnoDebugParser, "FN %s", $2);
}
+ | AVTOK NUM {
+ debugC(1, kHypnoDebugParser, "AV %d", $2);
+ }
+ | ABTOK NUM {
+ debugC(1, kHypnoDebugParser, "AB %d", $2);
+ }
+ | J0TOK NUM {
+ debugC(1, kHypnoDebugParser, "J0 %d", $2);
+ }
| FNTOK NONETOK {
shoot = new Shoot();
shoot->animation = "NONE";
@@ -448,6 +457,10 @@ bline: FNTOK FILENAME {
FrameInfo fi($2, 1);
shoot->explosionFrames.push_back(fi);
}
+ | KTOK NUM NUM { debugC(1, kHypnoDebugParser, "K %d %d", $2, $3);
+ FrameInfo fi($2, 1);
+ shoot->explosionFrames.push_back(fi);
+ }
| SNTOK FILENAME enc {
if (Common::String("S0") == $1)
shoot->enemySound = $2;
@@ -458,6 +471,15 @@ bline: FNTOK FILENAME {
debugC(1, kHypnoDebugParser, "SN %s", $2); }
| GTOK { debugC(1, kHypnoDebugParser, "G"); }
+ | TTOK NUM {
+ debugC(1, kHypnoDebugParser, "T %d", $2);
+ }
+ | TTOK {
+ debugC(1, kHypnoDebugParser, "T");
+ }
+ | MTOK {
+ debugC(1, kHypnoDebugParser, "M");
+ }
| NTOK {
shoot->noEnemySound = true;
debugC(1, kHypnoDebugParser, "N"); }
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index 8ab05f3dcab..34366e36191 100644
--- a/engines/hypno/lexer_arc.cpp
+++ b/engines/hypno/lexer_arc.cpp
@@ -633,8 +633,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
(yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 51
-#define YY_END_OF_BUFFER 52
+#define YY_NUM_RULES 54
+#define YY_END_OF_BUFFER 55
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -642,17 +642,17 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[82] =
+static const flex_int16_t yy_accept[85] =
{ 0,
- 0, 0, 52, 50, 49, 47, 47, 50, 42, 42,
- 42, 42, 50, 10, 43, 2, 3, 43, 33, 24,
- 8, 20, 22, 23, 14, 17, 15, 12, 9, 25,
- 18, 43, 30, 26, 11, 28, 29, 43, 27, 43,
- 49, 42, 45, 42, 42, 42, 42, 0, 44, 35,
- 43, 36, 32, 7, 4, 5, 6, 21, 37, 16,
- 43, 13, 38, 19, 34, 31, 39, 43, 41, 41,
- 40, 40, 42, 48, 43, 0, 1, 0, 0, 46,
- 0
+ 0, 0, 55, 53, 52, 50, 50, 53, 45, 45,
+ 45, 45, 53, 12, 46, 2, 3, 46, 36, 27,
+ 8, 22, 25, 26, 16, 19, 17, 14, 9, 28,
+ 20, 46, 33, 29, 13, 31, 32, 46, 30, 46,
+ 52, 45, 48, 45, 45, 45, 45, 0, 47, 38,
+ 46, 10, 11, 39, 35, 7, 4, 5, 6, 23,
+ 24, 40, 18, 46, 15, 41, 21, 37, 34, 42,
+ 46, 44, 44, 43, 43, 45, 51, 46, 0, 1,
+ 0, 0, 49, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -696,33 +696,33 @@ static const YY_CHAR yy_meta[46] =
4, 4, 4, 4, 1
} ;
-static const flex_int16_t yy_base[88] =
+static const flex_int16_t yy_base[91] =
{ 0,
- 0, 0, 211, 212, 208, 212, 212, 37, 42, 47,
- 52, 57, 0, 63, 65, 201, 200, 199, 78, 190,
- 84, 88, 185, 96, 183, 182, 92, 103, 93, 181,
- 106, 114, 85, 179, 177, 176, 175, 91, 173, 0,
- 177, 127, 0, 132, 137, 126, 143, 174, 0, 169,
- 168, 167, 164, 162, 159, 158, 157, 156, 155, 212,
- 145, 153, 152, 151, 150, 149, 148, 0, 0, 212,
- 0, 212, 149, 150, 109, 120, 122, 111, 109, 212,
- 212, 192, 196, 198, 200, 75, 202
+ 0, 0, 217, 218, 214, 218, 218, 37, 42, 47,
+ 52, 57, 0, 63, 92, 207, 206, 205, 65, 204,
+ 87, 72, 75, 77, 203, 202, 86, 108, 84, 201,
+ 111, 115, 88, 200, 191, 186, 184, 106, 183, 0,
+ 188, 124, 0, 129, 142, 118, 121, 185, 0, 180,
+ 178, 176, 175, 174, 173, 172, 171, 170, 169, 168,
+ 166, 165, 218, 137, 164, 163, 162, 161, 154, 152,
+ 0, 0, 218, 0, 218, 150, 155, 149, 147, 136,
+ 122, 120, 218, 218, 193, 197, 199, 201, 77, 203
} ;
-static const flex_int16_t yy_def[88] =
+static const flex_int16_t yy_def[91] =
{ 0,
- 81, 1, 81, 81, 81, 81, 81, 81, 82, 82,
- 82, 82, 83, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 85, 84, 86,
- 81, 81, 82, 82, 82, 45, 45, 83, 87, 84,
- 84, 84, 84, 84, 84, 84, 84, 84, 84, 81,
- 84, 84, 84, 84, 84, 84, 84, 86, 82, 81,
- 82, 81, 45, 83, 84, 81, 84, 81, 81, 81,
- 0, 81, 81, 81, 81, 81, 81
+ 84, 1, 84, 84, 84, 84, 84, 84, 85, 85,
+ 85, 85, 86, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 88, 87, 89,
+ 84, 84, 85, 85, 85, 45, 45, 86, 90, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 84, 87, 87, 87, 87, 87, 87, 87,
+ 89, 85, 84, 85, 84, 45, 86, 87, 84, 87,
+ 84, 84, 84, 0, 84, 84, 84, 84, 84, 84
} ;
-static const flex_int16_t yy_nxt[258] =
+static const flex_int16_t yy_nxt[264] =
{ 0,
4, 5, 6, 7, 4, 4, 8, 4, 9, 10,
11, 12, 9, 13, 14, 15, 16, 17, 18, 19,
@@ -731,30 +731,31 @@ static const flex_int16_t yy_nxt[258] =
40, 18, 18, 18, 7, 42, 42, 42, 42, 42,
44, 44, 44, 44, 44, 44, 45, 44, 44, 44,
44, 44, 46, 44, 44, 44, 44, 47, 44, 44,
- 49, 50, 49, 52, 52, 52, 52, 52, 68, 52,
- 52, 52, 52, 52, 52, 49, 53, 53, 53, 53,
- 53, 49, 49, 54, 54, 49, 60, 58, 49, 49,
-
- 49, 63, 55, 49, 59, 59, 59, 59, 59, 56,
- 49, 62, 62, 49, 64, 64, 49, 80, 57, 79,
- 61, 49, 65, 65, 65, 65, 65, 77, 66, 49,
- 78, 51, 51, 51, 51, 42, 42, 42, 42, 42,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 71, 73, 49, 74, 76, 49, 49, 49, 49, 49,
- 49, 69, 49, 49, 49, 49, 49, 43, 71, 49,
- 72, 49, 75, 43, 49, 49, 49, 74, 41, 69,
- 49, 70, 49, 49, 49, 43, 49, 81, 49, 49,
- 49, 43, 49, 81, 43, 43, 48, 49, 48, 48,
-
- 51, 51, 67, 67, 49, 49, 49, 49, 49, 41,
- 81, 3, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81
+ 49, 50, 49, 55, 55, 55, 55, 55, 52, 49,
+ 71, 60, 49, 61, 49, 62, 62, 62, 62, 62,
+ 63, 49, 66, 49, 49, 49, 56, 56, 53, 49,
+
+ 54, 54, 54, 54, 54, 57, 54, 54, 54, 54,
+ 54, 54, 58, 49, 64, 49, 65, 65, 49, 67,
+ 67, 59, 49, 68, 68, 68, 68, 68, 83, 76,
+ 82, 69, 42, 42, 42, 42, 42, 44, 44, 44,
+ 44, 44, 74, 49, 49, 43, 51, 51, 51, 51,
+ 44, 44, 44, 44, 44, 79, 49, 81, 77, 49,
+ 74, 49, 75, 43, 78, 84, 72, 80, 49, 49,
+ 49, 49, 49, 49, 43, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 72, 49, 73, 49, 77, 41,
+ 49, 49, 43, 49, 84, 43, 43, 48, 49, 48,
+
+ 48, 51, 51, 70, 70, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 41, 84, 3, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84
} ;
-static const flex_int16_t yy_chk[258] =
+static const flex_int16_t yy_chk[264] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -763,35 +764,36 @@ static const flex_int16_t yy_chk[258] =
1, 1, 1, 1, 1, 8, 8, 8, 8, 8,
9, 9, 9, 9, 9, 10, 10, 10, 10, 10,
11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
- 14, 14, 15, 15, 15, 15, 15, 15, 86, 15,
- 15, 15, 15, 15, 15, 19, 19, 19, 19, 19,
- 19, 21, 33, 21, 21, 22, 27, 22, 38, 27,
-
- 29, 29, 21, 24, 24, 24, 24, 24, 24, 21,
- 28, 28, 28, 31, 31, 31, 75, 79, 21, 78,
- 27, 32, 32, 32, 32, 32, 32, 75, 33, 77,
- 76, 38, 38, 38, 38, 42, 42, 42, 42, 42,
- 44, 44, 44, 44, 44, 45, 45, 45, 45, 45,
- 46, 47, 61, 74, 73, 67, 66, 65, 64, 63,
- 62, 45, 59, 58, 57, 56, 55, 47, 46, 54,
- 46, 53, 61, 73, 52, 51, 50, 48, 41, 45,
- 39, 45, 37, 36, 35, 47, 34, 47, 30, 26,
- 25, 73, 23, 73, 82, 82, 83, 20, 83, 83,
-
- 84, 84, 85, 85, 87, 87, 18, 17, 16, 5,
- 3, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81
+ 14, 14, 19, 19, 19, 19, 19, 19, 14, 22,
+ 89, 22, 23, 23, 24, 24, 24, 24, 24, 24,
+ 27, 29, 29, 27, 21, 33, 21, 21, 14, 15,
+
+ 15, 15, 15, 15, 15, 21, 15, 15, 15, 15,
+ 15, 15, 21, 38, 27, 28, 28, 28, 31, 31,
+ 31, 21, 32, 32, 32, 32, 32, 32, 82, 47,
+ 81, 33, 42, 42, 42, 42, 42, 44, 44, 44,
+ 44, 44, 46, 80, 64, 47, 38, 38, 38, 38,
+ 45, 45, 45, 45, 45, 76, 78, 79, 77, 70,
+ 46, 69, 46, 47, 64, 47, 45, 78, 68, 67,
+ 66, 65, 62, 61, 76, 60, 59, 58, 57, 56,
+ 55, 54, 53, 52, 45, 51, 45, 50, 48, 41,
+ 39, 37, 76, 36, 76, 85, 85, 86, 35, 86,
+
+ 86, 87, 87, 88, 88, 90, 90, 34, 30, 26,
+ 25, 20, 18, 17, 16, 5, 3, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84
} ;
/* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[52] =
+static const flex_int32_t yy_rule_can_match_eol[55] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, };
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, };
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
@@ -838,8 +840,8 @@ char *yytext;
#include "hypno/grammar.h"
#include "hypno/tokens_arc.h"
-#line 841 "engines/hypno/lexer_arc.cpp"
-#line 842 "engines/hypno/lexer_arc.cpp"
+#line 843 "engines/hypno/lexer_arc.cpp"
+#line 844 "engines/hypno/lexer_arc.cpp"
#define INITIAL 0
@@ -1056,7 +1058,7 @@ YY_DECL
{
#line 42 "engines/hypno/lexer_arc.l"
-#line 1059 "engines/hypno/lexer_arc.cpp"
+#line 1061 "engines/hypno/lexer_arc.cpp"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -1083,13 +1085,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 82 )
+ if ( yy_current_state >= 85 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_current_state != 81 );
+ while ( yy_current_state != 84 );
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
@@ -1167,215 +1169,230 @@ return PTOK;
case 10:
YY_RULE_SETUP
#line 52 "engines/hypno/lexer_arc.l"
-return ATOK;
+return ABTOK;
YY_BREAK
case 11:
YY_RULE_SETUP
#line 53 "engines/hypno/lexer_arc.l"
-return VTOK;
+return AVTOK;
YY_BREAK
case 12:
YY_RULE_SETUP
#line 54 "engines/hypno/lexer_arc.l"
-return OTOK;
+return ATOK;
YY_BREAK
case 13:
YY_RULE_SETUP
#line 55 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
+return VTOK;
YY_BREAK
case 14:
YY_RULE_SETUP
#line 56 "engines/hypno/lexer_arc.l"
-return LTOK;
+return OTOK;
YY_BREAK
case 15:
YY_RULE_SETUP
#line 57 "engines/hypno/lexer_arc.l"
-return NTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ONTOK;
YY_BREAK
case 16:
YY_RULE_SETUP
#line 58 "engines/hypno/lexer_arc.l"
-return NSTOK;
+return LTOK;
YY_BREAK
case 17:
YY_RULE_SETUP
#line 59 "engines/hypno/lexer_arc.l"
-return MTOK;
+return NTOK;
YY_BREAK
case 18:
YY_RULE_SETUP
#line 60 "engines/hypno/lexer_arc.l"
-return RTOK;
+return NSTOK;
YY_BREAK
case 19:
YY_RULE_SETUP
#line 61 "engines/hypno/lexer_arc.l"
-return R01TOK;
+return MTOK;
YY_BREAK
case 20:
YY_RULE_SETUP
#line 62 "engines/hypno/lexer_arc.l"
-return ITOK;
+return RTOK;
YY_BREAK
case 21:
YY_RULE_SETUP
#line 63 "engines/hypno/lexer_arc.l"
-return I1TOK;
+return R01TOK;
YY_BREAK
case 22:
YY_RULE_SETUP
#line 64 "engines/hypno/lexer_arc.l"
-return JTOK;
+return ITOK;
YY_BREAK
case 23:
YY_RULE_SETUP
#line 65 "engines/hypno/lexer_arc.l"
-return KTOK;
+return I1TOK;
YY_BREAK
case 24:
YY_RULE_SETUP
#line 66 "engines/hypno/lexer_arc.l"
-return GTOK;
+return J0TOK;
YY_BREAK
case 25:
YY_RULE_SETUP
#line 67 "engines/hypno/lexer_arc.l"
-return QTOK;
+return JTOK;
YY_BREAK
case 26:
YY_RULE_SETUP
#line 68 "engines/hypno/lexer_arc.l"
-return UTOK;
+return KTOK;
YY_BREAK
case 27:
YY_RULE_SETUP
#line 69 "engines/hypno/lexer_arc.l"
-return ZTOK;
+return GTOK;
YY_BREAK
case 28:
YY_RULE_SETUP
#line 70 "engines/hypno/lexer_arc.l"
-return WTOK;
+return QTOK;
YY_BREAK
case 29:
YY_RULE_SETUP
#line 71 "engines/hypno/lexer_arc.l"
-return XTOK;
+return UTOK;
YY_BREAK
case 30:
YY_RULE_SETUP
#line 72 "engines/hypno/lexer_arc.l"
-return TTOK;
+return ZTOK;
YY_BREAK
case 31:
YY_RULE_SETUP
#line 73 "engines/hypno/lexer_arc.l"
-return TPTOK;
+return WTOK;
YY_BREAK
case 32:
YY_RULE_SETUP
#line 74 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
+return XTOK;
YY_BREAK
case 33:
YY_RULE_SETUP
#line 75 "engines/hypno/lexer_arc.l"
-return FTOK;
+return TTOK;
YY_BREAK
case 34:
YY_RULE_SETUP
#line 76 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+return TPTOK;
YY_BREAK
case 35:
YY_RULE_SETUP
#line 77 "engines/hypno/lexer_arc.l"
-return A0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FNTOK;
YY_BREAK
case 36:
YY_RULE_SETUP
#line 78 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+return FTOK;
YY_BREAK
case 37:
YY_RULE_SETUP
#line 79 "engines/hypno/lexer_arc.l"
-return KNTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
YY_BREAK
case 38:
YY_RULE_SETUP
#line 80 "engines/hypno/lexer_arc.l"
-return P0TOK;
+return A0TOK;
YY_BREAK
case 39:
YY_RULE_SETUP
#line 81 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
YY_BREAK
case 40:
YY_RULE_SETUP
#line 82 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+return KNTOK;
YY_BREAK
case 41:
YY_RULE_SETUP
#line 83 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
+return P0TOK;
YY_BREAK
case 42:
YY_RULE_SETUP
#line 84 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
YY_BREAK
case 43:
YY_RULE_SETUP
#line 85 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
YY_BREAK
case 44:
YY_RULE_SETUP
#line 86 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return ENCTOK;
YY_BREAK
case 45:
YY_RULE_SETUP
#line 87 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
YY_BREAK
case 46:
YY_RULE_SETUP
#line 88 "engines/hypno/lexer_arc.l"
-return RESTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
YY_BREAK
case 47:
-/* rule 47 can match eol */
YY_RULE_SETUP
#line 89 "engines/hypno/lexer_arc.l"
-return RETTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
YY_BREAK
case 48:
YY_RULE_SETUP
#line 90 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
YY_BREAK
case 49:
YY_RULE_SETUP
#line 91 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+return RESTOK;
YY_BREAK
case 50:
+/* rule 50 can match eol */
YY_RULE_SETUP
#line 92 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+return RETTOK;
YY_BREAK
case 51:
YY_RULE_SETUP
#line 93 "engines/hypno/lexer_arc.l"
+/* ignore comment */
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 94 "engines/hypno/lexer_arc.l"
+/* ignore whitespace */;
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 95 "engines/hypno/lexer_arc.l"
+HYPNO_ARC_lval.i = HYPNO_ARC_text[0]; return BYTE;
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 96 "engines/hypno/lexer_arc.l"
ECHO;
YY_BREAK
-#line 1378 "engines/hypno/lexer_arc.cpp"
+#line 1395 "engines/hypno/lexer_arc.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -1673,7 +1690,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 82 )
+ if ( yy_current_state >= 85 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1701,11 +1718,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 82 )
+ if ( yy_current_state >= 85 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 81);
+ yy_is_jam = (yy_current_state == 84);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -2352,7 +2369,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 93 "engines/hypno/lexer_arc.l"
+#line 96 "engines/hypno/lexer_arc.l"
namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index 7338b2608c2..ae5e0a5f1fd 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -49,6 +49,8 @@ HU return HUTOK;
H[1-2] return H12TOK;
H return HTOK;
P return PTOK;
+AB return ABTOK;
+AV return AVTOK;
A return ATOK;
V return VTOK;
O return OTOK;
@@ -61,6 +63,7 @@ R return RTOK;
R[0-1] return R01TOK;
I return ITOK;
I1 return I1TOK;
+J0 return J0TOK;
J return JTOK;
K return KTOK;
G return GTOK;
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index c208a69d312..8130045f4ab 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -74,43 +74,46 @@ extern int HYPNO_ARC_debug;
NUM = 267, /* NUM */
BYTE = 268, /* BYTE */
COMMENT = 269, /* COMMENT */
- CTOK = 270, /* CTOK */
- DTOK = 271, /* DTOK */
- HTOK = 272, /* HTOK */
- HETOK = 273, /* HETOK */
- HLTOK = 274, /* HLTOK */
- H12TOK = 275, /* H12TOK */
- HUTOK = 276, /* HUTOK */
- RETTOK = 277, /* RETTOK */
- QTOK = 278, /* QTOK */
- RESTOK = 279, /* RESTOK */
- PTOK = 280, /* PTOK */
- FTOK = 281, /* FTOK */
- TTOK = 282, /* TTOK */
- TPTOK = 283, /* TPTOK */
- ATOK = 284, /* ATOK */
- VTOK = 285, /* VTOK */
- OTOK = 286, /* OTOK */
- LTOK = 287, /* LTOK */
- MTOK = 288, /* MTOK */
- NTOK = 289, /* NTOK */
- NSTOK = 290, /* NSTOK */
- RTOK = 291, /* RTOK */
- R01TOK = 292, /* R01TOK */
- ITOK = 293, /* ITOK */
- I1TOK = 294, /* I1TOK */
- GTOK = 295, /* GTOK */
- JTOK = 296, /* JTOK */
- KTOK = 297, /* KTOK */
- UTOK = 298, /* UTOK */
- ZTOK = 299, /* ZTOK */
- NONETOK = 300, /* NONETOK */
- A0TOK = 301, /* A0TOK */
- P0TOK = 302, /* P0TOK */
- WTOK = 303, /* WTOK */
- XTOK = 304, /* XTOK */
- CB3TOK = 305, /* CB3TOK */
- C02TOK = 306 /* C02TOK */
+ AVTOK = 270, /* AVTOK */
+ ABTOK = 271, /* ABTOK */
+ CTOK = 272, /* CTOK */
+ DTOK = 273, /* DTOK */
+ HTOK = 274, /* HTOK */
+ HETOK = 275, /* HETOK */
+ HLTOK = 276, /* HLTOK */
+ H12TOK = 277, /* H12TOK */
+ HUTOK = 278, /* HUTOK */
+ RETTOK = 279, /* RETTOK */
+ QTOK = 280, /* QTOK */
+ RESTOK = 281, /* RESTOK */
+ PTOK = 282, /* PTOK */
+ FTOK = 283, /* FTOK */
+ TTOK = 284, /* TTOK */
+ TPTOK = 285, /* TPTOK */
+ ATOK = 286, /* ATOK */
+ VTOK = 287, /* VTOK */
+ OTOK = 288, /* OTOK */
+ LTOK = 289, /* LTOK */
+ MTOK = 290, /* MTOK */
+ NTOK = 291, /* NTOK */
+ NSTOK = 292, /* NSTOK */
+ RTOK = 293, /* RTOK */
+ R01TOK = 294, /* R01TOK */
+ ITOK = 295, /* ITOK */
+ I1TOK = 296, /* I1TOK */
+ GTOK = 297, /* GTOK */
+ JTOK = 298, /* JTOK */
+ J0TOK = 299, /* J0TOK */
+ KTOK = 300, /* KTOK */
+ UTOK = 301, /* UTOK */
+ ZTOK = 302, /* ZTOK */
+ NONETOK = 303, /* NONETOK */
+ A0TOK = 304, /* A0TOK */
+ P0TOK = 305, /* P0TOK */
+ WTOK = 306, /* WTOK */
+ XTOK = 307, /* XTOK */
+ CB3TOK = 308, /* CB3TOK */
+ C02TOK = 309 /* C02TOK */
};
typedef enum HYPNO_ARC_tokentype HYPNO_ARC_token_kind_t;
#endif
@@ -124,7 +127,7 @@ union HYPNO_ARC_STYPE
char *s; /* string value */
int i; /* integer value */
-#line 128 "engines/hypno/tokens_arc.h"
+#line 131 "engines/hypno/tokens_arc.h"
};
typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;
Commit: a8d20101b711ec1f04c263f9619890baef72f7f3
https://github.com/scummvm/scummvm/commit/a8d20101b711ec1f04c263f9619890baef72f7f3
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: moved arcade code to a specific file in boyz
Changed paths:
A engines/hypno/boyz/arcade.cpp
engines/hypno/boyz/boyz.cpp
engines/hypno/module.mk
diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
new file mode 100644
index 00000000000..cc36ca876f1
--- /dev/null
+++ b/engines/hypno/boyz/arcade.cpp
@@ -0,0 +1,153 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "hypno/grammar.h"
+#include "hypno/hypno.h"
+
+#include "common/events.h"
+
+namespace Hypno {
+
+void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
+ _checkpoint = _currentLevel;
+ assert(!arc->player.empty());
+ _playerFrames = decodeFrames(arc->player);
+ _playerFrameSep = 0;
+
+ Common::Rect healthBarBox(0, 3, 107, 18);
+ Common::Rect ammoBarBox(0, 20, 103, 34);
+ Common::Rect portraitBox(0, 40, 57, 94);
+
+ for (int i = 0; i < int(_playerFrames.size()); i++) {
+ _healthBar[i] = _playerFrames[i]->getSubArea(healthBarBox);
+ _ammoBar[i] = _playerFrames[i]->getSubArea(ammoBarBox);
+ _portrait[i] = _playerFrames[i]->getSubArea(portraitBox);
+ }
+
+ _playerFrameSep = _playerFrames.size();
+ _playerFrameIdx = -1;
+
+ _currentScript = arc->script;
+ ScriptInfo si = *_currentScript.begin();
+ _currentActor = si.actor - 1;
+ _currentMode = si.mode;
+ _currentScript.pop_front();
+}
+
+void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
+ for (int i = 0; i < int(_playerFrames.size()); i++) {
+ _playerFrames[i]->free();
+ delete _playerFrames[i];
+ }
+}
+
+void BoyzEngine::updateFromScript() {
+ if (_currentScript.size() > 0) {
+ ScriptInfo si = *_currentScript.begin();
+ //debug("%d %d %d", si.time, _background->decoder->getCurFrame(), si.actor);
+ if (int(si.time) <= _background->decoder->getCurFrame()) {
+ _currentActor = si.actor - 1;
+ _currentMode = si.mode;
+ _currentScript.pop_front();
+ }
+ }
+}
+
+void BoyzEngine::drawPlayer() {
+ updateFromScript();
+ drawImage(_portrait[_currentActor], 0, 200 - _portrait[_currentActor].h, true);
+}
+
+void BoyzEngine::drawHealth() {
+ updateFromScript();
+ drawImage(_healthBar[_currentActor], 0, 0, true);
+ drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentActor].w, 0, true);
+}
+void BoyzEngine::hitPlayer() {}
+void BoyzEngine::drawShoot(const Common::Point &target) {}
+
+void BoyzEngine::initSegment(ArcadeShooting *arc) {
+ _segmentShootSequenceOffset = 0;
+ _segmentShootSequenceMax = 0;
+
+ uint32 randomSegmentShootSequence = _segmentShootSequenceOffset + _rnd->getRandomNumber(_segmentShootSequenceMax);
+ SegmentShoots segmentShoots = arc->shootSequence[randomSegmentShootSequence];
+ _shootSequence = segmentShoots.shootSequence;
+ _segmentRepetitionMax = segmentShoots.segmentRepetition; // Usually zero
+ _segmentRepetition = 0;
+ _segmentOffset = 0;
+ _segmentIdx = _segmentOffset;
+}
+
+void BoyzEngine::findNextSegment(ArcadeShooting *arc) {
+ _segmentIdx = _segmentIdx + 1;
+}
+
+int BoyzEngine::detectTarget(const Common::Point &mousePos) {
+ Common::Point target = computeTargetPosition(mousePos);
+ assert(_shoots.size() <= 1);
+ for (Shoots::iterator it = _shoots.begin(); it != _shoots.end(); ++it) {
+ if (_mask->getPixel(target.x, target.y) == 1)
+ return 0;
+ }
+ return -1;
+}
+
+void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVideo &background) {
+ incShotsFired();
+ int i = detectTarget(mousePos);
+ if (i < 0) {
+ missNoTarget(arc, background);
+ } else {
+ if (!_shoots[i].hitSound.empty())
+ playSound(_soundPath + _shoots[i].hitSound, 1);
+
+ incEnemyHits();
+ if (!_shoots[i].deathSound.empty())
+ playSound(_soundPath + _shoots[i].deathSound, 1);
+
+ incTargetsDestroyed();
+ incScore(_shoots[i].pointsToShoot);
+ incBonus(_shoots[i].pointsToShoot);
+ _shoots[i].destroyed = true;
+ background.decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
+ _masks->decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
+ _shoots.clear();
+ }
+}
+
+void BoyzEngine::missedTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) {
+
+ if (s->missedAnimation == 0)
+ return;
+ else if (s->missedAnimation == uint32(-1)) {
+ uint32 last = background.decoder->getFrameCount()-1;
+ background.decoder->forceSeekToFrame(last);
+ _masks->decoder->forceSeekToFrame(last);
+ return;
+ }
+
+ s->missedAnimation = s->missedAnimation + 3;
+ background.decoder->forceSeekToFrame(s->missedAnimation);
+ _masks->decoder->forceSeekToFrame(s->missedAnimation);
+}
+
+} // namespace Hypno
\ No newline at end of file
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index c74d042c359..ef954453755 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -46,131 +46,6 @@ void BoyzEngine::loadAssets() {
_nextLevel = "c11.mi_";
}
-void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
- _checkpoint = _currentLevel;
- assert(!arc->player.empty());
- _playerFrames = decodeFrames(arc->player);
- _playerFrameSep = 0;
-
- Common::Rect healthBarBox(0, 3, 107, 18);
- Common::Rect ammoBarBox(0, 20, 103, 34);
- Common::Rect portraitBox(0, 40, 57, 94);
-
- for (int i = 0; i < int(_playerFrames.size()); i++) {
- _healthBar[i] = _playerFrames[i]->getSubArea(healthBarBox);
- _ammoBar[i] = _playerFrames[i]->getSubArea(ammoBarBox);
- _portrait[i] = _playerFrames[i]->getSubArea(portraitBox);
- }
-
- _playerFrameSep = _playerFrames.size();
- _playerFrameIdx = -1;
-
- _currentScript = arc->script;
- ScriptInfo si = *_currentScript.begin();
- _currentActor = si.actor - 1;
- _currentMode = si.mode;
- _currentScript.pop_front();
-}
-
-void BoyzEngine::runAfterArcade(ArcadeShooting *arc) {
- for (int i = 0; i < int(_playerFrames.size()); i++) {
- _playerFrames[i]->free();
- delete _playerFrames[i];
- }
-}
-
-void BoyzEngine::updateFromScript() {
- if (_currentScript.size() > 0) {
- ScriptInfo si = *_currentScript.begin();
- //debug("%d %d %d", si.time, _background->decoder->getCurFrame(), si.actor);
- if (int(si.time) <= _background->decoder->getCurFrame()) {
- _currentActor = si.actor - 1;
- _currentMode = si.mode;
- _currentScript.pop_front();
- }
- }
-}
-
-void BoyzEngine::drawPlayer() {
- updateFromScript();
- drawImage(_portrait[_currentActor], 0, 200 - _portrait[_currentActor].h, true);
-}
-
-void BoyzEngine::drawHealth() {
- updateFromScript();
- drawImage(_healthBar[_currentActor], 0, 0, true);
- drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentActor].w, 0, true);
-}
-void BoyzEngine::hitPlayer() {}
-void BoyzEngine::drawShoot(const Common::Point &target) {}
-
Common::String BoyzEngine::findNextLevel(const Common::String &level) { return level; }
-void BoyzEngine::initSegment(ArcadeShooting *arc) {
- _segmentShootSequenceOffset = 0;
- _segmentShootSequenceMax = 0;
-
- uint32 randomSegmentShootSequence = _segmentShootSequenceOffset + _rnd->getRandomNumber(_segmentShootSequenceMax);
- SegmentShoots segmentShoots = arc->shootSequence[randomSegmentShootSequence];
- _shootSequence = segmentShoots.shootSequence;
- _segmentRepetitionMax = segmentShoots.segmentRepetition; // Usually zero
- _segmentRepetition = 0;
- _segmentOffset = 0;
- _segmentIdx = _segmentOffset;
-}
-
-void BoyzEngine::findNextSegment(ArcadeShooting *arc) {
- _segmentIdx = _segmentIdx + 1;
-}
-
-int BoyzEngine::detectTarget(const Common::Point &mousePos) {
- Common::Point target = computeTargetPosition(mousePos);
- assert(_shoots.size() <= 1);
- for (Shoots::iterator it = _shoots.begin(); it != _shoots.end(); ++it) {
- if (_mask->getPixel(target.x, target.y) == 1)
- return 0;
- }
- return -1;
-}
-
-void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVideo &background) {
- incShotsFired();
- int i = detectTarget(mousePos);
- if (i < 0) {
- missNoTarget(arc, background);
- } else {
- if (!_shoots[i].hitSound.empty())
- playSound(_soundPath + _shoots[i].hitSound, 1);
-
- incEnemyHits();
- if (!_shoots[i].deathSound.empty())
- playSound(_soundPath + _shoots[i].deathSound, 1);
-
- incTargetsDestroyed();
- incScore(_shoots[i].pointsToShoot);
- incBonus(_shoots[i].pointsToShoot);
- _shoots[i].destroyed = true;
- background.decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
- _masks->decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
- _shoots.clear();
- }
-}
-
-void BoyzEngine::missedTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) {
-
- if (s->missedAnimation == 0)
- return;
- else if (s->missedAnimation == uint32(-1)) {
- uint32 last = background.decoder->getFrameCount()-1;
- background.decoder->forceSeekToFrame(last);
- _masks->decoder->forceSeekToFrame(last);
- return;
- }
-
- s->missedAnimation = s->missedAnimation + 3;
- background.decoder->forceSeekToFrame(s->missedAnimation);
- _masks->decoder->forceSeekToFrame(s->missedAnimation);
-}
-
-
} // namespace Hypno
diff --git a/engines/hypno/module.mk b/engines/hypno/module.mk
index b4e5b291a8e..1d1c0569bc3 100644
--- a/engines/hypno/module.mk
+++ b/engines/hypno/module.mk
@@ -3,6 +3,7 @@ MODULE := engines/hypno
MODULE_OBJS := \
actions.o \
arcade.o \
+ boyz/arcade.o \
boyz/boyz.o \
cursors.o \
grammar_mis.o \
Commit: 5229ac6018c9ffbeec6645b5b136a2a2d3a0c3ca
https://github.com/scummvm/scummvm/commit/5229ac6018c9ffbeec6645b5b136a2a2d3a0c3ca
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: check language to avoid crashes in wet demo
Changed paths:
engines/hypno/wet/arcade.cpp
engines/hypno/wet/wet.cpp
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index 3a6dec1422b..61bb3efe181 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -228,7 +228,7 @@ void WetEngine::findNextSegment(ArcadeShooting *arc) {
void WetEngine::runAfterArcade(ArcadeShooting *arc) {
_checkpoint = _currentLevel;
- if (!isDemo() || _variant == "Demo") {
+ if (!isDemo() || (_variant == "Demo" && _language == Common::EN_USA)) {
byte *palette;
Graphics::Surface *frame = decodeFrame("c_misc/zones.smk", 12, &palette);
loadPalette(palette, 0, 256);
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index f9c31113b48..0112ce208b5 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -391,7 +391,7 @@ void WetEngine::showCredits() {
return;
}
- if (!isDemo() || _variant == "Demo" || _language == Common::EN_USA) {
+ if (!isDemo() || (_variant == "Demo" && _language == Common::EN_USA)) {
MVideo video("c_misc/credits.smk", Common::Point(0, 0), false, true, false);
runIntro(video);
}
Commit: ed64428e6740606b6deb49c381809fa1c3daef74
https://github.com/scummvm/scummvm/commit/ed64428e6740606b6deb49c381809fa1c3daef74
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: initial support for crossairs in boyz
Changed paths:
engines/hypno/boyz/arcade.cpp
engines/hypno/boyz/boyz.cpp
engines/hypno/cursors.cpp
engines/hypno/grammar.h
engines/hypno/hypno.h
diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index cc36ca876f1..c7037725f48 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -71,6 +71,19 @@ void BoyzEngine::updateFromScript() {
}
}
+void BoyzEngine::drawCursorArcade(const Common::Point &mousePos) {
+ if (_currentMode == NonInteractive) {
+ changeCursor(_crosshairsInactive[0], _crosshairsPalette, true);
+ return;
+ }
+
+ int i = detectTarget(mousePos);
+ if (i >= 0)
+ changeCursor(_crosshairsTarget[0], _crosshairsPalette, true);
+ else
+ changeCursor(_crosshairsActive[0], _crosshairsPalette, true);
+}
+
void BoyzEngine::drawPlayer() {
updateFromScript();
drawImage(_portrait[_currentActor], 0, 200 - _portrait[_currentActor].h, true);
@@ -131,6 +144,7 @@ void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVide
background.decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
_masks->decoder->forceSeekToFrame(_shoots[i].explosionFrames[0].start - 3);
_shoots.clear();
+ changeCursor(_crosshairsActive[0], _crosshairsPalette, true);
}
}
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index ef954453755..67677516fb5 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -43,6 +43,21 @@ void BoyzEngine::loadAssets() {
loadArcadeLevel("c14.mi_", "??", "??", "");
loadLib("sound/", "misc/sound.lib", true);
+
+ Graphics::Surface *targets = decodeFrame("preload/targets.smk", 0, &_crosshairsPalette);
+
+ Common::Rect cursorBox = Common::Rect(16, 8, 32, 24);
+ _crosshairsInactive[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsInactive[0].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+ cursorBox = Common::Rect(16, 40, 32, 56);
+ _crosshairsActive[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsActive[0].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+ cursorBox = Common::Rect(16, 72, 32, 88);
+ _crosshairsTarget[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsTarget[0].copyRectToSurface(*targets, 0, 0, cursorBox);
+
_nextLevel = "c11.mi_";
}
diff --git a/engines/hypno/cursors.cpp b/engines/hypno/cursors.cpp
index 57781313c96..861c887dc3e 100644
--- a/engines/hypno/cursors.cpp
+++ b/engines/hypno/cursors.cpp
@@ -131,5 +131,14 @@ void HypnoEngine::changeCursor(const Common::String &cursor, uint32 n, bool cent
CursorMan.showMouse(true);
}
+void HypnoEngine::changeCursor(const Graphics::Surface &entry, byte *palette, bool centerCursor) {
+ uint32 hotspotX = centerCursor ? entry.w / 2 : 0;
+ uint32 hotspotY = centerCursor ? entry.h / 2 : 0;
+ CursorMan.replaceCursor(entry.getPixels(), entry.w, entry.h, hotspotX, hotspotY, 0, &_pixelFormat);
+ CursorMan.replaceCursorPalette(palette, 0, 256);
+ CursorMan.showMouse(true);
+}
+
+
} // End of namespace Hypno
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index 159edb5807c..e4d9c5b78d7 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -367,8 +367,8 @@ public:
};
enum ScriptMode {
- NonInteractive = 1,
- Interactive,
+ Interactive = 1,
+ NonInteractive,
};
class ScriptInfo {
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 20ef3822f67..6e157899e22 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -151,6 +151,7 @@ public:
void defaultCursor();
void changeCursor(const Common::String &cursor, uint32 n, bool centerCursor = false);
void changeCursor(const Common::String &cursor);
+ void changeCursor(const Graphics::Surface &entry, byte *palette, bool centerCursor = false);
// Actions
void runMenu(Hotspots *hs);
@@ -458,6 +459,7 @@ public:
void runBeforeArcade(ArcadeShooting *arc) override;
void runAfterArcade(ArcadeShooting *arc) override;
int detectTarget(const Common::Point &mousePos) override;
+ void drawCursorArcade(const Common::Point &mousePos) override;
void shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVideo &background) override;
void missedTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) override;
@@ -473,6 +475,11 @@ public:
Graphics::Surface _ammoBar[6];
Graphics::Surface _portrait[6];
+ byte *_crosshairsPalette;
+ Graphics::Surface _crosshairsInactive[8];
+ Graphics::Surface _crosshairsActive[8];
+ Graphics::Surface _crosshairsTarget[8];
+
void updateFromScript();
Script _currentScript;
Commit: 4d21757e2bb708c1b944d21297992e6215d6904f
https://github.com/scummvm/scummvm/commit/4d21757e2bb708c1b944d21297992e6215d6904f
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-04-06T16:42:43+02:00
Commit Message:
HYPNO: initial implementation of hitPlayer and weapon sounds in boyz
Changed paths:
engines/hypno/boyz/arcade.cpp
engines/hypno/boyz/boyz.cpp
engines/hypno/hypno.h
diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index c7037725f48..5eb8e5f3d32 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -94,7 +94,13 @@ void BoyzEngine::drawHealth() {
drawImage(_healthBar[_currentActor], 0, 0, true);
drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentActor].w, 0, true);
}
-void BoyzEngine::hitPlayer() {}
+void BoyzEngine::hitPlayer() {
+ uint32 c = 250; // red
+ _compositeSurface->fillRect(Common::Rect(0, 0, _screenW, _screenH), c);
+ drawScreen();
+ if (!_hitSound.empty())
+ playSound(_soundPath + _hitSound, 1, 11025);
+}
void BoyzEngine::drawShoot(const Common::Point &target) {}
void BoyzEngine::initSegment(ArcadeShooting *arc) {
@@ -125,6 +131,7 @@ int BoyzEngine::detectTarget(const Common::Point &mousePos) {
}
void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVideo &background) {
+ playSound(_soundPath + _weaponShootSound[0], 1);
incShotsFired();
int i = detectTarget(mousePos);
if (i < 0) {
@@ -149,7 +156,7 @@ void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, MVide
}
void BoyzEngine::missedTarget(Shoot *s, ArcadeShooting *arc, MVideo &background) {
-
+ hitPlayer();
if (s->missedAnimation == 0)
return;
else if (s->missedAnimation == uint32(-1)) {
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 67677516fb5..0d2722b49af 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -44,6 +44,10 @@ void BoyzEngine::loadAssets() {
loadLib("sound/", "misc/sound.lib", true);
+ _weaponShootSound[0] = "pstlfire.raw";
+ _weaponShootSound[2] = "ak47fire.raw";
+ _weaponShootSound[4] = "shotfire.raw";
+
Graphics::Surface *targets = decodeFrame("preload/targets.smk", 0, &_crosshairsPalette);
Common::Rect cursorBox = Common::Rect(16, 8, 32, 24);
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 6e157899e22..4ec29790cac 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -475,6 +475,8 @@ public:
Graphics::Surface _ammoBar[6];
Graphics::Surface _portrait[6];
+ Filename _weaponShootSound[6];
+
byte *_crosshairsPalette;
Graphics::Surface _crosshairsInactive[8];
Graphics::Surface _crosshairsActive[8];
More information about the Scummvm-git-logs
mailing list