[Scummvm-git-logs] scummvm master -> 5cf139f0555552001a8be807f01854fe444b2a57
athrxx
noreply at scummvm.org
Fri Jun 24 22:14:58 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
5cf139f055 KYRA: (LoK) - fix animation glitch when skipping over scene
Commit: 5cf139f0555552001a8be807f01854fe444b2a57
https://github.com/scummvm/scummvm/commit/5cf139f0555552001a8be807f01854fe444b2a57
Author: athrxx (athrxx at scummvm.org)
Date: 2022-06-25T00:14:17+02:00
Commit Message:
KYRA: (LoK) - fix animation glitch when skipping over scene
(When skipping over a scene by left-clicking, sometimes parts of the ongoing animation would remain visible on screen, e. g. some of Herman's body parts in the cave at the beginning)
Changed paths:
engines/kyra/engine/kyra_lok.cpp
engines/kyra/graphics/animator_lok.cpp
engines/kyra/graphics/animator_lok.h
diff --git a/engines/kyra/engine/kyra_lok.cpp b/engines/kyra/engine/kyra_lok.cpp
index 6c4685d2f77..f45de68ff05 100644
--- a/engines/kyra/engine/kyra_lok.cpp
+++ b/engines/kyra/engine/kyra_lok.cpp
@@ -517,21 +517,25 @@ void KyraEngine_LoK::mainLoop() {
}
void KyraEngine_LoK::delayUntil(uint32 timestamp, bool updateTimers, bool update, bool isMainLoop) {
- while (_system->getMillis() < timestamp && !shouldQuit() && !skipFlag()) {
+ uint32 ct = _system->getMillis();
+ while (ct < timestamp && !shouldQuit()) {
if (updateTimers)
_timer->update();
- if (timestamp - _system->getMillis() >= 10)
+ ct = skipFlag() ? ct + _tickLength : _system->getMillis();
+
+ if (timestamp - ct >= 10)
delay(10, update, isMainLoop);
}
}
void KyraEngine_LoK::delay(uint32 amount, bool update, bool isMainLoop) {
uint32 start = _system->getMillis();
+ uint32 ct = start;
do {
if (update) {
_sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
+ _animator->updateAllObjectShapes(!skipFlag());
updateTextFade();
updateMousePointer();
} else {
@@ -565,7 +569,8 @@ void KyraEngine_LoK::delay(uint32 amount, bool update, bool isMainLoop) {
if (skipFlag())
snd_stopVoice();
- } while (!skipFlag() && _system->getMillis() < start + amount && !shouldQuit());
+ ct = skipFlag() ? ct + _tickLength : _system->getMillis();
+ } while (ct < start + amount && !shouldQuit());
}
bool KyraEngine_LoK::skipFlag() const {
diff --git a/engines/kyra/graphics/animator_lok.cpp b/engines/kyra/graphics/animator_lok.cpp
index 2087246c927..2da098da175 100644
--- a/engines/kyra/graphics/animator_lok.cpp
+++ b/engines/kyra/graphics/animator_lok.cpp
@@ -338,7 +338,7 @@ void Animator_LoK::prepDrawAllObjects() {
}
}
-void Animator_LoK::copyChangedObjectsForward(int refreshFlag) {
+void Animator_LoK::copyChangedObjectsForward(int refreshFlag, bool refreshScreen) {
for (AnimObject *curObject = _objectQueue; curObject; curObject = curObject->nextAnimObject) {
if (curObject->active) {
if (curObject->refreshFlag || refreshFlag) {
@@ -370,14 +370,15 @@ void Animator_LoK::copyChangedObjectsForward(int refreshFlag) {
}
}
- _screen->updateScreen();
+ if (refreshScreen)
+ _screen->updateScreen();
}
-void Animator_LoK::updateAllObjectShapes() {
+void Animator_LoK::updateAllObjectShapes(bool refreshScreen) {
restoreAllObjectBackgrounds();
preserveAnyChangedBackgrounds();
prepDrawAllObjects();
- copyChangedObjectsForward(0);
+ copyChangedObjectsForward(0, refreshScreen);
}
void Animator_LoK::animRemoveGameItem(int index) {
diff --git a/engines/kyra/graphics/animator_lok.h b/engines/kyra/graphics/animator_lok.h
index 4e6d1566111..c22fd6a31f5 100644
--- a/engines/kyra/graphics/animator_lok.h
+++ b/engines/kyra/graphics/animator_lok.h
@@ -69,9 +69,9 @@ public:
void restoreAllObjectBackgrounds();
void preserveAnyChangedBackgrounds();
virtual void prepDrawAllObjects();
- void copyChangedObjectsForward(int refreshFlag);
+ void copyChangedObjectsForward(int refreshFlag, bool refreshScreen = true);
- void updateAllObjectShapes();
+ void updateAllObjectShapes(bool refreshScreen = true);
void animRemoveGameItem(int index);
void animAddGameItem(int index, uint16 sceneId);
void animAddNPC(int character);
More information about the Scummvm-git-logs
mailing list