[Scummvm-cvs-logs] scummvm master -> 12fd50929533a5ba1ea26ccc1e5de0b5c3f83f50

dhewg dhewg at wiibrew.org
Wed Feb 16 00:04:07 CET 2011


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:
12fd509295 SKY: Restore old sequence delay behaviour.


Commit: 12fd50929533a5ba1ea26ccc1e5de0b5c3f83f50
    https://github.com/scummvm/scummvm/commit/12fd50929533a5ba1ea26ccc1e5de0b5c3f83f50
Author: dhewg (dhewg at wiibrew.org)
Date: 2011-02-15T15:02:32-08:00

Commit Message:
SKY: Restore old sequence delay behaviour.

Since f621f6a5 processSequence() waited 60*3ms instead of 60ms. Restored
that while getting rid of SEQ_DELAY. That in return allows us to relax
the call frequency again (more sleeps, less cpu hogging).

Changed paths:
    engines/sky/intro.cpp
    engines/sky/screen.cpp
    engines/sky/screen.h



diff --git a/engines/sky/intro.cpp b/engines/sky/intro.cpp
index 0d1948b..cf1910c 100644
--- a/engines/sky/intro.cpp
+++ b/engines/sky/intro.cpp
@@ -918,12 +918,14 @@ bool Intro::escDelay(uint32 msecs) {
 		nDelay = _relDelay - _system->getMillis();
 		if (nDelay < 0)
 			nDelay = 0;
-		else if (nDelay > 10)
-			nDelay = 10;
+		else if (nDelay > 20)
+			nDelay = 20;
+
 		_system->delayMillis(nDelay);
+
 		_skyScreen->processSequence();
 		_system->updateScreen();
-	} while (nDelay == 10);
+	} while (nDelay == 20);
 
 	return true;
 }
