[Scummvm-git-logs] scummvm master -> 958df59b87af601628c4bde97953526712876205
neuromancer
neuromancer at users.noreply.github.com
Sat Nov 6 17:18:07 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
958df59b87 HYPNO: refactored scene loading and avoid repeating the same cutscenes
Commit: 958df59b87af601628c4bde97953526712876205
https://github.com/scummvm/scummvm/commit/958df59b87af601628c4bde97953526712876205
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-11-06T18:17:27+01:00
Commit Message:
HYPNO: refactored scene loading and avoid repeating the same cutscenes
Changed paths:
engines/hypno/actions.cpp
engines/hypno/grammar_mis.cpp
engines/hypno/grammar_mis.y
engines/hypno/hypno.h
engines/hypno/scene.cpp
engines/hypno/spider/spider.cpp
diff --git a/engines/hypno/actions.cpp b/engines/hypno/actions.cpp
index 1b21326cb8..5268294e2b 100644
--- a/engines/hypno/actions.cpp
+++ b/engines/hypno/actions.cpp
@@ -48,6 +48,14 @@ void HypnoEngine::runMenu(Hotspots hs) {
case AmbientAction:
runAmbient((Ambient *)action);
break;
+ case CutsceneAction: {
+ // Should not repeat the same
+ Cutscene *cutscene = (Cutscene *) action;
+ if (!_intros.contains(cutscene->path))
+ runCutscene(cutscene);
+ _intros[cutscene->path] = true;
+ }
+ break;
default:
break;
diff --git a/engines/hypno/grammar_mis.cpp b/engines/hypno/grammar_mis.cpp
index aee1000be4..9aa8f2bf42 100644
--- a/engines/hypno/grammar_mis.cpp
+++ b/engines/hypno/grammar_mis.cpp
@@ -1513,7 +1513,7 @@ yyreduce:
case 17:
#line 166 "engines/hypno/grammar_mis.y" /* yacc.c:1646 */
{
- Cutscene *a = new Cutscene((yyvsp[-2].s));
+ Cutscene *a = new Cutscene(Common::String("cine/") + (yyvsp[-2].s));
Hotspots *cur = stack.back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
diff --git a/engines/hypno/grammar_mis.y b/engines/hypno/grammar_mis.y
index 6fc1010524..ac6d363693 100644
--- a/engines/hypno/grammar_mis.y
+++ b/engines/hypno/grammar_mis.y
@@ -164,7 +164,7 @@ line: MENUTOK mflag mflag {
debugC(1, kHypnoDebugParser, "PALE");
}
| INTRTOK FILENAME NUM NUM {
- Cutscene *a = new Cutscene($2);
+ Cutscene *a = new Cutscene(Common::String("cine/") + $2);
Hotspots *cur = stack.back();
Hotspot *hot = &cur->back();
hot->actions.push_back(a);
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 3780bb2b4d..faa0cea08e 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -93,10 +93,10 @@ public:
// Parsing
void splitArcadeFile(const Common::String &filename, Common::String &arc, Common::String &list);
- void parseScene(const Common::String &prefix, const Common::String &filename);
void parseArcadeShooting(const Common::String &prefix, const Common::String &name, const Common::String &data);
ShootSequence parseShootList(const Common::String &name, const Common::String &data);
void loadArcadeLevel(const Common::String ¤t, const Common::String &next, const Common::String &prefix);
+ void loadSceneLevel(const Common::String ¤t, const Common::String &next, const Common::String &prefix);
LibFile *loadLib(const Filename &prefix, const Filename &filename, bool encrypted);
// User input
@@ -159,7 +159,7 @@ public:
void drawScreen();
// intros
- Common::HashMap<Common::String, Videos> _intros;
+ Common::HashMap<Filename, bool> _intros;
// levels
Common::String _nextLevel;
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index 845add4708..019c6caf49 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -59,11 +59,11 @@ const static char *sceneVariables[] = {
NULL
};
-void HypnoEngine::parseScene(const Common::String &prefix, const Common::String &filename) {
- debugC(1, kHypnoDebugParser, "Parsing %s", filename.c_str());
- Common::String name = convertPath(filename);
- if (!prefix.empty())
- name = prefix + "/" + name;
+void HypnoEngine::loadSceneLevel(const Common::String ¤t, const Common::String &next, const Common::String &prefix) {
+ debugC(1, kHypnoDebugParser, "Parsing %s", current.c_str());
+ Common::String name = convertPath(current);
+ // if (!prefix.empty())
+ // name = prefix + "/" + name;
Common::File test;
if (!test.open(name.c_str()))
@@ -78,6 +78,7 @@ void HypnoEngine::parseScene(const Common::String &prefix, const Common::String
parse_mis(buf);
Level level;
level.scene.prefix = prefix;
+ level.scene.levelIfWin = next;
level.scene.hots = *g_parsedHots;
_levels[name] = level;
free(buf);
@@ -241,6 +242,7 @@ void HypnoEngine::runScene(Scene &scene) {
_nextLoopingVideoToPlay.clear();
_nextParallelVideoToPlay.clear();
_nextSequentialVideoToPlay.clear();
+ _intros.clear();
_refreshConversation = false;
_conversation.clear();
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index 61399d9314..e6cb07d5e4 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -41,6 +41,7 @@ void SpiderEngine::loadAssets() {
void SpiderEngine::loadAssetsFullGame() {
Common::Language language = Common::parseLanguage(ConfMan.get("language"));
+ Common::String prefix = "spider";
if (language == Common::EN_USA) {
if (!_installerArchive.open("DATA.Z"))
error("Failed to open DATA.Z");
@@ -53,31 +54,19 @@ void SpiderEngine::loadAssetsFullGame() {
if (missions == nullptr || missions->listMembers(files) == 0)
error("Failed to load any file from missions.lib");
- parseScene("", "mainmenu.mi_");
- _levels["mainmenu.mi_"].scene.prefix = "spider";
+ loadSceneLevel("mainmenu.mi_", "", prefix);
+ loadSceneLevel("tryagain.mi_", "", prefix);
+ loadSceneLevel("options.mi_", "", prefix);
+ loadSceneLevel("levels.mi_", "mv0t.mi_", prefix);
+ loadSceneLevel("combmenu.mi_", "", prefix);
- parseScene("", "options.mi_");
- _levels["options.mi_"].scene.prefix = "spider";
-
- parseScene("", "levels.mi_");
- _levels["levels.mi_"].scene.prefix = "spider";
- _levels["levels.mi_"].scene.levelIfWin = "mv0t.mi_";
-
- parseScene("", "combmenu.mi_");
- _levels["combmenu.mi_"].scene.prefix = "spider";
-
- parseScene("", "mv0t.mi_");
- _levels["mv0t.mi_"].scene.prefix = "spider";
+ loadSceneLevel("mv0t.mi_", "roof.mi_", prefix);
_levels["mv0t.mi_"].scene.intro = "cine/ints001s.smk";
- _levels["mv0t.mi_"].scene.levelIfWin = "roof.mi_";
-
- parseScene("", "roof.mi_");
- _levels["roof.mi_"].scene.prefix = "spider";
- _levels["roof.mi_"].scene.levelIfWin = "decide1.mi_";
+ loadSceneLevel("roof.mi_", "decide1.mi_", prefix);
- parseScene("", "decide1.mi_");
- _levels["decide1.mi_"].scene.prefix = "spider";
+ loadSceneLevel("decide1.mi_", "", prefix);
+ // _levels["decide1.mi_"].scene.prefix = "spider";
// loadArcadeLevel("c1", "", "spider");
// loadArcadeLevel("c2", "", "spider");
@@ -152,7 +141,7 @@ void SpiderEngine::loadAssetsDemo() {
loadLib("sixdemo/demo/sound.lib/", "sixdemo/demo/sound.lib", true);
// Read assets from mis files
- parseScene("sixdemo", "mis/demo.mis");
+ loadSceneLevel("mis/demo.mis", "", "sixdemo");
ChangeLevel *cl = new ChangeLevel("c1.mi_");
_levels["sixdemo/mis/demo.mis"].scene.hots[1].actions.push_back(cl);
@@ -169,17 +158,17 @@ void SpiderEngine::loadAssetsDemo() {
_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";
- parseScene("sixdemo", "mis/order.mis");
+ loadSceneLevel("mis/order.mis", "", "sixdemo");
cl = new ChangeLevel("<quit>");
_levels["sixdemo/mis/order.mis"].scene.hots[1].actions.push_back(cl);
- parseScene("sixdemo", "mis/alley.mis");
+ loadSceneLevel("mis/alley.mis", "", "sixdemo");
_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.levelIfWin = "sixdemo/mis/demo.mis";
_levels["sixdemo/mis/alley.mis"].scene.levelIfLose = "sixdemo/mis/demo.mis";
- parseScene("sixdemo", "mis/shoctalk.mis");
+ loadSceneLevel("mis/shoctalk.mis", "", "sixdemo");
Level matrix;
matrix.code.name = "sixdemo/puz_matr";
More information about the Scummvm-git-logs
mailing list