diff options
Diffstat (limited to 'engines/adl')
-rw-r--r-- | engines/adl/console.cpp | 43 | ||||
-rw-r--r-- | engines/adl/console.h | 2 |
2 files changed, 40 insertions, 5 deletions
diff --git a/engines/adl/console.cpp b/engines/adl/console.cpp index 0ac3cb8df4..e7611419e0 100644 --- a/engines/adl/console.cpp +++ b/engines/adl/console.cpp @@ -35,6 +35,7 @@ Console::Console(AdlEngine *engine) : GUI::Debugger() { registerCmd("verbs", WRAP_METHOD(Console, Cmd_Verbs)); registerCmd("dump_scripts", WRAP_METHOD(Console, Cmd_DumpScripts)); registerCmd("valid_cmds", WRAP_METHOD(Console, Cmd_ValidCommands)); + registerCmd("region", WRAP_METHOD(Console, Cmd_Region)); registerCmd("room", WRAP_METHOD(Console, Cmd_Room)); registerCmd("items", WRAP_METHOD(Console, Cmd_Items)); registerCmd("give_item", WRAP_METHOD(Console, Cmd_GiveItem)); @@ -171,6 +172,42 @@ bool Console::Cmd_DumpScripts(int argc, const char **argv) { return true; } +void Console::prepareGame() { + _engine->clearScreen(); + _engine->loadRoom(_engine->_state.room); + _engine->showRoom(); + _engine->_display->updateTextScreen(); + _engine->_display->updateHiResScreen(); +} + +bool Console::Cmd_Region(int argc, const char **argv) { + if (argc > 2) { + debugPrintf("Usage: %s [<new_region>]\n", argv[0]); + return true; + } + + if (argc == 2) { + if (!_engine->_canRestoreNow) { + debugPrintf("Cannot change regions right now\n"); + return true; + } + + uint regionCount = _engine->_state.regions.size(); + uint region = strtoul(argv[1], NULL, 0); + if (region < 1 || region > regionCount) { + debugPrintf("Region %u out of valid range [1, %u]\n", region, regionCount); + return true; + } + + _engine->switchRegion(region); + prepareGame(); + } + + debugPrintf("Current region: %u\n", _engine->_state.region); + + return true; +} + bool Console::Cmd_Room(int argc, const char **argv) { if (argc > 2) { debugPrintf("Usage: %s [<new_room>]\n", argv[0]); @@ -191,11 +228,7 @@ bool Console::Cmd_Room(int argc, const char **argv) { } _engine->_state.room = room; - _engine->clearScreen(); - _engine->loadRoom(_engine->_state.room); - _engine->showRoom(); - _engine->_display->updateTextScreen(); - _engine->_display->updateHiResScreen(); + prepareGame(); } debugPrintf("Current room: %u\n", _engine->_state.room); diff --git a/engines/adl/console.h b/engines/adl/console.h index 8b3ab6b3cf..68787e148a 100644 --- a/engines/adl/console.h +++ b/engines/adl/console.h @@ -48,6 +48,7 @@ private: bool Cmd_Verbs(int argc, const char **argv); bool Cmd_DumpScripts(int argc, const char **argv); bool Cmd_ValidCommands(int argc, const char **argv); + bool Cmd_Region(int argc, const char **argv); bool Cmd_Room(int argc, const char **argv); bool Cmd_Items(int argc, const char **argv); bool Cmd_GiveItem(int argc, const char **argv); @@ -57,6 +58,7 @@ private: void printItem(const Item &item); void printWordMap(const Common::HashMap<Common::String, uint> &wordMap); void dumpScripts(const Common::String &prefix = Common::String()); + void prepareGame(); AdlEngine *_engine; }; |