Skip to content

Commit

Permalink
ACCESS: Implementing checkScroll
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Aug 15, 2014
1 parent 66b2d47 commit 4a3ce2d
Show file tree
Hide file tree
Showing 6 changed files with 201 additions and 28 deletions.
175 changes: 163 additions & 12 deletions engines/access/player.cpp
Expand Up @@ -52,6 +52,10 @@ Player::Player(AccessEngine *vm): Manager(vm), ImageEntry() {
_leftDelta = _rightDelta = 0;
_upDelta = _downDelta = 0;
_scrollConst = 0;
_scrollFlag = false;
_scrollThreshold = 0;
_scrollAmount = 0;
_scrollEnd = 0;
_roomNumber = 0;
_collideFlag = false;
_move = NONE;
Expand Down Expand Up @@ -293,11 +297,11 @@ void Player::walkLeft() {

_playerDirection = LEFT;

bool flag = _vm->_screen->_scrollEnd == 1;
bool flag = _scrollEnd == 1;
if (!flag) {
calcPlayer();
flag = (_playerX - _vm->_screen->_scaleTable1[_scrollConst] -
_vm->_screen->_scrollThreshold) > 0;
_vm->_player->_scrollThreshold) > 0;
}
if (flag) {
int walkOffset = _walkOffLeft[_frame - _sideWalkMin];
Expand Down Expand Up @@ -332,11 +336,11 @@ void Player::walkRight() {

_playerDirection = RIGHT;

bool flag = _vm->_screen->_scrollEnd == 2;
bool flag = _scrollEnd == 2;
if (!flag) {
calcPlayer();
flag = (_vm->_screen->_clipWidth - _playerX - _vm->_screen->_scaleTable1[_scrollConst] -
_vm->_screen->_scrollThreshold) > 0;
_vm->_player->_scrollThreshold) > 0;
}
if (flag) {
int walkOffset = _walkOffLeft[_frame - _sideWalkMin];
Expand Down Expand Up @@ -372,11 +376,11 @@ void Player::walkUpLeft() {
_playerDirection = UPLEFT;

int walkOffset;
bool flag = _vm->_screen->_scrollEnd == 1;
bool flag = _scrollEnd == 1;
if (!flag) {
calcPlayer();
flag = (_playerX - _vm->_screen->_scaleTable1[_scrollConst] -
_vm->_screen->_scrollThreshold) > 0;
_vm->_player->_scrollThreshold) > 0;
}
if (flag) {
walkOffset = _walkOffUL[_frame - _diagUpWalkMin].x;
Expand Down Expand Up @@ -419,11 +423,11 @@ void Player::walkDownLeft() {
_playerDirection = DOWNLEFT;

int walkOffset;
bool flag = _vm->_screen->_scrollEnd == 1;
bool flag = _scrollEnd == 1;
if (!flag) {
calcPlayer();
flag = (_playerX - _vm->_screen->_scaleTable1[_scrollConst] -
_vm->_screen->_scrollThreshold) > 0;
_vm->_player->_scrollThreshold) > 0;
}
if (flag) {
walkOffset = _walkOffDL[_frame - _sideWalkMin].x;
Expand Down Expand Up @@ -466,11 +470,11 @@ void Player::walkUpRight() {
_playerDirection = UPLEFT;

int walkOffset;
bool flag = _vm->_screen->_scrollEnd == 1;
bool flag = _scrollEnd == 1;
if (!flag) {
calcPlayer();
flag = (_vm->_screen->_clipWidth - _playerX - _vm->_screen->_scaleTable1[_scrollConst] -
_vm->_screen->_scrollThreshold) > 0;
_vm->_player->_scrollThreshold) > 0;
}
if (flag) {
walkOffset = _walkOffUR[_frame - _diagUpWalkMin].x;
Expand Down Expand Up @@ -513,11 +517,11 @@ void Player::walkDownRight() {
_playerDirection = DOWNRIGHT;

int walkOffset;
bool flag = _vm->_screen->_scrollEnd == 1;
bool flag = _scrollEnd == 1;
if (!flag) {
calcPlayer();
flag = (_playerX - _vm->_screen->_scaleTable1[_scrollConst] -
_vm->_screen->_scrollThreshold) > 0;
_vm->_player->_scrollThreshold) > 0;
}
if (flag) {
walkOffset = _walkOffUR[_frame - _sideWalkMin].x;
Expand Down Expand Up @@ -654,4 +658,151 @@ bool Player::codeWalls() {
error("TODO");
}

void Player::checkScroll() {
_scrollFlag = false;
if (_playerDirection == NONE)
return;

if ((_playerDirection == UPLEFT || _playerDirection == DOWNLEFT ||
_playerDirection == LEFT) && _playerX <= _scrollThreshold) {
// Scroll right
_scrollAmount = -(_playerX - _scrollThreshold);
_scrollFlag = true;
_vm->_screen->_scrollX -= _scrollAmount;
if (_vm->_screen->_scrollX < 0) {
_scrollFlag = true;
_vm->_screen->_scrollX += _scrollAmount;

while (_vm->_screen->_scrollX >= TILE_WIDTH && !_vm->shouldQuit()) {
_vm->_screen->_scrollX -= TILE_WIDTH;
_vm->_screen->moveBufferLeft();
_vm->_room->buildColumn(_vm->_screen->_scrollCol -
_vm->_screen->_vWindowWidth, _vm->_screen->_vWindowBytesWide);

if (_vm->_screen->_scrollX < TILE_WIDTH && _playerDirection != UPRIGHT) {
if (_playerDirection != DOWNRIGHT)
return;
goto finish;
}
}

_scrollEnd = 1;
_vm->_screen->_scrollX = 0;
_vm->_screen->_scrollCol = 0;
}
} else if ((_playerDirection == UPRIGHT || _playerDirection == DOWNRIGHT ||
_playerDirection == RIGHT) && (_vm->_screen->_clipWidth -
_playerX - _scrollThreshold) <= 0) {
// Scroll left
_scrollAmount = -(_vm->_screen->_clipWidth - _playerX - _scrollThreshold);
if ((_vm->_rScrollCol + _vm->_screen->_vWindowWidth) == _vm->_room->_playFieldWidth) {
_scrollEnd = 2;
_vm->_screen->_scrollX = 0;
_scrollFlag = true;
} else {
_scrollFlag = true;
_vm->_screen->_scrollX = _vm->_screen->_scrollX + _scrollAmount;

while (_vm->_screen->_scrollX >= TILE_WIDTH && !_vm->shouldQuit()) {
_vm->_screen->_scrollX -= TILE_WIDTH;
++_vm->_screen->_scrollCol;
_vm->_screen->moveBufferLeft();
_vm->_room->buildColumn(_vm->_screen->_scrollCol +
_vm->_screen->_vWindowWidth, _vm->_screen->_vWindowBytesWide);

if (_vm->_screen->_scrollX < TILE_WIDTH && _playerDirection != UPRIGHT) {
if (_playerDirection != DOWNRIGHT)
return;
goto finish;
}
}

_scrollEnd = 2;
_vm->_screen->_scrollX = 0;
_scrollFlag = true;
}
}

if ((_playerDirection == UPRIGHT || _playerDirection == UPLEFT ||
_playerDirection == UP) && _playerY <= _scrollThreshold) {
_scrollAmount = -(_playerY - _scrollThreshold);
_scrollFlag = true;
_vm->_screen->_scrollY -= _scrollAmount;
if (_vm->_screen->_scrollY >= 0)
return;

do {
_vm->_screen->_scrollY += TILE_HEIGHT;
if (--_vm->_screen->_scrollRow < 0)
break;

_vm->_screen->moveBufferDown();
_vm->_room->buildRow(_vm->_screen->_scrollRow, 0);

if (_vm->_screen->_scrollY >= 0)
return;
} while (!_vm->shouldQuit());

_scrollEnd = 3;
_vm->_screen->_scrollY = 0;
_vm->_screen->_scrollRow = 0;
return;
}

finish:
if ((_playerDirection == DOWNRIGHT || _playerDirection == DOWNLEFT ||
_playerDirection == DOWN) && (_vm->_screen->_clipHeight -
_playerY - _scrollThreshold) <= 0) {
// Scroll up
if (scrollUp()) {
_scrollEnd = 4;
_vm->_screen->_scrollY = TILE_HEIGHT;
_scrollFlag = true;
}
}
}

bool Player::scrollUp() {
_scrollAmount = -(_vm->_screen->_clipHeight - _playerY - _scrollThreshold);
if ((_vm->_screen->_scrollRow + _vm->_screen->_vWindowHeight) >=
_vm->_room->_playFieldHeight)
return true;

_scrollFlag = true;
_vm->_screen->_scrollY = _vm->_screen->_scrollY + _scrollAmount;

while (_vm->_screen->_scrollY >= TILE_HEIGHT && !_vm->shouldQuit()) {
_vm->_screen->_scrollY -= TILE_HEIGHT;
++_vm->_screen->_scrollRow;
_vm->_screen->moveBufferUp();

_vm->_room->buildRow(_vm->_screen->_scrollRow + _vm->_screen->_vWindowHeight,
_vm->_screen->_vWindowLinesTall * _vm->_screen->_bufferBytesWide);

if ((_vm->_screen->_scrollRow + _vm->_screen->_vWindowHeight) >=
_vm->_room->_playFieldHeight)
return true;

if (_vm->_screen->_scrollY <= TILE_HEIGHT)
return false;
}

return false;
}

bool Player::scrollDown() {
// TODO: Refactor checkScroll code here
return false;
}

bool Player::scrollLeft() {
// TODO: Refactor checkScroll code here
return false;
}

bool Player::scrollRight() {
// TODO: Refactor checkScroll code here
return false;
}

} // End of namespace Access
12 changes: 11 additions & 1 deletion engines/access/player.h
Expand Up @@ -56,6 +56,7 @@ class Player: public ImageEntry, Manager {
SpriteResource *_playerSprites;
SpriteResource *_playerSprites1;
byte *_manPal1;
int _scrollEnd;

bool codeWalls();
void checkMove();
Expand All @@ -72,6 +73,10 @@ class Player: public ImageEntry, Manager {
void walkDownLeft();
void walkUpRight();
void walkDownRight();
bool scrollUp();
bool scrollDown();
bool scrollLeft();
bool scrollRight();
public:
// Fields in original Player structure
byte *_monData;
Expand All @@ -94,8 +99,11 @@ class Player: public ImageEntry, Manager {
int _playerY;
int _frame;

// Additional globals we've added to new Player class
// Additional public globals we've added to new Player class
bool _playerOff;
bool _scrollFlag;
int _scrollThreshold;
int _scrollAmount;

// Additional globals that need to be saved
int _roomNumber;
Expand All @@ -116,6 +124,8 @@ class Player: public ImageEntry, Manager {
void walk();

void calcPlayer();

void checkScroll();
};

} // End of namespace Access
Expand Down
10 changes: 7 additions & 3 deletions engines/access/room.cpp
Expand Up @@ -85,7 +85,7 @@ void Room::doRoom() {

_vm->_player->walk();
_vm->_sound->midiRepeat();
_vm->_screen->checkScroll();
_vm->_player->checkScroll();
doCommands();

// DOROOMFLASHBACK jump point
Expand All @@ -103,7 +103,7 @@ void Room::doRoom() {
break;
}

if (_vm->_screen->_scrollFlag) {
if (_vm->_player->_scrollFlag) {
_vm->copyBF1BF2();
_vm->_newRects.clear();
_function = 0;
Expand Down Expand Up @@ -209,7 +209,7 @@ void Room::loadRoomData(const byte *roomData) {
}

_vm->_scaleI = roomInfo._scaleI;
_vm->_screen->_scrollThreshold = roomInfo._scrollThreshold;
_vm->_player->_scrollThreshold = roomInfo._scrollThreshold;

// Handle loading scene palette data
if (roomInfo._paletteFile._fileNum != -1) {
Expand Down Expand Up @@ -319,6 +319,10 @@ void Room::buildColumn(int playX, int screenX) {
}
}

void Room::buildRow(int playY, int screenY) {
error("TODO: buildRow");
}

void Room::init4Quads() {
error("TODO: init4Quads");
}
Expand Down
2 changes: 2 additions & 0 deletions engines/access/room.h
Expand Up @@ -114,6 +114,8 @@ class Room: public Manager {

void buildColumn(int playX, int screenX);

void buildRow(int playY, int screenY);

void init4Quads();
};

Expand Down
19 changes: 12 additions & 7 deletions engines/access/screen.cpp
Expand Up @@ -46,13 +46,10 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) {
_currentPanel = 0;
_hideFlag = true;
_loadPalFlag = false;
_scrollFlag = false;
_scrollThreshold = 0;
_startColor = _numColors = 0;
_scrollCol = _scrollRow = 0;
_windowXAdd = _windowYAdd = 0;
_screenYOff = 0;
_scrollEnd = 0;

_bufferBytesWide = _vWindowBytesWide = this->w;
_vWindowLinesTall = this->h;
Expand Down Expand Up @@ -182,10 +179,6 @@ void Screen::copyBuffer(const byte *data) {
g_system->copyRectToScreen(destP, w, 0, 0, w, h);
}

void Screen::checkScroll() {
warning("TODO");
}

void Screen::setBufferScan() {
_clipWidth = _vWindowBytesWide - 1;
_windowXAdd = (320 - _clipWidth) >> 1;
Expand Down Expand Up @@ -230,4 +223,16 @@ void Screen::restoreScreen() {
_screenYOff = _screenSave._screenYOff;
}

void Screen::moveBufferLeft() {
error("TODO: LEFT");
}

void Screen::moveBufferDown() {
error("TODO: LEFT");
}

void Screen::moveBufferUp() {
error("TODO: UP");
}

} // End of namespace Access

0 comments on commit 4a3ce2d

Please sign in to comment.