diff options
Diffstat (limited to 'engines/access/player.cpp')
-rw-r--r-- | engines/access/player.cpp | 115 |
1 files changed, 42 insertions, 73 deletions
diff --git a/engines/access/player.cpp b/engines/access/player.cpp index 70f688120c..b5046632c5 100644 --- a/engines/access/player.cpp +++ b/engines/access/player.cpp @@ -25,9 +25,19 @@ #include "access/player.h" #include "access/access.h" #include "access/resources.h" +#include "access/amazon/amazon_player.h" namespace Access { +Player *Player::init(AccessEngine *vm) { + switch (vm->getGameID()) { + case GType_Amazon: + return new Amazon::AmazonPlayer(vm); + default: + return new Player(vm); + } +} + Player::Player(AccessEngine *vm): Manager(vm), ImageEntry() { Common::fill(&_walkOffRight[0], &_walkOffRight[PLAYER_DATA_COUNT], 0); Common::fill(&_walkOffLeft[0], &_walkOffLeft[PLAYER_DATA_COUNT], 0); @@ -71,81 +81,40 @@ Player::~Player() { } void Player::load() { - if (_vm->_room->_roomFlag == 3) { - _playerOffset.x = _vm->_screen->_scaleTable1[8]; - _playerOffset.y = _vm->_screen->_scaleTable1[11]; - _leftDelta = 0; - _rightDelta = 8; - _upDelta = 2; - _downDelta = -2; - _scrollConst = 2; - - for (int i = 0; i < PLAYER_DATA_COUNT; ++i) { - _walkOffRight[i] = OVEROFFR[i]; - _walkOffLeft[i] = OVEROFFL[i]; - _walkOffUp[i] = OVEROFFU[i]; - _walkOffDown[i] = OVEROFFD[i]; - _walkOffUR[i].x = OVEROFFURX[i]; - _walkOffUR[i].y = OVEROFFURY[i]; - _walkOffDR[i].x = OVEROFFDRX[i]; - _walkOffDR[i].y = OVEROFFDRY[i]; - _walkOffUL[i].x = OVEROFFULX[i]; - _walkOffUL[i].y = OVEROFFULY[i]; - _walkOffDL[i].x = OVEROFFDLX[i]; - _walkOffDL[i].y = OVEROFFDLY[i]; - } - - _vm->_timers[8]._initTm = 7; - _vm->_timers[8]._timer = 7; - ++_vm->_timers[8]._flag; - - _sideWalkMin = 0; - _sideWalkMax = 5; - _upWalkMin = 12; - _upWalkMax = 17; - _downWalkMin = 6; - _downWalkMax = 11; - _diagUpWalkMin = 0; - _diagUpWalkMax = 5; - _diagDownWalkMin = 0; - _diagDownWalkMax = 5; - _guard = Common::Point(56, 190); - } else { - _playerOffset.x = _vm->_screen->_scaleTable1[25]; - _playerOffset.y = _vm->_screen->_scaleTable1[67]; - _leftDelta = -3; - _rightDelta = 33; - _upDelta = 5; - _downDelta = -10; - _scrollConst = 5; - - for (int i = 0; i < PLAYER_DATA_COUNT; ++i) { - _walkOffRight[i] = SIDEOFFR[i]; - _walkOffLeft[i] = SIDEOFFL[i]; - _walkOffUp[i] = SIDEOFFU[i]; - _walkOffDown[i] = SIDEOFFD[i]; - _walkOffUR[i].x = DIAGOFFURX[i]; - _walkOffUR[i].y = DIAGOFFURY[i]; - _walkOffDR[i].x = DIAGOFFDRX[i]; - _walkOffDR[i].y = DIAGOFFDRY[i]; - _walkOffUL[i].x = DIAGOFFULX[i]; - _walkOffUL[i].y = DIAGOFFULY[i]; - _walkOffDL[i].x = DIAGOFFDLX[i]; - _walkOffDL[i].y = DIAGOFFDLY[i]; - } - - _sideWalkMin = 0; - _sideWalkMax = 7; - _upWalkMin = 16; - _upWalkMax = 23; - _downWalkMin = 8; - _downWalkMax = 15; - _diagUpWalkMin = 0; - _diagUpWalkMax = 7; - _diagDownWalkMin = 0; - _diagDownWalkMax = 7; + _playerOffset.x = _vm->_screen->_scaleTable1[25]; + _playerOffset.y = _vm->_screen->_scaleTable1[67]; + _leftDelta = -3; + _rightDelta = 33; + _upDelta = 5; + _downDelta = -10; + _scrollConst = 5; + + for (int i = 0; i < PLAYER_DATA_COUNT; ++i) { + _walkOffRight[i] = SIDEOFFR[i]; + _walkOffLeft[i] = SIDEOFFL[i]; + _walkOffUp[i] = SIDEOFFU[i]; + _walkOffDown[i] = SIDEOFFD[i]; + _walkOffUR[i].x = DIAGOFFURX[i]; + _walkOffUR[i].y = DIAGOFFURY[i]; + _walkOffDR[i].x = DIAGOFFDRX[i]; + _walkOffDR[i].y = DIAGOFFDRY[i]; + _walkOffUL[i].x = DIAGOFFULX[i]; + _walkOffUL[i].y = DIAGOFFULY[i]; + _walkOffDL[i].x = DIAGOFFDLX[i]; + _walkOffDL[i].y = DIAGOFFDLY[i]; } + _sideWalkMin = 0; + _sideWalkMax = 7; + _upWalkMin = 16; + _upWalkMax = 23; + _downWalkMin = 8; + _downWalkMax = 15; + _diagUpWalkMin = 0; + _diagUpWalkMax = 7; + _diagDownWalkMin = 0; + _diagDownWalkMax = 7; + _playerSprites = _playerSprites1; if (_manPal1) { Common::copy(_manPal1 + 0x270, _manPal1 + 0x270 + 0x60, _vm->_screen->_manPal); |