/* 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_scenes9.h" #include "tsage/globals.h" #include "tsage/scenes.h" #include "tsage/tsage.h" #include "tsage/staticres.h" namespace TsAGE { namespace BlueForce { /*-------------------------------------------------------------------------- * Scene 900 - Outside Warehouse * *--------------------------------------------------------------------------*/ bool Scene900::Item1::startAction(CursorType action, Event &event) { if (action == CURSOR_LOOK) { SceneItem::display2(900, 6); return true; } else { return SceneHotspot::startAction(action, event); } } bool Scene900::Item4::startAction(CursorType action, Event &event) { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9001; Common::Point pt(0, 117); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, scene); return true; } /*--------------------------------------------------------------------------*/ bool Scene900::Object1::startAction(CursorType action, Event &event) { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: if (BF_GLOBALS._v4CEC0 == 0) { return NamedObject::startAction(action, event); } else { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._v4CEC0 == 2) { scene->_sceneMode = 9006; BF_GLOBALS._v4CEC0 = 1; scene->setAction(&scene->_sequenceManager1, scene, 9006, &BF_GLOBALS._player, this, NULL); } else { BF_GLOBALS._v4CEC0 = 2; if (scene->_object3._flag == false) { BF_GLOBALS._player.setAction(&scene->_action4); } else { scene->_sceneMode = 9005; scene->setAction(&scene->_sequenceManager1, scene, 9005, &BF_GLOBALS._player, this, NULL); BF_GLOBALS._walkRegions.proc2(24); } } return true; } break; case INV_WAREHOUSE_KEYS: if (BF_GLOBALS._v4CEC0 == 2) { SceneItem::display2(900, 14); } else { if (BF_GLOBALS._v4CEC0 == 0) { if (!BF_GLOBALS.getFlag(fGotPointsForUnlockGate)) { BF_GLOBALS.setFlag(fGotPointsForUnlockGate); BF_GLOBALS._uiElements.addScore(30); } BF_GLOBALS._v4CEC0 = 1; } else { if (!BF_GLOBALS.getFlag(fGotPointsForLockGate)) { if (BF_GLOBALS._bookmark == bEndDayThree) { BF_GLOBALS.setFlag(fGotPointsForLockGate); BF_GLOBALS._uiElements.addScore(30); } } BF_GLOBALS._v4CEC0 = 0; } scene->_sceneMode = 9004; BF_GLOBALS._player.disableControl(); scene->setAction(&scene->_sequenceManager1, scene, 9004, &BF_GLOBALS._player, NULL); } return true; default: return NamedObject::startAction(action, event); } } bool Scene900::Object2::startAction(CursorType action, Event &event) { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: if (BF_GLOBALS._v4CEC0 == 2) { if (_flag) { SceneItem::display2(900, 1); } else { BF_GLOBALS._player.disableControl(); BF_GLOBALS._walkRegions.proc2(26); scene->_sceneMode = 9007; scene->setAction(&scene->_sequenceManager1, scene, 9007, &BF_GLOBALS._player, &scene->_object2, this, NULL); } return true; } else return NamedObject::startAction(action, event); break; case INV_WAREHOUSE_KEYS: if (BF_GLOBALS._v4CEC0 == 2) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9012; scene->setAction(&scene->_sequenceManager1, scene, 9012, &BF_GLOBALS._player, &scene->_object2, NULL); } else SceneItem::display2(900, 5); return true; default: return NamedObject::startAction(action, event); } } bool Scene900::Object3::startAction(CursorType action, Event &event) { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display2(900, 8); return true; case CURSOR_USE: SceneItem::display2(900, 9); return true; case INV_HOOK: if (_flag) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9010; scene->setAction(&scene->_sequenceManager1, scene, 9010, &BF_GLOBALS._player, &scene->_object5, this, NULL); } else SceneItem::display2(900, 23); return true; case INV_FISHING_NET: BF_GLOBALS._player.disableControl(); BF_GLOBALS._player.setAction(&scene->_action2); return true; case INV_DOG_WHISTLE: BF_GLOBALS._player.disableControl(); BF_GLOBALS._player.setAction(&scene->_action3); return true; default: return NamedObject::startAction(action, event); } } bool Scene900::Object6::startAction(CursorType action, Event &event) { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_TALK) { if (BF_GLOBALS._sceneManager._sceneLoadCount == 0) { if (!_action) { if (scene->_object3._flag) { if (BF_GLOBALS._v4CEC0 == 0) scene->_stripManager.start(9004, &BF_GLOBALS._stripProxy); else { if (scene->_object2._flag == 1) { if (BF_GLOBALS._v4CEC0 == 2) scene->_stripManager.start(9005, &BF_GLOBALS._stripProxy); else scene->_stripManager.start(9001, &BF_GLOBALS._stripProxy); } else scene->_stripManager.start(9001, &BF_GLOBALS._stripProxy); } } else { if (scene->_field1974) scene->_stripManager.start(9003, &BF_GLOBALS._stripProxy); else { ++scene->_field1974; scene->_stripManager.start(9002, &BF_GLOBALS._stripProxy); } } } } return true; } else return NamedObject::startAction(action, event); } bool Scene900::Object7::startAction(CursorType action, Event &event) { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_USE) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9016; scene->setAction(&scene->_sequenceManager1, scene, 9016, &BF_GLOBALS._player, NULL); return true; } else return NamedObject::startAction(action, event); } /*--------------------------------------------------------------------------*/ void Scene900::Action1::signal() { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: if (scene->_object3._flag == 0) { scene->_object3.setStrip(3); if ((BF_GLOBALS._randomSource.getRandomNumber(3) == 1) || (BF_GLOBALS._player._position.x > 790) || (scene->_field1976 != 0)) { Common::Point pt(864, 130); NpcMover *mover = new NpcMover(); scene->_object3.addMover(mover, &pt, this); } else { _actionIndex = 4; Common::Point pt(775, 107); NpcMover *mover = new NpcMover(); scene->_object3.addMover(mover, &pt, this); } } break; case 1: scene->_object3.setPosition(Common::Point(864, 117)); scene->_object3.setStrip(7); scene->_object3.setFrame(1); scene->_object3.animate(ANIM_MODE_5, this); if (BF_GLOBALS._randomSource.getRandomNumber(3) == 1) scene->_sound1.play(92); else scene->_sound1.play(44); if ((BF_GLOBALS._player._position.x > 750) || (scene->_field1976 != 0)) _actionIndex = 7; break; case 2: scene->_object3.animate(ANIM_MODE_6, this); break; case 3: { scene->_object3.setStrip(3); scene->_object3.setPosition(Common::Point(864, 130)); scene->_object3.fixPriority(122); scene->_object3.animate(ANIM_MODE_1, NULL); Common::Point pt(775, 107); NpcMover *mover = new NpcMover(); scene->_object3.addMover(mover, &pt, this); break; } case 6: _actionIndex = 0; // No break on purpose case 4: setDelay(30); break; case 5: { scene->_object3.setStrip(4); Common::Point pt(940, 145); NpcMover *mover = new NpcMover(); scene->_object3.addMover(mover, &pt, this); break; } case 7: _actionIndex = 7; setDelay(5); if (BF_GLOBALS._player._position.x < 790) _actionIndex = 2; if (scene->_field1976 != 0) _actionIndex = 8; break; case 8: scene->_object3.setStrip(1); scene->_object3.setFrame(7); scene->_object3.animate(ANIM_MODE_6, NULL); break; case 9: scene->_field1976 = 0; scene->_object3._flag = 0; _actionIndex = 7; scene->_object3.setStrip(1); scene->_object3.setFrame(1); scene->_object3.animate(ANIM_MODE_5, this); break; default: break; } } void Scene900::Action2::signal() { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: scene->_field1976 = 1; if (scene->_object3._action->getActionIndex() == 8) _actionIndex = 0; setDelay(5); break; case 1: scene->_object5.postInit(); scene->_object5.setVisage(902); scene->_object5.setStrip(2); scene->_object5.setPosition(Common::Point(-20, -20)); scene->_object5._moveDiff.y = 10; setAction(&scene->_sequenceManager1, this, 9009, &BF_GLOBALS._player, &scene->_object5, &scene->_object3, NULL); BF_INVENTORY.setObjectScene(INV_FISHING_NET, 900); break; case 2: BF_GLOBALS._player._strip = 7; if (!BF_GLOBALS.getFlag(fGotPointsForTrapDog)) { BF_GLOBALS.setFlag(fGotPointsForTrapDog); BF_GLOBALS._uiElements.addScore(50); } SceneItem::display2(900, 10); scene->_object3._flag = 1; scene->_object3.fixPriority(130); BF_GLOBALS._player.enableControl(); remove(); break; default: break; } } void Scene900::Action3::signal() { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: if ((BF_GLOBALS._player._position.x < 790) && (!BF_GLOBALS._player._mover)) { Common::Point pt(821, 136); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, 0); } if (scene->_object3._action->getActionIndex() != 7) { _actionIndex = 0; } setDelay(5); break; case 1: if (scene->_object3._strip == 3) { _actionIndex = 3; Common::Point pt(775, 107); NpcMover *mover = new NpcMover(); scene->_object3.addMover(mover, &pt, this); } else scene->_object3.animate(ANIM_MODE_6, this); break; case 2: { scene->_object3.setStrip(3); scene->_object3.setPosition(Common::Point(864, 130)); scene->_object3.fixPriority(122); scene->_object3.animate(ANIM_MODE_1, NULL); Common::Point pt(775, 107); NpcMover *mover = new NpcMover(); scene->_object3.addMover(mover, &pt, this); break; } case 3: scene->_object3.remove(); scene->_object3._flag = 1; SceneItem::display2(900, 24); if (!BF_GLOBALS.getFlag(fGotPointsForLockWarehouse)) { BF_GLOBALS.setFlag(fGotPointsForLockWarehouse); BF_GLOBALS._uiElements.addScore(10); } BF_GLOBALS._player.enableControl(); remove(); break; default: break; } } void Scene900::Action4::signal() { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: scene->_field1976 = 1; if (scene->_object3._action->getActionIndex() != 8) _actionIndex = 0; setDelay(5); break; case 1: scene->setAction(&scene->_sequenceManager1, scene, 9005, &BF_GLOBALS._player, &scene->_object1, NULL); break; case 2: scene->setAction(&scene->_sequenceManager1, scene, 9008, &BF_GLOBALS._player, &scene->_object3, NULL); break; case 3: BF_GLOBALS._deathReason = 5; BF_GLOBALS._sceneManager.changeScene(666); remove(); break; default: break; } } /*--------------------------------------------------------------------------*/ Scene900::Scene900(): PalettedScene() { _field1974 = _field1976 = 0; } void Scene900::postInit(SceneObjectList *OwnerList) { PalettedScene::postInit(); loadScene(900); if (BF_GLOBALS._sceneManager._previousScene == 910) BF_GLOBALS._sound1.changeSound(91); _field1974 = 0; _field1976 = 0; BF_GLOBALS._uiElements._active = true; BF_GLOBALS.clearFlag(fCanDrawGun); if (BF_GLOBALS._dayNumber == 0) { BF_GLOBALS._dayNumber = 4; BF_INVENTORY.setObjectScene(INV_FISHING_NET, 1); BF_INVENTORY.setObjectScene(INV_HOOK, 1); } _object3._flag = 0; if (BF_GLOBALS._bookmark >= bFinishedWGreen) { _object7.postInit(); _object7.fixPriority(120); _object7.setVisage(901); _object7.setPosition(Common::Point(159,128)); _object7.setDetails(900, 15, 16, 17, ANIM_MODE_1, NULL); } if (BF_GLOBALS._sceneManager._previousScene == 910) { _sceneBounds.moveTo(640, 0); BF_GLOBALS._v4CEC0 = 2; BF_INVENTORY.setObjectScene(INV_FISHING_NET, 900); _object3._flag = 1; } if (BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 900) _object3._flag = 1; _stripManager.addSpeaker(&_gameTextSpeaker); _stripManager.addSpeaker(&_jakeJacketSpeaker); _stripManager.addSpeaker(&_lyleHatSpeaker); _item4.setDetails(Rect(0, 85, 20, 130), 900, -1, -1, -1, 1, 0); BF_GLOBALS._player.postInit(); _object3.postInit(); _object3.setVisage(902); _object3.setPosition(Common::Point(845, 135)); _object3.fixPriority(122); _object3.setDetails(900, 8, -1, 9, 1, NULL); if (_object3._flag == 0) { _object3.animate(ANIM_MODE_1, NULL); _object3.setAction(&_action1); } else { _object3.setAction(&_action1); _object3.fixPriority(130); if (BF_GLOBALS._dayNumber == 4) { _object3.setPosition(Common::Point(879, 120)); _object3.setStrip(2); } else { _object3.setPosition(Common::Point(864, 117)); _object3.setStrip(6); _object3.setFrame(6); } } _object1.postInit(); _object1.setVisage(900); _object1.setStrip(2); if (BF_GLOBALS._v4CEC0 == 2) _object1.setPosition(Common::Point(758, 127)); else { BF_GLOBALS._walkRegions.proc1(24); _object1.setPosition(Common::Point(804, 132)); } if (BF_GLOBALS._dayNumber == 5) BF_GLOBALS._v4CEC8 = 0; if ((BF_GLOBALS._v4CEC8 == 0) && (BF_GLOBALS.getFlag(fWithLyle))) { _object4.postInit(); _object4.setVisage(900); _object4.setStrip(3); _object4.fixPriority(1); _object4.setPosition(Common::Point(866, 117)); } _object2.postInit(); _object2.setVisage(900); if (BF_GLOBALS._v4CEC8 == 0) _object2.setStrip(4); else _object2.setStrip(1); _object2.setPosition(Common::Point(847, 45)); _object2._flag = 1; if ((BF_GLOBALS._sceneManager._previousScene == 880) || (BF_GLOBALS._sceneManager._previousScene != 910)) { BF_GLOBALS._walkRegions.proc1(26); BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._bookmark == bFinishedWGreen) { _sceneMode = 9013; _lyle.postInit(); _lyle._moveDiff.y = 7; _lyle._flags |= 0x1000; _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL); _lyleHatSpeaker._xp = 210; _jakeJacketSpeaker._xp = 75; setAction(&_sequenceManager1, this, 9013, &BF_GLOBALS._player, &_lyle, NULL); BF_GLOBALS._bookmark = bAmbushed; BF_GLOBALS.setFlag(fWithLyle); } else if (BF_GLOBALS._bookmark > bFinishedWGreen) { _lyle.postInit(); _lyle.setVisage(811); _lyle.setPosition(Common::Point(780, 153)); _lyle._moveDiff.y = 7; _lyle._flags |= 0x1000; _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL); _lyle.animate(ANIM_MODE_1, NULL); _lyle.setObjectWrapper(new SceneObjectWrapper()); } // no else on purpose _sceneMode = 9000; setAction(&_sequenceManager1, this, 9000, &BF_GLOBALS._player, NULL); } else { _object2._flag = 0; _object2.setFrame(_object2.getFrameCount()); BF_GLOBALS._player.disableControl(); _sceneMode = 9002; if (BF_GLOBALS.getFlag(fWithLyle)) { _lyle.postInit(); _lyle._flags |= 0x1000; _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL); setAction(&_sequenceManager1, this, 9014, &BF_GLOBALS._player, &_object2, &_lyle, NULL); } else setAction(&_sequenceManager1, this, 9002, &BF_GLOBALS._player, &_object2, NULL); } _object1.setDetails(900, 0, -1, 1, 1, 0); _object2.setDetails(900, 2, -1, 5, 1, 0); _item2.setDetails(Rect(0, 0, 225, 21), 666, 25, -1, -1, 1, NULL); _item3.setDetails(Rect(37, 21, 324, 50), 666, 26, -1, -1, 1, NULL); _item1.setDetails(Rect(0, 0, 960, 200), 900, 7, -1, -1, 1, NULL); } void Scene900::signal() { static uint32 v50E8B = 0; switch (_sceneMode++) { case 1: BF_GLOBALS._sceneManager.changeScene(910); break; case 3: BF_GLOBALS._walkRegions.proc1(24); _sceneMode = 9004; setAction(&_sequenceManager1, this, 9006, &BF_GLOBALS._player, &_object1, NULL); break; case 9000: BF_GLOBALS._player.enableControl(); break; case 9001: if ((BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 900) || (BF_GLOBALS._v4CEC0 != 0) || (_object2._flag == 0)) BF_GLOBALS.setFlag(fLeftTraceIn900); else BF_GLOBALS.clearFlag(fLeftTraceIn900); BF_GLOBALS._sceneManager.changeScene(880); break; case 9002: BF_GLOBALS._walkRegions.proc1(26); BF_GLOBALS._player.enableControl(); break; case 9004: if (BF_GLOBALS._v4CEC0 == 0) SceneItem::display2(900, 3); else SceneItem::display2(900, 4); BF_GLOBALS._player.enableControl(); break; case 9005: if (_object3._flag == 0) BF_GLOBALS._player.setAction(&_action4); else BF_GLOBALS._player.enableControl(); break; case 9006: BF_GLOBALS._walkRegions.proc1(24); BF_GLOBALS._player.enableControl(); break; case 9007: if (BF_GLOBALS.getFlag(fWithLyle)) { Common::Point pt(862, 119); PlayerMover *mover = new PlayerMover(); _lyle.addMover(mover, &pt, NULL); _sceneMode = 1; addFader((const byte *)&v50E8B, 5, this); } else BF_GLOBALS._sceneManager.changeScene(910); break; case 9008: BF_GLOBALS._deathReason = 5; BF_GLOBALS._sceneManager.changeScene(666); break; case 9010: _sound1.play(92); if (BF_GLOBALS._v4CEC0 == 2) { _sceneMode = 9008; setAction(&_sequenceManager1, this, 9008, &BF_GLOBALS._player, &_object3, NULL); } else { BF_GLOBALS._player._strip = 7; _action1.setActionIndex(9); _object3.signal(); if ((!BF_GLOBALS.getFlag(fGotPointsForFreeDog)) && (BF_GLOBALS._bookmark == bEndDayThree)) { BF_GLOBALS.setFlag(fGotPointsForFreeDog); BF_GLOBALS._uiElements.addScore(50); } BF_INVENTORY.setObjectScene(INV_FISHING_NET, 1); SceneItem::display2(900, 11); BF_GLOBALS._player.enableControl(); } break; case 9012: if (_object2._flag == 0) { SceneItem::display2(900, 12); _object2._flag = 1; if ((!BF_GLOBALS.getFlag(fGotPointsForLockWarehouse)) && (BF_GLOBALS._bookmark == bEndDayThree)) { BF_GLOBALS.setFlag(fGotPointsForLockWarehouse); BF_GLOBALS._uiElements.addScore(30); } } else { SceneItem::display2(900, 13); _object2._flag = 0; if (!BF_GLOBALS.getFlag(fGotPointsForUnlockWarehouse)) { BF_GLOBALS.setFlag(fGotPointsForUnlockWarehouse); BF_GLOBALS._uiElements.addScore(30); } } BF_GLOBALS._player.enableControl(); break; case 9013: _lyleHatSpeaker._xp = 75; _jakeJacketSpeaker._xp = 210; _lyle.setAction(&_sequenceManager2, &_lyle, 9015, &_lyle, NULL); BF_GLOBALS._player.enableControl(); break; case 9016: if ((BF_GLOBALS._clip1Bullets == 0) && (BF_GLOBALS._clip2Bullets == 0)){ BF_GLOBALS._clip1Bullets = 8; BF_GLOBALS._clip1Bullets = 8; SceneItem::display2(900, 25); } else if (BF_GLOBALS._clip1Bullets == 0) { BF_GLOBALS._clip1Bullets = 8; SceneItem::display2(900, 26); } else if (BF_GLOBALS._clip2Bullets == 0) { BF_GLOBALS._clip2Bullets = 8; SceneItem::display2(900, 26); } else SceneItem::display2(900, 27); BF_GLOBALS._player.enableControl(); break; default: break; } } void Scene900::process(Event &event) { SceneExt::process(event); if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (BF_INTERFACE_Y - 1))) { if (_item4.contains(event.mousePos)) { GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W); BF_GLOBALS._events.setCursor(surface); } else { CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); } } } void Scene900::dispatch() { SceneExt::dispatch(); if (BF_GLOBALS.getFlag(fWithLyle) && _lyle.isNoMover()) { _lyle.updateAngle(BF_GLOBALS._player._position); } if (!_action) { if ((BF_GLOBALS._player._position.x <= 20) && (BF_GLOBALS._player._position.y < 130)) { BF_GLOBALS._player.disableControl(); _sceneMode = 9001; setAction(&_sequenceManager1, this, 9001, &BF_GLOBALS._player, NULL); } } } void Scene900::synchronize(Serializer &s) { SceneExt::synchronize(s); s.syncAsSint16LE(_field1974); s.syncAsSint16LE(_field1976); } /*-------------------------------------------------------------------------- * Scene 910 - ?? * *--------------------------------------------------------------------------*/ /* Actions */ void Scene910::Action1::signal() { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex - 1) { case 0: scene->_object6.setStrip(1); scene->_object6.animate(ANIM_MODE_5, this); break; case 1: if (scene->_object6._strip == 2) scene->_object6.setFrame(4); scene->_object6.setStrip(1); scene->_object6.animate(ANIM_MODE_6, NULL); break; case 2: scene->_object6.setStrip(2); scene->_object6.animate(ANIM_MODE_2, NULL); break; default: break; } } void Scene910::Action2::signal() { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: scene->_object7.postInit(); scene->_object7.setVisage(919); scene->_object7.setPosition(Common::Point(267, 51)); scene->_object7.fixPriority(40); signal(); break; case 1: scene->_object7.hide(); setDelay(600); break; case 2: scene->_object7.setStrip(BF_GLOBALS._randomSource.getRandomNumber(3) + 2); scene->_object7.setFrame(1); scene->_object7.show(); setDelay(6); break; case 3: _actionIndex = 1; scene->_object7.setStrip(BF_GLOBALS._randomSource.getRandomNumber(3) + 2); scene->_object7.animate(ANIM_MODE_5, this); break; default: break; } } /* Objects */ bool Scene910::Object1::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_USE) { if (BF_GLOBALS._v4CEE2 == 0) return NamedObject::startAction(action, event); else return false; } else if (action == CURSOR_TALK) { if ((BF_GLOBALS._v4CEE0 != 0) || (BF_GLOBALS._v4CEE2 != 0)) { scene->_stripManager.start(9100 + _field90, &BF_GLOBALS._stripProxy); if (_field90 < 1) _field90++; return true; } else { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9130; if (BF_GLOBALS.getFlag(8)) setAction(&scene->_sequenceManager1, scene, 9138, &BF_GLOBALS._player, &scene->_object1, NULL); else setAction(&scene->_sequenceManager1, scene, 9130, &BF_GLOBALS._player, &scene->_object1, NULL); return true; } } else { return NamedObject::startAction(action, event); } } bool Scene910::Object2::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: BF_GLOBALS._player.disableControl(); scene->_field2DDA = 6; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); return true; break; case CURSOR_TALK: if (BF_GLOBALS._v4CEE2 >= 4) return NamedObject::startAction(action, event); if (BF_GLOBALS._v4CEE6 < 4) BF_GLOBALS._v4CEE6++; if (BF_GLOBALS._v4CEE6 == 2) { scene->_sceneMode = 13; scene->_stripManager.start(9105, scene); } else scene->_stripManager.start(9103 + BF_GLOBALS._v4CEE6, &BF_GLOBALS._stripProxy); return true; break; case 1: if (BF_GLOBALS._v4CEE2 > 1) { if (BF_GLOBALS._v4CEE2 != 4) { if ((BF_GLOBALS.getFlag(8)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())) { if (scene->_field2DE0 == 0) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9126; scene->setAction(&scene->_sequenceManager1, scene, 9126, &scene->_object2, NULL); return NamedObject::startAction(action, event); } else { scene->_stripManager.start(9117, &BF_GLOBALS._stripProxy); return NamedObject::startAction(action, event); } } else return NamedObject::startAction(action, event); } else { SceneItem::display(910, 90, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } } else { if ((BF_GLOBALS.getFlag(8)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9125; scene->setAction(&scene->_sequenceManager1, scene, 9125, &scene->_object2, NULL); } return NamedObject::startAction(action, event); } break; case 39: case 53: if (BF_GLOBALS._v4CEE2 >= 4) return NamedObject::startAction(action, event); if (BF_GLOBALS._v4CEE6 < 4) BF_GLOBALS._v4CEE6++; if (BF_GLOBALS._v4CEE6 == 2) { scene->_sceneMode = 13; scene->_stripManager.start(9105, scene); } else scene->_stripManager.start(9103 + BF_GLOBALS._v4CEE6, &BF_GLOBALS._stripProxy); return true; break; case 57: if (BF_GLOBALS._v4CEE2 < 4) { BF_GLOBALS._player.disableControl(); scene->_object9.fixPriority(121); scene->_field2DDA = 10; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); return true; } else { SceneItem::display(910, 95, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } break; case 58: if (BF_GLOBALS._v4CECC == 1) SceneItem::display(910, 84, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); else SceneItem::display(910, 82, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; break; case 59: case 61: SceneItem::display(910, 83, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; break; default: return NamedObject::startAction(action, event); break; } } bool Scene910::Object3::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: BF_GLOBALS._player.disableControl(); scene->_field2DDA = 7; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); return true; break; case CURSOR_TALK: if (BF_GLOBALS._v4CEE8 < 3) BF_GLOBALS._v4CEE8++; scene->_stripManager.start(9107 + BF_GLOBALS._v4CEE8, &BF_GLOBALS._stripProxy); return true; break; case 1: if ((BF_GLOBALS.getFlag(8)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())){ BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._v4CEE4 == 2) { scene->_sceneMode = 9132; scene->setAction(&scene->_sequenceManager1, scene, 9132, &scene->_object3, NULL); return NamedObject::startAction(action, event); } else { if (scene->_field2DE0 == 0) { scene->_sceneMode = 9132; scene->setAction(&scene->_sequenceManager1, scene, 9132, &scene->_object3, NULL); } else scene->_stripManager.start(9117, &BF_GLOBALS._stripProxy); return NamedObject::startAction(action, event); } } else return NamedObject::startAction(action, event); break; case 57: if (BF_GLOBALS._v4CECC == 1) { SceneItem::display(910, 84, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } else { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._v4CEE2 == 4) { scene->_field2DDA = 11; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); return true; } else { scene->_field2DDA = 12; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); return true; } } break; case 58: if (BF_GLOBALS._v4CECC == 1) { SceneItem::display(910, 84, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } else { BF_GLOBALS._player.disableControl(); scene->_field2DDA = 11; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); return true; } break; case 59: case 61: SceneItem::display(910, 83, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; break; default: return NamedObject::startAction(action, event); break; } } bool Scene910::Object4::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_TALK) { BF_GLOBALS._player.disableControl(); BF_GLOBALS._walkRegions.proc2(1); BF_GLOBALS._walkRegions.proc2(16); scene->_sceneMode = 9140; scene->setAction(&scene->_sequenceManager1, scene, 9140, &scene->_object4, &BF_GLOBALS._player, &scene->_object1, NULL); return true; } else return NamedObject::startAction(action, event); } bool Scene910::Object8::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; // the last check is used in order to replace a check on CURSOR_1000, which is replaced // directly by its sub-check. All items have an id inferior to 100h. if ((action == CURSOR_LOOK) || (action == CURSOR_TALK) || (action < CURSOR_WALK)) { if (_field90 == 1) return false; if ((_field92 != 1) || (BF_GLOBALS._v4CEE0 == 0 )) return NamedObject::startAction(action, event); return false; } else if (action == CURSOR_USE) { if (_field90 == 0) { if ((BF_GLOBALS._v4CEE0 == 0) || (_field92 != 1)) { BF_GLOBALS._player.disableControl(); if (_field92 == 1) { scene->_field2DDA = 8; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); _field90 = 1; return true; } else { scene->_field2DDC = 151; scene->_field2DDE = 186; scene->_field2DDA = 4; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); _field90 = 1; return true; } } else return false; } else if (_field90 == 1) return false; else return true; } else return NamedObject::startAction(action, event); } void Scene910::Object8::init(int val) { NamedObject::postInit(); _field92 = val; _field90 = 0; } bool Scene910::Object10::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: if (BF_GLOBALS._v4CEC8 == 0) SceneItem::display(910, 7, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); else SceneItem::display(910, 6, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; break; case CURSOR_USE: if (scene->_object1._position.x == 115) { SceneItem::display(910, 62, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } else if (scene->_sceneMode != 9120) { if (BF_GLOBALS._v4CEE2 == 1) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9118; scene->setAction(&scene->_sequenceManager1, scene, 9118, &BF_GLOBALS._player, &scene->_object2, NULL); return true; } else { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9102; if (BF_GLOBALS.getFlag(8)) { scene->_field2DDA = 1; scene->_sceneMode = 9123; scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); return true; } else { scene->setAction(&scene->_sequenceManager1, scene, 9102, &BF_GLOBALS._player, NULL); return true; } } } else { SceneItem::display(910, 62, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } break; default: return NamedObject::startAction(action, event); break; } } bool Scene910::Object11::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; if (action == 57) { BF_GLOBALS._player.disableControl(); scene->_field2DDC = 285; scene->_field2DDE = 114; scene->_field2DDA = 9; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); return true; } else return NamedObject::startAction(action, event); } void Scene910::Object12::postInit(SceneObjectList *OwnerList) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; FocusObject::postInit(); _resNum = 910; _lookLineNum = 7; _useLineNum = 8; BF_GLOBALS._sceneItems.addItems(this); scene->_field2DD8 = 0; _object13.subEBB05(115, 44, 1, BF_GLOBALS._v4CECE[0]); _object14.subEBB05(116, 63, 2, BF_GLOBALS._v4CECE[1]); _object15.subEBB05(116, 69, 2, BF_GLOBALS._v4CECE[2]); _object16.subEBB05(115, 76, 1, BF_GLOBALS._v4CECE[3]); _object17.subEBB05(115, 95, 1, BF_GLOBALS._v4CECE[4]); _object18.subEBB05(116, 114, 2, BF_GLOBALS._v4CECE[5]); _object19.subEBB05(116, 120, 2, BF_GLOBALS._v4CECE[6]); _object20.subEBB05(188, 45, 2, BF_GLOBALS._v4CECE[7]); _object21.subEBB05(188, 51, 2, BF_GLOBALS._v4CECE[8]); _object22.subEBB05(179, 59, 1, BF_GLOBALS._v4CECE[9]); _object23.subEBB05(187, 78, 2, BF_GLOBALS._v4CECE[10]); _object24.subEBB05(187, 84, 2, BF_GLOBALS._v4CECE[11]); _object25.subEBBDC(178, 90, 1, BF_GLOBALS._v4CECE[12]); _object26.subEBBDC(178, 108, 2, BF_GLOBALS._v4CECE[13]); } void Scene910::Object12::remove() { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; _object13.remove(); _object14.remove(); _object15.remove(); _object16.remove(); _object17.remove(); _object18.remove(); _object19.remove(); _object20.remove(); _object21.remove(); _object22.remove(); _object23.remove(); _object24.remove(); _object25.remove(); _object26.remove(); _object27.remove(); _object28.remove(); if ((BF_GLOBALS._v4CECE[13] < 4) && (scene->_object10._frame > 1)) scene->_object10.animate(ANIM_MODE_6, NULL); FocusObject::remove(); } bool Scene910::Object13::startAction(CursorType action, Event &event) { static uint32 v50EC0 = 0, v50EBC = 0; Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; int8 var2; if (_field92 == 1) var2 = 12; else var2 = 7; switch (action) { case CURSOR_LOOK: SceneItem::display(910, 9, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_USE: scene->_sound2.play(101); if (event.mousePos.x <= _position.x + var2) { if (_field92 != 1) { if (_frame > 6) setFrame(_frame - 1); } else { if (_frame > 1) setFrame(_frame - 1); } } else { if (_field92 == 1) { if (_frame < 3) setFrame(_frame + 1); } else { if (_frame < 8) setFrame(_frame + 1); } } if (_field92 != 1) BF_GLOBALS._v4CECE[_field90 - 1] = (_field90 + 251) % 256; else BF_GLOBALS._v4CECE[_field90 - 1] = _field90; switch (_field90) { case 1: if (BF_GLOBALS._v4CEE2 < 1) { if (_frame == 2) { if (!BF_GLOBALS.getFlag(81)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(81); } scene->_sceneMode = 0; if (BF_GLOBALS._dayNumber == 5) { if (BF_GLOBALS._v4CEE2 == 0) { scene->_object12.remove(); // _objectList.draw(); BF_GLOBALS._player.disableControl(); scene->_object1.setVisage(912); scene->_object7.remove(); scene->_action2.remove(); scene->_object2.postInit(); scene->_sceneMode = 9129; scene->setAction(&scene->_sequenceManager1, scene, 9129, &BF_GLOBALS._player, &scene->_object2, NULL); } else if (BF_GLOBALS._v4CEE2 == 2) { scene->_object12.remove(); // _objectList.draw(); BF_GLOBALS._player.disableControl(); scene->_object1.setVisage(911); scene->_object1.setStrip(4); scene->_object2.setVisage(923); scene->_object2.setStrip(2); scene->_object3.setVisage(923); scene->_object3.setStrip(3); scene->_sceneMode = 9134; scene->setAction(&scene->_sequenceManager1, scene, 9134, &BF_GLOBALS._player, &scene->_object2, &scene->_object1, NULL); } } BF_GLOBALS._v4CEC8 = 1; scene->_object5.show(); if (scene->_sceneMode == 0) { BF_GLOBALS._player.setVisage(911); scene->_object1.setVisage(912); } scene->sub15E4F((const byte *)&v50EBC, 25, 910, NULL, 0, 111, 112, 255, 0); BF_GLOBALS._scenePalette.signalListeners(); // _objectList.draw(); } else { if (BF_GLOBALS._v4CEC8 == 1) { if (!BF_GLOBALS.getFlag(78)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(78); } BF_GLOBALS._player.disableControl(); BF_GLOBALS._v4CEC8 = 0; scene->_sceneMode = 2; scene->sub15E4F((const byte *)&v50EC0, 30, 910, scene, 0, 111, 112, 255, 0); } } } else SceneItem::display(910, 97, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case 4: if (_frame == 2) { if (BF_GLOBALS._v4CECE[4] == 2) { scene->_action1.setActionIndex(2); scene->_action1.signal(); } } else if (scene->_action1.getActionIndex() == 2) { scene->_action1.setActionIndex(1); scene->_action1.signal(); } return true; case 5: if (_frame == 2) { if (BF_GLOBALS._v4CECE[3] == 2) { scene->_action1.setActionIndex(2); scene->_action1.signal(); } } else if (scene->_action1.getActionIndex() == 2) { scene->_action1.setActionIndex(1); scene->_action1.signal(); } return true; case 15: if ((BF_GLOBALS._v4CECA == 2) && (BF_GLOBALS._v4CECE[17] == 1)) { if (_frame == 7) scene->subE83E1(); else scene->subE82BD(); } return true; default: return true; } default: return NamedObject::startAction(action, event); break; } } void Scene910::Object13::remove() { BF_GLOBALS._sceneItems.remove(this); SceneObject::remove(); } void Scene910::Object13::subEBB05(int x, int y, int arg8, int8 argA) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; NamedObject::postInit(); _field92 = arg8; scene->_field2DD8++; _field90 = scene->_field2DD8; setVisage(910); if (arg8 == 1) { setStrip(8); setFrame(argA); } else if (arg8 == 2) { setStrip(7); setFrame(5); } fixPriority(252); setPosition(Common::Point(x, y)); BF_GLOBALS._sceneItems.push_front(this); } bool Scene910::Object25::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: if (_field92 == 1) SceneItem::display(910, 10, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); else SceneItem::display(910, 11, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_USE: _field92 = BF_GLOBALS._v4CECE[_field90 + 11]; switch (_field92 - 1) { case 0: _field92 = 2; setStrip(7); setFrame(1); if (_field90 == 1) { scene->_field2DD8 = 14; scene->_object12._object27.subEBB05(182, 92, 2, BF_GLOBALS._v4CECE[14]); } else { scene->_field2DD8 = 15; scene->_object12._object28.subEBD26(178, 108, 0, BF_GLOBALS._v4CECE[15]); } SceneItem::display(910, 12, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); BF_GLOBALS._v4CECE[_field90] = _field92; return true; case 1: _field92 = 3; setStrip(6); setFrame(3); if (_field90 == 1) scene->_object12._object27.remove(); else scene->_object12._object28.remove(); BF_GLOBALS._v4CECE[_field90] = _field92; return true; case 2: _field92 = 2; setStrip(7); setFrame(1); if (_field90 == 1) { scene->_field2DD8 = 14; scene->_object12._object27.subEBB05(182, 96, 2, BF_GLOBALS._v4CECE[14]); } else { scene->_field2DD8 = 15; scene->_object12._object28.subEBD26(178, 108, 0, BF_GLOBALS._v4CECE[15]); } BF_GLOBALS._v4CECE[_field90] = _field92; return true; case 3: SceneItem::display(910, 13, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); BF_GLOBALS._v4CECE[_field90] = _field92; return true; default: BF_GLOBALS._v4CECE[_field90] = _field92; return true; } break; default: return NamedObject::startAction(action, event); break; } } void Scene910::Object25::remove() { BF_GLOBALS._sceneItems.remove(this); SceneObject::remove(); } void Scene910::Object25::subEBBDC(int x, int y, int arg8, int argA) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; NamedObject::postInit(); scene->_field2DD8++; _field90 = arg8; _field92 = argA; setVisage(910); if ((_field92 != 2) && (_field92 != 4)) { setStrip(6); setFrame(3); } else { setStrip(7); setFrame(1); if (_field90 == 1) { scene->_field2DD8 = 14; scene->_object12._object27.subEBB05(182, 96, 2, BF_GLOBALS._v4CECE[14]); } else { scene->_field2DD8 = 15; scene->_object12._object28.subEBD26(178, 108, 0, BF_GLOBALS._v4CECE[15]); } } fixPriority(251); setPosition(Common::Point(x, y)); BF_GLOBALS._sceneItems.push_front(this); } bool Scene910::Object28::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display(910, 14, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_USE: switch (_frame - _field90 - 2) { case 0: SceneItem::display(910, 15, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); break; case 1: if (BF_GLOBALS._v4CECA == 1) { BF_GLOBALS._v4CECA = 0; BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1); BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 910); } else if (BF_GLOBALS._v4CECA == 2) { BF_GLOBALS._v4CECA = 1; BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _field90); BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1); scene->_object8.setPosition(Common::Point(540, 100)); } setFrame(_field90 + 2); break; case 2: if (BF_GLOBALS._v4CECC == 1) { BF_GLOBALS._v4CECC = 0; BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910); } else if (BF_GLOBALS._v4CECC == 2) { BF_GLOBALS._v4CECC = 1; BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _field90); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1); scene->_object9.setPosition(Common::Point(540, 100)); } setFrame(_field90 + 2); break; case 3: if ((_position.x - 12) - (5 * _field90) < event.mousePos.x) { if (BF_GLOBALS._v4CECA == 1) { BF_GLOBALS._v4CECA = 0; BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1); BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 910); scene->_object8.setPosition(Common::Point(540, 100)); } else if (BF_GLOBALS._v4CECA == 2) { BF_GLOBALS._v4CECA = 1; BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _field90); BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1); scene->_object8.setPosition(Common::Point(540, 100)); } setFrame(_field90 + 4); } else { if (BF_GLOBALS._v4CECC == 1) { BF_GLOBALS._v4CECC = 0; BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910); } else if (BF_GLOBALS._v4CECC == 2) { BF_GLOBALS._v4CECC = 1; BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _field90); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1); scene->_object9.setPosition(Common::Point(540, 100)); } setFrame(_field90 + 3); } default: break; } BF_GLOBALS._v4CECE[_field90 + 15] = _frame; if (_field90 == 0) { if (_frame == 2) BF_GLOBALS._v4CECE[13] = 2; else BF_GLOBALS._v4CECE[13] = 4; } return true; case INV_HALF_YELLOW_CORD: if (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == _field90 + 2) { SceneItem::display(910, 85, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } if (BF_GLOBALS._v4CEE2 == 3) { SceneItem::display(910, 84, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } // no break on purpose case INV_YELLOW_CORD: if (BF_GLOBALS._v4CECC == 0) { BF_GLOBALS._v4CECC = 1; BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, _field90 + 2); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1); } else if (BF_GLOBALS._v4CECC == 1) { BF_GLOBALS._v4CECC = 2; BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, _field90 + 2); scene->_object9.setStrip(4); scene->_object9.setFrame(2); scene->_object9.setPosition(Common::Point(135, 93)); scene->_object9.fixPriority(50); } if (_frame - _field90 == 2) setFrame(_field90 + 4); else if (_frame - _field90 == 3) setFrame(_field90 + 5); BF_GLOBALS._v4CECE[15 + _field90] = _frame; BF_GLOBALS._v4CECE[_field90 + 15] = _frame; if (_field90 == 0) { if (_frame == 2) BF_GLOBALS._v4CECE[13] = 2; else BF_GLOBALS._v4CECE[13] = 4; } return true; case INV_HALF_BLACK_CORD: if (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == _field90 + 2) { SceneItem::display(910, 85, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } //No break on purpose case INV_BLACK_CORD: if (BF_GLOBALS._v4CECA == 0) { if (_field90 == 1) { if (!BF_GLOBALS.getFlag(fGotPointsForBlackCord)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForBlackCord); } } else { if (!BF_GLOBALS.getFlag(fGotPointsForGeneratorPlug)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForGeneratorPlug); } } BF_GLOBALS._v4CECA = 1; BF_INVENTORY.setObjectScene(INV_BLACK_CORD, _field90 + 2); BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1); } else if (BF_GLOBALS._v4CECA == 1) { if (_field90 == 1) { if (!BF_GLOBALS.getFlag(fGotPointsForBlackCord)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForBlackCord); } } else { if (!BF_GLOBALS.getFlag(fGotPointsForGeneratorPlug)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForGeneratorPlug); } } BF_GLOBALS._v4CECA = 2; BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, _field90 + 2); scene->_object8.setStrip(4); scene->_object8.setFrame(1); scene->_object8.setPosition(Common::Point(135, 93)); scene->_object8.fixPriority(50); scene->_object8.show(); scene->_object8._field90 = 1; if (BF_GLOBALS._v4CECE[17] == 1) { if (BF_GLOBALS._v4CECE[14] == 2) scene->subE83E1(); else scene->subE82BD(); } } if (_frame - _field90 == 2) setFrame(_field90 + 3); else if (_frame - _field90 == 4) setFrame(_field90 + 5); BF_GLOBALS._v4CECE[15 + _field90] = _frame; BF_GLOBALS._v4CECE[_field90 + 15] = _frame; if (_field90 == 0) { if (_frame == 2) BF_GLOBALS._v4CECE[13] = 2; else BF_GLOBALS._v4CECE[13] = 4; } return true; default: return NamedObject::startAction(action, event); } } void Scene910::Object28::subEBD26(int x, int y, int arg8, int8 argA) { NamedObject::postInit(); _field90 = arg8; _field92 = argA; setVisage(910); if (_field90 == 0) setStrip(7); else setStrip(3); setFrame(argA); fixPriority(251); setPosition(Common::Point(x, y)); BF_GLOBALS._sceneItems.push_front(this); } void Scene910::Object28::remove() { BF_GLOBALS._sceneItems.remove(this); SceneObject::remove(); } void Scene910::Object29::postInit(SceneObjectList *OwnerList) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; FocusObject::postInit(); _resNum = 910; _lookLineNum = 99; _useLineNum = 87; BF_GLOBALS._sceneItems.push_front(this); scene->_field2DD8 = 16; _object30.subEBD26(142, 86, 1, BF_GLOBALS._v4CECE[16]); scene->_field2DD8 = 17; _object31.subED6EA(BF_GLOBALS._v4CECE[17]); } void Scene910::Object29::remove() { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; BF_GLOBALS._player.disableControl(); scene->_sceneMode = 12; BF_GLOBALS._player.animate(ANIM_MODE_6, scene); _object30.remove(); _object31.remove(); FocusObject::remove(); } bool Scene910::Object31::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_USE) { if (_frame == 4) { scene->_sound1.play(100); scene->_sound1.holdAt(1); if (!BF_GLOBALS.getFlag(77)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(77); } setFrame(5); _object32.setFrame(7); if (BF_GLOBALS._v4CECA == 2) { if (BF_GLOBALS._v4CECE[14] == 2) scene->subE83E1(); else scene->subE82BD(); } } else { scene->_sound1.release(); if (BF_GLOBALS._bookmark == 21) { if (!BF_GLOBALS.getFlag(82)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(82); } } setFrame(4); _object32.setFrame(6); } BF_GLOBALS._v4CECE[17] = (_frame + 252) % 256; return true; } else return NamedObject::startAction(action, event); } void Scene910::Object31::remove() { _object32.remove(); SceneObject::remove(); } void Scene910::Object31::subED6EA(int frame) { NamedObject::postInit(); setVisage(910); setStrip(6 + frame); setFrame(4); setPosition(Common::Point(159, 83)); fixPriority(251); _object32.postInit(); _object32.setVisage(910); _object32.setStrip(6); _object32.setFrame(6 + frame); _object32.setPosition(Common::Point(166, 84)); _object32.fixPriority(251); BF_GLOBALS._sceneItems.push_front(this); } bool Scene910::Item1::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_USE) { if (scene->_object1._position.x == 115) SceneItem::display(910, 62, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); else if (BF_GLOBALS._v4CEE2 == 1) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9118; scene->setAction(&scene->_sequenceManager1, scene, 9118, &BF_GLOBALS._player, &scene->_object2, NULL); } else { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9103; if (BF_GLOBALS.getFlag(8)) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->setAction(&scene->_sequenceManager1, scene, 9103, &BF_GLOBALS._player, NULL); } return true; } else { return NamedHotspot::startAction(action, event); } } bool Scene910::Item2::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; if (action == 59) { BF_GLOBALS._player.disableControl(); scene->_field2DDC = 151; scene->_field2DDE = 186; scene->_field2DDA = 5; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); else scene->signal(); return true; } else return NamedHotspot::startAction(action, event); } bool Scene910::Item3::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; if ((action == CURSOR_TALK) && (BF_GLOBALS._v4CEE2 == 4) && (BF_GLOBALS._v4CEE4 == 0)) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 15; scene->_stripManager.start(9102, scene); return true; } else { return NamedHotspot::startAction(action, event); } } bool Scene910::Item9::startAction(CursorType action, Event &event) { if (BF_GLOBALS._v4CEE0 == 0) return NamedHotspot::startAction(action, event); else return false; } bool Scene910::Item15::startAction(CursorType action, Event &event) { if (BF_GLOBALS._v4CEC8 == 0) return false; if ((action == CURSOR_LOOK) || (action == CURSOR_USE) || (action == CURSOR_TALK)) return NamedHotspot::startAction(action, event); if (action >= CURSOR_WALK) return false; SceneItem::display(910, 2, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } bool Scene910::Item16::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; if ((BF_GLOBALS._v4CEE0 == 0) || (BF_GLOBALS._v4CEE2 != 0)) return false; if (BF_GLOBALS._player._visage == 1911) { BF_GLOBALS._player.disableControl(); scene->_field2DDC = 292; scene->_field2DDE = 100; scene->_field2DDA = 0; scene->_sceneMode = 9123; scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); } else { Common::Point pt(292, 100); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, NULL); } return true; } bool Scene910::Item17::startAction(CursorType action, Event &event) { Common::Point pt(15, 159); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, NULL); return true; } void Scene910::remove() { PalettedScene::remove(); } void Scene910::postInit(SceneObjectList *OwnerList) { uint32 unk_50E94 = 0, unk_50E90 = 0; uint32 unk_50E98 = 0, unk_50E9C = 0; PalettedScene::postInit(); loadScene(910); BF_GLOBALS._sound1.changeSound(99); BF_GLOBALS._v51C44 = 0; _stripManager.addSpeaker(&_gameTextSpeaker); _stripManager.addSpeaker(&_jakeJacketSpeaker); _stripManager.addSpeaker(&_lyleHatSpeaker); _stripManager.addSpeaker(&_fbiSpeaker); _stripManager.addSpeaker(&_nicoSpeaker); _stripManager.addSpeaker(&_daSpeaker); BF_GLOBALS._player.postInit(); if (BF_GLOBALS._v4CEC8 == 0) BF_GLOBALS._player.setVisage(129); else BF_GLOBALS._player.setVisage(911); BF_GLOBALS._player.setPosition(Common::Point(330, 190)); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.disableControl(); _object6.postInit(); _object6.setVisage(910); if ((BF_GLOBALS._v4CECE[3] == 2) && (BF_GLOBALS._v4CECE[4] == 2)) { _action1.setActionIndex(4); } else { _object6.animate(ANIM_MODE_2, NULL); _object6.setStrip(2); } _object6.setPosition(Common::Point(98, 34)); _object6.setAction(&_action1); _object10.postInit(); _object10.setVisage(910); _object10.setStrip(5); _object10.setFrame(1); _object10.setPosition(Common::Point(91, 66)); _object11.postInit(); _object11.setVisage(910); _object11.setStrip(8); _object11.setFrame(4); _object11.setPriority(48); _object9.init(1); _object9.setVisage(910); _object9.setStrip(6); _object9.setFrame(2); _object9.setPriority(50); _object8.init(2); _object8.setVisage(910); _object8.setStrip(6); _object8.setFrame(1); _object8.setPosition(Common::Point(114, 149)); _object8.setPriority(246); if (BF_GLOBALS._dayNumber < 5) _item17.setDetails(Rect(0, 149, 29, 167), 910, -1, -1, -1, 1, NULL); if (BF_GLOBALS._v4CEE2 == 0) _item16.setDetails(Rect(265, 18, 319, 102), 910, -1, -1, -1, 1, NULL); _object10.setDetails(910, 6, -1, -1, 1, NULL); _item15.setDetails(Rect(0, 0, 320, 170), 910, 0, 1, 2, 1, NULL); _object9.setDetails(910, 52, 53, -1, 1, NULL); _object8.setDetails(910, 54, 55, -1, 1, NULL); _item2.setDetails(3, 910, 22, -1, 24, 1); _item4.setDetails(1, 910, 16, 17, 18, 1); _item8.setDetails(4, 910, 25, 26, 27, 1); _item6.setDetails(Rect(37, 58, 42, 67), 910, 34, 35, 36, 1, NULL); _item7.setDetails(Rect(114, 53, 135, 87), 910, 37, 38, 39, 1, NULL); _item1.setDetails(Rect(146, 67, 184, 93), 910, 40, 41, 42, 1, NULL); _item9.setDetails(Rect(266, 39, 274, 70), 910, 43, 44, 45, 1, NULL); _item10.setDetails(Rect(276, 27, 288, 83), 910, 46, 47, 48, 1, NULL); _item11.setDetails(Rect(295, 42, 312, 87), 910, 49, 50, 51, 1, NULL); _object11.setDetails(910, 28, -1, 30, 1, NULL); _item3.setDetails(7, 910, 59, 60, 61, 1); _item5.setDetails(2, 910, 19, 20, 21, 1); _item12.setDetails(6, 910, 28, 29, 30, 1); _item13.setDetails(5, 910, 31, 32, 33, 1); _item14.setDetails(Rect(0, 0, 320, 170), 910, 3, 4, 5, 1, NULL); if (BF_GLOBALS._dayNumber == 0) { BF_GLOBALS._dayNumber = 5; BF_GLOBALS._sceneManager._previousScene = 900; BF_GLOBALS.setFlag(7); } if ( (BF_GLOBALS._sceneManager._previousScene == 910) || (BF_GLOBALS._sceneManager._previousScene == 190) || (BF_GLOBALS._sceneManager._previousScene == 300)) { BF_GLOBALS._sceneManager._previousScene = 900; BF_GLOBALS._v4CEE2 = 0; BF_GLOBALS._v4CEE4 = 0; } _field2DE0 = 0; _field2DE2 = 0; _field2DE4 = 0; BF_GLOBALS.clearFlag(34); _object1._position.x = 0; if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._sceneManager._previousScene == 900)){ BF_GLOBALS.setFlag(34); BF_GLOBALS._v4CEC8 = 0; BF_GLOBALS._player.setVisage(129); _object1.postInit(); _object1.setVisage(811); _object1.setPosition(Common::Point(-52, 217)); _object1.animate(ANIM_MODE_1, NULL); _object1.setObjectWrapper(new SceneObjectWrapper()); _object1._field90 = 0; _object1.setDetails(910, 69, 70, 71, 5, &_item4); BF_GLOBALS._v4CECE[0] = 3; BF_GLOBALS._v4CECE[12] = 2; BF_GLOBALS._v4CECE[13] = 4; BF_GLOBALS._v4CECE[14] = 3; BF_GLOBALS._v4CECE[15] = 3; BF_GLOBALS._v4CECE[16] = 4; BF_GLOBALS._v4CECE[17] = 1; BF_GLOBALS._v4CECA = 2; BF_GLOBALS._v4CEE0 = 1; _object9.setPosition(Common::Point(291, -30)); BF_GLOBALS._v4CECC = 0; } if (BF_GLOBALS._sceneManager._previousScene == 920) { BF_GLOBALS.setFlag(34); BF_GLOBALS._player.setPosition(Common::Point(276, 119)); BF_GLOBALS._player.setStrip(6); if (BF_GLOBALS._v4CECC == 0) _object9.setPosition(Common::Point(291, -30)); if (BF_GLOBALS._dayNumber == 5) { _object2.postInit(); _object2.setVisage(914); _object2.setStrip(5); _object2.setFrame(8); _object2.setPosition(Common::Point(263, 120)); _object2.setDetails(910, 63, 64, 65, 5, &_item4); _object3.postInit(); _object3.setVisage(918); _object3.setStrip(4); _object3.setFrame(1); _object3.setPosition(Common::Point(291, 127)); _object3.setDetails(910, 66, 67, 68, 5, &_object2); _object1.postInit(); _object1.setVisage(916); _object1.setPosition(Common::Point(155, 113)); _object1.setStrip(3); _object1.setFrame(3); _object1._field90 = 1; _object1.setDetails(910, 69, 70, 71, 5, &_item4); } BF_GLOBALS._player.enableControl(); } else if (BF_GLOBALS._sceneManager._previousScene == 935) { BF_GLOBALS.setFlag(34); BF_GLOBALS._v4CEC8 = 0; _object1.postInit(); _object1.setVisage(916); _object1.setPosition(Common::Point(155, 113)); _object1.setStrip(3); _object1.setFrame(3); _object1._field90 = 1; _object1.setDetails(910, 69, 70 ,71 , 5, &_item4); BF_GLOBALS._walkRegions.proc1(15); BF_GLOBALS._walkRegions.proc1(16); BF_GLOBALS._walkRegions.proc1(14); BF_GLOBALS._walkRegions.proc1(10); if (BF_GLOBALS.getFlag(8)) { BF_GLOBALS._player.setVisage(1911); BF_GLOBALS._player.animate(ANIM_MODE_NONE, 0, NULL); BF_GLOBALS._player.setFrame(7); } BF_GLOBALS._player.setPosition(Common::Point(174, 157)); BF_GLOBALS._player._strip = 7; _object2.postInit(); _object2.setVisage(913); _object2.setPosition(Common::Point(262, 124)); _object2.setStrip(6); BF_GLOBALS._v4CEE6 = 0; BF_GLOBALS._v4CEE2 = 1; _object2.setDetails(910, 63, 64, 67, 5, &_item4); BF_GLOBALS._v4CECA = 2; if (BF_GLOBALS._v4CECC == 0) _object9.setPosition(Common::Point(291, -30)); _sceneMode = 11; if (BF_GLOBALS._v4CEC8 == 0) add2Faders((const byte *)&unk_50E94, 2, 913, this); else add2Faders((const byte *)&unk_50E90, 2, 911, this); } else { BF_GLOBALS.clearFlag(8); BF_GLOBALS._player.disableControl(); } if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)){ _object7.postInit(); _object7.setAction(&_action2); } if (BF_INVENTORY.getObjectScene(57) == 1) _object9.setPosition(Common::Point(540, 100)); if (BF_INVENTORY.getObjectScene(59) == 1) _object8.setPosition(Common::Point(540, 100)); if (BF_GLOBALS._v4CECC == 2) { _object9.setStrip(4); _object9.setFrame(2); _object9.setPosition(Common::Point(135, 93)); _object9.setPriority(50); _object9._field90 = 1; _object10.setFrame(3); } if (BF_GLOBALS._v4CECA == 2) { _object8.setStrip(4); _object8.setFrame(1); _object8.setPosition(Common::Point(135, 93)); _object8.fixPriority(50); _object8._field90 = 1; _object10.setFrame(3); } _object5.postInit(); _object5.setVisage(919); _object5.setStrip(5); _object5.setPosition(Common::Point(286, 129)); _object5.fixPriority(1); if (BF_GLOBALS._v4CEC8 == 0) _object5.hide(); if (BF_GLOBALS._v4CEE0 == 0) { _object5.setFrame(1); _object11.setPosition(Common::Point(292, 107)); if (BF_GLOBALS._v4CECC != 2) _object9.setPosition(Common::Point(288, 57)); BF_GLOBALS._walkRegions.proc1(10); } else { _object5.setFrame(6); _object11.setPosition(Common::Point(295, 20)); _object11.hide(); if (BF_GLOBALS._v4CECC != 2) _object9.setPosition(Common::Point(291, -30)); BF_GLOBALS._walkRegions.proc1(10); } if (BF_GLOBALS._v4CECE[17] != 0) { _sound1.play(100); _sound1.holdAt(1); } if (BF_GLOBALS._sceneManager._previousScene != 935) { _sceneMode = 11; if (BF_GLOBALS._v4CEC8 == 0) add2Faders((const byte *)&unk_50E9C, 10, 910, this); else add2Faders((const byte *)&unk_50E98, 10, 911, this); } } void Scene910::signal() { static uint32 v50EA0 = 0, v50EA4 = 0, v50EA8 = 0,v50EAC = 0, v50EB0 = 0, v50EB4 = 0, v50EB8 = 0; switch (_sceneMode) { case 2: _sceneMode = 3; _timer1.set(60, this); break; case 3: _sceneMode = 4; sub15E4F((const byte *)&v50EAC, 35, 910, this, 0, 111, 112, 255, false); break; case 4: _sceneMode = 5; _timer1.set(30, this); break; case 5: _sceneMode = 6; sub15E4F((const byte *)&v50EB0, 40, 910, this, 0, 111, 112, 255, false); break; case 6: _sceneMode = 7; _timer1.set(60, this); break; case 7: BF_GLOBALS._player.setVisage(129); _object1.setVisage(811); _object5.hide(); _sceneMode = 8; sub15E4F((const byte *)&v50EB4, 95, 910, this, 0, 111, 112, 255, false); break; case 8: _sceneMode = 9; _timer1.set(30, this); break; case 9: _sceneMode = 0; sub15E4F((const byte *)&v50EB8, 100, 910, this, 0, 111, 112, 255, false); BF_GLOBALS._player.enableControl(); break; case 10: BF_GLOBALS._player.disableControl(); BF_GLOBALS._v51C44 = 0; BF_GLOBALS._sceneManager.changeScene(935); break; case 11: if (BF_GLOBALS._sceneManager._previousScene == 900) { if (BF_GLOBALS._v4CEC8 != 0) sub15E4F((const byte *)&v50EA4, 25, 910, NULL, 0, 111, 112, 255, false); if (BF_GLOBALS.getFlag(fWithLyle)) { NpcMover *mover = new NpcMover(); Common::Point destPos(22, 157); _object1.addMover(mover, &destPos, NULL); _sceneMode = 9100; } setAction(&_sequenceManager1, this, 9100, &BF_GLOBALS._player, NULL); } else if (BF_GLOBALS._sceneManager._previousScene == 935) { _sceneMode = 9146; _stripManager.start(9103, this); } break; case 12: BF_GLOBALS._player.setVisage(129); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player.setStrip(7); BF_GLOBALS._player.enableControl(); break; case 13: BF_GLOBALS._player.disableControl(); BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 9117, &_object2, NULL); BF_GLOBALS._v4CEE2 = 2; // No break on purpose case 15: _object3.postInit(); _object3.setDetails(910, 66, 67, 68, 5, &_object2); BF_GLOBALS._v4CEE8 = 0; _sceneMode = 9121; setAction(&_sequenceManager1, this, 9121, &_object3, NULL); break; case 14: BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(940); break; case 16: _object1._field90 = 1; _sceneMode = 10; addFader((const byte *)&v50EA8, 2, this); BF_GLOBALS._v4CEE2 = 1; BF_GLOBALS._walkRegions.proc1(16); BF_GLOBALS._walkRegions.proc1(14); BF_GLOBALS._sceneItems.remove(&_item16); break; case 17: BF_GLOBALS._player._strip = 7; BF_GLOBALS._player._frame = 1; if (_field2DE2 == 0) { _field2DE2 = 1; if (BF_GLOBALS._v4CEE2 == 4) { _sceneMode = 9149; setAction(&_sequenceManager1, this, 9149, &BF_GLOBALS._player, NULL); } else { _sceneMode = 9141; setAction(&_sequenceManager1, this, 9141, &BF_GLOBALS._player, &_object2, NULL); } } else { SceneItem::display(910, 91, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); BF_GLOBALS._player.enableControl(); } break; case 18: BF_GLOBALS._player._strip = 7; BF_GLOBALS._player._frame = 1; if (BF_GLOBALS._v4CEE4 == 3) { if (_field2DE4 == 0) { _field2DE4 = 1; _sceneMode = 9142; setAction(&_sequenceManager1, this, 9142, &BF_GLOBALS._player, &_object3, NULL); } else { SceneItem::display(910, 92, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); BF_GLOBALS._player.enableControl(); } } else { SceneItem::display(910, 94, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); BF_GLOBALS._player.enableControl(); } break; case 19: BF_GLOBALS._deathReason = 14; BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(666); break; case 20: BF_GLOBALS._player.enableControl(); break; case 9100: if (BF_GLOBALS._dayNumber == 5) BF_GLOBALS._walkRegions.proc1(1); BF_GLOBALS._player.enableControl(); break; case 9101: if ((BF_GLOBALS._v4CEE0 == 0) && (BF_GLOBALS._v4CEC8 != 0) && (BF_GLOBALS._v4CECE[17] == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910) && (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 910)) BF_GLOBALS.clearFlag(fGotPointsForSearchingDA); else BF_GLOBALS.setFlag(fGotPointsForSearchingDA); BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(900); break; case 9102: if ((BF_GLOBALS._v4CECE[13] < 4) && (_object10._frame == 1)) _object10.animate(ANIM_MODE_5, NULL); BF_GLOBALS._player.enableControl(); _object12.postInit(); _object12.setVisage(910); _object12.setStrip(3); _object12.setFrame(2); _object12.setPosition(Common::Point(160, 130)); _object12.fixPriority(250); break; case 9103: BF_GLOBALS._player.enableControl(); _object29.postInit(); _object29.setVisage(910); _object29.setStrip(3); _object29.setFrame(2); _object29.setPosition(Common::Point(160, 130)); _object29.fixPriority(250); break; case 9110: if (!BF_GLOBALS.getFlag(fGotPointsForCrate)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForCrate); } BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1); _object8.setPosition(Common::Point(540, 100)); BF_GLOBALS._player.enableControl(); break; case 9111: if ((BF_GLOBALS._bookmark == bEndDayThree) && (!BF_GLOBALS.getFlag(fGotPointsForGeneratorOff))) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForGeneratorOff); } BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 910); _object8.setStrip(6); _object8.setFrame(1); _object8.setPosition(Common::Point(114, 149)); _object8.fixPriority(249); BF_GLOBALS._v4CECA = 0; _object8._field90 = 0; BF_GLOBALS._player.enableControl(); break; case 9112: BF_GLOBALS._player._strip = 4; BF_GLOBALS._player._frame = 1; BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1); _object9.setPosition(Common::Point(540, 100)); BF_GLOBALS._player.enableControl(); break; case 9113: BF_GLOBALS._player._strip = 4; BF_GLOBALS._player._frame = 1; BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 910); _object9.setStrip(6); _object9.setFrame(2); _object9.setPosition(Common::Point(_object11._position.x - 50, _object11._position.y - 4)); _object9.fixPriority(50); BF_GLOBALS._v4CECC = 0; _object9._field90 = 0; _object9.show(); BF_GLOBALS._player.enableControl(); break; case 9114: _object11.hide(); if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)) { BF_GLOBALS._player.disableControl(); _object2.postInit(); _object2.setDetails(910, 63, 64, 65, 5, &_item4); BF_GLOBALS._v4CEE6 = 0; _object7.postInit(); _action2.remove(); _sceneMode = 9116; setAction(&_sequenceManager1, this, 9116, &_object2, NULL); } else { BF_GLOBALS._player.enableControl(); } break; case 9115: BF_GLOBALS._player.enableControl(); break; case 9116: BF_GLOBALS._player.disableControl(); _sceneMode = 16; _stripManager.start(9119, this); break; case 9118: // No break on purpose case 9137: BF_GLOBALS._deathReason = 16; BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(666); break; case 9119: if (!BF_GLOBALS.getFlag(fGotPointsForCordOnForklift)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForCordOnForklift); } BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 0); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1); BF_GLOBALS._player.enableControl(); break; case 9120: BF_GLOBALS._walkRegions.proc1(7); BF_GLOBALS._player.enableControl(); break; case 9121: _item3.setDetails(7, 910, 96, 60, 61, 3); BF_GLOBALS._v4CEE4 = 2; if (BF_GLOBALS._v4CEE2 == 4) { _sceneMode = 20; _stripManager.start(9115, this); } else { BF_GLOBALS._player.enableControl(); } break; case 9123: BF_GLOBALS.clearFlag(gunDrawn); switch (_field2DDA - 1) { case 0: _sceneMode = 9102; setAction(&_sequenceManager1, this, 9102, &BF_GLOBALS._player, NULL); break; case 1: _sceneMode = 9103; setAction(&_sequenceManager1, this, 9103, &BF_GLOBALS._player, NULL); break; case 2: _sceneMode = 9143; setAction(&_sequenceManager1, this, 9143, &BF_GLOBALS._player, NULL); break; case 3: _sceneMode = 9110; setAction(&_sequenceManager1, this, 9110, &BF_GLOBALS._player, &_object8, NULL); break; case 4: _sceneMode = 9111; setAction(&_sequenceManager1, this, 9111, &BF_GLOBALS._player, &_object8, NULL); break; case 5: switch (BF_GLOBALS._v4CEE2 - 1) { case 0: _sceneMode = 9118; setAction(&_sequenceManager1, this, 9118, &BF_GLOBALS._player, &_object2, NULL); break; case 1: _sceneMode = 9148; setAction(&_sequenceManager1, this, 9148, &BF_GLOBALS._player, &_object2, NULL); break; case 2: // No break on purpose case 3: { _sceneMode = 17; PlayerMover *mover = new PlayerMover(); Common::Point destPos(232, 138); BF_GLOBALS._player.addMover(mover, &destPos, this); } default: break; } break; case 6: { _sceneMode = 18; PlayerMover *mover = new PlayerMover(); Common::Point destPos(248, 137); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 7: { _sceneMode = 9112; PlayerMover *mover = new PlayerMover(); Common::Point destPos(285, 114); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 8: { _sceneMode = 9113; PlayerMover *mover = new PlayerMover(); Common::Point destPos(285, 114); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 9: _sceneMode = 9119; setAction(&_sequenceManager1, this, 9119, &BF_GLOBALS._player, &_object2, &_object9, NULL); break; case 10: _object9.fixPriority(127); if (_object9._position.x != 267) _object9.hide(); _sceneMode = 9136; setAction(&_sequenceManager1, this, 9136, &BF_GLOBALS._player, &_object3, &_object9, NULL); BF_GLOBALS._v4CEE4 = 3; break; case 11: _sceneMode = 9137; setAction(&_sequenceManager1, this, 9137, &BF_GLOBALS._player, &_object2, NULL); break; default: BF_GLOBALS._player.enableControl(); PlayerMover *mover = new PlayerMover(); Common::Point destPos(_field2DDC, _field2DDE); BF_GLOBALS._player.addMover(mover, &destPos, NULL); break; } case 9124: BF_GLOBALS._player.enableControl(); BF_GLOBALS.setFlag(gunDrawn); break; case 9125: BF_GLOBALS.setFlag(fBackupAt340); BF_GLOBALS._v4CEE2 = 4; _object3.postInit(); _object2.setDetails(910, 72, 73, 74, 3, NULL); _object3.setDetails(910, 66, 67, 68, 5, &_object2); BF_GLOBALS._v4CEE8 = 0; _sceneMode = 9121; setAction(&_sequenceManager1, this, 9121, &_object3, NULL); break; case 9126: _sceneMode = 19; if (BF_GLOBALS._v4CEE4 == 0) signal(); else _stripManager.start(9115, this); break; case 9129: // No break on purpose case 9134: BF_GLOBALS._deathReason = 17; BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(666); break; case 9130: _object1.setAction(&_sequenceManager2, NULL, 9133, &_object1, NULL); BF_GLOBALS._v4CECE[14] = 3; subE82BD(); BF_GLOBALS._walkRegions.proc1(15); break; case 9132: BF_GLOBALS._player.enableControl(); BF_GLOBALS._v4CEE4 = 4; BF_GLOBALS._deathReason = 13; BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(666); break; case 9135: BF_GLOBALS._deathReason = 15; BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(666); break; case 9136: if (!BF_GLOBALS.getFlag(fGotPointsForCuffingNico)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForCuffingNico); } _object1.setAction(&_sequenceManager2, NULL, 9131, &_object1, NULL); BF_GLOBALS._walkRegions.proc2(16); if (BF_GLOBALS._v4CEE2 == 4) BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 0); else BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910); _object4.postInit(); _object4.setDetails(910, 86, 87, 88, 4, &_item8); _sceneMode = 9139; setAction(&_sequenceManager1, this, 9139, &_object4, &BF_GLOBALS._player, NULL); break; case 9139: BF_GLOBALS._walkRegions.proc1(4); _field2DE0 = 1; BF_GLOBALS._player.enableControl(); break; case 9140: _sceneMode = 14; addFader((const byte *)&v50EA0, 2, this); break; case 9141: BF_INVENTORY.setObjectScene(INV_22_SNUB, 1); if (!BF_GLOBALS.getFlag(fGotPointsForCuffingDA)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForCuffingDA); } BF_GLOBALS._player.enableControl(); break; case 9142: BF_GLOBALS._player.enableControl(); if (!BF_GLOBALS.getFlag(fGotPointsForSearchingNico)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForSearchingNico); } break; case 9143: if (BF_GLOBALS._v4CEE2 == 0) { BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(920); } else { SceneItem::display(910, 89, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); _sceneMode = 9144; setAction(&_sequenceManager1, this, 9144, &BF_GLOBALS._player, NULL); } break; case 9144: // No break on purpose case 9146: BF_GLOBALS._player.enableControl(); break; case 9148: BF_GLOBALS._deathReason = 23; BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(666); break; case 9149: SceneItem::display(910, 74, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); BF_INVENTORY.setObjectScene(INV_22_SNUB, 1); BF_GLOBALS._player.enableControl(); BF_GLOBALS._player.setVisage(129); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player._strip = 7; BF_GLOBALS._player._frame = 1; break; default: break; } } void Scene910::process(Event &event) { SceneExt::process(event); if ((!BF_GLOBALS._player._enabled) || (event.mousePos.y >= 167)) return; if (_item7._bounds.contains(event.mousePos)) { GfxSurface surface = _cursorVisage.getFrame(6); BF_GLOBALS._events.setCursor(surface); } if ((BF_GLOBALS._v4CEE0 == 0) || (BF_GLOBALS._v4CEE2 != 0)) { if (!_item16._bounds.contains(event.mousePos)) { CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); } else { GfxSurface surface = _cursorVisage.getFrame(8); BF_GLOBALS._events.setCursor(surface); } } if (event.eventType != 1) return; switch (BF_GLOBALS._events.getCursor()) { case INV_COLT45: if (!BF_GLOBALS._player._bounds.contains(event.mousePos)) break; if (BF_GLOBALS.getFlag(gunDrawn)) { BF_GLOBALS._player.disableControl(); _field2DDC = BF_GLOBALS._player._position.x; _field2DDE = BF_GLOBALS._player._position.y; _sceneMode = 9123; setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL); event.handled = true; } else if (BF_GLOBALS._v4CEE2 <= 1) { if (BF_GLOBALS.getFlag(fCanDrawGun)) { BF_GLOBALS._player.addMover(NULL); BF_GLOBALS._player.disableControl(); _sceneMode = 9124; setAction(&_sequenceManager1, this, 9124, &BF_GLOBALS._player, NULL); } else SceneItem::display(1, 4, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); } else SceneItem::display(910, 81, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); break; case CURSOR_WALK: if (BF_GLOBALS._v4CEE2 == 1) { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._player._visage == 1911) { BF_GLOBALS._player.disableControl(); _field2DDC = event.mousePos.x; _field2DDE = event.mousePos.y; _field2DDA = 6; _sceneMode = 9123; setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL); } else { _sceneMode = 9118; setAction(&_sequenceManager1, this, 9118, &BF_GLOBALS._player, &_object2, NULL); event.handled = true; } } else if (BF_GLOBALS._player._visage == 1911) { BF_GLOBALS._player.disableControl(); _field2DDC = event.mousePos.x; _field2DDE = event.mousePos.y; _field2DDA = 0; _sceneMode = 9123; setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL); } default: break; } } void Scene910::dispatch() { SceneExt::dispatch(); if (!_action) return; if ((_sceneMode != 14) && (BF_GLOBALS._player._position.x < 30) && (BF_GLOBALS._player._position.y > 148)) { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._dayNumber != 5) { _sceneMode = 9101; setAction(&_sequenceManager1, this, 9101, &BF_GLOBALS._player, NULL); } else { _sceneMode = 9146; if (BF_GLOBALS._v4CEE0 == 0) setAction(&_sequenceManager1, this, 9146, &BF_GLOBALS._player, NULL); else setAction(&_sequenceManager1, this, 9145, &BF_GLOBALS._player, NULL); } } if ((BF_GLOBALS._player._position.x > 265) && (BF_GLOBALS._player._position.y < 102) && (BF_GLOBALS._v4CEE0 == 0) && (_sceneMode == 9143)) { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS.getFlag(gunDrawn)) { _field2DDA = 3; _sceneMode = 9123; setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL); } else if (BF_GLOBALS._v4CEE2 == 0) { _sceneMode = 9143; setAction(&_sequenceManager1, this, 9143, &BF_GLOBALS._player, NULL); } else { SceneItem::display(910, 98, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); _sceneMode = 9144; setAction(&_sequenceManager1, this, 9144, &BF_GLOBALS._player, NULL); } } if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._player._position.x > 250) && (_sceneMode != 9135) && (_sceneMode != 11) && (BF_GLOBALS._v4CEE0 != 0) && (BF_GLOBALS._v4CEE2 == 0)) { BF_GLOBALS._player.disableControl(); _object7.remove(); _action2.remove(); _object2.postInit(); _object2.setDetails(910, 63, 64, 65, 5, &_item4); _sceneMode = 9135; setAction(&_sequenceManager1, this, 9135, &BF_GLOBALS._player, &_object2, NULL); } } void Scene910::checkGun() { if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0) && (BF_GLOBALS._v4CEE0 != 0)) SceneItem::display(910, 70, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); else SceneExt::checkGun(); } void Scene910::subE82BD() { if (BF_GLOBALS._v4CEE0 != 0) return; if (! BF_GLOBALS.getFlag(fGotPointsForLightsOn)) { BF_GLOBALS._uiElements.addScore(50); BF_GLOBALS.setFlag(fGotPointsForLightsOn); } BF_GLOBALS._v4CEE0 = 1; BF_GLOBALS._player.disableControl(); BF_GLOBALS._walkRegions.proc2(10); _sceneMode = 9114; _sound2.play(42); if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910)) setAction(&_sequenceManager1, this, 9127, &_object11, &_object9, &_object5, NULL); else setAction(&_sequenceManager1, this, 9114, &_object11, &_object5, NULL); } void Scene910::subE83E1() { if (BF_GLOBALS._v4CEE0 != 0) { _object11.show(); if ((BF_GLOBALS._bookmark == 21) && (!BF_GLOBALS.getFlag(80))) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(80); } BF_GLOBALS._v4CEE0 = 0; BF_GLOBALS._walkRegions.proc1(10); BF_GLOBALS._player.disableControl(); _sceneMode = 9115; _sound2.play(42); if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(57) == 910)) setAction(&_sequenceManager1, this, 9128, &_object11, &_object9, &_object5, NULL); else setAction(&_sequenceManager1, this, 9115, &_object11, &_object5, NULL); } if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)) { // _objectList.draw(); if (BF_GLOBALS._sceneObjects->contains(&_object12)) _object12.remove(); if (BF_GLOBALS._sceneObjects->contains(&_object29)) _object29.remove(); BF_GLOBALS._player.disableControl(); _sceneMode = 9120; BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 9120, &BF_GLOBALS._player, &_object1, NULL); BF_GLOBALS._walkRegions.proc2(1); } } /*-------------------------------------------------------------------------- * Scene 920 - Inside Warehouse: Secret Room * *--------------------------------------------------------------------------*/ // Crate bool Scene920::Item1::startAction(CursorType action, Event &event) { Scene920 *scene = (Scene920 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: if ((BF_GLOBALS.getFlag(fCrateOpen)) && (BF_GLOBALS._player._visage == 921)) { BF_GLOBALS._player.disableControl(); scene->_object2.postInit(); scene->_sceneMode = 9204; if (!BF_GLOBALS.getFlag(fGotPointsForBoots)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForBoots); } scene->setAction(&scene->_sequenceManager1, scene, 9204, &BF_GLOBALS._player, &scene->_object2, NULL); return true; } else return NamedHotspot::startAction(action, event); break; case CURSOR_USE: BF_GLOBALS._player.disableControl(); if (BF_GLOBALS.getFlag(fCrateOpen)) { if (BF_GLOBALS._player._visage == 921) { if ((BF_INVENTORY.getObjectScene(15) != 1) && (BF_GLOBALS.getFlag(fSawGuns))) { scene->_sceneMode = 9207; scene->setAction(&scene->_sequenceManager1, scene, 9207, &BF_GLOBALS._player, NULL); } else { scene->_sceneMode = 9203; scene->setAction(&scene->_sequenceManager1, scene, 9203, &BF_GLOBALS._player, &scene->_object1, NULL); BF_GLOBALS.clearFlag(fCrateOpen); } } else { scene->_sceneMode = 9205; scene->setAction(&scene->_sequenceManager1, scene, 9205, &BF_GLOBALS._player, NULL); } } else { scene->_sceneMode = 9202; scene->setAction(&scene->_sequenceManager1, scene, 9202, &BF_GLOBALS._player, &scene->_object1, NULL); BF_GLOBALS.setFlag(fCrateOpen); } return true; break; default: return NamedHotspot::startAction(action, event); break; } } // North Exit bool Scene920::Item8::startAction(CursorType action, Event &event) { Scene920 *scene = (Scene920 *)BF_GLOBALS._sceneManager._scene; BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._player._visage == 921) { scene->_sceneMode = 10; scene->setAction(&scene->_sequenceManager1, scene, 9206, &BF_GLOBALS._player, NULL); // TO BE CHECKED: Original code uses a variable to store the address of scene instance. // As it's used later a coordinates to create a playermover, I don't understand. // On the other hand, it's not really important as just after the hero leaves the scene // so the variable is no longer used. // scene->_oldCoord = &scene; _field10 = 1; } else { scene->_sceneMode = 9201; scene->setAction(&scene->_sequenceManager1, scene, 9201, &BF_GLOBALS._player, NULL); } return true; } void Scene920::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(920); _stripManager.addSpeaker(&_gameTextSpeaker); _stripManager.addSpeaker(&_jakeJacketSpeaker); if (BF_GLOBALS._dayNumber == 0) BF_GLOBALS._dayNumber = 4; BF_GLOBALS._player.postInit(); if (BF_GLOBALS._v4CEC8 != 0) { _object3.postInit(); _object3.setVisage(922); _object3.setStrip(2); _object3.fixPriority(1); _object3.setPosition(Common::Point(145, 82)); } _object1.postInit(); _object1.setVisage(922); if (BF_GLOBALS.getFlag(fCrateOpen)) { _object1.setStrip(3); _object1.setFrame(5); } _object1.setPosition(Common::Point(158, 107)); _object1.setPriority(130); _exitN.setDetails(Rect(116, 12, 165, 81), 920, -1, -1, -1, 1, NULL); _item6.setDetails(6, 920, 15, 16, 17, 1); _item4.setDetails(5, 920, 12, 13, 14, 1); _item7.setDetails(4, 920, 9, 10, 11, 1); _item5.setDetails(3, 920, 6, 7, 8, 1); _crate.setDetails(2, 920, 3, 4, 5, 1); _item3.setDetails(1, 920, 3, 4, 5, 1); _item2.setDetails(Rect(0, 0, 320, 200), 920, 0, 1, 2, 1, NULL); BF_GLOBALS._player.disableControl(); _sceneMode = 9200; setAction(&_sequenceManager1, this, 9200, &BF_GLOBALS._player, NULL); } void Scene920::signal() { switch (_sceneMode) { case 10: _sceneMode = 9201; setAction(&_sequenceManager1, this, 9201, &BF_GLOBALS._player, NULL); break; case 9201: if (BF_GLOBALS.getFlag(fCrateOpen)) BF_GLOBALS.setFlag(fLeftTraceIn920); else BF_GLOBALS.clearFlag(fLeftTraceIn920); BF_GLOBALS._sceneManager.changeScene(910); break; case 9204: _object2.remove(); BF_GLOBALS.setFlag(fSawGuns); BF_GLOBALS._player.enableControl(); break; case 9206: { BF_GLOBALS._player.enableControl(); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &_oldCoord, NULL); break; } case 9207: BF_GLOBALS._player.enableControl(); BF_GLOBALS._uiElements.addScore(30); BF_INVENTORY.setObjectScene(15, 1); BF_GLOBALS._bookmark = bEndDayThree; break; default: BF_GLOBALS._player.enableControl(); break; } } void Scene920::process(Event &event) { SceneExt::process(event); if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (BF_INTERFACE_Y - 1))) { if (_exitN.contains(event.mousePos)) { GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_N); BF_GLOBALS._events.setCursor(surface); } else { CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); } } if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) && (BF_GLOBALS._player._visage == 921)) { BF_GLOBALS._player.disableControl(); _sceneMode = 9206; setAction(&_sequenceManager1, this, 9206, &BF_GLOBALS._player, NULL); _oldCoord = event.mousePos; event.handled = true; } } void Scene920::dispatch() { SceneExt::dispatch(); if ((_action == 0) && (BF_GLOBALS._player._position.y < 75)) { BF_GLOBALS._player.disableControl(); BF_GLOBALS._sceneManager.changeScene(910); } } void Scene920::synchronize(Serializer &s) { SceneExt::synchronize(s); s.syncAsSint16LE(_oldCoord.x); s.syncAsSint16LE(_oldCoord.y); } /*-------------------------------------------------------------------------- * Scene 930 - Inside the caravan * *--------------------------------------------------------------------------*/ /* Objects */ bool Scene930::Object1::startAction(CursorType action, Event &event) { // Small box Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; bool result; if ((action == CURSOR_USE) && (!BF_GLOBALS.getFlag(93))) { scene->setAction(&scene->_action2); result = true; } else result = NamedObject::startAction(action, event); return result; } bool Scene930::Object2::startAction(CursorType action, Event &event) { Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; if (action != CURSOR_USE) return NamedObject::startAction(action, event); NamedObject::startAction(action, event); BF_GLOBALS._uiElements.addScore(30); BF_INVENTORY.setObjectScene(54, 1); BF_GLOBALS.setFlag(93); remove(); scene->_box.remove(); return true; } bool Scene930::Object3::startAction(CursorType action, Event &event) { // Boots Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; if (action != CURSOR_USE) return NamedObject::startAction(action, event); if (scene->_v141C == 0) scene->setAction(&scene->_action1); return true; } bool Scene930::Object4::startAction(CursorType action, Event &event) { // Boot window Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_WALK: return true; case CURSOR_LOOK: if (BF_GLOBALS._bookmark >= bFlashBackTwo) { _lookLineNum = 94; return NamedObject::startAction(action, event); } else { BF_GLOBALS._player.disableControl(); NamedObject::startAction(action, event); BF_GLOBALS._bookmark = bFlashBackTwo; scene->_sceneMode = 2; scene->signal(); return true; } break; case CURSOR_USE: if (BF_GLOBALS._bookmark >= bFlashBackTwo) { _lookLineNum = 71; NamedObject::startAction(action, event); scene->subF3D6F(); remove(); } else NamedObject::startAction(action, event); return true; default: return NamedObject::startAction(action, event); break; } } bool Scene930::Object5::startAction(CursorType action, Event &event) { Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_WALK: return true; case CURSOR_USE: if (BF_INVENTORY.getObjectScene(55) == 1) return NamedObject::startAction(action, event); if (scene->_v141A == 0) { animate(ANIM_MODE_4, getFrameCount() - 1, 1, NULL); scene->_v141A = 1; _lookLineNum = 76; _useLineNum = 78; } else { BF_GLOBALS._uiElements.addScore(50); BF_INVENTORY.setObjectScene(55, 1); setFrame2(getFrameCount()); _lookLineNum = 92; _useLineNum = -1; } return true; default: return NamedObject::startAction(action, event); break; } } /* Items */ bool Scene930::Item1::startAction(CursorType action, Event &event) { Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; if ((action == CURSOR_WALK) || (action == CURSOR_USE)) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 1; scene->setAction(&scene->_sequenceManager1, scene, 9301, &BF_GLOBALS._player, NULL); return true; } else return NamedHotspot::startAction(action, event); } /* Actions */ void Scene930::Action1::signal() { Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: setDelay(10); BF_GLOBALS._player.disableControl(); scene->_v141C = 1; break; case 1: { Common::Point pt(50, 142); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, this); break; } case 2: BF_GLOBALS._player.changeAngle(270); setDelay(10); break; case 3: BF_GLOBALS._player.changeZoom(110); BF_GLOBALS._player.setVisage(931); BF_GLOBALS._player.setStrip(1); BF_GLOBALS._player.setFrame(1); BF_GLOBALS._player.animate(ANIM_MODE_4, 4, 1, this); break; case 4: scene->_boots.setFrame(2); BF_GLOBALS._player.animate(ANIM_MODE_5, this); break; case 5: scene->showBootWindow(); if (!BF_GLOBALS.getFlag(72)) { BF_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(72); } SceneItem::display(0, 312); BF_GLOBALS._player.enableControl(); remove(); break; default: break; } } void Scene930::Action2::signal() { Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: setDelay(10); BF_GLOBALS._player.disableControl(); break; case 1: { Common::Point pt(176, 137); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, this); break; } case 2: setDelay(10); break; case 3: SceneItem::display(930, scene->_box._useLineNum, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); scene->subF3C07(); BF_GLOBALS._player.enableControl(); remove(); break; default: break; } } void Scene930::Action3::signal() { Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); BF_GLOBALS._player.animate(ANIM_MODE_4, 4, -1, this); break; case 1: scene->_boots.setFrame(1); BF_GLOBALS._player.animate(ANIM_MODE_6, this); break; case 2: BF_GLOBALS._player.changeZoom(-1); BF_GLOBALS._player.setVisage(368); BF_GLOBALS._player.setStrip(6); BF_GLOBALS._player.setFrame(1); scene->_v141C = 0; remove(); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player.enableControl(); break; default: break; } } void Scene930::postInit(SceneObjectList *OwnerList) { PalettedScene::postInit(); loadScene(930); BF_GLOBALS._sound1.changeSound(85); if (BF_GLOBALS._dayNumber == 0) BF_GLOBALS._dayNumber = 1; setZoomPercents(83, 75, 140, 100); _v141A = 0; _v141C = 0; if (BF_INVENTORY.getObjectScene(54) != 1) { _box.postInit(); _box.setVisage(930); _box.setStrip(1); _box.setPosition(Common::Point(223, 21)); _box.setDetails(930, 66, 67, 68, 1, NULL); } _boots.postInit(); _boots.setVisage(930); _boots.setStrip(2); _boots.setPosition(Common::Point(9, 161)); _boots.fixPriority(120); _boots.setDetails(930, 62, 63, 64, 1, NULL); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setVisage(368); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player.setPosition(Common::Point(170, 92)); BF_GLOBALS._player.fixPriority(80); BF_GLOBALS._player.changeZoom(-1); BF_GLOBALS._player.enableControl(); _item1.setDetails( 1, 930, 0, 1, 2, 1); _item2.setDetails( 2, 930, 4, 5, 6, 1); _item3.setDetails( 3, 930, 8, 9, 10, 1); _item4.setDetails( 4, 930, 12, 13, 14, 1); _item5.setDetails( 5, 930, 16, 17, 18, 1); _item6.setDetails( 20, 930, 20, 21, 22, 1); _item7.setDetails( 6, 930, 23, 24, 25, 1); _item8.setDetails( 7, 930, 26, 27, 28, 1); _item21.setDetails( 8, 930, 89, 90, 91, 1); _item9.setDetails( 9, 930, 29, 30, 31, 1); _item20.setDetails(10, 930, 86, 87, 88, 1); _item10.setDetails(11, 930, 33, 34, 35, 1); _item11.setDetails(12, 930, 37, 38, 39, 1); _item13.setDetails(13, 930, 40, 41, 42, 1); _item14.setDetails(14, 930, 44, 45, 46, 1); _item15.setDetails(15, 930, 48, 49, 50, 1); _item16.setDetails(16, 930, 52, 53, 54, 1); _item17.setDetails(17, 930, 56, 57, 58, 1); _item12.setDetails(18, 930, 59, 60, 61, 1); _item18.setDetails(19, 930, 80, 81, 82, 1); _item19.setDetails(21, 930, 83, 84, 85, 1); if (BF_GLOBALS._sceneManager._previousScene != 935) { BF_GLOBALS._player.disableControl(); _sceneMode = 0; setAction(&_sequenceManager1, this, 9300, &BF_GLOBALS._player, NULL); } else { _v141C = 1; BF_GLOBALS._player.animate(ANIM_MODE_NONE); BF_GLOBALS._player.setPosition(Common::Point(50, 142)); BF_GLOBALS._player.setVisage(931); BF_GLOBALS._player.setStrip(1); BF_GLOBALS._player.setFrame(9); BF_GLOBALS._player.fixPriority(-1); BF_GLOBALS._player.enableControl(); BF_GLOBALS._player.changeZoom(110); _boots.setFrame(2); showBootWindow(); } } void Scene930::signal() { static uint32 v50EC4 = 0; switch (_sceneMode++) { case 1: BF_GLOBALS._sceneManager.changeScene(550); break; case 2: _sceneMode = 3; SceneItem::display(930, 95, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); signal(); break; case 3: _sceneMode = 4; addFader((const byte *)&v50EC4, 5, this); break; case 4: BF_GLOBALS._sceneManager.changeScene(935); break; default: BF_GLOBALS._player.enableControl(); break; } } void Scene930::dispatch() { SceneExt::dispatch(); } void Scene930::showBootWindow() { _bootsWindow.postInit(); _bootsWindow.setVisage(930); _bootsWindow.setStrip(3); _bootsWindow.setFrame2(1); _bootsWindow.fixPriority(260); _bootsWindow.setPosition(Common::Point(147, 128)); _bootsWindow.setDetails(930, 69, 70, 93); } void Scene930::subF3C07() { _object2.postInit(); _object2.setVisage(930); _object2.setStrip(1); _object2.setFrame2(2); _object2.fixPriority(260); _object2.setPosition(Common::Point(147, 128)); _object2.setDetails(930, 73, 74, 75); } void Scene930::subF3D6F() { _object5.postInit(); _object5.setVisage(930); _object5.setStrip(3); if (BF_INVENTORY.getObjectScene(55) == 1) { _object5.setFrame(_object5.getFrameCount()); _object5.setDetails(930, 92, 77, -1); } else if (_v141A == 0) { _object5.setFrame(2); _object5.setDetails(930, 93, 77, -1); } else { _object5.setFrame(_object5.getFrameCount()); _object5.setDetails(930, 76, 77, 78); } _object5.fixPriority(260); _object5.setPosition(Common::Point(147, 128)); } void Scene930::synchronize(Serializer &s) { SceneExt::synchronize(s); s.syncAsSint16LE(_v141A); s.syncAsSint16LE(_v141C); } /*-------------------------------------------------------------------------- * Scene 935 - Hidden in the wardrobe * *--------------------------------------------------------------------------*/ void Scene935::Action1::signal() { Scene935 *scene = (Scene935 *)BF_GLOBALS._sceneManager._scene; static uint32 v50ECC = 0, v50EEA = 0, v50EEE = 0, v50F26 = 0, v50F2A = 0, v50F62 = 0, v50F66 = 0, v50F6A = 0; switch (_actionIndex++) { case 0: scene->addFader((const byte *)&v50ECC, 100, this); break; case 1: scene->_visualSpeaker.setText("Jake! Hide in the closet!"); for (int i = 1; i < 21; i++) scene->sub15E4F((const byte *)&v50EEA, 5 * i, 935, NULL, 0, 255, 249, 255, 1); setDelay(3); break; case 2: scene->addFader((const byte *)&v50EEE, 5, this); break; case 3: scene->_visualSpeaker.removeText(); scene->_visualSpeaker._textPos.y = scene->_sceneBounds.top + 80; scene->_visualSpeaker._color1 = 252; scene->_visualSpeaker._color1 = 251; scene->_visualSpeaker.setText("Jake! Hide in the closet!"); setDelay(3); break; case 4: scene->_visualSpeaker.setText("Jake! Hide in the closet!"); for (int i = 1; i < 21; i++) scene->sub15E4F((const byte *)&v50F26, 5 * i, 935, NULL, 0, 255, 249, 255, 1); setDelay(3); break; case 5: scene->addFader((const byte *)&v50F2A, 5, this); break; case 6: scene->_visualSpeaker.removeText(); scene->_visualSpeaker._textPos.y = scene->_sceneBounds.top + 150; scene->_visualSpeaker._color1 = 250; scene->_visualSpeaker._color1 = 249; scene->_visualSpeaker.setText("Jake! Hide in the closet!"); setDelay(3); break; case 7: scene->_visualSpeaker.setText("Jake! Hide in the closet!"); for (int i = 1; i < 21; i++) scene->sub15E4F((const byte *)&v50F62, 5 * i, 935, NULL, 0, 255, 249, 255, 1); setDelay(3); break; case 8: scene->addFader((const byte *)&v50F66, 5, this); break; case 9: scene->_visualSpeaker.removeText(); setDelay(3); break; case 10: scene->_sceneMode = 1; scene->add2Faders((const byte *)&v50F6A, 5, 935, scene); remove(); break; default: break; } } void Scene935::postInit(SceneObjectList *OwnerList) { PalettedScene::postInit(); loadScene(935); BF_GLOBALS._interfaceY = 200; BF_GLOBALS._player.disableControl(); _visualSpeaker._textMode = ALIGN_CENTER; _visualSpeaker._hideObjects = false; _visualSpeaker._color1 = 254; _visualSpeaker._color2 = 253; _visualSpeaker._textPos.y = _sceneBounds.top + 18; _visualSpeaker._textWidth = 300; _visualSpeaker._textPos.x = _sceneBounds.left + 10; setAction(&_action1); BF_GLOBALS._sound1.fadeSound(67); } void Scene935::remove() { BF_GLOBALS._sound1.fadeOut2(NULL); BF_GLOBALS._scrollFollower = &BF_GLOBALS._player; PalettedScene::remove(); } void Scene935::signal() { static uint32 v50EC8 = 0; switch (_sceneMode) { case 1: _object1.postInit(); if (BF_GLOBALS._sceneManager._previousScene == 810) { BF_GLOBALS._player.disableControl(); _sceneMode = 9352; setAction(&_sequenceManager, this, 9350, &_object1, NULL); } else if (BF_GLOBALS._sceneManager._previousScene == 930) { _object3.postInit(); _object3.setVisage(938); _object3.fixPriority(255); _object3.setPosition(Common::Point(260, -4)); BF_GLOBALS._player.disableControl(); _sceneMode = 0; setAction(&_sequenceManager, this, 9354, &_object1, &_object3, NULL); } else { _sceneMode = 9351; setAction(&_sequenceManager, this, 9350, &_object1, NULL); } break; case 2: BF_GLOBALS._sound1.play(68); _sceneMode = 0; addFader((const byte *)&v50EC8, 5, this); break; case 3: _sceneMode = 2; _object1.animate(ANIM_MODE_6, NULL); signal(); break; case 9351: BF_GLOBALS._player.disableControl(); _sceneMode = 2; setAction(&_sequenceManager, this, 9351, &_object1, NULL); if (BF_GLOBALS._sceneManager._previousScene == 910) _sceneMode = 9353; break; case 9352: BF_GLOBALS._player.disableControl(); _sceneMode = 2; setAction(&_sequenceManager, this, 9352, &_object1, NULL); break; case 9353: _object2.postInit(); BF_GLOBALS._player.disableControl(); _sceneMode = 3; setAction(&_sequenceManager, this, 9353, &_object1, &_object2, NULL); break; default: BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._sceneManager._previousScene); break; } } void Scene935::dispatch() { SceneExt::dispatch(); } /*-------------------------------------------------------------------------- * Scene 940 - ? * *--------------------------------------------------------------------------*/ bool Scene940::Item1::startAction(CursorType action, Event &event) { return true; } void Scene940::Action1::signal() { Scene940 *scene = (Scene940 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex) { case 0: _actionIndex = 2; setDelay(60); break; case 2: _actionIndex = 941; if (BF_GLOBALS.getFlag(fBackupAt340)) scene->_stripManager.start(9408, this); else scene->_stripManager.start(9400, this); break; case 5: setActionIndex(948); setDelay(90); scene->_object2.remove(); scene->_object3.remove(); scene->_object4.remove(); scene->_object5.remove(); scene->_object6.remove(); scene->_object7.remove(); scene->_object8.remove(); scene->_object9.remove(); scene->_object10.remove(); break; case 99: BF_GLOBALS._sound1.play(117); BF_GLOBALS._sceneManager.changeScene(100); remove(); break; case 941: scene->_gameTextSpeaker1._textWidth = 312; _actionIndex = 944; setAction(&scene->_sequenceManager1, this, 941, &BF_GLOBALS._player, NULL); break; case 942: _actionIndex = 955; setAction(&scene->_sequenceManager1, this, 942, &scene->_object2, NULL); break; case 943: _actionIndex = 946; setAction(&scene->_sequenceManager1, this, 943, &scene->_object3, NULL); break; case 944: scene->_object4.setAction(&scene->_sequenceManager2, NULL, 944, &scene->_object4, &scene->_object5); _actionIndex = 945; setDelay(3); break; case 945: scene->_object6.setAction(&scene->_sequenceManager3, NULL, 945, &scene->_object6, &scene->_object10, NULL); _actionIndex = 943; setDelay(3); break; case 946: _actionIndex = 942; setAction(&scene->_sequenceManager1, this, 946, &scene->_object7, &scene->_object8, NULL); break; case 947: _actionIndex = 5; setAction(&scene->_sequenceManager1, this, 947, &scene->_object1, &scene->_object11, &scene->_object12, &scene->_object13, NULL); break; case 948: scene->_gameTextSpeaker1._textPos.x = scene->_sceneBounds.left + 10; scene->_object17.postInit(); scene->_object17.hide(); scene->_object18.postInit(); scene->_object18.hide(); _actionIndex = 960; setAction(&scene->_sequenceManager1, this, 948, &scene->_object11, &scene->_object12, &scene->_object13, &scene->_object1, &scene->_object14, NULL); break; case 949: _actionIndex = 950; setAction(&scene->_sequenceManager1, this, 949, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object12, &scene->_object13, &scene->_object15, NULL); scene->_object11.setAction(&scene->_sequenceManager2, NULL, 952, &scene->_object11, NULL); break; case 950: _actionIndex = 951; setAction(&scene->_sequenceManager1, this, 950, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object13, &scene->_object16, NULL); scene->_object12.setAction(&scene->_sequenceManager3, NULL, 953, &scene->_object12, NULL); break; case 951: scene->_object13.setAction(&scene->_sequenceManager4, NULL, 954, &scene->_object13, NULL); scene->_object11.setAction(&scene->_sequenceManager2, NULL, 952, &scene->_object11, NULL); scene->_stripManager.start(9407, this); setActionIndex(99); break; case 955: scene->_object2.remove(); _actionIndex = 956; setAction(&scene->_sequenceManager1, this, 955, &BF_GLOBALS._player, NULL); break; case 956: _actionIndex = 947; setAction(&scene->_sequenceManager1, this, 956, &scene->_object3, NULL); scene->_object11.postInit(); scene->_object11.setVisage(943); scene->_object11.setStrip(1); scene->_object11.setPosition(Common::Point(-8, 178)); scene->_object12.postInit(); scene->_object12.setVisage(942); scene->_object12.setStrip(1); scene->_object12.setPosition(Common::Point(-41, 181)); scene->_object13.postInit(); scene->_object13.setVisage(944); scene->_object13.setStrip(2); scene->_object13.setPosition(Common::Point(-74, 179)); scene->_object1.postInit(); scene->_object1.setVisage(948); scene->_object1.setStrip(2); scene->_object1.setPosition(Common::Point(-107, 180)); scene->_object14.postInit(); scene->_object14.setVisage(949); scene->_object14.setStrip(1); scene->_object14.setFrame(3); scene->_object14.setPosition(Common::Point(234, 75)); scene->_object15.postInit(); scene->_object15.setVisage(949); scene->_object15.setStrip(1); scene->_object15.setFrame(2); scene->_object15.setPosition(Common::Point(144, 76)); scene->_object16.postInit(); scene->_object16.setVisage(949); scene->_object16.setStrip(1); scene->_object16.setFrame(1); scene->_object16.setPosition(Common::Point(45, 77)); break; case 960: _actionIndex = 949; setAction(&scene->_sequenceManager1, this, 960, &scene->_object11, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object14, NULL); break; default: break; } } void Scene940::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(940); BF_GLOBALS._sound1.play(115); BF_GLOBALS._dayNumber = 6; BF_GLOBALS._interfaceY = 200; BF_GLOBALS._uiElements._active = false; _gameTextSpeaker2._speakerName = "SENTTEXT"; _gameTextSpeaker2._color1 = 104; _gameTextSpeaker2._textMode = ALIGN_CENTER; _stripManager.addSpeaker(&_gameTextSpeaker1); _stripManager.addSpeaker(&_gameTextSpeaker2); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setVisage(941); BF_GLOBALS._player.setStrip(1); BF_GLOBALS._player.setFrame(7); BF_GLOBALS._player.setPosition(Common::Point(563, 80)); BF_GLOBALS._player.disableControl(); _object3.postInit(); _object3.setVisage(944); _object3.setStrip(3); _object3.setFrame(3); _object3.setPosition(Common::Point(626, 78)); _object3.fixPriority(0); _object2.postInit(); _object2.setVisage(944); _object2.setStrip(3); _object2.setFrame(6); _object2.setPosition(Common::Point(378, 136)); _object2.setZoom(80); _object2.fixPriority(0); _object4.postInit(); _object4.setVisage(945); _object4.setStrip(6); _object4.setPosition(Common::Point(361, 70)); _object4.setZoom(80); _object4.fixPriority(0); _object5.postInit(); _object5.setVisage(945); _object5.setStrip(7); _object5.setPosition(Common::Point(366, 39)); _object5.setZoom(80); _object5.fixPriority(3); _object6.postInit(); _object6.setVisage(945); _object6.setStrip(4); _object6.setPosition(Common::Point(432, 70)); _object6.setZoom(65); _object6.fixPriority(0); _object7.postInit(); _object7.setVisage(945); _object7.setStrip(1); _object7.setPosition(Common::Point(423, 131)); _object7.setZoom(65); _object7.fixPriority(0); _object8.postInit(); _object8.setVisage(945); _object8.setStrip(2); _object8.setPosition(Common::Point(420, 99)); _object8.setZoom(65); _object8.fixPriority(3); _object9.postInit(); _object9.setVisage(945); _object9.setStrip(3); _object9.setPosition(Common::Point(458, 65)); _object9.setZoom(55); _object9.fixPriority(0); _object10.postInit(); _object10.setVisage(945); _object10.setStrip(3); _object10.setFrame(2); _object10.setPosition(Common::Point(465, 118)); _object10.setZoom(55); _object10.fixPriority(0); _item1.setBounds(Rect(0, 0, 320, 200)); BF_GLOBALS._sceneItems.push_back(&_item1); _sceneBounds.moveTo(320, 0); _gameTextSpeaker1._textPos.x = _sceneBounds.left + 10; _gameTextSpeaker1._color1 = 16; _gameTextSpeaker1._textWidth = 265; setAction(&_action1); } void Scene940::remove() { // clearScren(); BF_GLOBALS._scrollFollower = &BF_GLOBALS._player; SceneExt::remove(); BF_GLOBALS._uiElements._active = true; } } // End of namespace BlueForce } // End of namespace TsAGE