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

sev- noreply at scummvm.org
Fri Nov 24 23:32:10 UTC 2023


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:
ab096190e6 SLUDGE: Fix bug caused by getTextFromAnyVar in a debug context


Commit: ab096190e6adab2f916264ce98088653fab84cc7
    https://github.com/scummvm/scummvm/commit/ab096190e6adab2f916264ce98088653fab84cc7
Author: polyesterswing (kurianjojo2004 at gmail.com)
Date: 2023-11-25T00:32:06+01:00

Commit Message:
SLUDGE: Fix bug caused by getTextFromAnyVar in a debug context

In Out of Order, you could not walk/talk to "Urban Leopard".

Changed paths:
    engines/sludge/objtypes.cpp
    engines/sludge/objtypes.h
    engines/sludge/variable.cpp
    engines/sludge/variable.h


diff --git a/engines/sludge/objtypes.cpp b/engines/sludge/objtypes.cpp
index ef2a18c6b04..52b5700b4db 100644
--- a/engines/sludge/objtypes.cpp
+++ b/engines/sludge/objtypes.cpp
@@ -47,13 +47,17 @@ void ObjectManager::kill() {
 	_allObjectTypes.clear();
 }
 
-ObjectType *ObjectManager::findObjectType(int i) {
+ObjectType *ObjectManager::findObjectType(int i, bool skipLoad) {
 	ObjectTypeList::iterator it;
 	for (it = _allObjectTypes.begin(); it != _allObjectTypes.end(); ++it) {
 		if ((*it)->objectNum == i) {
 			return (*it);
 		}
 	}
+
+	if (skipLoad)
+		return nullptr;
+
 	return loadObjectType(i);
 }
 
diff --git a/engines/sludge/objtypes.h b/engines/sludge/objtypes.h
index 99ef3813017..b83e801d8f7 100644
--- a/engines/sludge/objtypes.h
+++ b/engines/sludge/objtypes.h
@@ -49,7 +49,7 @@ public:
 	bool init();
 	void kill();
 
-	ObjectType *findObjectType(int i);
+	ObjectType *findObjectType(int i, bool skipLoad = false);
 	ObjectType *loadObjectType(int i);
 	int getCombinationFunction(int a, int b);
 	void removeObjectType(ObjectType *oT);
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 9b67371fca4..5142ed65be3 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -313,7 +313,7 @@ bool Variable::loadStringToVar(int value) {
 	return (bool)(varData.theString != NULL);
 }
 
-Common::String Variable::getTextFromAnyVar() const {
+Common::String Variable::getTextFromAnyVar(bool skipLoad) const {
 	switch (varType) {
 	case SVT_STRING:
 		return varData.theString;
@@ -325,7 +325,7 @@ Common::String Variable::getTextFromAnyVar() const {
 
 		for (int i = 0; i < varData.fastArray->size; i++) {
 			builder2 = builder + " ";
-			grabText = varData.fastArray->fastVariables[i].getTextFromAnyVar();
+			grabText = varData.fastArray->fastVariables[i].getTextFromAnyVar(skipLoad);
 			builder.clear();
 			builder = builder2 + grabText;
 		}
@@ -341,7 +341,7 @@ Common::String Variable::getTextFromAnyVar() const {
 
 		while (stacky) {
 			builder2 = builder + " ";
-			grabText = stacky->thisVar.getTextFromAnyVar();
+			grabText = stacky->thisVar.getTextFromAnyVar(skipLoad);
 			builder.clear();
 			builder = builder2 + grabText;
 			stacky = stacky->next;
@@ -359,9 +359,11 @@ Common::String Variable::getTextFromAnyVar() const {
 	}
 
 	case SVT_OBJTYPE: {
-		ObjectType *thisType = g_sludge->_objMan->findObjectType(varData.intValue);
+		ObjectType *thisType = g_sludge->_objMan->findObjectType(varData.intValue, skipLoad);
 		if (thisType)
 			return thisType->screenName;
+		else
+			return Common::String::format("<unloaded id %d>", varData.intValue);
 		break;
 	}
 
@@ -499,7 +501,7 @@ bool addVarToStack(const Variable &va, VariableStack *&thisStack) {
 		return false;
 	newStack->next = thisStack;
 	thisStack = newStack;
-	debugC(2, kSludgeDebugStackMachine, "Variable %s was added to stack", va.getTextFromAnyVar().c_str());
+	debugC(2, kSludgeDebugStackMachine, "Variable %s was added to stack", va.getTextFromAnyVar(true).c_str());
 	return true;
 }
 
@@ -515,7 +517,7 @@ bool addVarToStackQuick(Variable &va, VariableStack *&thisStack) {
 
 	newStack->next = thisStack;
 	thisStack = newStack;
-	debugC(2, kSludgeDebugStackMachine, "Variable %s was added to stack quick", va.getTextFromAnyVar().c_str());
+	debugC(2, kSludgeDebugStackMachine, "Variable %s was added to stack quick", va.getTextFromAnyVar(true).c_str());
 	return true;
 }
 
@@ -589,7 +591,7 @@ void trimStack(VariableStack *&stack) {
 	VariableStack *killMe = stack;
 	stack = stack->next;
 
-	debugC(2, kSludgeDebugStackMachine, "Variable %s was removed from stack", killMe->thisVar.getTextFromAnyVar().c_str());
+	debugC(2, kSludgeDebugStackMachine, "Variable %s was removed from stack", killMe->thisVar.getTextFromAnyVar(true).c_str());
 
 	// When calling this, we've ALWAYS checked that stack != NULL
 	killMe->thisVar.unlinkVar();
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index c0d3e65d8e0..9959c834871 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -122,7 +122,7 @@ struct Variable {
 	int compareVars(const Variable &other) const;
 
 	// General getters
-	Common::String getTextFromAnyVar() const;
+	Common::String getTextFromAnyVar(bool skipLoad = false) const;
 	bool getBoolean() const;
 	bool getValueType(int &toHere, VariableType vT) const;
 




More information about the Scummvm-git-logs mailing list