diff options
Diffstat (limited to 'engines/mohawk/console.cpp')
-rw-r--r-- | engines/mohawk/console.cpp | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/engines/mohawk/console.cpp b/engines/mohawk/console.cpp index 149b6b6eba..5dcfff4f90 100644 --- a/engines/mohawk/console.cpp +++ b/engines/mohawk/console.cpp @@ -28,6 +28,7 @@ #include "mohawk/myst_scripts.h" #include "mohawk/graphics.h" #include "mohawk/riven.h" +#include "mohawk/riven_external.h" #include "mohawk/livingbooks.h" #include "mohawk/sound.h" #include "mohawk/video.h" @@ -307,6 +308,7 @@ RivenConsole::RivenConsole(MohawkEngine_Riven *vm) : GUI::Debugger(), _vm(vm) { DCmd_Register("dumpScript", WRAP_METHOD(RivenConsole, Cmd_DumpScript)); DCmd_Register("listZipCards", WRAP_METHOD(RivenConsole, Cmd_ListZipCards)); DCmd_Register("getRMAP", WRAP_METHOD(RivenConsole, Cmd_GetRMAP)); + DCmd_Register("combos", WRAP_METHOD(RivenConsole, Cmd_Combos)); } RivenConsole::~RivenConsole() { @@ -556,9 +558,11 @@ bool RivenConsole::Cmd_DumpScript(int argc, const char **argv) { printf ("==================================\n\n"); Common::SeekableReadStream *cardStream = _vm->getRawData(MKID_BE('CARD'), (uint16)atoi(argv[3])); cardStream->seek(4); - RivenScriptList scriptList = RivenScript::readScripts(_vm, cardStream); - for (uint32 i = 0; i < scriptList.size(); i++) + RivenScriptList scriptList = _vm->_scriptMan->readScripts(cardStream, false); + for (uint32 i = 0; i < scriptList.size(); i++) { scriptList[i]->dumpScript(varNames, xNames, 0); + delete scriptList[i]; + } delete cardStream; } else if (!scumm_stricmp(argv[2], "HSPT")) { printf ("\n\nDumping scripts for %s\'s card %d hotspots!\n", argv[1], (uint16)atoi(argv[3])); @@ -571,9 +575,11 @@ bool RivenConsole::Cmd_DumpScript(int argc, const char **argv) { for (uint16 i = 0; i < hotspotCount; i++) { printf ("Hotspot %d:\n", i); hsptStream->seek(22, SEEK_CUR); // Skip non-script related stuff - RivenScriptList scriptList = RivenScript::readScripts(_vm, hsptStream); - for (uint32 j = 0; j < scriptList.size(); j++) + RivenScriptList scriptList = _vm->_scriptMan->readScripts(hsptStream, false); + for (uint32 j = 0; j < scriptList.size(); j++) { scriptList[j]->dumpScript(varNames, xNames, 1); + delete scriptList[j]; + } } delete hsptStream; @@ -608,6 +614,33 @@ bool RivenConsole::Cmd_GetRMAP(int argc, const char **argv) { return true; } +bool RivenConsole::Cmd_Combos(int argc, const char **argv) { + // In the vain of SCUMM's 'drafts' command, this command will list + // out all combinations needed in Riven, decoded from the variables. + // You'll need to look up the Rebel Tunnel puzzle on your own; the + // solution is constant. + + uint32 teleCombo = *_vm->matchVarToString("tcorrectorder"); + uint32 prisonCombo = *_vm->matchVarToString("pcorrectorder"); + uint32 domeCombo = *_vm->matchVarToString("adomecombo"); + + DebugPrintf("Telescope Combo:\n "); + for (int i = 0; i < 5; i++) + DebugPrintf("%d ", _vm->_externalScriptHandler->getComboDigit(teleCombo, i)); + + DebugPrintf("\nPrison Combo:\n "); + for (int i = 0; i < 5; i++) + DebugPrintf("%d ", _vm->_externalScriptHandler->getComboDigit(prisonCombo, i)); + + DebugPrintf("\nDome Combo:\n "); + for (int i = 1; i <= 25; i++) + if (domeCombo & (1 << (25 - i))) + DebugPrintf("%d ", i); + + DebugPrintf("\n"); + return true; +} + LivingBooksConsole::LivingBooksConsole(MohawkEngine_LivingBooks *vm) : GUI::Debugger(), _vm(vm) { DCmd_Register("playSound", WRAP_METHOD(LivingBooksConsole, Cmd_PlaySound)); DCmd_Register("stopSound", WRAP_METHOD(LivingBooksConsole, Cmd_StopSound)); |