diff options
-rw-r--r-- | engines/scumm/he/intern_he.h | 6 | ||||
-rw-r--r-- | engines/scumm/he/script_v100he.cpp | 27 | ||||
-rw-r--r-- | engines/scumm/he/script_v72he.cpp | 14 | ||||
-rw-r--r-- | engines/scumm/scumm.cpp | 6 |
4 files changed, 47 insertions, 6 deletions
diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h index fff8502134..72ba7edb85 100644 --- a/engines/scumm/he/intern_he.h +++ b/engines/scumm/he/intern_he.h @@ -320,6 +320,8 @@ protected: virtual bool handleNextCharsetCode(Actor *a, int *c); virtual int convertMessageToString(const byte *msg, byte *dst, int dstSize); + void debugInput(byte *string); + /* HE version 72 script opcodes */ void o72_pushDWord(); void o72_getScriptString(); @@ -602,9 +604,12 @@ protected: const OpcodeEntryV100he *_opcodesV100he; + byte _debugInputBuffer[256]; public: ScummEngine_v100he(OSystem *syst, const DetectorResult &dr) : ScummEngine_v99he(syst, dr) {} + virtual void resetScumm(); + protected: virtual void setupOpcodes(); virtual void executeOpcode(byte i); @@ -643,6 +648,7 @@ protected: void o100_videoOps(); void o100_wait(); void o100_writeFile(); + void o100_debugInput(); void o100_isResourceLoaded(); void o100_getResourceSize(); void o100_getSpriteGroupInfo(); diff --git a/engines/scumm/he/script_v100he.cpp b/engines/scumm/he/script_v100he.cpp index 60863cc987..5717d77640 100644 --- a/engines/scumm/he/script_v100he.cpp +++ b/engines/scumm/he/script_v100he.cpp @@ -29,6 +29,7 @@ #include "scumm/actor.h" #include "scumm/charset.h" +#include "scumm/dialogs.h" #include "scumm/he/animation_he.h" #include "scumm/he/intern_he.h" #include "scumm/object.h" @@ -256,7 +257,7 @@ void ScummEngine_v100he::setupOpcodes() { OPCODE(o90_cond), OPCODE(o90_cos), /* A8 */ - OPCODE(o6_invalid), + OPCODE(o100_debugInput), OPCODE(o80_getFileSize), OPCODE(o6_getActorFromXY), OPCODE(o72_findAllObjects), @@ -2345,6 +2346,30 @@ void ScummEngine_v100he::o100_writeFile() { } } +void ScummEngine_v100he::o100_debugInput() { + byte subOp = fetchScriptByte(); + + switch (subOp) { + case 0: + copyScriptString(_debugInputBuffer, sizeof(_debugInputBuffer)); + break; + case 26: + pop(); + break; + case 27: + copyScriptString(_debugInputBuffer, sizeof(_debugInputBuffer)); + break; + case 80: + copyScriptString(_debugInputBuffer, sizeof(_debugInputBuffer)); + break; + case 92: + debugInput(_debugInputBuffer); + break; + default: + error("o100_debugInput: default case %d", subOp); + } +} + void ScummEngine_v100he::o100_isResourceLoaded() { // Reports percentage of resource loaded by queue int type; diff --git a/engines/scumm/he/script_v72he.cpp b/engines/scumm/he/script_v72he.cpp index 484e11cf50..7e31383f4e 100644 --- a/engines/scumm/he/script_v72he.cpp +++ b/engines/scumm/he/script_v72he.cpp @@ -1635,13 +1635,10 @@ void ScummEngine_v72he::o72_drawWizImage() { _wiz->displayWizImage(&wi); } -void ScummEngine_v72he::o72_debugInput() { - byte string[255]; +void ScummEngine_v72he::debugInput(byte* string) { byte *debugInputString; - copyScriptString(string, sizeof(string)); - - DebugInputDialog dialog(this, (char*)string); + DebugInputDialog dialog(this, (char *)string); runDialog(dialog); while (!dialog.done) { parseEvents(); @@ -1654,6 +1651,13 @@ void ScummEngine_v72he::o72_debugInput() { push(readVar(0)); } +void ScummEngine_v72he::o72_debugInput() { + byte string[255]; + + copyScriptString(string, sizeof(string)); + debugInput(string); +} + void ScummEngine_v72he::o72_jumpToScript() { int args[25]; int script; diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index a1365d5346..e4a6859e21 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -1530,6 +1530,12 @@ void ScummEngine_v99he::resetScumm() { byte *data = defineArray(129, kStringArray, 0, 0, 0, len); memcpy(data, _filenamePattern.pattern, len); } + +void ScummEngine_v100he::resetScumm() { + ScummEngine_v99he::resetScumm(); + + memset(_debugInputBuffer, 0, sizeof(_debugInputBuffer)); +} #endif void ScummEngine::setupMusic(int midi) { |