aboutsummaryrefslogtreecommitdiff
path: root/engines/access
diff options
context:
space:
mode:
authorPaul Gilbert2014-08-05 23:23:49 -0400
committerPaul Gilbert2014-08-05 23:23:49 -0400
commit8e43a6c5280e2b695753d4a0b6810811f1bd393f (patch)
treed4cd7a9228e65fb53f9d3ca4d5393ebefcb22cfa /engines/access
parent7d605ce57316c86a247cf978e6b123b23045659c (diff)
downloadscummvm-rg350-8e43a6c5280e2b695753d4a0b6810811f1bd393f.tar.gz
scummvm-rg350-8e43a6c5280e2b695753d4a0b6810811f1bd393f.tar.bz2
scummvm-rg350-8e43a6c5280e2b695753d4a0b6810811f1bd393f.zip
ACCESS: Add scripts classes and Amazon room setup
Diffstat (limited to 'engines/access')
-rw-r--r--engines/access/access.cpp6
-rw-r--r--engines/access/access.h6
-rw-r--r--engines/access/amazon/amazon_game.cpp9
-rw-r--r--engines/access/amazon/amazon_room.cpp121
-rw-r--r--engines/access/amazon/amazon_room.h54
-rw-r--r--engines/access/amazon/amazon_scripts.cpp36
-rw-r--r--engines/access/amazon/amazon_scripts.h42
-rw-r--r--engines/access/module.mk5
-rw-r--r--engines/access/player.cpp8
-rw-r--r--engines/access/player.h4
-rw-r--r--engines/access/room.cpp48
-rw-r--r--engines/access/room.h13
-rw-r--r--engines/access/screen.cpp4
-rw-r--r--engines/access/screen.h6
-rw-r--r--engines/access/scripts.cpp42
-rw-r--r--engines/access/scripts.h48
16 files changed, 444 insertions, 8 deletions
diff --git a/engines/access/access.cpp b/engines/access/access.cpp
index fa1775feca..e175b1c081 100644
--- a/engines/access/access.cpp
+++ b/engines/access/access.cpp
@@ -37,6 +37,7 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_player = nullptr;
_room = nullptr;
_screen = nullptr;
+ _scripts = nullptr;
_sound = nullptr;
_destIn = nullptr;
@@ -48,10 +49,10 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_currentMan = 0;
_currentManOld = -1;
_man1 = nullptr;
+ _inactive = nullptr;
_manPal1 = nullptr;
_music = nullptr;
_playField = nullptr;
- _script = nullptr;
_anim = nullptr;
_title = nullptr;
_converseMode = 0;
@@ -65,6 +66,8 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_nextImage = 0;
_numAnimTimers = 0;
_startup = 0;
+ _currentCharFlag = false;
+ _boxSelect = false;
_roomNumber = 0;
_rawPlayerXLow = 0;
@@ -119,6 +122,7 @@ AccessEngine::~AccessEngine() {
delete _player;
delete _room;
delete _screen;
+ delete _scripts;
delete _sound;
_buffer1.free();
diff --git a/engines/access/access.h b/engines/access/access.h
index fce6c443f4..21f8072311 100644
--- a/engines/access/access.h
+++ b/engines/access/access.h
@@ -37,6 +37,7 @@
#include "access/player.h"
#include "access/room.h"
#include "access/screen.h"
+#include "access/scripts.h"
#include "access/sound.h"
/**
@@ -108,6 +109,7 @@ public:
Player *_player;
Room *_room;
Screen *_screen;
+ Scripts *_scripts;
SoundManager *_sound;
byte *_destIn;
@@ -127,10 +129,10 @@ public:
int _currentManOld;
byte *_man1;
+ byte *_inactive;
byte *_manPal1;
byte *_music;
byte *_playField;
- byte *_script;
byte *_anim;
byte *_title;
int _converseMode;
@@ -140,6 +142,8 @@ public:
int _startInvBox;
int _startAboutBox;
int _startTravelBox;
+ bool _currentCharFlag;
+ bool _boxSelect;
// Fields that are included in savegames
int _roomNumber;
diff --git a/engines/access/amazon/amazon_game.cpp b/engines/access/amazon/amazon_game.cpp
index 8cbd0767b2..ffe4cb56f1 100644
--- a/engines/access/amazon/amazon_game.cpp
+++ b/engines/access/amazon/amazon_game.cpp
@@ -20,8 +20,10 @@
*
*/
-#include "access/amazon/amazon_game.h"
#include "access/resources.h"
+#include "access/amazon/amazon_game.h"
+#include "access/amazon/amazon_room.h"
+#include "access/amazon/amazon_scripts.h"
namespace Access {
@@ -50,6 +52,7 @@ AmazonEngine::~AmazonEngine() {
}
void AmazonEngine::playGame() {
+ // Do introduction
doIntroduction();
if (shouldQuit())
return;
@@ -62,6 +65,10 @@ void AmazonEngine::playGame() {
_screen->forceFadeOut();
_events->showCursor();
+
+ // Setup and execute the room
+ _room = new AmazonRoom(this);
+ _scripts = new AmazonScripts(this);
_room->doRoom();
}
diff --git a/engines/access/amazon/amazon_room.cpp b/engines/access/amazon/amazon_room.cpp
new file mode 100644
index 0000000000..ce0683f124
--- /dev/null
+++ b/engines/access/amazon/amazon_room.cpp
@@ -0,0 +1,121 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/scummsys.h"
+#include "access/access.h"
+#include "access/amazon/amazon_room.h"
+
+namespace Access {
+
+namespace Amazon {
+
+AmazonRoom::AmazonRoom(AccessEngine *vm): Room(vm) {
+ _antOutFlag = false;
+}
+
+void AmazonRoom::reloadRoom() {
+ loadRoom(_vm->_roomNumber);
+
+ if (_roomFlag != 1) {
+ _vm->_currentMan = _roomFlag;
+ _vm->_currentManOld = _roomFlag;
+ _vm->_manScaleOff = 0;
+
+ switch (_vm->_currentMan) {
+ case 0:
+ _vm->_man1 = _vm->_files->loadFile("MAN.LZ");
+ break;
+
+ case 2:
+ _vm->_man1 = _vm->_files->loadFile("JMAN.LZ");
+ break;
+
+ case 3:
+ _vm->_man1 = _vm->_files->loadFile("OVERHEAD.LZ");
+ _vm->_manScaleOff = 1;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ reloadRoom1();
+}
+
+void AmazonRoom::reloadRoom1() {
+ if (_vm->_roomNumber == 22 || _vm->_roomNumber == 31
+ || _vm->_roomNumber == 42 || _vm->_roomNumber == 44) {
+ _vm->_inactive = _vm->_files->loadFile("MAYA.LZ");
+ _vm->_currentCharFlag = false;
+ }
+
+ _vm->_selectCommand = -1;
+ _vm->_normalMouse = 1;
+ _vm->_mouseMode = 0;
+ _vm->_boxSelect = true;
+ _vm->_player->_playerOff = 0;
+
+ _vm->_screen->fadeOut();
+ _vm->_screen->clearScreen();
+ roomSet();
+
+ if (!_roomFlag && (_vm->_roomNumber != 61 || !_antOutFlag)) {
+ _vm->_player->load();
+ _vm->_player->calcManScale();
+ }
+
+ if (_vm->_roomNumber != 20 && _vm->_roomNumber != 24
+ && _vm->_roomNumber != 33 && _vm->_roomNumber != 45) {
+ roomMenu();
+ }
+
+ _vm->_screen->setBufferScan();
+ setupRoom();
+ setWallCodes();
+ buildScreen();
+
+ if (_vm->_roomNumber != 20 && _vm->_roomNumber != 24
+ && _vm->_roomNumber != 33) {
+ _vm->_screen->setPalette();
+ _vm->_screen->copyBF2Vid();
+ }
+
+ _vm->_player->_frame = 0;
+ _vm->_oldRect.clear();
+ _vm->_newRect.clear();
+}
+
+void AmazonRoom::roomSet() {
+ _vm->_numAnimTimers = 0;
+ _vm->_scripts->_sequence = 1000;
+ _vm->_scripts->searchForSeq();
+ _vm->_scripts->executeCommand();
+}
+
+void AmazonRoom::roomMenu() {
+ // TODO
+}
+
+} // End of namespace Amazon
+
+} // End of namespace Access
diff --git a/engines/access/amazon/amazon_room.h b/engines/access/amazon/amazon_room.h
new file mode 100644
index 0000000000..6d13a4e52c
--- /dev/null
+++ b/engines/access/amazon/amazon_room.h
@@ -0,0 +1,54 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ACCESS_AMAZON_ROOM_H
+#define ACCESS_AMAZON_ROOM_H
+
+#include "common/scummsys.h"
+#include "access/room.h"
+
+namespace Access {
+
+class AccessEngine;
+
+namespace Amazon {
+
+class AmazonRoom : public Room {
+private:
+ bool _antOutFlag;
+
+ void roomSet();
+
+ void roomMenu();
+protected:
+ virtual void reloadRoom();
+
+ virtual void reloadRoom1();
+public:
+ AmazonRoom(AccessEngine *vm);
+};
+
+} // End of namespace Amazon
+
+} // End of namespace Access
+
+#endif /* ACCESS_AMAZON_ROOM_H */
diff --git a/engines/access/amazon/amazon_scripts.cpp b/engines/access/amazon/amazon_scripts.cpp
new file mode 100644
index 0000000000..1d3e7b4b76
--- /dev/null
+++ b/engines/access/amazon/amazon_scripts.cpp
@@ -0,0 +1,36 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/scummsys.h"
+#include "access/access.h"
+#include "access/amazon/amazon_scripts.h"
+
+namespace Access {
+
+namespace Amazon {
+
+AmazonScripts::AmazonScripts(AccessEngine *vm) : Scripts(vm) {
+}
+
+} // End of namespace Amazon
+
+} // End of namespace Access
diff --git a/engines/access/amazon/amazon_scripts.h b/engines/access/amazon/amazon_scripts.h
new file mode 100644
index 0000000000..08fbc3a0f2
--- /dev/null
+++ b/engines/access/amazon/amazon_scripts.h
@@ -0,0 +1,42 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ACCESS_AMAZON_SCRIPTS_H
+#define ACCESS_AMAZON_SCRIPTS_H
+
+#include "common/scummsys.h"
+#include "access/scripts.h"
+
+namespace Access {
+
+namespace Amazon {
+
+class AmazonScripts: public Scripts {
+public:
+ AmazonScripts(AccessEngine *vm);
+};
+
+} // End of namespace Amazon
+
+} // End of namespace Access
+
+#endif /* ACCESS_AMAZON_SCRIPTS_H */
diff --git a/engines/access/module.mk b/engines/access/module.mk
index 791abcc861..5c9203fde2 100644
--- a/engines/access/module.mk
+++ b/engines/access/module.mk
@@ -13,8 +13,11 @@ MODULE_OBJS := \
resources.o \
room.o \
screen.o \
+ scripts.o \
sound.o \
- amazon\amazon_game.o
+ amazon\amazon_game.o \
+ amazon\amazon_room.o \
+ amazon\amazon_scripts.o
# This module can be built as a plugin
ifeq ($(ENABLE_ACCESS), DYNAMIC_PLUGIN)
diff --git a/engines/access/player.cpp b/engines/access/player.cpp
index f7429bd9b5..a85df0320b 100644
--- a/engines/access/player.cpp
+++ b/engines/access/player.cpp
@@ -46,6 +46,14 @@ Player::Player(AccessEngine *vm): _vm(vm) {
_playerOff = false;
}
+void Player::load() {
+ // TODO
+}
+
+void Player::calcManScale() {
+ // TODO
+}
+
void Player::walk() {
warning("TODO: Player::walk");
}
diff --git a/engines/access/player.h b/engines/access/player.h
index 94ae9872b5..4d19601230 100644
--- a/engines/access/player.h
+++ b/engines/access/player.h
@@ -63,6 +63,10 @@ public:
public:
Player(AccessEngine *vm);
+ void load();
+
+ void calcManScale();
+
void walk();
};
diff --git a/engines/access/room.cpp b/engines/access/room.cpp
index 25d3584ede..c3a3a9f8e2 100644
--- a/engines/access/room.cpp
+++ b/engines/access/room.cpp
@@ -28,6 +28,7 @@ namespace Access {
Room::Room(AccessEngine *vm) : _vm(vm) {
_function = 0;
+ _roomFlag = 0;
}
void Room::doRoom() {
@@ -40,6 +41,8 @@ void Room::doRoom() {
_vm->_oldRect.clear();
_vm->_nextImage = 0;
_vm->_numAnimTimers = 0;
+
+ reloadRoom();
}
reloadFlag = false;
@@ -113,18 +116,63 @@ void Room::clearRoom() {
// TODO
}
+void Room::reloadRoom() {
+ loadRoom(_vm->_roomNumber);
+
+ if (_roomFlag != 1) {
+ _vm->_currentMan = _roomFlag;
+ _vm->_currentManOld = _roomFlag;
+ _vm->_manScaleOff = 0;
+
+ switch (_vm->_currentMan) {
+ case 0:
+ _vm->_man1 = _vm->_files->loadFile("MAN.LZ");
+ break;
+
+ case 2:
+ _vm->_man1 = _vm->_files->loadFile("JMAN.LZ");
+ break;
+
+ case 3:
+ _vm->_man1 = _vm->_files->loadFile("OVERHEAD.LZ");
+ _vm->_manScaleOff = 1;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ reloadRoom1();
+}
+
void Room::reloadRoom1() {
// TODO
}
+void Room::loadRoom(int room) {
+ // TODO
+}
+
void Room::roomLoop() {
// TODO
}
void Room::doCommands() {
+ // TODO
+}
+
+void Room::setupRoom() {
+ // TODO
+}
+void Room::setWallCodes() {
+ // TODO
}
+void Room::buildScreen() {
+ // TODO
+}
} // End of namespace Access
diff --git a/engines/access/room.h b/engines/access/room.h
index 3b1a3347f9..fd5e602348 100644
--- a/engines/access/room.h
+++ b/engines/access/room.h
@@ -31,11 +31,20 @@ class AccessEngine;
class Room {
private:
+ void roomLoop();
+protected:
AccessEngine *_vm;
- void roomLoop();
+ void setupRoom();
+ void setWallCodes();
+ void buildScreen();
+
+ virtual void reloadRoom() = 0;
+
+ virtual void reloadRoom1() = 0;
public:
int _function;
+ int _roomFlag;
public:
Room(AccessEngine *vm);
@@ -45,7 +54,7 @@ public:
void clearRoom();
- void reloadRoom1();
+ void loadRoom(int room);
};
} // End of namespace Access
diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp
index 8c87638937..8dcc9f1db9 100644
--- a/engines/access/screen.cpp
+++ b/engines/access/screen.cpp
@@ -207,4 +207,8 @@ void Screen::copyRects() {
// TODO
}
+void Screen::setBufferScan() {
+ // TODO
+}
+
} // End of namespace Access
diff --git a/engines/access/screen.h b/engines/access/screen.h
index 5f9fff058e..1b03d261cf 100644
--- a/engines/access/screen.h
+++ b/engines/access/screen.h
@@ -50,8 +50,6 @@ private:
int _topSkip, _bottomSkip;
int _clipWidth, _clipHeight;
- void setPalette();
-
void updatePalette();
bool clip(Common::Rect &r);
@@ -91,6 +89,8 @@ public:
void loadPalette(Common::SeekableReadStream *stream);
+ void setPalette();
+
/**
* Copy a buffer to the screen
*/
@@ -109,6 +109,8 @@ public:
void copyBlocks();
void copyRects();
+
+ void setBufferScan();
};
} // End of namespace Access
diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp
new file mode 100644
index 0000000000..e31cd0cf5c
--- /dev/null
+++ b/engines/access/scripts.cpp
@@ -0,0 +1,42 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/scummsys.h"
+#include "access/access.h"
+#include "access/scripts.h"
+
+namespace Access {
+
+Scripts::Scripts(AccessEngine *vm) : _vm(vm) {
+ _script = nullptr;
+ _sequence = 0;
+}
+
+void Scripts::searchForSeq() {
+ // TODO
+}
+
+void Scripts::executeCommand() {
+ // TODO
+}
+
+} // End of namespace Access
diff --git a/engines/access/scripts.h b/engines/access/scripts.h
new file mode 100644
index 0000000000..b3e898f512
--- /dev/null
+++ b/engines/access/scripts.h
@@ -0,0 +1,48 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ACCESS_SCRIPTS_H
+#define ACCESS_SCRIPTS_H
+
+#include "common/scummsys.h"
+
+namespace Access {
+
+class AccessEngine;
+
+class Scripts {
+protected:
+ AccessEngine *_vm;
+public:
+ byte *_script;
+ int _sequence;
+public:
+ Scripts(AccessEngine *vm);
+
+ void searchForSeq();
+
+ void executeCommand();
+};
+
+} // End of namespace Access
+
+#endif /* ACCESS_SCRIPTS_H */