[Scummvm-git-logs] scummvm master -> a5a605719859d7682fcf15cd008a1cad8132fedb
sev-
noreply at scummvm.org
Tue Mar 11 20:24:44 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
a5a6057198 WAGE : Fix 2 issues with "New" and "Revert":
Commit: a5a605719859d7682fcf15cd008a1cad8132fedb
https://github.com/scummvm/scummvm/commit/a5a605719859d7682fcf15cd008a1cad8132fedb
Author: WinterSun23 (ashwinvaws at gmail.com)
Date: 2025-03-11T21:24:39+01:00
Commit Message:
WAGE : Fix 2 issues with "New" and "Revert":
- Fix issue with "New" option after game over screen
Fix issue, where clicking the new option after the game over screen
causes the scene window to be not visible until scummvm is
restarted.
Fix by resetting game related variables in engine class
when the new option is clicked.
- Fix issue with "Revert" option
Fix issue, where using "Revert" when the previous save is in the
current scene, causes the current scene to not redraw. The objects
in the scene do not have correct ownership. They are both in the
scene objects and in player inventory.
Fix by forcing redraw and clearing scene objects and characters
during loading the previous save.
Changed paths:
engines/wage/gui.cpp
engines/wage/saveload.cpp
engines/wage/wage.cpp
engines/wage/wage.h
engines/wage/world.cpp
diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 4f19783370f..fe3ddef01de 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -278,7 +278,15 @@ void Gui::executeMenuCommand(int action, Common::String &text) {
case kMenuActionRevert:
if (_engine->_defaultSaveSlot != -1) {
_engine->_isGameOver = false;
+
_engine->loadGameState(_engine->_defaultSaveSlot);
+ _engine->_world->_weaponMenuDisabled = false;
+ _engine->_gui->regenCommandsMenu();
+ _engine->_gui->regenWeaponsMenu();
+
+ _scene = nullptr; // To force current scene to be redrawn
+ _engine->redrawScene();
+ g_system->updateScreen();
}
break;
diff --git a/engines/wage/saveload.cpp b/engines/wage/saveload.cpp
index 9a3c39bd1ca..0e81eaf9819 100644
--- a/engines/wage/saveload.cpp
+++ b/engines/wage/saveload.cpp
@@ -501,10 +501,7 @@ int WageEngine::loadGame(int slotId) {
}
for (uint32 i = 0; i < orderedScenes.size(); ++i) {
Scene *scene = orderedScenes[i];
- if (scene == _world->_storageScene) {
- scene->_chrs.clear();
- scene->_objs.clear();
- } else {
+ if (scene != _world->_storageScene) {
int id = data->readSint16LE();
if (scene->_resourceId != id) {
@@ -526,6 +523,9 @@ int WageEngine::loadGame(int slotId) {
data->readByte();
scene->_visited = data->readByte() != 0;
}
+
+ scene->_chrs.clear();
+ scene->_objs.clear();
}
// update all char locations and stats
diff --git a/engines/wage/wage.cpp b/engines/wage/wage.cpp
index 30cfeccfd44..732d9333ab4 100644
--- a/engines/wage/wage.cpp
+++ b/engines/wage/wage.cpp
@@ -172,7 +172,25 @@ Common::Error WageEngine::run() {
return Common::kNoError;
}
+// Resetting required variables
+void WageEngine::resetState() {
+ _aim = -1;
+ _opponentAim = -1;
+ _temporarilyHidden = false;
+ _isGameOver = false;
+ _monster = nullptr;
+ _running = nullptr;
+ _lastScene = nullptr;
+ _loopCount = 0;
+ _turn = 0;
+ _commandWasQuick = false;
+ _shouldQuit = false;
+ _offer = nullptr;
+}
+
void WageEngine::restart() {
+ if (_isGameOver)
+ resetState();
_restartRequested = false;
delete _gui;
delete _world;
diff --git a/engines/wage/wage.h b/engines/wage/wage.h
index 7c582a4cbc6..4a765ec8dec 100644
--- a/engines/wage/wage.h
+++ b/engines/wage/wage.h
@@ -247,6 +247,7 @@ private:
int saveGame(const Common::String &fileName, const Common::String &descriptionString);
int loadGame(int slotId);
+ void resetState();
void restart();
private:
diff --git a/engines/wage/world.cpp b/engines/wage/world.cpp
index 3a939359571..93caef05e36 100644
--- a/engines/wage/world.cpp
+++ b/engines/wage/world.cpp
@@ -438,7 +438,7 @@ void World::move(Obj *obj, Chr *chr) {
return;
Designed *from = obj->removeFromCharOrScene();
- obj->_currentOwner = chr;
+ obj->setCurrentOwner(chr);
chr->_inventory.push_back(obj);
Common::sort(chr->_inventory.begin(), chr->_inventory.end(), invComparator);
@@ -460,7 +460,7 @@ void World::move(Obj *obj, Scene *scene, bool skipSort) {
return;
Designed *from = obj->removeFromCharOrScene();
- obj->_currentScene = scene;
+ obj->setCurrentScene(scene);
scene->_objs.push_back(obj);
if (!skipSort)
More information about the Scummvm-git-logs
mailing list