diff options
-rw-r--r-- | engines/access/amazon/amazon_scripts.cpp | 81 | ||||
-rw-r--r-- | engines/access/amazon/amazon_scripts.h | 3 |
2 files changed, 83 insertions, 1 deletions
diff --git a/engines/access/amazon/amazon_scripts.cpp b/engines/access/amazon/amazon_scripts.cpp index a39b8ae6e2..af619cb7e6 100644 --- a/engines/access/amazon/amazon_scripts.cpp +++ b/engines/access/amazon/amazon_scripts.cpp @@ -226,6 +226,27 @@ void AmazonScripts::doFlyCell() { } } +void AmazonScripts::doFallCell() { + if (_vm->_scaleI <= 0) + return; + + _game->_destIn = &_game->_buffer2; + + // 115, 11, i + _vm->_screen->plotImage(_vm->_objectsTable[20], _game->_plane._planeCount / 6, Common::Point(115, 11)); + _vm->_scaleI -= 3; + _vm->_scale = _vm->_scaleI; + _vm->_screen->setScaleTable(_vm->_scale); + ++_game->_plane._xCount; + if (_game->_plane._xCount == 5) + return; + _game->_plane._xCount = 0; + if (_game->_plane._planeCount == 18) + _game->_plane._planeCount = 0; + else + _game->_plane._planeCount += 6; +} + void AmazonScripts::scrollFly() { _vm->copyBF1BF2(); _vm->_newRects.clear(); @@ -234,6 +255,14 @@ void AmazonScripts::scrollFly() { _vm->copyBF2Vid(); } +void AmazonScripts::scrollFall() { + _vm->copyBF1BF2(); + _vm->_newRects.clear(); + doFallCell(); + _vm->copyRects(); + _vm->copyBF2Vid(); +} + void AmazonScripts::mWhileFly() { _vm->_events->hideCursor(); _vm->_screen->clearScreen(); @@ -290,6 +319,56 @@ void AmazonScripts::mWhileFly() { } } +void AmazonScripts::mWhileFall() { + _vm->_events->hideCursor(); + _vm->_screen->clearScreen(); + _vm->_screen->setBufferScan(); + _vm->_screen->fadeOut(); + _vm->_screen->_scrollX = 0; + + _vm->_room->buildScreen(); + _vm->copyBF2Vid(); + _vm->_screen->fadeIn(); + _vm->_oldRects.clear(); + _vm->_newRects.clear(); + + // KEYFLG = 0; + + _vm->_screen->_scrollRow = _vm->_screen->_scrollCol = 0; + _vm->_screen->_scrollX = _vm->_screen->_scrollY = 0; + _vm->_player->_scrollAmount = 3; + _vm->_scaleI = 255; + + _game->_plane._xCount = 0; + _game->_plane._planeCount = 0; + + while (true) { + int _vbCount = 4; + if (_vm->_screen->_scrollCol + _vm->_screen->_vWindowWidth == _vm->_room->_playFieldWidth) { + _vm->_events->showCursor(); + return; + } + + _vm->_screen->_scrollX += _vm->_player->_scrollAmount; + while (_vm->_screen->_scrollX >= TILE_WIDTH) { + _vm->_screen->_scrollX -= TILE_WIDTH; + ++_vm->_screen->_scrollCol; + + _vm->_buffer1.moveBufferLeft(); + _vm->_room->buildColumn(_vm->_screen->_scrollCol + _vm->_screen->_vWindowWidth, _vm->_screen->_vWindowBytesWide); + } + + scrollFall(); + g_system->delayMillis(10); + + while(_vbCount > 0) { + // To be rewritten when NEWTIMER is done + _vm->_events->checkForNextFrameCounter(); + _vbCount--; + } + } +} + void AmazonScripts::mWhile(int param1) { switch(param1) { case 1: @@ -299,7 +378,7 @@ void AmazonScripts::mWhile(int param1) { mWhileFly(); break; case 3: - warning("TODO FALL"); + mWhileFall(); break; case 4: warning("TODO JWALK"); diff --git a/engines/access/amazon/amazon_scripts.h b/engines/access/amazon/amazon_scripts.h index fb2c66f685..ca96de60d7 100644 --- a/engines/access/amazon/amazon_scripts.h +++ b/engines/access/amazon/amazon_scripts.h @@ -40,11 +40,14 @@ protected: virtual void executeCommand(int commandIndex); void doFlyCell(); + void doFallCell(); void scrollFly(); + void scrollFall(); void cLoop(); void mWhile1(); void mWhile2(); void mWhileFly(); + void mWhileFall(); void mWhile(int param1); void guardSee(); void setGuardFrame(); |