[Scummvm-git-logs] scummvm master -> c76d2c9454c3fdd59a9ba81eac4f95f4071f5d87

whoozle noreply at scummvm.org
Sat Jul 18 17:13:21 UTC 2026


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
c76d2c9454 PHOENIXVR: Move SaveVariable/LoadVariable implementation to Variables class


Commit: c76d2c9454c3fdd59a9ba81eac4f95f4071f5d87
    https://github.com/scummvm/scummvm/commit/c76d2c9454c3fdd59a9ba81eac4f95f4071f5d87
Author: Vladimir Menshakov (vladimir.menshakov at gmail.com)
Date: 2026-07-18T18:06:06+01:00

Commit Message:
PHOENIXVR: Move SaveVariable/LoadVariable implementation to Variables class

Original engine does not allocate any runtime variables when reading variables.txt.
This list is only needed for Save/Load snapshots used in Script3 of Necronomicon.
Saved state is not deallocated in load.

Changed paths:
    engines/phoenixvr/phoenixvr.cpp
    engines/phoenixvr/phoenixvr.h
    engines/phoenixvr/variables.cpp
    engines/phoenixvr/variables.h


diff --git a/engines/phoenixvr/phoenixvr.cpp b/engines/phoenixvr/phoenixvr.cpp
index 19bb255a8c8..eb26efa1ce7 100644
--- a/engines/phoenixvr/phoenixvr.cpp
+++ b/engines/phoenixvr/phoenixvr.cpp
@@ -1318,25 +1318,12 @@ void PhoenixVREngine::renderImageOverlay() {
 
 void PhoenixVREngine::saveVariables() {
 	debug("SaveVariable() - saving variable state");
-	auto &values = _variables.values();
-	_variableSnapshot.resize(values.size());
-	uint i = 0;
-	for (auto &var : values)
-		_variableSnapshot[i++] = var;
+	_variables.save();
 }
 
 void PhoenixVREngine::loadVariables() {
 	debug("LoadVariable() - loading variable state");
-	if (_variableSnapshot.empty()) {
-		debug("skipping, no snapshot");
-		return;
-	}
-	auto &values = _variables.values();
-	assert(_variableSnapshot.size() == values.size());
-	uint i = 0;
-	for (auto &var : values)
-		var = _variableSnapshot[i++];
-	_variableSnapshot.clear();
+	_variables.load();
 }
 
 const Graphics::Font *PhoenixVREngine::getFont(int size, bool bold) const {
@@ -1633,18 +1620,7 @@ Common::Error PhoenixVREngine::run() {
 	// Set the engine's debugger console before declaring script variables.
 	setDebugger(new Console());
 
-	{
-		Common::File vars;
-		if (vars.open(Common::Path("variable.txt"))) {
-			while (!vars.eos()) {
-				auto var = vars.readLine();
-				if (var == "*")
-					break;
-				declareVariable(var);
-			}
-		} else
-			debug("no variables.txt");
-	}
+	_variables.loadVariableTxt();
 	{
 		Common::File textes;
 		if (textes.open(Common::Path("textes.txt"))) {
diff --git a/engines/phoenixvr/phoenixvr.h b/engines/phoenixvr/phoenixvr.h
index b57186c752d..f94096962ce 100644
--- a/engines/phoenixvr/phoenixvr.h
+++ b/engines/phoenixvr/phoenixvr.h
@@ -290,7 +290,6 @@ private:
 	Common::Array<Common::String> _lockKey;
 
 	Variables _variables;
-	Common::Array<int> _variableSnapshot;
 
 	struct Sound {
 		Audio::SoundHandle handle;
diff --git a/engines/phoenixvr/variables.cpp b/engines/phoenixvr/variables.cpp
index aad44dc2427..8f874ff18b2 100644
--- a/engines/phoenixvr/variables.cpp
+++ b/engines/phoenixvr/variables.cpp
@@ -21,11 +21,42 @@
 
 #include "phoenixvr/variables.h"
 #include "common/debug.h"
+#include "common/file.h"
 #include "phoenixvr/console.h"
 #include "phoenixvr/phoenixvr.h"
 
 namespace PhoenixVR {
 
+void Variables::loadVariableTxt() {
+	Common::File vars;
+	if (vars.open(Common::Path("variable.txt"))) {
+		while (!vars.eos()) {
+			auto var = vars.readLine();
+			if (var == "*")
+				break;
+			_variableTxt.push_back(Common::move(var));
+		}
+	} else
+		debug("no variables.txt");
+	_variableSnapshot.resize(_variableTxt.size(), 0);
+}
+
+void Variables::save() {
+	auto num = _variableTxt.size();
+	debug("saving %u variables", num);
+	assert(_variableSnapshot.size() == num);
+	for (uint i = 0; i != num; ++i)
+		_variableSnapshot[i] = get(_variableTxt[i]);
+}
+
+void Variables::load() {
+	auto num = _variableTxt.size();
+	debug("loading %u variables", num);
+	assert(_variableSnapshot.size() == num);
+	for (uint i = 0; i != num; ++i)
+		set(_variableTxt[i], _variableSnapshot[i]);
+}
+
 void Variables::declare(const Common::String &name) {
 	if (!_variableIndex.contains(name)) {
 		_variableValues.push_back(0);
diff --git a/engines/phoenixvr/variables.h b/engines/phoenixvr/variables.h
index b55abe51c91..401583a0310 100644
--- a/engines/phoenixvr/variables.h
+++ b/engines/phoenixvr/variables.h
@@ -29,10 +29,16 @@
 namespace PhoenixVR {
 
 class Variables {
+	Common::Array<Common::String> _variableTxt;
+	Common::Array<int> _variableSnapshot;
 	Common::List<int> _variableValues;
 	Common::HashMap<Common::String, int *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _variableIndex;
 
 public:
+	void loadVariableTxt();
+	void save();
+	void load();
+
 	Common::List<int> &values() { return _variableValues; }
 	const Common::List<int> &values() const { return _variableValues; }
 




More information about the Scummvm-git-logs mailing list