scummvm/engines/access/amazon/amazon_scripts.cpp

217 lines
4.8 KiB
C++
Raw Normal View History

/* 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"
2014-08-17 23:04:05 -04:00
#include "access/amazon/amazon_game.h"
#include "access/amazon/amazon_resources.h"
#include "access/amazon/amazon_scripts.h"
namespace Access {
namespace Amazon {
AmazonScripts::AmazonScripts(AccessEngine *vm) : Scripts(vm) {
2014-08-17 23:04:05 -04:00
_game = (AmazonEngine *)_vm;
}
void AmazonScripts::mWhile(int param1) {
switch(param1) {
case 1:
warning("TODO MWHILE1");
break;
case 2:
warning("TODO FLY");
break;
case 3:
warning("TODO FALL");
break;
case 4:
warning("TODO JWALK");
break;
case 5:
warning("TODO DOOPEN");
break;
case 6:
warning("TODO DOWNRIVER");
break;
case 7:
warning("MWHILE2");
break;
case 8:
warning("JWALK2");
break;
default:
break;
}
}
void AmazonScripts::loadBackground(int param1, int param2) {
_vm->_files->_loadPalFlag = false;
_vm->_files->loadScreen(param1, param2);
_vm->_buffer2.copyFrom(*_vm->_screen);
_vm->_buffer1.copyFrom(*_vm->_screen);
_vm->_screen->forceFadeOut();
}
void AmazonScripts::setInactive() {
_game->_rawInactiveX = _vm->_player->_rawPlayer.x;
_game->_rawInactiveY = _vm->_player->_rawPlayer.y;
_game->_charSegSwitch = false;
mWhile(_game->_rawInactiveY);
}
void AmazonScripts::boatWalls(int param1, int param2) {
if (param1 == 1)
_vm->_room->_plotter._walls[42] = Common::Rect(96, 27, 87, 42);
else {
_vm->_room->_plotter._walls[39].bottom = _vm->_room->_plotter._walls[41].bottom = 106;
_vm->_room->_plotter._walls[40].left = 94;
}
}
void AmazonScripts::executeSpecial(int commandIndex, int param1, int param2) {
switch (commandIndex) {
case 1:
_vm->establish(param1, param2);
break;
case 2:
loadBackground(param1, param2);
break;
case 3:
warning("TODO DOCAST");
break;
case 4:
setInactive();
break;
case 6:
mWhile(param1);
break;
case 9:
warning("TODO GUARD");
break;
case 10:
warning("TODO NEWMUSIC");
break;
case 11:
warning("TODO PLOTINACTIVE");
break;
case 13:
warning("TODO RIVER");
break;
case 14:
warning("TODO ANT");
break;
case 15:
2014-09-12 19:24:42 +02:00
boatWalls(param1, param2);
break;
default:
warning("Unexpected Special code %d - Skipped", commandIndex);
}
}
typedef void(AmazonScripts::*AmazonScriptMethodPtr)();
void AmazonScripts::executeCommand(int commandIndex) {
static const AmazonScriptMethodPtr COMMAND_LIST[] = {
2014-08-17 23:04:05 -04:00
&AmazonScripts::cmdHelp, &AmazonScripts::CMDCYCLEBACK,
&AmazonScripts::CMDCHAPTER, &AmazonScripts::cmdSetHelp,
&AmazonScripts::cmdCenterPanel, &AmazonScripts::cmdMainPanel,
&AmazonScripts::CMDRETFLASH
};
if (commandIndex >= 73)
(this->*COMMAND_LIST[commandIndex - 73])();
else
Scripts::executeCommand(commandIndex);
}
2014-08-17 23:04:05 -04:00
void AmazonScripts::cmdHelp() {
Common::String helpMessage = readString();
if (_game->_helpLevel == 0) {
_game->_timers.saveTimers();
_game->_useItem = 0;
if (_game->_noHints) {
printString(NO_HELP_MESSAGE);
return;
} else if (_game->_hintLevel == 0) {
printString(NO_HINTS_MESSAGE);
return;
}
}
int level = _game->_hintLevel - 1;
if (level < _game->_helpLevel)
_game->_moreHelp = 0;
_game->drawHelp();
error("TODO: more cmdHelp");
}
void AmazonScripts::CMDCYCLEBACK() {
error("TODO CMDCYCLEBACK");
}
void AmazonScripts::CMDCHAPTER() {
error("TODO CMDCHAPTER");
}
void AmazonScripts::cmdSetHelp() {
int arrayId = (_data->readUint16LE() && 0xFF) - 1;
int helpId = _data->readUint16LE() && 0xFF;
byte *help = _vm->_helpTbl[arrayId];
help[helpId] = 1;
if (_vm->_useItem == 0) {
_sequence = 11000;
searchForSequence();
}
}
void AmazonScripts::cmdCenterPanel() {
if (_vm->_screen->_vesaMode) {
_vm->_screen->clearScreen();
_vm->_screen->setPanel(3);
}
}
void AmazonScripts::cmdMainPanel() {
if (_vm->_screen->_vesaMode) {
_vm->_room->init4Quads();
_vm->_screen->setPanel(0);
}
}
void AmazonScripts::CMDRETFLASH() {
error("TODO CMDRETFLASH");
}
} // End of namespace Amazon
} // End of namespace Access