mirror of
https://github.com/scummvm/scummvm.git
synced 2025-04-02 10:52:32 -04:00
176 lines
4.6 KiB
C++
176 lines
4.6 KiB
C++
/* 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 <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#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 <item name>\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 <sound name>\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 <number>\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 <cel number>\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 <name>\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
|