scummvm/engines/tsage/blue_force/blueforce_scenes1.cpp
2012-02-25 12:44:37 +01:00

3413 lines
91 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 = g_resourceManager->getMessage(100, _state++);
if (msg1.compareTo("LASTCREDIT")) {
Common::String msg2 = g_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 *)g_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
g_globals->_player.enableControl();
g_globals->_events.setCursor(CURSOR_WALK);
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
g_globals->_scenePalette.addFader(black, 1, 2, this);
break;
}
case 3:
remove();
break;
}
}
/*--------------------------------------------------------------------------*/
Scene100::Scene100(): SceneExt() {
_index = 0;
}
void Scene100::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
if (BF_GLOBALS._dayNumber < 6) {
// Title
loadScene(100);
} else {
// Credits
loadScene(101);
}
BF_GLOBALS._scenePalette.loadPalette(2);
BF_GLOBALS._v51C44 = 1;
BF_GLOBALS._interfaceY = SCREEN_HEIGHT;
g_globals->_player.postInit();
g_globals->_player.hide();
g_globals->_player.disableControl();
_index = 109;
if (BF_GLOBALS._dayNumber < 6) {
// Title
BF_GLOBALS._sound1.play(2);
setAction(&_action2, this);
} else {
// Credits
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->_beerSign.show();
scene->_beerSign.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->_animationInset, NULL);
break;
case 6:
// Protaginist 2 walk to the bar
scene->_animationInset.remove();
setAction(&scene->_sequenceManager6, this, 100, &scene->_protaginist2, NULL);
break;
case 7:
// Two thugs enter and walk to table
scene->_cop2.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_cop2, NULL);
scene->_cop1.setAction(&scene->_sequenceManager8, this, 102, &scene->_cop1, 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->_cop1, &scene->_protaginist1, NULL);
break;
case 9:
// Shots fired!
scene->_protaginist1.setAction(&scene->_sequenceManager5, this, 98, &scene->_protaginist1, NULL);
scene->_cop2.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_cop2, NULL);
break;
case 10:
// End scene
scene->_sceneMode = 1;
remove();
break;
}
}
void Scene109::Action2::signal() {
Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene;
setAction(&scene->_sequenceManager2, this, 3117, &scene->_beerSign, NULL);
}
void Scene109::Action3::signal() {
Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene;
setAction(&scene->_sequenceManager3, this, 108, &scene->_drunk, NULL);
}
/*--------------------------------------------------------------------------*/
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();
_beerSign.postInit();
_beerSign.setVisage(115);
_beerSign.setStrip(4);
_beerSign.setFrame(1);
_beerSign.setPosition(Common::Point(262, 29));
_beerSign.hide();
_cop1.postInit();
_cop1.hide();
_cop2.postInit();
_cop2.hide();
_animationInset.postInit();
_animationInset.hide();
BF_GLOBALS._player.disableControl();
setAction(&_action1, this);
}
void Scene109::signal() {
if (_sceneMode == 1) {
BF_GLOBALS._scenePalette.clearListeners();
BF_GLOBALS._sceneManager.changeScene(110);
}
}
/*--------------------------------------------------------------------------
* Scene 110 - Intro - Outside the bar
*
*--------------------------------------------------------------------------*/
void Scene110::Action1::signal() {
Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(5);
break;
case 1:
scene->_object8.show();
scene->_object7.show();
scene->_object1.show();
scene->_object4.show();
scene->_object5.show();
scene->_object6.show();
scene->_object9.show();
scene->_object10.show();
BF_GLOBALS._v51C44 = 1;
scene->loadScene(110);
setDelay(10);
break;
case 2:
BF_GLOBALS._v51C44 = 1;
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 3: {
Common::Point pt(123, 121);
NpcMover *mover = new NpcMover();
scene->_object4.addMover(mover, &pt, this);
}
// No break on purpose
case 7:
setDelay(30);
break;
case 4:
// Guy running to the moto
scene->_object1.animate(ANIM_MODE_6, NULL);
break;
case 5:
scene->_object4.setStrip(2);
scene->_object4.setPosition(Common::Point(117, 106));
scene->_object4.animate(ANIM_MODE_5, this);
break;
case 6:
// Play "Vroum"
scene->_sound.play(31);
// The guy starts the engine
scene->_object4.setStrip(3);
scene->_object4._frame = 1;
scene->_object4.animate(ANIM_MODE_5, NULL);
// The guy looks behind him
scene->_object2.setPosition(Common::Point(227, 190));
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 8:
scene->_object2.animate(ANIM_MODE_6, this);
break;
case 9:
scene->_object2.remove();
scene->_object4.remove();
scene->_object5.setStrip(4);
scene->_object5.setFrame2(5);
scene->_object5.setPosition(Common::Point(105, 120));
setDelay(10);
scene->_object6.setPosition(Common::Point(127, 96));
scene->_object6.animate(ANIM_MODE_2, NULL);
scene->_object6.setAction(&scene->_action2);
scene->_sound.play(22);
break;
case 10:
scene->_object8.setAction(&scene->_action4);
scene->_object5.setFrame2(3);
scene->_object5.setPosition(Common::Point(87, 120));
setDelay(8);
break;
case 11:
scene->_object5.setFrame2(4);
scene->_object5.setPosition(Common::Point(62, 122));
setDelay(6);
break;
case 12:
scene->_object5.setFrame2(5);
scene->_object5.setPosition(Common::Point(35, 120));
scene->_object5.fixPriority(70);
setDelay(4);
break;
case 13:
scene->_object5.setFrame2(6);
scene->_object5.setPosition(Common::Point(22, 111));
setDelay(2);
break;
case 14:
scene->_object5.setFrame2(7);
scene->_object5.setPosition(Common::Point(19, 99));
setDelay(2);
break;
case 15:
scene->_object5.setFrame2(8);
scene->_object5.setPosition(Common::Point(54, 76));
setDelay(1);
break;
case 16: {
Common::Point pt(182, 54);
NpcMover *mover = new NpcMover();
scene->_object5.addMover(mover, &pt, this);
}
break;
case 17:
scene->_object5.remove();
break;
default:
break;
}
}
void Scene110::Action2::signal() {
Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0: {
Common::Point pt(152, 94);
NpcMover *mover = new NpcMover();
scene->_object6.addMover(mover, &pt, this);
}
break;
case 1: {
Common::Point pt(167, 108);
NpcMover *mover = new NpcMover();
scene->_object6.addMover(mover, &pt, this);
}
break;
case 2: {
Common::Point pt(172, 109);
NpcMover *mover = new NpcMover();
scene->_object6.addMover(mover, &pt, this);
}
break;
case 3: {
Common::Point pt(179, 117);
NpcMover *mover = new NpcMover();
scene->_object6.addMover(mover, &pt, this);
}
break;
case 4:
setDelay(30);
break;
case 5:
scene->_object6.animate(ANIM_MODE_NONE, NULL);
break;
default:
break;
}
}
void Scene110::Action3::signal() {
Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(3);
break;
case 1:
scene->_object7.setPosition(scene->_object7._position);
scene->_object1.setFrame(2);
setDelay(1);
break;
case 2:
scene->_object1.setFrame(3);
setDelay(1);
break;
case 3:
scene->_object1.setFrame(4);
scene->_object7.animate(ANIM_MODE_5, this);
break;
case 4: {
scene->_object1.animate(ANIM_MODE_6, NULL);
scene->_object7.setPosition(Common::Point(205, 99));
scene->_object7.setStrip(2);
scene->_object7.animate(ANIM_MODE_1, NULL);
scene->_object7.changeZoom(90);
Common::Point pt(151, 88);
NpcMover *mover = new NpcMover();
scene->_object7.addMover(mover, &pt, this);
}
break;
case 5:
scene->_object7.fixPriority(76);
scene->_object7.setStrip(3);
scene->_object7.changeZoom(90);
scene->_object7.setFrame(1);
scene->_object7.animate(ANIM_MODE_5, this);
scene->_object10.animate(ANIM_MODE_5, NULL);
break;
case 6:
scene->_object7.fixPriority(73);
scene->_object10.animate(ANIM_MODE_6, this);
break;
case 7: {
scene->_object7._yDiff = 1000;
scene->_object10.remove();
scene->_object9.setFrame2(2);
Common::Point pt(230, 53);
NpcMover *mover = new NpcMover();
scene->_object9.addMover(mover, &pt, this);
scene->_sound.play(23);
}
break;
case 8:
scene->_object9.remove();
BF_GLOBALS._sceneManager.changeScene(125);
break;
default:
break;
}
}
void Scene110::Action3::dispatch() {
Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene;
Action::dispatch();
if ((_actionIndex == 5) && (scene->_object7._percent > 80))
scene->_object7.changeZoom(scene->_object7._percent - 1);
}
void Scene110::Action4::signal() {
Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object8.setPosition(scene->_object8._position);
scene->_object1.setFrame(2);
setDelay(1);
break;
case 1:
scene->_object1.setFrame(3);
setDelay(1);
break;
case 2: {
scene->_object1.setFrame(4);
scene->_object8.fixPriority(90);
Common::Point pt(194, 119);
NpcMover *mover = new NpcMover();
scene->_object8.addMover(mover, &pt, this);
}
break;
case 3:
scene->_object1.animate(ANIM_MODE_6, NULL);
scene->_object8.setPosition(Common::Point(186, 117));
scene->_object8.setStrip(2);
scene->_object8.setFrame(1);
scene->_object3.setPosition(scene->_object3._position);
scene->_object3.setFrame(1);
setDelay(7);
break;
case 4:
scene->_object8.setFrame2(2);
scene->_object3.setFrame(3);
setDelay(7);
break;
case 5:
scene->_object8.setFrame2(3);
scene->_object3.setFrame(3);
setDelay(7);
scene->_object6.remove();
break;
case 6:
scene->_object8.setFrame2(4);
scene->_object3.setFrame(4);
setDelay(7);
break;
case 7:
scene->_object8.setFrame2(5);
scene->_object3.setFrame(5);
setDelay(7);
break;
case 8:
scene->_object8.setFrame2(7);
scene->_object3.setFrame(6);
setDelay(30);
break;
case 9: {
scene->_object3.remove();
scene->_object8.setFrame2(-1);
scene->_object8.setPosition(Common::Point(176, 105));
scene->_object8.animate(ANIM_MODE_1, NULL);
scene->_object8.setStrip(3);
Common::Point pt(141, 94);
NpcMover *mover = new NpcMover();
scene->_object8.addMover(mover, &pt, this);
scene->_object7.setAction(&scene->_action3);
}
break;
case 10: {
scene->_object8.fixPriority(77);
Common::Point pt(78, 76);
NpcMover *mover = new NpcMover();
scene->_object8.addMover(mover, &pt, this);
}
break;
case 11: {
scene->_object8.setPosition(Common::Point(87, 76));
scene->_object8.fixPriority(71);
scene->_object8.setStrip(6);
scene->_object8.changeZoom(75);
Common::Point pt(103, 74);
NpcMover *mover = new NpcMover();
scene->_object8.addMover(mover, &pt, this);
}
break;
case 12:
scene->_object8.setPosition(Common::Point(119, 59));
scene->_object8.setStrip(5);
scene->_object8.changeZoom(100);
scene->_object8.animate(ANIM_MODE_5, this);
break;
case 13:
scene->_object8.setPosition(Common::Point(119, 59), 300);
break;
default:
break;
}
}
void Scene110::Action4::dispatch() {
Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene;
Action::dispatch();
if ((_actionIndex > 9) && (_actionIndex < 12) && (scene->_object8._percent > 80))
scene->_object8.changeZoom(scene->_object8._percent - 1);
}
void Scene110::Action5::signal() {
Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object3.setPosition(scene->_object3._position);
scene->_object3.animate(ANIM_MODE_5, this);
break;
case 1:
scene->_object3.remove();
break;
default:
break;
}
}
void Scene110::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(999);
_object8.postInit();
_object8.setVisage(112);
_object8.setPosition(Common::Point(239, 98), 300);
_object8.setFrame(1);
_object8.setStrip(1);
_object8.changeZoom(90);
_object8.fixPriority(90);
_object8.animate(ANIM_MODE_1, NULL);
_object8._moveDiff.x = 7;
_object8._moveDiff.y = 3;
_object8.hide();
_object3.postInit();
_object3.setVisage(112);
_object3.setPosition(Common::Point(247, 190), 300);
_object3.setFrame(1);
_object3.setStrip(4);
_object3.changeZoom(100);
_object3.fixPriority(255);
_object7.postInit();
_object7.setVisage(113);
_object7.setPosition(Common::Point(236, 86), 300);
_object7._frame = 1;
_object7.setStrip(1);
_object7.changeZoom(110);
_object7.fixPriority(89);
_object7._moveDiff.x = 7;
_object7._moveDiff.y = 3;
_object7.hide();
_object1.postInit();
_object1.setVisage(110);
_object1.setPosition(Common::Point(216, 88), 0);
_object1._frame = 1;
_object1.setStrip(1);
_object1.changeZoom(100);
_object1.fixPriority(83);
_object1.hide();
_object2.postInit();
_object2.setVisage(111);
_object2.setPosition(Common::Point(527, 190), 0);
_object2._frame = 1;
_object2.fixPriority(250);
_object2.setStrip(5);
_object2.changeZoom(100);
_object4.postInit();
_object4.setVisage(111);
_object4.setPosition(Common::Point(253, 98), 0);
_object4._frame = 1;
_object4.setStrip(1);
_object4.changeZoom(100);
_object4.fixPriority(90);
_object4.animate(ANIM_MODE_1, NULL);
_object4._moveDiff.x = 10;
_object4._moveDiff.y = 10;
_object4.hide();
_object5.postInit();
_object5.setVisage(111);
_object5.setPosition(Common::Point(114, 119), 0);
_object5.setFrame2(1);
_object5.setStrip(7);
_object5.fixPriority(70);
_object5.changeZoom(100);
_object5._moveDiff.x = 20;
_object5._moveDiff.y = 20;
_object5.hide();
_object6.postInit();
_object6.setVisage(111);
_object6.setPosition(Common::Point(527, 96), 0);
_object6._frame = 1;
_object6.setStrip(6);
_object6.changeZoom(100);
_object6.fixPriority(238);
_object6._moveDiff.x = 10;
_object6._moveDiff.y = 10;
_object6.hide();
_object9.postInit();
_object9.setVisage(110);
_object9.setPosition(Common::Point(148, 69), 0);
_object9._frame = 1;
_object9.setStrip(2);
_object9.changeZoom(100);
_object9.fixPriority(72);
_object9._moveDiff.x = 10;
_object9._moveDiff.y = 10;
_object9.hide();
_object10.postInit();
_object10.setVisage(110);
_object10._frame = 1;
_object10.setStrip(3);
_object10.changeZoom(100);
_object10.fixPriority(74);
_object10._moveDiff.x = 10;
_object10._moveDiff.y = 10;
_object10.setPosition(_object9._position);
_object10.hide();
setAction(&_action1);
}
/*--------------------------------------------------------------------------
* Scene 114 - Outside the Bar
*
*--------------------------------------------------------------------------*/
bool Scene114::Vechile::startAction(CursorType action, Event &event) {
Scene114 *scene = (Scene114 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(114, 0);
return true;
case CURSOR_USE:
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 1142;
if (BF_GLOBALS.getFlag(fWithLyle)) {
scene->_lyle.fixPriority(-1);
scene->setAction(&scene->_sequenceManager1, scene, 1142, &BF_GLOBALS._player, &scene->_lyle, NULL);
} else {
Common::Point pt(155, 111);
PlayerMover *mover = new PlayerMover();
BF_GLOBALS._player.addMover(mover, &pt, scene);
}
return true;
default:
return NamedObject::startAction(action, event);
}
}
bool Scene114::Door::startAction(CursorType action, Event &event) {
Scene114 *scene = (Scene114 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(114, 1);
return true;
case CURSOR_USE:
BF_GLOBALS._walkRegions.enableRegion(2);
BF_GLOBALS._player.disableControl();
scene->_lyle.fixPriority(-1);
scene->_sceneMode = 1140;
scene->setAction(&scene->_sequenceManager1, scene, 1140, &BF_GLOBALS._player, this, &scene->_lyle, NULL);
return true;
default:
return NamedObject::startAction(action, event);
}
}
void Scene114::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
BF_GLOBALS._sound1.fadeSound(33);
loadScene(110);
setZoomPercents(85, 80, 105, 100);
BF_GLOBALS._walkRegions.disableRegion(9);
BF_GLOBALS._walkRegions.disableRegion(22);
_door.postInit();
_door.setVisage(110);
_door.setPosition(Common::Point(216, 88));
BF_GLOBALS._sceneItems.push_front(&_door);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setVisage(1358);
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.setPosition(Common::Point(155, 111));
BF_GLOBALS._player._moveDiff.x = 3;
BF_GLOBALS._player._moveDiff.y = 2;
BF_GLOBALS._player.changeZoom(-1);
_lyle.postInit();
_lyle.setVisage(1359);
_lyle.setObjectWrapper(new SceneObjectWrapper());
_lyle.animate(ANIM_MODE_1, NULL);
_lyle.setPosition(Common::Point(-118, -146));
_lyle.changeZoom(-1);
_lyle._moveDiff.x = 2;
_lyle._moveDiff.y = 1;
_lyle.hide();
_lyle.setDetails(114, 2, -1, -1, 1, (SceneItem *)NULL);
_vechile.postInit();
if (BF_GLOBALS.getFlag(fWithLyle)) {
_vechile.setVisage(444);
_vechile.setPosition(Common::Point(127, 78));
_vechile.fixPriority(20);
BF_GLOBALS._player.setPosition(Common::Point(139, 79));
_lyle.setPosition(Common::Point(86, 79));
_lyle.show();
} else {
_vechile.setVisage(380);
_vechile.setPosition(Common::Point(128, 125));
_vechile.setFrame(1);
if (BF_GLOBALS.getFlag(onDuty)) {
_vechile.setStrip(2);
_vechile.changeZoom(70);
BF_GLOBALS._player.setVisage(352);
} else {
_vechile.setStrip(1);
_vechile.changeZoom(77);
}
BF_GLOBALS._walkRegions.disableRegion(17);
}
BF_GLOBALS._sceneItems.push_front(&_vechile);
BF_GLOBALS._walkRegions.disableRegion(2);
if (BF_GLOBALS._sceneManager._previousScene == 115) {
BF_GLOBALS._player.setPosition(Common::Point(219, 100));
BF_GLOBALS._player.setStrip(6);
_lyle.setPosition(Common::Point(253, 110));
_lyle.fixPriority(108);
_lyle.setStrip(6);
BF_GLOBALS._player.enableControl();
} else if (BF_GLOBALS.getFlag(fWithLyle)) {
_sceneMode = 1141;
setAction(&_sequenceManager1, this, 1141, &_lyle, NULL);
} else {
BF_GLOBALS._player.enableControl();
}
_item1.setDetails(Rect(0, 0, 320, 200), 114, 3, -1, -1, 1, (SceneItem *)NULL);
}
void Scene114::signal() {
switch (_sceneMode) {
case 1140:
BF_GLOBALS._sceneManager.changeScene(115);
break;
case 1141:
BF_GLOBALS._player.enableControl();
break;
case 1142:
BF_GLOBALS._sceneManager.changeScene(60);
break;
default:
break;
}
}
/*--------------------------------------------------------------------------
* Scene 115 - Inside Tony's bar
*
*--------------------------------------------------------------------------*/
bool Scene115::Kate::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 8, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
case CURSOR_TALK:
if (BF_INVENTORY.getObjectScene(INV_NAPKIN) == 1) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 0;
scene->_stripManager.start(1174, scene);
} else if (scene->_jukeboxPlaying == 0) {
if (BF_GLOBALS.getFlag(fShowedIdToKate)) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 0;
scene->_stripManager.start(1159, scene);
} else {
scene->_sceneMode = 1167;
scene->setAction(&scene->_action6);
}
} else
scene->setAction(&scene->_action7);
return true;
case INV_MUG_SHOT:
if (scene->_jukeboxPlaying == 0) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 0;
if (BF_GLOBALS._tonyDialogCtr == 0)
scene->_stripManager.start(1167, scene);
else if (BF_GLOBALS.getFlag(fShowedIdToKate))
scene->_stripManager.start(1159, scene);
else if (BF_GLOBALS.getFlag(fMugOnKate))
scene->_stripManager.start(1159, scene);
else {
scene->_sceneMode = 9999;
scene->setAction(&scene->_action6);
}
} else
SceneItem::display(115, 44, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
case INV_ID:
if (scene->_jukeboxPlaying == 0) {
if (BF_GLOBALS._tonyDialogCtr == 0) {
scene->_sceneMode = 1167;
scene->setAction(&scene->_action6);
} else if (BF_GLOBALS.getFlag(fShowedIdToKate)) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 0;
scene->_stripManager.start(1159, scene);
} else {
BF_GLOBALS.setFlag(fShowedIdToKate);
scene->setAction(&scene->_action8);
}
} else
SceneItem::display(115, 44, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
default:
return NamedObject::startAction(action, event);
}
}
bool Scene115::Tony::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 7, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
case CURSOR_TALK:
if (BF_GLOBALS._dayNumber == 3) {
if (BF_INVENTORY.getObjectScene(INV_NAPKIN) == 1)
scene->_sceneMode = 1173;
else if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1) {
if (BF_GLOBALS.getFlag(fTalkedToTony))
scene->_sceneMode = 1151;
else if (BF_GLOBALS._tonyDialogCtr == 0) {
scene->_sceneMode = 1150;
BF_GLOBALS.setFlag(fTalkedToTony);
} else
scene->_sceneMode = 1151;
} else if (_talkToTonyCtr2 == 0) {
_talkToTonyCtr2++;
scene->_sceneMode = 1171;
} else
scene->_sceneMode = 1172;
} else if (BF_GLOBALS.getFlag(onDuty)) {
if (scene->_talkToTonyCtr == 0) {
scene->_talkToTonyCtr = 1;
scene->_sceneMode = 1169;
} else
scene->_sceneMode = 1170;
} else if (scene->_talkToTonyCtr == 0) {
scene->_sceneMode = 1171;
scene->_talkToTonyCtr = 1;
} else
scene->_sceneMode = 1172;
scene->setAction(&scene->_action9);
return true;
case INV_FOREST_RAP:
if (BF_GLOBALS.getFlag(onDuty))
scene->_sceneMode = 1178;
else
scene->_sceneMode = 1180;
scene->setAction(&scene->_action9);
return true;
case INV_COBB_RAP:
if (BF_GLOBALS.getFlag(onDuty))
scene->_sceneMode = 1177;
else if (BF_GLOBALS._tonyDialogCtr == 0)
scene->_sceneMode = 1179;
else
scene->_sceneMode = 1154;
scene->setAction(&scene->_action9);
return true;
case INV_MUG_SHOT:
scene->setAction(&scene->_action2);
return true;
case INV_ID:
if (BF_INVENTORY.getObjectScene(INV_NAPKIN) == 1) {
scene->_sceneMode = 1173;
scene->setAction(&scene->_action9);
} else if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1) {
if (BF_GLOBALS.getFlag(fTalkedToTony)) {
scene->_sceneMode = 1151;
scene->setAction(&scene->_action9);
} else {
T2_GLOBALS._uiElements.addScore(30);
BF_GLOBALS.setFlag(fTalkedToTony);
if (BF_GLOBALS._tonyDialogCtr == 0) {
scene->_sceneMode = 1150;
scene->setAction(&scene->_action9);
} else {
BF_GLOBALS._tonyDialogCtr = 1;
scene->setAction(&scene->_action2);
}
}
} else if (_talkToTonyCtr2 == 0) {
_talkToTonyCtr2++;
if (BF_GLOBALS.getFlag(onDuty)) {
scene->_sceneMode = 1182;
scene->setAction(&scene->_action9);
} else {
scene->_sceneMode = 1171;
scene->setAction(&scene->_action9);
}
} else if (BF_GLOBALS.getFlag(onDuty)) {
scene->_sceneMode = 1183;
scene->setAction(&scene->_action9);
} else {
scene->_sceneMode = 1172;
scene->setAction(&scene->_action9);
}
return true;
default:
return NamedObject::startAction(action, event);
}
}
bool Scene115::Object3::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 9, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
case CURSOR_USE:
SceneItem::display(115, 23, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
case CURSOR_TALK: {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 1;
Common::Point pt(160, 110);
PlayerMover *mover = new PlayerMover();
BF_GLOBALS._player.addMover(mover, &pt, scene);
return true;
}
default:
return NamedObject::startAction(action, event);
}
}
bool Scene115::Object4::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 42, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
case CURSOR_TALK:
scene->_sceneMode = 0;
BF_GLOBALS._player.disableControl();
BF_GLOBALS._player.updateAngle(_position);
scene->_stripManager.start(1184, scene);
return true;
default:
return NamedObject::startAction(action, event);
}
}
void Scene115::Jukebox::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
if (_jokeboxPlayingCtr == 2)
_jokeboxPlayingCtr = 0;
else if (_jokeboxPlayingCtr == 1) {
_jokeboxPlayingCtr = 2;
setAction(&_sequenceManager6, this, 118, &scene->_object12, &scene->_object11, NULL);
}
}
bool Scene115::Jukebox::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
if (action == CURSOR_USE) {
if (_jokeboxPlayingCtr == 0) {
_jokeboxPlayingCtr = 1;
BF_GLOBALS._player.disableControl();
scene->setAction(&scene->_action4);
} else
SceneItem::display(_resNum, 37, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
} else
return NamedHotspot::startAction(action, event);
}
void Scene115::Jukebox::synchronize(Serializer &s) {
NamedHotspot::synchronize(s);
s.syncAsSint16LE(_jokeboxPlayingCtr);
}
Scene115::Jukebox::Jukebox() {
_jokeboxPlayingCtr = 0;
}
void Scene115::EventHandler1::dispatch() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
if (BF_GLOBALS._player.getRegionIndex() == 27) {
scene->_kate.setAction(&scene->_action5);
scene->removeTimer(this);
}
}
bool Scene115::Item10::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
if (BF_GLOBALS.getFlag(fWithLyle)) {
scene->_object4.setStrip2(6);
Common::Point pt(-20, 122);
NpcMover *mover = new NpcMover();
scene->_object4.addMover(mover, &pt, NULL);
}
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 1150;
scene->setAction(&scene->_sequenceManager1, scene, 1150, &BF_GLOBALS._player, NULL);
return true;
}
bool Scene115::Item14::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 10, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
case CURSOR_USE:
if (BF_GLOBALS._sceneObjects->contains(&scene->_object3))
SceneItem::display(115, 23, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
else
SceneItem::display(115, 43, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
default:
return SceneHotspot::startAction(action, event);
}
}
void Scene115::Action1::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
_actionIndex = 2 + BF_GLOBALS._randomSource.getRandomNumber(1);
setDelay(BF_GLOBALS._randomSource.getRandomNumber(180));
break;
case 2:
_actionIndex = 1;
setAction(&scene->_sequenceManager2, this, 115, &scene->_object3, &scene->_object8, &scene->_object9, &scene->_object10, NULL);
break;
case 3:
_actionIndex = 1;
setAction(&scene->_sequenceManager2, this, 116, &scene->_object3, &scene->_object8, &scene->_object9, &scene->_object10, NULL);
break;
default:
break;
}
}
void Scene115::Action2::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
BF_GLOBALS._player.disableControl();
if (BF_GLOBALS._tonyDialogCtr < 3) {
if (scene->_tony._position.x > 67) {
scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_tony, NULL);
} else if (scene->_tony._position.x != 67) {
scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_tony, NULL);
}
}
BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 1117, &BF_GLOBALS._player);
break;
case 1:
++BF_GLOBALS._tonyDialogCtr;
if (BF_GLOBALS.getFlag(onDuty)) {
if (BF_GLOBALS.getFlag(fTalkedToTony)) {
switch (BF_GLOBALS._tonyDialogCtr) {
case 1:
T2_GLOBALS._uiElements.addScore(30);
scene->_stripManager.start(1181, this);
break;
case 2:
scene->_stripManager.start(1176, this);
break;
default:
scene->_stripManager.start(1155, this);
break;
}
} else {
scene->_stripManager.start(1175, this);
}
} else {
if (BF_GLOBALS.getFlag(fTalkedToTony)) {
switch (BF_GLOBALS._tonyDialogCtr) {
case 1:
T2_GLOBALS._uiElements.addScore(30);
scene->_stripManager.start(1153, this);
break;
case 2:
scene->_stripManager.start(1154, this);
break;
default:
scene->_stripManager.start(1155, this);
break;
}
} else {
scene->_stripManager.start(1152, this);
}
}
break;
case 2:
if (BF_GLOBALS._tonyDialogCtr == 3)
scene->_tony.setAction(&scene->_sequenceManager3, NULL, 3119, &scene->_tony, NULL);
BF_GLOBALS._player.enableControl();
remove();
default:
break;
}
}
void Scene115::Action3::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
setAction(&scene->_sequenceManager4, this, 3117, &scene->_neonSign, NULL);
}
void Scene115::Action4::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0: {
PlayerMover *mover = new PlayerMover();
Common::Point destPos(145, 107);
BF_GLOBALS._player.addMover(mover, &destPos, this);
break;
}
case 1:
BF_GLOBALS._player.setStrip(4);
SceneItem::display(115, 27, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
scene->_object12.animate(ANIM_MODE_NONE);
setDelay(10);
break;
case 2:
setAction(&scene->_sequenceManager1, this, 117, &scene->_object12, &scene->_object11, NULL);
break;
case 3:
scene->_sound1.play(81, &scene->_itemJukebox, 127);
BF_GLOBALS._player.enableControl();
remove();
default:
break;
}
}
void Scene115::Action5::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
if (scene->_itemJukebox._jokeboxPlayingCtr == 0) {
setAction(&scene->_sequenceManager5, this, 1115, &scene->_kate, NULL);
scene->_jukeboxPlaying = 1;
} else {
--_actionIndex;
setDelay(120);
}
break;
case 1:
setAction(&scene->_sequenceManager5, this, 117, &scene->_object12, &scene->_object11, NULL);
break;
case 2:
scene->_sound1.play(81, &scene->_itemJukebox, 127);
scene->_itemJukebox._jokeboxPlayingCtr = 1;
setDelay(3);
break;
case 3:
setAction(&scene->_sequenceManager5, this, 1116, &scene->_kate, NULL);
break;
case 4:
scene->_jukeboxPlaying = 0;
remove();
default:
break;
}
}
void Scene115::Action6::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
BF_GLOBALS._player.disableControl();
BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 2115, &scene->_kate, &BF_GLOBALS._player, NULL);
break;
case 1:
if (scene->_sceneMode == 9999) {
setAction(&scene->_sequenceManager1, this, 4115, &scene->_kate, &BF_GLOBALS._player, NULL);
--_actionIndex;
scene->_sceneMode = 1166;
} else {
scene->_stripManager.start(scene->_sceneMode, this);
}
break;
case 2:
scene->_kate.setVisage(131);
scene->_kate.setStrip(1);
scene->_kate.setFrame(1);
scene->_kate.setPosition(Common::Point(122, 97));
BF_GLOBALS._player.enableControl();
remove();
default:
break;
}
}
void Scene115::Action7::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0: {
BF_GLOBALS._player.disableControl();
PlayerMover *mover = new PlayerMover();
Common::Point destPos(142, 105);
BF_GLOBALS._player.addMover(mover, &destPos, this);
}
break;
case 1:
BF_GLOBALS._player.setStrip(4);
if (BF_GLOBALS._kateDialogCtr == 0)
scene->_stripManager.start(1156, this);
else
scene->_stripManager.start(1157, this);
++BF_GLOBALS._kateDialogCtr;
break;
case 2:
BF_GLOBALS._player.enableControl();
remove();
break;
default:
break;
}
}
void Scene115::Action8::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
BF_GLOBALS._player.disableControl();
setAction(&scene->_sequenceManager1, this, 2115, &scene->_kate, &BF_GLOBALS._player, NULL);
break;
case 1:
T2_GLOBALS._uiElements.addScore(30);
setAction(&scene->_sequenceManager1, this, 4115, &scene->_kate, &BF_GLOBALS._player, NULL);
break;
case 2:
scene->_stripManager.start(1160, this);
break;
case 3:
scene->_stripManager.start(1161, this);
break;
case 4:
BF_GLOBALS.setFlag(fGivenNapkin);
setAction(&scene->_sequenceManager1, this, 2117, &scene->_kate, &BF_GLOBALS._player, &scene->_object13, NULL);
break;
case 5:
BF_INVENTORY.setObjectScene(INV_NAPKIN, 1);
T2_GLOBALS._uiElements.addScore(10);
scene->_kate.setVisage(131);
scene->_kate.setStrip(1);
scene->_kate.setFrame(1);
scene->_kate.setPosition(Common::Point(122, 97));
BF_GLOBALS._player.enableControl();
remove();
break;
default:
break;
}
}
void Scene115::Action9::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
BF_GLOBALS._player.disableControl();
if (scene->_tony._position.x > 67)
scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_tony, NULL);
else if (scene->_tony._position.x != 67)
scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_tony, NULL);
BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 1117, &BF_GLOBALS._player, NULL);
break;
case 1:
scene->_stripManager.start(scene->_sceneMode, this);
break;
case 2:
scene->_tony.setAction(&scene->_sequenceManager3, this, 3119, &scene->_tony, NULL);
break;
case 3:
BF_GLOBALS._player.enableControl();
remove();
default:
break;
}
}
Scene115::Scene115() : SceneExt () {
_lineNumModifier = _jukeboxPlaying = _talkToTonyCtr = 0;
}
void Scene115::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
BF_GLOBALS._sound1.fadeSound(15);
loadScene(115);
setZoomPercents(98, 85, 115, 100);
_jukeboxPlaying = 0;
_stripManager.addSpeaker(&_gameTextSpeaker);
_stripManager.addSpeaker(&_kateSpeaker);
_stripManager.addSpeaker(&_tonySpeaker);
_stripManager.addSpeaker(&_jakeJacketSpeaker);
_stripManager.addSpeaker(&_jakeUniformSpeaker);
_stripManager.addSpeaker(&_lyleHatSpeaker);
_object6.postInit();
_object6.setVisage(121);
_object6.setPosition(Common::Point(82, 66));
_object6._frame = 1;
_object6.setStrip(5);
_object6.changeZoom(100);
_object6.fixPriority(95);
_object5.postInit();
_object5.setVisage(121);
_object5.setPosition(Common::Point(111, 64));
_object5._frame = 1;
_object5.setStrip(6);
_object5.changeZoom(100);
_object5.fixPriority(95);
// Bartender
_tony.postInit();
_tony.setVisage(132);
_tony.setPosition(Common::Point(74, 66));
_tony.setStrip(3);
_tony.setFrame(1);
_tony.fixPriority(95);
_tony.animate(ANIM_MODE_2, NULL);
_tony._numFrames = 5;
_tony._talkToTonyCtr2 = 0;
_talkToTonyCtr = 0;
//Neon sign
_neonSign.postInit();
_neonSign.setVisage(115);
_neonSign.setStrip(4);
_neonSign.setFrame(1);
_neonSign.setPosition(Common::Point(262, 29));
_neonSign.setAction(&_action3);
_object11.postInit();
_object11.hide();
_object12.postInit();
_object12.hide();
_object13.postInit();
_object13.hide();
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setVisage(129);
BF_GLOBALS._player.setStrip(3);
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
BF_GLOBALS._player.changeZoom(-1);
if (BF_GLOBALS.getFlag(fWithLyle)) {
_object4.postInit();
_object4.setVisage(469);
_object4.animate(ANIM_MODE_1, NULL);
_object4.setStrip2(1);
_object4.setPosition(Common::Point(-20, 155));
Common::Point destPos(17, 118);
NpcMover *mover = new NpcMover();
_object4.addMover(mover, &destPos, NULL);
BF_GLOBALS._sceneItems.push_front(&_object4);
BF_GLOBALS._walkRegions.disableRegion(1);
} else if (BF_GLOBALS.getFlag(onDuty))
BF_GLOBALS._player.setVisage(1341);
if (BF_GLOBALS._dayNumber == 3) {
_object3.postInit();
_object3.setVisage(123);
_object3.setPosition(Common::Point(212, 108));
_object3.setAction(&_action1);
_lineNumModifier = 0;
BF_GLOBALS._sceneItems.push_front(&_object3);
_object8.postInit();
_object8.setVisage(115);
_object8.setPosition(Common::Point(330, 87));
_object8.setStrip(3);
_object8.fixPriority(112);
_object9.postInit();
_object9.setVisage(115);
_object9.setPosition(Common::Point(330, 87));
_object9.setStrip(3);
_object9.fixPriority(112);
_object10.postInit();
_object10.setVisage(115);
_object10.setPosition(Common::Point(330, 87));
_object10.setStrip(3);
_object10.fixPriority(112);
if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1) {
_kate.postInit();
_kate.setVisage(131);
_kate.setPosition(Common::Point(122, 97));
_kate.setStrip(1);
_kate.setFrame(1);
_kate.changeZoom(100);
_kate.fixPriority(95);
BF_GLOBALS._sceneItems.push_front(&_kate);
}
addTimer(&_eventHandler1);
}
BF_GLOBALS._sceneItems.push_front(&_tony);
_item11.setDetails(16, 115, 4, 15, 21, 1);
_item12.setDetails(20, 115, 5, 15, 21, 1);
_item13.setDetails(31, 115, 6, 16, 22, 1);
_item14._sceneRegionId = 13;
BF_GLOBALS._sceneItems.push_front(&_item14);
_item10.setDetails(Rect(0, 147, 30, 167), 115, -1, -1, -1, 1, NULL);
// SUB_177B8
addTimer(&_itemJukebox);
_itemJukebox.setDetails(Rect(147, 45, 179, 91), 115, 25, 26, 27, 1, NULL);
//
_item6.setDetails(Rect(107, 43, 122, 61), 115, 28, 29, 30, 1, NULL);
_item7.setDetails(Rect(180, 33, 230, 63), 115, 31, 32, 33, 1, NULL);
_item8.setDetails(Rect( 0, 35, 96, 66), 115, 34, 35, 36, 1, NULL);
_item2.setDetails(Rect( 0, 65, 135, 95), 115, 0, 12, 18, 1, NULL);
_item4.setDetails(Rect(104, 0, 150, 90), 115, 2, 14, 20, 1, NULL);
_item5.setDetails(Rect(148, 0, 320, 93), 115, 3, 14, 20, 1, NULL);
_item3.setDetails(Rect( 0, 95, 320, 168), 115, 1, 13, 19, 1, NULL);
_item9.setDetails(Rect( 0, 0, 320, 168), 115, 11, 17, 24, 1, NULL);
BF_GLOBALS._player.disableControl();
_sceneMode = 5115;
setAction(&_sequenceManager1, this, 5115, &BF_GLOBALS._player, NULL);
}
void Scene115::signal() {
switch (_sceneMode) {
case 1150:
BF_GLOBALS._sceneManager.changeScene(114);
break;
case 1:
BF_GLOBALS._player.updateAngle(_object3._position);
SceneItem::display(115, 38 + _lineNumModifier, SET_WIDTH, 312,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
++_lineNumModifier;
if (_lineNumModifier >= 4)
_lineNumModifier = 0;
// No break on purpose
case 0:
// No break on purpose
case 5115:
// No break on purpose
default:
BF_GLOBALS._player.enableControl();
break;
}
}
void Scene115::process(Event &event) {
SceneExt::process(event);
if (!BF_GLOBALS._player._enabled)
return;
if (event.mousePos.y >= 167)
return;
if (_item10._bounds.contains(event.mousePos)) {
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
BF_GLOBALS._events.setCursor(surface);
} else {
CursorType cursorId = BF_GLOBALS._events.getCursor();
BF_GLOBALS._events.setCursor(cursorId);
}
}
void Scene115::synchronize(Serializer &s) {
SceneExt::synchronize(s);
s.syncAsSint16LE(_lineNumModifier);
s.syncAsSint16LE(_jukeboxPlaying);
s.syncAsSint16LE(_talkToTonyCtr);
}
/*--------------------------------------------------------------------------
* Scene 125 - Intro - Chase in the city
*
*--------------------------------------------------------------------------*/
void Scene125::Action1::signal() {
Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 1: {
Common::Point destPos(214, 105);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 2:
owner->animate(ANIM_MODE_4, 4, 1, this);
break;
case 3:
owner->setFrame(5);
scene->_object2.show();
setDelay(180);
break;
case 4: {
Common::Point destPos(311, 85);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 5:
owner->remove();
break;
case 0:
// No break on purpose
default:
break;
}
}
void Scene125::Action2::signal() {
Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
scene->_action1.signal();
setDelay(20);
break;
case 2: {
BF_GLOBALS._v501FA = 10;
BF_GLOBALS._v51C44 = 1;
Common::Point destPos(202, 94);
NpcMover *mover = new NpcMover();
BF_GLOBALS._player.addMover(mover, &destPos, this);
break;
}
case 3: {
scene->_action3.signal();
Common::Point destPos(280, 84);
NpcMover *mover = new NpcMover();
BF_GLOBALS._player.addMover(mover, &destPos, this);
break;
}
case 4:
BF_GLOBALS._player.animate(ANIM_MODE_5, this);
break;
case 5: {
Common::Point destPos(375, 111);
NpcMover *mover = new NpcMover();
BF_GLOBALS._player.addMover(mover, &destPos, this);
break;
}
case 6:
BF_GLOBALS._player.setStrip(2);
BF_GLOBALS._player.setFrame(1);
BF_GLOBALS._player.animate(ANIM_MODE_5, this);
break;
case 7: {
Common::Point destPos(347, 139);
NpcMover *mover = new NpcMover();
BF_GLOBALS._player.addMover(mover, &destPos, this);
break;
}
case 8:
BF_GLOBALS._player.setStrip(3);
BF_GLOBALS._player.setFrame(1);
BF_GLOBALS._player.animate(ANIM_MODE_5, this);
break;
case 9: {
Common::Point destPos(107, 75);
NpcMover *mover = new NpcMover();
BF_GLOBALS._player.addMover(mover, &destPos, this);
BF_GLOBALS._player.setPriority(80);
break;
}
case 10:
BF_GLOBALS._player.setStrip(4);
BF_GLOBALS._player.setFrame(1);
BF_GLOBALS._player.animate(ANIM_MODE_5, this);
break;
case 11: {
BF_GLOBALS._player.setPriority(64);
Common::Point destPos(229, 61);
NpcMover *mover = new NpcMover();
BF_GLOBALS._player.addMover(mover, &destPos, this);
break;
}
case 12:
scene->_action3.signal();
BF_GLOBALS._player.remove();
default:
break;
}
}
void Scene125::Action2::dispatch() {
Action::dispatch();
if ((_actionIndex == 10) && (BF_GLOBALS._player._percent > 80))
BF_GLOBALS._player.changeZoom(BF_GLOBALS._player._percent - 1);
if ((_actionIndex == 12) && (BF_GLOBALS._player._percent > 50))
BF_GLOBALS._player.changeZoom(BF_GLOBALS._player._percent - 1);
}
void Scene125::Action3::signal() {
Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
break;
case 1: {
Common::Point destPos(202, 94);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 2: {
Common::Point destPos(275, 84);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 3:
scene->_soundExt2.fadeSound(20);
owner->fixPriority(70);
owner->animate(ANIM_MODE_5, this);
break;
case 4: {
Common::Point destPos(375, 111);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 5:
owner->setStrip(2);
owner->setFrame(1);
owner->animate(ANIM_MODE_5, this);
break;
case 6: {
Common::Point destPos(347, 145);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 7:
owner->setStrip(3);
owner->setFrame(1);
owner->animate(ANIM_MODE_5, this);
break;
case 8: {
Common::Point destPos(96, 71);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
owner->_moveDiff.x = 6;
owner->_moveDiff.y = 6;
owner->setPriority(80);
break;
}
case 9:
owner->setPosition(Common::Point(85, 76));
owner->setStrip(4);
owner->setFrame(1);
owner->changeZoom(100);
owner->animate(ANIM_MODE_5, this);
break;
case 10: {
scene->_action5.signal();
scene->_soundExt1.play(25);
Common::Point destPos(154, 94);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 11:
break;
case 12:
scene->_object1.setPosition(owner->_position);
scene->_object1.changeZoom(2);
scene->_object1.show();
setDelay(1);
case 13:
BF_GLOBALS._sound1.play(6);
scene->_object1.changeZoom(4);
scene->_object1.setPosition(Common::Point(148, 88));
setDelay(1);
break;
case 14:
scene->_object1.changeZoom(8);
scene->_object1.setPosition(Common::Point(167, 97));
setDelay(1);
break;
case 15:
scene->_object1.changeZoom(16);
scene->_object1.setPosition(Common::Point(197, 104));
scene->_object4.show();
scene->_object3.show();
scene->_object4.changeZoom(16);
scene->_object4.setPosition(Common::Point(scene->_object1._position.x - 9, scene->_object1._position.y - 8));
scene->_object3.changeZoom(16);
scene->_object3.setPosition(Common::Point(scene->_object1._position.x + 5, scene->_object1._position.y - 8));
setDelay(1);
break;
case 16:
scene->_object1.changeZoom(32);
scene->_object1.setPosition(Common::Point(197, 104));
scene->_object4.changeZoom(32);
scene->_object4.setPosition(Common::Point(scene->_object1._position.x - 17, scene->_object1._position.y - 15));
scene->_object3.changeZoom(32);
scene->_object3.setPosition(Common::Point(scene->_object1._position.x + 12, scene->_object1._position.y - 15));
setDelay(1);
break;
case 17:
scene->_object1.changeZoom(64);
scene->_object1.setPosition(Common::Point(198, 114));
scene->_object4.changeZoom(64);
scene->_object4.setPosition(Common::Point(scene->_object1._position.x - 34, scene->_object1._position.y - 29));
scene->_object3.changeZoom(64);
scene->_object3.setPosition(Common::Point(scene->_object1._position.x + 23, scene->_object1._position.y - 29));
setDelay(1);
break;
case 18:
scene->_object1.changeZoom(100);
scene->_object1.setPosition(Common::Point(160, 112));
scene->_object4.changeZoom(100);
scene->_object4.setPosition(Common::Point(scene->_object1._position.x - 51, scene->_object1._position.y - 45));
scene->_object3.changeZoom(100);
scene->_object3.setPosition(Common::Point(scene->_object1._position.x + 42, scene->_object1._position.y - 45));
scene->_object4.animate(ANIM_MODE_5, this);
scene->_object3.animate(ANIM_MODE_5, this);
setDelay(1);
break;
case 19:
break;
case 20:
setDelay(30);
break;
case 21:
BF_GLOBALS._sceneManager.changeScene(140);
break;
default:
break;
}
}
void Scene125::Action3::dispatch() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
Action::dispatch();
if ((_actionIndex == 9) && (owner->_percent > 70))
owner->changeZoom(owner->_percent - 1);
}
void Scene125::Action4::signal() {
Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
setDelay(180);
break;
case 1: {
owner->setPriority(scene->_object2._priority - 1);
Common::Point destPos(66, 168);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 2:
owner->animate(ANIM_MODE_5, this);
break;
case 3: {
Common::Point destPos(307, 106);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 4:
owner->remove();
break;
default:
break;
}
}
void Scene125::Action4::dispatch() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
Action::dispatch();
if ((_actionIndex == 4) && (owner->_percent > 80))
owner->changeZoom(owner->_percent - 1);
}
void Scene125::Action5::signal() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
if (_actionIndex++ == 1) {
Common::Point destPos(162, 103);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
}
}
void Scene125::Action6::signal() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1: {
Common::Point destPos(410, 181);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 2:
owner->remove();
default:
break;
}
}
void Scene125::Action6::dispatch() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
Action::dispatch();
if ((_actionIndex == 2) && (owner->_percent < 100))
owner->changeZoom(owner->_percent + 1);
}
void Scene125::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(120);
_object4.postInit();
_object4.setVisage(124);
_object4.setPosition(Common::Point(0, 0));
_object4.setStrip(1);
_object4.setFrame(1);
_object4.fixPriority(251);
_object4.hide();
_object3.postInit();
_object3.setVisage(124);
_object3.setPosition(Common::Point(0, 0));
_object3.setStrip(2);
_object3.setFrame(1);
_object3.fixPriority(251);
_object3.hide();
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setVisage(127);
BF_GLOBALS._player.setPosition(Common::Point(160, 110));
BF_GLOBALS._player.setStrip(1);
BF_GLOBALS._player.setFrame(1);
BF_GLOBALS._player.changeZoom(100);
BF_GLOBALS._player.fixPriority(68);
BF_GLOBALS._player._moveDiff.x = 6;
BF_GLOBALS._player._moveDiff.y = 6;
BF_GLOBALS._player.disableControl();
_object5.postInit();
_object5.setVisage(128);
_object5.setPosition(Common::Point(150, 117));
_object5.fixPriority(68);
_object5._moveDiff.x = 6;
_object5._moveDiff.y = 6;
_object9.postInit();
_object9.setVisage(126);
_object9.setPosition(Common::Point(124, 106));
_object9.setStrip(4);
_object9.fixPriority(90);
_object9._moveDiff.x = 3;
_object9._moveDiff.y = 3;
_object1.postInit();
_object1.setVisage(130);
_object1.setPosition(Common::Point(139, 88));
_object1.setStrip(1);
_object1.setFrame(1);
_object1.changeZoom(100);
_object1.fixPriority(250);
_object1.hide();
_object8.postInit();
_object8.setVisage(126);
_object8.setPosition(Common::Point(89, 181));
_object8.setStrip(3);
_object8._moveDiff.x = 6;
_object8._moveDiff.y = 6;
_object6.postInit();
_object6.setVisage(126);
_object6.setPosition(Common::Point(289, 128));
_object6.fixPriority(69);
_object6._moveDiff.x = 6;
_object6._moveDiff.y = 6;
_object6.setAction(&_action1);
_object2.postInit();
_object2.setVisage(126);
_object2.setPosition(Common::Point(214, 105));
_object2.setStrip(2);
_object2.setFrame(1);
_object2.changeZoom(100);
_object2.fixPriority(63);
_object2.hide();
_object7.postInit();
_object7.setVisage(126);
_object7.setPosition(Common::Point(87, 76));
_object7.setStrip(6);
_object7.setFrame(6);
_object7.changeZoom(80);
_object7._moveDiff.x = 4;
_object7._moveDiff.y = 4;
_object7.setAction(&_action6);
BF_GLOBALS._sound1.play(5);
setAction(&_action2);
_object5.setAction(&_action3);
_object8.setAction(&_action4);
_object9.setAction(&_action5);
}
/*--------------------------------------------------------------------------
* Scene 140 - Intro - Near the house
*
*--------------------------------------------------------------------------*/
void Scene140::Action1::signal() {
Scene140 *scene = (Scene140 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
scene->loadScene(999);
setDelay(2);
break;
case 1:
BF_GLOBALS._scenePalette.loadPalette(2);
BF_GLOBALS._scenePalette.refresh();
scene->_text.setup(BF_19840518, this);
break;
case 2:
scene->_object1.show();
scene->loadScene(140);
setDelay(1);
break;
case 3: {
Common::Point destPos(236, 144);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
owner->_numFrames = 7;
break;
}
case 4:
owner->setStrip(3);
owner->setFrame(1);
owner->_numFrames = 5;
owner->setPosition(Common::Point(226, 143));
owner->animate(ANIM_MODE_5, this);
break;
case 5:
owner->setStrip(4);
owner->setFrame(1);
owner->animate(ANIM_MODE_5, this);
break;
case 6:
scene->_object1.animate(ANIM_MODE_5, this);
owner->setStrip(1);
owner->setFrame(1);
break;
case 7:
owner->setFrame(1);
owner->setPosition(Common::Point(owner->_position.x, owner->_position.y + 1));
owner->animate(ANIM_MODE_5, this);
break;
case 8:
owner->animate(ANIM_MODE_6, this);
owner->_numFrames = 10;
break;
case 9:
owner->_numFrames = 5;
owner->setPosition(Common::Point(217, 117));
owner->setStrip(2);
owner->animate(ANIM_MODE_5, this);
break;
case 10:
owner->setPosition(Common::Point(212, 117));
setDelay(10);
// No break on purpose
case 11:
owner->setPosition(owner->_position, 1000);
setDelay(60);
break;
case 12:
BF_GLOBALS._sound1.play(8);
setDelay(60);
// No break on purpose
case 13:
BF_GLOBALS._v51C44 = 1;
BF_GLOBALS._sceneManager.changeScene(150);
default:
break;
}
}
void Scene140::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(999);
_object2.postInit();
_object2.setVisage(141);
_object2.setPosition(Common::Point(333, 149));
_object2.setStrip(5);
_object2.animate(ANIM_MODE_1, NULL);
_object2._moveDiff.x = 3;
_object1.postInit();
_object1.setVisage(141);
_object1.setPosition(Common::Point(202, 115));
_object1.setFrame(1);
_object1.setStrip(6);
_object1.changeZoom(100);
_object1.hide();
BF_GLOBALS._v5020C = 0;
BF_GLOBALS._v501F8 = 300;
BF_GLOBALS._v501FC = 90;
BF_GLOBALS._sound1.play(7);
_object2.setAction(&_action1);
}
/*--------------------------------------------------------------------------
* Scene 150 - Intro - Burglar inside the house
*
*--------------------------------------------------------------------------*/
void Scene150::Action1::signal() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
static uint32 v50B96 = 0;
switch (_actionIndex++) {
case 0:
_actionIndex = 5;
_object2.postInit();
_object2.setVisage(150);
_object2.setStrip(3);
_object2._frame = 1;
_object2.setPosition(Common::Point(148, 126));
_object2.changeZoom(100);
setDelay(10);
break;
case 1:
owner->animate(ANIM_MODE_5, this);
break;
case 2:
owner->_frame = 1;
owner->setStrip(4);
owner->animate(ANIM_MODE_4, 3, 1, this);
break;
case 3:
owner->animate(ANIM_MODE_5, this);
_object2.animate(ANIM_MODE_5, this);
break;
case 4:
_object2.remove();
break;
case 5:
owner->_numFrames = 8;
owner->_frame = 1;
owner->setStrip(2);
owner->animate(ANIM_MODE_4, 14, 1, this);
break;
case 6:
owner->fixPriority(119);
owner->animate(ANIM_MODE_5, this);
break;
case 7:
setDelay(60);
break;
case 8:
BF_GLOBALS._sound1.stop();
// No break on purpose
case 9:
_sound1.play(8);
setDelay(30);
break;
case 10:
BF_GLOBALS._scenePalette.addFader((const byte *)&v50B96, 1, 2, this);
break;
case 11:
BF_GLOBALS._sound1.play(9);
BF_GLOBALS._sceneManager.changeScene(160);
break;
default:
break;
}
}
void Scene150::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(150);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setPosition(Common::Point(160, 100));
BF_GLOBALS._player._moveDiff.x = 15;
BF_GLOBALS._player.hide();
_object1.postInit();
_object1.setVisage(150);
_object1.setPosition(Common::Point(158, 119));
_object1._numFrames = 5;
_object1.fixPriority(121);
_object1.setAction(&_action1);
}
/*--------------------------------------------------------------------------
* Scene 160 - Intro - Burial
*
*--------------------------------------------------------------------------*/
void Scene160::Action1::signal() {
Scene160 *scene = (Scene160 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
break;
case 1:
scene->_kid.animate(ANIM_MODE_5, this);
break;
case 2:
// No break on purpose
case 10:
scene->_grandma.animate(ANIM_MODE_5, this);
break;
case 3:
// No break on purpose
case 6:
scene->_kid.animate(ANIM_MODE_6, this);
break;
case 4:
scene->_kid.setPosition(Common::Point(scene->_kid._position.x - 2, scene->_kid._position.y + 19));
scene->_kid.setFrame(1);
scene->_kid.setStrip(2);
scene->_kid.animate(ANIM_MODE_5, this);
scene->_kidBody.setPosition(scene->_kid._position);
scene->_kidBody.setFrame(1);
scene->_kidBody.setStrip(3);
break;
case 5:
setDelay(60);
break;
case 7:
scene->_kidBody.remove();
scene->_kid.setStrip(6);
scene->_kid.setFrame(1);
scene->_kid.setPosition(Common::Point(scene->_kid._position.x - 4, scene->_kid._position.y + 19));
scene->_grandma.animate(ANIM_MODE_6, this);
scene->_grandma._numFrames = 7;
break;
case 8:
scene->_grandma.setStrip(2);
scene->_grandma.setFrame(1);
scene->_grandma.animate(ANIM_MODE_5, this);
break;
case 9:
setDelay(120);
break;
default:
break;
}
}
void Scene160::Action2::signal() {
Scene160 *scene = (Scene160 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
static uint32 v50BAB = 0;
static uint32 v50BC3 = 0;
switch (_actionIndex++) {
case 0:
break;
case 1:
owner->animate(ANIM_MODE_5, this);
owner->_numFrames = 8;
break;
case 2:
owner->setStrip(2);
owner->setFrame(1);
owner->setPosition(Common::Point(scene->_flag._position.x + 56, scene->_flag._position.y + 2));
owner->animate(ANIM_MODE_5, this);
break;
case 3:
owner->setStrip(3);
owner->setFrame(1);
owner->setPosition(Common::Point(scene->_flag._position.x + 26, scene->_flag._position.y - 8));
owner->animate(ANIM_MODE_4, 8, 1, this);
break;
case 4:
scene->_flag.remove();
owner->animate(ANIM_MODE_5, this);
break;
case 5:
owner->setVisage(162);
owner->setStrip(1);
owner->setFrame(1);
owner->setPosition(Common::Point(owner->_position.x + 27, owner->_position.y + 11));
owner->animate(ANIM_MODE_5, this);
break;
case 6:
owner->setStrip(2);
owner->setFrame(1);
owner->setPosition(Common::Point(owner->_position.x - 42, owner->_position.y + 15));
owner->animate(ANIM_MODE_5, this);
break;
case 7:
owner->setStrip(3);
owner->setFrame(1);
owner->setPosition(Common::Point(owner->_position.x + 1, owner->_position.y));
owner->animate(ANIM_MODE_5, this);
break;
case 8:
owner->setStrip(4);
owner->setFrame(1);
owner->setPosition(Common::Point(owner->_position.x - 3, owner->_position.y - 1));
scene->_leftOfficer.show();
scene->_leftOfficer.setStrip(1);
scene->_leftOfficer.setFrame(1);
scene->_leftOfficer.setPosition(Common::Point(owner->_position.x + 8, owner->_position.y - 39));
scene->_leftOfficer._numFrames = 5;
scene->_leftOfficer.animate(ANIM_MODE_5, this);
break;
case 9:
setDelay(30);
break;
case 10:
scene->_leftOfficer.hide();
owner->setVisage(163);
owner->setStrip(2);
owner->setFrame(1);
owner->setPosition(Common::Point(owner->_position.x + 39, owner->_position.y));
owner->animate(ANIM_MODE_5, this);
break;
case 11:
scene->_leftOfficer.fixPriority(owner->_priority + 1);
setDelay(60);
break;
case 12:
scene->_leftOfficer.show();
scene->_leftOfficer.setPosition(Common::Point(owner->_position.x - 32, owner->_position.y - 38));
scene->_leftOfficer.setStrip(3);
scene->_leftOfficer.setFrame(1);
owner->setVisage(165);
owner->setPosition(Common::Point(owner->_position.x + 6, owner->_position.y - 3));
owner->setStrip(1);
owner->setFrame(1);
owner->animate(ANIM_MODE_5, this);
break;
case 13: {
owner->setStrip(2);
owner->setFrame(1);
owner->changeZoom(110);
owner->animate(ANIM_MODE_1, NULL);
Common::Point destPos(scene->_kid._position.x - 25, scene->_kid._position.y + 15);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 14:
owner->changeZoom(100);
owner->setStrip(5);
owner->setFrame(1);
scene->_kid.animate(ANIM_MODE_4, 5, 1, this);
break;
case 15:
owner->animate(ANIM_MODE_5, this);
scene->_kid.animate(ANIM_MODE_5, NULL);
break;
case 16:
owner->setStrip(6);
owner->setFrame(1);
owner->setPosition(Common::Point(owner->_position.x - 8, owner->_position.y + 3));
owner->animate(ANIM_MODE_5, this);
break;
case 17:
setDelay(70);
break;
case 18:
owner->animate(ANIM_MODE_6, this);
break;
case 19:
setDelay(120);
break;
case 20:
BF_GLOBALS._sound1.changeSound(10);
BF_GLOBALS._scenePalette.addFader((const byte *)&v50BAB, 1, 2, this);
break;
case 21:
BF_GLOBALS._scenePalette.loadPalette(2);
scene->loadScene(999);
setDelay(2);
break;
case 22:
scene->_sceneBounds.set(0, 0, 320, 200);
scene->_text.setup(BF_11_YEARS, this);
break;
case 23:
BF_GLOBALS._scenePalette.loadPalette(2);
scene->loadScene(165);
BF_GLOBALS._scenePalette.addFader((const byte *)&v50BC3, 1, -5, this);
break;
case 24:
setDelay(900);
break;
case 25:
BF_GLOBALS._sound1.fade(0, 10, 10, true, this);
// FIXME: Currently, fade() doesn't end properly with this song,
// thus never returns here. This hack skips the wait and changes
// directly to the next scene
// Start of hack
// break;
// case 26:
setDelay(5);
BF_GLOBALS._sound1.stop();
// End of hack
BF_GLOBALS._v51C44 = 1;
BF_GLOBALS._sceneManager.changeScene(200);
break;
default:
break;
}
}
void Scene160::Action2::process(Event &event) {
if ((event.handled) || (event.eventType == 5))
return;
if (_actionIndex == 25) {
event.handled = true;
setDelay(1);
}
}
void Scene160::Action3::signal() {
Scene160 *scene = (Scene160 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_text.setup(BF_3_DAYS, this);
break;
case 1: {
Common::Point destPos(720, 100);
NpcMover *mover = new NpcMover();
BF_GLOBALS._player.addMover(mover, &destPos, this);
break;
}
case 2:
scene->_action1.signal();
scene->_action2.signal();
break;
default:
break;
}
}
void Scene160::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(160);
_sceneBounds.moveTo(0, 0);
BF_GLOBALS._scenePalette.loadPalette(2);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setPosition(Common::Point(160, 100));
BF_GLOBALS._player._moveDiff.x = 15;
BF_GLOBALS._player.hide();
_grandma.postInit();
_grandma.setVisage(54);
_grandma.setPosition(Common::Point(712, 97));
_grandma.fixPriority(66);
_kid.postInit();
_kid.setPosition(Common::Point(732, 65));
_kid.setVisage(164);
_kid.setStrip(4);
_kid.fixPriority(68);
_kidBody.postInit();
_kidBody.setPosition(Common::Point(_kid._position.x, _kid._position.y));
_kidBody.setVisage(164);
_kidBody.setStrip(5);
_kidBody.fixPriority(68);
_flag.postInit();
_flag.setPosition(Common::Point(645, 116));
_flag.setVisage(161);
_flag.setStrip(4);
_flag.fixPriority(80);
_rightOfficer.postInit();
_rightOfficer.setVisage(161);
_rightOfficer.setPosition(Common::Point(_flag._position.x + 58, _flag._position.y + 11));
_rightOfficer.fixPriority(81);
_leftOfficer.postInit();
_leftOfficer.setVisage(163);
_leftOfficer.setPosition(Common::Point(620, 79));
_leftOfficer.setStrip(3);
_leftOfficer.fixPriority(81);
_leftOfficer.hide();
_rightOfficer.setAction(&_action2);
_grandma.setAction(&_action1);
setAction(&_action3);
_sceneBounds.center(BF_GLOBALS._player._position.x, BF_GLOBALS._player._position.y);
}
/*--------------------------------------------------------------------------
* Scene 180 - Front of Home
*
*--------------------------------------------------------------------------*/
bool Scene180::Vechile::startAction(CursorType action, Event &event) {
if (action == CURSOR_USE) {
BF_GLOBALS._sceneManager.changeScene(60);
return true;
} else {
return NamedObject::startAction(action, event);
}
}
/*--------------------------------------------------------------------------*/
bool Scene180::GarageExit::startAction(CursorType action, Event &event) {
Scene180 *scene = (Scene180 *)BF_GLOBALS._sceneManager._scene;
if (scene->_garageExit.contains(event.mousePos)) {
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 256, 114);
return true;
} else {
return false;
}
}
/*--------------------------------------------------------------------------*/
Scene180::Scene180(): SceneExt() {
_dispatchMode = 0;
}
void Scene180::synchronize(Serializer &s) {
SceneExt::synchronize(s);
s.syncAsSint16LE(_dispatchMode);
}
void Scene180::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
if (((BF_GLOBALS._bookmark == bLyleStoppedBy) && (BF_GLOBALS._dayNumber == 1)) ||
((BF_GLOBALS._bookmark == bDroppedOffLyle) && (BF_GLOBALS._dayNumber == 3)) ||
((BF_GLOBALS._bookmark == bDoneAtLyles) && (BF_GLOBALS._dayNumber == 4)))
loadScene(999);
else
loadScene(1180);
_garageExit.setDetails(Rect(243, 93, 275, 122), 180, -1, -1, -1, 1, NULL);
_gameTextSpeaker._textPos.y = 180;
_stripManager.addSpeaker(&_gameTextSpeaker);
_dispatchMode = 0;
setZoomPercents(121, 60, 125, 70);
if ((BF_GLOBALS._bookmark == bLyleStoppedBy) && (BF_GLOBALS._dayNumber == 1)) {
BF_GLOBALS._v501FC = 87;
BF_GLOBALS._v501FA = _sceneBounds.left + 10;
// CHECKME: BF_GLOBALS._v50206 = 18; ??
_sceneMessage.setup(THE_NEXT_DAY);
_sceneMode = 6;
setAction(&_sceneMessage, this);
BF_GLOBALS._driveFromScene = 4;
BF_GLOBALS._driveToScene = 4;
BF_GLOBALS._mapLocationId = 4;
} else if (((BF_GLOBALS._bookmark == bDroppedOffLyle) && (BF_GLOBALS._dayNumber == 3)) ||
((BF_GLOBALS._bookmark == bDoneAtLyles) && (BF_GLOBALS._dayNumber == 4))) {
BF_GLOBALS._v501FC = 87;
BF_GLOBALS._v501FA = _sceneBounds.left + 10;
// CHECKME: BF_GLOBALS._v50206 = 18; ??
_sceneMessage.setup(THE_NEXT_DAY);
_sceneMode = 6;
setAction(&_sceneMessage, this);
} else if (BF_GLOBALS._dayNumber == 0) {
BF_GLOBALS._player.setPosition(Common::Point(0, 150));
_vechile.postInit();
_garageExit.postInit();
BF_GLOBALS._driveToScene = 190;
BF_GLOBALS._sound1.play(31);
BF_GLOBALS._sound1.holdAt(1);
_sceneMode = 1800;
setAction(&_sequenceManager, this, 1800, &_vechile, &_object1, NULL);
} else if (BF_GLOBALS._driveFromScene == 180) {
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setVisage(831);
BF_GLOBALS._player.setPosition(Common::Point(285, 125));
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
BF_GLOBALS._player._strip = 3;
BF_GLOBALS._player.changeZoom(-1);
_vechile.postInit();
_vechile.setVisage(580);
_vechile.setStrip(2);
_vechile.setPosition(Common::Point(262, 131));
_vechile.setZoom(65);
_vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL);
_object1.postInit();
_object1.setVisage(182);
_object1.setStrip(2);
_object1.setPosition(Common::Point(258, 122));
_object1.setFrame(6);
BF_GLOBALS._driveFromScene = 0;
BF_GLOBALS._player.enableControl();
} else if (BF_GLOBALS._driveToScene != 180) {
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.disableControl();
_vechile.postInit();
_vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL);
_object1.postInit();
BF_GLOBALS._driveFromScene = 4;
BF_GLOBALS._driveToScene = 4;
BF_GLOBALS._mapLocationId = 4;
BF_GLOBALS._sound1.fadeSound(33);
_sceneMode = 1801;
setAction(&_sequenceManager, this, 1801, &BF_GLOBALS._player, &_vechile, &_object1, NULL);
} else {
BF_GLOBALS._driveFromScene = 0;
if (!BF_GLOBALS.getFlag(onDuty) && !BF_GLOBALS.getFlag(fWithLyle)) {
BF_GLOBALS._player.setPosition(Common::Point(0, 150));
_object1.postInit();
_object1.setVisage(182);
_object1.setStrip(2);
_object1.setPosition(Common::Point(258, 122));
_vechile.postInit();
_vechile.setVisage(181);
_vechile.setStrip(2);
_vechile.changeZoom(80);
_vechile.fixPriority(150);
_vechile._moveDiff = Common::Point(40, 5);
_vechile.setPosition(Common::Point(-25, 171));
_dispatchMode = 1;
BF_GLOBALS._sound1.play(29);
_sceneMode = 1;
ADD_MOVER(_vechile, 259, 150);
} else {
BF_GLOBALS._player.setPosition(Common::Point(0, 150));
_object1.postInit();
_object1.setVisage(182);
_object1.setStrip(2);
_object1.setPosition(Common::Point(258, 122));
_vechile.postInit();
if (BF_GLOBALS.getFlag(onDuty)) {
BF_GLOBALS._sound1.play(29);
_vechile.setVisage(191);
_vechile.setStrip(3);
_vechile._frame = 5;
_vechile.changeZoom(75);
_dispatchMode = 1;
_vechile._moveDiff.x = 45;
} else {
_vechile.setVisage(444);
_vechile.setStrip(2);
_vechile.changeZoom(85);
_dispatchMode = 3;
_vechile._moveDiff.x = 30;
}
_vechile.fixPriority(150);
_vechile._moveDiff.y = 5;
_vechile.setPosition(Common::Point(-25, 171));
_sceneMode = 3;
ADD_MOVER(_vechile, 258, 145);
}
}
if (_sceneMode != 6) {
_frontDoor.setDetails(Rect(183, 92, 218, 122), 180, 27, 28, 29, 1, NULL);
_driveway.setDetails(8, 180, 36, 37, 38, 1);
_street.setDetails(1, 180, 21, 22, 23, 1);
_lawn.setDetails(3, 180, 18, 19, 20, 1);
_bushes.setDetails(4, 180, 15, 16, 17, 1);
_palms.setDetails(6, 180, 12, 13, 14, 1);
_garage.setDetails(Rect(241, 85, 319, 121), 180, 30, 31, 32, 1, NULL);
_fence.setDetails(Rect(0, 109, 21, 125), 180, 9, 10, 11, 1, NULL);
_house.setDetails(5, 180, 24, 25, 26, 1);
_steps.setDetails(7, 180, 6, 7, 8, 1);
_curb.setDetails(2, 180, 3, 4, 5, 1);
_sky.setDetails(Rect(0, 0, 319, 190), 180, 0, 1, 2, 1, NULL);
}
}
void Scene180::signal() {
switch (_sceneMode) {
case 1:
_dispatchMode = 0;
switch (BF_GLOBALS._bookmark) {
case bFlashBackThree:
BF_GLOBALS._bookmark = bDroppedOffLyle;
_sceneMode = 7;
break;
case bDoneWithIsland:
BF_GLOBALS._bookmark = bDoneAtLyles;
_sceneMode = 8;
break;
default:
_sceneMode = 1802;
break;
}
setAction(&_sequenceManager, this, 1802, &_vechile, &_object1, NULL);
break;
case 2:
_dispatchMode = 0;
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._driveToScene);
break;
case 3:
_dispatchMode = 0;
BF_GLOBALS._sound1.stop();
_stripManager.start(1800, this);
_sceneMode = 4;
break;
case 4:
_sceneMode = 5;
BF_GLOBALS._sound1.fadeSound(29);
ADD_MOVER(_vechile, 340, 140);
_vechile._moveDiff.y = 1;
break;
case 5:
BF_GLOBALS._sceneManager.changeScene(50);
break;
case 6:
loadScene(1180);
BF_GLOBALS._sound1.fadeSound(33);
switch (BF_GLOBALS._bookmark) {
case bLyleStoppedBy:
BF_GLOBALS._dayNumber = 2;
BF_INVENTORY.alterInventory(2);
break;
case bDroppedOffLyle:
BF_GLOBALS._dayNumber = 4;
BF_INVENTORY.alterInventory(4);
break;
case bDoneAtLyles:
BF_GLOBALS._dayNumber = 5;
BF_INVENTORY.alterInventory(5);
break;
default:
break;
}
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.disableControl();
_vechile.postInit();
_vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL);
_object1.postInit();
_sceneMode = 1801;
setAction(&_sequenceManager, this, 1801, &BF_GLOBALS._player, &_vechile, &_object1, NULL);
_frontDoor.setDetails(Rect(183, 92, 218, 122), 180, 27, 28, 29, 1, NULL);
_driveway.setDetails(8, 180, 36, 37, 38, 1);
_street.setDetails(1, 180, 21, 22, 23, 1);
_lawn.setDetails(3, 180, 18, 19, 20, 1);
_bushes.setDetails(4, 180, 15, 16, 17, 1);
_palms.setDetails(6, 180, 12, 13, 14, 1);
_garage.setDetails(Rect(241, 85, 319, 121), 180, 30, 31, 32, 1, NULL);
_fence.setDetails(Rect(0, 109, 21, 125), 180, 9, 10, 11, 1, NULL);
_house.setDetails(4, 180, 24, 25, 26, 1);
_steps.setDetails(7, 180, 6, 7, 8, 1);
_curb.setDetails(2, 180, 3, 4, 5, 1);
_sky.setDetails(Rect(0, 0, 319, 190), 180, 0, 1, 2, 1, NULL);
break;
case 7:
BF_INVENTORY.setObjectScene(INV_COBB_RAP, 0);
BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 0);
BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 0);
BF_INVENTORY.setObjectScene(INV_LYLE_CARD, 0);
BF_INVENTORY.setObjectScene(INV_NAPKIN, 0);
BF_INVENTORY.setObjectScene(INV_9MM_BULLETS, 0);
BF_INVENTORY.setObjectScene(INV_SCHEDULE, 0);
BF_INVENTORY.setObjectScene(INV_PRINT_OUT, 0);
BF_GLOBALS._sceneManager.changeScene(180);
break;
case 8:
if (BF_GLOBALS.getFlag(fLeftTraceIn900) || BF_GLOBALS.getFlag(fGotPointsForSearchingDA) ||
BF_GLOBALS.getFlag(fLeftTraceIn920)) {
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._driveToScene = 0;
BF_GLOBALS._driveFromScene = 0;
BF_GLOBALS._sceneManager.changeScene(271);
} else {
BF_GLOBALS._sceneManager.changeScene(180);
}
break;
case 1800:
_dispatchMode = 2;
_vechile._moveDiff.x = 10;
_sceneMode = 2;
ADD_MOVER(_vechile, -25, 171);
break;
case 1801:
BF_GLOBALS._player._strip = 3;
BF_GLOBALS._player.enableControl();
break;
case 1802:
BF_GLOBALS._sound1.release();
BF_GLOBALS._driveToScene = 0;
BF_GLOBALS._driveFromScene = 0;
BF_GLOBALS._sceneManager.changeScene(270);
break;
default:
break;
}
}
void Scene180::process(Event &event) {
SceneExt::process(event);
if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
if (_vechile.contains(event.mousePos)) {
CursorType cursorId = BF_GLOBALS._events.getCursor();
BF_GLOBALS._events.setCursor(cursorId);
} else if (_garageExit.contains(event.mousePos)) {
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NW);
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 Scene180::dispatch() {
switch (_dispatchMode) {
case 1:
if (_vechile._mover && (_vechile._percent > 50))
_vechile.changeZoom(_vechile._percent - 1);
if (_vechile._moveDiff.x > 15)
--_vechile._moveDiff.x;
break;
case 2:
if (_vechile._mover && (_vechile._percent < 100))
_vechile.changeZoom(_vechile._percent + 1);
if (_vechile._moveDiff.x < 35)
++_vechile._moveDiff.x;
break;
case 3:
if (_vechile._mover && (_vechile._percent > 70))
_vechile.changeZoom(_vechile._percent - 1);
if (_vechile._moveDiff.x > 15)
--_vechile._moveDiff.x;
break;
default:
break;
}
SceneExt::dispatch();
if (!_action && (BF_GLOBALS._player._position.y < 120)) {
BF_GLOBALS._player.disableControl();
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._driveToScene = 0;
BF_GLOBALS._driveFromScene = 0;
if (BF_GLOBALS.getFlag(fLeftTraceIn900) || BF_GLOBALS.getFlag(fGotPointsForSearchingDA) ||
BF_GLOBALS.getFlag(fLeftTraceIn920))
BF_GLOBALS._sceneManager.changeScene(271);
else
BF_GLOBALS._sceneManager.changeScene(270);
}
}
/*--------------------------------------------------------------------------
* Scene 190 - Front of Police Station
*
*--------------------------------------------------------------------------*/
bool Scene190::LyleCar::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->_door.animate(ANIM_MODE_5, this);
break;
case 3:
ADD_MOVER(BF_GLOBALS._player, 180, 86);
break;
case 4:
scene->_sound.play(82);
scene->_door.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;
// To be checked: Not present in the original
g_globals->_sceneManager._previousScene = 100;
}
SceneExt::postInit();
// Load the scene data
loadScene(190);
BF_GLOBALS._scenePalette.loadPalette(2);
_stripManager.addSpeaker(&_speaker);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.disableControl();
// Initialise objects
_door.postInit();
_door.setVisage(190);
_door.setStrip(1);
_door.setPosition(Common::Point(179, 88));
_flag.postInit();
_flag.setVisage(190);
_flag.setStrip(2);
_flag.fixPriority(200);
_flag.setPosition(Common::Point(170, 31));
_flag.animate(ANIM_MODE_7, 0, NULL);
_flag.setDetails(190, 8, 26, 19, 1, (SceneItem *)NULL);
_fieldB52 = true;
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);
_lyleCar.postInit();
_lyleCar.setVisage(444);
_lyleCar.setFrame(2);
_lyleCar.setPosition(Common::Point(54, 114));
_lyleCar.setDetails(190, -1, -1, -1, 1, (SceneItem *)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, &_door, 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, &_door, NULL);
break;
case 50:
case 60:
default:
BF_GLOBALS.setFlag(onBike);
BF_GLOBALS._player.disableControl();
// To be checked: Not present in the original
T2_GLOBALS._uiElements._active = true;
_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, UI_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 && !_focusObject && (event.mousePos.y < (UI_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);
}
}
void Scene190::synchronize(Serializer &s) {
SceneExt::synchronize(s);
s.syncAsSint16LE(_fieldB52);
}
} // End of namespace BlueForce
} // End of namespace TsAGE