[Scummvm-git-logs] scummvm master -> 3a8357e2261740b2c691294c83247c2e35ad88bf

mduggan noreply at scummvm.org
Tue Mar 7 07:10:47 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:
8393c80aba TETRAEDGE: Make continue button work from main menu
3a8357e226 TETRAEDGE: Fix Syberia 2 credits and main menu aspect ratios


Commit: 8393c80abaf62f11c79945ad31a09a5c69c75b39
    https://github.com/scummvm/scummvm/commit/8393c80abaf62f11c79945ad31a09a5c69c75b39
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-03-07T16:10:21+09:00

Commit Message:
TETRAEDGE: Make continue button work from main menu

Changed paths:
    engines/tetraedge/game/main_menu.cpp
    engines/tetraedge/tetraedge.cpp
    engines/tetraedge/tetraedge.h


diff --git a/engines/tetraedge/game/main_menu.cpp b/engines/tetraedge/game/main_menu.cpp
index 5d167871cd3..19504ac25d0 100644
--- a/engines/tetraedge/game/main_menu.cpp
+++ b/engines/tetraedge/game/main_menu.cpp
@@ -38,7 +38,7 @@
 
 namespace Tetraedge {
 
-static const char *LAST_SAVE_CONF = "lastSaveSlot";
+static const char *LAST_SAVE_CONF = "last_save_slot";
 
 MainMenu::MainMenu() : _entered(false), _confirmingTuto(false) {
 	_newGameConfirm.onButtonYesSignal().add(this, &MainMenu::onNewGameConfirmed);
@@ -184,12 +184,9 @@ void MainMenu::tryDisableButton(const Common::String &btnName) {
 
 bool MainMenu::onContinueGameButtonValidated() {
 	Application *app = g_engine->getApplication();
-	const Common::String lastSave = ConfMan.get(LAST_SAVE_CONF);
-	if (!lastSave.empty()) {
-		int saveSlot = lastSave.asUint64();
-		g_engine->loadGameState(saveSlot);
-		return false;
-	}
+	int lastSave = ConfMan.hasKey(LAST_SAVE_CONF) ? ConfMan.getInt(LAST_SAVE_CONF) : -1;
+	if (lastSave >= 0)
+		g_engine->loadGameState(lastSave);
 
 	tryDisableButton("newGameButton");
 	tryDisableButton("continueGameButton");
@@ -263,7 +260,7 @@ bool MainMenu::onNewGameButtonValidated() {
 	// with "menus/confirm/confirmNewGame.lua"
 	// because only one save is allowed.  We just clear last
 	// save slot number and go ahead and start.
-	ConfMan.set(LAST_SAVE_CONF, "");
+	ConfMan.setInt(LAST_SAVE_CONF, -1);
 	onNewGameConfirmed();
 	return false;
 }
diff --git a/engines/tetraedge/tetraedge.cpp b/engines/tetraedge/tetraedge.cpp
index 5af1fe3b805..2e66a765e87 100644
--- a/engines/tetraedge/tetraedge.cpp
+++ b/engines/tetraedge/tetraedge.cpp
@@ -72,7 +72,7 @@ TetraedgeEngine::~TetraedgeEngine() {
 }
 
 /*static*/
-Common::StringArray TetraedgeEngine::splitString (const Common::String &text, char c) {
+Common::StringArray TetraedgeEngine::splitString(const Common::String &text, char c) {
 	Common::StringArray values;
 
 	Common::String str = text;
@@ -302,6 +302,15 @@ Graphics::RendererType TetraedgeEngine::preferredRendererType() const {
 	return matchingRendererType;
 }
 
+Common::Error TetraedgeEngine::saveGameState(int slot, const Common::String &desc, bool isAutosave) {
+	Common::Error result = Engine::saveGameState(slot, desc, isAutosave);
+	if (result.getCode() == Common::kNoError) {
+		ConfMan.setInt("last_save_slot", slot);
+		ConfMan.flushToDisk();
+	}
+	return result;
+}
+
 /*static*/
 void TetraedgeEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
 	g_engine->getApplication()->getSavegameThumbnail(thumb);
diff --git a/engines/tetraedge/tetraedge.h b/engines/tetraedge/tetraedge.h
index 49e9ff58fe7..6492b96c0db 100644
--- a/engines/tetraedge/tetraedge.h
+++ b/engines/tetraedge/tetraedge.h
@@ -111,6 +111,8 @@ public:
 	 */
 	Common::Error syncGame(Common::Serializer &s);
 
+	Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave) override;
+
 	Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override {
 		Common::Serializer s(nullptr, stream);
 		return syncGame(s);


Commit: 3a8357e2261740b2c691294c83247c2e35ad88bf
    https://github.com/scummvm/scummvm/commit/3a8357e2261740b2c691294c83247c2e35ad88bf
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-03-07T16:10:21+09:00

Commit Message:
TETRAEDGE: Fix Syberia 2 credits and main menu aspect ratios

Changed paths:
    engines/tetraedge/game/credits.cpp
    engines/tetraedge/game/credits.h
    engines/tetraedge/game/main_menu.cpp
    engines/tetraedge/te/te_i_layout.h
    engines/tetraedge/te/te_layout.cpp


diff --git a/engines/tetraedge/game/credits.cpp b/engines/tetraedge/game/credits.cpp
index 282c97230ea..c7dd4209830 100644
--- a/engines/tetraedge/game/credits.cpp
+++ b/engines/tetraedge/game/credits.cpp
@@ -111,15 +111,39 @@ void Credits::enter(bool returnToOptions) {
 			bgPosAnim->_callbackMethod = &TeLayout::setPosition;
 			bgPosAnim->play();
 		}
+	} else {
+		// Syberia 2
+		TeLayout *foreground = _gui.layoutChecked("foreground1");
+		_curveAnim._callbackObj = foreground;
+		_curveAnim._callbackMethod = &TeLayout::setColor;
+		_curveAnim.play();
+		_gui.buttonLayout("quitButton")->onMouseClickValidated().add(this, &Credits::onQuitButton);
+
+		//
+		// WORKAROUND: These are set to PanScan ratio 1.0, but with our code
+		// but that shrinks them down to pillarboxed.  Force back to full size.
+		//
+		_gui.layoutChecked("foreground1")->setRatioMode(TeILayout::RATIO_MODE_NONE);
+		_gui.layoutChecked("foreground")->setRatioMode(TeILayout::RATIO_MODE_NONE);
 	}
+
 	_curveAnim.onFinished().add(this, &Credits::onBackgroundAnimFinished);
 }
 
 void Credits::leave() {
-	_curveAnim.stop();
+	//
+	// Slightly different to original.. stop *all* position/anchor animations
+	// - Syberia 2 only stops certain animations but this works for both.
+	//
 	for (auto &anim : _gui.layoutPositionLinearAnimations()) {
 		anim._value->stop();
 	}
+	for (auto &anim : _gui.layoutAnchorLinearAnimations()) {
+		anim._value->stop();
+	}
+	_curveAnim.stop();
+	_curveAnim.onFinished().remove(this, &Credits::onBackgroundAnimFinished);
+
 	if (_gui.loaded()) {
 		Application *app = g_engine->getApplication();
 		app->captureFade();
@@ -135,7 +159,6 @@ void Credits::leave() {
 			app->mainMenu().enter();
 		}
 		app->fade();
-		_curveAnim.onFinished().remove(this, &Credits::onBackgroundAnimFinished);
 	}
 }
 
@@ -145,6 +168,35 @@ bool Credits::onAnimFinished() {
 }
 
 bool Credits::onBackgroundAnimFinished() {
+	if (g_engine->gameType() == TetraedgeEngine::kSyberia)
+		return onBackgroundAnimFinishedSyb1();
+	else
+		return onBackgroundAnimFinishedSyb2();
+}
+
+bool Credits::onBackgroundAnimFinishedSyb2() {
+	const TeColor white = TeColor(0xff, 0xff, 0xff, 0xff);
+	const TeColor clear = TeColor(0xff, 0xff, 0xff, 0);
+	if (_curveAnim._startVal != white) {
+		_curveAnim._startVal = white;
+		_curveAnim._endVal = clear;
+		TeSpriteLayout *fgLayout = _gui.spriteLayout("foreground");
+		TeVariant fgFile = _gui.value(Common::String::format("foregrounds%d", _animCounter));
+		fgLayout->load(fgFile.toString());
+	} else {
+		_curveAnim._startVal = clear;
+		_curveAnim._endVal = white;
+		TeSpriteLayout *fgLayout = _gui.spriteLayout("foreground1");
+		TeVariant fgFile = _gui.value(Common::String::format("foregrounds%d", _animCounter));
+		fgLayout->load(fgFile.toString());
+	}
+
+	_curveAnim.play();
+	_animCounter++;
+	return false;
+}
+
+bool Credits::onBackgroundAnimFinishedSyb1() {
 	_animCounter++;
 	TeLayout *backgrounds = _gui.layoutChecked("Backgrounds");
 	if (_animCounter < backgrounds->childCount()) {
@@ -175,10 +227,12 @@ bool Credits::onPadButtonUp(uint button) {
 }
 
 bool Credits::onQuitButton() {
-	TeCurveAnim2<TeLayout, TeVector3f32> *anim1 = _gui.layoutPositionLinearAnimation("scrollTextPositionAnim");
-	anim1->stop();
-	TeCurveAnim2<TeLayout, TeVector3f32> *anim2 = _gui.layoutAnchorLinearAnimation("scrollTextAnchorAnim");
-	anim2->stop();
+	if (g_engine->gameType() == TetraedgeEngine::kSyberia) {
+		TeCurveAnim2<TeLayout, TeVector3f32> *anim1 = _gui.layoutPositionLinearAnimation("scrollTextPositionAnim");
+		anim1->stop();
+		TeCurveAnim2<TeLayout, TeVector3f32> *anim2 = _gui.layoutAnchorLinearAnimation("scrollTextAnchorAnim");
+		anim2->stop();
+	}
 	leave();
 	return true;
 }
diff --git a/engines/tetraedge/game/credits.h b/engines/tetraedge/game/credits.h
index c39740ba877..d7d783b1595 100644
--- a/engines/tetraedge/game/credits.h
+++ b/engines/tetraedge/game/credits.h
@@ -36,12 +36,14 @@ public:
 	void enter(bool flag);
 	void leave();
 
+private:
 	bool onAnimFinished();
 	bool onBackgroundAnimFinished();
+	bool onBackgroundAnimFinishedSyb1();
+	bool onBackgroundAnimFinishedSyb2();
 	bool onPadButtonUp(uint button);
 	bool onQuitButton();
 
-private:
 	TeTimer _timer;
 	TeLuaGUI _gui;
 	TeCurveAnim2<Te3DObject2, TeColor> _curveAnim;
diff --git a/engines/tetraedge/game/main_menu.cpp b/engines/tetraedge/game/main_menu.cpp
index 19504ac25d0..572b0afc9a6 100644
--- a/engines/tetraedge/game/main_menu.cpp
+++ b/engines/tetraedge/game/main_menu.cpp
@@ -50,6 +50,14 @@ MainMenu::MainMenu() : _entered(false), _confirmingTuto(false) {
 
 void MainMenu::enter() {
 	Application *app = g_engine->getApplication();
+
+	if (g_engine->gameType() == TetraedgeEngine::kSyberia2) {
+		app->backLayout().setRatioMode(TeILayout::RATIO_MODE_LETTERBOX);
+		app->backLayout().setRatio(1.333333f);
+		app->frontLayout().setRatioMode(TeILayout::RATIO_MODE_LETTERBOX);
+		app->frontLayout().setRatio(1.333333f);
+	}
+
 	TeSpriteLayout &appSpriteLayout = app->appSpriteLayout();
 	appSpriteLayout.setVisible(true);
 	if (!appSpriteLayout._tiledSurfacePtr->_frameAnim._runTimer.running()) {
@@ -62,6 +70,12 @@ void MainMenu::enter() {
 	_entered = true;
 	load("menus/mainMenu/mainMenu.lua");
 
+	//
+	// WORKAROUND: This is set to PanScan ratio 1.0, but with our code
+	// but that shrinks it down to pillarboxed.  Force back to full size.
+	//
+	layoutChecked("background")->setRatioMode(TeILayout::RATIO_MODE_NONE);
+
 	TeLayout *menuLayout = layoutChecked("menu");
 	appSpriteLayout.addChild(menuLayout);
 
diff --git a/engines/tetraedge/te/te_i_layout.h b/engines/tetraedge/te/te_i_layout.h
index cabbb55622a..6e823177bc3 100644
--- a/engines/tetraedge/te/te_i_layout.h
+++ b/engines/tetraedge/te/te_i_layout.h
@@ -40,9 +40,9 @@ public:
 	};
 
 	enum RatioMode {
-		RATIO_MODE_NONE,
-		RATIO_MODE_LETTERBOX,
-		RATIO_MODE_PAN_SCAN
+		RATIO_MODE_NONE = 0,
+		RATIO_MODE_LETTERBOX = 1,
+		RATIO_MODE_PAN_SCAN = 2
 	};
 
 };
diff --git a/engines/tetraedge/te/te_layout.cpp b/engines/tetraedge/te/te_layout.cpp
index 3f0660cf2e2..e764be7e9e6 100644
--- a/engines/tetraedge/te/te_layout.cpp
+++ b/engines/tetraedge/te/te_layout.cpp
@@ -32,7 +32,7 @@ TeLayout::TeLayout() : Te3DObject2(), _autoz(true), _needZUpdate(true), _updatin
 	_positionChanged(true), _updatingPosition(false), _worldMatrixChanged(true),
 	_updatingWorldMatrix(false), _drawMode(TeILayout::DrawMode0),
 	_sizeType(CoordinatesType::ABSOLUTE), _userSize(1.0f, 1.0f, 1.0f),
-	_anchor(0.5f, 0.5f, 0.5f), _ratio(1.0f), _safeAreaRatio(1.3333334f),
+	_anchor(0.5f, 0.5f, 0.5f), _ratio(1.0f), _safeAreaRatio(1.333333f),
 	_ratioMode(RATIO_MODE_NONE), _positionType(CoordinatesType::RELATIVE_TO_PARENT)
 {
 	_userPosition = _position = TeVector3f32(0.5f, 0.5f, 0.5f);




More information about the Scummvm-git-logs mailing list