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

1697 lines
48 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 "tsage/blue_force/blueforce_scenes4.h"
#include "tsage/blue_force/blueforce_dialogs.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
namespace TsAGE {
namespace BlueForce {
/*--------------------------------------------------------------------------
* Scene 410 - Traffic Stop Gang Members
*
*--------------------------------------------------------------------------*/
// Talk to driver with backup
void Scene410::Action1::signal() {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (scene->_field1FB6++) {
case 0:
if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
setDelay(3);
} else {
scene->_sceneMode = 4101;
scene->_stripManager.start(4103, scene);
}
break;
case 1:
scene->_sceneMode = 0;
scene->_stripManager.start(4104, scene);
break;
case 2:
scene->_sceneMode = 0;
scene->_stripManager.start(4105, scene);
break;
default:
scene->_sceneMode = 0;
scene->_stripManager.start(4106, scene);
break;
}
}
// Talk to passenger with backup
void Scene410::Action2::signal() {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
BF_GLOBALS._player.disableControl();
switch (scene->_talkCount++) {
case 0:
scene->_sceneMode = 4105;
scene->_stripManager.start(BF_GLOBALS.getFlag(fTalkedShooterNoBkup) ? 4123 : 4107, scene);
break;
case 1:
scene->_sceneMode = 4110;
scene->_stripManager.start(4102, scene);
break;
case 2:
scene->_sceneMode = 0;
scene->_stripManager.start(4108, scene);
break;
case 3:
scene->_sceneMode = 0;
scene->_stripManager.start(4109, scene);
break;
case 4:
scene->_sceneMode = 0;
scene->_stripManager.start(4110, scene);
break;
default:
SceneItem::display(410, 11, SET_WIDTH, 300,
SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 10,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 13, SET_EXT_BGCOLOR, 82,
SET_EXT_FGCOLOR, 13, LIST_END);
BF_GLOBALS._player.enableControl();
break;
}
}
// Talk to passenger without backup
void Scene410::Action3::signal() {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2;
scene->setAction(&scene->_sequenceManager1, scene, 4102, &scene->_passenger, &BF_GLOBALS._player, NULL);
} else {
BF_GLOBALS.setFlag(fTalkedShooterNoBkup);
scene->_sceneMode = 0;
scene->_stripManager.start(4107, scene);
}
}
// Talk to driver without backup
void Scene410::Action4::signal() {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2;
scene->setAction(&scene->_sequenceManager1, scene, 4120, &scene->_passenger, &BF_GLOBALS._player, NULL);
} else {
BF_GLOBALS._player.disableControl();
BF_GLOBALS.setFlag(fTalkedDriverNoBkup);
scene->_sceneMode = 4101;
scene->_stripManager.start(4103, scene);
}
}
// Talk to passenger
void Scene410::Action5::signal() {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
if (scene->_field1FC4 == 0) {
ADD_PLAYER_MOVER(114, 133);
} else {
ADD_PLAYER_MOVER(195, 139);
}
break;
case 1:
BF_GLOBALS._player.updateAngle(scene->_passenger._position);
setDelay(3);
break;
case 2:
setDelay(3);
break;
case 3:
if (BF_GLOBALS.getFlag(fCalledBackup))
scene->setAction(&scene->_action2);
else
scene->setAction(&scene->_action3);
remove();
break;
default:
break;
}
}
// Talk to driver
void Scene410::Action6::signal() {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
if (scene->_field1FC4 == 0) {
ADD_PLAYER_MOVER(114, 133);
} else {
ADD_PLAYER_MOVER(126, 99);
}
break;
case 1:
BF_GLOBALS._player.updateAngle(scene->_driver._position);
setDelay(3);
break;
case 2:
setDelay(3);
break;
case 3:
if (BF_GLOBALS.getFlag(fCalledBackup))
scene->setAction(&scene->_action1);
else
scene->setAction(&scene->_action4);
remove();
break;
default:
break;
}
}
void Scene410::Action7::signal() {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
BF_GLOBALS._player.disableControl();
setDelay(2);
break;
case 1:
BF_GLOBALS._bookmark = bStoppedFrankie;
BF_GLOBALS.set2Flags(f1098Frankie);
BF_GLOBALS.clearFlag(f1098Marina);
scene->_stripManager.start(4113, this);
break;
case 2:
case 4:
setDelay(2);
break;
case 3:
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
setAction(&scene->_sequenceManager1, this, 4112, &scene->_driver, &scene->_passenger,
&scene->_harrison, NULL);
break;
case 5:
T2_GLOBALS._uiElements.addScore(30);
setAction(&scene->_sequenceManager1, this, 4118, &BF_GLOBALS._player, NULL);
BF_GLOBALS._player.disableControl();
break;
case 6:
scene->_sceneMode = 3;
scene->signal();
break;
default:
break;
}
}
/*--------------------------------------------------------------------------*/
bool Scene410::Motorcycle::startAction(CursorType action, Event &event) {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
if (!BF_GLOBALS.getFlag(fCalledBackup)) {
scene->_sceneMode = 4103;
scene->signal();
} else if (BF_GLOBALS.getFlag(fSearchedTruck) && !BF_GLOBALS._sceneObjects->contains(&scene->_harrison)) {
scene->_sceneMode = 4103;
scene->signal();
} else if (scene->_field1FBC != 0) {
SceneItem::display2(410, 12);
} else {
scene->_sceneMode = 4103;
scene->signal();
}
return true;
default:
return NamedHotspot::startAction(action, event);
}
}
bool Scene410::TruckFront::startAction(CursorType action, Event &event) {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
if ((BF_GLOBALS._bookmark < bStoppedFrankie) && (!scene->_field1FBC || !scene->_field1FBA))
break;
else if (BF_GLOBALS.getFlag(fSearchedTruck))
SceneItem::display2(410, 13);
else if (BF_GLOBALS.getFlag(fGangInCar)) {
T2_GLOBALS._uiElements.addScore(30);
scene->_sceneMode = 4118;
scene->signal();
} else {
scene->setAction(&scene->_action7);
}
return true;
default:
break;
}
return NamedHotspot::startAction(action, event);
}
/*--------------------------------------------------------------------------*/
bool Scene410::Driver::startAction(CursorType action, Event &event) {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
if (!BF_GLOBALS.getFlag(fCalledBackup)) {
if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
scene->setAction(&scene->_action4);
} else {
SceneItem::display2(410, 7);
}
} else if (!scene->_field1FBC) {
SceneItem::display2(410, 7);
} else if (!scene->_field1FC0) {
scene->_sceneMode = 4124;
scene->_field1FC0 = 1;
T2_GLOBALS._uiElements.addScore(30);
scene->signal();
} else {
break;
}
return true;
case CURSOR_TALK:
BF_GLOBALS._player.setAction(&scene->_action6);
return true;
case INV_HANDCUFFS:
if (BF_GLOBALS.getFlag(fCalledBackup)) {
if ((scene->_talkCount < 5) || (scene->_field1FB6 < 1) || (scene->_field1FBC != 0))
break;
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4123;
scene->_stripManager.start(4125, scene);
scene->_field1FBC = 1;
T2_GLOBALS._uiElements.addScore(30);
} else {
if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
scene->setAction(&scene->_action4);
} else {
break;
}
}
return true;
case INV_TICKET_BOOK:
if (!BF_GLOBALS.getFlag(fDriverOutOfTruck)) {
return startAction(CURSOR_TALK, event);
} else if (!scene->_field1FC4) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2;
scene->setAction(&scene->_sequenceManager1, scene, 4120, &scene->_passenger, &BF_GLOBALS._player, NULL);
} else if ((scene->_field1FBC != 0) || (scene->_field1FC2 != 0)) {
break;
} else {
scene->_field1FC2 = 1;
T2_GLOBALS._uiElements.addScore(30);
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4127;
scene->setAction(&scene->_sequenceManager1, scene, 4127, &BF_GLOBALS._player, &scene->_driver, NULL);
}
return true;
case INV_MIRANDA_CARD:
if (scene->_field1FBC == 0)
return false;
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 = 0;
// TODO: Original code pushes a copy of the entirety of object1 onto stack
scene->setAction(&scene->_sequenceManager1, scene, 4126, &BF_GLOBALS._player, &scene->_driver, NULL);
}
return true;
default:
break;
}
return NamedObject::startAction(action, event);
}
bool Scene410::Passenger::startAction(CursorType action, Event &event) {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
if (!BF_GLOBALS.getFlag(fCalledBackup)) {
if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup))
scene->setAction(&scene->_action3);
else
SceneItem::display(410, 5, SET_WIDTH, 300,
SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 96, SET_EXT_BGCOLOR, 99,
SET_EXT_FGCOLOR, 13, LIST_END);
} else if (!scene->_field1FBA) {
SceneItem::display(410, 5, SET_WIDTH, 300,
SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 96, SET_EXT_BGCOLOR, 99,
SET_EXT_FGCOLOR, 13, LIST_END);
} else if (!scene->_field1FBE) {
scene->_sceneMode = 4121;
scene->_field1FBE = 1;
T2_GLOBALS._uiElements.addScore(50);
scene->signal();
} else
break;
return true;
case CURSOR_TALK:
scene->setAction(&scene->_action5);
return true;
case INV_HANDCUFFS:
if (BF_GLOBALS.getFlag(fCalledBackup)) {
if ((scene->_talkCount < 5) || (scene->_field1FBA != 0))
break;
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 9;
Common::Point destPos(195, 139);
PlayerMover *mover = new PlayerMover();
BF_GLOBALS._player.addMover(mover, &destPos, scene);
} else if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
scene->setAction(&scene->_action3);
} else {
break;
}
return true;
case INV_MIRANDA_CARD:
if (!scene->_field1FBA)
break;
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 = 0;
scene->setAction(&scene->_sequenceManager1, scene, 4125, &BF_GLOBALS._player,
&scene->_passenger, NULL);
}
return true;
default:
break;
}
return NamedObject::startAction(action, event);
}
bool Scene410::Harrison::startAction(CursorType action, Event &event) {
Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_TALK:
if (BF_GLOBALS._bookmark == bStoppedFrankie) {
if (BF_GLOBALS.getFlag(fSearchedTruck)) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 8;
Common::Point destPos(147, 143);
PlayerMover *mover = new PlayerMover();
BF_GLOBALS._player.addMover(mover, &destPos, scene);
} else {
SceneItem::display(350, 13, SET_WIDTH, 300,
SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 32, SET_EXT_BGCOLOR, 49,
SET_EXT_FGCOLOR, 13, LIST_END);
}
} else if ((scene->_field1FBA != 0) && (scene->_field1FBC != 0)) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4112;
scene->_stripManager.start(4113, scene);
BF_GLOBALS._bookmark = bStoppedFrankie;
BF_GLOBALS.set2Flags(f1098Frankie);
BF_GLOBALS.clearFlag(f1098Marina);
} else if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1) ||
(!scene->_field1FBA && (scene->_talkCount < 5))) {
SceneItem::display(350, 13, SET_WIDTH, 300,
SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left,
SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 32, SET_EXT_BGCOLOR, 49,
SET_EXT_FGCOLOR, 13, LIST_END);
} else if (!scene->_field1FBA) {
BF_GLOBALS._player.disableControl();
scene->_field1FBA = 1;
scene->_field1FBE = 1;
BF_GLOBALS._walkRegions.enableRegion(22);
scene->_sceneMode = 4122;
scene->_stripManager.start(4112, scene);
} else if (scene->_field1FB6 < 1) {
break;
} else if (scene->_field1FBC != 0) {
error("Error - want to cuff driver, but he's cuffed already");
} else {
BF_GLOBALS._player.disableControl();
scene->_field1FBC = 1;
scene->_field1FC0 = 1;
BF_GLOBALS._walkRegions.enableRegion(22);
scene->_sceneMode = 4109;
scene->_stripManager.start(4112, scene);
}
return true;
default:
break;
}
return NamedObject::startAction(action, event);
}
/*--------------------------------------------------------------------------*/
Scene410::Scene410(): SceneExt() {
_field1FB6 = _talkCount = _field1FBA = _field1FBC = 0;
_field1FBE = _field1FC0 = _field1FC2 = _field1FC4 = 0;
}
void Scene410::synchronize(Serializer &s) {
SceneExt::synchronize(s);
s.syncAsSint16LE(_field1FB6);
s.syncAsSint16LE(_talkCount);
s.syncAsSint16LE(_field1FBA);
s.syncAsSint16LE(_field1FBC);
s.syncAsSint16LE(_field1FBE);
s.syncAsSint16LE(_field1FC0);
s.syncAsSint16LE(_field1FC2);
s.syncAsSint16LE(_field1FC4);
}
void Scene410::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(410);
setZoomPercents(74, 75, 120, 100);
if (BF_GLOBALS._sceneManager._previousScene != 60)
_sound1.fadeSound(11);
BF_GLOBALS._driveToScene = 64;
BF_GLOBALS._mapLocationId = 64;
BF_GLOBALS.setFlag(fArrivedAtGangStop);
_stripManager.addSpeaker(&_gameTextSpeaker);
_stripManager.addSpeaker(&_jakeUniformSpeaker);
_stripManager.addSpeaker(&_harrisonSpeaker);
_stripManager.addSpeaker(&_shooterSpeaker);
_stripManager.addSpeaker(&_driverSpeaker);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setVisage(1341);
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.changeAngle(90);
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
BF_GLOBALS._player.setPosition(Common::Point(114, 133));
BF_GLOBALS._player.changeZoom(-1);
_motorcycle.setDetails(8, 410, 15, -1, -1, 1);
_passenger.postInit();
_passenger.setVisage(415);
_passenger.setStrip(1);
_passenger.setPosition(Common::Point(278, 92));
_passenger.setDetails(410, 4, -1, 5, 1, (SceneItem *)NULL);
_driver.postInit();
_driver.setVisage(416);
_driver.setStrip(2);
_driver.setPosition(Common::Point(244, 85));
_driver.setDetails(410, 6, -1, 7, 1, (SceneItem *)NULL);
_driver.changeZoom(-1);
_object5.postInit();
_object5.setVisage(410);
_object5.setStrip(2);
_object5.setPosition(Common::Point(282, 96));
_object6.postInit();
_object6.setVisage(410);
_object6.setStrip(4);
_object6.setPosition(Common::Point(240, 43));
_truckFront.setDetails(6, 410, 3, -1, -1, 1);
_truckBack.setDetails(7, 410, 3, -1, -1, 1);
switch (BF_GLOBALS._sceneManager._previousScene) {
case 415:
BF_GLOBALS.setFlag(fSearchedTruck);
BF_GLOBALS._player.setPosition(Common::Point(210, 90));
_passenger.remove();
_driver.remove();
BF_GLOBALS._walkRegions.disableRegion(21);
BF_GLOBALS._walkRegions.disableRegion(22);
_harrison.postInit();
_harrison.setVisage(343);
_harrison.setObjectWrapper(new SceneObjectWrapper());
_harrison.animate(ANIM_MODE_1, NULL);
_harrison.setDetails(350, 12, 13, 14, 1, (SceneItem *)NULL);
_harrison.setPosition(Common::Point(97, 185));
_harrison.changeZoom(-1);
_patrolCar.postInit();
_patrolCar.setVisage(410);
_patrolCar.setDetails(410, 8, 9, 10, 1, (SceneItem *)NULL);
_patrolCar.fixPriority(148);
_patrolCar.setPosition(Common::Point(39, 168));
_field1FC4 = 1;
_sceneMode = 0;
signal();
break;
case 60:
if (BF_GLOBALS.getFlag(fSearchedTruck)) {
_passenger.remove();
_driver.remove();
_sceneMode = 0;
} else {
_field1FC4 = BF_GLOBALS._v50CC8;
_field1FBA = BF_GLOBALS._v50CC2;
_talkCount = BF_GLOBALS._v50CC6;
_field1FB6 = BF_GLOBALS._v50CC4;
_passenger.setVisage(418);
_passenger.setStrip(6);
_passenger.setPosition(Common::Point(227, 137));
if (_talkCount > 0) {
_passenger.setVisage(415);
_passenger.setStrip(2);
_passenger.setFrame(5);
}
if (_field1FBA) {
_passenger.setVisage(415);
_passenger.setStrip(6);
_passenger.setFrame(8);
}
BF_GLOBALS._walkRegions.disableRegion(16);
if (BF_GLOBALS.getFlag(fDriverOutOfTruck)) {
_driver.setVisage(417);
_driver.setStrip(1);
_driver.setPosition(Common::Point(152, 97));
BF_GLOBALS._walkRegions.disableRegion(7);
}
if (BF_GLOBALS.getFlag(fCalledBackup)) {
BF_GLOBALS._walkRegions.disableRegion(21);
BF_GLOBALS._walkRegions.disableRegion(22);
_harrison.postInit();
_harrison.setVisage(343);
_harrison.setObjectWrapper(new SceneObjectWrapper());
_harrison.animate(ANIM_MODE_1, NULL);
_harrison.setDetails(350, 12, 13, 14, 1, (SceneItem *)NULL);
BF_GLOBALS._sceneItems.addBefore(&_driver, &_harrison);
_harrison.setPosition(Common::Point(-10, 124));
_harrison.changeZoom(-1);
_patrolCar.postInit();
_patrolCar.setVisage(410);
_patrolCar.setDetails(410, 8, 9, 10, 1, (SceneItem *)NULL);
_patrolCar.fixPriority(148);
if (_field1FC4) {
_harrison.setPosition(Common::Point(108, 112));
_patrolCar.fixPriority(148);
_patrolCar.setPosition(Common::Point(39, 168));
_sceneMode = 0;
} else {
_sceneMode = 4104;
}
} else {
_sceneMode = 0;
}
_field1FC4 = 1;
}
break;
case 50:
default:
BF_GLOBALS.setFlag(onDuty);
_sound1.play(21);
_sceneMode = 4100;
break;
}
signal();
_background.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 410, 0, 1, 2, 1, NULL);
}
void Scene410::signal() {
switch (_sceneMode) {
case 1:
BF_GLOBALS.set2Flags(f1097Frankie);
BF_GLOBALS.clearFlag(f1097Marina);
BF_GLOBALS._v50CC8 = _field1FC4;
BF_GLOBALS._v50CC2 = _field1FBA;
BF_GLOBALS._v50CC6 = _talkCount;
BF_GLOBALS._v50CC4 = _field1FB6;
BF_GLOBALS._sceneManager.changeScene(60);
break;
case 2:
BF_GLOBALS._deathReason = 3;
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._sceneManager.changeScene(666);
break;
case 3:
BF_GLOBALS._sceneManager.changeScene(415);
break;
case 5:
BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 315);
_sceneMode = 0;
BF_GLOBALS.set2Flags(f1015Frankie);
BF_GLOBALS.clearFlag(f1015Marina);
signal();
break;
case 6:
BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
BF_INVENTORY.setObjectScene(INV_FRANKIE_ID, 1);
BF_GLOBALS.set2Flags(f1027Frankie);
BF_GLOBALS.clearFlag(f1027Marina);
_sceneMode = 0;
signal();
break;
case 7:
BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 1);
_sceneMode = 0;
signal();
break;
case 8:
BF_GLOBALS._walkRegions.enableRegion(22);
BF_GLOBALS._player.changeAngle(225);
_harrison.changeAngle(45);
_sceneMode = 4114;
_stripManager.start(4120, this);
break;
case 9:
_sceneMode = 4106;
_stripManager.start(4111, this);
_field1FBA = 1;
BF_GLOBALS.setFlag(fCuffedFrankie);
T2_GLOBALS._uiElements.addScore(30);
break;
case 10:
BF_GLOBALS._player.updateAngle(_harrison._position);
_sceneMode = 0;
break;
case 4100:
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4100, &_passenger, &_object5, NULL);
BF_GLOBALS._walkRegions.disableRegion(16);
break;
case 4101:
// Driver gets out of the car
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4101, &_driver, &_object6, NULL);
BF_GLOBALS.setFlag(fDriverOutOfTruck);
BF_GLOBALS._walkRegions.disableRegion(7);
break;
case 4103:
// Click on moto to ask for backup
BF_GLOBALS._player.disableControl();
_sceneMode = 1;
setAction(&_sequenceManager1, this, 4103, &BF_GLOBALS._player, NULL);
break;
case 4104:
// After call for backup, patrol car is coming
_field1FC4 = 1;
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4104, &_patrolCar, &_harrison, NULL);
break;
case 4105:
// Second guy gets nervous
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4105, &_passenger, NULL);
break;
case 4106:
BF_GLOBALS._player.disableControl();
_sceneMode = 4119;
setAction(&_sequenceManager1, this, 4106, &_passenger, NULL);
break;
case 4107:
BF_GLOBALS._player.disableControl();
_sceneMode = 5;
setAction(&_sequenceManager1, this, 4107, &BF_GLOBALS._player, &_passenger, NULL);
break;
case 4108:
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
BF_GLOBALS._walkRegions.enableRegion(22);
BF_GLOBALS._walkRegions.enableRegion(7);
BF_GLOBALS._walkRegions.enableRegion(16);
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4108, &_harrison, NULL);
break;
case 4109:
// Harrison puts handcuffs to driver
if ((BF_GLOBALS._player._position.x > 116) && (BF_GLOBALS._player._position.x != 195) &&
(BF_GLOBALS._player._position.y != 139)) {
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 195, 139);
}
BF_GLOBALS._walkRegions.enableRegion(22);
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4109, &_driver, &_harrison, NULL);
break;
case 4110:
// Harrisson takes care of the driver
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4110, &_harrison, &_driver, NULL);
break;
case 4112:
BF_GLOBALS.setFlag(fGangInCar);
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
BF_GLOBALS._player.disableControl();
_sceneMode = 4108;
setAction(&_sequenceManager1, this, 4112, &_driver, &_passenger, &_harrison, NULL);
break;
case 4114:
BF_GLOBALS._walkRegions.enableRegion(22);
BF_GLOBALS._player.disableControl();
_sceneMode = 4116;
setAction(&_sequenceManager1, this, 4114, &_harrison, &_patrolCar, NULL);
break;
case 4116:
BF_GLOBALS._walkRegions.enableRegion(21);
BF_GLOBALS._walkRegions.enableRegion(22);
_harrison.remove();
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4116, &_patrolCar, NULL);
break;
case 4118:
BF_GLOBALS._player.disableControl();
_sceneMode = 3;
setAction(&_sequenceManager1, this, 4118, &BF_GLOBALS._player, NULL);
break;
case 4119:
BF_GLOBALS._player.disableControl();
_sceneMode = 4107;
setAction(&_sequenceManager1, this, 4119, &BF_GLOBALS._player, &_passenger, NULL);
break;
case 4121:
BF_GLOBALS._player.disableControl();
_sceneMode = 6;
setAction(&_sequenceManager1, this, 4121, &BF_GLOBALS._player, &_passenger, NULL);
break;
case 4122:
BF_GLOBALS._walkRegions.enableRegion(22);
BF_INVENTORY.setObjectScene(INV_22_SNUB, 0);
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager1, this, 4122, &_passenger, &_harrison, NULL);
break;
case 4123:
BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 0);
BF_GLOBALS._player.disableControl();
_sceneMode = 5;
setAction(&_sequenceManager1, this, 4123, &_driver, &BF_GLOBALS._player, NULL);
break;
case 4124:
BF_GLOBALS._player.disableControl();
_sceneMode = 7;
setAction(&_sequenceManager1, this, 4124, &_driver, &BF_GLOBALS._player, NULL);
break;
case 4127:
SceneItem::display2(410, 16);
BF_GLOBALS._player.enableControl();
break;
case 0:
default:
BF_GLOBALS._player.enableControl();
break;
}
}
void Scene410::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.getFlag(fCalledBackup)) {
if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
if (!_action) {
event.handled = true;
BF_GLOBALS._player.disableControl();
_sceneMode = 2;
setAction(&_sequenceManager1, this, 4102, &_passenger, &BF_GLOBALS._player, NULL);
}
} else if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
if (!_action) {
_sceneMode = 1;
BF_GLOBALS._player.disableControl();
_sceneMode = 2;
setAction(&_sequenceManager1, this, 4120, &_passenger, &BF_GLOBALS._player, NULL);
}
}
}
if (!event.handled)
SceneExt::process(event);
}
void Scene410::dispatch() {
SceneExt::dispatch();
if ((_sceneMode == 4112) || (_sceneMode == 4101)) {
_harrison.updateAngle(_driver._position);
}
}
/*--------------------------------------------------------------------------
* Scene 415 - Searching Truck
*
*--------------------------------------------------------------------------*/
bool Scene415::GunInset::startAction(CursorType action, Event &event) {
Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
if (action == CURSOR_USE) {
if (BF_GLOBALS.getFlag(fGotAutoWeapon)) {
FocusObject::startAction(action, event);
} else {
remove();
scene->_gunAndWig.remove();
}
return true;
} else {
return FocusObject::startAction(action, event);
}
}
void Scene415::GunInset::remove() {
Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
BF_GLOBALS._player.disableControl();
scene->_gunAndWig.remove();
FocusObject::remove();
scene->_sceneMode = 0;
scene->_animatedSeat.animate(ANIM_MODE_6, scene);
}
bool Scene415::GunAndWig::startAction(CursorType action, Event &event) {
Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
NamedObject::startAction(action, event);
BF_INVENTORY.setObjectScene(INV_AUTO_RIFLE, 1);
BF_INVENTORY.setObjectScene(INV_WIG, 1);
BF_GLOBALS.setFlag(fGotAutoWeapon);
T2_GLOBALS._uiElements.addScore(30);
remove();
return true;
case INV_FOREST_RAP:
if (scene->_scoreWigRapFlag)
break;
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 0;
scene->_stripManager.start(4126, scene);
T2_GLOBALS._uiElements.addScore(50);
scene->_scoreWigRapFlag = true;
return true;
default:
break;
}
return NamedObject::startAction(action, event);
}
bool Scene415::BulletsInset::startAction(CursorType action, Event &event) {
Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
if (action == CURSOR_USE) {
if (BF_GLOBALS.getFlag(fGotBulletsFromDash)) {
FocusObject::startAction(action, event);
} else {
remove();
scene->_theBullets.remove();
}
return true;
} else {
return FocusObject::startAction(action, event);
}
}
void Scene415::BulletsInset::remove() {
Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
scene->_theBullets.remove();
FocusObject::remove();
}
bool Scene415::DashDrawer::startAction(CursorType action, Event &event) {
Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) {
scene->showBullets();
return true;
} else {
return NamedObject::startAction(action, event);
}
}
bool Scene415::TheBullets::startAction(CursorType action, Event &event) {
Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
NamedObject::startAction(action, event);
BF_INVENTORY.setObjectScene(INV_22_BULLET, 1);
BF_GLOBALS.setFlag(fGotBulletsFromDash);
T2_GLOBALS._uiElements.addScore(30);
remove();
scene->_dashDrawer.remove();
return true;
case INV_FOREST_RAP:
if (scene->_scoreBulletRapFlag) {
SceneItem::display2(415, 35);
} else {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 0;
scene->_stripManager.start(4122, scene);
T2_GLOBALS._uiElements.addScore(50);
scene->_scoreBulletRapFlag = true;
}
return true;
default:
break;
}
return NamedObject::startAction(action, event);
}
/*--------------------------------------------------------------------------*/
bool Scene415::Lever::startAction(CursorType action, Event &event) {
Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
if (BF_GLOBALS.getFlag(fGotAutoWeapon)) {
SceneItem::display2(415, 20);
} else {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2;
scene->setAction(&scene->_sequenceManager, scene, 4150, &scene->_animatedSeat, NULL);
}
return true;
default:
return NamedHotspot::startAction(action, event);
}
}
/*--------------------------------------------------------------------------*/
Scene415::Scene415(): SceneExt() {
_scoreWigRapFlag = _scoreBulletRapFlag = false;
}
void Scene415::synchronize(Serializer &s) {
SceneExt::synchronize(s);
s.syncAsSint16LE(_scoreWigRapFlag);
s.syncAsSint16LE(_scoreBulletRapFlag);
}
void Scene415::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(415);
_stripManager.addSpeaker(&_jakeRadioSpeaker);
_dashDrawer.postInit();
_dashDrawer.setVisage(411);
_dashDrawer.setStrip(3);
_dashDrawer.setPosition(Common::Point(151, 97));
_dashDrawer.setDetails(415, 22, -1, -1, 1, (SceneItem *)NULL);
_animatedSeat.postInit();
_animatedSeat.setVisage(419);
_animatedSeat.setStrip(1);
_animatedSeat.setPosition(Common::Point(306, 116));
_animatedSeat.fixPriority(80);
_windowLever.setDetails(16, 415, 25, -1, 26, 1);
_item7.setDetails(17, 415, 32, -1, 33, 1);
_seatBelt.setDetails(14, 415, 29, -1, 30, 1);
_lever.setDetails(19, 415, 23, 24, -1, 1);
_seat.setDetails(18, 415, 3, 4, 2, 1);
_dashboard.setDetails(20, 415, 11, 12, 19, 1);
_steeringWheel.setDetails(15, 415, 5, 6, 7, 1);
_horn.setDetails(31, 415, 8, 9, 10, 1);
_item1.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 415, 0, 1, 2, 1, NULL);
BF_GLOBALS._player.enableControl();
BF_GLOBALS._player._canWalk = false;
BF_GLOBALS._events.setCursor(CURSOR_WALK);
signal();
}
void Scene415::signal() {
switch (_sceneMode) {
case 1:
BF_GLOBALS._sceneManager.changeScene(410);
break;
case 2:
showGunAndWig();
_sceneMode = 0;
signal();
break;
case 0:
default:
BF_GLOBALS._player.enableControl();
BF_GLOBALS._player._canWalk = false;
break;
}
}
void Scene415::dispatch() {
SceneExt::dispatch();
if (BF_GLOBALS.getFlag(fGotAutoWeapon) && BF_GLOBALS.getFlag(fGotBulletsFromDash)) {
_sceneMode = 1;
signal();
}
}
void Scene415::showBullets() {
_bulletsInset.postInit();
_bulletsInset.setVisage(411);
_bulletsInset.setStrip(1);
_bulletsInset.setPosition(Common::Point(158, 100));
_bulletsInset.setDetails(415, -1, -1, -1);
_theBullets.postInit();
_theBullets.setVisage(411);
_theBullets.setStrip(1);
_theBullets.setFrame(2);
_theBullets.setPosition(Common::Point(184, 86));
_theBullets.fixPriority(105);
_theBullets.setDetails(415, 16, 17, 18, 1, (SceneItem *)NULL);
BF_GLOBALS._sceneItems.remove(&_theBullets);
BF_GLOBALS._sceneItems.push_front(&_theBullets);
}
void Scene415::showGunAndWig() {
_gunInset.postInit();
_gunInset.setVisage(411);
_gunInset.setStrip(2);
_gunInset.setPosition(Common::Point(158, 100));
_gunInset.setDetails(415, -1, -1, -1);
_gunAndWig.postInit();
_gunAndWig.setVisage(411);
_gunAndWig.setStrip(2);
_gunAndWig.setFrame(2);
_gunAndWig.setPosition(Common::Point(159, 88));
_gunAndWig.fixPriority(105);
_gunAndWig.setDetails(415, 13, 14, 15, 1, (SceneItem *)NULL);
BF_GLOBALS._sceneItems.remove(&_gunAndWig);
BF_GLOBALS._sceneItems.push_front(&_gunAndWig);
}
/*--------------------------------------------------------------------------
* Scene 440 - Outside Alleycat Bowl
*
*--------------------------------------------------------------------------*/
bool Scene440::Doorway::startAction(CursorType action, Event &event) {
Scene440 *scene = (Scene440 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(440, 1);
return true;
case CURSOR_USE:
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4400;
scene->setAction(&scene->_sequenceManager, scene, 4400, &BF_GLOBALS._player, this, &scene->_lyle, NULL);
return true;
default:
return NamedObject::startAction(action, event);
}
}
bool Scene440::Vechile::startAction(CursorType action, Event &event) {
Scene440 *scene = (Scene440 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (BF_GLOBALS.getFlag(fWithLyle)) {
SceneItem::display2(440, 3);
} else {
SceneItem::display2(440, 2);
}
return true;
case CURSOR_USE:
if (BF_GLOBALS.getFlag(fWithLyle)) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4403;
scene->setAction(&scene->_sequenceManager, scene, 4403, &BF_GLOBALS._player, &scene->_lyle, NULL);
} else {
BF_GLOBALS._sceneManager.changeScene(60);
}
return true;
default:
return NamedObject::startAction(action, event);
}
}
bool Scene440::Lyle::startAction(CursorType action, Event &event) {
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(440, 4);
return true;
case CURSOR_TALK:
SceneItem::display2(440, 5);
return true;
default:
return NamedObject::startAction(action, event);
}
}
/*--------------------------------------------------------------------------*/
bool Scene440::Item1::startAction(CursorType action, Event &event) {
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(440, 0);
return true;
default:
return NamedHotspot::startAction(action, event);
}
}
/*--------------------------------------------------------------------------*/
void Scene440::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(440);
setZoomPercents(75, 60, 120, 100);
BF_GLOBALS._sound1.fadeSound(33);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setVisage(303);
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.changeZoom(-1);
BF_GLOBALS._player.disableControl();
BF_GLOBALS._player.setPosition(Common::Point(203, 113));
_vechile.postInit();
_lyle.postInit();
_lyle.setVisage(835);
_lyle.animate(ANIM_MODE_1, NULL);
_lyle.setObjectWrapper(new SceneObjectWrapper());
_lyle.setPosition(Common::Point(-40, -10));
_lyle.changeZoom(-1);
_lyle.hide();
BF_GLOBALS._sceneItems.push_back(&_lyle);
if (BF_GLOBALS.getFlag(fWithLyle)) {
_vechile.setVisage(444);
_vechile.setFrame(2);
_vechile.setPosition(Common::Point(147, 128));
_vechile.fixPriority(114);
BF_GLOBALS._player.setVisage(303);
BF_GLOBALS._player.setPosition(Common::Point(187, 104));
_lyle.setPosition(Common::Point(135, 128));
_lyle.show();
BF_GLOBALS._walkRegions.disableRegion(12);
BF_GLOBALS._walkRegions.disableRegion(13);
} else {
_vechile.setPosition(Common::Point(169, 121));
_vechile.fixPriority(117);
if (BF_GLOBALS.getFlag(onDuty)) {
_vechile.setVisage(440);
_vechile.setStrip(1);
BF_GLOBALS._player.setVisage(304);
BF_GLOBALS._player.setStrip(3);
} else {
_vechile.setVisage(580);
_vechile.setStrip(2);
_vechile.setFrame(3);
BF_GLOBALS._player.setVisage(303);
}
}
BF_GLOBALS._sceneItems.push_back(&_vechile);
BF_GLOBALS._walkRegions.disableRegion(11);
_doorway.postInit();
_doorway.setVisage(440);
_doorway.setStrip(5);
_doorway.setPosition(Common::Point(198, 91));
_doorway.fixPriority(80);
BF_GLOBALS._sceneItems.push_back(&_doorway);
if (BF_GLOBALS._sceneManager._previousScene == 450) {
_lyle.setPosition(Common::Point(143, 93));
_lyle.setStrip(5);
_lyle.fixPriority(90);
_doorway.setFrame(_doorway.getFrameCount());
_sceneMode = 4401;
setAction(&_sequenceManager, this, 4401, &BF_GLOBALS._player, &_doorway, NULL);
} else if (BF_GLOBALS.getFlag(fWithLyle)) {
_sceneMode = 4402;
setAction(&_sequenceManager, this, 4402, &_lyle, NULL);
} else {
BF_GLOBALS._player.enableControl();
}
_item1.setBounds(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y - 1));
BF_GLOBALS._sceneItems.push_back(&_item1);
}
void Scene440::signal() {
switch (_sceneMode) {
case 4400:
BF_GLOBALS._sceneManager.changeScene(450);
break;
case 4401:
BF_GLOBALS._player.fixPriority(-1);
BF_GLOBALS._player.enableControl();
break;
case 4402:
BF_GLOBALS._player.enableControl();
break;
case 4403:
BF_GLOBALS._sceneManager.changeScene(60);
break;
}
}
/*--------------------------------------------------------------------------
* Scene 450 - Inside Alleycat Bowl
*
*--------------------------------------------------------------------------*/
bool Scene450::Weasel::startAction(CursorType action, Event &event) {
Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(450, 0);
return true;
case CURSOR_USE:
SceneItem::display2(450, 1);
return true;
case CURSOR_TALK:
case INV_ID:
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4504;
if (_flag) {
scene->setAction(&scene->_sequenceManager, scene, 4515, &BF_GLOBALS._player, this, NULL);
} else {
++_flag;
scene->setAction(&scene->_sequenceManager, scene, 4504, &BF_GLOBALS._player, this, NULL);
}
return true;
case INV_FOREST_RAP:
BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 450);
BF_GLOBALS._player.disableControl();
T2_GLOBALS._uiElements.addScore(30);
scene->_sceneMode = 4505;
scene->setAction(&scene->_sequenceManager, scene, 4505, &BF_GLOBALS._player, this,
&scene->_counterDoor, &scene->_object2, NULL);
return true;
default:
return NamedObjectExt::startAction(action, event);
}
}
bool Scene450::PinBoy::startAction(CursorType action, Event &event) {
Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(450, 4);
return true;
case CURSOR_USE:
SceneItem::display2(450, 5);
return true;
case CURSOR_TALK:
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4502;
if (BF_GLOBALS.getFlag(onDuty)) {
scene->setAction(&scene->_sequenceManager, scene, 4516, &BF_GLOBALS._player, this, NULL);
} else {
scene->setAction(&scene->_sequenceManager, scene, 4502, &BF_GLOBALS._player, this, NULL);
}
return true;
case INV_NAPKIN:
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4509;
scene->setAction(&scene->_sequenceManager, scene, 4509, &BF_GLOBALS._player, this, NULL);
return true;
default:
return NamedObject::startAction(action, event);
}
}
bool Scene450::Manager::startAction(CursorType action, Event &event) {
Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(450, 6);
return true;
case CURSOR_USE:
SceneItem::display2(450, 7);
return true;
case CURSOR_TALK:
BF_GLOBALS._player.disableControl();
if (BF_GLOBALS.getFlag(takenWeasel) && !BF_GLOBALS.getFlag(gotTrailer450)) {
BF_GLOBALS.setFlag(gotTrailer450);
scene->_sceneMode = 4517;
scene->setAction(&scene->_sequenceManager, scene, 4517, &BF_GLOBALS._player, this,
&scene->_door, NULL);
} else {
animate(ANIM_MODE_8, 1, NULL);
if (scene->_field19AC) {
scene->_sceneMode = 2;
if (scene->_field19AE) {
scene->_stripManager.start(4521, scene);
} else {
scene->_field19AE = 1;
scene->_stripManager.start(4512, scene);
}
} else {
scene->_sceneMode = 4506;
if (scene->_field19AE) {
scene->setAction(&scene->_sequenceManager, scene, 4518, &BF_GLOBALS._player, this, NULL);
} else {
scene->_sceneMode = 4506;
scene->_field19AE = 1;
scene->setAction(&scene->_sequenceManager, scene, 4506, &BF_GLOBALS._player, this, NULL);
}
}
}
return true;
case INV_FOREST_RAP:
SceneItem::display2(450, 19);
return true;
case INV_NAPKIN:
animate(ANIM_MODE_8, 1, NULL);
BF_GLOBALS._player.disableControl();
if (BF_GLOBALS.getFlag(showEugeneNapkin)) {
SceneItem::display2(450, 16);
BF_GLOBALS._player.enableControl();
} else {
BF_GLOBALS.setFlag(showEugeneNapkin);
if (!BF_GLOBALS.getFlag(showEugeneID)) {
scene->_sceneMode = 4513;
scene->setAction(&scene->_sequenceManager, scene, 4513, &BF_GLOBALS._player, this, NULL);
} else if (BF_GLOBALS.getFlag(fMgrCallsWeasel)) {
SceneItem::display2(450, 16);
BF_GLOBALS._player.enableControl();
} else {
T2_GLOBALS._uiElements.addScore(30);
scene->_sceneMode = 4510;
BF_INVENTORY.setObjectScene(INV_NAPKIN, 450);
scene->setAction(&scene->_sequenceManager, scene, 4510, &BF_GLOBALS._player, this, NULL);
}
}
return true;
case INV_ID:
if (BF_GLOBALS.getFlag(takenWeasel)) {
return startAction(CURSOR_TALK, event);
} else {
animate(ANIM_MODE_8, 1, NULL);
BF_GLOBALS._player.disableControl();
if (!BF_GLOBALS.getFlag(showEugeneID))
T2_GLOBALS._uiElements.addScore(30);
BF_GLOBALS.setFlag(showEugeneID);
if ((BF_GLOBALS.getFlag(showRapEugene) || BF_GLOBALS.getFlag(showEugeneNapkin)) &&
!BF_GLOBALS.getFlag(fMgrCallsWeasel)) {
T2_GLOBALS._uiElements.addScore(30);
scene->_sceneMode = 4511;
scene->setAction(&scene->_sequenceManager, scene, 4511, &BF_GLOBALS._player, this, NULL);
} else {
scene->_sceneMode = 4506;
scene->setAction(&scene->_sequenceManager, scene, 4512, &BF_GLOBALS._player, this, NULL);
}
}
return true;
default:
return NamedObject::startAction(action, event);
}
}
/*--------------------------------------------------------------------------*/
bool Scene450::Exit::startAction(CursorType action, Event &event) {
Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
if (event.eventType == EVENT_BUTTON_DOWN) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 4501;
scene->signal();
return true;
} else {
return false;
}
}
/*--------------------------------------------------------------------------*/
Scene450::Scene450(): SceneExt() {
_field19AC = _field19AE = 0;
}
void Scene450::synchronize(Serializer &s) {
SceneExt::synchronize(s);
s.syncAsSint16LE(_field19AC);
s.syncAsSint16LE(_field19AE);
}
void Scene450::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(450);
setZoomPercents(110, 90, 155, 115);
BF_GLOBALS._sound1.fadeSound(13);
_stripManager.addSpeaker(&_gameTextSpeaker);
_stripManager.addSpeaker(&_eugeneSpeaker);
_stripManager.addSpeaker(&_billySpeaker);
_stripManager.addSpeaker(&_weaselSpeaker);
_stripManager.addSpeaker(&_jakeJacketSpeaker);
_stripManager.addSpeaker(&_lyleHatSpeaker);
_stripManager.addSpeaker(&_jakeUniformSpeaker);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1341 : 129);
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
BF_GLOBALS._player.setPosition(Common::Point(-30, 155));
BF_GLOBALS._player.changeZoom(-1);
BF_GLOBALS._player.disableControl();
_door.postInit();
_door.setVisage(450);
_door.setStrip(2);
_door.setPosition(Common::Point(72, 80));
_door.setDetails(450, 15, -1, 13, 1, (SceneItem *)NULL);
_counterDoor.postInit();
_counterDoor.setVisage(450);
_counterDoor.setPosition(Common::Point(39, 104));
_counterDoor.fixPriority(100);
_counterDoor.setDetails(450, 12, -1, 13, 1, (SceneItem *)NULL);
if (BF_GLOBALS._dayNumber != 3) {
_pinBoy.postInit();
_pinBoy.setVisage(463);
_pinBoy.setPosition(Common::Point(138, 121));
_pinBoy.fixPriority(100);
_pinBoy.setFrame(_pinBoy.getFrameCount());
BF_GLOBALS._sceneItems.push_back(&_pinBoy);
} else if (!BF_GLOBALS.getFlag(fWithLyle) || !BF_GLOBALS.getFlag(fGivenNapkin) ||
(BF_INVENTORY.getObjectScene(INV_CARAVAN_KEY) == 1)) {
_pinBoy.postInit();
_pinBoy.setVisage(463);
_pinBoy.setPosition(Common::Point(138, 121));
_pinBoy.fixPriority(100);
_pinBoy.setFrame(_pinBoy.getFrameCount());
BF_GLOBALS._sceneItems.push_back(&_pinBoy);
} else {
_manager.postInit();
_manager.setVisage(467);
_manager.setPosition(Common::Point(138, 121));
_manager.changeZoom(-1);
_manager.fixPriority(100);
BF_GLOBALS._sceneItems.push_back(&_manager);
if (!BF_GLOBALS.getFlag(takenWeasel)) {
_object2.postInit();
_object2.setVisage(469);
_object2.animate(ANIM_MODE_1, NULL);
_object2.setObjectWrapper(new SceneObjectWrapper());
_object2.setPosition(Common::Point(-30, 126));
ADD_MOVER_NULL(_object2, 27, 126);
_object2.changeZoom(-1);
_object2.setDetails(450, 2, 18, 3, 1, (SceneItem *)NULL);
BF_GLOBALS._walkRegions.disableRegion(4);
_weasel.postInit();
_weasel.setVisage(466);
_weasel.animate(ANIM_MODE_1, NULL);
_weasel.setObjectWrapper(new SceneObjectWrapper());
_weasel.setPosition(Common::Point(70, 80));
_weasel.setStrip(5);
_weasel.changeZoom(90);
_weasel.fixPriority(65);
_weasel._flag = 0;
BF_GLOBALS._sceneItems.push_back(&_weasel);
}
}
_sceneMode = 4500;
setAction(&_sequenceManager, this, 4500, &BF_GLOBALS._player, NULL);
_exit.setDetails(Rect(0, 100, 4, 167), 450, -1, -1, -1, 1, NULL);
_counter.setDetails(8, 450, 8, -1, 9, 1);
_shelf.setDetails(Rect(114, 10, 179, 77), 450, 10, -1, 11, 1, NULL);
_interior.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 450, 14, -1, -1, 1, NULL);
}
void Scene450::signal() {
switch (_sceneMode) {
case 450:
case 451:
BF_GLOBALS._sceneManager.changeScene(440);
break;
case 4501:
if (BF_GLOBALS._sceneObjects->contains(&_object2)) {
_sceneMode = 450;
ADD_MOVER(_object2, -20, 135);
} else {
_sceneMode = 451;
ADD_PLAYER_MOVER(0, 160);
}
break;
case 4503:
_weasel.fixPriority(100);
BF_GLOBALS._player.enableControl();
break;
case 4505:
BF_GLOBALS.setFlag(takenWeasel);
_weasel.remove();
_object2.remove();
BF_GLOBALS._walkRegions.enableRegion(4);
BF_GLOBALS._player.enableControl();
break;
case 4507:
case 4510:
case 4511:
BF_GLOBALS.setFlag(fMgrCallsWeasel);
_field19AC = 1;
_sceneMode = 4503;
setAction(&_sequenceManager, this, 4503, &_weasel, &_door, &_manager, NULL);
break;
case 4508:
_manager.remove();
BF_GLOBALS._player.enableControl();
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
break;
case 4517:
BF_GLOBALS.setFlag(gotTrailer450);
BF_INVENTORY.setObjectScene(INV_CARAVAN_KEY, 1);
_sceneMode = 4508;
setAction(&_sequenceManager, this, 4508, &BF_GLOBALS._player, &_manager, &_door, NULL);
break;
default:
BF_GLOBALS._player.enableControl();
break;
}
}
void Scene450::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);
}
}
}
} // End of namespace BlueForce
} // End of namespace TsAGE