[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