ACCESS: Add scripts classes and Amazon room setup

This commit is contained in:
Paul Gilbert 2014-08-05 23:23:49 -04:00
parent 7d605ce573
commit 8e43a6c528
16 changed files with 445 additions and 9 deletions

View file

@ -37,6 +37,7 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_player = nullptr; _player = nullptr;
_room = nullptr; _room = nullptr;
_screen = nullptr; _screen = nullptr;
_scripts = nullptr;
_sound = nullptr; _sound = nullptr;
_destIn = nullptr; _destIn = nullptr;
@ -48,10 +49,10 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_currentMan = 0; _currentMan = 0;
_currentManOld = -1; _currentManOld = -1;
_man1 = nullptr; _man1 = nullptr;
_inactive = nullptr;
_manPal1 = nullptr; _manPal1 = nullptr;
_music = nullptr; _music = nullptr;
_playField = nullptr; _playField = nullptr;
_script = nullptr;
_anim = nullptr; _anim = nullptr;
_title = nullptr; _title = nullptr;
_converseMode = 0; _converseMode = 0;
@ -65,6 +66,8 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_nextImage = 0; _nextImage = 0;
_numAnimTimers = 0; _numAnimTimers = 0;
_startup = 0; _startup = 0;
_currentCharFlag = false;
_boxSelect = false;
_roomNumber = 0; _roomNumber = 0;
_rawPlayerXLow = 0; _rawPlayerXLow = 0;
@ -119,6 +122,7 @@ AccessEngine::~AccessEngine() {
delete _player; delete _player;
delete _room; delete _room;
delete _screen; delete _screen;
delete _scripts;
delete _sound; delete _sound;
_buffer1.free(); _buffer1.free();

View file

@ -37,6 +37,7 @@
#include "access/player.h" #include "access/player.h"
#include "access/room.h" #include "access/room.h"
#include "access/screen.h" #include "access/screen.h"
#include "access/scripts.h"
#include "access/sound.h" #include "access/sound.h"
/** /**
@ -108,6 +109,7 @@ public:
Player *_player; Player *_player;
Room *_room; Room *_room;
Screen *_screen; Screen *_screen;
Scripts *_scripts;
SoundManager *_sound; SoundManager *_sound;
byte *_destIn; byte *_destIn;
@ -127,10 +129,10 @@ public:
int _currentManOld; int _currentManOld;
byte *_man1; byte *_man1;
byte *_inactive;
byte *_manPal1; byte *_manPal1;
byte *_music; byte *_music;
byte *_playField; byte *_playField;
byte *_script;
byte *_anim; byte *_anim;
byte *_title; byte *_title;
int _converseMode; int _converseMode;
@ -140,6 +142,8 @@ public:
int _startInvBox; int _startInvBox;
int _startAboutBox; int _startAboutBox;
int _startTravelBox; int _startTravelBox;
bool _currentCharFlag;
bool _boxSelect;
// Fields that are included in savegames // Fields that are included in savegames
int _roomNumber; int _roomNumber;

View file

@ -20,8 +20,10 @@
* *
*/ */
#include "access/amazon/amazon_game.h"
#include "access/resources.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 { namespace Access {
@ -50,6 +52,7 @@ AmazonEngine::~AmazonEngine() {
} }
void AmazonEngine::playGame() { void AmazonEngine::playGame() {
// Do introduction
doIntroduction(); doIntroduction();
if (shouldQuit()) if (shouldQuit())
return; return;
@ -62,6 +65,10 @@ void AmazonEngine::playGame() {
_screen->forceFadeOut(); _screen->forceFadeOut();
_events->showCursor(); _events->showCursor();
// Setup and execute the room
_room = new AmazonRoom(this);
_scripts = new AmazonScripts(this);
_room->doRoom(); _room->doRoom();
} }

View file

@ -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

View file

@ -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 */

View file

@ -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

View file

@ -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 */

View file

@ -13,8 +13,11 @@ MODULE_OBJS := \
resources.o \ resources.o \
room.o \ room.o \
screen.o \ screen.o \
scripts.o \
sound.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 # This module can be built as a plugin
ifeq ($(ENABLE_ACCESS), DYNAMIC_PLUGIN) ifeq ($(ENABLE_ACCESS), DYNAMIC_PLUGIN)

View file

@ -46,6 +46,14 @@ Player::Player(AccessEngine *vm): _vm(vm) {
_playerOff = false; _playerOff = false;
} }
void Player::load() {
// TODO
}
void Player::calcManScale() {
// TODO
}
void Player::walk() { void Player::walk() {
warning("TODO: Player::walk"); warning("TODO: Player::walk");
} }

