[Scummvm-git-logs] scummvm master -> 36359a802662384484f5931ed7ec283591223457
neuromancer
noreply at scummvm.org
Sat May 7 14:58:28 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
36359a8026 HYPNO: implemented some missing pointer change in spider
Commit: 36359a802662384484f5931ed7ec283591223457
https://github.com/scummvm/scummvm/commit/36359a802662384484f5931ed7ec283591223457
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-05-07T16:58:59+02:00
Commit Message:
HYPNO: implemented some missing pointer change in spider
Changed paths:
engines/hypno/actions.cpp
engines/hypno/cursors.cpp
engines/hypno/grammar.h
engines/hypno/grammar_mis.cpp
engines/hypno/grammar_mis.y
engines/hypno/hypno.cpp
engines/hypno/hypno.h
engines/hypno/scene.cpp
engines/hypno/spider/hard.cpp
engines/hypno/spider/spider.cpp
diff --git a/engines/hypno/actions.cpp b/engines/hypno/actions.cpp
index d9d42170e6e..6764e636c45 100644
--- a/engines/hypno/actions.cpp
+++ b/engines/hypno/actions.cpp
@@ -110,6 +110,11 @@ void HypnoEngine::runMice(Mice *a) {
changeCursor(a->path, a->index);
}
+void HypnoEngine::runSwapPointer(SwapPointer *a) {
+ _defaultCursorIdx = a->index;
+ defaultCursor();
+}
+
void HypnoEngine::runPalette(Palette *a) {
loadPalette(a->path);
}
diff --git a/engines/hypno/cursors.cpp b/engines/hypno/cursors.cpp
index dd3ebbc0e1d..881b926e112 100644
--- a/engines/hypno/cursors.cpp
+++ b/engines/hypno/cursors.cpp
@@ -100,7 +100,7 @@ void HypnoEngine::disableCursor() {
void HypnoEngine::defaultCursor() {
if (!_defaultCursor.empty())
- changeCursor(_defaultCursor, 0);
+ changeCursor(_defaultCursor, _defaultCursorIdx);
else
changeCursor("default");
}
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index 9ab01a85c51..b21b249ccfc 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -78,6 +78,7 @@ enum ActionType {
WalNAction,
GlobalAction,
TalkAction,
+ SwapPointerAction,
ChangeLevelAction
};
@@ -121,6 +122,15 @@ public:
uint32 index;
};
+class SwapPointer : public Action {
+public:
+ SwapPointer(uint32 index_) {
+ type = SwapPointerAction;
+ index = index_;
+ }
+ uint32 index;
+};
+
class Timer : public Action {
public:
Timer(uint32 delay_) {
diff --git a/engines/hypno/grammar_mis.cpp b/engines/hypno/grammar_mis.cpp
index 5db18c13036..d4ce073c7cb 100644
--- a/engines/hypno/grammar_mis.cpp
+++ b/engines/hypno/grammar_mis.cpp
@@ -586,11 +586,11 @@ static const yytype_int8 yytranslate[] =
static const yytype_int16 yyrline[] =
{
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
+ 142, 148, 154, 160, 167, 174, 180, 186, 192, 198,
+ 204, 211, 218, 225, 232, 238, 244, 247, 253, 259,
+ 262, 263, 266, 273, 276, 277, 281, 284, 287, 291,
+ 295, 300, 306, 307, 313, 319, 325, 332, 339, 345,
+ 350, 351, 354, 355, 358, 359, 362, 363
};
#endif
@@ -1344,12 +1344,17 @@ yyreduce:
case 12: /* line: SWPTTOK NUM */
#line 154 "engines/hypno/grammar_mis.y"
- { debugC(1, kHypnoDebugParser, "SWPT %d", (yyvsp[0].i)); }
-#line 1349 "engines/hypno/grammar_mis.cpp"
+ {
+ SwapPointer *a = new SwapPointer((yyvsp[0].i));
+ Hotspots *cur = stack->back();
+ Hotspot *hot = &cur->back();
+ hot->actions.push_back(a);
+ debugC(1, kHypnoDebugParser, "SWPT %d", (yyvsp[0].i)); }
+#line 1354 "engines/hypno/grammar_mis.cpp"
break;
case 13: /* line: BACKTOK FILENAME NUM NUM gsswitch flag flag */
-#line 155 "engines/hypno/grammar_mis.y"
+#line 160 "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();
@@ -1357,11 +1362,11 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "BACK");
}
-#line 1361 "engines/hypno/grammar_mis.cpp"
+#line 1366 "engines/hypno/grammar_mis.cpp"
break;
case 14: /* line: GLOBTOK GSSWITCH NAME */
-#line 162 "engines/hypno/grammar_mis.y"
+#line 167 "engines/hypno/grammar_mis.y"
{
Global *a = new Global((yyvsp[-1].s), (yyvsp[0].s));
Hotspots *cur = stack->back();
@@ -1369,66 +1374,66 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "GLOB");
}
-#line 1373 "engines/hypno/grammar_mis.cpp"
+#line 1378 "engines/hypno/grammar_mis.cpp"
break;
case 15: /* line: AMBITOK FILENAME NUM NUM flag */
-#line 169 "engines/hypno/grammar_mis.y"
+#line 174 "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);
debugC(1, kHypnoDebugParser, "AMBI %d %d", (yyvsp[-2].i), (yyvsp[-1].i)); }
-#line 1384 "engines/hypno/grammar_mis.cpp"
+#line 1389 "engines/hypno/grammar_mis.cpp"
break;
case 16: /* line: PLAYTOK FILENAME NUM NUM gsswitch flag */
-#line 175 "engines/hypno/grammar_mis.y"
+#line 180 "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);
debugC(1, kHypnoDebugParser, "PLAY %s.", (yyvsp[-4].s)); }
-#line 1395 "engines/hypno/grammar_mis.cpp"
+#line 1400 "engines/hypno/grammar_mis.cpp"
break;
case 17: /* line: SONDTOK FILENAME ENCTOK */
-#line 181 "engines/hypno/grammar_mis.y"
+#line 186 "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"
+#line 1411 "engines/hypno/grammar_mis.cpp"
break;
case 18: /* line: SONDTOK FILENAME */
-#line 187 "engines/hypno/grammar_mis.y"
+#line 192 "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"
+#line 1422 "engines/hypno/grammar_mis.cpp"
break;
case 19: /* line: OVERTOK FILENAME NUM NUM flag */
-#line 193 "engines/hypno/grammar_mis.y"
+#line 198 "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 1428 "engines/hypno/grammar_mis.cpp"
+#line 1433 "engines/hypno/grammar_mis.cpp"
break;
case 20: /* line: PALETOK FILENAME */
-#line 199 "engines/hypno/grammar_mis.y"
+#line 204 "engines/hypno/grammar_mis.y"
{
Palette *a = new Palette((yyvsp[0].s));
Hotspots *cur = stack->back();
@@ -1436,11 +1441,11 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "PALE");
}
-#line 1440 "engines/hypno/grammar_mis.cpp"
+#line 1445 "engines/hypno/grammar_mis.cpp"
break;
case 21: /* line: INTRTOK FILENAME NUM NUM */
-#line 206 "engines/hypno/grammar_mis.y"
+#line 211 "engines/hypno/grammar_mis.y"
{
Intro *a = new Intro(Common::String("cine/") + (yyvsp[-2].s));
Hotspots *cur = stack->back();
@@ -1448,11 +1453,11 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "INTRO %s %d %d", (yyvsp[-2].s), (yyvsp[-1].i), (yyvsp[0].i));
}
-#line 1452 "engines/hypno/grammar_mis.cpp"
+#line 1457 "engines/hypno/grammar_mis.cpp"
break;
case 22: /* line: INTRTOK FILENAME */
-#line 213 "engines/hypno/grammar_mis.y"
+#line 218 "engines/hypno/grammar_mis.y"
{
Intro *a = new Intro(Common::String("cine/") + (yyvsp[0].s));
Hotspots *cur = stack->back();
@@ -1460,11 +1465,11 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "INTRO %s", (yyvsp[0].s));
}
-#line 1464 "engines/hypno/grammar_mis.cpp"
+#line 1469 "engines/hypno/grammar_mis.cpp"
break;
case 23: /* line: CUTSTOK FILENAME */
-#line 220 "engines/hypno/grammar_mis.y"
+#line 225 "engines/hypno/grammar_mis.y"
{
Cutscene *a = new Cutscene((yyvsp[0].s));
Hotspots *cur = stack->back();
@@ -1472,197 +1477,197 @@ yyreduce:
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "CUTS %s", (yyvsp[0].s));
}
-#line 1476 "engines/hypno/grammar_mis.cpp"
+#line 1481 "engines/hypno/grammar_mis.cpp"
break;
case 24: /* line: WALNTOK FILENAME NUM NUM gsswitch flag */
-#line 227 "engines/hypno/grammar_mis.y"
+#line 232 "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);
debugC(1, kHypnoDebugParser, "WALN %s %d %d", (yyvsp[-4].s), (yyvsp[-3].i), (yyvsp[-2].i)); }
-#line 1487 "engines/hypno/grammar_mis.cpp"
+#line 1492 "engines/hypno/grammar_mis.cpp"
break;
case 25: /* line: MICETOK FILENAME NUM */
-#line 233 "engines/hypno/grammar_mis.y"
+#line 238 "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 1498 "engines/hypno/grammar_mis.cpp"
+#line 1503 "engines/hypno/grammar_mis.cpp"
break;
case 26: /* line: MPTRTOK FILENAME NUM NUM NUM NUM NUM */
-#line 239 "engines/hypno/grammar_mis.y"
+#line 244 "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 1506 "engines/hypno/grammar_mis.cpp"
+#line 1511 "engines/hypno/grammar_mis.cpp"
break;
case 27: /* line: TALKTOK alloctalk talk */
-#line 242 "engines/hypno/grammar_mis.y"
+#line 247 "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 1517 "engines/hypno/grammar_mis.cpp"
+#line 1522 "engines/hypno/grammar_mis.cpp"
break;
case 28: /* line: ENDTOK anything RETTOK */
-#line 248 "engines/hypno/grammar_mis.y"
+#line 253 "engines/hypno/grammar_mis.y"
{
debugC(1, kHypnoDebugParser, "explicit END");
g_parsedHots = stack->back();
stack->pop_back();
smenu_idx->pop_back();
}
-#line 1528 "engines/hypno/grammar_mis.cpp"
+#line 1533 "engines/hypno/grammar_mis.cpp"
break;
case 29: /* line: RETTOK */
-#line 254 "engines/hypno/grammar_mis.y"
+#line 259 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "implicit END"); }
-#line 1534 "engines/hypno/grammar_mis.cpp"
+#line 1539 "engines/hypno/grammar_mis.cpp"
break;
case 32: /* alloctalk: %empty */
-#line 261 "engines/hypno/grammar_mis.y"
+#line 266 "engines/hypno/grammar_mis.y"
{
assert(talk_action == nullptr);
talk_action = new Talk();
talk_action->escape = false;
talk_action->active = true;
}
-#line 1545 "engines/hypno/grammar_mis.cpp"
+#line 1550 "engines/hypno/grammar_mis.cpp"
break;
case 33: /* talk: INACTOK talk */
-#line 268 "engines/hypno/grammar_mis.y"
+#line 273 "engines/hypno/grammar_mis.y"
{
talk_action->active = false;
debugC(1, kHypnoDebugParser, "inactive"); }
-#line 1553 "engines/hypno/grammar_mis.cpp"
+#line 1558 "engines/hypno/grammar_mis.cpp"
break;
case 34: /* talk: FDTOK talk */
-#line 271 "engines/hypno/grammar_mis.y"
+#line 276 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "inactive"); }
-#line 1559 "engines/hypno/grammar_mis.cpp"
+#line 1564 "engines/hypno/grammar_mis.cpp"
break;
case 35: /* talk: BACKTOK FILENAME NUM NUM gsswitch flag */
-#line 272 "engines/hypno/grammar_mis.y"
+#line 277 "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 1568 "engines/hypno/grammar_mis.cpp"
+#line 1573 "engines/hypno/grammar_mis.cpp"
break;
case 36: /* talk: BOXXTOK NUM NUM */
-#line 276 "engines/hypno/grammar_mis.y"
+#line 281 "engines/hypno/grammar_mis.y"
{
talk_action->boxPos = Common::Point((yyvsp[-1].i), (yyvsp[0].i));
debugC(1, kHypnoDebugParser, "BOXX %d %d", (yyvsp[-1].i), (yyvsp[0].i)); }
-#line 1576 "engines/hypno/grammar_mis.cpp"
+#line 1581 "engines/hypno/grammar_mis.cpp"
break;
case 37: /* talk: ESCAPETOK */
-#line 279 "engines/hypno/grammar_mis.y"
+#line 284 "engines/hypno/grammar_mis.y"
{
talk_action->escape = true;
debugC(1, kHypnoDebugParser, "ESCAPE"); }
-#line 1584 "engines/hypno/grammar_mis.cpp"
+#line 1589 "engines/hypno/grammar_mis.cpp"
break;
case 38: /* talk: SECONDTOK FILENAME NUM NUM flag */
-#line 282 "engines/hypno/grammar_mis.y"
+#line 287 "engines/hypno/grammar_mis.y"
{
talk_action->second = (yyvsp[-3].s);
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 1593 "engines/hypno/grammar_mis.cpp"
+#line 1598 "engines/hypno/grammar_mis.cpp"
break;
case 39: /* talk: INTROTOK FILENAME NUM NUM */
-#line 286 "engines/hypno/grammar_mis.y"
+#line 291 "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 1602 "engines/hypno/grammar_mis.cpp"
+#line 1607 "engines/hypno/grammar_mis.cpp"
break;
case 40: /* talk: DEFAULTTOK FILENAME NUM NUM */
-#line 290 "engines/hypno/grammar_mis.y"
+#line 295 "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 1612 "engines/hypno/grammar_mis.cpp"
+#line 1617 "engines/hypno/grammar_mis.cpp"
break;
case 41: /* talk: PG talk */
-#line 295 "engines/hypno/grammar_mis.y"
+#line 300 "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);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1623 "engines/hypno/grammar_mis.cpp"
+#line 1628 "engines/hypno/grammar_mis.cpp"
break;
case 42: /* talk: PH talk */
-#line 301 "engines/hypno/grammar_mis.y"
+#line 306 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1629 "engines/hypno/grammar_mis.cpp"
+#line 1634 "engines/hypno/grammar_mis.cpp"
break;
case 43: /* talk: PF talk */
-#line 302 "engines/hypno/grammar_mis.y"
+#line 307 "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);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1640 "engines/hypno/grammar_mis.cpp"
+#line 1645 "engines/hypno/grammar_mis.cpp"
break;
case 44: /* talk: PA talk */
-#line 308 "engines/hypno/grammar_mis.y"
+#line 313 "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);
debugC(1, kHypnoDebugParser, "|A%d", talk_cmd.num); }
-#line 1651 "engines/hypno/grammar_mis.cpp"
+#line 1656 "engines/hypno/grammar_mis.cpp"
break;
case 45: /* talk: PD talk */
-#line 314 "engines/hypno/grammar_mis.y"
+#line 319 "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);
debugC(1, kHypnoDebugParser, "%s", (yyvsp[-1].s)); }
-#line 1662 "engines/hypno/grammar_mis.cpp"
+#line 1667 "engines/hypno/grammar_mis.cpp"
break;
case 46: /* talk: PP NUM NUM flag talk */
-#line 320 "engines/hypno/grammar_mis.y"
+#line 325 "engines/hypno/grammar_mis.y"
{
TalkCommand talk_cmd;
talk_cmd.command = "P";
@@ -1670,11 +1675,11 @@ yyreduce:
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 1674 "engines/hypno/grammar_mis.cpp"
+#line 1679 "engines/hypno/grammar_mis.cpp"
break;
case 47: /* talk: PI NUM NUM talk */
-#line 327 "engines/hypno/grammar_mis.y"
+#line 332 "engines/hypno/grammar_mis.y"
{
TalkCommand talk_cmd;
talk_cmd.command = "I";
@@ -1682,74 +1687,74 @@ yyreduce:
talk_cmd.position = Common::Point((yyvsp[-2].i), (yyvsp[-1].i));
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "%s %d %d", (yyvsp[-3].s), (yyvsp[-2].i), (yyvsp[-1].i)); }
-#line 1686 "engines/hypno/grammar_mis.cpp"
+#line 1691 "engines/hypno/grammar_mis.cpp"
break;
case 48: /* talk: PS talk */
-#line 334 "engines/hypno/grammar_mis.y"
+#line 339 "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 1697 "engines/hypno/grammar_mis.cpp"
+#line 1702 "engines/hypno/grammar_mis.cpp"
break;
case 49: /* talk: PL talk */
-#line 340 "engines/hypno/grammar_mis.y"
+#line 345 "engines/hypno/grammar_mis.y"
{
TalkCommand talk_cmd;
talk_cmd.command = "L";
talk_action->commands.push_back(talk_cmd);
debugC(1, kHypnoDebugParser, "|L"); }
-#line 1707 "engines/hypno/grammar_mis.cpp"
+#line 1712 "engines/hypno/grammar_mis.cpp"
break;
case 50: /* talk: PE */
-#line 345 "engines/hypno/grammar_mis.y"
+#line 350 "engines/hypno/grammar_mis.y"
{ debugC(1, kHypnoDebugParser, "|E"); }
-#line 1713 "engines/hypno/grammar_mis.cpp"
+#line 1718 "engines/hypno/grammar_mis.cpp"
break;
case 52: /* mflag: NAME */
-#line 349 "engines/hypno/grammar_mis.y"
+#line 354 "engines/hypno/grammar_mis.y"
{ (yyval.s) = (yyvsp[0].s); }
-#line 1719 "engines/hypno/grammar_mis.cpp"
+#line 1724 "engines/hypno/grammar_mis.cpp"
break;
case 53: /* mflag: %empty */
-#line 350 "engines/hypno/grammar_mis.y"
+#line 355 "engines/hypno/grammar_mis.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1725 "engines/hypno/grammar_mis.cpp"
+#line 1730 "engines/hypno/grammar_mis.cpp"
break;
case 54: /* flag: FLAG */
-#line 353 "engines/hypno/grammar_mis.y"
+#line 358 "engines/hypno/grammar_mis.y"
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "flag: %s", (yyvsp[0].s)); }
-#line 1731 "engines/hypno/grammar_mis.cpp"
+#line 1736 "engines/hypno/grammar_mis.cpp"
break;
case 55: /* flag: %empty */
-#line 354 "engines/hypno/grammar_mis.y"
+#line 359 "engines/hypno/grammar_mis.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1737 "engines/hypno/grammar_mis.cpp"
+#line 1742 "engines/hypno/grammar_mis.cpp"
break;
case 56: /* gsswitch: GSSWITCH */
-#line 357 "engines/hypno/grammar_mis.y"
+#line 362 "engines/hypno/grammar_mis.y"
{ (yyval.s) = (yyvsp[0].s); debugC(1, kHypnoDebugParser, "switch %s", (yyvsp[0].s)); }
-#line 1743 "engines/hypno/grammar_mis.cpp"
+#line 1748 "engines/hypno/grammar_mis.cpp"
break;
case 57: /* gsswitch: %empty */
-#line 358 "engines/hypno/grammar_mis.y"
+#line 363 "engines/hypno/grammar_mis.y"
{ (yyval.s) = scumm_strdup(""); }
-#line 1749 "engines/hypno/grammar_mis.cpp"
+#line 1754 "engines/hypno/grammar_mis.cpp"
break;
-#line 1753 "engines/hypno/grammar_mis.cpp"
+#line 1758 "engines/hypno/grammar_mis.cpp"
default: break;
}
diff --git a/engines/hypno/grammar_mis.y b/engines/hypno/grammar_mis.y
index b5756c87507..c6e8c122477 100644
--- a/engines/hypno/grammar_mis.y
+++ b/engines/hypno/grammar_mis.y
@@ -151,7 +151,12 @@ line: MENUTOK mflag mflag mflag {
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
debugC(1, kHypnoDebugParser, "TIME %d", $2); }
- | SWPTTOK NUM { debugC(1, kHypnoDebugParser, "SWPT %d", $2); }
+ | SWPTTOK NUM {
+ SwapPointer *a = new SwapPointer($2);
+ Hotspots *cur = stack->back();
+ Hotspot *hot = &cur->back();
+ hot->actions.push_back(a);
+ 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);
Hotspots *cur = stack->back();
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index c82ae2685ab..ba2f79ac8a0 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -53,10 +53,11 @@ HypnoEngine::HypnoEngine(OSystem *syst, const ADGameDescription *gd)
_levelId(0), _skipLevel(false), _health(0), _maxHealth(0),
_playerFrameIdx(0), _playerFrameSep(0), _refreshConversation(false),
_countdown(0), _timerStarted(false), _score(0), _lives(0),
- _defaultCursor(""), _checkpoint(""), _skipDefeatVideo(false),
+ _defaultCursor(""), _defaultCursorIdx(0), _skipDefeatVideo(false),
_background(nullptr), _masks(nullptr), _ammo(0), _maxAmmo(0),
_doNotStopSounds(false), _screenW(0), _screenH(0) { // Every games initializes its own resolution
_rnd = new Common::RandomSource("hypno");
+ _checkpoint = "";
if (gd->extra)
_variant = gd->extra;
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index bc0244d774a..a0d07705e5a 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -170,6 +170,7 @@ public:
// Cursors
Common::String _defaultCursor;
+ uint32 _defaultCursorIdx;
void disableCursor();
void defaultCursor();
void changeCursor(const Common::String &cursor, uint32 n, bool centerCursor = false);
@@ -195,6 +196,7 @@ public:
void runWalN(WalN *a);
bool runGlobal(Global *a);
void runTalk(Talk *a);
+ void runSwapPointer(SwapPointer *a);
void runChangeLevel(ChangeLevel *a);
virtual void drawBackToMenu(Hotspot *h);
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index 81a74b2d02b..328ec24c966 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -207,6 +207,10 @@ void HypnoEngine::clickedHotspot(Common::Point mousePos) {
runPalette((Palette *)action);
break;
+ case SwapPointerAction:
+ runSwapPointer((SwapPointer *)action);
+ break;
+
default:
break;
}
@@ -479,6 +483,7 @@ void HypnoEngine::runScene(Scene *scene) {
debugC(1, kHypnoDebugScene, "Resetting level variables");
resetSceneState();
_checkpoint = _nextLevel;
+ _defaultCursorIdx = 0;
}
_sceneState["GS_LEVELCOMPLETE"] = 0;
diff --git a/engines/hypno/spider/hard.cpp b/engines/hypno/spider/hard.cpp
index 8a973a10785..b462cb1a602 100644
--- a/engines/hypno/spider/hard.cpp
+++ b/engines/hypno/spider/hard.cpp
@@ -575,13 +575,17 @@ void SpiderEngine::runFusePanel(Code *code) {
runIntro(v);
_isFuseRust = false;
_isFuseUnreadable = true;
+ _defaultCursorIdx = 0;
loadImage("int_alof/fuseclea.smk", 0, 0, false, true);
+ defaultCursor();
} else if (_isFuseUnreadable && _sceneState["GS_SWITCH9"]) {
MVideo v("cine/spv032s.smk", Common::Point(0, 0), false, false, false);
runIntro(v);
_isFuseRust = false;
_isFuseUnreadable = false;
+ _defaultCursorIdx = 0;
loadImage("int_alof/fuseread.smk", 0, 0, false, true);
+ defaultCursor();
}
if (_isFuseRust || _isFuseUnreadable)
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index a809bfa1434..c54e671bbad 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -471,6 +471,29 @@ void SpiderEngine::loadAssetsFullGame() {
loadSceneLevel("boilhard.mi_", "", prefix);
sc = (Scene *) _levels["boilhard.mi_"];
+ Hotspots *hots = sc->hots[1].smenu;
+
+ SwapPointer *swpt = (SwapPointer *) (*hots)[1].actions[4];
+ swpt->index--;
+
+ swpt = (SwapPointer *) (*hots)[2].actions[4];
+ swpt->index--;
+
+ swpt = (SwapPointer *) (*hots)[3].actions[4];
+ swpt->index--;
+
+ swpt = (SwapPointer *) (*hots)[4].actions[4];
+ swpt->index--;
+
+ swpt = (SwapPointer *) (*hots)[5].actions[4];
+ swpt->index--;
+
+ swpt = (SwapPointer *) (*hots)[6].actions[4];
+ swpt->index--;
+
+ swpt = (SwapPointer *) (*hots)[7].actions[4];
+ swpt->index--;
+
over = (Overlay*) sc->hots[0].actions[2];
over->path = "int_alof\\BOILB1.SMK"; // seems to be a bug?
@@ -575,7 +598,7 @@ void SpiderEngine::loadAssetsFullGame() {
loadArcadeLevel("c5h.mi_", "<trans_apt_6>", "<over_hob2>", prefix);
if (_restoredContentEnabled)
- _levels["c5.mi_"]->intros.push_back("cine/ppv006bs.smk");
+ _levels["c5h.mi_"]->intros.push_back("cine/ppv006bs.smk");
_levels["c5h.mi_"]->intros.push_back("cine/ctss001s.smk");
Transition *trans_apt_6 = new Transition("factory1.mi_");
More information about the Scummvm-git-logs
mailing list