[Scummvm-cvs-logs] CVS: scummvm/kyra script.cpp,1.22,1.23 script.h,1.13,1.14

Johannes Schickel lordhoto at users.sourceforge.net
Sun Jan 8 08:16:09 CET 2006


Update of /cvsroot/scummvm/scummvm/kyra
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11820

Modified Files:
	script.cpp script.h 
Log Message:
Fixed script handling a bit.


Index: script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/script.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- script.cpp	2 Jan 2006 22:58:59 -0000	1.22
+++ script.cpp	8 Jan 2006 16:15:34 -0000	1.23
@@ -192,15 +192,14 @@
 }
 
 bool ScriptHelper::runScript(ScriptState *script) {
-	_curScript = script;
 	_parameter = 0;
 	_continue = true;
 	
-	if (!_curScript->ip) {
+	if (!script->ip) {
 		return false;
 	}
 	
-	int16 code = READ_BE_UINT16(_curScript->ip); _curScript->ip += 2;
+	int16 code = READ_BE_UINT16(script->ip); script->ip += 2;
 	int16 opcode = (code >> 8) & 0x1F;
 
 	if (code & 0x8000) {
@@ -209,7 +208,7 @@
 	} else if (code & 0x4000) {
 		_parameter = (int8)(code);
 	} else if (code & 0x2000) {
-		_parameter = READ_BE_UINT16(_curScript->ip); _curScript->ip += 2;
+		_parameter = READ_BE_UINT16(script->ip); script->ip += 2;
 	} else {
 		_parameter = 0;
 	}
@@ -218,10 +217,9 @@
 		error("Script unknown command: %d", opcode);
 	} else {
 		debug(5, "%s(%d)", _commands[opcode].desc, _parameter);
-		(this->*(_commands[opcode].proc))();
+		(this->*(_commands[opcode].proc))(script);
 	}
 	
-	_curScript = 0;
 	return _continue;
 }
 
@@ -299,123 +297,125 @@
 #pragma mark - Command implementations
 #pragma mark -
 
