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

mduggan noreply at scummvm.org
Sat Mar 18 00:08:40 UTC 2023


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:
b688ecd06f TETRAEDGE: Add more language paths for iOS versions
f78eb2aaa7 TETRAEDGE: Add initial scene restoring capability


Commit: b688ecd06f59e72de369499eb1caf87438c7e393
    https://github.com/scummvm/scummvm/commit/b688ecd06f59e72de369499eb1caf87438c7e393
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-03-18T08:59:19+09:00

Commit Message:
TETRAEDGE: Add more language paths for iOS versions

Changed paths:
    engines/tetraedge/te/te_core.cpp


diff --git a/engines/tetraedge/te/te_core.cpp b/engines/tetraedge/te/te_core.cpp
index f788e3202c3..864e4bd56b3 100644
--- a/engines/tetraedge/te/te_core.cpp
+++ b/engines/tetraedge/te/te_core.cpp
@@ -186,7 +186,9 @@ Common::FSNode TeCore::findFile(const Common::Path &path) const {
 		"",
 		language(),
 		"en",
-		"de-es-fr-it-en"
+		"de-es-fr-it-en",
+		"en-es-fr-de-it",
+		"de-en-es-fr-it"
 	};
 
 	// Note: the audio files for a few videos have a weird path


Commit: f78eb2aaa7f2cfd1290905f7873091aace113e9e
    https://github.com/scummvm/scummvm/commit/f78eb2aaa7f2cfd1290905f7873091aace113e9e
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-03-18T09:06:30+09:00

Commit Message:
TETRAEDGE: Add initial scene restoring capability

Changed paths:
    engines/tetraedge/detection_tables.h
    engines/tetraedge/game/application.cpp
    engines/tetraedge/game/game.cpp
    engines/tetraedge/game/in_game_scene.cpp
    engines/tetraedge/metaengine.cpp
    engines/tetraedge/metaengine.h
    engines/tetraedge/te/te_lua_thread.cpp
    engines/tetraedge/te/te_lua_thread.h
    engines/tetraedge/tetraedge.cpp


diff --git a/engines/tetraedge/detection_tables.h b/engines/tetraedge/detection_tables.h
index ae2d6f4be7a..e36394c1b69 100644
--- a/engines/tetraedge/detection_tables.h
+++ b/engines/tetraedge/detection_tables.h
@@ -39,7 +39,7 @@ const ADGameDescription GAME_DESCRIPTIONS[] = {
 		Common::UNK_LANG,
 		Common::kPlatformMacintosh,
 		ADGF_TESTING,
-		GUIO1(GAMEOPTION_CORRECT_MOVIE_ASPECT)
+		GUIO2(GAMEOPTION_CORRECT_MOVIE_ASPECT, GAMEOPTION_RESTORE_SCENES)
 	},
 
 	// iOS "free" release v1.1.3.  Not supported as we can't properly support
@@ -62,7 +62,7 @@ const ADGameDescription GAME_DESCRIPTIONS[] = {
 		Common::UNK_LANG,
 		Common::kPlatformIOS,
 		ADGF_UNSTABLE,
-		GUIO1(GAMEOPTION_CORRECT_MOVIE_ASPECT)
+		GUIO2(GAMEOPTION_CORRECT_MOVIE_ASPECT, GAMEOPTION_RESTORE_SCENES)
 	},
 
 	// GOG release
