aboutsummaryrefslogtreecommitdiff
path: root/scumm/imuse.cpp
diff options
context:
space:
mode:
authorMax Horn2002-12-08 16:14:29 +0000
committerMax Horn2002-12-08 16:14:29 +0000
commit4ddecdad589e9df3db4a5a12fb9cdb874ae1d00b (patch)
tree165ba65531919c0a158136d496b225a3f30a969a /scumm/imuse.cpp
parent2986adb53dea09928f5051674e4d53d39d83cf27 (diff)
downloadscummvm-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.cpp153
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);