diff --git a/engines/sky/screen.cpp b/engines/sky/screen.cpp
index ab4ba1e..dae158e 100644
--- a/engines/sky/screen.cpp
+++ b/engines/sky/screen.cpp
@@ -383,14 +383,14 @@ void Screen::waitForTick() {
 	Common::Event event;
 
 	while (true) {
+		while (eventMan->pollEvent(event))
+			;
+
 		start = _system->getMillis();
 
 		if (start >= end)
 			return;
 
-		while (eventMan->pollEvent(event))
-			;
-
 		remain = end - start;
 		if (remain < 10) {
 			_system->delayMillis(remain);
@@ -408,7 +408,7 @@ void Screen::waitForSequence() {
 	while (_seqInfo.running) {
 		processSequence();
 
-		_system->delayMillis(10);
+		_system->delayMillis(20);
 		while (eventMan->pollEvent(event))
 			;
 	}
@@ -416,20 +416,18 @@ void Screen::waitForSequence() {
 
 void Screen::startSequence(uint16 fileNum) {
 	_seqInfo.seqData = _skyDisk->loadFile(fileNum);
-	_seqInfo.nextFrame = _system->getMillis();
+	_seqInfo.nextFrame = _system->getMillis() + 60;
 	_seqInfo.framesLeft = _seqInfo.seqData[0];
 	_seqInfo.seqDataPos = _seqInfo.seqData + 1;
-	_seqInfo.delay = SEQ_DELAY;
 	_seqInfo.running = true;
 	_seqInfo.runningItem = false;
 }
 
 void Screen::startSequenceItem(uint16 itemNum) {
 	_seqInfo.seqData = (uint8 *)SkyEngine::fetchItem(itemNum);
-	_seqInfo.nextFrame = _system->getMillis();
+	_seqInfo.nextFrame = _system->getMillis() + 60;
 	_seqInfo.framesLeft = _seqInfo.seqData[0] - 1;
 	_seqInfo.seqDataPos = _seqInfo.seqData + 1;
-	_seqInfo.delay = SEQ_DELAY;
 	_seqInfo.running = true;
 	_seqInfo.runningItem = true;
 }
@@ -450,75 +448,72 @@ void Screen::processSequence() {
 	if (_system->getMillis() < _seqInfo.nextFrame)
 		return;
 
-	_seqInfo.delay--;
-	if (_seqInfo.delay == 0) {
-		_seqInfo.delay = SEQ_DELAY;
-		_seqInfo.nextFrame += 20 * SEQ_DELAY;
+	_seqInfo.nextFrame += 60;
 
-		memset(_seqGrid, 0, 12 * 20);
+	memset(_seqGrid, 0, 12 * 20);
 
-		uint32 screenPos = 0;
+	uint32 screenPos = 0;
 
-		uint8 nrToSkip, nrToDo, cnt;
+	uint8 nrToSkip, nrToDo, cnt;
+	do {
 		do {
-			do {
-				nrToSkip = _seqInfo.seqDataPos[0];
-				_seqInfo.seqDataPos++;
-				screenPos += nrToSkip;
-			} while (nrToSkip == 0xFF);
+			nrToSkip = _seqInfo.seqDataPos[0];
+			_seqInfo.seqDataPos++;
+			screenPos += nrToSkip;
+		} while (nrToSkip == 0xFF);
 
-			do {
-				nrToDo = _seqInfo.seqDataPos[0];
-				_seqInfo.seqDataPos++;
-
-				uint8 gridSta = (uint8)((screenPos / (GAME_SCREEN_WIDTH * 16))*20 + ((screenPos % GAME_SCREEN_WIDTH) >> 4));
-				uint8 gridEnd = (uint8)(((screenPos+nrToDo) / (GAME_SCREEN_WIDTH * 16))*20 + (((screenPos+nrToDo) % GAME_SCREEN_WIDTH) >> 4));
-				gridSta = MIN(gridSta, (uint8)(12 * 20 - 1));
-				gridEnd = MIN(gridEnd, (uint8)(12 * 20 - 1));
-				if (gridEnd >= gridSta)
-					for (cnt = gridSta; cnt <= gridEnd; cnt++)
-						_seqGrid[cnt] = 1;
-				else {
-					for (cnt = gridSta; cnt < (gridSta / 20 + 1) * 20; cnt++)
-						_seqGrid[cnt] = 1;
-					for (cnt = (gridEnd / 20) * 20; cnt <= gridEnd; cnt++)
-						_seqGrid[cnt] = 1;
-				}
+		do {
+			nrToDo = _seqInfo.seqDataPos[0];
+			_seqInfo.seqDataPos++;
+
+			uint8 gridSta = (uint8)((screenPos / (GAME_SCREEN_WIDTH * 16))*20 + ((screenPos % GAME_SCREEN_WIDTH) >> 4));
+			uint8 gridEnd = (uint8)(((screenPos+nrToDo) / (GAME_SCREEN_WIDTH * 16))*20 + (((screenPos+nrToDo) % GAME_SCREEN_WIDTH) >> 4));
+			gridSta = MIN(gridSta, (uint8)(12 * 20 - 1));
+			gridEnd = MIN(gridEnd, (uint8)(12 * 20 - 1));
+			if (gridEnd >= gridSta)
+				for (cnt = gridSta; cnt <= gridEnd; cnt++)
+					_seqGrid[cnt] = 1;
+			else {
+				for (cnt = gridSta; cnt < (gridSta / 20 + 1) * 20; cnt++)
+					_seqGrid[cnt] = 1;
+				for (cnt = (gridEnd / 20) * 20; cnt <= gridEnd; cnt++)
+					_seqGrid[cnt] = 1;
+			}
 
-				for (cnt = 0; cnt < nrToDo; cnt++) {
-					_currentScreen[screenPos] = _seqInfo.seqDataPos[0];
-					_seqInfo.seqDataPos++;
-					screenPos++;
-				}
-			} while (nrToDo == 0xFF);
-		} while (screenPos < (GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT));
-		uint8 *gridPtr = _seqGrid; uint8 *scrPtr = _currentScreen; uint8 *rectPtr = NULL;
-		uint8 rectWid = 0, rectX = 0, rectY = 0;
-		for (uint8 cnty = 0; cnty < 12; cnty++) {
-			for (uint8 cntx = 0; cntx < 20; cntx++) {
-				if (*gridPtr) {
-					if (!rectWid) {
-						rectX = cntx;
-						rectY = cnty;
-						rectPtr = scrPtr;
-					}
-					rectWid++;
-				} else if (rectWid) {
-					_system->copyRectToScreen(rectPtr, GAME_SCREEN_WIDTH, rectX << 4, rectY << 4, rectWid << 4, 16);
-					rectWid = 0;
-				}
-				scrPtr += 16;
-				gridPtr++;
+			for (cnt = 0; cnt < nrToDo; cnt++) {
+				_currentScreen[screenPos] = _seqInfo.seqDataPos[0];
+				_seqInfo.seqDataPos++;
+				screenPos++;
 			}
-			if (rectWid) {
+		} while (nrToDo == 0xFF);
+	} while (screenPos < (GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT));
+	uint8 *gridPtr = _seqGrid; uint8 *scrPtr = _currentScreen; uint8 *rectPtr = NULL;
+	uint8 rectWid = 0, rectX = 0, rectY = 0;
+	for (uint8 cnty = 0; cnty < 12; cnty++) {
+		for (uint8 cntx = 0; cntx < 20; cntx++) {
+			if (*gridPtr) {
+				if (!rectWid) {
+					rectX = cntx;
+					rectY = cnty;
+					rectPtr = scrPtr;
+				}
+				rectWid++;
+			} else if (rectWid) {
 				_system->copyRectToScreen(rectPtr, GAME_SCREEN_WIDTH, rectX << 4, rectY << 4, rectWid << 4, 16);
 				rectWid = 0;
 			}
-			scrPtr += 15 * GAME_SCREEN_WIDTH;
+			scrPtr += 16;
+			gridPtr++;
 		}
-		_system->updateScreen();
-		_seqInfo.framesLeft--;
+		if (rectWid) {
+			_system->copyRectToScreen(rectPtr, GAME_SCREEN_WIDTH, rectX << 4, rectY << 4, rectWid << 4, 16);
+			rectWid = 0;
+		}
+		scrPtr += 15 * GAME_SCREEN_WIDTH;
 	}
+	_system->updateScreen();
+	_seqInfo.framesLeft--;
+
 	if (_seqInfo.framesLeft == 0) {
 		_seqInfo.running = false;
 		if (!_seqInfo.runningItem)
diff --git a/engines/sky/screen.h b/engines/sky/screen.h
index 048f5c1..5310aeb 100644
--- a/engines/sky/screen.h
+++ b/engines/sky/screen.h
@@ -46,7 +46,6 @@ struct DataFileHeader;
 #define SCROLL_JUMP		16
 #define VGA_COLOURS		256
 #define GAME_COLOURS		240
-#define SEQ_DELAY 3
 
 #define FORE 1
 #define BACK 0
@@ -114,7 +113,6 @@ private:
 	struct {
 		uint32 nextFrame;
 		uint32 framesLeft;
-		uint32 delay;
 		uint8 *seqData;
 		uint8 *seqDataPos;
 		volatile bool running;






More information about the Scummvm-git-logs mailing list