[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