aboutsummaryrefslogtreecommitdiff
path: root/engines/access
diff options
context:
space:
mode:
authorPaul Gilbert2014-11-23 16:15:07 -0500
committerPaul Gilbert2014-12-12 22:39:42 -0500
commita0beb08984b989d6dcb1c9dcbc8bb083e2534891 (patch)
tree664b14ca731ad4f51d873243efde314c8e5d4032 /engines/access
parent1cbaab55cd6870c9f75162f1ddb90f0c25959db3 (diff)
downloadscummvm-rg350-a0beb08984b989d6dcb1c9dcbc8bb083e2534891.tar.gz
scummvm-rg350-a0beb08984b989d6dcb1c9dcbc8bb083e2534891.tar.bz2
scummvm-rg350-a0beb08984b989d6dcb1c9dcbc8bb083e2534891.zip
ACCESS: Refactor _inactive from AccessEngine to AmazonEngine
Diffstat (limited to 'engines/access')
-rw-r--r--engines/access/access.cpp9
-rw-r--r--engines/access/access.h6
-rw-r--r--engines/access/amazon/amazon_game.cpp11
-rw-r--r--engines/access/amazon/amazon_game.h11
-rw-r--r--engines/access/amazon/amazon_room.cpp9
-rw-r--r--engines/access/amazon/amazon_room.h1
-rw-r--r--engines/access/amazon/amazon_scripts.cpp50
-rw-r--r--engines/access/martian/martian_room.cpp6
-rw-r--r--engines/access/room.cpp1
-rw-r--r--engines/access/room.h2
10 files changed, 64 insertions, 42 deletions
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