[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