mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-15 06:18:33 +00:00
5971 lines
163 KiB
C++
5971 lines
163 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_scenes3.h"
|
|
#include "tsage/scenes.h"
|
|
#include "tsage/tsage.h"
|
|
#include "tsage/staticres.h"
|
|
#include "tsage/globals.h"
|
|
|
|
namespace TsAGE {
|
|
|
|
namespace BlueForce {
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 300 - Outside Police Station
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene300::Object::startAction(CursorType action, Event &event) {
|
|
if (action == CURSOR_TALK) {
|
|
Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
|
|
scene->_stripManager.start(_stripNumber, scene);
|
|
return true;
|
|
} else {
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene300::Object19::startAction(CursorType action, Event &event) {
|
|
if ((action != CURSOR_USE) || !BF_GLOBALS.getFlag(onDuty)) {
|
|
return NamedObject::startAction(action, event);
|
|
} else if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark >= bEndDayOne)) {
|
|
Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
|
|
setAction(&scene->_action4);
|
|
} else {
|
|
SceneItem::display2(300, 33);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
// entrance door
|
|
bool Scene300::Item1::startAction(CursorType action, Event &event) {
|
|
if (action == CURSOR_USE) {
|
|
Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 305;
|
|
scene->setAction(&scene->_sequenceManager1, scene, 305, &BF_GLOBALS._player,
|
|
&scene->_object8, NULL);
|
|
return true;
|
|
} else {
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene300::Item2::startAction(CursorType action, Event &event) {
|
|
if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) {
|
|
Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 0;
|
|
scene->setAction(&scene->_sequenceManager1, scene, 304, &scene->_object11, NULL);
|
|
return true;
|
|
} else {
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene300::Item14::startAction(CursorType action, Event &event) {
|
|
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 151, 54);
|
|
return true;
|
|
}
|
|
|
|
bool Scene300::Item15::startAction(CursorType action, Event &event) {
|
|
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 316, 90);
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene300::Action1::signal() {
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(1);
|
|
break;
|
|
case 1:
|
|
if (BF_GLOBALS.getFlag(fWithLyle))
|
|
SceneItem::display2(666, 27);
|
|
else
|
|
SceneItem::display2(300, 0);
|
|
setDelay(1);
|
|
break;
|
|
case 2: {
|
|
ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 8,
|
|
BF_GLOBALS._player._position.y);
|
|
break;
|
|
}
|
|
case 3:
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene300::Action2::signal() {
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(1);
|
|
break;
|
|
case 1:
|
|
SceneItem::display2(300, 28);
|
|
setDelay(1);
|
|
break;
|
|
case 2: {
|
|
ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 8,
|
|
BF_GLOBALS._player._position.y);
|
|
break;
|
|
}
|
|
case 3:
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene300::Action3::signal() {
|
|
Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(1);
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 306, &BF_GLOBALS._player,
|
|
&scene->_object8, NULL);
|
|
break;
|
|
case 2:
|
|
SceneItem::display2(300, 35);
|
|
setDelay(1);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene300::Action4::signal() {
|
|
Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(1);
|
|
break;
|
|
case 1:
|
|
setAction(&scene->_sequenceManager1, this, 316, &BF_GLOBALS._player, &scene->_object19, NULL);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
setDelay(15);
|
|
break;
|
|
case 3:
|
|
setAction(&scene->_sequenceManager1, this, 319, &scene->_object19, NULL);
|
|
break;
|
|
case 4:
|
|
BF_GLOBALS.setFlag(onBike);
|
|
BF_GLOBALS._sceneManager.changeScene(190);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene300::Action5::signal() {
|
|
Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_field2760 = 1;
|
|
setDelay(1);
|
|
break;
|
|
case 1:
|
|
setAction(&scene->_sequenceManager1, this, 1306, &scene->_object1, &scene->_object8, NULL);
|
|
break;
|
|
case 2:
|
|
scene->_stripManager.start(3004, this);
|
|
break;
|
|
case 3: {
|
|
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 186, 140);
|
|
setDelay(3);
|
|
break;
|
|
}
|
|
case 4:
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene300::Scene300(): SceneExt(), _object13(3000), _object14(3001), _object15(3002),
|
|
_object16(3003) {
|
|
_field2760 = _field2762 = 0;
|
|
}
|
|
|
|
void Scene300::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(300);
|
|
|
|
// Add the speakers
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_sutterSpeaker);
|
|
_stripManager.addSpeaker(&_dougSpeaker);
|
|
_stripManager.addSpeaker(&_jakeSpeaker);
|
|
|
|
_field2762 = 0;
|
|
_item14.setDetails(Rect(144, 27, 160, 60), 300, -1, -1, -1, 1, NULL);
|
|
_item15.setDetails(Rect(310, 76, SCREEN_WIDTH, 105), 300, -1, -1, -1, 1, NULL);
|
|
|
|
// Setup the player
|
|
int playerVisage = BF_GLOBALS._player._visage;
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setVisage(playerVisage);
|
|
BF_GLOBALS._player.setStrip(3);
|
|
BF_GLOBALS._player.setPosition(Common::Point(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2));
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
_object8.postInit();
|
|
_object8.setVisage(301);
|
|
_object8.setStrip(2);
|
|
_object8.setPosition(Common::Point(300, 77));
|
|
|
|
if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark < bEndDayOne)) {
|
|
_object17.postInit();
|
|
_object17.setVisage(301);
|
|
_object17.setStrip(1);
|
|
_object17.setPosition(Common::Point(87, 88));
|
|
_object17.setDetails(300, 11, 13, 2, 1, (SceneItem *)NULL);
|
|
|
|
_object18.postInit();
|
|
_object18.setVisage(301);
|
|
_object18.setStrip(1);
|
|
_object18.setPosition(Common::Point(137, 92));
|
|
_object18.setDetails(300, 11, 13, 3, 1, (SceneItem *)NULL);
|
|
}
|
|
|
|
_object19.postInit();
|
|
_object19.setVisage(301);
|
|
_object19.setStrip(1);
|
|
_object19.setPosition(Common::Point(175, 99));
|
|
_object19.setDetails(300, 11, 13, 34, 1, (SceneItem *)NULL);
|
|
|
|
_object11.postInit();
|
|
_object11.setVisage(301);
|
|
_object11.setStrip(8);
|
|
_object11.setPosition(Common::Point(265, 91));
|
|
_object11.hide();
|
|
|
|
switch (BF_GLOBALS._sceneManager._previousScene) {
|
|
case 50:
|
|
case 60:
|
|
BF_GLOBALS.clearFlag(onBike);
|
|
if (BF_GLOBALS.getFlag(onDuty)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 318;
|
|
setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 300;
|
|
setAction(&_sequenceManager1, this, 1300, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case 190:
|
|
_sceneMode = 0;
|
|
if (!BF_GLOBALS.getFlag(onBike)) {
|
|
_sceneMode = 7308;
|
|
BF_GLOBALS._player.setPosition(Common::Point(175, 50));
|
|
ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 123, 71);
|
|
|
|
if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne))
|
|
setupInspection();
|
|
} else if (!BF_GLOBALS.getFlag(onDuty)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 300;
|
|
setAction(&_sequenceManager1, this, 300, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 318;
|
|
setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL);
|
|
}
|
|
break;
|
|
case 315:
|
|
BF_GLOBALS._player.setPosition(Common::Point(305, 66));
|
|
if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark >= bEndDayOne)) {
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1304 : 303);
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.setVisage(1304);
|
|
setupInspection();
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
|
|
}
|
|
break;
|
|
default:
|
|
_sceneMode = 0;
|
|
BF_GLOBALS._player.setVisage(1304);
|
|
BF_GLOBALS._player.disableControl();
|
|
setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
|
|
break;
|
|
}
|
|
|
|
_item10.setDetails(4, 300, 7, 13, 16, 1);
|
|
_item11.setDetails(2, 300, 9, 13, 18, 1);
|
|
_item12.setDetails(5, 300, 10, 13, 19, 1);
|
|
_item13.setDetails(3, 300, 25, 26, 27, 1);
|
|
_item2.setDetails(Rect(266, 54, 272, 59), 300, -1, -1, -1, 1, NULL);
|
|
_item1.setDetails(Rect(262, 47, 299, 76), 300, 1, 13, -1, 1, NULL);
|
|
_item4.setDetails(Rect(0, 85, SCREEN_WIDTH - 1, UI_INTERFACE_Y - 1), 300, 6, 13, 15, 1, NULL);
|
|
_item7.setDetails(Rect(219, 46, 251, 74), 300, 22, 23, 24, 1, NULL);
|
|
_item8.setDetails(Rect(301, 53, 319, 78), 300, 22, 23, 24, 1, NULL);
|
|
_item5.setDetails(Rect(179, 44, 200, 55), 300, 8, 13, 17, 1, NULL);
|
|
_item6.setDetails(Rect(210, 46, 231, 55), 300, 8, 13, 17, 1, NULL);
|
|
_item3.setDetails(Rect(160, 0, SCREEN_WIDTH - 1, 75), 300, 4, 13, 14, 1, NULL);
|
|
_item9.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 300, 29, 30, 31, 1, NULL);
|
|
}
|
|
|
|
void Scene300::signal() {
|
|
switch (_sceneMode) {
|
|
case 300:
|
|
BF_GLOBALS._sound1.fadeSound(33);
|
|
BF_GLOBALS.clearFlag(onBike);
|
|
_sceneMode = 0;
|
|
|
|
if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark != bNone)) {
|
|
signal();
|
|
} else {
|
|
_stripManager.start(3005, this);
|
|
}
|
|
break;
|
|
case 301:
|
|
if (_field2760) {
|
|
_sceneMode = 1302;
|
|
signal();
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1302;
|
|
setAction(&_sequenceManager1, this, 306, &_object1, &_object8, NULL);
|
|
}
|
|
|
|
_object12.show();
|
|
_object5.dispatch();
|
|
BF_GLOBALS._player.hide();
|
|
break;
|
|
case 303:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 2307;
|
|
setAction(&_sequenceManager1, this, 303, &_object13, &_object1, NULL);
|
|
break;
|
|
case 305:
|
|
if ((BF_GLOBALS._dayNumber == 4) || (BF_GLOBALS._dayNumber == 5)) {
|
|
_sceneMode = 0;
|
|
setAction(&_action3);
|
|
} else {
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(315);
|
|
}
|
|
break;
|
|
case 309:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3307;
|
|
setAction(&_sequenceManager1, this, 309, &_object14, &_object1, NULL);
|
|
break;
|
|
case 310:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 4307;
|
|
setAction(&_sequenceManager1, this, 310, &_object12, &_object1, NULL);
|
|
break;
|
|
case 311:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 5307;
|
|
setAction(&_sequenceManager1, this, 311, &_object15, &_object1, NULL);
|
|
break;
|
|
case 312:
|
|
case 5307:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1305;
|
|
setAction(&_sequenceManager1, this, 312, &_object1, &_object16, NULL);
|
|
break;
|
|
case 317:
|
|
BF_GLOBALS.setFlag(onBike);
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 318:
|
|
BF_GLOBALS.clearFlag(onBike);
|
|
_sceneMode = 0;
|
|
signal();
|
|
break;
|
|
case 1302:
|
|
_field2762 = 0;
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1308;
|
|
setAction(&_sequenceManager1, this, 302, &_object1, NULL);
|
|
break;
|
|
case 1305:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1313;
|
|
setAction(&_sequenceManager1, this, 305, &_object1, &_object8, NULL);
|
|
BF_GLOBALS._player.show();
|
|
_object12.hide();
|
|
break;
|
|
case 1307:
|
|
case 2308:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 303;
|
|
setAction(&_sequenceManager1, this, 308, &_object14, NULL);
|
|
break;
|
|
case 1308:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1307;
|
|
setAction(&_sequenceManager1, this, 308, &_object13, NULL);
|
|
break;
|
|
case 1313:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
_object15.setAction(&_sequenceManager4, NULL, 315, &_object15, &_object16, NULL);
|
|
_object13.setAction(&_sequenceManager2, NULL, 313, &_object13, &_object17, NULL);
|
|
_object14.setAction(&_sequenceManager3, this, 314, &_object14, &_object18, NULL);
|
|
|
|
BF_GLOBALS._bookmark = bEndDayOne;
|
|
BF_GLOBALS._sound1.changeSound(33);
|
|
break;
|
|
case 2307:
|
|
case 3308:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 309;
|
|
setAction(&_sequenceManager1, this, 308, &_object12, NULL);
|
|
break;
|
|
case 3307:
|
|
_object9.postInit();
|
|
_object9.hide();
|
|
_object10.postInit();
|
|
_object10.hide();
|
|
|
|
if (BF_GLOBALS.getFlag(gunClean)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 4308;
|
|
setAction(&_sequenceManager1, this, 6307, &_object12, &_object1, &_object9, &_object10, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 4308;
|
|
setAction(&_sequenceManager1, this, 7307, &_object12, &_object1, &_object9, &_object10, NULL);
|
|
}
|
|
break;
|
|
case 4307:
|
|
case 5308:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 311;
|
|
setAction(&_sequenceManager1, this, 308, &_object16, NULL);
|
|
break;
|
|
case 4308:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 310;
|
|
setAction(&_sequenceManager1, this, 308, &_object15, NULL);
|
|
break;
|
|
case 6308:
|
|
BF_GLOBALS._sceneManager.changeScene(190);
|
|
break;
|
|
case 7308:
|
|
if (_field2762) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 301;
|
|
setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.enableControl();
|
|
}
|
|
break;
|
|
case 0:
|
|
default:
|
|
if (_field2762) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 301;
|
|
setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.enableControl();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene300::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 (_item14.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NE);
|
|
BF_GLOBALS._events.setCursor(surface);
|
|
} else if (_item15.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_E);
|
|
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 Scene300::dispatch() {
|
|
SceneExt::dispatch();
|
|
|
|
if (!_action) {
|
|
int regionIndex = BF_GLOBALS._player.getRegionIndex();
|
|
if ((regionIndex == 1) && (_field2762 == 1)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 301;
|
|
setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
|
|
}
|
|
|
|
if ((BF_GLOBALS._player._position.y < 59) && (BF_GLOBALS._player._position.x > 137) &&
|
|
(_sceneMode != 6308) && (_sceneMode != 7308)) {
|
|
// The original was setting a useless global variable (removed)
|
|
_sceneMode = 6308;
|
|
BF_GLOBALS._player.disableControl();
|
|
ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 20,
|
|
BF_GLOBALS._player._position.y - 5);
|
|
}
|
|
|
|
if (BF_GLOBALS._player._position.x <= 5)
|
|
setAction(&_action2);
|
|
|
|
if (BF_GLOBALS._player._position.x >= 315) {
|
|
if (BF_GLOBALS.getFlag(onDuty) || (BF_GLOBALS._bookmark == bNone) || BF_GLOBALS.getFlag(fWithLyle)) {
|
|
setAction(&_action1);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 317;
|
|
setAction(&_sequenceManager1, this, 1301, &BF_GLOBALS._player, NULL);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene300::setupInspection() {
|
|
_object13.postInit();
|
|
_object13.setVisage(307);
|
|
_object13.setStrip(6);
|
|
_object13.setPosition(Common::Point(156, 134));
|
|
_object13._moveDiff = Common::Point(3, 1);
|
|
_object3.setup(&_object13, 306, 1, 29);
|
|
|
|
_object14.postInit();
|
|
_object14.setVisage(307);
|
|
_object14.setStrip(6);
|
|
_object14.setPosition(Common::Point(171, 137));
|
|
_object14._moveDiff = Common::Point(3, 1);
|
|
_object4.setup(&_object14, 306, 2, 29);
|
|
|
|
_object12.postInit();
|
|
_object12.setVisage(307);
|
|
_object12.setStrip(6);
|
|
_object12.setPosition(Common::Point(186, 140));
|
|
_object12._moveDiff = Common::Point(3, 1);
|
|
_object5.setup(&_object12, 306, 2, 29);
|
|
_object12.hide();
|
|
|
|
_object15.postInit();
|
|
_object15.setVisage(307);
|
|
_object15.setStrip(6);
|
|
_object15.setPosition(Common::Point(201, 142));
|
|
_object15._moveDiff = Common::Point(3, 1);
|
|
_object6.setup(&_object15, 306, 3, 29);
|
|
|
|
_object16.postInit();
|
|
_object16.setVisage(307);
|
|
_object16.setStrip(6);
|
|
_object16.setPosition(Common::Point(216, 145));
|
|
_object16._moveDiff = Common::Point(3, 1);
|
|
_object7.setup(&_object16, 306, 1, 29);
|
|
|
|
_object1.postInit();
|
|
_object1.setVisage(307);
|
|
_object1.setStrip(6);
|
|
_object1.setPosition(Common::Point(305, 66));
|
|
_object1._moveDiff = Common::Point(3, 1);
|
|
_object1.setObjectWrapper(new SceneObjectWrapper());
|
|
_object1.animate(ANIM_MODE_1, NULL);
|
|
_object2.setup(&_object1, 306, 4, 29);
|
|
|
|
BF_GLOBALS._sceneItems.addItems(&_object13, &_object14, &_object15, &_object16, NULL);
|
|
_timer.set(3600, this, &_action5);
|
|
|
|
_field2760 = 0;
|
|
_field2762 = 1;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 315 - Inside Police Station
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene315::Barry::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
scene->_currentCursor = action;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if (scene->_invGreenCount || scene->_invGangCount)
|
|
SceneItem::display2(320, 51);
|
|
else
|
|
NamedHotspot::startAction(action, event);
|
|
break;
|
|
case CURSOR_TALK:
|
|
if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._sceneManager._previousScene == 325))
|
|
NamedHotspot::startAction(action, event);
|
|
else {
|
|
if (!BF_GLOBALS.getFlag(onDuty))
|
|
scene->_stripNumber = 3172;
|
|
else if (BF_GLOBALS.getFlag(fTalkedToBarry))
|
|
scene->_stripNumber = 3166;
|
|
else if (BF_GLOBALS.getFlag(fTalkedToLarry))
|
|
scene->_stripNumber = 3164;
|
|
else
|
|
scene->_stripNumber = 3165;
|
|
|
|
scene->setAction(&scene->_action1);
|
|
BF_GLOBALS.setFlag(fTalkedToBarry);
|
|
}
|
|
break;
|
|
case INV_GREENS_GUN:
|
|
case INV_GREENS_KNIFE:
|
|
BF_GLOBALS._player.disableControl();
|
|
if (BF_INVENTORY._bookingGreen._sceneNumber == 390) {
|
|
scene->_stripNumber = 3174;
|
|
scene->setAction(&scene->_action1);
|
|
} else {
|
|
++scene->_bookGreenCount;
|
|
scene->_stripNumber = (action == INV_GREENS_GUN) ? 3168 : 0;
|
|
scene->_sceneMode = 3153;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3153, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case INV_FOREST_RAP:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripNumber = BF_GLOBALS.getFlag(onDuty) ? 3173 : 3178;
|
|
scene->setAction(&scene->_action1);
|
|
break;
|
|
case INV_GREEN_ID:
|
|
case INV_FRANKIE_ID:
|
|
case INV_TYRONE_ID:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripNumber = 3175;
|
|
scene->setAction(&scene->_action1);
|
|
break;
|
|
case INV_BOOKING_GREEN:
|
|
case INV_BOOKING_FRANKIE:
|
|
case INV_BOOKING_GANG:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripNumber = 3167;
|
|
scene->setAction(&scene->_action1);
|
|
break;
|
|
case INV_COBB_RAP:
|
|
if (BF_INVENTORY.getObjectScene(INV_MUG_SHOT) == 1)
|
|
NamedHotspot::startAction(action, event);
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3169;
|
|
if (BF_GLOBALS._dayNumber > 2)
|
|
scene->_stripNumber = 3176;
|
|
else if (BF_GLOBALS.getFlag(onDuty))
|
|
scene->_stripNumber = 3177;
|
|
else
|
|
scene->_stripNumber = 3170;
|
|
scene->setAction(&scene->_action1);
|
|
}
|
|
break;
|
|
case INV_22_BULLET:
|
|
case INV_AUTO_RIFLE:
|
|
case INV_WIG:
|
|
case INV_22_SNUB:
|
|
BF_GLOBALS._player.disableControl();
|
|
if ((BF_GLOBALS.getFlag(fCuffedFrankie) && (BF_INVENTORY._bookingFrankie._sceneNumber == 0)) ||
|
|
(!BF_GLOBALS.getFlag(fCuffedFrankie) && (BF_INVENTORY._bookingGang._sceneNumber == 0))) {
|
|
scene->_stripNumber = 3174;
|
|
scene->setAction(&scene->_action1);
|
|
} else {
|
|
++scene->_bookGangCount;
|
|
if (!scene->_field1B6C && (scene->_bookGangCount == 1)) {
|
|
scene->_field1B6C = 1;
|
|
scene->_stripNumber = 3169;
|
|
} else {
|
|
scene->_stripNumber = 0;
|
|
}
|
|
|
|
scene->_sceneMode = 3153;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3153, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
default:
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool Scene315::SutterSlot::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
scene->_currentCursor = action;
|
|
|
|
switch (action) {
|
|
case INV_GREENS_GUN:
|
|
case INV_22_BULLET:
|
|
case INV_AUTO_RIFLE:
|
|
case INV_WIG:
|
|
case INV_22_SNUB:
|
|
SceneItem::display2(315, 30);
|
|
break;
|
|
case INV_GREEN_ID:
|
|
case INV_FRANKIE_ID:
|
|
case INV_TYRONE_ID:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripNumber = 3175;
|
|
scene->setAction(&scene->_action1);
|
|
break;
|
|
case INV_BOOKING_GREEN:
|
|
case INV_BOOKING_FRANKIE:
|
|
case INV_BOOKING_GANG:
|
|
if (action == INV_BOOKING_GREEN)
|
|
++scene->_bookGreenCount;
|
|
else
|
|
++scene->_bookGangCount;
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 12;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3154, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
default:
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool Scene315::Sign::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_LOOK) {
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
scene->_object9.postInit();
|
|
scene->_object9.hide();
|
|
scene->_sceneMode = 3167;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3167, &scene->_object9, this, NULL);
|
|
return true;
|
|
} else {
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene315::BulletinBoard::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_LOOK) {
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
scene->_stripManager.start(3154, &BF_GLOBALS._stripProxy);
|
|
return true;
|
|
} else {
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene315::CleaningKit::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if ((action == INV_COLT45) && BF_GLOBALS.getFlag(onDuty)) {
|
|
if (!BF_GLOBALS.getFlag(onDuty))
|
|
SceneItem::display2(315, 27);
|
|
else if (BF_GLOBALS.getHasBullets()) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3162;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3162, &BF_GLOBALS._player, NULL);
|
|
} else if (BF_GLOBALS.getFlag(fGunLoaded))
|
|
SceneItem::display2(315, 46);
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3159;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3159, &BF_GLOBALS._player, NULL);
|
|
}
|
|
return true;
|
|
} else {
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene315::BriefingMaterial::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action != CURSOR_USE)
|
|
return NamedHotspot::startAction(action, event);
|
|
else if (BF_INVENTORY._forestRap._sceneNumber == 1) {
|
|
SceneItem::display2(315, 37);
|
|
return true;
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3158;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3158, &BF_GLOBALS._player, NULL);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
bool Scene315::WestExit::startAction(CursorType action, Event &event) {
|
|
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 190, 75);
|
|
return true;
|
|
}
|
|
|
|
bool Scene315::SouthWestExit::startAction(CursorType action, Event &event) {
|
|
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, event.mousePos.x, event.mousePos.y);
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene315::BulletinMemo::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
scene->_stripManager.start(3157, &BF_GLOBALS._stripProxy);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (!BF_GLOBALS.getFlag(fGotPointsForCleaningGun)) {
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
BF_GLOBALS.setFlag(fGotPointsForCleaningGun);
|
|
}
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
scene->_stripManager.start(3159, &BF_GLOBALS._stripProxy);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Own Mail Slot
|
|
bool Scene315::Object2::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_object9.postInit();
|
|
scene->_object9.hide();
|
|
scene->_sceneMode = 3157;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3157, &BF_GLOBALS._player, &scene->_object9, NULL);
|
|
return true;
|
|
case CURSOR_USE:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3156;
|
|
scene->setAction(&scene->_sequenceManager, scene, BF_GLOBALS.getFlag(onDuty) ? 3156 : 3168,
|
|
&BF_GLOBALS._player, this, NULL);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene315::ATFMemo::startAction(CursorType action, Event &event) {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
scene->_stripManager.start(3156, &BF_GLOBALS._stripProxy);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (!BF_GLOBALS.getFlag(fGotPointsForMemo)) {
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_GLOBALS.setFlag(fGotPointsForMemo);
|
|
}
|
|
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
scene->_stripManager.start(3158, &BF_GLOBALS._stripProxy);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene315::Action1::signal() {
|
|
Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 128, 128);
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._player.changeAngle(315);
|
|
setDelay(2);
|
|
break;
|
|
case 2:
|
|
scene->_stripManager.start(scene->_stripNumber, this);
|
|
break;
|
|
case 3:
|
|
if (scene->_sceneMode == 3169) {
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1);
|
|
//HACK: This has to be checked wether or not it occurs in the original.
|
|
//When the _sceneMode is set to 3169, the value desn't change.
|
|
//If you show the forest rapsheet, it gives points (and again... and again...)
|
|
scene->_sceneMode = 3154;
|
|
}
|
|
|
|
remove();
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene315::Scene315() {
|
|
BF_GLOBALS._v51C44 = 1;
|
|
_field1B6C = _field139C = 0;
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
BF_GLOBALS._dayNumber = 1;
|
|
|
|
BF_GLOBALS.clearFlag(fCanDrawGun);
|
|
_field1B68 = true;
|
|
_doorOpened = false;
|
|
_invGreenCount = _bookGreenCount = 0;
|
|
_invGangCount = _bookGangCount = 0;
|
|
}
|
|
|
|
void Scene315::synchronize(Serializer &s) {
|
|
SceneExt::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_field1390);
|
|
s.syncAsSint16LE(_stripNumber);
|
|
s.syncAsSint16LE(_field1398);
|
|
s.syncAsSint16LE(_invGreenCount);
|
|
s.syncAsSint16LE(_bookGreenCount);
|
|
s.syncAsSint16LE(_invGangCount);
|
|
s.syncAsSint16LE(_bookGangCount);
|
|
s.syncAsSint16LE(_field1B6C);
|
|
s.syncAsSint16LE(_field139C);
|
|
s.syncAsByte(_field1B68);
|
|
s.syncAsByte(_doorOpened);
|
|
s.syncAsSint16LE(_currentCursor);
|
|
}
|
|
|
|
void Scene315::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit(OwnerList);
|
|
loadScene(315);
|
|
|
|
if (BF_GLOBALS._sceneManager._previousScene != 325)
|
|
BF_GLOBALS._sound1.fadeSound(11);
|
|
|
|
setZoomPercents(67, 72, 124, 100);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_sutterSpeaker);
|
|
_stripManager.addSpeaker(&_harrisonSpeaker);
|
|
_stripManager.addSpeaker(&_jakeJacketSpeaker);
|
|
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
|
_stripManager.addSpeaker(&_jailerSpeaker);
|
|
|
|
_object8.postInit();
|
|
_object8.setVisage(315);
|
|
_object8.setPosition(Common::Point(272, 69));
|
|
|
|
if (BF_GLOBALS._bookmark >= bLauraToParamedics) {
|
|
_atfMemo.postInit();
|
|
_atfMemo.setVisage(315);
|
|
_atfMemo.setPosition(Common::Point(167, 53));
|
|
_atfMemo.setStrip(4);
|
|
_atfMemo.setFrame(4);
|
|
_atfMemo.fixPriority(82);
|
|
_atfMemo.setDetails(315, -1, -1, -1, 1, (SceneItem *)NULL);
|
|
}
|
|
|
|
if (BF_GLOBALS._dayNumber == 1) {
|
|
if (BF_GLOBALS._bookmark >= bLauraToParamedics) {
|
|
_bulletinMemo.postInit();
|
|
_bulletinMemo.setVisage(315);
|
|
_bulletinMemo.setPosition(Common::Point(156, 51));
|
|
_bulletinMemo.setStrip(4);
|
|
_bulletinMemo.setFrame(2);
|
|
_bulletinMemo.fixPriority(82);
|
|
_bulletinMemo.setDetails(315, -1, -1, -1, 1, (SceneItem *)NULL);
|
|
}
|
|
} else if ((BF_INVENTORY._daNote._sceneNumber != 1) && (BF_GLOBALS._dayNumber < 3)) {
|
|
_object2.postInit();
|
|
_object2.setVisage(315);
|
|
_object2.setStrip(3);
|
|
_object2.setFrame(2);
|
|
_object2.setPosition(Common::Point(304, 31));
|
|
_object2.fixPriority(70);
|
|
_object2.setDetails(315, 3, 4, -1, 1, (SceneItem *)NULL);
|
|
}
|
|
|
|
_sutterSlot.setDetails(12, 315, 35, -1, 36, 1);
|
|
_bulletinBoard.setDetails(3, 315, -1, -1, -1, 1);
|
|
_barry.setDetails(4, 315, 10, 11, 12, 1);
|
|
_item3.setDetails(2, 315, 0, 1, 2, 1);
|
|
_sign.setDetails(Rect(190, 17, 208, 30), 315, -1, -1, -1, 1, NULL);
|
|
_westExit.setDetails(Rect(184, 31, 211, 80), 315, -1, -1, -1, 1, NULL);
|
|
_swExit.setDetails(Rect(0, 157, 190, 167), 315, -1, -1, -1, 1, NULL);
|
|
|
|
if (!BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._bookmark == bNone) || (BF_GLOBALS._bookmark == bLyleStoppedBy))) {
|
|
_field1398 = 1;
|
|
BF_GLOBALS.setFlag(onDuty);
|
|
} else {
|
|
_field1398 = 0;
|
|
}
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._sceneManager._previousScene != 325)) {
|
|
_object4.postInit();
|
|
_object4.setVisage(316);
|
|
_object4.setPosition(Common::Point(99, 82));
|
|
_object4.fixPriority(95);
|
|
|
|
_object5.postInit();
|
|
_object5.setVisage(395);
|
|
_object5.setStrip(2);
|
|
_object5.setPosition(Common::Point(96, 86));
|
|
}
|
|
|
|
// Set up evidence objects in inventory
|
|
if (BF_INVENTORY._bookingGreen.inInventory())
|
|
++_invGreenCount;
|
|
if (BF_INVENTORY._greensGun.inInventory())
|
|
++_invGreenCount;
|
|
if (BF_INVENTORY._greensKnife.inInventory())
|
|
++_invGreenCount;
|
|
|
|
if (BF_INVENTORY._bullet22.inInventory())
|
|
++_invGangCount;
|
|
if (BF_INVENTORY._autoRifle.inInventory())
|
|
++_invGangCount;
|
|
if (BF_INVENTORY._wig.inInventory())
|
|
++_invGangCount;
|
|
if (BF_INVENTORY._bookingFrankie.inInventory())
|
|
++_invGangCount;
|
|
if (BF_INVENTORY._bookingGang.inInventory())
|
|
++_invGangCount;
|
|
if (BF_INVENTORY._snub22.inInventory())
|
|
++_invGangCount;
|
|
|
|
switch (BF_GLOBALS._sceneManager._previousScene) {
|
|
case 190:
|
|
if (_field1398)
|
|
_doorOpened = true;
|
|
_sceneMode = BF_GLOBALS.getFlag(onDuty) ? 3150 : 3165;
|
|
setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
case 325:
|
|
T2_GLOBALS._uiElements._active = false;
|
|
_object6.postInit();
|
|
_object7.postInit();
|
|
_object8.setFrame(8);
|
|
_sceneMode = (BF_GLOBALS._dayNumber == 1) ? 3152 : 3155;
|
|
setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_object6,
|
|
&_object7, &_object8, NULL);
|
|
break;
|
|
case 300:
|
|
default:
|
|
if (_field1398)
|
|
_doorOpened = true;
|
|
if (!BF_GLOBALS.getFlag(onDuty))
|
|
_sceneMode = 3166;
|
|
else if (!_field1398)
|
|
_sceneMode = 3164;
|
|
else
|
|
_sceneMode = 3163;
|
|
|
|
setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
}
|
|
|
|
if (_doorOpened) {
|
|
_object8.setFrame(8);
|
|
} else {
|
|
BF_GLOBALS._walkRegions.disableRegion(4);
|
|
}
|
|
|
|
_briefingMaterial.setDetails(24, 315, 38, 39, 40, 1);
|
|
_cleaningKit.setDetails(14, 315, 24, 25, 26, 1);
|
|
_item7.setDetails(5, 315, 8, 9, -1, 1);
|
|
_item6.setDetails(6, 315, 5, 6, 7, 1);
|
|
_item10.setDetails(8, 315, 13, -1, -1, 1);
|
|
_item11.setDetails(9, 315, 14, -1, -1, 1);
|
|
_item8.setDetails(7, 315, 15, 16, 17, 1);
|
|
_item9.setDetails(10, 315, 18, 19, 20, 1);
|
|
}
|
|
|
|
void Scene315::signal() {
|
|
int ctr = 0;
|
|
|
|
switch (_sceneMode) {
|
|
case 0:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 10:
|
|
if (_bookGreenCount) {
|
|
if (_bookGreenCount >= _invGreenCount)
|
|
BF_GLOBALS.setFlag(fLeftTraceIn910);
|
|
else
|
|
++ctr;
|
|
}
|
|
|
|
if (_bookGangCount) {
|
|
if (_bookGangCount < _invGangCount)
|
|
++ctr;
|
|
else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence)
|
|
BF_GLOBALS._bookmark = bBookedFrankieEvidence;
|
|
}
|
|
|
|
if (ctr) {
|
|
BF_GLOBALS._deathReason = 20;
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
} else {
|
|
BF_GLOBALS._sceneManager.changeScene(300);
|
|
}
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
break;
|
|
case 11:
|
|
if (_bookGreenCount) {
|
|
if (_bookGreenCount >= _invGreenCount)
|
|
BF_GLOBALS.setFlag(fLeftTraceIn910);
|
|
else
|
|
++ctr;
|
|
}
|
|
|
|
if (_bookGangCount) {
|
|
if (_bookGangCount < _invGangCount)
|
|
++ctr;
|
|
else if (BF_GLOBALS._bookmark < bBookedFrankie)
|
|
BF_GLOBALS._bookmark = bBookedFrankie;
|
|
else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence)
|
|
BF_GLOBALS._bookmark = bBookedFrankie;
|
|
}
|
|
|
|
if (ctr == 1) {
|
|
BF_GLOBALS._deathReason = 20;
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
} else if ((BF_GLOBALS._bookmark != bBookedFrankie) || !BF_GLOBALS.getFlag(onDuty)) {
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(190);
|
|
} else {
|
|
BF_GLOBALS._bookmark = bBookedFrankieEvidence;
|
|
_field139C = 0;
|
|
BF_GLOBALS.clearFlag(onDuty);
|
|
BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60);
|
|
BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60);
|
|
_sceneMode = 3165;
|
|
setAction(&_sequenceManager, this, 3165, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case 12:
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_INVENTORY.setObjectScene((int)_currentCursor, 315);
|
|
|
|
if (!_invGangCount || (_bookGangCount != _invGangCount))
|
|
BF_GLOBALS._player.enableControl();
|
|
else {
|
|
_field139C = 1;
|
|
_stripNumber = 3171;
|
|
setAction(&_action1);
|
|
}
|
|
break;
|
|
case 3150:
|
|
case 3164:
|
|
case 3165:
|
|
case 3166:
|
|
BF_GLOBALS._player.enableControl();
|
|
_field1B68 = false;
|
|
break;
|
|
case 3151:
|
|
BF_GLOBALS._sceneManager.changeScene(325);
|
|
break;
|
|
case 3152:
|
|
BF_GLOBALS._walkRegions.disableRegion(4);
|
|
_object7.remove();
|
|
_object6.remove();
|
|
// No break on purpose
|
|
case 3155:
|
|
BF_GLOBALS._player.enableControl();
|
|
_field1B68 = false;
|
|
BF_GLOBALS._walkRegions.disableRegion(4);
|
|
T2_GLOBALS._uiElements._active = true;
|
|
T2_GLOBALS._uiElements.show();
|
|
break;
|
|
case 3153:
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_INVENTORY.setObjectScene((int)_currentCursor, 315);
|
|
|
|
if (_stripNumber != 0)
|
|
setAction(&_action1);
|
|
else if (!_invGangCount || (_bookGangCount != _invGangCount))
|
|
BF_GLOBALS._player.enableControl();
|
|
else {
|
|
_stripNumber = 3171;
|
|
setAction(&_action1);
|
|
_field139C = 1;
|
|
}
|
|
break;
|
|
case 3156:
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
BF_INVENTORY.setObjectScene(INV_DA_NOTE, 1);
|
|
_object2.remove();
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3157:
|
|
BF_GLOBALS._player.enableControl();
|
|
_object9.remove();
|
|
break;
|
|
case 3158:
|
|
BF_GLOBALS._player.enableControl();
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 1);
|
|
break;
|
|
case 3159:
|
|
if (!BF_GLOBALS.getFlag(fBookedGreenEvidence)) {
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_GLOBALS.setFlag(fBookedGreenEvidence);
|
|
}
|
|
BF_GLOBALS.setFlag(gunClean);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3161:
|
|
BF_GLOBALS._deathReason = 21;
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
break;
|
|
case 3162:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3161;
|
|
setAction(&_sequenceManager, this, 3161, &BF_GLOBALS._player, NULL);
|
|
BF_GLOBALS.setFlag(fShotSuttersDesk);
|
|
break;
|
|
case 3163:
|
|
_sceneMode = 3150;
|
|
setAction(&_sequenceManager, this, 3150, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
case 3167:
|
|
BF_GLOBALS._player.enableControl();
|
|
_object9.remove();
|
|
break;
|
|
case 3169:
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3154:
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene315::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 (_swExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
|
|
BF_GLOBALS._events.setCursor(surface);
|
|
} else if ((BF_GLOBALS._bookmark != bBookedFrankie) && _westExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
|
|
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 Scene315::dispatch() {
|
|
SceneExt::dispatch();
|
|
|
|
if (_field1B68)
|
|
return;
|
|
|
|
if (_doorOpened) {
|
|
if (BF_GLOBALS._player._position.y < 69) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_field1B68 = true;
|
|
_sceneMode = 3151;
|
|
setAction(&_sequenceManager, this, 3151, &BF_GLOBALS._player, NULL);
|
|
} else if (BF_GLOBALS._player.getRegionIndex() == 1) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_field1B68 = true;
|
|
SceneItem::display2(315, 28);
|
|
_sceneMode = 3150;
|
|
ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 30,
|
|
BF_GLOBALS._player._position.y + 15);
|
|
} else if (BF_GLOBALS._player._position.y > 156) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_field1B68 = true;
|
|
SceneItem::display2(315, 28);
|
|
_sceneMode = 3150;
|
|
ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 30,
|
|
BF_GLOBALS._player._position.y - 24);
|
|
}
|
|
} else if (BF_GLOBALS._player.getRegionIndex() == 1) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_field1B68 = true;
|
|
_sceneMode = 11;
|
|
ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 30,
|
|
BF_GLOBALS._player._position.y - 5);
|
|
} else if (BF_GLOBALS._player._position.y > 156) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_field1B68 = true;
|
|
|
|
if (_field139C) {
|
|
SceneItem::display2(315, 45);
|
|
_sceneMode = 3150;
|
|
ADD_MOVER(BF_GLOBALS._player, 112, 152);
|
|
} else {
|
|
_sceneMode = 10;
|
|
ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 150,
|
|
BF_GLOBALS._player._position.y + 120);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 325 - Police Station Conference Room
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene325::Item1::startAction(CursorType action, Event &event) {
|
|
if (action == CURSOR_EXIT) {
|
|
BF_GLOBALS._events.setCursor(CURSOR_WALK);
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._sceneManager.changeScene(315);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene325::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(325);
|
|
BF_GLOBALS._interfaceY = 200;
|
|
BF_GLOBALS.clearFlag(fCanDrawGun);
|
|
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
BF_GLOBALS._dayNumber = 1;
|
|
|
|
// Add the speakers
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_PSutterSpeaker);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.hide();
|
|
|
|
if (BF_GLOBALS._dayNumber == 1) {
|
|
_object1.postInit();
|
|
_object1.setVisage(325);
|
|
_object1.setStrip(8);
|
|
_object1.setPosition(Common::Point(128, 44));
|
|
} else {
|
|
_object1.postInit();
|
|
_object1.setVisage(325);
|
|
_object1.setStrip(8);
|
|
_object1.setFrame(2);
|
|
_object1.setPosition(Common::Point(132, 28));
|
|
|
|
_object2.postInit();
|
|
_object2.setVisage(325);
|
|
_object2.setStrip(8);
|
|
_object2.setFrame(3);
|
|
_object2.setPosition(Common::Point(270, 24));
|
|
}
|
|
|
|
_object3.postInit();
|
|
_object3.setVisage(335);
|
|
_object3.setStrip(4);
|
|
_object3.setPosition(Common::Point(202, 122));
|
|
|
|
_object4.postInit();
|
|
_object4.setVisage(335);
|
|
_object4.setStrip(2);
|
|
_object4.setPosition(Common::Point(283, 102));
|
|
|
|
_object5.postInit();
|
|
_object5.setVisage(335);
|
|
_object5.setStrip(1);
|
|
_object5.setPosition(Common::Point(135, 167));
|
|
|
|
_item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 560, -1, -1, -1, 1, NULL);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
_sceneMode = (BF_GLOBALS._dayNumber == 1) ? 3250 : 3251;
|
|
setAction(&_sequenceManager, this, _sceneMode, &_object3, &_object4, &_object5, NULL);
|
|
}
|
|
|
|
void Scene325::signal() {
|
|
BF_GLOBALS._player._uiEnabled = 0;
|
|
BF_GLOBALS._player._canWalk = true;
|
|
BF_GLOBALS._player._enabled = true;
|
|
BF_GLOBALS._events.setCursor(CURSOR_EXIT);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 330 - Approaching Marina
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene330::Timer1::signal() {
|
|
PaletteRotation *rotation = BF_GLOBALS._scenePalette.addRotation(240, 254, 1);
|
|
rotation->setDelay(25);
|
|
remove();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene330::Scene330() {
|
|
_seqNumber = 0;
|
|
}
|
|
|
|
void Scene330::synchronize(Serializer &s) {
|
|
SceneExt::synchronize(s);
|
|
s.syncAsSint16LE(_seqNumber);
|
|
}
|
|
|
|
void Scene330::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
BF_GLOBALS._sound1.changeSound(35);
|
|
_sound1.fadeSound(35);
|
|
|
|
loadScene(850);
|
|
_timer.set(2, NULL);
|
|
|
|
if (BF_GLOBALS._dayNumber >= 4) {
|
|
_object2.postInit();
|
|
_object2.setVisage(851);
|
|
_object2.setPosition(Common::Point(120, 112));
|
|
}
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 850 : 852);
|
|
BF_GLOBALS._player.setStrip(2);
|
|
BF_GLOBALS._player.setFrame(1);
|
|
BF_GLOBALS._player.hide();
|
|
if (BF_GLOBALS.getFlag(fWithLyle))
|
|
BF_GLOBALS._player.setStrip(5);
|
|
|
|
if ((BF_GLOBALS._dayNumber == 1) && BF_GLOBALS.getFlag(fBackupArrived340)) {
|
|
_object1.postInit();
|
|
_object1.setVisage(850);
|
|
_object1.setStrip(6);
|
|
_object1.setFrame(1);
|
|
_object1.setPosition(Common::Point(47, 169));
|
|
_object1.animate(ANIM_MODE_2);
|
|
}
|
|
|
|
if (BF_GLOBALS._sceneManager._previousScene == 50) {
|
|
// Coming from map
|
|
if ((BF_GLOBALS._driveFromScene == 340) || (BF_GLOBALS._driveFromScene == 342) ||
|
|
(BF_GLOBALS._driveFromScene == 330)) {
|
|
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
_seqNumber = 3304;
|
|
} else {
|
|
_seqNumber = 3302;
|
|
_sound2.play(123);
|
|
BF_GLOBALS.setFlag(onBike);
|
|
}
|
|
} else if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
_seqNumber = 3303;
|
|
} else {
|
|
_sound2.play(123);
|
|
_seqNumber = 3301;
|
|
|
|
if ((BF_GLOBALS._dayNumber == 1) && (BF_GLOBALS._bookmark >= bStartOfGame) &&
|
|
(BF_GLOBALS._bookmark < bCalledToDomesticViolence)) {
|
|
BF_GLOBALS._player.animate(ANIM_MODE_2);
|
|
}
|
|
}
|
|
} else if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
_seqNumber = 3303;
|
|
} else {
|
|
_seqNumber = 3301;
|
|
_sound2.play(123);
|
|
|
|
if ((BF_GLOBALS._dayNumber == 1) && (BF_GLOBALS._bookmark >= bStartOfGame) &&
|
|
(BF_GLOBALS._bookmark < bCalledToDomesticViolence)) {
|
|
BF_GLOBALS._player.animate(ANIM_MODE_2);
|
|
}
|
|
}
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager, this, _seqNumber, &BF_GLOBALS._player, NULL);
|
|
}
|
|
|
|
void Scene330::remove() {
|
|
BF_GLOBALS._scenePalette.clearListeners();
|
|
SceneExt::remove();
|
|
}
|
|
|
|
void Scene330::signal() {
|
|
if ((BF_GLOBALS._driveFromScene == 330) || (BF_GLOBALS._driveFromScene == 340) ||
|
|
(BF_GLOBALS._driveFromScene == 342)) {
|
|
// Leaving marina
|
|
if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) ||
|
|
(BF_GLOBALS._bookmark >= bCalledToDomesticViolence))
|
|
// Leave scene normally
|
|
BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._driveToScene);
|
|
else {
|
|
// Player leaves with domestic violence unresolved
|
|
BF_GLOBALS._player.hide();
|
|
BF_GLOBALS._deathReason = 4;
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
}
|
|
} else {
|
|
// Arriving at marina
|
|
BF_GLOBALS.clearFlag(onBike);
|
|
|
|
if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) ||
|
|
(BF_GLOBALS._bookmark >= bCalledToDomesticViolence))
|
|
BF_GLOBALS._sceneManager.changeScene(342);
|
|
else
|
|
BF_GLOBALS._sceneManager.changeScene(340);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 340 - Marina, Domestic Disturbance
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene340::Child::startAction(CursorType action, Event &event) {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(340, 5);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(340, 14);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
if (!BF_GLOBALS.getFlag(fBackupArrived340) || (BF_GLOBALS._marinaWomanCtr < 3) || !BF_GLOBALS.getFlag(fGotAllSkip340))
|
|
scene->setAction(&scene->_action3);
|
|
else
|
|
scene->setAction(&scene->_action2);
|
|
return true;
|
|
case INV_COLT45:
|
|
scene->gunDisplay();
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool Scene340::Woman::startAction(CursorType action, Event &event) {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(340, 4);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(340, 13);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
if (!BF_GLOBALS.getFlag(fBackupArrived340) || (BF_GLOBALS._marinaWomanCtr < 3) || !BF_GLOBALS.getFlag(fGotAllSkip340))
|
|
scene->setAction(&scene->_action1);
|
|
else
|
|
scene->setAction(&scene->_action2);
|
|
return true;
|
|
case INV_COLT45:
|
|
scene->gunDisplay();
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool Scene340::Harrison::startAction(CursorType action, Event &event) {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(340, 6);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(340, 15);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
scene->setAction(&scene->_action5);
|
|
return true;
|
|
case INV_COLT45:
|
|
scene->gunDisplay();
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene340::Item1::startAction(CursorType action, Event &event) {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == INV_COLT45) {
|
|
scene->gunDisplay();
|
|
return true;
|
|
} else {
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene340::WestExit::startAction(CursorType action, Event &event) {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (BF_GLOBALS.getFlag(fBackupArrived340)) {
|
|
scene->setAction(&scene->_action6);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 4;
|
|
setAction(&scene->_sequenceManager1, scene, 1348, &BF_GLOBALS._player, NULL);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool Scene340::SouthWestExit::startAction(CursorType action, Event &event) {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3;
|
|
setAction(&scene->_sequenceManager1, scene, 1340, &BF_GLOBALS._player, NULL);
|
|
return true;
|
|
}
|
|
|
|
bool Scene340::NorthExit::startAction(CursorType action, Event &event) {
|
|
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 254, 106);
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene340::Action1::signal() {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0: {
|
|
BF_GLOBALS._player.disableControl();
|
|
ADD_PLAYER_MOVER(64, 155);
|
|
break;
|
|
}
|
|
case 1:
|
|
BF_GLOBALS._player.changeAngle(45);
|
|
setDelay(3);
|
|
break;
|
|
case 2:
|
|
if (!BF_GLOBALS._marinaWomanCtr) {
|
|
setAction(&scene->_action8, this);
|
|
} else if (!_action) {
|
|
BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this,
|
|
MIN(BF_GLOBALS._marinaWomanCtr, 3) + 2340, &scene->_woman, &scene->_child,
|
|
&scene->_object4, NULL);
|
|
}
|
|
break;
|
|
case 3:
|
|
if ((BF_GLOBALS._marinaWomanCtr != 1) || BF_GLOBALS.getFlag(fCalledBackup)) {
|
|
setDelay(3);
|
|
} else {
|
|
scene->_sound1.play(8);
|
|
scene->_stripManager.start(3413, this);
|
|
}
|
|
break;
|
|
case 4:
|
|
if (BF_GLOBALS._marinaWomanCtr == 1)
|
|
++BF_GLOBALS._marinaWomanCtr;
|
|
|
|
if (BF_GLOBALS.getFlag(fBackupArrived340)) {
|
|
scene->_backupPresent = 1;
|
|
scene->_harrison.setPosition(Common::Point(46, 154));
|
|
BF_GLOBALS._walkRegions.disableRegion(19);
|
|
} else if (BF_GLOBALS.getFlag(fCalledBackup)) {
|
|
scene->_timer1.set(40, &scene->_harrison, &scene->_action4);
|
|
}
|
|
|
|
++BF_GLOBALS._marinaWomanCtr;
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::Action2::signal() {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0: {
|
|
BF_GLOBALS._player.disableControl();
|
|
ADD_PLAYER_MOVER(64, 155);
|
|
break;
|
|
}
|
|
case 1:
|
|
BF_GLOBALS._player.changeAngle(45);
|
|
setDelay(3);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._player.setAction(&scene->_sequenceManager3, this, 1341, &scene->_woman, &scene->_child, NULL);
|
|
break;
|
|
case 3:
|
|
scene->_woman.remove();
|
|
scene->_child.remove();
|
|
BF_GLOBALS.setFlag(fToldToLeave340);
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::Action3::signal() {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0: {
|
|
BF_GLOBALS._player.disableControl();
|
|
ADD_PLAYER_MOVER(64, 155);
|
|
break;
|
|
}
|
|
case 1:
|
|
BF_GLOBALS._player.changeAngle(45);
|
|
setDelay(3);
|
|
break;
|
|
case 2:
|
|
scene->_stripManager.start(scene->_womanDialogCount + 3404, this);
|
|
break;
|
|
case 3:
|
|
if (++scene->_womanDialogCount > 2) {
|
|
if (!BF_GLOBALS.getFlag(fGotAllSkip340))
|
|
BF_GLOBALS.setFlag(fGotAllSkip340);
|
|
scene->_womanDialogCount = 0;
|
|
}
|
|
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::Action4::signal() {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
if (!_action) {
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(3);
|
|
} else {
|
|
scene->_timer1.set(30, &scene->_harrison, &scene->_action4);
|
|
remove();
|
|
}
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS.setFlag(fBackupArrived340);
|
|
scene->_backupPresent = 1;
|
|
setDelay(3);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._player.setAction(&scene->_sequenceManager3, this, 1347, &scene->_harrison, NULL);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._walkRegions.disableRegion(19);
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::Action5::signal() {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
if (scene->_backupPresent) {
|
|
ADD_PLAYER_MOVER(64, 155);
|
|
} else {
|
|
BF_GLOBALS._player.changeAngle(45);
|
|
setDelay(3);
|
|
}
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._player.updateAngle(scene->_harrison._position);
|
|
setDelay(3);
|
|
break;
|
|
case 2:
|
|
setDelay(15);
|
|
break;
|
|
case 3:
|
|
if (BF_GLOBALS.getFlag(fBriefedBackup))
|
|
scene->_stripManager.start(3416, this);
|
|
else {
|
|
BF_GLOBALS.setFlag(fBriefedBackup);
|
|
scene->_stripManager.start(3407, this);
|
|
}
|
|
break;
|
|
case 4:
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::Action6::signal() {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
ADD_PLAYER_MOVER(10, 110);
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._player.updateAngle(scene->_harrison._position);
|
|
scene->_harrison.updateAngle(BF_GLOBALS._player._position);
|
|
scene->_stripManager.start(3415, this);
|
|
break;
|
|
case 2: {
|
|
ADD_MOVER(BF_GLOBALS._player, -8, 110);
|
|
break;
|
|
}
|
|
case 3:
|
|
scene->_sceneMode = 4;
|
|
scene->signal();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::Action7::signal() {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
ADD_PLAYER_MOVER(254, 121);
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._player.updateAngle(scene->_harrison._position);
|
|
scene->_stripManager.start(BF_GLOBALS.getFlag(fBriefedBackup) ? 3414 : 3417, this);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS.setFlag(fBackupIn350);
|
|
BF_GLOBALS._sceneManager.changeScene(350);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::Action8::signal() {
|
|
Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
scene->_stripManager.start(3400, this);
|
|
break;
|
|
case 1:
|
|
setDelay(2);
|
|
break;
|
|
case 2:
|
|
scene->_object4.setPriority(250);
|
|
scene->_object4.setPosition(Common::Point(138, 130));
|
|
scene->_object4.setVisage(347);
|
|
scene->_object4.setStrip(6);
|
|
scene->_object4.setFrame(1);
|
|
scene->_object4._numFrames = 2;
|
|
scene->_object4.animate(ANIM_MODE_5, NULL);
|
|
scene->_object4.show();
|
|
break;
|
|
case 3:
|
|
scene->_object4.hide();
|
|
|
|
scene->_woman.setPriority(123);
|
|
scene->_woman.setPosition(Common::Point(88, 143));
|
|
scene->_woman.setVisage(344);
|
|
scene->_woman.setStrip(2);
|
|
scene->_woman.setFrame(1);
|
|
scene->_woman.changeZoom(100);
|
|
scene->_woman._numFrames = 10;
|
|
scene->_woman._moveRate = 10;
|
|
scene->_woman._moveDiff = Common::Point(3, 2);
|
|
scene->_woman.show();
|
|
|
|
scene->_child.setPriority(120);
|
|
scene->_child.setPosition(Common::Point(81, 143));
|
|
scene->_child.setVisage(347);
|
|
scene->_child.setStrip(3);
|
|
scene->_child.setFrame(1);
|
|
scene->_child.changeZoom(100);
|
|
scene->_child._numFrames = 10;
|
|
scene->_child._moveRate = 10;
|
|
scene->_child.show();
|
|
|
|
setDelay(6);
|
|
break;
|
|
case 4:
|
|
remove();
|
|
break;
|
|
default:
|
|
// This is present in the original game
|
|
warning("Bugs");
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::Action8::process(Event &event) {
|
|
if ((_actionIndex != 3) || (event.eventType == EVENT_NONE))
|
|
Action::process(event);
|
|
else if (event.eventType == EVENT_BUTTON_DOWN) {
|
|
event.handled = true;
|
|
setDelay(2);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene340::Timer2::signal() {
|
|
PaletteRotation *item;
|
|
|
|
item = BF_GLOBALS._scenePalette.addRotation(235, 239, 1);
|
|
item->setDelay(30);
|
|
item = BF_GLOBALS._scenePalette.addRotation(247, 249, 1);
|
|
item->setDelay(30);
|
|
item = BF_GLOBALS._scenePalette.addRotation(240, 246, 1);
|
|
item->setDelay(30);
|
|
item = BF_GLOBALS._scenePalette.addRotation(252, 254, 1);
|
|
item->setDelay(30);
|
|
|
|
remove();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene340::Scene340(): PalettedScene() {
|
|
_seqNumber1 = _womanDialogCount = _backupPresent = 0;
|
|
}
|
|
|
|
void Scene340::synchronize(Serializer &s) {
|
|
PalettedScene::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_seqNumber1);
|
|
s.syncAsSint16LE(_womanDialogCount);
|
|
s.syncAsSint16LE(_backupPresent);
|
|
}
|
|
|
|
void Scene340::postInit(SceneObjectList *OwnerList) {
|
|
PalettedScene::postInit();
|
|
loadScene(340);
|
|
setZoomPercents(126, 70, 162, 100);
|
|
|
|
BF_GLOBALS._walkRegions.disableRegion(13);
|
|
BF_GLOBALS._walkRegions.disableRegion(15);
|
|
_timer2.set(2, NULL);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
|
|
|
_womanDialogCount = 0;
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
|
|
_westExit.setDetails(Rect(0, 76, 19, 115), 340, -1, -1, -1, 1, NULL);
|
|
_swExit.setDetails(15, 340, -1, -1, -1, 1);
|
|
_northExit.setDetails(16, 340, -1, -1, -1, 1);
|
|
|
|
BF_GLOBALS._player._regionBitList |= 0x10000;
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1341 : 129);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(5, 2);
|
|
|
|
if (BF_GLOBALS._dayNumber < 5) {
|
|
_object5.postInit();
|
|
_object5.setVisage(340);
|
|
_object5.setStrip(4);
|
|
_object5.setPosition(Common::Point(259, 61));
|
|
}
|
|
|
|
if (!BF_GLOBALS.getFlag(fToldToLeave340)) {
|
|
_woman.postInit();
|
|
_woman.setVisage(344);
|
|
_woman.setStrip(3);
|
|
_woman.setFrame(1);
|
|
_woman.fixPriority(123);
|
|
_woman.setPosition(Common::Point(88, 143));
|
|
|
|
_object4.postInit();
|
|
_object4.hide();
|
|
|
|
_child.postInit();
|
|
_child.setVisage(347);
|
|
_child.setStrip(3);
|
|
_child.setFrame(1);
|
|
_child.fixPriority(120);
|
|
_child.setPosition(Common::Point(81, 143));
|
|
|
|
_woman.setAction(&_sequenceManager2, NULL, 348, &_woman, &_child, &_object4, NULL);
|
|
BF_GLOBALS._sceneItems.addItems(&_child, &_woman, NULL);
|
|
|
|
_stripManager.addSpeaker(&_jordanSpeaker);
|
|
_stripManager.addSpeaker(&_skipBSpeaker);
|
|
|
|
BF_GLOBALS.set2Flags(f1097Marina);
|
|
}
|
|
|
|
if (BF_GLOBALS.getFlag(fCalledBackup)) {
|
|
_harrison.postInit();
|
|
_harrison.setVisage(326);
|
|
_harrison.setObjectWrapper(new SceneObjectWrapper());
|
|
_harrison.animate(ANIM_MODE_1, NULL);
|
|
_harrison.setPosition(Common::Point(-60, 219));
|
|
BF_GLOBALS._sceneItems.push_back(&_harrison);
|
|
|
|
_stripManager.addSpeaker(&_harrisonSpeaker);
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
_backupPresent = 0;
|
|
_harrison.setVisage(1355);
|
|
_harrison.setPosition(Common::Point(289, 112));
|
|
_harrison.changeAngle(225);
|
|
_harrison.setFrame(1);
|
|
_harrison.fixPriority(75);
|
|
|
|
BF_GLOBALS._walkRegions.disableRegion(23);
|
|
} else if (BF_GLOBALS.getFlag(fBackupArrived340)) {
|
|
_backupPresent = 1;
|
|
_harrison.setPosition(Common::Point(46, 154));
|
|
BF_GLOBALS._walkRegions.disableRegion(19);
|
|
} else if (BF_GLOBALS.getFlag(fCalledBackup) && (BF_GLOBALS._marinaWomanCtr > 0)) {
|
|
_timer1.set(900, &_harrison, &_action4);
|
|
}
|
|
}
|
|
|
|
switch (BF_GLOBALS._sceneManager._previousScene) {
|
|
case 350:
|
|
_seqNumber1 = 1342;
|
|
break;
|
|
case 830:
|
|
BF_GLOBALS._player._regionBitList |= 0x800;
|
|
_seqNumber1 = 1343;
|
|
break;
|
|
case 60:
|
|
_seqNumber1 = 342;
|
|
break;
|
|
default:
|
|
_sound1.fadeSound(35);
|
|
BF_GLOBALS._sound1.fadeSound((BF_GLOBALS._bookmark < bStartOfGame) ||
|
|
(BF_GLOBALS._bookmark > bCalledToDomesticViolence) ? 10 : 19);
|
|
_seqNumber1 = 342;
|
|
break;
|
|
}
|
|
|
|
_item3.setDetails(7, 340, 3, 9, 12, 1);
|
|
_item2.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, 39), 340, 2, 8, 11, 1, NULL);
|
|
_item1.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, UI_INTERFACE_Y), 340, 1, 7, 10, 1, NULL);
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, _seqNumber1, &BF_GLOBALS._player, NULL);
|
|
}
|
|
|
|
void Scene340::remove() {
|
|
BF_GLOBALS._scenePalette.clearListeners();
|
|
PalettedScene::remove();
|
|
}
|
|
|
|
void Scene340::signal() {
|
|
switch (_sceneMode) {
|
|
case 1:
|
|
case 2:
|
|
BF_GLOBALS._sceneManager.changeScene(350);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 4:
|
|
BF_GLOBALS._sceneManager.changeScene(830);
|
|
break;
|
|
default:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene340::process(Event &event) {
|
|
// Check for gun being clicked on player
|
|
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
|
|
BF_GLOBALS._player.contains(event.mousePos)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
SceneItem::display2(350, 26);
|
|
|
|
signal();
|
|
event.handled = true;
|
|
}
|
|
|
|
if (!event.handled) {
|
|
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 (_westExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
|
|
BF_GLOBALS._events.setCursor(surface);
|
|
} else if (_swExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
|
|
BF_GLOBALS._events.setCursor(surface);
|
|
} else if (_northExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_N);
|
|
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 Scene340::dispatch() {
|
|
SceneExt::dispatch();
|
|
int idx = BF_GLOBALS._player.getRegionIndex();
|
|
|
|
if (idx == 20) {
|
|
BF_GLOBALS._player.updateZoom();
|
|
BF_GLOBALS._player.fixPriority(75);
|
|
}
|
|
if (idx == 26) {
|
|
BF_GLOBALS._player.updateZoom();
|
|
}
|
|
if (idx == 31) {
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
BF_GLOBALS._player.fixPriority(-1);
|
|
}
|
|
|
|
if (BF_GLOBALS._player._regionIndex == 16) {
|
|
BF_GLOBALS._player._regionBitList &= ~0x10000;
|
|
|
|
if (!BF_GLOBALS.getFlag(fBackupArrived340)) {
|
|
_sceneMode = 1;
|
|
ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 254, 110);
|
|
} else if (!BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
setAction(&_action7);
|
|
} else {
|
|
_sceneMode = 1;
|
|
ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 254, 110);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 342 - Marina, Normal
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene342::Lyle::startAction(CursorType action, Event &event) {
|
|
Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(340, 16);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(340, 15);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
SceneItem::display2(340, 17);
|
|
return true;
|
|
case INV_COLT45:
|
|
scene->gunDisplay();
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene342::Item1::startAction(CursorType action, Event &event) {
|
|
Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case INV_COLT45:
|
|
scene->gunDisplay();
|
|
return true;
|
|
default:
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene342::WestExit::startAction(CursorType action, Event &event) {
|
|
Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 4;
|
|
setAction(&scene->_sequenceManager1, scene, 1348, &BF_GLOBALS._player, NULL);
|
|
return true;
|
|
}
|
|
|
|
bool Scene342::SouthWestExit::startAction(CursorType action, Event &event) {
|
|
Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3;
|
|
setAction(&scene->_sequenceManager1, scene, 1340, &BF_GLOBALS._player, NULL);
|
|
return true;
|
|
}
|
|
|
|
bool Scene342::NorthExit::startAction(CursorType action, Event &event) {
|
|
Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
scene->_sceneMode = 1;
|
|
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 254, 106);
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene342::Timer1::signal() {
|
|
PaletteRotation *item;
|
|
|
|
item = BF_GLOBALS._scenePalette.addRotation(235, 239, 1);
|
|
item->setDelay(30);
|
|
item = BF_GLOBALS._scenePalette.addRotation(247, 249, 1);
|
|
item->setDelay(30);
|
|
item = BF_GLOBALS._scenePalette.addRotation(240, 246, 1);
|
|
item->setDelay(30);
|
|
item = BF_GLOBALS._scenePalette.addRotation(252, 254, 1);
|
|
item->setDelay(30);
|
|
|
|
remove();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene342::Scene342(): PalettedScene() {
|
|
_field1A1A = 0;
|
|
}
|
|
|
|
void Scene342::synchronize(Serializer &s) {
|
|
PalettedScene::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_field1A1A);
|
|
}
|
|
|
|
void Scene342::postInit(SceneObjectList *OwnerList) {
|
|
PalettedScene::postInit();
|
|
loadScene(340);
|
|
setZoomPercents(126, 70, 162, 100);
|
|
|
|
BF_GLOBALS._walkRegions.disableRegion(13);
|
|
BF_GLOBALS._walkRegions.disableRegion(15);
|
|
|
|
_field1A1A = 0;
|
|
_timer1.set(2, NULL);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jakeJacketSpeaker);
|
|
_stripManager.addSpeaker(&_lyleHatSpeaker);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
|
|
_westExit.setDetails(Rect(0, 76, 19, 115), 340, -1, -1, -1, 1, NULL);
|
|
_swExit.setDetails(15, 340, -1, -1, -1, 1);
|
|
_northExit.setDetails(16, 340, -1, -1, -1, 1);
|
|
|
|
if (BF_GLOBALS._dayNumber < 5) {
|
|
_object3.postInit();
|
|
_object3.setVisage(340);
|
|
_object3.setStrip(4);
|
|
_object3.setPosition(Common::Point(259, 61));
|
|
}
|
|
|
|
if (BF_GLOBALS.getFlag(onDuty)) {
|
|
BF_GLOBALS._player.setVisage(1341);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(5, 2);
|
|
} else {
|
|
BF_GLOBALS._player.setVisage(129);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(5, 2);
|
|
|
|
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
_lyle.postInit();
|
|
_lyle.setVisage(469);
|
|
_lyle.setObjectWrapper(new SceneObjectWrapper());
|
|
_lyle.animate(ANIM_MODE_1, NULL);
|
|
_lyle.hide();
|
|
}
|
|
}
|
|
|
|
switch (BF_GLOBALS._randomSource.getRandomNumber(2)) {
|
|
case 0:
|
|
_object2.setPosition(Common::Point(46, 59));
|
|
ADD_MOVER_NULL(_object2, 300, -10);
|
|
break;
|
|
case 1:
|
|
_object2.setPosition(Common::Point(311, 57));
|
|
ADD_MOVER_NULL(_object2, 140, -10);
|
|
break;
|
|
case 2:
|
|
_object2.setPosition(Common::Point(-5, 53));
|
|
ADD_MOVER_NULL(_object2, 170, -10);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
switch (BF_GLOBALS._sceneManager._previousScene) {
|
|
case 50:
|
|
case 60:
|
|
case 330:
|
|
if (BF_GLOBALS._sceneManager._previousScene != 60) {
|
|
_sound1.fadeSound(35);
|
|
BF_GLOBALS._sound1.fadeSound((BF_GLOBALS._bookmark < bStartOfGame) ||
|
|
(BF_GLOBALS._bookmark > bCalledToDomesticViolence) ? 10 : 19);
|
|
}
|
|
|
|
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
BF_GLOBALS._walkRegions.disableRegion(19);
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
|
|
setAction(&_sequenceManager1, this, 346, &_lyle, NULL);
|
|
BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 342, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 342, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case 350:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 1342, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
default:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 1343, &BF_GLOBALS._player, NULL);
|
|
|
|
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
_lyle.setPosition(Common::Point(-21, 118));
|
|
_lyle.setStrip(5);
|
|
_lyle.setFrame(1);
|
|
_lyle.setPriority(75);
|
|
_lyle.setZoom(75);
|
|
_lyle.setAction(&_sequenceManager2, NULL, 347, &_lyle, NULL);
|
|
BF_GLOBALS._sceneItems.push_back(&_lyle);
|
|
}
|
|
break;
|
|
}
|
|
|
|
_item3.setDetails(7, 340, 3, 9, 12, 1);
|
|
_item2.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, 39), 340, 2, 8, 11, 1, NULL);
|
|
_item1.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, UI_INTERFACE_Y), 340, 1, 7, 10, 1, NULL);
|
|
}
|
|
|
|
void Scene342::remove() {
|
|
BF_GLOBALS._scenePalette.clearListeners();
|
|
PalettedScene::remove();
|
|
}
|
|
|
|
void Scene342::signal() {
|
|
switch (_sceneMode) {
|
|
case 1:
|
|
ADD_PLAYER_MOVER(254, 106);
|
|
BF_GLOBALS._sceneManager.changeScene(350);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 4:
|
|
BF_GLOBALS._sceneManager.changeScene(830);
|
|
break;
|
|
default:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene342::process(Event &event) {
|
|
// Check for gun being clicked on player
|
|
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
|
|
BF_GLOBALS._player.contains(event.mousePos)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
SceneItem::display2(350, 26);
|
|
|
|
signal();
|
|
event.handled = true;
|
|
}
|
|
|
|
if (!event.handled) {
|
|
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 (_westExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
|
|
BF_GLOBALS._events.setCursor(surface);
|
|
} else if (_swExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
|
|
BF_GLOBALS._events.setCursor(surface);
|
|
} else if (_northExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_N);
|
|
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 Scene342::dispatch() {
|
|
SceneExt::dispatch();
|
|
int idx = BF_GLOBALS._player.getRegionIndex();
|
|
|
|
if (idx == 20) {
|
|
BF_GLOBALS._player.updateZoom();
|
|
BF_GLOBALS._player.fixPriority(75);
|
|
}
|
|
if (idx == 26) {
|
|
BF_GLOBALS._player.updateZoom();
|
|
}
|
|
if (idx == 31) {
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
BF_GLOBALS._player.fixPriority(-1);
|
|
}
|
|
|
|
if (idx == 16) {
|
|
BF_GLOBALS._player.enableControl();
|
|
ADD_PLAYER_MOVER(254, 110);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 350 - Marina, Outside Boat
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene350::FireBox::startAction(CursorType action, Event &event) {
|
|
Scene350 *scene = (Scene350 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(350, 20);
|
|
return true;
|
|
case CURSOR_USE: {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3;
|
|
|
|
Common::Point pt(76, 154);
|
|
PlayerMover *mover = new PlayerMover();
|
|
BF_GLOBALS._player.addMover(mover, &pt, scene);
|
|
return true;
|
|
}
|
|
default:
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
void Scene350::Yacht::synchronize(Serializer &s) {
|
|
NamedHotspot::synchronize(s);
|
|
s.syncAsSint16LE(_flag);
|
|
}
|
|
|
|
bool Scene350::Yacht::startAction(CursorType action, Event &event) {
|
|
Scene350 *scene = (Scene350 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if ((BF_GLOBALS._dayNumber != 1) || !BF_GLOBALS.getFlag(onDuty) || (BF_GLOBALS._bookmark < bStartOfGame)) {
|
|
if ((BF_GLOBALS._dayNumber == 1) || (BF_GLOBALS._dayNumber == 4)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 1;
|
|
scene->setAction(&scene->_sequenceManager1, scene, 3512, &BF_GLOBALS._player, &scene->_yachtDoor, NULL);
|
|
return true;
|
|
}
|
|
} else {
|
|
_flag = true;
|
|
scene->_sceneMode = 1;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(gunDrawn) ? 3504 : 3505,
|
|
&BF_GLOBALS._player, &scene->_yachtDoor, NULL);
|
|
return true;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
|
|
bool Scene350::SouthWestExit::startAction(CursorType action, Event &event) {
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
Scene350 *scene = (Scene350 *)BF_GLOBALS._sceneManager._scene;
|
|
scene->_sceneMode = 2;
|
|
|
|
if (BF_GLOBALS.getFlag(fBackupIn350))
|
|
scene->setAction(&scene->_sequenceManager1, scene, 3507, &BF_GLOBALS._player, &scene->_harrison, NULL);
|
|
else
|
|
scene->setAction(&scene->_sequenceManager1, scene, 3510, &BF_GLOBALS._player, NULL);
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene350::Hook::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(350, 30);
|
|
return true;
|
|
case CURSOR_USE:
|
|
BF_INVENTORY.setObjectScene(INV_HOOK, 1);
|
|
if (!BF_GLOBALS.getFlag(hookPoints)) {
|
|
BF_GLOBALS.setFlag(hookPoints);
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
}
|
|
remove();
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene350::FireboxInset::startAction(CursorType action, Event &event) {
|
|
Scene350 *scene = (Scene350 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(350, BF_INVENTORY.getObjectScene(INV_HOOK) ? 29 : 28);
|
|
return true;
|
|
case CURSOR_USE:
|
|
scene->_fireBoxInset.remove();
|
|
return true;
|
|
case INV_HOOK:
|
|
BF_INVENTORY.setObjectScene(INV_HOOK, 350);
|
|
|
|
scene->_hook.postInit();
|
|
scene->_hook.setVisage(350);
|
|
scene->_hook.setStrip(5);
|
|
scene->_hook.fixPriority(201);
|
|
scene->_hook.setPosition(Common::Point(106, 146));
|
|
BF_GLOBALS._sceneItems.push_front(&scene->_hook);
|
|
return true;
|
|
default:
|
|
return FocusObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene350::Timer1::signal() {
|
|
PaletteRotation *rot;
|
|
rot = BF_GLOBALS._scenePalette.addRotation(233, 235, 1);
|
|
rot->setDelay(40);
|
|
rot = BF_GLOBALS._scenePalette.addRotation(236, 238, 1);
|
|
rot->setDelay(20);
|
|
rot = BF_GLOBALS._scenePalette.addRotation(239, 241, 1);
|
|
rot->setDelay(20);
|
|
rot = BF_GLOBALS._scenePalette.addRotation(242, 244, 1);
|
|
rot->setDelay(12);
|
|
|
|
remove();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene350::Scene350(): SceneExt() {
|
|
_field1D44 = _field1D46 = 0;
|
|
}
|
|
|
|
void Scene350::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(350);
|
|
setZoomPercents(90, 80, 143, 100);
|
|
_sound1.fadeSound(35);
|
|
_timer1.set(2, NULL);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 352 : 1358);
|
|
BF_GLOBALS._player.setFrame(1);
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
BF_GLOBALS._player.setPosition(Common::Point(99, 152));
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
|
|
|
|
_yacht._flag = false;
|
|
_swExit.setDetails(Rect(0, 160, SCREEN_WIDTH, UI_INTERFACE_Y - 1), 350, -1, -1, -1, 1, NULL);
|
|
|
|
if ((BF_GLOBALS._dayNumber != 1) && (BF_GLOBALS._dayNumber != 4)) {
|
|
_yacht.setDetails(28, 350, 15, 16, 17, 1);
|
|
} else {
|
|
_yachtDoor.postInit();
|
|
_yachtDoor.setVisage(350);
|
|
_yachtDoor.setStrip(3);
|
|
_yachtDoor.setFrame(1);
|
|
_yachtDoor.fixPriority(72);
|
|
_yachtDoor.setPosition(Common::Point(40, 74));
|
|
|
|
_yachtBody.setup(350, 1, 1, 129, 142, 255);
|
|
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
_harrison.postInit();
|
|
_harrison.setVisage(1355);
|
|
_harrison.setObjectWrapper(new SceneObjectWrapper());
|
|
_harrison.animate(ANIM_MODE_1, NULL);
|
|
_harrison.changeZoom(-1);
|
|
_harrison.setDetails(350, 12, 13, 14, 1, (SceneItem *)NULL);
|
|
_harrison._moveDiff = Common::Point(2, 1);
|
|
|
|
_stripManager.addSpeaker(&_harrisonSpeaker);
|
|
}
|
|
|
|
if (BF_GLOBALS._bookmark < bStartOfGame) {
|
|
// Setup scene in debug mode
|
|
_yacht.setDetails(28, 350, 6, 18, 19, 1);
|
|
} else {
|
|
_yacht.setDetails(28, 350, 6, BF_GLOBALS.getFlag(bStartOfGame) ? 7 : 18, 8, 1);
|
|
}
|
|
}
|
|
|
|
_fireBox._sceneRegionId = 5;
|
|
BF_GLOBALS._sceneItems.push_back(&_fireBox);
|
|
_item4.setDetails(15, 350, 0, 1, 2, 1);
|
|
BF_GLOBALS._sceneItems.push_back(&_yacht);
|
|
|
|
_item3.setDetails(7, 350, 23, 24, 25, 1);
|
|
_item2.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, 31), 350, 3, 4, 5, 1, NULL);
|
|
_item1.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, UI_INTERFACE_Y), 350, 0, 1, 2, 1, NULL);
|
|
|
|
switch (BF_GLOBALS._sceneManager._previousScene) {
|
|
case 370:
|
|
BF_GLOBALS._player.enableControl();
|
|
T2_GLOBALS._uiElements._active = true;
|
|
T2_GLOBALS._uiElements.show();
|
|
// Deliberate fall-through
|
|
case 355:
|
|
if (BF_GLOBALS.getFlag(onDuty) && BF_GLOBALS.getFlag(gunDrawn))
|
|
BF_GLOBALS._player.setVisage(351);
|
|
|
|
BF_GLOBALS._player.setPosition(Common::Point(22, 91));
|
|
BF_GLOBALS._player.changeAngle(225);
|
|
break;
|
|
default:
|
|
BF_GLOBALS.clearFlag(gunDrawn);
|
|
|
|
if ((BF_GLOBALS._dayNumber == 1) && (BF_GLOBALS._bookmark < bCalledToDomesticViolence) &&
|
|
BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 3509, &_harrison, NULL);
|
|
BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 3508, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 3508, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene350::remove() {
|
|
BF_GLOBALS._scenePalette.clearListeners();
|
|
SceneExt::remove();
|
|
}
|
|
|
|
void Scene350::signal() {
|
|
switch (_sceneMode) {
|
|
case 1:
|
|
BF_GLOBALS._sceneManager.changeScene(355);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._sceneManager.changeScene((BF_GLOBALS._dayNumber != 1) ||
|
|
(BF_GLOBALS._bookmark < bStartOfGame) || (BF_GLOBALS._bookmark >= bCalledToDomesticViolence) ? 342 : 340);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._player.setStrip(8);
|
|
|
|
_fireBoxInset.postInit();
|
|
_fireBoxInset.setVisage(350);
|
|
_fireBoxInset.setStrip(4);
|
|
_fireBoxInset.fixPriority(200);
|
|
_fireBoxInset.setPosition(Common::Point(85, 166));
|
|
BF_GLOBALS._sceneItems.push_front(&_fireBoxInset);
|
|
|
|
if (BF_INVENTORY.getObjectScene(INV_HOOK) == 350) {
|
|
_hook.postInit();
|
|
_hook.setVisage(350);
|
|
_hook.setStrip(5);
|
|
_hook.fixPriority(201);
|
|
_hook.setPosition(Common::Point(106, 146));
|
|
BF_GLOBALS._sceneItems.push_front(&_hook);
|
|
}
|
|
|
|
BF_GLOBALS._player.enableControl();
|
|
_sound2.play(97);
|
|
break;
|
|
default:
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
_harrison.updateAngle(BF_GLOBALS._player._position);
|
|
BF_GLOBALS._walkRegions.disableRegion(19);
|
|
}
|
|
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene350::process(Event &event) {
|
|
// Check for gun being clicked on player
|
|
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
|
|
BF_GLOBALS._player.contains(event.mousePos)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
if (!BF_GLOBALS.getFlag(onDuty)) {
|
|
// Player not on duty
|
|
SceneItem::display2(350, 26);
|
|
signal();
|
|
} else if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
// Holster the gun
|
|
BF_GLOBALS.clearFlag(gunDrawn);
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 3501, &BF_GLOBALS._player, NULL);
|
|
|
|
if (BF_GLOBALS.getFlag(fBackupIn350))
|
|
_harrison.setAction(&_sequenceManager3, NULL, 3503, &_harrison, NULL);
|
|
} else {
|
|
// Drawn the gun
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 3500, &BF_GLOBALS._player, NULL);
|
|
|
|
if (BF_GLOBALS.getFlag(fBackupIn350))
|
|
_harrison.setAction(&_sequenceManager3, NULL, 3502, &_harrison, NULL);
|
|
|
|
BF_GLOBALS.setFlag(gunDrawn);
|
|
}
|
|
|
|
event.handled = true;
|
|
}
|
|
|
|
if (!event.handled) {
|
|
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 (_swExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
|
|
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 Scene350::checkGun() {
|
|
if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) ||
|
|
(BF_GLOBALS._bookmark >= bCalledToDomesticViolence) || BF_GLOBALS.getFlag(fRandomShot350)) {
|
|
SceneItem::display2(350, 27);
|
|
} else {
|
|
BF_GLOBALS.setFlag(fRandomShot350);
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager1, this, 3511, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
_stripManager.start(3502, this);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 355 - Future Wave Exterior
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene355::Doorway::synchronize(Serializer &s) {
|
|
NamedObject::synchronize(s);
|
|
s.syncAsSint16LE(_v1);
|
|
s.syncAsSint16LE(_v2);
|
|
s.syncAsSint16LE(_v3);
|
|
}
|
|
|
|
bool Scene355::Doorway::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 9);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (!scene->_modeFlag) {
|
|
scene->_sceneMode = 9984;
|
|
scene->signal();
|
|
} else {
|
|
scene->setMode(true, 9984);
|
|
}
|
|
return true;
|
|
case CURSOR_TALK:
|
|
if (BF_GLOBALS._dayNumber >= 5) {
|
|
switch (_v2) {
|
|
case 0:
|
|
++_v2;
|
|
BF_GLOBALS._sound1.play(109);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 0;
|
|
|
|
BF_GLOBALS.setFlag(fTookTrailerAmmo);
|
|
scene->_stripManager.start(3575, scene);
|
|
scene->_lyle._flag = 1;
|
|
return true;
|
|
case 1:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 0;
|
|
scene->_stripManager.start(3573, scene);
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
} else if (!BF_GLOBALS.getFlag(greenTaken) && (BF_GLOBALS._dayNumber == 1)) {
|
|
scene->_sceneMode = 1357;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripManager.start(3550, scene);
|
|
return true;
|
|
}
|
|
break;
|
|
case INV_WAVE_KEYS:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3562;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3562, &BF_GLOBALS._player, NULL);
|
|
_v3 = !_v3 ? 1 : 0;
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
|
|
bool Scene355::Locker::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 51);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (BF_GLOBALS._dayNumber < 5)
|
|
SceneItem::display2(355, 46);
|
|
else if (BF_INVENTORY.getObjectScene(INV_FLARE) != 355)
|
|
SceneItem::display2(355, 45);
|
|
else if (scene->_modeFlag)
|
|
scene->setMode(true, 9996);
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 9996;
|
|
|
|
if (scene->_nextSceneMode) {
|
|
scene->_nextSceneMode = 0;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3555, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
scene->signal();
|
|
}
|
|
}
|
|
return true;
|
|
case INV_SCREWDRIVER:
|
|
if (scene->_modeFlag)
|
|
scene->setMode(true, 9996);
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 9996;
|
|
if (!scene->_nextSceneMode)
|
|
scene->signal();
|
|
else {
|
|
scene->_nextSceneMode = 0;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3555, &BF_GLOBALS._player, NULL);
|
|
}
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene355::LockerInset::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (_frame == 1)
|
|
SceneItem::display2(355, 46);
|
|
else
|
|
SceneItem::display2(355, BF_GLOBALS._sceneObjects->contains(&scene->_object5) ? 26 : 47);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (_frame == 1) {
|
|
SceneItem::display2(355, 23);
|
|
return true;
|
|
} else
|
|
return NamedObject::startAction(action, event);
|
|
case INV_SCREWDRIVER:
|
|
scene->_sound2.play(104);
|
|
BF_INVENTORY.setObjectScene(INV_SCREWDRIVER, 999);
|
|
setFrame(2);
|
|
|
|
scene->_object9.postInit();
|
|
scene->_object9.setVisage(378);
|
|
scene->_object9.setPosition(Common::Point(83, 100));
|
|
scene->_object9.fixPriority(100);
|
|
|
|
scene->_object5.postInit();
|
|
scene->_object5.setVisage(2356);
|
|
scene->_object5.setStrip(3);
|
|
scene->_object5.setPosition(Common::Point(67, 85));
|
|
scene->_object5.fixPriority(255);
|
|
BF_GLOBALS._sceneItems.push_front(&scene->_object5);
|
|
|
|
SceneItem::display2(355, 27);
|
|
scene->_locker.setFrame(2);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene355::Object5::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 30);
|
|
return true;
|
|
case CURSOR_USE:
|
|
BF_INVENTORY.setObjectScene(INV_FLARE, 1);
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
|
|
scene->_object9.remove();
|
|
remove();
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene355::Green::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 34);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (scene->_modeFlag)
|
|
SceneItem::display2(355, 35);
|
|
else if (!_flag)
|
|
SceneItem::display2(355, 38);
|
|
else if (BF_INVENTORY.getObjectScene(INV_GRENADES) == 1)
|
|
SceneItem::display2(355, 49);
|
|
else {
|
|
BF_GLOBALS._player._regionBitList |= 0x10;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 9985;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3557, &BF_GLOBALS._player, this, NULL);
|
|
}
|
|
return true;
|
|
case CURSOR_TALK:
|
|
scene->_sceneMode = 0;
|
|
if (BF_INVENTORY.getObjectScene(INV_GRENADES) != 355) {
|
|
scene->_stripManager.start(3584, scene);
|
|
} else if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) {
|
|
return false;
|
|
} else {
|
|
switch (BF_GLOBALS._greenDay5TalkCtr++) {
|
|
case 0:
|
|
scene->_stripManager.start(3565, scene);
|
|
break;
|
|
case 1:
|
|
scene->_stripManager.start(3567, scene);
|
|
break;
|
|
default:
|
|
scene->_stripManager.start(3571, scene);
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
|
|
default:
|
|
if ((action < BF_LAST_INVENT) && scene->_modeFlag) {
|
|
SceneItem::display2(355, 35);
|
|
return true;
|
|
}
|
|
|
|
switch (action) {
|
|
case INV_COLT45:
|
|
if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 355)
|
|
SceneItem::display2(355, 39);
|
|
else if (!BF_GLOBALS.getFlag(fGunLoaded))
|
|
SceneItem::display2(1, 1);
|
|
else if (!BF_GLOBALS.getFlag(gunDrawn))
|
|
SceneItem::display2(1, 0);
|
|
else {
|
|
if (BF_GLOBALS._sceneObjects->contains(&scene->_lyle))
|
|
scene->_lyle.setAction(NULL);
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_green.setStrip(1);
|
|
scene->_green.setFrame(1);
|
|
scene->_sceneMode = 9981;
|
|
scene->signal();
|
|
}
|
|
return true;
|
|
case INV_HANDCUFFS:
|
|
if (BF_GLOBALS._greenDay5TalkCtr <= 1)
|
|
SceneItem::display2(355, 38);
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 9979;
|
|
scene->setAction(&scene->_sequenceManager, scene, 4551, &BF_GLOBALS._player, this, NULL);
|
|
BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 355);
|
|
T2_GLOBALS._uiElements.addScore(50);
|
|
_flag = 1;
|
|
BF_GLOBALS._bookmark = bInvestigateBoat;
|
|
}
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene355::Lyle::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 0;
|
|
|
|
if (BF_GLOBALS._sceneObjects->contains(&scene->_green)) {
|
|
scene->_stripManager.start((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 355) ? 3578 : 3577, scene);
|
|
} else {
|
|
switch (_flag) {
|
|
case 0:
|
|
scene->_stripManager.start(3574, scene);
|
|
break;
|
|
case 1:
|
|
scene->_stripManager.start(3576, scene);
|
|
break;
|
|
case 2:
|
|
scene->_stripManager.start(3563, scene);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene355::Object8::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 0);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 9999;
|
|
scene->_stripManager.start(3559, scene);
|
|
return true;
|
|
} else if (BF_GLOBALS._dayNumber < 5) {
|
|
SceneItem::display2(355, 52);
|
|
return true;
|
|
}
|
|
break;
|
|
case INV_COLT45:
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
scene->_sceneMode = 9997;
|
|
scene->_stripManager.start(3561, scene);
|
|
} else {
|
|
SceneItem::display2(1, 4);
|
|
}
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene355::Item1::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 28);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(355, 37);
|
|
return true;
|
|
case INV_RENTAL_KEYS:
|
|
if (scene->_modeFlag) {
|
|
scene->_sceneMode = 9980;
|
|
scene->signal();
|
|
} else if (!scene->_nextSceneMode)
|
|
SceneItem::display2(355, 36);
|
|
else
|
|
scene->setMode(false, 9980);
|
|
return true;
|
|
default:
|
|
return SceneHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene355::Item2::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 9999;
|
|
scene->_stripManager.start(3559, scene);
|
|
} else {
|
|
if (scene->_action) {
|
|
scene->_sceneMode = 0;
|
|
scene->_action->remove();
|
|
}
|
|
|
|
BF_GLOBALS._sceneManager.changeScene(350);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool Scene355::Item3::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 33);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (BF_GLOBALS._dayNumber < 5)
|
|
SceneItem::display2(355, 21);
|
|
else if (scene->_modeFlag)
|
|
scene->setMode(true, 9987);
|
|
else {
|
|
scene->_sceneMode = 9987;
|
|
scene->signal();
|
|
}
|
|
return true;
|
|
case INV_FLARE:
|
|
scene->_sound2.play(105);
|
|
_state = 3554;
|
|
break;
|
|
case INV_RAGS:
|
|
_state = 3559;
|
|
break;
|
|
case INV_JAR:
|
|
_state = 3558;
|
|
break;
|
|
default:
|
|
return SceneHotspotExt::startAction(action, event);
|
|
}
|
|
|
|
// Handling for inventory objects
|
|
BF_INVENTORY.setObjectScene(action, 0);
|
|
if (scene->_modeFlag)
|
|
scene->setMode(true, 9986);
|
|
else {
|
|
scene->_sceneMode = 9986;
|
|
scene->signal();
|
|
}
|
|
|
|
scene->_nextSceneMode = 0;
|
|
return true;
|
|
}
|
|
|
|
bool Scene355::Item4::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 31);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if ((BF_GLOBALS._dayNumber < 5) || (BF_INVENTORY.getObjectScene(INV_GRENADES) != 355))
|
|
SceneItem::display2(355, 21);
|
|
else if (scene->_modeFlag)
|
|
scene->setMode(true, 9987);
|
|
else {
|
|
scene->_sceneMode = 9987;
|
|
scene->signal();
|
|
}
|
|
return true;
|
|
default:
|
|
return SceneHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
|
|
bool Scene355::Pouch::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (BF_INVENTORY.getObjectScene(INV_SCREWDRIVER) == 355) {
|
|
SceneItem::display2(355, 29);
|
|
return true;
|
|
}
|
|
break;
|
|
case CURSOR_USE:
|
|
if (BF_INVENTORY.getObjectScene(INV_SCREWDRIVER) == 355) {
|
|
if (scene->_modeFlag) {
|
|
scene->_sceneMode = 9992;
|
|
scene->signal();
|
|
} else if (!scene->_nextSceneMode) {
|
|
scene->setMode(false, 9992);
|
|
} else {
|
|
scene->_sceneMode = 9977;
|
|
scene->_nextSceneMode = 0;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3555, &BF_GLOBALS._player, NULL);
|
|
}
|
|
} else {
|
|
SceneItem::display2(355, 45);
|
|
}
|
|
return true;
|
|
case INV_RENTAL_KEYS:
|
|
if (scene->_modeFlag) {
|
|
scene->_sceneMode = 9980;
|
|
scene->signal();
|
|
} else if (!scene->_nextSceneMode) {
|
|
scene->setMode(false, 9980);
|
|
} else {
|
|
SceneItem::display2(355, 36);
|
|
}
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
|
|
bool Scene355::Item11::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_WALK:
|
|
return (BF_GLOBALS._bookmark == bStartOfGame) || (BF_GLOBALS._bookmark == bCalledToDomesticViolence) ||
|
|
(BF_GLOBALS._bookmark == bArrestedGreen);
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(355, 7);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(355, 8);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
if (BF_GLOBALS._dayNumber == 5) {
|
|
switch (scene->_doorway._v2) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 0;
|
|
BF_GLOBALS.setFlag(fTookTrailerAmmo);
|
|
scene->_stripManager.start(3575, scene);
|
|
scene->_lyle._flag = 1;
|
|
scene->_doorway._v2 = 1;
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 0;
|
|
scene->_stripManager.start(3573, scene);
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
} else {
|
|
if (!BF_GLOBALS.getFlag(onDuty))
|
|
return false;
|
|
scene->_sceneMode = 1357;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripManager.start(3550, scene);
|
|
}
|
|
return true;
|
|
case INV_COLT45:
|
|
if (!BF_GLOBALS.getFlag(fBackupIn350) || !BF_GLOBALS.getFlag(gunDrawn) || !BF_GLOBALS.getFlag(fGunLoaded))
|
|
SceneItem::display2(1, 4);
|
|
else {
|
|
scene->_sceneMode = 9997;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripManager.start(3561, scene);
|
|
}
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
|
|
bool Scene355::RentalExit::startAction(CursorType action, Event &event) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (!BF_GLOBALS.getFlag(gunDrawn)) {
|
|
if (scene->_modeFlag)
|
|
scene->setMode(true, 0);
|
|
else if (!scene->_nextSceneMode)
|
|
scene->setMode(false, 0);
|
|
else {
|
|
scene->_nextSceneMode = 0;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 9991;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3555, &BF_GLOBALS._player, NULL);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene355::Action1::signal() {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(3600 * (BF_GLOBALS._randomSource.getRandomNumber(1) + 1));
|
|
break;
|
|
case 1:
|
|
_actionIndex = 0;
|
|
scene->_lyle.animate(ANIM_MODE_8, 1, this);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene355::Action2::signal() {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(10);
|
|
break;
|
|
case 1:
|
|
scene->_stripManager.start((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1) ? 3566 : 3568, this);
|
|
break;
|
|
case 2:
|
|
scene->_sceneMode = 9979;
|
|
scene->signal();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene355::Scene355(): PalettedScene() {
|
|
_nextSceneMode = 0;
|
|
_modeFlag = false;
|
|
}
|
|
|
|
void Scene355::synchronize(Serializer &s) {
|
|
SceneExt::synchronize(s);
|
|
s.syncAsSint16LE(_nextSceneMode);
|
|
s.syncAsSint16LE(_modeFlag);
|
|
}
|
|
|
|
void Scene355::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
BF_GLOBALS._dayNumber = 5;
|
|
|
|
if (BF_GLOBALS._dayNumber == 5) {
|
|
loadScene(356);
|
|
BF_GLOBALS._player._regionBitList &= ~0x10;
|
|
} else {
|
|
loadScene(355);
|
|
}
|
|
|
|
_sound1.fadeSound(35);
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
|
_stripManager.addSpeaker(&_jakeJacketSpeaker);
|
|
_stripManager.addSpeaker(&_lyleHatSpeaker);
|
|
_stripManager.addSpeaker(&_harrisonSpeaker);
|
|
_stripManager.addSpeaker(&_greenSpeaker);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
if (!BF_GLOBALS.getFlag(onDuty)) {
|
|
BF_GLOBALS._player.setVisage(368);
|
|
BF_GLOBALS._player.setStrip(3);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
} else if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
BF_GLOBALS._player.setVisage(356);
|
|
BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
|
|
} else {
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.setVisage(356);
|
|
BF_GLOBALS._player.setStrip(7);
|
|
}
|
|
|
|
if (BF_GLOBALS.getFlag(greenTaken)) {
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
|
|
BF_GLOBALS._player.setStrip(3);
|
|
BF_GLOBALS._player.setPosition(Common::Point(244, 140));
|
|
} else {
|
|
BF_GLOBALS._player.setPosition(Common::Point(244, 132));
|
|
}
|
|
|
|
BF_GLOBALS._player._moveDiff = Common::Point(6, 4);
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_GLOBALS._player._canWalk = false;
|
|
|
|
_item4._sceneRegionId = 17;
|
|
BF_GLOBALS._sceneItems.push_back(&_item4);
|
|
|
|
_locker.postInit();
|
|
_locker.setVisage(2356);
|
|
_locker.setPosition(Common::Point(88, 99));
|
|
|
|
if (BF_INVENTORY.getObjectScene(INV_SCREWDRIVER) == 999) {
|
|
_locker.setFrame(2);
|
|
|
|
if (BF_INVENTORY.getObjectScene(INV_FLARE) == 355) {
|
|
_object9.postInit();
|
|
_object9.setVisage(378);
|
|
_object9.setPosition(Common::Point(83, 100));
|
|
_object9.fixPriority(100);
|
|
}
|
|
}
|
|
BF_GLOBALS._sceneItems.push_back(&_locker);
|
|
|
|
_doorway.postInit();
|
|
_doorway.setVisage(355);
|
|
_doorway.setPosition(Common::Point(193, 105));
|
|
_doorway.fixPriority(18);
|
|
_doorway._v1 = 0;
|
|
_doorway._v3 = 0;
|
|
BF_GLOBALS._sceneItems.push_back(&_doorway);
|
|
|
|
switch (BF_GLOBALS._dayNumber) {
|
|
case 1:
|
|
if (!BF_GLOBALS.getFlag(onDuty))
|
|
_doorway._v3 = 1;
|
|
else if (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 320)
|
|
_doorway._v3 = 1;
|
|
break;
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
_doorway._v3 = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (BF_GLOBALS._dayNumber == 5)
|
|
_doorway._v2 = BF_GLOBALS.getFlag(fTookTrailerAmmo) ? 1 : 0;
|
|
|
|
_object8.postInit();
|
|
_object8.setVisage(355);
|
|
if (BF_GLOBALS._dayNumber == 5) {
|
|
_object8.setStrip(3);
|
|
_object8.setPosition(Common::Point(103, 148));
|
|
_object8.hide();
|
|
} else {
|
|
_object8.setStrip(2);
|
|
_object8.setPosition(Common::Point(142, 151));
|
|
_object8.fixPriority(247);
|
|
}
|
|
|
|
switch (BF_GLOBALS._dayNumber) {
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
break;
|
|
case 5:
|
|
BF_GLOBALS._player.enableControl();
|
|
_modeFlag = true;
|
|
BF_GLOBALS._player.setPosition(Common::Point(133, 173));
|
|
BF_GLOBALS._player.fixPriority(249);
|
|
BF_GLOBALS._player.setStrip(7);
|
|
|
|
if (BF_GLOBALS._bookmark == bDoneAtLyles)
|
|
BF_GLOBALS._bookmark = bEndDayFour;
|
|
|
|
_pouch.setDetails(Rect(22, 136, 46, 146), 355, 43, -1, -1, 1, NULL);
|
|
_nextSceneMode = 0;
|
|
|
|
if (!BF_GLOBALS.getFlag(fLyleOnIsland)) {
|
|
_lyle.postInit();
|
|
_lyle.setVisage(847);
|
|
_lyle.setPosition(Common::Point(296, 97));
|
|
_lyle.setStrip(1);
|
|
_lyle.setAction(&_action1);
|
|
_lyle._flag = BF_GLOBALS.getFlag(fTookTrailerAmmo) ? 1 : 0;
|
|
_lyle.setDetails(355, 40, 42, 41, 1, (SceneItem *)NULL);
|
|
}
|
|
|
|
if ((BF_INVENTORY.getObjectScene(INV_RAGS) == 0) && (BF_INVENTORY.getObjectScene(INV_JAR) == 0) &&
|
|
(BF_INVENTORY.getObjectScene(INV_FLARE) == 0)) {
|
|
BF_GLOBALS._sound1.changeSound(103);
|
|
|
|
_object9.postInit();
|
|
_object9.setVisage(2357);
|
|
_object9.setStrip(2);
|
|
_object9.setPosition(Common::Point(231, 19));
|
|
_object9.animate(ANIM_MODE_2);
|
|
|
|
_object11.postInit();
|
|
_object11.setVisage(2357);
|
|
_object11.setStrip(6);
|
|
_object11.setPosition(Common::Point(183, 39));
|
|
_object11.animate(ANIM_MODE_2);
|
|
|
|
_doorway.setPosition(Common::Point(146, 107));
|
|
_doorway._v3 = 0;
|
|
_doorway._v2 = 2;
|
|
_lyle._flag = 2;
|
|
|
|
_green.postInit();
|
|
BF_GLOBALS._sceneItems.push_back(&_green);
|
|
|
|
if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1) {
|
|
_green.setVisage(376);
|
|
_green.setStrip(1);
|
|
_green.setPosition(Common::Point(193, 88));
|
|
_green._flag = 0;
|
|
} else {
|
|
_green._flag = 1;
|
|
|
|
if (BF_INVENTORY.getObjectScene(INV_GRENADES) == 1) {
|
|
_green.setVisage(373);
|
|
_green.setStrip(5);
|
|
_green.setPosition(Common::Point(238, 142));
|
|
} else {
|
|
_green.setVisage(375);
|
|
_green.setStrip(1);
|
|
_green.setFrame(_green.getFrameCount());
|
|
_green.setPosition(Common::Point(193, 147));
|
|
}
|
|
}
|
|
|
|
if ((BF_GLOBALS._bookmark == bFinishedWGreen) && BF_GLOBALS._sceneObjects->contains(&_lyle) &&
|
|
!BF_GLOBALS.getFlag(iWasAmbushed)) {
|
|
BF_GLOBALS.setFlag(iWasAmbushed);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
_sceneMode = 0;
|
|
_stripManager.start(3582, this);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
if (!BF_GLOBALS.getFlag(greenTaken)) {
|
|
_harrison.postInit();
|
|
_harrison.setPosition(Common::Point(152, 131));
|
|
_harrison.animate(ANIM_MODE_1, NULL);
|
|
_harrison.setObjectWrapper(new SceneObjectWrapper());
|
|
|
|
if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
_harrison.setVisage(357);
|
|
_harrison.setStrip(2);
|
|
} else {
|
|
_harrison.setVisage(1363);
|
|
_harrison.setStrip(3);
|
|
}
|
|
|
|
_harrison.hide();
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
_harrison.show();
|
|
BF_GLOBALS._sceneItems.push_back(&_harrison);
|
|
}
|
|
|
|
_sceneMode = 1355;
|
|
setAction(&_sequenceManager, this, 1355, NULL);
|
|
}
|
|
break;
|
|
}
|
|
|
|
_item3._sceneRegionId = 18;
|
|
_harrison.setDetails(355, 18, 20, 19, 1, (SceneItem *)NULL);
|
|
_item6.setDetails(10, 355, 2, -1, 14, 1);
|
|
_item7.setDetails(11, 355, 3, -1, 15, 1);
|
|
_item8.setDetails(12, 355, 4, -1, 8, 1);
|
|
_item9.setDetails(13, 355, 5, -1, -1, 1);
|
|
_item10.setDetails(15, 355, 10, -1, 11, 1);
|
|
_item1._sceneRegionId = 22;
|
|
BF_GLOBALS._sceneItems.addItems(&_item3, &_item6, &_item7, &_item8, &_item9, &_item10, &_item1, NULL);
|
|
|
|
if (BF_GLOBALS._dayNumber == 5) {
|
|
_rentalExit.setBounds(Rect(115, 101, 186, 154));
|
|
BF_GLOBALS._sceneItems.push_front(&_rentalExit);
|
|
} else {
|
|
_item2.setDetails(Rect(273, 53, 320, 101), 355, -1, -1, -1, 2, NULL);
|
|
}
|
|
|
|
_item11.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
|
|
BF_GLOBALS._sceneItems.push_back(&_item11);
|
|
}
|
|
|
|
void Scene355::signal() {
|
|
static uint32 black = 0;
|
|
|
|
switch (_sceneMode) {
|
|
case 12:
|
|
SceneItem::display2(355, 22);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 1355:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 9999;
|
|
_stripManager.start(BF_GLOBALS.getFlag(fBackupIn350) ? 3559 : 3554, this);
|
|
break;
|
|
case 1356:
|
|
switch (_doorway._v1) {
|
|
case 0:
|
|
++_doorway._v1;
|
|
_sceneMode = 9999;
|
|
_stripManager.start(3550, this);
|
|
break;
|
|
case 1:
|
|
_sceneMode = 9999;
|
|
_stripManager.start(3551, this);
|
|
++_doorway._v1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
case 2357:
|
|
_harrison.animate(ANIM_MODE_1, NULL);
|
|
// Deliberate fall-through
|
|
case 1357:
|
|
BF_GLOBALS._player.enableControl();
|
|
if (BF_GLOBALS.getFlag(gunDrawn))
|
|
BF_GLOBALS._player._canWalk = false;
|
|
break;
|
|
case 1359:
|
|
BF_GLOBALS._sceneManager.changeScene(360);
|
|
break;
|
|
case 2358:
|
|
if (!BF_GLOBALS.getFlag(fBackupIn350))
|
|
BF_GLOBALS._sceneManager.changeScene(360);
|
|
else {
|
|
_sceneMode = 1359;
|
|
setAction(&_sequenceManager, this, BF_GLOBALS.getFlag(gunDrawn) ? 1359 : 3550, &_harrison, NULL);
|
|
}
|
|
break;
|
|
case 3553:
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_GLOBALS._player._canWalk = false;
|
|
break;
|
|
case 3554:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 9988;
|
|
setAction(&_sequenceManager, this, 3554, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
case 3556:
|
|
if (BF_GLOBALS._player._angle == 45) {
|
|
_sceneMode = 4554;
|
|
signal();
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 4554;
|
|
setAction(&_sequenceManager, this, 3556, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case 3558:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 9988;
|
|
setAction(&_sequenceManager, this, 3558, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
case 3559:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 9988;
|
|
setAction(&_sequenceManager, this, 3559, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
case 3561:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1357;
|
|
setAction(&_sequenceManager, this, 3561, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
case 3562:
|
|
if (!BF_GLOBALS.getFlag(unlockBoat)) {
|
|
BF_GLOBALS.setFlag(unlockBoat);
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
}
|
|
|
|
SceneItem::display2(355, !_doorway._v3 ? 24 : 25);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 4550:
|
|
T2_GLOBALS._uiElements.addScore(50);
|
|
_object10.remove();
|
|
BF_GLOBALS._sound1.play(90);
|
|
BF_GLOBALS._player._regionBitList |= 0x10;
|
|
|
|
_doorway._v3 = 0;
|
|
_doorway._v2 = 2;
|
|
_lyle._flag = 2;
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 4552:
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
break;
|
|
case 4554:
|
|
BF_GLOBALS._player.disableControl();
|
|
switch (_nextSceneMode) {
|
|
case 9980:
|
|
_sceneMode = 9980;
|
|
break;
|
|
case 9992:
|
|
_sceneMode = 9992;
|
|
break;
|
|
default:
|
|
_sceneMode = 0;
|
|
break;
|
|
}
|
|
setAction(&_sequenceManager, this, 4554, &BF_GLOBALS._player, NULL);
|
|
_nextSceneMode = 0;
|
|
_modeFlag = true;
|
|
break;
|
|
case 9977:
|
|
setMode(false, 9992);
|
|
break;
|
|
case 9979:
|
|
_sceneMode = 0;
|
|
signal();
|
|
break;
|
|
case 9980:
|
|
_sceneMode = 9982;
|
|
ADD_MOVER(BF_GLOBALS._player, 64, 173);
|
|
break;
|
|
case 9981:
|
|
_sceneMode = 9994;
|
|
_green.animate(ANIM_MODE_5, NULL);
|
|
addFader((const byte *)&black, 10, this);
|
|
break;
|
|
case 9982:
|
|
_sceneMode = 9983;
|
|
if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 355) {
|
|
if (BF_GLOBALS.getFlag(fLyleOnIsland)) {
|
|
BF_GLOBALS._player.updateAngle(_green._position);
|
|
_stripManager.start(3581, this);
|
|
} else {
|
|
BF_GLOBALS._player.updateAngle(_lyle._position);
|
|
_stripManager.start(3570, this);
|
|
}
|
|
} else {
|
|
if (BF_GLOBALS.getFlag(fLyleOnIsland)) {
|
|
if (BF_GLOBALS._sceneObjects->contains(&_green)) {
|
|
BF_INVENTORY.setObjectScene(INV_GRENADES, 860);
|
|
_stripManager.start(3583, this);
|
|
} else {
|
|
signal();
|
|
}
|
|
} else {
|
|
BF_GLOBALS._player.updateAngle(_lyle._position);
|
|
_stripManager.start(BF_GLOBALS.getFlag(fTookTrailerAmmo) ? 3579 : 3580, this);
|
|
}
|
|
}
|
|
break;
|
|
case 9983:
|
|
BF_GLOBALS._sceneManager.changeScene(860);
|
|
break;
|
|
case 9984:
|
|
if (BF_GLOBALS._dayNumber == 5) {
|
|
_sceneMode = 0;
|
|
switch (_doorway._v2) {
|
|
case 0:
|
|
BF_GLOBALS._sound1.play(109);
|
|
BF_GLOBALS.setFlag(fTookTrailerAmmo);
|
|
_stripManager.start(3575, this);
|
|
_lyle._flag = 1;
|
|
++_doorway._v2;
|
|
break;
|
|
case 1:
|
|
_stripManager.start(3573, this);
|
|
break;
|
|
default:
|
|
SceneItem::display2(355, 21);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
} else if (BF_GLOBALS.getFlag(greenTaken) || (BF_GLOBALS._dayNumber > 1)) {
|
|
if (_doorway._v3) {
|
|
SceneItem::display2(355, 23);
|
|
_sceneMode = 0;
|
|
signal();
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 2358;
|
|
setAction(&_sequenceManager, this, 3551, &BF_GLOBALS._player, &_doorway, NULL);
|
|
}
|
|
} else if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1356;
|
|
setAction(&_sequenceManager, this, 1358, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1356;
|
|
setAction(&_sequenceManager, this, 1356, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case 9985:
|
|
_sceneMode = 0;
|
|
_stripManager.start(3569, this);
|
|
BF_INVENTORY.setObjectScene(INV_GRENADES, 1);
|
|
T2_GLOBALS._uiElements.addScore(50);
|
|
BF_GLOBALS._player._regionBitList |= 0x10;
|
|
break;
|
|
case 9986:
|
|
if (_nextSceneMode) {
|
|
_sceneMode = _item3._state;
|
|
signal();
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = _item3._state;
|
|
setAction(&_sequenceManager, this, 3553, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case 9987:
|
|
if (_nextSceneMode) {
|
|
_nextSceneMode = 0;
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3555;
|
|
setAction(&_sequenceManager, this, 3555, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
_nextSceneMode = 1;
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3553;
|
|
setAction(&_sequenceManager, this, 3553, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case 9988:
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
if ((BF_INVENTORY.getObjectScene(INV_RAGS) == 0) && (BF_INVENTORY.getObjectScene(INV_JAR) == 0) &&
|
|
(BF_INVENTORY.getObjectScene(INV_FLARE) == 0)) {
|
|
_green.postInit();
|
|
_green.setVisage(373);
|
|
_green.setPosition(Common::Point(-10, -10));
|
|
_green._flag = 0;
|
|
|
|
_object9.postInit();
|
|
_object9.setPosition(Common::Point(-10, -10));
|
|
_object10.postInit();
|
|
_object10.setPosition(Common::Point(-10, -10));
|
|
_object11.postInit();
|
|
_object11.setPosition(Common::Point(-10, -10));
|
|
|
|
BF_GLOBALS._sceneItems.push_front(&_green);
|
|
BF_GLOBALS.setFlag(fTookTrailerAmmo);
|
|
BF_GLOBALS._sound1.fade(0, 5, 60, true, NULL);
|
|
_sceneMode = 4550;
|
|
|
|
setAction(&_sequenceManager, this, 4550, &_doorway, &_green, &_object9, &_object10, &_object11, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.enableControl();
|
|
}
|
|
break;
|
|
case 9989:
|
|
_lockerInset.postInit();
|
|
_lockerInset.setVisage(2356);
|
|
_lockerInset.setStrip(2);
|
|
BF_GLOBALS._sceneItems.push_front(&_lockerInset);
|
|
|
|
if (BF_INVENTORY.getObjectScene(INV_SCREWDRIVER) == 999) {
|
|
_lockerInset.setFrame(2);
|
|
if (BF_INVENTORY.getObjectScene(INV_FLARE) == 355) {
|
|
_object5.postInit();
|
|
_object5.setVisage(2356);
|
|
_object5.setStrip(3);
|
|
_object5.setPosition(Common::Point(67, 85));
|
|
_object5.fixPriority(255);
|
|
BF_GLOBALS._sceneItems.push_front(&_object5);
|
|
}
|
|
} else {
|
|
_lockerInset.setFrame(1);
|
|
}
|
|
|
|
_lockerInset.setPosition(Common::Point(82, 115));
|
|
_lockerInset.fixPriority(254);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 9990:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3556;
|
|
ADD_PLAYER_MOVER(145, 145);
|
|
break;
|
|
case 9991:
|
|
setMode(false, 0);
|
|
break;
|
|
case 9992:
|
|
_sceneMode = 9993;
|
|
ADD_PLAYER_MOVER(59, 174);
|
|
break;
|
|
case 9993:
|
|
BF_INVENTORY.setObjectScene(INV_SCREWDRIVER, 1);
|
|
SceneItem::display2(355, 29);
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
_sceneMode = 0;
|
|
signal();
|
|
break;
|
|
case 9996: {
|
|
_sceneMode = 9989;
|
|
ADD_PLAYER_MOVER(116, 146);
|
|
break;
|
|
}
|
|
case 9997:
|
|
_sceneMode = 9999;
|
|
_doorway._v1 = 2;
|
|
_stripManager.start(3562, this);
|
|
break;
|
|
case 9998:
|
|
error("Talkdoor state");
|
|
break;
|
|
case 9999:
|
|
if (_doorway._v1 != 2) {
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_GLOBALS._player._canWalk = false;
|
|
} else if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
_sceneMode = 2358;
|
|
setAction(&_sequenceManager, this, 2359, &BF_GLOBALS._player, &_doorway, &_harrison, NULL);
|
|
} else {
|
|
_sceneMode = 2358;
|
|
setAction(&_sequenceManager, this, 2358, &BF_GLOBALS._player, &_doorway, &_harrison, NULL);
|
|
}
|
|
break;
|
|
case 0:
|
|
case 3555:
|
|
default:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene355::process(Event &event) {
|
|
if (BF_GLOBALS._dayNumber != 5) {
|
|
// Handling for earlier days
|
|
if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
|
|
// Check if the cursor is on an exit
|
|
if (_rentalExit.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);
|
|
}
|
|
}
|
|
|
|
if ((_sceneMode != 2357) && (_sceneMode != 1357) && !BF_GLOBALS.getFlag(greenTaken) &&
|
|
(event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45)) {
|
|
if (BF_GLOBALS._player.contains(event.mousePos)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
BF_GLOBALS.clearFlag(gunDrawn);
|
|
_sceneMode = 2357;
|
|
setAction(&_sequenceManager, this, 2357, &BF_GLOBALS._player, &_harrison, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1357;
|
|
setAction(&_sequenceManager, this, 1357, &BF_GLOBALS._player, &_harrison, NULL);
|
|
BF_GLOBALS.setFlag(gunDrawn);
|
|
}
|
|
} else {
|
|
_item11.startAction(INV_COLT45, event);
|
|
}
|
|
event.handled = true;
|
|
}
|
|
} else {
|
|
// Day 5 handling
|
|
if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
|
|
// Check if the cursor is on the exit to the rental boat
|
|
if (_rentalExit.contains(event.mousePos)) {
|
|
GfxSurface surface = _cursorVisage.getFrame(!_modeFlag ? EXITFRAME_SW : EXITFRAME_NE);
|
|
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);
|
|
}
|
|
}
|
|
|
|
// Special handling of actions
|
|
if (event.eventType == EVENT_BUTTON_DOWN) {
|
|
switch (BF_GLOBALS._events.getCursor()) {
|
|
case INV_COLT45:
|
|
if (BF_GLOBALS._player.contains(event.mousePos)) {
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
|
|
if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
BF_GLOBALS.clearFlag(gunDrawn);
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 1357;
|
|
setAction(&_sequenceManager, this, 3560, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS.setFlag(gunDrawn);
|
|
if (_modeFlag) {
|
|
setMode(true, 3561);
|
|
} else {
|
|
_sceneMode = 3561;
|
|
signal();
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case CURSOR_WALK:
|
|
if (BF_GLOBALS.getFlag(gunDrawn))
|
|
event.handled = true;
|
|
break;
|
|
case CURSOR_LOOK:
|
|
case CURSOR_TALK:
|
|
break;
|
|
case CURSOR_USE:
|
|
if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
SceneItem::display2(355, 50);
|
|
event.handled = true;
|
|
}
|
|
break;
|
|
default:
|
|
if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
SceneItem::display2(355, 50);
|
|
event.handled = true;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
PalettedScene::process(event);
|
|
}
|
|
|
|
void Scene355::dispatch() {
|
|
PalettedScene::dispatch();
|
|
if (BF_GLOBALS._sceneObjects->contains(&_lyle)) {
|
|
_lyle.updateAngle(BF_GLOBALS._player._position);
|
|
}
|
|
|
|
if (!_action && (BF_GLOBALS._player.getRegionIndex() == 20)) {
|
|
ADD_MOVER(BF_GLOBALS._player, 238, 142);
|
|
}
|
|
}
|
|
|
|
void Scene355::setMode(bool mode, int sceneMode) {
|
|
Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (mode) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = sceneMode;
|
|
setAction(&scene->_sequenceManager, this, 4553, &BF_GLOBALS._player, NULL);
|
|
_modeFlag = false;
|
|
} else {
|
|
_sceneMode = 9990;
|
|
_nextSceneMode = sceneMode;
|
|
signal();
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 360 - Future Wave Interior
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene360::Item1::startAction(CursorType action, Event &event) {
|
|
Scene360 *scene = (Scene360 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 9);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
scene->_sceneMode = 3607;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripManager.start(3550, scene);
|
|
return true;
|
|
case INV_COLT45:
|
|
SceneItem::display2(1, 4);
|
|
return true;
|
|
default:
|
|
return SceneHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene360::Item2::startAction(CursorType action, Event &event) {
|
|
Scene360 *scene = (Scene360 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 10);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (BF_GLOBALS._dayNumber != 4)
|
|
SceneItem::display2(360, 5);
|
|
else
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
default:
|
|
return SceneHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene360::Item3::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 11);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(360, 12);
|
|
return true;
|
|
default:
|
|
return SceneHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene360::Barometer::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 15);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(360, 16);
|
|
return true;
|
|
default:
|
|
return SceneHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene360::SlidingDoor::startAction(CursorType action, Event &event) {
|
|
Scene360 *scene = (Scene360 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 0);
|
|
return true;
|
|
case CURSOR_USE:
|
|
BF_GLOBALS._player.disableControl();
|
|
if (BF_GLOBALS.getFlag(greenTaken)) {
|
|
scene->_sceneMode = 3611;
|
|
setAction(&scene->_sequenceManager1, scene, 3611, &BF_GLOBALS._player, this, NULL);
|
|
} else {
|
|
scene->_sceneMode = 3604;
|
|
setAction(&scene->_sequenceManager1, scene, 3604, &BF_GLOBALS._player, NULL);
|
|
}
|
|
return true;
|
|
case CURSOR_TALK:
|
|
scene->_sceneMode = 3607;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_stripManager.start(3550, scene);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene360::Window::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 13);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(360, 14);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene360::Object4::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 3);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(360, 2);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene360::BaseballCards::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (event.mousePos.x >= (_bounds.left + _bounds.width() / 2))
|
|
SceneItem::display2(360, 4);
|
|
else
|
|
SceneItem::display2(360, 22);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(360, 2);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene360::Harrison::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 6);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(360, 7);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
SceneItem::display2(360, 8);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene360::Object7::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(360, 1);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(360, 21);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene360::Action1::signal() {
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
ADD_PLAYER_MOVER(153, 115);
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._player.setStrip(7);
|
|
if (BF_INVENTORY.getObjectScene(INV_WAREHOUSE_KEYS) == 360) {
|
|
SceneItem::display2(360, 20);
|
|
BF_INVENTORY.setObjectScene(INV_WAREHOUSE_KEYS, 1);
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
} else {
|
|
SceneItem::display2(360, 5);
|
|
}
|
|
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene360::synchronize(Serializer &s) {
|
|
SceneExt::synchronize(s);
|
|
if (s.getVersion() < 9) {
|
|
int tmpVar = 0;
|
|
s.syncAsSint16LE(tmpVar);
|
|
}
|
|
}
|
|
|
|
void Scene360::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(760);
|
|
setZoomPercents(108, 90, 135, 100);
|
|
_sound1.play(125);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
|
_stripManager.addSpeaker(&_harrisonSpeaker);
|
|
_stripManager.addSpeaker(&_greenSpeaker);
|
|
|
|
_item2._sceneRegionId = 11;
|
|
BF_GLOBALS._sceneItems.push_back(&_item2);
|
|
|
|
_slidingDoor.postInit();
|
|
_slidingDoor.setVisage(760);
|
|
_slidingDoor.setPosition(Common::Point(42, 120));
|
|
_slidingDoor.setStrip(2);
|
|
_slidingDoor.fixPriority(85);
|
|
BF_GLOBALS._sceneItems.push_back(&_slidingDoor);
|
|
|
|
_window.postInit();
|
|
_window.setVisage(760);
|
|
_window.setStrip(4);
|
|
_window.setPosition(Common::Point(176, 43));
|
|
_window.fixPriority(10);
|
|
_window._numFrames = 2;
|
|
_window.animate(ANIM_MODE_8, 0, NULL);
|
|
BF_GLOBALS._sceneItems.push_back(&_window);
|
|
|
|
_object4.postInit();
|
|
_object4.setVisage(760);
|
|
_object4.setStrip(5);
|
|
_object4.setPosition(Common::Point(157, 75));
|
|
_object4.fixPriority(50);
|
|
BF_GLOBALS._sceneItems.push_back(&_object4);
|
|
|
|
if (BF_GLOBALS._dayNumber <= 1) {
|
|
_object7.postInit();
|
|
_object7.setVisage(760);
|
|
_object7.setStrip(1);
|
|
_object7.setPosition(Common::Point(246, 105));
|
|
_object7.fixPriority(50);
|
|
BF_GLOBALS._sceneItems.push_back(&_object7);
|
|
|
|
_baseballCards.postInit();
|
|
_baseballCards.setVisage(760);
|
|
_baseballCards.setStrip(6);
|
|
_baseballCards.setPosition(Common::Point(159, 115));
|
|
_baseballCards.fixPriority(50);
|
|
BF_GLOBALS._sceneItems.push_back(&_baseballCards);
|
|
}
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
if (BF_GLOBALS.getFlag(onDuty)) {
|
|
if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
BF_GLOBALS._player.setVisage(1351);
|
|
BF_GLOBALS._player._moveDiff.x = 5;
|
|
} else {
|
|
BF_GLOBALS._player.setVisage(361);
|
|
BF_GLOBALS._player._moveDiff.x = 6;
|
|
}
|
|
} else {
|
|
BF_GLOBALS._player.setVisage(368);
|
|
BF_GLOBALS._player._moveDiff.x = 6;
|
|
}
|
|
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
BF_GLOBALS._player.setStrip(3);
|
|
BF_GLOBALS._player.setPosition(Common::Point(340, 160));
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player._moveDiff.y = 4;
|
|
BF_GLOBALS._player.enableControl();
|
|
|
|
if ((BF_GLOBALS._sceneManager._previousScene == 355) || (BF_GLOBALS._sceneManager._previousScene != 370)) {
|
|
// The original was using there a useless variable (now removed)
|
|
BF_GLOBALS._player.setPosition(Common::Point(253, 135));
|
|
BF_GLOBALS._player.setStrip(2);
|
|
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
_harrison.postInit();
|
|
_harrison.setVisage(BF_GLOBALS.getFlag(gunDrawn) ? 363 : 1363);
|
|
_harrison.animate(ANIM_MODE_1, NULL);
|
|
_harrison.setObjectWrapper(new SceneObjectWrapper());
|
|
_harrison.setPosition(Common::Point(235, 150));
|
|
_harrison.setStrip(2);
|
|
BF_GLOBALS._sceneItems.push_back(&_harrison);
|
|
}
|
|
|
|
_sceneMode = 3607;
|
|
if (BF_GLOBALS.getFlag(greenTaken)) {
|
|
_slidingDoor.setPosition(Common::Point(42, 120));
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
_object2.postInit();
|
|
_object2.setPosition(Common::Point(-40, -40));
|
|
|
|
_slidingDoor.setPosition(Common::Point(6, 130));
|
|
_slidingDoor.setAction(&_sequenceManager1, this, 3606, &_slidingDoor, &_object7, NULL);
|
|
}
|
|
} else {
|
|
BF_GLOBALS._player.setPosition(Common::Point(62, 122));
|
|
BF_GLOBALS._player.enableControl();
|
|
}
|
|
|
|
_barometer._sceneRegionId = 9;
|
|
BF_GLOBALS._sceneItems.push_back(&_barometer);
|
|
_item3._sceneRegionId = 10;
|
|
BF_GLOBALS._sceneItems.push_back(&_item3);
|
|
_item1.setBounds(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y));
|
|
BF_GLOBALS._sceneItems.push_back(&_item1);
|
|
}
|
|
|
|
void Scene360::signal() {
|
|
switch (_sceneMode) {
|
|
case 3600:
|
|
case 3611:
|
|
BF_GLOBALS._sceneManager.changeScene(370);
|
|
break;
|
|
case 3602:
|
|
BF_GLOBALS.setFlag(gunDrawn);
|
|
BF_GLOBALS._deathReason = BF_GLOBALS.getFlag(fBackupIn350) ? 2 : 1;
|
|
BF_GLOBALS._player.setPosition(Common::Point(BF_GLOBALS._player._position.x - 20,
|
|
BF_GLOBALS._player._position.y + 1));
|
|
_sceneMode = 3610;
|
|
setAction(&_sequenceManager1, this, 3610, &_slidingDoor, &_object2, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
case 3603:
|
|
_sceneMode = 3605;
|
|
setAction(&_sequenceManager1, this, 3605, &BF_GLOBALS._player, &_slidingDoor, NULL);
|
|
break;
|
|
case 3604:
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
_sceneMode = 3603;
|
|
setAction(&_sequenceManager1, this, _sceneMode, &_harrison, NULL);
|
|
} else {
|
|
_sceneMode = 3605;
|
|
setAction(&_sequenceManager1, this, _sceneMode, &BF_GLOBALS._player, &_slidingDoor, NULL);
|
|
}
|
|
break;
|
|
case 3605:
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
_sceneMode = 3600;
|
|
setAction(&_sequenceManager1, this, 3600, NULL);
|
|
} else {
|
|
BF_GLOBALS._deathReason = BF_GLOBALS.getFlag(fBackupIn350) ? 2 : 1;
|
|
_sceneMode = 3610;
|
|
setAction(&_sequenceManager1, this, 3601, &BF_GLOBALS._player, NULL);
|
|
}
|
|
break;
|
|
case 3607:
|
|
case 3609:
|
|
// Original game was only using at this place visage 1363.
|
|
// This workaround allow Harrison to keep his gun handy
|
|
// when entering the romm (if required)
|
|
if (! BF_GLOBALS.getFlag(gunDrawn))
|
|
_harrison.setVisage(1363);
|
|
else
|
|
_harrison.setVisage(363);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3608:
|
|
BF_GLOBALS._sceneManager.changeScene(355);
|
|
break;
|
|
case 3610:
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
break;
|
|
case 9998:
|
|
BF_GLOBALS._player.setVisage(1351);
|
|
BF_GLOBALS._player._moveDiff.x = 5;
|
|
BF_GLOBALS._player.setFrame(1);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 9999:
|
|
BF_GLOBALS._player.setVisage(361);
|
|
BF_GLOBALS._player._moveDiff.x = 6;
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene360::process(Event &event) {
|
|
SceneExt::process(event);
|
|
|
|
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
|
|
BF_GLOBALS._player.contains(event.mousePos) && !BF_GLOBALS.getFlag(greenTaken)) {
|
|
// Player clicked gun on themselves
|
|
if (BF_GLOBALS.getFlag(gunDrawn)) {
|
|
// Handle holstering gun
|
|
if (BF_GLOBALS._player._position.x <= 160)
|
|
SceneItem::display2(360, 18);
|
|
else {
|
|
if (BF_GLOBALS.getFlag(fBackupIn350))
|
|
SceneItem::display2(360, 19);
|
|
|
|
BF_GLOBALS.clearFlag(gunDrawn);
|
|
_sceneMode = 9999;
|
|
BF_GLOBALS._player.setVisage(1361);
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_6, this);
|
|
|
|
_harrison.setVisage(1363);
|
|
}
|
|
} else {
|
|
// Handle drawing gun
|
|
if (BF_GLOBALS.getFlag(fBackupIn350))
|
|
SceneItem::display2(360, 19);
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
BF_GLOBALS._player.setVisage(1361);
|
|
BF_GLOBALS._player.setFrame(1);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_5, this);
|
|
|
|
BF_GLOBALS.setFlag(gunDrawn);
|
|
_sceneMode = 9998;
|
|
_harrison.setVisage(363);
|
|
}
|
|
|
|
event.handled = true;
|
|
}
|
|
}
|
|
|
|
void Scene360::dispatch() {
|
|
SceneExt::dispatch();
|
|
|
|
if (!_action) {
|
|
if (BF_GLOBALS._player.getRegionIndex() == 8) {
|
|
// Leaving the boat
|
|
BF_GLOBALS._player.disableControl();
|
|
if (BF_GLOBALS.getFlag(fBackupIn350)) {
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
_sceneMode = 3609;
|
|
setAction(&_sequenceManager1, this, 3609, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS._sceneManager.changeScene(355);
|
|
}
|
|
}
|
|
|
|
if ((BF_GLOBALS._player._position.x <= 168) && !BF_GLOBALS.getFlag(greenTaken) &&
|
|
!BF_GLOBALS.getFlag(gunDrawn)) {
|
|
// Moving to doorway without drawn gun before Green is captured
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._player.addMover(NULL);
|
|
_sceneMode = 3602;
|
|
setAction(&_sequenceManager1, this, 3602, &_slidingDoor, &_object2, &BF_GLOBALS._player, NULL);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 370 - Future Wave Bedroom
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene370::GreensGun::startAction(CursorType action, Event &event) {
|
|
Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(370, 4);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) || BF_GLOBALS.getFlag(greenTaken)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._walkRegions.enableRegion(3);
|
|
scene->_sceneMode = 3711;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3711, &BF_GLOBALS._player, this, NULL);
|
|
} else {
|
|
SceneItem::display2(370, 5);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene370::Green::startAction(CursorType action, Event &event) {
|
|
Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(370, (_v2 < 3) ? 10 : 0);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (_v2 != 3)
|
|
SceneItem::display2(370, 1);
|
|
else if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1)
|
|
SceneItem::display2(370, 26);
|
|
else if (BF_INVENTORY.getObjectScene(INV_GREENS_KNIFE) == 1) {
|
|
scene->_sceneMode = 2;
|
|
scene->_stripManager.start(3717, scene);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._walkRegions.enableRegion(3);
|
|
scene->_sceneMode = 3715;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3715, &BF_GLOBALS._player, this, NULL);
|
|
}
|
|
return true;
|
|
case CURSOR_TALK:
|
|
BF_GLOBALS._player.disableControl();
|
|
switch (_v2) {
|
|
case 0:
|
|
++_v2;
|
|
scene->_sceneMode = 3706;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3706, NULL);
|
|
break;
|
|
case 1:
|
|
++_v2;
|
|
scene->_sceneMode = 3707;
|
|
|
|
scene->_object5.postInit();
|
|
scene->_object5.setVisage(362);
|
|
scene->_object5.setStrip(3);
|
|
scene->_object5.setPosition(scene->_harrison._position);
|
|
scene->_object5.hide();
|
|
|
|
scene->setAction(&scene->_sequenceManager, scene, 3707, &scene->_harrison, &scene->_object5, NULL);
|
|
break;
|
|
case 2:
|
|
++_v2;
|
|
scene->_sceneMode = 3708;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3708, this, &scene->_laura, &scene->_harrison,
|
|
&scene->_object5, &scene->_greensGun, NULL);
|
|
break;
|
|
case 3:
|
|
scene->_sceneMode = BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1 ? 3713 : 2;
|
|
scene->_stripManager.start(3717, scene);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return true;
|
|
case INV_COLT45:
|
|
if ((BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 370) || (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 1))
|
|
SceneItem::display2(370, 28);
|
|
else if (!BF_GLOBALS.getHasBullets())
|
|
SceneItem::display2(1, 1);
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._deathReason = 9;
|
|
scene->_sceneMode = 3702;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3702, &BF_GLOBALS._player, this, &scene->_harrison, NULL);
|
|
}
|
|
return true;
|
|
case INV_HANDCUFFS:
|
|
if (_v2 != 3)
|
|
SceneItem::display2(370, 2);
|
|
else {
|
|
T2_GLOBALS._uiElements.addScore(50);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3704;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3704, &BF_GLOBALS._player, this, &scene->_harrison, NULL);
|
|
}
|
|
return true;
|
|
case INV_MIRANDA_CARD:
|
|
if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1)
|
|
SceneItem::display2(370, 5);
|
|
else if (BF_GLOBALS.getFlag(readGreenRights))
|
|
SceneItem::display2(390, 15);
|
|
else {
|
|
BF_GLOBALS.setFlag(readGreenRights);
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._player.updateAngle(this->_position);
|
|
scene->_sceneMode = 3717;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3717, &BF_GLOBALS._player, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedObject2::startAction(action, event);
|
|
}
|
|
|
|
bool Scene370::Harrison::startAction(CursorType action, Event &event) {
|
|
Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(370, 8);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
if (scene->_green._v2 != 3) {
|
|
scene->_sceneMode = 3;
|
|
scene->_stripManager.start(3714, scene);
|
|
} else if ((BF_INVENTORY.getObjectScene(INV_GREENS_KNIFE) == 1) ||
|
|
((BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 1) && BF_GLOBALS._sceneObjects->contains(&scene->_laura))) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3716;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3716, &BF_GLOBALS._player, &scene->_green, this, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.updateAngle(this->_position);
|
|
scene->_stripManager.start(3715, scene);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene370::Laura::startAction(CursorType action, Event &event) {
|
|
Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(370, 11);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(370, BF_GLOBALS._sceneObjects->contains(&scene->_green) ? 12 : 13);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3705;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3705, &BF_GLOBALS._player, this, NULL);
|
|
return true;
|
|
}
|
|
// Deliberate fall-through
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene370::Item1::startAction(CursorType action, Event &event) {
|
|
Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_LOOK) {
|
|
SceneItem::display2(370, 15);
|
|
return true;
|
|
} else if (action == CURSOR_USE) {
|
|
SceneItem::display2(370, 16);
|
|
return true;
|
|
} else if (action == INV_COLT45) {
|
|
if (BF_GLOBALS._sceneObjects->contains(&scene->_green) && (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 370)) {
|
|
scene->_green.setAction(NULL);
|
|
scene->_sceneMode = 3703;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3703, &BF_GLOBALS._player, &scene->_green, &scene->_harrison, NULL);
|
|
return true;
|
|
}
|
|
return false;
|
|
} else if (action < CURSOR_WALK) // If any other inventory item used
|
|
return false;
|
|
else // If any other action is used
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
|
|
bool Scene370::Item6::startAction(CursorType action, Event &event) {
|
|
Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_LOOK) {
|
|
SceneItem::display2(370, 14);
|
|
return true;
|
|
} else if (action == CURSOR_USE) {
|
|
SceneItem::display2(370, 29);
|
|
return true;
|
|
} else if (action == INV_COLT45) {
|
|
if (BF_GLOBALS._sceneObjects->contains(&scene->_green) && (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 370) &&
|
|
(BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_green.setAction(NULL);
|
|
scene->_sceneMode = 3703;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3703, &BF_GLOBALS._player, &scene->_green, &scene->_harrison, NULL);
|
|
return true;
|
|
}
|
|
return SceneHotspot::startAction(action, event);
|
|
} else if (action < CURSOR_WALK) // If any other inventory item used
|
|
return false;
|
|
else // If any other action
|
|
return SceneHotspot::startAction(action, event);
|
|
}
|
|
|
|
|
|
bool Scene370::Exit::startAction(CursorType action, Event &event) {
|
|
Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (BF_GLOBALS._sceneObjects->contains(&scene->_green))
|
|
return false;
|
|
else {
|
|
ADD_PLAYER_MOVER(event.mousePos.x, event.mousePos.y);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene370::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(370);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
|
_stripManager.addSpeaker(&_lauraSpeaker);
|
|
_stripManager.addSpeaker(&_lauraHeldSpeaker);
|
|
_stripManager.addSpeaker(&_greenSpeaker);
|
|
_stripManager.addSpeaker(&_harrisonSpeaker);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setVisage(1351);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.setStrip(8);
|
|
BF_GLOBALS._player.setPosition(Common::Point(310, 153));
|
|
BF_GLOBALS._player._moveDiff = Common::Point(7, 2);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
if (BF_GLOBALS.getFlag(greenTaken)) {
|
|
// Green has already been arrested
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
|
|
BF_GLOBALS._player._moveDiff.x = 6;
|
|
BF_GLOBALS._player.enableControl();
|
|
} else {
|
|
// Hostage scene setup
|
|
_green.postInit();
|
|
_green.setVisage(373);
|
|
_green.setStrip(2);
|
|
_green._numFrames = 5;
|
|
_green.setPosition(Common::Point(164, 137));
|
|
_green.animate(ANIM_MODE_7, 0, NULL);
|
|
_green.fixPriority(125);
|
|
BF_GLOBALS._sceneItems.push_back(&_green);
|
|
|
|
_laura.postInit();
|
|
_laura.setVisage(374);
|
|
_laura.setStrip(2);
|
|
_laura.setPosition(_green._position);
|
|
_laura.hide();
|
|
_laura.animate(ANIM_MODE_1, NULL);
|
|
|
|
_harrison.postInit();
|
|
_harrison.setVisage(372);
|
|
_harrison.setPosition(Common::Point(256, 166));
|
|
BF_GLOBALS._sceneItems.push_back(&_harrison);
|
|
|
|
_sceneMode = 3700;
|
|
setAction(&_sequenceManager, this, 3700, NULL);
|
|
}
|
|
|
|
if ((BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 320) && (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 1)) {
|
|
_greensGun.postInit();
|
|
_greensGun.setVisage(362);
|
|
_greensGun.setStrip(6);
|
|
_greensGun.setPosition(_green._position);
|
|
_greensGun.fixPriority(149);
|
|
_greensGun.hide();
|
|
}
|
|
|
|
if ((BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 370) && (BF_GLOBALS._dayNumber == 1)) {
|
|
_greensGun.setPosition(Common::Point(172, 137));
|
|
_greensGun.show();
|
|
BF_GLOBALS._sceneItems.push_front(&_greensGun);
|
|
}
|
|
|
|
_item1._sceneRegionId = 8;
|
|
BF_GLOBALS._sceneItems.push_back(&_item1);
|
|
_item2.setDetails(9, 370, 17, -1, 18, 1);
|
|
_item3.setDetails(10, 370, 19, -1, 20, 1);
|
|
_item4.setDetails(11, 370, 21, -1, 22, 1);
|
|
_item5.setDetails(12, 370, 23, -1, 24, 1);
|
|
_exit.setDetails(Rect(316, 133, 320, 166), 360, -1, -1, -1, 1, NULL);
|
|
_item6.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
|
|
|
|
BF_GLOBALS._sceneItems.push_back(&_item6);
|
|
BF_GLOBALS._sceneItems.remove(&BF_GLOBALS._player);
|
|
BF_GLOBALS._sceneItems.push_back(&BF_GLOBALS._player);
|
|
}
|
|
|
|
void Scene370::signal() {
|
|
switch (_sceneMode) {
|
|
case 1:
|
|
BF_GLOBALS._bookmark = bArrestedGreen;
|
|
BF_GLOBALS._sceneManager.changeScene(350);
|
|
break;
|
|
case 2:
|
|
case 3717:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3:
|
|
break;
|
|
case 3707:
|
|
_object5.setDetails(370, 6, -1, 7, 1, (SceneItem *)NULL);
|
|
BF_GLOBALS._sceneItems.push_back(&_object5);
|
|
// Deliberate fall-through
|
|
case 3700:
|
|
case 3706:
|
|
_green.setAction(&_sequenceManager, this, 3701, NULL);
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_GLOBALS._player._canWalk = false;
|
|
break;
|
|
case 3701:
|
|
BF_GLOBALS._player.disableControl();
|
|
setAction(&_sequenceManager, this, 3710, NULL);
|
|
break;
|
|
case 3702:
|
|
// Player tried to shoot Green
|
|
BF_GLOBALS._deathReason = 2;
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
break;
|
|
case 3703:
|
|
// Player dropped his gun
|
|
BF_GLOBALS._deathReason = 9;
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
break;
|
|
case 3704:
|
|
BF_GLOBALS.clearFlag(gunDrawn);
|
|
BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 390);
|
|
BF_GLOBALS._player.setVisage(361);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.setStrip(3);
|
|
|
|
BF_GLOBALS._sceneItems.push_front(&_laura);
|
|
BF_GLOBALS._walkRegions.disableRegion(3);
|
|
_harrison.setAction(NULL);
|
|
BF_GLOBALS._player.enableControl();
|
|
|
|
BF_GLOBALS.set2Flags(f1015Marina);
|
|
BF_GLOBALS.set2Flags(f1027Marina);
|
|
BF_GLOBALS.set2Flags(f1098Marina);
|
|
break;
|
|
case 3705:
|
|
_laura.remove();
|
|
BF_GLOBALS._walkRegions.enableRegion(6);
|
|
BF_GLOBALS._walkRegions.enableRegion(1);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3708:
|
|
_sound1.play(6);
|
|
BF_GLOBALS._sound1.changeSound(35);
|
|
BF_INVENTORY.setObjectScene(INV_GREENS_GUN, 370);
|
|
T2_GLOBALS._uiElements.addScore(50);
|
|
BF_GLOBALS._sceneItems.push_front(&_greensGun);
|
|
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_GLOBALS._player._canWalk = false;
|
|
|
|
_sceneMode = 0;
|
|
_object5.remove();
|
|
_green.setAction(NULL);
|
|
BF_GLOBALS._walkRegions.disableRegion(6);
|
|
BF_GLOBALS._walkRegions.disableRegion(1);
|
|
break;
|
|
case 3709:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3713;
|
|
setAction(&_sequenceManager, this, 3713, NULL);
|
|
break;
|
|
case 3710:
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_GLOBALS._player._canWalk = false;
|
|
_sceneMode = 3701;
|
|
_green.setAction(&_sequenceManager, this, 3701, NULL);
|
|
break;
|
|
case 3711:
|
|
BF_GLOBALS._walkRegions.disableRegion(3);
|
|
BF_INVENTORY.setObjectScene(INV_GREENS_GUN, 1);
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
_greensGun.remove();
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3712:
|
|
T2_GLOBALS._uiElements._active = false;
|
|
T2_GLOBALS._uiElements.hide();
|
|
|
|
if (BF_GLOBALS._sceneObjects->contains(&_greensGun))
|
|
_greensGun.remove();
|
|
_sceneMode = 1;
|
|
setAction(&_sequenceManager, this, 3714, NULL);
|
|
break;
|
|
case 3713:
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_GLOBALS._player._canWalk = false;
|
|
break;
|
|
case 3715:
|
|
T2_GLOBALS._uiElements.addScore(50);
|
|
BF_INVENTORY.setObjectScene(INV_GREEN_ID, 1);
|
|
BF_INVENTORY.setObjectScene(INV_GREENS_KNIFE, 1);
|
|
BF_GLOBALS._walkRegions.disableRegion(3);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3716:
|
|
BF_GLOBALS.clearFlag(fCalledBackup);
|
|
BF_GLOBALS.clearFlag(fBackupIn350);
|
|
BF_GLOBALS.clearFlag(fBackupArrived340);
|
|
BF_GLOBALS.setFlag(greenTaken);
|
|
BF_GLOBALS.setFlag(fToldToLeave340);
|
|
|
|
BF_GLOBALS._bookmark = bCalledToDomesticViolence;
|
|
_harrison.remove();
|
|
_green.remove();
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene370::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(EXITFRAME_E);
|
|
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 Scene370::dispatch() {
|
|
SceneExt::dispatch();
|
|
|
|
if ((BF_GLOBALS._player._position.x >= 316) && !BF_GLOBALS._sceneObjects->contains(&_laura) &&
|
|
!BF_GLOBALS._sceneObjects->contains(&_green)) {
|
|
if (BF_GLOBALS._bookmark < bArrestedGreen) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3712;
|
|
setAction(&_sequenceManager, this, 3712, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS._sound1.fadeSound(35);
|
|
BF_GLOBALS._sceneManager.changeScene(360);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 380 - Outside City Hall & Jail
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene380::Vechile::startAction(CursorType action, Event &event) {
|
|
Scene380 *scene = (Scene380 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 1;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3802, &BF_GLOBALS._player, NULL);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene380::Door::startAction(CursorType action, Event &event) {
|
|
Scene380 *scene = (Scene380 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 2;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3800, &BF_GLOBALS._player, &scene->_door, NULL);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene380::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(380);
|
|
setZoomPercents(68, 80, 131, 100);
|
|
|
|
BF_GLOBALS._sound1.fadeSound(33);
|
|
BF_GLOBALS._walkRegions.disableRegion(9);
|
|
|
|
_door.postInit();
|
|
_door.setVisage(380);
|
|
_door.setStrip(4);
|
|
_door.setPosition(Common::Point(132, 66));
|
|
_door.setDetails(380, 12, 13, -1, 1, (SceneItem *)NULL);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
|
|
_vechile.postInit();
|
|
_vechile.setVisage(380);
|
|
_vechile.fixPriority(109);
|
|
|
|
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
// Show vechile as car
|
|
_vechile.setStrip(3);
|
|
_vechile.setPosition(Common::Point(273, 125));
|
|
_vechile.setDetails(580, 2, 3, -1, 1, (SceneItem *)NULL);
|
|
|
|
BF_GLOBALS._player.setVisage(129);
|
|
BF_GLOBALS._walkRegions.disableRegion(12);
|
|
BF_GLOBALS._walkRegions.disableRegion(18);
|
|
BF_GLOBALS._walkRegions.disableRegion(19);
|
|
BF_GLOBALS._walkRegions.disableRegion(20);
|
|
BF_GLOBALS._walkRegions.disableRegion(25);
|
|
BF_GLOBALS._walkRegions.disableRegion(26);
|
|
BF_GLOBALS._walkRegions.disableRegion(27);
|
|
} else if (BF_GLOBALS.getFlag(onDuty)) {
|
|
// Show on duty motorcycle
|
|
_vechile.setStrip(2);
|
|
_vechile.setDetails(300, 11, 13, -1, 1, (SceneItem *)NULL);
|
|
_vechile.setPosition(Common::Point(252, 115));
|
|
|
|
BF_GLOBALS._player.setVisage(1341);
|
|
} else {
|
|
// Show off duty motorcycle
|
|
_vechile.setStrip(1);
|
|
_vechile.setDetails(580, 0, 1, -1, 1, (SceneItem *)NULL);
|
|
_vechile.setPosition(Common::Point(249, 110));
|
|
|
|
BF_GLOBALS._player.setVisage(129);
|
|
}
|
|
|
|
BF_GLOBALS._player.updateAngle(_vechile._position);
|
|
BF_GLOBALS._sceneItems.push_back(&_door);
|
|
|
|
switch (BF_GLOBALS._sceneManager._previousScene) {
|
|
case 50:
|
|
case 60:
|
|
case 330:
|
|
case 370:
|
|
BF_GLOBALS._player.setPosition(Common::Point(251, 100));
|
|
BF_GLOBALS._player._strip = 3;
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
default:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager, this, 3801, &BF_GLOBALS._player, &_door, NULL);
|
|
break;
|
|
}
|
|
|
|
_item1.setDetails(7, 380, 0, 1, 2, 1);
|
|
_item2.setDetails(9, 380, 3, 4, 5, 1);
|
|
_item3.setDetails(17, 380, 6, 7, 8, 1);
|
|
_item4.setDetails(20, 380, 9, 10, 11, 1);
|
|
_item5.setDetails(15, 380, 14, 15, 16, 1);
|
|
_item6.setDetails(4, 380, 17, 18, 19, 1);
|
|
_item7.setDetails(19, 380, 20, 4, 21, 1);
|
|
_item8.setDetails(18, 380, 22, 23, 24, 1);
|
|
_item9.setDetails(6, 380, 25, 26, 27, 1);
|
|
}
|
|
|
|
void Scene380::signal() {
|
|
switch (_sceneMode) {
|
|
case 1:
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._sceneManager.changeScene(385);
|
|
break;
|
|
default:
|
|
BF_GLOBALS._player.enableControl();
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 385 - City Hall
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene385::Action1::signal() {
|
|
Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
switch (scene->_talkAction) {
|
|
case 0:
|
|
error("Bugs::talkscript385");
|
|
break;
|
|
case 3850:
|
|
case 3851:
|
|
case 3852:
|
|
case 3853:
|
|
case 3854:
|
|
case 3855:
|
|
case 3856:
|
|
case 3857:
|
|
case 3863:
|
|
case 3866: {
|
|
ADD_PLAYER_MOVER(187, 144);
|
|
break;
|
|
}
|
|
default: {
|
|
ADD_PLAYER_MOVER(231, 158);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._player.changeAngle(45);
|
|
setDelay(3);
|
|
break;
|
|
case 2:
|
|
scene->_stripManager.start(scene->_talkAction, this);
|
|
break;
|
|
case 3:
|
|
if (scene->_talkAction)
|
|
scene->_dezi.animate(ANIM_MODE_5, NULL);
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene385::Action2::signal() {
|
|
Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0: {
|
|
ADD_PLAYER_MOVER(231, 158);
|
|
break;
|
|
}
|
|
case 1:
|
|
BF_GLOBALS._player.updateAngle(BF_GLOBALS._player._position);
|
|
setDelay(3);
|
|
break;
|
|
case 2:
|
|
scene->_stripManager.start(3864, this);
|
|
break;
|
|
case 3:
|
|
scene->_jim.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 4:
|
|
scene->_jim.setStrip(4);
|
|
scene->_jim.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 5:
|
|
scene->_stripManager.start(3865, this);
|
|
break;
|
|
case 6:
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene385::Door::startAction(CursorType action, Event &event) {
|
|
Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
BF_GLOBALS._walkRegions.enableRegion(6);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3850;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3850, &BF_GLOBALS._player, this, NULL);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene385::Jim::startAction(CursorType action, Event &event) {
|
|
Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_TALK) {
|
|
if (scene->_jimFlag) {
|
|
scene->_talkAction = 3867;
|
|
scene->setAction(&scene->_action1);
|
|
} else {
|
|
switch (BF_GLOBALS._dayNumber) {
|
|
case 1:
|
|
scene->_talkAction = 3858;
|
|
break;
|
|
case 2:
|
|
scene->_talkAction = 3859;
|
|
break;
|
|
case 3:
|
|
scene->_talkAction = 3860;
|
|
break;
|
|
case 4:
|
|
scene->_talkAction = 3861;
|
|
break;
|
|
default:
|
|
BF_GLOBALS._deziTopic = 3;
|
|
scene->_talkAction = 3868;
|
|
break;
|
|
}
|
|
|
|
scene->_jimFlag = true;
|
|
scene->setAction(&scene->_action1);
|
|
}
|
|
return true;
|
|
} else if (action == INV_PRINT_OUT) {
|
|
if (!BF_GLOBALS.getFlag(fGotPointsForMCard)) {
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_GLOBALS.setFlag(fGotPointsForMCard);
|
|
|
|
scene->setAction(&scene->_action2);
|
|
return true;
|
|
} else
|
|
return false;
|
|
} else if (action < CURSOR_WALK)
|
|
// Any other inventory item
|
|
return false;
|
|
else
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
|
|
bool Scene385::Dezi::startAction(CursorType action, Event &event) {
|
|
Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
if (BF_GLOBALS._deziTopic == 3) {
|
|
scene->_talkAction = 3857;
|
|
} else {
|
|
BF_GLOBALS._deziTopic = 3;
|
|
|
|
switch (BF_GLOBALS._dayNumber) {
|
|
case 1:
|
|
if (BF_GLOBALS._deziTopic++ == 0) {
|
|
scene->_talkAction = 3850;
|
|
} else {
|
|
BF_GLOBALS._deziTopic = 3;
|
|
scene->_talkAction = 3851;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (BF_GLOBALS._deziTopic++ == 0) {
|
|
scene->_talkAction = 3852;
|
|
} else {
|
|
BF_GLOBALS._deziTopic = 3;
|
|
scene->_talkAction = 3853;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (BF_GLOBALS._deziTopic++ == 0) {
|
|
scene->_talkAction = 3854;
|
|
} else {
|
|
BF_GLOBALS._deziTopic = 3;
|
|
scene->_talkAction = 3855;
|
|
}
|
|
break;
|
|
case 4:
|
|
BF_GLOBALS._deziTopic = 3;
|
|
scene->_talkAction = 3856;
|
|
break;
|
|
default:
|
|
BF_GLOBALS._deziTopic = 3;
|
|
scene->_talkAction = 3868;
|
|
break;
|
|
}
|
|
}
|
|
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
case INV_PRINT_OUT:
|
|
scene->_talkAction = 3863;
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene385::Exit::startAction(CursorType action, Event &event) {
|
|
ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 100, BF_GLOBALS._player._position.y + 100);
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
|
|
Scene385::Scene385(): SceneExt() {
|
|
_talkAction = 0;
|
|
_jimFlag = false;
|
|
}
|
|
|
|
void Scene385::synchronize(Serializer &s) {
|
|
SceneExt::synchronize(s);
|
|
s.syncAsSint16LE(_talkAction);
|
|
s.syncAsSint16LE(_jimFlag);
|
|
}
|
|
|
|
void Scene385::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
BF_GLOBALS._dayNumber = 1;
|
|
|
|
_exit.setDetails(Rect(0, 162, 320, 167), 385, -1, -1, -1, 1, NULL);
|
|
BF_GLOBALS._sound1.fadeSound(119);
|
|
|
|
loadScene(385);
|
|
setZoomPercents(115, 90, 145, 100);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jake385Speaker);
|
|
_stripManager.addSpeaker(&_jimSpeaker);
|
|
_stripManager.addSpeaker(&_deziSpeaker);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
BF_GLOBALS._player.enableControl();
|
|
|
|
_item3.setDetails(1, 385, 5, -1, -1, 1);
|
|
_item2.setDetails(2, 385, 7, -1, -1, 1);
|
|
_item1.setDetails(3, 385, 6, -1, 6, 1);
|
|
_item5.setDetails(4, 385, 14, -1, -1, 1);
|
|
|
|
_jim.postInit();
|
|
_jim.setVisage(385);
|
|
_jim.setStrip(3);
|
|
_jim.setPosition(Common::Point(304, 113));
|
|
_jim.setDetails(385, 1, -1, 2, 1, (SceneItem *)NULL);
|
|
|
|
_dezi.postInit();
|
|
_dezi.setVisage(385);
|
|
_dezi.setStrip(2);
|
|
_dezi.setPosition(Common::Point(235, 93));
|
|
_dezi.fixPriority(120);
|
|
_dezi.setDetails(385, 3, -1, 2, 1, (SceneItem *)NULL);
|
|
|
|
_door.postInit();
|
|
_door.setVisage(385);
|
|
_door.setPosition(Common::Point(107, 27));
|
|
_door.setDetails(385, 0, -1, -1, 1, (SceneItem *)NULL);
|
|
|
|
BF_GLOBALS._walkRegions.disableRegion(6);
|
|
|
|
if (BF_GLOBALS._sceneManager._previousScene == 390) {
|
|
BF_GLOBALS._player.setPosition(Common::Point(109, 119));
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._player.setPosition(Common::Point(15, 250));
|
|
_sceneMode = 3852;
|
|
setAction(&_sequenceManager, this, 3852, &BF_GLOBALS._player, NULL);
|
|
}
|
|
|
|
_item4.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 385, 4, -1, -1, 1, NULL);
|
|
}
|
|
|
|
void Scene385::signal() {
|
|
switch (_sceneMode) {
|
|
case 3850:
|
|
BF_GLOBALS._sceneManager.changeScene(390);
|
|
break;
|
|
case 3851:
|
|
BF_GLOBALS._sceneManager.changeScene(380);
|
|
break;
|
|
case 3852:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene385::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(EXITFRAME_SW);
|
|
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 Scene385::dispatch() {
|
|
SceneExt::dispatch();
|
|
|
|
if (!_action && (BF_GLOBALS._player._position.y > 162)) {
|
|
// Leaving by exit
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3851;
|
|
setAction(&_sequenceManager, this, 3851, &BF_GLOBALS._player, NULL);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 390 - City Jail
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene390::Action1::signal() {
|
|
Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(1);
|
|
break;
|
|
case 1:
|
|
switch (scene->_sceneMode) {
|
|
case 3900:
|
|
case 3905:
|
|
case 3906:
|
|
case 3913:
|
|
case 3914:
|
|
case 3916:
|
|
case 3917: {
|
|
ADD_PLAYER_MOVER(75, 122);
|
|
break;
|
|
}
|
|
default: {
|
|
ADD_PLAYER_MOVER(147, 133);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
switch (scene->_sceneMode) {
|
|
case 3900:
|
|
case 3905:
|
|
case 3906:
|
|
case 3913:
|
|
case 3914:
|
|
case 3916:
|
|
case 3917: {
|
|
BF_GLOBALS._player.changeAngle(315);
|
|
break;
|
|
}
|
|
default: {
|
|
BF_GLOBALS._player.changeAngle(90);
|
|
break;
|
|
}
|
|
}
|
|
setDelay(1);
|
|
break;
|
|
case 3:
|
|
scene->_stripManager.start(scene->_sceneMode, this);
|
|
break;
|
|
case 4:
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene390::BookingForms::startAction(CursorType action, Event &event) {
|
|
Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if (_flag) {
|
|
SceneItem::display2(390, 16);
|
|
} else if (!BF_GLOBALS.getFlag(onDuty)) {
|
|
SceneItem::display2(390, 22);
|
|
} else if (((BF_GLOBALS._bookmark < bLauraToParamedics) && BF_GLOBALS.getFlag(greenTaken)) ||
|
|
((BF_GLOBALS._bookmark >= bStoppedFrankie) && !BF_GLOBALS.getFlag(frankInJail) && (BF_GLOBALS._dayNumber == 1))) {
|
|
BF_GLOBALS._player.disableControl();
|
|
++_flag;
|
|
scene->_sceneMode = 3902;
|
|
setAction(&scene->_sequenceManager, scene, 3902, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
SceneItem::display2(390, 23);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedHotspotExt::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene390::Green::startAction(CursorType action, Event &event) {
|
|
Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
if (!_flag) {
|
|
++_flag;
|
|
scene->_sceneMode = 3901;
|
|
} else {
|
|
scene->_sceneMode = 3902;
|
|
}
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
case INV_MIRANDA_CARD:
|
|
if (BF_GLOBALS.getFlag(readGreenRights)) {
|
|
SceneItem::display2(390, 15);
|
|
} else {
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_GLOBALS.setFlag(readGreenRights);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3904;
|
|
|
|
scene->setAction(&scene->_sequenceManager, scene, 3904, &BF_GLOBALS._player, this, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObjectExt::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene390::Object2::startAction(CursorType action, Event &event) {
|
|
Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
if (!_flag)
|
|
break;
|
|
|
|
if (!BF_GLOBALS.getFlag(onDuty)) {
|
|
scene->_sceneMode = 3917;
|
|
} else if (BF_GLOBALS.getFlag(fTalkedToBarry) && !BF_GLOBALS.getFlag(fTalkedToLarry)) {
|
|
scene->_sceneMode = 3913;
|
|
} else if (!BF_GLOBALS.getFlag(fTalkedToLarry)) {
|
|
scene->_sceneMode = 3914;
|
|
} else {
|
|
++_flag;
|
|
|
|
if (BF_GLOBALS._sceneObjects->contains(&scene->_green)) {
|
|
scene->_sceneMode = 3900;
|
|
} else if (!BF_GLOBALS._sceneObjects->contains(&scene->_green)) {
|
|
scene->_sceneMode = 3905;
|
|
} else if (BF_GLOBALS.getFlag(fCuffedFrankie)) {
|
|
scene->_sceneMode = 3906;
|
|
} else {
|
|
scene->_sceneMode = 3916;
|
|
}
|
|
}
|
|
|
|
BF_GLOBALS.setFlag(fTalkedToLarry);
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
case INV_BOOKING_GREEN:
|
|
if (BF_GLOBALS._bookmark >= bLauraToParamedics)
|
|
SceneItem::display2(390, 21);
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._bookmark = bLauraToParamedics;
|
|
scene->_sceneMode = 3905;
|
|
|
|
BF_INVENTORY.setObjectScene(INV_GREEN_ID, 390);
|
|
if (BF_GLOBALS.getFlag(fLeftTraceIn910))
|
|
BF_GLOBALS.clearFlag(fLeftTraceIn910);
|
|
|
|
scene->setAction(&scene->_sequenceManager, scene, 3905, &BF_GLOBALS._player, this, NULL);
|
|
BF_GLOBALS.clearFlag(f1015Marina);
|
|
BF_GLOBALS.clearFlag(f1027Marina);
|
|
BF_GLOBALS.clearFlag(f1035Marina);
|
|
}
|
|
return true;
|
|
case INV_BOOKING_FRANKIE:
|
|
case INV_BOOKING_GANG:
|
|
if (BF_GLOBALS.getFlag(frankInJail)) {
|
|
SceneItem::display2(390, 21);
|
|
} else {
|
|
scene->_sceneMode = 3905;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->setAction(&scene->_sequenceManager, scene, 3905, &BF_GLOBALS._player, this, NULL);
|
|
|
|
BF_INVENTORY.setObjectScene(INV_FRANKIE_ID, 390);
|
|
BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 390);
|
|
BF_GLOBALS.clearFlag(frankInJail);
|
|
BF_GLOBALS.clearFlag(f1015Frankie);
|
|
BF_GLOBALS.clearFlag(f1027Frankie);
|
|
BF_GLOBALS.clearFlag(f1035Frankie);
|
|
}
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedObjectExt::startAction(action, event);
|
|
}
|
|
|
|
bool Scene390::Object3::startAction(CursorType action, Event &event) {
|
|
Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case INV_GREEN_ID:
|
|
scene->_sceneMode = 3903;
|
|
setAction(&scene->_sequenceManager, scene, 3902, &BF_GLOBALS._player, NULL);
|
|
remove();
|
|
BF_INVENTORY.setObjectScene(INV_BOOKING_GREEN, 1);
|
|
return true;
|
|
case INV_FRANKIE_ID:
|
|
BF_INVENTORY.setObjectScene(INV_BOOKING_FRANKIE, 1);
|
|
scene->_sceneMode = 3903;
|
|
setAction(&scene->_sequenceManager, scene, 3902, &BF_GLOBALS._player, NULL);
|
|
remove();
|
|
return true;
|
|
case INV_TYRONE_ID:
|
|
scene->_sceneMode = 3903;
|
|
setAction(&scene->_sequenceManager, scene, 3902, &BF_GLOBALS._player, NULL);
|
|
remove();
|
|
BF_INVENTORY.setObjectScene(INV_BOOKING_GANG, 1);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene390::GangMember1::startAction(CursorType action, Event &event) {
|
|
Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
scene->_sceneMode = 3908;
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
case INV_MIRANDA_CARD:
|
|
if (BF_GLOBALS.getFlag(readFrankRights)) {
|
|
SceneItem::display2(390, 15);
|
|
} else {
|
|
BF_GLOBALS.setFlag(readFrankRights);
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
scene->_sceneMode = 3904;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3907, &BF_GLOBALS._player, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene390::GangMember2::startAction(CursorType action, Event &event) {
|
|
Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
scene->_sceneMode = 3909;
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
case INV_MIRANDA_CARD:
|
|
if (BF_GLOBALS.getFlag(readFrankRights)) {
|
|
SceneItem::display2(390, 15);
|
|
} else {
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_GLOBALS.setFlag(readFrankRights);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
scene->_sceneMode = 3904;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3907, &BF_GLOBALS._player, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene390::Door::startAction(CursorType action, Event &event) {
|
|
Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if ((BF_INVENTORY.getObjectScene(INV_BOOKING_GREEN) == 1) && (BF_INVENTORY.getObjectScene(INV_GREEN_ID) == 1)) {
|
|
scene->_stripManager.start(3918, &BF_GLOBALS._stripProxy);
|
|
} else if ((BF_INVENTORY.getObjectScene(INV_BOOKING_FRANKIE) == 1) && (BF_INVENTORY.getObjectScene(INV_FRANKIE_ID) == 1)) {
|
|
scene->_stripManager.start(3918, &BF_GLOBALS._stripProxy);
|
|
} else if ((BF_INVENTORY.getObjectScene(INV_BOOKING_GANG) == 1) && (BF_INVENTORY.getObjectScene(INV_TYRONE_ID) == 1)) {
|
|
scene->_stripManager.start(3918, &BF_GLOBALS._stripProxy);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 3900;
|
|
scene->setAction(&scene->_sequenceManager, scene, 3900, &BF_GLOBALS._player, this, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene390::postInit(TsAGE::SceneObjectList *OwnerList) {
|
|
BF_GLOBALS._sound1.play(17);
|
|
SceneExt::postInit();
|
|
setZoomPercents(105, 85, 130, 100);
|
|
loadScene(390);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
|
_stripManager.addSpeaker(&_jakeJacketSpeaker);
|
|
_stripManager.addSpeaker(&_greenSpeaker);
|
|
_stripManager.addSpeaker(&_jailerSpeaker);
|
|
_stripManager.addSpeaker(&_shooterSpeaker);
|
|
_stripManager.addSpeaker(&_driverSpeaker);
|
|
|
|
if (BF_GLOBALS._dayNumber == 0) {
|
|
BF_GLOBALS.setFlag(onDuty);
|
|
BF_GLOBALS._bookmark = bStoppedFrankie;
|
|
BF_GLOBALS.clearFlag(frankInJail);
|
|
BF_GLOBALS.setFlag(fTalkedToBarry);
|
|
BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
|
|
}
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.setPosition(Common::Point(147, 114));
|
|
BF_GLOBALS._player.setStrip(6);
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
|
|
_object2.postInit();
|
|
_object2.setVisage(395);
|
|
_object2.setStrip(2);
|
|
_object2.setPosition(Common::Point(38, 84));
|
|
_object2.fixPriority(50);
|
|
_object2._flag = 0;
|
|
_object2.setDetails(390, 10, 17, 10, 1, (SceneItem *)NULL);
|
|
|
|
_door.postInit();
|
|
_door.setVisage(390);
|
|
_door.setStrip(2);
|
|
_door.setPosition(Common::Point(151, 18));
|
|
_door.setDetails(390, 5, -1, -1, 1, (SceneItem *)NULL);
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3901;
|
|
setAction(&_sequenceManager, this, 3901, &BF_GLOBALS._player, NULL);
|
|
|
|
if ((BF_GLOBALS._bookmark < bLauraToParamedics) && BF_GLOBALS.getFlag(greenTaken)) {
|
|
_green.postInit();
|
|
_green.setVisage(392);
|
|
_green.setPosition(Common::Point(241, 164));
|
|
_green.fixPriority(153);
|
|
_green.setDetails(390, 12, -1, 13, 1, (SceneItem *)NULL);
|
|
_green._flag = 0;
|
|
}
|
|
|
|
if ((BF_GLOBALS._bookmark >= bStoppedFrankie) && !BF_GLOBALS.getFlag(frankInJail) && (BF_GLOBALS._dayNumber == 1)) {
|
|
_gangMember1.postInit();
|
|
_gangMember1.setVisage(396);
|
|
_gangMember1.setPosition(Common::Point(273, 169));
|
|
_gangMember1.fixPriority(152);
|
|
_gangMember1._flag = 0;
|
|
_gangMember1.setDetails(390, 19, -1, 20, 1, (SceneItem *)NULL);
|
|
|
|
_gangMember2.postInit();
|
|
_gangMember2.setVisage(396);
|
|
_gangMember2.setStrip(2);
|
|
_gangMember2.setPosition(Common::Point(241, 153));
|
|
_gangMember2.fixPriority(152);
|
|
_gangMember2._flag = 0;
|
|
_gangMember2.setDetails(390, 19, -1, 20, 1, (SceneItem *)NULL);
|
|
}
|
|
|
|
_item1.setDetails(Rect(22, 40, 77, 67), 390, 0, -1, 1, 1, NULL);
|
|
_bookingForms.setDetails(Rect(89, 46, 110, 65), 390, 2, -1, -1, 1, NULL);
|
|
_item3.setDetails(Rect(193, 0, 320, 165), 390, 4, -1, -1, 1, NULL);
|
|
_item4.setDetails(Rect(0, 0, 320, 170), 390, 7, -1, -1, 1, NULL);
|
|
}
|
|
|
|
void Scene390::signal() {
|
|
switch (_sceneMode) {
|
|
case 3900:
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(385);
|
|
break;
|
|
case 3901:
|
|
case 3904:
|
|
if ((BF_INVENTORY.getObjectScene(INV_22_SNUB) == 410) && BF_GLOBALS._sceneObjects->contains(&_gangMember1)) {
|
|
_sceneMode = 3906;
|
|
setAction(&_sequenceManager, this, 3906, &BF_GLOBALS._player, &_object2, NULL);
|
|
} else if ((BF_INVENTORY.getObjectScene(INV_GREENS_KNIFE) == 370) && BF_GLOBALS._sceneObjects->contains(&_green)) {
|
|
_sceneMode = 3906;
|
|
setAction(&_sequenceManager, this, 3906, &BF_GLOBALS._player, &_object2, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.enableControl();
|
|
}
|
|
break;
|
|
case 3902:
|
|
SceneItem::display2(390, 3);
|
|
|
|
_object3.postInit();
|
|
_object3.setVisage(390);
|
|
_object3.setPosition(Common::Point(250, 60));
|
|
_object3.fixPriority(255);
|
|
_object3.setDetails(390, 8, -1, 9, 2, (SceneItem *)NULL);
|
|
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3903:
|
|
SceneItem::display2(390, 18);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3905:
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
_object2.remove();
|
|
BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 1);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3906:
|
|
BF_GLOBALS._deathReason = 18;
|
|
BF_GLOBALS._sceneManager.changeScene(666);
|
|
break;
|
|
}
|
|
}
|
|
|
|
} // End of namespace BlueForce
|
|
|
|
} // End of namespace TsAGE
|