View file

@ -63,6 +63,10 @@ public:
public: public:
Player(AccessEngine *vm); Player(AccessEngine *vm);
void load();
void calcManScale();
void walk(); void walk();
}; };

View file

@ -28,6 +28,7 @@ namespace Access {
Room::Room(AccessEngine *vm) : _vm(vm) { Room::Room(AccessEngine *vm) : _vm(vm) {
_function = 0; _function = 0;
_roomFlag = 0;
} }
void Room::doRoom() { void Room::doRoom() {
@ -40,6 +41,8 @@ void Room::doRoom() {
_vm->_oldRect.clear(); _vm->_oldRect.clear();
_vm->_nextImage = 0; _vm->_nextImage = 0;
_vm->_numAnimTimers = 0; _vm->_numAnimTimers = 0;
reloadRoom();
} }
reloadFlag = false; reloadFlag = false;
@ -113,18 +116,63 @@ void Room::clearRoom() {
// TODO // 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() { void Room::reloadRoom1() {
// TODO // TODO
} }
void Room::loadRoom(int room) {
// TODO
}
void Room::roomLoop() { void Room::roomLoop() {
// TODO // TODO
} }
void Room::doCommands() { void Room::doCommands() {
// TODO
} }
void Room::setupRoom() {
// TODO
}
void Room::setWallCodes() {
// TODO
}
void Room::buildScreen() {
// TODO
}
} // End of namespace Access } // End of namespace Access

View file

@ -31,11 +31,20 @@ class AccessEngine;
class Room { class Room {
private: private:
void roomLoop();
protected:
AccessEngine *_vm; AccessEngine *_vm;
void roomLoop(); void setupRoom();
void setWallCodes();
void buildScreen();
virtual void reloadRoom() = 0;
virtual void reloadRoom1() = 0;
public: public:
int _function; int _function;
int _roomFlag;
public: public:
Room(AccessEngine *vm); Room(AccessEngine *vm);
@ -45,7 +54,7 @@ public:
void clearRoom(); void clearRoom();
void reloadRoom1(); void loadRoom(int room);
}; };
} // End of namespace Access } // End of namespace Access

View file

@ -207,4 +207,8 @@ void Screen::copyRects() {
// TODO // TODO
} }
void Screen::setBufferScan() {
// TODO
}
} // End of namespace Access } // End of namespace Access

View file

@ -50,8 +50,6 @@ private:
int _topSkip, _bottomSkip; int _topSkip, _bottomSkip;
int _clipWidth, _clipHeight; int _clipWidth, _clipHeight;
void setPalette();
void updatePalette(); void updatePalette();
bool clip(Common::Rect &r); bool clip(Common::Rect &r);
@ -91,6 +89,8 @@ public:
void loadPalette(Common::SeekableReadStream *stream); void loadPalette(Common::SeekableReadStream *stream);
void setPalette();
/** /**
* Copy a buffer to the screen * Copy a buffer to the screen
*/ */
@ -109,6 +109,8 @@ public:
void copyBlocks(); void copyBlocks();
void copyRects(); void copyRects();
void setBufferScan();
}; };
} // End of namespace Access } // End of namespace Access

View file

@ -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

48
engines/access/scripts.h Normal file
View file

@ -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 */