diff options
| -rw-r--r-- | saga/animation.h | 7 | ||||
| -rw-r--r-- | saga/ite_introproc.cpp | 18 | ||||
| -rw-r--r-- | saga/scene.cpp | 8 | ||||
| -rw-r--r-- | saga/sthread.cpp | 6 | 
4 files changed, 30 insertions, 9 deletions
| diff --git a/saga/animation.h b/saga/animation.h index 25b24fcfa0..dc138eed31 100644 --- a/saga/animation.h +++ b/saga/animation.h @@ -113,7 +113,12 @@ public:  	void finish(uint16 animId);  	void resume(uint16 animId, int cycles);  	int16 getCurrentFrame(uint16 animId); - +	bool hasAnimation(uint16 animId) { +		if (animId >= MAX_ANIMATIONS) { +			return false; +		} +		return (_animations[animId] != NULL); +	}  private:  	void decodeFrame(AnimationData *anim, size_t frameOffset, byte *buf, size_t bufLength);  	void fillFrameOffsets(AnimationData *anim); diff --git a/saga/ite_introproc.cpp b/saga/ite_introproc.cpp index 46e41ac4c3..b82d654630 100644 --- a/saga/ite_introproc.cpp +++ b/saga/ite_introproc.cpp @@ -875,16 +875,18 @@ int Scene::ITEIntroTreeHouseProc(int param) {  		q_event = _vm->_events->queue(&event); -		// Begin title screen background animation -		_vm->_anim->setFrameTime(0, 100); +		if (_vm->_anim->hasAnimation(0)) { +			// Begin title screen background animation +			_vm->_anim->setFrameTime(0, 100); -		event.type = ONESHOT_EVENT; -		event.code = ANIM_EVENT; -		event.op = EVENT_PLAY; -		event.param = 0; -		event.time = 0; +			event.type = ONESHOT_EVENT; +			event.code = ANIM_EVENT; +			event.op = EVENT_PLAY; +			event.param = 0; +			event.time = 0; -		q_event = _vm->_events->chain(q_event, &event); +			q_event = _vm->_events->chain(q_event, &event); +		}  		// Queue game credits list  		q_event = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1); diff --git a/saga/scene.cpp b/saga/scene.cpp index 9dc37c952d..2dc3365ac4 100644 --- a/saga/scene.cpp +++ b/saga/scene.cpp @@ -633,6 +633,14 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {  		if (!_resourceList[i].invalid) {  			_vm->_resource->loadResource(_sceneContext, _resourceList[i].resourceId,  				_resourceList[i].buffer, _resourceList[i].size); + +			 +			if (_resourceList[i].size >= 6) { +				if (!memcmp(_resourceList[i].buffer, "DUMMY!", 6)) { +					_resourceList[i].invalid = true; +					warning("DUMMY resource %i", _resourceList[i].resourceId); +				} +			}  		}  	} diff --git a/saga/sthread.cpp b/saga/sthread.cpp index c8858c2aed..a52578b554 100644 --- a/saga/sthread.cpp +++ b/saga/sthread.cpp @@ -645,6 +645,12 @@ bool Script::runThread(ScriptThread *thread, uint instructionLimit) {  					}  				} +				if (_vm->getGameType() == GType_ITE) { +					if (sampleResourceId <= 0 || sampleResourceId > 4000) { +						sampleResourceId = -1; +					} +				} +  				_vm->_actor->actorSpeech(actorId, strings, stringsCount, sampleResourceId, speechFlags);  				if (!(speechFlags & kSpeakAsync)) { | 
