[Scummvm-git-logs] scummvm master -> c515216cd367a1de219d119986bb202177afe36f

neuromancer noreply at scummvm.org
Sat Dec 11 11:50:33 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:
67e8a784ca HYPNO: fixed some scene transitions and better handling of variable reset in spider
c515216cd3 PRIVATE: fixed endianness issues when a palette is copied


Commit: 67e8a784caac43ef2afec106b8e431a3a1d11747
    https://github.com/scummvm/scummvm/commit/67e8a784caac43ef2afec106b8e431a3a1d11747
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-12-11T12:48:50+01:00

Commit Message:
HYPNO: fixed some scene transitions and better handling of variable reset in spider

Changed paths:
    engines/hypno/hypno.cpp
    engines/hypno/scene.cpp
    engines/hypno/spider/spider.cpp
    engines/hypno/spider/talk.cpp


diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index cb5399092c..b64e07e40d 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -136,6 +136,8 @@ Common::Error HypnoEngine::run() {
 
 	// Main event loop
 	loadAssets();
+	//resetSceneState();
+
 	assert(!_nextLevel.empty());
 	while (!shouldQuit()) {
 		debug("nextLevel: %s", _nextLevel.c_str());
@@ -180,7 +182,6 @@ void HypnoEngine::runLevel(Common::String &name) {
 		runCode((Code *) _levels[name]);
 	} else if (_levels[name]->type == SceneLevel) {
 		debugC(1, kHypnoDebugScene, "Executing scene level %s with next level: %s", name.c_str(), _levels[name]->levelIfWin.c_str());
-		resetSceneState();
 		changeScreenMode("640x480");
 		runScene((Scene *) _levels[name]);
 	} else {
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index a3e2a6fb8f..8b0eec7523 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -400,6 +400,12 @@ void HypnoEngine::runScene(Scene *scene) {
 				_videosPlaying.empty() && 
 				_nextSequentialVideoToPlay.empty() && 
 				_nextParallelVideoToPlay.empty()) {
+				if (checkLevelWon()) {
+					debugC(1, kHypnoDebugScene, "Resetting level variables");
+					resetSceneState();
+				}
+				_sceneState["GS_LEVELCOMPLETE"] = 0;
+
 				debugC(1, kHypnoDebugScene, "Wining level and jumping to %s", scene->levelIfWin.c_str());
 				if (_nextLevel.empty()) {
 					assert(!scene->levelIfWin.empty());
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index 2854a9e687..f92e57ca8e 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -74,7 +74,7 @@ void SpiderEngine::loadAssetsFullGame() {
 	sc->hots[1].actions.push_back(cl);
 
 	loadSceneLevel("options.mi_", "", prefix);
-	loadSceneLevel("levels.mi_", "", prefix);
+	loadSceneLevel("levels.mi_", "mv0t.mi_", prefix);
 	loadSceneLevel("combmenu.mi_", "", prefix);
 
 	loadSceneLevel("mv0t.mi_", "roof.mi_", prefix);
@@ -152,8 +152,9 @@ void SpiderEngine::loadAssetsFullGame() {
 	cl = new ChangeLevel("c4"); // depens on the difficulty
 	sc->hots[4].actions.push_back(cl);
 
-	loadSceneLevel("int_roof.mi_", "", prefix);
+	loadSceneLevel("int_roof.mi_", "recept.mi_", prefix);
 	sc = (Scene *) _levels["int_roof.mi_"];
+	sc->intros.push_back("cine/leapup.smk");
 	Overlay *over = (Overlay*) sc->hots[0].actions[2];
 	over->path = "int_alof\\ROOFB1.SMK"; // seems to be a bug?
 
@@ -161,6 +162,7 @@ void SpiderEngine::loadAssetsFullGame() {
 	
 	Transition *boil_selector = new Transition("boiler.mi_", "boilhard.mi_");
 	_levels["<boil_selector>"] = boil_selector;
+	_levels["<boil_selector>"]->intros.push_back("spider/cine/leapdown.smk");
 
 	loadSceneLevel("boiler.mi_", "", prefix);
 	sc = (Scene *) _levels["boiler.mi_"];
@@ -179,13 +181,15 @@ void SpiderEngine::loadAssetsFullGame() {
 	sc->hots[2].actions.push_back(cl);
 
 	loadSceneLevel("alverofh.mi_", "", prefix);
-	loadSceneLevel("recept.mi_", "", prefix);
+	loadSceneLevel("alveroff.mi_", "", prefix);
+	Transition *alveroff_selector = new Transition("alveroff.mi_", "alverofh.mi_");
+	_levels["<alveroff_selector>"] = alveroff_selector;
 
+	loadSceneLevel("recept.mi_", "", prefix);
 	sc = (Scene *) _levels["recept.mi_"];
 	over = (Overlay*) sc->hots[0].actions[2];
 	over->path = "int_alof\\rec0B1.SMK"; // seems to be a bug?
 
-	loadSceneLevel("alveroff.mi_", "", prefix);
 
 	loadArcadeLevel("c4.mi_", "c2", prefix);
 	loadArcadeLevel("c2.mi_", "decide4.mi_", prefix);
@@ -274,8 +278,8 @@ void SpiderEngine::loadAssetsFullGame() {
 	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);
+	Global *gl = new Global("GS_LEVELWON", "TURNON");
+	sc->hots[5].actions.push_back(gl);
 	cl = new ChangeLevel("mainmenu.mi_");
 	sc->hots[6].actions.push_back(cl);
 
diff --git a/engines/hypno/spider/talk.cpp b/engines/hypno/spider/talk.cpp
index c133d67af7..70ead8dc37 100644
--- a/engines/hypno/spider/talk.cpp
+++ b/engines/hypno/spider/talk.cpp
@@ -166,6 +166,13 @@ void SpiderEngine::leftClickedConversation(const Common::Point &mousePos) {
 			loadImage(a->background, a->backgroundPos.x, a->backgroundPos.y, false);
 		}
 	}
+
+	if (_sceneState["GS_LEVELCOMPLETE"]) {
+		debugC(1, kHypnoDebugScene, "Level is complete, cleaning variables");
+		resetSceneState();
+		_sceneState["GS_LEVELCOMPLETE"] = 1;
+	}
+
 	if (videos.size() > 0)
 		runIntros(videos);
 }


Commit: c515216cd367a1de219d119986bb202177afe36f
    https://github.com/scummvm/scummvm/commit/c515216cd367a1de219d119986bb202177afe36f
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-12-11T12:48:50+01:00

Commit Message:
PRIVATE: fixed endianness issues when a palette is copied

Changed paths:
    engines/private/private.cpp


diff --git a/engines/private/private.cpp b/engines/private/private.cpp
index 2aaf235367..18fe32076c 100644
--- a/engines/private/private.cpp
+++ b/engines/private/private.cpp
@@ -1384,12 +1384,19 @@ void PrivateEngine::drawScreen() {
 		g_system->copyRectToScreen(frame->getPixels(), frame->pitch, center.x, center.y, frame->w, frame->h);	
 	} else {
 		const byte *cPalette = (const byte *) _compositeSurface->getPalette();
-		for (int c = 0; c < 256; c++)
-			g_system->getPaletteManager()->setPalette(cPalette + 4*c, c, 1);
-		byte newPalette[3 * 256];
-		g_system->getPaletteManager()->grabPalette((byte *) &newPalette, 0, 256);
-		
+
+		byte newPalette[768];
+		for (int c = 0; c < 256; c++) { // This avoids any endianness issues
+				newPalette[c * 3 + 0] = cPalette[c * 4 + 0];
+				newPalette[c * 3 + 1] = cPalette[c * 4 + 1];
+				newPalette[c * 3 + 2] = cPalette[c * 4 + 2];
+		}
+
+		g_system->getPaletteManager()->setPalette(newPalette, 0, 256);
+
 		if (_mode == 1) {
+			// We can reuse newPalette
+			g_system->getPaletteManager()->grabPalette((byte *) &newPalette, 0, 256);
 			drawScreenFrame((byte *) &newPalette);
 		}
 




More information about the Scummvm-git-logs mailing list