aboutsummaryrefslogtreecommitdiff
path: root/scumm/imuse_digi
diff options
context:
space:
mode:
authorPaweł Kołodziejski2004-01-12 19:15:07 +0000
committerPaweł Kołodziejski2004-01-12 19:15:07 +0000
commit0058057d4124af1a185d005bf7ad21440b95ae47 (patch)
treeb4249c5cb3493080753614c9e7314bc9d986505f /scumm/imuse_digi
parentb8e3dda84cd39f7bbd67c818acb42e7614bf7d02 (diff)
downloadscummvm-rg350-0058057d4124af1a185d005bf7ad21440b95ae47.tar.gz
scummvm-rg350-0058057d4124af1a185d005bf7ad21440b95ae47.tar.bz2
scummvm-rg350-0058057d4124af1a185d005bf7ad21440b95ae47.zip
- added delay at stopAllsounds
- changes some struct names - improved hadling FT music tables(seqence, cue point, ...) - moved some music part into seperate file - added fadeOut music for FT svn-id: r12345
Diffstat (limited to 'scumm/imuse_digi')
-rw-r--r--scumm/imuse_digi/dimuse.cpp93
-rw-r--r--scumm/imuse_digi/dimuse.h51
-rw-r--r--scumm/imuse_digi/dimuse_music.cpp140
-rw-r--r--scumm/imuse_digi/dimuse_tables.cpp577
4 files changed, 532 insertions, 329 deletions
diff --git a/scumm/imuse_digi/dimuse.cpp b/scumm/imuse_digi/dimuse.cpp
index e41e5197e8..2c1f2f10d5 100644
--- a/scumm/imuse_digi/dimuse.cpp
+++ b/scumm/imuse_digi/dimuse.cpp
@@ -33,7 +33,7 @@
namespace Scumm {
IMuseDigital::Track::Track()
- : idSound(-1), used(false), stream(NULL) {
+ : soundId(-1), used(false), stream(NULL) {
}
void IMuseDigital::timer_handler(void *refCon) {
@@ -46,12 +46,16 @@ IMuseDigital::IMuseDigital(ScummEngine *scumm)
_pause = false;
_sound = new ImuseDigiSndMgr(_vm);
_vm->_timer->installTimerProc(timer_handler, 1000000 / 25, this);
- _curMusicId = -1;
+ _curMusicState = 0;
+ _curMusicSeq = 0;
+ _curMusicCue = 0;
+
+ _curMusicSoundId = -1;
}
IMuseDigital::~IMuseDigital() {
_vm->_timer->removeTimerProc(timer_handler);
- stopAllSounds();
+ stopAllSounds(true);
delete _sound;
}
@@ -65,7 +69,7 @@ void IMuseDigital::callback() {
if (_track[l].used) {
if (_track[l].stream2) {
if (!_track[l].handle.isActive() && _track[l].started) {
- debug(5, "IMuseDigital::callback(): stoped sound: %d", _track[l].idSound);
+ debug(5, "IMuseDigital::callback(): stoped sound: %d", _track[l].soundId);
delete _track[l].stream2;
_track[l].stream2 = NULL;
_track[l].used = false;
@@ -73,7 +77,7 @@ void IMuseDigital::callback() {
}
} else if (_track[l].stream) {
if ((!_track[l].locked) && (_track[l].toBeRemoved)) {
- debug(5, "IMuseDigital::callback(): stoped sound: %d", _track[l].idSound);
+ debug(5, "IMuseDigital::callback(): stoped sound: %d", _track[l].soundId);
if (_track[l].stream)
_track[l].stream->finish();
_track[l].stream = NULL;
@@ -104,7 +108,7 @@ void IMuseDigital::callback() {
}
}
}
- debug(5, "Fade: sound(%d), Vol(%d)", _track[l].idSound, _track[l].vol / 1000);
+ debug(5, "Fade: sound(%d), Vol(%d)", _track[l].soundId, _track[l].vol / 1000);
}
int pan = (_track[l].pan != 64) ? 2 * _track[l].pan - 127 : 0;
@@ -217,11 +221,11 @@ void IMuseDigital::switchToNextRegion(int track) {
if (region != -1) {
_track[track].curRegion = region;
_track[track].curHookId = 0;
- debug(5, "switchToNextRegion-sound(%d) jump to %d region", _track[track].idSound, _track[track].curRegion);
+ debug(5, "switchToNextRegion-sound(%d) jump to %d region", _track[track].soundId, _track[track].curRegion);
}
}
- debug(5, "switchToNextRegion-sound(%d) select %d region", _track[track].idSound, _track[track].curRegion);
+ debug(5, "switchToNextRegion-sound(%d) select %d region", _track[track].soundId, _track[track].curRegion);
_track[track].regionOffset = 0;
}
@@ -237,7 +241,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
_track[l].volFadeStep = 0;
_track[l].volFadeDelay = 0;
_track[l].volFadeUsed = false;
- _track[l].idSound = soundId;
+ _track[l].soundId = soundId;
_track[l].started = false;
_track[l].soundGroup = soundGroup;
_track[l].curHookId = 0;
@@ -292,10 +296,8 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
_vm->_mixer->playInputStream(&_track[l].handle, _track[l].stream, true, _track[l].vol / 1000, _track[l].pan, -1);
}
- if (soundGroup == IMUSE_MUSIC) {
- stopMusic();
- _curMusicId = soundId;
- }
+ if ((_track[l].soundGroup == IMUSE_MUSIC) && (_vm->_gameId != GID_FT))
+ _curMusicSoundId = soundId;
_track[l].locked = false;
_track[l].used = true;
@@ -309,21 +311,20 @@ void IMuseDigital::stopMusic() {
debug(5, "IMuseDigital::stopMusic()");
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
_track[l].locked = true;
- if ((_track[l].idSound == _curMusicId) && _track[l].used) {
+ if ((_track[l].soundId == _curMusicSoundId) && _track[l].used) {
if (_track[l].stream) {
_track[l].toBeRemoved = true;
}
}
_track[l].locked = false;
}
- _curMusicId = -1;
}
void IMuseDigital::stopSound(int soundId) {
debug(5, "IMuseDigital::stopSound(%d)", soundId);
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
_track[l].locked = true;
- if ((_track[l].idSound == soundId) && _track[l].used) {
+ if ((_track[l].soundId == soundId) && _track[l].used) {
if (_track[l].stream) {
_track[l].toBeRemoved = true;
}
@@ -346,7 +347,8 @@ void IMuseDigital::stopAllSounds(bool waitForStop) {
}
_track[l].locked = false;
}
- _curMusicId = -1;
+
+ _curMusicSoundId = -1;
if (waitForStop) {
bool used;
@@ -356,6 +358,7 @@ void IMuseDigital::stopAllSounds(bool waitForStop) {
if (_track[l].used)
used = true;
}
+ g_system->delay_msecs(10);
} while (used);
}
}
@@ -376,7 +379,7 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
int sample = b;
int sub_cmd = c;
int chan = -1;
- int l, r;
+ int l;
if (!cmd)
return;
@@ -397,7 +400,7 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
debug(5, "ImuseSetParam (0x600), sample(%d), volume(%d)", sample, d);
for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
_track[l].locked = true;
- if ((_track[l].idSound == sample) && _track[l].used) {
+ if ((_track[l].soundId == sample) && _track[l].used) {
_track[l].vol = d * 1000;
// if (_track[l].volFadeUsed)
// _track[l].volFadeStep = (_track[l].volFadeDest - _track[l].vol) * 60 * 40 / (1000 * _track[chan].volFadeDelay);
@@ -413,7 +416,7 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
debug(5, "ImuseSetParam (0x700), sample(%d), pan(%d)", sample, d);
for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
_track[l].locked = true;
- if ((_track[l].idSound == sample) && _track[l].used) {
+ if ((_track[l].soundId == sample) && _track[l].used) {
_track[l].pan = d;
}
_track[l].locked = false;
@@ -438,7 +441,7 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
}
for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
_track[l].locked = true;
- if ((_track[l].idSound == sample) && _track[l].used) {
+ if ((_track[l].soundId == sample) && _track[l].used) {
_track[l].volFadeDelay = e;
_track[l].volFadeDest = d * 1000;
_track[l].volFadeStep = (_track[l].volFadeDest - _track[l].vol) * 60 * 40 / (1000 * e);
@@ -516,18 +519,7 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
}
}
} else if (_vm->_gameId == GID_FT) {
- if (b > 48)
- return;
- b--;
- debug(5, "Play imuse music: %s, %s", _ftStateMusicTable[b].name, _ftStateMusicTable[b].audioname);
- if (_ftStateMusicTable[b].audioname[0] != 0) {
- for (r = 0; r < _vm->_numAudioNames; r++) {
- if (strcmp(_ftStateMusicTable[b].audioname, &_vm->_audioNames[r * 9]) == 0) {
- startMusic(r);
- parseScriptCmds(12, r, 0x600, _ftStateMusicTable[b].volume, 0, 0, 0, 0);
- }
- }
- }
+ setFtMusicState(b);
}
break;
case 0x1001: // ImuseSetSequence
@@ -553,23 +545,14 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
}
}
} else if (_vm->_gameId == GID_FT) {
- if (b > 53)
- return;
- b--;
- debug(5, "Play imuse sequence: %s, %s", _ftSeqMusicTable[b * 4].name, _ftSeqMusicTable[b * 4].audioname);
- if (_ftSeqMusicTable[b * 4].audioname[0] != 0) {
- for (r = 0; r < _vm->_numAudioNames; r++) {
- if (strcmp(_ftStateMusicTable[b * 4].audioname, &_vm->_audioNames[r * 9]) == 0) {
- startMusic(r);
- parseScriptCmds(12, r, 0x600, _ftStateMusicTable[b * 4].volume, 0, 0, 0, 0);
- }
- }
- }
+ setFtMusicSequence(b);
}
break;
case 0x1002: // ImuseSetCuePoint
debug(5, "ImuseSetCuePoint (%d)", b);
- // TODO
+ if (_vm->_gameId == GID_FT) {
+ setFtMusicCuePoint(b);
+ }
break;
case 0x1003: // ImuseSetAttribute
debug(5, "ImuseSetAttribute (%d, %d)", b, c);
@@ -595,7 +578,7 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
int IMuseDigital::getSoundStatus(int sound) const {
debug(5, "IMuseDigital::getSoundStatus(%d)", sound);
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
- if ((_track[l].idSound == sound) && _track[l].used) {
+ if ((_track[l].soundId == sound) && _track[l].used) {
return 1;
}
}
@@ -611,7 +594,7 @@ void IMuseDigital::getLipSync(int soundId, int syncId, int32 msPos, int32 &width
if (msPos < 65536) {
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
_track[l].locked = true;
- if ((_track[l].idSound == soundId) && _track[l].used) {
+ if ((_track[l].soundId == soundId) && _track[l].used) {
_sound->getSyncSizeAndPtrById(_track[l].soundHandle, syncId, sync_size, &sync_ptr);
if ((sync_size != 0) && (sync_ptr != NULL)) {
sync_size /= 4;
@@ -640,7 +623,7 @@ void IMuseDigital::getLipSync(int soundId, int syncId, int32 msPos, int32 &width
int32 IMuseDigital::getPosInMs(int soundId) {
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
_track[l].locked = true;
- if ((_track[l].idSound == soundId) && _track[l].used) {
+ if ((_track[l].soundId == soundId) && _track[l].used) {
int32 pos = 1000 * _track[l].trackOffset / _track[l].iteration;
_track[l].locked = false;
return pos;
@@ -652,8 +635,8 @@ int32 IMuseDigital::getPosInMs(int soundId) {
}
int32 IMuseDigital::getCurMusicPosInMs() {
- debug(5, "IMuseDigital::getCurMusicPosInMs(%d)", _curMusicId);
- return getPosInMs(_curMusicId);
+ debug(5, "IMuseDigital::getCurMusicPosInMs(%d)", _curMusicSoundId);
+ return getPosInMs(_curMusicSoundId);
}
int32 IMuseDigital::getCurVoiceLipSyncWidth() {
@@ -673,18 +656,18 @@ int32 IMuseDigital::getCurVoiceLipSyncHeight() {
}
int32 IMuseDigital::getCurMusicLipSyncWidth(int syncId) {
- int32 msPos = getPosInMs(_curMusicId) + _vm->VAR(_vm->VAR_SYNC) + 50;
+ int32 msPos = getPosInMs(_curMusicSoundId) + _vm->VAR(_vm->VAR_SYNC) + 50;
int32 width = 0, height = 0;
- getLipSync(_curMusicId, syncId, msPos, width, height);
+ getLipSync(_curMusicSoundId, syncId, msPos, width, height);
return width;
}
int32 IMuseDigital::getCurMusicLipSyncHeight(int syncId) {
- int32 msPos = getPosInMs(_curMusicId) + _vm->VAR(_vm->VAR_SYNC) + 50;
+ int32 msPos = getPosInMs(_curMusicSoundId) + _vm->VAR(_vm->VAR_SYNC) + 50;
int32 width = 0, height = 0;
- getLipSync(_curMusicId, syncId, msPos, width, height);
+ getLipSync(_curMusicSoundId, syncId, msPos, width, height);
return height;
}
diff --git a/scumm/imuse_digi/dimuse.h b/scumm/imuse_digi/dimuse.h
index f1223bed7a..fb896e0429 100644
--- a/scumm/imuse_digi/dimuse.h
+++ b/scumm/imuse_digi/dimuse.h
@@ -46,7 +46,7 @@ private:
int32 volFadeDelay; //
bool volFadeUsed; //
- int idSound;
+ int soundId;
bool used;
bool toBeRemoved;
bool started;
@@ -72,13 +72,29 @@ private:
ScummEngine *_vm;
ImuseDigiSndMgr *_sound;
bool _pause;
- int _curMusicId;
+ int _curMusicState;
+ int _curMusicSeq;
+ int _curMusicCue;
+
+ int _curMusicSoundId;
static void timer_handler(void *refConf);
void callback();
void switchToNextRegion(int track);
void startSound(int soundId, const char *soundName, int soundType, int soundGroup, AudioStream *input);
+ int32 getPosInMs(int soundId);
+ void getLipSync(int soundId, int syncId, int32 msPos, int32 &width, int32 &height);
+
+ void stopMusic();
+
+ int getSoundIdByName(const char *soundName);
+ void fadeOutMusic();
+ void setFtMusicState(int stateId);
+ void setFtMusicSequence(int seqId);
+ void setFtMusicCuePoint(int cueId);
+ void playFtMusic(const char *songName, int opcode, int volume);
+
public:
IMuseDigital(ScummEngine *scumm);
~IMuseDigital();
@@ -99,15 +115,12 @@ public:
{ error("MusicEngine::startSound() Should be never called"); }
void setMasterVolume(int vol) {}
- void stopMusic();
void stopSound(int soundId);
- void stopAllSounds(bool waitForStop);
void stopAllSounds() { stopAllSounds(false); }
+ void stopAllSounds(bool waitForStop);
void pause(bool pause);
void parseScriptCmds(int a, int b, int c, int d, int e, int f, int g, int h);
int getSoundStatus(int sound) const;
- int32 getPosInMs(int soundId);
- void getLipSync(int soundId, int syncId, int32 msPos, int32 &width, int32 &height);
int32 getCurMusicPosInMs();
int32 getCurVoiceLipSyncWidth();
int32 getCurVoiceLipSyncHeight();
@@ -136,11 +149,21 @@ struct imuse_music_map {
int unk4;
};
-struct imuse_ft_music_table {
- char audioname[15];
+struct imuseFtNames {
+ char name[20];
+};
+
+struct imuseFtStateTable {
+ char audioName[9];
+ int8 opcode;
+ int8 volume;
+ char name[21];
+};
+
+struct imuseFtSeqTable {
+ char audioName[9];
int8 opcode;
int8 volume;
- char name[30];
};
#ifdef __PALM_OS__
@@ -149,16 +172,18 @@ extern const imuse_music_table *_digStateMusicTable;
extern const imuse_music_table *_comiStateMusicTable;
extern const imuse_music_table *_comiSeqMusicTable;
extern const imuse_music_table *_digSeqMusicTable;
-extern const imuse_ft_music_table *_ftStateMusicTable;
-extern const imuse_ft_music_table *_ftSeqMusicTable;
+extern const imuseFtStateTable *_ftStateMusicTable;
+extern const imuseFtSeqTable *_ftSeqMusicTable;
+extern const imuseFtNames *_ftSeqNames;
#else
extern imuse_music_map _digStateMusicMap[];
extern const imuse_music_table _digStateMusicTable[];
extern const imuse_music_table _digSeqMusicTable[];
extern const imuse_music_table _comiStateMusicTable[];
extern const imuse_music_table _comiSeqMusicTable[];
-extern const imuse_ft_music_table _ftStateMusicTable[];
-extern const imuse_ft_music_table _ftSeqMusicTable[];
+extern const imuseFtStateTable _ftStateMusicTable[];
+extern const imuseFtSeqTable _ftSeqMusicTable[];
+extern const imuseFtNames _ftSeqNames[];
#endif
} // End of namespace Scumm
diff --git a/scumm/imuse_digi/dimuse_music.cpp b/scumm/imuse_digi/dimuse_music.cpp
new file mode 100644
index 0000000000..f4e3b48a0a
--- /dev/null
+++ b/scumm/imuse_digi/dimuse_music.cpp
@@ -0,0 +1,140 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2004 The ScummVM project
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ */
+
+#include "stdafx.h"
+#include "common/scummsys.h"
+#include "scumm/scumm.h"
+#include "scumm/imuse_digi/dimuse.h"
+
+namespace Scumm {
+
+void IMuseDigital::setFtMusicState(int stateId) {
+ if (stateId > 48)
+ return;
+
+ debug(5, "State music: %s, %s", _ftStateMusicTable[stateId].name, _ftStateMusicTable[stateId].audioName);
+
+ if (_curMusicState == stateId)
+ return;
+
+ if (_curMusicSeq != 0) {
+ _curMusicState = stateId;
+ return;
+ }
+
+ if (stateId == 0)
+ playFtMusic(NULL, 0, 0);
+ else
+ playFtMusic(_ftStateMusicTable[stateId].audioName, _ftStateMusicTable[stateId].opcode, _ftStateMusicTable[stateId].volume);
+
+ _curMusicState = stateId;
+}
+
+void IMuseDigital::setFtMusicSequence(int seqId) {
+ if (seqId > 53)
+ return;
+
+ debug(5, "Sequence music: %s, %s", _ftSeqNames[seqId].name);
+
+ if (_curMusicSeq == seqId)
+ return;
+
+ if (seqId == 0) {
+ if (_curMusicState == 0)
+ playFtMusic(NULL, 0, 0);
+ else
+ playFtMusic(_ftStateMusicTable[seqId].audioName, _ftStateMusicTable[seqId].opcode, _ftStateMusicTable[seqId].volume);
+ } else {
+ int seq = (seqId - 1) * 4;
+ playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].opcode, _ftSeqMusicTable[seq].volume);
+ }
+
+ _curMusicSeq = seqId;
+ _curMusicCue = 0;
+}
+
+void IMuseDigital::setFtMusicCuePoint(int cueId) {
+ if (cueId > 3)
+ return;
+
+ debug(5, "Cue point sequence: %d", cueId);
+
+ if (_curMusicSeq == 0)
+ return;
+
+ if (_curMusicCue == cueId)
+ return;
+
+ if (cueId == 0)
+ playFtMusic(NULL, 0, 0);
+ else {
+ int seq = ((_curMusicSeq - 1) + cueId) * 4;
+ playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].opcode, _ftSeqMusicTable[seq].volume);
+ }
+
+ _curMusicCue = cueId;
+}
+
+int IMuseDigital::getSoundIdByName(const char *soundName) {
+ if (soundName && soundName[0] != 0) {
+ for (int r = 0; r < _vm->_numAudioNames; r++) {
+ if (strcmp(soundName, &_vm->_audioNames[r * 9]) == 0) {
+ return r;
+ }
+ }
+ }
+
+ return -1;
+}
+
+void IMuseDigital::fadeOutMusic() {
+ debug(5, "IMuseDigital::fadeOutMusic");
+ for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+ _track[l].locked = true;
+ if (_track[l].used) {
+ parseScriptCmds(14, _track[l].soundId, 0x600, 0, 0x200, 0, 0, 0);
+ }
+ _track[l].locked = false;
+ }
+}
+
+void IMuseDigital::playFtMusic(const char *songName, int opcode, int volume) {
+ fadeOutMusic();
+
+ switch(opcode) {
+ case 0:
+ case 4:
+ break;
+ case 1:
+ case 2:
+ case 3:
+ {
+ int soundId = getSoundIdByName(songName);
+ if (soundId != -1) {
+ startMusic(soundId);
+ parseScriptCmds(12, soundId, 0x600, volume, 0, 0, 0, 0);
+ }
+ }
+ break;
+ }
+}
+
+
+} // End of namespace Scumm
diff --git a/scumm/imuse_digi/dimuse_tables.cpp b/scumm/imuse_digi/dimuse_tables.cpp
index ea2be9e916..73b431f3bf 100644
--- a/scumm/imuse_digi/dimuse_tables.cpp
+++ b/scumm/imuse_digi/dimuse_tables.cpp
@@ -479,7 +479,7 @@ const imuse_music_table _comiSeqMusicTable[] = {
{-1, -1, 0, 0, 0, 0, "", "", ""}
};
-const imuse_ft_music_table _ftStateMusicTable[] = {
+const imuseFtStateTable _ftStateMusicTable[] = {
{"", 0, 0, "STATE_NULL" },
{"", 4, 127, "stateKstandOutside" },
{"kinside", 2, 127, "stateKstandInside" },
@@ -531,266 +531,321 @@ const imuse_ft_music_table _ftStateMusicTable[] = {
{"", 4, 0, "stateCliffHanger2" },
};
-const imuse_ft_music_table _ftSeqMusicTable[] = {
- {"", 2, 127, "SEQ_NULL" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"opening", 2, 127, "seqOpenFlick" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"barbeat", 2, 127, "seqBartender" },
- {"barwarn", 2, 127, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"benwakes", 2, 127, "seqBenWakes" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"barwarn", 2, 127, "seqPhotoScram" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"swatben", 2, 127, "seqClimbChain" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"dogattak", 2, 127, "seqDogChase" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"", 4, 0, "seqDogSquish" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"", 4, 0, "seqDogHoist" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"cops2", 2, 127, "seqCopsArrive" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"cops2", 2, 127, "seqCopsLand" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"cops2", 2, 127, "seqCopsLeave" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"", 0, 0, "seqCopterFlyby" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"bunymrch", 2, 127, "seqCopterCrash" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"", 4, 0, "seqMoGetsParts" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"", 0, 0, "seqMoFixesBike" },
- {"melcut", 2, 127, "" },
- {"tada", 2, 127, "" },
- {"", 0, 0, "" },
-
- {"", 4, 0, "seqFirstGoodbye" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"trucker", 2, 127, "seqCopRoadblock" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"cops2", 2, 127, "seqDivertCops" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"barwarn", 2, 127, "seqMurder" },
- {"murder", 2, 127, "" },
- {"murder2", 2, 127, "" },
- {"", 0, 0, "" },
-
- {"corldie", 2, 127, "seqCorleyDies" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"barwarn", 2, 127, "seqTooLateAtMoes" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"picture", 2, 127, "seqPicture" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"ripintro", 2, 127, "seqNewsReel" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"trucker", 2, 127, "seqCopsInspect" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"hosed", 2, 127, "" },
-
- {"ripdead", 2, 127, "seqHijack" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"nesranch", 2, 127, "seqNestolusAtRanch" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"scolding", 2, 127, "seqRipLimo" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"desert", 2, 127, "seqGorgeTurn" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"cavecut1", 2, 127, "seqStealRamp" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"caveamb", 2, 80, "seqCavefishTalk" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"castle", 2, 127, "seqArriveCorville" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"bunymrch", 2, 105, "seqSingleBunny" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"valkyrs", 2, 127, "seqBunnyArmy" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"melcut", 2, 127, "seqArriveAtMines" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"veltures", 2, 127, "seqArriveAtVultures" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"sorry", 2, 127, "seqMakePlan" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"makeplan", 2, 127, "seqShowPlan" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"castle", 2, 127, "seqDerbyStart" },
- {"derby", 2, 127, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"fire", 3, 127, "seqLightBales" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"saveme", 3, 127, "seqNestolusBBQ" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"scolding", 2, 127, "" },
-
- {"cops2", 2, 127, "seqCallSecurity" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"sorry", 2, 127, "seqFilmFail" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"sorry", 2, 127, "seqFilmBurn" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"caveamb", 2, 85, "seqRipSpeech" },
- {"tada", 2, 127, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"expose", 2, 127, "seqExposeRip" },
- {"", 4, 0, "" },
- {"", 0, 0, "" },
- {"mocoup", 2, 127, "" },
-
- {"ripscram", 2, 127, "seqRipEscape" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"", 2, 127, "seqRareMoment" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"valkyrs", 2, 127, "seqFanBunnies" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"ripdead", 2, 127, "seqRipDead" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
- {"", 0, 0, "" },
-
- {"funeral", 2, 127, "seqFuneral" },
- {"", 2, 127, "" },
- {"moshop", 3, 64, "" },
- {"", 0, 0, "" },
-
- {"bornbad", 2, 127, "seqCredits" },
- {"hammvox", 2, 127, "" },
- {"legavox", 2, 127, "" },
- {"chances", 2, 90, "" },
+const imuseFtNames _ftSeqNames[] = {
+ {"SEQ_NULL" },
+ {"seqLogo" },
+ {"seqOpenFlick" },
+ {"seqBartender" },
+ {"seqBenWakes" },
+ {"seqPhotoScram" },
+ {"seqClimbChain" },
+ {"seqDogChase" },
+ {"seqDogSquish" },
+ {"seqDogHoist" },
+ {"seqCopsArrive" },
+ {"seqCopsLand" },
+ {"seqCopsLeave" },
+ {"seqCopterFlyby" },
+ {"seqCopterCrash" },
+ {"seqMoGetsParts" },
+ {"seqMoFixesBike" },
+ {"seqFirstGoodbye" },
+ {"seqCopRoadblock" },
+ {"seqDivertCops" },
+ {"seqMurder" },
+ {"seqCorleyDies" },
+ {"seqTooLateAtMoes" },
+ {"seqPicture" },
+ {"seqNewsReel" },
+ {"seqCopsInspect" },
+ {"seqHijack" },
+ {"seqNestolusAtRanch" },
+ {"seqRipLimo" },
+ {"seqGorgeTurn" },
+ {"seqCavefishTalk" },
+ {"seqArriveCorville" },
+ {"seqSingleBunny" },
+ {"seqBunnyArmy" },
+ {"seqArriveAtMines" },
+ {"seqArriveAtVultures"},
+ {"seqMakePlan" },
+ {"seqShowPlan" },
+ {"seqDerbyStart" },
+ {"seqLightBales" },
+ {"seqNestolusBBQ" },
+ {"seqCallSecurity" },
+ {"seqFilmFail" },
+ {"seqFilmBurn" },
+ {"seqRipSpeech" },
+ {"seqExposeRip" },
+ {"seqRipEscape" },
+ {"seqRareMoment" },
+ {"seqFanBunnies" },
+ {"seqRipDead" },
+ {"seqFuneral" },
+ {"seqCredits" }
+};
+
+const imuseFtSeqTable _ftSeqMusicTable[] = {
+ {"", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"opening", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"barbeat", 2, 127},
+ {"barwarn", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0, },
+
+ {"benwakes", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"barwarn", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"swatben", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"dogattak", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"bunymrch", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 0, 0 },
+ {"melcut", 2, 127},
+ {"tada", 2, 127},
+ {"", 0, 0 },
+
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"trucker", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"barwarn", 2, 127},
+ {"murder", 2, 127},
+ {"murder2", 2, 127},
+ {"", 0, 0 },
+
+ {"corldie", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"barwarn", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"picture", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"ripintro", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"trucker", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"hosed", 2, 127},
+
+ {"ripdead", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"nesranch", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"scolding", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"desert", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cavecut1", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"caveamb", 2, 80 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"castle", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"bunymrch", 2, 105},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"valkyrs", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"melcut", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"veltures", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"sorry", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"makeplan", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"castle", 2, 127},
+ {"derby", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"fire", 3, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"saveme", 3, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"scolding", 2, 127},
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"sorry", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"sorry", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"caveamb", 2, 85 },
+ {"tada", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"expose", 2, 127},
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"mocoup", 2, 127},
+
+ {"ripscram", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"valkyrs", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"ripdead", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"funeral", 2, 127},
+ {"", 2, 127},
+ {"moshop", 3, 64 },
+ {"", 0, 0 },
+
+ {"bornbad", 2, 127},
+ {"hammvox", 2, 127},
+ {"legavox", 2, 127},
+ {"chances", 2, 90 },
};
#endif