aboutsummaryrefslogtreecommitdiff
path: root/saga
diff options
context:
space:
mode:
Diffstat (limited to 'saga')
-rw-r--r--saga/animation.h7
-rw-r--r--saga/ite_introproc.cpp18
-rw-r--r--saga/scene.cpp8
-rw-r--r--saga/sthread.cpp6
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)) {