aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/debugger.cpp68
-rw-r--r--scumm/debugger.h3
-rw-r--r--scumm/scumm.h3
3 files changed, 56 insertions, 18 deletions
diff --git a/scumm/debugger.cpp b/scumm/debugger.cpp
index b19aae44d4..055c8d0936 100644
--- a/scumm/debugger.cpp
+++ b/scumm/debugger.cpp
@@ -111,8 +111,7 @@ void ScummDebugger::attach(Scumm *s, char *entry) {
DCmd_Register("show", &ScummDebugger::Cmd_Show);
DCmd_Register("hide", &ScummDebugger::Cmd_Hide);
- DCmd_Register("imuse_multimidi", &ScummDebugger::Cmd_ImuseMultiMidi);
- DCmd_Register("imuse_panic", &ScummDebugger::Cmd_ImusePanic);
+ DCmd_Register("imuse", &ScummDebugger::Cmd_IMuse);
}
}
@@ -364,22 +363,61 @@ bool ScummDebugger::Cmd_Restart(int argc, const char **argv) {
return false;
}
-bool ScummDebugger::Cmd_ImuseMultiMidi (int argc, const char **argv) {
- if (argc > 1) {
- if (_s->_imuse)
- _s->_imuse->property (IMuse::PROP_MULTI_MIDI, !strcmp (argv[1], "1") || !strcmp (argv[1], "on") || !strcmp (argv[1], "true"));
- return false;
- } else {
- Debug_Printf("Use 'imuse_multimidi on|off' to switch\n");
+bool ScummDebugger::Cmd_IMuse (int argc, const char **argv) {
+ if (!_s->_imuse) {
+ Debug_Printf ("No iMuse engine is active.\n");
return true;
}
-}
-bool ScummDebugger::Cmd_ImusePanic (int argc, const char **argv) {
- Debug_Printf ("AAAIIIEEEEEE!\n");
- Debug_Printf ("Shutting down all music tracks\n");
- if (_s->_imuse)
- _s->_imuse->stop_all_sounds();
+ if (argc > 1) {
+ if (!strcmp (argv[1], "panic")) {
+ _s->_imuse->stop_all_sounds();
+ Debug_Printf ("AAAIIIEEEEEE!\n");
+ Debug_Printf ("Shutting down all music tracks\n");
+ return true;
+ } else if (!strcmp (argv[1], "multimidi")) {
+ if (argc > 2 && (!strcmp (argv[2], "on") || !strcmp (argv[2], "off"))) {
+ _s->_imuse->property (IMuse::PROP_MULTI_MIDI, !strcmp (argv[2], "on"));
+ Debug_Printf ("MultiMidi mode switched %s.\n", argv[2]);
+ } else {
+ Debug_Printf ("Specify \"on\" or \"off\" to switch.\n");
+ }
+ return true;
+ } else if (!strcmp (argv[1], "play")) {
+ if (argc > 2 && (!strcmp (argv[2], "random") || atoi (argv[2]) != 0)) {
+ int sound = atoi (argv[2]);
+ if (!strcmp (argv[2], "random")) {
+ Debug_Printf ("Selecting from %d songs...\n", _s->getNumSounds());
+ sound = _s->_rnd.getRandomNumber (_s->getNumSounds());
+ }
+ _s->ensureResourceLoaded (rtSound, sound);
+ _s->_imuse->startSound (sound);
+ Debug_Printf ("Attempted to start music %d.\n", sound);
+ } else {
+ Debug_Printf ("Specify a music resource # from 1-255.\n");
+ }
+ return true;
+ } else if (!strcmp (argv[1], "stop")) {
+ if (argc > 2 && (!strcmp (argv[2], "all") || atoi (argv[2]) != 0)) {
+ if (!strcmp (argv[2], "all")) {
+ _s->_imuse->stop_all_sounds();
+ Debug_Printf ("Shutting down all music tracks.\n");
+ } else {
+ _s->_imuse->stopSound (atoi (argv[2]));
+ Debug_Printf ("Attempted to stop music %d.\n", atoi (argv[2]));
+ }
+ } else {
+ Debug_Printf ("Specify a music resource # or \"all\".\n");
+ }
+ return true;
+ }
+ }
+
+ Debug_Printf ("Available iMuse commands:\n");
+ Debug_Printf (" panic - Stop all music tracks\n");
+ Debug_Printf (" multimidi on/off - Toggle dual MIDI drivers\n");
+ Debug_Printf (" play # - Play a music resource\n");
+ Debug_Printf (" stop # - Stop a music resource\n");
return true;
}
diff --git a/scumm/debugger.h b/scumm/debugger.h
index 834a69b19d..078db8a383 100644
--- a/scumm/debugger.h
+++ b/scumm/debugger.h
@@ -94,8 +94,7 @@ protected:
bool Cmd_Show(int argc, const char **argv);
bool Cmd_Hide(int argc, const char **argv);
- bool Cmd_ImuseMultiMidi (int argc, const char **argv);
- bool Cmd_ImusePanic (int argc, const char **argv);
+ bool Cmd_IMuse (int argc, const char **argv);
void printBox(int box);
void drawBox(int box);
diff --git a/scumm/scumm.h b/scumm/scumm.h
index c53713fc64..2d6c1c5b4d 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -407,10 +407,10 @@ protected:
protected:
byte _fastMode;
+public:
/* Random number generation */
RandomSource _rnd;
-public:
/* Core variable definitions */
byte _gameId;
@@ -453,6 +453,7 @@ protected:
public:
int _numCostumes; // FIXME - should be protected, used by Actor::remapActorPalette
+ int getNumSounds() const { return _numSounds; }
BaseCostumeRenderer* _costumeRenderer;
char *_audioNames;