diff options
| -rw-r--r-- | engines/mads/animation.cpp | 2 | ||||
| -rw-r--r-- | engines/mads/animation.h | 2 | ||||
| -rw-r--r-- | engines/mads/nebular/menu_nebular.cpp | 40 | ||||
| -rw-r--r-- | engines/mads/nebular/menu_nebular.h | 7 | 
4 files changed, 46 insertions, 5 deletions
diff --git a/engines/mads/animation.cpp b/engines/mads/animation.cpp index 512a3979f9..556c475b27 100644 --- a/engines/mads/animation.cpp +++ b/engines/mads/animation.cpp @@ -390,7 +390,7 @@ void Animation::loadInterface(UserInterface &interfaceSurface, DepthSurface &dep  	_scene->_depthStyle = 0;  	if (header._bgType <= ANIMBG_FULL_SIZE) {  		_vm->_palette->_paletteUsage.setEmpty(); -		sceneInfo->load(header._roomNumber, flags, header._interfaceFile, 0, depthSurface, interfaceSurface); +		sceneInfo->load(header._roomNumber, 0, header._interfaceFile, flags, depthSurface, interfaceSurface);  		_scene->_depthStyle = sceneInfo->_depthStyle == 2 ? 1 : 0;  		if (palCycles) {  			palCycles->clear(); diff --git a/engines/mads/animation.h b/engines/mads/animation.h index 15086d3e41..4bf330e3a3 100644 --- a/engines/mads/animation.h +++ b/engines/mads/animation.h @@ -223,6 +223,8 @@ public:  	int roomNumber() const { return _header._roomNumber; }  	void resetSpriteSetsCount() { _header._spriteSetsCount = 0; } // CHECKME: See if it doesn't leak the memory when the destructor is called + +	SpriteAsset *getSpriteSet(int idx) { return _spriteSets[idx]; }  };  } // End of namespace MADS diff --git a/engines/mads/nebular/menu_nebular.cpp b/engines/mads/nebular/menu_nebular.cpp index d303dd7aad..14b5b5be9e 100644 --- a/engines/mads/nebular/menu_nebular.cpp +++ b/engines/mads/nebular/menu_nebular.cpp @@ -805,12 +805,20 @@ AnimationView::AnimationView(MADSEngine *vm) : MenuView(vm) {  	_sfx = 0;  	_soundFlag = _bgLoadFlag = true;  	_showWhiteBars = true; +	_manualFrameNumber = 0; +	_manualSpriteSet = nullptr; +	_manualStartFrame = _manualEndFrame = 0; +	_manualFrame2 = 0; +	_hasManual = false; +	_animFrameNumber = 0; +	_sceneInfo = SceneInfo::init(_vm);  	load();  }  AnimationView::~AnimationView() {  	delete _currentAnimation; +	delete _sceneInfo;  }  void AnimationView::load() { @@ -868,7 +876,8 @@ void AnimationView::loadNextResource() {  	delete _currentAnimation;  	_currentAnimation = Animation::init(_vm, &scene);  	_currentAnimation->load(scene._userInterface, scene._depthSurface,  -		resEntry._resourceName, 0, nullptr, scene._sceneInfo); +		resEntry._resourceName, resEntry._bgFlag ? 0x100 : 0, +		nullptr, _sceneInfo);  	// If a sound driver has been specified, then load the correct one  	if (!_currentAnimation->_header._soundName.empty()) { @@ -879,13 +888,36 @@ void AnimationView::loadNextResource() {  		_vm->_sound->init(driverNum);  	} -	// Set the enabled state for this animation +	// Handle any manual setup +	if (_currentAnimation->_header._manualFlag) { +		_manualFrameNumber = _currentAnimation->_header._spritesIndex; +		_manualSpriteSet = _currentAnimation->getSpriteSet(_manualFrameNumber); +		_hasManual = true; +	} + +	// Set the sound data for the animation  	_vm->_sound->setEnabled(resEntry._soundFlag); -	// Check for background loading -	if (resEntry._bgFlag) { +	Common::String dsrName = _currentAnimation->_header._dsrName; +	if (!dsrName.empty()) +		_vm->_audio->setSoundGroup(dsrName); + +	// Initial frames scan loop +	bool foundFrame = false; +	for (int frameCtr = 0; frameCtr < (int)_currentAnimation->_frameEntries.size(); ++frameCtr) { +		int spritesIdx = _currentAnimation->_spriteListIndexes[_manualFrameNumber]; +		AnimFrameEntry &frame = _currentAnimation->_frameEntries[frameCtr]; +		if (frame._spriteSlot._spritesIndex == spritesIdx) { +			_animFrameNumber = frame._frameNumber; +			_manualStartFrame = _animFrameNumber; +			_manualEndFrame = _manualSpriteSet->getCount() - 1; +			_manualFrame2 = _manualStartFrame - 1; +			break; +		}  	} +	if (!foundFrame) +		_hasManual = false;  }  void AnimationView::scriptDone() { diff --git a/engines/mads/nebular/menu_nebular.h b/engines/mads/nebular/menu_nebular.h index 3bfee2d6a6..2ffc0d6d07 100644 --- a/engines/mads/nebular/menu_nebular.h +++ b/engines/mads/nebular/menu_nebular.h @@ -276,7 +276,14 @@ private:  	int _v1;  	int _v2;  	int _resourceIndex; +	SceneInfo *_sceneInfo;  	Animation *_currentAnimation; +	int _manualFrameNumber; +	SpriteAsset *_manualSpriteSet; +	int _manualStartFrame, _manualEndFrame; +	int _manualFrame2; +	bool _hasManual; +	int _animFrameNumber;  private:  	void checkResource(const Common::String &resourceName);  | 
