diff options
-rw-r--r-- | saga/music.cpp | 151 | ||||
-rw-r--r-- | saga/music.h | 2 |
2 files changed, 46 insertions, 107 deletions
diff --git a/saga/music.cpp b/saga/music.cpp index a76ba785e4..713ff0eaec 100644 --- a/saga/music.cpp +++ b/saga/music.cpp @@ -157,9 +157,43 @@ Music::~Music() { delete _player; } +// The Wyrmkeep release of Inherit The Earth features external MIDI files, so +// we need a mapping from resource number to filename. This lookup table is +// based on experimenting and guessing, so it may very well contain errors. +// +// There is also a reset.mid, but I don't think we'll ever need that one. + +const char *Music::_midiTableITECD[26] = { + "cave", // 9 + "intro", // 10 + "fvillage", // 11 + "elkhall", // 12 + "mouse", // 13 + "darkclaw", // 14 + "birdchrp", // 15 + "orbtempl", // 16 + "spooky", // 17 + "catfest", // 18 + "elkfanfare", // 19 + "bcexpl", // 20 + "boargtnt", // 21 + "boarking", // 22 + "explorea", // 23 + "exploreb", // 24 + "explorec", // 25 + "sunstatm", // 26 + "nitstrlm", // 27 + "humruinm", // 28 + "damexplm", // 29 + "tychom", // 30 + "kitten", // 31 + "sweet", // 32 + "brutalmt", // 33 + "shiala", // 34 +}; + int Music::play(uint32 music_rn, uint16 flags) { R_RSCFILE_CONTEXT *rsc_ctxt = NULL; - const char *midi_file; byte *resource_data; size_t resource_size; @@ -172,118 +206,21 @@ int Music::play(uint32 music_rn, uint16 flags) { return R_SUCCESS; } - // The Wyrmkeep release of Inherit The Earth uses external MIDI files - - // FIXME: This mapping is incomplete - - switch (music_rn) { -#if 0 - case XXX: - midi_file = "bcexpl"; - break; - case XXX: - midi_file = "birdchrp"; - break; - case XXX: - midi_file = "boargtnt"; - break; - case XXX: - midi_file = "boarking"; - break; - case XXX: - midi_file = "brutalmt"; - break; - case XXX: - midi_file = "catfest"; - break; -#endif - case 9: - midi_file = "cave"; - break; -#if 0 - case XXX: - midi_file = "damexplm"; - break; - case XXX: - midi_file = "darkclaw"; - break; - case XXX: - midi_file = "elkfanfare"; - break; - case XXX: - midi_file = "elkhall"; - break; - case XXX: - midi_file = "explorea"; - break; - case XXX: - midi_file = "exploreb"; - break; - case XXX: - midi_file = "explorec"; - break; - case XXX: - midi_file = "fvillage"; - break; - case XXX: - midi_file = "humruinm"; - break; -#endif - case 10: - midi_file = "intro"; - break; -#if 0 - case XXX: - midi_file = "kitten"; - break; - case XXX: - midi_file = "mouse"; - break; - case XXX: - midi_file = "nitstrlm"; - break; - case XXX: - midi_file = "orbtempl"; - break; - case XXX: - midi_file = "reset"; - break; - case XXX: - midi_file = "shiala"; - break; - case XXX: - midi_file = "spooky"; - break; - case XXX: - midi_file = "sunstatm"; - break; - case XXX: - midi_file = "sweet"; - break; - case XXX: - midi_file = "tychom"; - break; -#endif - default: - midi_file = NULL; - break; - } - File f_midi; MidiParser *parser; - if (midi_file) { - char file_name[20]; - - sprintf(file_name, "music/%s.mid", midi_file); - if (!f_midi.open(file_name)) - midi_file = NULL; + if (GAME_GetGameType() == R_GAMETYPE_ITE) { + if (music_rn >= 9 && music_rn <= 34) { + char file_name[20]; + sprintf(file_name, "music/%s.mid", _midiTableITECD[music_rn - 9]); + f_midi.open(file_name); + } } // FIXME: Is resource_data ever freed? - if (midi_file) { - debug(0, "Using external MIDI file: %s.mid", midi_file); + if (f_midi.isOpen()) { + debug(0, "Using external MIDI file: %s", f_midi.name()); resource_size = f_midi.size(); resource_data = (byte *) malloc(resource_size); f_midi.read(resource_data, resource_size); @@ -297,7 +234,7 @@ int Music::play(uint32 music_rn, uint16 flags) { if (RSC_LoadResource(rsc_ctxt, music_rn, &resource_data, &resource_size) != R_SUCCESS ) { - warning("SYSMUSIC_Play(): Resource load failed: %u", music_rn); + warning("Music::play(): Resource load failed: %u", music_rn); return R_FAILURE; } diff --git a/saga/music.h b/saga/music.h index cf70cc4a29..cf2018bb81 100644 --- a/saga/music.h +++ b/saga/music.h @@ -106,6 +106,8 @@ private: MusicPlayer *_player; + static const char *_midiTableITECD[26]; + int _musicInitialized; int _enabled; }; |