From a0beb08984b989d6dcb1c9dcbc8bb083e2534891 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 23 Nov 2014 16:15:07 -0500 Subject: ACCESS: Refactor _inactive from AccessEngine to AmazonEngine --- engines/access/access.cpp | 9 ------ engines/access/access.h | 6 ---- engines/access/amazon/amazon_game.cpp | 11 ++++++- engines/access/amazon/amazon_game.h | 11 +++++++ engines/access/amazon/amazon_room.cpp | 9 +++++- engines/access/amazon/amazon_room.h | 1 + engines/access/amazon/amazon_scripts.cpp | 50 +++++++++++++++++++------------- engines/access/martian/martian_room.cpp | 6 ++-- engines/access/room.cpp | 1 - engines/access/room.h | 2 +- 10 files changed, 64 insertions(+), 42 deletions(-) (limited to 'engines/access') diff --git a/engines/access/access.cpp b/engines/access/access.cpp index e87b647b59..cb47598066 100644 --- a/engines/access/access.cpp +++ b/engines/access/access.cpp @@ -54,9 +54,6 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc) _mouseMode = 0; _currentMan = 0; _currentManOld = -1; - _inactive._spritesPtr = nullptr; - _inactive._flags = _inactive._frameNumber = _inactive._offsetY = 0; - _inactive._position = Common::Point(0, 0); _music = nullptr; _title = nullptr; _converseMode = 0; @@ -128,7 +125,6 @@ AccessEngine::~AccessEngine() { delete _video; freeCells(); - delete _inactive._spritesPtr; delete _music; delete _title; delete _eseg; @@ -212,11 +208,6 @@ void AccessEngine::freeCells() { } } -void AccessEngine::freeInactiveData() { - delete _inactive._spritesPtr; - _inactive._spritesPtr = nullptr; -} - void AccessEngine::speakText(ASurface *s, const Common::String &msg) { Common::String lines = msg; Common::String line; diff --git a/engines/access/access.h b/engines/access/access.h index 805abcce02..12e0e1bd5e 100644 --- a/engines/access/access.h +++ b/engines/access/access.h @@ -175,7 +175,6 @@ public: int _mouseMode; int _currentManOld; - ImageEntry _inactive; Resource *_music; Resource *_title; int _converseMode; @@ -250,11 +249,6 @@ public: */ void freeCells(); - /** - * Free the inactive data - */ - void freeInactiveData(); - virtual void establish(int esatabIndex, int sub) = 0; void plotList(); diff --git a/engines/access/amazon/amazon_game.cpp b/engines/access/amazon/amazon_game.cpp index def64f2f88..5c7a3edca2 100644 --- a/engines/access/amazon/amazon_game.cpp +++ b/engines/access/amazon/amazon_game.cpp @@ -72,10 +72,19 @@ AmazonEngine::AmazonEngine(OSystem *syst, const AccessGameDescription *gameDesc) memset(_tileData, 0, sizeof(_tileData)); _chapterCells.push_back(CellIdent(0, 96, 17)); - + _inactive._spritesPtr = nullptr; + _inactive._altSpritesPtr = nullptr; + _inactive._flags = _inactive._frameNumber = _inactive._offsetY = 0; + _inactive._position = Common::Point(0, 0); } AmazonEngine::~AmazonEngine() { + delete _inactive._spritesPtr; +} + +void AmazonEngine::freeInactivePlayer() { + delete _inactive._spritesPtr; + _inactive._spritesPtr = nullptr; } void AmazonEngine::playGame() { diff --git a/engines/access/amazon/amazon_game.h b/engines/access/amazon/amazon_game.h index 26a9454d09..05caa21018 100644 --- a/engines/access/amazon/amazon_game.h +++ b/engines/access/amazon/amazon_game.h @@ -52,6 +52,11 @@ public: Guard(); }; +class InactivePlayer : public ImageEntry { +public: + SpriteResource *_altSpritesPtr; +}; + class AmazonEngine : public AccessEngine { private: Common::Point _tilePos; @@ -94,6 +99,7 @@ protected: */ virtual void synchronize(Common::Serializer &s); public: + InactivePlayer _inactive; bool _charSegSwitch; bool _skipStart; @@ -161,6 +167,11 @@ public: virtual ~AmazonEngine(); + /** + * Free the inactive player data + */ + void freeInactivePlayer(); + void drawHelp(); virtual void establish(int esatabIndex, int sub); diff --git a/engines/access/amazon/amazon_room.cpp b/engines/access/amazon/amazon_room.cpp index db46b4836c..262a6caa87 100644 --- a/engines/access/amazon/amazon_room.cpp +++ b/engines/access/amazon/amazon_room.cpp @@ -78,7 +78,7 @@ void AmazonRoom::reloadRoom1() { if (_vm->_player->_roomNumber == 29 || _vm->_player->_roomNumber == 31 || _vm->_player->_roomNumber == 42 || _vm->_player->_roomNumber == 44) { Resource *spriteData = _vm->_files->loadFile("MAYA.LZ"); - _vm->_inactive._spritesPtr = new SpriteResource(_vm, spriteData); + _game->_inactive._spritesPtr = new SpriteResource(_vm, spriteData); delete spriteData; _vm->_currentCharFlag = false; } @@ -168,9 +168,11 @@ void AmazonRoom::mainAreaClick() { _vm->_player->_roomNumber == 31 || _vm->_player->_roomNumber == 29) { switch (checkBoxes1(pt)) { case 0: + // Make Jason the active player _game->_jasMayaFlag = 0; return; case 1: + // Make Maya the active player _game->_jasMayaFlag = 1; return; default: @@ -208,6 +210,11 @@ void AmazonRoom::init4Quads() { _vm->_screen->clearScreen(); } +void AmazonRoom::clearRoom() { + Room::clearRoom(); + _game->freeInactivePlayer(); +} + } // End of namespace Amazon } // End of namespace Access diff --git a/engines/access/amazon/amazon_room.h b/engines/access/amazon/amazon_room.h index 6b89a8f348..bcb0d84e15 100644 --- a/engines/access/amazon/amazon_room.h +++ b/engines/access/amazon/amazon_room.h @@ -52,6 +52,7 @@ protected: virtual void mainAreaClick(); + virtual void clearRoom(); public: AmazonRoom(AccessEngine *vm); diff --git a/engines/access/amazon/amazon_scripts.cpp b/engines/access/amazon/amazon_scripts.cpp index 75fbd052b0..8a92dd6994 100644 --- a/engines/access/amazon/amazon_scripts.cpp +++ b/engines/access/amazon/amazon_scripts.cpp @@ -1553,41 +1553,51 @@ void AmazonScripts::boatWalls(int param1, int param2) { } void AmazonScripts::plotInactive() { + Player &player = *_vm->_player; + InactivePlayer &inactive = _game->_inactive; + if (_game->_charSegSwitch) { _game->_currentCharFlag = true; - SpriteResource *tmp = _vm->_inactive._spritesPtr; - _vm->_inactive._spritesPtr = _vm->_player->_playerSprites; - _vm->_player->_playerSprites = tmp; + SpriteResource *tmp = inactive._spritesPtr; + inactive._spritesPtr = player._playerSprites; + player._playerSprites = tmp; _game->_charSegSwitch = false; } else if (_game->_jasMayaFlag != (_game->_currentCharFlag ? 1 : 0)) { - if (_vm->_player->_playerOff) { + if (player._playerOff) { _game->_jasMayaFlag = (_game->_currentCharFlag ? 1 : 0); } else { _game->_currentCharFlag = (_game->_jasMayaFlag == 1); int tmpX = _game->_rawInactiveX; int tmpY = _game->_rawInactiveY; - _game->_rawInactiveX = _vm->_player->_rawPlayer.x; - _game->_rawInactiveY = _vm->_player->_rawPlayer.y; - _vm->_player->_rawPlayer.x = tmpX; - _vm->_player->_rawPlayer.y = tmpY; - _game->_inactiveYOff = _vm->_player->_playerOffset.y; - _vm->_player->calcManScale(); + _game->_rawInactiveX = player._rawPlayer.x; + _game->_rawInactiveY = player._rawPlayer.y; + player._rawPlayer.x = tmpX; + player._rawPlayer.y = tmpY; + _game->_inactiveYOff = player._playerOffset.y; + player.calcManScale(); } } - if (_vm->_player->_roomNumber == 44) { - warning("CHECKME: Only sets useless(?) flags 155 and 160"); + _game->_flags[155] = 0; + if (_game->_rawInactiveX >= 152 && _game->_rawInactiveX <= 167 && + _game->_rawInactiveY >= 158 && _game->_rawInactiveY <= 173) { + _game->_flags[155] = 1; + } else { + _game->_flags[160] = 1; + if (!_game->_jasMayaFlag && _game->_rawInactiveX <= 266 && _game->_rawInactiveX < 290 + && _game->_rawInactiveY >= 70 && _game->_rawInactiveY <= 87) { + _game->_flags[160] = 1; + } } - _vm->_inactive._flags &= 0xFD; - _vm->_inactive._flags &= 0xF7; - _vm->_inactive._position.x = _game->_rawInactiveX; - _vm->_inactive._position.y = _game->_rawInactiveY - _game->_inactiveYOff; - _vm->_inactive._offsetY = _game->_inactiveYOff; - _vm->_inactive._frameNumber = 0; - - _vm->_images.addToList(_vm->_inactive); + inactive._flags &= ~IMGFLAG_UNSCALED; + inactive._flags &= ~IMGFLAG_BACKWARDS; + inactive._position.x = _game->_rawInactiveX; + inactive._position.y = _game->_rawInactiveY - _game->_inactiveYOff; + inactive._offsetY = _game->_inactiveYOff; + inactive._frameNumber = 0; + _vm->_images.addToList(_game->_inactive); } void AmazonScripts::setRiverPan() { diff --git a/engines/access/martian/martian_room.cpp b/engines/access/martian/martian_room.cpp index 6d4d62f7e9..62c44bc529 100644 --- a/engines/access/martian/martian_room.cpp +++ b/engines/access/martian/martian_room.cpp @@ -75,9 +75,9 @@ void MartianRoom::reloadRoom() { void MartianRoom::reloadRoom1() { if (_vm->_player->_roomNumber == 29 || _vm->_player->_roomNumber == 31 || _vm->_player->_roomNumber == 42 || _vm->_player->_roomNumber == 44) { - Resource *spriteData = _vm->_files->loadFile("MAYA.LZ"); - _vm->_inactive._spritesPtr = new SpriteResource(_vm, spriteData); - delete spriteData; + //Resource *spriteData = _vm->_files->loadFile("MAYA.LZ"); + //_vm->_inactive._spritesPtr = new SpriteResource(_vm, spriteData); + //delete spriteData; _vm->_currentCharFlag = false; } diff --git a/engines/access/room.cpp b/engines/access/room.cpp index 31d1583c3e..37746d1b7c 100644 --- a/engines/access/room.cpp +++ b/engines/access/room.cpp @@ -164,7 +164,6 @@ void Room::clearRoom() { _vm->freeCells(); freePlayField(); freeTileData(); - _vm->freeInactiveData(); _vm->_player->freeSprites(); } diff --git a/engines/access/room.h b/engines/access/room.h index 9b3136630e..a26f2ed04c 100644 --- a/engines/access/room.h +++ b/engines/access/room.h @@ -144,7 +144,7 @@ public: /** * Clear all the data used by the room */ - void clearRoom(); + virtual void clearRoom(); /** * Builds up a game screen -- cgit v1.2.3