aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2006-04-10 10:18:55 +0000
committerTorbjörn Andersson2006-04-10 10:18:55 +0000
commitebcee2beb64d5403f5fdb2cc49836d5b847ae780 (patch)
treef32a4609d30d92e2e3b6e3b3998c0961c2c659eb
parent4e14fd84f41c6ad196a525674e098258e890c552 (diff)
downloadscummvm-rg350-ebcee2beb64d5403f5fdb2cc49836d5b847ae780.tar.gz
scummvm-rg350-ebcee2beb64d5403f5fdb2cc49836d5b847ae780.tar.bz2
scummvm-rg350-ebcee2beb64d5403f5fdb2cc49836d5b847ae780.zip
Split the playTune opcode into Simon 1, Simon 2 and FF versions. The FF version
was wrong before, but since it is a no-op, it probably never caused any problems. svn-id: r21763
-rw-r--r--engines/simon/items.cpp85
-rw-r--r--engines/simon/simon.h4
2 files changed, 57 insertions, 32 deletions
diff --git a/engines/simon/items.cpp b/engines/simon/items.cpp
index 4c9de254c3..a26497476d 100644
--- a/engines/simon/items.cpp
+++ b/engines/simon/items.cpp
@@ -193,7 +193,7 @@ void SimonEngine::setupOpcodes() {
// 125 - 129
&SimonEngine::o_here,
&SimonEngine::o_doClassIcons,
- &SimonEngine::o_playTune,
+ NULL,
&SimonEngine::o_waitEndTune,
&SimonEngine::o_ifEndTune,
// 130 - 134
@@ -291,6 +291,7 @@ void SimonEngine::setupOpcodes() {
opcode_table[83] = &SimonEngine::o1_rescan;
opcode_table[98] = &SimonEngine::o1_animate;
opcode_table[99] = &SimonEngine::o1_stopAnimate;
+ opcode_table[127] = &SimonEngine::o1_playTune;
opcode_table[181] = &SimonEngine::o1_mouseOff;
opcode_table[182] = &SimonEngine::o1_loadBeard;
opcode_table[183] = &SimonEngine::o1_unloadBeard;
@@ -302,6 +303,7 @@ void SimonEngine::setupOpcodes() {
opcode_table[83] = &SimonEngine::o2_rescan;
opcode_table[98] = &SimonEngine::o2_animate;
opcode_table[99] = &SimonEngine::o2_stopAnimate;
+ opcode_table[127] = &SimonEngine::o2_playTune;
opcode_table[181] = &SimonEngine::o2_mouseOff;
opcode_table[188] = &SimonEngine::o2_isShortText;
opcode_table[189] = &SimonEngine::o2_clearMarks;
@@ -317,6 +319,7 @@ void SimonEngine::setupOpcodes() {
opcode_table[122] = &SimonEngine::o3_oracleTextDown;
opcode_table[123] = &SimonEngine::o3_oracleTextUp;
opcode_table[124] = &SimonEngine::o3_ifTime;
+ opcode_table[127] = &SimonEngine::o3_playTune;
opcode_table[131] = &SimonEngine::o3_setTime;
opcode_table[133] = &SimonEngine::o3_loadUserGame;
opcode_table[134] = &SimonEngine::o3_listSaveGames;
@@ -1033,36 +1036,6 @@ void SimonEngine::o_doClassIcons() {
mouseOn();
}
-void SimonEngine::o_playTune() {
- // 127: deals with music
- int music = getVarOrWord();
- int track = getVarOrWord();
-
- // Jamieson630:
- // This appears to be a "load or play music" command.
- // The music resource is specified, and optionally
- // a track as well. Normally we see two calls being
- // made, one to load the resource and another to
- // actually start a track (so the resource is
- // effectively preloaded so there's no latency when
- // starting playback).
- if (getGameType() == GType_SIMON2) {
- int loop = getVarOrByte();
-
- midi.setLoop(loop != 0);
- if (_lastMusicPlayed != music)
- _nextMusicToPlay = music;
- else
- midi.startTrack(track);
- } else {
- if (music != _lastMusicPlayed) {
- _lastMusicPlayed = music;
- loadMusic(music);
- midi.startTrack(track);
- }
- }
-}
-
void SimonEngine::o_waitEndTune() {
// 128: dummy instruction
getVarOrWord();
@@ -1622,6 +1595,27 @@ void SimonEngine::o1_stopAnimate() {
kill_sprite_simon1(getVarOrWord());
}
+void SimonEngine::o1_playTune() {
+ // 127: deals with music
+ int music = getVarOrWord();
+ int track = getVarOrWord();
+
+ // Jamieson630:
+ // This appears to be a "load or play music" command.
+ // The music resource is specified, and optionally
+ // a track as well. Normally we see two calls being
+ // made, one to load the resource and another to
+ // actually start a track (so the resource is
+ // effectively preloaded so there's no latency when
+ // starting playback).
+
+ if (music != _lastMusicPlayed) {
+ _lastMusicPlayed = music;
+ loadMusic(music);
+ midi.startTrack(track);
+ }
+}
+
void SimonEngine::o1_mouseOff() {
// 181: force mouseOff
scriptMouseOff();
@@ -1707,6 +1701,28 @@ void SimonEngine::o2_stopAnimate() {
kill_sprite_simon2(a, b);
}
+void SimonEngine::o2_playTune() {
+ // 127: deals with music
+ int music = getVarOrWord();
+ int track = getVarOrWord();
+ int loop = getVarOrByte();
+
+ // Jamieson630:
+ // This appears to be a "load or play music" command.
+ // The music resource is specified, and optionally
+ // a track as well. Normally we see two calls being
+ // made, one to load the resource and another to
+ // actually start a track (so the resource is
+ // effectively preloaded so there's no latency when
+ // starting playback).
+
+ midi.setLoop(loop != 0);
+ if (_lastMusicPlayed != music)
+ _nextMusicToPlay = music;
+ else
+ midi.startTrack(track);
+}
+
void SimonEngine::o2_mouseOff() {
// 181: force mouseOff
scriptMouseOff();
@@ -1795,6 +1811,13 @@ void SimonEngine::o3_ifTime() {
setScriptCondition(false);
}
+void SimonEngine::o3_playTune() {
+ // 127: usually deals with music, but is a no-op in FF.
+ getVarOrWord();
+ getVarOrWord();
+ getVarOrByte();
+}
+
void SimonEngine::o3_setTime() {
// 131
time(&_timeStore);
diff --git a/engines/simon/simon.h b/engines/simon/simon.h
index ce1d31cd1d..fc051f11f8 100644
--- a/engines/simon/simon.h
+++ b/engines/simon/simon.h
@@ -884,7 +884,6 @@ public:
void o_defObj();
void o_here();
void o_doClassIcons();
- void o_playTune();
void o_waitEndTune();
void o_ifEndTune();
void o_setAdjNoun();
@@ -932,6 +931,7 @@ public:
void o1_rescan();
void o1_animate();
void o1_stopAnimate();
+ void o1_playTune();
void o1_mouseOff();
void o1_loadBeard();
void o1_unloadBeard();
@@ -943,6 +943,7 @@ public:
void o2_rescan();
void o2_animate();
void o2_stopAnimate();
+ void o2_playTune();
void o2_mouseOff();
void o2_isShortText();
void o2_clearMarks();
@@ -955,6 +956,7 @@ public:
void o3_oracleTextDown();
void o3_oracleTextUp();
void o3_ifTime();
+ void o3_playTune();
void o3_setTime();
void o3_loadUserGame();
void o3_listSaveGames();