/* 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 "m4/console.h" #include "m4/m4.h" #include "m4/vars.h" #include "m4/graphics/graphics.h" namespace M4 { Console::Console() : ::GUI::Debugger() { registerCmd("teleport", WRAP_METHOD(Console, cmdTeleport)); registerCmd("item", WRAP_METHOD(Console, cmdItem)); registerCmd("hyperwalk", WRAP_METHOD(Console, cmdHyperwalk)); registerCmd("digi", WRAP_METHOD(Console, cmdDigi)); registerCmd("trigger", WRAP_METHOD(Console, cmdTrigger)); registerCmd("cels", WRAP_METHOD(Console, cmdCels)); registerCmd("cel", WRAP_METHOD(Console, cmdCel)); registerCmd("interface", WRAP_METHOD(Console, cmdInterface)); registerCmd("music", WRAP_METHOD(Console, cmdMusic)); registerCmd("hotspots", WRAP_METHOD(Console, cmdHotspots)); } bool Console::cmdTeleport(int argc, const char **argv) { if (argc == 2) { _G(game).setRoom(atol(argv[1])); _G(kernel).teleported_in = true; return false; } else { debugPrintf("Currently in room %d\n", _G(game).room_id); return true; } } bool Console::cmdItem(int argc, const char **argv) { if (argc == 2) { inv_give_to_player(argv[1]); return false; } else { debugPrintf("item \n"); return true; } } bool Console::cmdHyperwalk(int argc, const char **argv) { if (argc != 2) { debugPrintf("hyperwalk [on | off]\n"); } else { _G(hyperwalk) = !strcmp(argv[1], "on"); debugPrintf("hyperwalk is now %s\n", _G(hyperwalk) ? "on" : "off"); } return true; } bool Console::cmdDigi(int argc, const char **argv) { if (argc != 2) { debugPrintf("digi \n"); return true; } else { digi_play(argv[1], 1); return false; } return true; } bool Console::cmdTrigger(int argc, const char **argv) { if (argc == 2) { kernel_trigger_dispatch_now(atol(argv[1])); return false; } else { debugPrintf("trigger \n"); return true; } } bool Console::cmdCels(int argc, const char **argv) { for (int i = 0; i < 256; ++i) { if (_GWS(globalCELSnames)[i]) { uint32 *celsPtr = (uint32 *)((intptr)*_GWS(globalCELSHandles)[i] + _GWS(globalCELSoffsets)[i]); debugPrintf("#%d - %s - count=%d, max w=%d, max h=%d\n", i, _GWS(globalCELSnames)[i], celsPtr[CELS_COUNT], celsPtr[CELS_SS_MAX_W], celsPtr[CELS_SS_MAX_H]); } } return true; } bool Console::cmdCel(int argc, const char **argv) { if (argc != 2) { debugPrintf("cel \n"); } else { int num = atol(argv[1]); if (!_GWS(globalCELSHandles)[num]) { debugPrintf("cel index not in use\n"); } else { uint32 *data = (uint32 *)((intptr)*_GWS(globalCELSHandles)[num] + _GWS(globalCELSoffsets)[num]); for (int i = 0; i < 15; i += 5) { Common::String line = Common::String::format( "%.8x %.8x %.8x %.8x %.8x", data[i], data[i + 1], data[i + 2], data[i + 3], data[i + 4] ); debugPrintf("%s\n", line.c_str()); } } } return true; } bool Console::cmdInterface(int argc, const char **argv) { if (argc < 2) { debugPrintf("interface ['show', 'hide']\n"); return true; } else { Common::String param(argv[1]); if (param == "hide" || param == "off" || param == "false") interface_hide(); else interface_show(); return false; } } bool Console::cmdMusic(int argc, const char **argv) { if (argc != 2) { debugPrintf("music \n"); midi_play("ripthem1", 255, 0, -1, 999); return true; } else { midi_play(argv[1], 255, 0, -1, 999); return false; } } bool Console::cmdHotspots(int argc, const char **argv) { for (HotSpotRec *hs = _G(currentSceneDef).hotspots; hs; hs = hs->next) { debugPrintf("vocab=%s, verb=%s, prep=%s, pos=(%d,%d,%d,%d), feet=(%d,%d)\n", hs->vocab ? hs->vocab : "", hs->verb ? hs->verb : "", hs->prep ? hs->prep : "", hs->ul_x, hs->ul_y, hs->lr_x, hs->lr_y, hs->feet_x, hs->feet_y); } return true; } } // End of namespace M4