mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-20 08:48:13 +00:00
2555 lines
69 KiB
C++
2555 lines
69 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_scenes5.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 550 - Outside Bikini Hut
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene550::Action1::signal() {
|
|
Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(5);
|
|
break;
|
|
case 1:
|
|
scene->_stripManager.start(scene->_sceneMode, this);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene550::Lyle::startAction(CursorType action, Event &event) {
|
|
Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
|
|
(BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
|
|
if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) &&
|
|
(BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
|
|
BF_GLOBALS.setFlag(fToldLyleOfSchedule);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5501;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5514, &BF_GLOBALS._player, this, NULL);
|
|
} else {
|
|
scene->_sceneMode = 0;
|
|
scene->_stripManager.start(5509, scene);
|
|
}
|
|
} else if (BF_GLOBALS._sceneManager._previousScene == 930) {
|
|
scene->_sceneMode = 5512;
|
|
scene->setAction(&scene->_action1);
|
|
} else {
|
|
scene->_sceneMode = BF_INVENTORY.getObjectScene(INV_CARAVAN_KEY) == 1 ? 5513 : 5512;
|
|
scene->setAction(&scene->_action1);
|
|
}
|
|
return true;
|
|
case INV_SCHEDULE:
|
|
BF_GLOBALS.setFlag(fToldLyleOfSchedule);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5501;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5514, &BF_GLOBALS._player, this, NULL);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene550::CaravanDoor::startAction(CursorType action, Event &event) {
|
|
Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(550, 0);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(550, 7);
|
|
return true;
|
|
case INV_CARAVAN_KEY:
|
|
if ((BF_GLOBALS._dayNumber != 3) || !BF_GLOBALS.getFlag(fWithLyle))
|
|
SceneItem::display2(550, 33);
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5500;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5500, &BF_GLOBALS._player, this, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene550::Vechile::startAction(CursorType action, Event &event) {
|
|
Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(550, 3);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (!BF_GLOBALS.getFlag(fWithLyle)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5510;
|
|
scene->setAction(&scene->_sequenceManager, scene, BF_GLOBALS.getFlag(fWithLyle) ? 5510 : 5515,
|
|
&BF_GLOBALS._player, this, NULL);
|
|
} else if (BF_GLOBALS.getFlag(fToldLyleOfSchedule)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 2;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5501, &BF_GLOBALS._player, NULL);
|
|
} else if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
|
|
(BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
|
|
if (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1) {
|
|
scene->_sceneMode = 5501;
|
|
scene->_stripManager.start(5511, scene);
|
|
} else {
|
|
scene->_sceneMode = 0;
|
|
scene->_stripManager.start(5509, scene);
|
|
}
|
|
} else if (BF_GLOBALS._sceneManager._previousScene == 930) {
|
|
scene->_sceneMode = 5512;
|
|
scene->setAction(&scene->_action1);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 2;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5501, &BF_GLOBALS._player, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene550::postInit(SceneObjectList *OwnerList) {
|
|
BF_GLOBALS._sound1.fadeSound(16);
|
|
|
|
if ((BF_GLOBALS._bookmark == bInspectionDone) && !BF_GLOBALS.getFlag(fHasDrivenFromDrunk)) {
|
|
_sceneMode = 1;
|
|
signal();
|
|
return;
|
|
}
|
|
|
|
SceneExt::postInit();
|
|
loadScene(550);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_lyleHatSpeaker);
|
|
_stripManager.addSpeaker(&_jakeJacketSpeaker);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.setPosition(Common::Point(160, 100));
|
|
BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
|
|
BF_GLOBALS._player.enableControl();
|
|
|
|
_caravanDoor.postInit();
|
|
_caravanDoor.setVisage(550);
|
|
_caravanDoor.setPosition(Common::Point(34, 66));
|
|
BF_GLOBALS._sceneItems.push_back(&_caravanDoor);
|
|
|
|
_vechile.postInit();
|
|
_vechile.fixPriority(70);
|
|
|
|
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
BF_GLOBALS._walkRegions.disableRegion(10);
|
|
BF_GLOBALS._walkRegions.disableRegion(11);
|
|
|
|
_vechile.setVisage(444);
|
|
_vechile.setStrip(4);
|
|
_vechile.setFrame2(2);
|
|
_vechile.setPosition(Common::Point(110, 85));
|
|
_vechile.fixPriority(76);
|
|
|
|
_lyle.postInit();
|
|
_lyle.setVisage(835);
|
|
_lyle.setPosition(Common::Point(139, 83));
|
|
_lyle.setDetails(550, 29, 30, 31, 1, (SceneItem *)NULL);
|
|
_lyle.setStrip(8);
|
|
|
|
BF_GLOBALS._player.setVisage(303);
|
|
BF_GLOBALS._player.setPosition(Common::Point(89, 76));
|
|
BF_GLOBALS._player.updateAngle(_lyle._position);
|
|
} else {
|
|
BF_GLOBALS._walkRegions.disableRegion(12);
|
|
|
|
_vechile.setPosition(Common::Point(205, 77));
|
|
_vechile.changeZoom(80);
|
|
|
|
if (BF_GLOBALS.getFlag(onDuty)) {
|
|
_vechile.setVisage(301);
|
|
_vechile.setStrip(1);
|
|
|
|
BF_GLOBALS._player.setVisage(304);
|
|
} else {
|
|
_vechile.setVisage(580);
|
|
_vechile.setStrip(2);
|
|
_vechile.setFrame(2);
|
|
|
|
BF_GLOBALS._player.setVisage(303);
|
|
}
|
|
}
|
|
|
|
BF_GLOBALS._sceneItems.push_back(&_vechile);
|
|
|
|
if (BF_GLOBALS._sceneManager._previousScene == 930) {
|
|
_caravanDoor.setFrame(_caravanDoor.getFrameCount());
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager, this, 5512, &BF_GLOBALS._player, &_caravanDoor, NULL);
|
|
} else if (BF_GLOBALS.getFlag(onDuty)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager, this, 5502, &BF_GLOBALS._player, &_vechile, NULL);
|
|
} else if (!BF_GLOBALS.getFlag(fWithLyle)) {
|
|
BF_GLOBALS._player.setPosition(Common::Point(185, 70));
|
|
} else if (BF_GLOBALS._bookmark == bFlashBackOne) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager, this, 5513, &_lyle, NULL);
|
|
} else {
|
|
_sceneMode = 0;
|
|
}
|
|
|
|
_item2.setDetails(Rect(0, 26, 53, 67), 550, 1, -1, 2, 1, NULL);
|
|
_item3.setDetails(Rect(53, 12, 173, 65), 550, 4, -1, 5, 1, NULL);
|
|
_item1.setDetails(Rect(0, 0, 320, 170), 550, 6, -1, -1, 1, NULL);
|
|
}
|
|
|
|
void Scene550::signal() {
|
|
switch (_sceneMode) {
|
|
case 0:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._sceneManager.changeScene(551);
|
|
break;
|
|
case 2:
|
|
case 5510:
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._driveFromScene = 16;
|
|
BF_GLOBALS._driveToScene = 128;
|
|
BF_GLOBALS._mapLocationId = 128;
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(800);
|
|
break;
|
|
case 5500:
|
|
BF_GLOBALS._sceneManager.changeScene(930);
|
|
break;
|
|
case 5501:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3;
|
|
setAction(&_sequenceManager, this, 5501, &BF_GLOBALS._player, NULL);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 551 - Outside Bikini Hut (Drunk Stop)
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene551::Action2::signal() {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._walkRegions.enableRegion(18);
|
|
BF_GLOBALS._walkRegions.enableRegion(4);
|
|
scene->_field1CD2 = 1;
|
|
|
|
scene->_harrison.setObjectWrapper(new SceneObjectWrapper());
|
|
scene->_harrison.animate(ANIM_MODE_1, NULL);
|
|
|
|
BF_GLOBALS._player.setVisage(304);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
|
|
if (scene->_drunkStanding._flag != 1) {
|
|
ADD_PLAYER_MOVER_THIS(scene->_harrison, 126, 85);
|
|
} else {
|
|
ADD_PLAYER_MOVER_THIS(scene->_harrison, 88, 91);
|
|
}
|
|
break;
|
|
case 1:
|
|
scene->_harrison.updateAngle(BF_GLOBALS._player._position);
|
|
|
|
if (scene->_drunkStanding._flag == 1) {
|
|
BF_GLOBALS._walkRegions.disableRegion(4);
|
|
ADD_PLAYER_MOVER(71, 97);
|
|
} else {
|
|
ADD_PLAYER_MOVER(141, 87);
|
|
}
|
|
break;
|
|
case 2:
|
|
scene->_harrison.updateAngle(BF_GLOBALS._player._position);
|
|
BF_GLOBALS._player.updateAngle(scene->_harrison._position);
|
|
setDelay(10);
|
|
break;
|
|
case 3:
|
|
scene->_stripManager.start(scene->_harrison._flag, this);
|
|
break;
|
|
case 4:
|
|
scene->_field1CD2 = 0;
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene551::Vechile::startAction(CursorType action, Event &event) {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(550, 3);
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (!BF_GLOBALS.getFlag(didDrunk)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 1;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, this, NULL);
|
|
} else if (BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) == 1) {
|
|
BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
|
|
scene->_harrison._flag = 5505;
|
|
scene->setAction(&scene->_action2, scene);
|
|
scene->_sceneMode = 5509;
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 1;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, this, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene551::DrunkStanding::startAction(CursorType action, Event &event) {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(550, 15);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(550, 16);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
SceneItem::display2(550, 17);
|
|
return true;
|
|
case INV_HANDCUFFS:
|
|
scene->_harrison.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS.set2Flags(f1098Drunk);
|
|
BF_GLOBALS.setFlag(didDrunk);
|
|
_flag = 2;
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5509;
|
|
|
|
scene->setAction(&scene->_sequenceManager, scene, 5509, &BF_GLOBALS._player, this, &scene->_harrison, NULL);
|
|
BF_GLOBALS.set2Flags(f1015Drunk);
|
|
return true;
|
|
default:
|
|
return NamedObjectExt::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene551::Drunk::startAction(CursorType action, Event &event) {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
switch (_flag) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 0;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5505, &BF_GLOBALS._player, &scene->_object15, NULL);
|
|
break;
|
|
case 1:
|
|
SceneItem::display2(550, 11);
|
|
break;
|
|
case 2:
|
|
SceneItem::display2(550, 12);
|
|
break;
|
|
case 3:
|
|
SceneItem::display2(550, 27);
|
|
break;
|
|
}
|
|
return true;
|
|
case CURSOR_USE:
|
|
switch (_flag) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
if (BF_GLOBALS.getFlag(fTalkedToDrunkInCar)) {
|
|
scene->_sceneMode = 5508;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5508, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS.setFlag(fTalkedToDrunkInCar);
|
|
scene->_sceneMode = 16;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5504, &BF_GLOBALS._player, &scene->_object15, NULL);
|
|
}
|
|
break;
|
|
case 2:
|
|
SceneItem::display2(550, 13);
|
|
break;
|
|
case 3:
|
|
SceneItem::display2(550, 27);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return true;
|
|
case CURSOR_TALK:
|
|
if (_flag)
|
|
break;
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
if (BF_GLOBALS.getFlag(fTalkedToDrunkInCar)) {
|
|
scene->_sceneMode = 5508;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5508, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
BF_GLOBALS.setFlag(fTalkedToDrunkInCar);
|
|
scene->_sceneMode = 0;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5504, &BF_GLOBALS._player, &scene->_object15, NULL);
|
|
}
|
|
return true;
|
|
case INV_CENTER_PUNCH:
|
|
if (_flag) {
|
|
SceneItem::display2(550, 14);
|
|
} else {
|
|
BF_GLOBALS.set2Flags(f1098Drunk);
|
|
BF_GLOBALS.setFlag(didDrunk);
|
|
_flag = 1;
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5506;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5506, &BF_GLOBALS._player, this,
|
|
&scene->_object12, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedObjectExt::startAction(action, event);
|
|
}
|
|
|
|
bool Scene551::PatrolCarTrunk::startAction(CursorType action, Event &event) {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if (BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) != 1) {
|
|
BF_GLOBALS._walkRegions.enableRegion(18);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 2;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5503, &BF_GLOBALS._player, &scene->_harrison, this, NULL);
|
|
return true;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
|
|
void Scene551::TrunkInset::remove() {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
scene->_trunkKits.remove();
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
scene->_sceneMode = 0;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5516, &scene->_harrison,
|
|
&scene->_patrolCarTrunk, NULL);
|
|
|
|
FocusObject::remove();
|
|
}
|
|
|
|
bool Scene551::TrunkInset::startAction(CursorType action, Event &event) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(550, 18);
|
|
return true;
|
|
case CURSOR_USE:
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene551::TrunkKits::startAction(CursorType action, Event &event) {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
Rect tempRect = _bounds;
|
|
tempRect.collapse(10, 6);
|
|
if (!tempRect.contains(event.mousePos))
|
|
return false;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
switch (_frame) {
|
|
case 1:
|
|
SceneItem::display2(550, 19);
|
|
break;
|
|
case 2:
|
|
SceneItem::display2(550, 20);
|
|
break;
|
|
case 3:
|
|
SceneItem::display2(550, 21);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return true;
|
|
case CURSOR_USE:
|
|
if (event.mousePos.y < _bounds.top) {
|
|
setFrame(1);
|
|
} else if ((event.mousePos.x < (_bounds.left - 25)) && (_frame > 1)) {
|
|
SceneItem::display2(550, 28);
|
|
} else {
|
|
switch (_frame) {
|
|
case 1:
|
|
setFrame(BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) == 1 ? 3 : 2);
|
|
break;
|
|
case 2:
|
|
if (!BF_GLOBALS.getFlag(fShowedBluePrint)) {
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_GLOBALS.setFlag(fShowedBluePrint);
|
|
}
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5520;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5520, &BF_GLOBALS._player, NULL);
|
|
BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 1);
|
|
setFrame(3);
|
|
break;
|
|
case 3:
|
|
setFrame(1);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
case INV_CENTER_PUNCH:
|
|
SceneItem::display2(550, 22);
|
|
BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
|
|
setFrame(2);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene551::Harrison::startAction(CursorType action, Event &event) {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(550, 23);
|
|
return true;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(550, 24);
|
|
return true;
|
|
case CURSOR_TALK:
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
if (scene->_drunkStanding._flag == 1) {
|
|
_flag = 5508;
|
|
} else if (!scene->_field1CD0) {
|
|
_flag = 5502;
|
|
} else {
|
|
scene->_field1CD0 = 1;
|
|
_flag = 5500;
|
|
}
|
|
scene->setAction(&scene->_action2);
|
|
return true;
|
|
default:
|
|
return NamedObjectExt::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene551::Item4::startAction(CursorType action, Event &event) {
|
|
Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(550, 34);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 1;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, &scene->_vechile2, NULL);
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene551::Scene551(): Scene550() {
|
|
_field1CD0 = _field1CD2 = 0;
|
|
}
|
|
|
|
void Scene551::synchronize(Serializer &s) {
|
|
Scene550::synchronize(s);
|
|
s.syncAsSint16LE(_field1CD0);
|
|
s.syncAsSint16LE(_field1CD2);
|
|
}
|
|
|
|
void Scene551::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(550);
|
|
BF_GLOBALS._walkRegions.load(551);
|
|
BF_GLOBALS._sound1.fadeSound(16);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
|
_stripManager.addSpeaker(&_gigglesSpeaker);
|
|
_stripManager.addSpeaker(&_drunkSpeaker);
|
|
|
|
if (BF_GLOBALS.getFlag(fHasLeftDrunk)) {
|
|
_item4.setBounds(Rect(0, 0, 320, 170));
|
|
BF_GLOBALS._sceneItems.push_back(&_item4);
|
|
}
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.setPosition(Common::Point(160, 100));
|
|
BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
|
|
BF_GLOBALS._player.enableControl();
|
|
|
|
_caravanDoor.postInit();
|
|
_caravanDoor.setVisage(550);
|
|
_caravanDoor.setPosition(Common::Point(34, 66));
|
|
BF_GLOBALS._sceneItems.push_back(&_caravanDoor);
|
|
|
|
_vechile2.postInit();
|
|
_vechile2.setVisage(301);
|
|
_vechile2.setStrip(1);
|
|
_vechile2.setPosition(Common::Point(205, 77));
|
|
_vechile2.fixPriority(70);
|
|
_vechile2.changeZoom(80);
|
|
BF_GLOBALS._sceneItems.push_back(&_vechile2);
|
|
|
|
BF_GLOBALS._walkRegions.disableRegion(14);
|
|
|
|
_drunk.postInit();
|
|
_drunk.setVisage(550);
|
|
_drunk.setStrip(3);
|
|
_drunk.fixPriority(84);
|
|
_drunk.setPosition(Common::Point(29, 92));
|
|
_drunk._flag = 0;
|
|
BF_GLOBALS._sceneItems.push_back(&_drunk);
|
|
|
|
_object12.postInit();
|
|
_object12.setVisage(550);
|
|
_object12.setStrip(7);
|
|
_object12.setPosition(Common::Point(29, 92));
|
|
_object12.hide();
|
|
|
|
_object13.postInit();
|
|
_object13.setVisage(550);
|
|
_object13.setStrip(2);
|
|
_object13.setPosition(Common::Point(29, 92));
|
|
_object13.fixPriority(82);
|
|
_object13.setDetails(550, 8, -1, 9, 1, (SceneItem *)NULL);
|
|
|
|
if (BF_GLOBALS.getFlag(didDrunk)) {
|
|
_drunk._flag = 3;
|
|
_drunk.setStrip(3);
|
|
|
|
_object12.show();
|
|
_object12.setDetails(550, 25, -1, 26, 1, (SceneItem *)NULL);
|
|
BF_GLOBALS._sceneItems.push_front(&_object12);
|
|
|
|
_harrison.postInit();
|
|
_harrison.setVisage(304);
|
|
_harrison.setPosition(Common::Point(67, 102));
|
|
_harrison.setStrip(8);
|
|
_harrison.setFrame(1);
|
|
_harrison._flag = 1;
|
|
BF_GLOBALS._sceneItems.push_back(&_harrison);
|
|
|
|
_object14.postInit();
|
|
_object14.setVisage(550);
|
|
_object14.setStrip(5);
|
|
_object14.animate(ANIM_MODE_2, NULL);
|
|
_object14.fixPriority(80);
|
|
_object14.setPosition(Common::Point(122, 57));
|
|
|
|
_object11.postInit();
|
|
_object11.setVisage(550);
|
|
_object11.setStrip(2);
|
|
_object11.setFrame(2);
|
|
_object11.setPosition(Common::Point(116, 84));
|
|
_object11.fixPriority(77);
|
|
_object11.setDetails(550, 32, -1, 10, 1, (SceneItem *)NULL);
|
|
|
|
_drunkStanding.postInit();
|
|
_drunkStanding._flag = 0;
|
|
_drunkStanding.setVisage(554);
|
|
_drunkStanding.setStrip(7);
|
|
_drunkStanding.setFrame(8);
|
|
_drunkStanding.fixPriority(83);
|
|
_drunkStanding.setPosition(Common::Point(57, 99));
|
|
} else {
|
|
_harrison.postInit();
|
|
_harrison.setVisage(304);
|
|
_harrison.setPosition(Common::Point(126, 83));
|
|
_harrison.setObjectWrapper(new SceneObjectWrapper());
|
|
_harrison._flag = 0;
|
|
_harrison._moveDiff = Common::Point(2, 1);
|
|
BF_GLOBALS._sceneItems.push_back(&_harrison);
|
|
|
|
_object14.postInit();
|
|
_object14.setVisage(550);
|
|
_object14.setStrip(5);
|
|
_object14.animate(ANIM_MODE_2, NULL);
|
|
_object14.fixPriority(80);
|
|
_object14.setPosition(Common::Point(122, 57));
|
|
|
|
_patrolCarTrunk.postInit();
|
|
_patrolCarTrunk.setVisage(550);
|
|
_patrolCarTrunk.setStrip(4);
|
|
_patrolCarTrunk.setFrame(1);
|
|
_patrolCarTrunk.setPosition(Common::Point(149, 69));
|
|
_patrolCarTrunk.fixPriority(79);
|
|
_patrolCarTrunk.setDetails(550, 18, -1, 9, 1, (SceneItem *)NULL);
|
|
|
|
_object11.postInit();
|
|
_object11.setVisage(550);
|
|
_object11.setStrip(2);
|
|
_object11.setFrame(2);
|
|
_object11.setPosition(Common::Point(116, 84));
|
|
_object11.fixPriority(77);
|
|
_object11.setDetails(550, 32, -1, 10, 1, (SceneItem *)NULL);
|
|
|
|
_drunkStanding.postInit();
|
|
_drunkStanding._flag = 0;
|
|
_drunkStanding.setVisage(554);
|
|
_drunkStanding.fixPriority(83);
|
|
_drunkStanding.setPosition(Common::Point(47, 93));
|
|
|
|
_object15.postInit();
|
|
_object15.setVisage(552);
|
|
_object15.setPosition(Common::Point(59, 94));
|
|
_object15.fixPriority(200);
|
|
_object15.hide();
|
|
}
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 3;
|
|
setAction(&_sequenceManager, this, 5502, &BF_GLOBALS._player, &_vechile2, NULL);
|
|
|
|
_item2.setDetails(Rect(0, 26, 53, 67), 550, 1, -1, 2, 1, NULL);
|
|
_item3.setDetails(Rect(53, 12, 173, 65), 550, 4, -1, 5, 1, NULL);
|
|
_item1.setDetails(Rect(0, 0, 320, 170), 550, 6, -1, -1, 1, NULL);
|
|
}
|
|
|
|
void Scene551::signal() {
|
|
switch (_sceneMode) {
|
|
case 0:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 1:
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS.set2Flags(f1027Drunk);
|
|
BF_GLOBALS.set2Flags(f1097Drunk);
|
|
|
|
if (BF_GLOBALS.getFlag(didDrunk))
|
|
BF_GLOBALS.setFlag(f1098Drunk);
|
|
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._walkRegions.disableRegion(18);
|
|
|
|
_trunkInset.postInit();
|
|
_trunkInset.setVisage(553);
|
|
_trunkInset.setPosition(Common::Point(59, 92));
|
|
_trunkInset.fixPriority(252);
|
|
BF_GLOBALS._sceneItems.push_front(&_trunkInset);
|
|
|
|
_trunkKits.postInit();
|
|
_trunkKits.setVisage(553);
|
|
_trunkKits.setStrip(2);
|
|
_trunkKits.setPosition(Common::Point(57, 73));
|
|
_trunkKits.fixPriority(254);
|
|
BF_GLOBALS._sceneItems.push_front(&_trunkKits);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 3:
|
|
if (BF_GLOBALS.getFlag(talkedToHarrisAboutDrunk)) {
|
|
BF_GLOBALS._player.enableControl();
|
|
} else {
|
|
BF_GLOBALS.setFlag(talkedToHarrisAboutDrunk);
|
|
_harrison._flag = 5500;
|
|
setAction(&_action2);
|
|
}
|
|
break;
|
|
case 5506:
|
|
_harrison.setObjectWrapper(new SceneObjectWrapper());
|
|
ADD_PLAYER_MOVER_NULL(_harrison, 88, 91);
|
|
|
|
_object12.show();
|
|
_object12.setDetails(550, 25, -1, 26, 1, (SceneItem *)NULL);
|
|
BF_GLOBALS._sceneItems.push_front(&_object12);
|
|
BF_GLOBALS._player.enableControl();
|
|
|
|
_sceneMode = 5507;
|
|
setAction(&_sequenceManager, this, 5507, &BF_GLOBALS._player, &_drunk, &_drunkStanding, NULL);
|
|
break;
|
|
case 5507:
|
|
BF_GLOBALS._walkRegions.disableRegion(2);
|
|
BF_GLOBALS._walkRegions.disableRegion(4);
|
|
|
|
_drunkStanding._flag = 1;
|
|
BF_GLOBALS._sceneItems.push_front(&_drunkStanding);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 5508:
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager, this, 5505, &BF_GLOBALS._player, &_object15, NULL);
|
|
break;
|
|
case 5509:
|
|
BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 5510;
|
|
setAction(&_sequenceManager, this, 5510, &BF_GLOBALS._player, &_vechile2, NULL);
|
|
break;
|
|
case 5510:
|
|
BF_GLOBALS._bookmark = bCalledToDrunkStop;
|
|
if (BF_GLOBALS.getFlag(didDrunk))
|
|
BF_GLOBALS.setFlag(fHasLeftDrunk);
|
|
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 5520:
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
_harrison.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
default:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene551::dispatch() {
|
|
SceneExt::dispatch();
|
|
|
|
if ((_drunkStanding._flag != 2) && !_harrison._mover && !_field1CD2)
|
|
_harrison.updateAngle(BF_GLOBALS._player._position);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 550 - Study
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene560::Action1::signal() {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(10);
|
|
break;
|
|
case 1:
|
|
ADD_MOVER(BF_GLOBALS._player, 105, 140);
|
|
break;
|
|
case 2:
|
|
scene->_deskChair.hide();
|
|
|
|
BF_GLOBALS._player.changeZoom(81);
|
|
BF_GLOBALS._player.setVisage(561);
|
|
BF_GLOBALS._player.setStrip(2);
|
|
BF_GLOBALS._player.setFrame(1);
|
|
BF_GLOBALS._player.setPosition(Common::Point(96, 138));
|
|
BF_GLOBALS._player.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 3:
|
|
scene->_deskChair.setVisage(561);
|
|
scene->_deskChair.setFrame(BF_GLOBALS._player._frame);
|
|
scene->_deskChair.setStrip(BF_GLOBALS._player._strip);
|
|
scene->_deskChair.setPosition(BF_GLOBALS._player._position);
|
|
|
|
scene->_field380 = true;
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene560::Action2::signal() {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(10);
|
|
break;
|
|
case 1:
|
|
scene->_deskChair.hide();
|
|
|
|
BF_GLOBALS._player.setVisage(561);
|
|
BF_GLOBALS._player.setStrip(2);
|
|
BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_6, this);
|
|
break;
|
|
case 2:
|
|
scene->_field380 = false;
|
|
scene->_deskChair.setPosition(Common::Point(81, 149));
|
|
scene->_deskChair.setVisage(561);
|
|
scene->_deskChair.setStrip(3);
|
|
scene->_deskChair.setFrame(1);
|
|
scene->_deskChair.fixPriority(151);
|
|
scene->_deskChair.show();
|
|
|
|
BF_GLOBALS._player.setVisage(563);
|
|
BF_GLOBALS._player.setPosition(Common::Point(105, 140));
|
|
BF_GLOBALS._player.fixPriority(-1);
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, this);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.enableControl();
|
|
ADD_PLAYER_MOVER(scene->_destPosition.x, scene->_destPosition.y);
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene560::Action3::signal() {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
setDelay(10);
|
|
break;
|
|
case 1:
|
|
if (scene->_field380) {
|
|
setDelay(10);
|
|
} else {
|
|
setAction(&scene->_action1, this);
|
|
}
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._sceneManager.changeScene(570);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene560::PicturePart::startAction(CursorType action, Event &event) {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (scene->_field380) {
|
|
SceneItem::display2(560, 54);
|
|
} else if ((scene->_sceneMode != 4) && (scene->_sceneMode != 3)) {
|
|
scene->_sceneMode = _flag + 4;
|
|
PlayerMover *mover = new PlayerMover();
|
|
Common::Point destPos(139, 106);
|
|
BF_GLOBALS._player.addMover(mover, &destPos, scene);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedHotspotExt::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene560::DeskChair::startAction(CursorType action, Event &event) {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if ((action == CURSOR_USE) && !scene->_field380) {
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
} else {
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene560::Box::startAction(CursorType action, Event &event) {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if (scene->_field380) {
|
|
SceneItem::display2(560, 54);
|
|
} else {
|
|
scene->_sceneMode = 9;
|
|
Common::Point destPos(289, 108);
|
|
PlayerMover *mover = new PlayerMover();
|
|
BF_GLOBALS._player.addMover(mover, &destPos, scene);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObjectExt::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
FocusObject::postInit();
|
|
|
|
_cursorVisage.setVisage(1, 5);
|
|
|
|
if (BF_GLOBALS._safeCombination == 172) {
|
|
setFrame(2);
|
|
if (BF_INVENTORY.getObjectScene(INV_NICKEL) == 560) {
|
|
scene->_nickel.postInit();
|
|
scene->_nickel.setVisage(560);
|
|
scene->_nickel.setStrip(2);
|
|
scene->_nickel.setFrame(3);
|
|
scene->_nickel.fixPriority(252);
|
|
scene->_nickel.setPosition(Common::Point(181, 140));
|
|
scene->_nickel.setDetails(560, 47, 48, -1, 1, (SceneItem *)NULL);
|
|
BF_GLOBALS._sceneItems.remove(&scene->_nickel);
|
|
BF_GLOBALS._sceneItems.push_front(&scene->_nickel);
|
|
}
|
|
} else {
|
|
setFrame(1);
|
|
_item1.setDetails(Rect(143, 68, 159, 85), 560, 49, 50, -1, 1, NULL);
|
|
_item2.setDetails(Rect(159, 68, 175, 85), 560, 49, 50, -1, 1, NULL);
|
|
_item3.setDetails(Rect(175, 68, 191, 85), 560, 49, 50, -1, 1, NULL);
|
|
_item4.setDetails(Rect(143, 86, 159, 102), 560, 49, 50, -1, 1, NULL);
|
|
_item5.setDetails(Rect(159, 86, 175, 102), 560, 49, 50, -1, 1, NULL);
|
|
_item6.setDetails(Rect(175, 86, 191, 102), 560, 49, 50, -1, 1, NULL);
|
|
|
|
BF_GLOBALS._sceneItems.remove(&_item1);
|
|
BF_GLOBALS._sceneItems.remove(&_item2);
|
|
BF_GLOBALS._sceneItems.remove(&_item3);
|
|
BF_GLOBALS._sceneItems.remove(&_item4);
|
|
BF_GLOBALS._sceneItems.remove(&_item5);
|
|
BF_GLOBALS._sceneItems.remove(&_item6);
|
|
BF_GLOBALS._sceneItems.push_front(&_item6);
|
|
BF_GLOBALS._sceneItems.push_front(&_item5);
|
|
BF_GLOBALS._sceneItems.push_front(&_item4);
|
|
BF_GLOBALS._sceneItems.push_front(&_item3);
|
|
BF_GLOBALS._sceneItems.push_front(&_item2);
|
|
BF_GLOBALS._sceneItems.push_front(&_item1);
|
|
|
|
_item1._flag = 1;
|
|
_item2._flag = 2;
|
|
_item3._flag = 3;
|
|
_item4._flag = 4;
|
|
_item5._flag = 5;
|
|
_item6._flag = 6;
|
|
|
|
_digit2.postInit();
|
|
_digit2.setVisage(560);
|
|
_digit2.setStrip(3);
|
|
_digit2.setPosition(Common::Point(151, 94));
|
|
_digit2.fixPriority(252);
|
|
|
|
_digit1.postInit();
|
|
_digit1.setVisage(560);
|
|
_digit1.setStrip(3);
|
|
_digit1.setPosition(Common::Point(167, 94));
|
|
_digit1.fixPriority(252);
|
|
|
|
_digit0.postInit();
|
|
_digit0.setVisage(560);
|
|
_digit0.setStrip(3);
|
|
_digit0.setPosition(Common::Point(183, 94));
|
|
_digit0.fixPriority(252);
|
|
|
|
int amount = (BF_GLOBALS._safeCombination != 0) ? BF_GLOBALS._safeCombination : 1000;
|
|
|
|
// Get digit 0 portion
|
|
int remainder = amount % 10;
|
|
amount /= 10;
|
|
_digit0.setFrame(!remainder ? 10 : remainder);
|
|
|
|
// Get digit 1 portion
|
|
remainder = amount % 10;
|
|
amount /= 10;
|
|
_digit1.setFrame(!remainder ? 10 : remainder);
|
|
|
|
// Get digit 2 portion
|
|
remainder = amount % 10;
|
|
_digit2.setFrame(!remainder ? 10 : remainder);
|
|
}
|
|
}
|
|
|
|
void Scene560::SafeInset::remove() {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
_item1.remove();
|
|
_item2.remove();
|
|
_item3.remove();
|
|
_item4.remove();
|
|
_item5.remove();
|
|
_item6.remove();
|
|
_digit2.remove();
|
|
_digit1.remove();
|
|
_digit0.remove();
|
|
|
|
scene->_nickel.remove();
|
|
|
|
if (BF_GLOBALS._events.getCursor() == CURSOR_USE) {
|
|
GfxSurface cursor = _cursorVisage.getFrame(2);
|
|
BF_GLOBALS._events.setCursor(cursor);
|
|
}
|
|
|
|
FocusObject::remove();
|
|
}
|
|
|
|
void Scene560::SafeInset::signal() {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
// Recalculate the new total
|
|
int total = 0;
|
|
if (_digit2._frame < 10)
|
|
total = _digit2._frame * 100;
|
|
if (_digit1._frame < 10)
|
|
total += _digit1._frame * 10;
|
|
if (_digit0._frame < 10)
|
|
total += _digit0._frame;
|
|
|
|
BF_GLOBALS._safeCombination = !total ? 1000 : total;
|
|
|
|
// Check if the combination is correct
|
|
if (total == 172) {
|
|
BF_GLOBALS._sceneObjects->draw();
|
|
|
|
if (!BF_GLOBALS.getFlag(fGotPointsForBank)) {
|
|
T2_GLOBALS._uiElements.addScore(50);
|
|
BF_GLOBALS.setFlag(fGotPointsForBank);
|
|
}
|
|
|
|
setFrame(2);
|
|
GfxSurface cursor = _cursorVisage.getFrame(2);
|
|
BF_GLOBALS._events.setCursor(cursor);
|
|
|
|
_item1.remove();
|
|
_item2.remove();
|
|
_item3.remove();
|
|
_item4.remove();
|
|
_item5.remove();
|
|
_item6.remove();
|
|
_digit2.remove();
|
|
_digit1.remove();
|
|
_digit0.remove();
|
|
|
|
if (BF_INVENTORY.getObjectScene(INV_NICKEL) == 560) {
|
|
// Nickel is still in the safe, show it
|
|
scene->_nickel.postInit();
|
|
scene->_nickel.setVisage(560);
|
|
scene->_nickel.setStrip(2);
|
|
scene->_nickel.setFrame(3);
|
|
scene->_nickel.fixPriority(252);
|
|
scene->_nickel.setPosition(Common::Point(181, 140));
|
|
scene->_nickel.setDetails(560, 47, 48, -1, 1, (SceneItem *)NULL);
|
|
BF_GLOBALS._sceneItems.remove(&scene->_nickel);
|
|
BF_GLOBALS._sceneItems.push_front(&scene->_nickel);
|
|
}
|
|
}
|
|
}
|
|
void Scene560::SafeInset::process(Event &event) {
|
|
if (_bounds.contains(event.mousePos)) {
|
|
CursorType cursorId = BF_GLOBALS._events.getCursor();
|
|
if (cursorId == CURSOR_USE) {
|
|
// Instead of standard cursor, use special hand cursor
|
|
GfxSurface cursor = _cursorVisage.getFrame(6);
|
|
BF_GLOBALS._events.setCursor(cursor);
|
|
} else {
|
|
// Set cursor again just in case Exit cursor was showing
|
|
BF_GLOBALS._events.setCursor(cursorId);
|
|
}
|
|
|
|
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
|
|
(event.btnState == BTNSHIFT_RIGHT)) {
|
|
BF_GLOBALS._events.setCursor(CURSOR_USE);
|
|
event.handled = true;
|
|
}
|
|
} else {
|
|
GfxSurface cursor = _cursorVisage.getFrame(7);
|
|
BF_GLOBALS._events.setCursor(cursor);
|
|
|
|
if ((event.mousePos.y < UI_INTERFACE_Y) && (event.eventType == EVENT_BUTTON_DOWN)) {
|
|
// Leave the safe view
|
|
event.handled = true;
|
|
remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
bool Scene560::SafeInset::Item::startAction(CursorType action, Event &event) {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
switch (_flag) {
|
|
case 1: {
|
|
int newFrame = scene->_safeInset._digit2._frame + 1;
|
|
if (newFrame == 11)
|
|
newFrame = 1;
|
|
|
|
scene->_safeInset._digit2.setFrame(newFrame);
|
|
break;
|
|
}
|
|
case 2: {
|
|
int newFrame = scene->_safeInset._digit1._frame + 1;
|
|
if (newFrame == 11)
|
|
newFrame = 1;
|
|
|
|
scene->_safeInset._digit1.setFrame(newFrame);
|
|
break;
|
|
}
|
|
case 3: {
|
|
int newFrame = scene->_safeInset._digit0._frame + 1;
|
|
if (newFrame == 11)
|
|
newFrame = 1;
|
|
|
|
scene->_safeInset._digit0.setFrame(newFrame);
|
|
break;
|
|
}
|
|
case 4: {
|
|
int newFrame = scene->_safeInset._digit2._frame - 1;
|
|
if (newFrame == 0)
|
|
newFrame = 10;
|
|
|
|
scene->_safeInset._digit2.setFrame(newFrame);
|
|
break;
|
|
}
|
|
case 5: {
|
|
int newFrame = scene->_safeInset._digit1._frame - 1;
|
|
if (newFrame == 0)
|
|
newFrame = 10;
|
|
|
|
scene->_safeInset._digit1.setFrame(newFrame);
|
|
break;
|
|
}
|
|
case 6: {
|
|
int newFrame = scene->_safeInset._digit0._frame - 1;
|
|
if (newFrame == 0)
|
|
newFrame = 10;
|
|
|
|
scene->_safeInset._digit0.setFrame(newFrame);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
scene->_safeInset.signal();
|
|
scene->_sound1.play(75);
|
|
return true;
|
|
default:
|
|
return NamedHotspotExt::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene560::Nickel::startAction(CursorType action, Event &event) {
|
|
if (action == CURSOR_USE) {
|
|
BF_INVENTORY.setObjectScene(INV_NICKEL, 1);
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
remove();
|
|
return true;
|
|
} else {
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
void Scene560::BoxInset::postInit(SceneObjectList *OwnerList) {
|
|
FocusObject::postInit();
|
|
_item1.setDetails(Rect(110, 48, 189, 102), 560, 43, 44, -1, 1, NULL);
|
|
BF_GLOBALS._sceneItems.remove(&_item1);
|
|
BF_GLOBALS._sceneItems.push_front(&_item1);
|
|
}
|
|
|
|
void Scene560::BoxInset::remove() {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (scene->_sceneMode != 3)
|
|
scene->_sceneMode = 0;
|
|
|
|
_item1.remove();
|
|
FocusObject::remove();
|
|
}
|
|
|
|
bool Scene560::BoxInset::Item1::startAction(CursorType action, Event &event) {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_USE) {
|
|
if (!BF_GLOBALS.getFlag(fGotPointsForBox)) {
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
BF_GLOBALS.setFlag(fGotPointsForBox);
|
|
}
|
|
|
|
scene->_safeInset.postInit();
|
|
scene->_safeInset.setVisage(560);
|
|
scene->_safeInset.setStrip(2);
|
|
scene->_safeInset.setPosition(Common::Point(160, 141));
|
|
scene->_safeInset.fixPriority(251);
|
|
scene->_safeInset.setDetails(560, 45, 46, -1);
|
|
|
|
scene->_sceneMode = 3;
|
|
scene->_boxInset.remove();
|
|
|
|
GfxSurface cursor = surfaceFromRes(1, 5, 6);
|
|
BF_GLOBALS._events.setCursor(cursor);
|
|
return true;
|
|
} else {
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene560::Computer::startAction(CursorType action, Event &event) {
|
|
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if (BF_GLOBALS._bookmark < bTalkedToGrannyAboutSkipsCard) {
|
|
SceneItem::display2(666, 24);
|
|
} else {
|
|
scene->setAction(&scene->_action3);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene560::Scene560(): SceneExt() {
|
|
_field380 = _field11EA = false;
|
|
}
|
|
|
|
void Scene560::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(560);
|
|
setZoomPercents(100, 60, 168, 90);
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
|
|
_picture1.setDetails(Rect(121, 16, 139, 35), 560, -1, -1, -1, 1, NULL);
|
|
_picture2.setDetails(Rect(139, 16, 157, 35), 560, -1, -1, -1, 1, NULL);
|
|
_picture3.setDetails(Rect(121, 35, 139, 54), 560, -1, -1, -1, 1, NULL);
|
|
_picture4.setDetails(Rect(139, 35, 157, 54), 560, -1, -1, -1, 1, NULL);
|
|
_picture1._flag = 3;
|
|
_picture2._flag = 4;
|
|
_picture3._flag = 2;
|
|
_picture4._flag = 1;
|
|
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
BF_GLOBALS._dayNumber = 3;
|
|
|
|
if (BF_GLOBALS._bookmark >= bTalkedToGrannyAboutSkipsCard) {
|
|
_box.postInit();
|
|
_box.setVisage(560);
|
|
_box.setStrip(4);
|
|
_box.setFrame(1);
|
|
_box.setPosition(Common::Point(295, 37));
|
|
_box.setDetails(560, 41, 42, -1, 1, (SceneItem *)NULL);
|
|
}
|
|
|
|
_deskChair.postInit();
|
|
_deskChair.setVisage(561);
|
|
_deskChair.setStrip(3);
|
|
_deskChair.setPosition(Common::Point(81, 149));
|
|
_deskChair.fixPriority(151);
|
|
_deskChair.changeZoom(81);
|
|
|
|
if (BF_GLOBALS._sceneManager._previousScene == 570) {
|
|
// Returning from using computer
|
|
BF_GLOBALS._events.setCursor(CURSOR_USE);
|
|
|
|
_deskChair.hide();
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setVisage(561);
|
|
BF_GLOBALS._player.setStrip(2);
|
|
BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
|
|
BF_GLOBALS._player._moveDiff.x = 11;
|
|
BF_GLOBALS._player.setPosition(Common::Point(96, 138));
|
|
BF_GLOBALS._player.changeZoom(81);
|
|
|
|
_deskChair.setFrame(BF_GLOBALS._player._frame);
|
|
_deskChair.setStrip(BF_GLOBALS._player._strip);
|
|
_deskChair.setPosition(BF_GLOBALS._player._position);
|
|
|
|
_field11EA = false;
|
|
_field380 = true;
|
|
} else {
|
|
// Entering study through doorway
|
|
_field11EA = false;
|
|
_field380 = false;
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setVisage(563);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.setPosition(Common::Point(79, 110));
|
|
BF_GLOBALS._player._moveDiff.x = 11;
|
|
BF_GLOBALS._player.changeZoom(-1);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
_sceneMode = 10;
|
|
ADD_MOVER(BF_GLOBALS._player, 85, 115);
|
|
}
|
|
|
|
_computer.setDetails(Rect(16, 77, 58, 107), 560, 2, -1, -1, 1, NULL);
|
|
_deskChair.setDetails(560, 3, -1, -1, 1, (SceneItem *)NULL);
|
|
_chair.setDetails(Rect(163, 64, 196, 102), 560, 13, 25, 36, 1, NULL);
|
|
_lamp.setDetails(Rect(197, 43, 214, 56), 560, 7, 19, 30, 1, NULL);
|
|
_item4.setDetails(Rect(121, 18, 156, 54), 560, 8, 20, 31, 1, NULL);
|
|
_trophy.setDetails(Rect(259, 52, 275, 63), 560, 10, 22, 33, 1, NULL);
|
|
_waterColors.setDetails(Rect(214, 48, 239, 64), 560, 12, 24, 35, 1, NULL);
|
|
_fileCabinets.setDetails(Rect(0, 47, 49, 100), 560, 14, 26, 37, 1, NULL);
|
|
_certificate.setDetails(Rect(280, 51, 292, 62), 560, 11, 23, 34, 1, NULL);
|
|
_bookcase.setDetails(Rect(176, 0, 319, 103), 560, 9, 21, 32, 1, NULL);
|
|
_desk.setDetails(1, 560, 6, 10, 29, 1);
|
|
_item12.setDetails(Rect(62, 16, 96, 101), 560, 51, 52, 53, 1, NULL);
|
|
_carpet.setDetails(Rect(0, 103, 319, 167), 560, 5, 16, 28, 1, NULL);
|
|
_office.setDetails(Rect(0, 0, 320, 168), 560, 4, -1, -1, 1, NULL);
|
|
|
|
BF_GLOBALS._player.enableControl();
|
|
}
|
|
|
|
void Scene560::signal() {
|
|
switch (_sceneMode) {
|
|
case 1:
|
|
_object6.hide();
|
|
_object6.remove();
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 5:
|
|
case 6:
|
|
case 7:
|
|
case 8:
|
|
BF_GLOBALS._player._strip = 4;
|
|
BF_GLOBALS._player._frame = 1;
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
_object6.postInit();
|
|
_object6.setVisage(560);
|
|
_object6.setStrip(1);
|
|
_object6.setFrame(_sceneMode - 4);
|
|
_object6.setPosition(Common::Point(160, 141));
|
|
_object6.fixPriority(250);
|
|
_stripManager.start(_sceneMode + 5595, this);
|
|
_sceneMode = 1;
|
|
break;
|
|
case 9:
|
|
// Clicked on the Baseball Cards Box
|
|
_object6._strip = 4;
|
|
_object6._frame = 1;
|
|
|
|
if (BF_GLOBALS._safeCombination == 172) {
|
|
if (_sceneMode != 3) {
|
|
_safeInset.postInit();
|
|
_safeInset.setVisage(560);
|
|
_safeInset.setStrip(2);
|
|
_safeInset.setPosition(Common::Point(160, 141));
|
|
_safeInset.fixPriority(251);
|
|
_safeInset.setDetails(560, 45, 46, -1);
|
|
|
|
_sceneMode = 3;
|
|
}
|
|
} else if ((_sceneMode != 3) && (_sceneMode != 4)) {
|
|
if (!BF_GLOBALS.getFlag(fGotPointsForPunch)) {
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
BF_GLOBALS.setFlag(fGotPointsForPunch);
|
|
}
|
|
|
|
_boxInset.postInit();
|
|
_boxInset.setVisage(560);
|
|
_boxInset.setStrip(2);
|
|
_boxInset.setFrame(4);
|
|
_boxInset.setPosition(Common::Point(160, 141));
|
|
_boxInset.fixPriority(251);
|
|
_boxInset.setDetails(560, 43, 44, -1);
|
|
|
|
_sceneMode = 4;
|
|
}
|
|
break;
|
|
case 10:
|
|
_field11EA = false;
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 11:
|
|
BF_GLOBALS._sceneManager.changeScene(270);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene560::process(Event &event) {
|
|
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
|
|
(_field380) && !_action) {
|
|
_destPosition = event.mousePos;
|
|
BF_GLOBALS._player.disableControl();
|
|
setAction(&_action2);
|
|
|
|
event.handled = true;
|
|
}
|
|
|
|
SceneExt::process(event);
|
|
}
|
|
|
|
void Scene560::dispatch() {
|
|
if (!_field11EA && (BF_GLOBALS._player._position.y < 105)) {
|
|
_field11EA = true;
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._sceneManager.changeScene(270);
|
|
}
|
|
|
|
SceneExt::dispatch();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 570 - Computer
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
Scene570::PasswordEntry::PasswordEntry(): EventHandler() {
|
|
_passwordStr = SCENE570_PASSWORD;
|
|
}
|
|
|
|
void Scene570::PasswordEntry::synchronize(Serializer &s) {
|
|
EventHandler::synchronize(s);
|
|
s.syncString(_entryBuffer);
|
|
}
|
|
|
|
void Scene570::PasswordEntry::postInit(SceneObjectList *OwnerList) {
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
scene->_sceneMode = 10;
|
|
scene->_object3.setStrip(6);
|
|
scene->_object3.setFrame(1);
|
|
scene->_object3.fixPriority(3);
|
|
|
|
_passwordText._color1 = 22;
|
|
_passwordText._color2 = 9;
|
|
_passwordText._color3 = 9;
|
|
_passwordText._width = 128;
|
|
_passwordText._fontNumber = 9000;
|
|
_passwordText.setPosition(Common::Point(165, 40));
|
|
_passwordText.fixPriority(255);
|
|
_passwordText.setup(_passwordStr);
|
|
|
|
_entryText._color1 = 22;
|
|
_entryText._color2 = 9;
|
|
_entryText._color3 = 9;
|
|
_entryText._width = 128;
|
|
_entryText._fontNumber = 9000;
|
|
_entryText.setPosition(Common::Point(220, 40));
|
|
_entryText.fixPriority(255);
|
|
_entryText.setup(_entryBuffer);
|
|
}
|
|
|
|
void Scene570::PasswordEntry::process(Event &event) {
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
bool entryChanged = false;
|
|
|
|
switch (event.eventType) {
|
|
case EVENT_KEYPRESS: {
|
|
int key = toupper(event.kbd.ascii);
|
|
scene->_sound1.play(72);
|
|
|
|
if ((event.kbd.keycode == Common::KEYCODE_BACKSPACE) || (event.kbd.keycode == Common::KEYCODE_DELETE)) {
|
|
// Delete a key from the entry
|
|
if (_entryBuffer.size() > 0)
|
|
_entryBuffer.deleteLastChar();
|
|
entryChanged = true;
|
|
} else if (event.kbd.keycode == Common::KEYCODE_RETURN) {
|
|
// Finished entering password
|
|
_passwordText.remove();
|
|
_entryText.remove();
|
|
|
|
checkPassword();
|
|
remove();
|
|
} else if ((key >= 32) || (key <= 126)) {
|
|
// Valid character pressed
|
|
if (_entryBuffer.size() < 10)
|
|
_entryBuffer += (char)key;
|
|
event.handled = true;
|
|
entryChanged = true;
|
|
}
|
|
break;
|
|
}
|
|
case EVENT_BUTTON_DOWN:
|
|
event.handled = true;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (entryChanged) {
|
|
_entryText._color1 = 22;
|
|
_entryText._color2 = 9;
|
|
_entryText._color3 = 9;
|
|
_entryText._width = 128;
|
|
_entryText._fontNumber = 9000;
|
|
_entryText.setPosition(Common::Point(213, 40));
|
|
_entryText.fixPriority(255);
|
|
_entryText.setup(_entryBuffer);
|
|
|
|
// Pad entered text with spaces to make up the allowed width and then display
|
|
Common::String msg = _entryBuffer;
|
|
while (msg.size() < 10)
|
|
msg += " ";
|
|
_entryText.setup(msg);
|
|
}
|
|
}
|
|
|
|
void Scene570::PasswordEntry::checkPassword() {
|
|
// Check if the password is correctly entered as 'JACKIE' or, as a nod to the
|
|
// reimplementation in ScummVM, as the project name.
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (!_entryBuffer.compareTo("JACKIE") || !_entryBuffer.compareTo("SCUMMVM")) {
|
|
// Password was correct
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sound1.play(73);
|
|
|
|
T2_GLOBALS._uiElements.hide();
|
|
T2_GLOBALS._uiElements._active = false;
|
|
scene->_sceneMode = 5701;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5701, &scene->_object3, NULL);
|
|
} else {
|
|
// Password was incorrect
|
|
_entryBuffer = "";
|
|
|
|
scene->_object3.fixPriority(1);
|
|
scene->_iconManager.refreshList();
|
|
BF_GLOBALS._events.setCursor(CURSOR_USE);
|
|
scene->_sceneMode = 0;
|
|
}
|
|
}
|
|
|
|
Scene570::IconManager::IconManager(): EventHandler() {
|
|
_mode = _selectedFolder = _fieldAA = _fieldAC = 0;
|
|
}
|
|
|
|
void Scene570::IconManager::remove() {
|
|
_object1.remove();
|
|
EventHandler::remove();
|
|
}
|
|
|
|
void Scene570::IconManager::setup(int mode) {
|
|
_mode = mode;
|
|
_selectedFolder = 0;
|
|
|
|
_object1.postInit();
|
|
_object1.setVisage(572);
|
|
_object1.fixPriority(2);
|
|
_object1.setFrame((mode == 1) ? 4 : 5);
|
|
EventHandler::postInit();
|
|
}
|
|
|
|
void Scene570::IconManager::hideList() {
|
|
SynchronizedList<Icon *>::iterator i;
|
|
for (i = _list.begin(); i != _list.end(); ++i) {
|
|
(*i)->_sceneText.remove();
|
|
}
|
|
}
|
|
|
|
void Scene570::IconManager::refreshList() {
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
_object1.setPosition(Common::Point(163, 19));
|
|
scene->_object3.setStrip(4);
|
|
|
|
// Clear any current icons
|
|
SynchronizedList<Icon *>::iterator i;
|
|
for (i = _list.begin(); i != _list.end(); ++i) {
|
|
Icon *item = *i;
|
|
|
|
item->setVisage(572);
|
|
item->setStrip(1);
|
|
item->fixPriority(2);
|
|
item->setPosition(Common::Point(330, 100));
|
|
item->_sceneText.remove();
|
|
}
|
|
|
|
// Refresh the list
|
|
int iconIndex = 0, folderIndex = 0;
|
|
for (i = _list.begin(); i != _list.end(); ++i) {
|
|
Icon *item = *i;
|
|
|
|
if (item->_iconId == 1) {
|
|
// Folder
|
|
int parentId = item->_parentFolderId;
|
|
item->setFrame((_selectedFolder == (item->_folderId - 1)) ? 1 : 8);
|
|
item->setPosition(Common::Point(168 + parentId * 11, folderIndex * 8 + 27));
|
|
item->_sceneText.setPosition(Common::Point(175 + parentId * 11, folderIndex * 8 + 21));
|
|
item->_sceneText.setup(item->_text);
|
|
++folderIndex;
|
|
} else if (item->_parentFolderId == _selectedFolder) {
|
|
item->setPosition(Common::Point(229, 27 + iconIndex * 12));
|
|
|
|
switch (item->_iconId) {
|
|
case 2:
|
|
item->setFrame(9);
|
|
break;
|
|
case 3:
|
|
item->setFrame(7);
|
|
break;
|
|
case 5:
|
|
item->setFrame(10);
|
|
break;
|
|
case 6:
|
|
item->setFrame(11);
|
|
break;
|
|
case 7:
|
|
item->setFrame(12);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
item->_sceneText.setPosition(Common::Point(236, iconIndex * 12 + 22));
|
|
item->_sceneText.setup(item->_text);
|
|
++iconIndex;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene570::IconManager::addItem(Icon *item) {
|
|
item->_mode = _mode;
|
|
_list.push_back(item);
|
|
}
|
|
|
|
Scene570::Icon::Icon(): NamedObject() {
|
|
_iconId = _folderId = 0;
|
|
}
|
|
|
|
void Scene570::Icon::synchronize(Serializer &s) {
|
|
NamedObject::synchronize(s);
|
|
s.syncAsSint16LE(_iconId);
|
|
s.syncAsSint16LE(_folderId);
|
|
s.syncAsSint16LE(_parentFolderId);
|
|
s.syncAsSint16LE(_mode);
|
|
}
|
|
|
|
void Scene570::Icon::remove() {
|
|
_sceneText.remove();
|
|
NamedObject::remove();
|
|
}
|
|
|
|
bool Scene570::Icon::startAction(CursorType action, Event &event) {
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
switch (_iconId) {
|
|
case 1:
|
|
SceneItem::display2(570, 9);
|
|
break;
|
|
case 2:
|
|
SceneItem::display2(570, 10);
|
|
break;
|
|
case 3:
|
|
SceneItem::display2(570, 4);
|
|
break;
|
|
case 5:
|
|
SceneItem::display2(570, 11);
|
|
break;
|
|
case 6:
|
|
SceneItem::display2(570, 12);
|
|
break;
|
|
case 7:
|
|
SceneItem::display2(570, 13);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return true;
|
|
case CURSOR_USE:
|
|
// Select the given icon
|
|
scene->_sound1.play(73);
|
|
switch (_iconId) {
|
|
case 1:
|
|
// Folder, so select it
|
|
scene->_iconManager._selectedFolder = _folderId - 1;
|
|
scene->_iconManager.refreshList();
|
|
break;
|
|
case 2:
|
|
scene->_iconManager.hideList();
|
|
scene->_sceneMode = 5702;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5702, &scene->_object3, NULL);
|
|
break;
|
|
case 3:
|
|
scene->_iconManager.hideList();
|
|
scene->_passwordEntry.postInit();
|
|
break;
|
|
case 5:
|
|
SceneItem::display2(570, 5);
|
|
break;
|
|
case 6:
|
|
scene->_iconManager.hideList();
|
|
switch (_folderId) {
|
|
case 8:
|
|
T2_GLOBALS._uiElements.hide();
|
|
T2_GLOBALS._uiElements._active = false;
|
|
scene->_sceneMode = 5705;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5705, &scene->_object3, NULL);
|
|
break;
|
|
case 10:
|
|
T2_GLOBALS._uiElements.hide();
|
|
T2_GLOBALS._uiElements._active = false;
|
|
scene->_sceneMode = 5706;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5706, &scene->_object3, NULL);
|
|
break;
|
|
case 12:
|
|
T2_GLOBALS._uiElements.hide();
|
|
T2_GLOBALS._uiElements._active = false;
|
|
scene->_sceneMode = 5707;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5707, &scene->_object3, NULL);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
case 7:
|
|
scene->_iconManager.hideList();
|
|
T2_GLOBALS._uiElements.hide();
|
|
T2_GLOBALS._uiElements._active = false;
|
|
scene->_sceneMode = 5704;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5704, &scene->_object3, NULL);
|
|
break;
|
|
}
|
|
return true;
|
|
case CURSOR_TALK:
|
|
SceneItem::display2(570, 15);
|
|
return true;
|
|
case CURSOR_PRINTER:
|
|
switch (_iconId) {
|
|
case 1:
|
|
// Folder - "You can't print that"
|
|
SceneItem::display2(570, 8);
|
|
break;
|
|
case 7:
|
|
scene->_sound1.play(74);
|
|
if (BF_INVENTORY.getObjectScene(INV_PRINT_OUT) == 570) {
|
|
SceneItem::display2(570, 6);
|
|
T2_GLOBALS._uiElements.addScore(30);
|
|
BF_INVENTORY.setObjectScene(INV_PRINT_OUT, 1);
|
|
} else {
|
|
SceneItem::display2(570, 7);
|
|
}
|
|
break;
|
|
default:
|
|
// You don't want to print that
|
|
SceneItem::display2(570, 18);
|
|
break;
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
void Scene570::Icon::setDetails(int iconId, int folderId, int parentFolderId, int unused, const Common::String &msg) {
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
NamedObject::postInit();
|
|
|
|
_iconId = iconId;
|
|
_folderId = folderId;
|
|
_parentFolderId = parentFolderId;
|
|
_text = msg;
|
|
|
|
_sceneText._color1 = 22;
|
|
_sceneText._color2 = 9;
|
|
_sceneText._color3 = 9;
|
|
_sceneText._width = 128;
|
|
_sceneText._fontNumber = 9000;
|
|
_sceneText.fixPriority(2);
|
|
|
|
BF_GLOBALS._sceneItems.push_front(this);
|
|
scene->_iconManager.addItem(this);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene570::PowerSwitch::startAction(CursorType action, Event &event) {
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if (scene->_object4._flag == 1) {
|
|
setFrame(1);
|
|
scene->_object3.remove();
|
|
} else {
|
|
if (!BF_GLOBALS.getFlag(fGotPointsForCoin)) {
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
BF_GLOBALS.setFlag(fGotPointsForCoin);
|
|
}
|
|
|
|
scene->_sound1.play(70);
|
|
scene->_object4._flag = 1;
|
|
setFrame(2);
|
|
|
|
scene->_object3.postInit();
|
|
scene->_object3.fixPriority(1);
|
|
scene->_object3.setDetails(570, 16, 15, 17);
|
|
BF_GLOBALS._sceneItems.remove(&scene->_object3);
|
|
BF_GLOBALS._sceneItems.push_front(&scene->_object3);
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5700;
|
|
setAction(&scene->_sequenceManager, scene, 5700, &scene->_object3, NULL);
|
|
}
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene570::PrinterIcon::startAction(CursorType action, Event &event) {
|
|
if (action == CURSOR_USE) {
|
|
BF_GLOBALS._events.setCursor(CURSOR_PRINTER);
|
|
return true;
|
|
} else {
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
void Scene570::Object3::remove() {
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
scene->_object4._flag = 0;
|
|
|
|
scene->_printerIcon.remove();
|
|
scene->_iconManager.remove();
|
|
scene->_folder1.remove();
|
|
scene->_folder2.remove();
|
|
scene->_folder3.remove();
|
|
scene->_folder4.remove();
|
|
scene->_icon1.remove();
|
|
scene->_icon2.remove();
|
|
scene->_icon3.remove();
|
|
scene->_icon4.remove();
|
|
scene->_icon5.remove();
|
|
scene->_icon6.remove();
|
|
scene->_icon7.remove();
|
|
scene->_icon8.remove();
|
|
scene->_icon9.remove();
|
|
|
|
FocusObject::remove();
|
|
BF_GLOBALS._sceneManager.changeScene(560);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene570::FloppyDrive::startAction(CursorType action, Event &event) {
|
|
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_USE:
|
|
if (BF_INVENTORY.getObjectScene(INV_D_FLOPPY) == 571) {
|
|
BF_INVENTORY.setObjectScene(INV_D_FLOPPY, 1);
|
|
scene->_iconManager.refreshList();
|
|
SceneItem::display2(570, 2);
|
|
} else {
|
|
SceneItem::display2(570, 3);
|
|
}
|
|
return true;
|
|
case INV_D_FLOPPY:
|
|
BF_INVENTORY.setObjectScene(INV_D_FLOPPY, 571);
|
|
scene->_iconManager.refreshList();
|
|
return true;
|
|
default:
|
|
return NamedHotspot::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene570::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(570);
|
|
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
BF_GLOBALS._dayNumber = 1;
|
|
|
|
_object4._flag = 0;
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_GLOBALS._player.hide();
|
|
|
|
_powerSwitch.postInit();
|
|
_powerSwitch.setVisage(570);
|
|
_powerSwitch.setStrip(4);
|
|
_powerSwitch.setFrame(1);
|
|
_powerSwitch.setPosition(Common::Point(163, 131));
|
|
_powerSwitch.setDetails(570, 1, 15, -1, 1, (SceneItem *)NULL);
|
|
|
|
_floppyDrive.setDetails(Rect(258, 111, 303, 120), 570, 0, 15, -1, 1, NULL);
|
|
_item11.setDetails(0, 570, 15, 15, 15, 1);
|
|
_monitor.setDetails(1, 570, 19, 20, 21, 1);
|
|
_item3.setDetails(2, 570, 22, 23, 24, 1);
|
|
_case.setDetails(3, 570, 25, 26, 27, 1);
|
|
_keyboard.setDetails(4, 570, 28, 29, 30, 1);
|
|
_desk.setDetails(5, 570, 31, 32, 33, 1);
|
|
_printer.setDetails(7, 570, 37, 38, 39, 1);
|
|
_window.setDetails(8, 570, 40, 41, 42, 1);
|
|
_plant.setDetails(9, 570, 43, 44, 45, 1);
|
|
|
|
if ((BF_GLOBALS._dayNumber == 1) && (BF_INVENTORY.getObjectScene(INV_CRATE1) == 1)) {
|
|
_object4.postInit();
|
|
_object4.setVisage(574);
|
|
_object4.setPosition(Common::Point(90, 84));
|
|
}
|
|
}
|
|
|
|
void Scene570::signal() {
|
|
switch (_sceneMode) {
|
|
case 5700:
|
|
_object3.setStrip(4);
|
|
_object3.setFrame(1);
|
|
|
|
_printerIcon.postInit();
|
|
_printerIcon.setVisage(572);
|
|
_printerIcon.setFrame(3);
|
|
_printerIcon.setPosition(Common::Point(172, 71));
|
|
_printerIcon.fixPriority(2);
|
|
_printerIcon.setDetails(570, 14, 15, -1, 2, (SceneItem *)NULL);
|
|
|
|
_iconManager.setup(2);
|
|
_folder1.setDetails(1, 1, 0, 2, SCENE570_C_DRIVE);
|
|
_folder2.setDetails(1, 2, 1, 2, SCENE570_RING);
|
|
_folder3.setDetails(1, 3, 1, 2, SCENE570_PROTO);
|
|
_folder4.setDetails(1, 4, 1, 2, SCENE570_WACKY);
|
|
|
|
if (!BF_GLOBALS.getFlag(fDecryptedBluePrints))
|
|
_icon1.setDetails(3, 5, 0, 2, SCENE570_COBB);
|
|
_icon2.setDetails(2, 7, 0, 2, SCENE570_LETTER);
|
|
if (BF_GLOBALS.getFlag(fDecryptedBluePrints))
|
|
_icon3.setDetails(7, 6, 0, 2, SCENE570_COBB);
|
|
|
|
_icon4.setDetails(6, 8, 1, 2, SCENE570_RINGEXE);
|
|
_icon5.setDetails(5, 9, 1, 2, SCENE570_RINGDATA);
|
|
_icon6.setDetails(6, 10, 2, 2, SCENE570_PROTOEXE);
|
|
_icon7.setDetails(5, 11, 2, 2, SCENE570_PROTODATA);
|
|
_icon8.setDetails(6, 12, 3, 2, SCENE570_WACKYEXE);
|
|
_icon9.setDetails(5, 13, 3, 2, SCENE570_WACKYDATA);
|
|
|
|
_iconManager.refreshList();
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 5701:
|
|
BF_GLOBALS.setFlag(fDecryptedBluePrints);
|
|
_iconManager._list.remove(&_icon1);
|
|
_icon1.remove();
|
|
|
|
_object3.setVisage(572);
|
|
_object3.setStrip(4);
|
|
_object3.setFrame(1);
|
|
_object3.fixPriority(1);
|
|
|
|
_icon3.setDetails(7, 6, 0, 2, SCENE570_COBB);
|
|
_iconManager.refreshList();
|
|
T2_GLOBALS._uiElements._active = true;
|
|
T2_GLOBALS._uiElements.show();
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 5704:
|
|
case 5705:
|
|
case 5706:
|
|
case 5707:
|
|
T2_GLOBALS._uiElements._active = true;
|
|
T2_GLOBALS._uiElements.show();
|
|
_object3.setPosition(Common::Point(220, 75));
|
|
_object3.setVisage(572);
|
|
_object3.setStrip(4);
|
|
_object3.setFrame(1);
|
|
// Deliberate fall-through
|
|
case 5702:
|
|
case 5703:
|
|
_object3.fixPriority(1);
|
|
_iconManager.refreshList();
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene570::process(Event &event) {
|
|
SceneExt::process(event);
|
|
|
|
if (!event.handled && (_sceneMode == 10))
|
|
// Password entry active, so pass events to it
|
|
_passwordEntry.process(event);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 580 - Child Protective Services Parking Lot
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene580::Vechile::startAction(CursorType action, Event &event) {
|
|
Scene580 *scene = (Scene580 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_USE) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 1;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5800, &BF_GLOBALS._player, NULL);
|
|
return true;
|
|
} else {
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene580::Door::startAction(CursorType action, Event &event) {
|
|
Scene580 *scene = (Scene580 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_USE) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 5802;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5802, &BF_GLOBALS._player, this, NULL);
|
|
return true;
|
|
} else {
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene580::Lyle::startAction(CursorType action, Event &event) {
|
|
if (action == CURSOR_LOOK) {
|
|
SceneItem::display2(580, 7);
|
|
return true;
|
|
} else {
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene580::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(580);
|
|
setZoomPercents(45, 95, 55, 100);
|
|
BF_GLOBALS._sound1.changeSound(33);
|
|
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
BF_GLOBALS._dayNumber = 1;
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
|
|
|
|
_door.postInit();
|
|
_door.setVisage(580);
|
|
_door.setStrip(4);
|
|
_door.setPosition(Common::Point(168, 41));
|
|
_door.hide();
|
|
_door.setDetails(580, 5, -1, -1, 1, (SceneItem *)NULL);
|
|
|
|
_vechile.postInit();
|
|
_vechile.setVisage(580);
|
|
_vechile.fixPriority(65);
|
|
|
|
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
|
_lyle.postInit();
|
|
_lyle.setVisage(835);
|
|
_lyle.setObjectWrapper(new SceneObjectWrapper());
|
|
_lyle.animate(ANIM_MODE_1, NULL);
|
|
_lyle._moveDiff = Common::Point(2, 1);
|
|
_lyle.setPosition(Common::Point(149, 70));
|
|
BF_GLOBALS._sceneItems.push_back(&_lyle);
|
|
|
|
_vechile.changeZoom(90);
|
|
_vechile.setStrip(3);
|
|
_vechile.setPosition(Common::Point(165, 76));
|
|
_vechile.setDetails(580, 2, 3, -1, 1, (SceneItem *)NULL);
|
|
|
|
BF_GLOBALS._player.setVisage(303);
|
|
|
|
BF_GLOBALS._walkRegions.disableRegion(8);
|
|
BF_GLOBALS._walkRegions.disableRegion(9);
|
|
BF_GLOBALS._walkRegions.disableRegion(10);
|
|
BF_GLOBALS._walkRegions.disableRegion(11);
|
|
} else {
|
|
_vechile.setPosition(Common::Point(159, 72));
|
|
|
|
if (BF_GLOBALS.getFlag(onDuty)) {
|
|
_vechile.setStrip(1);
|
|
_vechile.setFrame(2);
|
|
_vechile.setDetails(300, 11, 13, -1, 1, (SceneItem *)NULL);
|
|
|
|
BF_GLOBALS._player.setVisage(304);
|
|
} else {
|
|
_vechile.setStrip(2);
|
|
_vechile.setFrame(3);
|
|
_vechile.setDetails(580, 0, 1, -1, 1, (SceneItem *)NULL);
|
|
|
|
BF_GLOBALS._player.setVisage(303);
|
|
}
|
|
}
|
|
|
|
BF_GLOBALS._player.updateAngle(_vechile._position);
|
|
|
|
if (BF_GLOBALS._sceneManager._previousScene == 590) {
|
|
// Leaving Services
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager, this, 5801, &BF_GLOBALS._player, NULL);
|
|
} else {
|
|
// Arriving at parking lot
|
|
BF_GLOBALS._player.setPosition(Common::Point(177, 58));
|
|
signal();
|
|
}
|
|
|
|
_item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 580, 6, -1, -1, 1, NULL);
|
|
}
|
|
|
|
void Scene580::signal() {
|
|
switch (_sceneMode) {
|
|
case 1:
|
|
BF_GLOBALS._sceneManager.changeScene(60);
|
|
break;
|
|
case 5802:
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(590);
|
|
break;
|
|
default:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene580::process(Event &event) {
|
|
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
|
|
BF_GLOBALS._player.contains(event.mousePos)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
SceneItem::display2(350, 26);
|
|
|
|
_sceneMode = 0;
|
|
signal();
|
|
event.handled = true;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 590 - Child Protective Services
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene590::Laura::startAction(CursorType action, Event &event) {
|
|
Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
if (!scene->_field17DC)
|
|
scene->_stripNumber = 5905;
|
|
else if (!scene->_field17DE) {
|
|
if (scene->_field17E2) {
|
|
scene->_stripNumber = 5907;
|
|
} else {
|
|
scene->_field17E2 = 1;
|
|
scene->_stripNumber = 5906;
|
|
}
|
|
}
|
|
|
|
scene->setAction(&scene->_action1);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
bool Scene590::Skip::startAction(CursorType action, Event &event) {
|
|
Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_TALK:
|
|
if (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) == 1) {
|
|
scene->_stripNumber = !scene->_field17DC ? 5903 : 5902;
|
|
} else {
|
|
scene->_stripNumber = !scene->_field17DC ? 5901 : 5902;
|
|
}
|
|
|
|
scene->setAction(&scene->_action1);
|
|
scene->_field17DC = 1;
|
|
return true;
|
|
case INV_BASEBALL_CARD:
|
|
scene->_field17DE = 1;
|
|
T2_GLOBALS._uiElements.addScore(10);
|
|
BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 2);
|
|
BF_GLOBALS._player.disableControl();
|
|
|
|
scene->_stripNumber = !scene->_field17DC ? 5900 : 5904;
|
|
scene->_field17DC = 1;
|
|
scene->setAction(&scene->_action2);
|
|
return true;
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
bool Scene590::Exit::startAction(CursorType action, Event &event) {
|
|
ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 100, BF_GLOBALS._player._position.y + 75);
|
|
return true;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene590::Action1::signal() {
|
|
Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
ADD_PLAYER_MOVER(220, 132);
|
|
break;
|
|
case 1:
|
|
scene->_stripManager.start(scene->_stripNumber, this);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._player.enableControl();
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene590::Action2::signal() {
|
|
Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0: {
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 220, 132);
|
|
break;
|
|
}
|
|
case 1:
|
|
ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 220, 132);
|
|
break;
|
|
case 2:
|
|
BF_GLOBALS._player.setVisage(381);
|
|
BF_GLOBALS._player.setStrip(2);
|
|
BF_GLOBALS._player.setFrame(1);
|
|
BF_GLOBALS._player.setPosition(Common::Point(257, 130));
|
|
BF_GLOBALS._player.animate(ANIM_MODE_4, 3, 1, this);
|
|
|
|
scene->_skip.setStrip(2);
|
|
scene->_skip.animate(ANIM_MODE_5, NULL);
|
|
break;
|
|
case 3:
|
|
scene->_skip.animate(ANIM_MODE_6, NULL);
|
|
BF_GLOBALS._player.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 4:
|
|
scene->_skip.setStrip(1);
|
|
scene->_skip.animate(ANIM_MODE_1, NULL);
|
|
|
|
BF_GLOBALS._player.setVisage(368);
|
|
BF_GLOBALS._player.setStrip(7);
|
|
BF_GLOBALS._player.setPosition(Common::Point(238, 131));
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
scene->_stripManager.start(scene->_stripNumber, this);
|
|
break;
|
|
case 5:
|
|
scene->_sceneMode = 3;
|
|
scene->signal();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene590::Scene590(): PalettedScene() {
|
|
_field17DC = _field17DE = _stripNumber = _field17E2 = 0;
|
|
}
|
|
|
|
void Scene590::synchronize(Serializer &s) {
|
|
PalettedScene::synchronize(s);
|
|
s.syncAsSint16LE(_field17DC);
|
|
s.syncAsSint16LE(_field17DE);
|
|
s.syncAsSint16LE(_stripNumber);
|
|
s.syncAsSint16LE(_field17E2);
|
|
}
|
|
|
|
void Scene590::postInit(SceneObjectList *OwnerList) {
|
|
PalettedScene::postInit();
|
|
loadScene(590);
|
|
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
_sound1.play(18);
|
|
_sound1.fade(100, 5, 10, false, NULL);
|
|
|
|
if (BF_GLOBALS._dayNumber == 0) {
|
|
BF_GLOBALS._dayNumber = 1;
|
|
BF_GLOBALS._bookmark = bEndOfWorkDayOne;
|
|
BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 1);
|
|
}
|
|
|
|
_exit.setDetails(Rect(0, 157, 182, 167), 590, -1, -1, -1, 1, NULL);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
BF_GLOBALS._player.setPosition(Common::Point(0, 190));
|
|
|
|
_stripManager.addSpeaker(&_skipSpeaker);
|
|
_stripManager.addSpeaker(&_lauraSpeaker);
|
|
_stripManager.addSpeaker(&_jakeJacketSpeaker);
|
|
|
|
if (BF_GLOBALS.getFlag(onDuty)) {
|
|
BF_GLOBALS._player.setVisage(361);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(6, 2);
|
|
} else {
|
|
BF_GLOBALS._player.setVisage(368);
|
|
BF_GLOBALS._player._moveDiff = Common::Point(6, 2);
|
|
|
|
if ((BF_GLOBALS._bookmark >= bEndOfWorkDayOne) && (BF_GLOBALS._bookmark < bLyleStoppedBy)) {
|
|
_skip.postInit();
|
|
_skip.setVisage(693);
|
|
_skip.setPosition(Common::Point(271, 117));
|
|
_skip.setDetails(590, 26, -1, 27, 1, (SceneItem *)NULL);
|
|
|
|
_laura.postInit();
|
|
_laura.setVisage(692);
|
|
_laura.setPosition(Common::Point(248, 115));
|
|
_laura.setDetails(590, 24, -1, 25, 1, (SceneItem *)NULL);
|
|
}
|
|
}
|
|
|
|
_item2.setDetails(1, 590, 0, -1, 12, 1);
|
|
_item3.setDetails(3, 590, 2, -1, 14, 1);
|
|
_item4.setDetails(20, 590, 3, -1, 15, 1);
|
|
_item5.setDetails(22, 590, 4, -1, 16, 1);
|
|
_item6.setDetails(7, 590, 6, -1, 17, 1);
|
|
_item7.setDetails(7, 590, 6, -1, 18, 1);
|
|
_item8.setDetails(9, 590, 7, -1, 19, 1);
|
|
_item9.setDetails(11, 590, 8, -1, 20, 1);
|
|
_item10.setDetails(13, 590, 9, -1, 21, 1);
|
|
_item11.setDetails(15, 590, 10, -1, 22, 1);
|
|
_item12.setDetails(17, 590, 11, -1, 23, 1);
|
|
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
setAction(&_sequenceManager, this, 5900, &BF_GLOBALS._player, NULL);
|
|
}
|
|
|
|
void Scene590::signal() {
|
|
static uint32 black = 0;
|
|
|
|
switch (_sceneMode) {
|
|
case 1:
|
|
_sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(271);
|
|
break;
|
|
case 2:
|
|
_sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(580);
|
|
break;
|
|
case 3:
|
|
BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
|
|
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 0, 170);
|
|
|
|
_skip.animate(ANIM_MODE_1, NULL);
|
|
ADD_MOVER_NULL(_skip, 0, 170);
|
|
|
|
_laura.animate(ANIM_MODE_1, NULL);
|
|
ADD_MOVER_NULL(_laura, 0, 170);
|
|
|
|
_sceneMode = 1;
|
|
addFader((byte *)&black, 2, this);
|
|
break;
|
|
default:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene590::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 Scene590::dispatch() {
|
|
if (!_action && (BF_GLOBALS._player._position.x < 182) && (BF_GLOBALS._player._position.y > 158)) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 2;
|
|
setAction(&_sequenceManager, this, 5901, &BF_GLOBALS._player, NULL);
|
|
}
|
|
}
|
|
|
|
} // End of namespace BlueForce
|
|
|
|
} // End of namespace TsAGE
|