mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-28 20:55:19 +00:00
Initial incomplete version of a MADE script dumper
svn-id: r32150
This commit is contained in:
parent
f4cc7dfa85
commit
25e7e1999a
@ -183,7 +183,6 @@ ScriptInterpreter::~ScriptInterpreter() {
|
||||
}
|
||||
|
||||
void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
|
||||
|
||||
_vm->_quit = false;
|
||||
_runningScriptObjectIndex = scriptObjectIndex;
|
||||
|
||||
@ -201,7 +200,64 @@ void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
|
||||
warning("ScriptInterpreter::runScript(%d) Unknown opcode %02X", _runningScriptObjectIndex, opcode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptInterpreter::dumpScript(int16 scriptObjectIndex) {
|
||||
_codeBase = _vm->_dat->getObject(scriptObjectIndex)->getData();
|
||||
_codeIp = _codeBase;
|
||||
int16 val = 0;
|
||||
|
||||
// TODO: script size
|
||||
while (true) {
|
||||
byte opcode = readByte();
|
||||
if (opcode >= 1 && opcode <= _commandsMax) {
|
||||
printf("[%04X:%04X] %s\n", _runningScriptObjectIndex, (uint) (_codeIp - _codeBase), _commands[opcode - 1].desc);
|
||||
//(this->*_commands[opcode - 1].proc)();
|
||||
|
||||
// Handle command data
|
||||
if (!strcmp(_commands[opcode - 1].desc, "cmd_branchTrue")) {
|
||||
val = readInt16();
|
||||
printf("Offset = %04X\n", val);
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_branchFalse")) {
|
||||
val = readInt16();
|
||||
printf("Offset = %04X\n", val);
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_branch")) {
|
||||
val = readInt16();
|
||||
printf("Offset = %04X\n", val);
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_loadConstant")) {
|
||||
val = readInt16();
|
||||
printf("Constant = %04X\n", val);
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_loadVariable")) {
|
||||
val = readInt16();
|
||||
printf("Variable = %04X\n", val);
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_set")) {
|
||||
val = readInt16();
|
||||
printf("Variable = %04X\n", val);
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_call")) {
|
||||
// TODO
|
||||
printf("TODO\n");
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_arg") ||
|
||||
!strcmp(_commands[opcode - 1].desc, "cmd_aset") ||
|
||||
!strcmp(_commands[opcode - 1].desc, "cmd_tmp") ||
|
||||
!strcmp(_commands[opcode - 1].desc, "cmd_tset") ||
|
||||
!strcmp(_commands[opcode - 1].desc, "cmd_tspace")) {
|
||||
val = readByte();
|
||||
printf("argIndex = %d\n", val);
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_send")) {
|
||||
/*byte argc = */readByte();
|
||||
// TODO
|
||||
printf("TODO\n");
|
||||
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_extend")) {
|
||||
/*byte func = */readByte();
|
||||
|
||||
/*byte argc = */readByte();
|
||||
// TODO
|
||||
printf("TODO\n");
|
||||
}
|
||||
} else {
|
||||
warning("ScriptInterpreter::runScript(%d) Unknown opcode %02X", _runningScriptObjectIndex, opcode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
byte ScriptInterpreter::readByte() {
|
||||
|
@ -63,6 +63,7 @@ public:
|
||||
ScriptInterpreter(MadeEngine *vm);
|
||||
~ScriptInterpreter();
|
||||
void runScript(int16 scriptObjectIndex);
|
||||
void dumpScript(int16 scriptObjectIndex);
|
||||
protected:
|
||||
MadeEngine *_vm;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user