[Scummvm-git-logs] scummvm master -> 44474e8693ce9779faf71ba8e73713296ce0fe89

neuromancer noreply at scummvm.org
Mon Nov 15 18:41:40 UTC 2021


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ed0efdd647 HYPNO: refactored how difficutly is handled in wet and spider and starte to add levels in spider
44474e8693 HYPNO: fixed uninitialized values in ox and oy


Commit: ed0efdd647c2d1665473fecb5324fadec30fb763
    https://github.com/scummvm/scummvm/commit/ed0efdd647c2d1665473fecb5324fadec30fb763
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-11-15T19:41:27+01:00

Commit Message:
HYPNO: refactored how difficutly is handled in wet and spider and starte to add levels in spider

Changed paths:
    engines/hypno/actions.cpp
    engines/hypno/arcade.cpp
    engines/hypno/grammar.h
    engines/hypno/hypno.cpp
    engines/hypno/hypno.h
    engines/hypno/scene.cpp
    engines/hypno/spider/spider.cpp
    engines/hypno/wet/wet.cpp


diff --git a/engines/hypno/actions.cpp b/engines/hypno/actions.cpp
index 6d479ee7c2..85fc9db633 100644
--- a/engines/hypno/actions.cpp
+++ b/engines/hypno/actions.cpp
@@ -101,7 +101,7 @@ void HypnoEngine::runEscape() {
 
 void HypnoEngine::runCutscene(Cutscene *a) {
 	stopSound();
-	disableCursor();
+	defaultCursor();
 	_music.clear();
 	_nextSequentialVideoToPlay.push_back(MVideo(a->path, Common::Point(0, 0), false, true, false));
 }
diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index b61d30aea4..76b5830155 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -89,7 +89,7 @@ ShootSequence HypnoEngine::parseShootList(const Common::String &filename, const
 }
 
 void HypnoEngine::loadArcadeLevel(const Common::String &current, const Common::String &next, const Common::String &prefix) {
-	Common::String arclevel = current + _difficulty + ".mi_";
+	Common::String arclevel = current + ".mi_";
 	debugC(1, kHypnoDebugParser, "Parsing %s", arclevel.c_str());
 	Common::String arc;
 	Common::String list;
diff --git a/engines/hypno/grammar.h b/engines/hypno/grammar.h
index 550ffe1a72..45f7f6612e 100644
--- a/engines/hypno/grammar.h
+++ b/engines/hypno/grammar.h
@@ -375,10 +375,21 @@ public:
 
 class Transition : public Level {
 public:
-	Transition()  {
+	Transition(Common::String level)  {
 		type = TransitionLevel;
+		nextLevel = level;
+		levelEasy = "";
+		levelHard = "";
 	}
-	Common::String level;
+	
+	Transition(Common::String easy, Common::String hard)  {
+		type = TransitionLevel;
+		levelEasy = easy;
+		levelHard = hard;
+	}
+	Common::String nextLevel;
+	Common::String levelEasy;
+	Common::String levelHard;
 	Filename frameImage;
 	uint32 frameNumber;
 };
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index 46f203c098..dc41dd8685 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -130,17 +130,15 @@ Common::Error HypnoEngine::run() {
 	_compositeSurface->create(_screenW, _screenH, _pixelFormat);
 
 	// Main event loop
-	Common::Event event;
-	Common::Point mousePos;
 	loadAssets();
-	_nextLevel = "<start>";
+	assert(!_nextLevel.empty());
 	while (!shouldQuit()) {
-		//debug("nextLevel: %s", _nextLevel.c_str());
+		debug("nextLevel: %s", _nextLevel.c_str());
 		_defaultCursor = "";
 		_prefixDir = "";
 		_videosPlaying.clear();
 		if (!_nextLevel.empty()) {
-			_currentLevel = _nextLevel;
+			_currentLevel = findNextLevel(_nextLevel);
 			_nextLevel = "";
 			runLevel(_currentLevel);
 		}
@@ -158,6 +156,7 @@ void HypnoEngine::runLevel(Common::String &name) {
 
 	// Play intros
 	disableCursor();
+	debug("Number of videos to play: %d", _levels[name]->intros.size());
 	for (Filenames::iterator it = _levels[name]->intros.begin(); it != _levels[name]->intros.end(); ++it) {
 		MVideo v(*it, Common::Point(0, 0), false, true, false);
 		runIntro(v);
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 30c2b30e24..9b662cc94d 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -169,6 +169,8 @@ public:
 	// levels
 	Common::String _nextLevel;
 	Common::String _currentLevel;
+	virtual Common::String findNextLevel(const Common::String &level);
+	virtual Common::String findNextLevel(const Transition *trans);
 	uint32 _levelId;
 
 	// hotspots
@@ -252,6 +254,9 @@ public:
 	void drawPlayer() override;
 	void drawHealth() override;
 	void runCode(Code *code) override;
+	Common::String findNextLevel(const Common::String &level) override;
+	Common::String findNextLevel(const Transition *trans) override;
+
 
 private:
 	void runMainMenu(Code *code);
@@ -269,6 +274,8 @@ public:
 	void drawPlayer() override;
 	void drawHealth() override;
 	void runCode(Code *code) override;
+	Common::String findNextLevel(const Common::String &level) override;
+	Common::String findNextLevel(const Transition *trans) override;
 
 	void showConversation() override;
 	void rightClickedConversation(const Common::Point &mousePos) override;
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index 44334fae14..ab7765a2c2 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -62,8 +62,6 @@ const static char *sceneVariables[] = {
 void HypnoEngine::loadSceneLevel(const Common::String &current, 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()))
@@ -87,7 +85,9 @@ void HypnoEngine::loadSceneLevel(const Common::String &current, const Common::St
 void HypnoEngine::resetSceneState() {
 	uint32 i = 0;
 	while (sceneVariables[i]) {
-		_sceneState[sceneVariables[i]] = 0;
+		// Preserve difficulty level variables
+		if (sceneVariables[i] != Common::String("GS_COMBATLEVEL") && sceneVariables[i] != Common::String("GS_PUZZLELEVEL"))
+			_sceneState[sceneVariables[i]] = 0;
 		i++;
 	}
 }
@@ -214,7 +214,11 @@ bool HypnoEngine::hoverHotspot(Common::Point mousePos) {
 	return false;
 }
 
+Common::String HypnoEngine::findNextLevel(const Transition *trans) { error("no code!"); }
+Common::String HypnoEngine::findNextLevel(const Common::String &level) { error("no code!"); }
+
 void HypnoEngine::runTransition(Transition *trans) {
+	Common::String nextLevel = findNextLevel(trans);
 	if (!trans->frameImage.empty()) {
 		debugC(1, kHypnoDebugScene, "Rendering %s frame in transaction", trans->frameImage.c_str());
 		Graphics::Surface *frame = decodeFrame(trans->frameImage, trans->frameNumber);
@@ -225,11 +229,11 @@ void HypnoEngine::runTransition(Transition *trans) {
 		delete frame;
 		sframe->free();
 		delete sframe;
-		Common::String *ptr = new Common::String(trans->level);
+		Common::String *ptr = new Common::String(nextLevel);
 		if (!installTimer(2 * 1000000, ptr)) // 2 seconds
 			error("Failed to install timer");
 	} else
-		_nextLevel = trans->level;
+		_nextLevel = nextLevel;
 }
 
 
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index 5a15f62f44..805ce81b50 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -73,7 +73,7 @@ void SpiderEngine::loadAssetsFullGame() {
 	sc->hots[1].actions.push_back(cl);
 
 	loadSceneLevel("options.mi_", "", prefix);
-	loadSceneLevel("levels.mi_", "mv0t.mi_", prefix);
+	loadSceneLevel("levels.mi_", "", prefix);
 	loadSceneLevel("combmenu.mi_", "", prefix);
 
 	loadSceneLevel("mv0t.mi_", "roof.mi_", prefix);
@@ -88,21 +88,17 @@ void SpiderEngine::loadAssetsFullGame() {
 	sc = (Scene *) _levels["decide1.mi_"];
 	cl = new ChangeLevel("bank.mi_");
 	sc->hots[2].actions.push_back(cl);
-	cl = new ChangeLevel("c1.mi_");
+	cl = new ChangeLevel("c1"); // depens on the difficulty
 	sc->hots[4].actions.push_back(cl);
 
 	loadSceneLevel("bank.mi_", "", prefix);
 	_levels["bank.mi_"]->intros.push_back("cine/swcs001s.smk");
-	_levels["bank.mi_"]->levelIfWin = "alley.mi_";
+	_levels["bank.mi_"]->levelIfWin = "<alley_selector>";
 
-	loadSceneLevel("busintro.mi_", "buspuz.mi_", prefix);
-	loadSceneLevel("busint.mi_", "buspuz.mi_", prefix);
-	loadSceneLevel("buspuz.mi_", "", prefix);
-	_levels["buspuz.mi_"]->intros.push_back("cine/apts004s.smk");
-	_levels["buspuz.mi_"]->intros.push_back("cine/blcs001s.smk");
-	_levels["buspuz.mi_"]->intros.push_back("cine/ppv001s.smk");
+	Transition *alley_selector = new Transition("alley.mi_", "<puz_matr>");
+	_levels["<alley_selector>"] = alley_selector;
 
-	loadSceneLevel("alley.mi_", "<bank_easy>", prefix);
+	loadSceneLevel("alley.mi_", "<trans_apt_2>", prefix);
 	_levels["alley.mi_"]->music = "alleymus.raw";
 	_levels["alley.mi_"]->intros.push_back("cine/aleyc01s.smk");
 
@@ -110,15 +106,39 @@ void SpiderEngine::loadAssetsFullGame() {
 	_levels["c1.mi_"]->intros.push_back("cine/ross002s.smk");
 	_levels["c1.mi_"]->levelIfLose = "<over_apt_1>";
 
-	Transition *trans_apt_1 = new Transition();
-	trans_apt_1->level = "busintro.mi_";
+	// Hardcoded levels
+	Code *matrix = new Code();
+	matrix->name = "<puz_matr>";
+	matrix->intros.push_back("spider/cine/aleyc01s.smk");
+	matrix->levelIfWin = "<trans_apt_2>";
+	_levels["<puz_matr>"] = matrix;
+
+	// Transitions
+	Transition *trans_apt_1 = new Transition("busintro.mi_");
+	trans_apt_1->frameImage = "spider/cine/blcs00.smk";
+	trans_apt_1->frameNumber = 0;
+	trans_apt_1->intros.push_back("spider/cine/ross004s.smk");
 	trans_apt_1->intros.push_back("spider/cine/apts002s.smk");
 	_levels["<trans_apt_1>"] = trans_apt_1;
 
-	Transition *bankEasy = new Transition();
-	bankEasy->level = "buspuz.mi_";
-	bankEasy->intros.push_back("spider/cine/dia002s.smk");
-	_levels["<bank_easy>"] = bankEasy;
+	Transition *trans_apt_2 = new Transition("busint.mi_");
+	trans_apt_2->frameImage = "spider/cine/blcs00.smk";
+	trans_apt_2->frameNumber = 0;
+	trans_apt_2->intros.push_back("spider/cine/dia002s.smk");
+	trans_apt_2->intros.push_back("spider/cine/apts004s.smk");
+	_levels["<trans_apt_2>"] = trans_apt_2;
+
+	loadSceneLevel("busint.mi_", "busintro.mi_", prefix);
+	loadSceneLevel("busintro.mi_", "buspuz.mi_", prefix);
+	_levels["busintro.mi_"]->intros.push_back("cine/blcs001s.smk");
+
+	loadSceneLevel("buspuz.mi_", "decide3.mi_", prefix);
+	loadSceneLevel("decide3.mi_", "", prefix);
+	//_levels["buspuz.mi_"]->intros.push_back("cine/ppv001s.smk");
+
+	// Transition *bus_transition = new Transition("buspuz.mi_");
+	// bankEasy->intros.push_back("spider/cine/dia002s.smk");
+	// _levels["<bus_transition>"] = bankEasy;
 
 	// Transition *bankHard = new Transition();
 	// bankHard->level = "buspuz.mi_";
@@ -140,31 +160,22 @@ void SpiderEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c13", "", prefix);
 
 	// // Hard arcade levels
-	// loadArcadeLevel("c1h", "", prefix);
-	// loadArcadeLevel("c2h", "", prefix);
-	// loadArcadeLevel("c3h", "", prefix);
-	// loadArcadeLevel("c4h", "", prefix);
-	// loadArcadeLevel("c5h", "", prefix);
-	// //loadArcadeLevel("c6h", "", "spider");
-	// // No c7h level?
-	// loadArcadeLevel("c8h", "", prefix);
-	// loadArcadeLevel("c9h", "", prefix);
-	// loadArcadeLevel("c10h", "", prefix);
-	// loadArcadeLevel("c11h", "", prefix);
-	// loadArcadeLevel("c12h", "", prefix);
-	// loadArcadeLevel("c13h", "", prefix);
-
-
-	// // Hardcoded levels
-	// Code *matrix = new Code();
-	// matrix->name = "<puz_matr>";
-	// matrix->intros.push_back("spider/cine/aleyc01s.smk");
-	// matrix->levelIfWin = "";
-	// _levels["<puz_matr>"] = matrix;
+	loadArcadeLevel("c1h", "", prefix);
+	loadArcadeLevel("c2h", "", prefix);
+	loadArcadeLevel("c3h", "", prefix);
+	loadArcadeLevel("c4h", "", prefix);
+	loadArcadeLevel("c5h", "", prefix);
+	//loadArcadeLevel("c6h", "", "spider");
+	// No c7h level?
+	loadArcadeLevel("c8h", "", prefix);
+	loadArcadeLevel("c9h", "", prefix);
+	loadArcadeLevel("c10h", "", prefix);
+	loadArcadeLevel("c11h", "", prefix);
+	loadArcadeLevel("c12h", "", prefix);
+	loadArcadeLevel("c13h", "", prefix);
 
 	// start level
-	Transition *start = new Transition();
-	start->level = "mainmenu.mi_";
+	Transition *start = new Transition("mainmenu.mi_");
 	start->intros.push_back("spider/cine/dcine1.smk");
 	start->intros.push_back("spider/cine/dcine2.smk");
 	_levels["<start>"] = start;
@@ -179,6 +190,18 @@ void SpiderEngine::loadAssetsFullGame() {
 	cl = new ChangeLevel("<quit>");
 	sc->hots[5].actions.push_back(cl);
 
+	sc = (Scene *) _levels["levels.mi_"];
+	cl = new ChangeLevel("levels.mi_");
+	sc->hots[1].actions.push_back(cl);
+	sc->hots[2].actions.push_back(cl);
+	sc->hots[3].actions.push_back(cl);
+	sc->hots[4].actions.push_back(cl);
+
+	cl = new ChangeLevel("mv0t.mi_");
+	sc->hots[5].actions.push_back(cl);
+	cl = new ChangeLevel("mainmenu.mi_");
+	sc->hots[6].actions.push_back(cl);
+
 	sc = (Scene *) _levels["options.mi_"]; 
 
 	cl = new ChangeLevel("combmenu.mi_");
@@ -195,41 +218,41 @@ void SpiderEngine::loadAssetsFullGame() {
 	cl = new ChangeLevel("options.mi_");
 	sc->hots[1].actions.push_back(cl);
 
-	cl = new ChangeLevel("c1.mi_");
+	cl = new ChangeLevel("c1h.mi_");
 	sc->hots[2].actions.push_back(cl);
 
-	cl = new ChangeLevel("c2.mi_");
+	cl = new ChangeLevel("c2h.mi_");
 	sc->hots[3].actions.push_back(cl);
 
-	cl = new ChangeLevel("c3.mi_");
+	cl = new ChangeLevel("c3h.mi_");
 	sc->hots[4].actions.push_back(cl);
 
-	cl = new ChangeLevel("c4.mi_");
+	cl = new ChangeLevel("c4h.mi_");
 	sc->hots[5].actions.push_back(cl);
 
-	cl = new ChangeLevel("c5.mi_");
+	cl = new ChangeLevel("c5h.mi_");
 	sc->hots[6].actions.push_back(cl);
 
-	cl = new ChangeLevel("c8.mi_");
+	cl = new ChangeLevel("c8h.mi_");
 	sc->hots[7].actions.push_back(cl);
 	
-	cl = new ChangeLevel("c9.mi_");
+	cl = new ChangeLevel("c9h.mi_");
 	sc->hots[8].actions.push_back(cl);
 
-	cl = new ChangeLevel("c10.mi_");
+	cl = new ChangeLevel("c10h.mi_");
 	sc->hots[9].actions.push_back(cl);
 
-	cl = new ChangeLevel("c11.mi_");
+	cl = new ChangeLevel("c11h.mi_");
 	sc->hots[10].actions.push_back(cl);
 
-	cl = new ChangeLevel("c12.mi_");
+	cl = new ChangeLevel("c12h.mi_");
 	sc->hots[11].actions.push_back(cl);
 
 	// Game overs
-	Transition *over_apt_1 = new Transition();
-	over_apt_1->level = "tryagain.mi_";
+	Transition *over_apt_1 = new Transition("tryagain.mi_");
 	over_apt_1->intros.push_back("spider/cine/apts01as.smk");
 	_levels["<over_apt_1>"] = over_apt_1;
+	_nextLevel = "<start>";
 }
 
 void SpiderEngine::loadAssetsDemo() {
@@ -245,8 +268,7 @@ void SpiderEngine::loadAssetsDemo() {
 		error("Failed to load any file from missions.lib");
 
 	// start level
-	Transition *start = new Transition();
-	start->level = "sixdemo/mis/demo.mis";
+	Transition *start = new Transition("sixdemo/mis/demo.mis");
 	start->intros.push_back("sixdemo/demo/dcine1.smk");
 	start->intros.push_back("sixdemo/demo/dcine2.smk");
 	_levels["<start>"] = start;
@@ -267,7 +289,7 @@ void SpiderEngine::loadAssetsDemo() {
 	cl = new ChangeLevel("sixdemo/mis/alley.mis");
 	sc->hots[2].actions.push_back(cl);
 
-	cl = new ChangeLevel("puz_matr");
+	cl = new ChangeLevel("<puz_matr>");
 	sc->hots[3].actions.push_back(cl);
 
 	cl = new ChangeLevel("sixdemo/mis/shoctalk.mis");
@@ -294,11 +316,12 @@ void SpiderEngine::loadAssetsDemo() {
 
 	Code *matrix = new Code();
 	matrix->name = "<puz_matr>";
-	matrix->intros.push_back("spiderman/demo/aleyc01s.smk");
+	matrix->intros.push_back("sixdemo/demo/aleyc01s.smk");
 	matrix->levelIfWin = "sixdemo/mis/demo.mis";
 	matrix->levelIfLose = "sixdemo/mis/demo.mis";
 	_levels["<puz_matr>"] = matrix;
 	_soundPath = "c_misc/sound.lib/";
+	_nextLevel = "<start>";
 }
 
 void SpiderEngine::runCode(Code *code) {
@@ -415,4 +438,19 @@ void SpiderEngine::showCredits() {
 	_nextLevel = "mainmenu.mi_";
 }
 
+Common::String SpiderEngine::findNextLevel(const Transition *trans) { 
+	if (trans->nextLevel.empty())
+		return _sceneState["GS_PUZZLELEVEL"] == 0 ? trans->levelEasy : trans->levelHard;
+
+	return trans->nextLevel;
+}
+
+Common::String SpiderEngine::findNextLevel(const Common::String &level) {
+	if (Common::matchString(level.c_str(), "c#") || Common::matchString(level.c_str(), "c##"))
+		return level + (_sceneState["GS_COMBATLEVEL"] == 0 ? "" : "h") + ".mi_";
+	else {
+		return level;
+	}
+}
+
 } // End of namespace Hypno
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index eef68dd46f..c66eb3bcec 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -104,8 +104,7 @@ void WetEngine::loadAssetsDemoDisc() {
 	start->hots = hs;
 	_levels["<start>"] = start;
 
-	Transition *intro = new Transition();
-	intro->level = "c31.mi_";
+	Transition *intro = new Transition("c31");
 	intro->intros.push_back("movie/nw_logo.smk");
 	intro->intros.push_back("movie/hypnotix.smk");
 	intro->intros.push_back("movie/wetlogo.smk");
@@ -113,8 +112,7 @@ void WetEngine::loadAssetsDemoDisc() {
 	intro->frameNumber = 0;
 	_levels["<intro>"] = intro;
 
-	Transition *movies = new Transition();
-	movies->level = "<quit>";
+	Transition *movies = new Transition("<quit>");
 	movies->intros.push_back("movie/nw_logo.smk");
 	movies->intros.push_back("movie/hypnotix.smk");
 	movies->intros.push_back("movie/wetlogo.smk");
@@ -136,17 +134,17 @@ void WetEngine::loadAssetsDemoDisc() {
 	_levels["<movies>"] = movies;
 
 	loadArcadeLevel("c31", "c52", "wetlands");
-	_levels["c31.mi_"]->levelIfLose = "c52.mi_";
+	_levels["c31.mi_"]->levelIfLose = "c52";
 	loadArcadeLevel("c52", "<gameover>", "wetlands");
 	_levels["c52.mi_"]->levelIfLose = "<gameover>";
 
-	Transition *over = new Transition();
-	over->level = "<quit>";
+	Transition *over = new Transition("<quit>");
 	over->intros.push_back("movie/gameover.smk");
 	_levels["<gameover>"] = over;
 
 	loadLib("", "wetlands/c_misc/fonts.lib", true);
 	loadLib("wetlands/sound/", "wetlands/c_misc/sound.lib", true);
+	_nextLevel = "<start>";
 }
 
 void WetEngine::loadAssetsPCW() {
@@ -156,8 +154,7 @@ void WetEngine::loadAssetsPCW() {
 	if (missions->listMembers(files) == 0)
 		error("Failed to load any files from missions.lib");
 
-	Transition *intro = new Transition();
-	intro->level = "c11.mis";
+	Transition *intro = new Transition("c11.mis");
 	intro->intros.push_back("c_misc/nw_logo.smk");
 	intro->intros.push_back("c_misc/h.s");
 	intro->intros.push_back("c_misc/wet.smk");
@@ -166,8 +163,7 @@ void WetEngine::loadAssetsPCW() {
 
 	loadArcadeLevel("c11", "<gameover>", "");
 
-	Transition *over = new Transition();
-	over->level = "<quit>";
+	Transition *over = new Transition("<quit>");
 	over->intros.push_back("movie/gameover.smk");
 	_levels["<gameover>"] = over;
 
@@ -181,8 +177,7 @@ void WetEngine::loadAssetsPCG() {
 	if (missions->listMembers(files) == 0)
 		error("Failed to load any files from missions.lib");
 
-	Transition *intro = new Transition();
-	intro->level = "c31.mi_";	
+	Transition *intro = new Transition("c31.mi_");
 	intro->intros.push_back("nw_logo.smk");
 	intro->intros.push_back("h.s");
 	intro->intros.push_back("wet.smk");
@@ -191,8 +186,7 @@ void WetEngine::loadAssetsPCG() {
 
 	loadArcadeLevel("c31", "<gameover>", "");
 
-	Transition *over = new Transition();
-	over->level = "<quit>";
+	Transition *over = new Transition("<quit>");
 	over->intros.push_back("gameover.smk");
 	_levels["<gameover>"] = over;
 
@@ -205,8 +199,7 @@ void WetEngine::loadAssetsFullGame() {
 	if (missions == nullptr || missions->listMembers(files) == 0)
 		error("Failed to load any files from missions.lib");
 
-	Transition *logos = new Transition();
-	logos->level = "wetlands/main_menu.mis"; //"c11" + _difficulty + ".mi_";
+	Transition *logos = new Transition("<main_menu>");
 	logos->intros.push_back("c_misc/logo.smk");
 	logos->intros.push_back("c_misc/nw_logo.smk");
 	logos->intros.push_back("c_misc/hypnotix.smk");
@@ -214,21 +207,28 @@ void WetEngine::loadAssetsFullGame() {
 	_levels["<start>"] = logos;
 
 	Code *menu = new Code();
-	menu->name = "wetlands/main_menu.mis";
-	_levels["wetlands/main_menu.mis"] = menu;
-	_levels["wetlands/main_menu.mis"]->levelIfWin = "<intro>";
+	menu->name = "<main_menu>";
+	_levels["<main_menu>"] = menu;
+	_levels["<main_menu>"]->levelIfWin = "c11";
 
-	Transition *intro = new Transition();
-	intro->level = "c11" + _difficulty + ".mi_";
-	intro->intros.push_back("c_misc/intros.smk");
-	_levels["<intro>"] = intro;
+	loadArcadeLevel("c110", "c20", "");
+	_levels["c110.mi_"]->intros.push_front("c_misc/intros.smk");
+
+	loadArcadeLevel("c111", "c20", "");
+	_levels["c111.mi_"]->intros.push_front("c_misc/intros.smk");
+
+	loadArcadeLevel("c112", "c20", "");
+	_levels["c112.mi_"]->intros.push_front("c_misc/intros.smk");
 
-	//loadLevel("c10", "c11", "");
-	loadArcadeLevel("c11", "c20", "");
-	loadArcadeLevel("c20", "", "");
+	loadArcadeLevel("c200", "???", "");
+	loadArcadeLevel("c201", "???", "");
+	loadArcadeLevel("c202", "???", "");
+
+	//loadArcadeLevel("c20", "", "");
 
 	loadLib("", "c_misc/fonts.lib", true);
 	loadLib("sound/", "c_misc/sound.lib", true);
+	_nextLevel = "<start>";
 }
 
 void WetEngine::showCredits() {
@@ -238,7 +238,7 @@ void WetEngine::showCredits() {
 
 void WetEngine::runCode(Code *code) {
 	changeScreenMode("320x200");
-	if (code->name == "wetlands/main_menu.mis")
+	if (code->name == "<main_menu>")
 		runMainMenu(code);
 	else
 		error("invalid hardcoded level: %s", code->name.c_str());
@@ -289,4 +289,21 @@ void WetEngine::runMainMenu(Code *code) {
 	}
 }
 
+Common::String WetEngine::findNextLevel(const Transition *trans) { 
+	if (trans->nextLevel.empty())
+		error("Invalid transition!");
+	return trans->nextLevel;
+}
+
+Common::String WetEngine::findNextLevel(const Common::String &level) {
+	Common::String nextLevel;
+	if (Common::matchString(level.c_str(), "c#") || Common::matchString(level.c_str(), "c##"))
+		nextLevel = level + _difficulty + ".mi_";
+	else {
+		nextLevel = level;
+	}
+
+	return nextLevel;
+}
+
 } // End of namespace Hypno


Commit: 44474e8693ce9779faf71ba8e73713296ce0fe89
    https://github.com/scummvm/scummvm/commit/44474e8693ce9779faf71ba8e73713296ce0fe89
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-11-15T19:41:27+01:00

Commit Message:
HYPNO: fixed uninitialized values in ox and oy

Changed paths:
    engines/hypno/spider/arcade.cpp


diff --git a/engines/hypno/spider/arcade.cpp b/engines/hypno/spider/arcade.cpp
index 39111c6a22..d33c0f8c73 100644
--- a/engines/hypno/spider/arcade.cpp
+++ b/engines/hypno/spider/arcade.cpp
@@ -35,8 +35,8 @@ static const int shootOriginIndex[9][2] = {
 
 void SpiderEngine::drawShoot(const Common::Point &target) {
 	uint32 c = _pixelFormat.RGBToColor(255, 255, 255);
-	uint32 ox;
-	uint32 oy;
+	uint32 ox = 0;
+	uint32 oy = 0;
 
 	if (_arcadeMode == "YC") {
 		return; // Nothing to shoot
@@ -47,7 +47,9 @@ void SpiderEngine::drawShoot(const Common::Point &target) {
 		uint32 idx = MIN(2, target.x / (_screenW / 3)) + 3 * MIN(2, target.y / (_screenH / 3));
 		ox = 60  + shootOriginIndex[idx][0];
 		oy = 129 + shootOriginIndex[idx][1];
-	}
+	} else
+		error("Invalid arcade mode %s", _arcadeMode.c_str());
+
 	_compositeSurface->drawLine(ox, oy, target.x + 2, target.y, c);
 	_compositeSurface->drawLine(ox, oy, target.x, target.y, c);
 	_compositeSurface->drawLine(ox, oy, target.x - 2, target.y, c);
@@ -81,7 +83,9 @@ void SpiderEngine::drawPlayer() {
 			if (_playerFrameIdx >= (int)_playerFrames.size())
 				_playerFrameIdx = 0;
 		}
-	}
+	}  else
+		error("Invalid arcade mode %s", _arcadeMode.c_str());
+
 	drawImage(*_playerFrames[_playerFrameIdx], ox, oy, true);
 }
 




More information about the Scummvm-git-logs mailing list