diff --git a/engines/tetraedge/game/application.cpp b/engines/tetraedge/game/application.cpp
index 6bb3e0e1d38..1f7a0a2515a 100644
--- a/engines/tetraedge/game/application.cpp
+++ b/engines/tetraedge/game/application.cpp
@@ -54,7 +54,7 @@ _drawShadows(true) {
 	// the horizontally scrolling scenes don't scroll properly.
 	// For now just default to true.
 	//
-	_ratioStretched = g_engine->gameType() == TetraedgeEngine::kSyberia2;
+	_ratioStretched = true;
 
 	TeCore *core = g_engine->getCore();
 	core->_coreNotReady = true;
diff --git a/engines/tetraedge/game/game.cpp b/engines/tetraedge/game/game.cpp
index 7081b99c19c..79a98247426 100644
--- a/engines/tetraedge/game/game.cpp
+++ b/engines/tetraedge/game/game.cpp
@@ -660,16 +660,40 @@ bool Game::initWarp(const Common::String &zone, const Common::String &scene, boo
 	_scene.setCurrentCamera(camname);
 
 	// Special hacks for certain scenes (don't blame me, original does this..)
-	if (scene == "14050") {
-		TeIntrusivePtr<TeCamera> curcamera = _scene.currentCamera();
-		const TeVector3f32 coords(1200.6f, -1937.5f, 1544.1f);
-		curcamera->setPosition(coords);
-	} else if (scene == "34610") {
-		TeIntrusivePtr<TeCamera> curcamera = _scene.currentCamera();
-		const TeVector3f32 coords(-328.243f, 340.303f, -1342.84f);
-		curcamera->setPosition(coords);
-		const TeQuaternion rot(0.003194f, 0.910923f, -0.009496f, -0.412389f);
-		curcamera->setRotation(rot);
+	if (g_engine->gameType() == TetraedgeEngine::kSyberia) {
+		if (scene == "14050") {
+			TeIntrusivePtr<TeCamera> curcamera = _scene.currentCamera();
+			const TeVector3f32 coords(1200.6f, -1937.5f, 1544.1f);
+			curcamera->setPosition(coords);
+		} else if (scene == "34610") {
+			TeIntrusivePtr<TeCamera> curcamera = _scene.currentCamera();
+			const TeVector3f32 coords(-328.243f, 340.303f, -1342.84f);
+			curcamera->setPosition(coords);
+			const TeQuaternion rot(0.003194f, 0.910923f, -0.009496f, -0.412389f);
+			curcamera->setRotation(rot);
+		}
+
+		//
+		// WORKAROUND: Fix the camera in the restored scenes
+		//
+		if (zone == "ValStreet" && scene == "11100") {
+			TeIntrusivePtr<TeCamera> cam = _scene.currentCamera();
+			cam->setProjMatrixType(3);
+			cam->setFov(0.5f);
+		} else if (zone == "ValField" && scene == "11170") {
+			TeIntrusivePtr<TeCamera> cam = _scene.currentCamera();
+			cam->setProjMatrixType(3);
+			// TODO: Is camera position right? Kate not visible..
+			// default values:
+			// -494.447998  -79.2976989  1408.5
+			// scene entrance and exit
+			// -184, -143, 1563
+			// -42, -147, 1534
+		} else if (zone == "BarRiverSide" && scene == "24020") {
+			TeIntrusivePtr<TeCamera> cam = _scene.currentCamera();
+			cam->setProjMatrixType(3);
+			cam->setFov(0.5f);
+		}
 	}
 
 	if (logicLuaExists) {
diff --git a/engines/tetraedge/game/in_game_scene.cpp b/engines/tetraedge/game/in_game_scene.cpp
index 8a2441c74e8..14fbe1e4221 100644
--- a/engines/tetraedge/game/in_game_scene.cpp
+++ b/engines/tetraedge/game/in_game_scene.cpp
@@ -135,14 +135,15 @@ bool InGameScene::addMarker(const Common::String &markerName, const Common::Stri
 		const TeVector3f32 winSize = app->getMainWindow().size();
 		float xscale = 1.0f;
 		float yscale = 1.0f;
-		if (g_engine->gameType() == TetraedgeEngine::kSyberia2) {
-			TeLayout *bglayout = _bgGui.layoutChecked("background");
-			TeSpriteLayout *rootlayout = Game::findSpriteLayoutByName(bglayout, "root");
-			if (rootlayout) {
-				TeVector2s32 bgSize = rootlayout->_tiledSurfacePtr->tiledTexture()->totalSize();
-				xscale = 800.0f / bgSize._x;
-				yscale = 600.0f / bgSize._y;
-			}
+
+		// Originally this is only done in Syberia 2, but
+		// should be fine to calculate in Syberia 1.
+		TeLayout *bglayout = _bgGui.layoutChecked("background");
+		TeSpriteLayout *rootlayout = Game::findSpriteLayoutByName(bglayout, "root");
+		if (rootlayout) {
+			TeVector2s32 bgSize = rootlayout->_tiledSurfacePtr->tiledTexture()->totalSize();
+			xscale = 800.0f / bgSize._x;
+			yscale = 600.0f / bgSize._y;
 		}
 
 		if (g_engine->getCore()->fileFlagSystemFlag("definition") == "SD") {
@@ -1765,9 +1766,6 @@ void InGameScene::update() {
 }
 
 void InGameScene::updateScroll() {
-	if (g_engine->gameType() != TetraedgeEngine::kSyberia2)
-		return;
-
 	TeLayout *bg = _bgGui.layout("background");
 	if (!bg)
 		return;
@@ -1853,11 +1851,11 @@ void InGameScene::updateViewport(int ival) {
 	const TeVector2f32 offset((0.5f - _scrollOffset.getX()) * _scrollScale.getX(),
 							_scrollOffset.getY() * _scrollScale.getY());
 	const TeVector3f32 winSize = g_engine->getApplication()->getMainWindow().size();
-	float aspectRatio = lsize.getX() / lsize.getY();
+	int x = (winSize.x() - lsize.getX()) / 2.0f + offset.getX();
+	int y = (winSize.y() - lsize.getY()) / 2.0f;
 	for (auto &cam : cameras()) {
+		float aspectRatio = lsize.getX() / lsize.getY();
 		//cam->setSomething(ival);
-		int x = (winSize.x() - lsize.getX()) / 2.0f + offset.getX();
-		int y = (winSize.y() - lsize.getY()) / 2.0f;
 		cam->viewport(x, y, lsize.getX(), lsize.getY());
 		if (g_engine->getApplication()->ratioStretched()) {
 			aspectRatio = (aspectRatio / (winSize.x() / winSize.y())) * 1.333333f;
diff --git a/engines/tetraedge/metaengine.cpp b/engines/tetraedge/metaengine.cpp
index eea67eb4513..cf56aa448bd 100644
--- a/engines/tetraedge/metaengine.cpp
+++ b/engines/tetraedge/metaengine.cpp
@@ -38,6 +38,17 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			0
 		}
 	},
+	{
+		GAMEOPTION_RESTORE_SCENES,
+		{
+			_s("Restore missing scenes"),
+			_s("Restore some scenes originally in the Windows edition"),
+			"restore_scenes",
+			true,
+			0,
+			0
+		}
+	},
 	AD_EXTRA_GUI_OPTIONS_TERMINATOR
 };
 
diff --git a/engines/tetraedge/metaengine.h b/engines/tetraedge/metaengine.h
index b5bc8ef9d07..cd6d3d7e1eb 100644
--- a/engines/tetraedge/metaengine.h
+++ b/engines/tetraedge/metaengine.h
@@ -26,6 +26,7 @@
 #include "engines/advancedDetector.h"
 
 #define GAMEOPTION_CORRECT_MOVIE_ASPECT GUIO_GAMEOPTIONS1
+#define GAMEOPTION_RESTORE_SCENES GUIO_GAMEOPTIONS2
 
 class TetraedgeMetaEngine : public AdvancedMetaEngine {
 public:
diff --git a/engines/tetraedge/te/te_lua_thread.cpp b/engines/tetraedge/te/te_lua_thread.cpp
index ec4fa047f9f..fdf892972ff 100644
--- a/engines/tetraedge/te/te_lua_thread.cpp
+++ b/engines/tetraedge/te/te_lua_thread.cpp
@@ -19,10 +19,13 @@
  *
  */
 
+#include "tetraedge/tetraedge.h"
+
 #include "tetraedge/te/te_lua_thread.h"
 #include "tetraedge/te/te_lua_context.h"
 #include "tetraedge/te/te_variant.h"
 
+#include "common/config-manager.h"
 #include "common/str.h"
 #include "common/debug.h"
 #include "common/file.h"
@@ -31,6 +34,7 @@
 #include "common/lua/lualib.h"
 
 //#define TETRAEDGE_LUA_DEBUG 1
+//#define TETRAEDGE_RESTORE_EXPERIMENTAL 1
 
 namespace Tetraedge {
 
@@ -157,31 +161,73 @@ void TeLuaThread::execute(const Common::String &fname, const TeVariant &p1, cons
 	}
 }
 
-void TeLuaThread::executeFile(const Common::FSNode &node) {
-	Common::File scriptFile;
-	if (!scriptFile.open(node)) {
-		warning("TeLuaThread::executeFile: File %s can't be opened", node.getName().c_str());
-		return;
-	}
-
-#ifdef TETRAEDGE_LUA_DEBUG
-	debug("TeLuaThread::executeFile: %s", node.getName().c_str());
-#endif
-
-	int64 fileLen = scriptFile.size();
-	char *buf = new char[fileLen + 1];
-	scriptFile.read(buf, fileLen);
-	buf[fileLen] = 0;
-	scriptFile.close();
+void TeLuaThread::applyScriptWorkarounds(char *buf, const Common::String &fileName) {
+	char *fixline;
 
 	//
 	// WORKAROUND: Some script files have rogue ";" lines in them with nothing
 	// else, and ScummVM common lua version doesn't like them. Clean those up.
 	//
-	char *fixline = strstr(buf, "\n\t;");
+	fixline = strstr(buf, "\n\t;");
 	if (fixline)
 		fixline[2] = '\t';
 
+	//
+	// Restore Syberia 1 scenes by patching up the scripts
+	//
+	if (g_engine->gameType() == TetraedgeEngine::kSyberia && ConfMan.getBool("restore_scenes")) {
+		if (fileName.contains("Logic11070.lua")) {
+			// Allow Kate to enter scene 11100
+			fixline = strstr(buf, "\"11110\"");
+			if (fixline) // 11110 -> 11100
+				fixline[4] = '0';
+			fixline = strstr(buf, "\"11110\"");
+			if (fixline)
+				fixline[4] = '0';
+		} else if (fileName.contains("Logic11110.lua")) {
+			// Allow Kate to enter scene 11100
+			fixline = strstr(buf, "\"11070\"");
+			if (fixline) // 11070 -> 11100
+				strncpy(fixline + 3, "10 ", 2);
+			fixline = strstr(buf, "\"11070\"");
+			if (fixline)
+				strncpy(fixline + 3, "10 ", 2);
+#ifdef TETRAEDGE_RESTORE_EXPERIMENTAL
+		// The 11170 scene is not usable yet - it seems
+		// to not have any free move zone data?
+		} else if (fileName.contains("Logic11160.lua")) {
+			fixline = strstr(buf, "\"11180\"");
+			if (fixline) // 11180 -> 11170
+				fixline[4] = '7';
+			fixline = strstr(buf, "\"11180\"");
+			if (fixline)
+				fixline[4] = '7';
+		} else if (fileName.contains("Logic11180.lua")) {
+			fixline = strstr(buf, "\"11160\"");
+			if (fixline) // 11160 -> 11170
+				fixline[4] = '7';
+			fixline = strstr(buf, "\"11160\"");
+			if (fixline)
+				fixline[4] = '7';
+#endif
+		} else if (fileName.contains("Logic11100.lua")) {
+			fixline = strstr(buf, " , 55 ,70, ");
+			if (fixline) // 70 -> 65 to fix speech marker location
+				strncpy(fixline + 7, "65 ", 2);
+		} else if (fileName.contains("Int11100.lua") || fileName.contains("Int11170.lua")) {
+			fixline = strstr(buf, "ratio = 16/9,");
+			if (fixline) // 16/9 -> 4/3
+				strncpy(fixline + 8, "4/3 ", 4);
+			fixline = strstr(buf, "ratioMode = PanScan,");
+			if (fixline)
+				strncpy(fixline + 9, "=LetterBox", 10);
+		} else if (fileName.contains("For11100.lua") || fileName.contains("For11170.lua")) {
+			fixline = strstr(buf, "size = {1.0");
+			if (fixline) // 1.0 -> 1.5
+				fixline[10] = '5';
+		}
+	}
+
 	//
 	// WORKAROUND: Syberia 2 constantly re-seeds the random number generator.
 	// This fails on ScummVM Lua because os.time() returns a large Number and
@@ -204,11 +250,28 @@ void TeLuaThread::executeFile(const Common::FSNode &node) {
 	fixline = strstr(buf, "OBJECT_10050_Inventory_obj_coeurmec_Taketoun ");
 	if (fixline) {
 		// Taketoun -> Taken
-		fixline[40] = 'n';
-		fixline[41] = ' ';
-		fixline[42] = ' ';
-		fixline[43] = ' ';
+		strncpy(fixline + 40, "n   ", 4);
 	}
+}
+
+void TeLuaThread::executeFile(const Common::FSNode &node) {
+	Common::File scriptFile;
+	if (!scriptFile.open(node)) {
+		warning("TeLuaThread::executeFile: File %s can't be opened", node.getName().c_str());
+		return;
+	}
+
+#ifdef TETRAEDGE_LUA_DEBUG
+	debug("TeLuaThread::executeFile: %s", node.getName().c_str());
+#endif
+
+	int64 fileLen = scriptFile.size();
+	char *buf = new char[fileLen + 1];
+	scriptFile.read(buf, fileLen);
+	buf[fileLen] = 0;
+	scriptFile.close();
+
+	applyScriptWorkarounds(buf, node.getName());
 
 	_lastResumeResult = luaL_loadbuffer(_luaThread, buf, fileLen, node.getPath().c_str());
 	if (_lastResumeResult) {
diff --git a/engines/tetraedge/te/te_lua_thread.h b/engines/tetraedge/te/te_lua_thread.h
index 1982e1fee67..0b55cd6b59a 100644
--- a/engines/tetraedge/te/te_lua_thread.h
+++ b/engines/tetraedge/te/te_lua_thread.h
@@ -64,6 +64,8 @@ public:
 private:
 	void _resume(int nargs);
 
+	void applyScriptWorkarounds(char *buf, const Common::String &fileName);
+
 	lua_State *_luaThread;
 	uint64 _resumeCount;
 	int _bottomRef;
diff --git a/engines/tetraedge/tetraedge.cpp b/engines/tetraedge/tetraedge.cpp
index 4ef5aa6ee47..bbcec02c1d0 100644
--- a/engines/tetraedge/tetraedge.cpp
+++ b/engines/tetraedge/tetraedge.cpp
@@ -219,6 +219,7 @@ void TetraedgeEngine::registerConfigDefaults() {
 
 	ConfMan.registerDefault("disable_shadows", false);
 	ConfMan.registerDefault("correct_movie_aspect", true);
+	ConfMan.registerDefault("restore_scenes", false);
 }
 
 




More information about the Scummvm-git-logs mailing list