scummvm/engines/avalanche/shootemup.cpp

250 lines
8.1 KiB
C++
Raw Normal View History

2014-02-14 13:31:08 +01:00
/* 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.
*
*/
/*
* This code is based on the original source code of Lord Avalot d'Argent version 1.3.
* Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
*/
#include "avalanche/avalanche.h"
#include "avalanche/shootemup.h"
#include "common/random.h"
namespace Avalanche {
const byte ShootEmUp::kFacingRight = 87;
const byte ShootEmUp::kStocks = 27;
2014-02-14 13:31:08 +01:00
ShootEmUp::ShootEmUp(AvalancheEngine *vm) {
_vm = vm;
_time = 0;
}
void ShootEmUp::run() {
CursorMan.showMouse(false);
_vm->_graphics->saveScreen();
_vm->fadeOut();
_vm->_graphics->seuDrawTitle();
_vm->fadeIn();
_vm->_graphics->seuLoad();
// Should we show the instructions?
while (!_vm->shouldQuit()) {
Common::Event event;
_vm->getEvent(event);
if (event.type == Common::EVENT_KEYDOWN) {
if ((event.kbd.keycode == Common::KEYCODE_i) || (event.kbd.keycode == Common::KEYCODE_F1))
instructions();
break; // We don't show the instructions and simply go on with the minigame if not I or F1 was pressed.
}
}
2014-02-14 13:31:08 +01:00
setup();
initRunner(20, 70, 48, 54, _vm->_rnd->getRandomNumber(4) + 1, _vm->_rnd->getRandomNumber(3) - 2);
initRunner(600, 70, 48, 54, _vm->_rnd->getRandomNumber(4) + 1, _vm->_rnd->getRandomNumber(3) - 2);
initRunner(600, 100, 61, 67, -(_vm->_rnd->getRandomNumber(4)) + 1, _vm->_rnd->getRandomNumber(3) - 2);
initRunner(20, 100, 61, 67, -(_vm->_rnd->getRandomNumber(4)) + 1, _vm->_rnd->getRandomNumber(3) - 2);
do {
blankIt();
hitPeople();
plotThem();
moveThem();
moveAvvy();
bumpFolk();
peopleRunning();
animate();
escapeCheck();
collisionCheck();
updateTime();
check321();
readKbd();
} while (_time != 0);
_vm->fadeOut();
_vm->_graphics->restoreScreen();
_vm->_graphics->removeBackup();
_vm->fadeIn();
CursorMan.showMouse(true);
2014-02-14 13:31:08 +01:00
}
bool ShootEmUp::overlap(uint16 a1x, uint16 a1y, uint16 a2x, uint16 a2y, uint16 b1x, uint16 b1y, uint16 b2x, uint16 b2y) {
warning("STUB: ShootEmUp::overlap()");
return false;
}
byte ShootEmUp::getStockNumber(byte x) {
warning("STUB: ShootEmUp::getStockNumber()");
return 0;
}
void ShootEmUp::blankIt() {
warning("STUB: ShootEmUp::blankIt()");
}
void ShootEmUp::moveThem() {
warning("STUB: ShootEmUp::moveThem()");
}
void ShootEmUp::plotThem() {
warning("STUB: ShootEmUp::plotThem()");
}
void ShootEmUp::define(int16 xx, int16 yy, byte pp, int8 ixx, int8 iyy, int16 time, bool isAMissile, bool doWeWipe) {
warning("STUB: ShootEmUp::define()");
}
void ShootEmUp::defineCameo(int16 xx, int16 yy, byte pp, int16 time) {
warning("STUB: ShootEmUp::defineCameo()");
}
void ShootEmUp::showStock(byte x) {
warning("STUB: ShootEmUp::showStock()");
}
void ShootEmUp::showScore() {
warning("STUB: ShootEmUp::showScore()");
}
void ShootEmUp::showTime() {
warning("STUB: ShootEmUp::showTime()");
}
void ShootEmUp::gain(int8 howMuch) {
warning("STUB: ShootEmUp::gain()");
}
void ShootEmUp::newEscape() {
warning("STUB: ShootEmUp::newEscape()");
}
void ShootEmUp::nextPage() {
_vm->_graphics->drawNormalText("Press a key for next page >", _vm->_font, 8, 400, 190, kColorWhite);
_vm->_graphics->refreshScreen();
while (!_vm->shouldQuit()) {
Common::Event event;
_vm->getEvent(event);
if (event.type == Common::EVENT_KEYDOWN) {
break;
}
}
_vm->_graphics->drawFilledRectangle(Common::Rect(0, 0, 640, 200), kColorBlack);
2014-02-14 13:31:08 +01:00
}
void ShootEmUp::instructions() {
_vm->_graphics->drawFilledRectangle(Common::Rect(0, 0, 640, 200), kColorBlack); // Black out the whole screen.
_vm->_graphics->seuDrawPicture(25, 25, kFacingRight);
_vm->_graphics->drawNormalText("< Avvy, our hero, needs your help - you must move him around.", _vm->_font, 8, 60, 35, kColorWhite);
_vm->_graphics->drawNormalText("(He''s too terrified to move himself!)", _vm->_font, 8, 80, 45, kColorWhite);
_vm->_graphics->drawNormalText("Your task is to prevent the people in the stocks from escaping", _vm->_font, 8, 0, 75, kColorWhite);
_vm->_graphics->drawNormalText("by pelting them with rotten fruit, eggs and bread. The keys are:", _vm->_font, 8, 0, 85, kColorWhite);
_vm->_graphics->drawNormalText("LEFT SHIFT", _vm->_font, 8, 80, 115, kColorWhite);
_vm->_graphics->drawNormalText("Move left.", _vm->_font, 8, 200, 115, kColorWhite);
_vm->_graphics->drawNormalText("RIGHT SHIFT", _vm->_font, 8, 72, 135, kColorWhite);
_vm->_graphics->drawNormalText("Move right.", _vm->_font, 8, 200, 135, kColorWhite);
_vm->_graphics->drawNormalText("ALT", _vm->_font, 8, 136, 155, kColorWhite);
_vm->_graphics->drawNormalText("Throw something.", _vm->_font, 8, 200, 155, kColorWhite);
nextPage();
_vm->_graphics->seuDrawPicture(25, 35, kStocks);
_vm->_graphics->drawNormalText("This man is in the stocks. Your job is to stop him getting out.", _vm->_font, 8, 80, 35, kColorWhite);
_vm->_graphics->drawNormalText("UNFORTUNATELY... the locks on the stocks are loose, and every", _vm->_font, 8, 88, 45, kColorWhite);
_vm->_graphics->drawNormalText("so often, someone will discover this and try to get out.", _vm->_font, 8, 88, 55, kColorWhite);
_vm->_graphics->seuDrawPicture(25, 85, kStocks + 2);
_vm->_graphics->drawNormalText("< Someone who has found a way out!", _vm->_font, 8, 80, 85, kColorWhite);
_vm->_graphics->drawNormalText("You MUST IMMEDIATELY hit people smiling like this, or they", _vm->_font, 8, 88, 95, kColorWhite);
_vm->_graphics->drawNormalText("will disappear and lose you points.", _vm->_font, 8, 88, 105, kColorWhite);
_vm->_graphics->seuDrawPicture(25, 125, kStocks + 5);
_vm->_graphics->seuDrawPicture(25, 155, kStocks + 4);
_vm->_graphics->drawNormalText("< Oh dear!", _vm->_font, 8, 80, 125, kColorWhite);
nextPage();
_vm->_graphics->drawNormalText("Your task is made harder by:", _vm->_font, 8, 0, 35, kColorWhite);
_vm->_graphics->seuDrawPicture(25, 55, 48);
_vm->_graphics->drawNormalText("< Yokels. These people will run in front of you. If you hit", _vm->_font, 8, 60, 55, kColorWhite);
_vm->_graphics->drawNormalText("them, you will lose MORE points than you get hitting people", _vm->_font, 8, 68, 65, kColorWhite);
_vm->_graphics->drawNormalText("in the stocks. So BEWARE!", _vm->_font, 8, 68, 75, kColorWhite);
_vm->_graphics->drawNormalText("Good luck with the game!", _vm->_font, 8, 80, 125, kColorWhite);
nextPage();
2014-02-14 13:31:08 +01:00
}
void ShootEmUp::setup() {
warning("STUB: ShootEmUp::setup()");
}
void ShootEmUp::initRunner(int16 xx, int16 yy, byte f1, byte f2, int8 ixx, int8 iyy) {
warning("STUB: ShootEmUp::initRunner()");
}
void ShootEmUp::moveAvvy() {
warning("STUB: ShootEmUp::moveAvvy()");
}
void ShootEmUp::readKbd() {
warning("STUB: ShootEmUp::readKbd()");
}
void ShootEmUp::animate() {
warning("STUB: ShootEmUp::animate()");
}
void ShootEmUp::collisionCheck() {
warning("STUB: ShootEmUp::collisionCheck()");
}
void ShootEmUp::turnAround(byte who, bool randomX) {
warning("STUB: ShootEmUp::turnAround()");
}
void ShootEmUp::bumpFolk() {
warning("STUB: ShootEmUp::bumpFolk()");
}
void ShootEmUp::peopleRunning() {
warning("STUB: ShootEmUp::peopleRunning()");
}
void ShootEmUp::updateTime() {
warning("STUB: ShootEmUp::updateTime()");
}
void ShootEmUp::hitPeople() {
warning("STUB: ShootEmUp::hitPeople()");
}
void ShootEmUp::escapeCheck() {
warning("STUB: ShootEmUp::escapeCheck()");
}
void ShootEmUp::check321() {
warning("STUB: ShootEmUp::check321()");
}
} // End of namespace Avalanche