/* ScummVM - Graphic Adventure Engine * * ScummVM is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "darkseed/darkseed.h" #include "darkseed/debugconsole.h" namespace Darkseed { DebugConsole::DebugConsole(TosText *tosText) : _tosText(tosText) { registerCmd("tostext", WRAP_METHOD(DebugConsole, Cmd_tostext)); registerCmd("dt", WRAP_METHOD(DebugConsole, Cmd_dt)); registerCmd("getvar", WRAP_METHOD(DebugConsole, Cmd_getvar)); registerCmd("setvar", WRAP_METHOD(DebugConsole, Cmd_setvar)); registerCmd("enablePathfinderOverlay", WRAP_METHOD(DebugConsole, Cmd_enablePathfinderOverlay)); registerCmd("info", WRAP_METHOD(DebugConsole, Cmd_info)); registerCmd("gotoRoom", WRAP_METHOD(DebugConsole, Cmd_gotoRoom)); registerCmd("invAdd", WRAP_METHOD(DebugConsole, Cmd_invAdd)); registerCmd("invRemove", WRAP_METHOD(DebugConsole, Cmd_invRemove)); registerCmd("changeDay", WRAP_METHOD(DebugConsole, Cmd_changeDay)); registerCmd("searchTos", WRAP_METHOD(DebugConsole, Cmd_searchTos)); } DebugConsole::~DebugConsole() { } bool DebugConsole::Cmd_tostext(int argc, const char **argv) { if (argc != 2) { debugPrintf("Usage: tostext \n"); return true; } uint16 textIdx = atoi(argv[1]); if (textIdx < _tosText->getNumEntries()) { debugPrintf("%s\n", _tosText->getText(textIdx).encode().c_str()); } else { debugPrintf("index too large!\n"); } return true; } bool DebugConsole::Cmd_dt(int argc, const char **argv) { printDayAndTime(); return true; } bool DebugConsole::Cmd_getvar(int argc, const char **argv) { if (argc != 2) { debugPrintf("Usage: getvar \n"); return true; } int16 varIdx = (int16)atoi(argv[1]); if (validateObjVarIndex(varIdx)) { debugPrintf("Object Var: %d\n", g_engine->_objectVar.getVar(varIdx)); } return true; } bool DebugConsole::Cmd_setvar(int argc, const char **argv) { if (argc != 3) { debugPrintf("Usage: setvar \n"); return true; } int16 varIdx = (int16)atoi(argv[1]); int16 newValue = (int16)atoi(argv[2]); if (validateObjVarIndex(varIdx)) { g_engine->_objectVar[varIdx] = newValue; } return true; } bool DebugConsole::Cmd_enablePathfinderOverlay(int argc, const char **argv) { if (argc != 2) { debugPrintf("Usage: enablePathfinderOverlay \n"); return true; } if (!strcmp(argv[1], "true") || !strcmp(argv[1], "t")) { g_engine->_debugShowWalkPath = true; } else if (!strcmp(argv[1], "false") || !strcmp(argv[1], "f")) { g_engine->_debugShowWalkPath = false; } return true; } bool DebugConsole::validateObjVarIndex(int16 varIdx) { if (varIdx >= Objects::MAX_OBJECTS) { debugPrintf("Index must be less than %d\n", Objects::MAX_OBJECTS); return false; } if (varIdx < 0) { debugPrintf("Index cannot be negative\n"); return false; } return true; } bool DebugConsole::Cmd_info(int argc, const char **argv) { printDayAndTime(); debugPrintf("\nRoom info:\n"); debugPrintf("Room number: %d\n", g_engine->_room->_roomNumber); return true; } bool DebugConsole::Cmd_gotoRoom(int argc, const char **argv) { if (argc < 2 || argc > 3) { debugPrintf("Usage: gotoRoom \n"); return true; } int16 roomNumber = (int16)atoi(argv[1]); int entranceNumber = 0; if (argc == 3) { entranceNumber = (int16)atoi(argv[2]); } g_engine->debugTeleportToRoom(roomNumber, entranceNumber); return true; } bool DebugConsole::Cmd_invAdd(int argc, const char **argv) { if (argc != 2) { debugPrintf("Usage: invAdd \n"); return true; } uint8 objNum = (uint8)atoi(argv[1]); g_engine->_inventory.addItem(objNum); return true; } bool DebugConsole::Cmd_invRemove(int argc, const char **argv) { if (argc != 2) { debugPrintf("Usage: invRemove \n"); return true; } uint8 objNum = (uint8)atoi(argv[1]); g_engine->_inventory.removeItem(objNum); return true; } bool DebugConsole::Cmd_changeDay(int argc, const char **argv) { if (argc != 2) { debugPrintf("Usage: changeDay \n"); return true; } uint8 newDay = (uint8)atoi(argv[1]); if (newDay < 1 || newDay > 3) { debugPrintf("Error: Day must be in range of 1 .. 3\n"); return true; } g_engine->_currentDay = newDay; debugPrintf("Current day changed.\n"); printDayAndTime(); return true; } bool DebugConsole::Cmd_searchTos(int argc, const char **argv) { if (argc != 2) { debugPrintf("Usage: searchTos \"search string\"\n"); return true; } Common::String searchString = Common::String(argv[1]); searchString.toLowercase(); for (int i = 0; i < g_engine->_tosText->getNumEntries(); i++) { Common::String entry = g_engine->_tosText->getText(i); entry.toLowercase(); if (entry.contains(searchString)) { debugPrintf("% 3d: %s\n", i, entry.c_str()); } } return true; } void DebugConsole::printDayAndTime() { int hour = g_engine->_currentTimeInSeconds / 60 / 60 + 1; debugPrintf("Day %d at %d:%02d%s (%d seconds)\n", g_engine->_currentDay, hour % 12, (g_engine->_currentTimeInSeconds / 60) % 60, hour < 12 ? "AM" : "PM", g_engine->_currentTimeInSeconds); } } // End of namespace Darkseed