[Scummvm-git-logs] scummvm master -> a590352bf6414fd85d559624ab123f9ade7fd4c3
neuromancer
neuromancer at users.noreply.github.com
Fri Nov 5 23:07:04 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
a590352bf6 HYPNO: improved parsing in arcade and scenes, and added some hard-coded scenes for several games
Commit: a590352bf6414fd85d559624ab123f9ade7fd4c3
https://github.com/scummvm/scummvm/commit/a590352bf6414fd85d559624ab123f9ade7fd4c3
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-11-06T00:04:56+01:00
Commit Message:
HYPNO: improved parsing in arcade and scenes, and added some hard-coded scenes for several games
Changed paths:
engines/hypno/actions.cpp
engines/hypno/arcade.cpp
engines/hypno/grammar.h
engines/hypno/grammar_arc.cpp
engines/hypno/grammar_arc.y
engines/hypno/grammar_mis.cpp
engines/hypno/grammar_mis.y
engines/hypno/hypno.cpp
engines/hypno/hypno.h
engines/hypno/lexer_arc.cpp
engines/hypno/lexer_arc.l
engines/hypno/lexer_mis.cpp
engines/hypno/lexer_mis.l
engines/hypno/scene.cpp
engines/hypno/spider/arcade.cpp
engines/hypno/spider/spider.cpp
engines/hypno/spider/talk.cpp
engines/hypno/tokens_arc.h
engines/hypno/tokens_mis.h
engines/hypno/wet/wet.cpp
diff --git a/engines/hypno/actions.cpp b/engines/hypno/actions.cpp
index ec0cdf442d..1b21326cb8 100644
--- a/engines/hypno/actions.cpp
+++ b/engines/hypno/actions.cpp
@@ -63,9 +63,17 @@ void HypnoEngine::runMenu(Hotspots hs) {
loadImage("int_main/resume.smk", 0, 0, true);
}
-void HypnoEngine::runBackground(Background *a) {
- if (a->condition.size() > 0 && !_sceneState[a->condition])
- return;
+void HypnoEngine::runBackground(Background *a) {
+ if (a->condition.size() > 0) {
+ bool condition = _sceneState[a->condition];
+
+ if (a->flag1 == "/NSTATE" || a->flag2 == "/NSTATE")
+ condition = !condition;
+
+ if (!condition)
+ return;
+ }
+
loadImage(a->path, a->origin.x, a->origin.y, false);
}
@@ -88,15 +96,20 @@ void HypnoEngine::runCutscene(Cutscene *a) {
_nextSequentialVideoToPlay.push_back(MVideo(a->path, Common::Point(0, 0), false, true, false));
}
-void HypnoEngine::runGlobal(Global *a) {
+bool HypnoEngine::runGlobal(Global *a) {
if (a->command == "TURNON")
_sceneState[a->variable] = 1;
else if (a->command == "TURNOFF")
_sceneState[a->variable] = 0;
else if (a->command == "TOGGLE")
_sceneState[a->variable] = !_sceneState[a->variable];
+ else if (a->command == "CHECK")
+ return _sceneState[a->variable];
+ else if (a->command == "NCHECK")
+ return !_sceneState[a->variable];
else
error("Invalid command %s", a->command.c_str());
+ return true;
}
void HypnoEngine::runPlay(Play *a) {
@@ -144,6 +157,10 @@ void HypnoEngine::runChangeLevel(ChangeLevel *a) {
}
void HypnoEngine::runTalk(Talk *a) {
+ //_videosPlaying.clear();
+ //_nextParallelVideoToPlay.clear();
+ //_nextSequentialVideoToPlay.clear();
+
_conversation.push_back(a);
_refreshConversation = true;
}
diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index dffb769a12..ef5c59b6e9 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -89,6 +89,19 @@ ShootSequence HypnoEngine::parseShootList(const Common::String &filename, const
return seq;
}
+void HypnoEngine::loadArcadeLevel(const Common::String ¤t, const Common::String &next, const Common::String &prefix) {
+ Common::String arclevel = current + _difficulty + ".mi_";
+ debugC(1, kHypnoDebugParser, "Parsing %s", arclevel.c_str());
+ Common::String arc;
+ Common::String list;
+ splitArcadeFile(arclevel, arc, list);
+ debug("%s", arc.c_str());
+ parseArcadeShooting("", arclevel, arc);
+ _levels[arclevel].arcade.shootSequence = parseShootList(arclevel, list);
+ _levels[arclevel].arcade.prefix = prefix;
+ _levels[arclevel].arcade.levelIfWin = next + _difficulty + ".mi_";;
+}
+
void HypnoEngine::drawPlayer() { error("Function \"%s\" not implemented", __FUNCTION__); }
void HypnoEngine::drawHealth() { error("Function \"%s\" not implemented", __FUNCTION__); }
void HypnoEngine::drawShoot(const Common::Point &target) { error("Function \"%s\" not implemented", __FUNCTION__); }
@@ -100,7 +113,7 @@ void HypnoEngine::hitPlayer() {
}
void HypnoEngine::runArcade(ArcadeShooting &arc) {
-
+ _arcadeMode = arc.mode;
Common::Point mousePos;
Common::List<uint32> shootsToRemove;
ShootSequence shootSequence = arc.shootSequence;
@@ -115,7 +128,7 @@ void HypnoEngine::runArcade(ArcadeShooting &arc) {
_shoots.clear();
_playerFrames = decodeFrames(arc.player);
_playerFrameSep = 0;
-
+ _playerPosition = 0;
for (Frames::iterator it =_playerFrames.begin(); it != _playerFrames.end(); ++it) {
if ((*it)->getPixel(0, 0) == _pixelFormat.RGBToColor(0, 255, 255))
@@ -126,9 +139,11 @@ void HypnoEngine::runArcade(ArcadeShooting &arc) {
_playerFrameSep++;
}
- if (_playerFrameSep == (int)_playerFrames.size())
- error("No player separator frame found!");
- debugC(1, kHypnoDebugArcade, "Separator frame found at %d", _playerFrameSep);
+ if (_playerFrameSep == (int)_playerFrames.size()) {
+ debugC(1, kHypnoDebugArcade, "No player separator frame found in %s! (size: %d)", arc.player.c_str(), _playerFrames.size());
+ //_playerFrameSep = -1;
+ } else
+ debugC(1, kHypnoDebugArcade, "Separator frame found at %d", _playerFrameSep);
_playerFrameIdx = -1;
@@ -136,12 +151,14 @@ void HypnoEngine::runArcade(ArcadeShooting &arc) {
changeCursor("arcade");
playVideo(background);
+ background.decoder->setRate(1.5);
bool shootingPrimary = false;
bool shootingSecondary = false;
+ bool needsUpdate = true;
Common::Event event;
while (!shouldQuit()) {
-
+ needsUpdate = background.decoder->needsUpdate();
while (g_system->getEventManager()->pollEvent(event)) {
mousePos = g_system->getEventManager()->getMousePos();
// Events
@@ -156,6 +173,14 @@ void HypnoEngine::runArcade(ArcadeShooting &arc) {
background.decoder->pauseVideo(true);
showCredits();
background.decoder->pauseVideo(false);
+ } else if (event.kbd.keycode == Common::KEYCODE_LEFT) {
+ _playerPosition = 0;
+ } else if (event.kbd.keycode == Common::KEYCODE_DOWN) {
+ _playerPosition = 3;
+ } else if (event.kbd.keycode == Common::KEYCODE_RIGHT) {
+ _playerPosition = 7;
+ } else if (event.kbd.keycode == Common::KEYCODE_UP) {
+ _playerPosition = 11;
}
break;
@@ -182,17 +207,9 @@ void HypnoEngine::runArcade(ArcadeShooting &arc) {
}
}
- if (background.decoder->needsUpdate()) {
+ if (needsUpdate) {
drawScreen();
updateScreen(background);
- if (shootingPrimary || shootingSecondary) {
- shoot(mousePos);
- drawShoot(mousePos);
- shootingPrimary = false;
- }
-
- drawPlayer();
- drawHealth();
}
if (_health <= 0) {
@@ -257,7 +274,7 @@ void HypnoEngine::runArcade(ArcadeShooting &arc) {
} else if (frame > 0 && frame >= (int)(it->video->decoder->getFrameCount() - 2)) {
skipVideo(*it->video);
shootsToRemove.push_back(i);
- } else if (it->video->decoder->needsUpdate()) {
+ } else if (it->video->decoder->needsUpdate() && needsUpdate) {
updateScreen(*it->video);
}
}
@@ -276,6 +293,17 @@ void HypnoEngine::runArcade(ArcadeShooting &arc) {
playSound(_music, 1);
}
+ if (needsUpdate) {
+ if (shootingPrimary || shootingSecondary) {
+ shoot(mousePos);
+ drawShoot(mousePos);
+ shootingPrimary = false;
+ }
+
+ drawPlayer();
+ drawHealth();
+ }
+
g_system->delayMillis(10);
}
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index 4c11e96e05..2d9af09bea 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -130,15 +130,19 @@ public:
class Background : public Action {
public:
- Background(Filename path_, Common::Point origin_, Common::String condition_) {
+ Background(Filename path_, Common::Point origin_, Common::String condition_, Common::String flag1_, Common::String flag2_) {
type = BackgroundAction;
path = path_;
origin = origin_;
condition = condition_;
+ flag1 = flag1_;
+ flag2 = flag2_;
}
Filename path;
Common::Point origin;
Common::String condition;
+ Common::String flag1;
+ Common::String flag2;
};
class Overlay : public Action {
@@ -254,8 +258,10 @@ public:
TalkCommands commands;
bool active;
Filename background;
- Common::Point position;
+ Common::Point backgroundPos;
Common::Rect rect;
+ Filename second;
+ Common::Point secondPos;
};
class ChangeLevel : public Action {
@@ -324,6 +330,7 @@ public:
class ArcadeShooting {
public:
uint32 id;
+ Common::String mode;
Common::String levelIfWin;
Common::String levelIfLose;
Filename transitionVideo;
diff --git a/engines/hypno/grammar_arc.cpp b/engines/hypno/grammar_arc.cpp
index fdda3a3a85..69bcb4c34b 100644
--- a/engines/hypno/grammar_arc.cpp
+++ b/engines/hypno/grammar_arc.cpp
@@ -144,37 +144,38 @@ extern int HYPNO_ARC_debug;
FILENAME = 259,
BNTOK = 260,
SNTOK = 261,
- NUM = 262,
- COMMENT = 263,
- YXTOK = 264,
- CTOK = 265,
- DTOK = 266,
- HTOK = 267,
- HETOK = 268,
- RETTOK = 269,
- QTOK = 270,
- ENCTOK = 271,
- PTOK = 272,
- FTOK = 273,
- TTOK = 274,
- TPTOK = 275,
- ATOK = 276,
- VTOK = 277,
- OTOK = 278,
- O1TOK = 279,
- NTOK = 280,
- RTOK = 281,
- ITOK = 282,
- ZTOK = 283,
- FNTOK = 284,
- NONETOK = 285,
- A0TOK = 286,
- K0TOK = 287,
- P0TOK = 288,
- WTOK = 289,
- XTOK = 290,
- CB3TOK = 291,
- C02TOK = 292
+ KNTOK = 262,
+ YXTOK = 263,
+ NUM = 264,
+ COMMENT = 265,
+ CTOK = 266,
+ DTOK = 267,
+ HTOK = 268,
+ HETOK = 269,
+ RETTOK = 270,
+ QTOK = 271,
+ ENCTOK = 272,
+ PTOK = 273,
+ FTOK = 274,
+ TTOK = 275,
+ TPTOK = 276,
+ ATOK = 277,
+ VTOK = 278,
+ OTOK = 279,
+ O1TOK = 280,
+ NTOK = 281,
+ RTOK = 282,
+ ITOK = 283,
+ JTOK = 284,
+ ZTOK = 285,
+ FNTOK = 286,
+ NONETOK = 287,
+ A0TOK = 288,
+ P0TOK = 289,
+ WTOK = 290,
+ XTOK = 291,
+ CB3TOK = 292,
+ C02TOK = 293
};
#endif
@@ -188,7 +189,7 @@ union HYPNO_ARC_STYPE
char *s; /* string value */
int i; /* integer value */
-#line 192 "engines/hypno/grammar_arc.cpp" /* yacc.c:355 */
+#line 193 "engines/hypno/grammar_arc.cpp" /* yacc.c:355 */
};
typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;
@@ -205,7 +206,7 @@ int HYPNO_ARC_parse (void);
/* Copy the second part of user declarations. */
-#line 209 "engines/hypno/grammar_arc.cpp" /* yacc.c:358 */
+#line 210 "engines/hypno/grammar_arc.cpp" /* yacc.c:358 */
#ifdef short
# undef short
@@ -445,23 +446,23 @@ union yyalloc
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 26
+#define YYFINAL 6
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 105
+#define YYLAST 123
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 38
+#define YYNTOKENS 39
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 7
+#define YYNNTS 8
/* YYNRULES -- Number of rules. */
-#define YYNRULES 48
+#define YYNRULES 65
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 111
+#define YYNSTATES 131
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 292
+#define YYMAXUTOK 293
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -499,18 +500,20 @@ static const yytype_uint8 yytranslate[] =
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37
+ 35, 36, 37, 38
};
#if HYPNO_ARC_DEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
-static const yytype_uint8 yyrline[] =
+static const yytype_uint16 yyrline[] =
{
- 0, 76, 76, 77, 80, 81, 82, 85, 88, 89,
- 90, 91, 92, 93, 94, 95, 100, 105, 106, 110,
- 111, 115, 116, 126, 136, 137, 143, 144, 147, 148,
- 149, 152, 157, 162, 167, 171, 175, 179, 180, 181,
- 185, 186, 189, 190, 191, 192, 196, 203, 204
+ 0, 76, 76, 76, 77, 80, 81, 82, 85, 88,
+ 89, 90, 91, 92, 93, 94, 95, 100, 105, 106,
+ 110, 111, 115, 116, 126, 136, 137, 138, 144, 145,
+ 148, 149, 150, 153, 158, 163, 168, 172, 176, 180,
+ 184, 188, 192, 196, 200, 204, 208, 212, 216, 220,
+ 224, 228, 232, 235, 239, 240, 241, 246, 247, 250,
+ 251, 252, 253, 257, 264, 265
};
#endif
@@ -520,11 +523,11 @@ static const yytype_uint8 yyrline[] =
static const char *const yytname[] =
{
"$end", "error", "$undefined", "NAME", "FILENAME", "BNTOK", "SNTOK",
- "NUM", "COMMENT", "YXTOK", "CTOK", "DTOK", "HTOK", "HETOK", "RETTOK",
- "QTOK", "ENCTOK", "PTOK", "FTOK", "TTOK", "TPTOK", "ATOK", "VTOK",
- "OTOK", "O1TOK", "NTOK", "RTOK", "ITOK", "ZTOK", "FNTOK", "NONETOK",
- "A0TOK", "K0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK", "C02TOK", "$accept",
- "start", "header", "hline", "enc", "body", "bline", YY_NULLPTR
+ "KNTOK", "YXTOK", "NUM", "COMMENT", "CTOK", "DTOK", "HTOK", "HETOK",
+ "RETTOK", "QTOK", "ENCTOK", "PTOK", "FTOK", "TTOK", "TPTOK", "ATOK",
+ "VTOK", "OTOK", "O1TOK", "NTOK", "RTOK", "ITOK", "JTOK", "ZTOK", "FNTOK",
+ "NONETOK", "A0TOK", "P0TOK", "WTOK", "XTOK", "CB3TOK", "C02TOK",
+ "$accept", "start", "$@1", "header", "hline", "enc", "body", "bline", YY_NULLPTR
};
#endif
@@ -536,14 +539,14 @@ static const yytype_uint16 yytoknum[] =
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292
+ 285, 286, 287, 288, 289, 290, 291, 292, 293
};
# endif
-#define YYPACT_NINF -60
+#define YYPACT_NINF -72
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-60)))
+ (!!((Yystate) == (-72)))
#define YYTABLE_NINF -1
@@ -554,18 +557,20 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- 1, 26, 1, 3, 7, 10, 28, 35, -3, 17,
- 26, 48, 49, 50, 0, 54, 52, 53, 55, 56,
- 57, 60, 61, 38, 26, -60, -60, -60, 51, -60,
- -60, 62, 63, -60, 64, 65, -60, 66, 67, 68,
- 69, 70, 71, 72, -60, -60, -60, 73, -60, -60,
- -60, 74, 75, -60, -60, -60, -60, 76, -60, -60,
- -60, -60, -5, -60, -60, -60, 77, 79, 78, 81,
- 82, -5, 86, 84, -60, 85, 14, -60, 4, 87,
- 88, 89, 90, 33, -5, 91, 51, -60, -60, -60,
- -60, -60, 92, 93, -60, -60, -60, -60, 94, 95,
- 96, -60, -60, -60, -60, -60, -60, -60, -60, -60,
- -60
+ 1, -72, 1, 13, 55, -72, -72, 11, 23, 8,
+ 28, 2, -26, 55, 29, 31, 35, -1, 41, 38,
+ 42, 44, 46, 58, 59, 60, 54, 55, -72, 48,
+ -72, -72, 63, 76, 77, -72, 78, 79, -72, 80,
+ 81, 82, 83, 84, 85, 86, -72, -72, -72, 87,
+ -72, -72, -72, 88, 89, 90, -72, -72, -72, -72,
+ 92, -72, -72, -72, -72, -5, -72, -72, -72, -72,
+ 91, 97, 94, 95, 96, 98, -5, 102, 99, -72,
+ 100, 30, 101, -72, 0, 103, 104, 105, 75, -5,
+ 106, 48, 107, -72, -72, -72, -72, -72, 108, 109,
+ -72, -72, -72, -72, -72, -72, -72, -72, -72, -72,
+ -72, -72, -72, -72, -72, -72, -72, -72, -72, 110,
+ 111, -72, -72, -72, -72, -72, -72, -72, -72, -72,
+ -72
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -573,30 +578,32 @@ static const yytype_int8 yypact[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 0, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 3, 1, 22, 27, 7,
- 9, 0, 0, 5, 0, 0, 8, 0, 0, 0,
- 0, 0, 0, 0, 18, 19, 20, 0, 4, 26,
- 23, 0, 0, 21, 10, 16, 17, 0, 11, 12,
- 13, 14, 30, 25, 24, 15, 0, 0, 0, 0,
- 0, 30, 0, 0, 47, 0, 0, 48, 0, 0,
- 0, 0, 0, 0, 30, 0, 27, 42, 45, 43,
- 29, 33, 0, 0, 34, 35, 31, 32, 0, 0,
- 0, 44, 2, 28, 38, 46, 41, 37, 36, 39,
- 40
+ 0, 2, 0, 0, 7, 4, 1, 0, 0, 0,
+ 0, 0, 0, 7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 7, 23, 29,
+ 8, 10, 0, 0, 0, 6, 0, 0, 9, 0,
+ 0, 0, 0, 0, 0, 0, 19, 20, 21, 0,
+ 5, 28, 24, 0, 0, 0, 22, 11, 17, 18,
+ 0, 12, 13, 14, 15, 32, 27, 26, 25, 16,
+ 0, 0, 0, 0, 0, 0, 32, 0, 0, 64,
+ 0, 0, 0, 65, 0, 0, 0, 0, 0, 32,
+ 0, 29, 0, 59, 62, 60, 31, 35, 0, 0,
+ 36, 37, 50, 39, 40, 42, 48, 47, 41, 51,
+ 38, 46, 45, 49, 43, 44, 52, 33, 34, 0,
+ 0, 61, 3, 30, 55, 63, 56, 58, 54, 53,
+ 57
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -60, 102, -8, -60, 19, -59, -60
+ -72, 119, -72, 7, -72, 32, -71, -72
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- -1, 3, 23, 24, 50, 83, 84
+ -1, 3, 4, 26, 27, 52, 88, 89
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -604,70 +611,80 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
- 66, 67, 33, 26, 37, 68, 69, 70, 96, 71,
- 1, 27, 90, 72, 28, 2, 48, 94, 73, 95,
- 74, 75, 76, 77, 78, 103, 79, 80, 81, 82,
- 38, 4, 5, 31, 97, 29, 6, 7, 8, 9,
- 10, 11, 30, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 32, 34, 35, 36, 39, 40,
- 41, 44, 42, 43, 45, 46, 47, 49, 102, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 65, 63, 64, 86, 85, 87, 0, 62, 88, 89,
- 91, 92, 93, 0, 98, 99, 100, 101, 104, 106,
- 107, 108, 109, 110, 25, 105
+ 70, 71, 72, 39, 117, 96, 73, 74, 75, 1,
+ 76, 33, 34, 6, 77, 28, 2, 30, 123, 78,
+ 35, 79, 80, 81, 82, 83, 84, 29, 85, 86,
+ 87, 40, 118, 100, 50, 101, 102, 31, 36, 32,
+ 37, 103, 104, 105, 38, 41, 106, 42, 107, 108,
+ 109, 43, 110, 44, 111, 45, 112, 113, 114, 115,
+ 7, 8, 46, 47, 48, 51, 9, 10, 11, 12,
+ 13, 14, 53, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 49, 54, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 64, 69, 66, 67, 68,
+ 90, 91, 65, 92, 93, 94, 97, 95, 98, 99,
+ 116, 122, 119, 120, 121, 124, 126, 127, 128, 129,
+ 130, 5, 0, 125
};
static const yytype_int8 yycheck[] =
{
- 5, 6, 10, 0, 4, 10, 11, 12, 4, 14,
- 9, 4, 71, 18, 4, 14, 24, 3, 23, 5,
- 25, 26, 27, 28, 29, 84, 31, 32, 33, 34,
- 30, 5, 6, 36, 30, 7, 10, 11, 12, 13,
- 14, 15, 7, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 37, 7, 7, 7, 4, 7,
- 7, 4, 7, 7, 4, 4, 28, 16, 35, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 4, 7, 7, 4, 7, 7, -1, 14, 7, 7,
- 4, 7, 7, -1, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 2, 86
+ 5, 6, 7, 4, 4, 76, 11, 12, 13, 8,
+ 15, 37, 38, 0, 19, 4, 15, 9, 89, 24,
+ 13, 26, 27, 28, 29, 30, 31, 4, 33, 34,
+ 35, 32, 32, 3, 27, 5, 6, 9, 9, 37,
+ 9, 11, 12, 13, 9, 4, 16, 9, 18, 19,
+ 20, 9, 22, 9, 24, 9, 26, 27, 28, 29,
+ 5, 6, 4, 4, 4, 17, 11, 12, 13, 14,
+ 15, 16, 9, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 30, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 4, 9, 9, 9,
+ 9, 4, 15, 9, 9, 9, 4, 9, 9, 9,
+ 9, 36, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 2, -1, 91
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 9, 14, 39, 5, 6, 10, 11, 12, 13,
- 14, 15, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 40, 41, 39, 0, 4, 4, 7,
- 7, 36, 37, 40, 7, 7, 7, 4, 30, 4,
- 7, 7, 7, 7, 4, 4, 4, 28, 40, 16,
- 42, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 14, 7, 7, 4, 5, 6, 10, 11,
- 12, 14, 18, 23, 25, 26, 27, 28, 29, 31,
- 32, 33, 34, 43, 44, 7, 4, 7, 7, 7,
- 43, 4, 7, 7, 3, 5, 4, 30, 7, 7,
- 7, 7, 35, 43, 7, 42, 7, 7, 7, 7,
- 7
+ 0, 8, 15, 40, 41, 40, 0, 5, 6, 11,
+ 12, 13, 14, 15, 16, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 42, 43, 4, 4,
+ 9, 9, 37, 37, 38, 42, 9, 9, 9, 4,
+ 32, 4, 9, 9, 9, 9, 4, 4, 4, 30,
+ 42, 17, 44, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 15, 9, 9, 9, 4,
+ 5, 6, 7, 11, 12, 13, 15, 19, 24, 26,
+ 27, 28, 29, 30, 31, 33, 34, 35, 45, 46,
+ 9, 4, 9, 9, 9, 9, 45, 4, 9, 9,
+ 3, 5, 6, 11, 12, 13, 16, 18, 19, 20,
+ 22, 24, 26, 27, 28, 29, 9, 4, 32, 9,
+ 9, 9, 36, 45, 9, 44, 9, 9, 9, 9,
+ 9
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 38, 39, 39, 40, 40, 40, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 42, 42, 43, 43,
- 43, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44
+ 0, 39, 41, 40, 40, 42, 42, 42, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 44, 44,
+ 45, 45, 45, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
- 0, 2, 6, 2, 2, 2, 0, 2, 2, 2,
- 3, 3, 3, 3, 3, 4, 3, 3, 2, 2,
- 2, 3, 2, 3, 4, 4, 1, 0, 2, 2,
- 0, 2, 2, 2, 2, 2, 3, 3, 3, 3,
- 3, 3, 2, 2, 2, 2, 3, 1, 1
+ 0, 2, 0, 7, 2, 2, 2, 0, 2, 2,
+ 2, 3, 3, 3, 3, 3, 4, 3, 3, 2,
+ 2, 2, 3, 2, 3, 4, 4, 4, 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, 3, 3, 3, 3, 3, 3, 2,
+ 2, 2, 2, 3, 1, 1
};
@@ -1343,113 +1360,119 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
- case 7:
+ case 2:
+#line 76 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { g_parsedArc->mode = (yyvsp[0].s); }
+#line 1367 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 8:
#line 85 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
g_parsedArc->id = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1352 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1375 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 8:
+ case 9:
#line 88 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "F %d", (yyvsp[0].i)); }
-#line 1358 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1381 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 9:
+ case 10:
#line 89 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i)); }
-#line 1364 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1387 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 10:
+ case 11:
#line 90 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "P %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1370 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1393 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 11:
+ case 12:
#line 91 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "A %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1376 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1399 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 12:
+ case 13:
#line 92 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "V %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1382 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1405 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 13:
+ case 14:
#line 93 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1388 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1411 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 14:
+ case 15:
#line 94 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "O1 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1394 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1417 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 15:
+ case 16:
#line 95 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
g_parsedArc->transitionVideo = (yyvsp[-2].s);
g_parsedArc->transitionTime = (yyvsp[-1].i);
debugC(1, kHypnoDebugParser, "Tp %s %d %s", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].s));
}
-#line 1404 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1427 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 16:
+ case 17:
#line 100 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
g_parsedArc->transitionVideo = (yyvsp[-1].s);
g_parsedArc->transitionTime = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "T %s %d", (yyvsp[-1].s), (yyvsp[0].i));
}
-#line 1414 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1437 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 17:
+ case 18:
#line 105 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "T NONE %d", (yyvsp[0].i)); }
-#line 1420 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1443 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 18:
+ case 19:
#line 106 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
g_parsedArc->background = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "N %s", (yyvsp[0].s));
}
-#line 1429 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1452 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 19:
+ case 20:
#line 110 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "R %s", (yyvsp[0].s)); }
-#line 1435 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1458 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 20:
+ case 21:
#line 111 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
g_parsedArc->player = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1444 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1467 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 21:
+ case 22:
#line 115 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "Q %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1450 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1473 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 22:
+ case 23:
#line 116 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
if (Common::String("B0") == (yyvsp[-1].s))
@@ -1461,10 +1484,10 @@ yyreduce:
debugC(1, kHypnoDebugParser, "BN %s", (yyvsp[0].s));
}
-#line 1465 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1488 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 23:
+ case 24:
#line 126 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
if (Common::String("S0") == (yyvsp[-2].s))
@@ -1476,145 +1499,286 @@ yyreduce:
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s));
}
-#line 1480 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1503 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 24:
+ case 25:
#line 136 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "HE %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1486 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1509 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 25:
+ case 26:
#line 137 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { debugC(1, kHypnoDebugParser, "HE %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
+#line 1515 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 27:
+#line 138 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
g_parsedArc->health = (yyvsp[-1].i);
debugC(1, kHypnoDebugParser, "H %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1495 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1524 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 31:
-#line 152 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 33:
+#line 153 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
shoot = new Shoot();
shoot->animation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1505 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1534 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 32:
-#line 157 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 34:
+#line 158 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
shoot = new Shoot();
shoot->animation = "NONE";
debugC(1, kHypnoDebugParser, "FN NONE");
}
-#line 1515 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1544 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 33:
-#line 162 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 35:
+#line 163 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
shoot = new Shoot();
shoot->animation = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "FN %s", (yyvsp[0].s));
}
-#line 1525 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1554 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 34:
-#line 167 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 36:
+#line 168 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1534 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1563 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 35:
-#line 171 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 37:
+#line 172 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ // Workaround for NAME == B1
shoot->name = (yyvsp[0].s);
debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
}
-#line 1543 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1572 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 36:
-#line 175 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 38:
+#line 176 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == A
+ shoot->name = "A";
+ debugC(1, kHypnoDebugParser, "I A");
+ }
+#line 1581 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 39:
+#line 180 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == C
+ shoot->name = "C";
+ debugC(1, kHypnoDebugParser, "I C");
+ }
+#line 1590 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 40:
+#line 184 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == D
+ shoot->name = "D";
+ debugC(1, kHypnoDebugParser, "I D");
+ }
+#line 1599 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 41:
+#line 188 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == F
+ shoot->name = "F";
+ debugC(1, kHypnoDebugParser, "I F");
+ }
+#line 1608 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 42:
+#line 192 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == H
+ shoot->name = "H";
+ debugC(1, kHypnoDebugParser, "I H");
+ }
+#line 1617 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 43:
+#line 196 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == I
+ shoot->name = "I";
+ debugC(1, kHypnoDebugParser, "I I");
+ }
+#line 1626 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 44:
+#line 200 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == I
+ shoot->name = "J";
+ debugC(1, kHypnoDebugParser, "I J");
+ }
+#line 1635 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 45:
+#line 204 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == N
+ shoot->name = "N";
+ debugC(1, kHypnoDebugParser, "I N");
+ }
+#line 1644 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 46:
+#line 208 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == O
+ shoot->name = "O";
+ debugC(1, kHypnoDebugParser, "I O");
+ }
+#line 1653 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 47:
+#line 212 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == P
+ shoot->name = "P";
+ debugC(1, kHypnoDebugParser, "I P");
+ }
+#line 1662 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 48:
+#line 216 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == Q
+ shoot->name = "Q";
+ debugC(1, kHypnoDebugParser, "I Q");
+ }
+#line 1671 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 49:
+#line 220 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == R
+ shoot->name = "R";
+ debugC(1, kHypnoDebugParser, "I R");
+ }
+#line 1680 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 50:
+#line 224 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == S1
+ shoot->name = (yyvsp[0].s);
+ debugC(1, kHypnoDebugParser, "I %s", (yyvsp[0].s));
+ }
+#line 1689 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 51:
+#line 228 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ { // Workaround for NAME == T
+ shoot->name = "T";
+ debugC(1, kHypnoDebugParser, "I T");
+ }
+#line 1698 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 52:
+#line 232 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ {
+ debugC(1, kHypnoDebugParser, "J %d", (yyvsp[0].i));
+ }
+#line 1706 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+ break;
+
+ case 53:
+#line 235 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
shoot->position = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
debugC(1, kHypnoDebugParser, "A0 %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1552 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1715 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 37:
-#line 179 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 54:
+#line 239 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "R %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1558 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1721 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 38:
-#line 180 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 55:
+#line 240 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "BN %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1564 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1727 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 39:
-#line 181 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 56:
+#line 241 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
+ //if (Common::String("K0") == $1)
shoot->explosionFrame = (yyvsp[0].i);
- debugC(1, kHypnoDebugParser, "K0 %d %d", (yyvsp[-1].i), (yyvsp[0].i));
+ debugC(1, kHypnoDebugParser, "KN %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1573 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1737 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 40:
-#line 185 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 57:
+#line 246 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "P0 %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1579 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1743 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 41:
-#line 186 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 58:
+#line 247 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
debugC(1, kHypnoDebugParser, "O %d %d", (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1587 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1751 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 42:
-#line 189 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 59:
+#line 250 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "C %d", (yyvsp[0].i)); }
-#line 1593 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1757 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 43:
-#line 190 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 60:
+#line 251 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "H %d", (yyvsp[0].i)); }
-#line 1599 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1763 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 44:
-#line 191 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 61:
+#line 252 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "W %d", (yyvsp[0].i)); }
-#line 1605 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1769 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 45:
-#line 192 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 62:
+#line 253 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
shoot->damage = (yyvsp[0].i);
debugC(1, kHypnoDebugParser, "D %d", (yyvsp[0].i));
}
-#line 1614 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1778 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 46:
-#line 196 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 63:
+#line 257 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
if (Common::String("S1") == (yyvsp[-2].s))
shoot->endSound = (yyvsp[-1].s);
@@ -1622,28 +1786,28 @@ yyreduce:
// shoot->startSound = $2;
debugC(1, kHypnoDebugParser, "SN %s", (yyvsp[-1].s)); }
-#line 1626 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1790 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 47:
-#line 203 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 64:
+#line 264 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "N"); }
-#line 1632 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1796 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
- case 48:
-#line 204 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
+ case 65:
+#line 265 "engines/hypno/grammar_arc.y" /* yacc.c:1646 */
{
g_parsedArc->shoots.push_back(*shoot);
//delete shoot;
//shoot = nullptr;
debugC(1, kHypnoDebugParser, "Z");
}
-#line 1643 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1807 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
break;
-#line 1647 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
+#line 1811 "engines/hypno/grammar_arc.cpp" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
diff --git a/engines/hypno/grammar_arc.y b/engines/hypno/grammar_arc.y
index 522b8e4b40..4ae9028807 100644
--- a/engines/hypno/grammar_arc.y
+++ b/engines/hypno/grammar_arc.y
@@ -56,14 +56,14 @@ using namespace Hypno;
int i; /* integer value */
}
-%token<s> NAME FILENAME BNTOK SNTOK
+%token<s> NAME FILENAME BNTOK SNTOK KNTOK YXTOK
%token<i> NUM
// header
-%token COMMENT YXTOK CTOK DTOK HTOK HETOK RETTOK QTOK ENCTOK
-%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK O1TOK NTOK RTOK ITOK ZTOK
+%token COMMENT CTOK DTOK HTOK HETOK RETTOK QTOK ENCTOK
+%token PTOK FTOK TTOK TPTOK ATOK VTOK OTOK O1TOK NTOK RTOK ITOK JTOK ZTOK
// body
-%token FNTOK NONETOK A0TOK K0TOK P0TOK WTOK
+%token FNTOK NONETOK A0TOK P0TOK WTOK
// end
%token XTOK
@@ -73,7 +73,7 @@ using namespace Hypno;
%%
-start: YXTOK header ZTOK RETTOK body XTOK
+start: YXTOK { g_parsedArc->mode = $1; } header ZTOK RETTOK body XTOK
| RETTOK start
;
@@ -134,6 +134,7 @@ hline: CTOK NUM {
debugC(1, kHypnoDebugParser, "SN %s", $2);
}
| HETOK C02TOK NUM NUM { debugC(1, kHypnoDebugParser, "HE %d %d", $3, $4); }
+ | HETOK CB3TOK NUM NUM { debugC(1, kHypnoDebugParser, "HE %d %d", $3, $4); }
| HTOK CB3TOK NUM NUM {
g_parsedArc->health = $3;
debugC(1, kHypnoDebugParser, "H %d %d", $3, $4);
@@ -172,15 +173,75 @@ bline: FNTOK FILENAME {
shoot->name = $2;
debugC(1, kHypnoDebugParser, "I %s", $2);
}
+ | ITOK ATOK { // Workaround for NAME == A
+ shoot->name = "A";
+ debugC(1, kHypnoDebugParser, "I A");
+ }
+ | ITOK CTOK { // Workaround for NAME == C
+ shoot->name = "C";
+ debugC(1, kHypnoDebugParser, "I C");
+ }
+ | ITOK DTOK { // Workaround for NAME == D
+ shoot->name = "D";
+ debugC(1, kHypnoDebugParser, "I D");
+ }
+ | ITOK FTOK { // Workaround for NAME == F
+ shoot->name = "F";
+ debugC(1, kHypnoDebugParser, "I F");
+ }
+ | ITOK HTOK { // Workaround for NAME == H
+ shoot->name = "H";
+ debugC(1, kHypnoDebugParser, "I H");
+ }
+ | ITOK ITOK { // Workaround for NAME == I
+ shoot->name = "I";
+ debugC(1, kHypnoDebugParser, "I I");
+ }
+ | ITOK JTOK { // Workaround for NAME == I
+ shoot->name = "J";
+ debugC(1, kHypnoDebugParser, "I J");
+ }
+ | ITOK NTOK { // Workaround for NAME == N
+ shoot->name = "N";
+ debugC(1, kHypnoDebugParser, "I N");
+ }
+ | ITOK OTOK { // Workaround for NAME == O
+ shoot->name = "O";
+ debugC(1, kHypnoDebugParser, "I O");
+ }
+ | ITOK PTOK { // Workaround for NAME == P
+ shoot->name = "P";
+ debugC(1, kHypnoDebugParser, "I P");
+ }
+ | ITOK QTOK { // Workaround for NAME == Q
+ shoot->name = "Q";
+ debugC(1, kHypnoDebugParser, "I Q");
+ }
+ | ITOK RTOK { // Workaround for NAME == R
+ shoot->name = "R";
+ debugC(1, kHypnoDebugParser, "I R");
+ }
+ | ITOK SNTOK { // Workaround for NAME == S1
+ shoot->name = $2;
+ debugC(1, kHypnoDebugParser, "I %s", $2);
+ }
+ | ITOK TTOK { // Workaround for NAME == T
+ shoot->name = "T";
+ debugC(1, kHypnoDebugParser, "I T");
+ }
+ | JTOK NUM {
+ debugC(1, kHypnoDebugParser, "J %d", $2);
+ }
| A0TOK NUM NUM {
shoot->position = Common::Point($2, $3);
debugC(1, kHypnoDebugParser, "A0 %d %d", $2, $3);
}
| RTOK NUM NUM { debugC(1, kHypnoDebugParser, "R %d %d", $2, $3); }
| BNTOK NUM NUM { debugC(1, kHypnoDebugParser, "BN %d %d", $2, $3); }
- | K0TOK NUM NUM {
+ | KNTOK NUM NUM {
+ //if (Common::String("K0") == $1)
shoot->explosionFrame = $3;
- debugC(1, kHypnoDebugParser, "K0 %d %d", $2, $3);
+ debugC(1, kHypnoDebugParser, "KN %d %d", $2, $3);
}
| P0TOK NUM NUM { debugC(1, kHypnoDebugParser, "P0 %d %d", $2, $3); }
| OTOK NUM NUM {
diff --git a/engines/hypno/grammar_mis.cpp b/engines/hypno/grammar_mis.cpp
index b247ff427f..aee1000be4 100644
--- a/engines/hypno/grammar_mis.cpp
+++ b/engines/hypno/grammar_mis.cpp
@@ -153,41 +153,42 @@ extern int HYPNO_MIS_debug;
HOTSTOK = 265,
CUTSTOK = 266,
BACKTOK = 267,
- RETTOK = 268,
- TIMETOK = 269,
- PALETOK = 270,
- BBOXTOK = 271,
- OVERTOK = 272,
- WALNTOK = 273,
- MICETOK = 274,
- PLAYTOK = 275,
- ENDTOK = 276,
- MENUTOK = 277,
- SMENTOK = 278,
- ESCPTOK = 279,
- NRTOK = 280,
- AMBITOK = 281,
- GLOBTOK = 282,
- TONTOK = 283,
- TOFFTOK = 284,
- TALKTOK = 285,
- INACTOK = 286,
- FDTOK = 287,
- BOXXTOK = 288,
- ESCAPETOK = 289,
- SECONDTOK = 290,
- INTROTOK = 291,
- DEFAULTTOK = 292,
- PG = 293,
- PA = 294,
- PD = 295,
- PH = 296,
- PF = 297,
- PE = 298,
- PP = 299,
- PI = 300,
- PL = 301,
- PS = 302
+ INTRTOK = 268,
+ RETTOK = 269,
+ TIMETOK = 270,
+ PALETOK = 271,
+ BBOXTOK = 272,
+ OVERTOK = 273,
+ WALNTOK = 274,
+ MICETOK = 275,
+ PLAYTOK = 276,
+ ENDTOK = 277,
+ MENUTOK = 278,
+ SMENTOK = 279,
+ ESCPTOK = 280,
+ NRTOK = 281,
+ AMBITOK = 282,
+ GLOBTOK = 283,
+ TONTOK = 284,
+ TOFFTOK = 285,
+ TALKTOK = 286,
+ INACTOK = 287,
+ FDTOK = 288,
+ BOXXTOK = 289,
+ ESCAPETOK = 290,
+ SECONDTOK = 291,
+ INTROTOK = 292,
+ DEFAULTTOK = 293,
+ PG = 294,
+ PA = 295,
+ PD = 296,
+ PH = 297,
+ PF = 298,
+ PE = 299,
+ PP = 300,
+ PI = 301,
+ PL = 302,
+ PS = 303
};
#endif
@@ -201,7 +202,7 @@ union HYPNO_MIS_STYPE
char *s; /* string value */
int i; /* integer value */
-#line 205 "engines/hypno/grammar_mis.cpp" /* yacc.c:355 */
+#line 206 "engines/hypno/grammar_mis.cpp" /* yacc.c:355 */
};
typedef union HYPNO_MIS_STYPE HYPNO_MIS_STYPE;
@@ -218,7 +219,7 @@ int HYPNO_MIS_parse (void);
/* Copy the second part of user declarations. */
-#line 222 "engines/hypno/grammar_mis.cpp" /* yacc.c:358 */
+#line 223 "engines/hypno/grammar_mis.cpp" /* yacc.c:358 */
#ifdef short
# undef short
@@ -460,21 +461,21 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 3
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 107
+#define YYLAST 112
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 48
+#define YYNTOKENS 49
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 10
/* YYNRULES -- Number of rules. */
-#define YYNRULES 48
+#define YYNRULES 49
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 117
+#define YYNSTATES 121
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 302
+#define YYMAXUTOK 303
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -513,7 +514,7 @@ static const yytype_uint8 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
};
#if HYPNO_MIS_DEBUG
@@ -521,10 +522,10 @@ static const yytype_uint8 yytranslate[] =
static const yytype_uint16 yyrline[] =
{
0, 74, 74, 77, 82, 83, 87, 99, 105, 120,
- 126, 127, 134, 141, 147, 153, 159, 166, 173, 179,
- 185, 191, 197, 200, 206, 209, 210, 214, 215, 216,
- 217, 218, 219, 225, 226, 232, 238, 244, 251, 258,
- 264, 265, 266, 269, 270, 273, 274, 277, 278
+ 126, 127, 134, 141, 147, 153, 159, 166, 173, 180,
+ 186, 192, 198, 204, 207, 213, 216, 217, 221, 222,
+ 223, 227, 228, 229, 235, 236, 242, 248, 254, 261,
+ 268, 274, 279, 280, 283, 284, 287, 288, 291, 292
};
#endif
@@ -534,13 +535,14 @@ static const yytype_uint16 yyrline[] =
static const char *const yytname[] =
{
"$end", "error", "$undefined", "NAME", "FILENAME", "FLAG", "COMMENT",
- "GSSWITCH", "COMMAND", "NUM", "HOTSTOK", "CUTSTOK", "BACKTOK", "RETTOK",
- "TIMETOK", "PALETOK", "BBOXTOK", "OVERTOK", "WALNTOK", "MICETOK",
- "PLAYTOK", "ENDTOK", "MENUTOK", "SMENTOK", "ESCPTOK", "NRTOK", "AMBITOK",
- "GLOBTOK", "TONTOK", "TOFFTOK", "TALKTOK", "INACTOK", "FDTOK", "BOXXTOK",
- "ESCAPETOK", "SECONDTOK", "INTROTOK", "DEFAULTTOK", "PG", "PA", "PD",
- "PH", "PF", "PE", "PP", "PI", "PL", "PS", "$accept", "start", "init",
- "lines", "line", "alloctalk", "talk", "mflag", "flag", "gsswitch", YY_NULLPTR
+ "GSSWITCH", "COMMAND", "NUM", "HOTSTOK", "CUTSTOK", "BACKTOK", "INTRTOK",
+ "RETTOK", "TIMETOK", "PALETOK", "BBOXTOK", "OVERTOK", "WALNTOK",
+ "MICETOK", "PLAYTOK", "ENDTOK", "MENUTOK", "SMENTOK", "ESCPTOK", "NRTOK",
+ "AMBITOK", "GLOBTOK", "TONTOK", "TOFFTOK", "TALKTOK", "INACTOK", "FDTOK",
+ "BOXXTOK", "ESCAPETOK", "SECONDTOK", "INTROTOK", "DEFAULTTOK", "PG",
+ "PA", "PD", "PH", "PF", "PE", "PP", "PI", "PL", "PS", "$accept", "start",
+ "init", "lines", "line", "alloctalk", "talk", "mflag", "flag",
+ "gsswitch", YY_NULLPTR
};
#endif
@@ -553,14 +555,14 @@ static const yytype_uint16 yytoknum[] =
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302
+ 295, 296, 297, 298, 299, 300, 301, 302, 303
};
# endif
-#define YYPACT_NINF -71
+#define YYPACT_NINF -75
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-71)))
+ (!!((Yystate) == (-75)))
#define YYTABLE_NINF -1
@@ -571,18 +573,19 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- -71, 5, 62, -71, -10, 8, 9, -71, 10, 13,
- 14, 16, 18, 19, 1, 23, -71, -71, 25, 20,
- -71, -71, 62, 21, -71, 22, -71, -71, 28, 29,
- 30, 31, -71, -71, 23, 33, 40, 24, -71, 35,
- 37, 38, 39, -71, 41, -71, 42, -71, 45, 24,
- 24, 43, -71, 74, 83, 86, 24, 24, 24, 24,
- 24, -71, 82, 84, 24, 24, -71, 85, 26, 27,
- 26, 26, 27, 87, -71, -71, 88, 89, 90, 91,
- -71, -71, -71, -71, -71, 92, 93, -71, -71, 94,
- -71, 27, -71, -71, 27, 27, -71, 95, -71, 96,
- 97, 98, 24, 24, -71, 27, -71, -71, 26, -71,
- -71, -71, -71, -71, -71, 27, -71
+ -75, 5, 63, -75, -11, 8, 9, 10, -75, 11,
+ 13, 14, 15, 18, 19, 12, 25, -75, -75, 23,
+ 22, -75, -75, 63, 21, -75, 28, 29, -75, -75,
+ 30, 31, 33, 34, -75, -75, 25, 35, 43, 24,
+ -75, 38, 39, 40, 41, 42, -75, 44, -75, 71,
+ -75, 27, 24, 24, 80, -75, 48, 88, 89, 24,
+ 24, 24, 24, 24, -75, 86, 87, 24, 24, -75,
+ 90, 26, -75, 92, 26, 26, 92, 91, -75, -75,
+ 93, 94, 95, 96, -75, -75, -75, -75, -75, 97,
+ 98, -75, -75, 99, -75, 92, -75, -75, 92, 92,
+ -75, 100, -75, 101, 102, 103, 24, 24, -75, 92,
+ -75, -75, 26, -75, -75, -75, -75, -75, -75, 92,
+ -75
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -590,30 +593,31 @@ static const yytype_int8 yypact[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 3, 0, 5, 1, 0, 0, 0, 22, 0, 0,
- 0, 0, 0, 0, 0, 44, 8, 9, 0, 0,
- 23, 2, 5, 0, 17, 0, 10, 16, 0, 0,
- 0, 0, 21, 43, 44, 0, 0, 42, 4, 0,
- 0, 0, 0, 19, 0, 6, 0, 12, 0, 42,
- 42, 0, 28, 0, 0, 0, 42, 42, 42, 42,
- 42, 41, 0, 0, 42, 42, 20, 0, 48, 46,
- 48, 48, 46, 0, 24, 25, 0, 0, 0, 0,
- 32, 35, 36, 33, 34, 0, 0, 40, 39, 0,
- 47, 46, 45, 15, 46, 46, 13, 0, 27, 0,
- 0, 0, 42, 42, 7, 46, 18, 14, 48, 29,
- 30, 31, 37, 38, 11, 46, 26
+ 3, 0, 5, 1, 0, 0, 0, 0, 23, 0,
+ 0, 0, 0, 0, 0, 0, 45, 8, 9, 0,
+ 0, 24, 2, 5, 0, 18, 0, 0, 10, 16,
+ 0, 0, 0, 0, 22, 44, 45, 0, 0, 43,
+ 4, 0, 0, 0, 0, 0, 20, 0, 6, 0,
+ 12, 0, 43, 43, 0, 29, 0, 0, 0, 43,
+ 43, 43, 43, 43, 42, 0, 0, 43, 43, 21,
+ 0, 49, 17, 47, 49, 49, 47, 0, 25, 26,
+ 0, 0, 0, 0, 33, 36, 37, 34, 35, 0,
+ 0, 41, 40, 0, 48, 47, 46, 15, 47, 47,
+ 13, 0, 28, 0, 0, 0, 43, 43, 7, 47,
+ 19, 14, 49, 30, 31, 32, 38, 39, 11, 47,
+ 27
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -71, -71, -71, 6, -71, -71, -49, 0, -70, -67
+ -75, -75, -75, 75, -75, -75, -52, -4, -74, -71
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- -1, 1, 2, 21, 22, 37, 66, 34, 93, 91
+ -1, 1, 2, 22, 23, 39, 69, 36, 97, 95
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -621,70 +625,73 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
- 74, 75, 96, 94, 95, 3, 23, 80, 81, 82,
- 83, 84, 24, 25, 32, 87, 88, 27, 28, 26,
- 29, 105, 30, 31, 106, 107, 33, 36, 38, 35,
- 39, 40, 92, 90, 45, 114, 48, 41, 42, 43,
- 44, 115, 46, 47, 67, 116, 68, 69, 70, 73,
- 71, 72, 76, 112, 113, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 4, 5, 6, 7, 8, 9, 77, 10,
- 11, 12, 13, 14, 15, 16, 17, 78, 18, 19,
- 79, 85, 20, 86, 89, 0, 97, 98, 99, 100,
- 101, 102, 103, 104, 108, 109, 110, 111
+ 78, 79, 100, 98, 99, 3, 24, 84, 85, 86,
+ 87, 88, 25, 26, 27, 91, 92, 29, 30, 31,
+ 28, 109, 32, 33, 110, 111, 34, 37, 35, 38,
+ 41, 77, 48, 94, 0, 118, 51, 42, 43, 44,
+ 45, 119, 46, 47, 49, 120, 50, 70, 71, 72,
+ 73, 74, 81, 75, 116, 117, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 4, 5, 6, 7, 8, 9, 10,
+ 76, 11, 12, 13, 14, 15, 16, 17, 18, 80,
+ 19, 20, 82, 83, 21, 89, 90, 96, 40, 93,
+ 101, 0, 102, 103, 104, 105, 106, 107, 108, 112,
+ 113, 114, 115
};
static const yytype_int8 yycheck[] =
{
- 49, 50, 72, 70, 71, 0, 16, 56, 57, 58,
- 59, 60, 4, 4, 13, 64, 65, 4, 4, 9,
- 4, 91, 4, 4, 94, 95, 3, 7, 22, 4,
- 9, 9, 5, 7, 34, 105, 12, 9, 9, 9,
- 9, 108, 9, 3, 9, 115, 9, 9, 9, 4,
- 9, 9, 9, 102, 103, 31, 32, 33, 34, 35,
+ 52, 53, 76, 74, 75, 0, 17, 59, 60, 61,
+ 62, 63, 4, 4, 4, 67, 68, 4, 4, 4,
+ 9, 95, 4, 4, 98, 99, 14, 4, 3, 7,
+ 9, 4, 36, 7, -1, 109, 12, 9, 9, 9,
+ 9, 112, 9, 9, 9, 119, 3, 9, 9, 9,
+ 9, 9, 4, 9, 106, 107, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 10, 11, 12, 13, 14, 15, 4, 17,
- 18, 19, 20, 21, 22, 23, 24, 4, 26, 27,
- 4, 9, 30, 9, 9, -1, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9
+ 46, 47, 48, 10, 11, 12, 13, 14, 15, 16,
+ 9, 18, 19, 20, 21, 22, 23, 24, 25, 9,
+ 27, 28, 4, 4, 31, 9, 9, 5, 23, 9,
+ 9, -1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 49, 50, 0, 10, 11, 12, 13, 14, 15,
- 17, 18, 19, 20, 21, 22, 23, 24, 26, 27,
- 30, 51, 52, 16, 4, 4, 9, 4, 4, 4,
- 4, 4, 13, 3, 55, 4, 7, 53, 51, 9,
- 9, 9, 9, 9, 9, 55, 9, 3, 12, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 54, 9, 9, 9,
- 9, 9, 9, 4, 54, 54, 9, 4, 4, 4,
- 54, 54, 54, 54, 54, 9, 9, 54, 54, 9,
- 7, 57, 5, 56, 57, 57, 56, 9, 9, 9,
- 9, 9, 9, 9, 9, 56, 56, 56, 9, 9,
- 9, 9, 54, 54, 56, 57, 56
+ 0, 50, 51, 0, 10, 11, 12, 13, 14, 15,
+ 16, 18, 19, 20, 21, 22, 23, 24, 25, 27,
+ 28, 31, 52, 53, 17, 4, 4, 4, 9, 4,
+ 4, 4, 4, 4, 14, 3, 56, 4, 7, 54,
+ 52, 9, 9, 9, 9, 9, 9, 9, 56, 9,
+ 3, 12, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 55,
+ 9, 9, 9, 9, 9, 9, 9, 4, 55, 55,
+ 9, 4, 4, 4, 55, 55, 55, 55, 55, 9,
+ 9, 55, 55, 9, 7, 58, 5, 57, 58, 58,
+ 57, 9, 9, 9, 9, 9, 9, 9, 9, 57,
+ 57, 57, 9, 9, 9, 9, 55, 55, 57, 58,
+ 57
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 48, 49, 50, 51, 51, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 53, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 55, 55, 56, 56, 57, 57
+ 0, 49, 50, 51, 52, 52, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 54, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 56, 56, 57, 57, 58, 58
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 2, 0, 2, 0, 3, 6, 1, 1,
- 2, 7, 3, 5, 6, 5, 2, 2, 6, 3,
- 3, 2, 1, 0, 2, 2, 6, 3, 1, 4,
- 4, 4, 2, 2, 2, 2, 2, 4, 4, 2,
- 2, 1, 0, 1, 0, 1, 0, 1, 0
+ 2, 7, 3, 5, 6, 5, 2, 4, 2, 6,
+ 3, 3, 2, 1, 0, 2, 2, 6, 3, 1,
+ 4, 4, 4, 2, 2, 2, 2, 2, 4, 4,
+ 2, 2, 1, 0, 1, 0, 1, 0, 1, 0
};
@@ -1366,7 +1373,7 @@ yyreduce:
smenu_idx.push_back(-1);
stack.push_back(new Hotspots());
}
-#line 1370 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1377 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 6:
@@ -1383,7 +1390,7 @@ yyreduce:
smenu_idx.pop_back();
smenu_idx.push_back(idx);
}
-#line 1387 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1394 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 7:
@@ -1394,7 +1401,7 @@ yyreduce:
Hotspots *cur = stack.back();
cur->push_back(*hot);
}
-#line 1398 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1405 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 8:
@@ -1414,7 +1421,7 @@ yyreduce:
stack.push_back(hot->smenu);
debugC(1, kHypnoDebugParser, "SUBMENU");
}
-#line 1418 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1425 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 9:
@@ -1425,25 +1432,25 @@ yyreduce:
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "ESC SUBMENU"); }
-#line 1429 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1436 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 10:
#line 126 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "TIME %d", (yyvsp[0].i)); }
-#line 1435 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1442 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 11:
#line 127 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
- Background *a = new Background((yyvsp[-5].s), Common::Point((yyvsp[-4].i), (yyvsp[-3].i)), (yyvsp[-2].s));
+ Background *a = new Background((yyvsp[-5].s), Common::Point((yyvsp[-4].i), (yyvsp[-3].i)), (yyvsp[-2].s), (yyvsp[-1].s), (yyvsp[0].s));
Hotspots *cur = stack.back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "BACK");
}
-#line 1447 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1454 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 12:
@@ -1455,7 +1462,7 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "GLOB");
}
-#line 1459 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1466 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 13:
@@ -1466,7 +1473,7 @@ yyreduce:
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "AMBI %d %d", (yyvsp[-2].i), (yyvsp[-1].i)); }
-#line 1470 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1477 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 14:
@@ -1477,7 +1484,7 @@ yyreduce:
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "PLAY %s.", (yyvsp[-4].s)); }
-#line 1481 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1488 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 15:
@@ -1488,7 +1495,7 @@ yyreduce:
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
}
-#line 1492 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1499 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 16:
@@ -1500,11 +1507,23 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "PALE");
}
-#line 1504 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1511 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
case 17:
#line 166 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ {
+ Cutscene *a = new Cutscene((yyvsp[-2].s));
+ Hotspots *cur = stack.back();
+ Hotspot *hot = &cur->back();
+ hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "INTRO %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
+ }
+#line 1523 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+ break;
+
+ case 18:
+#line 173 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
Cutscene *a = new Cutscene((yyvsp[0].s));
Hotspots *cur = stack.back();
@@ -1512,174 +1531,177 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "CUTS %s", (yyvsp[0].s));
}
-#line 1516 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1535 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 18:
-#line 173 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 19:
+#line 180 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
WalN *a = new WalN((yyvsp[-4].s), Common::Point((yyvsp[-3].i), (yyvsp[-2].i)), (yyvsp[-1].s), (yyvsp[0].s));
Hotspots *cur = stack.back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "WALN %s %d %d", (yyvsp[-4].s), (yyvsp[-3].i), (yyvsp[-2].i)); }
-#line 1527 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1546 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 19:
-#line 179 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 20:
+#line 186 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
Mice *a = new Mice((yyvsp[-1].s), (yyvsp[0].i)-1);
Hotspots *cur = stack.back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
}
-#line 1538 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1557 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 20:
-#line 185 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 21:
+#line 192 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
Hotspots *cur = stack.back();
Hotspot *hot = &cur->back();
hot->actions.push_back(talk_action);
talk_action = nullptr;
debugC(1, kHypnoDebugParser, "TALK"); }
-#line 1549 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1568 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 21:
-#line 191 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 22:
+#line 198 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
debugC(1, kHypnoDebugParser, "explicit END");
g_parsedHots = stack.back();
stack.pop_back();
smenu_idx.pop_back();
}
-#line 1560 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1579 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 22:
-#line 197 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 23:
+#line 204 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debug("implicit END"); }
-#line 1566 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1585 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 23:
-#line 200 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 24:
+#line 207 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
assert(talk_action == nullptr);
talk_action = new Talk();
talk_action->active = true;
}
-#line 1576 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1595 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 24:
-#line 206 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 25:
+#line 213 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
talk_action->active = false;
debugC(1, kHypnoDebugParser, "inactive"); }
-#line 1584 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1603 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 25:
-#line 209 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 26:
+#line 216 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "inactive"); }
-#line 1590 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1609 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 26:
-#line 210 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 27:
+#line 217 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
talk_action->background = (yyvsp[-4].s);
- talk_action->position = Common::Point((yyvsp[-3].i), (yyvsp[-2].i));
+ talk_action->backgroundPos = Common::Point((yyvsp[-3].i), (yyvsp[-2].i));
debugC(1, kHypnoDebugParser, "BACK in TALK"); }
-#line 1599 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1618 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 27:
-#line 214 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 28:
+#line 221 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "BOXX %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1605 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1624 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 28:
-#line 215 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 29:
+#line 222 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "ESCAPE"); }
-#line 1611 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1630 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 29:
-#line 216 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
- { debugC(1, kHypnoDebugParser, "SECOND %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1617 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+ case 30:
+#line 223 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ {
+ talk_action->second = (yyvsp[-2].s);
+ talk_action->secondPos = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
+ debugC(1, kHypnoDebugParser, "SECOND %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); }
+#line 1639 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 30:
-#line 217 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 31:
+#line 227 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "INTRO %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1623 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1645 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 31:
-#line 218 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 32:
+#line 228 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "DEFAULT %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1629 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1651 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 32:
-#line 219 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 33:
+#line 229 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
TalkCommand talk_cmd;
talk_cmd.command = "G";
talk_cmd.path = (yyvsp[-1].s)+2;
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1640 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1662 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 33:
-#line 225 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 34:
+#line 235 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1646 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1668 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 34:
-#line 226 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 35:
+#line 236 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
TalkCommand talk_cmd;
talk_cmd.command = "F";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1;
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1657 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1679 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 35:
-#line 232 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 36:
+#line 242 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
TalkCommand talk_cmd;
talk_cmd.command = "A";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1;
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "|A%d", talk_cmd.num); }
-#line 1668 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1690 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 36:
-#line 238 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 37:
+#line 248 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
TalkCommand talk_cmd;
talk_cmd.command = "D";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1;
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1679 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1701 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 37:
-#line 244 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 38:
+#line 254 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
TalkCommand talk_cmd;
talk_cmd.command = "P";
@@ -1687,11 +1709,11 @@ yyreduce:
talk_cmd.position = Common::Point((yyvsp[-2].i), (yyvsp[-1].i));
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s %d %d", (yyvsp[-3].s), (yyvsp[-2].i), (yyvsp[-1].i)); }
-#line 1691 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1713 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 38:
-#line 251 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 39:
+#line 261 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
TalkCommand talk_cmd;
talk_cmd.command = "I";
@@ -1699,70 +1721,74 @@ yyreduce:
talk_cmd.position = Common::Point((yyvsp[-2].i), (yyvsp[-1].i));
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s %d %d", (yyvsp[-3].s), (yyvsp[-2].i), (yyvsp[-1].i)); }
-#line 1703 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1725 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 39:
-#line 258 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 40:
+#line 268 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
TalkCommand talk_cmd;
talk_cmd.command = "S";
talk_cmd.variable = (yyvsp[-1].s)+2;
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1714 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1736 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 40:
-#line 264 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
- { debugC(1, kHypnoDebugParser, "|L"); }
-#line 1720 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+ case 41:
+#line 274 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ {
+ TalkCommand talk_cmd;
+ talk_cmd.command = "L";
+ talk_action->commands.push_back(talk_cmd);
+ debugC(1, kHypnoDebugParser, "|L"); }
+#line 1746 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 41:
-#line 265 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 42:
+#line 279 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "|E"); }
-#line 1726 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1752 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 43:
-#line 269 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 44:
+#line 283 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "name: %s", (yyvsp[0].s)); }
-#line 1732 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1758 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 44:
-#line 270 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 45:
+#line 284 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = scumm_strdup(""); }
-#line 1738 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1764 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 45:
-#line 273 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 46:
+#line 287 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "flag: %s", (yyvsp[0].s)); }
-#line 1744 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1770 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 46:
-#line 274 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 47:
+#line 288 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = scumm_strdup(""); }
-#line 1750 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1776 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 47:
-#line 277 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 48:
+#line 291 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "switch %s", (yyvsp[0].s)); }
-#line 1756 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1782 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
- case 48:
-#line 278 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
+ case 49:
+#line 292 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = scumm_strdup(""); }
-#line 1762 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1788 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break;
-#line 1766 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
+#line 1792 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
diff --git a/engines/hypno/grammar_mis.y b/engines/hypno/grammar_mis.y
index 99b0078994..6fc1010524 100644
--- a/engines/hypno/grammar_mis.y
+++ b/engines/hypno/grammar_mis.y
@@ -61,7 +61,7 @@ using namespace Hypno;
%token<s> NAME FILENAME FLAG COMMENT GSSWITCH COMMAND
%token<i> NUM
-%token HOTSTOK CUTSTOK BACKTOK RETTOK TIMETOK PALETOK BBOXTOK OVERTOK WALNTOK MICETOK PLAYTOK ENDTOK
+%token HOTSTOK CUTSTOK BACKTOK INTRTOK RETTOK TIMETOK PALETOK BBOXTOK OVERTOK WALNTOK MICETOK PLAYTOK ENDTOK
%token MENUTOK SMENTOK ESCPTOK NRTOK AMBITOK
%token GLOBTOK TONTOK TOFFTOK
%token TALKTOK INACTOK FDTOK BOXXTOK ESCAPETOK SECONDTOK INTROTOK DEFAULTTOK
@@ -125,7 +125,7 @@ line: MENUTOK mflag mflag {
debugC(1, kHypnoDebugParser, "ESC SUBMENU"); }
| TIMETOK NUM { debugC(1, kHypnoDebugParser, "TIME %d", $2); }
| BACKTOK FILENAME NUM NUM gsswitch flag flag {
- Background *a = new Background($2, Common::Point($3, $4), $5);
+ Background *a = new Background($2, Common::Point($3, $4), $5, $6, $7);
Hotspots *cur = stack.back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
@@ -163,6 +163,13 @@ line: MENUTOK mflag mflag {
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "PALE");
}
+ | INTRTOK FILENAME NUM NUM {
+ Cutscene *a = new Cutscene($2);
+ Hotspots *cur = stack.back();
+ Hotspot *hot = &cur->back();
+ hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "INTRO %s %d %d", $2, $3, $4);
+ }
| CUTSTOK FILENAME {
Cutscene *a = new Cutscene($2);
Hotspots *cur = stack.back();
@@ -209,11 +216,14 @@ talk: INACTOK talk {
| FDTOK talk { debugC(1, kHypnoDebugParser, "inactive"); }
| BACKTOK FILENAME NUM NUM gsswitch flag {
talk_action->background = $2;
- talk_action->position = Common::Point($3, $4);
+ talk_action->backgroundPos = Common::Point($3, $4);
debugC(1, kHypnoDebugParser, "BACK in TALK"); }
| BOXXTOK NUM NUM { debugC(1, kHypnoDebugParser, "BOXX %d %d", $2, $3); }
| ESCAPETOK { debugC(1, kHypnoDebugParser, "ESCAPE"); }
- | SECONDTOK FILENAME NUM NUM { debugC(1, kHypnoDebugParser, "SECOND %s %d %d", $2, $3, $4); }
+ | SECONDTOK FILENAME NUM NUM {
+ talk_action->second = $2;
+ talk_action->secondPos = Common::Point($3, $4);
+ debugC(1, kHypnoDebugParser, "SECOND %s %d %d", $2, $3, $4); }
| INTROTOK FILENAME NUM NUM { debugC(1, kHypnoDebugParser, "INTRO %s %d %d", $2, $3, $4); }
| DEFAULTTOK FILENAME NUM NUM { debugC(1, kHypnoDebugParser, "DEFAULT %s %d %d", $2, $3, $4); }
| PG talk {
@@ -261,7 +271,11 @@ talk: INACTOK talk {
talk_cmd.variable = $1+2;
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", $1); }
- | PL talk { debugC(1, kHypnoDebugParser, "|L"); }
+ | PL talk {
+ TalkCommand talk_cmd;
+ talk_cmd.command = "L";
+ talk_action->commands.push_back(talk_cmd);
+ debugC(1, kHypnoDebugParser, "|L"); }
| PE { debugC(1, kHypnoDebugParser, "|E"); }
| /*nothing*/
;
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index 8d1d536b0d..81b0080f22 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -167,7 +167,7 @@ void HypnoEngine::runLevel(Common::String &name) {
MVideo v(_levels[name].arcade.intro, Common::Point(0, 0), false, true, false);
runIntro(v);
}
- changeScreenMode("arcade");
+ changeScreenMode("320x200");
runArcade(_levels[name].arcade);
} else if (!_levels[name].code.name.empty()) {
debugC(1, kHypnoDebugScene, "Executing hardcoded level %s", name.c_str());
@@ -176,6 +176,7 @@ void HypnoEngine::runLevel(Common::String &name) {
MVideo v(_levels[name].arcade.intro, Common::Point(0, 0), false, true, false);
runIntro(v);
}
+ // Resolution depends on the game
runCode(_levels[name].code);
} else {
debugC(1, kHypnoDebugScene, "Executing scene level %s", name.c_str());
@@ -185,7 +186,7 @@ void HypnoEngine::runLevel(Common::String &name) {
MVideo v(_levels[name].scene.intro, Common::Point(0, 0), false, true, false);
runIntro(v);
}
- changeScreenMode("scene");
+ changeScreenMode("640x480");
runScene(_levels[name].scene);
}
}
@@ -225,7 +226,7 @@ void HypnoEngine::runIntro(MVideo &video) {
}
}
-void HypnoEngine::runCode(Code code) { error("Function \"%s\" not implemented", __FUNCTION__); }
+void HypnoEngine::runCode(Code &code) { error("Function \"%s\" not implemented", __FUNCTION__); }
void HypnoEngine::showCredits() { error("Function \"%s\" not implemented", __FUNCTION__); }
void HypnoEngine::loadImage(const Common::String &name, int x, int y, bool transparent, int frameNumber) {
@@ -326,7 +327,7 @@ Frames HypnoEngine::decodeFrames(const Common::String &name) {
void HypnoEngine::changeScreenMode(const Common::String &mode) {
debugC(1, kHypnoDebugMedia, "%s(%s)", __FUNCTION__, mode.c_str());
- if (mode == "scene") {
+ if (mode == "640x480") {
_screenW = 640;
_screenH = 480;
@@ -341,7 +342,7 @@ void HypnoEngine::changeScreenMode(const Common::String &mode) {
_transparentColor = _pixelFormat.RGBToColor(0, 0x82, 0);
_compositeSurface->setTransparentColor(_transparentColor);
- } else if (mode == "arcade") {
+ } else if (mode == "320x200") {
_screenW = 320;
_screenH = 200;
@@ -390,6 +391,7 @@ void HypnoEngine::updateScreen(MVideo &video) {
void HypnoEngine::drawScreen() {
g_system->copyRectToScreen(_compositeSurface->getPixels(), _compositeSurface->pitch, 0, 0, _screenW, _screenH);
g_system->updateScreen();
+ g_system->delayMillis(10);
}
// Video handling
@@ -406,8 +408,11 @@ void HypnoEngine::playVideo(MVideo &video) {
file = fixSmackerHeader(file);
- if (video.decoder != nullptr)
- error("Video %s was not previously closed and deallocated", video.path.c_str());
+ if (video.decoder != nullptr) {
+ debugC(1, kHypnoDebugMedia, "Restarting %s!!!!", video.path.c_str());
+ delete video.decoder;
+ }
+ //error("Video %s was not previously closed and deallocated", video.path.c_str());
video.decoder = new HypnoSmackerDecoder();
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index a0164b345e..3780bb2b4d 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -96,6 +96,7 @@ public:
void parseScene(const Common::String &prefix, const Common::String &filename);
void parseArcadeShooting(const Common::String &prefix, const Common::String &name, const Common::String &data);
ShootSequence parseShootList(const Common::String &name, const Common::String &data);
+ void loadArcadeLevel(const Common::String ¤t, const Common::String &next, const Common::String &prefix);
LibFile *loadLib(const Filename &prefix, const Filename &filename, bool encrypted);
// User input
@@ -143,7 +144,7 @@ public:
void runPlay(Play *a);
void runAmbient(Ambient *a);
void runWalN(WalN *a);
- void runGlobal(Global *a);
+ bool runGlobal(Global *a);
void runTalk(Talk *a);
void runChangeLevel(ChangeLevel *a);
@@ -173,6 +174,7 @@ public:
// Movies
Videos _nextSequentialVideoToPlay;
Videos _nextParallelVideoToPlay;
+ Videos _nextLoopingVideoToPlay;
Videos _videosPlaying;
// Sounds
@@ -184,6 +186,8 @@ public:
bool _noStopSounds;
// Arcade
+ Common::String _arcadeMode;
+ uint32 _playerPosition;
int detectTarget(const Common::Point &mousePos);
virtual bool clickedPrimaryShoot(const Common::Point &mousePos);
virtual bool clickedSecondaryShoot(const Common::Point &mousePos);
@@ -213,7 +217,7 @@ public:
virtual void leftClickedConversation(const Common::Point &mousePos);
// For some menus and hardcoded puzzles
- virtual void runCode(Code code);
+ virtual void runCode(Code &code);
// Transitions
void runTransition(Transition trans);
@@ -247,11 +251,10 @@ public:
void drawShoot(const Common::Point &target) override;
void drawPlayer() override;
void drawHealth() override;
- void runCode(Code code) override;
+ void runCode(Code &code) override;
private:
- void loadLevel(const Common::String ¤t, const Common::String &next, const Common::String &prefix);
- void runMainMenu(Code code);
+ void runMainMenu(Code &code);
};
class SpiderEngine : public HypnoEngine {
@@ -264,14 +267,14 @@ public:
void drawShoot(const Common::Point &target) override;
void drawPlayer() override;
void drawHealth() override;
- void runCode(Code code) override;
+ void runCode(Code &code) override;
void showConversation() override;
void rightClickedConversation(const Common::Point &mousePos) override;
void leftClickedConversation(const Common::Point &mousePos) override;
private:
- void runMatrix(Code code);
+ void runMatrix(Code &code);
};
class BoyzEngine : public HypnoEngine {
diff --git a/engines/hypno/lexer_arc.cpp b/engines/hypno/lexer_arc.cpp
index e09952bc02..3c9cb5e67f 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 38
-#define YY_END_OF_BUFFER 39
+#define YY_NUM_RULES 41
+#define YY_END_OF_BUFFER 42
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -642,14 +642,15 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[59] =
+static const flex_int16_t yy_accept[67] =
{ 0,
- 0, 0, 39, 37, 34, 36, 32, 32, 37, 31,
- 31, 37, 7, 29, 2, 3, 29, 21, 5, 13,
- 29, 11, 9, 6, 14, 12, 29, 18, 8, 16,
- 17, 29, 15, 29, 33, 36, 31, 31, 0, 30,
- 23, 29, 24, 20, 4, 25, 29, 10, 26, 22,
- 19, 27, 29, 28, 35, 29, 1, 0
+ 0, 0, 42, 40, 37, 39, 35, 35, 40, 31,
+ 31, 31, 40, 7, 32, 2, 3, 32, 22, 5,
+ 13, 14, 32, 11, 9, 6, 15, 12, 32, 19,
+ 8, 17, 18, 32, 16, 32, 36, 39, 31, 34,
+ 31, 31, 31, 0, 33, 24, 32, 25, 21, 4,
+ 26, 32, 10, 27, 23, 20, 28, 32, 30, 30,
+ 29, 29, 38, 32, 1, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -661,18 +662,18 @@ static const YY_CHAR yy_ec[256] =
1, 1, 1, 1, 6, 7, 1, 8, 9, 10,
11, 11, 11, 11, 11, 11, 11, 1, 12, 1,
1, 1, 1, 1, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 19, 22, 19, 19, 23, 24, 25,
- 26, 27, 28, 29, 19, 30, 31, 32, 33, 34,
- 1, 7, 1, 1, 35, 1, 36, 36, 36, 36,
+ 19, 20, 21, 22, 23, 19, 19, 24, 25, 26,
+ 27, 28, 29, 30, 19, 31, 32, 33, 34, 35,
+ 1, 7, 1, 1, 36, 1, 37, 37, 37, 37,
- 36, 36, 36, 36, 36, 36, 37, 36, 36, 36,
- 36, 38, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 1, 39, 1, 1, 1, 1, 1, 1,
+ 37, 37, 37, 37, 37, 37, 38, 37, 37, 37,
+ 37, 39, 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 1, 40, 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, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 40, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 41, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -684,93 +685,101 @@ static const YY_CHAR yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static const YY_CHAR yy_meta[41] =
+static const YY_CHAR yy_meta[42] =
{ 0,
1, 1, 1, 2, 1, 1, 3, 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, 1, 1
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1
} ;
-static const flex_int16_t yy_base[64] =
+static const flex_int16_t yy_base[73] =
{ 0,
- 0, 0, 133, 155, 155, 129, 155, 155, 33, 37,
- 41, 0, 46, 48, 124, 123, 122, 60, 65, 121,
- 66, 53, 69, 72, 119, 118, 76, 68, 117, 116,
- 115, 74, 114, 0, 155, 117, 80, 105, 114, 0,
- 111, 110, 100, 98, 97, 95, 85, 94, 93, 92,
- 91, 90, 0, 155, 91, 86, 88, 155, 144, 146,
- 148, 90, 150
+ 0, 0, 149, 173, 173, 145, 173, 173, 34, 38,
+ 42, 46, 0, 51, 53, 140, 139, 138, 65, 70,
+ 137, 135, 71, 58, 77, 81, 134, 133, 83, 78,
+ 132, 131, 130, 88, 129, 0, 173, 132, 88, 0,
+ 92, 120, 81, 129, 0, 126, 125, 116, 113, 111,
+ 108, 98, 107, 106, 105, 104, 103, 0, 0, 173,
+ 0, 173, 104, 99, 101, 173, 158, 162, 164, 166,
+ 103, 168
} ;
-static const flex_int16_t yy_def[64] =
+static const flex_int16_t yy_def[73] =
{ 0,
- 58, 1, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 59, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 61, 60, 62, 58, 58, 58, 58, 59, 63,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 62, 58, 59, 60, 60, 0, 58, 58,
- 58, 58, 58
+ 66, 1, 66, 66, 66, 66, 66, 66, 66, 67,
+ 67, 67, 68, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 70, 69, 71, 66, 66, 66, 67,
+ 67, 67, 42, 68, 72, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 71, 67, 66,
+ 67, 66, 68, 69, 69, 0, 66, 66, 66, 66,
+ 66, 66
} ;
-static const flex_int16_t yy_nxt[196] =
+static const flex_int16_t yy_nxt[215] =
{ 0,
- 4, 5, 6, 7, 8, 9, 4, 10, 10, 11,
- 10, 12, 13, 14, 15, 16, 17, 18, 17, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 17, 17, 17, 8, 35,
- 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 38, 37, 40, 41, 40, 43, 43, 43, 43, 40,
- 43, 43, 43, 43, 43, 43, 40, 44, 44, 44,
- 44, 40, 40, 46, 40, 40, 47, 48, 40, 49,
- 40, 45, 40, 50, 50, 50, 50, 37, 37, 37,
- 37, 40, 40, 53, 40, 55, 40, 40, 40, 40,
-
- 40, 40, 57, 40, 40, 51, 40, 56, 42, 42,
- 42, 42, 37, 37, 37, 37, 40, 40, 55, 36,
- 40, 40, 40, 40, 40, 40, 54, 40, 40, 40,
- 40, 36, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 54, 58, 54, 39, 58, 39, 39, 42, 42,
- 52, 52, 40, 40, 3, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58
-
+ 4, 5, 6, 7, 8, 9, 4, 10, 11, 12,
+ 10, 13, 14, 15, 16, 17, 18, 19, 18, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 18, 18, 18, 8,
+ 37, 39, 39, 39, 39, 41, 41, 41, 41, 41,
+ 42, 41, 41, 41, 41, 43, 41, 45, 46, 45,
+ 48, 48, 48, 48, 45, 48, 48, 48, 48, 48,
+ 48, 45, 49, 49, 49, 49, 45, 45, 51, 51,
+ 51, 51, 52, 45, 45, 53, 50, 45, 54, 45,
+ 55, 55, 55, 55, 45, 39, 39, 39, 39, 41,
+
+ 41, 41, 41, 61, 45, 45, 58, 45, 63, 45,
+ 45, 45, 45, 45, 45, 65, 56, 45, 61, 45,
+ 62, 64, 45, 47, 47, 47, 47, 41, 41, 41,
+ 41, 45, 45, 63, 38, 45, 45, 45, 45, 45,
+ 45, 45, 59, 45, 45, 45, 45, 38, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 59, 66, 60,
+ 40, 40, 44, 66, 44, 44, 47, 47, 57, 57,
+ 45, 45, 3, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66
} ;
-static const flex_int16_t yy_chk[196] =
+static const flex_int16_t yy_chk[215] =
{ 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,
- 9, 9, 9, 9, 10, 10, 10, 10, 11, 11,
- 11, 11, 13, 13, 14, 14, 14, 14, 14, 22,
- 14, 14, 14, 14, 14, 14, 18, 18, 18, 18,
- 18, 19, 21, 21, 28, 23, 22, 23, 24, 24,
- 32, 19, 27, 27, 27, 27, 27, 37, 37, 37,
- 37, 47, 56, 62, 57, 55, 52, 51, 50, 49,
-
- 48, 46, 56, 45, 44, 28, 43, 47, 32, 32,
- 32, 32, 38, 38, 38, 38, 42, 41, 39, 36,
- 33, 31, 30, 29, 26, 25, 38, 20, 17, 16,
- 15, 6, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 38, 0, 38, 59, 0, 59, 59, 60, 60,
- 61, 61, 63, 63, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58
-
+ 1, 9, 9, 9, 9, 10, 10, 10, 10, 11,
+ 11, 11, 11, 12, 12, 12, 12, 14, 14, 15,
+ 15, 15, 15, 15, 24, 15, 15, 15, 15, 15,
+ 15, 19, 19, 19, 19, 19, 20, 23, 23, 23,
+ 23, 23, 24, 25, 30, 25, 20, 26, 26, 29,
+ 29, 29, 29, 29, 34, 39, 39, 39, 39, 41,
+
+ 41, 41, 41, 43, 52, 64, 71, 65, 63, 57,
+ 56, 55, 54, 53, 51, 64, 30, 50, 43, 49,
+ 43, 52, 48, 34, 34, 34, 34, 42, 42, 42,
+ 42, 47, 46, 44, 38, 35, 33, 32, 31, 28,
+ 27, 22, 42, 21, 18, 17, 16, 6, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 42, 0, 42,
+ 67, 67, 68, 0, 68, 68, 69, 69, 70, 70,
+ 72, 72, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66
} ;
/* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[39] =
+static const flex_int32_t yy_rule_can_match_eol[42] =
{ 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, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, };
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
@@ -818,8 +827,8 @@ char *yytext;
#include "hypno/grammar.h"
#include "hypno/tokens_arc.h"
-#line 822 "engines/hypno/lexer_arc.cpp"
-#line 823 "engines/hypno/lexer_arc.cpp"
+#line 831 "engines/hypno/lexer_arc.cpp"
+#line 832 "engines/hypno/lexer_arc.cpp"
#define INITIAL 0
@@ -1036,7 +1045,7 @@ YY_DECL
{
#line 43 "engines/hypno/lexer_arc.l"
-#line 1040 "engines/hypno/lexer_arc.cpp"
+#line 1049 "engines/hypno/lexer_arc.cpp"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -1063,13 +1072,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 >= 59 )
+ if ( yy_current_state >= 67 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_current_state != 58 );
+ while ( yy_current_state != 66 );
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
@@ -1167,87 +1176,87 @@ return ITOK;
case 14:
YY_RULE_SETUP
#line 57 "engines/hypno/lexer_arc.l"
-return QTOK;
+return JTOK;
YY_BREAK
case 15:
YY_RULE_SETUP
#line 58 "engines/hypno/lexer_arc.l"
-return ZTOK;
+return QTOK;
YY_BREAK
case 16:
YY_RULE_SETUP
#line 59 "engines/hypno/lexer_arc.l"
-return WTOK;
+return ZTOK;
YY_BREAK
case 17:
YY_RULE_SETUP
#line 60 "engines/hypno/lexer_arc.l"
-return XTOK;
+return WTOK;
YY_BREAK
case 18:
YY_RULE_SETUP
#line 61 "engines/hypno/lexer_arc.l"
-return TTOK;
+return XTOK;
YY_BREAK
case 19:
YY_RULE_SETUP
#line 62 "engines/hypno/lexer_arc.l"
-return TPTOK;
+return TTOK;
YY_BREAK
case 20:
YY_RULE_SETUP
#line 63 "engines/hypno/lexer_arc.l"
-return FNTOK;
+return TPTOK;
YY_BREAK
case 21:
YY_RULE_SETUP
#line 64 "engines/hypno/lexer_arc.l"
-return FTOK;
+return FNTOK;
YY_BREAK
case 22:
YY_RULE_SETUP
#line 65 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
+return FTOK;
YY_BREAK
case 23:
YY_RULE_SETUP
#line 66 "engines/hypno/lexer_arc.l"
-return A0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
YY_BREAK
case 24:
YY_RULE_SETUP
#line 67 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
+return A0TOK;
YY_BREAK
case 25:
YY_RULE_SETUP
#line 68 "engines/hypno/lexer_arc.l"
-return K0TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
YY_BREAK
case 26:
YY_RULE_SETUP
#line 69 "engines/hypno/lexer_arc.l"
-return P0TOK;
+return KNTOK;
YY_BREAK
case 27:
YY_RULE_SETUP
#line 70 "engines/hypno/lexer_arc.l"
-return YXTOK;
+return P0TOK;
YY_BREAK
case 28:
YY_RULE_SETUP
#line 71 "engines/hypno/lexer_arc.l"
-return ENCTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
YY_BREAK
case 29:
YY_RULE_SETUP
#line 72 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+return ENCTOK;
YY_BREAK
case 30:
YY_RULE_SETUP
#line 73 "engines/hypno/lexer_arc.l"
-HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+return ENCTOK;
YY_BREAK
case 31:
YY_RULE_SETUP
@@ -1255,42 +1264,57 @@ YY_RULE_SETUP
HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
YY_BREAK
case 32:
-/* rule 32 can match eol */
YY_RULE_SETUP
#line 75 "engines/hypno/lexer_arc.l"
-return RETTOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
YY_BREAK
case 33:
YY_RULE_SETUP
#line 76 "engines/hypno/lexer_arc.l"
-return CB3TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
YY_BREAK
case 34:
YY_RULE_SETUP
#line 77 "engines/hypno/lexer_arc.l"
-return C02TOK;
+HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
YY_BREAK
case 35:
+/* rule 35 can match eol */
YY_RULE_SETUP
#line 78 "engines/hypno/lexer_arc.l"
-/* ignore comment */
+return RETTOK;
YY_BREAK
case 36:
YY_RULE_SETUP
#line 79 "engines/hypno/lexer_arc.l"
-/* ignore whitespace */;
+return CB3TOK;
YY_BREAK
case 37:
YY_RULE_SETUP
#line 80 "engines/hypno/lexer_arc.l"
-debug("notparsed: 0x%d",*yytext); return *yytext;
+return C02TOK;
YY_BREAK
case 38:
YY_RULE_SETUP
#line 81 "engines/hypno/lexer_arc.l"
+/* ignore comment */
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 82 "engines/hypno/lexer_arc.l"
+/* ignore whitespace */;
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 83 "engines/hypno/lexer_arc.l"
+debug("notparsed: 0x%d",*yytext); return *yytext;
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 84 "engines/hypno/lexer_arc.l"
ECHO;
YY_BREAK
-#line 1294 "engines/hypno/lexer_arc.cpp"
+#line 1318 "engines/hypno/lexer_arc.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -1588,7 +1612,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 >= 59 )
+ if ( yy_current_state >= 67 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1616,11 +1640,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 >= 59 )
+ if ( yy_current_state >= 67 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 58);
+ yy_is_jam = (yy_current_state == 66);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -2267,7 +2291,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 81 "engines/hypno/lexer_arc.l"
+#line 84 "engines/hypno/lexer_arc.l"
namespace Hypno {
diff --git a/engines/hypno/lexer_arc.l b/engines/hypno/lexer_arc.l
index 7432e6c81a..1081776755 100644
--- a/engines/hypno/lexer_arc.l
+++ b/engines/hypno/lexer_arc.l
@@ -54,6 +54,7 @@ O1 return O1TOK;
N return NTOK;
R return RTOK;
I return ITOK;
+J return JTOK;
Q return QTOK;
Z return ZTOK;
W return WTOK;
@@ -65,13 +66,15 @@ F return FTOK;
S[0-9] HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return SNTOK;
A0 return A0TOK;
B[0-9A-F] HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return BNTOK;
-K0 return K0TOK;
+K[0-9] return KNTOK;
P0 return P0TOK;
-Y[A-Z0-9] return YXTOK;
+Y[A-Z0-9] HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return YXTOK;
22[k|K] return ENCTOK;
-[A-Za-z_][A-Za-z_0-9]* HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
-[A-Za-z][A-Za-z_0-9\\\.]* HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+11[k|K] return ENCTOK;
[\-]?[0-9]+ HYPNO_ARC_lval.i = atoi(HYPNO_ARC_text); return NUM;
+[A-Za-z_][A-Za-z_0-9]* HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return NAME;
+[A-Za-z][A-Za-z_0-9\\\.]+ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
+[0-9][A-Za-z_0-9\\\.]+ HYPNO_ARC_lval.s = scumm_strdup(HYPNO_ARC_text); return FILENAME;
[\n|\r\n] return RETTOK;
\xb3 return CB3TOK;
\x02 return C02TOK;
diff --git a/engines/hypno/lexer_mis.cpp b/engines/hypno/lexer_mis.cpp
index 0825ef7063..86114b7e18 100644
--- a/engines/hypno/lexer_mis.cpp
+++ b/engines/hypno/lexer_mis.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 45
-#define YY_END_OF_BUFFER 46
+#define YY_NUM_RULES 46
+#define YY_END_OF_BUFFER 47
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -644,22 +644,22 @@ struct yy_trans_info
};
static const flex_int16_t yy_accept[144] =
{ 0,
- 0, 0, 46, 44, 43, 42, 42, 44, 38, 41,
- 41, 44, 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39, 42, 43,
- 41, 0, 38, 38, 0, 1, 40, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
- 0, 0, 34, 0, 0, 0, 0, 35, 0, 0,
- 2, 38, 0, 39, 39, 39, 39, 39, 12, 39,
- 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 31, 32, 33, 27, 30,
-
- 29, 28, 26, 38, 0, 4, 5, 21, 6, 39,
- 39, 16, 7, 36, 9, 39, 39, 3, 11, 14,
- 8, 17, 39, 15, 18, 13, 10, 38, 20, 39,
- 39, 39, 24, 39, 37, 39, 22, 39, 23, 25,
- 39, 19, 0
+ 0, 0, 47, 45, 44, 43, 43, 45, 39, 42,
+ 42, 45, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 43, 44,
+ 42, 0, 39, 39, 0, 1, 41, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 0, 0, 35, 0, 0, 0, 0, 36, 0, 0,
+ 2, 39, 0, 40, 40, 40, 40, 40, 12, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 32, 33, 34, 28, 31,
+
+ 30, 29, 27, 39, 0, 4, 5, 21, 6, 40,
+ 40, 16, 7, 37, 9, 40, 25, 3, 11, 14,
+ 8, 17, 40, 15, 18, 13, 10, 39, 20, 40,
+ 40, 40, 24, 40, 38, 40, 22, 40, 23, 26,
+ 40, 19, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -827,11 +827,11 @@ static const flex_int16_t yy_chk[340] =
} ;
/* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[46] =
+static const flex_int32_t yy_rule_can_match_eol[47] =
{ 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, 1, 0, 0, 0, };
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
@@ -1282,110 +1282,115 @@ return INTROTOK;
case 25:
YY_RULE_SETUP
#line 67 "engines/hypno/lexer_mis.l"
-return DEFAULTTOK;
+return INTRTOK;
YY_BREAK
case 26:
YY_RULE_SETUP
#line 68 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PS;
+return DEFAULTTOK;
YY_BREAK
case 27:
YY_RULE_SETUP
#line 69 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PG;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PS;
YY_BREAK
case 28:
YY_RULE_SETUP
#line 70 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PP;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PG;
YY_BREAK
case 29:
YY_RULE_SETUP
#line 71 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PI;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PP;
YY_BREAK
case 30:
YY_RULE_SETUP
#line 72 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PH;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PI;
YY_BREAK
case 31:
YY_RULE_SETUP
#line 73 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PA;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PH;
YY_BREAK
case 32:
YY_RULE_SETUP
#line 74 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PD;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PA;
YY_BREAK
case 33:
YY_RULE_SETUP
#line 75 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PF;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PD;
YY_BREAK
case 34:
YY_RULE_SETUP
#line 76 "engines/hypno/lexer_mis.l"
-return PE;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PF;
YY_BREAK
case 35:
YY_RULE_SETUP
#line 77 "engines/hypno/lexer_mis.l"
-return PL;
+return PE;
YY_BREAK
case 36:
YY_RULE_SETUP
#line 78 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return GSSWITCH;
+return PL;
YY_BREAK
case 37:
YY_RULE_SETUP
#line 79 "engines/hypno/lexer_mis.l"
-return BBOXTOK;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return GSSWITCH;
YY_BREAK
case 38:
YY_RULE_SETUP
#line 80 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return FLAG;
+return BBOXTOK;
YY_BREAK
case 39:
YY_RULE_SETUP
#line 81 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return NAME;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return FLAG;
YY_BREAK
case 40:
YY_RULE_SETUP
#line 82 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return FILENAME;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return NAME;
YY_BREAK
case 41:
YY_RULE_SETUP
#line 83 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.i = atoi(HYPNO_MIS_text); return NUM;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return FILENAME;
YY_BREAK
case 42:
-/* rule 42 can match eol */
YY_RULE_SETUP
#line 84 "engines/hypno/lexer_mis.l"
-return RETTOK;
+HYPNO_MIS_lval.i = atoi(HYPNO_MIS_text); return NUM;
YY_BREAK
case 43:
+/* rule 43 can match eol */
YY_RULE_SETUP
#line 85 "engines/hypno/lexer_mis.l"
-/* ignore whitespace */;
+return RETTOK;
YY_BREAK
case 44:
YY_RULE_SETUP
#line 86 "engines/hypno/lexer_mis.l"
-debug("<no match: %c>", *yytext); return *yytext;
+/* ignore whitespace */;
YY_BREAK
case 45:
YY_RULE_SETUP
#line 87 "engines/hypno/lexer_mis.l"
+debug("<no match: %c>", *yytext); return *yytext;
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 88 "engines/hypno/lexer_mis.l"
ECHO;
YY_BREAK
-#line 1389 "engines/hypno/lexer_mis.cpp"
+#line 1394 "engines/hypno/lexer_mis.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -2362,7 +2367,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 87 "engines/hypno/lexer_mis.l"
+#line 88 "engines/hypno/lexer_mis.l"
namespace Hypno {
diff --git a/engines/hypno/lexer_mis.l b/engines/hypno/lexer_mis.l
index 508e5167f3..171010b59b 100644
--- a/engines/hypno/lexer_mis.l
+++ b/engines/hypno/lexer_mis.l
@@ -64,6 +64,7 @@ BOXX return BOXXTOK;
ESCAPE return ESCAPETOK;
SECOND return SECONDTOK;
INTRO return INTROTOK;
+INTR return INTRTOK;
DEFAULT return DEFAULTTOK;
\|S[A-Za-z_0-9\\\.]+ HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PS;
\|G[A-Za-z_0-9\\\.]+ HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PG;
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index 6915c32637..845add4708 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -126,7 +126,12 @@ void HypnoEngine::clickedHotspot(Common::Point mousePos) {
_nextHotsToAdd = selected.smenu;
}
- for (Actions::const_iterator itt = selected.actions.begin(); itt != selected.actions.end(); ++itt) {
+ _videosPlaying.clear();
+ _nextParallelVideoToPlay.clear();
+ _nextSequentialVideoToPlay.clear();
+
+ bool cont = true;
+ for (Actions::const_iterator itt = selected.actions.begin(); itt != selected.actions.end() && cont; ++itt) {
Action *action = *itt;
switch (action->type) {
case ChangeLevelAction:
@@ -150,7 +155,7 @@ void HypnoEngine::clickedHotspot(Common::Point mousePos) {
break;
case GlobalAction:
- runGlobal((Global *)action);
+ cont = runGlobal((Global *)action);
break;
case TalkAction:
@@ -233,6 +238,10 @@ void HypnoEngine::runTransition(Transition trans) {
void HypnoEngine::runScene(Scene &scene) {
+ _nextLoopingVideoToPlay.clear();
+ _nextParallelVideoToPlay.clear();
+ _nextSequentialVideoToPlay.clear();
+
_refreshConversation = false;
_conversation.clear();
Common::Event event;
@@ -257,7 +266,9 @@ void HypnoEngine::runScene(Scene &scene) {
}
_videosPlaying.clear();
- if (!stack.empty()) {
+ if (!_conversation.empty()) {
+ _refreshConversation = true;
+ } else if (!stack.empty()) {
runMenu(*stack.back());
drawScreen();
}
@@ -308,7 +319,10 @@ void HypnoEngine::runScene(Scene &scene) {
}
}
- if (_refreshConversation && !_conversation.empty() && _nextSequentialVideoToPlay.empty()) {
+ if (_refreshConversation && !_conversation.empty() &&
+ _nextSequentialVideoToPlay.empty() &&
+ _nextParallelVideoToPlay.empty() &&
+ _videosPlaying.empty()) {
showConversation();
drawScreen();
_refreshConversation = false;
@@ -316,6 +330,15 @@ void HypnoEngine::runScene(Scene &scene) {
}
// Movies
+
+ if (!_nextParallelVideoToPlay.empty()) {
+ for (Videos::iterator it = _nextParallelVideoToPlay.begin(); it != _nextParallelVideoToPlay.end(); ++it) {
+ playVideo(*it);
+ _videosPlaying.push_back(*it);
+ }
+ _nextParallelVideoToPlay.clear();
+ }
+
if (!_nextSequentialVideoToPlay.empty() && _videosPlaying.empty()) {
playVideo(*_nextSequentialVideoToPlay.begin());
_videosPlaying.push_back(*_nextSequentialVideoToPlay.begin());
@@ -361,6 +384,10 @@ void HypnoEngine::runScene(Scene &scene) {
}
}
+ if (checkSceneCompleted() && _conversation.empty()) {
+ _nextLevel = scene.levelIfWin;
+ }
+
if (!_videosPlaying.empty() || !_nextSequentialVideoToPlay.empty()) {
drawScreen();
continue;
@@ -385,11 +412,8 @@ void HypnoEngine::runScene(Scene &scene) {
playSound(_music, 1);
}
- if (checkSceneCompleted())
- _nextLevel = scene.levelIfWin;
-
g_system->updateScreen();
- g_system->delayMillis(10);
+ g_system->delayMillis(30);
}
// Deallocate videos
diff --git a/engines/hypno/spider/arcade.cpp b/engines/hypno/spider/arcade.cpp
index 5d0229094e..b5d5cf8351 100644
--- a/engines/hypno/spider/arcade.cpp
+++ b/engines/hypno/spider/arcade.cpp
@@ -45,16 +45,30 @@ void SpiderEngine::drawShoot(const Common::Point &target) {
void SpiderEngine::drawPlayer() {
+ if (_arcadeMode == "YC") {
+ drawImage(*_playerFrames[_playerPosition], 0, 0, true);
+ return;
+ }
+
+ // if (_playerFrameSep == -1) {
+ // Common::Point mousePos = g_system->getEventManager()->getMousePos();
+ // drawImage(*_playerFrames[0], MIN(MAX(10, int(mousePos.x)), _screenH-10), 129, true);
+ // return;
+ // }
+
+
if (_playerFrameIdx < _playerFrameSep) {
Common::Point mousePos = g_system->getEventManager()->getMousePos();
- uint32 idx = MIN(2, mousePos.x / (_screenW / 3)) + 3 * MIN(2, mousePos.y / (_screenH / 3));
- _playerFrameIdx = orientationIndex[idx];
+ //uint32 idx = MIN(2, mousePos.x / (_screenW / 3)) + 3 * MIN(2, mousePos.y / (_screenH / 3));
+ _playerFrameIdx = 4 - mousePos.x / (_screenW / 4);
+ //debug("selecting index %d", _playerFrameIdx);
+ //_playerFrameIdx = orientationIndex[idx];
} else {
_playerFrameIdx++;
if (_playerFrameIdx >= (int)_playerFrames.size())
_playerFrameIdx = 0;
}
- drawImage(*_playerFrames[_playerFrameIdx], 60, 129, true);
+ drawImage(*_playerFrames[_playerFrameIdx], _screenW/2 - 15, _screenH-50, true);
}
void SpiderEngine::drawHealth() {
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index 54d4a97e27..61399d9314 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -68,6 +68,25 @@ void SpiderEngine::loadAssetsFullGame() {
parseScene("", "mv0t.mi_");
_levels["mv0t.mi_"].scene.prefix = "spider";
+ _levels["mv0t.mi_"].scene.intro = "cine/ints001s.smk";
+ _levels["mv0t.mi_"].scene.levelIfWin = "roof.mi_";
+
+ parseScene("", "roof.mi_");
+ _levels["roof.mi_"].scene.prefix = "spider";
+ _levels["roof.mi_"].scene.levelIfWin = "decide1.mi_";
+
+
+ parseScene("", "decide1.mi_");
+ _levels["decide1.mi_"].scene.prefix = "spider";
+
+ // loadArcadeLevel("c1", "", "spider");
+ // loadArcadeLevel("c2", "", "spider");
+ // loadArcadeLevel("c3", "", "spider");
+ // loadArcadeLevel("c4", "", "spider");
+ // loadArcadeLevel("c5", "", "spider");
+ // //loadArcadeLevel("c6", "", "spider");
+ // loadArcadeLevel("c8", "", "spider");
+ // loadArcadeLevel("c9", "", "spider");
// start level
Level start;
@@ -87,6 +106,24 @@ void SpiderEngine::loadAssetsFullGame() {
cl = new ChangeLevel("combmenu.mi_");
_levels["options.mi_"].scene.hots[1].actions.push_back(cl);
+
+ cl = new ChangeLevel("options.mi_");
+ _levels["combmenu.mi_"].scene.hots[1].actions.push_back(cl);
+
+ cl = new ChangeLevel("c1.mi_");
+ _levels["combmenu.mi_"].scene.hots[2].actions.push_back(cl);
+
+ cl = new ChangeLevel("c2.mi_");
+ _levels["combmenu.mi_"].scene.hots[3].actions.push_back(cl);
+
+ cl = new ChangeLevel("c5.mi_");
+ _levels["combmenu.mi_"].scene.hots[6].actions.push_back(cl);
+
+ cl = new ChangeLevel("c8.mi_");
+ _levels["combmenu.mi_"].scene.hots[7].actions.push_back(cl);
+
+ cl = new ChangeLevel("c9.mi_");
+ _levels["combmenu.mi_"].scene.hots[8].actions.push_back(cl);
}
void SpiderEngine::loadAssetsDemo() {
@@ -108,31 +145,7 @@ void SpiderEngine::loadAssetsDemo() {
start.trans.intros.push_back("sixdemo/demo/dcine2.smk");
_levels["<start>"] = start;
- Common::String arc;
- Common::String list;
- Common::String arclevel = files.front()->getName();
- Common::SeekableReadStream *file = files.front()->createReadStream();
-
- while (!file->eos()) {
- byte x = file->readByte();
- arc += x;
- if (x == 'X') {
- while (!file->eos()) {
- x = file->readByte();
- if (x == 'Y')
- break;
- list += x;
- }
- break; // No need to keep parsing
- }
- }
- delete file;
-
- arclevel = "sixdemo/c_misc/missions.lib/" + arclevel;
- parseArcadeShooting("sixdemo", arclevel, arc);
- _levels[arclevel].arcade.shootSequence = parseShootList(arclevel, list);
- _levels[arclevel].arcade.levelIfWin = "sixdemo/mis/demo.mis";
- _levels[arclevel].arcade.levelIfLose = "sixdemo/mis/demo.mis";
+ loadArcadeLevel("c1", "sixdemo/mis/demo.mis", "sixdemo");
loadLib("", "sixdemo/c_misc/fonts.lib", true);
loadLib("sixdemo/c_misc/sound.lib/", "sixdemo/c_misc/sound.lib", true);
@@ -140,7 +153,7 @@ void SpiderEngine::loadAssetsDemo() {
// Read assets from mis files
parseScene("sixdemo", "mis/demo.mis");
- ChangeLevel *cl = new ChangeLevel("sixdemo/c_misc/missions.lib/c1.mi_");
+ ChangeLevel *cl = new ChangeLevel("c1.mi_");
_levels["sixdemo/mis/demo.mis"].scene.hots[1].actions.push_back(cl);
cl = new ChangeLevel("sixdemo/mis/alley.mis");
@@ -177,14 +190,15 @@ void SpiderEngine::loadAssetsDemo() {
_soundPath = "c_misc/sound.lib/";
}
-void SpiderEngine::runCode(Code code) {
+void SpiderEngine::runCode(Code &code) {
if (code.name == "sixdemo/puz_matr")
runMatrix(code);
else
error("invalid puzzle");
}
-void SpiderEngine::runMatrix(Code code) {
+void SpiderEngine::runMatrix(Code &code) {
+ changeScreenMode("640x480");
Common::Point mousePos;
Common::Event event;
diff --git a/engines/hypno/spider/talk.cpp b/engines/hypno/spider/talk.cpp
index bc3eb09bd4..e678556723 100644
--- a/engines/hypno/spider/talk.cpp
+++ b/engines/hypno/spider/talk.cpp
@@ -30,6 +30,7 @@ void SpiderEngine::showConversation() {
uint32 x = 18;
uint32 y = 20;
Graphics::Surface *speaker = decodeFrame("dialog/speaker3.smk", 0);
+ bool activeFound = false;
for (Actions::const_iterator itt = _conversation.begin(); itt != _conversation.end(); ++itt) {
Talk *a = (Talk *)*itt;
if (a->active) {
@@ -43,6 +44,7 @@ void SpiderEngine::showConversation() {
}
}
if (!path.empty()) {
+ activeFound = true;
frame = frame;
Graphics::Surface *surf = decodeFrame("dialog/" + path, frame);
@@ -56,17 +58,26 @@ void SpiderEngine::showConversation() {
}
}
}
+ if (!activeFound) {
+ for (Actions::const_iterator it = _conversation.begin(); it != _conversation.end(); ++it) {
+ Talk *a = (Talk *)*it;
+ if (!a->second.empty())
+ _nextParallelVideoToPlay.push_back(MVideo(a->second, a->secondPos, false, false, false));
+ }
+ debugC(1, kHypnoDebugScene, "Clearing conversation");
+ _conversation.clear();
+ runMenu(*stack.back());
+ drawScreen();
+ }
speaker->free();
delete speaker;
}
void SpiderEngine::leftClickedConversation(const Common::Point &mousePos) {
Talk *t;
- bool activeFound = false;
for (Actions::const_iterator itt = _conversation.begin(); itt != _conversation.end(); ++itt) {
Talk *a = (Talk *)*itt;
if (a->active && a->rect.contains(mousePos)) {
- activeFound = true;
a->active = false;
for (TalkCommands::const_iterator it = a->commands.begin(); it != a->commands.end(); ++it) {
if (it->command == "A") {
@@ -81,19 +92,24 @@ void SpiderEngine::leftClickedConversation(const Common::Point &mousePos) {
_refreshConversation = true;
} else if (it->command == "P") {
debugC(1, kHypnoDebugScene, "Playing %s", it->path.c_str());
- _nextSequentialVideoToPlay.push_back(MVideo(it->path, it->position, false, false, false));
+ _nextParallelVideoToPlay.push_back(MVideo(it->path, it->position, false, false, false));
+ } else if (it->command == "S") {
+ debugC(1, kHypnoDebugScene, "Enabling variable %s", it->variable.c_str());
+ _sceneState[it->variable] = 1;
+ _refreshConversation = true;
+ } else if (it->command == "L") {
+ Common::String variable = "GS_LEVELCOMPLETE";
+ debugC(1, kHypnoDebugScene, "Enabling variable %s", variable.c_str());
+ _sceneState[variable] = 1;
+ _refreshConversation = true;
}
+
}
}
if (!a->background.empty()) {
- loadImage(a->background, a->position.x, a->position.y, false);
+ loadImage(a->background, a->backgroundPos.x, a->backgroundPos.y, false);
}
}
- if (!activeFound) {
- _conversation.clear();
- runMenu(*stack.back());
- drawScreen();
- }
}
void SpiderEngine::rightClickedConversation(const Common::Point &mousePos) {
diff --git a/engines/hypno/tokens_arc.h b/engines/hypno/tokens_arc.h
index b2a4960476..7793598630 100644
--- a/engines/hypno/tokens_arc.h
+++ b/engines/hypno/tokens_arc.h
@@ -57,37 +57,38 @@ extern int HYPNO_ARC_debug;
FILENAME = 259,
BNTOK = 260,
SNTOK = 261,
- NUM = 262,
- COMMENT = 263,
- YXTOK = 264,
- CTOK = 265,
- DTOK = 266,
- HTOK = 267,
- HETOK = 268,
- RETTOK = 269,
- QTOK = 270,
- ENCTOK = 271,
- PTOK = 272,
- FTOK = 273,
- TTOK = 274,
- TPTOK = 275,
- ATOK = 276,
- VTOK = 277,
- OTOK = 278,
- O1TOK = 279,
- NTOK = 280,
- RTOK = 281,
- ITOK = 282,
- ZTOK = 283,
- FNTOK = 284,
- NONETOK = 285,
- A0TOK = 286,
- K0TOK = 287,
- P0TOK = 288,
- WTOK = 289,
- XTOK = 290,
- CB3TOK = 291,
- C02TOK = 292
+ KNTOK = 262,
+ YXTOK = 263,
+ NUM = 264,
+ COMMENT = 265,
+ CTOK = 266,
+ DTOK = 267,
+ HTOK = 268,
+ HETOK = 269,
+ RETTOK = 270,
+ QTOK = 271,
+ ENCTOK = 272,
+ PTOK = 273,
+ FTOK = 274,
+ TTOK = 275,
+ TPTOK = 276,
+ ATOK = 277,
+ VTOK = 278,
+ OTOK = 279,
+ O1TOK = 280,
+ NTOK = 281,
+ RTOK = 282,
+ ITOK = 283,
+ JTOK = 284,
+ ZTOK = 285,
+ FNTOK = 286,
+ NONETOK = 287,
+ A0TOK = 288,
+ P0TOK = 289,
+ WTOK = 290,
+ XTOK = 291,
+ CB3TOK = 292,
+ C02TOK = 293
};
#endif
@@ -101,7 +102,7 @@ union HYPNO_ARC_STYPE
char *s; /* string value */
int i; /* integer value */
-#line 105 "engines/hypno/tokens_arc.h" /* yacc.c:1909 */
+#line 106 "engines/hypno/tokens_arc.h" /* yacc.c:1909 */
};
typedef union HYPNO_ARC_STYPE HYPNO_ARC_STYPE;
diff --git a/engines/hypno/tokens_mis.h b/engines/hypno/tokens_mis.h
index 568e0f85e1..a5d61d7156 100644
--- a/engines/hypno/tokens_mis.h
+++ b/engines/hypno/tokens_mis.h
@@ -63,41 +63,42 @@ extern int HYPNO_MIS_debug;
HOTSTOK = 265,
CUTSTOK = 266,
BACKTOK = 267,
- RETTOK = 268,
- TIMETOK = 269,
- PALETOK = 270,
- BBOXTOK = 271,
- OVERTOK = 272,
- WALNTOK = 273,
- MICETOK = 274,
- PLAYTOK = 275,
- ENDTOK = 276,
- MENUTOK = 277,
- SMENTOK = 278,
- ESCPTOK = 279,
- NRTOK = 280,
- AMBITOK = 281,
- GLOBTOK = 282,
- TONTOK = 283,
- TOFFTOK = 284,
- TALKTOK = 285,
- INACTOK = 286,
- FDTOK = 287,
- BOXXTOK = 288,
- ESCAPETOK = 289,
- SECONDTOK = 290,
- INTROTOK = 291,
- DEFAULTTOK = 292,
- PG = 293,
- PA = 294,
- PD = 295,
- PH = 296,
- PF = 297,
- PE = 298,
- PP = 299,
- PI = 300,
- PL = 301,
- PS = 302
+ INTRTOK = 268,
+ RETTOK = 269,
+ TIMETOK = 270,
+ PALETOK = 271,
+ BBOXTOK = 272,
+ OVERTOK = 273,
+ WALNTOK = 274,
+ MICETOK = 275,
+ PLAYTOK = 276,
+ ENDTOK = 277,
+ MENUTOK = 278,
+ SMENTOK = 279,
+ ESCPTOK = 280,
+ NRTOK = 281,
+ AMBITOK = 282,
+ GLOBTOK = 283,
+ TONTOK = 284,
+ TOFFTOK = 285,
+ TALKTOK = 286,
+ INACTOK = 287,
+ FDTOK = 288,
+ BOXXTOK = 289,
+ ESCAPETOK = 290,
+ SECONDTOK = 291,
+ INTROTOK = 292,
+ DEFAULTTOK = 293,
+ PG = 294,
+ PA = 295,
+ PD = 296,
+ PH = 297,
+ PF = 298,
+ PE = 299,
+ PP = 300,
+ PI = 301,
+ PL = 302,
+ PS = 303
};
#endif
@@ -111,7 +112,7 @@ union HYPNO_MIS_STYPE
char *s; /* string value */
int i; /* integer value */
-#line 115 "engines/hypno/tokens_mis.h" /* yacc.c:1909 */
+#line 116 "engines/hypno/tokens_mis.h" /* yacc.c:1909 */
};
typedef union HYPNO_MIS_STYPE HYPNO_MIS_STYPE;
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 2e6a77930a..386240c47c 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -105,7 +105,7 @@ void WetEngine::loadAssetsDemoDisc() {
_levels["<start>"] = start;
Level intro;
- intro.trans.level = "c31.mi_";
+ intro.trans.level = "c52.mi_";
intro.trans.intros.push_back("movie/nw_logo.smk");
intro.trans.intros.push_back("movie/hypnotix.smk");
intro.trans.intros.push_back("movie/wetlogo.smk");
@@ -135,8 +135,8 @@ void WetEngine::loadAssetsDemoDisc() {
movies.trans.frameNumber = 0;
_levels["<movies>"] = movies;
- loadLevel("c31", "c52", "wetlands");
- loadLevel("c52", "<gameover>", "wetlands");
+ loadArcadeLevel("c31", "c52", "wetlands");
+ loadArcadeLevel("c52", "<gameover>", "wetlands");
Level over;
over.trans.level = "<quit>";
@@ -162,15 +162,7 @@ void WetEngine::loadAssetsPCW() {
intro.trans.frameImage.clear();
_levels["<start>"] = intro;
- Common::String arclevel = "c11.mis";
- Common::String arc;
- Common::String list;
- splitArcadeFile(arclevel, arc, list);
- parseArcadeShooting("wetlands", arclevel, arc);
- _levels[arclevel].arcade.shootSequence = parseShootList(arclevel, list);
- _levels[arclevel].arcade.prefix = "";
- _levels[arclevel].arcade.levelIfWin = "<gameover>";
- _levels[arclevel].arcade.levelIfLose = "<gameover>";
+ loadArcadeLevel("c11", "<gameover>", "");
Level over;
over.trans.level = "<quit>";
@@ -195,16 +187,7 @@ void WetEngine::loadAssetsPCG() {
intro.trans.frameImage.clear();
_levels["<start>"] = intro;
- Common::String arclevel = "c31.mi_";
- debugC(1, kHypnoDebugParser, "Parsing %s", arclevel.c_str());
- Common::String arc;
- Common::String list;
- splitArcadeFile(arclevel, arc, list);
- parseArcadeShooting("wetlands", arclevel, arc);
- _levels[arclevel].arcade.shootSequence = parseShootList(arclevel, list);
- _levels[arclevel].arcade.prefix = "";
- _levels[arclevel].arcade.levelIfWin = "<gameover>";
- _levels[arclevel].arcade.levelIfLose = "<gameover>";
+ loadArcadeLevel("c31", "<gameover>", "");
Level over;
over.trans.level = "<quit>";
@@ -214,19 +197,6 @@ void WetEngine::loadAssetsPCG() {
loadLib("", "sound.lib", false);
}
-void WetEngine::loadLevel(const Common::String ¤t, const Common::String &next, const Common::String &prefix) {
- Common::String arclevel = current + _difficulty + ".mi_";
- debugC(1, kHypnoDebugParser, "Parsing %s", arclevel.c_str());
- Common::String arc;
- Common::String list;
- splitArcadeFile(arclevel, arc, list);
- debug("%s", arc.c_str());
- parseArcadeShooting("", arclevel, arc);
- _levels[arclevel].arcade.shootSequence = parseShootList(arclevel, list);
- _levels[arclevel].arcade.prefix = prefix;
- _levels[arclevel].arcade.levelIfWin = next + _difficulty + ".mi_";;
-}
-
void WetEngine::loadAssetsFullGame() {
LibFile *missions = loadLib("", "c_misc/missions.lib", true);
Common::ArchiveMemberList files;
@@ -252,8 +222,8 @@ void WetEngine::loadAssetsFullGame() {
_levels["<intro>"] = intro;
//loadLevel("c10", "c11", "");
- loadLevel("c11", "c20", "");
- loadLevel("c20", "", "");
+ loadArcadeLevel("c11", "c20", "");
+ loadArcadeLevel("c20", "", "");
loadLib("", "c_misc/fonts.lib", true);
loadLib("sound/", "c_misc/sound.lib", true);
@@ -264,15 +234,15 @@ void WetEngine::showCredits() {
runIntro(video);
}
-void WetEngine::runCode(Code code) {
- changeScreenMode("arcade"); // everything runs in 320x200
+void WetEngine::runCode(Code &code) {
+ changeScreenMode("320x200");
if (code.name == "wetlands/main_menu.mis")
runMainMenu(code);
else
error("invalid hardcoded level: %s", code.name.c_str());
}
-void WetEngine::runMainMenu(Code code) {
+void WetEngine::runMainMenu(Code &code) {
Common::Event event;
_font = FontMan.getFontByUsage(Graphics::FontManager::kConsoleFont);
uint32 c = _pixelFormat.RGBToColor(0, 252, 0);
More information about the Scummvm-git-logs
mailing list