[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