diff options
author | Max Horn | 2002-12-08 16:14:29 +0000 |
---|---|---|
committer | Max Horn | 2002-12-08 16:14:29 +0000 |
commit | 4ddecdad589e9df3db4a5a12fb9cdb874ae1d00b (patch) | |
tree | 165ba65531919c0a158136d496b225a3f30a969a /scumm/imuse.cpp | |
parent | 2986adb53dea09928f5051674e4d53d39d83cf27 (diff) | |
download | scummvm-rg350-4ddecdad589e9df3db4a5a12fb9cdb874ae1d00b.tar.gz scummvm-rg350-4ddecdad589e9df3db4a5a12fb9cdb874ae1d00b.tar.bz2 scummvm-rg350-4ddecdad589e9df3db4a5a12fb9cdb874ae1d00b.zip |
Patch #650085: Make saveload system extensible
svn-id: r5885
Diffstat (limited to 'scumm/imuse.cpp')
-rw-r--r-- | scumm/imuse.cpp | 153 |
1 files changed, 78 insertions, 75 deletions
diff --git a/scumm/imuse.cpp b/scumm/imuse.cpp index 30af7deee7..d46cfe336d 100644 --- a/scumm/imuse.cpp +++ b/scumm/imuse.cpp @@ -455,8 +455,8 @@ private: void fix_parts_after_load(); void fix_players_after_load(Scumm *scumm); - static int saveReference(IMuseInternal *me, byte type, void *ref); - static void *loadReference(IMuseInternal *me, byte type, int ref); + static int saveReference(void *me_ref, byte type, void *ref); + static void *loadReference(void *me_ref, byte type, int ref); void lock(); void unlock(); @@ -3143,8 +3143,9 @@ enum { TYPE_PLAYER = 2, }; -int IMuseInternal::saveReference(IMuseInternal *me, byte type, void *ref) +int IMuseInternal::saveReference(void *me_ref, byte type, void *ref) { + IMuseInternal *me = (IMuseInternal *)me_ref; switch (type) { case TYPE_PART: return (Part *)ref - me->_parts; @@ -3155,8 +3156,9 @@ int IMuseInternal::saveReference(IMuseInternal *me, byte type, void *ref) } } -void *IMuseInternal::loadReference(IMuseInternal *me, byte type, int ref) +void *IMuseInternal::loadReference(void *me_ref, byte type, int ref) { + IMuseInternal *me = (IMuseInternal *)me_ref; switch (type) { case TYPE_PART: return &me->_parts[ref]; @@ -3170,88 +3172,88 @@ void *IMuseInternal::loadReference(IMuseInternal *me, byte type, int ref) int IMuseInternal::save_or_load(Serializer *ser, Scumm *scumm) { const SaveLoadEntry mainEntries[] = { - MKLINE(IMuseInternal, _queue_end, sleUint8), - MKLINE(IMuseInternal, _queue_pos, sleUint8), - MKLINE(IMuseInternal, _queue_sound, sleUint16), - MKLINE(IMuseInternal, _queue_adding, sleByte), - MKLINE(IMuseInternal, _queue_marker, sleByte), - MKLINE(IMuseInternal, _queue_cleared, sleByte), - MKLINE(IMuseInternal, _master_volume, sleByte), - MKLINE(IMuseInternal, _trigger_count, sleUint16), - MKARRAY(IMuseInternal, _channel_volume[0], sleUint16, 8), - MKARRAY(IMuseInternal, _volchan_table[0], sleUint16, 8), + MKLINE(IMuseInternal, _queue_end, sleUint8, VER_V8), + MKLINE(IMuseInternal, _queue_pos, sleUint8, VER_V8), + MKLINE(IMuseInternal, _queue_sound, sleUint16, VER_V8), + MKLINE(IMuseInternal, _queue_adding, sleByte, VER_V8), + MKLINE(IMuseInternal, _queue_marker, sleByte, VER_V8), + MKLINE(IMuseInternal, _queue_cleared, sleByte, VER_V8), + MKLINE(IMuseInternal, _master_volume, sleByte, VER_V8), + MKLINE(IMuseInternal, _trigger_count, sleUint16, VER_V8), + MKARRAY(IMuseInternal, _channel_volume[0], sleUint16, 8, VER_V8), + MKARRAY(IMuseInternal, _volchan_table[0], sleUint16, 8, VER_V8), MKEND() }; const SaveLoadEntry playerEntries[] = { - MKREF(Player, _parts, TYPE_PART), - MKLINE(Player, _active, sleByte), - MKLINE(Player, _id, sleUint16), - MKLINE(Player, _priority, sleByte), - MKLINE(Player, _volume, sleByte), - MKLINE(Player, _pan, sleInt8), - MKLINE(Player, _transpose, sleByte), - MKLINE(Player, _detune, sleInt8), - MKLINE(Player, _vol_chan, sleUint16), - MKLINE(Player, _vol_eff, sleByte), - MKLINE(Player, _speed, sleByte), - MKLINE(Player, _song_index, sleUint16), - MKLINE(Player, _track_index, sleUint16), - MKLINE(Player, _timer_counter, sleUint16), - MKLINE(Player, _loop_to_beat, sleUint16), - MKLINE(Player, _loop_from_beat, sleUint16), - MKLINE(Player, _loop_counter, sleUint16), - MKLINE(Player, _loop_to_tick, sleUint16), - MKLINE(Player, _loop_from_tick, sleUint16), - MKLINE(Player, _tempo, sleUint32), - MKLINE(Player, _cur_pos, sleUint32), - MKLINE(Player, _next_pos, sleUint32), - MKLINE(Player, _song_offset, sleUint32), - MKLINE(Player, _tick_index, sleUint16), - MKLINE(Player, _beat_index, sleUint16), - MKLINE(Player, _ticks_per_beat, sleUint16), - MKLINE(Player, _hook._jump, sleByte), - MKLINE(Player, _hook._transpose, sleByte), - MKARRAY(Player, _hook._part_onoff[0], sleByte, 16), - MKARRAY(Player, _hook._part_volume[0], sleByte, 16), - MKARRAY(Player, _hook._part_program[0], sleByte, 16), - MKARRAY(Player, _hook._part_transpose[0], sleByte, 16), + MKREF(Player, _parts, TYPE_PART, VER_V8), + MKLINE(Player, _active, sleByte, VER_V8), + MKLINE(Player, _id, sleUint16, VER_V8), + MKLINE(Player, _priority, sleByte, VER_V8), + MKLINE(Player, _volume, sleByte, VER_V8), + MKLINE(Player, _pan, sleInt8, VER_V8), + MKLINE(Player, _transpose, sleByte, VER_V8), + MKLINE(Player, _detune, sleInt8, VER_V8), + MKLINE(Player, _vol_chan, sleUint16, VER_V8), + MKLINE(Player, _vol_eff, sleByte, VER_V8), + MKLINE(Player, _speed, sleByte, VER_V8), + MKLINE(Player, _song_index, sleUint16, VER_V8), + MKLINE(Player, _track_index, sleUint16, VER_V8), + MKLINE(Player, _timer_counter, sleUint16, VER_V8), + MKLINE(Player, _loop_to_beat, sleUint16, VER_V8), + MKLINE(Player, _loop_from_beat, sleUint16, VER_V8), + MKLINE(Player, _loop_counter, sleUint16, VER_V8), + MKLINE(Player, _loop_to_tick, sleUint16, VER_V8), + MKLINE(Player, _loop_from_tick, sleUint16, VER_V8), + MKLINE(Player, _tempo, sleUint32, VER_V8), + MKLINE(Player, _cur_pos, sleUint32, VER_V8), + MKLINE(Player, _next_pos, sleUint32, VER_V8), + MKLINE(Player, _song_offset, sleUint32, VER_V8), + MKLINE(Player, _tick_index, sleUint16, VER_V8), + MKLINE(Player, _beat_index, sleUint16, VER_V8), + MKLINE(Player, _ticks_per_beat, sleUint16, VER_V8), + MKLINE(Player, _hook._jump, sleByte, VER_V8), + MKLINE(Player, _hook._transpose, sleByte, VER_V8), + MKARRAY(Player, _hook._part_onoff[0], sleByte, 16, VER_V8), + MKARRAY(Player, _hook._part_volume[0], sleByte, 16, VER_V8), + MKARRAY(Player, _hook._part_program[0], sleByte, 16, VER_V8), + MKARRAY(Player, _hook._part_transpose[0], sleByte, 16, VER_V8), MKEND() }; const SaveLoadEntry volumeFaderEntries[] = { - MKREF(VolumeFader, player, TYPE_PLAYER), - MKLINE(VolumeFader, active, sleUint8), - MKLINE(VolumeFader, curvol, sleUint8), - MKLINE(VolumeFader, speed_lo_max, sleUint16), - MKLINE(VolumeFader, num_steps, sleUint16), - MKLINE(VolumeFader, speed_hi, sleInt8), - MKLINE(VolumeFader, direction, sleInt8), - MKLINE(VolumeFader, speed_lo, sleInt8), - MKLINE(VolumeFader, speed_lo_counter, sleUint16), + MKREF(VolumeFader, player, TYPE_PLAYER, VER_V8), + MKLINE(VolumeFader, active, sleUint8, VER_V8), + MKLINE(VolumeFader, curvol, sleUint8, VER_V8), + MKLINE(VolumeFader, speed_lo_max, sleUint16, VER_V8), + MKLINE(VolumeFader, num_steps, sleUint16, VER_V8), + MKLINE(VolumeFader, speed_hi, sleInt8, VER_V8), + MKLINE(VolumeFader, direction, sleInt8, VER_V8), + MKLINE(VolumeFader, speed_lo, sleInt8, VER_V8), + MKLINE(VolumeFader, speed_lo_counter, sleUint16, VER_V8), MKEND() }; const SaveLoadEntry partEntries[] = { - MKREF(Part, _next, TYPE_PART), - MKREF(Part, _prev, TYPE_PART), - MKREF(Part, _player, TYPE_PLAYER), - MKLINE(Part, _pitchbend, sleInt16), - MKLINE(Part, _pitchbend_factor, sleUint8), - MKLINE(Part, _transpose, sleInt8), - MKLINE(Part, _vol, sleUint8), - MKLINE(Part, _detune, sleInt8), - MKLINE(Part, _pan, sleInt8), - MKLINE(Part, _on, sleUint8), - MKLINE(Part, _modwheel, sleUint8), - MKLINE(Part, _pedal, sleUint8), - MKLINE(Part, _program, sleUint8), - MKLINE(Part, _pri, sleUint8), - MKLINE(Part, _chan, sleUint8), - MKLINE(Part, _effect_level, sleUint8), - MKLINE(Part, _chorus, sleUint8), - MKLINE(Part, _percussion, sleUint8), - MKLINE(Part, _bank, sleUint8), + MKREF(Part, _next, TYPE_PART, VER_V8), + MKREF(Part, _prev, TYPE_PART, VER_V8), + MKREF(Part, _player, TYPE_PLAYER, VER_V8), + MKLINE(Part, _pitchbend, sleInt16, VER_V8), + MKLINE(Part, _pitchbend_factor, sleUint8, VER_V8), + MKLINE(Part, _transpose, sleInt8, VER_V8), + MKLINE(Part, _vol, sleUint8, VER_V8), + MKLINE(Part, _detune, sleInt8, VER_V8), + MKLINE(Part, _pan, sleInt8, VER_V8), + MKLINE(Part, _on, sleUint8, VER_V8), + MKLINE(Part, _modwheel, sleUint8, VER_V8), + MKLINE(Part, _pedal, sleUint8, VER_V8), + MKLINE(Part, _program, sleUint8, VER_V8), + MKLINE(Part, _pri, sleUint8, VER_V8), + MKLINE(Part, _chan, sleUint8, VER_V8), + MKLINE(Part, _effect_level, sleUint8, VER_V8), + MKLINE(Part, _chorus, sleUint8, VER_V8), + MKLINE(Part, _percussion, sleUint8, VER_V8), + MKLINE(Part, _bank, sleUint8, VER_V8), MKEND() }; @@ -3261,7 +3263,8 @@ int IMuseInternal::save_or_load(Serializer *ser, Scumm *scumm) #endif ser->_ref_me = this; - ser->_saveload_ref = ser->isSaving()? ((void *)&saveReference) : ((void *)&loadReference); + ser->_save_ref = saveReference; + ser->_load_ref = loadReference; ser->saveLoadEntries(this, mainEntries); ser->saveLoadArrayOf(_players, ARRAYSIZE(_players), sizeof(_players[0]), playerEntries); |