diff options
Diffstat (limited to 'scumm')
-rw-r--r-- | scumm/imuse.cpp | 23 | ||||
-rw-r--r-- | scumm/instrument.cpp | 9 | ||||
-rw-r--r-- | scumm/saveload.h | 4 |
3 files changed, 21 insertions, 15 deletions
diff --git a/scumm/imuse.cpp b/scumm/imuse.cpp index 08d47112ad..b1ddb67081 100644 --- a/scumm/imuse.cpp +++ b/scumm/imuse.cpp @@ -3127,6 +3127,17 @@ int IMuseInternal::save_or_load(Serializer *ser, Scumm *scumm) ser->saveLoadEntries(this, mainEntries); ser->saveLoadArrayOf(_players, ARRAYSIZE(_players), sizeof(_players[0]), playerEntries); ser->saveLoadArrayOf(_parts, ARRAYSIZE(_parts), sizeof(_parts[0]), partEntries); + + // Load/save the instrument definitions, which were revamped with V11. + if (ser->getVersion() >= VER_V11) { + int i; + Part *part = &_parts[0]; + for (i = ARRAYSIZE(_parts); i; --i, ++part) { + part->_program = 255; + part->_instrument.saveOrLoad (ser); + } + } + ser->saveLoadArrayOf(_volume_fader, ARRAYSIZE(_volume_fader), sizeof(_volume_fader[0]), volumeFaderEntries); @@ -3170,18 +3181,6 @@ void IMuseInternal::fix_players_after_load(Scumm *scumm) scumm->getResourceAddress(rtSound, player->_id); player->_mt32emulate = isMT32(player->_id); player->_isGM = isGM(player->_id); - if (scumm->_use_adlib) { - // FIXME - This should make sure the right - // instruments are loaded, but it does not - // even try to move to the right position in - // the track. Using scan() gives a marginally - // better result, but not good enough. - // - // The correct fix is probably to store the - // Adlib instruments, or information on where - // to find them, in the savegame. - player->jump(player->_track_index, 0, 0); - } } } } diff --git a/scumm/instrument.cpp b/scumm/instrument.cpp index e8201ab8d7..c2ebaffb1f 100644 --- a/scumm/instrument.cpp +++ b/scumm/instrument.cpp @@ -330,8 +330,13 @@ Instrument_Program::Instrument_Program (Serializer *s) void Instrument_Program::saveOrLoad (Serializer *s) { - _program = s->loadByte(); - _mt32 = (s->loadByte() > 0); + if (s->isSaving()) { + s->saveByte (_program); + s->saveByte (_mt32 ? 1 : 0); + } else { + _program = s->loadByte(); + _mt32 = (s->loadByte() > 0); + } } void Instrument_Program::send (MidiChannel *mc) diff --git a/scumm/saveload.h b/scumm/saveload.h index 7be5d061a1..d30a771a83 100644 --- a/scumm/saveload.h +++ b/scumm/saveload.h @@ -25,12 +25,13 @@ // Support for "old" savegames (made with 2501 CVS build) // Can be useful for other ports too :) +#define VER_V11 11 #define VER_V10 10 #define VER_V9 9 #define VER_V8 8 #define VER_V7 7 -#define CURRENT_VER VER_V10 +#define CURRENT_VER VER_V11 // To work around a warning in GCC 3.2 (and 3.1 ?) regarding non-POD types, @@ -105,6 +106,7 @@ public: void saveLoadEntries(void *d, const SaveLoadEntry *sle); bool isSaving() { return _saveOrLoad; } + uint32 getVersion() { return _savegameVersion; } bool checkEOFLoadStream(); |