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;
_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();

View File

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

View File

@ -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();
}

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 \
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)

View File

@ -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");
}

View File

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

View File

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

View File

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

View File

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

View File

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

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