[Scummvm-cvs-logs] scummvm master -> 49e96aa188bbb8ed3820d5d3e057beb7632485d3

eriktorbjorn eriktorbjorn at telia.com
Sat Oct 6 00:04:37 CEST 2012


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:
49e96aa188 TOLTECS: Improve the shake screen effects during movies


Commit: 49e96aa188bbb8ed3820d5d3e057beb7632485d3
    https://github.com/scummvm/scummvm/commit/49e96aa188bbb8ed3820d5d3e057beb7632485d3
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2012-10-05T15:01:47-07:00

Commit Message:
TOLTECS: Improve the shake screen effects during movies

I don't know how often the original shook the screen (perhaps as
often as it could?), but at least we now have the opportunity to
shake the screen more than once per movie frame.

Changed paths:
    engines/toltecs/movie.cpp
    engines/toltecs/screen.cpp
    engines/toltecs/screen.h



diff --git a/engines/toltecs/movie.cpp b/engines/toltecs/movie.cpp
index 44b52b1..35accb5 100644
--- a/engines/toltecs/movie.cpp
+++ b/engines/toltecs/movie.cpp
@@ -125,11 +125,7 @@ void MoviePlayer::playMovie(uint resIndex) {
 		case kChunkFirstImage:
 		case kChunkSubsequentImages:
 			unpackRle(chunkBuffer, _vm->_screen->_backScreen);
-			// TODO: Rework this
-			_vm->_screen->updateShakeScreen();
 			_vm->_screen->_fullRefresh = true;
-			_vm->updateInput();
-			_vm->drawScreen();
 
 			_soundChunkFramesLeft--;
 			if (_soundChunkFramesLeft <= _framesPerSoundChunk) {
@@ -137,7 +133,12 @@ void MoviePlayer::playMovie(uint resIndex) {
 			}
 
 			while (_vm->_mixer->getSoundElapsedTime(_audioStreamHandle) < (1000 * frame) / 9) {
-				g_system->delayMillis(10);
+				if (_vm->_screen->_shakeActive && _vm->_screen->updateShakeScreen()) {
+					_vm->_screen->_fullRefresh = true;
+				}
+				_vm->updateInput();
+				_vm->drawScreen();
+				// Note: drawScreen() calls delayMillis()
 			}
 
 			frame++;
diff --git a/engines/toltecs/screen.cpp b/engines/toltecs/screen.cpp
index 32202ad..c8d6740 100644
--- a/engines/toltecs/screen.cpp
+++ b/engines/toltecs/screen.cpp
@@ -43,9 +43,11 @@ Screen::Screen(ToltecsEngine *vm) : _vm(vm) {
 
 	// Screen shaking
 	_shakeActive = false;
+	_shakeTime = 0;
 	_shakeCounterInit = 0;
 	_shakeCounter = 0;
 	_shakePos = 0;
+	_shakeTime = 0;
 
 	// Verb line
 	_verbLineNum = 0;
@@ -156,6 +158,7 @@ void Screen::drawGuiImage(int16 x, int16 y, uint resIndex) {
 
 void Screen::startShakeScreen(int16 shakeCounter) {
 	_shakeActive = true;
+	_shakeTime = 0;
 	_shakeCounterInit = shakeCounter;
 	_shakeCounter = shakeCounter;
 	_shakePos = 0;
@@ -166,15 +169,19 @@ void Screen::stopShakeScreen() {
 	_vm->_system->setShakePos(0);
 }
 
-void Screen::updateShakeScreen() {
-	if (_shakeActive) {
+bool Screen::updateShakeScreen() {
+	// Assume shaking happens no more often than 50 times per second
+	if (_shakeActive && _vm->_system->getMillis() - _shakeTime >= 20) {
+		_shakeTime = _vm->_system->getMillis();
 		_shakeCounter--;
 		if (_shakeCounter == 0) {
 			_shakeCounter = _shakeCounterInit;
 			_shakePos ^= 8;
 			_vm->_system->setShakePos(_shakePos);
+			return true;
 		}
 	}
+	return false;
 }
 
 void Screen::addStaticSprite(byte *spriteItem) {
diff --git a/engines/toltecs/screen.h b/engines/toltecs/screen.h
index 315e9a4..788cde5 100644
--- a/engines/toltecs/screen.h
+++ b/engines/toltecs/screen.h
@@ -161,7 +161,7 @@ public:
 
 	void startShakeScreen(int16 shakeCounter);
 	void stopShakeScreen();
-	void updateShakeScreen();
+	bool updateShakeScreen();
 
 	// Sprite list
 	void addStaticSprite(byte *spriteItem);
@@ -221,6 +221,7 @@ public:
 
 	// Screen shaking
 	bool _shakeActive;
+	uint32 _shakeTime;
 	int16 _shakeCounterInit, _shakeCounter;
 	int _shakePos;
 






More information about the Scummvm-git-logs mailing list