From c01a1269b6bd6bfbce0de201490fc2c1d61c2250 Mon Sep 17 00:00:00 2001 From: Eric Fry Date: Tue, 3 Jul 2018 22:44:38 +1000 Subject: 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) --- engines/illusions/resources/backgroundresource.cpp | 5 +- engines/illusions/resources/midiresource.cpp | 64 +++++++++++++++++++++- engines/illusions/resources/midiresource.h | 27 +++++++++ 3 files changed, 91 insertions(+), 5 deletions(-) (limited to 'engines/illusions/resources') 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 -- cgit v1.2.3