aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/resources
diff options
context:
space:
mode:
authorEric Fry2018-07-03 22:44:38 +1000
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commitc01a1269b6bd6bfbce0de201490fc2c1d61c2250 (patch)
tree5c72c060352f9609bd90ffc8e0a35f6af5447355 /engines/illusions/resources
parent24a4c6367ced2bfc76ae2326b077a8b324c6b6a5 (diff)
downloadscummvm-rg350-c01a1269b6bd6bfbce0de201490fc2c1d61c2250.tar.gz
scummvm-rg350-c01a1269b6bd6bfbce0de201490fc2c1d61c2250.tar.bz2
scummvm-rg350-c01a1269b6bd6bfbce0de201490fc2c1d61c2250.zip
ILLUSIONS: DUCKMAN: Clear fader when loading/unpausing backgrounds
(cherry picked from commit 3367aafae37d6c28c1ab1e8323613a56a44e3a5c) ILLUSIONS: Delete dictionary list before it gets removed (cherry picked from commit d9d0c11) ILLUSIONS: Implement PathFinder::postProcess (cherry picked from commit ee98dfc)
Diffstat (limited to 'engines/illusions/resources')
-rw-r--r--engines/illusions/resources/backgroundresource.cpp5
-rw-r--r--engines/illusions/resources/midiresource.cpp64
-rw-r--r--engines/illusions/resources/midiresource.h27
3 files changed, 91 insertions, 5 deletions
diff --git a/engines/illusions/resources/backgroundresource.cpp b/engines/illusions/resources/backgroundresource.cpp
index 2a37bba4a8..933ba25e7e 100644
--- a/engines/illusions/resources/backgroundresource.cpp
+++ b/engines/illusions/resources/backgroundresource.cpp
@@ -402,7 +402,8 @@ void BackgroundInstance::load(Resource *resource) {
registerResources();
- // TODO camera_fadeClear();
+ _vm->clearFader();
+
int index = _bgRes->findMasterBgIndex();
_vm->_camera->set(_bgRes->_bgInfos[index - 1]._panPoint, _bgRes->_bgInfos[index - 1]._surfInfo._dimensions);
@@ -442,7 +443,7 @@ void BackgroundInstance::unpause() {
_vm->_screenPalette->setPalette(_savedPalette, 1, 256);
delete[] _savedPalette;
_savedPalette = 0;
- // TODO _vm->_screen->_fadeClear();
+ _vm->clearFader();
_vm->_camera->setActiveState(_savedCameraState);
_vm->_backgroundInstances->refreshPan();
}
diff --git a/engines/illusions/resources/midiresource.cpp b/engines/illusions/resources/midiresource.cpp
index 5e6e85a4ee..060565b02a 100644
--- a/engines/illusions/resources/midiresource.cpp
+++ b/engines/illusions/resources/midiresource.cpp
@@ -29,13 +29,71 @@ namespace Illusions {
void MidiGroupResourceLoader::load(Resource *resource) {
debug(1, "MidiGroupResourceLoader::load() Loading midi group %08X...", resource->_resId);
+ MidiGroupInstance *midiGroupInstance = new MidiGroupInstance(_vm);
+ midiGroupInstance->load(resource);
+ resource->_instance = midiGroupInstance;
+}
- // TODO
+bool MidiGroupResourceLoader::isFlag(int flag) {
+ return
+ flag == kRlfLoadFile/* ||
+ flag == kRlfFreeDataAfterLoad*/;
+}
+// MidiMusic
+
+void MidiMusic::load(Common::SeekableReadStream &stream) {
+ _musicId = stream.readUint32LE();
+ _looping = stream.readUint16LE() != 0;
+ stream.skip(2 + 32 + 4); // Skip unused/unknown values
+ debug(1, "MidiMusic::load() _musicId: %08X; _looping: %d", _musicId, _looping);
}
-bool MidiGroupResourceLoader::isFlag(int flag) {
- return false;
+// MidiGroupResource
+
+MidiGroupResource::MidiGroupResource()
+ : _midiMusicCount(0), _midiMusic(0) {
+}
+
+MidiGroupResource::~MidiGroupResource() {
+ delete[] _midiMusic;
+}
+
+void MidiGroupResource::load(byte *data, uint32 dataSize) {
+ Common::MemoryReadStream stream(data, dataSize, DisposeAfterUse::NO);
+
+ stream.skip(4);
+ _midiMusicCount = stream.readUint16LE();
+ stream.skip(2);
+ uint32 midiMusicOffs = stream.readUint32LE();
+ debug("_midiMusicCount: %d; midiMusicOffs: %08X", _midiMusicCount, midiMusicOffs);
+ _midiMusic = new MidiMusic[_midiMusicCount];
+ stream.seek(midiMusicOffs);
+ for (uint i = 0; i < _midiMusicCount; ++i)
+ _midiMusic[i].load(stream);
+
+}
+
+// MidiGroupInstance
+
+MidiGroupInstance::MidiGroupInstance(IllusionsEngine *vm)
+ : _vm(vm), _midiGroupResource(0) {
+}
+
+void MidiGroupInstance::load(Resource *resource) {
+ _midiGroupResource = new MidiGroupResource();
+ _midiGroupResource->load(resource->_data, resource->_dataSize);
+ for (uint i = 0; i < _midiGroupResource->_midiMusicCount; ++i) {
+ // TODO
+ // SoundEffect *soundEffect = &_soundGroupResource->_soundEffects[i];
+ // _vm->_soundMan->loadSound(soundEffect->_soundEffectId, resource->_resId, soundEffect->_looping);
+ }
+ _resId = resource->_resId;
+}
+
+void MidiGroupInstance::unload() {
+ // _vm->_soundMan->unloadSounds(_resId);
+ delete _midiGroupResource;
}
} // End of namespace Illusions
diff --git a/engines/illusions/resources/midiresource.h b/engines/illusions/resources/midiresource.h
index 1cd3f806ef..fee4486fb8 100644
--- a/engines/illusions/resources/midiresource.h
+++ b/engines/illusions/resources/midiresource.h
@@ -40,6 +40,33 @@ protected:
IllusionsEngine *_vm;
};
+struct MidiMusic {
+ uint32 _musicId;
+ bool _looping;
+ void load(Common::SeekableReadStream &stream);
+};
+
+class MidiGroupResource {
+public:
+ MidiGroupResource();
+ ~MidiGroupResource();
+ void load(byte *data, uint32 dataSize);
+public:
+ uint _midiMusicCount;
+ MidiMusic *_midiMusic;
+};
+
+class MidiGroupInstance : public ResourceInstance {
+public:
+ MidiGroupInstance(IllusionsEngine *vm);
+ virtual void load(Resource *resource);
+ virtual void unload();
+public:
+ IllusionsEngine *_vm;
+ MidiGroupResource *_midiGroupResource;
+ uint32 _resId;
+};
+
} // End of namespace Illusions
#endif // ILLUSIONS_SOUNDRESOURCE_H