[Scummvm-git-logs] scummvm master -> 8ead8de2846539fd68811937abdd1cbb94382ce0

yinsimei roseline.yin at gmail.com
Thu May 31 23:15:56 CEST 2018


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

Summary:
6004cd319d SLUDGE: Move createCString() with string tools
04444b70f9 SLUDGE: Move unlinkVar into struct Variable
2ab7665e56 SLUDGE: Move SetVariable() into struct Variable
56f0821876 SLUDGE: Move save/loadVariable() to struct Variable
98f764050a SLUDGE: Move copyVariable to struct Variable
805a47b74a SLUDGE: Move text related functions to struct Variable
04ef7becf3 SLUDGE: Move PersonAnimation functions into struct Variable
719f5842fa SLUDGE: Move costume functions to struct Variable
9d85b807fb SLUDGE: Move add/comparison functions to struct Variable
746fb3819f SLUDGE: Move value getters to struct Variable
399ff4788c SLUDGE: Move fastarray functions to struct Variable
dc18ec2fd0 SLUDGE: Move FastArray getter to struct FastArrayHandler
9fb57f944d SLUDGE: Move stack variable getter/setter to VariableStack
ca583ebfcf SLUDGE: Move last stack finding function to struct VariableStack
80478ee470 SLUDGE: Move copyStack() to struct Variable
fa72209845 SLUDGE: Move stack size getter to struct StackHandler
8ead8de284 SLUDGE: Move save game getter to StackHandler


Commit: 6004cd319d3c865821bc2be29647222c957ed517
    https://github.com/scummvm/scummvm/commit/6004cd319d3c865821bc2be29647222c957ed517
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move createCString() with string tools

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


diff --git a/engines/sludge/moreio.cpp b/engines/sludge/moreio.cpp
index 1512574..ee9ab8e 100644
--- a/engines/sludge/moreio.cpp
+++ b/engines/sludge/moreio.cpp
@@ -167,4 +167,15 @@ Common::String decodeFilename(const Common::String &nameIn) {
 	return newName;
 }
 
+char *createCString(const Common::String &s) {
+	uint n = s.size() + 1;
+	char *res = new char[n];
+	if (!checkNew(res)) {
+		fatal("createCString : Unable to copy String");
+		return NULL;
+	}
+	memcpy(res, s.c_str(), n);
+	return res;
+}
+
 } // End of namespace Sludge
diff --git a/engines/sludge/moreio.h b/engines/sludge/moreio.h
index 09235ae..237a918 100644
--- a/engines/sludge/moreio.h
+++ b/engines/sludge/moreio.h
@@ -31,6 +31,8 @@ void writeString(Common::String s, Common::WriteStream *stream);
 Common::String encodeFilename(const Common::String &nameIn);
 Common::String decodeFilename(const Common::String &nameIn);
 
+char *createCString(const Common::String &s);
+
 } // End of namespace Sludge
 
 #endif
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 35e1036..b9e7b12 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -239,17 +239,6 @@ void compareVariablesInSecond(const Variable &var1, Variable &var2) {
 	setVariable(var2, SVT_INT, compareVars(var1, var2));
 }
 
-char *createCString(const Common::String &s) {
-	uint n = s.size() + 1;
-	char *res = new char[n];
-	if (!checkNew(res)) {
-		fatal("createCString : Unable to copy String");
-		return NULL;
-	}
-	memcpy(res, s.c_str(), n);
-	return res;
-}
-
 void makeTextVar(Variable &thisVar, const Common::String &txt) {
 	unlinkVar(thisVar);
 	thisVar.varType = SVT_STRING;
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 8f0d394..a3ae673 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -90,7 +90,6 @@ void newCostumeVariable(Variable &thisVar, struct Persona *i);
 void makeTextVar(Variable &thisVar, const Common::String &txt);
 void addVariablesInSecond(Variable &var1, Variable &var2);
 void compareVariablesInSecond(const Variable &var1, Variable &var2);
-char *createCString(const Common::String &s);
 
 // Misc.
 


Commit: 04444b70f97c40fe3893e80d73042b4f11dbfa46
    https://github.com/scummvm/scummvm/commit/04444b70f97c40fe3893e80d73042b4f11dbfa46
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move unlinkVar into struct Variable

Changed paths:
    engines/sludge/builtin.cpp
    engines/sludge/function.cpp
    engines/sludge/loadsave.cpp
    engines/sludge/variable.cpp
    engines/sludge/variable.h


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 0d1d940..0ebcea1 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -205,7 +205,7 @@ builtIn(getMatchingFiles) {
 	UNUSEDALL
 	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
 	trimStack(fun->stack);
-	unlinkVar(fun->reg);
+	fun->reg.unlinkVar();
 
 	// Return value
 	fun->reg.varType = SVT_STACK;
@@ -498,7 +498,7 @@ builtIn(stringLength) {
 
 builtIn(newStack) {
 	UNUSEDALL
-	unlinkVar(fun->reg);
+	fun->reg.unlinkVar();
 
 	// Return value
 	fun->reg.varType = SVT_STACK;
@@ -2236,7 +2236,7 @@ builtIn(loadCustomData) {
 		return BR_ERROR;
 	trimStack(fun->stack);
 
-	unlinkVar(fun->reg);
+	fun->reg.unlinkVar();
 	fun->reg.varType = SVT_STACK;
 	fun->reg.varData.theStack = new StackHandler;
 	if (!checkNew(fun->reg.varData.theStack))
@@ -2311,7 +2311,7 @@ builtIn(getPixelColour) {
 		return BR_ERROR;
 	trimStack(fun->stack);
 
-	unlinkVar(fun->reg);
+	fun->reg.unlinkVar();
 	fun->reg.varType = SVT_STACK;
 	fun->reg.varData.theStack = new StackHandler;
 	if (!checkNew(fun->reg.varData.theStack))
diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index 0a7a344..97c5130 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -100,9 +100,9 @@ void finishFunction(LoadedFunction *fun) {
 		fatal(ERROR_NON_EMPTY_STACK);
 	delete[] fun->compiledLines;
 	for (a = 0; a < fun->numLocals; a++)
-		unlinkVar(fun->localVars[a]);
+		fun->localVars[a].unlinkVar();
 	delete[] fun->localVars;
-	unlinkVar(fun->reg);
+	fun->reg.unlinkVar();
 	delete fun;
 	fun = NULL;
 }
@@ -115,9 +115,9 @@ void abortFunction(LoadedFunction *fun) {
 		trimStack(fun->stack);
 	delete []fun->compiledLines;
 	for (a = 0; a < fun->numLocals; a++)
-		unlinkVar(fun->localVars[a]);
+		fun->localVars[a].unlinkVar();
 	delete []fun->localVars;
-	unlinkVar(fun->reg);
+	fun->reg.unlinkVar();
 	if (fun->calledBy)
 		abortFunction(fun->calledBy);
 	delete fun;
diff --git a/engines/sludge/loadsave.cpp b/engines/sludge/loadsave.cpp
index 4a78b83..22781ea 100644
--- a/engines/sludge/loadsave.cpp
+++ b/engines/sludge/loadsave.cpp
@@ -257,7 +257,7 @@ bool loadGame(const Common::String &fname) {
 	}
 
 	for (int a = 0; a < numGlobals; a++) {
-		unlinkVar(globalVars[a]);
+		globalVars[a].unlinkVar();
 		loadVariable(&globalVars[a], fp);
 	}
 
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index b9e7b12..dc5604f 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -38,36 +38,36 @@ const char *typeName[] = { "undefined", "number", "user function", "string",
 		"built-in function", "file", "stack", "object type", "animation",
 		"costume" };
 
-void unlinkVar(Variable &thisVar) {
-	switch (thisVar.varType) {
+void Variable::unlinkVar() {
+	switch (varType) {
 		case SVT_STRING:
-			delete []thisVar.varData.theString;
-			thisVar.varData.theString = NULL;
+			delete []varData.theString;
+			varData.theString = NULL;
 			break;
 
 		case SVT_STACK:
-			thisVar.varData.theStack->timesUsed--;
-			if (thisVar.varData.theStack->timesUsed <= 0) {
-				while (thisVar.varData.theStack->first)
-					trimStack(thisVar.varData.theStack->first);
-				delete thisVar.varData.theStack;
-				thisVar.varData.theStack = NULL;
+			varData.theStack->timesUsed--;
+			if (varData.theStack->timesUsed <= 0) {
+				while (varData.theStack->first)
+					trimStack(varData.theStack->first);
+				delete varData.theStack;
+				varData.theStack = NULL;
 			}
 			break;
 
 		case SVT_FASTARRAY:
-			thisVar.varData.fastArray->timesUsed--;
-			if (thisVar.varData.theStack->timesUsed <= 0) {
-				delete thisVar.varData.fastArray->fastVariables;
-				delete[] thisVar.varData.fastArray;
-				thisVar.varData.fastArray = NULL;
+			varData.fastArray->timesUsed--;
+			if (varData.theStack->timesUsed <= 0) {
+				delete varData.fastArray->fastVariables;
+				delete[] varData.fastArray;
+				varData.fastArray = NULL;
 			}
 			break;
 
 		case SVT_ANIM:
-			if (thisVar.varData.animHandler) {
-				delete thisVar.varData.animHandler;
-				thisVar.varData.animHandler = nullptr;
+			if (varData.animHandler) {
+				delete varData.animHandler;
+				varData.animHandler = nullptr;
 			}
 			break;
 
@@ -77,13 +77,13 @@ void unlinkVar(Variable &thisVar) {
 }
 
 void setVariable(Variable &thisVar, VariableType vT, int value) {
-	unlinkVar(thisVar);
+	thisVar.unlinkVar();
 	thisVar.varType = vT;
 	thisVar.varData.intValue = value;
 }
 
 void newAnimationVariable(Variable &thisVar, PersonaAnimation  *i) {
-	unlinkVar(thisVar);
+	thisVar.unlinkVar();
 	thisVar.varType = SVT_ANIM;
 	thisVar.varData.animHandler = i;
 }
@@ -100,7 +100,7 @@ PersonaAnimation *getAnimationFromVar(Variable &thisVar) {
 }
 
 void newCostumeVariable(Variable &thisVar, Persona *i) {
-	unlinkVar(thisVar);
+	thisVar.unlinkVar();
 	thisVar.varType = SVT_COSTUME;
 	thisVar.varData.costumeHandler = i;
 }
@@ -198,7 +198,7 @@ void addVariablesInSecond(Variable &var1, Variable &var2) {
 		Common::String string1 = getTextFromAnyVar(var1);
 		Common::String string2 = getTextFromAnyVar(var2);
 
-		unlinkVar(var2);
+		var2.unlinkVar();
 		var2.varData.theString = createCString(string1 + string2);
 		var2.varType = SVT_STRING;
 	}
@@ -240,7 +240,7 @@ void compareVariablesInSecond(const Variable &var1, Variable &var2) {
 }
 
 void makeTextVar(Variable &thisVar, const Common::String &txt) {
-	unlinkVar(thisVar);
+	thisVar.unlinkVar();
 	thisVar.varType = SVT_STRING;
 	thisVar.varData.theString = createCString(txt);
 }
@@ -376,7 +376,7 @@ bool copyMain(const Variable &from, Variable &to) {
 }
 
 bool copyVariable(const Variable &from, Variable &to) {
-	unlinkVar(to);
+	to.unlinkVar();
 	return copyMain(from, to);
 }
 
@@ -389,7 +389,7 @@ Variable *fastArrayGetByIndex(FastArrayHandler *vS, uint theIndex) {
 bool makeFastArraySize(Variable &to, int size) {
 	if (size < 0)
 		return fatal("Can't create a fast array with a negative number of elements!");
-	unlinkVar(to);
+	to.unlinkVar();
 	to.varType = SVT_FASTARRAY;
 	to.varData.fastArray = new FastArrayHandler;
 	if (!checkNew(to.varData.fastArray))
@@ -476,7 +476,7 @@ int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOf
 		if (compareVars((*huntVar)->thisVar, va)) {
 			killMe = *huntVar;
 			*huntVar = killMe->next;
-			unlinkVar(killMe->thisVar);
+			killMe->thisVar.unlinkVar();
 			delete killMe;
 			if (!allOfEm)
 				return 1;
@@ -522,7 +522,7 @@ void trimStack(VariableStack *&stack) {
 	//debugC(2, kSludgeDebugStackMachine, "Variable %s was removed from stack", getTextFromAnyVar(killMe->thisVar));
 
 	// When calling this, we've ALWAYS checked that stack != NULL
-	unlinkVar(killMe->thisVar);
+	killMe->thisVar.unlinkVar();
 	delete killMe;
 }
 
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index a3ae673..5a750b5 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -73,6 +73,8 @@ struct Variable {
 		varType = SVT_NULL;
 		varData.intValue = 0;
 	}
+
+	void unlinkVar();
 };
 
 struct VariableStack {
@@ -93,7 +95,6 @@ void compareVariablesInSecond(const Variable &var1, Variable &var2);
 
 // Misc.
 
-void unlinkVar(Variable &thisVar);
 Common::String getTextFromAnyVar(const Variable &from);
 struct Persona *getCostumeFromVar(Variable &thisVar);
 struct PersonaAnimation  *getAnimationFromVar(Variable &thisVar);


Commit: 2ab7665e56b303e7d5311b4d88945cd2007bee3e
    https://github.com/scummvm/scummvm/commit/2ab7665e56b303e7d5311b4d88945cd2007bee3e
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move SetVariable() into struct Variable

Changed paths:
    engines/sludge/backdrop.cpp
    engines/sludge/builtin.cpp
    engines/sludge/event.cpp
    engines/sludge/function.cpp
    engines/sludge/loadsave.cpp
    engines/sludge/savedata.cpp
    engines/sludge/sound.cpp
    engines/sludge/variable.cpp
    engines/sludge/variable.h


diff --git a/engines/sludge/backdrop.cpp b/engines/sludge/backdrop.cpp
index 04f4847..0e41230 100644
--- a/engines/sludge/backdrop.cpp
+++ b/engines/sludge/backdrop.cpp
@@ -540,14 +540,14 @@ bool GraphicsManager::getRGBIntoStack(uint x, uint y, StackHandler *sH) {
 
 	byte *target = (byte *)_renderSurface.getBasePtr(x, y);
 
-	setVariable(newValue, SVT_INT, target[1]);
+	newValue.setVariable(SVT_INT, target[1]);
 	if (!addVarToStackQuick(newValue, sH->first)) return false;
 	sH->last = sH->first;
 
-	setVariable(newValue, SVT_INT, target[2]);
+	newValue.setVariable(SVT_INT, target[2]);
 	if (!addVarToStackQuick(newValue, sH->first)) return false;
 
-	setVariable(newValue, SVT_INT, target[3]);
+	newValue.setVariable(SVT_INT, target[3]);
 	if (!addVarToStackQuick(newValue, sH->first)) return false;
 
 	return true;
diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 0ebcea1..e899014 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -159,7 +159,7 @@ builtIn(unfreeze) {
 
 builtIn(howFrozen) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, g_sludge->_gfxMan->howFrozen());
+	fun->reg.setVariable(SVT_INT, g_sludge->_gfxMan->howFrozen());
 	return BR_CONTINUE;
 }
 
@@ -173,25 +173,25 @@ builtIn(setCursor) {
 
 builtIn(getMouseX) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, g_sludge->_evtMan->mouseX() + g_sludge->_gfxMan->getCamX());
+	fun->reg.setVariable(SVT_INT, g_sludge->_evtMan->mouseX() + g_sludge->_gfxMan->getCamX());
 	return BR_CONTINUE;
 }
 
 builtIn(getMouseY) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, g_sludge->_evtMan->mouseY() + g_sludge->_gfxMan->getCamY());
+	fun->reg.setVariable(SVT_INT, g_sludge->_evtMan->mouseY() + g_sludge->_gfxMan->getCamY());
 	return BR_CONTINUE;
 }
 
 builtIn(getMouseScreenX) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, g_sludge->_evtMan->mouseX() * g_sludge->_gfxMan->getCamZoom());
+	fun->reg.setVariable(SVT_INT, g_sludge->_evtMan->mouseX() * g_sludge->_gfxMan->getCamZoom());
 	return BR_CONTINUE;
 }
 
 builtIn(getMouseScreenY) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, g_sludge->_evtMan->mouseY() * g_sludge->_gfxMan->getCamZoom());
+	fun->reg.setVariable(SVT_INT, g_sludge->_evtMan->mouseY() * g_sludge->_gfxMan->getCamZoom());
 	return BR_CONTINUE;
 }
 
@@ -237,7 +237,7 @@ builtIn(saveGame) {
 
 	g_sludge->loadNow = ":" + aaaaa;
 
-	setVariable(fun->reg, SVT_INT, 0);
+	fun->reg.setVariable(SVT_INT, 0);
 	saverFunc = fun;
 	return BR_KEEP_AND_PAUSE;
 }
@@ -267,7 +267,7 @@ builtIn(fileExists) {
 	}
 
 	// Return value
-	setVariable(fun->reg, SVT_INT, exist);
+	fun->reg.setVariable(SVT_INT, exist);
 	return BR_CONTINUE;
 }
 
@@ -492,7 +492,7 @@ builtIn(stringLength) {
 	UNUSEDALL
 	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, g_sludge->_txtMan->stringLength(newText));
+	fun->reg.setVariable(SVT_INT, g_sludge->_txtMan->stringLength(newText));
 	return BR_CONTINUE;
 }
 
@@ -527,13 +527,13 @@ builtIn(stackSize) {
 	switch (fun->stack->thisVar.varType) {
 		case SVT_STACK:
 			// Return value
-			setVariable(fun->reg, SVT_INT, stackSize(fun->stack->thisVar.varData.theStack));
+			fun->reg.setVariable(SVT_INT, stackSize(fun->stack->thisVar.varData.theStack));
 			trimStack(fun->stack);
 			return BR_CONTINUE;
 
 		case SVT_FASTARRAY:
 			// Return value
-			setVariable(fun->reg, SVT_INT, fun->stack->thisVar.varData.fastArray->size);
+			fun->reg.setVariable(SVT_INT, fun->stack->thisVar.varData.fastArray->size);
 			trimStack(fun->stack);
 			return BR_CONTINUE;
 
@@ -606,7 +606,7 @@ builtIn(deleteFromStack) {
 	}
 
 	// Return value
-	setVariable(fun->reg, SVT_INT, deleteVarFromStack(fun->stack->thisVar, fun->stack->next->thisVar.varData.theStack->first, false));
+	fun->reg.setVariable(SVT_INT, deleteVarFromStack(fun->stack->thisVar, fun->stack->next->thisVar.varData.theStack->first, false));
 
 	// Horrible hacking because 'last' value might now be wrong!
 	fun->stack->next->thisVar.varData.theStack->last = stackFindLast(fun->stack->next->thisVar.varData.theStack->first);
@@ -624,7 +624,7 @@ builtIn(deleteAllFromStack) {
 	}
 
 	// Return value
-	setVariable(fun->reg, SVT_INT, deleteVarFromStack(fun->stack->thisVar, fun->stack->next->thisVar.varData.theStack->first, true));
+	fun->reg.setVariable(SVT_INT, deleteVarFromStack(fun->stack->thisVar, fun->stack->next->thisVar.varData.theStack->first, true));
 
 	// Horrible hacking because 'last' value might now be wrong!
 	fun->stack->next->thisVar.varData.theStack->last = stackFindLast(fun->stack->next->thisVar.varData.theStack->first);
@@ -696,7 +696,7 @@ builtIn(random) {
 	trimStack(fun->stack);
 	if (num <= 0)
 		num = 1;
-	setVariable(fun->reg, SVT_INT, 0 /*rand() % num*/); //TODO:false value
+	fun->reg.setVariable(SVT_INT, 0 /*rand() % num*/); //TODO:false value
 	return BR_CONTINUE;
 }
 
@@ -754,7 +754,7 @@ builtIn(setBlankColour) {
 		return BR_ERROR;
 
 	g_sludge->_gfxMan->setBlankColor(red, green, blue);
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	return BR_CONTINUE;
 }
 
@@ -766,7 +766,7 @@ builtIn(setBurnColour) {
 		return BR_ERROR;
 
 	g_sludge->_gfxMan->setBurnColor(red, green, blue);
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	return BR_CONTINUE;
 }
 
@@ -796,7 +796,7 @@ builtIn(inFont) {
 	trimStack(fun->stack);
 
 	// Return value
-	setVariable(fun->reg, SVT_INT, g_sludge->_txtMan->isInFont(newText));
+	fun->reg.setVariable(SVT_INT, g_sludge->_txtMan->isInFont(newText));
 	return BR_CONTINUE;
 }
 
@@ -889,7 +889,7 @@ builtIn(launch) {
 		if (g_sludge->launchMe.empty())
 			return BR_ERROR;
 	}
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	launchResult = &fun->reg;
 
 	return BR_KEEP_AND_PAUSE;
@@ -929,10 +929,10 @@ builtIn(callEvent) {
 
 	// Return value
 	if (fNum) {
-		setVariable(fun->reg, SVT_FUNC, fNum);
+		fun->reg.setVariable(SVT_FUNC, fNum);
 		return BR_CALLAFUNC;
 	}
-	setVariable(fun->reg, SVT_INT, 0);
+	fun->reg.setVariable(SVT_INT, 0);
 	return BR_CONTINUE;
 }
 
@@ -954,13 +954,13 @@ builtIn(_rem_movieStart) {
 
 builtIn(_rem_movieAbort) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, 0);
+	fun->reg.setVariable(SVT_INT, 0);
 	return BR_CONTINUE;
 }
 
 builtIn(_rem_moviePlaying) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, 0);
+	fun->reg.setVariable(SVT_INT, 0);
 	return BR_CONTINUE;
 }
 
@@ -977,7 +977,7 @@ builtIn(playMovie) {
 
 	r = playMovie(fileNumber);
 
-	setVariable(fun->reg, SVT_INT, r);
+	fun->reg.setVariable(SVT_INT, r);
 
 	if (r && (!fun->next)) {
 		restartFunction(fun);
@@ -991,7 +991,7 @@ builtIn(stopMovie) {
 
 	stopMovie();
 
-	setVariable(fun->reg, SVT_INT, 0);
+	fun->reg.setVariable(SVT_INT, 0);
 	return BR_CONTINUE;
 }
 
@@ -1000,7 +1000,7 @@ builtIn(pauseMovie) {
 
 	pauseMovie();
 
-	setVariable(fun->reg, SVT_INT, 0);
+	fun->reg.setVariable(SVT_INT, 0);
 	return BR_CONTINUE;
 }
 
@@ -1231,11 +1231,11 @@ builtIn(setLightMap) {
 				trimStack(fun->stack);
 				if (!g_sludge->_gfxMan->loadLightMap(v))
 					return BR_ERROR;
-				setVariable(fun->reg, SVT_INT, 1);
+				fun->reg.setVariable(SVT_INT, 1);
 			} else {
 				trimStack(fun->stack);
 				g_sludge->_gfxMan->killLightMap();
-				setVariable(fun->reg, SVT_INT, 0);
+				fun->reg.setVariable(SVT_INT, 0);
 			}
 			break;
 
@@ -1267,9 +1267,9 @@ builtIn(somethingSpeaking) {
 	UNUSEDALL
 	int i = g_sludge->_speechMan->isThereAnySpeechGoingOn();
 	if (i == -1) {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	} else {
-		setVariable(fun->reg, SVT_OBJTYPE, i);
+		fun->reg.setVariable(SVT_OBJTYPE, i);
 	}
 	return BR_CONTINUE;
 }
@@ -1284,10 +1284,10 @@ builtIn(getOverObject) {
 	UNUSEDALL
 	if (g_sludge->_regionMan->getOverRegion())
 		// Return value
-		setVariable(fun->reg, SVT_OBJTYPE, g_sludge->_regionMan->getOverRegion()->thisType->objectNum);
+		fun->reg.setVariable(SVT_OBJTYPE, g_sludge->_regionMan->getOverRegion()->thisType->objectNum);
 	else
 		// Return value
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	return BR_CONTINUE;
 }
 
@@ -1314,13 +1314,13 @@ builtIn(getObjectX) {
 
 	OnScreenPerson *pers = g_sludge->_peopleMan->findPerson(objectNumber);
 	if (pers) {
-		setVariable(fun->reg, SVT_INT, pers->x);
+		fun->reg.setVariable(SVT_INT, pers->x);
 	} else {
 		ScreenRegion *la = g_sludge->_regionMan->getRegionForObject(objectNumber);
 		if (la) {
-			setVariable(fun->reg, SVT_INT, la->sX);
+			fun->reg.setVariable(SVT_INT, la->sX);
 		} else {
-			setVariable(fun->reg, SVT_INT, 0);
+			fun->reg.setVariable(SVT_INT, 0);
 		}
 	}
 	return BR_CONTINUE;
@@ -1335,13 +1335,13 @@ builtIn(getObjectY) {
 
 	OnScreenPerson *pers = g_sludge->_peopleMan->findPerson(objectNumber);
 	if (pers) {
-		setVariable(fun->reg, SVT_INT, pers->y);
+		fun->reg.setVariable(SVT_INT, pers->y);
 	} else {
 		ScreenRegion *la = g_sludge->_regionMan->getRegionForObject(objectNumber);
 		if (la) {
-			setVariable(fun->reg, SVT_INT, la->sY);
+			fun->reg.setVariable(SVT_INT, la->sY);
 		} else {
-			setVariable(fun->reg, SVT_INT, 0);
+			fun->reg.setVariable(SVT_INT, 0);
 		}
 	}
 	return BR_CONTINUE;
@@ -1520,7 +1520,7 @@ builtIn(stopCharacter) {
 	trimStack(fun->stack);
 
 	// Return value
-	setVariable(fun->reg, SVT_INT, g_sludge->_peopleMan->stopPerson(obj));
+	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->stopPerson(obj));
 	return BR_CONTINUE;
 }
 
@@ -1543,9 +1543,9 @@ builtIn(pasteCharacter) {
 
 		int fNum = myAnim->frames[thisPerson->frameNum].frameNum;
 		g_sludge->_gfxMan->fixScaleSprite(thisPerson->x, thisPerson->y, myAnim->theSprites->bank.sprites[ABS(fNum)], myAnim->theSprites->bank.myPalette, thisPerson, 0, 0, fNum < 0);
-		setVariable(fun->reg, SVT_INT, 1);
+		fun->reg.setVariable(SVT_INT, 1);
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	}
 	return BR_CONTINUE;
 }
@@ -1561,7 +1561,7 @@ builtIn(animate) {
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->animatePerson(obj, pp);
-	setVariable(fun->reg, SVT_INT, pp->getTotalTime());
+	fun->reg.setVariable(SVT_INT, pp->getTotalTime());
 	return BR_CONTINUE;
 }
 
@@ -1588,7 +1588,7 @@ builtIn(floatCharacter) {
 	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, g_sludge->_peopleMan->floatCharacter(di, obj));
+	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->floatCharacter(di, obj));
 	return BR_CONTINUE;
 }
 
@@ -1601,7 +1601,7 @@ builtIn(setCharacterWalkSpeed) {
 	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, g_sludge->_peopleMan->setCharacterWalkSpeed(di, obj));
+	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->setCharacterWalkSpeed(di, obj));
 	return BR_CONTINUE;
 }
 
@@ -1614,7 +1614,7 @@ builtIn(turnCharacter) {
 	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, g_sludge->_peopleMan->turnPersonToFace(obj, di));
+	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->turnPersonToFace(obj, di));
 	return BR_CONTINUE;
 }
 
@@ -1627,7 +1627,7 @@ builtIn(setCharacterExtra) {
 	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, g_sludge->_peopleMan->setPersonExtra(obj, di));
+	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->setPersonExtra(obj, di));
 	return BR_CONTINUE;
 }
 
@@ -1895,7 +1895,7 @@ builtIn(stringWidth) {
 	trimStack(fun->stack);
 
 	// Return value
-	setVariable(fun->reg, SVT_INT, g_sludge->_txtMan->stringWidth(theText));
+	fun->reg.setVariable(SVT_INT, g_sludge->_txtMan->stringWidth(theText));
 	return BR_CONTINUE;
 }
 
@@ -1915,7 +1915,7 @@ builtIn(isScreenRegion) {
 	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, g_sludge->_regionMan->getRegionForObject(objectNumber) != NULL);
+	fun->reg.setVariable(SVT_INT, g_sludge->_regionMan->getRegionForObject(objectNumber) != NULL);
 	return BR_CONTINUE;
 }
 
