aboutsummaryrefslogtreecommitdiff
path: root/scumm/imuse_digi
diff options
context:
space:
mode:
authorPaweł Kołodziejski2004-01-14 22:07:24 +0000
committerPaweł Kołodziejski2004-01-14 22:07:24 +0000
commit6a85ab6af5dbfbc1b3e9c3563ead53bcf4fa536e (patch)
tree496ba611de2790b5dd589428f383cf535a161080 /scumm/imuse_digi
parent89318f10fee4fd13812619a6c0f8c651bab3bbeb (diff)
downloadscummvm-rg350-6a85ab6af5dbfbc1b3e9c3563ead53bcf4fa536e.tar.gz
scummvm-rg350-6a85ab6af5dbfbc1b3e9c3563ead53bcf4fa536e.tar.bz2
scummvm-rg350-6a85ab6af5dbfbc1b3e9c3563ead53bcf4fa536e.zip
synced with local sources:
- comi music implementation(not finished), - reorganized comi tables, - some fixes for handling hookId svn-id: r12395
Diffstat (limited to 'scumm/imuse_digi')
-rw-r--r--scumm/imuse_digi/dimuse.cpp99
-rw-r--r--scumm/imuse_digi/dimuse.h78
-rw-r--r--scumm/imuse_digi/dimuse_music.cpp177
-rw-r--r--scumm/imuse_digi/dimuse_sndmgr.cpp26
-rw-r--r--scumm/imuse_digi/dimuse_sndmgr.h4
-rw-r--r--scumm/imuse_digi/dimuse_tables.cpp376
6 files changed, 471 insertions, 289 deletions
diff --git a/scumm/imuse_digi/dimuse.cpp b/scumm/imuse_digi/dimuse.cpp
index b43c26b08d..e606352f3a 100644
--- a/scumm/imuse_digi/dimuse.cpp
+++ b/scumm/imuse_digi/dimuse.cpp
@@ -46,9 +46,13 @@ IMuseDigital::IMuseDigital(ScummEngine *scumm)
_pause = false;
_sound = new ImuseDigiSndMgr(_vm);
_vm->_timer->installTimerProc(timer_handler, 1000000 / 25, this);
+
_curMusicState = 0;
_curMusicSeq = 0;
_curMusicCue = 0;
+ memset(_attributesSeq, 0, sizeof(_attributesSeq));
+ memset(_attributesState, 0, sizeof(_attributesState));
+ _curSeqAtribPos = 0;
_curMusicSoundId = -1;
}
@@ -78,10 +82,10 @@ void IMuseDigital::callback() {
} else if (_track[l].stream) {
if ((!_track[l].locked) && (_track[l].toBeRemoved)) {
debug(5, "IMuseDigital::callback(): stoped sound: %d", _track[l].soundId);
- if (_track[l].stream)
- _track[l].stream->finish();
+ _track[l].stream->finish();
_track[l].stream = NULL;
_sound->closeSound(_track[l].soundHandle);
+ _curMusicSeq = 0;
_track[l].used = false;
continue;
}
@@ -215,21 +219,21 @@ void IMuseDigital::switchToNextRegion(int track) {
return;
}
- int hookid = _sound->getJumpIdByRegionId(_track[track].soundHandle, _track[track].curRegion);
- if (hookid == _track[track].curHookId) {
- int region = _sound->getRegionIdByHookId(_track[track].soundHandle, hookid);
+ int jumpId = _sound->getJumpIdByRegionAndHookId(_track[track].soundHandle, _track[track].curRegion, _track[track].curHookId);
+ if (jumpId != -1) {
+ int region = _sound->getRegionIdByJumpId(_track[track].soundHandle, jumpId);
if (region != -1) {
_track[track].curRegion = region;
+ debug(5, "switchToNextRegion-sound(%d) jump to %d region, curHookId: %d", _track[track].soundId, _track[track].curRegion, _track[track].curHookId);
_track[track].curHookId = 0;
- 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].soundId, _track[track].curRegion);
+ debug(5, "switchToNextRegion-sound(%d) select %d region, curHookId: %d", _track[track].soundId, _track[track].curRegion, _track[track].curHookId);
_track[track].regionOffset = 0;
}
-void IMuseDigital::startSound(int soundId, const char *soundName, int soundType, int soundGroup, AudioStream *input) {
+void IMuseDigital::startSound(int soundId, const char *soundName, int soundType, int soundGroup, AudioStream *input, bool sequence, int hookId) {
debug(5, "IMuseDigital::startSound(%d)", soundId);
int l;
@@ -244,12 +248,13 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
_track[l].soundId = soundId;
_track[l].started = false;
_track[l].soundGroup = soundGroup;
- _track[l].curHookId = 0;
+ _track[l].curHookId = hookId;
_track[l].curRegion = -1;
_track[l].regionOffset = 0;
_track[l].trackOffset = 0;
_track[l].mod = 0;
_track[l].toBeRemoved = false;
+ _track[l].sequence = sequence;
int bits = 0, freq = 0, channels = 0, mixerFlags = 0;
@@ -260,7 +265,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
if (soundName == NULL)
_track[l].soundHandle = _sound->openSound(soundId, NULL, soundType, soundGroup);
else
- _track[l].soundHandle = _sound->openSound(0, soundName, soundType, soundGroup);
+ _track[l].soundHandle = _sound->openSound(soundId, soundName, soundType, soundGroup);
if (_track[l].soundHandle == NULL)
return;
@@ -296,8 +301,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 ((_track[l].soundGroup == IMUSE_MUSIC) && (_vm->_gameId != GID_FT)) {
- stopMusic();
+ if ((_track[l].soundGroup == IMUSE_MUSIC) && (_vm->_gameId != GID_FT) && !((_vm->_gameId == GID_CMI) && (_vm->_features != GF_DEMO))) {
+ fadeOutMusic(120);
_curMusicSoundId = soundId;
}
@@ -462,6 +467,16 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
break;
}
break;
+ case 15: // ImuseSetHook
+ debug(5, "ImuseSetHookId (%d, %d)", sample, c);
+ for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+ _track[l].locked = true;
+ if ((_track[l].soundId == sample) && _track[l].used) {
+ _track[l].curHookId = c;
+ }
+ _track[l].locked = false;
+ }
+ break;
case 25: // ImuseStartStream
debug(5, "ImuseStartStream (%d, %d, %d)", sample, c, d);
break;
@@ -472,10 +487,10 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
debug(5, "ImuseSetState (%d)", b);
if ((_vm->_gameId == GID_DIG) && (_vm->_features & GF_DEMO)) {
if (b == 1)
- startMusic(1);
+ startMusic(1, false);
else {
if (getSoundStatus(2) == 0)
- startMusic(2);
+ startMusic(2, false);
}
} else if (_vm->_gameId == GID_DIG) {
if (b == 1000) { // STATE_NULL
@@ -487,39 +502,27 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
int music = _digStateMusicMap[l].table_index;
debug(5, "Play imuse music: %s, %s, %s", _digStateMusicTable[music].name, _digStateMusicTable[music].title, _digStateMusicTable[music].filename);
if (_digStateMusicTable[music].filename[0] != 0) {
- startMusic(_digStateMusicTable[music].filename, _digStateMusicTable[music].id);
+ startMusic(_digStateMusicTable[music].filename, _digStateMusicTable[music].id, false, 0);
}
break;
}
}
} else if ((_vm->_gameId == GID_CMI) && (_vm->_features & GF_DEMO)) {
if (b == 2) {
- startMusic("in1.imx", 2002);
+ startMusic("in1.imx", 2002, false, 0);
} else if (b == 4) {
- startMusic("in2.imx", 2004);
+ startMusic("in2.imx", 2004, false, 0);
} else if (b == 8) {
- startMusic("out1.imx", 2008);
+ startMusic("out1.imx", 2008, false, 0);
} else if (b == 9) {
- startMusic("out2.imx", 2009);
+ startMusic("out2.imx", 2009, false, 0);
} else if (b == 16) {
- startMusic("gun.imx", 2016);
+ startMusic("gun.imx", 2016, false, 0);
} else {
warning("imuse digital: set state unknown for cmi demo: %d, room: %d", b, this->_vm->_currentRoom);
}
} else if (_vm->_gameId == GID_CMI) {
- if (b == 1000) { // STATE_NULL
- stopMusic();
- return;
- }
- for (l = 0; _comiStateMusicTable[l].id != -1; l++) {
- if ((_comiStateMusicTable[l].id == b)) {
- debug(5, "Play imuse music: %s, %s, %s", _comiStateMusicTable[l].name, _comiStateMusicTable[l].title, _comiStateMusicTable[l].filename);
- if (_comiStateMusicTable[l].filename[0] != 0) {
- startMusic(_comiStateMusicTable[l].filename, b);
- }
- break;
- }
- }
+ setComiMusicState(b);
} else if (_vm->_gameId == GID_FT) {
setFtMusicState(b);
}
@@ -531,21 +534,13 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
if (_digSeqMusicTable[l].room == b) {
debug(5, "Play imuse music: %s, %s, %s", _digSeqMusicTable[l].name, _digSeqMusicTable[l].title, _digSeqMusicTable[l].filename);
if (_digSeqMusicTable[l].filename[0] != 0) {
- startMusic(_digSeqMusicTable[l].filename, b);
+ startMusic(_digSeqMusicTable[l].filename, b, false, 0);
}
break;
}
}
} else if (_vm->_gameId == GID_CMI) {
- for (l = 0; _comiSeqMusicTable[l].id != -1; l++) {
- if (_comiSeqMusicTable[l].id == b) {
- debug(5, "Play imuse music: %s, %s, %s", _comiSeqMusicTable[l].name, _comiSeqMusicTable[l].title, _comiSeqMusicTable[l].filename);
- if (_comiSeqMusicTable[l].filename[0] != 0) {
- startMusic(_comiSeqMusicTable[l].filename, b);
- }
- break;
- }
- }
+ setComiMusicSequence(b);
} else if (_vm->_gameId == GID_FT) {
setFtMusicSequence(b);
}
@@ -558,7 +553,8 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
break;
case 0x1003: // ImuseSetAttribute
debug(5, "ImuseSetAttribute (%d, %d)", b, c);
- // TODO
+ if (_vm->_gameId == GID_DIG) {
+ }
break;
case 0x2000: // ImuseSetMasterSFXVolume
debug(5, "ImuseSetMasterSFXVolume (%d)", b);
@@ -637,11 +633,18 @@ int32 IMuseDigital::getPosInMs(int soundId) {
}
int32 IMuseDigital::getCurMusicPosInMs() {
- debug(5, "IMuseDigital::getCurMusicPosInMs(%d)", _curMusicSoundId);
+ int soundId = -1;
+
+ for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+ _track[l].locked = true;
+ if ((_track[l].used) && (_track[l].soundGroup == IMUSE_MUSIC)) {
+ soundId = _track[l].soundId;
+ }
+ _track[l].locked = false;
+ }
-// return getPosInMs(_curMusicSoundId);
-// hack for comi song scene to be completable
- return 300000;
+ debug(5, "IMuseDigital::getCurMusicPosInMs(%d)", soundId);
+ return getPosInMs(soundId);
}
int32 IMuseDigital::getCurVoiceLipSyncWidth() {
diff --git a/scumm/imuse_digi/dimuse.h b/scumm/imuse_digi/dimuse.h
index d611746799..c5a841a880 100644
--- a/scumm/imuse_digi/dimuse.h
+++ b/scumm/imuse_digi/dimuse.h
@@ -35,6 +35,8 @@ namespace Scumm {
#define MAX_DIGITAL_TRACKS 16
+struct imuseComiTable;
+
class IMuseDigital : public MusicEngine {
private:
@@ -52,6 +54,7 @@ private:
bool started;
int32 regionOffset;
int32 trackOffset;
+ bool sequence;
int curRegion;
int curHookId;
int soundGroup;
@@ -72,16 +75,21 @@ private:
ScummEngine *_vm;
ImuseDigiSndMgr *_sound;
bool _pause;
+
+ int _attributesState[97];
+ int _attributesSeq[91];
+ int _curSeqAtribPos;
+
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);
+ void startSound(int soundId, const char *soundName, int soundType, int soundGroup, AudioStream *input, bool sequence, int hookId);
int32 getPosInMs(int soundId);
void getLipSync(int soundId, int syncId, int32 msPos, int32 &width, int32 &height);
@@ -89,28 +97,32 @@ private:
void stopMusic();
int getSoundIdByName(const char *soundName);
- void fadeOutMusic();
+ void fadeOutMusic(int fadeDelay);
void setFtMusicState(int stateId);
void setFtMusicSequence(int seqId);
void setFtMusicCuePoint(int cueId);
- void playFtMusic(const char *songName, int opcode, int volume);
+ void playFtMusic(const char *songName, int opcode, int volume, bool sequence);
+
+ void setComiMusicState(int stateId);
+ void setComiMusicSequence(int seqId);
+ void playComiMusic(const char *songName, const imuseComiTable *table, int atribPos, bool sequence);
public:
IMuseDigital(ScummEngine *scumm);
virtual ~IMuseDigital();
void startVoice(int soundId, AudioStream *input)
- { debug(5, "startVoiceStream(%d)", soundId); startSound(soundId, NULL, 0, IMUSE_VOICE, input); }
+ { debug(5, "startVoiceStream(%d)", soundId); startSound(soundId, NULL, 0, IMUSE_VOICE, input, false, 0); }
void startVoice(int soundId)
- { debug(5, "startVoiceBundle(%d)", soundId); startSound(soundId, NULL, IMUSE_BUNDLE, IMUSE_VOICE, NULL); }
+ { debug(5, "startVoiceBundle(%d)", soundId); startSound(soundId, NULL, IMUSE_BUNDLE, IMUSE_VOICE, NULL, false, 0); }
void startVoice(int soundId, const char *soundName)
- { debug(5, "startVoiceBundle(%s)", soundName); startSound(soundId, soundName, IMUSE_BUNDLE, IMUSE_VOICE, NULL); }
- void startMusic(int soundId)
- { debug(5, "startMusicResource(%d)", soundId); startSound(soundId, NULL, IMUSE_RESOURCE, IMUSE_MUSIC, NULL); }
- void startMusic(const char *soundName, int soundId)
- { debug(5, "startMusicBundle(%s)", soundName); startSound(soundId, soundName, IMUSE_BUNDLE, IMUSE_MUSIC, NULL); }
+ { debug(5, "startVoiceBundle(%s)", soundName); startSound(soundId, soundName, IMUSE_BUNDLE, IMUSE_VOICE, NULL, false, 0); }
+ void startMusic(int soundId, bool sequence)
+ { debug(5, "startMusicResource(%d)", soundId); startSound(soundId, NULL, IMUSE_RESOURCE, IMUSE_MUSIC, NULL, sequence, 0); }
+ void startMusic(const char *soundName, int soundId, bool sequence, int hookId)
+ { debug(5, "startMusicBundle(%s)", soundName); startSound(soundId, soundName, IMUSE_BUNDLE, IMUSE_MUSIC, NULL, sequence, hookId); }
void startSfx(int soundId)
- { debug(5, "startSfx(%d)", soundId); startSound(soundId, NULL, IMUSE_RESOURCE, IMUSE_SFX, NULL); }
+ { debug(5, "startSfx(%d)", soundId); startSound(soundId, NULL, IMUSE_RESOURCE, IMUSE_SFX, NULL, false, 0); }
void startSound(int soundId)
{ error("MusicEngine::startSound() Should be never called"); }
@@ -128,27 +140,39 @@ public:
int32 getCurMusicLipSyncHeight(int syncId);
};
-struct imuse_music_table {
+struct imuse_music_map {
int room;
- int id;
+ int table_index;
int unk1;
int unk2;
int unk3;
int unk4;
- char name[30];
- char title[30];
- char filename[13];
};
-struct imuse_music_map {
+struct imuseDigtable {
int room;
- int table_index;
+ int id;
int unk1;
int unk2;
int unk3;
int unk4;
+ char name[30];
+ char title[30];
+ char filename[13];
};
+struct imuseComiTable {
+ char title[30];
+ int opcode;
+ int soundId;
+ char name[24];
+ int param;
+ int hookId;
+ int fadeDelay;
+ char filename[13];
+};
+
+
struct imuseFtNames {
char name[20];
};
@@ -168,19 +192,19 @@ struct imuseFtSeqTable {
#ifdef __PALM_OS__
extern imuse_music_map *_digStateMusicMap;
-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 imuseDigtable *_digStateMusicTable;
+extern const imuseDigtable *_comiStateMusicTable;
+extern const imuseComiTable *_comiSeqMusicTable;
+extern const imuseComiTable *_digSeqMusicTable;
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 imuseDigtable _digStateMusicTable[];
+extern const imuseDigtable _digSeqMusicTable[];
+extern const imuseComiTable _comiStateMusicTable[];
+extern const imuseComiTable _comiSeqMusicTable[];
extern const imuseFtStateTable _ftStateMusicTable[];
extern const imuseFtSeqTable _ftSeqMusicTable[];
extern const imuseFtNames _ftSeqNames[];
diff --git a/scumm/imuse_digi/dimuse_music.cpp b/scumm/imuse_digi/dimuse_music.cpp
index ef9ee201fe..63c6aa2458 100644
--- a/scumm/imuse_digi/dimuse_music.cpp
+++ b/scumm/imuse_digi/dimuse_music.cpp
@@ -25,6 +25,159 @@
namespace Scumm {
+void IMuseDigital::setComiMusicState(int stateId) {
+ int l, num = -1;
+
+ if (stateId == 0)
+ stateId = 1000;
+
+ for (l = 0; _comiStateMusicTable[l].soundId != -1; l++) {
+ if ((_comiStateMusicTable[l].soundId == stateId)) {
+ debug(5, "Set music state: %s, %s, %s", _comiStateMusicTable[l].name, _comiStateMusicTable[l].title, _comiStateMusicTable[l].filename);
+ num = l;
+ break;
+ }
+ }
+ assert(num != -1);
+
+ if (_curMusicState == num)
+ return;
+
+ if (_curMusicSeq == 0) {
+ if (num == 0)
+ playComiMusic(NULL, &_comiStateMusicTable[num], num, false);
+ else
+ playComiMusic(_comiStateMusicTable[num].name, &_comiStateMusicTable[num], num, false);
+ }
+
+ _curMusicState = num;
+}
+
+void IMuseDigital::setComiMusicSequence(int seqId) {
+ int l, num = -1;
+
+ if (seqId == 0)
+ seqId = 2000;
+
+ for (l = 0; _comiSeqMusicTable[l].soundId != -1; l++) {
+ if ((_comiSeqMusicTable[l].soundId == seqId)) {
+ debug(5, "Set music sequence: %s, %s, %s", _comiSeqMusicTable[l].name, _comiSeqMusicTable[l].title, _comiSeqMusicTable[l].filename);
+ num = l;
+ break;
+ }
+ }
+ assert(num != -1);
+
+ if (_curMusicSeq == num)
+ return;
+
+ if (num != 0) {
+ if (_curMusicSeq == 0) {
+ playComiMusic(_comiSeqMusicTable[num].name, &_comiSeqMusicTable[num], 0, true);
+ _curSeqAtribPos = 0;
+ _attributesSeq[num] = 1;
+ } else {
+ if ((_comiSeqMusicTable[_curMusicSeq].opcode == 4) && (_comiSeqMusicTable[_curMusicSeq].opcode == 6)) {
+ _curSeqAtribPos = num;
+ return;
+ } else if (_comiSeqMusicTable[_curMusicSeq].opcode == 6) {
+ playComiMusic(_comiSeqMusicTable[num].name, &_comiSeqMusicTable[num], 0, true);
+ _curSeqAtribPos = 0;
+ _attributesSeq[num] = 1;
+ }
+ }
+ } else {
+ if (_curSeqAtribPos != 0) {
+ playComiMusic(_comiSeqMusicTable[_curSeqAtribPos].name, &_comiSeqMusicTable[num], 0, true);
+ _attributesSeq[_curSeqAtribPos] = 1;
+ _curSeqAtribPos = 0;
+ num = _curSeqAtribPos;
+ } else {
+ if (_curMusicState != 0)
+ playComiMusic(_comiStateMusicTable[_curMusicState].name, &_comiSeqMusicTable[num], _curMusicState, false);
+ else
+ playComiMusic(NULL, &_comiStateMusicTable[num], _curMusicState, false);
+ num = 0;
+ }
+ }
+
+ _curMusicSeq = num;
+}
+
+void IMuseDigital::playComiMusic(const char *songName, const imuseComiTable *table, int atribPos, bool sequence) {
+ int hookId = 0;
+
+ if ((songName != NULL) && (atribPos != 0)) {
+ hookId = _attributesSeq[atribPos];
+ if (table->hookId != 0) {
+ if ((hookId != 0) && (table->hookId <= 1)) {
+ _attributesSeq[atribPos] = hookId + 1;
+ if (table->hookId < hookId + 1)
+ _attributesSeq[atribPos] = 1;
+ } else {
+ _attributesSeq[atribPos] = 2;
+ }
+ }
+ }
+
+ if (table->filename[0] == 0) {
+ fadeOutMusic(120);
+ return;
+ }
+
+ switch(table->opcode) {
+ case 0:
+ case 8:
+ case 9:
+ fadeOutMusic(120);
+ break;
+ case 1:
+ fadeOutMusic(120);
+ startMusic(table->filename, table->soundId, sequence, 0);
+ parseScriptCmds(12, table->soundId, 0x600, 1, 0, 0, 0, 0);
+ parseScriptCmds(14, table->soundId, 0x600, 127, 120, 0, 0, 0);
+ break;
+ case 2:
+ {
+ int fadeDelay = table->fadeDelay;
+ if (fadeDelay == 0)
+ fadeDelay = 1000;
+ fadeOutMusic(fadeDelay);
+ startMusic(table->filename, table->soundId, sequence, table->hookId);
+ }
+ break;
+ case 3:
+ if ((!sequence) && (table->param != 0)) {
+ if (table->param == _comiStateMusicTable[_curMusicState].param) {
+ int fadeDelay = table->fadeDelay;
+ if (fadeDelay == 0)
+ fadeDelay = 1000;
+ fadeOutMusic(fadeDelay);
+ startMusic(table->filename, table->soundId, sequence, 0);
+ }
+ } else {
+ int fadeDelay = table->fadeDelay;
+ if (fadeDelay == 0)
+ fadeDelay = 1000;
+ fadeOutMusic(fadeDelay);
+ startMusic(table->filename, table->soundId, sequence, table->hookId);
+ }
+ case 4:
+ fadeOutMusic(120);
+ startMusic(table->filename, table->soundId, sequence, 0);
+ break;
+ case 12:
+ {
+ int fadeDelay = table->fadeDelay;
+ if (fadeDelay == 0)
+ fadeDelay = 1000;
+ fadeOutMusic(fadeDelay);
+ startMusic(table->filename, table->soundId, sequence, table->hookId);
+ }
+ break;
+ }
+}
+
void IMuseDigital::setFtMusicState(int stateId) {
if (stateId > 48)
return;
@@ -40,9 +193,9 @@ void IMuseDigital::setFtMusicState(int stateId) {
}
if (stateId == 0)
- playFtMusic(NULL, 0, 0);
+ playFtMusic(NULL, 0, 0, false);
else
- playFtMusic(_ftStateMusicTable[stateId].audioName, _ftStateMusicTable[stateId].opcode, _ftStateMusicTable[stateId].volume);
+ playFtMusic(_ftStateMusicTable[stateId].audioName, _ftStateMusicTable[stateId].opcode, _ftStateMusicTable[stateId].volume, false);
_curMusicState = stateId;
}
@@ -58,12 +211,12 @@ void IMuseDigital::setFtMusicSequence(int seqId) {
if (seqId == 0) {
if (_curMusicState == 0)
- playFtMusic(NULL, 0, 0);
+ playFtMusic(NULL, 0, 0, true);
else
- playFtMusic(_ftStateMusicTable[seqId].audioName, _ftStateMusicTable[seqId].opcode, _ftStateMusicTable[seqId].volume);
+ playFtMusic(_ftStateMusicTable[seqId].audioName, _ftStateMusicTable[seqId].opcode, _ftStateMusicTable[seqId].volume, true);
} else {
int seq = (seqId - 1) * 4;
- playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].opcode, _ftSeqMusicTable[seq].volume);
+ playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].opcode, _ftSeqMusicTable[seq].volume, true);
}
_curMusicSeq = seqId;
@@ -83,10 +236,10 @@ void IMuseDigital::setFtMusicCuePoint(int cueId) {
return;
if (cueId == 0)
- playFtMusic(NULL, 0, 0);
+ playFtMusic(NULL, 0, 0, true);
else {
int seq = ((_curMusicSeq - 1) + cueId) * 4;
- playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].opcode, _ftSeqMusicTable[seq].volume);
+ playFtMusic(_ftSeqMusicTable[seq].audioName, _ftSeqMusicTable[seq].opcode, _ftSeqMusicTable[seq].volume, true);
}
_curMusicCue = cueId;
@@ -104,19 +257,19 @@ int IMuseDigital::getSoundIdByName(const char *soundName) {
return -1;
}
-void IMuseDigital::fadeOutMusic() {
+void IMuseDigital::fadeOutMusic(int fadeDelay) {
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, 200, 0, 0, 0);
+ parseScriptCmds(14, _track[l].soundId, 0x600, 0, fadeDelay, 0, 0, 0);
}
_track[l].locked = false;
}
}
-void IMuseDigital::playFtMusic(const char *songName, int opcode, int volume) {
- fadeOutMusic();
+void IMuseDigital::playFtMusic(const char *songName, int opcode, int volume, bool sequence) {
+ fadeOutMusic(200);
switch(opcode) {
case 0:
@@ -128,7 +281,7 @@ void IMuseDigital::playFtMusic(const char *songName, int opcode, int volume) {
{
int soundId = getSoundIdByName(songName);
if (soundId != -1) {
- startMusic(soundId);
+ startMusic(soundId, sequence);
parseScriptCmds(12, soundId, 0x600, volume, 0, 0, 0, 0);
}
}
diff --git a/scumm/imuse_digi/dimuse_sndmgr.cpp b/scumm/imuse_digi/dimuse_sndmgr.cpp
index 7704106c7f..bdc6acf4ff 100644
--- a/scumm/imuse_digi/dimuse_sndmgr.cpp
+++ b/scumm/imuse_digi/dimuse_sndmgr.cpp
@@ -93,6 +93,8 @@ void ImuseDigiSndMgr::prepareSound(byte *ptr, int slot) {
}
_sounds[slot].region[_sounds[slot].numRegions].offset = READ_BE_UINT32(ptr); ptr += 4;
_sounds[slot].region[_sounds[slot].numRegions].length = READ_BE_UINT32(ptr); ptr += 4;
+// if (_sounds[slot].soundId == 2311)
+// printf("REGN: offset: %d, length: %d\n", _sounds[slot].region[_sounds[slot].numRegions].offset, _sounds[slot].region[_sounds[slot].numRegions].length);
_sounds[slot].numRegions++;
break;
case MKID_BE('STOP'):
@@ -110,6 +112,8 @@ void ImuseDigiSndMgr::prepareSound(byte *ptr, int slot) {
_sounds[slot].jump[_sounds[slot].numJumps].dest = READ_BE_UINT32(ptr); ptr += 4;
_sounds[slot].jump[_sounds[slot].numJumps].hookId = READ_BE_UINT32(ptr); ptr += 4;
_sounds[slot].jump[_sounds[slot].numJumps].fadeDelay = READ_BE_UINT32(ptr); ptr += 4;
+// if (_sounds[slot].soundId == 2311)
+// printf("JUMP: offset: %d, dest: %d, hookId: %d\n", _sounds[slot].jump[_sounds[slot].numJumps].offset, _sounds[slot].jump[_sounds[slot].numJumps].dest, _sounds[slot].jump[_sounds[slot].numJumps].hookId);
_sounds[slot].numJumps++;
break;
case MKID_BE('SYNC'):
@@ -327,12 +331,13 @@ int ImuseDigiSndMgr::getNumMarkers(soundStruct *soundHandle) {
return soundHandle->numMarkers;
}
-int ImuseDigiSndMgr::getJumpIdByRegionId(soundStruct *soundHandle, int number) {
+int ImuseDigiSndMgr::getJumpIdByRegionAndHookId(soundStruct *soundHandle, int region, int hookId) {
assert(soundHandle && checkForProperHandle(soundHandle));
- assert(number >= 0 && number < soundHandle->numRegions);
+ assert(region >= 0 && region < soundHandle->numRegions);
for (int l = 0; l < soundHandle->numJumps; l++) {
- if (soundHandle->jump[l].offset == soundHandle->region[number].offset) {
- return l;
+ if (soundHandle->jump[l].offset == soundHandle->region[region].offset) {
+ if (soundHandle->jump[l].hookId == hookId)
+ return l;
}
}
@@ -351,15 +356,12 @@ void ImuseDigiSndMgr::getSyncSizeAndPtrById(soundStruct *soundHandle, int number
}
}
-int ImuseDigiSndMgr::getRegionIdByHookId(soundStruct *soundHandle, int number) {
+int ImuseDigiSndMgr::getRegionIdByJumpId(soundStruct *soundHandle, int jumpId) {
assert(soundHandle && checkForProperHandle(soundHandle));
- for (int l = 0; l < soundHandle->numJumps; l++) {
- if (soundHandle->jump[l].hookId == number) {
- for (int r = 0; r < soundHandle->numRegions; r++) {
- if (soundHandle->jump[l].dest == soundHandle->region[r].offset) {
- return r;
- }
- }
+ assert(jumpId >= 0 && jumpId < soundHandle->numJumps);
+ for (int l = 0; l < soundHandle->numRegions; l++) {
+ if (soundHandle->jump[jumpId].dest == soundHandle->region[l].offset) {
+ return l;
}
}
diff --git a/scumm/imuse_digi/dimuse_sndmgr.h b/scumm/imuse_digi/dimuse_sndmgr.h
index b87bf37d8e..4522b62235 100644
--- a/scumm/imuse_digi/dimuse_sndmgr.h
+++ b/scumm/imuse_digi/dimuse_sndmgr.h
@@ -124,8 +124,8 @@ public:
int getNumRegions(soundStruct *soundHandle);
int getNumJumps(soundStruct *soundHandle);
int getNumMarkers(soundStruct *soundHandle);
- int getJumpIdByRegionId(soundStruct *soundHandle, int number);
- int getRegionIdByHookId(soundStruct *soundHandle, int number);
+ int getJumpIdByRegionAndHookId(soundStruct *soundHandle, int region, int hookId);
+ int getRegionIdByJumpId(soundStruct *soundHandle, int jumpId);
int getJumpHookId(soundStruct *soundHandle, int number);
int getJumpFade(soundStruct *soundHandle, int number);
char *getMarker(soundStruct *soundHandle, int number);
diff --git a/scumm/imuse_digi/dimuse_tables.cpp b/scumm/imuse_digi/dimuse_tables.cpp
index 73b431f3bf..95aaa44872 100644
--- a/scumm/imuse_digi/dimuse_tables.cpp
+++ b/scumm/imuse_digi/dimuse_tables.cpp
@@ -150,7 +150,7 @@ imuse_music_map _digStateMusicMap[] = {
{-1, 1, 0, 0, 0, 0 }
};
-const imuse_music_table _digStateMusicTable[] = {
+const imuseDigtable _digStateMusicTable[] = {
{0, 1000, 0, 0, 0, 0, "STATE_NULL", "", ""},
{1, 1001, 0, 0, 0, 0, "stateNoChange", "", ""},
{2, 1100, 0, 3, 2, 0, "stateAstShip", "Asteroid (amb-ship)", "ASTERO~1.IMU"},
@@ -218,7 +218,7 @@ const imuse_music_table _digStateMusicTable[] = {
{-1, -1, 0, 0, 0, 0, "", "", ""}
};
-const imuse_music_table _digSeqMusicTable[] = {
+const imuseDigtable _digSeqMusicTable[] = {
{0, 2000, 0, 0, 0, 0, "SEQ_NULL", "", "" },
{0, 2005, 0, 0, 0, 0, "seqLogo", "", "" },
{0, 2010, 0, 0, 0, 0, "seqIntro", "", "" },
@@ -289,194 +289,194 @@ const imuse_music_table _digSeqMusicTable[] = {
{-1, -1, 0, 0, 0, 0, "", "", "" }
};
-const imuse_music_table _comiStateMusicTable[] = {
- {0, 1000, 0, 0, 0, 0, "STATE_NULL", "", ""},
- {0, 1001, 0, 0, 0, 0, "stateNoChange", "", ""},
- {0, 1098, 0, 3, 0, 0, "stateCredits1", "1098-Credits1", "1098-C~1.IMX"},
- {0, 1099, 0, 3, 0, 0, "stateMenu", "1099-Menu", "1099-M~1.IMX"},
- {0, 1100, 0, 3, 0, 0, "stateHold1", "1100-Hold1", "1100-H~1.IMX"},
- {0, 1101, 0, 3, 1, 0, "stateWaterline1", "1101-Waterline1", "1101-W~1.IMX"},
- {0, 1102, 0, 3, 0, 0, "stateHold2", "1102-Hold2", "1102-H~1.IMX"},
- {0, 1103, 0, 3, 0, 0, "stateWaterline2", "1103-Waterline2", "1103-W~1.IMX"},
- {0, 1104, 0, 3, 0, 0, "stateCannon", "1104-Cannon", "1104-C~1.IMX"},
- {0, 1105, 0, 3, 0, 0, "stateTreasure", "1105-Treasure", "1105-T~1.IMX"},
- {0, 1200, 0, 3, 1, 0, "stateFortBase", "1200-Fort Base", "1200-F~1.IMX"},
- {0, 1201, 0, 3, 1, 0, "statePreFort", "1201-Pre-Fort", "1201-P~1.IMX"},
- {0, 1202, 0, 3, 0, 0, "statePreVooOut", "1202-PreVoo Out", "1202-P~1.IMX"},
- {0, 1203, 0, 3, 0, 0, "statePreVooIn", "1203-PreVoo In", "1203-P~1.IMX"},
- {0, 1204, 0, 3, 0, 0, "statePreVooLad", "1204-PreVoo Lady", "1204-P~1.IMX"},
- {0, 1205, 0, 3, 0, 0, "stateVoodooOut", "1205-Voodoo Out", "1205-V~1.IMX"},
- {0, 1210, 0, 3, 0, 0, "stateVoodooIn", "1210-Voodoo In", "1210-V~1.IMX"},
- {0, 1212, 0,12, 1, 0, "stateVoodooInAlt", "1210-Voodoo In", "1210-V~1.IMX"},
- {0, 1215, 0, 3, 0, 0, "stateVoodooLady", "1215-Voodoo Lady", "1215-V~1.IMX"},
- {0, 1219, 0, 3, 0, 0, "statePrePlundermap", "1219-Pre-Map", "1219-P~1.IMX"},
- {0, 1220, 0, 3, 0, 0, "statePlundermap", "1220-Plunder Map", "1220-P~1.IMX"},
- {0, 1222, 0, 3, 0, 0, "statePreCabana", "1222-Pre-Cabana", "1222-P~1.IMX"},
- {0, 1223, 0, 3, 0, 0, "stateCabana", "1223-Cabana", "1223-C~1.IMX"},
- {0, 1224, 0, 3, 0, 0, "statePostCabana", "1224-Post-Cabana", "1224-P~1.IMX"},
- {0, 1225, 0, 3, 0, 0, "stateBeachClub", "1225-Beach Club", "1225-B~1.IMX"},
- {0, 1230, 0, 3, 0, 0, "stateCliff", "1230-Cliff", "1230-C~1.IMX"},
- {0, 1232, 0, 3, 0,800, "stateBelly", "1232-Belly", "1232-B~1.IMX"},
- {0, 1235, 0, 3, 0, 0, "stateQuicksand", "1235-Quicksand", "1235-Q~1.IMX"},
- {0, 1240, 0, 3, 0,800, "stateDangerBeach", "1240-Danger Beach", "1240-D~1.IMX"},
- {0, 1241, 0,12, 2,800, "stateDangerBeachAlt","1240-Danger Beach", "1240-D~1.IMX"},
- {0, 1245, 0, 3, 0, 0, "stateRowBoat", "1245-Row Boat", "1245-R~1.IMX"},
- {0, 1247, 0, 3, 0,800, "stateAlongside", "1247-Alongside", "1247-A~1.IMX"},
- {0, 1248, 0,12, 1,800, "stateAlongsideAlt", "1247-Alongside", "1247-A~1.IMX"},
- {0, 1250, 0, 3, 0,500, "stateChimpBoat", "1250-Chimp Boat", "1250-C~1.IMX"},
- {0, 1255, 0, 3, 0,800, "stateMrFossey", "1255-Mr Fossey", "1255-M~1.IMX"},
- {0, 1259, 0, 3, 0, 0, "statePreTown", "1259-Pre-Town", "1259-P~1.IMX"},
- {0, 1260, 0, 3, 0, 0, "stateTown", "1260-Town", "1260-T~1.IMX"},
- {0, 1264, 0, 3, 0, 0, "statePreMeadow", "1264-Pre-Meadow", "1264-P~1.IMX"},
- {0, 1265, 0, 3, 0, 0, "stateMeadow", "1265-Meadow", "1265-M~1.IMX"},
- {0, 1266, 0, 3, 0, 0, "stateMeadowAmb", "1266-Meadow Amb", "1266-M~1.IMX"},
- {0, 1270, 0, 3, 0, 0, "stateWardrobePre", "1270-Wardrobe-Pre", "1270-W~1.IMX"},
- {0, 1272, 0, 3, 0, 0, "statePreShow", "1272-Pre-Show", "1272-P~1.IMX"},
- {0, 1274, 0, 3, 0, 0, "stateWardrobeShow", "1274-Wardrobe-Show", "1274-W~1.IMX"},
- {0, 1276, 0, 3, 0, 0, "stateShow", "1276-Show", "1276-S~1.IMX"},
- {0, 1277, 0, 3, 0, 0, "stateWardrobeJug", "1277-Wardrobe-Jug", "1277-W~1.IMX"},
- {0, 1278, 0, 3, 0, 0, "stateJuggling", "1278-Juggling", "1278-J~1.IMX"},
- {0, 1279, 0, 3, 0, 0, "statePostShow", "1279-Post-Show", "1279-P~1.IMX"},
- {0, 1280, 0, 3, 0, 0, "stateChickenShop", "1280-Chicken Shop", "1280-C~1.IMX"},
- {0, 1285, 0, 3, 0, 0, "stateBarberShop", "1285-Barber Shop", "1285-B~1.IMX"},
- {0, 1286, 0, 3, 0, 0, "stateVanHelgen", "1286-Van Helgen", "1286-V~1.IMX"},
- {0, 1287, 0, 3, 0, 0, "stateBill", "1287-Bill", "1287-B~1.IMX"},
- {0, 1288, 0, 3, 0, 0, "stateHaggis", "1288-Haggis", "1288-H~1.IMX"},
- {0, 1289, 0, 3, 0, 0, "stateRottingham", "1289-Rottingham", "1289-R~1.IMX"},
- {0, 1305, 0, 3, 0, 0, "stateDeck", "1305-Deck", "1305-D~1.IMX"},
- {0, 1310, 0, 3, 0, 0, "stateCombatMap", "1310-Combat Map", "1310-C~1.IMX"},
- {0, 1320, 0, 3, 0, 0, "stateShipCombat", "1320-Ship Combat", "1320-S~1.IMX"},
- {0, 1325, 0, 3, 0, 0, "stateSwordfight", "1325-Swordfight", "1325-S~1.IMX"},
- {0, 1327, 0, 3, 0, 0, "stateSwordRott", "1327-Sword Rott", "1327-S~1.IMX"},
- {0, 1330, 0, 3, 0, 0, "stateTownEdge", "1330-Town Edge", "1330-T~1.IMX"},
- {0, 1335, 0, 3, 0, 0, "stateSwordLose", "1335-Sword Lose", "1335-S~1.IMX"},
- {0, 1340, 0, 3, 0, 0, "stateSwordWin", "1340-Sword Win", "1340-S~1.IMX"},
- {0, 1345, 0, 3, 0, 0, "stateGetMap", "1345-Get Map", "1345-G~1.IMX"},
- {0, 1400, 0, 3, 0, 0, "stateWreckBeach", "1400-Wreck Beach", "1400-W~1.IMX"},
- {0, 1405, 0, 3, 0, 0, "stateBloodMap", "1405-Blood Map", "1405-B~1.IMX"},
- {0, 1410, 0, 3, 0, 0, "stateClearing", "1410-Clearing", "1410-C~1.IMX"},
- {0, 1415, 0, 3, 0, 0, "stateLighthouse", "1415-Lighthouse", "1415-L~1.IMX"},
- {0, 1420, 0, 3, 0, 0, "stateVillage", "1420-Village", "1420-V~1.IMX"},
- {0, 1423, 0, 3, 0, 0, "stateVolcano", "1423-Volcano", "1423-V~1.IMX"},
- {0, 1425, 0, 3, 0, 0, "stateAltar", "1425-Altar", "1425-A~1.IMX"},
- {0, 1430, 0, 3, 0, 0, "stateHotelOut", "1430-Hotel Out", "1430-H~1.IMX"},
- {0, 1435, 0, 3, 0, 0, "stateHotelBar", "1435-Hotel Bar", "1435-H~1.IMX"},
- {0, 1440, 0, 3, 0, 0, "stateHotelIn", "1440-Hotel In", "1440-H~1.IMX"},
- {0, 1445, 0, 3, 0, 0, "stateTarotLady", "1445-Tarot Lady", "1445-T~1.IMX"},
- {0, 1447, 0, 3, 0, 0, "stateGoodsoup", "1447-Goodsoup", "1447-G~1.IMX"},
- {0, 1448, 0, 3, 0, 0, "stateGuestRoom", "1448-Guest Room", "1448-G~1.IMX"},
- {0, 1450, 0, 3, 0, 0, "stateWindmill", "1450-Windmill", "1450-W~1.IMX"},
- {0, 1455, 0, 3, 0, 0, "stateCemetary", "1455-Cemetary", "1455-C~1.IMX"},
- {0, 1460, 0, 3, 0, 0, "stateCrypt", "1460-Crypt", "1460-C~1.IMX"},
- {0, 1463, 0, 3, 0, 0, "stateGraveDigger", "1463-Gravedigger", "1463-G~1.IMX"},
- {0, 1465, 0, 3, 0, 0, "stateMonkey1", "1465-Monkey1", "1465-M~1.IMX"},
- {0, 1475, 0, 3, 0, 0, "stateStanDark", "1475-Stan Dark", "1475-S~1.IMX"},
- {0, 1477, 0, 3, 0, 0, "stateStanLight", "1477-Stan", "1477-S~1.IMX"},
- {0, 1480, 0, 3, 0, 0, "stateEggBeach", "1480-Egg Beach", "1480-E~1.IMX"},
- {0, 1485, 0, 3, 0, 0, "stateSkullIsland", "1485-Skull Island", "1485-S~1.IMX"},
- {0, 1490, 0, 3, 0, 0, "stateSmugglersCave", "1490-Smugglers", "1490-S~1.IMX"},
- {0, 1500, 0, 3, 0, 0, "stateLeChuckTalk", "1500-Le Talk", "1500-L~1.IMX"},
- {0, 1505, 0, 3, 0, 0, "stateCarnival", "1505-Carnival", "1505-C~1.IMX"},
- {0, 1511, 0, 3, 0, 0, "stateHang", "1511-Hang", "1511-H~1.IMX"},
- {0, 1512, 0, 3, 0, 0, "stateRum", "1512-Rum", "1512-RUM.IMX"},
- {0, 1513, 0, 3, 0, 0, "stateTorture", "1513-Torture", "1513-T~1.IMX"},
- {0, 1514, 0, 3, 0, 0, "stateSnow", "1514-Snow", "1514-S~1.IMX"},
- {0, 1515, 0, 3, 0, 0, "stateCredits", "1515-Credits (end)", "1515-C~1.IMX"},
- {0, 1520, 0, 3, 0, 0, "stateCarnAmb", "1520-Carn Amb", "1520-C~1.IMX"},
- {-1, -1, 0, 0, 0, 0, "", "", ""}
+const imuseComiTable _comiStateMusicTable[] = {
+ {"", 0, 1000, "STATE_NULL", 0, 0, 0, ""},
+ {"", 0, 1001, "stateNoChange", 0, 0, 0, ""},
+ {"1098-Credits1", 3, 1098, "stateCredits1", 0, 0, 0, "1098-C~1.IMX"},
+ {"1099-Menu", 3, 1099, "stateMenu", 0, 0, 0, "1099-M~1.IMX"},
+ {"1100-Hold1", 3, 1100, "stateHold1", 4, 0, 0, "1100-H~1.IMX"},
+ {"1101-Waterline1", 3, 1101, "stateWaterline1", 4, 0, 0, "1101-W~1.IMX"},
+ {"1102-Hold2", 3, 1102, "stateHold2", 6, 1, 0, "1102-H~1.IMX"},
+ {"1103-Waterline2", 3, 1103, "stateWaterline2", 6, 0, 0, "1103-W~1.IMX"},
+ {"1104-Cannon", 3, 1104, "stateCannon", 0, 0, 0, "1104-C~1.IMX"},
+ {"1105-Treasure", 3, 1105, "stateTreasure", 0, 0, 0, "1105-T~1.IMX"},
+ {"1200-Fort Base", 3, 1200, "stateFortBase", 10, 1, 0, "1200-F~1.IMX"},
+ {"1201-Pre-Fort", 3, 1201, "statePreFort", 10, 1, 0, "1201-P~1.IMX"},
+ {"1202-PreVoo Out", 3, 1202, "statePreVooOut", 12, 0, 0, "1202-P~1.IMX"},
+ {"1203-PreVoo In", 3, 1203, "statePreVooIn", 12, 0, 0, "1203-P~1.IMX"},
+ {"1204-PreVoo Lady", 3, 1204, "statePreVooLady", 12, 0, 0, "1204-P~1.IMX"},
+ {"1205-Voodoo Out", 3, 1205, "stateVoodooOut", 0, 0, 0, "1205-V~1.IMX"},
+ {"1210-Voodoo In", 3, 1210, "stateVoodooIn", 0, 0, 0, "1210-V~1.IMX"},
+ {"1210-Voodoo In", 12, 1212, "stateVoodooInAlt", 0, 1,700,"1210-V~1.IMX"},
+ {"1215-Voodoo Lady", 3, 1215, "stateVoodooLady", 0, 0, 0, "1215-V~1.IMX"},
+ {"1219-Pre-Map", 3, 1219, "statePrePlundermap", 0, 0, 0, "1219-P~1.IMX"},
+ {"1220-Plunder Map", 3, 1220, "statePlundermap", 0, 0, 0, "1220-P~1.IMX"},
+ {"1222-Pre-Cabana", 3, 1222, "statePreCabana", 0, 0, 0, "1222-P~1.IMX"},
+ {"1223-Cabana", 3, 1223, "stateCabana", 0, 0, 0, "1223-C~1.IMX"},
+ {"1224-Post-Cabana", 3, 1224, "statePostCabana", 23, 0, 0, "1224-P~1.IMX"},
+ {"1225-Beach Club", 3, 1225, "stateBeachClub", 23, 0, 0, "1225-B~1.IMX"},
+ {"1230-Cliff", 3, 1230, "stateCliff", 0, 0, 0, "1230-C~1.IMX"},
+ {"1232-Belly", 3, 1232, "stateBelly", 0, 0,800,"1232-B~1.IMX"},
+ {"1235-Quicksand", 3, 1235, "stateQuicksand", 0, 0, 0, "1235-Q~1.IMX"},
+ {"1240-Danger Beach", 3, 1240, "stateDangerBeach", 0, 0,800,"1240-D~1.IMX"},
+ {"1240-Danger Beach", 12, 1241, "stateDangerBeachAlt",0, 2,800,"1240-D~1.IMX"},
+ {"1245-Row Boat", 3, 1245, "stateRowBoat", 0, 0, 0, "1245-R~1.IMX"},
+ {"1247-Alongside", 3, 1247, "stateAlongside", 0, 0,800,"1247-A~1.IMX"},
+ {"1247-Alongside", 12, 1248, "stateAlongsideAlt", 0, 1,800,"1247-A~1.IMX"},
+ {"1250-Chimp Boat", 3, 1250, "stateChimpBoat", 0, 0,500,"1250-C~1.IMX"},
+ {"1255-Mr Fossey", 3, 1255, "stateMrFossey", 0, 0,800,"1255-M~1.IMX"},
+ {"1259-Pre-Town", 3, 1259, "statePreTown", 0, 0, 0, "1259-P~1.IMX"},
+ {"1260-Town", 3, 1260, "stateTown", 0, 0, 0, "1260-T~1.IMX"},
+ {"1264-Pre-Meadow", 3, 1264, "statePreMeadow", 0, 0, 0, "1264-P~1.IMX"},
+ {"1265-Meadow", 3, 1265, "stateMeadow", 0, 0, 0, "1265-M~1.IMX"},
+ {"1266-Meadow Amb", 3, 1266, "stateMeadowAmb", 0, 0, 0, "1266-M~1.IMX"},
+ {"1270-Wardrobe-Pre", 3, 1270, "stateWardrobePre", 40, 0, 0, "1270-W~1.IMX"},
+ {"1272-Pre-Show", 3, 1272, "statePreShow", 40, 0, 0, "1272-P~1.IMX"},
+ {"1274-Wardrobe-Show", 3, 1274, "stateWardrobeShow", 42, 0, 0, "1274-W~1.IMX"},
+ {"1276-Show", 3, 1276, "stateShow", 42, 0, 0, "1276-S~1.IMX"},
+ {"1277-Wardrobe-Jug", 3, 1277, "stateWardrobeJug", 44, 0, 0, "1277-W~1.IMX"},
+ {"1278-Juggling", 3, 1278, "stateJuggling", 44, 0, 0, "1278-J~1.IMX"},
+ {"1279-Post-Show", 3, 1279, "statePostShow", 0, 0, 0, "1279-P~1.IMX"},
+ {"1280-Chicken Shop", 3, 1280, "stateChickenShop", 0, 0, 0, "1280-C~1.IMX"},
+ {"1285-Barber Shop", 3, 1285, "stateBarberShop", 48, 0, 0, "1285-B~1.IMX"},
+ {"1286-Van Helgen", 3, 1286, "stateVanHelgen", 48, 0, 0, "1286-V~1.IMX"},
+ {"1287-Bill", 3, 1287, "stateBill", 48, 0, 0, "1287-B~1.IMX"},
+ {"1288-Haggis", 3, 1288, "stateHaggis", 48, 0, 0, "1288-H~1.IMX"},
+ {"1289-Rottingham", 3, 1289, "stateRottingham", 48, 0, 0, "1289-R~1.IMX"},
+ {"1305-Deck", 3, 1305, "stateDeck", 0, 0, 0, "1305-D~1.IMX"},
+ {"1310-Combat Map", 3, 1310, "stateCombatMap", 0, 0, 0, "1310-C~1.IMX"},
+ {"1320-Ship Combat", 3, 1320, "stateShipCombat", 0, 0, 0, "1320-S~1.IMX"},
+ {"1325-Swordfight", 3, 1325, "stateSwordfight", 0, 0, 0, "1325-S~1.IMX"},
+ {"1327-Sword Rott", 3, 1327, "stateSwordRott", 0, 0, 0, "1327-S~1.IMX"},
+ {"1330-Town Edge", 3, 1330, "stateTownEdge", 0, 0, 0, "1330-T~1.IMX"},
+ {"1335-Sword Lose", 3, 1335, "stateSwordLose", 0, 0, 0, "1335-S~1.IMX"},
+ {"1340-Sword Win", 3, 1340, "stateSwordWin", 0, 0, 0, "1340-S~1.IMX"},
+ {"1345-Get Map", 3, 1345, "stateGetMap", 0, 0, 0, "1345-G~1.IMX"},
+ {"1400-Wreck Beach", 3, 1400, "stateWreckBeach", 0, 0, 0, "1400-W~1.IMX"},
+ {"1405-Blood Map", 3, 1405, "stateBloodMap", 63, 0, 0, "1405-B~1.IMX"},
+ {"1410-Clearing", 3, 1410, "stateClearing", 0, 0, 0, "1410-C~1.IMX"},
+ {"1415-Lighthouse", 3, 1415, "stateLighthouse", 63, 0, 0, "1415-L~1.IMX"},
+ {"1420-Village", 3, 1420, "stateVillage", 66, 0, 0, "1420-V~1.IMX"},
+ {"1423-Volcano", 3, 1423, "stateVolcano", 66, 0, 0, "1423-V~1.IMX"},
+ {"1425-Altar", 3, 1425, "stateAltar", 66, 0, 0, "1425-A~1.IMX"},
+ {"1430-Hotel Out", 3, 1430, "stateHotelOut", 0, 0, 0, "1430-H~1.IMX"},
+ {"1435-Hotel Bar", 3, 1435, "stateHotelBar", 70, 0, 0, "1435-H~1.IMX"},
+ {"1440-Hotel In", 3, 1440, "stateHotelIn", 70, 0, 0, "1440-H~1.IMX"},
+ {"1445-Tarot Lady", 3, 1445, "stateTarotLady", 70, 0, 0, "1445-T~1.IMX"},
+ {"1447-Goodsoup", 3, 1447, "stateGoodsoup", 70, 0, 0, "1447-G~1.IMX"},
+ {"1448-Guest Room", 3, 1448, "stateGuestRoom", 0, 0, 0, "1448-G~1.IMX"},
+ {"1450-Windmill", 3, 1450, "stateWindmill", 63, 0, 0, "1450-W~1.IMX"},
+ {"1455-Cemetary", 3, 1455, "stateCemetary", 0, 0, 0, "1455-C~1.IMX"},
+ {"1460-Crypt", 3, 1460, "stateCrypt", 77, 0, 0, "1460-C~1.IMX"},
+ {"1463-Gravedigger", 3, 1463, "stateGraveDigger", 77, 0, 0, "1463-G~1.IMX"},
+ {"1465-Monkey1", 3, 1465, "stateMonkey1", 0, 0, 0, "1465-M~1.IMX"},
+ {"1475-Stan Dark", 3, 1475, "stateStanDark", 0, 0, 0, "1475-S~1.IMX"},
+ {"1477-Stan", 3, 1477, "stateStanLight", 0, 0, 0, "1477-S~1.IMX"},
+ {"1480-Egg Beach", 3, 1480, "stateEggBeach", 63, 0, 0, "1480-E~1.IMX"},
+ {"1485-Skull Island", 3, 1485, "stateSkullIsland", 0, 0, 0, "1485-S~1.IMX"},
+ {"1490-Smugglers", 3, 1490, "stateSmugglersCave", 0, 0, 0, "1490-S~1.IMX"},
+ {"1500-Le Talk", 3, 1500, "stateLeChuckTalk", 0, 0, 0, "1500-L~1.IMX"},
+ {"1505-Carnival", 3, 1505, "stateCarnival", 0, 0, 0, "1505-C~1.IMX"},
+ {"1511-Hang", 3, 1511, "stateHang", 87, 0, 0, "1511-H~1.IMX"},
+ {"1512-Rum", 3, 1512, "stateRum", 87, 0, 0, "1512-RUM.IMX"},
+ {"1513-Torture", 3, 1513, "stateTorture", 87, 0, 0, "1513-T~1.IMX"},
+ {"1514-Snow", 3, 1514, "stateSnow", 87, 0, 0, "1514-S~1.IMX"},
+ {"1515-Credits (end)", 3, 1515, "stateCredits", 0, 0, 0, "1515-C~1.IMX"},
+ {"1520-Carn Amb", 3, 1520, "stateCarnAmb", 0, 0, 0, "1520-C~1.IMX"},
+ {"", 0, -1, "", 0, 0, 0, ""}
};
-const imuse_music_table _comiSeqMusicTable[] = {
- {0, 2000, 0, 0, 0, 0, "SEQ_NULL", "", ""},
- {0, 2100, 0, 0, 0, 0, "seqINTRO", "", ""},
- {0, 2105, 0, 3, 0, 0, "seqInterlude1", "2105-Interlude1", "2105-I~1.IMX"},
- {0, 2110, 0, 8, 1, 0, "seqLastBoat", "", ""},
- {0, 2115, 0, 0, 0, 0, "seqSINK_SHIP", "", ""},
- {0, 2120, 0, 0, 0, 0, "seqCURSED_RING", "", ""},
- {0, 2200, 0, 3, 0, 0, "seqInterlude2", "2200-Interlude2", "2200-I~1.IMX"},
- {0, 2210, 0, 3, 0, 0, "seqKidnapped", "2210-Kidnapped", "2210-K~1.IMX"},
- {0, 2220, 0, 8, 1, 0, "seqSnakeVomits", "", ""},
- {0, 2222, 0, 8, 1, 0, "seqPopBalloon", "", ""},
- {0, 2225, 0, 3, 0, 0, "seqDropBalls", "2225-Drop Balls", "2225-D~1.IMX"},
- {0, 2232, 0, 4, 0, 0, "seqArriveBarber", "2232-Arrive Barber", "2232-A~1.IMX"},
- {0, 2233, 0, 3, 0, 0, "seqAtonal", "2233-Atonal", "2233-A~1.IMX"},
- {0, 2235, 0, 3, 0, 0, "seqShaveHead1", "2235-Shave Head", "2235-S~1.IMX"},
- {0, 2236, 0, 2, 2, 0, "seqShaveHead2", "2235-Shave Head", "2235-S~1.IMX"},
- {0, 2245, 0, 3, 0, 0, "seqCaberLose", "2245-Caber Lose", "2245-C~1.IMX"},
- {0, 2250, 0, 3, 0, 0, "seqCaberWin", "2250-Caber Win", "2250-C~1.IMX"},
- {0, 2255, 0, 3, 0, 0, "seqDuel1", "2255-Duel", "2255-D~1.IMX"},
- {0, 2256, 0, 2, 2, 0, "seqDuel2", "2255-Duel", "2255-D~1.IMX"},
- {0, 2257, 0, 2, 3, 0, "seqDuel3", "2255-Duel", "2255-D~1.IMX"},
- {0, 2260, 0, 3, 0, 0, "seqBlowUpTree1", "2260-Blow Up Tree", "2260-B~1.IMX"},
- {0, 2261, 0, 2, 2, 0, "seqBlowUpTree2", "2260-Blow Up Tree", "2260-B~1.IMX"},
- {0, 2275, 0, 3, 0, 0, "seqMonkeys", "2275-Monkeys", "2275-M~1.IMX"},
- {0, 2277, 0, 9, 1, 0, "seqAttack", "", ""},
- {0, 2285, 0, 3, 0, 0, "seqSharks", "2285-Sharks", "2285-S~1.IMX"},
- {0, 2287, 0, 3, 0, 0, "seqTowelWalk", "2287-Towel Walk", "2287-T~1.IMX"},
- {0, 2293, 0, 0, 0, 0, "seqNICE_BOOTS", "", ""},
- {0, 2295, 0, 0, 0, 0, "seqBIG_BONED", "", ""},
- {0, 2300, 0, 3, 0, 0, "seqToBlood", "2300-To Blood", "2300-T~1.IMX"},
- {0, 2301, 0, 3, 0, 0, "seqInterlude3", "2301-Interlude3", "2301-I~1.IMX"},
- {0, 2302, 0, 3, 0, 0, "seqRott1", "2302-Rott Attack", "2302-R~1.IMX"},
- {0, 2304, 0, 2, 2, 0, "seqRott2", "2302-Rott Attack", "2302-R~1.IMX"},
- {0, 2305, 0, 2,21, 0, "seqRott2b", "2302-Rott Attack", "2302-R~1.IMX"},
- {0, 2306, 0, 2, 3, 0, "seqRott3", "2302-Rott Attack", "2302-R~1.IMX"},
- {0, 2308, 0, 2, 4, 0, "seqRott4", "2302-Rott Attack", "2302-R~1.IMX"},
- {0, 2309, 0, 2, 5, 0, "seqRott5", "2302-Rott Attack", "2302-R~1.IMX"},
- {0, 2311, 0, 3, 0, 0, "seqVerse1", "2311-Song", "2311-S~1.IMX"},
- {0, 2312, 0, 2, 2, 0, "seqVerse2", "2311-Song", "2311-S~1.IMX"},
- {0, 2313, 0, 2, 3, 0, "seqVerse3", "2311-Song", "2311-S~1.IMX"},
- {0, 2314, 0, 2, 4, 0, "seqVerse4", "2311-Song", "2311-S~1.IMX"},
- {0, 2315, 0, 2, 5, 0, "seqVerse5", "2311-Song", "2311-S~1.IMX"},
- {0, 2316, 0, 2, 6, 0, "seqVerse6", "2311-Song", "2311-S~1.IMX"},
- {0, 2317, 0, 2, 7, 0, "seqVerse7", "2311-Song", "2311-S~1.IMX"},
- {0, 2318, 0, 2, 8, 0, "seqVerse8", "2311-Song", "2311-S~1.IMX"},
- {0, 2319, 0, 2, 9, 0, "seqSongEnd", "2311-Song", "2311-S~1.IMX"},
- {0, 2336, 0, 2, 0, 0, "seqRiposteLose", "2336-Riposte Lose", "2336-R~1.IMX"},
- {0, 2337, 0, 2, 0, 0, "seqRiposteWin", "2337-Riposte Win", "2337-R~1.IMX"},
- {0, 2338, 0, 2, 0, 0, "seqInsultLose", "2338-Insult Lose", "2338-I~1.IMX"},
- {0, 2339, 0, 2, 0, 0, "seqInsultWin", "2339-Insult Win", "2339-I~1.IMX"},
- {0, 2340, 0, 3, 0, 0, "seqSwordLose", "1335-Sword Lose", "1335-S~1.IMX"},
- {0, 2345, 0, 3, 0, 0, "seqSwordWin", "1340-Sword Win", "1340-S~1.IMX"},
- {0, 2347, 0, 3, 0, 0, "seqGetMap", "1345-Get Map", "1345-G~1.IMX"},
- {0, 2400, 0, 3, 0, 0, "seqInterlude4", "2400-Interlude4", "2400-I~1.IMX"},
- {0, 2405, 0, 0, 0, 0, "seqSHIPWRECK", "", ""},
- {0, 2408, 0, 3, 0, 0, "seqFakeCredits", "2408-Fake Credits", "2408-F~1.IMX"},
- {0, 2410, 0, 3, 0, 0, "seqPassOut", "2410-Pass Out", "2410-P~1.IMX"},
- {0, 2414, 0, 3, 0, 0, "seqGhostTalk", "2414-Ghost Talk", "2414-G~1.IMX"},
- {0, 2415, 0, 2, 1, 0, "seqGhostWedding", "2414-Ghost Talk", "2414-G~1.IMX"},
- {0, 2420, 0, 3, 0, 0, "seqEruption", "2420-Eruption", "2420-E~1.IMX"},
- {0, 2425, 0, 3, 0, 0, "seqSacrifice", "2425-Sacrifice", "2425-S~1.IMX"},
- {0, 2426, 0, 2, 1, 0, "seqSacrificeEnd", "2425-Sacrifice", "2425-S~1.IMX"},
- {0, 2430, 0, 3, 0, 0, "seqScareDigger", "2430-Scare Digger", "2430-S~1.IMX"},
- {0, 2445, 0, 3, 0, 0, "seqSkullArrive", "2445-Skull Arrive", "2445-S~1.IMX"},
- {0, 2450, 0, 3, 0, 0, "seqFloat", "2450-Cliff Fall", "2450-C~1.IMX"},
- {0, 2451, 0, 2, 1, 0, "seqFall", "2450-Cliff Fall", "2450-C~1.IMX"},
- {0, 2452, 0, 2, 2, 0, "seqUmbrella", "2450-Cliff Fall", "2450-C~1.IMX"},
- {0, 2460, 0, 3, 0, 0, "seqFight", "2460-Fight", "2460-F~1.IMX"},
- {0, 2465, 0, 0, 0, 0, "seqLAVE_RIDE", "", ""},
- {0, 2470, 0, 0, 0, 0, "seqMORE_SLAW", "", ""},
- {0, 2475, 0, 0, 0, 0, "seqLIFT_CURSE", "", ""},
- {0, 2500, 0, 3, 0, 0, "seqInterlude5", "2500-Interlude5", "2500-I~1.IMX"},
- {0, 2502, 0, 3, 0, 0, "seqExitSkycar", "2502-Exit Skycar", "2502-E~1.IMX"},
- {0, 2504, 0, 3, 0, 0, "seqGrow1", "2504-Grow", "2504-G~1.IMX"},
- {0, 2505, 0, 2, 1, 0, "seqGrow2", "2504-Grow", "2504-G~1.IMX"},
- {0, 2508, 0, 3, 0, 0, "seqInterlude6", "2508-Interlude6", "2508-I~1.IMX"},
- {0, 2515, 0, 0, 0, 0, "seqFINALE", "", ""},
- {0, 2520, 0, 3, 0, 0, "seqOut", "2520-Out", "2520-OUT.IMX"},
- {0, 2530, 0, 3, 0, 0, "seqZap1a", "2530-Zap1", "2530-Z~1.IMX"},
- {0, 2531, 0, 2, 1, 0, "seqZap1b", "2530-Zap1", "2530-Z~1.IMX"},
- {0, 2532, 0, 2, 2, 0, "seqZap1c", "2530-Zap1", "2530-Z~1.IMX"},
- {0, 2540, 0, 3, 0, 0, "seqZap2a", "2540-Zap2", "2540-Z~1.IMX"},
- {0, 2541, 0, 2, 1, 0, "seqZap2b", "2540-Zap2", "2540-Z~1.IMX"},
- {0, 2542, 0, 2, 2, 0, "seqZap2c", "2540-Zap2", "2540-Z~1.IMX"},
- {0, 2550, 0, 3, 0, 0, "seqZap3a", "2550-Zap3", "2550-Z~1.IMX"},
- {0, 2551, 0, 2, 1, 0, "seqZap3b", "2550-Zap3", "2550-Z~1.IMX"},
- {0, 2552, 0, 2, 2, 0, "seqZap3c", "2550-Zap3", "2550-Z~1.IMX"},
- {0, 2560, 0, 3, 0, 0, "seqZap4a", "2560-Zap4", "2560-Z~1.IMX"},
- {0, 2561, 0, 2, 1, 0, "seqZap4b", "2560-Zap4", "2560-Z~1.IMX"},
- {0, 2562, 0, 2, 2, 0, "seqZap4c", "2560-Zap4", "2560-Z~1.IMX"},
- {-1, -1, 0, 0, 0, 0, "", "", ""}
+const imuseComiTable _comiSeqMusicTable[] = {
+ {"", 0, 2000, "SEQ_NULL", 0, 0, 0, ""},
+ {"", 0, 2100, "seqINTRO", 0, 0, 0, ""},
+ {"2105-Interlude1", 3, 2105, "seqInterlude1", 0, 0, 0, "2105-I~1.IMX"},
+ {"", 8, 2110, "seqLastBoat", 0, 1, 0, ""},
+ {"", 0, 2115, "seqSINK_SHIP", 0, 0, 0, ""},
+ {"", 0, 2120, "seqCURSED_RING", 0, 0, 0, ""},
+ {"2200-Interlude2", 3, 2200, "seqInterlude2", 0, 0, 0, "2200-I~1.IMX"},
+ {"2210-Kidnapped", 3, 2210, "seqKidnapped", 0, 0, 0, "2210-K~1.IMX"},
+ {"", 8, 2220, "seqSnakeVomits", 0, 1, 0, ""},
+ {"", 8, 2222, "seqPopBalloon", 0, 1, 0, ""},
+ {"2225-Drop Balls", 3, 2225, "seqDropBalls", 0, 0, 0, "2225-D~1.IMX"},
+ {"2232-Arrive Barber", 4, 2232, "seqArriveBarber", 0, 0, 0, "2232-A~1.IMX"},
+ {"2233-Atonal", 3, 2233, "seqAtonal", 0, 0, 0, "2233-A~1.IMX"},
+ {"2235-Shave Head", 3, 2235, "seqShaveHead1", 0, 0, 0, "2235-S~1.IMX"},
+ {"2235-Shave Head", 2, 2236, "seqShaveHead2", 0, 2, 0, "2235-S~1.IMX"},
+ {"2245-Caber Lose", 3, 2245, "seqCaberLose", 0, 0, 0, "2245-C~1.IMX"},
+ {"2250-Caber Win", 3, 2250, "seqCaberWin", 0, 0, 0, "2250-C~1.IMX"},
+ {"2255-Duel", 3, 2255, "seqDuel1", 0, 0, 0, "2255-D~1.IMX"},
+ {"2255-Duel", 2, 2256, "seqDuel2", 0, 2, 0, "2255-D~1.IMX"},
+ {"2255-Duel", 2, 2257, "seqDuel3", 0, 3, 0, "2255-D~1.IMX"},
+ {"2260-Blow Up Tree", 3, 2260, "seqBlowUpTree1", 0, 0, 0, "2260-B~1.IMX"},
+ {"2260-Blow Up Tree", 2, 2261, "seqBlowUpTree2", 0, 2, 0, "2260-B~1.IMX"},
+ {"2275-Monkeys", 3, 2275, "seqMonkeys", 0, 0, 0, "2275-M~1.IMX"},
+ {"", 9, 2277, "seqAttack", 0, 1, 0, ""},
+ {"2285-Sharks", 3, 2285, "seqSharks", 0, 0, 0, "2285-S~1.IMX"},
+ {"2287-Towel Walk", 3, 2287, "seqTowelWalk", 0, 0, 0, "2287-T~1.IMX"},
+ {"", 0, 2293, "seqNICE_BOOTS", 0, 0, 0, ""},
+ {"", 0, 2295, "seqBIG_BONED", 0, 0, 0, ""},
+ {"2300-To Blood", 3, 2300, "seqToBlood", 0, 0, 0, "2300-T~1.IMX"},
+ {"2301-Interlude3", 3, 2301, "seqInterlude3", 0, 0, 0, "2301-I~1.IMX"},
+ {"2302-Rott Attack", 3, 2302, "seqRott1", 0, 0, 0, "2302-R~1.IMX"},
+ {"2302-Rott Attack", 2, 2304, "seqRott2", 0, 2, 0, "2302-R~1.IMX"},
+ {"2302-Rott Attack", 2, 2305, "seqRott2b", 0,21, 0, "2302-R~1.IMX"},
+ {"2302-Rott Attack", 2, 2306, "seqRott3", 0, 3, 0, "2302-R~1.IMX"},
+ {"2302-Rott Attack", 2, 2308, "seqRott4", 0, 4, 0, "2302-R~1.IMX"},
+ {"2302-Rott Attack", 2, 2309, "seqRott5", 0, 5, 0, "2302-R~1.IMX"},
+ {"2311-Song", 3, 2311, "seqVerse1", 0, 0, 0, "2311-S~1.IMX"},
+ {"2311-Song", 2, 2312, "seqVerse2", 0, 2, 0, "2311-S~1.IMX"},
+ {"2311-Song", 2, 2313, "seqVerse3", 0, 3, 0, "2311-S~1.IMX"},
+ {"2311-Song", 2, 2314, "seqVerse4", 0, 4, 0, "2311-S~1.IMX"},
+ {"2311-Song", 2, 2315, "seqVerse5", 0, 5, 0, "2311-S~1.IMX"},
+ {"2311-Song", 2, 2316, "seqVerse6", 0, 6, 0, "2311-S~1.IMX"},
+ {"2311-Song", 2, 2317, "seqVerse7", 0, 7, 0, "2311-S~1.IMX"},
+ {"2311-Song", 2, 2318, "seqVerse8", 0, 8, 0, "2311-S~1.IMX"},
+ {"2311-Song", 2, 2319, "seqSongEnd", 0, 9, 0, "2311-S~1.IMX"},
+ {"2336-Riposte Lose", 2, 2336, "seqRiposteLose", 0, 0, 0, "2336-R~1.IMX"},
+ {"2337-Riposte Win", 2, 2337, "seqRiposteWin", 0, 0, 0, "2337-R~1.IMX"},
+ {"2338-Insult Lose", 2, 2338, "seqInsultLose", 0, 0, 0, "2338-I~1.IMX"},
+ {"2339-Insult Win", 2, 2339, "seqInsultWin", 0, 0, 0, "2339-I~1.IMX"},
+ {"1335-Sword Lose", 3, 2340, "seqSwordLose", 0, 0, 0, "1335-S~1.IMX"},
+ {"1340-Sword Win", 3, 2345, "seqSwordWin", 0, 0, 0, "1340-S~1.IMX"},
+ {"1345-Get Map", 3, 2347, "seqGetMap", 0, 0, 0, "1345-G~1.IMX"},
+ {"2400-Interlude4", 3, 2400, "seqInterlude4", 0, 0, 0, "2400-I~1.IMX"},
+ {"", 0, 2405, "seqSHIPWRECK", 0, 0, 0, ""},
+ {"2408-Fake Credits", 3, 2408, "seqFakeCredits", 0, 0, 0, "2408-F~1.IMX"},
+ {"2410-Pass Out", 3, 2410, "seqPassOut", 0, 0, 0, "2410-P~1.IMX"},
+ {"2414-Ghost Talk", 3, 2414, "seqGhostTalk", 0, 0, 0, "2414-G~1.IMX"},
+ {"2414-Ghost Talk", 2, 2415, "seqGhostWedding", 0, 1, 0, "2414-G~1.IMX"},
+ {"2420-Eruption", 3, 2420, "seqEruption", 0, 0, 0, "2420-E~1.IMX"},
+ {"2425-Sacrifice", 3, 2425, "seqSacrifice", 0, 0, 0, "2425-S~1.IMX"},
+ {"2425-Sacrifice", 2, 2426, "seqSacrificeEnd", 0, 1, 0, "2425-S~1.IMX"},
+ {"2430-Scare Digger", 3, 2430, "seqScareDigger", 0, 0, 0, "2430-S~1.IMX"},
+ {"2445-Skull Arrive", 3, 2445, "seqSkullArrive", 0, 0, 0, "2445-S~1.IMX"},
+ {"2450-Cliff Fall", 3, 2450, "seqFloat", 0, 0, 0, "2450-C~1.IMX"},
+ {"2450-Cliff Fall", 2, 2451, "seqFall", 0, 1, 0, "2450-C~1.IMX"},
+ {"2450-Cliff Fall", 2, 2452, "seqUmbrella", 0, 0, 0, "2450-C~1.IMX"},
+ {"2460-Fight", 3, 2460, "seqFight", 0, 0, 0, "2460-F~1.IMX"},
+ {"", 0, 2465, "seqLAVE_RIDE", 0, 0, 0, ""},
+ {"", 0, 2470, "seqMORE_SLAW", 0, 0, 0, ""},
+ {"", 0, 2475, "seqLIFT_CURSE", 0, 0, 0, ""},
+ {"2500-Interlude5", 3, 2500, "seqInterlude5", 0, 0, 0, "2500-I~1.IMX"},
+ {"2502-Exit Skycar", 3, 2502, "seqExitSkycar", 0, 0, 0, "2502-E~1.IMX"},
+ {"2504-Grow", 3, 2504, "seqGrow1", 0, 0, 0, "2504-G~1.IMX"},
+ {"2504-Grow", 2, 2505, "seqGrow2", 0, 1, 0, "2504-G~1.IMX"},
+ {"2508-Interlude6", 3, 2508, "seqInterlude6", 0, 0, 0, "2508-I~1.IMX"},
+ {"", 0, 2515, "seqFINALE", 0, 0, 0, ""},
+ {"2520-Out", 3, 2520, "seqOut", 0, 0, 0, "2520-OUT.IMX"},
+ {"2530-Zap1", 3, 2530, "seqZap1a", 0, 0, 0, "2530-Z~1.IMX"},
+ {"2530-Zap1", 2, 2531, "seqZap1b", 0, 1, 0, "2530-Z~1.IMX"},
+ {"2530-Zap1", 2, 2532, "seqZap1c", 0, 2, 0, "2530-Z~1.IMX"},
+ {"2540-Zap2", 2, 2540, "seqZap2a", 0, 0, 0, "2540-Z~1.IMX"},
+ {"2540-Zap2", 2, 2541, "seqZap2b", 0, 1, 0, "2540-Z~1.IMX"},
+ {"2540-Zap2", 2, 2542, "seqZap2c", 0, 2, 0, "2540-Z~1.IMX"},
+ {"2550-Zap3", 3, 2550, "seqZap3a", 0, 0, 0, "2550-Z~1.IMX"},
+ {"2550-Zap3", 2, 2551, "seqZap3b", 0, 1, 0, "2550-Z~1.IMX"},
+ {"2550-Zap3", 2, 2552, "seqZap3c", 0, 2, 0, "2550-Z~1.IMX"},
+ {"2560-Zap4", 3, 2560, "seqZap4a", 0, 0, 0, "2560-Z~1.IMX"},
+ {"2560-Zap4", 2, 2561, "seqZap4b", 0, 1, 0, "2560-Z~1.IMX"},
+ {"2560-Zap4", 2, 2562, "seqZap4c", 0, 2, 0, "2560-Z~1.IMX"},
+ {"", 0, -1, "", 0, 0, 0, ""}
};
const imuseFtStateTable _ftStateMusicTable[] = {