[Scummvm-git-logs] scummvm master -> 56f69e40c5e636bc9ac416dc314b7711e38e35ba
neuromancer
noreply at scummvm.org
Sat May 7 06:29:39 UTC 2022
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
69e61a6427 HYPNO: play pre arcade videos in boyz
7c4042c82c HYPNO: handle a corner case where the first segment starts after the first frame
63f45d4d5a HYPNO: improved parsing for player selection in boyz
56f69e40c5 HYPNO: basic ammo handling in boyz
Commit: 69e61a6427cba723549f67fa589e26b88f9d94b2
https://github.com/scummvm/scummvm/commit/69e61a6427cba723549f67fa589e26b88f9d94b2
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-05-07T08:26:07+02:00
Commit Message:
HYPNO: play pre arcade videos in boyz
Changed paths:
engines/hypno/boyz/arcade.cpp
diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 9c17c240dad..39891aa2ab0 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -45,6 +45,11 @@ void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
_playerFrameSep = _playerFrames.size();
_playerFrameIdx = -1;
+ if (!arc->beforeVideo.empty()) {
+ MVideo video(arc->beforeVideo, Common::Point(0, 0), false, true, false);
+ runIntro(video);
+ }
+
_currentScript = arc->script;
updateFromScript();
}
Commit: 7c4042c82c2f7247d373d53e48c6c2e0422c7b87
https://github.com/scummvm/scummvm/commit/7c4042c82c2f7247d373d53e48c6c2e0422c7b87
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-05-07T08:26:07+02:00
Commit Message:
HYPNO: handle a corner case where the first segment starts after the first frame
Changed paths:
engines/hypno/arcade.cpp
diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 9af4876d161..7ebcd7c5235 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -249,6 +249,13 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
}
_currentPalette = arc->backgroundPalette;
loadPalette(_currentPalette);
+
+ if (segments[_segmentIdx].start > 1) {
+ _background->decoder->forceSeekToFrame(segments[_segmentIdx].start - 10);
+ segments[_segmentIdx].size -= segments[_segmentIdx].start;
+ segments[_segmentIdx].start = 1;
+ }
+
bool shootingPrimary = false;
bool shootingSecondary = false;
bool needsUpdate = true;
Commit: 63f45d4d5a2b403c6ae71904f6811c68661ecedc
https://github.com/scummvm/scummvm/commit/63f45d4d5a2b403c6ae71904f6811c68661ecedc
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-05-07T08:26:07+02:00
Commit Message:
HYPNO: improved parsing for player selection in boyz
Changed paths:
engines/hypno/actions.cpp
engines/hypno/boyz/boyz.cpp
engines/hypno/grammar.h
engines/hypno/grammar_mis.cpp
engines/hypno/grammar_mis.y
engines/hypno/hypno.h
engines/hypno/lexer_mis.cpp
engines/hypno/lexer_mis.l
engines/hypno/scene.cpp
engines/hypno/tokens_mis.h
diff --git a/engines/hypno/actions.cpp b/engines/hypno/actions.cpp
index 8841c0c412e..d9d42170e6e 100644
--- a/engines/hypno/actions.cpp
+++ b/engines/hypno/actions.cpp
@@ -31,6 +31,10 @@ namespace Hypno {
void HypnoEngine::runMenu(Hotspots *hs, bool only_menu) {
Hotspot *h = hs->begin();
assert(h->type == MakeMenu);
+ if (!h->background.empty()) {
+ loadImage(h->background, 0, 0, false, true);
+ }
+
debugC(1, kHypnoDebugScene, "hotspot actions size: %d", h->actions.size());
for (Actions::const_iterator itt = h->actions.begin(); !only_menu && itt != h->actions.end(); ++itt) {
Action *action = *itt;
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 514dd7f3c27..19b0bcf4037 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -36,6 +36,24 @@ BoyzEngine::BoyzEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine
_crosshairsPalette = nullptr;
}
+static const char *selectBoyz = "\
+MENU preload\\slct_boy.smk\n\
+HOTS /BBOX= 19 3 66 199\n\
+SOND tollop1.raw 22K\n\
+HOTS /BBOX= 69 3 116 199\n\
+SOND tollam.raw 22K\n\
+HOTS /BBOX= 119 3 166 199\n\
+SOND tolvas1.raw 22K\n\
+HOTS /BBOX= 169 3 216 199\n\
+SOND tolbut1.raw 22K\n\
+HOTS /BBOX= 219 3 266 199\n\
+SOND tolbro1.raw 22K\n\
+HOTS /BBOX= 269 3 316 170\n\
+SOND tolmon1.raw 22K\n\
+HOTS /BBOX= 262 172 312 194\n\
+SOND pstlfire.raw\n\
+END\n";
+
void BoyzEngine::loadAssets() {
LibFile *missions = loadLib("", "preload/missions.lib", true);
Common::ArchiveMemberList files;
@@ -51,7 +69,7 @@ void BoyzEngine::loadAssets() {
Code *menu = new Code("<main_menu>");
_levels["<main_menu>"] = menu;
- _levels["<main_menu>"]->levelIfWin = "c19.mi_";
+ _levels["<main_menu>"]->levelIfWin = "<select_boyz>";
loadArcadeLevel("c19.mi_", "c11.mi_", "??", "");
loadArcadeLevel("c11.mi_", "c12.mi_", "??", "");
@@ -63,6 +81,12 @@ void BoyzEngine::loadAssets() {
loadArcadeLevel("c17.mi_", "c18.mi_", "??", "");
loadArcadeLevel("c18.mi_", "c21.mi_", "??", "");
+ loadSceneLevel(selectBoyz, "<select_boyz>", "", "");
+ Scene *sc = (Scene *) _levels["<select_boyz>"];
+
+ ChangeLevel *cl = new ChangeLevel("c19.mi_");
+ sc->hots[7].actions.push_back(cl);
+
loadLib("sound/", "misc/sound.lib", true);
_weaponShootSound[0] = "pstlfire.raw";
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index fd0133d5cff..9ab01a85c51 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -105,6 +105,7 @@ public:
Common::String flags[3];
Common::Rect rect;
Common::String setting;
+ Common::String background;
Actions actions;
Hotspots *smenu;
};
diff --git a/engines/hypno/grammar_mis.cpp b/engines/hypno/grammar_mis.cpp
index 9472a2d20fa..5db18c13036 100644
--- a/engines/hypno/grammar_mis.cpp
+++ b/engines/hypno/grammar_mis.cpp
@@ -103,7 +103,7 @@ int HYPNO_MIS_wrap() {
using namespace Hypno;
-#line 108 "engines/hypno/grammar_mis.cpp"
+#line 107 "engines/hypno/grammar_mis.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -141,58 +141,60 @@ enum yysymbol_kind_t
YYSYMBOL_GSSWITCH = 7, /* GSSWITCH */
YYSYMBOL_COMMAND = 8, /* COMMAND */
YYSYMBOL_WALNTOK = 9, /* WALNTOK */
- YYSYMBOL_NUM = 10, /* NUM */
- YYSYMBOL_HOTSTOK = 11, /* HOTSTOK */
- YYSYMBOL_CUTSTOK = 12, /* CUTSTOK */
- YYSYMBOL_BACKTOK = 13, /* BACKTOK */
- YYSYMBOL_INTRTOK = 14, /* INTRTOK */
- YYSYMBOL_RETTOK = 15, /* RETTOK */
- YYSYMBOL_TIMETOK = 16, /* TIMETOK */
- YYSYMBOL_PALETOK = 17, /* PALETOK */
- YYSYMBOL_BBOXTOK = 18, /* BBOXTOK */
- YYSYMBOL_OVERTOK = 19, /* OVERTOK */
- YYSYMBOL_MICETOK = 20, /* MICETOK */
- YYSYMBOL_PLAYTOK = 21, /* PLAYTOK */
- YYSYMBOL_ENDTOK = 22, /* ENDTOK */
- YYSYMBOL_MENUTOK = 23, /* MENUTOK */
- YYSYMBOL_SMENTOK = 24, /* SMENTOK */
- YYSYMBOL_ESCPTOK = 25, /* ESCPTOK */
- YYSYMBOL_NRTOK = 26, /* NRTOK */
- YYSYMBOL_AMBITOK = 27, /* AMBITOK */
- YYSYMBOL_SWPTTOK = 28, /* SWPTTOK */
- YYSYMBOL_MPTRTOK = 29, /* MPTRTOK */
- YYSYMBOL_GLOBTOK = 30, /* GLOBTOK */
- YYSYMBOL_TONTOK = 31, /* TONTOK */
- YYSYMBOL_TOFFTOK = 32, /* TOFFTOK */
- YYSYMBOL_TALKTOK = 33, /* TALKTOK */
- YYSYMBOL_INACTOK = 34, /* INACTOK */
- YYSYMBOL_FDTOK = 35, /* FDTOK */
- YYSYMBOL_BOXXTOK = 36, /* BOXXTOK */
- YYSYMBOL_ESCAPETOK = 37, /* ESCAPETOK */
- YYSYMBOL_SECONDTOK = 38, /* SECONDTOK */
- YYSYMBOL_INTROTOK = 39, /* INTROTOK */
- YYSYMBOL_DEFAULTTOK = 40, /* DEFAULTTOK */
- YYSYMBOL_PG = 41, /* PG */
- YYSYMBOL_PA = 42, /* PA */
- YYSYMBOL_PD = 43, /* PD */
- YYSYMBOL_PH = 44, /* PH */
- YYSYMBOL_PF = 45, /* PF */
- YYSYMBOL_PE = 46, /* PE */
- YYSYMBOL_PP = 47, /* PP */
- YYSYMBOL_PI = 48, /* PI */
- YYSYMBOL_PL = 49, /* PL */
- YYSYMBOL_PS = 50, /* PS */
- YYSYMBOL_YYACCEPT = 51, /* $accept */
- YYSYMBOL_start = 52, /* start */
- YYSYMBOL_init = 53, /* init */
- YYSYMBOL_lines = 54, /* lines */
- YYSYMBOL_line = 55, /* line */
- YYSYMBOL_anything = 56, /* anything */
- YYSYMBOL_alloctalk = 57, /* alloctalk */
- YYSYMBOL_talk = 58, /* talk */
- YYSYMBOL_mflag = 59, /* mflag */
- YYSYMBOL_flag = 60, /* flag */
- YYSYMBOL_gsswitch = 61 /* gsswitch */
+ YYSYMBOL_ENCTOK = 10, /* ENCTOK */
+ YYSYMBOL_NUM = 11, /* NUM */
+ YYSYMBOL_HOTSTOK = 12, /* HOTSTOK */
+ YYSYMBOL_CUTSTOK = 13, /* CUTSTOK */
+ YYSYMBOL_BACKTOK = 14, /* BACKTOK */
+ YYSYMBOL_INTRTOK = 15, /* INTRTOK */
+ YYSYMBOL_RETTOK = 16, /* RETTOK */
+ YYSYMBOL_TIMETOK = 17, /* TIMETOK */
+ YYSYMBOL_PALETOK = 18, /* PALETOK */
+ YYSYMBOL_BBOXTOK = 19, /* BBOXTOK */
+ YYSYMBOL_OVERTOK = 20, /* OVERTOK */
+ YYSYMBOL_MICETOK = 21, /* MICETOK */
+ YYSYMBOL_SONDTOK = 22, /* SONDTOK */
+ YYSYMBOL_PLAYTOK = 23, /* PLAYTOK */
+ YYSYMBOL_ENDTOK = 24, /* ENDTOK */
+ YYSYMBOL_MENUTOK = 25, /* MENUTOK */
+ YYSYMBOL_SMENTOK = 26, /* SMENTOK */
+ YYSYMBOL_ESCPTOK = 27, /* ESCPTOK */
+ YYSYMBOL_NRTOK = 28, /* NRTOK */
+ YYSYMBOL_AMBITOK = 29, /* AMBITOK */
+ YYSYMBOL_SWPTTOK = 30, /* SWPTTOK */
+ YYSYMBOL_MPTRTOK = 31, /* MPTRTOK */
+ YYSYMBOL_GLOBTOK = 32, /* GLOBTOK */
+ YYSYMBOL_TONTOK = 33, /* TONTOK */
+ YYSYMBOL_TOFFTOK = 34, /* TOFFTOK */
+ YYSYMBOL_TALKTOK = 35, /* TALKTOK */
+ YYSYMBOL_INACTOK = 36, /* INACTOK */
+ YYSYMBOL_FDTOK = 37, /* FDTOK */
+ YYSYMBOL_BOXXTOK = 38, /* BOXXTOK */
+ YYSYMBOL_ESCAPETOK = 39, /* ESCAPETOK */
+ YYSYMBOL_SECONDTOK = 40, /* SECONDTOK */
+ YYSYMBOL_INTROTOK = 41, /* INTROTOK */
+ YYSYMBOL_DEFAULTTOK = 42, /* DEFAULTTOK */
+ YYSYMBOL_PG = 43, /* PG */
+ YYSYMBOL_PA = 44, /* PA */
+ YYSYMBOL_PD = 45, /* PD */
+ YYSYMBOL_PH = 46, /* PH */
+ YYSYMBOL_PF = 47, /* PF */
+ YYSYMBOL_PE = 48, /* PE */
+ YYSYMBOL_PP = 49, /* PP */
+ YYSYMBOL_PI = 50, /* PI */
+ YYSYMBOL_PL = 51, /* PL */
+ YYSYMBOL_PS = 52, /* PS */
+ YYSYMBOL_YYACCEPT = 53, /* $accept */
+ YYSYMBOL_start = 54, /* start */
+ YYSYMBOL_init = 55, /* init */
+ YYSYMBOL_lines = 56, /* lines */
+ YYSYMBOL_line = 57, /* line */
+ YYSYMBOL_anything = 58, /* anything */
+ YYSYMBOL_alloctalk = 59, /* alloctalk */
+ YYSYMBOL_talk = 60, /* talk */
+ YYSYMBOL_mflag = 61, /* mflag */
+ YYSYMBOL_flag = 62, /* flag */
+ YYSYMBOL_gsswitch = 63 /* gsswitch */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -520,19 +522,19 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 3
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 125
+#define YYLAST 131
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 51
+#define YYNTOKENS 53
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 11
/* YYNRULES -- Number of rules. */
-#define YYNRULES 54
+#define YYNRULES 57
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 137
+#define YYNSTATES 141
/* YYMAXUTOK -- Last valid token kind. */
-#define YYMAXUTOK 305
+#define YYMAXUTOK 307
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -576,19 +578,19 @@ static const yytype_int8 yytranslate[] =
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50
+ 45, 46, 47, 48, 49, 50, 51, 52
};
#if HYPNO_MIS_DEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 73, 73, 76, 87, 88, 92, 108, 114, 129,
- 135, 141, 142, 149, 156, 162, 168, 174, 181, 188,
- 195, 202, 208, 214, 217, 223, 229, 232, 233, 236,
- 243, 246, 247, 251, 254, 257, 261, 265, 270, 276,
- 277, 283, 289, 295, 302, 309, 315, 320, 321, 324,
- 325, 328, 329, 332, 333
+ 0, 72, 72, 75, 86, 87, 91, 107, 121, 127,
+ 142, 148, 154, 155, 162, 169, 175, 181, 187, 193,
+ 199, 206, 213, 220, 227, 233, 239, 242, 248, 254,
+ 257, 258, 261, 268, 271, 272, 276, 279, 282, 286,
+ 290, 295, 301, 302, 308, 314, 320, 327, 334, 340,
+ 345, 346, 349, 350, 353, 354, 357, 358
};
#endif
@@ -605,15 +607,15 @@ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
static const char *const yytname[] =
{
"\"end of file\"", "error", "\"invalid token\"", "NAME", "FILENAME",
- "FLAG", "COMMENT", "GSSWITCH", "COMMAND", "WALNTOK", "NUM", "HOTSTOK",
- "CUTSTOK", "BACKTOK", "INTRTOK", "RETTOK", "TIMETOK", "PALETOK",
- "BBOXTOK", "OVERTOK", "MICETOK", "PLAYTOK", "ENDTOK", "MENUTOK",
- "SMENTOK", "ESCPTOK", "NRTOK", "AMBITOK", "SWPTTOK", "MPTRTOK",
- "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", "anything", "alloctalk", "talk", "mflag", "flag",
- "gsswitch", YY_NULLPTR
+ "FLAG", "COMMENT", "GSSWITCH", "COMMAND", "WALNTOK", "ENCTOK", "NUM",
+ "HOTSTOK", "CUTSTOK", "BACKTOK", "INTRTOK", "RETTOK", "TIMETOK",
+ "PALETOK", "BBOXTOK", "OVERTOK", "MICETOK", "SONDTOK", "PLAYTOK",
+ "ENDTOK", "MENUTOK", "SMENTOK", "ESCPTOK", "NRTOK", "AMBITOK", "SWPTTOK",
+ "MPTRTOK", "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", "anything", "alloctalk", "talk", "mflag",
+ "flag", "gsswitch", YY_NULLPTR
};
static const char *
@@ -623,7 +625,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
}
#endif
-#define YYPACT_NINF (-85)
+#define YYPACT_NINF (-89)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -637,20 +639,21 @@ yysymbol_name (yysymbol_kind_t yysymbol)
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- -85, 5, 77, -85, 9, -4, 13, 14, 15, -85,
- 10, 18, 20, 21, 23, 25, 27, -85, -85, 28,
- 26, 29, 24, -85, -85, 77, 30, 31, -85, 33,
- 34, 27, -85, 36, 40, 41, 25, 22, -85, 27,
- 42, -85, 43, 32, 35, -85, 44, 45, 46, 47,
- -85, 49, -85, 50, -85, -85, 27, 51, 52, -85,
- 59, 35, 35, 54, -85, 61, 62, 63, 35, 35,
- 35, 35, 35, -85, 85, 93, 35, 35, -85, 38,
- 98, 38, -85, 82, 38, -85, 82, 99, 101, -85,
- -85, 102, 103, 104, 105, -85, -85, -85, -85, -85,
- 106, 107, -85, -85, -85, 82, 108, 82, -85, -85,
- 82, -85, 109, 110, -85, 111, 112, 113, 82, 35,
- -85, -85, 82, -85, 114, 38, 82, -85, -85, 35,
- -85, -85, -85, 82, -85, -85, -85
+ -89, 5, 78, -89, 13, -1, 15, 16, 18, -89,
+ 14, 20, 23, 24, 25, 26, 28, 9, -89, -89,
+ 29, 30, 31, 32, -89, -89, 78, 33, 35, -89,
+ 39, 40, 37, -89, 41, 42, 27, 43, 28, 44,
+ -89, -89, 37, 45, -89, 46, 52, 34, -89, 48,
+ 50, 51, 53, -89, 54, -89, -89, 55, -89, -89,
+ 37, 56, 58, -89, 59, 34, 34, 77, -89, 85,
+ 93, 102, 34, 34, 34, 34, 34, -89, 100, 101,
+ 34, 34, -89, 36, 103, 36, -89, 110, 36, -89,
+ 110, 105, 106, -89, -89, 107, 108, 109, 111, -89,
+ -89, -89, -89, -89, 112, 113, -89, -89, -89, 110,
+ 114, 110, -89, -89, 110, -89, 115, 116, -89, 117,
+ 118, 119, 110, 34, -89, -89, 110, -89, 120, 36,
+ 110, -89, -89, 34, -89, -89, -89, 110, -89, -89,
+ -89
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -658,34 +661,35 @@ static const yytype_int8 yypact[] =
means the default is an error. */
static const yytype_int8 yydefact[] =
{
- 3, 0, 5, 1, 0, 0, 0, 0, 0, 26,
- 0, 0, 0, 0, 0, 28, 50, 8, 9, 0,
- 0, 0, 0, 29, 2, 5, 0, 0, 20, 0,
- 19, 50, 17, 0, 0, 0, 28, 0, 49, 50,
- 0, 11, 0, 0, 48, 4, 0, 0, 0, 0,
- 10, 0, 22, 0, 27, 25, 50, 0, 0, 13,
- 0, 48, 48, 0, 34, 0, 0, 0, 48, 48,
- 48, 48, 48, 47, 0, 0, 48, 48, 24, 54,
- 0, 54, 18, 52, 54, 6, 52, 0, 0, 30,
- 31, 0, 0, 0, 0, 38, 41, 42, 39, 40,
- 0, 0, 46, 45, 53, 52, 0, 52, 51, 16,
- 52, 14, 0, 0, 33, 0, 0, 0, 52, 48,
- 21, 7, 52, 15, 0, 54, 52, 36, 37, 48,
- 44, 12, 23, 52, 35, 43, 32
+ 3, 0, 5, 1, 0, 0, 0, 0, 0, 29,
+ 0, 0, 0, 0, 0, 0, 31, 53, 9, 10,
+ 0, 0, 0, 0, 32, 2, 5, 0, 0, 23,
+ 0, 22, 53, 20, 0, 0, 18, 0, 31, 0,
+ 52, 7, 53, 0, 12, 0, 0, 51, 4, 0,
+ 0, 0, 0, 11, 0, 25, 17, 0, 30, 28,
+ 53, 0, 0, 14, 0, 51, 51, 0, 37, 0,
+ 0, 0, 51, 51, 51, 51, 51, 50, 0, 0,
+ 51, 51, 27, 57, 0, 57, 21, 55, 57, 6,
+ 55, 0, 0, 33, 34, 0, 0, 0, 0, 41,
+ 44, 45, 42, 43, 0, 0, 49, 48, 56, 55,
+ 0, 55, 54, 19, 55, 15, 0, 0, 36, 0,
+ 0, 0, 55, 51, 24, 8, 55, 16, 0, 57,
+ 55, 39, 40, 51, 47, 13, 26, 55, 38, 46,
+ 35
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -85, -85, -85, 100, -85, 3, -85, -61, -27, -84,
- -78
+ -89, -89, -89, 10, -89, 7, -89, -65, -28, -88,
+ -82
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- 0, 1, 2, 24, 25, 37, 44, 78, 39, 109,
- 105
+ 0, 1, 2, 25, 26, 39, 47, 82, 42, 113,
+ 109
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -693,78 +697,81 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
- 89, 90, 111, 107, 50, 3, 110, 95, 96, 97,
- 98, 99, 56, 26, 27, 102, 103, 28, 29, 30,
- 31, 120, 32, 122, 33, 34, 123, 35, 36, 85,
- 38, 43, 40, 42, 129, 59, 41, 55, 131, 54,
- 46, 47, 134, 48, 49, 104, 51, 133, 60, 136,
- 52, 53, 57, 58, 79, 80, 81, 82, 130, 83,
- 84, 86, 87, 88, 91, 92, 93, 94, 135, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 4, 108, 5, 6,
- 7, 8, 9, 10, 11, 100, 12, 13, 14, 15,
- 16, 17, 18, 101, 19, 20, 21, 22, 106, 112,
- 23, 113, 114, 115, 116, 117, 118, 119, 121, 124,
- 125, 126, 127, 128, 132, 45
+ 93, 94, 115, 111, 53, 3, 114, 99, 100, 101,
+ 102, 103, 40, 41, 60, 106, 107, 27, 28, 29,
+ 30, 124, 31, 126, 33, 32, 127, 34, 35, 36,
+ 37, 38, 89, 43, 133, 45, 48, 56, 135, 46,
+ 40, 44, 138, 108, 49, 58, 50, 137, 64, 140,
+ 51, 52, 54, 55, 57, 63, 61, 62, 134, 83,
+ 59, 84, 85, 92, 86, 87, 88, 90, 139, 91,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 4, 95, 96,
+ 5, 6, 7, 8, 9, 10, 11, 97, 12, 13,
+ 14, 15, 16, 17, 18, 19, 98, 20, 21, 22,
+ 23, 104, 105, 24, 110, 112, 116, 117, 118, 119,
+ 120, 0, 121, 122, 123, 125, 128, 129, 130, 131,
+ 132, 136
};
-static const yytype_uint8 yycheck[] =
+static const yytype_int16 yycheck[] =
{
- 61, 62, 86, 81, 31, 0, 84, 68, 69, 70,
- 71, 72, 39, 4, 18, 76, 77, 4, 4, 4,
- 10, 105, 4, 107, 4, 4, 110, 4, 3, 56,
- 3, 7, 4, 4, 118, 3, 10, 15, 122, 36,
- 10, 10, 126, 10, 10, 7, 10, 125, 13, 133,
- 10, 10, 10, 10, 10, 10, 10, 10, 119, 10,
- 10, 10, 10, 4, 10, 4, 4, 4, 129, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 9, 5, 11, 12,
- 13, 14, 15, 16, 17, 10, 19, 20, 21, 22,
- 23, 24, 25, 10, 27, 28, 29, 30, 10, 10,
- 33, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 25
+ 65, 66, 90, 85, 32, 0, 88, 72, 73, 74,
+ 75, 76, 3, 4, 42, 80, 81, 4, 19, 4,
+ 4, 109, 4, 111, 4, 11, 114, 4, 4, 4,
+ 4, 3, 60, 4, 122, 4, 26, 10, 126, 7,
+ 3, 11, 130, 7, 11, 38, 11, 129, 14, 137,
+ 11, 11, 11, 11, 11, 3, 11, 11, 123, 11,
+ 16, 11, 11, 4, 11, 11, 11, 11, 133, 11,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 9, 11, 4,
+ 12, 13, 14, 15, 16, 17, 18, 4, 20, 21,
+ 22, 23, 24, 25, 26, 27, 4, 29, 30, 31,
+ 32, 11, 11, 35, 11, 5, 11, 11, 11, 11,
+ 11, -1, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11
};
/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
state STATE-NUM. */
static const yytype_int8 yystos[] =
{
- 0, 52, 53, 0, 9, 11, 12, 13, 14, 15,
- 16, 17, 19, 20, 21, 22, 23, 24, 25, 27,
- 28, 29, 30, 33, 54, 55, 4, 18, 4, 4,
- 4, 10, 4, 4, 4, 4, 3, 56, 3, 59,
- 4, 10, 4, 7, 57, 54, 10, 10, 10, 10,
- 59, 10, 10, 10, 56, 15, 59, 10, 10, 3,
- 13, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 58, 10,
- 10, 10, 10, 10, 10, 59, 10, 10, 4, 58,
- 58, 10, 4, 4, 4, 58, 58, 58, 58, 58,
- 10, 10, 58, 58, 7, 61, 10, 61, 5, 60,
- 61, 60, 10, 10, 10, 10, 10, 10, 10, 10,
- 60, 10, 60, 60, 10, 10, 10, 10, 10, 60,
- 58, 60, 10, 61, 60, 58, 60
+ 0, 54, 55, 0, 9, 12, 13, 14, 15, 16,
+ 17, 18, 20, 21, 22, 23, 24, 25, 26, 27,
+ 29, 30, 31, 32, 35, 56, 57, 4, 19, 4,
+ 4, 4, 11, 4, 4, 4, 4, 4, 3, 58,
+ 3, 4, 61, 4, 11, 4, 7, 59, 56, 11,
+ 11, 11, 11, 61, 11, 11, 10, 11, 58, 16,
+ 61, 11, 11, 3, 14, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 60, 11, 11, 11, 11, 11, 11, 61,
+ 11, 11, 4, 60, 60, 11, 4, 4, 4, 60,
+ 60, 60, 60, 60, 11, 11, 60, 60, 7, 63,
+ 11, 63, 5, 62, 63, 62, 11, 11, 11, 11,
+ 11, 11, 11, 11, 62, 11, 62, 62, 11, 11,
+ 11, 11, 11, 62, 60, 62, 11, 63, 62, 60,
+ 62
};
/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
static const yytype_int8 yyr1[] =
{
- 0, 51, 52, 53, 54, 54, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 56, 56, 57,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 59,
- 59, 60, 60, 61, 61
+ 0, 53, 54, 55, 56, 56, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 58, 58, 59, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 61, 61, 62, 62, 63, 63
};
/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
static const yytype_int8 yyr2[] =
{
- 0, 2, 2, 0, 2, 0, 4, 6, 1, 1,
- 3, 2, 7, 3, 5, 6, 5, 2, 4, 2,
- 2, 6, 3, 7, 3, 3, 1, 2, 0, 0,
- 2, 2, 6, 3, 1, 5, 4, 4, 2, 2,
- 2, 2, 2, 5, 4, 2, 2, 1, 0, 1,
- 0, 1, 0, 1, 0
+ 0, 2, 2, 0, 2, 0, 4, 2, 6, 1,
+ 1, 3, 2, 7, 3, 5, 6, 3, 2, 5,
+ 2, 4, 2, 2, 6, 3, 7, 3, 3, 1,
+ 2, 0, 0, 2, 2, 6, 3, 1, 5, 4,
+ 4, 2, 2, 2, 2, 2, 5, 4, 2, 2,
+ 1, 0, 1, 0, 1, 0, 1, 0
};
@@ -1228,8 +1235,8 @@ yyreduce:
switch (yyn)
{
case 3: /* init: %empty */
-#line 76 "engines/hypno/grammar_mis.y"
- {
+#line 75 "engines/hypno/grammar_mis.y"
+ {
if (smenu_idx)
delete smenu_idx;
smenu_idx = new Common::Array<uint32>();
@@ -1239,13 +1246,13 @@ yyreduce:
stack = new Hypno::HotspotsStack();
stack->push_back(new Hotspots());
}
-#line 1244 "engines/hypno/grammar_mis.cpp"
+#line 1250 "engines/hypno/grammar_mis.cpp"
break;
case 6: /* line: MENUTOK mflag mflag mflag */
-#line 92 "engines/hypno/grammar_mis.y"
+#line 91 "engines/hypno/grammar_mis.y"
{
- Hotspot hot(MakeMenu);
+ Hotspot hot(MakeMenu);
debugC(1, kHypnoDebugParser, "MENU %s %s", (yyvsp[-2].s), (yyvsp[-1].s));
hot.flags[0] = (yyvsp[-2].s);
hot.flags[1] = (yyvsp[-1].s);
@@ -1260,23 +1267,42 @@ yyreduce:
smenu_idx->pop_back();
smenu_idx->push_back(idx);
}
-#line 1265 "engines/hypno/grammar_mis.cpp"
+#line 1271 "engines/hypno/grammar_mis.cpp"
break;
- case 7: /* line: HOTSTOK BBOXTOK NUM NUM NUM NUM */
-#line 108 "engines/hypno/grammar_mis.y"
- {
- Hotspot hot(MakeHotspot, Common::Rect((yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)));
+ case 7: /* line: MENUTOK FILENAME */
+#line 107 "engines/hypno/grammar_mis.y"
+ {
+ Hotspot hot(MakeMenu);
+ debugC(1, kHypnoDebugParser, "MENU %s", (yyvsp[0].s));
+ hot.background = (yyvsp[0].s);
+
+ Hotspots *cur = stack->back();
+ cur->push_back(hot);
+
+ // We don't care about menus, only hotspots
+ int idx = smenu_idx->back();
+ idx++;
+ smenu_idx->pop_back();
+ smenu_idx->push_back(idx);
+ }
+#line 1290 "engines/hypno/grammar_mis.cpp"
+ break;
+
+ case 8: /* line: HOTSTOK BBOXTOK NUM NUM NUM NUM */
+#line 121 "engines/hypno/grammar_mis.y"
+ {
+ Hotspot hot(MakeHotspot, Common::Rect((yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i)));
debugC(1, kHypnoDebugParser, "HOTS %d.", hot.type);
Hotspots *cur = stack->back();
- cur->push_back(hot);
+ cur->push_back(hot);
}
-#line 1276 "engines/hypno/grammar_mis.cpp"
+#line 1301 "engines/hypno/grammar_mis.cpp"
break;
- case 8: /* line: SMENTOK */
-#line 114 "engines/hypno/grammar_mis.y"
- {
+ case 9: /* line: SMENTOK */
+#line 127 "engines/hypno/grammar_mis.y"
+ {
// This should always point to a hotspot
int idx = smenu_idx->back();
idx++;
@@ -1291,39 +1317,39 @@ yyreduce:
stack->push_back(hot->smenu);
debugC(1, kHypnoDebugParser, "SUBMENU");
}
-#line 1296 "engines/hypno/grammar_mis.cpp"
+#line 1321 "engines/hypno/grammar_mis.cpp"
break;
- case 9: /* line: ESCPTOK */
-#line 129 "engines/hypno/grammar_mis.y"
+ case 10: /* line: ESCPTOK */
+#line 142 "engines/hypno/grammar_mis.y"
{
Escape *a = new Escape();
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "ESC SUBMENU"); }
-#line 1307 "engines/hypno/grammar_mis.cpp"
+#line 1332 "engines/hypno/grammar_mis.cpp"
break;
- case 10: /* line: TIMETOK NUM mflag */
-#line 135 "engines/hypno/grammar_mis.y"
- {
+ case 11: /* line: TIMETOK NUM mflag */
+#line 148 "engines/hypno/grammar_mis.y"
+ {
Timer *a = new Timer((yyvsp[-1].i));
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "TIME %d", (yyvsp[-1].i)); }
-#line 1318 "engines/hypno/grammar_mis.cpp"
+#line 1343 "engines/hypno/grammar_mis.cpp"
break;
- case 11: /* line: SWPTTOK NUM */
-#line 141 "engines/hypno/grammar_mis.y"
+ case 12: /* line: SWPTTOK NUM */
+#line 154 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "SWPT %d", (yyvsp[0].i)); }
-#line 1324 "engines/hypno/grammar_mis.cpp"
+#line 1349 "engines/hypno/grammar_mis.cpp"
break;
- case 12: /* line: BACKTOK FILENAME NUM NUM gsswitch flag flag */
-#line 142 "engines/hypno/grammar_mis.y"
+ case 13: /* line: BACKTOK FILENAME NUM NUM gsswitch flag flag */
+#line 155 "engines/hypno/grammar_mis.y"
{
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();
@@ -1331,56 +1357,78 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "BACK");
}
-#line 1336 "engines/hypno/grammar_mis.cpp"
+#line 1361 "engines/hypno/grammar_mis.cpp"
break;
- case 13: /* line: GLOBTOK GSSWITCH NAME */
-#line 149 "engines/hypno/grammar_mis.y"
- {
+ case 14: /* line: GLOBTOK GSSWITCH NAME */
+#line 162 "engines/hypno/grammar_mis.y"
+ {
Global *a = new Global((yyvsp[-1].s), (yyvsp[0].s));
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "GLOB");
+ debugC(1, kHypnoDebugParser, "GLOB");
}
-#line 1348 "engines/hypno/grammar_mis.cpp"
+#line 1373 "engines/hypno/grammar_mis.cpp"
break;
- case 14: /* line: AMBITOK FILENAME NUM NUM flag */
-#line 156 "engines/hypno/grammar_mis.y"
- {
+ case 15: /* line: AMBITOK FILENAME NUM NUM flag */
+#line 169 "engines/hypno/grammar_mis.y"
+ {
Ambient *a = new Ambient((yyvsp[-3].s), Common::Point((yyvsp[-2].i), (yyvsp[-1].i)), (yyvsp[0].s));
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
- hot->actions.push_back(a);
+ hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "AMBI %d %d", (yyvsp[-2].i), (yyvsp[-1].i)); }
-#line 1359 "engines/hypno/grammar_mis.cpp"
+#line 1384 "engines/hypno/grammar_mis.cpp"
break;
- case 15: /* line: PLAYTOK FILENAME NUM NUM gsswitch flag */
-#line 162 "engines/hypno/grammar_mis.y"
- {
+ case 16: /* line: PLAYTOK FILENAME NUM NUM gsswitch flag */
+#line 175 "engines/hypno/grammar_mis.y"
+ {
Play *a = new Play((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);
+ hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "PLAY %s.", (yyvsp[-4].s)); }
-#line 1370 "engines/hypno/grammar_mis.cpp"
+#line 1395 "engines/hypno/grammar_mis.cpp"
+ break;
+
+ case 17: /* line: SONDTOK FILENAME ENCTOK */
+#line 181 "engines/hypno/grammar_mis.y"
+ {
+ //Play *a = new Play($2, Common::Point($3, $4), $5, $6);
+ //Hotspots *cur = stack->back();
+ //Hotspot *hot = &cur->back();
+ //hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "SOND %s.", (yyvsp[-1].s)); }
+#line 1406 "engines/hypno/grammar_mis.cpp"
break;
- case 16: /* line: OVERTOK FILENAME NUM NUM flag */
-#line 168 "engines/hypno/grammar_mis.y"
- {
+ case 18: /* line: SONDTOK FILENAME */
+#line 187 "engines/hypno/grammar_mis.y"
+ {
+ //Play *a = new Play($2, Common::Point($3, $4), $5, $6);
+ //Hotspots *cur = stack->back();
+ //Hotspot *hot = &cur->back();
+ //hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "SOND %s.", (yyvsp[0].s)); }
+#line 1417 "engines/hypno/grammar_mis.cpp"
+ break;
+
+ case 19: /* line: OVERTOK FILENAME NUM NUM flag */
+#line 193 "engines/hypno/grammar_mis.y"
+ {
Overlay *a = new Overlay((yyvsp[-3].s), Common::Point((yyvsp[-2].i), (yyvsp[-1].i)), (yyvsp[0].s));
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
}
-#line 1381 "engines/hypno/grammar_mis.cpp"
+#line 1428 "engines/hypno/grammar_mis.cpp"
break;
- case 17: /* line: PALETOK FILENAME */
-#line 174 "engines/hypno/grammar_mis.y"
+ case 20: /* line: PALETOK FILENAME */
+#line 199 "engines/hypno/grammar_mis.y"
{
Palette *a = new Palette((yyvsp[0].s));
Hotspots *cur = stack->back();
@@ -1388,320 +1436,320 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "PALE");
}
-#line 1393 "engines/hypno/grammar_mis.cpp"
+#line 1440 "engines/hypno/grammar_mis.cpp"
break;
- case 18: /* line: INTRTOK FILENAME NUM NUM */
-#line 181 "engines/hypno/grammar_mis.y"
- {
+ case 21: /* line: INTRTOK FILENAME NUM NUM */
+#line 206 "engines/hypno/grammar_mis.y"
+ {
Intro *a = new Intro(Common::String("cine/") + (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));
+ debugC(1, kHypnoDebugParser, "INTRO %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1405 "engines/hypno/grammar_mis.cpp"
+#line 1452 "engines/hypno/grammar_mis.cpp"
break;
- case 19: /* line: INTRTOK FILENAME */
-#line 188 "engines/hypno/grammar_mis.y"
- {
+ case 22: /* line: INTRTOK FILENAME */
+#line 213 "engines/hypno/grammar_mis.y"
+ {
Intro *a = new Intro(Common::String("cine/") + (yyvsp[0].s));
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "INTRO %s", (yyvsp[0].s));
+ debugC(1, kHypnoDebugParser, "INTRO %s", (yyvsp[0].s));
}
-#line 1417 "engines/hypno/grammar_mis.cpp"
+#line 1464 "engines/hypno/grammar_mis.cpp"
break;
- case 20: /* line: CUTSTOK FILENAME */
-#line 195 "engines/hypno/grammar_mis.y"
- {
+ case 23: /* line: CUTSTOK FILENAME */
+#line 220 "engines/hypno/grammar_mis.y"
+ {
Cutscene *a = new Cutscene((yyvsp[0].s));
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
- hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "CUTS %s", (yyvsp[0].s));
+ hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "CUTS %s", (yyvsp[0].s));
}
-#line 1429 "engines/hypno/grammar_mis.cpp"
+#line 1476 "engines/hypno/grammar_mis.cpp"
break;
- case 21: /* line: WALNTOK FILENAME NUM NUM gsswitch flag */
-#line 202 "engines/hypno/grammar_mis.y"
- {
+ case 24: /* line: WALNTOK FILENAME NUM NUM gsswitch flag */
+#line 227 "engines/hypno/grammar_mis.y"
+ {
WalN *a = new WalN((yyvsp[-5].s), (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);
+ hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "WALN %s %d %d", (yyvsp[-4].s), (yyvsp[-3].i), (yyvsp[-2].i)); }
-#line 1440 "engines/hypno/grammar_mis.cpp"
+#line 1487 "engines/hypno/grammar_mis.cpp"
break;
- case 22: /* line: MICETOK FILENAME NUM */
-#line 208 "engines/hypno/grammar_mis.y"
+ case 25: /* line: MICETOK FILENAME NUM */
+#line 233 "engines/hypno/grammar_mis.y"
{
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 1451 "engines/hypno/grammar_mis.cpp"
+#line 1498 "engines/hypno/grammar_mis.cpp"
break;
- case 23: /* line: MPTRTOK FILENAME NUM NUM NUM NUM NUM */
-#line 214 "engines/hypno/grammar_mis.y"
+ case 26: /* line: MPTRTOK FILENAME NUM NUM NUM NUM NUM */
+#line 239 "engines/hypno/grammar_mis.y"
{
debugC(1, kHypnoDebugParser, "MPTR %s %d %d %d %d %d", (yyvsp[-5].s), (yyvsp[-4].i), (yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1459 "engines/hypno/grammar_mis.cpp"
+#line 1506 "engines/hypno/grammar_mis.cpp"
break;
- case 24: /* line: TALKTOK alloctalk talk */
-#line 217 "engines/hypno/grammar_mis.y"
- {
+ case 27: /* line: TALKTOK alloctalk talk */
+#line 242 "engines/hypno/grammar_mis.y"
+ {
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(talk_action);
talk_action = nullptr;
debugC(1, kHypnoDebugParser, "TALK"); }
-#line 1470 "engines/hypno/grammar_mis.cpp"
+#line 1517 "engines/hypno/grammar_mis.cpp"
break;
- case 25: /* line: ENDTOK anything RETTOK */
-#line 223 "engines/hypno/grammar_mis.y"
- {
+ case 28: /* line: ENDTOK anything RETTOK */
+#line 248 "engines/hypno/grammar_mis.y"
+ {
debugC(1, kHypnoDebugParser, "explicit END");
g_parsedHots = stack->back();
stack->pop_back();
smenu_idx->pop_back();
}
-#line 1481 "engines/hypno/grammar_mis.cpp"
+#line 1528 "engines/hypno/grammar_mis.cpp"
break;
- case 26: /* line: RETTOK */
-#line 229 "engines/hypno/grammar_mis.y"
+ case 29: /* line: RETTOK */
+#line 254 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "implicit END"); }
-#line 1487 "engines/hypno/grammar_mis.cpp"
+#line 1534 "engines/hypno/grammar_mis.cpp"
break;
- case 29: /* alloctalk: %empty */
-#line 236 "engines/hypno/grammar_mis.y"
- {
+ case 32: /* alloctalk: %empty */
+#line 261 "engines/hypno/grammar_mis.y"
+ {
assert(talk_action == nullptr);
talk_action = new Talk();
talk_action->escape = false;
- talk_action->active = true;
+ talk_action->active = true;
}
-#line 1498 "engines/hypno/grammar_mis.cpp"
+#line 1545 "engines/hypno/grammar_mis.cpp"
break;
- case 30: /* talk: INACTOK talk */
-#line 243 "engines/hypno/grammar_mis.y"
+ case 33: /* talk: INACTOK talk */
+#line 268 "engines/hypno/grammar_mis.y"
{
- talk_action->active = false;
+ talk_action->active = false;
debugC(1, kHypnoDebugParser, "inactive"); }
-#line 1506 "engines/hypno/grammar_mis.cpp"
+#line 1553 "engines/hypno/grammar_mis.cpp"
break;
- case 31: /* talk: FDTOK talk */
-#line 246 "engines/hypno/grammar_mis.y"
+ case 34: /* talk: FDTOK talk */
+#line 271 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "inactive"); }
-#line 1512 "engines/hypno/grammar_mis.cpp"
+#line 1559 "engines/hypno/grammar_mis.cpp"
break;
- case 32: /* talk: BACKTOK FILENAME NUM NUM gsswitch flag */
-#line 247 "engines/hypno/grammar_mis.y"
- {
+ case 35: /* talk: BACKTOK FILENAME NUM NUM gsswitch flag */
+#line 272 "engines/hypno/grammar_mis.y"
+ {
talk_action->background = (yyvsp[-4].s);
talk_action->backgroundPos = Common::Point((yyvsp[-3].i), (yyvsp[-2].i));
debugC(1, kHypnoDebugParser, "BACK in TALK"); }
-#line 1521 "engines/hypno/grammar_mis.cpp"
+#line 1568 "engines/hypno/grammar_mis.cpp"
break;
- case 33: /* talk: BOXXTOK NUM NUM */
-#line 251 "engines/hypno/grammar_mis.y"
+ case 36: /* talk: BOXXTOK NUM NUM */
+#line 276 "engines/hypno/grammar_mis.y"
{
- talk_action->boxPos = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
+ talk_action->boxPos = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
debugC(1, kHypnoDebugParser, "BOXX %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1529 "engines/hypno/grammar_mis.cpp"
+#line 1576 "engines/hypno/grammar_mis.cpp"
break;
- case 34: /* talk: ESCAPETOK */
-#line 254 "engines/hypno/grammar_mis.y"
+ case 37: /* talk: ESCAPETOK */
+#line 279 "engines/hypno/grammar_mis.y"
{
- talk_action->escape = true;
+ talk_action->escape = true;
debugC(1, kHypnoDebugParser, "ESCAPE"); }
-#line 1537 "engines/hypno/grammar_mis.cpp"
+#line 1584 "engines/hypno/grammar_mis.cpp"
break;
- case 35: /* talk: SECONDTOK FILENAME NUM NUM flag */
-#line 257 "engines/hypno/grammar_mis.y"
+ case 38: /* talk: SECONDTOK FILENAME NUM NUM flag */
+#line 282 "engines/hypno/grammar_mis.y"
{
talk_action->second = (yyvsp[-3].s);
- talk_action->secondPos = Common::Point((yyvsp[-2].i), (yyvsp[-1].i));
+ talk_action->secondPos = Common::Point((yyvsp[-2].i), (yyvsp[-1].i));
debugC(1, kHypnoDebugParser, "SECOND %s %d %d '%s'", (yyvsp[-3].s), (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].s)); }
-#line 1546 "engines/hypno/grammar_mis.cpp"
+#line 1593 "engines/hypno/grammar_mis.cpp"
break;
- case 36: /* talk: INTROTOK FILENAME NUM NUM */
-#line 261 "engines/hypno/grammar_mis.y"
- {
+ case 39: /* talk: INTROTOK FILENAME NUM NUM */
+#line 286 "engines/hypno/grammar_mis.y"
+ {
talk_action->intro = (yyvsp[-2].s);
talk_action->introPos = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
debugC(1, kHypnoDebugParser, "INTRO %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1555 "engines/hypno/grammar_mis.cpp"
+#line 1602 "engines/hypno/grammar_mis.cpp"
break;
- case 37: /* talk: DEFAULTTOK FILENAME NUM NUM */
-#line 265 "engines/hypno/grammar_mis.y"
- {
+ case 40: /* talk: DEFAULTTOK FILENAME NUM NUM */
+#line 290 "engines/hypno/grammar_mis.y"
+ {
// Unsure how this is different from second
talk_action->second = (yyvsp[-2].s);
talk_action->secondPos = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
debugC(1, kHypnoDebugParser, "DEFAULT %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1565 "engines/hypno/grammar_mis.cpp"
+#line 1612 "engines/hypno/grammar_mis.cpp"
break;
- case 38: /* talk: PG talk */
-#line 270 "engines/hypno/grammar_mis.y"
- {
+ case 41: /* talk: PG talk */
+#line 295 "engines/hypno/grammar_mis.y"
+ {
TalkCommand talk_cmd;
talk_cmd.command = "G";
talk_cmd.path = (yyvsp[-1].s)+2;
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1576 "engines/hypno/grammar_mis.cpp"
+#line 1623 "engines/hypno/grammar_mis.cpp"
break;
- case 39: /* talk: PH talk */
-#line 276 "engines/hypno/grammar_mis.y"
+ case 42: /* talk: PH talk */
+#line 301 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1582 "engines/hypno/grammar_mis.cpp"
+#line 1629 "engines/hypno/grammar_mis.cpp"
break;
- case 40: /* talk: PF talk */
-#line 277 "engines/hypno/grammar_mis.y"
- {
+ case 43: /* talk: PF talk */
+#line 302 "engines/hypno/grammar_mis.y"
+ {
TalkCommand talk_cmd;
talk_cmd.command = "F";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1;
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1593 "engines/hypno/grammar_mis.cpp"
+#line 1640 "engines/hypno/grammar_mis.cpp"
break;
- case 41: /* talk: PA talk */
-#line 283 "engines/hypno/grammar_mis.y"
- {
+ case 44: /* talk: PA talk */
+#line 308 "engines/hypno/grammar_mis.y"
+ {
TalkCommand talk_cmd;
talk_cmd.command = "A";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1;
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "|A%d", talk_cmd.num); }
-#line 1604 "engines/hypno/grammar_mis.cpp"
+#line 1651 "engines/hypno/grammar_mis.cpp"
break;
- case 42: /* talk: PD talk */
-#line 289 "engines/hypno/grammar_mis.y"
- {
+ case 45: /* talk: PD talk */
+#line 314 "engines/hypno/grammar_mis.y"
+ {
TalkCommand talk_cmd;
talk_cmd.command = "D";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1;
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1615 "engines/hypno/grammar_mis.cpp"
+#line 1662 "engines/hypno/grammar_mis.cpp"
break;
- case 43: /* talk: PP NUM NUM flag talk */
-#line 295 "engines/hypno/grammar_mis.y"
- {
+ case 46: /* talk: PP NUM NUM flag talk */
+#line 320 "engines/hypno/grammar_mis.y"
+ {
TalkCommand talk_cmd;
talk_cmd.command = "P";
talk_cmd.path = (yyvsp[-4].s)+2;
talk_cmd.position = Common::Point((yyvsp[-3].i), (yyvsp[-2].i));
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s %d %d '%s'", (yyvsp[-4].s), (yyvsp[-3].i), (yyvsp[-2].i), (yyvsp[-1].s)); }
-#line 1627 "engines/hypno/grammar_mis.cpp"
+#line 1674 "engines/hypno/grammar_mis.cpp"
break;
- case 44: /* talk: PI NUM NUM talk */
-#line 302 "engines/hypno/grammar_mis.y"
- {
+ case 47: /* talk: PI NUM NUM talk */
+#line 327 "engines/hypno/grammar_mis.y"
+ {
TalkCommand talk_cmd;
talk_cmd.command = "I";
talk_cmd.path = (yyvsp[-3].s)+2;
talk_cmd.position = Common::Point((yyvsp[-2].i), (yyvsp[-1].i));
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s %d %d", (yyvsp[-3].s), (yyvsp[-2].i), (yyvsp[-1].i)); }
-#line 1639 "engines/hypno/grammar_mis.cpp"
+#line 1686 "engines/hypno/grammar_mis.cpp"
break;
- case 45: /* talk: PS talk */
-#line 309 "engines/hypno/grammar_mis.y"
- {
+ case 48: /* talk: PS talk */
+#line 334 "engines/hypno/grammar_mis.y"
+ {
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 1650 "engines/hypno/grammar_mis.cpp"
+#line 1697 "engines/hypno/grammar_mis.cpp"
break;
- case 46: /* talk: PL talk */
-#line 315 "engines/hypno/grammar_mis.y"
- {
+ case 49: /* talk: PL talk */
+#line 340 "engines/hypno/grammar_mis.y"
+ {
TalkCommand talk_cmd;
talk_cmd.command = "L";
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "|L"); }
-#line 1660 "engines/hypno/grammar_mis.cpp"
+#line 1707 "engines/hypno/grammar_mis.cpp"
break;
- case 47: /* talk: PE */
-#line 320 "engines/hypno/grammar_mis.y"
+ case 50: /* talk: PE */
+#line 345 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "|E"); }
-#line 1666 "engines/hypno/grammar_mis.cpp"
+#line 1713 "engines/hypno/grammar_mis.cpp"
break;
- case 49: /* mflag: NAME */
-#line 324 "engines/hypno/grammar_mis.y"
+ case 52: /* mflag: NAME */
+#line 349 "engines/hypno/grammar_mis.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1672 "engines/hypno/grammar_mis.cpp"
+#line 1719 "engines/hypno/grammar_mis.cpp"
break;
- case 50: /* mflag: %empty */
-#line 325 "engines/hypno/grammar_mis.y"
+ case 53: /* mflag: %empty */
+#line 350 "engines/hypno/grammar_mis.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1678 "engines/hypno/grammar_mis.cpp"
+#line 1725 "engines/hypno/grammar_mis.cpp"
break;
- case 51: /* flag: FLAG */
-#line 328 "engines/hypno/grammar_mis.y"
+ case 54: /* flag: FLAG */
+#line 353 "engines/hypno/grammar_mis.y"
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "flag: %s", (yyvsp[0].s)); }
-#line 1684 "engines/hypno/grammar_mis.cpp"
+#line 1731 "engines/hypno/grammar_mis.cpp"
break;
- case 52: /* flag: %empty */
-#line 329 "engines/hypno/grammar_mis.y"
+ case 55: /* flag: %empty */
+#line 354 "engines/hypno/grammar_mis.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1690 "engines/hypno/grammar_mis.cpp"
+#line 1737 "engines/hypno/grammar_mis.cpp"
break;
- case 53: /* gsswitch: GSSWITCH */
-#line 332 "engines/hypno/grammar_mis.y"
+ case 56: /* gsswitch: GSSWITCH */
+#line 357 "engines/hypno/grammar_mis.y"
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "switch %s", (yyvsp[0].s)); }
-#line 1696 "engines/hypno/grammar_mis.cpp"
+#line 1743 "engines/hypno/grammar_mis.cpp"
break;
- case 54: /* gsswitch: %empty */
-#line 333 "engines/hypno/grammar_mis.y"
+ case 57: /* gsswitch: %empty */
+#line 358 "engines/hypno/grammar_mis.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1702 "engines/hypno/grammar_mis.cpp"
+#line 1749 "engines/hypno/grammar_mis.cpp"
break;
-#line 1706 "engines/hypno/grammar_mis.cpp"
+#line 1753 "engines/hypno/grammar_mis.cpp"
default: break;
}
diff --git a/engines/hypno/grammar_mis.y b/engines/hypno/grammar_mis.y
index c56e38bfb06..b5756c87507 100644
--- a/engines/hypno/grammar_mis.y
+++ b/engines/hypno/grammar_mis.y
@@ -50,16 +50,16 @@ int HYPNO_MIS_wrap() {
using namespace Hypno;
-%}
+%}
%union {
char *s; /* string value */
int i; /* integer value */
}
-%token<s> NAME FILENAME FLAG COMMENT GSSWITCH COMMAND WALNTOK
+%token<s> NAME FILENAME FLAG COMMENT GSSWITCH COMMAND WALNTOK ENCTOK
%token<i> NUM
-%token HOTSTOK CUTSTOK BACKTOK INTRTOK RETTOK TIMETOK PALETOK BBOXTOK OVERTOK MICETOK PLAYTOK ENDTOK
+%token HOTSTOK CUTSTOK BACKTOK INTRTOK RETTOK TIMETOK PALETOK BBOXTOK OVERTOK MICETOK SONDTOK PLAYTOK ENDTOK
%token MENUTOK SMENTOK ESCPTOK NRTOK AMBITOK SWPTTOK MPTRTOK
%token GLOBTOK TONTOK TOFFTOK
%token TALKTOK INACTOK FDTOK BOXXTOK ESCAPETOK SECONDTOK INTROTOK DEFAULTTOK
@@ -69,10 +69,10 @@ using namespace Hypno;
%%
-start: init lines
+start: init lines
;
-init: {
+init: {
if (smenu_idx)
delete smenu_idx;
smenu_idx = new Common::Array<uint32>();
@@ -85,11 +85,11 @@ init: {
lines: line lines
| /* nothing */
- ;
+ ;
line: MENUTOK mflag mflag mflag {
- Hotspot hot(MakeMenu);
+ Hotspot hot(MakeMenu);
debugC(1, kHypnoDebugParser, "MENU %s %s", $2, $3);
hot.flags[0] = $2;
hot.flags[1] = $3;
@@ -104,13 +104,27 @@ line: MENUTOK mflag mflag mflag {
smenu_idx->pop_back();
smenu_idx->push_back(idx);
}
- | HOTSTOK BBOXTOK NUM NUM NUM NUM {
- Hotspot hot(MakeHotspot, Common::Rect($3, $4, $5, $6));
+ | MENUTOK FILENAME {
+ Hotspot hot(MakeMenu);
+ debugC(1, kHypnoDebugParser, "MENU %s", $2);
+ hot.background = $2;
+
+ Hotspots *cur = stack->back();
+ cur->push_back(hot);
+
+ // We don't care about menus, only hotspots
+ int idx = smenu_idx->back();
+ idx++;
+ smenu_idx->pop_back();
+ smenu_idx->push_back(idx);
+ }
+ | HOTSTOK BBOXTOK NUM NUM NUM NUM {
+ Hotspot hot(MakeHotspot, Common::Rect($3, $4, $5, $6));
debugC(1, kHypnoDebugParser, "HOTS %d.", hot.type);
Hotspots *cur = stack->back();
- cur->push_back(hot);
+ cur->push_back(hot);
}
- | SMENTOK {
+ | SMENTOK {
// This should always point to a hotspot
int idx = smenu_idx->back();
idx++;
@@ -131,12 +145,12 @@ line: MENUTOK mflag mflag mflag {
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "ESC SUBMENU"); }
- | TIMETOK NUM mflag {
+ | TIMETOK NUM mflag {
Timer *a = new Timer($2);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "TIME %d", $2); }
+ debugC(1, kHypnoDebugParser, "TIME %d", $2); }
| SWPTTOK NUM { debugC(1, kHypnoDebugParser, "SWPT %d", $2); }
| BACKTOK FILENAME NUM NUM gsswitch flag flag {
Background *a = new Background($2, Common::Point($3, $4), $5, $6, $7);
@@ -145,26 +159,38 @@ line: MENUTOK mflag mflag mflag {
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "BACK");
}
- | GLOBTOK GSSWITCH NAME {
+ | GLOBTOK GSSWITCH NAME {
Global *a = new Global($2, $3);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "GLOB");
+ debugC(1, kHypnoDebugParser, "GLOB");
}
- | AMBITOK FILENAME NUM NUM flag {
+ | AMBITOK FILENAME NUM NUM flag {
Ambient *a = new Ambient($2, Common::Point($3, $4), $5);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
- hot->actions.push_back(a);
+ hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "AMBI %d %d", $3, $4); }
- | PLAYTOK FILENAME NUM NUM gsswitch flag {
+ | PLAYTOK FILENAME NUM NUM gsswitch flag {
Play *a = new Play($2, Common::Point($3, $4), $5, $6);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
- hot->actions.push_back(a);
+ hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "PLAY %s.", $2); }
- | OVERTOK FILENAME NUM NUM flag {
+ | SONDTOK FILENAME ENCTOK {
+ //Play *a = new Play($2, Common::Point($3, $4), $5, $6);
+ //Hotspots *cur = stack->back();
+ //Hotspot *hot = &cur->back();
+ //hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "SOND %s.", $2); }
+ | SONDTOK FILENAME {
+ //Play *a = new Play($2, Common::Point($3, $4), $5, $6);
+ //Hotspots *cur = stack->back();
+ //Hotspot *hot = &cur->back();
+ //hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "SOND %s.", $2); }
+ | OVERTOK FILENAME NUM NUM flag {
Overlay *a = new Overlay($2, Common::Point($3, $4), $5);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
@@ -177,33 +203,33 @@ line: MENUTOK mflag mflag mflag {
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "PALE");
}
- | INTRTOK FILENAME NUM NUM {
+ | INTRTOK FILENAME NUM NUM {
Intro *a = new Intro(Common::String("cine/") + $2);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "INTRO %s %d %d", $2, $3, $4);
+ debugC(1, kHypnoDebugParser, "INTRO %s %d %d", $2, $3, $4);
}
- | INTRTOK FILENAME {
+ | INTRTOK FILENAME {
Intro *a = new Intro(Common::String("cine/") + $2);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "INTRO %s", $2);
+ debugC(1, kHypnoDebugParser, "INTRO %s", $2);
}
- | CUTSTOK FILENAME {
+ | CUTSTOK FILENAME {
Cutscene *a = new Cutscene($2);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
- hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "CUTS %s", $2);
+ hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "CUTS %s", $2);
}
- | WALNTOK FILENAME NUM NUM gsswitch flag {
+ | WALNTOK FILENAME NUM NUM gsswitch flag {
WalN *a = new WalN($1, $2, Common::Point($3, $4), $5, $6);
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
- hot->actions.push_back(a);
- debugC(1, kHypnoDebugParser, "WALN %s %d %d", $2, $3, $4); }
+ hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "WALN %s %d %d", $2, $3, $4); }
| MICETOK FILENAME NUM {
Mice *a = new Mice($2, $3-1);
Hotspots *cur = stack->back();
@@ -213,13 +239,13 @@ line: MENUTOK mflag mflag mflag {
| MPTRTOK FILENAME NUM NUM NUM NUM NUM {
debugC(1, kHypnoDebugParser, "MPTR %s %d %d %d %d %d", $2, $3, $4, $5, $6, $7);
}
- | TALKTOK alloctalk talk {
+ | TALKTOK alloctalk talk {
Hotspots *cur = stack->back();
Hotspot *hot = &cur->back();
hot->actions.push_back(talk_action);
talk_action = nullptr;
debugC(1, kHypnoDebugParser, "TALK"); }
- | ENDTOK anything RETTOK {
+ | ENDTOK anything RETTOK {
debugC(1, kHypnoDebugParser, "explicit END");
g_parsedHots = stack->back();
stack->pop_back();
@@ -232,86 +258,86 @@ anything: NAME anything
| // nothing
;
-alloctalk: {
+alloctalk: {
assert(talk_action == nullptr);
talk_action = new Talk();
talk_action->escape = false;
- talk_action->active = true;
+ talk_action->active = true;
}
talk: INACTOK talk {
- talk_action->active = false;
+ talk_action->active = false;
debugC(1, kHypnoDebugParser, "inactive"); }
| FDTOK talk { debugC(1, kHypnoDebugParser, "inactive"); }
- | BACKTOK FILENAME NUM NUM gsswitch flag {
+ | BACKTOK FILENAME NUM NUM gsswitch flag {
talk_action->background = $2;
talk_action->backgroundPos = Common::Point($3, $4);
debugC(1, kHypnoDebugParser, "BACK in TALK"); }
| BOXXTOK NUM NUM {
- talk_action->boxPos = Common::Point($2, $3);
+ talk_action->boxPos = Common::Point($2, $3);
debugC(1, kHypnoDebugParser, "BOXX %d %d", $2, $3); }
| ESCAPETOK {
- talk_action->escape = true;
+ talk_action->escape = true;
debugC(1, kHypnoDebugParser, "ESCAPE"); }
| SECONDTOK FILENAME NUM NUM flag {
talk_action->second = $2;
- talk_action->secondPos = Common::Point($3, $4);
+ talk_action->secondPos = Common::Point($3, $4);
debugC(1, kHypnoDebugParser, "SECOND %s %d %d '%s'", $2, $3, $4, $5); }
- | INTROTOK FILENAME NUM NUM {
+ | INTROTOK FILENAME NUM NUM {
talk_action->intro = $2;
talk_action->introPos = Common::Point($3, $4);
debugC(1, kHypnoDebugParser, "INTRO %s %d %d", $2, $3, $4); }
- | DEFAULTTOK FILENAME NUM NUM {
+ | DEFAULTTOK FILENAME NUM NUM {
// Unsure how this is different from second
talk_action->second = $2;
talk_action->secondPos = Common::Point($3, $4);
debugC(1, kHypnoDebugParser, "DEFAULT %s %d %d", $2, $3, $4); }
- | PG talk {
+ | PG talk {
TalkCommand talk_cmd;
talk_cmd.command = "G";
talk_cmd.path = $1+2;
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", $1); }
| PH talk { debugC(1, kHypnoDebugParser, "%s", $1); }
- | PF talk {
+ | PF talk {
TalkCommand talk_cmd;
talk_cmd.command = "F";
talk_cmd.num = atoi($1+2)-1;
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", $1); }
- | PA talk {
+ | PA talk {
TalkCommand talk_cmd;
talk_cmd.command = "A";
talk_cmd.num = atoi($1+2)-1;
- talk_action->commands.push_back(talk_cmd);
- debugC(1, kHypnoDebugParser, "|A%d", talk_cmd.num); }
- | PD talk {
+ talk_action->commands.push_back(talk_cmd);
+ debugC(1, kHypnoDebugParser, "|A%d", talk_cmd.num); }
+ | PD talk {
TalkCommand talk_cmd;
talk_cmd.command = "D";
talk_cmd.num = atoi($1+2)-1;
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", $1); }
- | PP NUM NUM flag talk {
+ | PP NUM NUM flag talk {
TalkCommand talk_cmd;
talk_cmd.command = "P";
talk_cmd.path = $1+2;
talk_cmd.position = Common::Point($2, $3);
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s %d %d '%s'", $1, $2, $3, $4); }
- | PI NUM NUM talk {
+ | PI NUM NUM talk {
TalkCommand talk_cmd;
talk_cmd.command = "I";
talk_cmd.path = $1+2;
talk_cmd.position = Common::Point($2, $3);
- talk_action->commands.push_back(talk_cmd);
+ talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s %d %d", $1, $2, $3); }
- | PS talk {
+ | PS talk {
TalkCommand talk_cmd;
talk_cmd.command = "S";
talk_cmd.variable = $1+2;
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s", $1); }
- | PL talk {
+ | PL talk {
TalkCommand talk_cmd;
talk_cmd.command = "L";
talk_action->commands.push_back(talk_cmd);
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 580d311dce1..972aed5660d 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -135,6 +135,8 @@ public:
SegmentShootsSequence parseShootList(const Common::String &name, const Common::String &data);
void loadArcadeLevel(const Common::String ¤t, const Common::String &nextWin, const Common::String &nextLose, const Common::String &prefix);
void loadSceneLevel(const Common::String ¤t, const Common::String &next, const Common::String &prefix);
+ void loadSceneLevel(const char *buf, const Common::String &name, const Common::String &next, const Common::String &prefix);
+
LibFile *loadLib(const Filename &prefix, const Filename &filename, bool encrypted);
// User input
diff --git a/engines/hypno/lexer_mis.cpp b/engines/hypno/lexer_mis.cpp
index c0e09133e6d..2975acffbe1 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 48
-#define YY_END_OF_BUFFER 49
+#define YY_NUM_RULES 51
+#define YY_END_OF_BUFFER 52
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -642,24 +642,25 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[150] =
+static const flex_int16_t yy_accept[159] =
{ 0,
- 0, 0, 49, 47, 46, 45, 45, 47, 41, 44,
- 44, 47, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 45, 46,
- 44, 0, 41, 41, 0, 1, 43, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 0, 0, 37, 0, 0, 0, 0, 38,
- 0, 0, 2, 41, 0, 42, 42, 42, 42, 42,
- 11, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 34,
-
- 35, 36, 30, 33, 32, 31, 29, 41, 0, 4,
- 5, 20, 6, 42, 42, 15, 7, 39, 9, 42,
- 25, 3, 10, 21, 13, 8, 16, 42, 14, 26,
- 17, 12, 28, 41, 19, 42, 42, 42, 24, 42,
- 40, 42, 22, 42, 23, 27, 42, 18, 0
+ 0, 0, 52, 50, 49, 48, 48, 50, 44, 47,
+ 47, 47, 47, 50, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 48, 49, 47, 0, 44, 44, 47, 47, 0, 1,
+ 46, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 0, 0, 38,
+ 0, 0, 0, 0, 39, 0, 0, 2, 44, 41,
+ 40, 0, 45, 45, 45, 45, 45, 11, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 45, 45, 35, 36, 37,
+ 31, 34, 33, 32, 30, 44, 0, 4, 5, 21,
+ 6, 45, 45, 15, 7, 42, 9, 45, 26, 3,
+ 10, 22, 13, 8, 16, 45, 14, 17, 27, 18,
+ 12, 29, 44, 20, 45, 45, 45, 25, 45, 43,
+ 45, 23, 45, 24, 28, 45, 19, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -668,16 +669,16 @@ static const YY_CHAR yy_ec[256] =
1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 5, 6, 7, 8, 8, 9,
- 9, 10, 9, 9, 9, 9, 9, 1, 11, 1,
- 12, 1, 1, 1, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 22, 29, 30, 31, 32, 33, 34, 35, 36, 22,
- 1, 6, 1, 1, 37, 1, 38, 38, 38, 38,
-
- 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 1, 39, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 5, 6, 7, 8, 9, 10,
+ 11, 12, 11, 11, 11, 11, 11, 1, 13, 1,
+ 14, 1, 1, 1, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 24, 31, 32, 33, 34, 35, 36, 37, 38, 24,
+ 1, 6, 1, 1, 39, 1, 40, 40, 40, 40,
+
+ 40, 40, 40, 40, 40, 40, 41, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 1, 42, 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,
@@ -694,148 +695,167 @@ static const YY_CHAR yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static const YY_CHAR yy_meta[40] =
+static const YY_CHAR yy_meta[43] =
{ 0,
1, 1, 2, 1, 1, 3, 4, 5, 5, 5,
- 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 1
+ 5, 5, 1, 1, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 5, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 5, 7
} ;
-static const flex_int16_t yy_base[161] =
+static const flex_int16_t yy_base[171] =
{ 0,
- 0, 0, 311, 312, 308, 312, 312, 32, 36, 36,
- 39, 0, 45, 46, 47, 48, 50, 303, 51, 55,
- 52, 66, 56, 61, 71, 78, 58, 0, 93, 306,
- 92, 0, 299, 79, 289, 0, 0, 294, 54, 89,
- 57, 84, 101, 92, 110, 91, 97, 114, 116, 118,
- 120, 121, 122, 124, 125, 126, 134, 127, 130, 131,
- 136, 0, 149, 153, 312, 156, 0, 159, 0, 312,
- 0, 0, 0, 143, 270, 165, 166, 140, 143, 168,
- 288, 170, 171, 172, 173, 176, 178, 174, 182, 184,
- 186, 187, 181, 189, 188, 190, 195, 191, 194, 214,
-
- 217, 220, 0, 223, 0, 0, 0, 202, 256, 280,
- 277, 272, 267, 206, 213, 266, 264, 205, 263, 214,
- 228, 262, 261, 260, 259, 258, 257, 230, 256, 255,
- 252, 248, 246, 228, 312, 233, 236, 238, 245, 137,
- 312, 240, 244, 241, 242, 199, 243, 63, 312, 271,
- 276, 279, 61, 284, 287, 290, 293, 296, 299, 302
+ 0, 0, 373, 380, 367, 380, 380, 35, 41, 41,
+ 50, 55, 60, 0, 48, 67, 49, 68, 70, 359,
+ 71, 50, 78, 82, 74, 84, 88, 85, 80, 0,
+ 110, 359, 110, 0, 350, 97, 102, 109, 338, 0,
+ 0, 341, 110, 75, 108, 105, 117, 129, 135, 133,
+ 140, 142, 143, 149, 147, 148, 150, 154, 151, 153,
+ 155, 157, 159, 161, 165, 162, 0, 185, 190, 380,
+ 195, 0, 200, 0, 380, 0, 0, 0, 184, 380,
+ 380, 312, 167, 208, 178, 210, 211, 328, 213, 166,
+ 180, 212, 217, 216, 218, 219, 223, 224, 221, 225,
+
+ 229, 231, 230, 233, 226, 243, 259, 261, 266, 271,
+ 0, 276, 0, 0, 0, 253, 291, 321, 320, 319,
+ 317, 255, 285, 316, 315, 258, 307, 286, 287, 306,
+ 305, 304, 302, 300, 299, 289, 298, 297, 296, 250,
+ 244, 235, 239, 380, 288, 290, 295, 177, 239, 380,
+ 291, 172, 294, 87, 83, 301, 79, 380, 326, 332,
+ 337, 339, 345, 348, 353, 357, 361, 365, 369, 373
} ;
-static const flex_int16_t yy_def[161] =
+static const flex_int16_t yy_def[171] =
{ 0,
- 149, 1, 149, 149, 149, 149, 149, 149, 150, 149,
- 149, 151, 152, 152, 152, 152, 152, 152, 152, 152,
- 152, 152, 152, 152, 152, 152, 152, 153, 149, 149,
- 149, 154, 150, 150, 149, 151, 155, 152, 152, 152,
- 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
- 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
- 152, 153, 149, 149, 149, 149, 156, 149, 157, 149,
- 158, 159, 154, 150, 149, 152, 152, 152, 152, 152,
- 152, 152, 152, 160, 152, 152, 152, 152, 152, 152,
- 152, 152, 152, 152, 152, 152, 152, 152, 152, 149,
-
- 149, 149, 156, 149, 157, 158, 159, 150, 149, 152,
- 152, 152, 152, 152, 152, 152, 152, 160, 152, 152,
- 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
- 152, 152, 152, 150, 149, 152, 152, 152, 152, 152,
- 149, 152, 152, 152, 152, 152, 152, 152, 0, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149
+ 158, 1, 158, 158, 158, 158, 158, 158, 159, 158,
+ 158, 158, 158, 160, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 162,
+ 158, 158, 158, 163, 159, 159, 164, 164, 158, 160,
+ 165, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 162, 158, 158, 158,
+ 158, 166, 158, 167, 158, 168, 169, 163, 159, 158,
+ 158, 158, 161, 161, 161, 161, 161, 161, 161, 161,
+ 170, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+
+ 161, 161, 161, 161, 161, 161, 161, 158, 158, 158,
+ 166, 158, 167, 168, 169, 159, 158, 161, 161, 161,
+ 161, 161, 161, 161, 161, 170, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 159, 158, 161, 161, 161, 161, 161, 158,
+ 161, 161, 161, 161, 161, 161, 161, 0, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158
} ;
-static const flex_int16_t yy_nxt[352] =
+static const flex_int16_t yy_nxt[423] =
{ 0,
- 4, 5, 6, 7, 8, 4, 9, 10, 10, 11,
- 12, 4, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 18, 18, 18, 22, 18, 23, 24, 18, 25,
- 26, 18, 18, 27, 18, 18, 28, 18, 29, 31,
- 31, 31, 32, 31, 31, 31, 31, 31, 31, 34,
- 37, 37, 37, 37, 35, 37, 37, 37, 40, 37,
- 37, 37, 37, 37, 43, 62, 37, 76, 37, 39,
- 61, 37, 41, 54, 46, 44, 37, 49, 42, 45,
- 47, 48, 50, 37, 55, 149, 51, 56, 53, 37,
- 59, 78, 74, 52, 37, 57, 37, 37, 60, 31,
-
- 31, 31, 37, 77, 58, 63, 37, 81, 64, 65,
- 66, 67, 68, 69, 79, 37, 70, 83, 80, 37,
- 71, 37, 72, 37, 82, 37, 37, 37, 86, 37,
- 37, 37, 37, 84, 89, 37, 37, 93, 91, 37,
- 94, 37, 37, 88, 85, 37, 87, 92, 37, 149,
- 95, 90, 145, 97, 96, 98, 100, 100, 100, 99,
- 101, 101, 101, 102, 102, 102, 104, 104, 104, 108,
- 37, 37, 113, 37, 112, 37, 37, 37, 37, 37,
- 114, 37, 115, 37, 117, 110, 37, 37, 111, 37,
- 120, 37, 37, 37, 37, 37, 37, 116, 123, 37,
-
- 37, 133, 119, 126, 37, 122, 121, 132, 149, 38,
- 37, 37, 124, 129, 125, 128, 127, 131, 37, 37,
- 130, 100, 100, 100, 101, 101, 101, 102, 102, 102,
- 104, 104, 104, 37, 149, 37, 134, 136, 37, 141,
- 137, 37, 38, 37, 138, 37, 37, 37, 37, 37,
- 37, 37, 143, 37, 139, 140, 142, 37, 144, 148,
- 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 146, 37, 37, 147, 33, 33, 36, 37, 36, 36,
- 36, 38, 37, 38, 73, 37, 73, 73, 73, 37,
- 135, 37, 103, 37, 103, 105, 109, 105, 106, 37,
-
- 106, 107, 75, 107, 118, 149, 118, 30, 37, 30,
- 149, 3, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
- 149
+ 4, 5, 6, 7, 8, 4, 9, 10, 11, 12,
+ 10, 13, 14, 4, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 20, 20, 20, 24, 20, 25, 26,
+ 20, 27, 28, 20, 20, 29, 20, 20, 30, 20,
+ 20, 31, 33, 33, 33, 33, 33, 34, 33, 33,
+ 33, 33, 33, 41, 41, 41, 36, 33, 37, 33,
+ 33, 33, 33, 33, 38, 33, 33, 33, 33, 33,
+ 33, 33, 41, 41, 43, 41, 41, 39, 52, 41,
+ 41, 44, 46, 41, 41, 41, 47, 41, 41, 41,
+ 41, 84, 41, 41, 66, 45, 50, 48, 58, 64,
+
+ 54, 49, 51, 158, 55, 53, 60, 65, 57, 59,
+ 41, 56, 79, 41, 61, 41, 62, 33, 33, 33,
+ 33, 33, 41, 63, 68, 83, 80, 69, 70, 71,
+ 72, 73, 74, 81, 41, 75, 87, 86, 41, 76,
+ 41, 77, 80, 80, 85, 41, 88, 41, 41, 81,
+ 81, 89, 41, 41, 41, 41, 41, 93, 41, 41,
+ 41, 90, 41, 96, 41, 100, 41, 41, 98, 101,
+ 41, 41, 41, 102, 92, 94, 95, 41, 91, 99,
+ 97, 125, 41, 41, 103, 41, 105, 107, 104, 118,
+ 158, 106, 108, 108, 108, 108, 108, 109, 109, 109,
+
+ 109, 109, 110, 110, 110, 110, 110, 112, 112, 112,
+ 112, 112, 116, 41, 120, 41, 41, 41, 41, 42,
+ 42, 41, 41, 41, 41, 122, 41, 123, 41, 41,
+ 41, 41, 119, 128, 41, 41, 41, 131, 41, 134,
+ 41, 121, 124, 127, 41, 158, 129, 138, 41, 41,
+ 140, 130, 150, 132, 133, 41, 154, 136, 137, 158,
+ 41, 141, 135, 41, 41, 139, 142, 142, 108, 108,
+ 108, 108, 108, 109, 109, 109, 109, 109, 110, 110,
+ 110, 110, 110, 112, 112, 112, 112, 112, 145, 143,
+ 41, 41, 41, 41, 41, 41, 41, 42, 42, 41,
+
+ 41, 41, 41, 41, 41, 41, 41, 41, 152, 41,
+ 41, 41, 41, 151, 146, 148, 149, 153, 147, 157,
+ 41, 41, 41, 155, 41, 41, 41, 144, 156, 35,
+ 35, 35, 40, 41, 40, 40, 40, 40, 40, 42,
+ 117, 42, 42, 67, 67, 78, 41, 78, 78, 78,
+ 78, 78, 33, 82, 33, 41, 158, 41, 41, 111,
+ 32, 111, 111, 113, 41, 113, 113, 114, 32, 114,
+ 114, 115, 158, 115, 115, 126, 158, 126, 126, 3,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158
} ;
-static const flex_int16_t yy_chk[352] =
+static const flex_int16_t yy_chk[423] =
{ 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, 8,
- 8, 8, 9, 10, 10, 10, 11, 11, 11, 9,
- 13, 14, 15, 16, 11, 17, 19, 21, 14, 39,
- 20, 23, 41, 27, 16, 153, 24, 39, 148, 13,
- 27, 22, 14, 24, 19, 17, 25, 21, 15, 17,
- 19, 20, 22, 26, 24, 34, 22, 25, 23, 42,
- 26, 41, 34, 22, 40, 25, 46, 44, 26, 31,
-
- 31, 31, 47, 40, 25, 29, 43, 44, 29, 29,
- 29, 29, 29, 29, 42, 45, 29, 46, 43, 48,
- 29, 49, 29, 50, 45, 51, 52, 53, 49, 54,
- 55, 56, 58, 47, 51, 59, 60, 55, 53, 57,
- 56, 61, 140, 50, 48, 78, 49, 54, 79, 74,
- 57, 52, 140, 59, 58, 60, 63, 63, 63, 61,
- 64, 64, 64, 66, 66, 66, 68, 68, 68, 74,
- 76, 77, 79, 80, 78, 82, 83, 84, 85, 88,
- 80, 86, 82, 87, 83, 76, 93, 89, 77, 90,
- 86, 91, 92, 95, 94, 96, 98, 82, 89, 99,
-
- 97, 99, 85, 92, 146, 88, 87, 98, 108, 84,
- 118, 114, 90, 95, 91, 94, 93, 97, 115, 120,
- 96, 100, 100, 100, 101, 101, 101, 102, 102, 102,
- 104, 104, 104, 121, 134, 128, 108, 114, 136, 134,
- 115, 137, 118, 138, 120, 142, 144, 145, 147, 143,
- 139, 133, 137, 132, 121, 128, 136, 131, 138, 147,
- 130, 129, 127, 126, 125, 124, 123, 122, 119, 117,
- 142, 116, 113, 144, 150, 150, 151, 112, 151, 151,
- 151, 152, 111, 152, 154, 110, 154, 154, 154, 155,
- 109, 155, 156, 81, 156, 157, 75, 157, 158, 38,
-
- 158, 159, 35, 159, 160, 33, 160, 30, 18, 5,
- 3, 149, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
- 149
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 8, 8, 8, 8, 8, 9, 10, 10,
+ 10, 10, 10, 15, 17, 22, 9, 11, 11, 11,
+ 11, 11, 12, 12, 12, 12, 12, 13, 13, 13,
+ 13, 13, 16, 18, 15, 19, 21, 13, 22, 25,
+ 44, 16, 17, 23, 157, 29, 18, 24, 155, 26,
+ 28, 44, 154, 27, 29, 16, 21, 19, 26, 28,
+
+ 24, 19, 21, 36, 24, 23, 27, 28, 25, 26,
+ 46, 24, 36, 45, 27, 43, 27, 33, 33, 33,
+ 33, 33, 47, 27, 31, 43, 37, 31, 31, 31,
+ 31, 31, 31, 38, 48, 31, 47, 46, 50, 31,
+ 49, 31, 37, 37, 45, 51, 48, 52, 53, 38,
+ 38, 49, 55, 56, 54, 57, 59, 53, 60, 58,
+ 61, 50, 62, 55, 63, 59, 64, 66, 57, 60,
+ 65, 90, 83, 61, 52, 53, 54, 152, 51, 58,
+ 56, 90, 148, 85, 62, 91, 64, 66, 63, 83,
+ 79, 65, 68, 68, 68, 68, 68, 69, 69, 69,
+
+ 69, 69, 71, 71, 71, 71, 71, 73, 73, 73,
+ 73, 73, 79, 84, 85, 86, 87, 92, 89, 91,
+ 91, 94, 93, 95, 96, 87, 99, 89, 97, 98,
+ 100, 105, 84, 93, 101, 103, 102, 96, 104, 99,
+ 142, 86, 89, 92, 149, 143, 94, 103, 106, 141,
+ 105, 95, 143, 97, 98, 140, 149, 101, 102, 116,
+ 122, 106, 100, 126, 107, 104, 107, 107, 108, 108,
+ 108, 108, 108, 109, 109, 109, 109, 109, 110, 110,
+ 110, 110, 110, 112, 112, 112, 112, 112, 122, 116,
+ 123, 128, 129, 145, 136, 146, 151, 126, 126, 153,
+
+ 147, 139, 138, 137, 135, 134, 156, 133, 146, 132,
+ 131, 130, 127, 145, 123, 129, 136, 147, 128, 156,
+ 125, 124, 121, 151, 120, 119, 118, 117, 153, 159,
+ 159, 159, 160, 88, 160, 160, 160, 160, 160, 161,
+ 82, 161, 161, 162, 162, 163, 42, 163, 163, 163,
+ 163, 163, 164, 39, 164, 165, 35, 165, 165, 166,
+ 32, 166, 166, 167, 20, 167, 167, 168, 5, 168,
+ 168, 169, 3, 169, 169, 170, 0, 170, 170, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158
} ;
/* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[49] =
+static const flex_int32_t yy_rule_can_match_eol[52] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, };
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, };
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
@@ -881,8 +901,8 @@ char *yytext;
#include "hypno/grammar.h"
#include "hypno/tokens_mis.h"
-#line 884 "engines/hypno/lexer_mis.cpp"
-#line 885 "engines/hypno/lexer_mis.cpp"
+#line 904 "engines/hypno/lexer_mis.cpp"
+#line 905 "engines/hypno/lexer_mis.cpp"
#define INITIAL 0
@@ -1099,7 +1119,7 @@ YY_DECL
{
#line 41 "engines/hypno/lexer_mis.l"
-#line 1102 "engines/hypno/lexer_mis.cpp"
+#line 1122 "engines/hypno/lexer_mis.cpp"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -1126,13 +1146,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 >= 150 )
+ if ( yy_current_state >= 159 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_current_state != 149 );
+ while ( yy_current_state != 158 );
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
@@ -1245,165 +1265,180 @@ return PLAYTOK;
case 17:
YY_RULE_SETUP
#line 58 "engines/hypno/lexer_mis.l"
-return TALKTOK;
+return SONDTOK;
YY_BREAK
case 18:
YY_RULE_SETUP
#line 59 "engines/hypno/lexer_mis.l"
-return INACTOK;
+return TALKTOK;
YY_BREAK
case 19:
YY_RULE_SETUP
#line 60 "engines/hypno/lexer_mis.l"
-return FDTOK;
+return INACTOK;
YY_BREAK
case 20:
YY_RULE_SETUP
#line 61 "engines/hypno/lexer_mis.l"
-return BOXXTOK;
+return FDTOK;
YY_BREAK
case 21:
YY_RULE_SETUP
#line 62 "engines/hypno/lexer_mis.l"
-return MPTRTOK;
+return BOXXTOK;
YY_BREAK
case 22:
YY_RULE_SETUP
#line 63 "engines/hypno/lexer_mis.l"
-return ESCAPETOK;
+return MPTRTOK;
YY_BREAK
case 23:
YY_RULE_SETUP
#line 64 "engines/hypno/lexer_mis.l"
-return SECONDTOK;
+return ESCAPETOK;
YY_BREAK
case 24:
YY_RULE_SETUP
#line 65 "engines/hypno/lexer_mis.l"
-return INTROTOK;
+return SECONDTOK;
YY_BREAK
case 25:
YY_RULE_SETUP
#line 66 "engines/hypno/lexer_mis.l"
-return INTRTOK;
+return INTROTOK;
YY_BREAK
case 26:
YY_RULE_SETUP
#line 67 "engines/hypno/lexer_mis.l"
-return SWPTTOK;
+return INTRTOK;
YY_BREAK
case 27:
YY_RULE_SETUP
#line 68 "engines/hypno/lexer_mis.l"
-return DEFAULTTOK;
+return SWPTTOK;
YY_BREAK
case 28:
YY_RULE_SETUP
#line 69 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return WALNTOK;
+return DEFAULTTOK;
YY_BREAK
case 29:
YY_RULE_SETUP
#line 70 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PS;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return WALNTOK;
YY_BREAK
case 30:
YY_RULE_SETUP
#line 71 "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 31:
YY_RULE_SETUP
#line 72 "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 32:
YY_RULE_SETUP
#line 73 "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 33:
YY_RULE_SETUP
#line 74 "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 34:
YY_RULE_SETUP
#line 75 "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 35:
YY_RULE_SETUP
#line 76 "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 36:
YY_RULE_SETUP
#line 77 "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 37:
YY_RULE_SETUP
#line 78 "engines/hypno/lexer_mis.l"
-return PE;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PF;
YY_BREAK
case 38:
YY_RULE_SETUP
#line 79 "engines/hypno/lexer_mis.l"
-return PL;
+return PE;
YY_BREAK
case 39:
YY_RULE_SETUP
#line 80 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return GSSWITCH;
+return PL;
YY_BREAK
case 40:
YY_RULE_SETUP
#line 81 "engines/hypno/lexer_mis.l"
-return BBOXTOK;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return ENCTOK;
YY_BREAK
case 41:
YY_RULE_SETUP
#line 82 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return FLAG;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return ENCTOK;
YY_BREAK
case 42:
YY_RULE_SETUP
#line 83 "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 GSSWITCH;
YY_BREAK
case 43:
YY_RULE_SETUP
#line 84 "engines/hypno/lexer_mis.l"
-HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return FILENAME;
+return BBOXTOK;
YY_BREAK
case 44:
YY_RULE_SETUP
#line 85 "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 FLAG;
YY_BREAK
case 45:
-/* rule 45 can match eol */
YY_RULE_SETUP
#line 86 "engines/hypno/lexer_mis.l"
-return RETTOK;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return NAME;
YY_BREAK
case 46:
YY_RULE_SETUP
#line 87 "engines/hypno/lexer_mis.l"
-/* ignore whitespace */;
+HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return FILENAME;
YY_BREAK
case 47:
YY_RULE_SETUP
#line 88 "engines/hypno/lexer_mis.l"
-debugC(1, Hypno::kHypnoDebugParser, "<no match: %c>", *yytext); return *yytext;
+HYPNO_MIS_lval.i = atoi(HYPNO_MIS_text); return NUM;
YY_BREAK
case 48:
+/* rule 48 can match eol */
YY_RULE_SETUP
#line 89 "engines/hypno/lexer_mis.l"
+return RETTOK;
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 90 "engines/hypno/lexer_mis.l"
+/* ignore whitespace */;
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 91 "engines/hypno/lexer_mis.l"
+debugC(1, Hypno::kHypnoDebugParser, "<no match: %c>", *yytext); return *yytext;
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 92 "engines/hypno/lexer_mis.l"
ECHO;
YY_BREAK
-#line 1406 "engines/hypno/lexer_mis.cpp"
+#line 1441 "engines/hypno/lexer_mis.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -1701,7 +1736,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 >= 150 )
+ if ( yy_current_state >= 159 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1729,11 +1764,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 >= 150 )
+ if ( yy_current_state >= 159 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 149);
+ yy_is_jam = (yy_current_state == 158);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -2380,7 +2415,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 89 "engines/hypno/lexer_mis.l"
+#line 92 "engines/hypno/lexer_mis.l"
namespace Hypno {
diff --git a/engines/hypno/lexer_mis.l b/engines/hypno/lexer_mis.l
index 8e4d016d6ed..9bfcd028764 100644
--- a/engines/hypno/lexer_mis.l
+++ b/engines/hypno/lexer_mis.l
@@ -55,6 +55,7 @@ OVER return OVERTOK;
SMEN return SMENTOK;
ESCP return ESCPTOK;
PLAY return PLAYTOK;
+SOND return SONDTOK;
TALK return TALKTOK;
INACTIVE return INACTOK;
4DBOX return FDTOK;
@@ -77,6 +78,8 @@ WAL[0-1] HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return WALNTOK;
\|F[0-9]+ HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PF;
\|E return PE;
\|L return PL;
+22[k|K] HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return ENCTOK;
+11[k|K] HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return ENCTOK;
GS_[A-Z_0-9]+ HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return GSSWITCH;
\/BBOX\= return BBOXTOK;
\/[A-Za-z_0-9]* HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return FLAG;
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index dd519ebf1a6..81a74b2d02b 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -80,6 +80,17 @@ void HypnoEngine::loadSceneLevel(const Common::String ¤t, const Common::St
free(buf);
}
+void HypnoEngine::loadSceneLevel(const char *buf, const Common::String &name, const Common::String &next, const Common::String &prefix) {
+ debugC(1, kHypnoDebugParser, "Parsing %s", name.c_str());
+ debugC(1, kHypnoDebugParser, "%s", buf);
+ parse_mis(buf);
+ Scene *level = new Scene();
+ level->prefix = prefix;
+ level->levelIfWin = next;
+ level->hots = *g_parsedHots;
+ _levels[name] = level;
+}
+
void HypnoEngine::resetSceneState() {
uint32 i = 0;
while (sceneVariables[i]) {
diff --git a/engines/hypno/tokens_mis.h b/engines/hypno/tokens_mis.h
index bf33c2cc3ea..40885bba795 100644
--- a/engines/hypno/tokens_mis.h
+++ b/engines/hypno/tokens_mis.h
@@ -69,47 +69,49 @@ extern int HYPNO_MIS_debug;
GSSWITCH = 262, /* GSSWITCH */
COMMAND = 263, /* COMMAND */
WALNTOK = 264, /* WALNTOK */
- NUM = 265, /* NUM */
- HOTSTOK = 266, /* HOTSTOK */
- CUTSTOK = 267, /* CUTSTOK */
- BACKTOK = 268, /* BACKTOK */
- INTRTOK = 269, /* INTRTOK */
- RETTOK = 270, /* RETTOK */
- TIMETOK = 271, /* TIMETOK */
- PALETOK = 272, /* PALETOK */
- BBOXTOK = 273, /* BBOXTOK */
- OVERTOK = 274, /* OVERTOK */
- MICETOK = 275, /* MICETOK */
- PLAYTOK = 276, /* PLAYTOK */
- ENDTOK = 277, /* ENDTOK */
- MENUTOK = 278, /* MENUTOK */
- SMENTOK = 279, /* SMENTOK */
- ESCPTOK = 280, /* ESCPTOK */
- NRTOK = 281, /* NRTOK */
- AMBITOK = 282, /* AMBITOK */
- SWPTTOK = 283, /* SWPTTOK */
- MPTRTOK = 284, /* MPTRTOK */
- GLOBTOK = 285, /* GLOBTOK */
- TONTOK = 286, /* TONTOK */
- TOFFTOK = 287, /* TOFFTOK */
- TALKTOK = 288, /* TALKTOK */
- INACTOK = 289, /* INACTOK */
- FDTOK = 290, /* FDTOK */
- BOXXTOK = 291, /* BOXXTOK */
- ESCAPETOK = 292, /* ESCAPETOK */
- SECONDTOK = 293, /* SECONDTOK */
- INTROTOK = 294, /* INTROTOK */
- DEFAULTTOK = 295, /* DEFAULTTOK */
- PG = 296, /* PG */
- PA = 297, /* PA */
- PD = 298, /* PD */
- PH = 299, /* PH */
- PF = 300, /* PF */
- PE = 301, /* PE */
- PP = 302, /* PP */
- PI = 303, /* PI */
- PL = 304, /* PL */
- PS = 305 /* PS */
+ ENCTOK = 265, /* ENCTOK */
+ NUM = 266, /* NUM */
+ HOTSTOK = 267, /* HOTSTOK */
+ CUTSTOK = 268, /* CUTSTOK */
+ BACKTOK = 269, /* BACKTOK */
+ INTRTOK = 270, /* INTRTOK */
+ RETTOK = 271, /* RETTOK */
+ TIMETOK = 272, /* TIMETOK */
+ PALETOK = 273, /* PALETOK */
+ BBOXTOK = 274, /* BBOXTOK */
+ OVERTOK = 275, /* OVERTOK */
+ MICETOK = 276, /* MICETOK */
+ SONDTOK = 277, /* SONDTOK */
+ PLAYTOK = 278, /* PLAYTOK */
+ ENDTOK = 279, /* ENDTOK */
+ MENUTOK = 280, /* MENUTOK */
+ SMENTOK = 281, /* SMENTOK */
+ ESCPTOK = 282, /* ESCPTOK */
+ NRTOK = 283, /* NRTOK */
+ AMBITOK = 284, /* AMBITOK */
+ SWPTTOK = 285, /* SWPTTOK */
+ MPTRTOK = 286, /* MPTRTOK */
+ GLOBTOK = 287, /* GLOBTOK */
+ TONTOK = 288, /* TONTOK */
+ TOFFTOK = 289, /* TOFFTOK */
+ TALKTOK = 290, /* TALKTOK */
+ INACTOK = 291, /* INACTOK */
+ FDTOK = 292, /* FDTOK */
+ BOXXTOK = 293, /* BOXXTOK */
+ ESCAPETOK = 294, /* ESCAPETOK */
+ SECONDTOK = 295, /* SECONDTOK */
+ INTROTOK = 296, /* INTROTOK */
+ DEFAULTTOK = 297, /* DEFAULTTOK */
+ PG = 298, /* PG */
+ PA = 299, /* PA */
+ PD = 300, /* PD */
+ PH = 301, /* PH */
+ PF = 302, /* PF */
+ PE = 303, /* PE */
+ PP = 304, /* PP */
+ PI = 305, /* PI */
+ PL = 306, /* PL */
+ PS = 307 /* PS */
};
typedef enum HYPNO_MIS_tokentype HYPNO_MIS_token_kind_t;
#endif
@@ -118,12 +120,12 @@ extern int HYPNO_MIS_debug;
#if ! defined HYPNO_MIS_STYPE && ! defined HYPNO_MIS_STYPE_IS_DECLARED
union HYPNO_MIS_STYPE
{
-#line 56 "engines/hypno/grammar_mis.y"
+#line 55 "engines/hypno/grammar_mis.y"
char *s; /* string value */
int i; /* integer value */
-#line 127 "engines/hypno/tokens_mis.h"
+#line 129 "engines/hypno/tokens_mis.h"
};
typedef union HYPNO_MIS_STYPE HYPNO_MIS_STYPE;
Commit: 56f69e40c5e636bc9ac416dc314b7711e38e35ba
https://github.com/scummvm/scummvm/commit/56f69e40c5e636bc9ac416dc314b7711e38e35ba
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-05-07T08:26:07+02:00
Commit Message:
HYPNO: basic ammo handling in boyz
Changed paths:
engines/hypno/boyz/arcade.cpp
engines/hypno/boyz/boyz.cpp
engines/hypno/hypno.h
diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 39891aa2ab0..440873efe4a 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -37,9 +37,9 @@ void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
Common::Rect portraitBox(0, 40, 57, 94);
for (int i = 0; i < int(_playerFrames.size()); i++) {
- _healthBar[i] = _playerFrames[i]->getSubArea(healthBarBox);
- _ammoBar[i] = _playerFrames[i]->getSubArea(ammoBarBox);
- _portrait[i] = _playerFrames[i]->getSubArea(portraitBox);
+ _healthBar[i+1] = _playerFrames[i]->getSubArea(healthBarBox);
+ _ammoBar[i+1] = _playerFrames[i]->getSubArea(ammoBarBox);
+ _portrait[i+1] = _playerFrames[i]->getSubArea(portraitBox);
}
_playerFrameSep = _playerFrames.size();
@@ -51,6 +51,11 @@ void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
}
_currentScript = arc->script;
+ // Reload all weapons
+ for (Script::iterator it = _currentScript.begin(); it != _currentScript.end(); ++it) {
+ _ammoTeam[it->actor] = _weaponMaxAmmo[it->cursor];
+ }
+
updateFromScript();
}
@@ -66,9 +71,9 @@ void BoyzEngine::updateFromScript() {
ScriptInfo si = *_currentScript.begin();
//debug("%d %d %d", si.time, _background->decoder->getCurFrame(), si.actor);
if (!_background || int(si.time) <= _background->decoder->getCurFrame()) {
- _currentActor = si.actor - 1;
+ _currentActor = si.actor;
_currentMode = si.mode;
- _currentWeapon = si.cursor - 1;
+ _currentWeapon = si.cursor;
_currentScript.pop_front();
if (_currentMode == NonInteractive)
@@ -108,10 +113,17 @@ void BoyzEngine::drawHealth() {
void BoyzEngine::drawAmmo() {
updateFromScript();
- Common::Rect ammoBarBox(320 - _ammoBar[_currentActor].w, 0, 320, _ammoBar[_currentActor].h/2);
+ float w = _ammoBar[_currentWeapon].w / _weaponMaxAmmo[_currentWeapon];
+
+ Common::Rect ammoBarBox(320 - int(_ammoTeam[_currentActor] * w), 0, 320, _ammoBar[_currentActor].h/2);
uint32 c = kHypnoColorGreen; // green
_compositeSurface->fillRect(ammoBarBox, c);
- drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentActor].w, 0, true);
+
+ drawImage(_ammoBar[_currentActor], 320 - _ammoBar[_currentWeapon].w, 0, true);
+ for (int i = 1; i < _weaponMaxAmmo[_currentWeapon]; i++) {
+ int x = 320 - _ammoBar[_currentWeapon].w + int (i * w);
+ _compositeSurface->drawLine(x, 2, x, 5, 0);
+ }
}
void BoyzEngine::hitPlayer() {
@@ -188,6 +200,10 @@ void BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc) {
return;
}
+ if (_ammoTeam[_currentActor] == 0)
+ return; // TODO: out of ammo sound is missing
+
+ _ammoTeam[_currentActor]--;
playSound(_soundPath + _weaponShootSound[_currentWeapon], 1);
incShotsFired();
int i = detectTarget(mousePos);
diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp
index 19b0bcf4037..bacae6a315e 100644
--- a/engines/hypno/boyz/boyz.cpp
+++ b/engines/hypno/boyz/boyz.cpp
@@ -34,6 +34,11 @@ BoyzEngine::BoyzEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine
_currentActor = 0;
_currentMode = NonInteractive;
_crosshairsPalette = nullptr;
+
+ for (int i = 0; i < 6; i++) {
+ _ammoTeam[i] = 0;
+ _weaponMaxAmmo[i] = 0;
+ }
}
static const char *selectBoyz = "\
@@ -89,12 +94,13 @@ void BoyzEngine::loadAssets() {
loadLib("sound/", "misc/sound.lib", true);
- _weaponShootSound[0] = "pstlfire.raw";
- _weaponShootSound[1] = "ak47fire.raw";
- _weaponShootSound[2] = "dblfire.raw";
- _weaponShootSound[3] = "m16fire.raw";
- _weaponShootSound[4] = "shotfire.raw";
- _weaponShootSound[5] = "glm60fr.raw";
+ _weaponShootSound[0] = "";
+ _weaponShootSound[1] = "pstlfire.raw";
+ _weaponShootSound[2] = "ak47fire.raw";
+ _weaponShootSound[3] = "dblfire.raw";
+ _weaponShootSound[4] = "m16fire.raw";
+ _weaponShootSound[5] = "shotfire.raw";
+ _weaponShootSound[6] = "glm60fr.raw";
Graphics::Surface *targets = decodeFrame("preload/targets.smk", 0, &_crosshairsPalette);
@@ -102,54 +108,54 @@ void BoyzEngine::loadAssets() {
// Pistol?
cursorBox = Common::Rect(62, 6, 83, 26);
- _crosshairsInactive[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
- _crosshairsInactive[0].copyRectToSurface(*targets, 0, 0, cursorBox);
+ _crosshairsInactive[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsInactive[1].copyRectToSurface(*targets, 0, 0, cursorBox);
cursorBox = Common::Rect(62, 38, 83, 58);
- _crosshairsActive[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
- _crosshairsActive[0].copyRectToSurface(*targets, 0, 0, cursorBox);
+ _crosshairsActive[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsActive[1].copyRectToSurface(*targets, 0, 0, cursorBox);
cursorBox = Common::Rect(62, 70, 83, 90);
- _crosshairsTarget[0].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
- _crosshairsTarget[0].copyRectToSurface(*targets, 0, 0, cursorBox);
+ _crosshairsTarget[1].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsTarget[1].copyRectToSurface(*targets, 0, 0, cursorBox);
cursorBox = Common::Rect(16, 8, 32, 24);
- _crosshairsInactive[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
- _crosshairsInactive[2].copyRectToSurface(*targets, 0, 0, cursorBox);
-
- cursorBox = Common::Rect(16, 40, 32, 56);
- _crosshairsActive[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
- _crosshairsActive[2].copyRectToSurface(*targets, 0, 0, cursorBox);
-
- cursorBox = Common::Rect(16, 72, 32, 88);
- _crosshairsTarget[2].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
- _crosshairsTarget[2].copyRectToSurface(*targets, 0, 0, cursorBox);
-
- cursorBox = Common::Rect(163, 11, 173, 21);
_crosshairsInactive[3].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
_crosshairsInactive[3].copyRectToSurface(*targets, 0, 0, cursorBox);
- cursorBox = Common::Rect(163, 43, 173, 53);
+ cursorBox = Common::Rect(16, 40, 32, 56);
_crosshairsActive[3].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
_crosshairsActive[3].copyRectToSurface(*targets, 0, 0, cursorBox);
- cursorBox = Common::Rect(163, 75, 173, 85);
+ cursorBox = Common::Rect(16, 72, 32, 88);
_crosshairsTarget[3].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
_crosshairsTarget[3].copyRectToSurface(*targets, 0, 0, cursorBox);
- // Shotgun
- cursorBox = Common::Rect(104, 7, 136, 25);
+ cursorBox = Common::Rect(163, 11, 173, 21);
_crosshairsInactive[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
_crosshairsInactive[4].copyRectToSurface(*targets, 0, 0, cursorBox);
- cursorBox = Common::Rect(104, 39, 136, 57);
+ cursorBox = Common::Rect(163, 43, 173, 53);
_crosshairsActive[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
_crosshairsActive[4].copyRectToSurface(*targets, 0, 0, cursorBox);
- cursorBox = Common::Rect(104, 71, 136, 83);
+ cursorBox = Common::Rect(163, 75, 173, 85);
_crosshairsTarget[4].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
_crosshairsTarget[4].copyRectToSurface(*targets, 0, 0, cursorBox);
+ // Shotgun
+ cursorBox = Common::Rect(104, 7, 136, 25);
+ _crosshairsInactive[5].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsInactive[5].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+ cursorBox = Common::Rect(104, 39, 136, 57);
+ _crosshairsActive[5].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsActive[5].copyRectToSurface(*targets, 0, 0, cursorBox);
+
+ cursorBox = Common::Rect(104, 71, 136, 83);
+ _crosshairsTarget[5].create(cursorBox.width(), cursorBox.height(), _pixelFormat);
+ _crosshairsTarget[5].copyRectToSurface(*targets, 0, 0, cursorBox);
+
// Double small
/*
cursorBox = Common::Rect(203, 11, 229, 21);
@@ -193,13 +199,21 @@ void BoyzEngine::loadAssets() {
_crosshairsTarget[6].copyRectToSurface(*targets, 0, 0, cursorBox);
*/
+ _weaponMaxAmmo[0] = 0;
+ _weaponMaxAmmo[1] = 10;
+ _weaponMaxAmmo[2] = 2; // large shotgun
+ _weaponMaxAmmo[3] = 8;
+ _weaponMaxAmmo[4] = 0;
+ _weaponMaxAmmo[5] = 6; // small shotgun
+ _weaponMaxAmmo[6] = 0;
+
targets->free();
delete targets;
loadLib("", "misc/fonts.lib", true);
loadFonts();
- _nextLevel = "<start>";
+ _nextLevel = "c11.mi_";
}
void BoyzEngine::loadFonts() {
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 972aed5660d..8e731b412e9 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -560,11 +560,13 @@ public:
private:
void runMainMenu(Code *code);
- Graphics::Surface _healthBar[6];
- Graphics::Surface _ammoBar[6];
- Graphics::Surface _portrait[6];
+ int _ammoTeam[6];
+ Graphics::Surface _healthBar[7];
+ Graphics::Surface _ammoBar[7];
+ Graphics::Surface _portrait[7];
- Filename _weaponShootSound[6];
+ Filename _weaponShootSound[7];
+ int _weaponMaxAmmo[7];
byte *_crosshairsPalette;
Graphics::Surface _crosshairsInactive[8];
More information about the Scummvm-git-logs
mailing list