aboutsummaryrefslogtreecommitdiff
path: root/engines/access/amazon/amazon_scripts.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2014-11-28 21:02:12 -0500
committerPaul Gilbert2014-12-12 22:51:04 -0500
commit1716cd9b30e9fdf97fcbcc854c30c0818ae90011 (patch)
tree797855565436e2ae786ad75130c582b4337c181d /engines/access/amazon/amazon_scripts.cpp
parente3322185686f268c0375bcaef93c5ef35209ebdc (diff)
downloadscummvm-rg350-1716cd9b30e9fdf97fcbcc854c30c0818ae90011.tar.gz
scummvm-rg350-1716cd9b30e9fdf97fcbcc854c30c0818ae90011.tar.bz2
scummvm-rg350-1716cd9b30e9fdf97fcbcc854c30c0818ae90011.zip
ACCESS: Major refactoring of Amazon logic into their own classes
Diffstat (limited to 'engines/access/amazon/amazon_scripts.cpp')
-rw-r--r--engines/access/amazon/amazon_scripts.cpp1514
1 files changed, 10 insertions, 1504 deletions
diff --git a/engines/access/amazon/amazon_scripts.cpp b/engines/access/amazon/amazon_scripts.cpp
index 58491250ad..d6a57d7919 100644
--- a/engines/access/amazon/amazon_scripts.cpp
+++ b/engines/access/amazon/amazon_scripts.cpp
@@ -33,28 +33,6 @@ namespace Amazon {
AmazonScripts::AmazonScripts(AccessEngine *vm) : Scripts(vm) {
_game = (AmazonEngine *)_vm;
-
- _xTrack = 0;
- _yTrack = 0;
- _zTrack = 0;
- _xCam = 0;
- _yCam = 0;
- _zCam = 0;
- _CHICKENOUTFLG = false;
-
- _pNumObj = 0;
- for (int i = 0; i < 32; i++) {
- _pImgNum[i] = 0;
- _pObject[i] = nullptr;
- _pObjX[i] = 0;
- _pObjY[i] = 0;
- _pObjZ[i] = 0;
- }
-
- for (int i = 0; i < 16; i++) {
- _pObjXl[i] = 0;
- _pObjYl[i] = 0;
- }
}
void AmazonScripts::cLoop() {
@@ -227,662 +205,31 @@ void AmazonScripts::mWhile2() {
} while (_vm->_flags[52] == 4);
}
-void AmazonScripts::initJWalk2() {
- const int JUNGLE1OBJ[7][4] = {
- {2, 470, 0, 20},
- {0, 290, 0, 50},
- {1, 210, 0, 40},
- {0, 500, 0, 30},
- {1, 550, 0, 20},
- {0, 580, 0, 60},
- {1, 650, 0, 30}
- };
- _vm->_screen->fadeOut();
- _vm->_events->hideCursor();
- _vm->_screen->clearScreen();
- _vm->_buffer2.clearBuffer();
- _vm->_screen->setBufferScan();
-
- _vm->_screen->_scrollX = _vm->_screen->_scrollY;
- _vm->_screen->_scrollCol = _vm->_screen->_scrollRow;
- _vm->_room->buildScreen();
- _vm->copyBF2Vid();
- _vm->_screen->fadeIn();
- // KEYFL = 0;
-
- _game->_plane._xCount = 2;
- _vm->_player->_scrollAmount = 5;
- _xTrack = -10;
- _yTrack = _zTrack = 0;
- _xCam = 480;
- _yCam = 0;
- _zCam = 80;
-
- _game->_timers[24]._timer = 1;
- _game->_timers[24]._initTm = 1;
- ++_game->_timers[24]._flag;
-
- _pNumObj = 7;
- for (int i = 0; i < _pNumObj; i++) {
- _pObject[i] = _vm->_objectsTable[24];
- _pImgNum[i] = JUNGLE1OBJ[i][0];
- _pObjX[i] = JUNGLE1OBJ[i][1];
- _pObjY[i] = JUNGLE1OBJ[i][2];
- _pObjZ[i] = JUNGLE1OBJ[i][3];
- _pObjXl[i] = _pObjYl[i] = 0;
- }
-
- _jCnt[0] = 0;
- _jCnt[1] = 3;
- _jCnt[2] = 5;
-
- _jungleX[0] = 50;
- _jungleX[1] = 16;
- _jungleX[2] = 93;
-}
-
-void AmazonScripts::jungleMove() {
- const static int jungleY[3] = {27, 30, 29};
- int count = 1;
- int frameOffset = 0;
-
- if (!_vm->_timers[0]._flag) {
- ++_vm->_timers[0]._flag;
- _vm->_screen->_scrollX += _vm->_player->_scrollAmount;
-
- for (int i = 0; i < 3; ++i) {
- int newJCnt = (_jCnt[i] + 1) % 8;
- _jCnt[i] = newJCnt;
- _jungleX[i] += 5;
- }
-
- frameOffset = 4;
- count = (_game->_allenFlag != 1) ? 2 : 3;
- }
-
- for (int i = 0; i < count; ++i) {
- ImageEntry ie;
- ie._flags = IMGFLAG_UNSCALED;
- ie._spritesPtr = _vm->_objectsTable[24];
- ie._frameNumber = _jCnt[i] + frameOffset;
- ie._position = Common::Point(_jungleX[i], jungleY[i]);
- ie._offsetY = jungleY[i];
-
- _vm->_images.addToList(ie);
- frameOffset += 8;
- }
-}
-
-void AmazonScripts::mWhileJWalk2() {
- Screen &screen = *_vm->_screen;
-
- initJWalk2();
-
- while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
- (screen._scrollCol + screen._vWindowWidth) != _vm->_room->_playFieldWidth) {
- _vm->_images.clear();
- _vm->_events->_vbCount = 6;
- _pImgNum[0] = _game->_plane._xCount;
-
- jungleMove();
- while (screen._scrollX >= TILE_WIDTH) {
- screen._scrollX -= TILE_WIDTH;
- ++screen._scrollCol;
- _vm->_buffer1.moveBufferLeft();
- _vm->_room->buildColumn(screen._scrollCol + screen._vWindowWidth, screen._vWindowBytesWide);
- }
-
- if (_game->_plane._xCount == 2)
- ++_game->_plane._xCount;
- else
- --_game->_plane._xCount;
-
- pan();
- scrollJWalk();
-
- while (!_vm->shouldQuit() && _vm->_events->_vbCount > 0) {
- _vm->_events->pollEventsAndWait();
- }
- }
-
- _vm->_events->showCursor();
-}
-
-void AmazonScripts::doFlyCell() {
- 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->_buffer2.plotImage(sprites, 1, Common::Point(111, 77));
- }
-
- if (plane._planeCount == 11 || plane._planeCount == 12)
- ++plane._position.y;
- else if (plane._planeCount >= 28)
- --plane._position.y;
-
- _vm->_buffer2.plotImage(sprites, 7, plane._position);
- _vm->_buffer2.plotImage(sprites, 8 + plane._propCount, Common::Point(
- plane._position.x + 99, plane._position.y + 10));
- _vm->_buffer2.plotImage(sprites, 11 + 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() {
- if (_vm->_scaleI <= 20)
- return;
-
- SpriteFrame *frame = _vm->_objectsTable[20]->getFrame(_game->_plane._planeCount / 6);
- Common::Rect r(115, 11, 115 + _vm->_screen->_scaleTable1[frame->w],
- 11 + _vm->_screen->_scaleTable1[frame->h]);
- _vm->_buffer2.sPlotF(frame, r);
-
- _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::pan() {
- _zCam += _zTrack;
- _xCam += _xTrack;
- int tx = (_xTrack << 8) / _zCam;
- _yCam += _yTrack;
- int ty = (_yTrack << 8) / _zCam;
-
- if (_vm->_timers[24]._flag != 1) {
- ++_vm->_timers[24]._flag;
- for (int i = 0; i < _pNumObj; i++) {
- _pObjZ[i] += _zTrack;
- _pObjXl[i] += (_pObjZ[i] * tx) & 0xff;
- _pObjX[i] += ((_pObjZ[i] * tx) >> 8) + (_pObjXl[i] >> 8);
- _pObjXl[i] &= 0xff;
-
- _pObjYl[i] += (_pObjZ[i] * ty) & 0xff;
- _pObjY[i] += ((_pObjZ[i] * ty) >> 8) + (_pObjYl[i] >> 8);
- _pObjYl[i] &= 0xff;
- }
- }
-
- for (int i = 0; i < _pNumObj; i++) {
- ImageEntry ie;
- ie._flags = IMGFLAG_UNSCALED;
- ie._position = Common::Point(_pObjX[i], _pObjY[i]);
- ie._offsetY = 255;
- ie._spritesPtr = _pObject[i];
- ie._frameNumber = _pImgNum[i];
-
- _vm->_images.addToList(ie);
- }
-}
-
-void AmazonScripts::scrollFly() {
- _vm->copyBF1BF2();
- _vm->_newRects.clear();
- doFlyCell();
- _vm->copyRects();
- _vm->copyBF2Vid();
-}
-
-void AmazonScripts::scrollFall() {
- _vm->copyBF1BF2();
- _vm->_newRects.clear();
- doFallCell();
- _vm->copyRects();
- _vm->copyBF2Vid();
-}
-
-void AmazonScripts::scrollJWalk() {
- _vm->copyBF1BF2();
- _vm->_newRects.clear();
- _game->plotList();
- _vm->copyRects();
- _vm->copyBF2Vid();
-}
-
-void AmazonScripts::mWhileFly() {
- 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();
- screen.fadeIn();
- _vm->_oldRects.clear();
- _vm->_newRects.clear();
-
- // KEYFLG = 0;
-
- screen._scrollRow = screen._scrollCol = 0;
- screen._scrollX = screen._scrollY = 0;
- player._rawPlayer = Common::Point(0, 0);
- player._scrollAmount = 1;
-
- plane._pCount = 0;
- plane._planeCount = 0;
- plane._propCount = 0;
- plane._xCount = 0;
- plane._position = Common::Point(20, 29);
-
- while (!_vm->shouldQuit() && !events.isKeyMousePressed() &&
- ((screen._scrollCol + screen._vWindowWidth) != _vm->_room->_playFieldWidth)) {
- events._vbCount = 4;
- screen._scrollX += player._scrollAmount;
-
- while (screen._scrollX >= TILE_WIDTH) {
- screen._scrollX -= TILE_WIDTH;
- ++screen._scrollCol;
-
- _vm->_buffer1.moveBufferLeft();
- _vm->_room->buildColumn(screen._scrollCol + screen._vWindowWidth, screen._vWindowBytesWide);
- }
-
- scrollFly();
- ++plane._pCount;
-
- while (!_vm->shouldQuit() && events._vbCount > 0) {
- // To be rewritten when NEWTIMER is done
- events.checkForNextFrameCounter();
- _vm->_sound->playSound(0);
-
- events.pollEventsAndWait();
- }
- }
-
- events.showCursor();
-}
-
-void AmazonScripts::mWhileFall() {
- Screen &screen = *_vm->_screen;
- EventsManager &events = *_vm->_events;
-
- events.hideCursor();
- screen.clearScreen();
- screen.setBufferScan();
- screen.fadeOut();
- screen._scrollX = 0;
-
- _vm->_room->buildScreen();
- _vm->copyBF2Vid();
- screen.fadeIn();
- _vm->_oldRects.clear();
- _vm->_newRects.clear();
-
- // KEYFLG = 0;
-
- screen._scrollRow = screen._scrollCol = 0;
- screen._scrollX = screen._scrollY = 0;
- _vm->_player->_scrollAmount = 3;
- _vm->_scaleI = 255;
-
- _game->_plane._xCount = 0;
- _game->_plane._planeCount = 0;
-
- while (!_vm->shouldQuit() && !events.isKeyMousePressed() &&
- (screen._scrollCol + screen._vWindowWidth != _vm->_room->_playFieldWidth)) {
- events._vbCount = 4;
- screen._scrollX += _vm->_player->_scrollAmount;
-
- while (screen._scrollX >= TILE_WIDTH) {
- screen._scrollX -= TILE_WIDTH;
- ++screen._scrollCol;
-
- _vm->_buffer1.moveBufferLeft();
- _vm->_room->buildColumn(screen._scrollCol + screen._vWindowWidth, screen._vWindowBytesWide);
- }
-
- scrollFall();
-
- while (!_vm->shouldQuit() && events._vbCount > 0) {
- events.pollEventsAndWait();
- }
- }
-
- events.showCursor();
-}
-
-void AmazonScripts::mWhileJWalk() {
- Screen &screen = *_vm->_screen;
- EventsManager &events = *_vm->_events;
- Player &player = *_vm->_player;
-
- static const int JUNGLE_OBJ[7][4] = {
- {2, 77, 0, 40},
- {0, 290, 0, 50},
- {1, 210, 0, 70},
- {0, 50, 0, 30},
- {1, 70, 0, 20},
- {0, -280, 0, 60},
- {1, -150, 0, 30},
- };
-
- screen.fadeOut();
- events.hideCursor();
- screen.clearScreen();
- _vm->_buffer2.clearBuffer();
- screen.setBufferScan();
- screen._scrollX = 0;
-
- // Build the initial jungle scene and fade it in
- _vm->_room->buildScreen();
- _vm->copyBF2Vid();
- screen.fadeIn();
-
- // Set up the player to walk horizontally
- player._xFlag = 1;
- player._yFlag = 0;
- player._moveTo.x = 160;
- player._playerMove = true;
-
- _game->_plane._xCount = 2;
- _xTrack = 10;
- _yTrack = _zTrack = 0;
- _xCam = 480;
- _yCam = 0;
- _zCam = 80;
-
- TimerEntry *te = &_vm->_timers[24];
- te->_initTm = te->_timer = 1;
- te->_flag++;
-
- _pNumObj = 7;
- for (int i = 0; i < _pNumObj; i++) {
- _pObject[i] = _vm->_objectsTable[24];
- _pImgNum[i] = JUNGLE_OBJ[i][0];
- _pObjX[i] = JUNGLE_OBJ[i][1];
- _pObjY[i] = JUNGLE_OBJ[i][2];
- _pObjZ[i] = JUNGLE_OBJ[i][3];
- _pObjXl[i] = _pObjYl[i] = 0;
- }
-
- while (!_vm->shouldQuit() && !events.isKeyMousePressed() && (player._xFlag != 2)) {
- _vm->_images.clear();
- events._vbCount = 6;
-
- _pImgNum[0] = _game->_plane._xCount;
- if (_game->_plane._xCount == 2)
- ++_game->_plane._xCount;
- else
- --_game->_plane._xCount;
-
- player.checkMove();
- player.checkScroll();
- pan();
- scrollJWalk();
-
- while (!_vm->shouldQuit() && events._vbCount > 0) {
- events.pollEventsAndWait();
- }
- }
-
- _vm->_images.clear();
- events.showCursor();
-}
-
-void AmazonScripts::mWhileDoOpen() {
- Screen &screen = *_vm->_screen;
- EventsManager &events = *_vm->_events;
-
- screen.setBufferScan();
- events.hideCursor();
- screen.forceFadeOut();
- _game->_skipStart = false;
- if (_vm->_conversation != 2) {
- // Cutscene at start of chapter 1
- screen.setPanel(3);
- _game->startChapter(1);
- _game->establishCenter(0, 1);
- }
-
- Resource *data = _vm->_files->loadFile(1, 0);
- _vm->_objectsTable[1] = new SpriteResource(_vm, data);
- delete data;
-
- _vm->_files->_setPaletteFlag = false;
- _vm->_files->loadScreen(1, 2);
- _vm->_buffer2.copyFrom(*_vm->_screen);
- _vm->_buffer1.copyFrom(*_vm->_screen);
-
- // Load animation data
- _vm->_animation->freeAnimationData();
- Resource *animResource = _vm->_files->loadFile(1, 1);
- _vm->_animation->loadAnimations(animResource);
- delete animResource;
-
- _xTrack = 8;
- _yTrack = -3;
- _zTrack = 0;
- _xCam = _yCam = 0;
- _zCam = 270;
- _vm->_timers[24]._timer = _vm->_timers[24]._initTm = 1;
- ++_vm->_timers[24]._flag;
- _vm->_timers.updateTimers();
-
- _pNumObj = 10;
- for (int i = 0; i < _pNumObj; i++) {
- _pObject[i] = _vm->_objectsTable[1];
- _pImgNum[i] = OPENING_OBJS[i][0];
- _pObjX[i] = OPENING_OBJS[i][1];
- _pObjY[i] = OPENING_OBJS[i][2];
- _pObjZ[i] = OPENING_OBJS[i][3];
- _pObjXl[i] = _pObjYl[i] = 0;
- }
-
- _vm->_oldRects.clear();
- _vm->_newRects.clear();
- Animation *anim = _vm->_animation->setAnimation(0);
- _vm->_animation->setAnimTimer(anim);
- anim = _vm->_animation->setAnimation(1);
- _vm->_animation->setAnimTimer(anim);
- _vm->_sound->newMusic(10, 0);
-
- bool startFl = false;
- while (!_vm->shouldQuit()) {
- _vm->_images.clear();
- _vm->_animation->animate(0);
- _vm->_animation->animate(1);
- pan();
- _vm->_buffer2.copyFrom(_vm->_buffer1);
- _vm->_newRects.clear();
- _game->plotList();
- _vm->copyBlocks();
- if (!startFl) {
- startFl = true;
- screen.forceFadeIn();
- }
-
- events.pollEventsAndWait();
-
- if (events._leftButton || events._rightButton || events._keypresses.size() > 0) {
- _game->_skipStart = true;
- _vm->_sound->newMusic(10, 1);
-
- events.debounceLeft();
- events.zeroKeys();
- break;
- }
-
- if (_xCam > 680) {
- events._vbCount = 125;
-
- while(!_vm->shouldQuit() && !events.isKeyMousePressed() && events._vbCount > 0) {
- events.pollEventsAndWait();
- }
- break;
- }
- }
-
- events.showCursor();
- _vm->_buffer2.copyFrom(*_vm->_screen);
- _vm->_buffer1.copyFrom(*_vm->_screen);
-
- _vm->freeCells();
- _vm->_oldRects.clear();
- _vm->_newRects.clear();
- _vm->_numAnimTimers = 0;
- _vm->_images.clear();
-
- if (_vm->_conversation == 2) {
- // Cutscene at end of Chapter 6
- Resource *spriteData = _vm->_files->loadFile(28, 37);
- _vm->_objectsTable[28] = new SpriteResource(_vm, spriteData);
- delete spriteData;
-
- _vm->_animation->freeAnimationData();
- animResource = _vm->_files->loadFile(28, 38);
- _vm->_animation->loadAnimations(animResource);
- delete animResource;
- }
-}
-
-void AmazonScripts::scrollRiver() {
- _vm->copyBF1BF2();
- _vm->_newRects.clear();
- _vm->_buffer2.plotImage(_vm->_objectsTable[33], 0, Common::Point(66, 30));
- _vm->plotList();
- _vm->copyRects();
- _vm->copyBF2Vid();
-}
-
-void AmazonScripts::mWhileDownRiver() {
- _vm->_events->hideCursor();
- _vm->_screen->setDisplayScan();
- _vm->_screen->clearScreen();
- _vm->_screen->savePalette();
-
- _vm->_files->loadScreen(95, 4);
- _vm->_buffer2.copyFrom(*_vm->_screen);
- _vm->_screen->restorePalette();
- _vm->_screen->setPalette();
- _vm->_screen->setBufferScan();
- _vm->_screen->_scrollX = 0;
- _vm->_room->buildScreen();
- _vm->copyBF2Vid();
-
- _vm->_player->_scrollAmount = 2;
- _vm->_destIn = &_vm->_buffer2;
- _xTrack = -7;
- _yTrack = _zTrack = 0;
- _xCam = _yCam = 0;
- _zCam = 80;
-
- _game->_timers[24]._timer = 1;
- _game->_timers[24]._initTm = 1;
- ++_game->_timers[24]._flag;
-
- _pNumObj = 14;
- for (int i = 0; i <_pNumObj; i++) {
- _pObject[i] = _vm->_objectsTable[33];
- _pImgNum[i] = DOWNRIVEROBJ[i][0];
- _pObjX[i] = DOWNRIVEROBJ[i][1];
- _pObjY[i] = DOWNRIVEROBJ[i][2];
- _pObjZ[i] = DOWNRIVEROBJ[i][3];
- _pObjXl[i] = _pObjYl[i] = 0;
- }
-
- _game->_timers[3]._timer = 200;
- _game->_timers[3]._initTm = 200;
- ++_game->_timers[3]._flag;
- _game->_timers[4]._timer = 350;
- _game->_timers[4]._initTm = 350;
- ++_game->_timers[4]._flag;
-
- while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
- (_vm->_screen->_scrollCol + _vm->_screen->_vWindowWidth != _vm->_room->_playFieldWidth)) {
- _vm->_images.clear();
- _vm->_events->_vbCount = 6;
-
- _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);
- }
-
- pan();
- scrollRiver();
-
- if (!_game->_timers[3]._flag) {
- ++_game->_timers[3]._flag;
- _vm->_sound->playSound(1);
- } else if (!_game->_timers[4]._flag) {
- ++_game->_timers[4]._flag;
- _vm->_sound->playSound(0);
- }
-
- while (!_vm->shouldQuit() && _vm->_events->_vbCount > 0) {
- _vm->_events->pollEventsAndWait();
- }
- }
-
- _vm->_events->showCursor();
-}
-
void AmazonScripts::mWhile(int param1) {
switch(param1) {
case 1:
mWhile1();
break;
case 2:
- mWhileFly();
+ _game->_plane.mWhileFly();
break;
case 3:
- mWhileFall();
+ _game->_plane.mWhileFall();
break;
case 4:
- mWhileJWalk();
+ _game->_jungle.mWhileJWalk();
break;
case 5:
- mWhileDoOpen();
+ _game->_opening.mWhileDoOpen();
break;
case 6:
- mWhileDownRiver();
+ _game->_river.mWhileDownRiver();
break;
case 7:
mWhile2();
break;
case 8:
- mWhileJWalk2();
+ _game->_jungle.mWhileJWalk2();
break;
default:
break;
@@ -899,143 +246,6 @@ void AmazonScripts::loadBackground(int param1, int param2) {
_vm->_screen->forceFadeIn();
}
-void AmazonScripts::doCast(int param1) {
- static const int END_OBJ[26][4] = {
- { 0, 118, 210, 10},
- { 1, 38, 250, 10},
- { 2, 38, 280, 10},
- { 3, 38, 310, 10},
- { 4, 38, 340, 10},
- { 5, 38, 370, 10},
- { 6, 38, 400, 10},
- { 7, 38, 430, 10},
- { 8, 38, 460, 10},
- { 9, 38, 490, 10},
- {10, 38, 520, 10},
- {11, 38, 550, 10},
- {12, 38, 580, 10},
- {13, 38, 610, 10},
- {14, 38, 640, 10},
- {15, 38, 670, 10},
- {16, 38, 700, 10},
- {17, 38, 730, 10},
- {18, 38, 760, 10},
- {19, 38, 790, 10},
- {20, 95, 820, 10},
- {21, 94, 850, 10},
- {22, 96, 880, 10},
- {23, 114, 910, 10},
- {24, 114, 940, 10},
- {25, 110, 970, 10}
- };
-
- static const int END_OBJ1[4][4] = {
- {0, 40, 1100, 10},
- {2, 11, 1180, 10},
- {1, 154, 1180, 10},
- {3, 103, 1300, 10}
- };
-
- _vm->_screen->setDisplayScan();
- _vm->_events->hideCursor();
- _vm->_screen->forceFadeOut();
- _vm->_screen->_clipHeight = 173;
- _vm->_screen->clearScreen();
- _game->_chapter = 16;
- _game->tileScreen();
- _game->updateSummary(param1);
- _vm->_screen->setPanel(3);
- _game->_chapter = 14;
-
- Resource *spriteData = _vm->_files->loadFile(91, 0);
- _vm->_objectsTable[0] = new SpriteResource(_vm, spriteData);
- delete spriteData;
- spriteData = _vm->_files->loadFile(91, 1);
- _vm->_objectsTable[1] = new SpriteResource(_vm, spriteData);
- delete spriteData;
-
- _vm->_files->_setPaletteFlag = false;
- _vm->_files->loadScreen(58, 1);
- _vm->_buffer2.copyFrom(*_vm->_screen);
- _vm->_buffer1.copyFrom(*_vm->_screen);
-
- _xTrack = 0;
- _yTrack = -6;
- _zTrack = 0;
- _xCam = _yCam = 0;
- _zCam = 60;
-
- _game->_timers[24]._timer = 1;
- _game->_timers[24]._initTm = 1;
- ++_game->_timers[24]._flag;
-
- _pNumObj = 26;
- for (int i = 0; i < _pNumObj; i++) {
- _pObject[i] = _vm->_objectsTable[0];
- _pImgNum[i] = END_OBJ[i][0];
- _pObjX[i] = END_OBJ[i][1];
- _pObjY[i] = END_OBJ[i][2];
- _pObjZ[i] = END_OBJ[i][3];
- _pObjXl[i] = _pObjYl[i] = 0;
- }
-
- _pNumObj = 4;
- for (int i = 0; i < _pNumObj; i++) {
- _pObject[26 + i] = _vm->_objectsTable[1];
- _pImgNum[26 + i] = END_OBJ1[i][0];
- _pObjX[26 + i] = END_OBJ1[i][1];
- _pObjY[26 + i] = END_OBJ1[i][2];
- _pObjZ[26 + i] = END_OBJ1[i][3];
- _pObjXl[26 + i] = _pObjYl[26 + i] = 0;
- }
-
- _vm->_oldRects.clear();
- _vm->_newRects.clear();
- _vm->_numAnimTimers = 0;
-
- _vm->_sound->newMusic(58, 0);
- _vm->_screen->forceFadeIn();
-
- while (!_vm->shouldQuit()) {
- _vm->_images.clear();
- pan();
- _vm->_buffer2.copyFrom(_vm->_buffer1);
- _vm->_newRects.clear();
- _game->plotList();
- _vm->copyBlocks();
-
- _vm->_events->pollEvents();
- if (_vm->_events->isKeyMousePressed())
- break;
-
- if (_yCam < -7550) {
- _vm->_events->_vbCount = 50;
-
- while(!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() && _vm->_events->_vbCount > 0) {
- _vm->_events->pollEventsAndWait();
- }
-
- while (!_vm->shouldQuit() && !_vm->_sound->checkMidiDone())
- _vm->_events->pollEventsAndWait();
-
- break;
- }
- }
-
- _vm->_sound->newMusic(58, 1);
- _vm->_events->showCursor();
-
- _vm->freeCells();
- _vm->_oldRects.clear();
- _vm->_newRects.clear();
- _vm->_numAnimTimers = 0;
- _vm->_images.clear();
- _vm->_screen->forceFadeOut();
-
- _vm->quitGame();
- _vm->_events->pollEvents();
-}
-
void AmazonScripts::setInactive() {
_game->_rawInactiveX = _vm->_player->_rawPlayer.x;
_game->_rawInactiveY = _vm->_player->_rawPlayer.y;
@@ -1044,243 +254,6 @@ void AmazonScripts::setInactive() {
mWhile(_game->_rawInactiveY);
}
-void AmazonScripts::plotTorchSpear(int indx, const int *&buf) {
- int idx = indx;
-
- ImageEntry ie;
- ie._flags = IMGFLAG_UNSCALED;
- ie._spritesPtr = _vm->_objectsTable[62];
- ie._frameNumber = buf[(idx / 2)];
- ie._position = Common::Point(_game->_pitPos.x + buf[(idx / 2) + 1], _game->_pitPos.y + buf[(idx / 2) + 2]);
- ie._offsetY = 255;
- _vm->_images.addToList(ie);
-}
-
-void AmazonScripts::plotPit(int indx, const int *&buf) {
- int idx = indx;
- ImageEntry ie;
- ie._flags = IMGFLAG_UNSCALED;
- ie._spritesPtr = _vm->_objectsTable[62];
- ie._frameNumber = buf[(idx / 2)];
- ie._position = Common::Point(_game->_pitPos.x, _game->_pitPos.y);
- ie._offsetY = _game->_pitPos.y;
- _vm->_images.addToList(ie);
-
- _vm->_player->_rawPlayer = _game->_pitPos;
- if (_vm->_inventory->_inv[76]._value == 1) {
- idx = _game->_torchCel;
- buf = Amazon::TORCH;
- _vm->_timers[14]._flag = 1;
- idx += 6;
- if (buf[idx / 2] == -1)
- idx = 0;
- _game->_torchCel = idx;
- plotTorchSpear(idx, buf);
- } else if (!_game->_stabFl && (_vm->_inventory->_inv[78]._value == 1)) {
- idx = 0;
- buf = Amazon::SPEAR;
- plotTorchSpear(idx, buf);
- }
-}
-
-int AmazonScripts::antHandleRight(int indx, const int *&buf) {
- int retval = indx;
- if (_game->_pitDirection == NONE) {
- _game->_pitDirection = UP;
- _game->_pitPos.y = 127;
- }
- retval = _game->_pitCel;
- buf = Amazon::PITWALK;
- if (_game->_pitPos.x < 230) {
- if (retval == 0) {
- retval = 48;
- _game->_pitPos.y = 127;
- }
- retval -= 6;
- _game->_pitPos.x -= buf[(retval / 2) + 1];
- _game->_pitPos.y -= buf[(retval / 2) + 2];
- _game->_pitCel = retval;
- }
- return retval;
-}
-
-int AmazonScripts::antHandleLeft(int indx, const int *&buf) {
- int retval = indx;
- if (_game->_pitDirection == UP) {
- _game->_pitDirection = NONE;
- _game->_pitPos.y = 127;
- }
- retval = _game->_pitCel;
- buf = Amazon::PITWALK;
- retval += 6;
- if (buf[retval / 2] == -1) {
- retval = 0;
- _game->_pitPos.y = 127;
- }
- _game->_pitPos.x += buf[(retval / 2) + 1];
- _game->_pitPos.y += buf[(retval / 2) + 2];
- _game->_pitCel = retval;
-
- return retval;
-}
-
-int AmazonScripts::antHandleStab(int indx, const int *&buf) {
- int retval = indx;
- if (_vm->_inventory->_inv[78]._value != 1) {
- if (_game->_stabFl) {
- buf = Amazon::PITSTAB;
- retval = _game->_stabCel;
- if (_game->_timers[13]._flag == 0) {
- _game->_timers[13]._flag = 1;
- retval += 6;
- if (Amazon::PITSTAB[retval] == -1) {
- _game->_stabFl = false;
- _game->_pitCel = 0;
- _game->_pitPos.y = 127;
- retval = 0;
- buf = Amazon::PITWALK;
- } else {
- _game->_pitPos.x += buf[(retval / 2) + 1];
- _game->_pitPos.y += buf[(retval / 2) + 2];
- _game->_pitCel = retval;
- }
- }
- } else {
- _game->_stabFl = true;
- _game->_pitCel = 0;
- retval = 0;
- _game->_stabCel = 0;
- int dist = _game->_pitPos.x - _game->_antPos.x;
- if (_game->_antEatFl && !_game->_antDieFl && (dist <= 80)) {
- _game->_antDieFl = true;
- _game->_antCel = 0;
- _game->_antPos.y = 123;
- _vm->_sound->playSound(1);
- }
- }
- }
- return retval;
-}
-
-void AmazonScripts::ANT() {
- _game->_antDirection = NONE;
- if (_game->_aniFlag != 1) {
- _game->_aniFlag = 1;
- _game->_antCel = 0;
- _game->_torchCel = 0;
- _game->_pitCel = 0;
-
- _game->_timers[15]._timer = 16;
- _game->_timers[15]._initTm = 16;
- _game->_timers[15]._flag = 1;
-
- _game->_timers[13]._timer = 5;
- _game->_timers[13]._initTm = 5;
- _game->_timers[13]._flag = 1;
-
- _game->_timers[14]._timer = 10;
- _game->_timers[14]._initTm = 10;
- _game->_timers[14]._flag = 1;
-
- _game->_antPos = Common::Point(-40, 123);
- _game->_antDieFl = _game->_antEatFl = false;
- _game->_stabFl = false;
- _game->_pitPos = Common::Point(_vm->_player->_rawPlayer.x, 127);
- }
-
- const int *buf = nullptr;
- if (_game->_antDieFl) {
- buf = Amazon::ANTDIE;
- } else if (_game->_antEatFl) {
- buf = Amazon::ANTEAT;
- } else if (_game->_antPos.x > 120 && _vm->_flags[198] == 1) {
- _game->_antEatFl = true;
- _vm->_flags[235] = 1;
- _game->_antCel = 0;
- buf = Amazon::ANTEAT;
- } else {
- buf = Amazon::ANTWALK;
- if (_vm->_inventory->_inv[76]._value == 1)
- _game->_antDirection = UP;
- }
-
- int idx = _game->_antCel;
- if (_game->_timers[15]._flag == 0) {
- _game->_timers[15]._flag = 1;
- if (_game->_antDirection == UP) {
- if (_game->_antPos.x > 10) {
- if (idx == 0)
- idx = 36;
- else
- idx -= 6;
-
- _game->_antPos = Common::Point(buf[(idx / 2) + 1], buf[(idx / 2) + 2]);
- _game->_antCel = idx;
- }
- } else {
- idx += 6;
- if (buf[(idx / 2)] != -1) {
- _game->_antPos = Common::Point(buf[(idx / 2) + 1], buf[(idx / 2) + 2]);
- _game->_antCel = idx;
- } else if (!_game->_antDieFl) {
- idx = 0;
- _game->_antPos = Common::Point(buf[(idx / 2) + 1], buf[(idx / 2) + 2]);
- _game->_antCel = idx;
- } else {
- idx -= 6;
- if (_game->_flags[200] == 0)
- _game->_flags[200] = 1;
- }
- }
- }
-
- ImageEntry ie;
- ie._flags = IMGFLAG_UNSCALED;
- ie._spritesPtr = _vm->_objectsTable[61];
- ie._frameNumber = buf[(idx / 2)];
- ie._position = Common::Point(_game->_antPos.x, _game->_antPos.y);
- ie._offsetY = _game->_antPos.y - 70;
- _vm->_images.addToList(ie);
- _game->_antCel = idx;
-
- if (_game->_flags[196] != 1) {
- idx = _game->_pitCel;
- if (_game->_stabFl == 1) {
- idx = antHandleStab(idx, buf);
- } else {
- buf = Amazon::PITWALK;
- if (_game->_timers[13]._flag == 0) {
- _game->_timers[13]._flag = 1;
- _vm->_events->pollEvents();
- if (_vm->_events->_leftButton) {
- Common::Point pt = _vm->_events->calcRawMouse();
- if (pt.x < _game->_pitPos.x)
- idx = antHandleLeft(idx, buf);
- else if (pt.x > _game->_pitPos.x)
- idx = antHandleRight(idx, buf);
- } else {
- buf = Amazon::PITWALK;
- if (_vm->_player->_playerDirection == UP)
- idx = antHandleStab(idx, buf);
- else if (_vm->_player->_playerDirection == LEFT)
- idx = antHandleLeft(idx, buf);
- else if (_vm->_player->_playerDirection == RIGHT)
- idx = antHandleRight(idx, buf);
- }
- }
- }
- plotPit(idx, buf);
- }
-
- if (!_game->_antDieFl) {
- int dist = _game->_pitPos.x - _game->_antPos.x;
- if ((_game->_antEatFl && (dist <= 45)) || (!_game->_antEatFl && (dist <= 80))) {
- _game->_flags[199] = 1;
- _game->_aniFlag = 0;
- }
- }
-}
-
void AmazonScripts::boatWalls(int param1, int param2) {
if (param1 == 1)
_vm->_room->_plotter._walls[42] = Common::Rect(96, 27, 96 + 87, 27 + 42);
@@ -1339,473 +312,6 @@ void AmazonScripts::plotInactive() {
_vm->_images.addToList(_game->_inactive);
}
-void AmazonScripts::setRiverPan() {
- static const int RIVER1OBJ[23][4] = {
- {18, -77, 0, 30},
- {18, -325, 0, 20},
- {18, -450, 0, 15},
- {18, -1250, 0, 25},
- {19, -130, 0, 20},
- {19, -410, 0, 15},
- {19, -710, 0, 25},
- {19, -1510, 0, 20},
- {20, -350, 0, 30},
- {20, -695, 0, 25},
- {20, -990, 0, 20},
- {20, -1300, 0, 25},
- {20, -1600, 0, 30},
- {21, -370, 0, 20},
- {21, -650, 0, 30},
- {21, -1215, 0, 40},
- {21, -1815, 0, 35},
- {22, -380, 0, 25},
- {22, -720, 0, 35},
- {22, -1020, 0, 30},
- {22, -1170, 0, 25},
- {22, -1770, 0, 35},
- {23, -500, 63, 20}
- };
-
- int delta = (_vm->_screen->_scrollCol * 16) + _vm->_screen->_scrollX;
-
- _xTrack = 9;
- _yTrack = _zTrack = 0;
- _xCam = 160;
- _yCam = 0;
- _zCam = 80;
-
- _game->_timers[24]._timer = 1;
- _game->_timers[24]._initTm = 1;
- ++_game->_timers[24]._flag;
-
- _pNumObj = 23;
- for (int i = 0; i < _pNumObj; i++) {
- _pObject[i] = _vm->_objectsTable[45];
- _pImgNum[i] = RIVER1OBJ[i][0];
- _pObjX[i] = RIVER1OBJ[i][1] + delta;
- _pObjY[i] = RIVER1OBJ[i][2];
- _pObjZ[i] = RIVER1OBJ[i][3];
- _pObjXl[i] = _pObjYl[i] = 0;
- }
-}
-
-void AmazonScripts::initRiver() {
- static const int RIVERVXTBL[3] = {6719, 7039, 8319};
-
- _vm->_events->centerMousePos();
- _vm->_events->restrictMouse();
- _vm->_screen->setDisplayScan();
- _vm->_screen->clearScreen();
- _vm->_screen->savePalette();
- _vm->_screen->forceFadeOut();
-
- _vm->_files->_setPaletteFlag = false;
- _vm->_files->loadScreen(95, 4);
- _vm->_buffer2.copyFrom(*_vm->_screen);
-
- _vm->_screen->restorePalette();
- _vm->_screen->setBufferScan();
- _vm->_destIn = &_vm->_buffer2;
- _vm->_room->roomMenu();
-
- if (_game->_saveRiver) {
- // Restoring a savegame, so set properties from saved fields
- _vm->_screen->_scrollRow = _vm->_rScrollRow;
- _vm->_screen->_scrollCol = _vm->_rScrollCol;
- _vm->_screen->_scrollX = _vm->_rScrollX;
- _vm->_screen->_scrollY = _vm->_rScrollY;
- } else {
- // Set initial scene state
- _vm->_screen->_scrollRow = 0;
- _vm->_screen->_scrollCol = 140;
- _vm->_screen->_scrollX = 0;
- _vm->_screen->_scrollY = 0;
- }
-
- _vm->_room->buildScreen();
- _vm->copyBF2Vid();
- _vm->_screen->forceFadeIn();
-
- if (_game->_saveRiver) {
- // Restore draw rects from savegame
- _vm->_oldRects.resize(_vm->_rOldRectCount);
- _vm->_newRects.resize(_vm->_rNewRectCount);
- // KEYFLG = _vm->_rKeyFlag
- } else {
- // Reset draw rects
- _vm->_oldRects.clear();
- _vm->_newRects.clear();
- // KEYFLG = 0
- }
-
- _vm->_player->_scrollAmount = 2;
- setRiverPan();
- _game->_timers[3]._timer = 1;
- _game->_timers[3]._initTm = 1;
- ++_game->_timers[3]._flag;
-
- _game->_canoeFrame = 0;
- _game->_mapPtr = (const byte *)MAPTBL[_game->_riverFlag] + 1;
- if (_game->_saveRiver) {
- _game->_mapPtr--;
- _game->_mapPtr += _game->_mapOffset;
- } else {
- _screenVertX = RIVERVXTBL[_game->_riverFlag] - 320;
- _game->_canoeLane = 3;
- _game->_hitCount = 0;
- _game->_hitSafe = 0;
- _game->_canoeYPos = 71;
- }
-
- _game->_riverIndex = _game->_riverFlag;
- _game->_topList = RIVEROBJECTTBL[_game->_riverIndex];
- updateObstacles();
- riverSetPhysX();
- _game->_canoeDir = 0;
- _game->_deathFlag = 0;
- _game->_deathCount = 0;
-
- _game->_timers[11]._timer = 1200;
- _game->_timers[11]._initTm = 1200;
- ++_game->_timers[11]._flag;
- _game->_timers[12]._timer = 1500;
- _game->_timers[12]._initTm = 1500;
- ++_game->_timers[12]._flag;
-
- _game->_maxHits = 2 - _game->_riverFlag;
- _game->_saveRiver = false;
-}
-
-void AmazonScripts::resetPositions() {
- riverSetPhysX();
- int val = (_vm->_screen->_scrollCol + 1 - _game->_oldScrollCol) * 16;
- if (val > 256) {
- val &= 0x7F;
- val |= 0x80;
- }
-
- for (int i = 0; i < _pNumObj; i++)
- _pObjX[i] += val;
-}
-
-void AmazonScripts::checkRiverPan() {
- int val = (_vm->_screen->_scrollCol + 20) * 16;
-
- for (int i = 0; i < _pNumObj; i++) {
- if (_pObjX[i] < val)
- return;
- }
-
- setRiverPan();
-}
-
-bool AmazonScripts::riverJumpTest() {
- if (_vm->_screen->_scrollCol == 120 || _vm->_screen->_scrollCol == 60 || _vm->_screen->_scrollCol == 0) {
- int val = _game->_mapPtr[0];
- ++_game->_mapPtr;
- if (val == 0xFF)
- return true;
- _game->_oldScrollCol = _vm->_screen->_scrollCol;
-
- if (val == 0) {
- _vm->_screen->_scrollCol = 139;
- _vm->_screen->_scrollX = 14;
- _vm->_room->buildScreen();
- resetPositions();
- return false;
- }
- } else if (_vm->_screen->_scrollCol == 105) {
- int val1 = _game->_mapPtr[1];
- int val2 = _game->_mapPtr[2];
- _game->_mapPtr += 3;
- if (_game->_canoeLane < 3) {
- if (val1 != 0) {
- _game->_deathFlag = true;
- _game->_deathCount = 300;
- _game->_deathType = val2;
- }
- } else {
- if (val1 != 1) {
- _game->_deathFlag = true;
- _game->_deathCount = 300;
- _game->_deathType = val2;
- }
- _game->_oldScrollCol = _vm->_screen->_scrollCol;
- _vm->_screen->_scrollCol = 44;
- _vm->_screen->_scrollX = 14;
- _vm->_room->buildScreen();
- resetPositions();
- return false;
- }
- }
-
- _vm->_screen->_scrollX = 14;
- --_vm->_screen->_scrollCol;
- _vm->_buffer1.moveBufferRight();
- _vm->_room->buildColumn(_vm->_screen->_scrollCol, 0);
- checkRiverPan();
- return false;
-}
-
-void AmazonScripts::riverSound() {
- if (_game->_timers[11]._flag == 0) {
- ++_game->_timers[11]._flag;
- _vm->_sound->playSound(2);
- }
-
- if (_game->_timers[12]._flag == 0) {
- ++_game->_timers[12]._flag;
- _vm->_sound->playSound(3);
- }
-
- if ((_xCam >= 1300) && (_xCam <= 1320))
- _vm->_sound->playSound(1);
-}
-
-void AmazonScripts::moveCanoe() {
- Screen &screen = *_vm->_screen;
- EventsManager &events = *_vm->_events;
- Common::Point pt = events.calcRawMouse();
-
- // Do an event polling
- _vm->_canSaveLoad = true;
- events.pollEvents();
- _vm->_canSaveLoad = false;
- if (_vm->_room->_function == FN_CLEAR1)
- return;
-
- if (_game->_canoeDir) {
- // Canoe movement in progress
- moveCanoe2();
- } else {
- if (events._leftButton && pt.y >= 140) {
- if (pt.x < RMOUSE[8][0]) {
- // Disk icon wasn't clicked
- printString(BAR_MESSAGE);
- } else {
- // Clicked on the Disc icon
- _game->_saveRiver = true;
- _game->_rScrollRow = screen._scrollRow;
- _game->_rScrollCol = screen._scrollCol;
- _game->_rScrollX = screen._scrollX;
- _game->_rScrollY = screen._scrollY;
- _game->_mapOffset = _game->_mapPtr - MAPTBL[_game->_riverFlag];
-
- // Show the ScummVM menu
- _vm->_room->handleCommand(9);
-
- if (_vm->_room->_function != FN_CLEAR1) {
- _game->_saveRiver = false;
- _vm->_room->buildScreen();
- _vm->copyBF2Vid();
- }
- }
- } else if ((events._leftButton && pt.y <= _game->_canoeYPos) ||
- (!events._leftButton && _vm->_player->_move == UP)) {
- // Move canoe up
- if (_game->_canoeLane > 0) {
- _game->_canoeDir = -1;
- _game->_canoeMoveCount = 0;
-
- moveCanoe2();
- }
- } else if (events._leftButton || _vm->_player->_move == DOWN) {
- // Move canoe down
- if (_game->_canoeLane < 7) {
- _game->_canoeDir = 1;
- _game->_canoeMoveCount = 0;
-
- moveCanoe2();
- }
- }
- }
-}
-
-void AmazonScripts::moveCanoe2() {
- _game->_canoeYPos += _game->_canoeDir;
-
- if (++_game->_canoeMoveCount == 5) {
- _game->_canoeLane += _game->_canoeDir;
- _game->_canoeDir = 0;
- }
-}
-
-void AmazonScripts::updateObstacles() {
- RiverStruct *cur;
- for (cur = _game->_topList; cur < RIVEROBJECTTBL[_game->_riverIndex + 1]; ++cur) {
- int val = cur->_field1 + cur->_field3 - 1;
- if (val < _screenVertX)
- break;
-
- if (cur->_field3 < (_game->_screenVirtX + 319)) {
- _game->_topList = cur;
- _game->_botList = cur;
-
- while (cur < RIVEROBJECTTBL[_game->_riverIndex + 1]) {
- ++cur;
- val = cur->_field1 + cur->_field3 - 1;
- if (val < _screenVertX || (cur->_field3 >= (_game->_screenVirtX + 319)))
- break;
-
- _game->_botList = cur;
- }
-
- return;
- }
- }
-
- cur = _game->_topList;
- cur--;
- _game->_botList = cur;
-}
-
-void AmazonScripts::riverSetPhysX() {
- int val = (_vm->_screen->_scrollCol * 16) + _vm->_screen->_scrollX;
- RiverStruct *cur = _game->_topList;
- while (cur <= _game->_botList) {
- cur[0]._field5 = val - (_screenVertX - cur[0]._field3);
- ++cur;
- }
-}
-
-bool AmazonScripts::checkRiverCollide() {
- if (_game->_hitSafe)
- return false;
-
- _game->_canoeVXPos = _screenVertX + 170;
-
- for (RiverStruct *si = _game->_topList; si <= _game->_botList; ++si) {
- if (si[0]._lane < _game->_canoeLane)
- continue;
-
- if ((si[0]._lane == _game->_canoeLane) || (si[0]._lane == _game->_canoeLane + 1)) {
- if (si[0]._field1 + si[0]._field3 - 1 >= _game->_canoeVXPos) {
- if (_game->_canoeVXPos + 124 >= si[0]._field3) {
- _vm->_sound->playSound(4);
- return true;
- }
- }
- }
- }
- return false;
-}
-
-void AmazonScripts::plotRiver() {
- if (_vm->_timers[3]._flag == 0) {
- ++_vm->_timers[3]._flag;
- if (_game->_canoeFrame == 12)
- _game->_canoeFrame = 0;
- else
- ++_game->_canoeFrame;
- }
-
- ImageEntry ie;
- ie._flags = IMGFLAG_UNSCALED;
- ie._spritesPtr = _vm->_objectsTable[45];
- ie._frameNumber = _game->_canoeFrame;
- ie._position.x = (_vm->_screen->_scrollCol * 16) + _vm->_screen->_scrollX + 160;
- ie._position.y = _game->_canoeYPos - 41;
- ie._offsetY = 41;
- _vm->_images.addToList(ie);
-
- RiverStruct *cur = _game->_topList;
- while (cur <= _game->_botList) {
- if (cur[0]._id != -1) {
- ie._flags = IMGFLAG_UNSCALED;
- ie._spritesPtr = _vm->_objectsTable[45];
- ie._frameNumber = 0;
- ie._position.x = cur[0]._field5;
- int val = (cur[0]._lane * 5) + 56;
- ie._position.y = val - cur[0]._field8;
- ie._offsetY = cur[0]._field8;
- _vm->_images.addToList(ie);
- }
- ++cur;
- }
-}
-
-void AmazonScripts::scrollRiver1() {
- _vm->copyBF1BF2();
- _vm->_newRects.clear();
- plotRiver();
- _vm->plotList();
- _vm->copyRects();
- _vm->copyBF2Vid();
-}
-
-void AmazonScripts::RIVER() {
- static const int RIVERDEATH[5] = {22, 23, 24, 25, 26};
-
- initRiver();
- _vm->_events->showCursor();
-
- while (!_vm->shouldQuit()) {
- _vm->_events->_vbCount = 4;
-
-// int bx = _vm->_player->_scrollAmount - _screenVertX;
- if (_vm->_screen->_scrollX == 0) {
- _vm->_sound->midiRepeat();
- if (riverJumpTest()) {
- _CHICKENOUTFLG = false;
- return;
- }
- } else {
- _vm->_screen->_scrollX -= _vm->_player->_scrollAmount;
- }
-
- if (_CHICKENOUTFLG) {
- _CHICKENOUTFLG = false;
- return;
- }
-
- _vm->_images.clear();
- _vm->_animation->animate(0);
-
- riverSound();
- pan();
- moveCanoe();
-
- if (_vm->_room->_function != FN_CLEAR1) {
- updateObstacles();
- riverSetPhysX();
- bool checkCollide = checkRiverCollide();
- if (_game->_hitSafe != 0)
- _game->_hitSafe -= 2;
-
- if (checkCollide) {
- cmdDead(RIVERDEATH[0]);
- return;
- }
-
- if (_game->_deathFlag) {
- _game->_deathCount--;
- if (_game->_deathCount == 0) {
- cmdDead(RIVERDEATH[_game->_deathType]);
- return;
- }
- }
-
- // Scroll the river
- scrollRiver1();
-
- // Allow time for new scrolled river position to be shown
- _vm->_canSaveLoad = true;
- while (!_vm->shouldQuit() && _vm->_room->_function == FN_NONE &&
- _vm->_events->_vbCount > 0) {
- _vm->_events->pollEventsAndWait();
- }
- _vm->_canSaveLoad = false;
- }
-
- if (_vm->_room->_function == FN_CLEAR1) {
- _endFlag = true;
- _returnCode = 0;
- _CHICKENOUTFLG = false;
- break;
- }
- }
-}
-
void AmazonScripts::executeSpecial(int commandIndex, int param1, int param2) {
switch (commandIndex) {
case 1:
@@ -1815,7 +321,7 @@ void AmazonScripts::executeSpecial(int commandIndex, int param1, int param2) {
loadBackground(param1, param2);
break;
case 3:
- doCast(param1);
+ _game->_cast.doCast(param1);
break;
case 4:
setInactive();
@@ -1824,7 +330,7 @@ void AmazonScripts::executeSpecial(int commandIndex, int param1, int param2) {
mWhile(param1);
break;
case 9:
- _game->_guard.guard();
+ _game->_guard.doGuard();
break;
case 10:
_vm->_sound->newMusic(param1, param2);
@@ -1833,10 +339,10 @@ void AmazonScripts::executeSpecial(int commandIndex, int param1, int param2) {
plotInactive();
break;
case 13:
- RIVER();
+ _game->_river.river();
break;
case 14:
- ANT();
+ _game->_ant.doAnt();
break;
case 15:
boatWalls(param1, param2);