mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-16 14:50:17 +00:00
ACCESS: Airplane flight cutscene is now partially working
This commit is contained in:
parent
8ef3d55151
commit
985ad55559
@ -226,24 +226,48 @@ void AmazonScripts::mWhile2() {
|
||||
}
|
||||
|
||||
void AmazonScripts::doFlyCell() {
|
||||
_game->_destIn = &_game->_buffer2;
|
||||
if (_game->_plane._pCount <= 40) {
|
||||
_vm->_screen->plotImage(_vm->_objectsTable[15], 3, Common::Point(70, 74));
|
||||
} else if (_game->_plane._pCount <= 80) {
|
||||
_vm->_screen->plotImage(_vm->_objectsTable[15], 6, Common::Point(70, 74));
|
||||
} else if (_game->_plane._pCount <= 120) {
|
||||
_vm->_screen->plotImage(_vm->_objectsTable[15], 2, Common::Point(50, 76));
|
||||
} else if (_game->_plane._pCount <= 160) {
|
||||
_vm->_screen->plotImage(_vm->_objectsTable[15], 14, Common::Point(63, 78));
|
||||
} else if (_game->_plane._pCount <= 200) {
|
||||
_vm->_screen->plotImage(_vm->_objectsTable[15], 5, Common::Point(86, 74));
|
||||
} else if (_game->_plane._pCount <= 240) {
|
||||
_vm->_screen->plotImage(_vm->_objectsTable[15], 0, Common::Point(103, 76));
|
||||
} else if (_game->_plane._pCount <= 280) {
|
||||
_vm->_screen->plotImage(_vm->_objectsTable[15], 4, Common::Point(119, 77));
|
||||
Plane &plane = _game->_plane;
|
||||
SpriteResource *sprites = _vm->_objectsTable[15];
|
||||
|
||||
if (plane._pCount <= 40) {
|
||||
_vm->_buffer2.plotImage(sprites, 3, Common::Point(70, 74));
|
||||
} else if (plane._pCount <= 80) {
|
||||
_vm->_buffer2.plotImage(sprites, 6, Common::Point(70, 74));
|
||||
} else if (plane._pCount <= 120) {
|
||||
_vm->_buffer2.plotImage(sprites, 2, Common::Point(50, 76));
|
||||
} else if (plane._pCount <= 160) {
|
||||
_vm->_buffer2.plotImage(sprites, 14, Common::Point(63, 78));
|
||||
} else if (plane._pCount <= 200) {
|
||||
_vm->_buffer2.plotImage(sprites, 5, Common::Point(86, 74));
|
||||
} else if (plane._pCount <= 240) {
|
||||
_vm->_buffer2.plotImage(sprites, 0, Common::Point(103, 76));
|
||||
} else if (plane._pCount <= 280) {
|
||||
_vm->_buffer2.plotImage(sprites, 4, Common::Point(119, 77));
|
||||
} else {
|
||||
_vm->_screen->plotImage(_vm->_objectsTable[15], 1, Common::Point(111, 77));
|
||||
_vm->_buffer2.plotImage(sprites, 1, Common::Point(111, 77));
|
||||
}
|
||||
|
||||
if (plane._pCount == 11 || plane._pCount == 12)
|
||||
++plane._position.y;
|
||||
else if (plane._pCount >= 28)
|
||||
--plane._position.y;
|
||||
|
||||
_vm->_buffer2.plotImage(sprites, 7, plane._position);
|
||||
_vm->_buffer2.plotImage(sprites, plane._propCount, Common::Point(
|
||||
plane._position.x + 99, plane._position.y + 10));
|
||||
_vm->_buffer2.plotImage(sprites, plane._propCount, Common::Point(
|
||||
plane._position.x + 104, plane._position.y + 18));
|
||||
|
||||
if (++plane._planeCount >= 30)
|
||||
plane._planeCount = 0;
|
||||
if (++plane._propCount >= 3)
|
||||
plane._propCount = 0;
|
||||
|
||||
++plane._xCount;
|
||||
if (plane._xCount == 1)
|
||||
++plane._position.x;
|
||||
else
|
||||
plane._xCount = 0;
|
||||
}
|
||||
|
||||
void AmazonScripts::doFallCell() {
|
||||
@ -320,59 +344,63 @@ void AmazonScripts::scrollJWalk() {
|
||||
}
|
||||
|
||||
void AmazonScripts::mWhileFly() {
|
||||
_vm->_events->hideCursor();
|
||||
_vm->_screen->clearScreen();
|
||||
_vm->_screen->setBufferScan();
|
||||
_vm->_screen->fadeOut();
|
||||
_vm->_screen->_scrollX = 0;
|
||||
Screen &screen = *_vm->_screen;
|
||||
Player &player = *_vm->_player;
|
||||
EventsManager &events = *_vm->_events;
|
||||
Plane &plane = _game->_plane;
|
||||
|
||||
events.hideCursor();
|
||||
screen.clearScreen();
|
||||
screen.setBufferScan();
|
||||
screen.fadeOut();
|
||||
screen._scrollX = 0;
|
||||
|
||||
_vm->_room->buildScreen();
|
||||
_vm->copyBF2Vid();
|
||||
_vm->_screen->fadeIn();
|
||||
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->_rawPlayer = Common::Point(0, 0);
|
||||
_vm->_player->_scrollAmount = 1;
|
||||
screen._scrollRow = screen._scrollCol = 0;
|
||||
screen._scrollX = screen._scrollY = 0;
|
||||
player._rawPlayer = Common::Point(0, 0);
|
||||
player._scrollAmount = 1;
|
||||
|
||||
_game->_plane._pCount = 0;
|
||||
_game->_plane._planeCount = 0;
|
||||
_game->_plane._propCount = 0;
|
||||
_game->_plane._xCount = 0;
|
||||
_game->_plane._position = Common::Point(20, 29);
|
||||
plane._pCount = 0;
|
||||
plane._planeCount = 0;
|
||||
plane._propCount = 0;
|
||||
plane._xCount = 0;
|
||||
plane._position = Common::Point(20, 29);
|
||||
|
||||
warning("FIXME: _vbCount should be handled in NEWTIMER");
|
||||
while (true) {
|
||||
int _vbCount = 4;
|
||||
if (_vm->_screen->_scrollCol + _vm->_screen->_vWindowWidth == _vm->_room->_playFieldWidth) {
|
||||
_vm->_events->showCursor();
|
||||
return;
|
||||
}
|
||||
while (!_vm->shouldQuit() && ((screen._scrollCol + screen._vWindowWidth)
|
||||
!= _vm->_room->_playFieldWidth)) {
|
||||
events._vbCount = 4;
|
||||
screen._scrollX += player._scrollAmount;
|
||||
|
||||
_vm->_screen->_scrollX += _vm->_player->_scrollAmount;
|
||||
while (_vm->_screen->_scrollX >= TILE_WIDTH) {
|
||||
_vm->_screen->_scrollX -= TILE_WIDTH;
|
||||
++_vm->_screen->_scrollCol;
|
||||
while (screen._scrollX >= TILE_WIDTH) {
|
||||
screen._scrollX -= TILE_WIDTH;
|
||||
++screen._scrollCol;
|
||||
|
||||
_vm->_buffer1.moveBufferLeft();
|
||||
_vm->_room->buildColumn(_vm->_screen->_scrollCol + _vm->_screen->_vWindowWidth, _vm->_screen->_vWindowBytesWide);
|
||||
_vm->_room->buildColumn(screen._scrollCol + screen._vWindowWidth, screen._vWindowBytesWide);
|
||||
}
|
||||
|
||||
scrollFly();
|
||||
++_game->_plane._pCount;
|
||||
g_system->delayMillis(10);
|
||||
++plane._pCount;
|
||||
|
||||
while(_vbCount > 0) {
|
||||
while (!_vm->shouldQuit() && events._vbCount > 0) {
|
||||
// To be rewritten when NEWTIMER is done
|
||||
_vm->_events->checkForNextFrameCounter();
|
||||
_vbCount--;
|
||||
events.checkForNextFrameCounter();
|
||||
_vm->_sound->playSound(0);
|
||||
|
||||
g_system->delayMillis(10);
|
||||
events.pollEvents();
|
||||
}
|
||||
}
|
||||
|
||||
events.showCursor();
|
||||
}
|
||||
|
||||
void AmazonScripts::mWhileFall() {
|
||||
|
@ -44,6 +44,7 @@ EventsManager::EventsManager(AccessEngine *vm): _vm(vm) {
|
||||
_wheelUp = _wheelDown = false;
|
||||
_mouseCol = _mouseRow = 0;
|
||||
_cursorExitFlag = false;
|
||||
_vbCount = 0;
|
||||
}
|
||||
|
||||
EventsManager::~EventsManager() {
|
||||
@ -184,6 +185,7 @@ bool EventsManager::checkForNextFrameCounter() {
|
||||
// Check for next game frame
|
||||
uint32 milli = g_system->getMillis();
|
||||
if ((milli - _priorFrameTime) >= GAME_FRAME_TIME) {
|
||||
--_vbCount;
|
||||
++_frameCounter;
|
||||
_priorFrameTime = milli;
|
||||
|
||||
|
@ -57,6 +57,7 @@ public:
|
||||
Common::Point _mousePos;
|
||||
int _mouseCol, _mouseRow;
|
||||
bool _cursorExitFlag;
|
||||
int _vbCount;
|
||||
Common::FixedStack<Common::KeyState> _keypresses;
|
||||
public:
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user