From 8e43a6c5280e2b695753d4a0b6810811f1bd393f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 5 Aug 2014 23:23:49 -0400 Subject: ACCESS: Add scripts classes and Amazon room setup --- engines/access/access.cpp | 6 +- engines/access/access.h | 6 +- engines/access/amazon/amazon_game.cpp | 9 ++- engines/access/amazon/amazon_room.cpp | 121 +++++++++++++++++++++++++++++++ engines/access/amazon/amazon_room.h | 54 ++++++++++++++ engines/access/amazon/amazon_scripts.cpp | 36 +++++++++ engines/access/amazon/amazon_scripts.h | 42 +++++++++++ engines/access/module.mk | 5 +- engines/access/player.cpp | 8 ++ engines/access/player.h | 4 + engines/access/room.cpp | 48 ++++++++++++ engines/access/room.h | 13 +++- engines/access/screen.cpp | 4 + engines/access/screen.h | 6 +- engines/access/scripts.cpp | 42 +++++++++++ engines/access/scripts.h | 48 ++++++++++++ 16 files changed, 444 insertions(+), 8 deletions(-) create mode 100644 engines/access/amazon/amazon_room.cpp create mode 100644 engines/access/amazon/amazon_room.h create mode 100644 engines/access/amazon/amazon_scripts.cpp create mode 100644 engines/access/amazon/amazon_scripts.h create mode 100644 engines/access/scripts.cpp create mode 100644 engines/access/scripts.h (limited to 'engines/access') 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 */ -- cgit v1.2.3