HYPNO: correct handling of WALL0/WALL1 commands

This commit is contained in:
neuromancer 2021-11-06 20:07:26 +01:00
parent db08a11883
commit 29a6d38179
11 changed files with 191 additions and 179 deletions

View File

@ -93,8 +93,10 @@ void HypnoEngine::runMice(Mice *a) {
changeCursor(a->path, a->index); changeCursor(a->path, a->index);
} }
void HypnoEngine::runEscape(Escape *a) { void HypnoEngine::runEscape() {
_nextHotsToRemove = stack.back(); _nextHotsToRemove = stack.back();
_nextSequentialVideoToPlay = _escapeSequentialVideoToPlay;
_escapeSequentialVideoToPlay.clear();
} }
void HypnoEngine::runCutscene(Cutscene *a) { void HypnoEngine::runCutscene(Cutscene *a) {
@ -149,11 +151,13 @@ void HypnoEngine::runAmbient(Ambient *a) {
void HypnoEngine::runWalN(WalN *a) { void HypnoEngine::runWalN(WalN *a) {
if (a->condition.size() > 0 && !_sceneState[a->condition]) if (a->condition.size() > 0 && !_sceneState[a->condition])
return; return;
if (a->flag == "/BITMAP")
loadImage(a->path, a->origin.x, a->origin.y, false); if (a->wn == "WAL0")
else {
_nextSequentialVideoToPlay.push_back(MVideo(a->path, a->origin, false, false, false)); _nextSequentialVideoToPlay.push_back(MVideo(a->path, a->origin, false, false, false));
} else if (a->wn == "WAL1")
_escapeSequentialVideoToPlay.push_back(MVideo(a->path, a->origin, false, false, false));
else
error("Invalid WALN command: %s", a->wn.c_str());
} }
void HypnoEngine::runQuit(Quit *a) { void HypnoEngine::runQuit(Quit *a) {
@ -165,10 +169,6 @@ void HypnoEngine::runChangeLevel(ChangeLevel *a) {
} }
void HypnoEngine::runTalk(Talk *a) { void HypnoEngine::runTalk(Talk *a) {
//_videosPlaying.clear();
//_nextParallelVideoToPlay.clear();
//_nextSequentialVideoToPlay.clear();
_conversation.push_back(a); _conversation.push_back(a);
_refreshConversation = true; _refreshConversation = true;
} }

View File

@ -215,13 +215,15 @@ public:
class WalN : public Action { class WalN : public Action {
public: public:
WalN(Filename path_, Common::Point origin_, Common::String condition_, Common::String flag_) { WalN(Common::String wn_, Filename path_, Common::Point origin_, Common::String condition_, Common::String flag_) {
wn = wn_;
type = WalNAction; type = WalNAction;
path = path_; path = path_;
origin = origin_; origin = origin_;
condition = condition_; condition = condition_;
flag = flag_; flag = flag_;
} }
Common::String wn;
Filename path; Filename path;
Common::Point origin; Common::Point origin;
Common::String condition; Common::String condition;
@ -257,6 +259,7 @@ public:
} }
TalkCommands commands; TalkCommands commands;
bool active; bool active;
bool escape;
Filename background; Filename background;
Common::Point backgroundPos; Common::Point backgroundPos;
Common::Rect rect; Common::Rect rect;

View File

@ -149,17 +149,17 @@ extern int HYPNO_MIS_debug;
COMMENT = 261, COMMENT = 261,
GSSWITCH = 262, GSSWITCH = 262,
COMMAND = 263, COMMAND = 263,
NUM = 264, WALNTOK = 264,
HOTSTOK = 265, NUM = 265,
CUTSTOK = 266, HOTSTOK = 266,
BACKTOK = 267, CUTSTOK = 267,
INTRTOK = 268, BACKTOK = 268,
RETTOK = 269, INTRTOK = 269,
TIMETOK = 270, RETTOK = 270,
PALETOK = 271, TIMETOK = 271,
BBOXTOK = 272, PALETOK = 272,
OVERTOK = 273, BBOXTOK = 273,
WALNTOK = 274, OVERTOK = 274,
MICETOK = 275, MICETOK = 275,
PLAYTOK = 276, PLAYTOK = 276,
ENDTOK = 277, ENDTOK = 277,
@ -461,7 +461,7 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */ /* YYFINAL -- State number of the termination state. */
#define YYFINAL 3 #define YYFINAL 3
/* YYLAST -- Last index in YYTABLE. */ /* YYLAST -- Last index in YYTABLE. */
#define YYLAST 112 #define YYLAST 114
/* YYNTOKENS -- Number of terminals. */ /* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 49 #define YYNTOKENS 49
@ -523,9 +523,9 @@ static const yytype_uint16 yyrline[] =
{ {
0, 74, 74, 77, 82, 83, 87, 99, 105, 120, 0, 74, 74, 77, 82, 83, 87, 99, 105, 120,
126, 127, 134, 141, 147, 153, 159, 166, 173, 180, 126, 127, 134, 141, 147, 153, 159, 166, 173, 180,
186, 192, 198, 204, 207, 213, 216, 217, 221, 222, 186, 192, 198, 204, 207, 214, 217, 218, 222, 223,
223, 227, 228, 229, 235, 236, 242, 248, 254, 261, 226, 230, 231, 232, 238, 239, 245, 251, 257, 264,
268, 274, 279, 280, 283, 284, 287, 288, 291, 292 271, 277, 282, 283, 286, 287, 290, 291, 294, 295
}; };
#endif #endif
@ -535,8 +535,8 @@ static const yytype_uint16 yyrline[] =
static const char *const yytname[] = static const char *const yytname[] =
{ {
"$end", "error", "$undefined", "NAME", "FILENAME", "FLAG", "COMMENT", "$end", "error", "$undefined", "NAME", "FILENAME", "FLAG", "COMMENT",
"GSSWITCH", "COMMAND", "NUM", "HOTSTOK", "CUTSTOK", "BACKTOK", "INTRTOK", "GSSWITCH", "COMMAND", "WALNTOK", "NUM", "HOTSTOK", "CUTSTOK", "BACKTOK",
"RETTOK", "TIMETOK", "PALETOK", "BBOXTOK", "OVERTOK", "WALNTOK", "INTRTOK", "RETTOK", "TIMETOK", "PALETOK", "BBOXTOK", "OVERTOK",
"MICETOK", "PLAYTOK", "ENDTOK", "MENUTOK", "SMENTOK", "ESCPTOK", "NRTOK", "MICETOK", "PLAYTOK", "ENDTOK", "MENUTOK", "SMENTOK", "ESCPTOK", "NRTOK",
"AMBITOK", "GLOBTOK", "TONTOK", "TOFFTOK", "TALKTOK", "INACTOK", "FDTOK", "AMBITOK", "GLOBTOK", "TONTOK", "TOFFTOK", "TALKTOK", "INACTOK", "FDTOK",
"BOXXTOK", "ESCAPETOK", "SECONDTOK", "INTROTOK", "DEFAULTTOK", "PG", "BOXXTOK", "ESCAPETOK", "SECONDTOK", "INTROTOK", "DEFAULTTOK", "PG",
@ -573,18 +573,18 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */ STATE-NUM. */
static const yytype_int8 yypact[] = static const yytype_int8 yypact[] =
{ {
-75, 5, 63, -75, -11, 8, 9, 10, -75, 11, -75, 4, 64, -75, 1, -6, 9, 10, 13, -75,
13, 14, 15, 18, 19, 12, 25, -75, -75, 23, 8, 15, 17, 19, 20, 11, 25, -75, -75, 23,
22, -75, -75, 63, 21, -75, 28, 29, -75, -75, 22, -75, -75, 64, 21, 28, -75, 29, 30, -75,
30, 31, 33, 34, -75, -75, 25, 35, 43, 24, -75, 31, 32, 34, -75, -75, 25, 36, 27, 24,
-75, 38, 39, 40, 41, 42, -75, 44, -75, 71, -75, 37, 38, 39, 40, 41, -75, 42, -75, 43,
-75, 27, 24, 24, 80, -75, 48, 88, 89, 24, -75, 70, 24, 24, 72, -75, 86, 89, 90, 24,
24, 24, 24, 24, -75, 86, 87, 24, 24, -75, 24, 24, 24, 24, -75, 87, 88, 24, 24, -75,
90, 26, -75, 92, 26, 26, 92, 91, -75, -75, 26, 91, 26, -75, 94, 26, 94, 92, -75, -75,
93, 94, 95, 96, -75, -75, -75, -75, -75, 97, 93, 95, 96, 97, -75, -75, -75, -75, -75, 98,
98, -75, -75, 99, -75, 92, -75, -75, 92, 92, 99, -75, -75, -75, 94, 100, 94, -75, -75, 94,
-75, 100, -75, 101, 102, 103, 24, 24, -75, 92, -75, 101, -75, 102, 103, 104, 24, 24, -75, -75,
-75, -75, 26, -75, -75, -75, -75, -75, -75, 92, 94, -75, 26, -75, -75, -75, -75, -75, -75, 94,
-75 -75
}; };
@ -593,31 +593,31 @@ static const yytype_int8 yypact[] =
means the default is an error. */ means the default is an error. */
static const yytype_uint8 yydefact[] = static const yytype_uint8 yydefact[] =
{ {
3, 0, 5, 1, 0, 0, 0, 0, 23, 0, 3, 0, 5, 1, 0, 0, 0, 0, 0, 23,
0, 0, 0, 0, 0, 0, 45, 8, 9, 0, 0, 0, 0, 0, 0, 0, 45, 8, 9, 0,
0, 24, 2, 5, 0, 18, 0, 0, 10, 16, 0, 24, 2, 5, 0, 0, 18, 0, 0, 10,
0, 0, 0, 0, 22, 44, 45, 0, 0, 43, 16, 0, 0, 0, 22, 44, 45, 0, 0, 43,
4, 0, 0, 0, 0, 0, 20, 0, 6, 0, 4, 0, 0, 0, 0, 0, 20, 0, 6, 0,
12, 0, 43, 43, 0, 29, 0, 0, 0, 43, 12, 0, 43, 43, 0, 29, 0, 0, 0, 43,
43, 43, 43, 43, 42, 0, 0, 43, 43, 21, 43, 43, 43, 43, 42, 0, 0, 43, 43, 21,
0, 49, 17, 47, 49, 49, 47, 0, 25, 26, 49, 0, 49, 17, 47, 49, 47, 0, 25, 26,
0, 0, 0, 0, 33, 36, 37, 34, 35, 0, 0, 0, 0, 0, 33, 36, 37, 34, 35, 0,
0, 41, 40, 0, 48, 47, 46, 15, 47, 47, 0, 41, 40, 48, 47, 0, 47, 46, 15, 47,
13, 0, 28, 0, 0, 0, 43, 43, 7, 47, 13, 0, 28, 0, 0, 0, 43, 43, 19, 7,
19, 14, 49, 30, 31, 32, 38, 39, 11, 47, 47, 14, 49, 30, 31, 32, 38, 39, 11, 47,
27 27
}; };
/* YYPGOTO[NTERM-NUM]. */ /* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] = static const yytype_int8 yypgoto[] =
{ {
-75, -75, -75, 75, -75, -75, -52, -4, -74, -71 -75, -75, -75, 12, -75, -75, -52, -4, -74, -69
}; };
/* YYDEFGOTO[NTERM-NUM]. */ /* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] = static const yytype_int8 yydefgoto[] =
{ {
-1, 1, 2, 22, 23, 39, 69, 36, 97, 95 -1, 1, 2, 22, 23, 39, 69, 36, 98, 94
}; };
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@ -625,52 +625,52 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */ number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] = static const yytype_uint8 yytable[] =
{ {
78, 79, 100, 98, 99, 3, 24, 84, 85, 86, 78, 79, 100, 96, 3, 24, 99, 84, 85, 86,
87, 88, 25, 26, 27, 91, 92, 29, 30, 31, 87, 88, 25, 26, 27, 91, 92, 28, 29, 30,
28, 109, 32, 33, 110, 111, 34, 37, 35, 38, 108, 31, 110, 32, 33, 111, 34, 37, 35, 38,
41, 77, 48, 94, 0, 118, 51, 42, 43, 44, 50, 41, 48, 93, 0, 40, 118, 51, 42, 43,
45, 119, 46, 47, 49, 120, 50, 70, 71, 72, 44, 45, 46, 119, 47, 120, 49, 70, 71, 72,
73, 74, 81, 75, 116, 117, 52, 53, 54, 55, 73, 74, 75, 76, 116, 117, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
66, 67, 68, 4, 5, 6, 7, 8, 9, 10, 66, 67, 68, 4, 77, 5, 6, 7, 8, 9,
76, 11, 12, 13, 14, 15, 16, 17, 18, 80, 10, 11, 80, 12, 13, 14, 15, 16, 17, 18,
19, 20, 82, 83, 21, 89, 90, 96, 40, 93, 81, 19, 20, 82, 83, 21, 0, 89, 90, 97,
101, 0, 102, 103, 104, 105, 106, 107, 108, 112, 0, 95, 101, 102, 0, 103, 104, 105, 106, 107,
113, 114, 115 109, 112, 113, 114, 115
}; };
static const yytype_int8 yycheck[] = static const yytype_int8 yycheck[] =
{ {
52, 53, 76, 74, 75, 0, 17, 59, 60, 61, 52, 53, 76, 72, 0, 4, 75, 59, 60, 61,
62, 63, 4, 4, 4, 67, 68, 4, 4, 4, 62, 63, 18, 4, 4, 67, 68, 4, 10, 4,
9, 95, 4, 4, 98, 99, 14, 4, 3, 7, 94, 4, 96, 4, 4, 99, 15, 4, 3, 7,
9, 4, 36, 7, -1, 109, 12, 9, 9, 9, 3, 10, 36, 7, -1, 23, 110, 13, 10, 10,
9, 112, 9, 9, 9, 119, 3, 9, 9, 9, 10, 10, 10, 112, 10, 119, 10, 10, 10, 10,
9, 9, 4, 9, 106, 107, 32, 33, 34, 35, 10, 10, 10, 10, 106, 107, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 10, 11, 12, 13, 14, 15, 16, 46, 47, 48, 9, 4, 11, 12, 13, 14, 15,
9, 18, 19, 20, 21, 22, 23, 24, 25, 9, 16, 17, 10, 19, 20, 21, 22, 23, 24, 25,
27, 28, 4, 4, 31, 9, 9, 5, 23, 9, 4, 27, 28, 4, 4, 31, -1, 10, 10, 5,
9, -1, 9, 9, 9, 9, 9, 9, 9, 9, -1, 10, 10, 10, -1, 10, 10, 10, 10, 10,
9, 9, 9 10, 10, 10, 10, 10
}; };
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */ symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] = static const yytype_uint8 yystos[] =
{ {
0, 50, 51, 0, 10, 11, 12, 13, 14, 15, 0, 50, 51, 0, 9, 11, 12, 13, 14, 15,
16, 18, 19, 20, 21, 22, 23, 24, 25, 27, 16, 17, 19, 20, 21, 22, 23, 24, 25, 27,
28, 31, 52, 53, 17, 4, 4, 4, 9, 4, 28, 31, 52, 53, 4, 18, 4, 4, 4, 10,
4, 4, 4, 4, 14, 3, 56, 4, 7, 54, 4, 4, 4, 4, 15, 3, 56, 4, 7, 54,
52, 9, 9, 9, 9, 9, 9, 9, 56, 9, 52, 10, 10, 10, 10, 10, 10, 10, 56, 10,
3, 12, 32, 33, 34, 35, 36, 37, 38, 39, 3, 13, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 55, 40, 41, 42, 43, 44, 45, 46, 47, 48, 55,
9, 9, 9, 9, 9, 9, 9, 4, 55, 55, 10, 10, 10, 10, 10, 10, 10, 4, 55, 55,
9, 4, 4, 4, 55, 55, 55, 55, 55, 9, 10, 4, 4, 4, 55, 55, 55, 55, 55, 10,
9, 55, 55, 9, 7, 58, 5, 57, 58, 58, 10, 55, 55, 7, 58, 10, 58, 5, 57, 58,
57, 9, 9, 9, 9, 9, 9, 9, 9, 57, 57, 10, 10, 10, 10, 10, 10, 10, 57, 10,
57, 57, 9, 9, 9, 9, 55, 55, 57, 58, 57, 57, 10, 10, 10, 10, 55, 55, 57, 58,
57 57
}; };
@ -1537,7 +1537,7 @@ yyreduce:
case 19: case 19:
#line 180 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #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)); 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(); Hotspots *cur = stack.back();
Hotspot *hot = &cur->back(); Hotspot *hot = &cur->back();
hot->actions.push_back(a); hot->actions.push_back(a);
@ -1589,119 +1589,122 @@ yyreduce:
{ {
assert(talk_action == nullptr); assert(talk_action == nullptr);
talk_action = new Talk(); talk_action = new Talk();
talk_action->escape = false;
talk_action->active = true; talk_action->active = true;
} }
#line 1595 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1596 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 25: case 25:
#line 213 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 214 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
talk_action->active = false; talk_action->active = false;
debugC(1, kHypnoDebugParser, "inactive"); } debugC(1, kHypnoDebugParser, "inactive"); }
#line 1603 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1604 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 26: case 26:
#line 216 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 217 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "inactive"); } { debugC(1, kHypnoDebugParser, "inactive"); }
#line 1609 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1610 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 27: case 27:
#line 217 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 218 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
talk_action->background = (yyvsp[-4].s); talk_action->background = (yyvsp[-4].s);
talk_action->backgroundPos = 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"); } debugC(1, kHypnoDebugParser, "BACK in TALK"); }
#line 1618 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1619 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 28: case 28:
#line 221 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 222 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "BOXX %d %d", (yyvsp[-1].i), (yyvsp[0].i)); } { debugC(1, kHypnoDebugParser, "BOXX %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
#line 1624 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1625 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 29: case 29:
#line 222 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 223 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "ESCAPE"); } {
#line 1630 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ talk_action->escape = true;
debugC(1, kHypnoDebugParser, "ESCAPE"); }
#line 1633 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 30: case 30:
#line 223 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 226 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
talk_action->second = (yyvsp[-2].s); talk_action->second = (yyvsp[-2].s);
talk_action->secondPos = Common::Point((yyvsp[-1].i), (yyvsp[0].i)); 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)); } 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 */ #line 1642 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 31: case 31:
#line 227 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 230 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ 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 1645 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1648 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 32: case 32:
#line 228 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 231 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "DEFAULT %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); } { debugC(1, kHypnoDebugParser, "DEFAULT %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i)); }
#line 1651 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1654 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 33: case 33:
#line 229 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 232 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
TalkCommand talk_cmd; TalkCommand talk_cmd;
talk_cmd.command = "G"; talk_cmd.command = "G";
talk_cmd.path = (yyvsp[-1].s)+2; 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)); } debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
#line 1662 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1665 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 34: case 34:
#line 235 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 238 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); } { debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
#line 1668 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1671 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 35: case 35:
#line 236 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 239 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
TalkCommand talk_cmd; TalkCommand talk_cmd;
talk_cmd.command = "F"; talk_cmd.command = "F";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1; 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)); } debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
#line 1679 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1682 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 36: case 36:
#line 242 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 245 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
TalkCommand talk_cmd; TalkCommand talk_cmd;
talk_cmd.command = "A"; talk_cmd.command = "A";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1; 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); } debugC(1, kHypnoDebugParser, "|A%d", talk_cmd.num); }
#line 1690 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1693 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 37: case 37:
#line 248 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 251 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
TalkCommand talk_cmd; TalkCommand talk_cmd;
talk_cmd.command = "D"; talk_cmd.command = "D";
talk_cmd.num = atoi((yyvsp[-1].s)+2)-1; 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)); } debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
#line 1701 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1704 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 38: case 38:
#line 254 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 257 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
TalkCommand talk_cmd; TalkCommand talk_cmd;
talk_cmd.command = "P"; talk_cmd.command = "P";
@ -1709,11 +1712,11 @@ yyreduce:
talk_cmd.position = Common::Point((yyvsp[-2].i), (yyvsp[-1].i)); 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)); } debugC(1, kHypnoDebugParser, "%s %d %d", (yyvsp[-3].s), (yyvsp[-2].i), (yyvsp[-1].i)); }
#line 1713 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1716 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 39: case 39:
#line 261 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 264 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
TalkCommand talk_cmd; TalkCommand talk_cmd;
talk_cmd.command = "I"; talk_cmd.command = "I";
@ -1721,74 +1724,74 @@ yyreduce:
talk_cmd.position = Common::Point((yyvsp[-2].i), (yyvsp[-1].i)); 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)); } debugC(1, kHypnoDebugParser, "%s %d %d", (yyvsp[-3].s), (yyvsp[-2].i), (yyvsp[-1].i)); }
#line 1725 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1728 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 40: case 40:
#line 268 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 271 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
TalkCommand talk_cmd; TalkCommand talk_cmd;
talk_cmd.command = "S"; talk_cmd.command = "S";
talk_cmd.variable = (yyvsp[-1].s)+2; talk_cmd.variable = (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)); } debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
#line 1736 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1739 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 41: case 41:
#line 274 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 277 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ {
TalkCommand talk_cmd; TalkCommand talk_cmd;
talk_cmd.command = "L"; talk_cmd.command = "L";
talk_action->commands.push_back(talk_cmd); talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "|L"); } debugC(1, kHypnoDebugParser, "|L"); }
#line 1746 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1749 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 42: case 42:
#line 279 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 282 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ debugC(1, kHypnoDebugParser, "|E"); } { debugC(1, kHypnoDebugParser, "|E"); }
#line 1752 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1755 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 44: case 44:
#line 283 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 286 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "name: %s", (yyvsp[0].s)); } { (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "name: %s", (yyvsp[0].s)); }
#line 1758 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1761 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 45: case 45:
#line 284 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 287 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = scumm_strdup(""); } { (yyval.s) = scumm_strdup(""); }
#line 1764 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1767 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 46: case 46:
#line 287 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 290 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "flag: %s", (yyvsp[0].s)); } { (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "flag: %s", (yyvsp[0].s)); }
#line 1770 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1773 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 47: case 47:
#line 288 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 291 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = scumm_strdup(""); } { (yyval.s) = scumm_strdup(""); }
#line 1776 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1779 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 48: case 48:
#line 291 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 294 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "switch %s", (yyvsp[0].s)); } { (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "switch %s", (yyvsp[0].s)); }
#line 1782 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1785 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
case 49: case 49:
#line 292 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */ #line 295 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{ (yyval.s) = scumm_strdup(""); } { (yyval.s) = scumm_strdup(""); }
#line 1788 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1791 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
break; break;
#line 1792 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */ #line 1795 "engines/hypno/grammar_mis.cpp" /* yacc.c:1646 */
default: break; default: break;
} }
/* User semantic actions sometimes alter yychar, and that requires /* User semantic actions sometimes alter yychar, and that requires

View File

@ -59,9 +59,9 @@ using namespace Hypno;
int i; /* integer value */ int i; /* integer value */
} }
%token<s> NAME FILENAME FLAG COMMENT GSSWITCH COMMAND %token<s> NAME FILENAME FLAG COMMENT GSSWITCH COMMAND WALNTOK
%token<i> NUM %token<i> NUM
%token HOTSTOK CUTSTOK BACKTOK INTRTOK RETTOK TIMETOK PALETOK BBOXTOK OVERTOK WALNTOK MICETOK PLAYTOK ENDTOK %token HOTSTOK CUTSTOK BACKTOK INTRTOK RETTOK TIMETOK PALETOK BBOXTOK OVERTOK MICETOK PLAYTOK ENDTOK
%token MENUTOK SMENTOK ESCPTOK NRTOK AMBITOK %token MENUTOK SMENTOK ESCPTOK NRTOK AMBITOK
%token GLOBTOK TONTOK TOFFTOK %token GLOBTOK TONTOK TOFFTOK
%token TALKTOK INACTOK FDTOK BOXXTOK ESCAPETOK SECONDTOK INTROTOK DEFAULTTOK %token TALKTOK INACTOK FDTOK BOXXTOK ESCAPETOK SECONDTOK INTROTOK DEFAULTTOK
@ -178,7 +178,7 @@ line: MENUTOK mflag mflag {
debugC(1, kHypnoDebugParser, "CUTS %s", $2); debugC(1, kHypnoDebugParser, "CUTS %s", $2);
} }
| WALNTOK FILENAME NUM NUM gsswitch flag { | WALNTOK FILENAME NUM NUM gsswitch flag {
WalN *a = new WalN($2, Common::Point($3, $4), $5, $6); WalN *a = new WalN($1, $2, Common::Point($3, $4), $5, $6);
Hotspots *cur = stack.back(); Hotspots *cur = stack.back();
Hotspot *hot = &cur->back(); Hotspot *hot = &cur->back();
hot->actions.push_back(a); hot->actions.push_back(a);
@ -207,6 +207,7 @@ line: MENUTOK mflag mflag {
alloctalk: { alloctalk: {
assert(talk_action == nullptr); assert(talk_action == nullptr);
talk_action = new Talk(); talk_action = new Talk();
talk_action->escape = false;
talk_action->active = true; talk_action->active = true;
} }
@ -219,7 +220,9 @@ talk: INACTOK talk {
talk_action->backgroundPos = Common::Point($3, $4); talk_action->backgroundPos = Common::Point($3, $4);
debugC(1, kHypnoDebugParser, "BACK in TALK"); } debugC(1, kHypnoDebugParser, "BACK in TALK"); }
| BOXXTOK NUM NUM { debugC(1, kHypnoDebugParser, "BOXX %d %d", $2, $3); } | BOXXTOK NUM NUM { debugC(1, kHypnoDebugParser, "BOXX %d %d", $2, $3); }
| ESCAPETOK { debugC(1, kHypnoDebugParser, "ESCAPE"); } | ESCAPETOK {
talk_action->escape = true;
debugC(1, kHypnoDebugParser, "ESCAPE"); }
| SECONDTOK FILENAME NUM NUM { | SECONDTOK FILENAME NUM NUM {
talk_action->second = $2; talk_action->second = $2;
talk_action->secondPos = Common::Point($3, $4); talk_action->secondPos = Common::Point($3, $4);

View File

@ -138,7 +138,7 @@ public:
void runBackground(Background *a); void runBackground(Background *a);
void runOverlay(Overlay *a); void runOverlay(Overlay *a);
void runMice(Mice *a); void runMice(Mice *a);
void runEscape(Escape *a); void runEscape();
void runQuit(Quit *a); void runQuit(Quit *a);
void runCutscene(Cutscene *a); void runCutscene(Cutscene *a);
void runPlay(Play *a); void runPlay(Play *a);
@ -175,6 +175,7 @@ public:
Videos _nextSequentialVideoToPlay; Videos _nextSequentialVideoToPlay;
Videos _nextParallelVideoToPlay; Videos _nextParallelVideoToPlay;
Videos _nextLoopingVideoToPlay; Videos _nextLoopingVideoToPlay;
Videos _escapeSequentialVideoToPlay;
Videos _videosPlaying; Videos _videosPlaying;
// Sounds // Sounds

View File

@ -651,15 +651,15 @@ static const flex_int16_t yy_accept[144] =
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 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, 0, 0, 35, 0, 0, 0, 0, 36, 0, 0,
2, 39, 0, 40, 40, 40, 40, 40, 12, 40, 2, 39, 0, 40, 40, 40, 40, 40, 11, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 32, 33, 34, 28, 31, 40, 40, 40, 40, 40, 32, 33, 34, 28, 31,
30, 29, 27, 39, 0, 4, 5, 21, 6, 40, 30, 29, 27, 39, 0, 4, 5, 20, 6, 40,
40, 16, 7, 37, 9, 40, 25, 3, 11, 14, 40, 15, 7, 37, 9, 40, 24, 3, 10, 13,
8, 17, 40, 15, 18, 13, 10, 39, 20, 40, 8, 16, 40, 14, 17, 12, 26, 39, 19, 40,
40, 40, 24, 40, 38, 40, 22, 40, 23, 26, 40, 40, 23, 40, 38, 40, 21, 40, 22, 25,
40, 19, 0 40, 18, 0
} ; } ;
static const YY_CHAR yy_ec[256] = static const YY_CHAR yy_ec[256] =
@ -1207,87 +1207,87 @@ return HOTSTOK;
case 10: case 10:
YY_RULE_SETUP YY_RULE_SETUP
#line 52 "engines/hypno/lexer_mis.l" #line 52 "engines/hypno/lexer_mis.l"
return WALNTOK; return MICETOK;
YY_BREAK YY_BREAK
case 11: case 11:
YY_RULE_SETUP YY_RULE_SETUP
#line 53 "engines/hypno/lexer_mis.l" #line 53 "engines/hypno/lexer_mis.l"
return MICETOK; return ENDTOK;
YY_BREAK YY_BREAK
case 12: case 12:
YY_RULE_SETUP YY_RULE_SETUP
#line 54 "engines/hypno/lexer_mis.l" #line 54 "engines/hypno/lexer_mis.l"
return ENDTOK; return TIMETOK;
YY_BREAK YY_BREAK
case 13: case 13:
YY_RULE_SETUP YY_RULE_SETUP
#line 55 "engines/hypno/lexer_mis.l" #line 55 "engines/hypno/lexer_mis.l"
return TIMETOK; return OVERTOK;
YY_BREAK YY_BREAK
case 14: case 14:
YY_RULE_SETUP YY_RULE_SETUP
#line 56 "engines/hypno/lexer_mis.l" #line 56 "engines/hypno/lexer_mis.l"
return OVERTOK; return SMENTOK;
YY_BREAK YY_BREAK
case 15: case 15:
YY_RULE_SETUP YY_RULE_SETUP
#line 57 "engines/hypno/lexer_mis.l" #line 57 "engines/hypno/lexer_mis.l"
return SMENTOK; return ESCPTOK;
YY_BREAK YY_BREAK
case 16: case 16:
YY_RULE_SETUP YY_RULE_SETUP
#line 58 "engines/hypno/lexer_mis.l" #line 58 "engines/hypno/lexer_mis.l"
return ESCPTOK; return PLAYTOK;
YY_BREAK YY_BREAK
case 17: case 17:
YY_RULE_SETUP YY_RULE_SETUP
#line 59 "engines/hypno/lexer_mis.l" #line 59 "engines/hypno/lexer_mis.l"
return PLAYTOK; return TALKTOK;
YY_BREAK YY_BREAK
case 18: case 18:
YY_RULE_SETUP YY_RULE_SETUP
#line 60 "engines/hypno/lexer_mis.l" #line 60 "engines/hypno/lexer_mis.l"
return TALKTOK; return INACTOK;
YY_BREAK YY_BREAK
case 19: case 19:
YY_RULE_SETUP YY_RULE_SETUP
#line 61 "engines/hypno/lexer_mis.l" #line 61 "engines/hypno/lexer_mis.l"
return INACTOK; return FDTOK;
YY_BREAK YY_BREAK
case 20: case 20:
YY_RULE_SETUP YY_RULE_SETUP
#line 62 "engines/hypno/lexer_mis.l" #line 62 "engines/hypno/lexer_mis.l"
return FDTOK; return BOXXTOK;
YY_BREAK YY_BREAK
case 21: case 21:
YY_RULE_SETUP YY_RULE_SETUP
#line 63 "engines/hypno/lexer_mis.l" #line 63 "engines/hypno/lexer_mis.l"
return BOXXTOK; return ESCAPETOK;
YY_BREAK YY_BREAK
case 22: case 22:
YY_RULE_SETUP YY_RULE_SETUP
#line 64 "engines/hypno/lexer_mis.l" #line 64 "engines/hypno/lexer_mis.l"
return ESCAPETOK; return SECONDTOK;
YY_BREAK YY_BREAK
case 23: case 23:
YY_RULE_SETUP YY_RULE_SETUP
#line 65 "engines/hypno/lexer_mis.l" #line 65 "engines/hypno/lexer_mis.l"
return SECONDTOK; return INTROTOK;
YY_BREAK YY_BREAK
case 24: case 24:
YY_RULE_SETUP YY_RULE_SETUP
#line 66 "engines/hypno/lexer_mis.l" #line 66 "engines/hypno/lexer_mis.l"
return INTROTOK; return INTRTOK;
YY_BREAK YY_BREAK
case 25: case 25:
YY_RULE_SETUP YY_RULE_SETUP
#line 67 "engines/hypno/lexer_mis.l" #line 67 "engines/hypno/lexer_mis.l"
return INTRTOK; return DEFAULTTOK;
YY_BREAK YY_BREAK
case 26: case 26:
YY_RULE_SETUP YY_RULE_SETUP
#line 68 "engines/hypno/lexer_mis.l" #line 68 "engines/hypno/lexer_mis.l"
return DEFAULTTOK; HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return WALNTOK;
YY_BREAK YY_BREAK
case 27: case 27:
YY_RULE_SETUP YY_RULE_SETUP

View File

@ -49,7 +49,6 @@ CUTS return CUTSTOK;
GLOB return GLOBTOK; GLOB return GLOBTOK;
PALE return PALETOK; PALE return PALETOK;
HOTS return HOTSTOK; HOTS return HOTSTOK;
WAL[0-1] return WALNTOK;
MICE return MICETOK; MICE return MICETOK;
END return ENDTOK; END return ENDTOK;
TIME return TIMETOK; TIME return TIMETOK;
@ -66,6 +65,7 @@ SECOND return SECONDTOK;
INTRO return INTROTOK; INTRO return INTROTOK;
INTR return INTRTOK; INTR return INTRTOK;
DEFAULT return DEFAULTTOK; DEFAULT return DEFAULTTOK;
WAL[0-1] HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return WALNTOK;
\|S[A-Za-z_0-9\\\.]+ HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PS; \|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; \|G[A-Za-z_0-9\\\.]+ HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PG;
\|P[A-Za-z_0-9\\\.]+ HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PP; \|P[A-Za-z_0-9\\\.]+ HYPNO_MIS_lval.s = scumm_strdup(HYPNO_MIS_text); return PP;

View File

@ -140,7 +140,7 @@ void HypnoEngine::clickedHotspot(Common::Point mousePos) {
break; break;
case EscapeAction: case EscapeAction:
runEscape((Escape *)action); runEscape();
break; break;
case CutsceneAction: case CutsceneAction:
@ -332,7 +332,6 @@ void HypnoEngine::runScene(Scene &scene) {
} }
// Movies // Movies
if (!_nextParallelVideoToPlay.empty()) { if (!_nextParallelVideoToPlay.empty()) {
for (Videos::iterator it = _nextParallelVideoToPlay.begin(); it != _nextParallelVideoToPlay.end(); ++it) { for (Videos::iterator it = _nextParallelVideoToPlay.begin(); it != _nextParallelVideoToPlay.end(); ++it) {
playVideo(*it); playVideo(*it);
@ -392,6 +391,7 @@ void HypnoEngine::runScene(Scene &scene) {
if (!_videosPlaying.empty() || !_nextSequentialVideoToPlay.empty()) { if (!_videosPlaying.empty() || !_nextSequentialVideoToPlay.empty()) {
drawScreen(); drawScreen();
debug("videosPlaying size: %d, _nextSequentialVideoToPlay size: %d", _videosPlaying.size(), _nextSequentialVideoToPlay.size());
continue; continue;
} }

View File

@ -141,7 +141,7 @@ void SpiderEngine::loadAssetsDemo() {
loadLib("sixdemo/demo/sound.lib/", "sixdemo/demo/sound.lib", true); loadLib("sixdemo/demo/sound.lib/", "sixdemo/demo/sound.lib", true);
// Read assets from mis files // Read assets from mis files
loadSceneLevel("mis/demo.mis", "", "sixdemo"); loadSceneLevel("sixdemo/mis/demo.mis", "", "sixdemo");
ChangeLevel *cl = new ChangeLevel("c1.mi_"); ChangeLevel *cl = new ChangeLevel("c1.mi_");
_levels["sixdemo/mis/demo.mis"].scene.hots[1].actions.push_back(cl); _levels["sixdemo/mis/demo.mis"].scene.hots[1].actions.push_back(cl);
@ -158,17 +158,17 @@ void SpiderEngine::loadAssetsDemo() {
_levels["sixdemo/mis/demo.mis"].scene.hots[5].actions.push_back(cl); _levels["sixdemo/mis/demo.mis"].scene.hots[5].actions.push_back(cl);
_levels["sixdemo/mis/demo.mis"].scene.sound = "demo/sound.lib/menu_mus.raw"; _levels["sixdemo/mis/demo.mis"].scene.sound = "demo/sound.lib/menu_mus.raw";
loadSceneLevel("mis/order.mis", "", "sixdemo"); loadSceneLevel("sixdemo/mis/order.mis", "", "sixdemo");
cl = new ChangeLevel("<quit>"); cl = new ChangeLevel("<quit>");
_levels["sixdemo/mis/order.mis"].scene.hots[1].actions.push_back(cl); _levels["sixdemo/mis/order.mis"].scene.hots[1].actions.push_back(cl);
loadSceneLevel("mis/alley.mis", "", "sixdemo"); loadSceneLevel("sixdemo/mis/alley.mis", "", "sixdemo");
_levels["sixdemo/mis/alley.mis"].scene.intro = "demo/aleyc01s.smk"; _levels["sixdemo/mis/alley.mis"].scene.intro = "demo/aleyc01s.smk";
_levels["sixdemo/mis/alley.mis"].scene.sound = "demo/sound.lib/alleymus.raw"; _levels["sixdemo/mis/alley.mis"].scene.sound = "demo/sound.lib/alleymus.raw";
_levels["sixdemo/mis/alley.mis"].scene.levelIfWin = "sixdemo/mis/demo.mis"; _levels["sixdemo/mis/alley.mis"].scene.levelIfWin = "sixdemo/mis/demo.mis";
_levels["sixdemo/mis/alley.mis"].scene.levelIfLose = "sixdemo/mis/demo.mis"; _levels["sixdemo/mis/alley.mis"].scene.levelIfLose = "sixdemo/mis/demo.mis";
loadSceneLevel("mis/shoctalk.mis", "", "sixdemo"); loadSceneLevel("sixdemo/mis/shoctalk.mis", "", "sixdemo");
Level matrix; Level matrix;
matrix.code.name = "sixdemo/puz_matr"; matrix.code.name = "sixdemo/puz_matr";

View File

@ -63,6 +63,8 @@ void SpiderEngine::showConversation() {
Talk *a = (Talk *)*it; Talk *a = (Talk *)*it;
if (!a->second.empty()) if (!a->second.empty())
_nextParallelVideoToPlay.push_back(MVideo(a->second, a->secondPos, false, false, false)); _nextParallelVideoToPlay.push_back(MVideo(a->second, a->secondPos, false, false, false));
if (a->escape)
runEscape();
} }
debugC(1, kHypnoDebugScene, "Clearing conversation"); debugC(1, kHypnoDebugScene, "Clearing conversation");
_conversation.clear(); _conversation.clear();

View File

@ -59,17 +59,17 @@ extern int HYPNO_MIS_debug;
COMMENT = 261, COMMENT = 261,
GSSWITCH = 262, GSSWITCH = 262,
COMMAND = 263, COMMAND = 263,
NUM = 264, WALNTOK = 264,
HOTSTOK = 265, NUM = 265,
CUTSTOK = 266, HOTSTOK = 266,
BACKTOK = 267, CUTSTOK = 267,
INTRTOK = 268, BACKTOK = 268,
RETTOK = 269, INTRTOK = 269,
TIMETOK = 270, RETTOK = 270,
PALETOK = 271, TIMETOK = 271,
BBOXTOK = 272, PALETOK = 272,
OVERTOK = 273, BBOXTOK = 273,
WALNTOK = 274, OVERTOK = 274,
MICETOK = 275, MICETOK = 275,
PLAYTOK = 276, PLAYTOK = 276,
ENDTOK = 277, ENDTOK = 277,