scummvm/engines/tsage/blue_force/blueforce_scenes2.cpp

1850 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_scenes2.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
namespace TsAGE {
namespace BlueForce {
/*--------------------------------------------------------------------------
* Scene 200 - Credits - Motorcycle Training
*
*--------------------------------------------------------------------------*/
void Scene200::Action1::signal() {
Scene200 *scene = (Scene200 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
assert(owner);
switch (_actionIndex++) {
case 0:
setDelay(1);
break;
case 1:
BF_GLOBALS._scenePalette.loadPalette(235);
BF_GLOBALS._scenePalette.refresh();
_state = 0;
setDelay(30);
break;
case 2:
assert(_owner);
owner->animate(ANIM_MODE_5, this);
break;
case 3:
if (++_state < 2) {
scene->_action2.signal();
owner->setFrame(1);
_actionIndex = 2;
}
setDelay(2);
break;
case 4: {
PaletteRotation *rot;
rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
rot->setDelay(10);
rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
rot->setDelay(10);
scene->setAction(&scene->_sequenceManager, this, 201, &scene->_object1, &scene->_object2,
&scene->_object3, &scene->_object4, &scene->_object5, &scene->_object6, NULL);
break;
}
case 5:
BF_GLOBALS._sceneManager.changeScene(210);
break;
default:
break;
}
}
void Scene200::Action2::signal() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
assert(owner);
switch (_actionIndex++) {
case 1:
owner->setPosition(owner->_position, 0);
owner->animate(ANIM_MODE_5, this);
break;
case 2:
owner->setPosition(owner->_position, 1000);
owner->setFrame(1);
_actionIndex = 0;
setDelay(1);
break;
default:
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene200::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(200);
setZoomPercents(0, 100, 200, 100);
BF_GLOBALS._sound1.play(3);
_object10.postInit();
_object10.setVisage(200);
_object10.setPosition(Common::Point(114, 102));
_object10.setStrip(2);
_object10.setFrame(1);
_object10.changeZoom(100);
_object1.postInit();
_object1.hide();
_object2.postInit();
_object2.hide();
_object3.postInit();
_object3.hide();
_object4.postInit();
_object4.hide();
_object5.postInit();
_object5.hide();
_object6.postInit();
_object6.hide();
_object11.postInit();
_object11.setVisage(200);
_object11.setPosition(Common::Point(96, 112), 1000);
_object11.setStrip(3);
_object11.setFrame(1);
_object11.changeZoom(100);
_object10.setAction(&_action1);
_object11.setAction(&_action2);
}
void Scene200::remove() {
BF_GLOBALS._scenePalette.clearListeners();
SceneExt::remove();
}
/*--------------------------------------------------------------------------
* Scene 210 - Credits - Car Training
*
*--------------------------------------------------------------------------*/
void Scene210::Action1::signal() {
Scene210 *scene = (Scene210 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(_owner);
assert(owner);
switch (_actionIndex++) {
case 0:
setDelay(1);
break;
case 1:
owner->animate(ANIM_MODE_5, this);
break;
case 2: {
PaletteRotation *rot;
rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
rot->setDelay(10);
rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
rot->setDelay(10);
scene->setAction(&scene->_sequenceManager, this, 210, &scene->_object10, &scene->_object11,
&scene->_object12, &scene->_object13, &scene->_object14, &scene->_object15, NULL);
break;
}
case 3:
BF_GLOBALS._sceneManager.changeScene(220);
break;
default:
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene210::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(210);
// FIXME: This fixes an obvious glitch during scene transition.
// Shouldn't it be included in the 2 previous functions?
clearScreen();
//
BF_GLOBALS._scenePalette.loadPalette(235);
BF_GLOBALS._scenePalette.refresh();
_object9.postInit();
_object9.setVisage(210);
_object9.setPosition(Common::Point(146, 151));
_object9.setStrip(1);
_object9.setFrame(1);
_object9.changeZoom(100);
_object9.setAction(&_action1);
_object10.postInit();
_object10.hide();
_object11.postInit();
_object11.hide();
_object12.postInit();
_object12.hide();
_object13.postInit();
_object13.hide();
_object14.postInit();
_object14.hide();
_object15.postInit();
_object15.hide();
}
void Scene210::remove() {
BF_GLOBALS._scenePalette.clearListeners();
SceneExt::remove();
}
/*--------------------------------------------------------------------------
* Scene 220 - Credits - Martial Arts
*
*--------------------------------------------------------------------------*/
void Scene220::Action1::signal() {
Scene220 *scene = (Scene220 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(1);
break;
case 1:
BF_GLOBALS._scenePalette.loadPalette(235);
BF_GLOBALS._scenePalette.refresh();
setDelay(30);
break;
case 2:
BF_GLOBALS._scenePalette.clearListeners();
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_object2.setVisage(221);
scene->_object2.setFrame(1);
scene->_object2.setPosition(Common::Point(178, 122));
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 4:
BF_GLOBALS._scenePalette.loadPalette(2);
BF_GLOBALS._scenePalette.refresh();
BF_GLOBALS._scenePalette.loadPalette(235);
BF_GLOBALS._scenePalette.refresh();
setDelay(5);
break;
case 5:
scene->_object1.remove();
scene->_object2.setVisage(222);
scene->_object2.setFrame(1);
scene->_object2.setPosition(Common::Point(164, 138));
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 6:
scene->_object2.setVisage(223);
scene->_object2.setFrame(1);
scene->_object2.setPosition(Common::Point(164, 139));
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 7:
scene->_object2.setVisage(230);
scene->_object2.setFrame(1);
scene->_object2.setPosition(Common::Point(168, 136));
scene->_object2.animate(ANIM_MODE_4, 13, 1, this);
break;
case 8:
scene->_object2.animate(ANIM_MODE_5, this);
scene->_object3.postInit();
scene->_object3.setVisage(231);
scene->_object3.setPosition(Common::Point(65, 179));
scene->_object3.setStrip(1);
scene->_object3.setFrame(1);
scene->_object3.changeZoom(100);
scene->_object3.setAction(&scene->_action2, this);
break;
case 9:
break;
case 10:
scene->_object2.setVisage(224);
scene->_object2.setFrame(1);
scene->_object2.setPosition(Common::Point(148, 143));
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 11: {
PaletteRotation *rot;
rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
rot->setDelay(10);
rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
rot->setDelay(10);
scene->setAction(&scene->_sequenceManager, this, 220, &scene->_object4, &scene->_object5,
&scene->_object6, &scene->_object7, &scene->_object8, &scene->_object9, NULL);
break;
}
case 12:
scene->_object2.setVisage(232);
scene->_object2.setFrame(1);
scene->_object2.setPosition(Common::Point(146, 143));
scene->_object2._numFrames = 5;
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 13:
scene->_object2.setVisage(228);
scene->_object2.setFrame(1);
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 14:
scene->_object2.setVisage(229);
scene->_object2.setFrame(1);
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 15:
BF_GLOBALS._sceneManager.changeScene(225);
break;
default:
break;
}
}
void Scene220::Action2::signal() {
Scene220 *scene = (Scene220 *)BF_GLOBALS._sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object3.setPosition(scene->_object3._position);
scene->_object3.animate(ANIM_MODE_5, this);
break;
case 1:
setDelay(50);
break;
case 2:
scene->_object3.remove();
remove();
break;
default:
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene220::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(220);
// FIXME: This fixes an obvious glitch during scene transition.
// Shouldn't it be included in the 2 previous functions?
clearScreen();
//
_object2.postInit();
_object2.setVisage(220);
_object2.setPosition(Common::Point(182, 122));
_object2.setStrip(1);
_object2.setFrame(1);
_object2.changeZoom(100);
_object1.postInit();
_object1.setVisage(220);
_object1.setPosition(Common::Point(164, 138));
_object1.setStrip(2);
_object1.setFrame(1);
_object1.changeZoom(100);
_object4.postInit();
_object4.hide();
_object5.postInit();
_object5.hide();
_object6.postInit();
_object6.hide();
_object7.postInit();
_object7.hide();
_object8.postInit();
_object8.hide();
_object9.postInit();
_object9.hide();
_object2.setAction(&_action1);
}
void Scene220::remove() {
BF_GLOBALS._scenePalette.clearListeners();
SceneExt::remove();
}
/*--------------------------------------------------------------------------
* Scene 225 - Credits - Gun Training
*
*--------------------------------------------------------------------------*/
void Scene225::Action1::signal() {
Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
BF_GLOBALS._scenePalette.loadPalette(235);
BF_GLOBALS._scenePalette.refresh();
setDelay(5);
break;
case 2:
owner->animate(ANIM_MODE_4, 7, 1, this);
break;
case 3:
scene->_object8.animate(ANIM_MODE_5, this);
owner->animate(ANIM_MODE_5, this);
break;
case 4:
scene->_object8.remove();
break;
case 5:
scene->_action3.signal();
break;
case 6:
owner->setPosition(Common::Point(owner->_position.x, owner->_position.y - 4));
owner->setStrip(2);
owner->setFrame(1);
owner->animate(ANIM_MODE_5, this);
break;
case 7:
scene->_action2.signal();
break;
case 8:
owner->animate(ANIM_MODE_6, this);
break;
case 9:
owner->setPosition(Common::Point(owner->_position.x - 2, owner->_position.y - 1));
owner->setStrip(3);
owner->setFrame(1);
owner->animate(ANIM_MODE_5, this);
break;
case 10: {
owner->setPosition(Common::Point(owner->_position.x + 10, owner->_position.y + 4));
owner->setStrip(4);
owner->setFrame(1);
owner->fixPriority(116);
owner->animate(ANIM_MODE_1, NULL);
Common::Point destPos(138, 117);
NpcMover *mover = new NpcMover();
owner->addMover(mover, &destPos, this);
break;
}
case 11: {
owner->setPosition(Common::Point(owner->_position.x - 12, owner->_position.y - 1));
owner->setStrip(5);
owner->setFrame(1);
owner->_moveDiff.x = 8;
Common::Point destPos(402, 116);
NpcMover *mover2 = new NpcMover();
owner->addMover(mover2, &destPos, this);
BF_GLOBALS._player.setPosition(Common::Point(owner->_position.x, 0));
ADD_MOVER_NULL(BF_GLOBALS._player, 500, 0);
break;
}
case 12:
owner->setVisage(1227);
owner->setStrip(1);
owner->setFrame(1);
owner->animate(ANIM_MODE_5, this);
break;
case 13:
owner->setStrip(2);
owner->setFrame(4);
scene->_action4.signal();
break;
case 14:
owner->animate(ANIM_MODE_6, this);
break;
case 15:
scene->_action6.signal();
break;
case 16:
owner->animate(ANIM_MODE_4, 4, 1, this);
break;
case 17:
owner->setFrame(6);
owner->animate(ANIM_MODE_5, this);
break;
case 18:
scene->_action5.signal();
break;
case 19:
owner->animate(ANIM_MODE_4, 4, -1, this);
break;
case 20:
PaletteRotation *rot;
rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
rot->setDelay(10);
rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
rot->setDelay(10);
scene->setAction(&scene->_sequenceManager, this, 225, &scene->_object15, &scene->_object16,
&scene->_object17, &scene->_object18, &scene->_object19, &scene->_object20, NULL);
break;
case 21:
scene->_object21.hide();
BF_GLOBALS._player._moveDiff.x = 5;
BF_GLOBALS._sceneManager.changeScene(265);
break;
default:
break;
}
}
void Scene225::Action2::signal() {
Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
break;
case 1:
owner->animate(ANIM_MODE_5, this);
break;
case 2:
owner->setStrip(3);
owner->setFrame(2);
scene->_action1.signal();
break;
default:
break;
}
}
void Scene225::Action3::signal() {
Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
break;
case 1:
owner->animate(ANIM_MODE_5, this);
break;
case 2:
owner->setStrip(3);
owner->setFrame(1);
scene->_action1.signal();
break;
default:
break;
}
}
void Scene225::Action4::signal() {
Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
break;
case 1:
owner->animate(ANIM_MODE_5, this);
break;
case 2:
owner->setStrip(5);
owner->setFrame(4);
scene->_action1.signal();
break;
default:
break;
}
}
void Scene225::Action5::signal() {
Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
break;
case 1:
owner->animate(ANIM_MODE_5, this);
break;
case 2:
owner->setStrip(3);
owner->setFrame(6);
scene->_action1.signal();
break;
default:
break;
}
}
void Scene225::Action6::signal() {
Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
switch (_actionIndex++) {
case 0:
break;
case 1:
owner->animate(ANIM_MODE_5, this);
break;
case 2:
owner->setStrip(3);
owner->setFrame(3);
scene->_action1.signal();
break;
default:
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene225::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(1225);
loadBackground(-320, 0);
_object8.postInit();
_object8.setVisage(1225);
_object8.setPosition(Common::Point(114, 119));
_object8._frame = 1;
_object8.setStrip(2);
_object8.changeZoom(100);
_object9.postInit();
_object9.setVisage(1226);
_object9.setPosition(Common::Point(83, 128));
_object9.setStrip(1);
_object9.changeZoom(100);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setPosition(Common::Point(83, 0));
BF_GLOBALS._player.hide();
_object10.postInit();
_object10.setVisage(1225);
_object10.setPosition(Common::Point(237, 29));
_object10.setStrip(1);
_object10._frame = 1;
_object10.changeZoom(100);
_object10._numFrames = 2;
_object11.postInit();
_object11.setVisage(1225);
_object11.setPosition(Common::Point(290, 47));
_object11.setStrip(1);
_object11._frame = 1;
_object11.changeZoom(100);
_object11._numFrames = 2;
_object12.postInit();
_object12.setVisage(1225);
_object12.setPosition(Common::Point(368, 35));
_object12.setStrip(4);
_object12._frame = 1;
_object12.changeZoom(100);
_object12._numFrames = 2;
_object13.postInit();
_object13.setVisage(1225);
_object13.setPosition(Common::Point(416, 33));
_object13.setStrip(1);
_object13._frame = 1;
_object13.changeZoom(100);
_object13._numFrames = 2;
_object14.postInit();
_object14.setVisage(1225);
_object14.setPosition(Common::Point(476, 30));
_object14.setStrip(1);
_object14._frame = 1;
_object14.changeZoom(100);
_object14._numFrames = 2;
_object21.postInit();
_object21.setVisage(235);
_object21.setStrip(1);
_object21._frame = 1;
_object21.setPosition(Common::Point(498, 41));
_object21.changeZoom(100);
_object21.hide();
_object15.postInit();
_object15.hide();
_object16.postInit();
_object16.hide();
_object17.postInit();
_object17.hide();
_object18.postInit();
_object18.hide();
_object19.postInit();
_object19.hide();
_object20.postInit();
_object20.hide();
_object9.setAction(&_action1);
_object10.setAction(&_action2);
_object11.setAction(&_action3);
_object12.setAction(&_action4);
_object13.setAction(&_action5);
_object14.setAction(&_action6);
}
void Scene225::remove() {
BF_GLOBALS._scenePalette.clearListeners();
SceneExt::remove();
}
/*--------------------------------------------------------------------------
* Scene 265 - Intro - Graduation Article
*
*--------------------------------------------------------------------------*/
void Scene265::Action1::signal() {
switch (_actionIndex++) {
case 0:
BF_GLOBALS._scenePalette.loadPalette(2);
setDelay(30);
break;
case 1:
BF_GLOBALS._scenePalette.refresh();
setDelay(240);
break;
case 2:
ADD_MOVER(BF_GLOBALS._player, 160, 280);
break;
case 3:
// Wait until sound finishes playing
if (BF_GLOBALS._sound1.isPlaying())
_actionIndex = 3;
setDelay(1);
break;
case 4:
BF_GLOBALS._dayNumber = 1;
BF_GLOBALS._sceneManager.changeScene(190);
break;
default:
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene265::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(265);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.setPosition(Common::Point(160, 100));
BF_GLOBALS._player.hide();
setAction(&_action1);
}
void Scene265::remove() {
clearScreen();
SceneExt::remove();
}
/*--------------------------------------------------------------------------
* Scene 270 - Living Room & Kitchen
*
*--------------------------------------------------------------------------*/
void Scene270::Action1::signal() {
Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
scene->setAction(&scene->_sequenceManager2, this, 2703, &scene->_tv, NULL);
}
/*--------------------------------------------------------------------------*/
bool Scene270::Lyle::startAction(CursorType action, Event &event) {
Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_TALK:
scene->_field21A0 = 1;
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2706;
if (scene->_field380 == 1) {
scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object2, NULL);
} else {
scene->signal();
}
return true;
case INV_CRATE1:
scene->_field21A0 = 2;
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2706;
if (scene->_field380 == 1) {
scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, NULL);
} else {
scene->signal();
}
return true;
default:
return NamedObject::startAction(action, event);
}
}
bool Scene270::Grandma::startAction(CursorType action, Event &event) {
Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_TALK:
switch (BF_GLOBALS._dayNumber) {
case 1:
// Day 1
if (scene->_field380 == 1) {
scene->_stripManager.start((scene->_grandma._position.x == 157) ? 2712 : 2723, &BF_GLOBALS._stripProxy);
} else if (BF_GLOBALS._bookmark == bBookedFrankieEvidence) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2710;
scene->setAction(&scene->_sequenceManager1, scene, 2710, &BF_GLOBALS._player, &scene->_grandma, NULL);
} else if (BF_GLOBALS.getFlag(onDuty) || (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) == 2) ||
(scene->_field386 != 0)) {
scene->_stripManager.start(2723, &BF_GLOBALS._stripProxy);
} else {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2715;
scene->setAction(&scene->_sequenceManager1, scene, 2715, &BF_GLOBALS._player, &scene->_grandma, NULL);
}
return true;
case 3:
// Day 3
if (scene->_field380 == 1) {
scene->_stripManager.start(2712, &BF_GLOBALS._stripProxy);
} else if (BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3)) {
scene->_stripManager.start(2714, &BF_GLOBALS._stripProxy);
} else {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2713;
scene->setAction(&scene->_sequenceManager1, scene, 2713, &BF_GLOBALS._player, &scene->_grandma, NULL);
}
return true;
default:
break;
}
break;
default:
break;
}
return NamedObject::startAction(action, event);
}
/*--------------------------------------------------------------------------*/
bool Scene270::Item::startAction(CursorType action, Event &event) {
Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
if ((action == CURSOR_USE) && (scene->_field380 == 0)) {
BF_GLOBALS._player.disableControl();
scene->_object2.postInit();
scene->_object2.hide();
scene->_sceneMode = 2705;
scene->setAction(&scene->_sequenceManager1, scene, 2705, &BF_GLOBALS._player, &scene->_object2, NULL);
return true;
} else {
return NamedHotspot::startAction(action, event);
}
}
bool Scene270::Exit::startAction(CursorType action, Event &event) {
Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
if (!_action && !scene->_field384 && !scene->_field386) {
if (scene->_field380 == 1) {
scene->_tempPos = Common::Point(320, 140);
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2706;
scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object2, NULL);
} else {
ADD_PLAYER_MOVER(320, 140);
}
return true;
} else {
return false;
}
}
/*--------------------------------------------------------------------------*/
Scene270::Scene270(): SceneExt() {
_field380 = _field382 =_field384 = _field386 = 0;
_field219A = _tempPos.x = _tempPos.y = _field21A0 = 0;
_sceneMode = 0;
}
void Scene270::synchronize(Serializer &s) {
SceneExt::synchronize(s);
s.syncAsSint16LE(_field380);
s.syncAsSint16LE(_field382);
s.syncAsSint16LE(_field384);
s.syncAsSint16LE(_field386);
s.syncAsSint16LE(_field219A);
s.syncAsSint16LE(_tempPos.x);
s.syncAsSint16LE(_tempPos.y);
s.syncAsSint16LE(_field21A0);
}
void Scene270::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(270);
setZoomPercents(120, 90, 130, 100);
if (BF_GLOBALS._sceneManager._previousScene != 560)
BF_GLOBALS._sound1.fadeSound(26);
_exit.setDetails(Rect(310, 115, 320, 167), 270, -1, -1, -1, 1, NULL);
if (BF_GLOBALS._dayNumber == 0) {
BF_GLOBALS._dayNumber = 1;
BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 2);
BF_INVENTORY.setObjectScene(INV_CRATE1, 1);
BF_GLOBALS._sceneManager._previousScene = 710;
}
if (((BF_GLOBALS._bookmark >= bLauraToParamedics) && (BF_GLOBALS._dayNumber == 1) &&
(BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 2) &&
(BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 1)) ||
((BF_GLOBALS._dayNumber == 3) && BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3))) {
BF_GLOBALS._walkRegions.disableRegion(6);
BF_GLOBALS._walkRegions.disableRegion(14);
BF_GLOBALS._walkRegions.disableRegion(19);
_grandma.postInit();
_grandma.setVisage(274);
_grandma.setPosition(Common::Point(157, 132));
_grandma._numFrames = 5;
_grandma.animate(ANIM_MODE_2, NULL);
_grandma.fixPriority(129);
}
if (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard) {
_grandma.postInit();
}
if (BF_GLOBALS._sceneManager._previousScene == 710) {
_skip.postInit();
_laura.postInit();
_lyle.postInit();
_grandma.postInit();
}
_stripManager.addSpeaker(&_grandmaSpeaker);
_stripManager.addSpeaker(&_lyleSpeaker);
_stripManager.addSpeaker(&_jakeSpeaker);
_stripManager.addSpeaker(&_skipSpeaker);
_stripManager.addSpeaker(&_lauraSpeaker);
_stripManager.addSpeaker(&_gameTextSpeaker);
_tv.postInit();
_tv.setVisage(270);
_tv.setPosition(Common::Point(264, 74));
_tv.setStrip(5);
_tv.fixPriority(132);
_tv._numFrames = 3;
_tv.setAction(&_action1);
_fireplace.postInit();
_fireplace.setVisage(270);
_fireplace.setStrip(2);
_fireplace.setPosition(Common::Point(302, 121));
_fireplace.fixPriority(132);
_fireplace.animate(ANIM_MODE_2, NULL);
_fridge.setDetails(Rect(0, 56, 56, 130), 270, 9, 10, 11, 1, NULL);
_object3.setDetails(270, 12, 13, 14, 1, (SceneItem *)NULL);
_laura.setDetails(270, 15, -1, -1, 1, (SceneItem *)NULL);
_skip.setDetails(270, 14, -1, -1, 1, (SceneItem *)NULL);
_lyle.setDetails(270, 34, 35, 36, 1, (SceneItem *)NULL);
_tv.setDetails(270, 3, 4, 5, 1, (SceneItem *)NULL);
_fireplace.setDetails(270, 6, 7, 8, 1, (SceneItem *)NULL);
if ((BF_GLOBALS._sceneManager._previousScene == 710) && (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard)) {
_grandma.setDetails(270, 15, 16, 17, 1, (SceneItem *)NULL);
} else {
_grandma.setDetails(270, 40, 16, 17, 1, (SceneItem *)NULL);
}
_afgan.setDetails(4, 270, 27, 28, 29, 1);
_couch.setDetails(1, 270, 18, 19, 20, 1);
_photos.setDetails(Rect(278, 50, 318, 72), 270, 21, 22, 23, 1, NULL);
_appliances.setDetails(3, 270, 24, 25, 26, 1);
_ivy.setDetails(2, 270, 30, 31, 32, 1);
_background.setDetails(Rect(0, 0, 320, 168), 270, 0, 1, 2, 1, NULL);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player._moveDiff.x = 8;
BF_GLOBALS._player.changeZoom(-1);
BF_GLOBALS._player.disableControl();
switch (BF_GLOBALS._sceneManager._previousScene) {
case 560:
if (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard) {
_field219A = 1;
BF_GLOBALS._player._moveDiff.x = 5;
_field386 = 0;
_grandma.animate(ANIM_MODE_1, NULL);
setAction(&_sequenceManager1, NULL, 2720, &BF_GLOBALS._player, &_grandma, NULL);
BF_GLOBALS._bookmark = bLyleStoppedBy;
} else {
_sceneMode = 2700;
setAction(&_sequenceManager1, this, 2700, &BF_GLOBALS._player, NULL);
}
break;
case 690:
BF_GLOBALS._player.setPosition(Common::Point(-13, 162));
_sceneMode = 2702;
setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
break;
case 710:
BF_GLOBALS._player._moveDiff.x = 6;
_sceneMode = 2717;
setAction(&_sequenceManager1, this, 2717, &BF_GLOBALS._player, &_laura, &_skip, &_lyle, &_grandma, NULL);
break;
default:
_sceneMode = 2701;
setAction(&_sequenceManager1, this, 2701, &BF_GLOBALS._player, NULL);
break;
}
}
void Scene270::signal() {
switch (_sceneMode) {
case 10:
_sceneMode = 2702;
setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
break;
case 11:
BF_GLOBALS._player._strip = 8;
BF_GLOBALS._player._frame = 1;
if (_field382) {
_sceneMode = 2719;
_stripManager.start(2720, this);
} else {
_field382 = 1;
_sceneMode = 13;
_stripManager.start(2718, this);
}
break;
case 12:
BF_GLOBALS._player._strip = 8;
BF_GLOBALS._player._frame = 1;
_sceneMode = 13;
_stripManager.start(2719, this);
break;
case 13:
case 2713:
case 2715:
BF_GLOBALS._player.enableControl();
break;
case 2700:
_field219A = 1;
BF_GLOBALS._player._strip = 6;
BF_GLOBALS._player.enableControl();
break;
case 2701:
BF_GLOBALS._player._strip = 2;
BF_GLOBALS._player.enableControl();
_field219A = 1;
break;
case 2702:
BF_GLOBALS._player._strip = 1;
BF_GLOBALS._player.enableControl();
_field219A = 1;
break;
case 2705:
_field380 = 1;
BF_GLOBALS._player.enableControl();
break;
case 2706:
BF_GLOBALS._player.changeZoom(-1);
_object2.remove();
_field380 = 0;
switch (_field21A0) {
case 1:
_sceneMode = 11;
ADD_PLAYER_MOVER(192, 135);
break;
case 2:
if (BF_GLOBALS.getFlag(shownLyleCrate1Day1)) {
SceneItem::display2(270, 37);
BF_GLOBALS._player.enableControl();
} else {
T2_GLOBALS._uiElements.addScore(30);
BF_GLOBALS.setFlag(shownLyleCrate1Day1);
_sceneMode = 12;
ADD_PLAYER_MOVER(192, 135);
}
break;
default:
BF_GLOBALS._player.enableControl();
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, _tempPos.x, _tempPos.y);
break;
}
_field21A0 = 0;
break;
case 2710:
BF_GLOBALS._bookmark = bEndOfWorkDayOne;
BF_GLOBALS._player.enableControl();
break;
case 2711:
BF_GLOBALS._player.setPosition(Common::Point(150, 300));
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._sceneManager.changeScene(180);
BF_GLOBALS._bookmark = bLyleStoppedBy;
break;
case 2712:
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._sceneManager.changeScene(180);
break;
case 2714:
BF_GLOBALS._sceneManager.changeScene(560);
break;
case 2717:
_sceneMode = 2718;
_lyle.setFrame2(-1);
setAction(&_sequenceManager1, this, 2718, &BF_GLOBALS._player, &_laura, &_skip,
&_lyle, &_grandma, NULL);
break;
case 2718:
BF_GLOBALS._walkRegions.disableRegion(6);
BF_GLOBALS._walkRegions.disableRegion(14);
BF_GLOBALS._walkRegions.disableRegion(19);
_field219A = 1;
BF_GLOBALS._bookmark = bTalkedToGrannyAboutSkipsCard;
_grandma.setStrip(8);
_grandma._frame = 5;
_field384 = 1;
_field386 = 1;
BF_GLOBALS._player._moveDiff.x = 8;
BF_GLOBALS._player.enableControl();
break;
case 2719:
_sceneMode = 13;
_field384 = 0;
BF_GLOBALS._player._moveDiff.x = 6;
_lyle.setFrame2(-1);
setAction(&_sequenceManager1, this, 2719, &BF_GLOBALS._player, &_lyle, &_grandma, NULL);
break;
default:
break;
}
}
void Scene270::process(Event &event) {
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
(_field380 == 1) && !_action) {
_tempPos = event.mousePos;
BF_GLOBALS._player.disableControl();
_sceneMode = 2706;
setAction(&_sequenceManager1, this, 2706, &BF_GLOBALS._player, &_object2, NULL);
event.handled = true;
}
SceneExt::process(event);
if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1)) &&
!_field384 && !_field386) {
// Check if the cursor is on an exit
if (_exit.contains(event.mousePos)) {
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_E);
BF_GLOBALS._events.setCursor(surface);
} else {
// In case an exit cursor was being shown, restore the previously selected cursor
CursorType cursorId = BF_GLOBALS._events.getCursor();
BF_GLOBALS._events.setCursor(cursorId);
}
}
}
void Scene270::dispatch() {
if (_field384) {
_lyle.updateAngle(BF_GLOBALS._player._position);
if (_lyle._angle < 110)
_lyle.setFrame2(4);
else if (_lyle._angle < 180)
_lyle.setFrame2(3);
else if (_lyle._angle < 250)
_lyle.setFrame2(2);
else
_lyle.setFrame2(1);
}
if (_field386) {
if (BF_GLOBALS._player._position.x > 290) {
_grandma.setFrame(6);
} else if (BF_GLOBALS._player._position.x > 274) {
_grandma.setFrame(5);
} else if (BF_GLOBALS._player._position.x > 258) {
_grandma.setFrame(4);
} else if (BF_GLOBALS._player._position.x > 242) {
_grandma.setFrame(3);
} else if (BF_GLOBALS._player._position.x > 226) {
_grandma.setFrame(2);
} else if (BF_GLOBALS._player._position.x > 210) {
if ((_grandma._animateMode == ANIM_MODE_NONE) && (_grandma._frame > 1))
_grandma.animate(ANIM_MODE_6, NULL);
} else {
if ((_grandma._animateMode == ANIM_MODE_NONE) && (_grandma._frame < 3))
_grandma.animate(ANIM_MODE_4, 3, 1, NULL);
}
}
if (!_action && _field219A) {
if ((BF_GLOBALS._player._position.x > 236) && (BF_GLOBALS._player._position.y < 125)) {
_field219A = 0;
BF_GLOBALS._player.disableControl();
if (!_field384) {
BF_GLOBALS._sceneManager.changeScene(560);
} else {
BF_GLOBALS._player.addMover(NULL);
SceneItem::display2(270, 38);
_sceneMode = 2700;
ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 10, BF_GLOBALS._player._position.y + 15);
}
}
if (BF_GLOBALS._player._position.x <= 20) {
_field219A = 0;
BF_GLOBALS._player.disableControl();
BF_GLOBALS._player.addMover(NULL);
BF_GLOBALS._player._strip = 3;
BF_GLOBALS._player._frame = 1;
if (BF_GLOBALS._sceneObjects->contains(&_grandma)) {
_sceneMode = 10;
_stripManager.start(2711, this);
} else {
SceneItem::display2(270, 33);
_sceneMode = 2702;
setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
}
}
if (BF_GLOBALS._player._position.x > 310) {
_field219A = 0;
BF_GLOBALS._player.disableControl();
if (!_field384 && !_field386) {
_sceneMode = 2712;
setAction(&_sequenceManager1, this, 2712, &BF_GLOBALS._player, NULL);
} else {
BF_GLOBALS._player.addMover(NULL);
BF_GLOBALS._player._strip = 2;
BF_GLOBALS._player._frame = 1;
SceneItem::display2(270, !_field384 ? 39 : 38);
_sceneMode = 2701;
ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 10, BF_GLOBALS._player._position.y);
}
}
}
SceneExt::dispatch();
}
/*--------------------------------------------------------------------------
* Scene 271 - Living Room & Kitchen #2
*
*--------------------------------------------------------------------------*/
void Scene271::Action1::signal() {
Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
setAction(&scene->_sequenceManager2, this, 2703, &scene->_tv, NULL);
}
/*--------------------------------------------------------------------------*/
bool Scene271::Object12::startAction(CursorType action, Event &event) {
Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_TALK:
if (BF_GLOBALS._dayNumber == 1) {
if (!BF_GLOBALS.getFlag(onDuty) && (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 2)) {
scene->_sceneMode = 2715;
scene->setAction(&scene->_sequenceManager1, scene, 2715, &BF_GLOBALS._player, NULL);
return true;
}
} else if (BF_GLOBALS._dayNumber == 3) {
if (scene->_field796 == 1) {
scene->_stripManager.start(2712, &BF_GLOBALS._stripProxy);
return true;
} else if (BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3)) {
scene->_stripManager.start(2714, &BF_GLOBALS._stripProxy);
return true;
} else {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2713;
scene->setAction(&scene->_sequenceManager1, scene, 2713, &BF_GLOBALS._player, &scene->_object12, NULL);
BF_GLOBALS.setFlag(fGotGreen355fTalkedToGrannyDay3);
return true;
}
}
break;
default:
break;
}
return NamedObject::startAction(action, event);
}
/*--------------------------------------------------------------------------*/
bool Scene271::Item::startAction(CursorType action, Event &event) {
Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
if ((action == CURSOR_USE) && !scene->_field796) {
BF_GLOBALS._player.disableControl();
scene->_object1.postInit();
scene->_object1.hide();
scene->_sceneMode = 2705;
scene->setAction(&scene->_sequenceManager1, scene, 2705, &BF_GLOBALS._player, &scene->_object1, NULL);
return true;
} else {
return NamedHotspot::startAction(action, event);
}
}
bool Scene271::Exit::startAction(CursorType action, Event &event) {
Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
if (!scene->_action) {
if (scene->_field796 == 1) {
scene->_tempPos = Common::Point(320, 140);
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2706;
scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object1, NULL);
} else {
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 320, 140);
}
}
return true;
}
/*--------------------------------------------------------------------------*/
Scene271::Scene271() {
_field796 = _field2E16 = 0;
_tempPos.x = _tempPos.y = 0;
_rect1 = Rect(236, 120, 266, 130);
}
void Scene271::synchronize(Serializer &s) {
PalettedScene::synchronize(s);
s.syncAsSint16LE(_field796);
s.syncAsSint16LE(_field2E16);
s.syncAsSint16LE(_tempPos.x);
s.syncAsSint16LE(_tempPos.y);
_rect1.synchronize(s);
}
void Scene271::postInit(SceneObjectList *OwnerList) {
PalettedScene::postInit();
loadScene(270);
setZoomPercents(120, 80, 140, 100);
BF_GLOBALS._sound1.fadeSound(26);
_stripManager.addSpeaker(&_grandmaSpeaker);
_stripManager.addSpeaker(&_lyleSpeaker);
_stripManager.addSpeaker(&_jakeSpeaker);
_stripManager.addSpeaker(&_skipSpeaker);
_stripManager.addSpeaker(&_lauraSpeaker);
_stripManager.addSpeaker(&_gameTextSpeaker);
_stripManager.addSpeaker(&_granTextSpeaker);
_stripManager.addSpeaker(&_lyleTextSpeaker);
_exit.setDetails(Rect(310, 115, 320, 167), 270, -1, -1, -1, 1, NULL);
_tv.postInit();
_tv.setVisage(270);
_tv.setPosition(Common::Point(264, 74));
_tv.setStrip(5);
_tv.fixPriority(132);
_tv._numFrames = 3;
_tv.setAction(&_action1);
if ((BF_GLOBALS._sceneManager._previousScene != 280) && (BF_GLOBALS._sceneManager._previousScene != 620)) {
_object10.postInit();
_object10.setVisage(270);
_object10.setStrip(2);
_object10.setPosition(Common::Point(302, 121));
_object10.fixPriority(132);
_object10.animate(ANIM_MODE_2, NULL);
}
_object5.postInit();
_object5.hide();
_item5.setDetails(Rect(0, 56, 56, 130), 270, 9, 10, 11, 1, NULL);
_object6.setDetails(270, 12, 13, 14, 1, (SceneItem *)NULL);
_object7.setDetails(270, 15, -1, -1, 1, (SceneItem *)NULL);
_object8.setDetails(270, 14, -1, -1, 1, (SceneItem *)NULL);
_object11.setDetails(270, -1, -1, -1, 1, (SceneItem *)NULL);
_tv.setDetails(270, 3, 4, 5, 1, (SceneItem *)NULL);
_object10.setDetails(270, 6, 7, 8, 1, (SceneItem *)NULL);
_object12.setDetails(270, 15, 16, 17, 1, (SceneItem *)NULL);
_item3.setDetails(4, 270, 27, 28, 29, 1);
_item1.setDetails(1, 270, 18, 19, 20, 1);
_item6.setDetails(Rect(278, 50, 318, 72), 270, 21, 22, 23, 1, NULL);
_item2.setDetails(3, 270, 24, 25, 26, 1);
_item4.setDetails(2, 270, 30, 31, 32, 1);
_item11.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 270, 0, 1, 2, 1, NULL);
BF_GLOBALS._player.postInit();
BF_GLOBALS._player._moveDiff.x = 8;
BF_GLOBALS._player.changeZoom(-1);
BF_GLOBALS._player.disableControl();
_field796 = 0;
_sceneMode = 0;
_field2E16 = 0;
if (BF_GLOBALS._dayNumber == 0) {
BF_GLOBALS._dayNumber = 1;
BF_GLOBALS._sceneManager.changeScene(180);
}
switch (BF_GLOBALS._sceneManager._previousScene) {
case 180:
BF_GLOBALS._walkRegions.disableRegion(6);
BF_GLOBALS._walkRegions.disableRegion(14);
BF_GLOBALS._walkRegions.disableRegion(19);
BF_GLOBALS._player.setVisage(275);
BF_GLOBALS._player.setPosition(Common::Point(348, 151));
_object12.postInit();
_object12.setVisage(274);
_object12.setPosition(Common::Point(157, 132));
_object12._numFrames = 5;
_object12.animate(ANIM_MODE_2, NULL);
break;
case 280:
BF_GLOBALS._player.setVisage(271);
BF_GLOBALS._player.setStrip(5);
BF_GLOBALS._player._frame = 6;
BF_GLOBALS._player.setPosition(Common::Point(228, 138));
_object1.postInit();
_object1.setPosition(Common::Point(340, 100));
_object11.postInit();
_object11.setVisage(272);
_object11.setStrip(1);
_object11._frame = 2;
_object11.setPosition(Common::Point(35, 136));
_object6.postInit();
_object6.hide();
BF_GLOBALS._walkRegions.disableRegion(6);
BF_GLOBALS._walkRegions.disableRegion(14);
BF_GLOBALS._walkRegions.disableRegion(19);
_object12.postInit();
_object12.setVisage(274);
_object12.setPosition(Common::Point(157, 132));
_object12.animate(ANIM_MODE_2, NULL);
_object12._numFrames = 5;
_object12.fixPriority(120);
_field796 = 1;
break;
case 590:
BF_GLOBALS._player.setVisage(275);
BF_GLOBALS._player.setStrip(5);
BF_GLOBALS._player.setPosition(Common::Point(58, 133));
BF_GLOBALS._player.changeZoom(-1);
_object8.postInit();
_object8.setVisage(279);
_object8.setPosition(Common::Point(87, 127));
_object8.fixPriority(146);
_object7.postInit();
_object7.setVisage(277);
_object7.setStrip(7);
_object7.setPosition(Common::Point(48, 149));
BF_GLOBALS._walkRegions.disableRegion(6);
BF_GLOBALS._walkRegions.disableRegion(14);
BF_GLOBALS._walkRegions.disableRegion(19);
_object12.postInit();
_object12.setVisage(276);
_object12.setPosition(Common::Point(129, 130));
_object2.postInit();
_object2.setVisage(270);
_object2.setStrip(3);
_object2.setFrame(2);
_object2.setPosition(Common::Point(62, 101));
_object2.fixPriority(145);
_object3.postInit();
_object3.setVisage(270);
_object3.setStrip(3);
_object3.setFrame(3);
_object3.setPosition(Common::Point(90, 104));
_object3.fixPriority(132);
_object4.postInit();
_object4.setVisage(270);
_object4.setStrip(3);
_object4.setFrame(4);
_object4.setPosition(Common::Point(132, 87));
_object4.fixPriority(1);
break;
default:
BF_GLOBALS._player.setVisage(271);
BF_GLOBALS._player.setFrame(1);
BF_GLOBALS._player.setPosition(Common::Point(239, 145));
BF_GLOBALS._walkRegions.disableRegion(6);
BF_GLOBALS._walkRegions.disableRegion(14);
BF_GLOBALS._walkRegions.disableRegion(19);
_object12.postInit();
_object12.setVisage(274);
_object12.setPosition(Common::Point(157, 132));
_object12.animate(ANIM_MODE_2, NULL);
_object12._numFrames = 5;
_object1.postInit();
_object1.setVisage(271);
_object1.setStrip(4);
_object1.setPosition(Common::Point(220, 117));
_object1.fixPriority(145);
break;
}
_sceneMode = 11;
static uint32 black = 0;
add2Faders((const byte *)&black, 2, 270, this);
}
void Scene271::signal() {
static uint32 black = 0;
switch (_sceneMode) {
case 10:
_sceneMode = 2702;
setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
break;
case 11:
switch (BF_GLOBALS._sceneManager._previousScene) {
case 180:
_sceneMode = 2716;
setAction(&_sequenceManager1, this, 2716, &BF_GLOBALS._player, &_object12, NULL);
break;
case 280:
BF_GLOBALS._dayNumber = 3;
BF_INVENTORY.alterInventory(3);
_sceneMode = 2707;
setAction(&_sequenceManager1, this, 2707, &BF_GLOBALS._player, &_object1, &_object11, &_object5, &_object6, NULL);
break;
case 590:
_sceneMode = 2704;
setAction(&_sequenceManager1, this, 2704, &BF_GLOBALS._player, &_object12, &_object7, &_object8, NULL);
break;
default:
_object11.postInit();
_object11.setPosition(Common::Point(340, 100));
BF_GLOBALS._sound1.play(36);
_sceneMode = 2709;
setAction(&_sequenceManager1, this, 2709, &BF_GLOBALS._player, &_object1, &_object12, &_object11, NULL);
break;
}
break;
case 12:
BF_GLOBALS._sound1.changeSound(67);
BF_GLOBALS._sceneManager.changeScene(280);
break;
case 13:
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._sceneManager.changeScene(666);
break;
case 2702:
BF_GLOBALS._player._strip = 1;
BF_GLOBALS._player.enableControl();
_field2E16 = 1;
break;
case 2704:
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._sceneManager.changeScene(690);
break;
case 2705:
_field796 = 1;
BF_GLOBALS._player.enableControl();
break;
case 2706:
BF_GLOBALS._player.changeZoom(-1);
BF_GLOBALS._player.enableControl();
_object1.remove();
_field796 = 0;
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, _tempPos.x, _tempPos.y);
break;
case 2707:
BF_GLOBALS._player.enableControl();
_field796 = 1;
_field2E16 = 1;
_object1.remove();
_object11.remove();
BF_INVENTORY.setObjectScene(INV_LYLE_CARD, 1);
break;
case 2709:
BF_GLOBALS._sound1.play(68);
_sceneMode = 12;
addFader((const byte *)&black, 2, this);
break;
case 2712:
BF_GLOBALS._sound1.fadeOut2(NULL);
BF_GLOBALS._sceneManager.changeScene(180);
break;
case 2713:
BF_GLOBALS._player.enableControl();
break;
case 2714:
BF_GLOBALS._sceneManager.changeScene(560);
break;
case 2715:
break;
case 2716:
BF_GLOBALS._deathReason = 24;
_sceneMode = 13;
addFader((const byte *)&black, 2, this);
break;
default:
break;
}
}
void Scene271::process(Event &event) {
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
(_field796 == 1) && (!_action)) {
_tempPos = event.mousePos;
BF_GLOBALS._player.disableControl();
_sceneMode = 2706;
setAction(&_sequenceManager1, this, 2706, &BF_GLOBALS._player, &_object1, NULL);
event.handled = true;
}
SceneExt::process(event);
if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < UI_INTERFACE_Y)) {
if (_exit.contains(event.mousePos)) {
GfxSurface cursor = _cursorVisage.getFrame(EXITFRAME_E);
BF_GLOBALS._events.setCursor(cursor);
} else {
CursorType cursorId = BF_GLOBALS._events.getCursor();
BF_GLOBALS._events.setCursor(cursorId);
}
}
}
void Scene271::dispatch() {
if (!_action && (_field2E16 == 1)) {
if ((BF_GLOBALS._player._position.x > 236) && (BF_GLOBALS._player._position.y < 120)) {
_field2E16 = 0;
BF_GLOBALS._sceneManager.changeScene(560);
}
if (BF_GLOBALS._player._position.x <= 20) {
_field2E16 = 0;
BF_GLOBALS._player.disableControl();
BF_GLOBALS._player._mover->remove();
BF_GLOBALS._player._strip = 3;
BF_GLOBALS._player._frame = 1;
if (BF_GLOBALS._sceneObjects->contains(&_object12)) {
_sceneMode = 10;
_stripManager.start(2711, this);
} else {
SceneItem::display2(270, 33);
_sceneMode = 2702;
setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
}
}
if (BF_GLOBALS._player._position.x >= 300) {
_field2E16 = 0;
BF_GLOBALS._player.disableControl();
_sceneMode = 2712;
setAction(&_sequenceManager1, this, 2712, &BF_GLOBALS._player, NULL);
}
}
SceneExt::dispatch();
}
/*--------------------------------------------------------------------------
* Scene 280 - Bedroom Flashback cut-scene
*
*--------------------------------------------------------------------------*/
void Scene280::Action1::signal() {
Scene280 *scene = (Scene280 *)BF_GLOBALS._sceneManager._scene;
static uint32 black = 0;
switch (_actionIndex++) {
case 0:
scene->_jake.postInit();
scene->_jake.setVisage(283);
scene->_jake.setPosition(Common::Point(331, 200));
scene->_jake.animate(ANIM_MODE_1, NULL);
scene->_jake.setStrip(1);
ADD_MOVER(scene->_jake, 189, 131);
break;
case 1:
scene->_jake.setStrip(2);
scene->_jake.setFrame(1);
scene->_jake.animate(ANIM_MODE_8, 0, NULL);
scene->_jake._numFrames = 5;
scene->_stripManager.start(2800, this);
break;
case 2:
scene->_jake.animate(ANIM_MODE_5, NULL);
scene->_dad.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_jake.setStrip(4);
scene->_jake.setFrame(1);
scene->_dad.setStrip(2);
scene->_jake.setFrame(1);
scene->_dad.animate(ANIM_MODE_5, this);
break;
case 4:
scene->_dad.setStrip(3);
scene->_dad.setFrame(1);
scene->_dad.animate(ANIM_MODE_5, this);
break;
case 5:
scene->_object4.hide();
scene->_dad.setVisage(282);
scene->_dad.setStrip(1);
scene->_dad.setFrame(1);
scene->_dad._numFrames = 5;
scene->_dad.animate(ANIM_MODE_5, this);
break;
case 6:
scene->_stripManager.start(2801, this);
break;
case 7:
scene->_mum.postInit();
scene->_mum.setVisage(282);
scene->_mum.setStrip(2);
scene->_mum.setFrame(1);
scene->_mum.fixPriority(1);
scene->_mum.setPosition(Common::Point(160, 138));
scene->_jake.setStrip(3);
scene->_jake.setFrame(1);
scene->_jake.animate(ANIM_MODE_5, this);
scene->_dad._numFrames = 10;
scene->_dad.setVisage(284);
scene->_dad.setStrip(1);
scene->_dad.fixPriority(-1);
scene->_dad.setPosition(Common::Point(174, 136));
scene->_dad.setFrame(1);
scene->_dad.animate(ANIM_MODE_1, NULL);
ADD_MOVER(scene->_dad, 438, 320);
break;
case 8:
scene->_mum.animate(ANIM_MODE_4, 5, 1, this);
break;
case 9:
scene->_sceneMode = 2;
BF_GLOBALS._sound1.fadeOut2(NULL);
scene->addFader((const byte *)&black, 2, scene);
scene->_jake.remove();
scene->_mum.animate(ANIM_MODE_5, NULL);
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene280::postInit(SceneObjectList *OwnerList) {
PalettedScene::postInit();
BF_GLOBALS._interfaceY = SCREEN_HEIGHT;
loadScene(280);
_stripManager.addSpeaker(&_gameTextSpeaker);
_dad.postInit();
_dad.setVisage(281);
_dad.setPosition(Common::Point(160, 138));
_dad.fixPriority(1);
_object4.postInit();
_object4.setVisage(280);
_object4.setPosition(Common::Point(139, 141));
const uint32 black = 0;
add2Faders((const byte *)&black, 2, 280, this);
_sceneMode = 1;
setAction(&_action1);
}
void Scene280::signal() {
if (_sceneMode == 2)
BF_GLOBALS._sceneManager.changeScene(271);
}
} // End of namespace BlueForce
} // End of namespace TsAGE