@@ -1926,7 +1926,7 @@ builtIn(setSpeechSpeed) {
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_speechMan->setSpeechSpeed(number * 0.01);
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	return BR_CONTINUE;
 }
 
@@ -1937,7 +1937,7 @@ builtIn(setFontSpacing) {
 		return BR_ERROR;
 	g_sludge->_txtMan->setFontSpace(fontSpaceI);
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	return BR_CONTINUE;
 }
 
@@ -1950,7 +1950,7 @@ builtIn(transitionLevel) {
 
 	g_sludge->_gfxMan->setBrightnessLevel(brightnessLevel);
 
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	return BR_CONTINUE;
 }
 
@@ -1959,7 +1959,7 @@ builtIn(captureAllKeys) {
 	// This built-in function doesn't have any effect any more, we capture all keys by default
 	bool captureAllKeysDeprecated = getBoolean(fun->stack->thisVar);
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, captureAllKeysDeprecated);
+	fun->reg.setVariable(SVT_INT, captureAllKeysDeprecated);
 	return BR_CONTINUE;
 }
 
@@ -1978,10 +1978,10 @@ builtIn(spinCharacter) {
 		thisPerson->wantAngle = number;
 		thisPerson->spinning = true;
 		thisPerson->continueAfterWalking = fun;
-		setVariable(fun->reg, SVT_INT, 1);
+		fun->reg.setVariable(SVT_INT, 1);
 		return BR_PAUSE;
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 		return BR_CONTINUE;
 	}
 }
@@ -1994,9 +1994,9 @@ builtIn(getCharacterDirection) {
 	trimStack(fun->stack);
 	OnScreenPerson *thisPerson = g_sludge->_peopleMan->findPerson(objectNumber);
 	if (thisPerson) {
-		setVariable(fun->reg, SVT_INT, thisPerson->direction);
+		fun->reg.setVariable(SVT_INT, thisPerson->direction);
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	}
 	return BR_CONTINUE;
 }
@@ -2008,7 +2008,7 @@ builtIn(isCharacter) {
 		return BR_ERROR;
 	trimStack(fun->stack);
 	OnScreenPerson *thisPerson = g_sludge->_peopleMan->findPerson(objectNumber);
-	setVariable(fun->reg, SVT_INT, thisPerson != NULL);
+	fun->reg.setVariable(SVT_INT, thisPerson != NULL);
 	return BR_CONTINUE;
 }
 
@@ -2021,9 +2021,9 @@ builtIn(normalCharacter) {
 	OnScreenPerson *thisPerson = g_sludge->_peopleMan->findPerson(objectNumber);
 	if (thisPerson) {
 		thisPerson->myAnim = thisPerson->myPersona->animation[thisPerson->direction];
-		setVariable(fun->reg, SVT_INT, 1);
+		fun->reg.setVariable(SVT_INT, 1);
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	}
 	return BR_CONTINUE;
 }
@@ -2036,9 +2036,9 @@ builtIn(isMoving) {
 	trimStack(fun->stack);
 	OnScreenPerson *thisPerson = g_sludge->_peopleMan->findPerson(objectNumber);
 	if (thisPerson) {
-		setVariable(fun->reg, SVT_INT, thisPerson->walking);
+		fun->reg.setVariable(SVT_INT, thisPerson->walking);
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	}
 	return BR_CONTINUE;
 }
@@ -2057,9 +2057,9 @@ builtIn(fetchEvent) {
 
 	// Return value
 	if (fNum) {
-		setVariable(fun->reg, SVT_FUNC, fNum);
+		fun->reg.setVariable(SVT_FUNC, fNum);
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	}
 	return BR_CONTINUE;
 }
@@ -2073,7 +2073,7 @@ builtIn(deleteFile) {
 	namNormal.clear();
 	if (failSecurityCheck(nam))
 		return BR_ERROR;
-	setVariable(fun->reg, SVT_INT, remove(nam.c_str()));
+	fun->reg.setVariable(SVT_INT, remove(nam.c_str()));
 
 	return BR_CONTINUE;
 }
@@ -2096,7 +2096,7 @@ builtIn(renameFile) {
 	if (failSecurityCheck(nam))
 		return BR_ERROR;
 
-	setVariable(fun->reg, SVT_INT, rename(nam.c_str(), newnam.c_str()));
+	fun->reg.setVariable(SVT_INT, rename(nam.c_str(), newnam.c_str()));
 
 	return BR_CONTINUE;
 }
@@ -2143,9 +2143,9 @@ builtIn(setCharacterSpinSpeed) {
 
 	if (thisPerson) {
 		thisPerson->spinSpeed = speed;
-		setVariable(fun->reg, SVT_INT, 1);
+		fun->reg.setVariable(SVT_INT, 1);
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	}
 	return BR_CONTINUE;
 }
@@ -2164,9 +2164,9 @@ builtIn(setCharacterAngleOffset) {
 
 	if (thisPerson) {
 		thisPerson->angleOffset = angle;
-		setVariable(fun->reg, SVT_INT, 1);
+		fun->reg.setVariable(SVT_INT, 1);
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	}
 	return BR_CONTINUE;
 }
@@ -2178,7 +2178,7 @@ builtIn(transitionMode) {
 		return BR_ERROR;
 	g_sludge->_gfxMan->setFadeMode(n);
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	return BR_CONTINUE;
 }
 
@@ -2186,7 +2186,7 @@ builtIn(transitionMode) {
 builtIn(_rem_updateDisplay) {
 	UNUSEDALL
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, true);
+	fun->reg.setVariable(SVT_INT, true);
 	return BR_CONTINUE;
 }
 
@@ -2256,7 +2256,7 @@ builtIn(setCustomEncoding) {
 		return BR_ERROR;
 	CustomSaveHelper::_saveEncoding = n;
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	return BR_CONTINUE;
 }
 
@@ -2289,7 +2289,7 @@ builtIn(parallaxAdd) {
 
 		if (!g_sludge->_gfxMan->loadParallax(v, wrapX, wrapY))
 			return BR_ERROR;
-		setVariable(fun->reg, SVT_INT, 1);
+		fun->reg.setVariable(SVT_INT, 1);
 	}
 	return BR_CONTINUE;
 }
@@ -2297,7 +2297,7 @@ builtIn(parallaxAdd) {
 builtIn(parallaxClear) {
 	UNUSEDALL
 	g_sludge->_gfxMan->killParallax();
-	setVariable(fun->reg, SVT_INT, 1);
+	fun->reg.setVariable(SVT_INT, 1);
 	return BR_CONTINUE;
 }
 
@@ -2358,16 +2358,16 @@ builtIn(getCharacterScale) {
 
 	OnScreenPerson *pers = g_sludge->_peopleMan->findPerson(objectNumber);
 	if (pers) {
-		setVariable(fun->reg, SVT_INT, pers->scale * 100);
+		fun->reg.setVariable(SVT_INT, pers->scale * 100);
 	} else {
-		setVariable(fun->reg, SVT_INT, 0);
+		fun->reg.setVariable(SVT_INT, 0);
 	}
 	return BR_CONTINUE;
 }
 
 builtIn(getLanguageID) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, g_sludge->getLanguageID());
+	fun->reg.setVariable(SVT_INT, g_sludge->getLanguageID());
 	return BR_CONTINUE;
 }
 
@@ -2397,13 +2397,13 @@ builtIn(_rem_launchWith) {
 	}
 
 	g_sludge->launchNext.clear();
-	setVariable(fun->reg, SVT_INT, false);
+	fun->reg.setVariable(SVT_INT, false);
 	return BR_CONTINUE;
 }
 
 builtIn(getFramesPerSecond) {
 	UNUSEDALL
-	setVariable(fun->reg, SVT_INT, g_sludge->_timer.getLastFps());
+	fun->reg.setVariable(SVT_INT, g_sludge->_timer.getLastFps());
 	return BR_CONTINUE;
 }
 
@@ -2454,7 +2454,7 @@ builtIn(hasFlag) {
 	ObjectType *objT = g_sludge->_objMan->findObjectType(objNum);
 	if (!objT)
 		return BR_ERROR;
-	setVariable(fun->reg, SVT_INT, objT->flags & (1 << flagIndex));
+	fun->reg.setVariable(SVT_INT, objT->flags & (1 << flagIndex));
 	return BR_CONTINUE;
 }
 
@@ -2474,7 +2474,7 @@ builtIn(bodgeFilenames) {
 	bool lastValue = allowAnyFilename;
 	allowAnyFilename = getBoolean(fun->stack->thisVar);
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, lastValue);
+	fun->reg.setVariable(SVT_INT, lastValue);
 	return BR_CONTINUE;
 }
 
@@ -2483,7 +2483,7 @@ builtIn(_rem_registryGetString) {
 	UNUSEDALL
 	trimStack(fun->stack);
 	trimStack(fun->stack);
-	setVariable(fun->reg, SVT_INT, 0);
+	fun->reg.setVariable(SVT_INT, 0);
 
 	return BR_CONTINUE;
 }
