mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-10 03:40:25 +00:00
708 lines
19 KiB
C++
708 lines
19 KiB
C++
/* 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/config-manager.h"
|
|
#include "tsage/blue_force/blueforce_scenes1.h"
|
|
#include "tsage/scenes.h"
|
|
#include "tsage/tsage.h"
|
|
#include "tsage/staticres.h"
|
|
#include "tsage/globals.h"
|
|
|
|
namespace TsAGE {
|
|
|
|
namespace BlueForce {
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 100 - Tsunami Title Screen #2
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene100::Text::dispatch() {
|
|
SceneText::dispatch();
|
|
|
|
// Keep the second text string below the first one
|
|
Scene100 *scene = (Scene100 *)BF_GLOBALS._sceneManager._scene;
|
|
Common::Point &pt = scene->_action1._sceneText1._position;
|
|
scene->_action1._sceneText2.setPosition(Common::Point(pt.x,
|
|
pt.y + scene->_action1._textHeight));
|
|
}
|
|
|
|
|
|
void Scene100::Action1::signal() {
|
|
static byte black[3] = { 0, 0, 0 };
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_state = 0;
|
|
setDelay(6);
|
|
break;
|
|
case 1: {
|
|
Common::String msg1 = _resourceManager->getMessage(100, _state++);
|
|
if (msg1.compareTo("LASTCREDIT")) {
|
|
Common::String msg2 = _resourceManager->getMessage(100, _state++);
|
|
setTextStrings(msg1, msg2, this);
|
|
--_actionIndex;
|
|
} else {
|
|
setTextStrings(BF_NAME, BF_ALL_RIGHTS_RESERVED, this);
|
|
|
|
Common::Point pt(_sceneText1._position.x, 80);
|
|
NpcMover *mover = new NpcMover();
|
|
_sceneText1.addMover(mover, &pt, this);
|
|
}
|
|
break;
|
|
}
|
|
case 2:
|
|
setDelay(600);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._sound1.fade(0, 10, 10, 1, this);
|
|
GLOBALS._scenePalette.addFader(black, 1, 2, NULL);
|
|
break;
|
|
case 4:
|
|
error("??exit");
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene100::Action1::setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action) {
|
|
// Set data for first text control
|
|
_sceneText1._fontNumber = 10;
|
|
_sceneText1._width = 160;
|
|
_sceneText1._textMode = ALIGN_RIGHT;
|
|
_sceneText1._color1 = BF_GLOBALS._scenePalette._colors.foreground;
|
|
_sceneText1._color2 = BF_GLOBALS._scenePalette._colors.background;
|
|
_sceneText1._color3 = BF_GLOBALS._scenePalette._colors.foreground;
|
|
_sceneText1.setup(msg1);
|
|
_sceneText1.fixPriority(255);
|
|
_sceneText1.setPosition(Common::Point(
|
|
(SCREEN_WIDTH - _sceneText1.getFrame().getBounds().width()) / 2, 202));
|
|
_sceneText1._moveRate = 30;
|
|
_sceneText1._moveDiff.y = 1;
|
|
|
|
// Set data for second text control
|
|
_sceneText2._fontNumber = 10;
|
|
_sceneText2._width = _sceneText1._width;
|
|
_sceneText2._textMode = _sceneText1._textMode;
|
|
_sceneText2._color1 = _sceneText1._color1;
|
|
_sceneText2._color2 = 31;
|
|
_sceneText2._color3 = _sceneText1._color3;
|
|
_sceneText2.setup(msg2);
|
|
_sceneText2.fixPriority(255);
|
|
GfxSurface textSurface = _sceneText2.getFrame();
|
|
_sceneText2.setPosition(Common::Point((SCREEN_WIDTH - textSurface.getBounds().width()) / 2, 202));
|
|
_sceneText2._moveRate = 30;
|
|
_sceneText2._moveDiff.y = 1;
|
|
|
|
_textHeight = textSurface.getBounds().height();
|
|
int yp = -(_textHeight * 2);
|
|
|
|
Common::Point pt(_sceneText1._position.x, yp);
|
|
NpcMover *mover = new NpcMover();
|
|
_sceneText1.addMover(mover, &pt, action);
|
|
}
|
|
|
|
void Scene100::Action2::signal() {
|
|
Scene100 *scene = (Scene100 *)_globals->_sceneManager._scene;
|
|
static byte black[3] = {0, 0, 0};
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._scenePalette.addFader(black, 1, -2, this);
|
|
break;
|
|
case 1:
|
|
setDelay(180);
|
|
break;
|
|
case 2: {
|
|
const char *SEEN_INTRO = "seen_intro";
|
|
if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) {
|
|
// First time being played, so will need to show the intro
|
|
ConfMan.setBool(SEEN_INTRO, true);
|
|
ConfMan.flushToDisk();
|
|
} else {
|
|
// Prompt user for whether to start play or watch introduction
|
|
_globals->_player.enableControl();
|
|
|
|
if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) {
|
|
// Signal to start the game
|
|
scene->_index = 190;
|
|
remove();
|
|
return;
|
|
}
|
|
}
|
|
|
|
// At this point the introduction needs to start
|
|
_globals->_scenePalette.addFader(black, 1, 2, this);
|
|
break;
|
|
}
|
|
case 3:
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene100::Scene100(): SceneExt() {
|
|
_index = 0;
|
|
}
|
|
|
|
void Scene100::postInit(SceneObjectList *OwnerList) {
|
|
BF_GLOBALS._scenePalette.loadPalette(2);
|
|
BF_GLOBALS._v51C44 = 1;
|
|
Scene::postInit();
|
|
BF_GLOBALS._interfaceY = SCREEN_HEIGHT;
|
|
|
|
_globals->_player.enableControl();
|
|
_globals->_player.hide();
|
|
_globals->_player.disableControl();
|
|
_index = 109;
|
|
|
|
if (BF_GLOBALS._dayNumber < 6) {
|
|
// Title
|
|
loadScene(100);
|
|
BF_GLOBALS._sound1.play(2);
|
|
setAction(&_action2, this);
|
|
} else {
|
|
// Credits
|
|
loadScene(101);
|
|
BF_GLOBALS._sound1.play(118);
|
|
setAction(&_action1, this);
|
|
}
|
|
}
|
|
|
|
void Scene100::signal() {
|
|
++_sceneMode;
|
|
if (BF_GLOBALS._dayNumber < 6) {
|
|
BF_GLOBALS._scenePalette.clearListeners();
|
|
BF_GLOBALS._scenePalette.loadPalette(100);
|
|
BF_GLOBALS._sceneManager.changeScene(_index);
|
|
} else {
|
|
if (_sceneMode > 1)
|
|
BF_GLOBALS._events.setCursor(CURSOR_ARROW);
|
|
|
|
setAction(this, &_action1, this);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 109 - Introduction Bar Room
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene109::Action1::signal() {
|
|
Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(30);
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._sound1.play(12);
|
|
BF_GLOBALS._sceneObjects->draw();
|
|
BF_GLOBALS._scenePalette.loadPalette(2);
|
|
BF_GLOBALS._scenePalette.refresh();
|
|
setDelay(10);
|
|
break;
|
|
case 2:
|
|
scene->_text.setup(BF_19840515, this);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._v51C44 = 1;
|
|
scene->loadScene(115);
|
|
|
|
scene->_protaginist2.show();
|
|
scene->_protaginist2.setPriority(133);
|
|
scene->_protaginist1.show();
|
|
scene->_bartender.show();
|
|
scene->_object1.show();
|
|
scene->_drunk.show();
|
|
scene->_drunk.setAction(&scene->_action3);
|
|
scene->_object2.show();
|
|
scene->_object9.show();
|
|
scene->_object9.setAction(&scene->_action2);
|
|
|
|
BF_GLOBALS._v501FC = 170;
|
|
setDelay(60);
|
|
break;
|
|
case 4:
|
|
// Start drinking
|
|
scene->_bartender.setAction(&scene->_sequenceManager4, NULL, 109, &scene->_bartender, &scene->_object2, NULL);
|
|
scene->_protaginist1.setAction(&scene->_sequenceManager5, NULL, 107, &scene->_protaginist1, NULL);
|
|
scene->_protaginist2.setAction(&scene->_sequenceManager6, this, 106, &scene->_protaginist2, NULL);
|
|
break;
|
|
case 5:
|
|
// Open briefcase and pass over disk
|
|
setAction(&scene->_sequenceManager6, this, 105, &scene->_object10, NULL);
|
|
break;
|
|
case 6:
|
|
// Protaginist 2 walk to the bar
|
|
scene->_object10.remove();
|
|
setAction(&scene->_sequenceManager6, this, 100, &scene->_protaginist2, NULL);
|
|
break;
|
|
case 7:
|
|
// Two thugs enter and walk to table
|
|
scene->_object7.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_object7, NULL);
|
|
scene->_object5.setAction(&scene->_sequenceManager8, this, 102, &scene->_object5, NULL);
|
|
scene->_protaginist2.setAction(&scene->_sequenceManager6, NULL, 104, &scene->_protaginist2, &scene->_bartender, NULL);
|
|
break;
|
|
case 8:
|
|
// Protaginist 1 leaves, protaginist 2 stands up
|
|
setAction(&scene->_sequenceManager8, this, 101, &scene->_object5, &scene->_protaginist1, NULL);
|
|
break;
|
|
case 9:
|
|
// Shots fired!
|
|
scene->_protaginist1.setAction(&scene->_sequenceManager5, this, 98, &scene->_protaginist1, NULL);
|
|
scene->_object7.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_object7, NULL);
|
|
break;
|
|
case 10:
|
|
// End scene
|
|
scene->_sceneMode = 1;
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene109::Action2::signal() {
|
|
Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene;
|
|
scene->setAction(&scene->_sequenceManager2, this, 3117, &scene->_object9, NULL);
|
|
}
|
|
|
|
void Scene109::Action3::signal() {
|
|
Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene;
|
|
scene->setAction(&scene->_sequenceManager3, this, 108, &scene->_drunk, NULL);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene109::Text::Text(): SceneText() {
|
|
_action = NULL;
|
|
_frameNumber = 0;
|
|
_diff = 0;
|
|
}
|
|
|
|
void Scene109::Text::setup(const Common::String &msg, Action *action) {
|
|
_frameNumber = BF_GLOBALS._events.getFrameNumber();
|
|
_diff = 180;
|
|
_action = action;
|
|
_fontNumber = 4;
|
|
_width = 300;
|
|
_textMode = ALIGN_CENTER;
|
|
_color1 = BF_GLOBALS._scenePalette._colors.background;
|
|
_color2 = _color3 = 0;
|
|
|
|
SceneText::setup(msg);
|
|
|
|
// Center the text on-screen
|
|
reposition();
|
|
_bounds.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2);
|
|
|
|
// Set the new position
|
|
_position.x = _bounds.left;
|
|
_position.y = _bounds.top;
|
|
}
|
|
|
|
void Scene109::Text::synchronize(Serializer &s) {
|
|
SceneText::synchronize(s);
|
|
SYNC_POINTER(_action);
|
|
s.syncAsUint32LE(_frameNumber);
|
|
s.syncAsSint16LE(_diff);
|
|
}
|
|
|
|
void Scene109::Text::dispatch() {
|
|
if (_diff) {
|
|
uint32 frameNumber = BF_GLOBALS._events.getFrameNumber();
|
|
if (_frameNumber < frameNumber) {
|
|
_diff -= frameNumber - _frameNumber;
|
|
_frameNumber = frameNumber;
|
|
|
|
if (_diff <= 0) {
|
|
// Time has expired, so remove the text and signal the designated action
|
|
remove();
|
|
if (_action)
|
|
_action->signal();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene109::Scene109(): PalettedScene() {
|
|
}
|
|
|
|
void Scene109::postInit(SceneObjectList *OwnerList) {
|
|
PalettedScene::postInit(OwnerList);
|
|
loadScene(999);
|
|
|
|
_protaginist2.postInit();
|
|
_protaginist2.setVisage(119);
|
|
_protaginist2.setFrame(11);
|
|
_protaginist2.fixPriority(133);
|
|
_protaginist2.setPosition(Common::Point(165, 124));
|
|
_protaginist2.hide();
|
|
|
|
_protaginist1.postInit();
|
|
_protaginist1.setVisage(118);
|
|
_protaginist1.setStrip(1);
|
|
_protaginist1.setFrame(8);
|
|
_protaginist1.fixPriority(132);
|
|
_protaginist1.setPosition(Common::Point(143, 125));
|
|
_protaginist1.hide();
|
|
|
|
_bartender.postInit();
|
|
_bartender.setVisage(121);
|
|
_bartender.setStrip(2);
|
|
_bartender.setFrame(1);
|
|
_bartender.setPriority(-1);
|
|
_bartender.setPosition(Common::Point(92, 64));
|
|
_bartender.hide();
|
|
|
|
_object1.postInit();
|
|
_object1.setVisage(121);
|
|
_object1.setStrip(6);
|
|
_object1.setFrame(1);
|
|
_object1.setPriority(-1);
|
|
_object1.setPosition(Common::Point(110, 64));
|
|
_object1.hide();
|
|
|
|
_drunk.postInit();
|
|
_drunk.setVisage(120);
|
|
_drunk.setStrip(2);
|
|
_drunk.setFrame(5);
|
|
_drunk.setPriority(-1);
|
|
_drunk.setPosition(Common::Point(127, 97));
|
|
_drunk.hide();
|
|
|
|
_object2.postInit();
|
|
_object2.setVisage(121);
|
|
_object2.setStrip(5);
|
|
_object2.setFrame(1);
|
|
_object2.setPriority(-1);
|
|
_object2.setPosition(Common::Point(104, 64));
|
|
_object2.hide();
|
|
|
|
_object9.postInit();
|
|
_object9.setVisage(115);
|
|
_object9.setStrip(4);
|
|
_object9.setFrame(1);
|
|
_object9.setPosition(Common::Point(262, 29));
|
|
_object9.hide();
|
|
|
|
_object5.postInit();
|
|
_object5.hide();
|
|
|
|
_object7.postInit();
|
|
_object7.hide();
|
|
|
|
_object10.postInit();
|
|
_object10.hide();
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
setAction(&_action1, this);
|
|
}
|
|
|
|
void Scene109::signal() {
|
|
if (_sceneMode == 1) {
|
|
BF_GLOBALS._scenePalette.clearListeners();
|
|
BF_GLOBALS._sceneManager.changeScene(110);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 190 - Front of Police Station
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene190::Object4::startAction(CursorType action, Event &event) {
|
|
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE: {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 13;
|
|
Common::Point pt(62, 96);
|
|
PlayerMover *mover = new PlayerMover();
|
|
BF_GLOBALS._player.addMover(mover, &pt, scene);
|
|
return true;
|
|
}
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene190::Item1::startAction(CursorType action, Event &event) {
|
|
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
default:
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene190::Item2::startAction(CursorType action, Event &event) {
|
|
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
scene->_stripManager.start(1900, scene);
|
|
return true;
|
|
default:
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene190::Exit::startAction(CursorType action, Event &event) {
|
|
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
Common::Point pt(316, 91);
|
|
PlayerMover *mover = new PlayerMover();
|
|
BF_GLOBALS._player.addMover(mover, &pt, scene);
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene190::Action1::signal() {
|
|
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(2);
|
|
break;
|
|
case 1: {
|
|
ADD_MOVER(BF_GLOBALS._player, 165, 91);
|
|
break;
|
|
}
|
|
case 2:
|
|
scene->_sound.play(82);
|
|
scene->_object2.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 3:
|
|
ADD_MOVER(BF_GLOBALS._player, 180, 86);
|
|
break;
|
|
case 4:
|
|
scene->_sound.play(82);
|
|
scene->_object2.animate(ANIM_MODE_6, this);
|
|
break;
|
|
case 5:
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(315);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene190::Scene190(): SceneExt() {
|
|
_fieldB52 = true;
|
|
_cursorVisage.setVisage(1, 8);
|
|
}
|
|
|
|
void Scene190::postInit(SceneObjectList *OwnerList) {
|
|
BF_GLOBALS._dialogCenter.y = 100;
|
|
if ((BF_GLOBALS._sceneManager._previousScene == 100) ||
|
|
(BF_GLOBALS._sceneManager._previousScene == 20)) {
|
|
// clearScreen();
|
|
}
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
// If at start of game, change to first day
|
|
BF_GLOBALS._dayNumber = 1;
|
|
|
|
// Load the scene data
|
|
loadScene(190);
|
|
BF_GLOBALS._scenePalette.loadPalette(2);
|
|
|
|
_stripManager.addSpeaker(&_speaker);
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
// Initialise objects
|
|
_object2.postInit();
|
|
_object2.setVisage(190);
|
|
_object2.setStrip(1);
|
|
_object2.setPosition(Common::Point(179, 88));
|
|
|
|
_object3.postInit();
|
|
_object3.setVisage(190);
|
|
_object3.setStrip(2);
|
|
_object3.fixPriority(200);
|
|
_object3.setPosition(Common::Point(170, 31));
|
|
_object3.animate(ANIM_MODE_7, 0, NULL);
|
|
_object3.setDetails(190, 8, 26, 19, 1, NULL);
|
|
|
|
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
BF_GLOBALS._player.setVisage(303);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
|
|
|
|
_object4.postInit();
|
|
_object4.setVisage(444);
|
|
_object4.setFrame(2);
|
|
_object4.setPosition(Common::Point(54, 114));
|
|
_object4.setDetails(190, -1, -1, -1, 1, NULL);
|
|
|
|
switch (BF_GLOBALS._sceneManager._previousScene) {
|
|
case 300: {
|
|
_sceneMode = 12;
|
|
BF_GLOBALS._player.setPosition(Common::Point(316, 91));
|
|
ADD_MOVER(BF_GLOBALS._player, 305, 91);
|
|
break;
|
|
}
|
|
case 315:
|
|
_sceneMode = 1901;
|
|
setAction(&_sequenceManager, this, 1901, &BF_GLOBALS._player, &_object2, NULL);
|
|
break;
|
|
case 50:
|
|
case 60:
|
|
default:
|
|
_fieldB52 = false;
|
|
BF_GLOBALS._player.setPosition(Common::Point(62, 96));
|
|
BF_GLOBALS._player._strip = 3;
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
} else {
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS._player._visage);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
|
|
switch (BF_GLOBALS._sceneManager._previousScene) {
|
|
case 300: {
|
|
if (!BF_GLOBALS.getFlag(onBike)) {
|
|
BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
|
|
_sceneMode = BF_GLOBALS.getFlag(onDuty) ? 11 : 12;
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1304 : 303);
|
|
BF_GLOBALS._player.setPosition(Common::Point(316, 91));
|
|
ADD_MOVER(BF_GLOBALS._player, 305, 91);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = BF_GLOBALS.getFlag(onDuty) ? 193 : 191;
|
|
setAction(&_sequenceManager, this, 193, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
}
|
|
case 315:
|
|
BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
|
|
_sceneMode = BF_GLOBALS.getFlag(onDuty) ? 1900 : 1901;
|
|
setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_object2, NULL);
|
|
break;
|
|
case 50:
|
|
case 60:
|
|
default:
|
|
BF_GLOBALS.setFlag(onBike);
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = BF_GLOBALS.getFlag(onDuty) ? 192 : 190;
|
|
setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (BF_GLOBALS.getFlag(onBike)) {
|
|
BF_GLOBALS._sound1.play(BF_GLOBALS.getFlag(onDuty) ? 37 : 29);
|
|
} else if (BF_GLOBALS._sceneManager._previousScene != 300) {
|
|
BF_GLOBALS._sound1.play(33);
|
|
}
|
|
|
|
_exit.setDetails(Rect(310, 50, 320, 125), 190, -1, -1, -1, 1, NULL);
|
|
_item2.setDetails(Rect(108, 1, 111, 94), 190, 7, 11, 18, 1, NULL);
|
|
_item4.setDetails(2, 190, 5, 10, 16, 1);
|
|
_item3.setDetails(1, 190, 4, 10, 15, 1);
|
|
_item8.setDetails(6, 190, 20, 21, 22, 1);
|
|
_item1.setDetails(7, 190, 1, 10, -1, 1);
|
|
_item7.setDetails(5, 190, 0, 10, 12, 1);
|
|
_item6.setDetails(4, 190, 2, 10, 13, 1);
|
|
_item5.setDetails(3, 190, 3, 10, 14, 1);
|
|
_item9.setDetails(Rect(0, 0, 89, 68), 190, 6, 10, 17, 1, NULL);
|
|
_item10.setDetails(Rect(0, 0, SCREEN_WIDTH, BF_INTERFACE_Y), 190, 23, -1, -1, 1, NULL);
|
|
}
|
|
|
|
void Scene190::signal() {
|
|
switch (_sceneMode) {
|
|
case 10:
|
|
if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne))
|
|
BF_GLOBALS._sound1.changeSound(49);
|
|
BF_GLOBALS._sceneManager.changeScene(300);
|
|
break;
|
|
case 11:
|
|
case 12:
|
|
case 1900:
|
|
case 1901:
|
|
BF_GLOBALS._player.enableControl();
|
|
_fieldB52 = false;
|
|
break;
|
|
case 13:
|
|
case 191:
|
|
case 193:
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 190:
|
|
case 192:
|
|
BF_GLOBALS._sceneManager.changeScene(300);
|
|
break;
|
|
case 0:
|
|
default:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene190::process(Event &event) {
|
|
SceneExt::process(event);
|
|
|
|
if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) {
|
|
// Check if the cursor is on an exit
|
|
if (_exit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(3);
|
|
BF_GLOBALS._events.setCursor(surface);
|
|
} else {
|
|
// In case an exit cursor was being shown, restore the previously selected cursor
|
|
CursorType cursorId = BF_GLOBALS._events.getCursor();
|
|
BF_GLOBALS._events.setCursor(cursorId);
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene190::dispatch() {
|
|
SceneExt::dispatch();
|
|
|
|
if (!_action && !_fieldB52 && (BF_GLOBALS._player._position.x >= 310)
|
|
&& !BF_GLOBALS.getFlag(onBike)) {
|
|
// Handle walking off to the right side of the screen
|
|
BF_GLOBALS._player.disableControl();
|
|
_fieldB52 = true;
|
|
_sceneMode = 10;
|
|
|
|
ADD_MOVER(BF_GLOBALS._player, 330, BF_GLOBALS._player._position.y);
|
|
}
|
|
}
|
|
|
|
} // End of namespace BlueForce
|
|
|
|
} // End of namespace TsAGE
|