[Scummvm-git-logs] scummvm master -> 7a991216f66a7f722941903006f457ee3dd64677

neuromancer noreply at scummvm.org
Sun Dec 19 18:49:49 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:
7a991216f6 HYPNO: implemented fuse puzzle in hard mode and fixed more scenes in spider


Commit: 7a991216f66a7f722941903006f457ee3dd64677
    https://github.com/scummvm/scummvm/commit/7a991216f66a7f722941903006f457ee3dd64677
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-12-19T19:49:18+01:00

Commit Message:
HYPNO: implemented fuse puzzle in hard mode and fixed more scenes in spider

Changed paths:
    engines/hypno/hypno.h
    engines/hypno/scene.cpp
    engines/hypno/spider/hard.cpp
    engines/hypno/spider/spider.cpp


diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index f8ebf20ddc..013423aed5 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -300,6 +300,10 @@ private:
 	void runNote(Code *code);
 	void runFusePanel(Code *code);
 	void runRecept(Code *code);
+	void runOffice(Code *code);
+
+	bool isFuseRust = true;
+	bool isFuseUnreadable = false;
 };
 
 class BoyzEngine : public HypnoEngine {
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index f73f284f3b..b4b53bff28 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -90,6 +90,7 @@ void HypnoEngine::resetSceneState() {
 			_sceneState[sceneVariables[i]] = 0;
 		i++;
 	}
+	_intros.clear();
 }
 
 bool HypnoEngine::checkSceneCompleted() {
@@ -472,7 +473,6 @@ void HypnoEngine::runScene(Scene *scene) {
 	_nextParallelVideoToPlay.clear();
 	_nextSequentialVideoToPlay.clear();
 	_escapeSequentialVideoToPlay.clear();
-	_intros.clear();
 }
 
 void HypnoEngine::showConversation() { error("Not implemented"); }
diff --git a/engines/hypno/spider/hard.cpp b/engines/hypno/spider/hard.cpp
index 3a739cadfe..a79600e3f5 100644
--- a/engines/hypno/spider/hard.cpp
+++ b/engines/hypno/spider/hard.cpp
@@ -35,6 +35,8 @@ void SpiderEngine::runCode(Code *code) {
 		runFusePanel(code);
 	else if (code->name == "<recept>")
 		runRecept(code);
+	else if (code->name == "<office>")
+		runOffice(code);
 	else if (code->name == "<credits>")
 		showCredits();
 	else
@@ -338,6 +340,17 @@ void SpiderEngine::runRecept(Code *code) {
 	_nextLevel = "recept.mi_";
 }
 
+void SpiderEngine::runOffice(Code *code) {
+
+	if (!_sceneState["GS_SWITCH6"]) { // lights off
+		MVideo v("spider/cine/toodark.smk", Common::Point(0, 0), false, false, false);
+		runIntro(v);
+		_nextLevel = "recept.mi_";
+		return;
+	}
+	_nextLevel = "<alveroff_selector>";
+}
+
 void SpiderEngine::runFusePanel(Code *code) {
 	changeScreenMode("640x480");
 	Common::Point mousePos;
@@ -347,10 +360,27 @@ void SpiderEngine::runFusePanel(Code *code) {
 	Common::Rect fuses(363, 52, 598, 408);
 	Common::Rect back(0, 446, 640, 480);
 
-	//MVideo *v;
-	loadImage("spider/int_alof/fuse.smk", 0, 0, false);
+	if (_sceneState["GS_PUZZLELEVEL"]) { // hard
+		if (isFuseRust) {
+			Common::String intro = "spider/cine/spv029s.smk"; 
+			if (!_intros.contains(intro)) {
+				MVideo v(intro, Common::Point(0, 0), false, false, false);
+				runIntro(v);
+				_intros[intro] = true;
+			}
+
+			loadImage("spider/int_alof/fuserust.smk", 0, 0, false);
+		} else if (isFuseUnreadable)
+			loadImage("spider/int_alof/fuseclea.smk", 0, 0, false);
+		else
+			loadImage("spider/int_alof/fuseread.smk", 0, 0, false);
+
+	} else {
+		isFuseRust = false;
+		isFuseUnreadable = false;
+		loadImage("spider/int_alof/fuse.smk", 0, 0, false);
+	}
 
-	//playVideo(*v);
 	while (!shouldQuit()) {
 
 		while (g_system->getEventManager()->pollEvent(event)) {
@@ -363,6 +393,28 @@ void SpiderEngine::runFusePanel(Code *code) {
 				break;
 
 			case Common::EVENT_LBUTTONDOWN:
+				if (back.contains(mousePos)) {
+					_nextLevel = code->levelIfWin;
+					return;
+				}
+
+				if (isFuseRust && _sceneState["GS_SWITCH8"]) {
+					MVideo v("spider/cine/spv031s.smk", Common::Point(0, 0), false, false, false);
+					runIntro(v);
+					isFuseRust = false;
+					isFuseUnreadable = true;
+					loadImage("spider/int_alof/fuseclea.smk", 0, 0, false);
+				} else if (isFuseUnreadable && _sceneState["GS_SWITCH9"]) {
+					MVideo v("spider/cine/spv032s.smk", Common::Point(0, 0), false, false, false);
+					runIntro(v);
+					isFuseRust = false;
+					isFuseUnreadable = false;
+					loadImage("spider/int_alof/fuseread.smk", 0, 0, false);
+				}
+
+				if (isFuseRust || isFuseUnreadable)
+					break;
+
 				if (fuses.contains(mousePos)) {
 				    int x = (mousePos.x - 364) / (235 / 2.);
 				    int y = (mousePos.y - 54) / (355 / 10.);
@@ -372,15 +424,16 @@ void SpiderEngine::runFusePanel(Code *code) {
 						_sceneState["GS_SWITCH1"] = !_sceneState["GS_SWITCH1"]; 
 					} else if (s == 2) {
 						_sceneState["GS_SWITCH2"] = !_sceneState["GS_SWITCH2"];
+					} else if (s == 18) {
+						_sceneState["GS_SWITCH3"] = !_sceneState["GS_SWITCH3"];
 					} else if (s == 12) {
 						_sceneState["GS_SWITCH4"] = !_sceneState["GS_SWITCH4"];
 					} else if (s == 13) {
 						_sceneState["GS_SWITCH5"] = !_sceneState["GS_SWITCH5"];
+					} else if (s == 10) {
+						_sceneState["GS_SWITCH6"] = !_sceneState["GS_SWITCH6"];
 					}
 
-				} else if (back.contains(mousePos)) {
-					_nextLevel = code->levelIfWin;
-					return;
 				}
 				break;
 
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index 4c6983db13..799c2e7d4c 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -156,12 +156,12 @@ void SpiderEngine::loadAssetsFullGame() {
 	sc = (Scene *) _levels["int_roof.mi_"];
 	cl = new ChangeLevel("<recept>");
 	sc->hots[1].actions.push_back(cl);
-	cl = new ChangeLevel("<boil_selector>");
+	cl = new ChangeLevel("<boil_selector_1>");
 	sc->hots[2].actions.push_back(cl);
 	Overlay *over = (Overlay*) sc->hots[0].actions[2];
 	over->path = "int_alof\\ROOFB1.SMK"; // seems to be a bug?
 
-	loadSceneLevel("alofintr.mi_", "<boil_selector>", prefix);
+	loadSceneLevel("alofintr.mi_", "<boil_selector_1>", prefix);
 	sc = (Scene *) _levels["alofintr.mi_"];
 	sc->intros.push_back("cine/swc002as.smk");
 	// This is necessary, for some reason
@@ -175,10 +175,15 @@ void SpiderEngine::loadAssetsFullGame() {
 	sc->hots[2].actions.push_back(gl);
 	gl = new Global("GS_SWITCH5", "TURNON");			// Side B door
 	sc->hots[2].actions.push_back(gl);
-	
-	Transition *boil_selector = new Transition("boiler.mi_", "boilhard.mi_");
-	_levels["<boil_selector>"] = boil_selector;
-	_levels["<boil_selector>"]->intros.push_back("spider/cine/leapdown.smk");
+	gl = new Global("GS_SWITCH6", "TURNON");			// Office light
+	sc->hots[2].actions.push_back(gl);
+
+	Transition *boil_selector_1 = new Transition("boiler.mi_", "boilhard.mi_");
+	_levels["<boil_selector_1>"] = boil_selector_1;
+	_levels["<boil_selector_1>"]->intros.push_back("spider/cine/leapdown.smk");
+
+	Transition *boil_selector_2 = new Transition("boiler.mi_", "boilhard.mi_");
+	_levels["<boil_selector_2>"] = boil_selector_2;
 
 	loadSceneLevel("boiler.mi_", "", prefix);
 	sc = (Scene *) _levels["boiler.mi_"];
@@ -187,8 +192,12 @@ void SpiderEngine::loadAssetsFullGame() {
 
 	Code *fuse_panel = new Code();
 	fuse_panel->name = "<fuse_panel>";
-	fuse_panel->levelIfWin = "boiler.mi_";
+	fuse_panel->levelIfWin = "<boil_selector_2>";
 	_levels["<fuse_panel>"] = fuse_panel;
+
+	Code *office = new Code();
+	office->name = "<office>";
+	_levels["<office>"] = office;
 	
 	cl = new ChangeLevel("<back_roof_1>");
 	sc->hots[2].actions.push_back(cl);
@@ -205,9 +214,12 @@ void SpiderEngine::loadAssetsFullGame() {
 	over = (Overlay*) sc->hots[0].actions[2];
 	over->path = "int_alof\\BOILB1.SMK"; // seems to be a bug?
 
-	cl = new ChangeLevel("int_roof.mi_");
+	cl = new ChangeLevel("<back_roof_1>");
 	sc->hots[2].actions.push_back(cl);
 
+	cl = new ChangeLevel("<fuse_panel>");
+	sc->hots[3].actions.push_back(cl);
+
 	loadSceneLevel("alverofh.mi_", "", prefix);
 	loadSceneLevel("alveroff.mi_", "", prefix);
 	Transition *alveroff_selector = new Transition("alveroff.mi_", "alverofh.mi_");
@@ -226,6 +238,16 @@ void SpiderEngine::loadAssetsFullGame() {
 	cl = new ChangeLevel("<back_roof_2>");
 	sc->hots[2].actions.push_back(cl);
 
+	cl = new ChangeLevel("<door_a>");
+	sc->hots[3].actions.push_back(cl);
+
+	cl = new ChangeLevel("<office>");
+	sc->hots[4].actions.push_back(cl);
+
+	Transition *door_a = new Transition("<over_apt_5>");
+	door_a->intros.push_back("spider/cine/iobs002s.smk");
+	_levels["<door_a>"] = door_a;
+
 	Transition *back_roof_2 = new Transition("int_roof.mi_");
 	_levels["<back_roof_2>"] = back_roof_2;
 	_levels["<back_roof_2>"]->intros.push_back("spider/cine/recpout.smk");
@@ -261,16 +283,6 @@ void SpiderEngine::loadAssetsFullGame() {
 	loadArcadeLevel("c3h.mi_", "", prefix);
 
 	loadSceneLevel("movie2.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_";
-	// bankHard->intros.push_back("spider/cine/bals003s.smk");
-	// _levels["<bank_hard>"] = bankHard;
 
 	// Easy arcade levels
 
@@ -376,8 +388,8 @@ void SpiderEngine::loadAssetsFullGame() {
 	Transition *over_apt_5 = new Transition("tryagain.mi_");
 	over_apt_5->intros.push_back("spider/cine/apts05as.smk");
 	_levels["<over_apt_5>"] = over_apt_5;
-
-	_nextLevel = "decide3.mi_";
+	
+	_nextLevel = "<start>";
 }
 
 void SpiderEngine::loadAssetsDemo() {




More information about the Scummvm-git-logs mailing list