[Scummvm-cvs-logs] SF.net SVN: scummvm: [32150] scummvm/trunk/engines/made

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sat May 17 15:35:57 CEST 2008


Revision: 32150
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32150&view=rev
Author:   thebluegr
Date:     2008-05-17 06:35:57 -0700 (Sat, 17 May 2008)

Log Message:
-----------
Initial incomplete version of a MADE script dumper

Modified Paths:
--------------
    scummvm/trunk/engines/made/script.cpp
    scummvm/trunk/engines/made/script.h

Modified: scummvm/trunk/engines/made/script.cpp
===================================================================
--- scummvm/trunk/engines/made/script.cpp	2008-05-17 13:22:12 UTC (rev 32149)
+++ scummvm/trunk/engines/made/script.cpp	2008-05-17 13:35:57 UTC (rev 32150)
@@ -183,7 +183,6 @@
 }
 
 void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
-
 	_vm->_quit = false;
 	_runningScriptObjectIndex = scriptObjectIndex;
 
@@ -201,7 +200,64 @@
 			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() {

Modified: scummvm/trunk/engines/made/script.h
===================================================================
--- scummvm/trunk/engines/made/script.h	2008-05-17 13:22:12 UTC (rev 32149)
+++ scummvm/trunk/engines/made/script.h	2008-05-17 13:35:57 UTC (rev 32150)
@@ -63,6 +63,7 @@
 	ScriptInterpreter(MadeEngine *vm);
 	~ScriptInterpreter();
 	void runScript(int16 scriptObjectIndex);
+	void dumpScript(int16 scriptObjectIndex);
 protected:
 	MadeEngine *_vm;
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list