remove useless screen updates, make non-seq intro parts escapable.

svn-id: r8255
This commit is contained in:
Robert Göffringmann 2003-06-01 22:53:44 +00:00
parent 17e6779b65
commit f8ead8a776
5 changed files with 37 additions and 10 deletions

View file

@ -217,7 +217,7 @@ void SkyState::doCDIntro() {
bgVocBuffer = _skyDisk->loadFile(59499, NULL); bgVocBuffer = _skyDisk->loadFile(59499, NULL);
bgVocSize = _skyDisk->_lastLoadedFileSize; bgVocSize = _skyDisk->_lastLoadedFileSize;
delay(2000); //keep gibbons screen up for 2 seconds escDelay(2000); //keep gibbons screen up for 2 seconds
_skyScreen->fnFadeDown(0); //and fade out _skyScreen->fnFadeDown(0); //and fade out
START_VOICE; START_VOICE;

View file

@ -191,6 +191,16 @@ void SkyState::initVirgin() {
_skyScreen->showScreen(60110); _skyScreen->showScreen(60110);
} }
void SkyState::escDelay(uint32 pDelay) {
pDelay /= 50;
while (pDelay) {
delay(50);
if (_key_pressed == 27) pDelay = 0;
else pDelay--;
}
}
void SkyState::intro(void) { void SkyState::intro(void) {
uint32 *commandPtr = (uint32 *)zeroCommands; uint32 *commandPtr = (uint32 *)zeroCommands;
@ -201,13 +211,13 @@ void SkyState::intro(void) {
_skyMusic->loadSection(0); _skyMusic->loadSection(0);
_skySound->loadSection(0); _skySound->loadSection(0);
delay(3000); //keep virgin screen up for 3 seconds escDelay(3000); //keep virgin screen up for 3 seconds
CHECK_ESC CHECK_ESC
if (!isCDVersion()) if (!isCDVersion())
_skyMusic->startMusic(1); _skyMusic->startMusic(1);
delay(3000); //and another 3 seconds. escDelay(3000); //and another 3 seconds.
CHECK_ESC CHECK_ESC
_skyScreen->fnFadeDown(0); //remove virgin screen _skyScreen->fnFadeDown(0); //remove virgin screen
@ -224,7 +234,7 @@ void SkyState::intro(void) {
_skyText->getText(77); _skyText->getText(77);
delay(8000); // keep revolution up for 8 seconds escDelay(8000); // keep revolution up for 8 seconds
CHECK_ESC CHECK_ESC
_skyScreen->fnFadeDown(0); _skyScreen->fnFadeDown(0);
@ -240,7 +250,7 @@ void SkyState::intro(void) {
_skyDisk->prefetchFile(FN_1A); _skyDisk->prefetchFile(FN_1A);
//keep gibbo up for 2 seconds //keep gibbo up for 2 seconds
delay(2000); escDelay(2000);
CHECK_ESC CHECK_ESC
_skyScreen->fnFadeDown(0); _skyScreen->fnFadeDown(0);

View file

@ -190,6 +190,7 @@ void SkyScreen::flip(void) {
copySrc += GAME_SCREEN_WIDTH; copySrc += GAME_SCREEN_WIDTH;
copyDest += GAME_SCREEN_WIDTH; copyDest += GAME_SCREEN_WIDTH;
} }
_system->copy_rect(screenPos, GAME_SCREEN_WIDTH, cntx * GRID_W, cnty * GRID_H, GRID_W, GRID_H);
} }
backPos += GRID_W; backPos += GRID_W;
screenPos += GRID_W; screenPos += GRID_W;
@ -209,7 +210,7 @@ void SkyScreen::fnDrawScreen(uint32 palette, uint32 scroll) {
recreate(); recreate();
spriteEngine(); spriteEngine();
flip(); flip();
showScreen(_currentScreen); _system->update_screen();
fnFadeUp(palette, scroll); fnFadeUp(palette, scroll);
} }
@ -227,7 +228,7 @@ void SkyScreen::fnFadeDown(uint32 scroll) {
palette_fadedown_helper((uint32 *)_palette, GAME_COLOURS); palette_fadedown_helper((uint32 *)_palette, GAME_COLOURS);
_system->set_palette(_palette, 0, GAME_COLOURS); _system->set_palette(_palette, 0, GAME_COLOURS);
_system->update_screen(); _system->update_screen();
waitForTimer(); _system->delay_msecs(20);
} }
} }
} }
@ -275,7 +276,7 @@ void SkyScreen::paletteFadeUp(uint8 *pal) {
} }
_system->set_palette(_palette, 0, GAME_COLOURS); _system->set_palette(_palette, 0, GAME_COLOURS);
_system->update_screen(); _system->update_screen();
waitForTimer(); _system->delay_msecs(20);
} }
} }
@ -371,6 +372,7 @@ void SkyScreen::stopSequence() {
void SkyScreen::processSequence(void) { void SkyScreen::processSequence(void) {
uint32 screenPos = 0; uint32 screenPos = 0;
uint32 rectX, rectY, oldScreenPos;
_seqInfo.delay--; _seqInfo.delay--;
if (_seqInfo.delay == 0) { if (_seqInfo.delay == 0) {
@ -386,14 +388,28 @@ void SkyScreen::processSequence(void) {
do { do {
nrToDo = _seqInfo.seqDataPos[0]; nrToDo = _seqInfo.seqDataPos[0];
_seqInfo.seqDataPos++; _seqInfo.seqDataPos++;
rectX = screenPos % GAME_SCREEN_WIDTH;
rectY = screenPos / GAME_SCREEN_WIDTH;
oldScreenPos = screenPos;
for (cnt = 0; cnt < nrToDo; cnt++) { for (cnt = 0; cnt < nrToDo; cnt++) {
_currentScreen[screenPos] = _seqInfo.seqDataPos[0]; _currentScreen[screenPos] = _seqInfo.seqDataPos[0];
_seqInfo.seqDataPos++; _seqInfo.seqDataPos++;
screenPos++; screenPos++;
} }
if (nrToDo > 0) {
if (rectX + nrToDo <= GAME_SCREEN_WIDTH)
_system->copy_rect(_currentScreen + oldScreenPos, GAME_SCREEN_WIDTH, rectX, rectY, nrToDo, 1);
else {
_system->copy_rect(_currentScreen + oldScreenPos, GAME_SCREEN_WIDTH, rectX, rectY, 320 - rectX, 1);
oldScreenPos += 320 - rectX;
_system->copy_rect(_currentScreen + oldScreenPos, GAME_SCREEN_WIDTH, 0, rectY + 1, nrToDo - (320 - rectX), 1);
}
}
} while (nrToDo == 0xFF); } while (nrToDo == 0xFF);
} while (screenPos < (GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT)); } while (screenPos < (GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT));
showScreen(_currentScreen); _system->update_screen();
_seqInfo.framesLeft--; _seqInfo.framesLeft--;
} }
if (_seqInfo.framesLeft == 0) { if (_seqInfo.framesLeft == 0) {

View file

@ -152,7 +152,7 @@ void SkyState::go() {
_skyScreen->recreate(); _skyScreen->recreate();
_skyScreen->spriteEngine(); _skyScreen->spriteEngine();
_skyScreen->flip(); _skyScreen->flip();
_skyScreen->showScreen(_skyScreen->giveCurrent()); _system->update_screen();
} }
} }

View file

@ -127,6 +127,7 @@ protected:
static uint8 fosterPal[256 * 3]; static uint8 fosterPal[256 * 3];
void checkCommands(uint32 *&cmdPtr); void checkCommands(uint32 *&cmdPtr);
void introFrame(uint8 **diffPtr, uint8 **vgaPtr, uint8 *screenData); void introFrame(uint8 **diffPtr, uint8 **vgaPtr, uint8 *screenData);
void escDelay(uint32 pDelay);
SkyText *getSkyText(); SkyText *getSkyText();
void initialise(); void initialise();