@@ -2521,14 +2521,14 @@ builtIn(_rem_setMaximumAA) {
 builtIn(setBackgroundEffect) {
 	UNUSEDALL
 	bool done = blur_createSettings(numParams, fun->stack);
-	setVariable(fun->reg, SVT_INT, done ? 1 : 0);
+	fun->reg.setVariable(SVT_INT, done ? 1 : 0);
 	return BR_CONTINUE;
 }
 
 builtIn(doBackgroundEffect) {
 	UNUSEDALL
 	bool done = blurScreen();
-	setVariable(fun->reg, SVT_INT, done ? 1 : 0);
+	fun->reg.setVariable(SVT_INT, done ? 1 : 0);
 	return BR_CONTINUE;
 }
 
diff --git a/engines/sludge/event.cpp b/engines/sludge/event.cpp
index acccd7f..16e02e5 100644
--- a/engines/sludge/event.cpp
+++ b/engines/sludge/event.cpp
@@ -157,7 +157,7 @@ bool EventManager::handleInput() {
 		} else {
 			l = 1;
 
-			setVariable(*launchResult, SVT_INT, 0/*launch(launchMe) > 31*/); //TODO:false value
+			launchResult->setVariable(SVT_INT, 0/*launch(launchMe) > 31*/); //TODO:false value
 			_vm->launchMe.clear();
 			launchResult = nullptr;
 		}
@@ -184,9 +184,9 @@ bool EventManager::handleInput() {
 
 		ScreenRegion *overRegion = _vm->_regionMan->getOverRegion();
 		if (overRegion) {
-			setVariable(tempStack->thisVar, SVT_OBJTYPE, overRegion->thisType->objectNum);
+			tempStack->thisVar.setVariable(SVT_OBJTYPE, overRegion->thisType->objectNum);
 		} else {
-			setVariable(tempStack->thisVar, SVT_INT, 0);
+			tempStack->thisVar.setVariable(SVT_INT, 0);
 		}
 		tempStack->next = nullptr;
 		if (!startNewFunctionNum(_currentEvents->func[kFocus], 1, nullptr, tempStack))
diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index 97c5130..7ed6207 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -247,7 +247,7 @@ bool continueFunction(LoadedFunction *fun) {
 
 				case BR_CALLAFUNC: {
 					int i = fun->reg.varData.intValue;
-					setVariable(fun->reg, SVT_INT, 1);
+					fun->reg.setVariable(SVT_INT, 1);
 					pauseFunction(fun);
 					if (numBIFNames)
 						setFatalInfo(
@@ -278,15 +278,15 @@ bool continueFunction(LoadedFunction *fun) {
 			// These all grab things and shove 'em into the register
 
 		case SLU_LOAD_NULL:
-			setVariable(fun->reg, SVT_NULL, 0);
+			fun->reg.setVariable(SVT_NULL, 0);
 			break;
 
 		case SLU_LOAD_FILE:
-			setVariable(fun->reg, SVT_FILE, param);
+			fun->reg.setVariable(SVT_FILE, param);
 			break;
 
 		case SLU_LOAD_VALUE:
-			setVariable(fun->reg, SVT_INT, param);
+			fun->reg.setVariable(SVT_INT, param);
 			break;
 
 		case SLU_LOAD_LOCAL:
@@ -295,27 +295,27 @@ bool continueFunction(LoadedFunction *fun) {
 			break;
 
 		case SLU_AND:
-			setVariable(fun->reg, SVT_INT,
+			fun->reg.setVariable(SVT_INT,
 					getBoolean(fun->reg) && getBoolean(fun->stack->thisVar));
 			trimStack(fun->stack);
 			break;
 
 		case SLU_OR:
-			setVariable(fun->reg, SVT_INT,
+			fun->reg.setVariable(SVT_INT,
 					getBoolean(fun->reg) || getBoolean(fun->stack->thisVar));
 			trimStack(fun->stack);
 			break;
 
 		case SLU_LOAD_FUNC:
-			setVariable(fun->reg, SVT_FUNC, param);
+			fun->reg.setVariable(SVT_FUNC, param);
 			break;
 
 		case SLU_LOAD_BUILT:
-			setVariable(fun->reg, SVT_BUILT, param);
+			fun->reg.setVariable(SVT_BUILT, param);
 			break;
 
 		case SLU_LOAD_OBJTYPE:
-			setVariable(fun->reg, SVT_OBJTYPE, param);
+			fun->reg.setVariable(SVT_OBJTYPE, param);
 			break;
 
 		case SLU_UNREG:
@@ -333,7 +333,7 @@ bool continueFunction(LoadedFunction *fun) {
 			switch (fun->stack->thisVar.varType) {
 			case SVT_NULL:
 				if (com == SLU_INDEXGET) {
-					setVariable(fun->reg, SVT_NULL, 0);
+					fun->reg.setVariable(SVT_NULL, 0);
 					trimStack(fun->stack);
 				} else {
 					return fatal(ERROR_INCDEC_UNKNOWN);
@@ -360,21 +360,21 @@ bool continueFunction(LoadedFunction *fun) {
 					trimStack(fun->stack);
 
 					if (!grab) {
-						setVariable(fun->reg, SVT_NULL, 0);
+						fun->reg.setVariable(SVT_NULL, 0);
 					} else {
 						int kk;
 						switch (com) {
 						case SLU_INCREMENT_INDEX:
 							if (!getValueType(kk, SVT_INT, *grab))
 								return false;
-							setVariable(fun->reg, SVT_INT, kk);
+							fun->reg.setVariable(SVT_INT, kk);
 							grab->varData.intValue = kk + 1;
 							break;
 
 						case SLU_DECREMENT_INDEX:
 							if (!getValueType(kk, SVT_INT, *grab))
 								return false;
-							setVariable(fun->reg, SVT_INT, kk);
+							fun->reg.setVariable(SVT_INT, kk);
 							grab->varData.intValue = kk - 1;
 							break;
 
@@ -437,8 +437,8 @@ bool continueFunction(LoadedFunction *fun) {
 			int ii;
 			if (!getValueType(ii, SVT_INT, fun->localVars[param]))
 				return false;
-			setVariable(fun->reg, SVT_INT, ii);
-			setVariable(fun->localVars[param], SVT_INT, ii + 1);
+			fun->reg.setVariable(SVT_INT, ii);
+			fun->localVars[param].setVariable(SVT_INT, ii + 1);
 		}
 			break;
 
@@ -446,8 +446,8 @@ bool continueFunction(LoadedFunction *fun) {
 			int ii;
 			if (!getValueType(ii, SVT_INT, globalVars[param]))
 				return false;
-			setVariable(fun->reg, SVT_INT, ii);
-			setVariable(globalVars[param], SVT_INT, ii + 1);
+			fun->reg.setVariable(SVT_INT, ii);
+			globalVars[param].setVariable(SVT_INT, ii + 1);
 		}
 			break;
 
@@ -455,8 +455,8 @@ bool continueFunction(LoadedFunction *fun) {
 			int ii;
 			if (!getValueType(ii, SVT_INT, fun->localVars[param]))
 				return false;
-			setVariable(fun->reg, SVT_INT, ii);
-			setVariable(fun->localVars[param], SVT_INT, ii - 1);
+			fun->reg.setVariable(SVT_INT, ii);
+			fun->localVars[param].setVariable(SVT_INT, ii - 1);
 		}
 			break;
 
@@ -464,8 +464,8 @@ bool continueFunction(LoadedFunction *fun) {
 			int ii;
 			if (!getValueType(ii, SVT_INT, globalVars[param]))
 				return false;
-			setVariable(fun->reg, SVT_INT, ii);
-			setVariable(globalVars[param], SVT_INT, ii - 1);
+			fun->reg.setVariable(SVT_INT, ii);
+			globalVars[param].setVariable(SVT_INT, ii - 1);
 		}
 			break;
 
@@ -500,7 +500,7 @@ bool continueFunction(LoadedFunction *fun) {
 			break;
 
 		case SLU_NOT:
-			setVariable(fun->reg, SVT_INT, !getBoolean(fun->reg));
+			fun->reg.setVariable(SVT_INT, !getBoolean(fun->reg));
 			break;
 
 		case SLU_BR_ZERO:
@@ -519,7 +519,7 @@ bool continueFunction(LoadedFunction *fun) {
 			int i;
 			if (!getValueType(i, SVT_INT, fun->reg))
 				return false;
-			setVariable(fun->reg, SVT_INT, -i);
+			fun->reg.setVariable(SVT_INT, -i);
 		}
 			break;
 
@@ -565,42 +565,42 @@ bool continueFunction(LoadedFunction *fun) {
 
 					switch (com) {
 					case SLU_MULT:
-						setVariable(fun->reg, SVT_INT,
+						fun->reg.setVariable(SVT_INT,
 								firstValue * secondValue);
 						break;
 
 					case SLU_MINUS:
-						setVariable(fun->reg, SVT_INT,
+						fun->reg.setVariable(SVT_INT,
 								firstValue - secondValue);
 						break;
 
 					case SLU_MODULUS:
-						setVariable(fun->reg, SVT_INT,
+						fun->reg.setVariable(SVT_INT,
 								firstValue % secondValue);
 						break;
 
 					case SLU_DIVIDE:
-						setVariable(fun->reg, SVT_INT,
+						fun->reg.setVariable(SVT_INT,
 								firstValue / secondValue);
 						break;
 
 					case SLU_LESSTHAN:
-						setVariable(fun->reg, SVT_INT,
+						fun->reg.setVariable(SVT_INT,
 								firstValue < secondValue);
 						break;
 
 					case SLU_MORETHAN:
-						setVariable(fun->reg, SVT_INT,
+						fun->reg.setVariable(SVT_INT,
 								firstValue > secondValue);
 						break;
 
 					case SLU_LESS_EQUAL:
-						setVariable(fun->reg, SVT_INT,
+						fun->reg.setVariable(SVT_INT,
 								firstValue <= secondValue);
 						break;
 
 					case SLU_MORE_EQUAL:
-						setVariable(fun->reg, SVT_INT,
+						fun->reg.setVariable(SVT_INT,
 								firstValue >= secondValue);
 						break;
 
diff --git a/engines/sludge/loadsave.cpp b/engines/sludge/loadsave.cpp
index 22781ea..bb41d0a 100644
--- a/engines/sludge/loadsave.cpp
+++ b/engines/sludge/loadsave.cpp
@@ -71,7 +71,7 @@ bool handleSaveLoad() {
 	if (!g_sludge->loadNow.empty()) {
 		if (g_sludge->loadNow[0] == ':') {
 			saveGame(g_sludge->loadNow.c_str() + 1);
-			setVariable(saverFunc->reg, SVT_INT, 1);
+			saverFunc->reg.setVariable(SVT_INT, 1);
 		} else {
 			if (!loadGame(g_sludge->loadNow))
 				return false;
diff --git a/engines/sludge/savedata.cpp b/engines/sludge/savedata.cpp
index 687c913..f8b07a5 100644
--- a/engines/sludge/savedata.cpp
+++ b/engines/sludge/savedata.cpp
@@ -138,11 +138,11 @@ bool CustomSaveHelper::fileToStack(const Common::String &filename, StackHandler
 					break;
 
 				case 1:
-					setVariable(stringVar, SVT_INT, fp->readUint32LE());
+					stringVar.setVariable(SVT_INT, fp->readUint32LE());
 					break;
 
 				case 2:
-					setVariable(stringVar, SVT_INT, fp->readByte());
+					stringVar.setVariable(SVT_INT, fp->readByte());
 					break;
 
 				default:
diff --git a/engines/sludge/sound.cpp b/engines/sludge/sound.cpp
index 306fd49..25b239c 100644
--- a/engines/sludge/sound.cpp
+++ b/engines/sludge/sound.cpp
@@ -402,7 +402,7 @@ bool SoundManager::getSoundCacheStack(StackHandler *sH) {
 
 	for (int a = 0; a < MAX_SAMPLES; a++) {
 		if (_soundCache[a].fileLoaded != -1) {
-			setVariable(newFileHandle, SVT_FILE, _soundCache[a].fileLoaded);
+			newFileHandle.setVariable(SVT_FILE, _soundCache[a].fileLoaded);
 			if (!addVarToStackQuick(newFileHandle, sH->first))
 				return false;
 			if (sH->last == NULL)
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index dc5604f..faaf9bd 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -76,10 +76,10 @@ void Variable::unlinkVar() {
 	}
 }
 
-void setVariable(Variable &thisVar, VariableType vT, int value) {
-	thisVar.unlinkVar();
-	thisVar.varType = vT;
-	thisVar.varData.intValue = value;
+void Variable::setVariable(VariableType vT, int value) {
+	unlinkVar();
+	varType = vT;
+	varData.intValue = value;
 }
 
 void newAnimationVariable(Variable &thisVar, PersonaAnimation  *i) {
@@ -236,7 +236,7 @@ int compareVars(const Variable &var1, const Variable &var2) {
 }
 
 void compareVariablesInSecond(const Variable &var1, Variable &var2) {
-	setVariable(var2, SVT_INT, compareVars(var1, var2));
+	var2.setVariable(SVT_INT, compareVars(var1, var2));
 }
 
 void makeTextVar(Variable &thisVar, const Common::String &txt) {
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 5a750b5..3381051 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -75,6 +75,7 @@ struct Variable {
 	}
 
 	void unlinkVar();
+	void setVariable(VariableType vT, int value);
 };
 
 struct VariableStack {
@@ -84,7 +85,6 @@ struct VariableStack {
 
 // Setting variables
 
-void setVariable(Variable &thisVar, VariableType vT, int value);
 bool copyVariable(const Variable &from, Variable &to);
 bool loadStringToVar(Variable &thisVar, int value);
 void newAnimationVariable(Variable &thisVar, struct PersonaAnimation  *i);


Commit: 56f0821876b20da1c20afde9799bb22829cc537d
    https://github.com/scummvm/scummvm/commit/56f0821876b20da1c20afde9799bb22829cc537d
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move save/loadVariable() to struct Variable

Changed paths:
    engines/sludge/function.cpp
    engines/sludge/loadsave.cpp
    engines/sludge/variable.cpp
    engines/sludge/variable.h


diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index 7ed6207..232a040 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -749,14 +749,14 @@ void saveFunction(LoadedFunction *fun, Common::WriteStream *stream) {
 	stream->writeByte(fun->cancelMe);
 	stream->writeByte(fun->returnSomething);
 	stream->writeByte(fun->isSpeech);
-	saveVariable(&(fun->reg), stream);
+	fun->reg.save(stream);
 
 	if (fun->freezerLevel) {
 		fatal(ERROR_GAME_SAVE_FROZEN);
 	}
 	saveStack(fun->stack, stream);
 	for (a = 0; a < fun->numLocals; a++) {
-		saveVariable(&(fun->localVars[a]), stream);
+		fun->localVars[a].save(stream);
 	}
 }
 
@@ -785,13 +785,13 @@ LoadedFunction *loadFunction(Common::SeekableReadStream *stream) {
 	buildFunc->cancelMe = stream->readByte();
 	buildFunc->returnSomething = stream->readByte();
 	buildFunc->isSpeech = stream->readByte();
-	loadVariable(&(buildFunc->reg), stream);
+	buildFunc->reg.load(stream);
 	loadFunctionCode(buildFunc);
 
 	buildFunc->stack = loadStack(stream, NULL);
 
 	for (a = 0; a < buildFunc->numLocals; a++) {
-		loadVariable(&(buildFunc->localVars[a]), stream);
+		buildFunc->localVars[a].load(stream);
 	}
 
 	return buildFunc;
diff --git a/engines/sludge/loadsave.cpp b/engines/sludge/loadsave.cpp
index bb41d0a..453e78f 100644
--- a/engines/sludge/loadsave.cpp
+++ b/engines/sludge/loadsave.cpp
@@ -132,7 +132,7 @@ bool saveGame(const Common::String &fname) {
 	}
 
 	for (int a = 0; a < numGlobals; a++) {
-		saveVariable(&globalVars[a], fp);
+		globalVars[a].save(fp);
 	}
 
 	g_sludge->_peopleMan->savePeople(fp);
@@ -258,7 +258,7 @@ bool loadGame(const Common::String &fname) {
 
 	for (int a = 0; a < numGlobals; a++) {
 		globalVars[a].unlinkVar();
-		loadVariable(&globalVars[a], fp);
+		globalVars[a].load(fp);
 	}
 
 	g_sludge->_peopleMan->loadPeople(fp);
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index faaf9bd..d52e5ef 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -554,7 +554,7 @@ void saveStack(VariableStack *vs, Common::WriteStream *stream) {
 	stream->writeUint16BE(elements);
 	search = vs;
 	for (a = 0; a < elements; a++) {
-		saveVariable(&search->thisVar, stream);
+		search->thisVar.save(stream);
 		search = search->next;
 	}
 }
@@ -569,7 +569,7 @@ VariableStack *loadStack(Common::SeekableReadStream *stream, VariableStack **las
 		VariableStack *nS = new VariableStack;
 		if (!checkNew(nS))
 			return NULL;
-		loadVariable(&(nS->thisVar), stream);
+		nS->thisVar.load(stream);
 		if (last && a == elements - 1) {
 			*last = nS;
 		}
@@ -656,72 +656,72 @@ StackHandler *loadStackRef(Common::SeekableReadStream *stream) {
 //----------------------------------------------------------------------
 // For saving and loading variables...
 //----------------------------------------------------------------------
-bool saveVariable(Variable *from, Common::WriteStream *stream) {
-	stream->writeByte(from->varType);
-	switch (from->varType) {
+bool Variable::save(Common::WriteStream *stream) {
+	stream->writeByte(varType);
+	switch (varType) {
 		case SVT_INT:
 		case SVT_FUNC:
 		case SVT_BUILT:
 		case SVT_FILE:
 		case SVT_OBJTYPE:
-			stream->writeUint32LE(from->varData.intValue);
+			stream->writeUint32LE(varData.intValue);
 			return true;
 
 		case SVT_STRING:
-			writeString(from->varData.theString, stream);
+			writeString(varData.theString, stream);
 			return true;
 
 		case SVT_STACK:
-			return saveStackRef(from->varData.theStack, stream);
+			return saveStackRef(varData.theStack, stream);
 
 		case SVT_COSTUME:
-			from->varData.costumeHandler->save(stream);
+			varData.costumeHandler->save(stream);
 			return false;
 
 		case SVT_ANIM:
-			from->varData.animHandler->save(stream);
+			varData.animHandler->save(stream);
 			return false;
 
 		case SVT_NULL:
 			return false;
 
 		default:
-			fatal("Can't save variables of this type:", (from->varType < SVT_NUM_TYPES) ? typeName[from->varType] : "bad ID");
+			fatal("Can't save variables of this type:", (varType < SVT_NUM_TYPES) ? typeName[varType] : "bad ID");
 	}
 	return true;
 }
 
-bool loadVariable(Variable *to, Common::SeekableReadStream *stream) {
-	to->varType = (VariableType)stream->readByte();
-	switch (to->varType) {
+bool Variable::load(Common::SeekableReadStream *stream) {
+	varType = (VariableType)stream->readByte();
+	switch (varType) {
 		case SVT_INT:
 		case SVT_FUNC:
 		case SVT_BUILT:
 		case SVT_FILE:
 		case SVT_OBJTYPE:
-			to->varData.intValue = stream->readUint32LE();
+			varData.intValue = stream->readUint32LE();
 			return true;
 
 		case SVT_STRING:
-			to->varData.theString = createCString(readString(stream));
+			varData.theString = createCString(readString(stream));
 			return true;
 
 		case SVT_STACK:
-			to->varData.theStack = loadStackRef(stream);
+			varData.theStack = loadStackRef(stream);
 			return true;
 
 		case SVT_COSTUME:
-			to->varData.costumeHandler = new Persona;
-			if (!checkNew(to->varData.costumeHandler))
+			varData.costumeHandler = new Persona;
+			if (!checkNew(varData.costumeHandler))
 				return false;
-			to->varData.costumeHandler->load(stream);
+			varData.costumeHandler->load(stream);
 			return true;
 
 		case SVT_ANIM:
-			to->varData.animHandler = new PersonaAnimation;
-			if (!checkNew(to->varData.animHandler))
+			varData.animHandler = new PersonaAnimation;
+			if (!checkNew(varData.animHandler))
 				return false;
-			to->varData.animHandler->load(stream);
+			varData.animHandler->load(stream);
 			return true;
 
 		default:
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 3381051..c78976a 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -76,6 +76,10 @@ struct Variable {
 
 	void unlinkVar();
 	void setVariable(VariableType vT, int value);
+
+	// Load & save
+	bool save(Common::WriteStream *stream);
+	bool load(Common::SeekableReadStream *stream);
 };
 
 struct VariableStack {
@@ -120,9 +124,6 @@ bool makeFastArraySize(Variable &to, int size);
 Variable *fastArrayGetByIndex(FastArrayHandler *vS, uint theIndex);
 
 // load & save
-bool saveVariable(Variable *from, Common::WriteStream *stream);
-bool loadVariable(Variable *to, Common::SeekableReadStream *stream);
-
 void saveStack(VariableStack *vs, Common::WriteStream *stream);
 VariableStack *loadStack(Common::SeekableReadStream *stream, VariableStack **last);
 bool saveStackRef(StackHandler *vs, Common::WriteStream *stream);


Commit: 98f764050a67f67c6bfaa4fb4ba685dd6ee6a0fb
    https://github.com/scummvm/scummvm/commit/98f764050a67f67c6bfaa4fb4ba685dd6ee6a0fb
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move copyVariable to struct Variable

Changed paths:
    engines/sludge/builtin.cpp
    engines/sludge/function.cpp
    engines/sludge/variable.cpp
    engines/sludge/variable.h


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index e899014..2ee7de3 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -443,7 +443,7 @@ builtIn(pickOne) {
 	// Return value
 	while (numParams--) {
 		if (i == numParams)
-			copyVariable(fun->stack->thisVar, fun->reg);
+			fun->reg.copyFrom(fun->stack->thisVar);
 		trimStack(fun->stack);
 	}
 	return BR_CONTINUE;
@@ -646,7 +646,7 @@ builtIn(popFromStack) {
 	}
 
 	// Return value
-	copyVariable(fun->stack->thisVar.varData.theStack->first->thisVar, fun->reg);
+	fun->reg.copyFrom(fun->stack->thisVar.varData.theStack->first->thisVar);
 	trimStack(fun->stack->thisVar.varData.theStack->first);
 	trimStack(fun->stack);
 	return BR_CONTINUE;
@@ -664,7 +664,7 @@ builtIn(peekStart) {
 	}
 
 	// Return value
-	copyVariable(fun->stack->thisVar.varData.theStack->first->thisVar, fun->reg);
+	fun->reg.copyFrom(fun->stack->thisVar.varData.theStack->first->thisVar);
 	trimStack(fun->stack);
 	return BR_CONTINUE;
 }
@@ -681,7 +681,7 @@ builtIn(peekEnd) {
 	}
 
 	// Return value
-	copyVariable(fun->stack->thisVar.varData.theStack->last->thisVar, fun->reg);
+	fun->reg.copyFrom(fun->stack->thisVar.varData.theStack->last->thisVar);
 	trimStack(fun->stack);
 	return BR_CONTINUE;
 }
diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index 232a040..f876746 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -190,7 +190,7 @@ bool continueFunction(LoadedFunction *fun) {
 			if (fun->calledBy) {
 				LoadedFunction *returnTo = fun->calledBy;
 				if (fun->returnSomething)
-					copyVariable(fun->reg, returnTo->reg);
+					returnTo->reg.copyFrom(fun->reg);
 				finishFunction(fun);
 				fun = returnTo;
 				restartFunction(fun);
@@ -290,7 +290,7 @@ bool continueFunction(LoadedFunction *fun) {
 			break;
 
 		case SLU_LOAD_LOCAL:
-			if (!copyVariable(fun->localVars[param], fun->reg))
+			if (!fun->reg.copyFrom(fun->localVars[param]))
 				return false;
 			break;
 
@@ -379,7 +379,7 @@ bool continueFunction(LoadedFunction *fun) {
 							break;
 
 						default:
-							if (!copyVariable(*grab, fun->reg))
+							if (!fun->reg.copyFrom(*grab))
 								return false;
 						}
 					}
@@ -418,7 +418,7 @@ bool continueFunction(LoadedFunction *fun) {
 						fun->stack->thisVar.varData.fastArray, ii);
 				if (v == NULL)
 					return fatal("Not within bounds of fast array.");
-				if (!copyVariable(fun->stack->next->thisVar, *v))
+				if (!v->copyFrom(fun->stack->next->thisVar))
 					return false;
 				trimStack(fun->stack);
 				trimStack(fun->stack);
@@ -470,22 +470,17 @@ bool continueFunction(LoadedFunction *fun) {
 			break;
 
 		case SLU_SET_LOCAL:
-			if (!copyVariable(fun->reg, fun->localVars[param]))
+			if (!fun->localVars[param].copyFrom(fun->reg))
 				return false;
 			break;
 
 		case SLU_SET_GLOBAL:
-//			newDebug ("  Copying TO global variable", param);
-//			newDebug ("  Global type at the moment", globalVars[param].varType);
-			if (!copyVariable(fun->reg, globalVars[param]))
+			if (!globalVars[param].copyFrom(fun->reg))
 				return false;
-//			newDebug ("  New type", globalVars[param].varType);
 			break;
 
 		case SLU_LOAD_GLOBAL:
-//			newDebug ("  Copying FROM global variable", param);
-//			newDebug ("  Global type at the moment", globalVars[param].varType);
-			if (!copyVariable(globalVars[param], fun->reg))
+			if (!fun->reg.copyFrom(globalVars[param]))
 				return false;
 			break;
 
@@ -685,7 +680,7 @@ int startNewFunctionNum(uint funcNum, uint numParamsExpected,
 		if (vStack == NULL)
 			return fatal(
 					"Corrupted file!The stack's empty and there were still parameters expected");
-		copyVariable(vStack->thisVar, newFunc->localVars[numParamsExpected]);
+		newFunc->localVars[numParamsExpected].copyFrom(vStack->thisVar);
 		trimStack(vStack);
 	}
 
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index d52e5ef..90a2f14 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -332,37 +332,37 @@ bool getBoolean(const Variable &from) {
 	return true;
 }
 
-bool copyMain(const Variable &from, Variable &to) {
-	to.varType = from.varType;
-	switch (to.varType) {
+bool Variable::copyMain(const Variable &from) {
+	varType = from.varType;
+	switch (varType) {
 		case SVT_INT:
 		case SVT_FUNC:
 		case SVT_BUILT:
 		case SVT_FILE:
 		case SVT_OBJTYPE:
-			to.varData.intValue = from.varData.intValue;
+			varData.intValue = from.varData.intValue;
 			return true;
 
 		case SVT_FASTARRAY:
-			to.varData.fastArray = from.varData.fastArray;
-			to.varData.fastArray->timesUsed++;
+			varData.fastArray = from.varData.fastArray;
+			varData.fastArray->timesUsed++;
 			return true;
 
 		case SVT_STRING:
-			to.varData.theString = createCString(from.varData.theString);
-			return to.varData.theString ? true : false;
+			varData.theString = createCString(from.varData.theString);
+			return varData.theString ? true : false;
 
 		case SVT_STACK:
-			to.varData.theStack = from.varData.theStack;
-			to.varData.theStack->timesUsed++;
+			varData.theStack = from.varData.theStack;
+			varData.theStack->timesUsed++;
 			return true;
 
 		case SVT_COSTUME:
-			to.varData.costumeHandler = from.varData.costumeHandler;
+			varData.costumeHandler = from.varData.costumeHandler;
 			return true;
 
 		case SVT_ANIM:
-			to.varData.animHandler = new PersonaAnimation(from.varData.animHandler);
+			varData.animHandler = new PersonaAnimation(from.varData.animHandler);
 			return true;
 
 		case SVT_NULL:
@@ -375,9 +375,9 @@ bool copyMain(const Variable &from, Variable &to) {
 	return false;
 }
 
-bool copyVariable(const Variable &from, Variable &to) {
-	to.unlinkVar();
-	return copyMain(from, to);
+bool Variable::copyFrom(const Variable &from) {
+	unlinkVar();
+	return copyMain(from);
 }
 
 Variable *fastArrayGetByIndex(FastArrayHandler *vS, uint theIndex) {
@@ -412,7 +412,7 @@ bool makeFastArrayFromStack(Variable &to, const StackHandler *stacky) {
 	VariableStack *allV = stacky->first;
 	size = 0;
 	while (allV) {
-		copyMain(allV->thisVar, to.varData.fastArray->fastVariables[size]);
+		to.varData.fastArray->fastVariables[size].copyMain(allV->thisVar);
 		size++;
 		allV = allV->next;
 	}
@@ -424,7 +424,7 @@ bool addVarToStack(const Variable &va, VariableStack *&thisStack) {
 	if (!checkNew(newStack))
 		return false;
 
-	if (!copyMain(va, newStack->thisVar))
+	if (!newStack->thisVar.copyMain(va))
 		return false;
 	newStack->next = thisStack;
 	thisStack = newStack;
@@ -454,7 +454,7 @@ bool stackSetByIndex(VariableStack *vS, uint theIndex, const Variable &va) {
 		if (!vS)
 			return fatal("Index past end of stack.");
 	}
-	return copyVariable(va, vS->thisVar);
+	return vS->thisVar.copyFrom(va);
 }
 
 Variable *stackGetByIndex(VariableStack *vS, uint theIndex) {
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index c78976a..22ed395 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -77,6 +77,10 @@ struct Variable {
 	void unlinkVar();
 	void setVariable(VariableType vT, int value);
 
+	// Copy from another variable
+	bool copyFrom(const Variable &from);
+	bool copyMain(const Variable &from); // without variable unlink
+
 	// Load & save
 	bool save(Common::WriteStream *stream);
 	bool load(Common::SeekableReadStream *stream);
@@ -88,8 +92,6 @@ struct VariableStack {
 };
 
 // Setting variables
-
-bool copyVariable(const Variable &from, Variable &to);
 bool loadStringToVar(Variable &thisVar, int value);
 void newAnimationVariable(Variable &thisVar, struct PersonaAnimation  *i);
 void newCostumeVariable(Variable &thisVar, struct Persona *i);


Commit: 805a47b74ab9b2ffa299d5c8401f178db022d4d8
    https://github.com/scummvm/scummvm/commit/805a47b74ab9b2ffa299d5c8401f178db022d4d8
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move text related functions to struct Variable

Changed paths:
    engines/sludge/builtin.cpp
    engines/sludge/event.cpp
    engines/sludge/function.cpp
    engines/sludge/savedata.cpp
    engines/sludge/variable.cpp
    engines/sludge/variable.h


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 2ee7de3..20b4ba8 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -113,7 +113,7 @@ static BuiltReturn sayCore(int numParams, LoadedFunction *fun, bool sayIt) {
 			// fall through
 
 		case 2:
-			newText = getTextFromAnyVar(fun->stack->thisVar);
+			newText = fun->stack->thisVar.getTextFromAnyVar();
 			trimStack(fun->stack);
 			if (!getValueType(objT, SVT_OBJTYPE, fun->stack->thisVar))
 				return BR_ERROR;
@@ -197,13 +197,13 @@ builtIn(getMouseScreenY) {
 
 builtIn(getStatusText) {
 	UNUSEDALL
-	makeTextVar(fun->reg, statusBarText());
+	fun->reg.makeTextVar(statusBarText());
 	return BR_CONTINUE;
 }
 
 builtIn(getMatchingFiles) {
 	UNUSEDALL
-	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	fun->reg.unlinkVar();
 
@@ -227,7 +227,7 @@ builtIn(saveGame) {
 		fatal("Can't save game state while the engine is frozen");
 	}
 
-	g_sludge->loadNow = getTextFromAnyVar(fun->stack->thisVar);
+	g_sludge->loadNow = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 
 	Common::String aaaaa = encodeFilename(g_sludge->loadNow);
@@ -244,7 +244,7 @@ builtIn(saveGame) {
 
 builtIn(fileExists) {
 	UNUSEDALL
-	g_sludge->loadNow = getTextFromAnyVar(fun->stack->thisVar);
+	g_sludge->loadNow = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	Common::String aaaaa = encodeFilename(g_sludge->loadNow);
 	g_sludge->loadNow.clear();
@@ -273,7 +273,7 @@ builtIn(fileExists) {
 
 builtIn(loadGame) {
 	UNUSEDALL
-	Common::String aaaaa = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String aaaaa = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	g_sludge->loadNow.clear();
 	g_sludge->loadNow = encodeFilename(aaaaa);
@@ -462,7 +462,7 @@ builtIn(substring) {
 	if (!getValueType(start, SVT_INT, fun->stack->thisVar))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	wholeString = getTextFromAnyVar(fun->stack->thisVar);
+	wholeString = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 
 	UTF8Converter convert;
@@ -484,13 +484,13 @@ builtIn(substring) {
 
 	Common::String newString(wholeString.begin() + startoffset, wholeString.begin() + endoffset);
 
-	makeTextVar(fun->reg, newString);
+	fun->reg.makeTextVar(newString);
 	return BR_CONTINUE;
 }
 
 builtIn(stringLength) {
 	UNUSEDALL
-	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	fun->reg.setVariable(SVT_INT, g_sludge->_txtMan->stringLength(newText));
 	return BR_CONTINUE;
@@ -777,7 +777,7 @@ builtIn(setFont) {
 		return BR_ERROR;
 	//              newDebug ("  Height:", newHeight);
 	trimStack(fun->stack);
-	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	//              newDebug ("  Character supported:", newText);
 	trimStack(fun->stack);
 	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
@@ -792,7 +792,7 @@ builtIn(setFont) {
 
 builtIn(inFont) {
 	UNUSEDALL
-	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 
 	// Return value
@@ -802,7 +802,7 @@ builtIn(inFont) {
 
 builtIn(pasteString) {
 	UNUSEDALL
-	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	int y, x;
 	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
@@ -871,7 +871,7 @@ builtIn(costume) {
 
 builtIn(launch) {
 	UNUSEDALL
-	Common::String newTextA = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newTextA = fun->stack->thisVar.getTextFromAnyVar();
 
 	Common::String newText = encodeFilename(newTextA);
 
@@ -1293,7 +1293,7 @@ builtIn(getOverObject) {
 
 builtIn(rename) {
 	UNUSEDALL
-	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	int objT;
 	trimStack(fun->stack);
 	if (!getValueType(objT, SVT_OBJTYPE, fun->stack->thisVar))
@@ -1735,7 +1735,7 @@ builtIn(addStatus) {
 
 builtIn(statusText) {
 	UNUSEDALL
-	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	setStatusBar(newText);
 	return BR_CONTINUE;
@@ -1891,7 +1891,7 @@ builtIn(cancelSub) {
 
 builtIn(stringWidth) {
 	UNUSEDALL
-	Common::String theText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String theText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 
 	// Return value
@@ -2067,7 +2067,7 @@ builtIn(fetchEvent) {
 builtIn(deleteFile) {
 	UNUSEDALL
 
-	Common::String namNormal = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String namNormal = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	Common::String nam = encodeFilename(namNormal);
 	namNormal.clear();
@@ -2083,14 +2083,14 @@ builtIn(renameFile) {
 	Common::String temp;
 
 	temp.clear();
-	temp = getTextFromAnyVar(fun->stack->thisVar);
+	temp = fun->stack->thisVar.getTextFromAnyVar();
 	Common::String newnam = encodeFilename(temp);
 	trimStack(fun->stack);
 	if (failSecurityCheck(newnam))
 		return BR_ERROR;
 	temp.clear();
 
-	temp = getTextFromAnyVar(fun->stack->thisVar);
+	temp = fun->stack->thisVar.getTextFromAnyVar();
 	Common::String nam = encodeFilename(temp);
 	trimStack(fun->stack);
 	if (failSecurityCheck(nam))
@@ -2114,7 +2114,7 @@ builtIn(cacheSound) {
 
 builtIn(burnString) {
 	UNUSEDALL
-	Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	int y, x;
 	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
@@ -2207,7 +2207,7 @@ builtIn(getSoundCache) {
 builtIn(saveCustomData) {
 	UNUSEDALL
 	// saveCustomData (thisStack, fileName);
-	Common::String fileNameB = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String fileNameB = fun->stack->thisVar.getTextFromAnyVar();
 
 	Common::String fileName = encodeFilename(fileNameB);
 
@@ -2228,7 +2228,7 @@ builtIn(saveCustomData) {
 builtIn(loadCustomData) {
 	UNUSEDALL
 
-	Common::String newTextA = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String newTextA = fun->stack->thisVar.getTextFromAnyVar();
 
 	Common::String newText = encodeFilename(newTextA);
 
@@ -2378,7 +2378,7 @@ builtIn(_rem_launchWith) {
 	trimStack(fun->stack);
 
 	// To support some windows only games
-	Common::String filename = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String filename = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 
 	if (filename.hasSuffix(".exe")) {
@@ -2418,7 +2418,7 @@ builtIn(showThumbnail) {
 	trimStack(fun->stack);
 
 	// Encode the name!Encode the name!
-	Common::String aaaaa = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String aaaaa = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	Common::String file = encodeFilename(aaaaa);
 	g_sludge->_gfxMan->showThumbnail(file, x, y);
@@ -2490,7 +2490,7 @@ builtIn(_rem_registryGetString) {
 
 builtIn(quitWithFatalError) {
 	UNUSEDALL
-	Common::String mess = getTextFromAnyVar(fun->stack->thisVar);
+	Common::String mess = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	fatal(mess);
 	return BR_ERROR;
diff --git a/engines/sludge/event.cpp b/engines/sludge/event.cpp
index 16e02e5..098720b 100644
--- a/engines/sludge/event.cpp
+++ b/engines/sludge/event.cpp
@@ -320,7 +320,7 @@ bool EventManager::handleInput() {
 			VariableStack *tempStack = new VariableStack;
 			if (!checkNew(tempStack))
 				return false;
-			makeTextVar(tempStack->thisVar, tempString);
+			tempStack->thisVar.makeTextVar(tempString);
 			tempStack->next = nullptr;
 			if (!startNewFunctionNum(_currentEvents->func[kSpace], 1, nullptr, tempStack))
 				return false;
diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index f876746..ed7280f 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -322,7 +322,7 @@ bool continueFunction(LoadedFunction *fun) {
 			break;
 
 		case SLU_LOAD_STRING:
-			if (!loadStringToVar(fun->reg, param)) {
+			if (!fun->reg.loadStringToVar(param)) {
 				return false;
 			}
 			break;
diff --git a/engines/sludge/savedata.cpp b/engines/sludge/savedata.cpp
index f8b07a5..b103523 100644
--- a/engines/sludge/savedata.cpp
+++ b/engines/sludge/savedata.cpp
@@ -133,7 +133,7 @@ bool CustomSaveHelper::fileToStack(const Common::String &filename, StackHandler
 			switch (i) {
 				case 0: {
 					Common::String g = readStringEncoded(fp);
-					makeTextVar(stringVar, g);
+					stringVar.makeTextVar(g);
 				}
 					break;
 
@@ -154,7 +154,7 @@ bool CustomSaveHelper::fileToStack(const Common::String &filename, StackHandler
 			char *line = readTextPlain(fp);
 			if (!line)
 				break;
-			makeTextVar(stringVar, line);
+			stringVar.makeTextVar(line);
 		}
 
 		if (sH->first == NULL) {
@@ -218,7 +218,7 @@ bool CustomSaveHelper::stackToFile(const Common::String &filename, const Variabl
 					return false;
 			}
 		} else {
-			Common::String makeSureItsText = getTextFromAnyVar(hereWeAre -> thisVar);
+			Common::String makeSureItsText = hereWeAre->thisVar.getTextFromAnyVar();
 			if (makeSureItsText.empty())
 				break;
 			fp->writeString((makeSureItsText + "\n").c_str());
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 90a2f14..8385476 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -160,7 +160,7 @@ bool getSavedGamesStack(StackHandler *sH, const Common::String &ext) {
 	Common::StringArray::iterator it;
 	for (it = sa.begin(); it != sa.end(); ++it) {
 		(*it).erase((*it).size() - len, len);
-		makeTextVar(newName, (*it));
+		newName.makeTextVar((*it));
 		if (!addVarToStack(newName, sH->first))
 			return false;
 		if (sH->last == NULL)
@@ -195,8 +195,8 @@ void addVariablesInSecond(Variable &var1, Variable &var2) {
 	if (var1.varType == SVT_INT && var2.varType == SVT_INT) {
 		var2.varData.intValue += var1.varData.intValue;
 	} else {
-		Common::String string1 = getTextFromAnyVar(var1);
-		Common::String string2 = getTextFromAnyVar(var2);
+		Common::String string1 = var1.getTextFromAnyVar();
+		Common::String string2 = var2.getTextFromAnyVar();
 
 		var2.unlinkVar();
 		var2.varData.theString = createCString(string1 + string2);
@@ -239,30 +239,30 @@ void compareVariablesInSecond(const Variable &var1, Variable &var2) {
 	var2.setVariable(SVT_INT, compareVars(var1, var2));
 }
 
-void makeTextVar(Variable &thisVar, const Common::String &txt) {
-	thisVar.unlinkVar();
-	thisVar.varType = SVT_STRING;
-	thisVar.varData.theString = createCString(txt);
+void Variable::makeTextVar(const Common::String &txt) {
+	unlinkVar();
+	varType = SVT_STRING;
+	varData.theString = createCString(txt);
 }
 
-bool loadStringToVar(Variable &thisVar, int value) {
-	makeTextVar(thisVar, g_sludge->_resMan->getNumberedString(value));
-	return (bool)(thisVar.varData.theString != NULL);
+bool Variable::loadStringToVar(int value) {
+	makeTextVar(g_sludge->_resMan->getNumberedString(value));
+	return (bool)(varData.theString != NULL);
 }
 
-Common::String getTextFromAnyVar(const Variable &from) {
-	switch (from.varType) {
+Common::String Variable::getTextFromAnyVar() {
+	switch (varType) {
 		case SVT_STRING:
-			return from.varData.theString;
+			return varData.theString;
 
 		case SVT_FASTARRAY: {
 			Common::String builder = "FAST:";
 			Common::String builder2 = "";
 			Common::String grabText = "";
 
-			for (int i = 0; i < from.varData.fastArray->size; i++) {
+			for (int i = 0; i < varData.fastArray->size; i++) {
 				builder2 = builder + " ";
-				grabText = getTextFromAnyVar(from.varData.fastArray->fastVariables[i]);
+				grabText = varData.fastArray->fastVariables[i].getTextFromAnyVar();
 				builder.clear();
 				builder = builder2 + grabText;
 			}
@@ -274,11 +274,11 @@ Common::String getTextFromAnyVar(const Variable &from) {
 			Common::String builder2 = "";
 			Common::String grabText = "";
 
-			VariableStack *stacky = from.varData.theStack->first;
+			VariableStack *stacky = varData.theStack->first;
 
 			while (stacky) {
 				builder2 = builder + " ";
-				grabText = getTextFromAnyVar(stacky->thisVar);
+				grabText = stacky->thisVar.getTextFromAnyVar();
 				builder.clear();
 				builder = builder2 + grabText;
 				stacky = stacky->next;
@@ -287,16 +287,16 @@ Common::String getTextFromAnyVar(const Variable &from) {
 		}
 
 		case SVT_INT: {
-			Common::String buff = Common::String::format("%i", from.varData.intValue);
+			Common::String buff = Common::String::format("%i", varData.intValue);
 			return buff;
 		}
 
 		case SVT_FILE: {
-			return g_sludge->_resMan->resourceNameFromNum(from.varData.intValue);
+			return g_sludge->_resMan->resourceNameFromNum(varData.intValue);
 		}
 
 		case SVT_OBJTYPE: {
-			ObjectType *thisType = g_sludge->_objMan->findObjectType(from.varData.intValue);
+			ObjectType *thisType = g_sludge->_objMan->findObjectType(varData.intValue);
 			if (thisType)
 				return thisType->screenName;
 			break;
@@ -306,7 +306,7 @@ Common::String getTextFromAnyVar(const Variable &from) {
 			break;
 	}
 
-	return typeName[from.varType];
+	return typeName[varType];
 }
 
 bool getBoolean(const Variable &from) {
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 22ed395..aa1e2aa 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -84,6 +84,14 @@ struct Variable {
 	// Load & save
 	bool save(Common::WriteStream *stream);
 	bool load(Common::SeekableReadStream *stream);
+
+	// Text variable
+	void makeTextVar(const Common::String &txt);
+	bool loadStringToVar(int value);
+	Common::String getTextFromAnyVar();
+
+	// Get Text
+
 };
 
 struct VariableStack {
@@ -92,16 +100,13 @@ struct VariableStack {
 };
 
 // Setting variables
-bool loadStringToVar(Variable &thisVar, int value);
 void newAnimationVariable(Variable &thisVar, struct PersonaAnimation  *i);
 void newCostumeVariable(Variable &thisVar, struct Persona *i);
-void makeTextVar(Variable &thisVar, const Common::String &txt);
 void addVariablesInSecond(Variable &var1, Variable &var2);
 void compareVariablesInSecond(const Variable &var1, Variable &var2);
 
 // Misc.
 
-Common::String getTextFromAnyVar(const Variable &from);
 struct Persona *getCostumeFromVar(Variable &thisVar);
 struct PersonaAnimation  *getAnimationFromVar(Variable &thisVar);
 bool getBoolean(const Variable &from);


Commit: 04ef7becf37fbc5ed0ac9183aa8355ffa838df4b
    https://github.com/scummvm/scummvm/commit/04ef7becf37fbc5ed0ac9183aa8355ffa838df4b
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move PersonAnimation functions into struct Variable

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


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 20b4ba8..f282d68 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -165,7 +165,7 @@ builtIn(howFrozen) {
 
 builtIn(setCursor) {
 	UNUSEDALL
-	PersonaAnimation *aa = getAnimationFromVar(fun->stack->thisVar);
+	PersonaAnimation *aa = fun->stack->thisVar.getAnimationFromVar();
 	g_sludge->_cursorMan->pickAnimCursor(aa);
 	trimStack(fun->stack);
 	return BR_CONTINUE;
@@ -370,7 +370,7 @@ builtIn(pasteImage) {
 	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	PersonaAnimation *pp = getAnimationFromVar(fun->stack->thisVar);
+	PersonaAnimation *pp = fun->stack->thisVar.getAnimationFromVar();
 	trimStack(fun->stack);
 	if (pp == NULL)
 		return BR_CONTINUE;
@@ -840,7 +840,7 @@ builtIn(anim) {
 	ba->theSprites = sprBanky;
 
 	// Return value
-	newAnimationVariable(fun->reg, ba);
+	fun->reg.makeAnimationVariable(ba);
 
 	return BR_CONTINUE;
 }
@@ -860,7 +860,7 @@ builtIn(costume) {
 	if (!checkNew(newPersona->animation))
 		return BR_ERROR;
 	for (iii = numParams - 1; iii >= 0; iii--) {
-		newPersona->animation[iii] = getAnimationFromVar(fun->stack->thisVar);
+		newPersona->animation[iii] = fun->stack->thisVar.getAnimationFromVar();
 		trimStack(fun->stack);
 	}
 
@@ -1553,7 +1553,7 @@ builtIn(pasteCharacter) {
 builtIn(animate) {
 	UNUSEDALL
 	int obj;
-	PersonaAnimation *pp = getAnimationFromVar(fun->stack->thisVar);
+	PersonaAnimation *pp = fun->stack->thisVar.getAnimationFromVar();
 	if (pp == NULL)
 		return BR_ERROR;
 	trimStack(fun->stack);
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 8385476..27b38db 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -82,20 +82,20 @@ void Variable::setVariable(VariableType vT, int value) {
 	varData.intValue = value;
 }
 
-void newAnimationVariable(Variable &thisVar, PersonaAnimation  *i) {
-	thisVar.unlinkVar();
-	thisVar.varType = SVT_ANIM;
-	thisVar.varData.animHandler = i;
+void Variable::makeAnimationVariable(PersonaAnimation  *i) {
+	unlinkVar();
+	varType = SVT_ANIM;
+	varData.animHandler = i;
 }
 
-PersonaAnimation *getAnimationFromVar(Variable &thisVar) {
-	if (thisVar.varType == SVT_ANIM)
-		return new PersonaAnimation(thisVar.varData.animHandler);
+PersonaAnimation *Variable::getAnimationFromVar() {
+	if (varType == SVT_ANIM)
+		return new PersonaAnimation(varData.animHandler);
 
-	if (thisVar.varType == SVT_INT && thisVar.varData.intValue == 0)
+	if (varType == SVT_INT && varData.intValue == 0)
 		return new PersonaAnimation();
 
-	fatal("Expecting an animation variable; found Variable of type", typeName[thisVar.varType]);
+	fatal("Expecting an animation variable; found Variable of type", typeName[varType]);
 	return NULL;
 }
 
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index aa1e2aa..5a03693 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -90,7 +90,9 @@ struct Variable {
 	bool loadStringToVar(int value);
 	Common::String getTextFromAnyVar();
 
-	// Get Text
+	// Animation variable
+	void makeAnimationVariable(struct PersonaAnimation *i);
+	struct PersonaAnimation *getAnimationFromVar();
 
 };
 
@@ -100,7 +102,6 @@ struct VariableStack {
 };
 
 // Setting variables
-void newAnimationVariable(Variable &thisVar, struct PersonaAnimation  *i);
 void newCostumeVariable(Variable &thisVar, struct Persona *i);
 void addVariablesInSecond(Variable &var1, Variable &var2);
 void compareVariablesInSecond(const Variable &var1, Variable &var2);
@@ -108,7 +109,6 @@ void compareVariablesInSecond(const Variable &var1, Variable &var2);
 // Misc.
 
 struct Persona *getCostumeFromVar(Variable &thisVar);
-struct PersonaAnimation  *getAnimationFromVar(Variable &thisVar);
 bool getBoolean(const Variable &from);
 bool getValueType(int &toHere, VariableType vT, const Variable &v);
 


Commit: 719f5842fa2199b6003610aa5f4981626e9b52e1
    https://github.com/scummvm/scummvm/commit/719f5842fa2199b6003610aa5f4981626e9b52e1
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move costume functions to struct Variable

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


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index f282d68..2aacead 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -865,7 +865,7 @@ builtIn(costume) {
 	}
 
 	// Return value
-	newCostumeVariable(fun->reg, newPersona);
+	fun->reg.makeCostumeVariable(newPersona);
 	return BR_CONTINUE;
 }
 
@@ -1407,7 +1407,7 @@ builtIn(addCharacter) {
 	Persona *p;
 	int x, y, objectNumber;
 
-	p = getCostumeFromVar(fun->stack->thisVar);
+	p = fun->stack->thisVar.getCostumeFromVar();
 	if (p == NULL)
 		return BR_ERROR;
 
@@ -1568,7 +1568,7 @@ builtIn(animate) {
 builtIn(setCostume) {
 	UNUSEDALL
 	int obj;
-	Persona *pp = getCostumeFromVar(fun->stack->thisVar);
+	Persona *pp = fun->stack->thisVar.getCostumeFromVar();
 	if (pp == NULL)
 		return BR_ERROR;
 	trimStack(fun->stack);
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 27b38db..d431077 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -99,16 +99,16 @@ PersonaAnimation *Variable::getAnimationFromVar() {
 	return NULL;
 }
 
-void newCostumeVariable(Variable &thisVar, Persona *i) {
-	thisVar.unlinkVar();
-	thisVar.varType = SVT_COSTUME;
-	thisVar.varData.costumeHandler = i;
+void Variable::makeCostumeVariable(Persona *i) {
+	unlinkVar();
+	varType = SVT_COSTUME;
+	varData.costumeHandler = i;
 }
 
-Persona *getCostumeFromVar(Variable &thisVar) {
+Persona *Variable::getCostumeFromVar() {
 	Persona *p = NULL;
 
-	switch (thisVar.varType) {
+	switch (varType) {
 		case SVT_ANIM:
 			p = new Persona;
 			if (!checkNew(p))
@@ -119,16 +119,16 @@ Persona *getCostumeFromVar(Variable &thisVar) {
 				return NULL;
 
 			for (int iii = 0; iii < 3; iii++)
-				p->animation[iii] = new PersonaAnimation(thisVar.varData.animHandler);
+				p->animation[iii] = new PersonaAnimation(varData.animHandler);
 
 			break;
 
 		case SVT_COSTUME:
-			return thisVar.varData.costumeHandler;
+			return varData.costumeHandler;
 			break;
 
 		default:
-			fatal("Expecting an animation variable; found Variable of type", typeName[thisVar.varType]);
+			fatal("Expecting an animation variable; found Variable of type", typeName[varType]);
 	}
 
 	return p;
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 5a03693..2537c6e 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -91,9 +91,13 @@ struct Variable {
 	Common::String getTextFromAnyVar();
 
 	// Animation variable
-	void makeAnimationVariable(struct PersonaAnimation *i);
+	void makeAnimationVariable(PersonaAnimation *i);
 	struct PersonaAnimation *getAnimationFromVar();
 
+	// Custome variable
+	void makeCostumeVariable(Persona *i);
+	struct Persona *getCostumeFromVar();
+
 };
 
 struct VariableStack {
@@ -102,13 +106,11 @@ struct VariableStack {
 };
 
 // Setting variables
-void newCostumeVariable(Variable &thisVar, struct Persona *i);
 void addVariablesInSecond(Variable &var1, Variable &var2);
 void compareVariablesInSecond(const Variable &var1, Variable &var2);
 
 // Misc.
 
-struct Persona *getCostumeFromVar(Variable &thisVar);
 bool getBoolean(const Variable &from);
 bool getValueType(int &toHere, VariableType vT, const Variable &v);
 


Commit: 9d85b807fbb15c850c2e5d2eb598badf565a4497
    https://github.com/scummvm/scummvm/commit/9d85b807fbb15c850c2e5d2eb598badf565a4497
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move add/comparison functions to struct Variable

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


diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index ed7280f..179dc1f 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -536,17 +536,17 @@ bool continueFunction(LoadedFunction *fun) {
 
 				switch (com) {
 				case SLU_PLUS:
-					addVariablesInSecond(fun->stack->thisVar, fun->reg);
+					fun->reg.addVariablesInSecond(fun->stack->thisVar);
 					trimStack(fun->stack);
 					break;
 
 				case SLU_EQUALS:
-					compareVariablesInSecond(fun->stack->thisVar, fun->reg);
+					fun->reg.compareVariablesInSecond(fun->stack->thisVar);
 					trimStack(fun->stack);
 					break;
 
 				case SLU_NOT_EQ:
-					compareVariablesInSecond(fun->stack->thisVar, fun->reg);
+					fun->reg.compareVariablesInSecond(fun->stack->thisVar);
 					trimStack(fun->stack);
 					fun->reg.varData.intValue = !fun->reg.varData.intValue;
 					break;
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index d431077..88b27d0 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -191,52 +191,52 @@ bool copyStack(const Variable &from, Variable &to) {
 	return true;
 }
 
-void addVariablesInSecond(Variable &var1, Variable &var2) {
-	if (var1.varType == SVT_INT && var2.varType == SVT_INT) {
-		var2.varData.intValue += var1.varData.intValue;
+void Variable::addVariablesInSecond(const Variable &other) {
+	if (other.varType == SVT_INT && varType == SVT_INT) {
+		varData.intValue += other.varData.intValue;
 	} else {
-		Common::String string1 = var1.getTextFromAnyVar();
-		Common::String string2 = var2.getTextFromAnyVar();
+		Common::String string1 = other.getTextFromAnyVar();
+		Common::String string2 = getTextFromAnyVar();
 
-		var2.unlinkVar();
-		var2.varData.theString = createCString(string1 + string2);
-		var2.varType = SVT_STRING;
+		unlinkVar();
+		varData.theString = createCString(string1 + string2);
+		varType = SVT_STRING;
 	}
 }
 
-int compareVars(const Variable &var1, const Variable &var2) {
+int Variable::compareVars(const Variable &other) const {
 	int re = 0;
-	if (var1.varType == var2.varType) {
-		switch (var1.varType) {
+	if (other.varType == varType) {
+		switch (other.varType) {
 			case SVT_NULL:
 				re = 1;
 				break;
 
 			case SVT_COSTUME:
-				re = (var1.varData.costumeHandler == var2.varData.costumeHandler);
+				re = (other.varData.costumeHandler == varData.costumeHandler);
 				break;
 
 			case SVT_ANIM:
-				re = (var1.varData.animHandler == var2.varData.animHandler);
+				re = (other.varData.animHandler == varData.animHandler);
 				break;
 
 			case SVT_STRING:
-				re = (strcmp(var1.varData.theString, var2.varData.theString) == 0);
+				re = (strcmp(other.varData.theString, varData.theString) == 0);
 				break;
 
 			case SVT_STACK:
-				re = (var1.varData.theStack == var2.varData.theStack);
+				re = (other.varData.theStack == varData.theStack);
 				break;
 
 			default:
-				re = (var1.varData.intValue == var2.varData.intValue);
+				re = (other.varData.intValue == varData.intValue);
 		}
 	}
 	return re;
 }
 
-void compareVariablesInSecond(const Variable &var1, Variable &var2) {
-	var2.setVariable(SVT_INT, compareVars(var1, var2));
+void Variable::compareVariablesInSecond(const Variable &other) {
+	setVariable(SVT_INT, compareVars(other));
 }
 
 void Variable::makeTextVar(const Common::String &txt) {
@@ -250,7 +250,7 @@ bool Variable::loadStringToVar(int value) {
 	return (bool)(varData.theString != NULL);
 }
 
-Common::String Variable::getTextFromAnyVar() {
+Common::String Variable::getTextFromAnyVar() const {
 	switch (varType) {
 		case SVT_STRING:
 			return varData.theString;
@@ -473,7 +473,7 @@ int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOf
 	int reply = 0;
 
 	while (*huntVar) {
-		if (compareVars((*huntVar)->thisVar, va)) {
+		if (va.compareVars((*huntVar)->thisVar)) {
 			killMe = *huntVar;
 			*huntVar = killMe->next;
 			killMe->thisVar.unlinkVar();
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 2537c6e..c332232 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -88,7 +88,7 @@ struct Variable {
 	// Text variable
 	void makeTextVar(const Common::String &txt);
 	bool loadStringToVar(int value);
-	Common::String getTextFromAnyVar();
+	Common::String getTextFromAnyVar() const;
 
 	// Animation variable
 	void makeAnimationVariable(PersonaAnimation *i);
@@ -98,6 +98,10 @@ struct Variable {
 	void makeCostumeVariable(Persona *i);
 	struct Persona *getCostumeFromVar();
 
+	// Add variables
+	void addVariablesInSecond(const Variable &other);
+	void compareVariablesInSecond(const Variable &other);
+	int compareVars(const Variable &other) const;
 };
 
 struct VariableStack {
@@ -105,10 +109,6 @@ struct VariableStack {
 	VariableStack *next;
 };
 
-// Setting variables
-void addVariablesInSecond(Variable &var1, Variable &var2);
-void compareVariablesInSecond(const Variable &var1, Variable &var2);
-
 // Misc.
 
 bool getBoolean(const Variable &from);


Commit: 746fb3819faa7239b41c06492583bbe4296b5e02
    https://github.com/scummvm/scummvm/commit/746fb3819faa7239b41c06492583bbe4296b5e02
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move value getters to struct Variable

Changed paths:
    engines/sludge/bg_effects.cpp
    engines/sludge/builtin.cpp
    engines/sludge/function.cpp
    engines/sludge/people.cpp
    engines/sludge/variable.cpp
    engines/sludge/variable.h


diff --git a/engines/sludge/bg_effects.cpp b/engines/sludge/bg_effects.cpp
index d0c8068..d02aceb 100644
--- a/engines/sludge/bg_effects.cpp
+++ b/engines/sludge/bg_effects.cpp
@@ -196,7 +196,7 @@ bool blur_createSettings(int numParams, VariableStack *&stack) {
 						for (int x = 0; x < width; x++) {
 							int arraySlot = x + (y * width);
 //							s_matrixEffectData[arraySlot] = (rand() % 4);
-							if (!getValueType(s_matrixEffectData[arraySlot], SVT_INT, eachNumber->thisVar)) {
+							if (!eachNumber->thisVar.getValueType(s_matrixEffectData[arraySlot], SVT_INT)) {
 								error = "";
 								break;
 							}
@@ -205,10 +205,10 @@ bool blur_createSettings(int numParams, VariableStack *&stack) {
 						trimStack(stack);
 					}
 				}
-				if (error.empty() && !getValueType(s_matrixEffectDivide, SVT_INT, stack->thisVar))
+				if (error.empty() && !stack->thisVar.getValueType(s_matrixEffectDivide, SVT_INT))
 					error = "";
 				trimStack(stack);
-				if (error.empty() && !getValueType(s_matrixEffectBase, SVT_INT, stack->thisVar))
+				if (error.empty() && !stack->thisVar.getValueType(s_matrixEffectBase, SVT_INT))
 					error = "";
 				trimStack(stack);
 				if (error.empty()) {
diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 2aacead..6c98ca0 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -107,7 +107,7 @@ static BuiltReturn sayCore(int numParams, LoadedFunction *fun, bool sayIt) {
 
 	switch (numParams) {
 		case 3:
-			if (!getValueType(fileNum, SVT_FILE, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(fileNum, SVT_FILE))
 				return BR_ERROR;
 			trimStack(fun->stack);
 			// fall through
@@ -115,7 +115,7 @@ static BuiltReturn sayCore(int numParams, LoadedFunction *fun, bool sayIt) {
 		case 2:
 			newText = fun->stack->thisVar.getTextFromAnyVar();
 			trimStack(fun->stack);
-			if (!getValueType(objT, SVT_OBJTYPE, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(objT, SVT_OBJTYPE))
 				return BR_ERROR;
 			trimStack(fun->stack);
 			p = g_sludge->_speechMan->wrapSpeech(newText, objT, fileNum, sayIt);
@@ -307,16 +307,16 @@ builtIn(blankScreen) {
 builtIn(blankArea) {
 	UNUSEDALL
 	int x1, y1, x2, y2;
-	if (!getValueType(y2, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y2, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x2, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x2, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(y1, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y1, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x1, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x1, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_gfxMan->blankScreen(x1, y1, x2, y2);
@@ -332,13 +332,13 @@ builtIn(darkBackground) {
 builtIn(addOverlay) {
 	UNUSEDALL
 	int fileNumber, xPos, yPos;
-	if (!getValueType(yPos, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(yPos, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(xPos, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(xPos, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_gfxMan->loadBackDrop(fileNumber, xPos, yPos);
@@ -348,13 +348,13 @@ builtIn(addOverlay) {
 builtIn(mixOverlay) {
 	UNUSEDALL
 	int fileNumber, xPos, yPos;
-	if (!getValueType(yPos, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(yPos, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(xPos, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(xPos, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_gfxMan->mixBackDrop(fileNumber, xPos, yPos);
@@ -364,10 +364,10 @@ builtIn(mixOverlay) {
 builtIn(pasteImage) {
 	UNUSEDALL
 	int x, y;
-	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	PersonaAnimation *pp = fun->stack->thisVar.getAnimationFromVar();
@@ -385,10 +385,10 @@ builtIn(pasteImage) {
 builtIn(setSceneDimensions) {
 	UNUSEDALL
 	int x, y;
-	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (g_sludge->_gfxMan->killResizeBackdrop(x, y)) {
@@ -402,10 +402,10 @@ builtIn(setSceneDimensions) {
 builtIn(aimCamera) {
 	UNUSEDALL
 	int cameraX, cameraY;
-	if (!getValueType(cameraY, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(cameraY, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(cameraX, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(cameraX, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -417,7 +417,7 @@ builtIn(aimCamera) {
 builtIn(zoomCamera) {
 	UNUSEDALL
 	int z;
-	if (!getValueType(z, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(z, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -456,10 +456,10 @@ builtIn(substring) {
 
 	//debugOut ("BUILTIN: substring\n");
 
-	if (!getValueType(length, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(length, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(start, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(start, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	wholeString = fun->stack->thisVar.getTextFromAnyVar();
@@ -690,7 +690,7 @@ builtIn(random) {
 	UNUSEDALL
 	int num;
 
-	if (!getValueType(num, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(num, SVT_INT))
 		return BR_ERROR;
 
 	trimStack(fun->stack);
@@ -701,13 +701,13 @@ builtIn(random) {
 }
 
 static bool getRGBParams(int &red, int &green, int &blue, LoadedFunction *fun) {
-	if (!getValueType(blue, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(blue, SVT_INT))
 		return false;
 	trimStack(fun->stack);
-	if (!getValueType(green, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(green, SVT_INT))
 		return false;
 	trimStack(fun->stack);
-	if (!getValueType(red, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(red, SVT_INT))
 		return false;
 	trimStack(fun->stack);
 	return true;
@@ -773,14 +773,14 @@ builtIn(setBurnColour) {
 builtIn(setFont) {
 	UNUSEDALL
 	int fileNumber, newHeight;
-	if (!getValueType(newHeight, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(newHeight, SVT_INT))
 		return BR_ERROR;
 	//              newDebug ("  Height:", newHeight);
 	trimStack(fun->stack);
 	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	//              newDebug ("  Character supported:", newText);
 	trimStack(fun->stack);
-	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 		return BR_ERROR;
 	//              newDebug ("  File:", fileNumber);
 	trimStack(fun->stack);
@@ -805,10 +805,10 @@ builtIn(pasteString) {
 	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	int y, x;
-	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (x == IN_THE_CENTRE)
@@ -829,7 +829,7 @@ builtIn(anim) {
 
 	// Only remaining paramter is the file number
 	int fileNumber;
-	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -898,7 +898,7 @@ builtIn(launch) {
 builtIn(pause) {
 	UNUSEDALL
 	int theTime;
-	if (!getValueType(theTime, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(theTime, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (theTime > 0) {
@@ -918,10 +918,10 @@ builtIn(completeTimers) {
 builtIn(callEvent) {
 	UNUSEDALL
 	int obj1, obj2;
-	if (!getValueType(obj2, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj2, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj1, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj1, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -971,7 +971,7 @@ builtIn(playMovie) {
 	if (movieIsPlaying)
 		return BR_PAUSE;
 
-	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -1010,13 +1010,13 @@ builtIn(pauseMovie) {
 builtIn(startMusic) {
 	UNUSEDALL
 	int fromTrack, musChan, fileNumber;
-	if (!getValueType(fromTrack, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fromTrack, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(musChan, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(musChan, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (!g_sludge->_soundMan->playMOD(fileNumber, musChan, fromTrack))
@@ -1027,7 +1027,7 @@ builtIn(startMusic) {
 builtIn(stopMusic) {
 	UNUSEDALL
 	int v;
-	if (!getValueType(v, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(v, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_soundMan->stopMOD(v);
@@ -1037,10 +1037,10 @@ builtIn(stopMusic) {
 builtIn(setMusicVolume) {
 	UNUSEDALL
 	int musChan, v;
-	if (!getValueType(v, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(v, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(musChan, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(musChan, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_soundMan->setMusicVolume(musChan, v);
@@ -1050,7 +1050,7 @@ builtIn(setMusicVolume) {
 builtIn(setDefaultMusicVolume) {
 	UNUSEDALL
 	int v;
-	if (!getValueType(v, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(v, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_soundMan->setDefaultMusicVolume(v);
@@ -1060,7 +1060,7 @@ builtIn(setDefaultMusicVolume) {
 builtIn(playSound) {
 	UNUSEDALL
 	int fileNumber;
-	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (!g_sludge->_soundMan->startSound(fileNumber, false))
@@ -1076,7 +1076,7 @@ builtIn(loopSound) {
 		return BR_ERROR;
 	} else if (numParams < 2) {
 
-		if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+		if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 			return BR_ERROR;
 		trimStack(fun->stack);
 		if (!g_sludge->_soundMan->startSound(fileNumber, true))
@@ -1091,12 +1091,12 @@ builtIn(loopSound) {
 
 		// Should we loop?
 		if (fun->stack->thisVar.varType != SVT_FILE) {
-			getValueType(doLoop, SVT_INT, fun->stack->thisVar);
+			fun->stack->thisVar.getValueType(doLoop, SVT_INT);
 			trimStack(fun->stack);
 			numParams--;
 		}
 		while (numParams) {
-			if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar)) {
+			if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE)) {
 				fatal("Illegal parameter given built-in function loopSound().");
 				return BR_ERROR;
 			}
@@ -1129,7 +1129,7 @@ builtIn(loopSound) {
 builtIn(stopSound) {
 	UNUSEDALL
 	int v;
-	if (!getValueType(v, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(v, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_soundMan->huntKillSound(v);
@@ -1139,7 +1139,7 @@ builtIn(stopSound) {
 builtIn(setDefaultSoundVolume) {
 	UNUSEDALL
 	int v;
-	if (!getValueType(v, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(v, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_soundMan->setDefaultSoundVolume(v);
@@ -1149,10 +1149,10 @@ builtIn(setDefaultSoundVolume) {
 builtIn(setSoundVolume) {
 	UNUSEDALL
 	int musChan, v;
-	if (!getValueType(v, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(v, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(musChan, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(musChan, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_soundMan->setSoundVolume(musChan, v);
@@ -1162,13 +1162,13 @@ builtIn(setSoundVolume) {
 builtIn(setSoundLoopPoints) {
 	UNUSEDALL
 	int musChan, theEnd, theStart;
-	if (!getValueType(theEnd, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(theEnd, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(theStart, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(theStart, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(musChan, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(musChan, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_soundMan->setSoundLoop(musChan, theStart, theEnd);
@@ -1182,7 +1182,7 @@ builtIn(setFloor) {
 	UNUSEDALL
 	if (fun->stack->thisVar.varType == SVT_FILE) {
 		int v;
-		getValueType(v, SVT_FILE, fun->stack->thisVar);
+		fun->stack->thisVar.getValueType(v, SVT_FILE);
 		trimStack(fun->stack);
 		if (!g_sludge->_floorMan->setFloor(v))
 			return BR_ERROR;
@@ -1203,7 +1203,7 @@ builtIn(setZBuffer) {
 	UNUSEDALL
 	if (fun->stack->thisVar.varType == SVT_FILE) {
 		int v;
-		getValueType(v, SVT_FILE, fun->stack->thisVar);
+		fun->stack->thisVar.getValueType(v, SVT_FILE);
 		trimStack(fun->stack);
 		if (!g_sludge->_gfxMan->setZBuffer(v))
 			return BR_ERROR;
@@ -1218,7 +1218,7 @@ builtIn(setLightMap) {
 	UNUSEDALL
 	switch (numParams) {
 		case 2:
-			if (!getValueType(g_sludge->_gfxMan->_lightMapMode, SVT_INT, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(g_sludge->_gfxMan->_lightMapMode, SVT_INT))
 				return BR_ERROR;
 			trimStack(fun->stack);
 			g_sludge->_gfxMan->_lightMapMode %= LIGHTMAPMODE_NUM;
@@ -1227,7 +1227,7 @@ builtIn(setLightMap) {
 		case 1:
 			if (fun->stack->thisVar.varType == SVT_FILE) {
 				int v;
-				getValueType(v, SVT_FILE, fun->stack->thisVar);
+				fun->stack->thisVar.getValueType(v, SVT_FILE);
 				trimStack(fun->stack);
 				if (!g_sludge->_gfxMan->loadLightMap(v))
 					return BR_ERROR;
@@ -1252,7 +1252,7 @@ builtIn(setLightMap) {
 builtIn(setSpeechMode) {
 	UNUSEDALL
 	int speechMode;
-	if (!getValueType(speechMode, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(speechMode, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (speechMode < 0 || speechMode > 2) {
@@ -1296,7 +1296,7 @@ builtIn(rename) {
 	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	int objT;
 	trimStack(fun->stack);
-	if (!getValueType(objT, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objT, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	ObjectType *o = g_sludge->_objMan->findObjectType(objT);
@@ -1308,7 +1308,7 @@ builtIn(rename) {
 builtIn(getObjectX) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -1329,7 +1329,7 @@ builtIn(getObjectX) {
 builtIn(getObjectY) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -1350,28 +1350,28 @@ builtIn(getObjectY) {
 builtIn(addScreenRegion) {
 	UNUSEDALL
 	int sX, sY, x1, y1, x2, y2, di, objectNumber;
-	if (!getValueType(di, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(di, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(sY, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(sY, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(sX, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(sX, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(y2, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y2, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x2, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x2, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(y1, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y1, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x1, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x1, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (g_sludge->_regionMan->addScreenRegion(x1, y1, x2, y2, sX, sY, di, objectNumber))
@@ -1383,7 +1383,7 @@ builtIn(addScreenRegion) {
 builtIn(removeScreenRegion) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_regionMan->removeScreenRegion(objectNumber);
@@ -1412,13 +1412,13 @@ builtIn(addCharacter) {
 		return BR_ERROR;
 
 	trimStack(fun->stack);
-	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (g_sludge->_peopleMan->addPerson(x, y, objectNumber, p))
@@ -1429,7 +1429,7 @@ builtIn(addCharacter) {
 builtIn(hideCharacter) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->setShown(false, objectNumber);
@@ -1439,7 +1439,7 @@ builtIn(hideCharacter) {
 builtIn(showCharacter) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->setShown(true, objectNumber);
@@ -1456,10 +1456,10 @@ builtIn(removeAllCharacters) {
 builtIn(setCharacterDrawMode) {
 	UNUSEDALL
 	int obj, di;
-	if (!getValueType(di, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(di, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->setDrawMode(di, obj);
@@ -1468,10 +1468,10 @@ builtIn(setCharacterDrawMode) {
 builtIn(setCharacterTransparency) {
 	UNUSEDALL
 	int obj, x;
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->setPersonTransparency(obj, x);
@@ -1480,19 +1480,19 @@ builtIn(setCharacterTransparency) {
 builtIn(setCharacterColourise) {
 	UNUSEDALL
 	int obj, r, g, b, mix;
-	if (!getValueType(mix, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(mix, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(b, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(b, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(g, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(g, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(r, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(r, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->setPersonColourise(obj, r, g, b, mix);
@@ -1502,10 +1502,10 @@ builtIn(setCharacterColourise) {
 builtIn(setScale) {
 	UNUSEDALL
 	int val1, val2;
-	if (!getValueType(val2, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(val2, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(val1, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(val1, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->setScale((int16)val1, (int16)val2);
@@ -1515,7 +1515,7 @@ builtIn(setScale) {
 builtIn(stopCharacter) {
 	UNUSEDALL
 	int obj;
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -1527,7 +1527,7 @@ builtIn(stopCharacter) {
 builtIn(pasteCharacter) {
 	UNUSEDALL
 	int obj;
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -1557,7 +1557,7 @@ builtIn(animate) {
 	if (pp == NULL)
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->animatePerson(obj, pp);
@@ -1572,7 +1572,7 @@ builtIn(setCostume) {
 	if (pp == NULL)
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->animatePerson(obj, pp);
@@ -1582,10 +1582,10 @@ builtIn(setCostume) {
 builtIn(floatCharacter) {
 	UNUSEDALL
 	int obj, di;
-	if (!getValueType(di, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(di, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->floatCharacter(di, obj));
@@ -1595,10 +1595,10 @@ builtIn(floatCharacter) {
 builtIn(setCharacterWalkSpeed) {
 	UNUSEDALL
 	int obj, di;
-	if (!getValueType(di, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(di, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->setCharacterWalkSpeed(di, obj));
@@ -1608,10 +1608,10 @@ builtIn(setCharacterWalkSpeed) {
 builtIn(turnCharacter) {
 	UNUSEDALL
 	int obj, di;
-	if (!getValueType(di, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(di, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->turnPersonToFace(obj, di));
@@ -1621,10 +1621,10 @@ builtIn(turnCharacter) {
 builtIn(setCharacterExtra) {
 	UNUSEDALL
 	int obj, di;
-	if (!getValueType(di, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(di, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	fun->reg.setVariable(SVT_INT, g_sludge->_peopleMan->setPersonExtra(obj, di));
@@ -1634,7 +1634,7 @@ builtIn(setCharacterExtra) {
 builtIn(removeCharacter) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_peopleMan->removeOneCharacter(objectNumber);
@@ -1646,13 +1646,13 @@ static BuiltReturn moveChr(int numParams, LoadedFunction *fun, bool force, bool
 		case 3: {
 			int x, y, objectNumber;
 
-			if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 				return BR_ERROR;
 			trimStack(fun->stack);
-			if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 				return BR_ERROR;
 			trimStack(fun->stack);
-			if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 				return BR_ERROR;
 			trimStack(fun->stack);
 
@@ -1672,10 +1672,10 @@ static BuiltReturn moveChr(int numParams, LoadedFunction *fun, bool force, bool
 			int toObj, objectNumber;
 			ScreenRegion*reggie;
 
-			if (!getValueType(toObj, SVT_OBJTYPE, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(toObj, SVT_OBJTYPE))
 				return BR_ERROR;
 			trimStack(fun->stack);
-			if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 				return BR_ERROR;
 			trimStack(fun->stack);
 			reggie = g_sludge->_regionMan->getRegionForObject(toObj);
@@ -1744,7 +1744,7 @@ builtIn(statusText) {
 builtIn(lightStatus) {
 	UNUSEDALL
 	int val;
-	if (!getValueType(val, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(val, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	setLitStatus(val);
@@ -1754,10 +1754,10 @@ builtIn(lightStatus) {
 builtIn(positionStatus) {
 	UNUSEDALL
 	int x, y;
-	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	positionStatus(x, y);
@@ -1767,7 +1767,7 @@ builtIn(positionStatus) {
 builtIn(alignStatus) {
 	UNUSEDALL
 	int val;
-	if (!getValueType(val, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(val, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	nowStatus->alignStatus = (int16)val;
@@ -1781,7 +1781,7 @@ static bool getFuncNumForCallback(int numParams, LoadedFunction *fun, int &funct
 			break;
 
 		case 1:
-			if (!getValueType(functionNum, SVT_FUNC, fun->stack->thisVar))
+			if (!fun->stack->thisVar.getValueType(functionNum, SVT_FUNC))
 				return false;
 			trimStack(fun->stack);
 			break;
@@ -1902,7 +1902,7 @@ builtIn(stringWidth) {
 builtIn(hardScroll) {
 	UNUSEDALL
 	int v;
-	if (!getValueType(v, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(v, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_gfxMan->hardScroll(v);
@@ -1912,7 +1912,7 @@ builtIn(hardScroll) {
 builtIn(isScreenRegion) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	fun->reg.setVariable(SVT_INT, g_sludge->_regionMan->getRegionForObject(objectNumber) != NULL);
@@ -1922,7 +1922,7 @@ builtIn(isScreenRegion) {
 builtIn(setSpeechSpeed) {
 	UNUSEDALL
 	int number;
-	if (!getValueType(number, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(number, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_speechMan->setSpeechSpeed(number * 0.01);
@@ -1933,7 +1933,7 @@ builtIn(setSpeechSpeed) {
 builtIn(setFontSpacing) {
 	UNUSEDALL
 	int fontSpaceI;
-	if (!getValueType(fontSpaceI, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fontSpaceI, SVT_INT))
 		return BR_ERROR;
 	g_sludge->_txtMan->setFontSpace(fontSpaceI);
 	trimStack(fun->stack);
@@ -1944,7 +1944,7 @@ builtIn(setFontSpacing) {
 builtIn(transitionLevel) {
 	UNUSEDALL
 	int brightnessLevel;
-	if (!getValueType(brightnessLevel, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(brightnessLevel, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -1957,7 +1957,7 @@ builtIn(transitionLevel) {
 builtIn(captureAllKeys) {
 	UNUSEDALL
 	// This built-in function doesn't have any effect any more, we capture all keys by default
-	bool captureAllKeysDeprecated = getBoolean(fun->stack->thisVar);
+	bool captureAllKeysDeprecated = fun->stack->thisVar.getBoolean();
 	trimStack(fun->stack);
 	fun->reg.setVariable(SVT_INT, captureAllKeysDeprecated);
 	return BR_CONTINUE;
@@ -1966,10 +1966,10 @@ builtIn(captureAllKeys) {
 builtIn(spinCharacter) {
 	UNUSEDALL
 	int number, objectNumber;
-	if (!getValueType(number, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(number, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -1989,7 +1989,7 @@ builtIn(spinCharacter) {
 builtIn(getCharacterDirection) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	OnScreenPerson *thisPerson = g_sludge->_peopleMan->findPerson(objectNumber);
@@ -2004,7 +2004,7 @@ builtIn(getCharacterDirection) {
 builtIn(isCharacter) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	OnScreenPerson *thisPerson = g_sludge->_peopleMan->findPerson(objectNumber);
@@ -2015,7 +2015,7 @@ builtIn(isCharacter) {
 builtIn(normalCharacter) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	OnScreenPerson *thisPerson = g_sludge->_peopleMan->findPerson(objectNumber);
@@ -2031,7 +2031,7 @@ builtIn(normalCharacter) {
 builtIn(isMoving) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	OnScreenPerson *thisPerson = g_sludge->_peopleMan->findPerson(objectNumber);
@@ -2046,10 +2046,10 @@ builtIn(isMoving) {
 builtIn(fetchEvent) {
 	UNUSEDALL
 	int obj1, obj2;
-	if (!getValueType(obj2, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj2, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(obj1, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(obj1, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -2104,7 +2104,7 @@ builtIn(renameFile) {
 builtIn(cacheSound) {
 	UNUSEDALL
 	int fileNumber;
-	if (!getValueType(fileNumber, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(fileNumber, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (g_sludge->_soundMan->cacheSound(fileNumber) == -1)
@@ -2117,10 +2117,10 @@ builtIn(burnString) {
 	Common::String newText = fun->stack->thisVar.getTextFromAnyVar();
 	trimStack(fun->stack);
 	int y, x;
-	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (x == IN_THE_CENTRE)
@@ -2132,10 +2132,10 @@ builtIn(burnString) {
 builtIn(setCharacterSpinSpeed) {
 	UNUSEDALL
 	int speed, who;
-	if (!getValueType(speed, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(speed, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(who, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(who, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -2153,10 +2153,10 @@ builtIn(setCharacterSpinSpeed) {
 builtIn(setCharacterAngleOffset) {
 	UNUSEDALL
 	int angle, who;
-	if (!getValueType(angle, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(angle, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(who, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(who, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -2174,7 +2174,7 @@ builtIn(setCharacterAngleOffset) {
 builtIn(transitionMode) {
 	UNUSEDALL
 	int n;
-	if (!getValueType(n, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(n, SVT_INT))
 		return BR_ERROR;
 	g_sludge->_gfxMan->setFadeMode(n);
 	trimStack(fun->stack);
@@ -2252,7 +2252,7 @@ builtIn(loadCustomData) {
 builtIn(setCustomEncoding) {
 	UNUSEDALL
 	int n;
-	if (!getValueType(n, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(n, SVT_INT))
 		return BR_ERROR;
 	CustomSaveHelper::_saveEncoding = n;
 	trimStack(fun->stack);
@@ -2263,7 +2263,7 @@ builtIn(setCustomEncoding) {
 builtIn(freeSound) {
 	UNUSEDALL
 	int v;
-	if (!getValueType(v, SVT_FILE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(v, SVT_FILE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	g_sludge->_soundMan->huntKillFreeSound(v);
@@ -2277,13 +2277,13 @@ builtIn(parallaxAdd) {
 		return BR_ERROR;
 	} else {
 		int wrapX, wrapY, v;
-		if (!getValueType(wrapY, SVT_INT, fun->stack->thisVar))
+		if (!fun->stack->thisVar.getValueType(wrapY, SVT_INT))
 			return BR_ERROR;
 		trimStack(fun->stack);
-		if (!getValueType(wrapX, SVT_INT, fun->stack->thisVar))
+		if (!fun->stack->thisVar.getValueType(wrapX, SVT_INT))
 			return BR_ERROR;
 		trimStack(fun->stack);
-		if (!getValueType(v, SVT_FILE, fun->stack->thisVar))
+		if (!fun->stack->thisVar.getValueType(v, SVT_FILE))
 			return BR_ERROR;
 		trimStack(fun->stack);
 
@@ -2304,10 +2304,10 @@ builtIn(parallaxClear) {
 builtIn(getPixelColour) {
 	UNUSEDALL
 	int x, y;
-	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -2352,7 +2352,7 @@ builtIn(makeFastArray) {
 builtIn(getCharacterScale) {
 	UNUSEDALL
 	int objectNumber;
-	if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objectNumber, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -2410,10 +2410,10 @@ builtIn(getFramesPerSecond) {
 builtIn(showThumbnail) {
 	UNUSEDALL
 	int x, y;
-	if (!getValueType(y, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(y, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(x, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(x, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 
@@ -2428,10 +2428,10 @@ builtIn(showThumbnail) {
 builtIn(setThumbnailSize) {
 	UNUSEDALL
 	int thumbHeight, thumbWidth;
-	if (!getValueType(thumbHeight, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(thumbHeight, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(thumbWidth, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(thumbWidth, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	if (!g_sludge->_gfxMan->setThumbnailSize(thumbWidth, thumbHeight)) {
@@ -2445,10 +2445,10 @@ builtIn(setThumbnailSize) {
 builtIn(hasFlag) {
 	UNUSEDALL
 	int objNum, flagIndex;
-	if (!getValueType(flagIndex, SVT_INT, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(flagIndex, SVT_INT))
 		return BR_ERROR;
 	trimStack(fun->stack);
-	if (!getValueType(objNum, SVT_OBJTYPE, fun->stack->thisVar))
+	if (!fun->stack->thisVar.getValueType(objNum, SVT_OBJTYPE))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	ObjectType *objT = g_sludge->_objMan->findObjectType(objNum);
@@ -2472,7 +2472,7 @@ builtIn(snapshotClear) {
 builtIn(bodgeFilenames) {
 	UNUSEDALL
 	bool lastValue = allowAnyFilename;
-	allowAnyFilename = getBoolean(fun->stack->thisVar);
+	allowAnyFilename = fun->stack->thisVar.getBoolean();
 	trimStack(fun->stack);
 	fun->reg.setVariable(SVT_INT, lastValue);
 	return BR_CONTINUE;
diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index 179dc1f..88171a5 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -296,13 +296,13 @@ bool continueFunction(LoadedFunction *fun) {
 
 		case SLU_AND:
 			fun->reg.setVariable(SVT_INT,
-					getBoolean(fun->reg) && getBoolean(fun->stack->thisVar));
+					fun->reg.getBoolean() && fun->stack->thisVar.getBoolean());
 			trimStack(fun->stack);
 			break;
 
 		case SLU_OR:
 			fun->reg.setVariable(SVT_INT,
-					getBoolean(fun->reg) || getBoolean(fun->stack->thisVar));
+					fun->reg.getBoolean() || fun->stack->thisVar.getBoolean());
 			trimStack(fun->stack);
 			break;
 
@@ -346,7 +346,7 @@ bool continueFunction(LoadedFunction *fun) {
 					return fatal(ERROR_INDEX_EMPTY);
 				} else {
 					int ii;
-					if (!getValueType(ii, SVT_INT, fun->reg))
+					if (!fun->reg.getValueType(ii, SVT_INT))
 						return false;
 					Variable *grab =
 							(fun->stack->thisVar.varType == SVT_FASTARRAY) ?
@@ -365,14 +365,14 @@ bool continueFunction(LoadedFunction *fun) {
 						int kk;
 						switch (com) {
 						case SLU_INCREMENT_INDEX:
-							if (!getValueType(kk, SVT_INT, *grab))
+							if (!grab->getValueType(kk, SVT_INT))
 								return false;
 							fun->reg.setVariable(SVT_INT, kk);
 							grab->varData.intValue = kk + 1;
 							break;
 
 						case SLU_DECREMENT_INDEX:
-							if (!getValueType(kk, SVT_INT, *grab))
+							if (!grab->getValueType(kk, SVT_INT))
 								return false;
 							fun->reg.setVariable(SVT_INT, kk);
 							grab->varData.intValue = kk - 1;
@@ -398,7 +398,7 @@ bool continueFunction(LoadedFunction *fun) {
 					return fatal(ERROR_INDEX_EMPTY);
 				} else {
 					int ii;
-					if (!getValueType(ii, SVT_INT, fun->reg))
+					if (!fun->reg.getValueType(ii, SVT_INT))
 						return false;
 					if (!stackSetByIndex(
 							fun->stack->thisVar.varData.theStack->first, ii,
@@ -412,7 +412,7 @@ bool continueFunction(LoadedFunction *fun) {
 
 			case SVT_FASTARRAY: {
 				int ii;
-				if (!getValueType(ii, SVT_INT, fun->reg))
+				if (!fun->reg.getValueType(ii, SVT_INT))
 					return false;
 				Variable *v = fastArrayGetByIndex(
 						fun->stack->thisVar.varData.fastArray, ii);
@@ -435,7 +435,7 @@ bool continueFunction(LoadedFunction *fun) {
 
 		case SLU_INCREMENT_LOCAL: {
 			int ii;
-			if (!getValueType(ii, SVT_INT, fun->localVars[param]))
+			if (!fun->localVars[param].getValueType(ii, SVT_INT))
 				return false;
 			fun->reg.setVariable(SVT_INT, ii);
 			fun->localVars[param].setVariable(SVT_INT, ii + 1);
@@ -444,7 +444,7 @@ bool continueFunction(LoadedFunction *fun) {
 
 		case SLU_INCREMENT_GLOBAL: {
 			int ii;
-			if (!getValueType(ii, SVT_INT, globalVars[param]))
+			if (!globalVars[param].getValueType(ii, SVT_INT))
 				return false;
 			fun->reg.setVariable(SVT_INT, ii);
 			globalVars[param].setVariable(SVT_INT, ii + 1);
@@ -453,7 +453,7 @@ bool continueFunction(LoadedFunction *fun) {
 
 		case SLU_DECREMENT_LOCAL: {
 			int ii;
-			if (!getValueType(ii, SVT_INT, fun->localVars[param]))
+			if (!fun->localVars[param].getValueType(ii, SVT_INT))
 				return false;
 			fun->reg.setVariable(SVT_INT, ii);
 			fun->localVars[param].setVariable(SVT_INT, ii - 1);
@@ -462,7 +462,7 @@ bool continueFunction(LoadedFunction *fun) {
 
 		case SLU_DECREMENT_GLOBAL: {
 			int ii;
-			if (!getValueType(ii, SVT_INT, globalVars[param]))
+			if (!globalVars[param].getValueType(ii, SVT_INT))
 				return false;
 			fun->reg.setVariable(SVT_INT, ii);
 			globalVars[param].setVariable(SVT_INT, ii - 1);
@@ -495,11 +495,11 @@ bool continueFunction(LoadedFunction *fun) {
 			break;
 
 		case SLU_NOT:
-			fun->reg.setVariable(SVT_INT, !getBoolean(fun->reg));
+			fun->reg.setVariable(SVT_INT, !fun->reg.getBoolean());
 			break;
 
 		case SLU_BR_ZERO:
-			if (!getBoolean(fun->reg)) {
+			if (!fun->reg.getBoolean()) {
 				advanceNow = false;
 				fun->runThisLine = param;
 			}
@@ -512,7 +512,7 @@ bool continueFunction(LoadedFunction *fun) {
 
 		case SLU_NEGATIVE: {
 			int i;
-			if (!getValueType(i, SVT_INT, fun->reg))
+			if (!fun->reg.getValueType(i, SVT_INT))
 				return false;
 			fun->reg.setVariable(SVT_INT, -i);
 		}
@@ -552,9 +552,9 @@ bool continueFunction(LoadedFunction *fun) {
 					break;
 
 				default:
-					if (!getValueType(firstValue, SVT_INT, fun->stack->thisVar))
+					if (!fun->stack->thisVar.getValueType(firstValue, SVT_INT))
 						return false;
-					if (!getValueType(secondValue, SVT_INT, fun->reg))
+					if (!fun->reg.getValueType(secondValue, SVT_INT))
 						return false;
 					trimStack(fun->stack);
 
diff --git a/engines/sludge/people.cpp b/engines/sludge/people.cpp
index 658954a..433ab2d 100644
--- a/engines/sludge/people.cpp
+++ b/engines/sludge/people.cpp
@@ -76,10 +76,10 @@ PersonaAnimation::PersonaAnimation(int num, VariableStack *&stacky) {
 		} else if (stacky->thisVar.varType == SVT_FUNC) {
 			frames[a].noise = -stacky->thisVar.varData.intValue;
 		} else if (stacky->thisVar.varType == SVT_STACK) {
-			getValueType(frameNum, SVT_INT, stacky->thisVar.varData.theStack->first->thisVar);
-			getValueType(howMany, SVT_INT, stacky->thisVar.varData.theStack->first->next->thisVar);
+			stacky->thisVar.varData.theStack->first->thisVar.getValueType(frameNum, SVT_INT);
+			stacky->thisVar.varData.theStack->first->next->thisVar.getValueType(howMany, SVT_INT);
 		} else {
-			getValueType(frameNum, SVT_INT, stacky->thisVar);
+			stacky->thisVar.getValueType(frameNum, SVT_INT);
 			howMany = 1;
 		}
 		trimStack(stacky);
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 88b27d0..af6d388 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -309,22 +309,22 @@ Common::String Variable::getTextFromAnyVar() const {
 	return typeName[varType];
 }
 
-bool getBoolean(const Variable &from) {
-	switch (from.varType) {
+bool Variable::getBoolean() const {
+	switch (varType) {
 		case SVT_NULL:
 			return false;
 
 		case SVT_INT:
-			return (bool)(from.varData.intValue != 0);
+			return (bool)(varData.intValue != 0);
 
 		case SVT_STACK:
-			return (bool)(from.varData.theStack->first != NULL);
+			return (bool)(varData.theStack->first != NULL);
 
 		case SVT_STRING:
-			return (bool)(from.varData.theString[0] != 0);
+			return (bool)(varData.theString[0] != 0);
 
 		case SVT_FASTARRAY:
-			return (bool)(from.varData.fastArray->size != 0);
+			return (bool)(varData.fastArray->size != 0);
 
 		default:
 			break;
@@ -500,18 +500,17 @@ VariableStack *stackFindLast(VariableStack *hunt) {
 	return hunt;
 }
 
-bool getValueType(int &toHere, VariableType vT, const Variable &v) {
-	//if (! v) return false;
-	if (v.varType != vT) {
+bool Variable::getValueType(int &toHere, VariableType vT) const {
+	if (varType != vT) {
 		Common::String e1 = "Can only perform specified operation on a value which is of type ";
 		e1 += typeName[vT];
 		Common::String e2 = "... value supplied was of type ";
-		e2 += typeName[v.varType];
+		e2 += typeName[varType];
 		fatal(e1, e2);
 
 		return false;
 	}
-	toHere = v.varData.intValue;
+	toHere = varData.intValue;
 	return true;
 }
 
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index c332232..febd942 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -88,7 +88,6 @@ struct Variable {
 	// Text variable
 	void makeTextVar(const Common::String &txt);
 	bool loadStringToVar(int value);
-	Common::String getTextFromAnyVar() const;
 
 	// Animation variable
 	void makeAnimationVariable(PersonaAnimation *i);
@@ -102,6 +101,11 @@ struct Variable {
 	void addVariablesInSecond(const Variable &other);
 	void compareVariablesInSecond(const Variable &other);
 	int compareVars(const Variable &other) const;
+
+	// General getters
+	Common::String getTextFromAnyVar() const;
+	bool getBoolean() const;
+	bool getValueType(int &toHere, VariableType vT) const;
 };
 
 struct VariableStack {
@@ -109,11 +113,6 @@ struct VariableStack {
 	VariableStack *next;
 };
 
-// Misc.
-
-bool getBoolean(const Variable &from);
-bool getValueType(int &toHere, VariableType vT, const Variable &v);
-
 // Stacky stuff
 
 bool addVarToStack(const Variable &va, VariableStack *&thisStack);


Commit: 399ff4788cd5a03d37ac1945ed76bc47bc8d4218
    https://github.com/scummvm/scummvm/commit/399ff4788cd5a03d37ac1945ed76bc47bc8d4218
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move fastarray functions to struct Variable

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


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 6c98ca0..61f1726 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -2329,7 +2329,7 @@ builtIn(makeFastArray) {
 	UNUSEDALL
 	switch (fun->stack->thisVar.varType) {
 		case SVT_STACK: {
-			bool success = makeFastArrayFromStack(fun->reg, fun->stack->thisVar.varData.theStack);
+			bool success = fun->reg.makeFastArrayFromStack(fun->stack->thisVar.varData.theStack);
 			trimStack(fun->stack);
 			return success ? BR_CONTINUE : BR_ERROR;
 		}
@@ -2338,7 +2338,7 @@ builtIn(makeFastArray) {
 		case SVT_INT: {
 			int i = fun->stack->thisVar.varData.intValue;
 			trimStack(fun->stack);
-			return makeFastArraySize(fun->reg, i) ? BR_CONTINUE : BR_ERROR;
+			return fun->reg.makeFastArraySize(i) ? BR_CONTINUE : BR_ERROR;
 		}
 			break;
 
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index af6d388..50bd52e 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -386,25 +386,25 @@ Variable *fastArrayGetByIndex(FastArrayHandler *vS, uint theIndex) {
 	return &vS->fastVariables[theIndex];
 }
 
-bool makeFastArraySize(Variable &to, int size) {
+bool Variable::makeFastArraySize(int size) {
 	if (size < 0)
 		return fatal("Can't create a fast array with a negative number of elements!");
-	to.unlinkVar();
-	to.varType = SVT_FASTARRAY;
-	to.varData.fastArray = new FastArrayHandler;
-	if (!checkNew(to.varData.fastArray))
+	unlinkVar();
+	varType = SVT_FASTARRAY;
+	varData.fastArray = new FastArrayHandler;
+	if (!checkNew(varData.fastArray))
 		return false;
-	to.varData.fastArray->fastVariables = new Variable[size];
-	if (!checkNew(to.varData.fastArray->fastVariables))
+	varData.fastArray->fastVariables = new Variable[size];
+	if (!checkNew(varData.fastArray->fastVariables))
 		return false;
-	to.varData.fastArray->size = size;
-	to.varData.fastArray->timesUsed = 1;
+	varData.fastArray->size = size;
+	varData.fastArray->timesUsed = 1;
 	return true;
 }
 
-bool makeFastArrayFromStack(Variable &to, const StackHandler *stacky) {
+bool Variable::makeFastArrayFromStack(const StackHandler *stacky) {
 	int size = stackSize(stacky);
-	if (!makeFastArraySize(to, size))
+	if (!makeFastArraySize(size))
 		return false;
 
 	// Now let's fill up the new array
@@ -412,7 +412,7 @@ bool makeFastArrayFromStack(Variable &to, const StackHandler *stacky) {
 	VariableStack *allV = stacky->first;
 	size = 0;
 	while (allV) {
-		to.varData.fastArray->fastVariables[size].copyMain(allV->thisVar);
+		varData.fastArray->fastVariables[size].copyMain(allV->thisVar);
 		size++;
 		allV = allV->next;
 	}
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index febd942..de7d2ef 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -97,6 +97,10 @@ struct Variable {
 	void makeCostumeVariable(Persona *i);
 	struct Persona *getCostumeFromVar();
 
+	// Fast array variable
+	bool makeFastArrayFromStack(const StackHandler *stacky);
+	bool makeFastArraySize(int size);
+
 	// Add variables
 	void addVariablesInSecond(const Variable &other);
 	void compareVariablesInSecond(const Variable &other);
@@ -127,8 +131,6 @@ bool stackSetByIndex(VariableStack *, uint, const Variable &);
 Variable *stackGetByIndex(VariableStack *, uint);
 bool getSavedGamesStack(StackHandler *sH, const Common::String &ext);
 
-bool makeFastArrayFromStack(Variable &to, const StackHandler *stacky);
-bool makeFastArraySize(Variable &to, int size);
 Variable *fastArrayGetByIndex(FastArrayHandler *vS, uint theIndex);
 
 // load & save


Commit: dc18ec2fd08ad10e022dc442228b5914701a3d2f
    https://github.com/scummvm/scummvm/commit/dc18ec2fd08ad10e022dc442228b5914701a3d2f
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move FastArray getter to struct FastArrayHandler

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


diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index 88171a5..400bf80 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -350,12 +350,8 @@ bool continueFunction(LoadedFunction *fun) {
 						return false;
 					Variable *grab =
 							(fun->stack->thisVar.varType == SVT_FASTARRAY) ?
-									fastArrayGetByIndex(
-											fun->stack->thisVar.varData.fastArray,
-											ii) :
-									stackGetByIndex(
-											fun->stack->thisVar.varData.theStack->first,
-											ii);
+									fun->stack->thisVar.varData.fastArray->fastArrayGetByIndex(ii) :
+									stackGetByIndex(fun->stack->thisVar.varData.theStack->first, ii);
 
 					trimStack(fun->stack);
 
@@ -414,8 +410,7 @@ bool continueFunction(LoadedFunction *fun) {
 				int ii;
 				if (!fun->reg.getValueType(ii, SVT_INT))
 					return false;
-				Variable *v = fastArrayGetByIndex(
-						fun->stack->thisVar.varData.fastArray, ii);
+				Variable *v = fun->stack->thisVar.varData.fastArray->fastArrayGetByIndex(ii);
 				if (v == NULL)
 					return fatal("Not within bounds of fast array.");
 				if (!v->copyFrom(fun->stack->next->thisVar))
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 50bd52e..f822015 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -380,10 +380,10 @@ bool Variable::copyFrom(const Variable &from) {
 	return copyMain(from);
 }
 
-Variable *fastArrayGetByIndex(FastArrayHandler *vS, uint theIndex) {
-	if ((int)theIndex >= vS->size)
+Variable *FastArrayHandler::fastArrayGetByIndex(uint theIndex) {
+	if ((int)theIndex >= size)
 		return NULL;
-	return &vS->fastVariables[theIndex];
+	return &fastVariables[theIndex];
 }
 
 bool Variable::makeFastArraySize(int size) {
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index de7d2ef..0519893 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -48,6 +48,8 @@ struct FastArrayHandler {
 	struct Variable *fastVariables;
 	int size;
 	int timesUsed;
+
+	Variable *fastArrayGetByIndex(uint theIndex);
 };
 
 struct StackHandler {
@@ -131,8 +133,6 @@ bool stackSetByIndex(VariableStack *, uint, const Variable &);
 Variable *stackGetByIndex(VariableStack *, uint);
 bool getSavedGamesStack(StackHandler *sH, const Common::String &ext);
 
-Variable *fastArrayGetByIndex(FastArrayHandler *vS, uint theIndex);
-
 // load & save
 void saveStack(VariableStack *vs, Common::WriteStream *stream);
 VariableStack *loadStack(Common::SeekableReadStream *stream, VariableStack **last);


Commit: 9fb57f944d1105c084b4cf54e037a66b9eb34740
    https://github.com/scummvm/scummvm/commit/9fb57f944d1105c084b4cf54e037a66b9eb34740
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move stack variable getter/setter to VariableStack

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


diff --git a/engines/sludge/function.cpp b/engines/sludge/function.cpp
index 400bf80..553e59d 100644
--- a/engines/sludge/function.cpp
+++ b/engines/sludge/function.cpp
@@ -351,7 +351,7 @@ bool continueFunction(LoadedFunction *fun) {
 					Variable *grab =
 							(fun->stack->thisVar.varType == SVT_FASTARRAY) ?
 									fun->stack->thisVar.varData.fastArray->fastArrayGetByIndex(ii) :
-									stackGetByIndex(fun->stack->thisVar.varData.theStack->first, ii);
+									fun->stack->thisVar.varData.theStack->first->stackGetByIndex(ii);
 
 					trimStack(fun->stack);
 
@@ -396,9 +396,7 @@ bool continueFunction(LoadedFunction *fun) {
 					int ii;
 					if (!fun->reg.getValueType(ii, SVT_INT))
 						return false;
-					if (!stackSetByIndex(
-							fun->stack->thisVar.varData.theStack->first, ii,
-							fun->stack->next->thisVar)) {
+					if (!fun->stack->thisVar.varData.theStack->first->stackSetByIndex(ii, fun->stack->next->thisVar)) {
 						return false;
 					}
 					trimStack(fun->stack);
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index f822015..9b72185 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -448,7 +448,8 @@ bool addVarToStackQuick(Variable &va, VariableStack *&thisStack) {
 	return true;
 }
 
-bool stackSetByIndex(VariableStack *vS, uint theIndex, const Variable &va) {
+bool VariableStack::stackSetByIndex(uint theIndex, const Variable &va) {
+	VariableStack *vS = this;
 	while (theIndex--) {
 		vS = vS->next;
 		if (!vS)
@@ -457,7 +458,8 @@ bool stackSetByIndex(VariableStack *vS, uint theIndex, const Variable &va) {
 	return vS->thisVar.copyFrom(va);
 }
 
-Variable *stackGetByIndex(VariableStack *vS, uint theIndex) {
+Variable *VariableStack::stackGetByIndex(uint theIndex) {
+	VariableStack *vS = this;
 	while (theIndex--) {
 		vS = vS->next;
 		if (!vS) {
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 0519893..dafc761 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -117,6 +117,10 @@ struct Variable {
 struct VariableStack {
 	Variable thisVar;
 	VariableStack *next;
+
+	// Variable getter & setter
+	bool stackSetByIndex(uint, const Variable &);
+	Variable *stackGetByIndex(uint);
 };
 
 // Stacky stuff
@@ -129,8 +133,6 @@ int deleteVarFromStack(const Variable &va, VariableStack *&thisStack,
 VariableStack *stackFindLast(VariableStack *hunt);
 bool copyStack(const Variable &from, Variable &to);
 int stackSize(const StackHandler *me);
-bool stackSetByIndex(VariableStack *, uint, const Variable &);
-Variable *stackGetByIndex(VariableStack *, uint);
 bool getSavedGamesStack(StackHandler *sH, const Common::String &ext);
 
 // load & save


Commit: ca583ebfcfc420d0b303256a9a088bb2327ea907
    https://github.com/scummvm/scummvm/commit/ca583ebfcfc420d0b303256a9a088bb2327ea907
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move last stack finding function to struct VariableStack

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


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 61f1726..bf7c422 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -609,7 +609,8 @@ builtIn(deleteFromStack) {
 	fun->reg.setVariable(SVT_INT, deleteVarFromStack(fun->stack->thisVar, fun->stack->next->thisVar.varData.theStack->first, false));
 
 	// Horrible hacking because 'last' value might now be wrong!
-	fun->stack->next->thisVar.varData.theStack->last = stackFindLast(fun->stack->next->thisVar.varData.theStack->first);
+	VariableStack *nextFirstStack = fun->stack->next->thisVar.varData.theStack->first;
+	fun->stack->next->thisVar.varData.theStack->last = (nextFirstStack == NULL) ? NULL : nextFirstStack->stackFindLast();
 
 	trimStack(fun->stack);
 	trimStack(fun->stack);
@@ -627,7 +628,8 @@ builtIn(deleteAllFromStack) {
 	fun->reg.setVariable(SVT_INT, deleteVarFromStack(fun->stack->thisVar, fun->stack->next->thisVar.varData.theStack->first, true));
 
 	// Horrible hacking because 'last' value might now be wrong!
-	fun->stack->next->thisVar.varData.theStack->last = stackFindLast(fun->stack->next->thisVar.varData.theStack->first);
+	VariableStack *nextFirstStack = fun->stack->next->thisVar.varData.theStack->first;
+	fun->stack->next->thisVar.varData.theStack->last = (nextFirstStack == NULL) ? NULL : nextFirstStack->stackFindLast();
 
 	trimStack(fun->stack);
 	trimStack(fun->stack);
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 9b72185..5da5248 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -492,10 +492,8 @@ int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOf
 }
 
 // Would be a LOT better just to keep this up to date in the above function... ah well
-VariableStack *stackFindLast(VariableStack *hunt) {
-	if (hunt == NULL)
-		return NULL;
-
+VariableStack *VariableStack::stackFindLast() {
+	VariableStack *hunt = this;
 	while (hunt->next)
 		hunt = hunt->next;
 
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index dafc761..51fba77 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -121,6 +121,9 @@ struct VariableStack {
 	// Variable getter & setter
 	bool stackSetByIndex(uint, const Variable &);
 	Variable *stackGetByIndex(uint);
+
+	// Find last
+	VariableStack *stackFindLast();
 };
 
 // Stacky stuff
@@ -128,9 +131,7 @@ struct VariableStack {
 bool addVarToStack(const Variable &va, VariableStack *&thisStack);
 bool addVarToStackQuick(Variable &va, VariableStack *&thisStack);
 void trimStack(VariableStack *&stack);
-int deleteVarFromStack(const Variable &va, VariableStack *&thisStack,
-		bool allOfEm = false);
-VariableStack *stackFindLast(VariableStack *hunt);
+int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOfEm = false);
 bool copyStack(const Variable &from, Variable &to);
 int stackSize(const StackHandler *me);
 bool getSavedGamesStack(StackHandler *sH, const Common::String &ext);


Commit: 80478ee4704ea09c16c5728c957ea0096b923d05
    https://github.com/scummvm/scummvm/commit/80478ee4704ea09c16c5728c957ea0096b923d05
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move copyStack() to struct Variable

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


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index bf7c422..c7b66d6 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -551,7 +551,7 @@ builtIn(copyStack) {
 		return BR_ERROR;
 	}
 	// Return value
-	if (!copyStack(fun->stack->thisVar, fun->reg))
+	if (!fun->reg.copyStack(fun->stack->thisVar))
 		return BR_ERROR;
 	trimStack(fun->stack);
 	return BR_CONTINUE;
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 5da5248..c1ff97e 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -170,20 +170,20 @@ bool getSavedGamesStack(StackHandler *sH, const Common::String &ext) {
 	return true;
 }
 
-bool copyStack(const Variable &from, Variable &to) {
-	to.varType = SVT_STACK;
-	to.varData.theStack = new StackHandler;
-	if (!checkNew(to.varData.theStack))
+bool Variable::copyStack(const Variable &from) {
+	varType = SVT_STACK;
+	varData.theStack = new StackHandler;
+	if (!checkNew(varData.theStack))
 		return false;
-	to.varData.theStack->first = NULL;
-	to.varData.theStack->last = NULL;
-	to.varData.theStack->timesUsed = 1;
+	varData.theStack->first = NULL;
+	varData.theStack->last = NULL;
+	varData.theStack->timesUsed = 1;
 	VariableStack *a = from.varData.theStack->first;
 
 	while (a) {
-		addVarToStack(a->thisVar, to.varData.theStack->first);
-		if (to.varData.theStack->last == NULL) {
-			to.varData.theStack->last = to.varData.theStack->first;
+		addVarToStack(a->thisVar, varData.theStack->first);
+		if (varData.theStack->last == NULL) {
+			varData.theStack->last = varData.theStack->first;
 		}
 		a = a->next;
 	}
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 51fba77..4d756f5 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -103,6 +103,9 @@ struct Variable {
 	bool makeFastArrayFromStack(const StackHandler *stacky);
 	bool makeFastArraySize(int size);
 
+	// Stack variable
+	bool copyStack(const Variable &from);
+
 	// Add variables
 	void addVariablesInSecond(const Variable &other);
 	void compareVariablesInSecond(const Variable &other);
@@ -132,7 +135,6 @@ bool addVarToStack(const Variable &va, VariableStack *&thisStack);
 bool addVarToStackQuick(Variable &va, VariableStack *&thisStack);
 void trimStack(VariableStack *&stack);
 int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOfEm = false);
-bool copyStack(const Variable &from, Variable &to);
 int stackSize(const StackHandler *me);
 bool getSavedGamesStack(StackHandler *sH, const Common::String &ext);
 


Commit: fa72209845740352e6f575f5afc1dd0da9d6a502
    https://github.com/scummvm/scummvm/commit/fa72209845740352e6f575f5afc1dd0da9d6a502
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move stack size getter to struct StackHandler

Changed paths:
    engines/sludge/bg_effects.cpp
    engines/sludge/builtin.cpp
    engines/sludge/variable.cpp
    engines/sludge/variable.h


diff --git a/engines/sludge/bg_effects.cpp b/engines/sludge/bg_effects.cpp
index d02aceb..3f40fc8 100644
--- a/engines/sludge/bg_effects.cpp
+++ b/engines/sludge/bg_effects.cpp
@@ -166,7 +166,7 @@ bool blur_createSettings(int numParams, VariableStack *&stack) {
 				error = "Third and subsequent parameters in setBackgroundEffect should be arrays";
 				break;
 			} else {
-				int w = stackSize(justToCheckSizes->thisVar.varData.theStack);
+				int w = justToCheckSizes->thisVar.varData.theStack->getStackSize();
 				if (a) {
 					if (w != width) {
 						error = "Arrays in setBackgroundEffect must be the same size";
diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index c7b66d6..6e4a953 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -527,7 +527,7 @@ builtIn(stackSize) {
 	switch (fun->stack->thisVar.varType) {
 		case SVT_STACK:
 			// Return value
-			fun->reg.setVariable(SVT_INT, stackSize(fun->stack->thisVar.varData.theStack));
+			fun->reg.setVariable(SVT_INT, fun->stack->thisVar.varData.theStack->getStackSize());
 			trimStack(fun->stack);
 			return BR_CONTINUE;
 
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index c1ff97e..04e5201 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -134,9 +134,9 @@ Persona *Variable::getCostumeFromVar() {
 	return p;
 }
 
-int stackSize(const StackHandler *me) {
+int StackHandler::getStackSize() const {
 	int r = 0;
-	VariableStack *a = me->first;
+	VariableStack *a = first;
 	while (a) {
 		r++;
 		a = a->next;
@@ -403,7 +403,7 @@ bool Variable::makeFastArraySize(int size) {
 }
 
 bool Variable::makeFastArrayFromStack(const StackHandler *stacky) {
-	int size = stackSize(stacky);
+	int size = stacky->getStackSize();
 	if (!makeFastArraySize(size))
 		return false;
 
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index 4d756f5..afbf9c3 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -56,6 +56,8 @@ struct StackHandler {
 	struct VariableStack *first;
 	struct VariableStack *last;
 	int timesUsed;
+
+	int getStackSize() const;
 };
 
 union VariableData {
@@ -135,7 +137,6 @@ bool addVarToStack(const Variable &va, VariableStack *&thisStack);
 bool addVarToStackQuick(Variable &va, VariableStack *&thisStack);
 void trimStack(VariableStack *&stack);
 int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOfEm = false);
-int stackSize(const StackHandler *me);
 bool getSavedGamesStack(StackHandler *sH, const Common::String &ext);
 
 // load & save


Commit: 8ead8de2846539fd68811937abdd1cbb94382ce0
    https://github.com/scummvm/scummvm/commit/8ead8de2846539fd68811937abdd1cbb94382ce0
Author: Simei Yin (roseline.yin at gmail.com)
Date: 2018-05-31T23:15:09+02:00

Commit Message:
SLUDGE: Move save game getter to StackHandler

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


diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 6e4a953..1030643 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -215,7 +215,7 @@ builtIn(getMatchingFiles) {
 	fun->reg.varData.theStack->first = NULL;
 	fun->reg.varData.theStack->last = NULL;
 	fun->reg.varData.theStack->timesUsed = 1;
-	if (!getSavedGamesStack(fun->reg.varData.theStack, newText))
+	if (!fun->reg.varData.theStack->getSavedGamesStack(newText))
 		return BR_ERROR;
 	return BR_CONTINUE;
 }
diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp
index 04e5201..44381aa 100644
--- a/engines/sludge/variable.cpp
+++ b/engines/sludge/variable.cpp
@@ -144,8 +144,7 @@ int StackHandler::getStackSize() const {
 	return r;
 }
 
-bool getSavedGamesStack(StackHandler *sH, const Common::String &ext) {
-
+bool StackHandler::getSavedGamesStack(const Common::String &ext) {
 	// Make pattern
 	uint len = ext.size();
 	Common::String pattern = "*";
@@ -161,10 +160,10 @@ bool getSavedGamesStack(StackHandler *sH, const Common::String &ext) {
 	for (it = sa.begin(); it != sa.end(); ++it) {
 		(*it).erase((*it).size() - len, len);
 		newName.makeTextVar((*it));
-		if (!addVarToStack(newName, sH->first))
+		if (!addVarToStack(newName, first))
 			return false;
-		if (sH->last == NULL)
-			sH->last = sH->first;
+		if (last == NULL)
+			last = first;
 	}
 
 	return true;
diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h
index afbf9c3..1ae2aca 100644
--- a/engines/sludge/variable.h
+++ b/engines/sludge/variable.h
@@ -58,6 +58,7 @@ struct StackHandler {
 	int timesUsed;
 
 	int getStackSize() const;
+	bool getSavedGamesStack(const Common::String &ext);
 };
 
 union VariableData {
@@ -137,7 +138,6 @@ bool addVarToStack(const Variable &va, VariableStack *&thisStack);
 bool addVarToStackQuick(Variable &va, VariableStack *&thisStack);
 void trimStack(VariableStack *&stack);
 int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOfEm = false);
-bool getSavedGamesStack(StackHandler *sH, const Common::String &ext);
 
 // load & save
 void saveStack(VariableStack *vs, Common::WriteStream *stream);





More information about the Scummvm-git-logs mailing list