-void ScriptHelper::c1_jmpTo() {
-	_curScript->ip = _curScript->dataPtr->data + (_parameter << 1);
+void ScriptHelper::c1_jmpTo(ScriptState* script) {
+	script->ip = script->dataPtr->data + (_parameter << 1);
 }
 
-void ScriptHelper::c1_setRetValue() {
-	_curScript->retValue = _parameter;
+void ScriptHelper::c1_setRetValue(ScriptState* script) {
+	script->retValue = _parameter;
 }
 
-void ScriptHelper::c1_pushRetOrPos() {
+void ScriptHelper::c1_pushRetOrPos(ScriptState* script) {
 	switch (_parameter) {
 		case 0:
-			_curScript->stack[--_curScript->sp] = _curScript->retValue;
+			script->stack[--script->sp] = script->retValue;
 		break;
 		
 		case 1:
-			_curScript->stack[--_curScript->sp] = (_curScript->ip - _curScript->dataPtr->data) / 2 + 1;
-			_curScript->stack[--_curScript->sp] = _curScript->bp;
-			_curScript->bp = _curScript->sp + 2;
+			script->stack[--script->sp] = (script->ip - script->dataPtr->data) / 2 + 1;
+			script->stack[--script->sp] = script->bp;
+			script->bp = script->sp + 2;
 		break;
 		
 		default:
 			_continue = false;
-			_curScript->ip = 0;
+			script->ip = 0;
 		break;
 	}
 }
 
-void ScriptHelper::c1_push() {
-	_curScript->stack[--_curScript->sp] = _parameter;
+void ScriptHelper::c1_push(ScriptState* script) {
+	script->stack[--script->sp] = _parameter;
 }
 
-void ScriptHelper::c1_pushVar() {
-	_curScript->stack[--_curScript->sp] = _curScript->variables[_parameter];
+void ScriptHelper::c1_pushVar(ScriptState* script) {
+	script->stack[--script->sp] = script->variables[_parameter];
 }
 
-void ScriptHelper::c1_pushBPNeg() {
-	_curScript->stack[--_curScript->sp] = _curScript->stack[(-(int32)(_parameter + 2)) + _curScript->bp];
+void ScriptHelper::c1_pushBPNeg(ScriptState* script) {
+	script->stack[--script->sp] = script->stack[(-(int32)(_parameter + 2)) + script->bp];
 }
 
-void ScriptHelper::c1_pushBPAdd() {
-	_curScript->stack[--_curScript->sp] = _curScript->stack[(_parameter - 1) + _curScript->bp];
+void ScriptHelper::c1_pushBPAdd(ScriptState* script) {
+	script->stack[--script->sp] = script->stack[(_parameter - 1) + script->bp];
 }
 
-void ScriptHelper::c1_popRetOrPos() {
+void ScriptHelper::c1_popRetOrPos(ScriptState* script) {
 	switch (_parameter) {
 		case 0:
-			_curScript->retValue = _curScript->stack[_curScript->sp++];
+			script->retValue = script->stack[script->sp++];
 		break;
 		
 		case 1:
-			if (_curScript->sp >= 60) {
+			if (script->sp >= 60) {
 				_continue = false;
-				_curScript->ip = 0;
+				script->ip = 0;
 			} else {
-				_curScript->bp = _curScript->stack[_curScript->sp++];
-				_curScript->ip = _curScript->dataPtr->data + (_curScript->stack[_curScript->sp++] << 1);
+				script->bp = script->stack[script->sp++];
+				script->ip = script->dataPtr->data + (script->stack[script->sp++] << 1);
 			}
 		break;
 		
 		default:
 			_continue = false;
-			_curScript->ip = 0;
+			script->ip = 0;
 		break;
 	}
 }
 
-void ScriptHelper::c1_popVar() {
-	_curScript->variables[_parameter] = _curScript->stack[_curScript->sp++];
+void ScriptHelper::c1_popVar(ScriptState* script) {
+	script->variables[_parameter] = script->stack[script->sp++];
 }
 
-void ScriptHelper::c1_popBPNeg() {
-	_curScript->stack[(-(int32)(_parameter + 2)) + _curScript->bp] = _curScript->stack[_curScript->sp++];
+void ScriptHelper::c1_popBPNeg(ScriptState* script) {
+	script->stack[(-(int32)(_parameter + 2)) + script->bp] = script->stack[script->sp++];
 }
 
-void ScriptHelper::c1_popBPAdd() {
-	_curScript->stack[(_parameter - 1) + _curScript->bp] = _curScript->stack[_curScript->sp++];
+void ScriptHelper::c1_popBPAdd(ScriptState* script) {
+	script->stack[(_parameter - 1) + script->bp] = script->stack[script->sp++];
 }
 
-void ScriptHelper::c1_addSP() {
-	_curScript->sp += _parameter;
+void ScriptHelper::c1_addSP(ScriptState* script) {
+	script->sp += _parameter;
 }
 
-void ScriptHelper::c1_subSP() {
-	_curScript->sp -= _parameter;
+void ScriptHelper::c1_subSP(ScriptState* script) {
+	script->sp -= _parameter;
 }
 
-void ScriptHelper::c1_execOpcode() {
-	assert((uint8)_parameter < _curScript->dataPtr->opcodeSize);
-	if (_curScript->dataPtr->opcodes[(uint8)_parameter] == &KyraEngine::cmd_dummy)
+void ScriptHelper::c1_execOpcode(ScriptState* script) {
+	assert((uint8)_parameter < script->dataPtr->opcodeSize);
+	if (script->dataPtr->opcodes[(uint8)_parameter] == &KyraEngine::cmd_dummy)
 		debug("calling unimplemented opcode(0x%.02X)", (uint8)_parameter);
-	_curScript->retValue = (_vm->*_curScript->dataPtr->opcodes[(uint8)_parameter])(_curScript);
+	int val = (_vm->*script->dataPtr->opcodes[(uint8)_parameter])(script);
+	assert(script);
+	script->retValue = val;
 }
 
-void ScriptHelper::c1_ifNotJmp() {
-	if (!_curScript->stack[_curScript->sp++]) {
+void ScriptHelper::c1_ifNotJmp(ScriptState* script) {
+	if (!script->stack[script->sp++]) {
 		_parameter &= 0x7FFF;
-		_curScript->ip = _curScript->dataPtr->data + (_parameter << 1);
+		script->ip = script->dataPtr->data + (_parameter << 1);
 	}
 }
 
-void ScriptHelper::c1_negate() {
-	int16 value = _curScript->stack[_curScript->sp];
+void ScriptHelper::c1_negate(ScriptState* script) {
+	int16 value = script->stack[script->sp];
 	switch (_parameter) {
 		case 0:
 			if (!value) {
-				_curScript->stack[_curScript->sp] = 1;
+				script->stack[script->sp] = 1;
 			} else {
-				_curScript->stack[_curScript->sp] = 0;
+				script->stack[script->sp] = 0;
 			}
 		break;
 		
 		case 1:
-			_curScript->stack[_curScript->sp] = -value;
+			script->stack[script->sp] = -value;
 		break;
 		
 		case 2:
-			_curScript->stack[_curScript->sp] = ~value;
+			script->stack[script->sp] = ~value;
 		break;
 		
 		default:
@@ -424,12 +424,12 @@
 	}
 }
 
-void ScriptHelper::c1_eval() {
+void ScriptHelper::c1_eval(ScriptState* script) {
 	int16 ret = 0;
 	bool error = false;
 	
-	int16 val1 = _curScript->stack[_curScript->sp++];
-	int16 val2 = _curScript->stack[_curScript->sp++];
+	int16 val1 = script->stack[script->sp++];
+	int16 val2 = script->stack[script->sp++];
 	
 	switch (_parameter) {
 		case 0:
@@ -543,22 +543,22 @@
 	}
 	
 	if (error) {
-		_curScript->ip = 0;
+		script->ip = 0;
 		_continue = false;
 	} else {
-		_curScript->stack[--_curScript->sp] = ret;
+		script->stack[--script->sp] = ret;
 	}
 }
 
-void ScriptHelper::c1_setRetAndJmp() {
-	if (_curScript->sp >= 60) {
+void ScriptHelper::c1_setRetAndJmp(ScriptState* script) {
+	if (script->sp >= 60) {
 		_continue = false;
-		_curScript->ip = 0;
+		script->ip = 0;
 	} else {
-		_curScript->retValue = _curScript->stack[_curScript->sp++];
-		uint16 temp = _curScript->stack[_curScript->sp++];
-		_curScript->stack[60] = 0;
-		_curScript->ip = &_curScript->dataPtr->data[temp*2];
+		script->retValue = script->stack[script->sp++];
+		uint16 temp = script->stack[script->sp++];
+		script->stack[60] = 0;
+		script->ip = &script->dataPtr->data[temp*2];
 	}
 }
 } // end of namespace Kyra

Index: script.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/script.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- script.h	13 Nov 2005 19:35:01 -0000	1.13
+++ script.h	8 Jan 2006 16:15:34 -0000	1.14
@@ -69,11 +69,10 @@
 	bool loadIFFBlock(byte *start, byte *&data, uint32 maxSize, const uint32 chunk, byte *loadTo, uint32 ptrSize) const;
 	
 	KyraEngine *_vm;
-	ScriptState *_curScript;
 	int16 _parameter;
 	bool _continue;
 
-	typedef void (ScriptHelper::*CommandProc)();
+	typedef void (ScriptHelper::*CommandProc)(ScriptState*);
 	struct CommandEntry {
 		CommandProc proc;
 		const char* desc;
@@ -81,25 +80,25 @@
 	
 	const CommandEntry *_commands;
 private:
-	void c1_jmpTo();
-	void c1_setRetValue();
-	void c1_pushRetOrPos();
-	void c1_push();
+	void c1_jmpTo(ScriptState*);
+	void c1_setRetValue(ScriptState*);
+	void c1_pushRetOrPos(ScriptState*);
+	void c1_push(ScriptState*);
 	//void c1_push(); same as 03
-	void c1_pushVar();
-	void c1_pushBPNeg();
-	void c1_pushBPAdd();
-	void c1_popRetOrPos();
-	void c1_popVar();
-	void c1_popBPNeg();
-	void c1_popBPAdd();
-	void c1_addSP();
-	void c1_subSP();
-	void c1_execOpcode();
-	void c1_ifNotJmp();
-	void c1_negate();
-	void c1_eval();
-	void c1_setRetAndJmp();
+	void c1_pushVar(ScriptState*);
+	void c1_pushBPNeg(ScriptState*);
+	void c1_pushBPAdd(ScriptState*);
+	void c1_popRetOrPos(ScriptState*);
+	void c1_popVar(ScriptState*);
+	void c1_popBPNeg(ScriptState*);
+	void c1_popBPAdd(ScriptState*);
+	void c1_addSP(ScriptState*);
+	void c1_subSP(ScriptState*);
+	void c1_execOpcode(ScriptState*);
+	void c1_ifNotJmp(ScriptState*);
+	void c1_negate(ScriptState*);
+	void c1_eval(ScriptState*);
+	void c1_setRetAndJmp(ScriptState*);
 };
 } // end of namespace Kyra
 





More information about the Scummvm-git-logs mailing list