From c0243036a293430b7872b3450735c9cc9e68930a Mon Sep 17 00:00:00 2001 From: uruk Date: Sun, 8 Sep 2013 12:06:08 +0200 Subject: AVALANCHE: Renaming/refactoring in Animation. --- engines/avalanche/animation.cpp | 433 +++++++++++++++++----------------------- 1 file changed, 182 insertions(+), 251 deletions(-) (limited to 'engines/avalanche/animation.cpp') diff --git a/engines/avalanche/animation.cpp b/engines/avalanche/animation.cpp index bdf2bb4627..f83173ef77 100644 --- a/engines/avalanche/animation.cpp +++ b/engines/avalanche/animation.cpp @@ -121,7 +121,7 @@ void AnimationType::init(byte spritenum, bool doCheck, Animation *tr) { _speedX = 3; _speedY = 1; if (spritenum == 1) - _tr->newspeed(); // Just for the lights. + _tr->updateSpeed(); // Just for the lights. _homing = false; _moveX = 0; @@ -173,10 +173,10 @@ void AnimationType::appear(int16 wx, int16 wy, byte wf) { */ bool AnimationType::checkCollision() { for (int16 i = 0; i < _tr->kSpriteNumbMax; i++) { - if (_tr->tr[i]._quick && (_tr->tr[i]._id != _id) && - ((_x + _info._xLength) > _tr->tr[i]._x) && - (_x < (_tr->tr[i]._x + _tr->tr[i]._info._xLength)) && - (_tr->tr[i]._y == _y)) + if (_tr->_sprites[i]._quick && (_tr->_sprites[i]._id != _id) && + ((_x + _info._xLength) > _tr->_sprites[i]._x) && + (_x < (_tr->_sprites[i]._x + _tr->_sprites[i]._info._xLength)) && + (_tr->_sprites[i]._y == _y)) return true; } @@ -209,22 +209,22 @@ void AnimationType::walk() { return; } - byte tc = _tr->checkfeet(_x, _x + _info._xLength, _oldY[_tr->_vm->_gyro->_cp], _y, _info._yLength) - 1; + byte tc = _tr->checkFeet(_x, _x + _info._xLength, _oldY[_tr->_vm->_gyro->_cp], _y, _info._yLength) - 1; // -1 is because the modified array indexes of magics[] compared to Pascal . if ((tc != 255) & (!_tr->_vm->_gyro->_doingSpriteRun)) { switch (_tr->_vm->_gyro->_magics[tc]._operation) { case Gyro::kMagicExclaim: { bounce(); - _tr->mustexclaim = true; - _tr->saywhat = _tr->_vm->_gyro->_magics[tc]._data; + _tr->_mustExclaim = true; + _tr->_sayWhat = _tr->_vm->_gyro->_magics[tc]._data; } break; case Gyro::kMagicBounce: bounce(); break; case Gyro::kMagicTransport: - _tr->fliproom(_tr->_vm->_gyro->_magics[tc]._data >> 8, _tr->_vm->_gyro->_magics[tc]._data & 0xff); + _tr->flipRoom(_tr->_vm->_gyro->_magics[tc]._data >> 8, _tr->_vm->_gyro->_magics[tc]._data & 0xff); break; case Gyro::kMagicUnfinished: { bounce(); @@ -232,7 +232,7 @@ void AnimationType::walk() { } break; case Gyro::kMagicSpecial: - _tr->call_special(_tr->_vm->_gyro->_magics[tc]._data); + _tr->callSpecial(_tr->_vm->_gyro->_magics[tc]._data); break; case Gyro::kMagicOpenDoor: _tr->openDoor(_tr->_vm->_gyro->_magics[tc]._data >> 8, _tr->_vm->_gyro->_magics[tc]._data & 0xff, tc); @@ -366,25 +366,22 @@ void AnimationType::done() { Animation::Animation(AvalancheEngine *vm) { _vm = vm; - mustexclaim = false; + _mustExclaim = false; } Animation::~Animation() { for (int16 i = 0; i < kSpriteNumbMax; i++) { - if (tr[i]._quick) - tr[i].done(); + if (_sprites[i]._quick) + _sprites[i].done(); } } -void Animation::loadtrip() { +void Animation::loadAnims() { for (int16 i = 0; i < kSpriteNumbMax; i++) - tr[i].original(); - - for (uint16 i = 0; i < sizeof(aa); i++) - aa[i] = 0; + _sprites[i].original(); } -byte Animation::checkfeet(int16 x1, int16 x2, int16 oy, int16 y, byte yl) { +byte Animation::checkFeet(int16 x1, int16 x2, int16 oy, int16 y, byte yl) { // if not alive then begin checkfeet:=0; exit; end; byte a = 0; @@ -432,11 +429,7 @@ byte Animation::geida_ped(byte which) { } } -void Animation::catamove(byte ped) { -/* When you enter a new position in the catacombs, this procedure should - be called. It changes the Also codes so that they may match the picture - on the screen. (Coming soon: It draws up the screen, too.) */ - +void Animation::catacombMove(byte ped) { int32 here; uint16 xy_uint16; byte fv; @@ -451,22 +444,22 @@ void Animation::catamove(byte ped) { switch (xy_uint16) { case 1801: // Exit catacombs - fliproom(r__lustiesroom, 4); + flipRoom(r__lustiesroom, 4); _vm->_scrolls->displayText("Phew! Nice to be out of there!"); return; case 1033: // Oubliette - fliproom(r__oubliette, 1); + flipRoom(r__oubliette, 1); _vm->_scrolls->displayText(Common::String("Oh, NO!") + _vm->_scrolls->kControlRegister + '1' + _vm->_scrolls->kControlSpeechBubble); return; case 4: - fliproom(r__geidas, 1); + flipRoom(r__geidas, 1); return; case 2307: - fliproom(r__lusties, 5); + flipRoom(r__lusties, 5); _vm->_scrolls->displayText("Oh no... here we go again..."); _vm->_gyro->_dna._userMovesAvvy = false; - tr[0]._moveY = 1; - tr[0]._moveX = 0; + _sprites[0]._moveY = 1; + _sprites[0]._moveX = 0; return; } @@ -735,11 +728,11 @@ void Animation::catamove(byte ped) { } if ((_vm->_gyro->_dna._geidaFollows) && (ped > 0)) { - if (!tr[1]._quick) // If we don't already have her... - tr[1].init(5, true, this); // ...Load Geida. - apped(2, geida_ped(ped)); - tr[1]._callEachStepFl = true; - tr[1]._eachStepProc = kProcGeida; + if (!_sprites[1]._quick) // If we don't already have her... + _sprites[1].init(5, true, this); // ...Load Geida. + appearPed(2, geida_ped(ped)); + _sprites[1]._callEachStepFl = true; + _sprites[1]._eachStepProc = kProcGeida; } } @@ -750,7 +743,7 @@ void Animation::dawndelay() { _vm->_timer->addTimer(2, _vm->_timer->kProcDawnDelay, _vm->_timer->kReasonDawndelay); } -void Animation::call_special(uint16 which) { +void Animation::callSpecial(uint16 which) { switch (which) { case 1: // _vm->_gyro->special 1: Room 22: top of stairs. _vm->_celer->drawBackgroundSprite(-1, -1, 1); @@ -771,25 +764,25 @@ void Animation::call_special(uint16 which) { _vm->_gyro->_dna._userMovesAvvy = true; break; case 3: // _vm->_gyro->special 3: Room 71: triggers dart. - tr[0].bounce(); // Must include that. + _sprites[0].bounce(); // Must include that. if (!_vm->_gyro->_dna._arrowTriggered) { _vm->_gyro->_dna._arrowTriggered = true; - apped(2, 4); // The dart starts at ped 4, and... - tr[1].walkTo(5); // flies to ped 5. - tr[1]._facingDir = kDirUp; // Only face. + appearPed(2, 4); // The dart starts at ped 4, and... + _sprites[1].walkTo(5); // flies to ped 5. + _sprites[1]._facingDir = kDirUp; // Only face. // Should call some kind of Eachstep procedure which will deallocate // the sprite when it hits the wall, and replace it with the chunk // graphic of the arrow buried in the plaster. */ // OK! - tr[1]._callEachStepFl = true; - tr[1]._eachStepProc = kProcArrow; + _sprites[1]._callEachStepFl = true; + _sprites[1]._eachStepProc = kProcArrow; } break; case 4: // This is the ghost room link. _vm->_lucerna->dusk(); - tr[0].turn(kDirRight); // you'll see this after we get back from bootstrap + _sprites[0].turn(kDirRight); // you'll see this after we get back from bootstrap _vm->_timer->addTimer(1, _vm->_timer->kProcGhostRoomPhew, _vm->_timer->kReasonGhostRoomPhew); _vm->_enid->backToBootstrap(3); break; @@ -798,28 +791,28 @@ void Animation::call_special(uint16 which) { // _vm->_gyro->special 5: Room 42: touched tree, and get tied up. _vm->_gyro->_magics[4]._operation = _vm->_gyro->kMagicBounce; // Boundary effect is now working again. _vm->_visa->displayScrollChain('q', 35); - tr[0].done(); + _sprites[0].done(); //tr[1].vanishifstill:=true; _vm->_celer->drawBackgroundSprite(-1, -1, 2); _vm->_visa->displayScrollChain('q', 36); _vm->_gyro->_dna._tiedUp = true; _vm->_gyro->_dna._friarWillTieYouUp = false; - tr[1].walkTo(3); - tr[1]._vanishIfStill = true; - tr[1]._doCheck = true; // One of them must have Check_Me switched on. + _sprites[1].walkTo(3); + _sprites[1]._vanishIfStill = true; + _sprites[1]._doCheck = true; // One of them must have Check_Me switched on. _vm->_gyro->_whereIs[_vm->_gyro->kPeopleFriarTuck - 150] = 177; // Not here, then. _vm->_timer->addTimer(364, _vm->_timer->kProcHangAround, _vm->_timer->kReasonHangingAround); } break; case 6: // _vm->_gyro->special 6: fall down oubliette. _vm->_gyro->_dna._userMovesAvvy = false; - tr[0]._moveX = 3; - tr[0]._moveY = 0; - tr[0]._facingDir = kDirRight; + _sprites[0]._moveX = 3; + _sprites[0]._moveY = 0; + _sprites[0]._facingDir = kDirRight; _vm->_timer->addTimer(1, _vm->_timer->kProcFallDownOubliette, _vm->_timer->kReasonFallingDownOubliette); break; case 7: // _vm->_gyro->special 7: stop falling down oubliette. - tr[0]._visible = false; + _sprites[0]._visible = false; _vm->_gyro->_magics[9]._operation = _vm->_gyro->kMagicNothing; stopWalking(); _vm->_timer->loseTimer(_vm->_timer->kReasonFallingDownOubliette); @@ -831,18 +824,18 @@ void Animation::call_special(uint16 which) { case 8: // _vm->_gyro->special 8: leave du Lustie's room. if ((_vm->_gyro->_dna._geidaFollows) && (!_vm->_gyro->_dna._lustieIsAsleep)) { _vm->_visa->displayScrollChain('q', 63); - tr[1].turn(kDirDown); - tr[1].stopWalk(); - tr[1]._callEachStepFl = false; // Geida + _sprites[1].turn(kDirDown); + _sprites[1].stopWalk(); + _sprites[1]._callEachStepFl = false; // Geida _vm->_lucerna->gameOver(); } break; case 9: // _vm->_gyro->special 9: lose Geida to Robin Hood... if (!_vm->_gyro->_dna._geidaFollows) return; // DOESN'T COUNT: no Geida. - tr[1]._callEachStepFl = false; // She no longer follows Avvy around. - tr[1].walkTo(4); // She walks to somewhere... - tr[0].done(); // Lose Avvy. + _sprites[1]._callEachStepFl = false; // She no longer follows Avvy around. + _sprites[1].walkTo(4); // She walks to somewhere... + _sprites[0].done(); // Lose Avvy. _vm->_gyro->_dna._userMovesAvvy = false; _vm->_timer->addTimer(40, _vm->_timer->kProcRobinHoodAndGeida, _vm->_timer->kReasonRobinHoodAndGeida); break; @@ -858,50 +851,46 @@ void Animation::call_special(uint16 which) { } _vm->_lucerna->dusk(); _vm->_gyro->_dna._catacombY--; - catamove(4); + catacombMove(4); if (_vm->_gyro->_dna._room != r__catacombs) return; switch ((_vm->_gyro->kCatacombMap[_vm->_gyro->_dna._catacombY - 1][_vm->_gyro->_dna._catacombX - 1] & 0xf00) >> 8) { case 0x1: - apped(1, 12); + appearPed(1, 12); break; case 0x3: - apped(1, 11); + appearPed(1, 11); break; default: - apped(1, 4); + appearPed(1, 4); } - getback(); dawndelay(); break; case 11: // _vm->_gyro->special 11: transfer east in catacombs. _vm->_lucerna->dusk(); _vm->_gyro->_dna._catacombX++; - catamove(1); + catacombMove(1); if (_vm->_gyro->_dna._room != r__catacombs) return; - apped(1, 1); - getback(); + appearPed(1, 1); dawndelay(); break; case 12: // _vm->_gyro->special 12: transfer south in catacombs. _vm->_lucerna->dusk(); _vm->_gyro->_dna._catacombY += 1; - catamove(2); + catacombMove(2); if (_vm->_gyro->_dna._room != r__catacombs) return; - apped(1, 2); - getback(); + appearPed(1, 2); dawndelay(); break; case 13: // _vm->_gyro->special 13: transfer west in catacombs. _vm->_lucerna->dusk(); _vm->_gyro->_dna._catacombX--; - catamove(3); + catacombMove(3); if (_vm->_gyro->_dna._room != r__catacombs) return; - apped(1, 3); - getback(); + appearPed(1, 3); dawndelay(); break; } @@ -949,8 +938,8 @@ void Animation::openDoor(byte whither, byte ped, byte magicnum) { _vm->_sequence->startToClose(); return; } else { - apped(1, 6); - tr[0]._facingDir = kDirRight; // added by TT 12/3/1995 + appearPed(1, 6); + _sprites[0]._facingDir = kDirRight; // added by TT 12/3/1995 _vm->_sequence->firstShow(8); _vm->_sequence->thenShow(9); } @@ -968,19 +957,19 @@ void Animation::openDoor(byte whither, byte ped, byte magicnum) { _vm->_sequence->startToOpen(); } -void Animation::newspeed() { +void Animation::updateSpeed() { // Given that you've just changed the speed in triptype._speedX, this adjusts _moveX. - tr[0]._moveX = (tr[0]._moveX / 3) * tr[0]._speedX; + _sprites[0]._moveX = (_sprites[0]._moveX / 3) * _sprites[0]._speedX; //setactivepage(3); - if (tr[0]._speedX == _vm->_gyro->kRun) + if (_sprites[0]._speedX == _vm->_gyro->kRun) _vm->_graphics->_surface.drawLine(371, 199, 373, 199, kColorYellow); else _vm->_graphics->_surface.drawLine(336, 199, 338, 199, kColorYellow); - if (tr[0]._speedX == _vm->_gyro->kRun) + if (_sprites[0]._speedX == _vm->_gyro->kRun) _vm->_graphics->_surface.drawLine(336, 199, 338, 199, kColorLightblue); else _vm->_graphics->_surface.drawLine(371, 199, 373, 199, kColorLightblue); @@ -988,129 +977,97 @@ void Animation::newspeed() { //setactivepage(1 - cp); } -void Animation::rwsp(byte t, byte dir) { +void Animation::changeDirection(byte t, byte dir) { switch (dir) { case kDirUp: - tr[t].speed(0, -tr[t]._speedY); + _sprites[t].speed(0, -_sprites[t]._speedY); break; case kDirDown: - tr[t].speed(0, tr[t]._speedY); + _sprites[t].speed(0, _sprites[t]._speedY); break; case kDirLeft: - tr[t].speed(-tr[t]._speedX, 0); + _sprites[t].speed(-_sprites[t]._speedX, 0); break; case kDirRight: - tr[t].speed(tr[t]._speedX, 0); + _sprites[t].speed(_sprites[t]._speedX, 0); break; case kDirUpLeft: - tr[t].speed(-tr[t]._speedX, -tr[t]._speedY); + _sprites[t].speed(-_sprites[t]._speedX, -_sprites[t]._speedY); break; case kDirUpRight: - tr[t].speed(tr[t]._speedX, -tr[t]._speedY); + _sprites[t].speed(_sprites[t]._speedX, -_sprites[t]._speedY); break; case kDirDownLeft: - tr[t].speed(-tr[t]._speedX, tr[t]._speedY); + _sprites[t].speed(-_sprites[t]._speedX, _sprites[t]._speedY); break; case kDirDownRight: - tr[t].speed(tr[t]._speedX, tr[t]._speedY); + _sprites[t].speed(_sprites[t]._speedX, _sprites[t]._speedY); break; } } -void Animation::apped(byte trn, byte np) { +void Animation::appearPed(byte trn, byte np) { trn--; np--; - tr[trn].appear(_vm->_gyro->_peds[np]._x - tr[trn]._info._xLength / 2, _vm->_gyro->_peds[np]._y - tr[trn]._info._yLength, _vm->_gyro->_peds[np]._direction); - rwsp(trn, _vm->_gyro->_peds[np]._direction); -} - -#if 0 - function overlap(x1,y1,x2,y2,x3,y3,x4,y4:uint16):bool; - begin // By De Morgan's law: - overlap:=(x2>=x3) and (x4>=x1) and (y2>=y3) and (y4>=y1); - end; -#endif - //x1,x2 - as _vm->_gyro->bytefield, but *8. y1,y2 - as _vm->_gyro->bytefield. - //x3,y3 = mx,my. x4,y4 = mx+16,my+16. - -void Animation::getback() { - // Super_Off; -#if 0 - while (getset[1 - _vm->_gyro->cp].numleft > 0) { - getset[1 - _vm->_gyro->cp].recall(r); - - - bool endangered = false; - if overlaps_with_mouse and not endangered then - begin - endangered:=true; - blitfix; - Super_Off; - end; - - //_vm->_lucerna->mblit(r.x1, r.y1, r.x2, r.y2, 3, 1 - _vm->_gyro->cp); - } - - if endangered then - Super_On; -#endif + _sprites[trn].appear(_vm->_gyro->_peds[np]._x - _sprites[trn]._info._xLength / 2, _vm->_gyro->_peds[np]._y - _sprites[trn]._info._yLength, _vm->_gyro->_peds[np]._direction); + changeDirection(trn, _vm->_gyro->_peds[np]._direction); } // Eachstep procedures: void Animation::follow_avvy_y(byte tripnum) { - if (tr[0]._facingDir == kDirLeft) + if (_sprites[0]._facingDir == kDirLeft) return; - if (tr[tripnum]._homing) - tr[tripnum]._homingY = tr[1]._y; + if (_sprites[tripnum]._homing) + _sprites[tripnum]._homingY = _sprites[1]._y; else { - if (tr[tripnum]._y < tr[1]._y) - tr[tripnum]._y += 1; - else if (tr[tripnum]._y > tr[1]._y) - tr[tripnum]._y -= 1; + if (_sprites[tripnum]._y < _sprites[1]._y) + _sprites[tripnum]._y += 1; + else if (_sprites[tripnum]._y > _sprites[1]._y) + _sprites[tripnum]._y -= 1; else return; - if (tr[tripnum]._moveX == 0) { - tr[tripnum]._stepNum += 1; - if (tr[tripnum]._stepNum == tr[tripnum]._stat._seq) - tr[tripnum]._stepNum = 0; - tr[tripnum]._count = 0; + if (_sprites[tripnum]._moveX == 0) { + _sprites[tripnum]._stepNum += 1; + if (_sprites[tripnum]._stepNum == _sprites[tripnum]._stat._seq) + _sprites[tripnum]._stepNum = 0; + _sprites[tripnum]._count = 0; } } } void Animation::back_and_forth(byte tripnum) { - if (!tr[tripnum]._homing) { - if (tr[tripnum]._facingDir == kDirRight) - tr[tripnum].walkTo(4); + if (!_sprites[tripnum]._homing) { + if (_sprites[tripnum]._facingDir == kDirRight) + _sprites[tripnum].walkTo(4); else - tr[tripnum].walkTo(5); + _sprites[tripnum].walkTo(5); } } void Animation::face_avvy(byte tripnum) { - if (!tr[tripnum]._homing) { - if (tr[0]._x >= tr[tripnum]._x) - tr[tripnum]._facingDir = kDirRight; + if (!_sprites[tripnum]._homing) { + if (_sprites[0]._x >= _sprites[tripnum]._x) + _sprites[tripnum]._facingDir = kDirRight; else - tr[tripnum]._facingDir = kDirLeft; + _sprites[tripnum]._facingDir = kDirLeft; } } void Animation::arrow_procs(byte tripnum) { - if (tr[tripnum]._homing) { + if (_sprites[tripnum]._homing) { // Arrow is still in flight. // We must check whether or not the arrow has collided tr[tripnum] Avvy's head. // This is so if: a) the bottom of the arrow is below Avvy's head, // b) the left of the arrow is left of the right of Avvy's head, and // c) the right of the arrow is right of the left of Avvy's head. - if (((tr[tripnum]._y + tr[tripnum]._info._yLength) >= tr[0]._y) // A - && (tr[tripnum]._x <= (tr[0]._x + tr[0]._info._xLength)) // B - && ((tr[tripnum]._x + tr[tripnum]._info._xLength) >= tr[0]._x)) { // C + if (((_sprites[tripnum]._y + _sprites[tripnum]._info._yLength) >= _sprites[0]._y) // A + && (_sprites[tripnum]._x <= (_sprites[0]._x + _sprites[0]._info._xLength)) // B + && ((_sprites[tripnum]._x + _sprites[tripnum]._info._xLength) >= _sprites[0]._x)) { // C // OK, it's hit him... what now? - tr[1]._callEachStepFl = false; // prevent recursion. + _sprites[1]._callEachStepFl = false; // prevent recursion. _vm->_visa->displayScrollChain('Q', 47); // Complaint! - tr[tripnum].done(); // Deallocate the arrow. + _sprites[tripnum].done(); // Deallocate the arrow. #if 0 tr[1].done; { Deallocate normal pic of Avvy. } @@ -1128,7 +1085,7 @@ void Animation::arrow_procs(byte tripnum) { _vm->_timer->addTimer(55, _vm->_timer->kProcNaughtyDuke, _vm->_timer->kReasonNaughtyDuke); } } else { // Arrow has hit the wall! - tr[tripnum].done(); // Deallocate the arrow. + _sprites[tripnum].done(); // Deallocate the arrow. _vm->_celer->drawBackgroundSprite(-1, -1, 3); // Show pic of arrow stuck into the door. _vm->_gyro->_dna._arrowInTheDoor = true; // So that we can pick it up. } @@ -1152,41 +1109,41 @@ end; #endif void Animation::grab_avvy(byte tripnum) { // For Friar Tuck, in Nottingham. - int16 tox = tr[0]._x + 17; - int16 toy = tr[0]._y - 1; - if ((tr[tripnum]._x == tox) && (tr[tripnum]._y == toy)) { - tr[tripnum]._callEachStepFl = false; - tr[tripnum]._facingDir = kDirLeft; - tr[tripnum].stopWalk(); + int16 tox = _sprites[0]._x + 17; + int16 toy = _sprites[0]._y - 1; + if ((_sprites[tripnum]._x == tox) && (_sprites[tripnum]._y == toy)) { + _sprites[tripnum]._callEachStepFl = false; + _sprites[tripnum]._facingDir = kDirLeft; + _sprites[tripnum].stopWalk(); // ... whatever ... } else { // Still some way to go. - if (tr[tripnum]._x < tox) { - tr[tripnum]._x += 5; - if (tr[tripnum]._x > tox) - tr[tripnum]._x = tox; + if (_sprites[tripnum]._x < tox) { + _sprites[tripnum]._x += 5; + if (_sprites[tripnum]._x > tox) + _sprites[tripnum]._x = tox; } - if (tr[tripnum]._y < toy) - tr[tripnum]._y++; - tr[tripnum]._stepNum++; - if (tr[tripnum]._stepNum == tr[tripnum]._stat._seq) - tr[tripnum]._stepNum = 0; + if (_sprites[tripnum]._y < toy) + _sprites[tripnum]._y++; + _sprites[tripnum]._stepNum++; + if (_sprites[tripnum]._stepNum == _sprites[tripnum]._stat._seq) + _sprites[tripnum]._stepNum = 0; } } -void Animation::take_a_step(byte &tripnum) { - if (tr[tripnum]._moveX == 0) { - tr[tripnum]._stepNum++; - if (tr[tripnum]._stepNum == tr[tripnum]._stat._seq) - tr[tripnum]._stepNum = 0; - tr[tripnum]._count = 0; +void Animation::takeAStep(byte &tripnum) { + if (_sprites[tripnum]._moveX == 0) { + _sprites[tripnum]._stepNum++; + if (_sprites[tripnum]._stepNum == _sprites[tripnum]._stat._seq) + _sprites[tripnum]._stepNum = 0; + _sprites[tripnum]._count = 0; } } void Animation::spin(byte whichway, byte &tripnum) { - if (tr[tripnum]._facingDir != whichway) { - tr[tripnum]._facingDir = whichway; - if (tr[tripnum]._id == 2) + if (_sprites[tripnum]._facingDir != whichway) { + _sprites[tripnum]._facingDir = whichway; + if (_sprites[tripnum]._id == 2) return; // Not for Spludwick _vm->_gyro->_dna._geidaSpin += 1; @@ -1206,35 +1163,35 @@ void Animation::geida_procs(byte tripnum) { _vm->_gyro->_dna._geidaSpin = 0; } - if (tr[tripnum]._y < (tr[0]._y - 2)) { + if (_sprites[tripnum]._y < (_sprites[0]._y - 2)) { // Geida is further from the screen than Avvy. spin(kDirDown, tripnum); - tr[tripnum]._moveY = 1; - tr[tripnum]._moveX = 0; - take_a_step(tripnum); + _sprites[tripnum]._moveY = 1; + _sprites[tripnum]._moveX = 0; + takeAStep(tripnum); return; - } else if (tr[tripnum]._y > (tr[0]._y + 2)) { + } else if (_sprites[tripnum]._y > (_sprites[0]._y + 2)) { // Avvy is further from the screen than Geida. spin(kDirUp, tripnum); - tr[tripnum]._moveY = -1; - tr[tripnum]._moveX = 0; - take_a_step(tripnum); + _sprites[tripnum]._moveY = -1; + _sprites[tripnum]._moveX = 0; + takeAStep(tripnum); return; } - tr[tripnum]._moveY = 0; + _sprites[tripnum]._moveY = 0; // These 12-s are not in the original, I added them to make the following method more "smooth". // Now the NPC which is following Avvy won't block his way and will walk next to him properly. - if (tr[tripnum]._x < tr[0]._x - tr[0]._speedX * 8 - 12) { - tr[tripnum]._moveX = tr[0]._speedX; + if (_sprites[tripnum]._x < _sprites[0]._x - _sprites[0]._speedX * 8 - 12) { + _sprites[tripnum]._moveX = _sprites[0]._speedX; spin(kDirRight, tripnum); - take_a_step(tripnum); - } else if (tr[tripnum]._x > tr[0]._x + tr[0]._speedX * 8 + 12) { - tr[tripnum]._moveX = -tr[0]._speedX; + takeAStep(tripnum); + } else if (_sprites[tripnum]._x > _sprites[0]._x + _sprites[0]._speedX * 8 + 12) { + _sprites[tripnum]._moveX = -_sprites[0]._speedX; spin(kDirLeft, tripnum); - take_a_step(tripnum); + takeAStep(tripnum); } else - tr[tripnum]._moveX = 0; + _sprites[tripnum]._moveX = 0; } // That's all... @@ -1248,7 +1205,7 @@ void Animation::call_andexors() { order[i] = -1; for (int16 i = 0; i < kSpriteNumbMax; i++) { - if (tr[i]._quick && tr[i]._visible) + if (_sprites[i]._quick && _sprites[i]._visible) order[i] = i; } @@ -1256,7 +1213,7 @@ void Animation::call_andexors() { ok = true; for (byte i = 0; i < 4; i++) { if (((order[i] != -1) && (order[i + 1] != -1)) - && (tr[order[i]]._y > tr[order[i + 1]]._y)) { + && (_sprites[order[i]]._y > _sprites[order[i + 1]]._y)) { // Swap them! temp = order[i]; order[i] = order[i + 1]; @@ -1271,7 +1228,7 @@ void Animation::call_andexors() { for (byte i = 0; i < 5; i++) { if (order[i] > -1) - tr[order[i]].andexor(); + _sprites[order[i]].andexor(); } } @@ -1283,15 +1240,15 @@ void Animation::animLink() { if (_vm->_gyro->_dropdownActive | _vm->_gyro->_onToolbar | _vm->_gyro->_seeScroll) return; for (int16 i = 0; i < kSpriteNumbMax; i++) { - if (tr[i]._quick && tr[i]._visible) - tr[i].walk(); + if (_sprites[i]._quick && _sprites[i]._visible) + _sprites[i].walk(); } call_andexors(); for (int16 i = 0; i < kSpriteNumbMax; i++) { - if (tr[i]._quick && tr[i]._callEachStepFl) { - switch (tr[i]._eachStepProc) { + if (_sprites[i]._quick && _sprites[i]._callEachStepFl) { + switch (_sprites[i]._eachStepProc) { case kProcFollowAvvyY : follow_avvy_y(i); break; @@ -1315,35 +1272,17 @@ void Animation::animLink() { } } - if (mustexclaim) { - mustexclaim = false; - _vm->_visa->displayScrollChain('x', saywhat); - } -} - -void Animation::get_back_loretta() { - for (int16 i = 0; i < kSpriteNumbMax; i++) { - if (tr[i]._quick) { - getback(); - return; - } + if (_mustExclaim) { + _mustExclaim = false; + _vm->_visa->displayScrollChain('x', _sayWhat); } - // for fv:=0 to 1 do begin cp:=1-cp; getback; end; } void Animation::stopWalking() { - tr[0].stopWalk(); + _sprites[0].stopWalk(); _vm->_gyro->_dna._direction = kDirStopped; if (_vm->_gyro->_alive) - tr[0]._stepNum = 1; -} - -void Animation::tripkey(char dir) { - warning("Replaced by Trip::handleMoveKey!"); -} - -void Animation::readstick() { - warning("STUB: Trip::readstick()"); + _sprites[0]._stepNum = 1; } /** @@ -1355,9 +1294,9 @@ void Animation::hideInCupboard() { if (_vm->_gyro->_dna._wearing == Acci::kNothing) _vm->_scrolls->displayText(Common::String(_vm->_scrolls->kControlItalic) + "AVVY!" + _vm->_scrolls->kControlRoman + "Get dressed first!"); else { - tr[0]._visible = true; + _sprites[0]._visible = true; _vm->_gyro->_dna._userMovesAvvy = true; - apped(1, 3); // Walk out of the cupboard. + appearPed(1, 3); // Walk out of the cupboard. _vm->_scrolls->displayText("You leave the cupboard. Nice to be out of there!"); _vm->_gyro->_dna._avvysInTheCupboard = false; _vm->_sequence->firstShow(8); @@ -1366,7 +1305,7 @@ void Animation::hideInCupboard() { } } else { // Not hiding in the cupboard - tr[0]._visible = false; + _sprites[0]._visible = false; _vm->_gyro->_dna._userMovesAvvy = false; _vm->_scrolls->displayText(Common::String("You walk into the room...") + _vm->_scrolls->kControlParagraph + "It seems to be an empty, but dusty, cupboard. Hmmmm... you leave the door slightly open to avoid suffocation."); @@ -1375,11 +1314,11 @@ void Animation::hideInCupboard() { } } -void Animation::fliproom(byte room, byte ped) { +void Animation::flipRoom(byte room, byte ped) { if (!_vm->_gyro->_alive) { // You can't leave the room if you're dead. - tr[0]._moveX = 0; - tr[0]._moveY = 0; // Stop him from moving. + _sprites[0]._moveX = 0; + _sprites[0]._moveY = 0; // Stop him from moving. return; } @@ -1390,7 +1329,7 @@ void Animation::fliproom(byte room, byte ped) { if ((_vm->_gyro->_dna._jumpStatus > 0) && (_vm->_gyro->_dna._room == r__insidecardiffcastle)) { // You can't *jump* out of Cardiff Castle! - tr[0]._moveX = 0; + _sprites[0]._moveX = 0; return; } @@ -1398,48 +1337,44 @@ void Animation::fliproom(byte room, byte ped) { _vm->_lucerna->dusk(); for (int16 i = 1; i < kSpriteNumbMax; i++) { - if (tr[i]._quick) - tr[i].done(); + if (_sprites[i]._quick) + _sprites[i].done(); } // Deallocate sprite if (_vm->_gyro->_dna._room == r__lustiesroom) _vm->_gyro->_dna._enterCatacombsFromLustiesRoom = true; _vm->_lucerna->enterRoom(room, ped); - apped(1, ped); + appearPed(1, ped); _vm->_gyro->_dna._enterCatacombsFromLustiesRoom = false; _vm->_gyro->_oldDirection = _vm->_gyro->_dna._direction; - _vm->_gyro->_dna._direction = tr[0]._facingDir; + _vm->_gyro->_dna._direction = _sprites[0]._facingDir; _vm->_lucerna->drawDirection(); - for (byte i = 0; i <= 1; i++) { - _vm->_gyro->_cp = 1 - _vm->_gyro->_cp; - getback(); - } _vm->_lucerna->dawn(); // Tidy up after mouse. I know it's a kludge... // tidy_after_mouse; } -bool Animation::infield(byte which) { +bool Animation::inField(byte which) { which--; // Pascal -> C: different array indexes. - int16 yy = tr[0]._y + tr[0]._info._yLength; + int16 yy = _sprites[0]._y + _sprites[0]._info._yLength; - return (tr[0]._x >= _vm->_gyro->_fields[which]._x1) && (tr[0]._x <= _vm->_gyro->_fields[which]._x2) + return (_sprites[0]._x >= _vm->_gyro->_fields[which]._x1) && (_sprites[0]._x <= _vm->_gyro->_fields[which]._x2) && (yy >= _vm->_gyro->_fields[which]._y1) && (yy <= _vm->_gyro->_fields[which]._y2); } -bool Animation::neardoor() { +bool Animation::nearDoor() { if (_vm->_gyro->_fieldNum < 8) { // there ARE no doors here! return false; } - int16 ux = tr[0]._x; - int16 uy = tr[0]._y + tr[0]._info._yLength; + int16 ux = _sprites[0]._x; + int16 uy = _sprites[0]._y + _sprites[0]._info._yLength; bool nd = false; for (byte fv = 8; fv < _vm->_gyro->_fieldNum; fv++) if ((ux >= _vm->_gyro->_fields[fv]._x1) && (ux <= _vm->_gyro->_fields[fv]._x2) @@ -1448,10 +1383,6 @@ bool Animation::neardoor() { return nd; } -void Animation::new_game_for_trippancy() { // Called by gyro.newgame - tr[0]._visible = false; -} - void Animation::handleMoveKey(const Common::Event &event) { if (!_vm->_gyro->_dna._userMovesAvvy) return; @@ -1463,56 +1394,56 @@ void Animation::handleMoveKey(const Common::Event &event) { case Common::KEYCODE_UP: if (_vm->_gyro->_dna._direction != kDirUp) { _vm->_gyro->_dna._direction = kDirUp; - rwsp(0, _vm->_gyro->_dna._direction); + changeDirection(0, _vm->_gyro->_dna._direction); } else stopWalking(); break; case Common::KEYCODE_DOWN: if (_vm->_gyro->_dna._direction != kDirDown) { _vm->_gyro->_dna._direction = kDirDown; - rwsp(0, _vm->_gyro->_dna._direction); + changeDirection(0, _vm->_gyro->_dna._direction); } else stopWalking(); break; case Common::KEYCODE_LEFT: if (_vm->_gyro->_dna._direction != kDirLeft) { _vm->_gyro->_dna._direction = kDirLeft; - rwsp(0, _vm->_gyro->_dna._direction); + changeDirection(0, _vm->_gyro->_dna._direction); } else stopWalking(); break; case Common::KEYCODE_RIGHT: if (_vm->_gyro->_dna._direction != kDirRight) { _vm->_gyro->_dna._direction = kDirRight; - rwsp(0, _vm->_gyro->_dna._direction); + changeDirection(0, _vm->_gyro->_dna._direction); } else stopWalking(); break; case Common::KEYCODE_PAGEUP: if (_vm->_gyro->_dna._direction != kDirUpRight) { _vm->_gyro->_dna._direction = kDirUpRight; - rwsp(0, _vm->_gyro->_dna._direction); + changeDirection(0, _vm->_gyro->_dna._direction); } else stopWalking(); break; case Common::KEYCODE_PAGEDOWN: if (_vm->_gyro->_dna._direction != kDirDownRight) { _vm->_gyro->_dna._direction = kDirDownRight; - rwsp(0, _vm->_gyro->_dna._direction); + changeDirection(0, _vm->_gyro->_dna._direction); } else stopWalking(); break; case Common::KEYCODE_END: if (_vm->_gyro->_dna._direction != kDirDownLeft) { _vm->_gyro->_dna._direction = kDirDownLeft; - rwsp(0, _vm->_gyro->_dna._direction); + changeDirection(0, _vm->_gyro->_dna._direction); } else stopWalking(); break; case Common::KEYCODE_HOME: if (_vm->_gyro->_dna._direction != kDirUpLeft) { _vm->_gyro->_dna._direction = kDirUpLeft; - rwsp(0, _vm->_gyro->_dna._direction); + changeDirection(0, _vm->_gyro->_dna._direction); } else stopWalking(); break; -- cgit v1.2.3