1 /* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 *
21 */
22
23 #include "tsage/blue_force/blueforce_scenes9.h"
24 #include "tsage/globals.h"
25 #include "tsage/scenes.h"
26 #include "tsage/tsage.h"
27 #include "tsage/staticres.h"
28
29 namespace TsAGE {
30
31 namespace BlueForce {
32
33 /*--------------------------------------------------------------------------
34 * Scene 900 - Outside Warehouse
35 *
36 *--------------------------------------------------------------------------*/
37
startAction(CursorType action,Event & event)38 bool Scene900::Exterior::startAction(CursorType action, Event &event) {
39 if (action == CURSOR_LOOK) {
40 SceneItem::display2(900, 6);
41 return true;
42 } else {
43 return SceneHotspot::startAction(action, event);
44 }
45 }
46
startAction(CursorType action,Event & event)47 bool Scene900::WestExit::startAction(CursorType action, Event &event) {
48 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
49
50 BF_GLOBALS._player.disableControl();
51 scene->_sceneMode = 9001;
52 Common::Point pt(0, 117);
53 PlayerMover *mover = new PlayerMover();
54 BF_GLOBALS._player.addMover(mover, &pt, scene);
55
56 return true;
57 }
58
59 /*--------------------------------------------------------------------------*/
startAction(CursorType action,Event & event)60 bool Scene900::Gate::startAction(CursorType action, Event &event) {
61 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
62
63 switch (action) {
64 case CURSOR_USE:
65 if (BF_GLOBALS._gateStatus == 0) {
66 return NamedObject::startAction(action, event);
67 } else {
68 BF_GLOBALS._player.disableControl();
69 if (BF_GLOBALS._gateStatus == 2) {
70 scene->_sceneMode = 9006;
71 BF_GLOBALS._gateStatus = 1;
72 scene->setAction(&scene->_sequenceManager1, scene, 9006, &BF_GLOBALS._player, this, NULL);
73 } else {
74 BF_GLOBALS._gateStatus = 2;
75 if (scene->_dog._flag == false) {
76 BF_GLOBALS._player.setAction(&scene->_action4);
77 } else {
78 scene->_sceneMode = 9005;
79 scene->setAction(&scene->_sequenceManager1, scene, 9005, &BF_GLOBALS._player, this, NULL);
80 BF_GLOBALS._walkRegions.enableRegion(24);
81 }
82 }
83 return true;
84 }
85 break;
86 case INV_WAREHOUSE_KEYS:
87 if (BF_GLOBALS._gateStatus == 2) {
88 SceneItem::display2(900, 14);
89 } else {
90 if (BF_GLOBALS._gateStatus == 0) {
91 if (!BF_GLOBALS.getFlag(fGotPointsForUnlockGate)) {
92 BF_GLOBALS.setFlag(fGotPointsForUnlockGate);
93 T2_GLOBALS._uiElements.addScore(30);
94 }
95 BF_GLOBALS._gateStatus = 1;
96 } else {
97 if (!BF_GLOBALS.getFlag(fGotPointsForLockGate)) {
98 if (BF_GLOBALS._bookmark == bEndDayThree) {
99 BF_GLOBALS.setFlag(fGotPointsForLockGate);
100 T2_GLOBALS._uiElements.addScore(30);
101 }
102 }
103 BF_GLOBALS._gateStatus = 0;
104 }
105 scene->_sceneMode = 9004;
106 BF_GLOBALS._player.disableControl();
107 scene->setAction(&scene->_sequenceManager1, scene, 9004, &BF_GLOBALS._player, NULL);
108 }
109 return true;
110 default:
111 return NamedObject::startAction(action, event);
112 }
113 }
114
startAction(CursorType action,Event & event)115 bool Scene900::Door::startAction(CursorType action, Event &event) {
116 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
117
118 switch (action) {
119 case CURSOR_USE:
120 if (BF_GLOBALS._gateStatus == 2) {
121 if (_flag) {
122 SceneItem::display2(900, 1);
123 } else {
124 BF_GLOBALS._player.disableControl();
125 BF_GLOBALS._walkRegions.enableRegion(26);
126 scene->_sceneMode = 9007;
127 scene->setAction(&scene->_sequenceManager1, scene, 9007, &BF_GLOBALS._player, &scene->_door, this, NULL);
128 }
129 return true;
130 } else
131 return NamedObject::startAction(action, event);
132 break;
133 case INV_WAREHOUSE_KEYS:
134 if (BF_GLOBALS._gateStatus == 2) {
135 BF_GLOBALS._player.disableControl();
136 scene->_sceneMode = 9012;
137 scene->setAction(&scene->_sequenceManager1, scene, 9012, &BF_GLOBALS._player, &scene->_door, NULL);
138 } else
139 SceneItem::display2(900, 5);
140 return true;
141 default:
142 return NamedObject::startAction(action, event);
143 }
144 }
145
startAction(CursorType action,Event & event)146 bool Scene900::Dog::startAction(CursorType action, Event &event) {
147 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
148
149 switch (action) {
150 case CURSOR_LOOK:
151 SceneItem::display2(900, 8);
152 return true;
153 case CURSOR_USE:
154 SceneItem::display2(900, 9);
155 return true;
156 case INV_HOOK:
157 if (_flag) {
158 BF_GLOBALS._player.disableControl();
159 scene->_sceneMode = 9010;
160 scene->setAction(&scene->_sequenceManager1, scene, 9010, &BF_GLOBALS._player, &scene->_object5, this, NULL);
161 } else
162 SceneItem::display2(900, 23);
163 return true;
164 case INV_FISHING_NET:
165 BF_GLOBALS._player.disableControl();
166 BF_GLOBALS._player.setAction(&scene->_action2);
167 return true;
168 case INV_DOG_WHISTLE:
169 BF_GLOBALS._player.disableControl();
170 BF_GLOBALS._player.setAction(&scene->_action3);
171 return true;
172 default:
173 return NamedObject::startAction(action, event);
174 }
175 }
176
startAction(CursorType action,Event & event)177 bool Scene900::Lyle::startAction(CursorType action, Event &event) {
178 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
179
180 if (action == CURSOR_TALK) {
181 if (!_action) {
182 if (scene->_dog._flag) {
183 // Dog is no longer there
184 if (BF_GLOBALS._gateStatus == 0)
185 scene->_stripManager.start(9004, &BF_GLOBALS._stripProxy);
186 else {
187 if (scene->_door._flag == 1) {
188 if (BF_GLOBALS._gateStatus == 2)
189 scene->_stripManager.start(9005, &BF_GLOBALS._stripProxy);
190 else
191 scene->_stripManager.start(9001, &BF_GLOBALS._stripProxy);
192 } else
193 scene->_stripManager.start(9001, &BF_GLOBALS._stripProxy);
194 }
195 } else {
196 // Dog is there
197 if (scene->_lyleDialogCtr)
198 scene->_stripManager.start(9003, &BF_GLOBALS._stripProxy);
199 else {
200 ++scene->_lyleDialogCtr;
201 scene->_stripManager.start(9002, &BF_GLOBALS._stripProxy);
202 }
203 }
204 }
205 return true;
206 } else
207 return NamedObject::startAction(action, event);
208 }
209
startAction(CursorType action,Event & event)210 bool Scene900::Body::startAction(CursorType action, Event &event) {
211 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
212
213 if (action == CURSOR_USE) {
214 BF_GLOBALS._player.disableControl();
215 scene->_sceneMode = 9016;
216 scene->setAction(&scene->_sequenceManager1, scene, 9016, &BF_GLOBALS._player, NULL);
217 return true;
218 } else
219 return NamedObject::startAction(action, event);
220 }
221
222 /*--------------------------------------------------------------------------*/
signal()223 void Scene900::Action1::signal() {
224 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
225
226 switch (_actionIndex++) {
227 case 0:
228 if (scene->_dog._flag == 0) {
229 scene->_dog.setStrip(3);
230 if ((BF_GLOBALS._randomSource.getRandomNumber(3) == 1) || (BF_GLOBALS._player._position.x > 790) || (scene->_field1976 != 0)) {
231 Common::Point pt(864, 130);
232 NpcMover *mover = new NpcMover();
233 scene->_dog.addMover(mover, &pt, this);
234 } else {
235 _actionIndex = 4;
236 Common::Point pt(775, 107);
237 NpcMover *mover = new NpcMover();
238 scene->_dog.addMover(mover, &pt, this);
239 }
240 }
241 break;
242 case 1:
243 scene->_dog.setPosition(Common::Point(864, 117));
244 scene->_dog.setStrip(7);
245 scene->_dog.setFrame(1);
246 scene->_dog.animate(ANIM_MODE_5, this);
247 if (BF_GLOBALS._randomSource.getRandomNumber(3) == 1)
248 scene->_sound1.play(92);
249 else
250 scene->_sound1.play(44);
251 if ((BF_GLOBALS._player._position.x > 750) || (scene->_field1976 != 0))
252 _actionIndex = 7;
253 break;
254 case 2:
255 scene->_dog.animate(ANIM_MODE_6, this);
256 break;
257 case 3: {
258 scene->_dog.setStrip(3);
259 scene->_dog.setPosition(Common::Point(864, 130));
260 scene->_dog.fixPriority(122);
261 scene->_dog.animate(ANIM_MODE_1, NULL);
262 Common::Point pt(775, 107);
263 NpcMover *mover = new NpcMover();
264 scene->_dog.addMover(mover, &pt, this);
265 break;
266 }
267 case 6:
268 _actionIndex = 0;
269 // fall through
270 case 4:
271 setDelay(30);
272 break;
273 case 5: {
274 scene->_dog.setStrip(4);
275 Common::Point pt(940, 145);
276 NpcMover *mover = new NpcMover();
277 scene->_dog.addMover(mover, &pt, this);
278 break;
279 }
280 case 7:
281 _actionIndex = 7;
282 setDelay(5);
283 if (BF_GLOBALS._player._position.x < 790)
284 _actionIndex = 2;
285 if (scene->_field1976 != 0)
286 _actionIndex = 8;
287 break;
288 case 8:
289 scene->_dog.setStrip(1);
290 scene->_dog.setFrame(7);
291 scene->_dog.animate(ANIM_MODE_6, NULL);
292 break;
293 case 9:
294 scene->_field1976 = 0;
295 scene->_dog._flag = 0;
296 _actionIndex = 7;
297 scene->_dog.setStrip(1);
298 scene->_dog.setFrame(1);
299 scene->_dog.animate(ANIM_MODE_5, this);
300 break;
301 default:
302 break;
303 }
304 }
305
signal()306 void Scene900::Action2::signal() {
307 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
308
309 switch (_actionIndex++) {
310 case 0:
311 scene->_field1976 = 1;
312 if (scene->_dog._action->getActionIndex() != 8)
313 _actionIndex = 0;
314 setDelay(5);
315 break;
316 case 1:
317 scene->_object5.postInit();
318 scene->_object5.setVisage(902);
319 scene->_object5.setStrip(2);
320 scene->_object5.setPosition(Common::Point(-20, -20));
321 scene->_object5._moveDiff.y = 10;
322 setAction(&scene->_sequenceManager1, this, 9009, &BF_GLOBALS._player, &scene->_object5, &scene->_dog, NULL);
323 BF_INVENTORY.setObjectScene(INV_FISHING_NET, 900);
324 break;
325 case 2:
326 BF_GLOBALS._player._strip = 7;
327 if (!BF_GLOBALS.getFlag(fGotPointsForTrapDog)) {
328 BF_GLOBALS.setFlag(fGotPointsForTrapDog);
329 T2_GLOBALS._uiElements.addScore(50);
330 }
331 SceneItem::display2(900, 10);
332 scene->_dog._flag = 1;
333 scene->_dog.fixPriority(130);
334 BF_GLOBALS._player.enableControl();
335 remove();
336 break;
337 default:
338 break;
339 }
340 }
341
signal()342 void Scene900::Action3::signal() {
343 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
344
345 switch (_actionIndex++) {
346 case 0:
347 if ((BF_GLOBALS._player._position.x < 790) && (!BF_GLOBALS._player._mover)) {
348 Common::Point pt(821, 136);
349 PlayerMover *mover = new PlayerMover();
350 BF_GLOBALS._player.addMover(mover, &pt, 0);
351 }
352 if (scene->_dog._action->getActionIndex() != 7) {
353 _actionIndex = 0;
354 }
355 setDelay(5);
356 break;
357 case 1:
358 if (scene->_dog._strip == 3) {
359 _actionIndex = 3;
360 Common::Point pt(775, 107);
361 NpcMover *mover = new NpcMover();
362 scene->_dog.addMover(mover, &pt, this);
363 } else
364 scene->_dog.animate(ANIM_MODE_6, this);
365 break;
366 case 2: {
367 scene->_dog.setStrip(3);
368 scene->_dog.setPosition(Common::Point(864, 130));
369 scene->_dog.fixPriority(122);
370 scene->_dog.animate(ANIM_MODE_1, NULL);
371 Common::Point pt(775, 107);
372 NpcMover *mover = new NpcMover();
373 scene->_dog.addMover(mover, &pt, this);
374 break;
375 }
376 case 3:
377 scene->_dog.remove();
378 scene->_dog._flag = 1;
379 SceneItem::display2(900, 24);
380 if (!BF_GLOBALS.getFlag(fGotPointsForLockWarehouse)) {
381 BF_GLOBALS.setFlag(fGotPointsForLockWarehouse);
382 T2_GLOBALS._uiElements.addScore(10);
383 }
384 BF_GLOBALS._player.enableControl();
385 remove();
386 break;
387 default:
388 break;
389 }
390 }
391
signal()392 void Scene900::Action4::signal() {
393 Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
394
395 switch (_actionIndex++) {
396 case 0:
397 scene->_field1976 = 1;
398 if (scene->_dog._action->getActionIndex() != 8)
399 _actionIndex = 0;
400 setDelay(5);
401 break;
402 case 1:
403 scene->setAction(&scene->_sequenceManager1, this, 9005, &BF_GLOBALS._player, &scene->_gate, NULL);
404 break;
405 case 2:
406 scene->setAction(&scene->_sequenceManager1, this, 9008, &BF_GLOBALS._player, &scene->_dog, NULL);
407 break;
408 case 3:
409 BF_GLOBALS._deathReason = 5;
410 BF_GLOBALS._sceneManager.changeScene(666);
411 remove();
412 break;
413 default:
414 break;
415 }
416 }
417
418 /*--------------------------------------------------------------------------*/
419
Scene900()420 Scene900::Scene900(): PalettedScene() {
421 _lyleDialogCtr = _field1976 = 0;
422 }
423
postInit(SceneObjectList * OwnerList)424 void Scene900::postInit(SceneObjectList *OwnerList) {
425 PalettedScene::postInit(OwnerList);
426 loadScene(900);
427
428 if (BF_GLOBALS._sceneManager._previousScene == 910)
429 BF_GLOBALS._sound1.changeSound(91);
430 _lyleDialogCtr = 0;
431 _field1976 = 0;
432 T2_GLOBALS._uiElements._active = true;
433 BF_GLOBALS.clearFlag(fCanDrawGun);
434 if (BF_GLOBALS._dayNumber == 0) {
435 BF_GLOBALS._dayNumber = 4;
436 BF_INVENTORY.setObjectScene(INV_FISHING_NET, 1);
437 BF_INVENTORY.setObjectScene(INV_HOOK, 1);
438 }
439 _dog._flag = 0;
440 if (BF_GLOBALS._bookmark >= bFinishedWGreen) {
441 _body.postInit();
442 _body.fixPriority(120);
443 _body.setVisage(901);
444 _body.setPosition(Common::Point(159,128));
445 _body.setDetails(900, 15, 16, 17, ANIM_MODE_1, (SceneItem *)NULL);
446 }
447 if (BF_GLOBALS._sceneManager._previousScene == 910) {
448 _sceneBounds.moveTo(639, 0);
449
450 BF_GLOBALS._gateStatus = 2;
451 BF_INVENTORY.setObjectScene(INV_FISHING_NET, 900);
452 _dog._flag = 1;
453 }
454 if (BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 900)
455 _dog._flag = 1;
456
457 _stripManager.addSpeaker(&_gameTextSpeaker);
458 _stripManager.addSpeaker(&_jakeJacketSpeaker);
459 _stripManager.addSpeaker(&_lyleHatSpeaker);
460
461 _westExit.setDetails(Rect(0, 85, 20, 130), 900, -1, -1, -1, 1, 0);
462 BF_GLOBALS._player.postInit();
463
464 _dog.postInit();
465 _dog.setVisage(902);
466 _dog.setPosition(Common::Point(845, 135));
467 _dog.fixPriority(122);
468 _dog.setDetails(900, 8, -1, 9, 1, (SceneItem *)NULL);
469
470 if (_dog._flag == 0) {
471 _dog.animate(ANIM_MODE_1, NULL);
472 _dog.setAction(&_action1);
473 } else {
474 _dog.setAction(&_action1);
475 _dog.fixPriority(130);
476 if (BF_GLOBALS._dayNumber == 4) {
477 _dog.setPosition(Common::Point(879, 120));
478 _dog.setStrip(2);
479 } else {
480 _dog.setPosition(Common::Point(864, 117));
481 _dog.setStrip(6);
482 _dog.setFrame(6);
483 }
484 }
485
486 _gate.postInit();
487 _gate.setVisage(900);
488 _gate.setStrip(2);
489
490 if (BF_GLOBALS._gateStatus == 2)
491 _gate.setPosition(Common::Point(758, 127));
492 else {
493 BF_GLOBALS._walkRegions.disableRegion(24);
494 _gate.setPosition(Common::Point(804, 132));
495 }
496
497 if (BF_GLOBALS._dayNumber == 5)
498 BF_GLOBALS._v4CEC8 = 0;
499
500 if ((BF_GLOBALS._v4CEC8 == 0) && (BF_GLOBALS.getFlag(fWithLyle))) {
501 _object4.postInit();
502 _object4.setVisage(900);
503 _object4.setStrip(3);
504 _object4.fixPriority(1);
505 _object4.setPosition(Common::Point(866, 117));
506 }
507
508 _door.postInit();
509 _door.setVisage(900);
510
511 if (BF_GLOBALS._v4CEC8 == 0)
512 _door.setStrip(4);
513 else
514 _door.setStrip(1);
515
516 _door.setPosition(Common::Point(847, 45));
517 _door._flag = 1;
518
519 if (BF_GLOBALS._sceneManager._previousScene != 910) {
520 BF_GLOBALS._walkRegions.disableRegion(26);
521 BF_GLOBALS._player.disableControl();
522 if (BF_GLOBALS._bookmark == bFinishedWGreen) {
523 _sceneMode = 9013;
524 _lyle.postInit();
525 _lyle._moveDiff.y = 7;
526 _lyle._flags |= OBJFLAG_CHECK_REGION;
527 _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, (SceneItem *)NULL);
528 _lyleHatSpeaker._xp = 210;
529 _jakeJacketSpeaker._xp = 75;
530 setAction(&_sequenceManager1, this, 9013, &BF_GLOBALS._player, &_lyle, NULL);
531 BF_GLOBALS._bookmark = bAmbushed;
532 BF_GLOBALS.setFlag(fWithLyle);
533 } else {
534 if (BF_GLOBALS._bookmark > bFinishedWGreen) {
535 _lyle.postInit();
536 _lyle.setVisage(811);
537 _lyle.setPosition(Common::Point(780, 153));
538 _lyle._moveDiff.y = 7;
539 _lyle._flags |= 0x1000;
540 _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, (SceneItem *)NULL);
541 _lyle.animate(ANIM_MODE_1, NULL);
542 _lyle.setObjectWrapper(new SceneObjectWrapper());
543 }
544
545 _sceneMode = 9000;
546 setAction(&_sequenceManager1, this, 9000, &BF_GLOBALS._player, NULL);
547 }
548 } else {
549 _door._flag = 0;
550 _door.setFrame(_door.getFrameCount());
551 BF_GLOBALS._player.disableControl();
552 _sceneMode = 9002;
553 if (BF_GLOBALS.getFlag(fWithLyle)) {
554 _lyle.postInit();
555 _lyle._flags |= 0x1000;
556 _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, (SceneItem *)NULL);
557 setAction(&_sequenceManager1, this, 9014, &BF_GLOBALS._player, &_door, &_lyle, NULL);
558 } else
559 setAction(&_sequenceManager1, this, 9002, &BF_GLOBALS._player, &_door, NULL);
560 }
561
562 _gate.setDetails(900, 0, -1, 1, 1, (SceneItem *)NULL);
563 _door.setDetails(900, 2, -1, 5, 1, (SceneItem *)NULL);
564 _item2.setDetails(Rect(0, 0, 225, 21), 666, 25, -1, -1, 1, NULL);
565 _item3.setDetails(Rect(37, 21, 324, 50), 666, 26, -1, -1, 1, NULL);
566 _exterior.setDetails(Rect(0, 0, 960, 200), 900, 7, -1, -1, 1, NULL);
567 }
568
signal()569 void Scene900::signal() {
570 static uint32 v50E8B = 0;
571
572 switch (_sceneMode++) {
573 case 1:
574 BF_GLOBALS._sceneManager.changeScene(910);
575 break;
576 case 3:
577 BF_GLOBALS._walkRegions.disableRegion(24);
578 _sceneMode = 9004;
579 setAction(&_sequenceManager1, this, 9006, &BF_GLOBALS._player, &_gate, NULL);
580 break;
581 case 9000:
582 BF_GLOBALS._player.enableControl();
583 break;
584 case 9001:
585 if ((BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 900) || (BF_GLOBALS._gateStatus != 0) ||
586 (_door._flag == 0))
587 BF_GLOBALS.setFlag(fLeftTraceIn900);
588 else
589 BF_GLOBALS.clearFlag(fLeftTraceIn900);
590
591 BF_GLOBALS._sceneManager.changeScene(880);
592 break;
593 case 9002:
594 BF_GLOBALS._walkRegions.disableRegion(26);
595 BF_GLOBALS._player.enableControl();
596 break;
597 case 9004:
598 if (BF_GLOBALS._gateStatus == 0)
599 SceneItem::display2(900, 3);
600 else
601 SceneItem::display2(900, 4);
602 BF_GLOBALS._player.enableControl();
603 break;
604 case 9005:
605 if (_dog._flag == 0)
606 BF_GLOBALS._player.setAction(&_action4);
607 else
608 BF_GLOBALS._player.enableControl();
609 break;
610 case 9006:
611 BF_GLOBALS._walkRegions.disableRegion(24);
612 BF_GLOBALS._player.enableControl();
613 break;
614 case 9007:
615 if (BF_GLOBALS.getFlag(fWithLyle)) {
616 Common::Point pt(862, 119);
617 PlayerMover *mover = new PlayerMover();
618 _lyle.addMover(mover, &pt, NULL);
619 _sceneMode = 1;
620 addFader((const byte *)&v50E8B, 5, this);
621 } else
622 BF_GLOBALS._sceneManager.changeScene(910);
623 break;
624 case 9008:
625 BF_GLOBALS._deathReason = 5;
626 BF_GLOBALS._sceneManager.changeScene(666);
627 break;
628 case 9010:
629 _sound1.play(92);
630 if (BF_GLOBALS._gateStatus == 2) {
631 _sceneMode = 9008;
632 setAction(&_sequenceManager1, this, 9008, &BF_GLOBALS._player, &_dog, NULL);
633 } else {
634 BF_GLOBALS._player._strip = 7;
635 _action1.setActionIndex(9);
636 _dog.signal();
637 if ((!BF_GLOBALS.getFlag(fGotPointsForFreeDog)) && (BF_GLOBALS._bookmark == bEndDayThree)) {
638 BF_GLOBALS.setFlag(fGotPointsForFreeDog);
639 T2_GLOBALS._uiElements.addScore(50);
640 }
641 BF_INVENTORY.setObjectScene(INV_FISHING_NET, 1);
642 SceneItem::display2(900, 11);
643 BF_GLOBALS._player.enableControl();
644 }
645 break;
646 case 9012:
647 if (_door._flag == 0) {
648 SceneItem::display2(900, 12);
649 _door._flag = 1;
650 if ((!BF_GLOBALS.getFlag(fGotPointsForLockWarehouse)) && (BF_GLOBALS._bookmark == bEndDayThree)) {
651 BF_GLOBALS.setFlag(fGotPointsForLockWarehouse);
652 T2_GLOBALS._uiElements.addScore(30);
653 }
654 } else {
655 SceneItem::display2(900, 13);
656 _door._flag = 0;
657 if (!BF_GLOBALS.getFlag(fGotPointsForUnlockWarehouse)) {
658 BF_GLOBALS.setFlag(fGotPointsForUnlockWarehouse);
659 T2_GLOBALS._uiElements.addScore(30);
660 }
661 }
662 BF_GLOBALS._player.enableControl();
663 break;
664 case 9013:
665 _lyleHatSpeaker._xp = 75;
666 _jakeJacketSpeaker._xp = 210;
667 _lyle.setAction(&_sequenceManager2, &_lyle, 9015, &_lyle, NULL);
668 BF_GLOBALS._player.enableControl();
669 break;
670 case 9016:
671 if ((BF_GLOBALS._clip1Bullets == 0) && (BF_GLOBALS._clip2Bullets == 0)) {
672 BF_GLOBALS._clip1Bullets = 8;
673 BF_GLOBALS._clip2Bullets = 8;
674 SceneItem::display2(900, 25);
675 } else if (BF_GLOBALS._clip1Bullets == 0) {
676 BF_GLOBALS._clip1Bullets = 8;
677 SceneItem::display2(900, 26);
678 } else if (BF_GLOBALS._clip2Bullets == 0) {
679 BF_GLOBALS._clip2Bullets = 8;
680 SceneItem::display2(900, 26);
681 } else
682 SceneItem::display2(900, 27);
683
684 BF_GLOBALS._player.enableControl();
685 break;
686 default:
687 break;
688 }
689 }
690
process(Event & event)691 void Scene900::process(Event &event) {
692 SceneExt::process(event);
693
694 if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
695 if (_westExit.contains(event.mousePos)) {
696 GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
697 BF_GLOBALS._events.setCursor(surface);
698 } else {
699 CursorType cursorId = BF_GLOBALS._events.getCursor();
700 BF_GLOBALS._events.setCursor(cursorId);
701 }
702 }
703 }
704
dispatch()705 void Scene900::dispatch() {
706 SceneExt::dispatch();
707
708 // WORKAROUND:: Fix for invalid data in the Blue Force floppy version when opening gate
709 if (_sceneMode == 9006 && (g_vm->getFeatures() & GF_FLOPPY) && BF_GLOBALS._player._endFrame == 8)
710 BF_GLOBALS._player._endFrame = 6;
711
712 if (BF_GLOBALS.getFlag(fWithLyle) && _lyle.isNoMover()) {
713 _lyle.updateAngle(BF_GLOBALS._player._position);
714 }
715
716 if (!_action) {
717 if ((BF_GLOBALS._player._position.x <= 20) && (BF_GLOBALS._player._position.y < 130)) {
718 BF_GLOBALS._player.disableControl();
719 _sceneMode = 9001;
720 setAction(&_sequenceManager1, this, 9001, &BF_GLOBALS._player, NULL);
721 }
722 }
723 }
724
synchronize(Serializer & s)725 void Scene900::synchronize(Serializer &s) {
726 SceneExt::synchronize(s);
727 s.syncAsSint16LE(_lyleDialogCtr);
728 s.syncAsSint16LE(_field1976);
729 }
730
731 /*--------------------------------------------------------------------------
732 * Scene 910 - Inside the warehouse
733 *
734 *--------------------------------------------------------------------------*/
735 /* Actions */
signal()736 void Scene910::Action1::signal() {
737 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
738
739 switch (_actionIndex - 1) {
740 case 0:
741 scene->_vent.setStrip(1);
742 scene->_vent.animate(ANIM_MODE_5, this);
743 break;
744 case 1:
745 if (scene->_vent._strip == 2)
746 scene->_vent.setFrame(4);
747 scene->_vent.setStrip(1);
748 scene->_vent.animate(ANIM_MODE_6, NULL);
749 break;
750 case 2:
751 scene->_vent.setStrip(2);
752 scene->_vent.animate(ANIM_MODE_2, NULL);
753 break;
754 default:
755 break;
756 }
757 }
758
signal()759 void Scene910::Action2::signal() {
760 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
761
762 switch (_actionIndex++) {
763 case 0:
764 scene->_shadow.postInit();
765 scene->_shadow.setVisage(919);
766 scene->_shadow.setPosition(Common::Point(267, 51));
767 scene->_shadow.fixPriority(40);
768 signal();
769 break;
770 case 1:
771 scene->_shadow.hide();
772 setDelay(600);
773 break;
774 case 2:
775 scene->_shadow.setStrip(BF_GLOBALS._randomSource.getRandomNumber(2) + 2);
776 scene->_shadow.setFrame(1);
777 scene->_shadow.show();
778 setDelay(6);
779 break;
780 case 3:
781 _actionIndex = 1;
782 scene->_shadow.setStrip(BF_GLOBALS._randomSource.getRandomNumber(2) + 2);
783 scene->_shadow.animate(ANIM_MODE_5, this);
784 break;
785 default:
786 break;
787 }
788 }
789
790 /* Objects */
791
synchronize(Serializer & s)792 void Scene910::Lyle::synchronize(Serializer &s) {
793 NamedObject::synchronize(s);
794 s.syncAsSint16LE(_field90);
795 }
796
startAction(CursorType action,Event & event)797 bool Scene910::Lyle::startAction(CursorType action, Event &event) {
798 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
799
800 if (action == CURSOR_USE) {
801 if (BF_GLOBALS._nico910State == 0)
802 return NamedObject::startAction(action, event);
803 else
804 return false;
805 } else if (action == CURSOR_TALK) {
806 if ((BF_GLOBALS._hiddenDoorStatus != 0) || (BF_GLOBALS._nico910State != 0)) {
807 scene->_stripManager.start(9100 + _field90, &BF_GLOBALS._stripProxy);
808 if (_field90 < 1)
809 _field90++;
810 return true;
811 } else {
812 BF_GLOBALS._player.disableControl();
813 scene->_sceneMode = 9130;
814 if (BF_GLOBALS.getFlag(gunDrawn))
815 scene->setAction(&scene->_sequenceManager1, scene, 9138, &BF_GLOBALS._player, &scene->_lyle, NULL);
816 else
817 scene->setAction(&scene->_sequenceManager1, scene, 9130, &BF_GLOBALS._player, &scene->_lyle, NULL);
818 return true;
819 }
820 } else {
821 return NamedObject::startAction(action, event);
822 }
823 }
824
startAction(CursorType action,Event & event)825 bool Scene910::Nico::startAction(CursorType action, Event &event) {
826 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
827
828 switch (action) {
829 case CURSOR_USE:
830 BF_GLOBALS._player.disableControl();
831 scene->_sceneSubMode = 6;
832 scene->_sceneMode = 9123;
833 if (BF_GLOBALS._player._visage == 1911)
834 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
835 else
836 scene->signal();
837 return true;
838 break;
839 case CURSOR_TALK:
840 if (BF_GLOBALS._nico910State >= 4)
841 return NamedObject::startAction(action, event);
842
843 if (BF_GLOBALS._nico910Talk < 4)
844 BF_GLOBALS._nico910Talk++;
845
846 if (BF_GLOBALS._nico910Talk == 2) {
847 scene->_sceneMode = 13;
848 scene->_stripManager.start(9105, scene);
849 } else
850 scene->_stripManager.start(9103 + BF_GLOBALS._nico910Talk, &BF_GLOBALS._stripProxy);
851 return true;
852 break;
853 case INV_COLT45:
854 if (BF_GLOBALS._nico910State > 1) {
855 if (BF_GLOBALS._nico910State != 4) {
856 if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())) {
857 if (scene->_field2DE0 == 0) {
858 BF_GLOBALS._player.disableControl();
859 scene->_sceneMode = 9126;
860 scene->setAction(&scene->_sequenceManager1, scene, 9126, &scene->_nico, NULL);
861 return NamedObject::startAction(action, event);
862 } else {
863 scene->_stripManager.start(9117, &BF_GLOBALS._stripProxy);
864 return NamedObject::startAction(action, event);
865 }
866 } else
867 return NamedObject::startAction(action, event);
868 } else {
869 SceneItem::display(910, 90, SET_WIDTH, 312,
870 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
871 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
872 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
873 SET_EXT_FGCOLOR, 13, LIST_END);
874 return true;
875 }
876 } else {
877 if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())) {
878 BF_GLOBALS._player.disableControl();
879 scene->_sceneMode = 9125;
880 scene->setAction(&scene->_sequenceManager1, scene, 9125, &scene->_nico, NULL);
881 }
882 return NamedObject::startAction(action, event);
883 }
884 break;
885 case INV_BADGE:
886 case INV_ID:
887 if (BF_GLOBALS._nico910State >= 4)
888 return NamedObject::startAction(action, event);
889
890 if (BF_GLOBALS._nico910Talk < 4)
891 BF_GLOBALS._nico910Talk++;
892
893 if (BF_GLOBALS._nico910Talk == 2) {
894 scene->_sceneMode = 13;
895 scene->_stripManager.start(9105, scene);
896 } else
897 scene->_stripManager.start(9103 + BF_GLOBALS._nico910Talk, &BF_GLOBALS._stripProxy);
898
899 return true;
900 break;
901 case INV_YELLOW_CORD:
902 if (BF_GLOBALS._nico910State < 4) {
903 BF_GLOBALS._player.disableControl();
904 scene->_yellowCord.fixPriority(121);
905 scene->_sceneSubMode = 10;
906 scene->_sceneMode = 9123;
907 BF_GLOBALS._nico910State = 3;
908 if (BF_GLOBALS._player._visage == 1911)
909 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
910 else
911 scene->signal();
912
913 return true;
914 } else {
915 SceneItem::display(910, 95, SET_WIDTH, 312,
916 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
917 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
918 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
919 SET_EXT_FGCOLOR, 13, LIST_END);
920
921 return true;
922 }
923 break;
924 case INV_HALF_YELLOW_CORD:
925 if (BF_GLOBALS._v4CECC == 1)
926 SceneItem::display(910, 84, SET_WIDTH, 312,
927 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
928 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
929 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
930 SET_EXT_FGCOLOR, 13, LIST_END);
931 else
932 SceneItem::display(910, 82, SET_WIDTH, 312,
933 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
934 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
935 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
936 SET_EXT_FGCOLOR, 13, LIST_END);
937 return true;
938 break;
939 case INV_BLACK_CORD:
940 case INV_HALF_BLACK_CORD:
941 SceneItem::display(910, 83, SET_WIDTH, 312,
942 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
943 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
944 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
945 SET_EXT_FGCOLOR, 13, LIST_END);
946 return true;
947 break;
948 default:
949 return NamedObject::startAction(action, event);
950 break;
951 }
952 }
953
startAction(CursorType action,Event & event)954 bool Scene910::Stuart::startAction(CursorType action, Event &event) {
955 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
956
957 switch (action) {
958 case CURSOR_USE:
959 BF_GLOBALS._player.disableControl();
960 scene->_sceneSubMode = 7;
961 scene->_sceneMode = 9123;
962 if (BF_GLOBALS._player._visage == 1911)
963 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
964 else
965 scene->signal();
966 return true;
967 break;
968 case CURSOR_TALK:
969 if (BF_GLOBALS._stuart910Talk < 3)
970 BF_GLOBALS._stuart910Talk++;
971
972 scene->_stripManager.start(9107 + BF_GLOBALS._stuart910Talk, &BF_GLOBALS._stripProxy);
973 return true;
974 break;
975 case INV_COLT45:
976 if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())){
977 BF_GLOBALS._player.disableControl();
978 if (BF_GLOBALS._stuart910State == 2) {
979 scene->_sceneMode = 9132;
980 scene->setAction(&scene->_sequenceManager1, scene, 9132, &scene->_stuart, NULL);
981 return NamedObject::startAction(action, event);
982 } else {
983 if (scene->_field2DE0 == 0) {
984 scene->_sceneMode = 9132;
985 scene->setAction(&scene->_sequenceManager1, scene, 9132, &scene->_stuart, NULL);
986 } else
987 scene->_stripManager.start(9117, &BF_GLOBALS._stripProxy);
988 return NamedObject::startAction(action, event);
989 }
990 } else
991 return NamedObject::startAction(action, event);
992 break;
993 case INV_YELLOW_CORD:
994 if (BF_GLOBALS._v4CECC == 1) {
995 SceneItem::display(910, 84, SET_WIDTH, 312,
996 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
997 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
998 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
999 SET_EXT_FGCOLOR, 13, LIST_END);
1000 return true;
1001 } else {
1002 BF_GLOBALS._player.disableControl();
1003 if (BF_GLOBALS._nico910State == 4) {
1004 scene->_sceneSubMode = 11;
1005 scene->_sceneMode = 9123;
1006 if (BF_GLOBALS._player._visage == 1911)
1007 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1008 else
1009 scene->signal();
1010 return true;
1011 } else {
1012 scene->_sceneSubMode = 12;
1013 scene->_sceneMode = 9123;
1014 if (BF_GLOBALS._player._visage == 1911)
1015 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1016 else
1017 scene->signal();
1018 return true;
1019 }
1020 }
1021 break;
1022 case INV_HALF_YELLOW_CORD:
1023 if (BF_GLOBALS._v4CECC == 1) {
1024 SceneItem::display(910, 84, SET_WIDTH, 312,
1025 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1026 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1027 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1028 SET_EXT_FGCOLOR, 13, LIST_END);
1029 return true;
1030 } else {
1031 BF_GLOBALS._player.disableControl();
1032 scene->_sceneSubMode = 11;
1033 scene->_sceneMode = 9123;
1034 if (BF_GLOBALS._player._visage == 1911)
1035 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1036 else
1037 scene->signal();
1038 return true;
1039 }
1040 break;
1041 case INV_BLACK_CORD:
1042 case INV_HALF_BLACK_CORD:
1043 SceneItem::display(910, 83, SET_WIDTH, 312,
1044 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1045 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1046 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1047 SET_EXT_FGCOLOR, 13, LIST_END);
1048 return true;
1049 break;
1050 default:
1051 return NamedObject::startAction(action, event);
1052 break;
1053 }
1054 }
1055
startAction(CursorType action,Event & event)1056 bool Scene910::Forbes::startAction(CursorType action, Event &event) {
1057 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1058
1059 if (action == CURSOR_TALK) {
1060 BF_GLOBALS._player.disableControl();
1061 BF_GLOBALS._walkRegions.enableRegion(1);
1062 BF_GLOBALS._walkRegions.enableRegion(16);
1063 scene->_sceneMode = 9140;
1064 scene->setAction(&scene->_sequenceManager1, scene, 9140, &scene->_forbes, &BF_GLOBALS._player, &scene->_lyle, NULL);
1065 return true;
1066 } else
1067 return NamedObject::startAction(action, event);
1068 }
1069
synchronize(Serializer & s)1070 void Scene910::PowerCord::synchronize(Serializer &s) {
1071 NamedObject::synchronize(s);
1072 s.syncAsSint16LE(_field90);
1073 s.syncAsSint16LE(_field92);
1074 }
1075
startAction(CursorType action,Event & event)1076 bool Scene910::PowerCord::startAction(CursorType action, Event &event) {
1077 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1078
1079 // the last check is used in order to replace a check on CURSOR_1000, which is replaced
1080 // directly by its sub-check. All items have an id inferior to 100h.
1081 if ((action == CURSOR_LOOK) || (action == CURSOR_TALK) || (action < CURSOR_WALK)) {
1082 if (_field90 == 1)
1083 return false;
1084 if ((_field92 != 1) || (BF_GLOBALS._hiddenDoorStatus == 0 ))
1085 return NamedObject::startAction(action, event);
1086 return false;
1087 } else if (action == CURSOR_USE) {
1088 if (_field90 == 0) {
1089 if ((BF_GLOBALS._hiddenDoorStatus == 0) || (_field92 != 1)) {
1090 BF_GLOBALS._player.disableControl();
1091 if (_field92 == 1) {
1092 scene->_sceneSubMode = 8;
1093 scene->_sceneMode = 9123;
1094 if (BF_GLOBALS._player._visage == 1911)
1095 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1096 else
1097 scene->signal();
1098 _field90 = 1;
1099 return true;
1100 } else {
1101 scene->_destPos = Common::Point(151, 186);
1102 scene->_sceneSubMode = 4;
1103 scene->_sceneMode = 9123;
1104 if (BF_GLOBALS._player._visage == 1911)
1105 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1106 else
1107 scene->signal();
1108 _field90 = 1;
1109 return true;
1110 }
1111 } else
1112 return false;
1113 } else if (_field90 == 1)
1114 return false;
1115 else
1116 return true;
1117 } else
1118 return NamedObject::startAction(action, event);
1119 }
1120
init(int val)1121 void Scene910::PowerCord::init(int val) {
1122 NamedObject::postInit();
1123
1124 _field92 = val;
1125 _field90 = 0;
1126 }
1127
startAction(CursorType action,Event & event)1128 bool Scene910::BreakerBox::startAction(CursorType action, Event &event) {
1129 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1130
1131 switch (action) {
1132 case CURSOR_LOOK:
1133 if (BF_GLOBALS._v4CEC8 == 0)
1134 SceneItem::display2(910, 7);
1135 else
1136 SceneItem::display2(910, 6);
1137 return true;
1138 break;
1139 case CURSOR_USE:
1140 if (scene->_lyle._position.x == 115) {
1141 SceneItem::display2(910, 62);
1142 return true;
1143 } else if (scene->_sceneMode != 9120) {
1144 if (BF_GLOBALS._nico910State == 1) {
1145 BF_GLOBALS._player.disableControl();
1146 scene->_sceneMode = 9118;
1147 scene->setAction(&scene->_sequenceManager1, scene, 9118, &BF_GLOBALS._player, &scene->_nico, NULL);
1148 return true;
1149 } else {
1150 BF_GLOBALS._player.disableControl();
1151 scene->_sceneMode = 9102;
1152 if (BF_GLOBALS.getFlag(gunDrawn)) {
1153 scene->_sceneSubMode = 1;
1154 scene->_sceneMode = 9123;
1155 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1156 return true;
1157 } else {
1158 scene->setAction(&scene->_sequenceManager1, scene, 9102, &BF_GLOBALS._player, NULL);
1159 return true;
1160 }
1161 }
1162 } else {
1163 SceneItem::display(910, 62, SET_WIDTH, 312,
1164 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1165 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1166 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1167 SET_EXT_FGCOLOR, 13, LIST_END);
1168 return true;
1169 }
1170 break;
1171 default:
1172 return NamedObject::startAction(action, event);
1173 break;
1174 }
1175 }
1176
startAction(CursorType action,Event & event)1177 bool Scene910::FakeWall::startAction(CursorType action, Event &event) {
1178 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1179
1180 if (action == INV_YELLOW_CORD) {
1181 BF_GLOBALS._player.disableControl();
1182 scene->_destPos = Common::Point(285, 114);
1183 scene->_sceneSubMode = 9;
1184 scene->_sceneMode = 9123;
1185 if (BF_GLOBALS._player._visage == 1911)
1186 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1187 else
1188 scene->signal();
1189 return true;
1190 } else
1191 return NamedObject::startAction(action, event);
1192 }
1193
postInit(SceneObjectList * OwnerList)1194 void Scene910::BreakerBoxInset::postInit(SceneObjectList *OwnerList) {
1195 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1196
1197 FocusObject::postInit();
1198 _resNum = 910;
1199 _lookLineNum = 7;
1200 _useLineNum = 8;
1201 BF_GLOBALS._sceneItems.push_back(this);
1202 scene->_breakerButtonCtr = 0;
1203
1204 _object13.setupBreaker(115, 44, 1, BF_GLOBALS._breakerBoxStatusArr[0]);
1205 _object14.setupBreaker(116, 63, 2, BF_GLOBALS._breakerBoxStatusArr[1]);
1206 _object15.setupBreaker(116, 69, 2, BF_GLOBALS._breakerBoxStatusArr[2]);
1207 _object16.setupBreaker(115, 76, 1, BF_GLOBALS._breakerBoxStatusArr[3]);
1208 _object17.setupBreaker(115, 95, 1, BF_GLOBALS._breakerBoxStatusArr[4]);
1209 _object18.setupBreaker(116, 114, 2, BF_GLOBALS._breakerBoxStatusArr[5]);
1210 _object19.setupBreaker(116, 120, 2, BF_GLOBALS._breakerBoxStatusArr[6]);
1211 _object20.setupBreaker(188, 45, 2, BF_GLOBALS._breakerBoxStatusArr[7]);
1212 _object21.setupBreaker(188, 51, 2, BF_GLOBALS._breakerBoxStatusArr[8]);
1213 _object22.setupBreaker(179, 59, 1, BF_GLOBALS._breakerBoxStatusArr[9]);
1214 _object23.setupBreaker(187, 78, 2, BF_GLOBALS._breakerBoxStatusArr[10]);
1215 _object24.setupBreaker(187, 84, 2, BF_GLOBALS._breakerBoxStatusArr[11]);
1216
1217 _object25.setupHiddenSwitch(178, 90, 1, BF_GLOBALS._breakerBoxStatusArr[12]);
1218 _object26.setupHiddenSwitch(178, 108, 2, BF_GLOBALS._breakerBoxStatusArr[13]);
1219 }
1220
remove()1221 void Scene910::BreakerBoxInset::remove() {
1222 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1223
1224 _object13.remove();
1225 _object14.remove();
1226 _object15.remove();
1227 _object16.remove();
1228 _object17.remove();
1229 _object18.remove();
1230 _object19.remove();
1231 _object20.remove();
1232 _object21.remove();
1233 _object22.remove();
1234 _object23.remove();
1235 _object24.remove();
1236 _object25.remove();
1237 _object26.remove();
1238 _object27.remove();
1239 _object28.remove();
1240
1241 if ((BF_GLOBALS._breakerBoxStatusArr[13] < 4) && (scene->_breakerBox._frame > 1))
1242 scene->_breakerBox.animate(ANIM_MODE_6, NULL);
1243
1244 FocusObject::remove();
1245 }
1246
synchronize(Serializer & s)1247 void Scene910::Object13::synchronize(Serializer &s) {
1248 NamedObject::synchronize(s);
1249 s.syncAsSint16LE(_state);
1250 s.syncAsSint16LE(_mode);
1251 }
1252
startAction(CursorType action,Event & event)1253 bool Scene910::Object13::startAction(CursorType action, Event &event) {
1254 static uint32 black = 0;
1255 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1256
1257 int8 xDiff;
1258
1259 if (_mode == 1)
1260 xDiff = 12;
1261 else
1262 xDiff = 7;
1263
1264 switch (action) {
1265 case CURSOR_LOOK:
1266 SceneItem::display(910, 9, SET_WIDTH, 312,
1267 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1268 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1269 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1270 SET_EXT_FGCOLOR, 13, LIST_END);
1271 return true;
1272 case CURSOR_USE:
1273 scene->_sound2.play(101);
1274 if (event.mousePos.x <= _position.x + xDiff) {
1275 if (_mode != 1) {
1276 if (_frame > 6)
1277 setFrame(_frame - 1);
1278 } else {
1279 if (_frame > 1)
1280 setFrame(_frame - 1);
1281 }
1282 } else {
1283 if (_mode == 1) {
1284 if (_frame < 3)
1285 setFrame(_frame + 1);
1286 } else {
1287 if (_frame < 8)
1288 setFrame(_frame + 1);
1289 }
1290 }
1291
1292 if (_mode != 1)
1293 BF_GLOBALS._breakerBoxStatusArr[_state - 1] = (_frame + 251) % 256;
1294 else
1295 BF_GLOBALS._breakerBoxStatusArr[_state - 1] = _frame;
1296
1297 switch (_state) {
1298 case 1:
1299 if (BF_GLOBALS._nico910State < 1) {
1300 if (_frame == 2) {
1301 if (!BF_GLOBALS.getFlag(fGotPointsForClosingDoor)) {
1302 T2_GLOBALS._uiElements.addScore(30);
1303 BF_GLOBALS.setFlag(fGotPointsForClosingDoor);
1304 }
1305 scene->_sceneMode = 0;
1306 if (BF_GLOBALS._dayNumber == 5) {
1307 if (BF_GLOBALS._nico910State == 0) {
1308 scene->_breakerBoxInset.remove();
1309 // _objectList.draw();
1310 BF_GLOBALS._player.disableControl();
1311 scene->_lyle.setVisage(912);
1312 scene->_shadow.remove();
1313 scene->_action2.remove();
1314 scene->_nico.postInit();
1315 scene->_sceneMode = 9129;
1316 scene->setAction(&scene->_sequenceManager1, scene, 9129, &BF_GLOBALS._player, &scene->_nico, NULL);
1317 } else if (BF_GLOBALS._nico910State == 2) {
1318 scene->_breakerBoxInset.remove();
1319 // _objectList.draw();
1320 BF_GLOBALS._player.disableControl();
1321 scene->_lyle.setVisage(911);
1322 scene->_lyle.setStrip(4);
1323 scene->_nico.setVisage(923);
1324 scene->_nico.setStrip(2);
1325 scene->_stuart.setVisage(923);
1326 scene->_stuart.setStrip(3);
1327 scene->_sceneMode = 9134;
1328 scene->setAction(&scene->_sequenceManager1, scene, 9134, &BF_GLOBALS._player, &scene->_nico, &scene->_lyle, NULL);
1329 }
1330 }
1331 BF_GLOBALS._v4CEC8 = 1;
1332 scene->_object5.show();
1333 if (scene->_sceneMode == 0) {
1334 BF_GLOBALS._player.setVisage(911);
1335 scene->_lyle.setVisage(912);
1336 }
1337 scene->transition((const byte *)&black, 25, 910, NULL, 0, 111, 112, 255, 0);
1338 BF_GLOBALS._scenePalette.signalListeners();
1339 // _objectList.draw();
1340 } else {
1341 if (BF_GLOBALS._v4CEC8 == 1) {
1342 if (!BF_GLOBALS.getFlag(fGotPointsForStartGenerator)) {
1343 T2_GLOBALS._uiElements.addScore(30);
1344 BF_GLOBALS.setFlag(fGotPointsForStartGenerator);
1345 }
1346 BF_GLOBALS._player.disableControl();
1347 BF_GLOBALS._v4CEC8 = 0;
1348 scene->_sceneMode = 2;
1349 scene->transition((const byte *)&black, 30, 910, scene, 0, 111, 112, 255, 0);
1350 }
1351 }
1352 } else
1353 SceneItem::display(910, 97, SET_WIDTH, 312,
1354 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1355 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1356 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1357 SET_EXT_FGCOLOR, 13, LIST_END);
1358 return true;
1359 case 4:
1360 if (_frame == 2) {
1361 if (BF_GLOBALS._breakerBoxStatusArr[4] == 2) {
1362 scene->_action1.setActionIndex(2);
1363 scene->_action1.signal();
1364 }
1365 } else if (scene->_action1.getActionIndex() == 2) {
1366 scene->_action1.setActionIndex(1);
1367 scene->_action1.signal();
1368 }
1369 return true;
1370 case 5:
1371 if (_frame == 2) {
1372 if (BF_GLOBALS._breakerBoxStatusArr[3] == 2) {
1373 scene->_action1.setActionIndex(2);
1374 scene->_action1.signal();
1375 }
1376 } else if (scene->_action1.getActionIndex() == 2) {
1377 scene->_action1.setActionIndex(1);
1378 scene->_action1.signal();
1379 }
1380 return true;
1381 case 15:
1382 if ((BF_GLOBALS._v4CECA == 2) && (BF_GLOBALS._breakerBoxStatusArr[17] == 1)) {
1383 if (_frame == 7)
1384 scene->closeHiddenDoor();
1385 else
1386 scene->openHiddenDoor();
1387 }
1388 return true;
1389 default:
1390 return true;
1391 }
1392 default:
1393 return NamedObject::startAction(action, event);
1394 break;
1395 }
1396 }
1397
remove()1398 void Scene910::Object13::remove() {
1399 BF_GLOBALS._sceneItems.remove(this);
1400 SceneObject::remove();
1401 }
1402
setupBreaker(int x,int y,int mode,int8 frameNumber)1403 void Scene910::Object13::setupBreaker(int x, int y, int mode, int8 frameNumber) {
1404 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1405
1406 NamedObject::postInit();
1407 _mode = mode;
1408 scene->_breakerButtonCtr++;
1409 _state = scene->_breakerButtonCtr;
1410 setVisage(910);
1411
1412 if (mode == 1) {
1413 setStrip(8);
1414 setFrame(frameNumber);
1415 } else if (mode == 2) {
1416 setStrip(7);
1417 setFrame(frameNumber + 5);
1418 }
1419
1420 fixPriority(252);
1421 setPosition(Common::Point(x, y));
1422 BF_GLOBALS._sceneItems.push_front(this);
1423 }
1424
Object25()1425 Scene910::Object25::Object25() {
1426 _field90 = _field92 = 0;
1427 }
1428
synchronize(Serializer & s)1429 void Scene910::Object25::synchronize(Serializer &s) {
1430 NamedObject::synchronize(s);
1431 s.syncAsSint16LE(_field90);
1432 s.syncAsSint16LE(_field92);
1433 }
1434
startAction(CursorType action,Event & event)1435 bool Scene910::Object25::startAction(CursorType action, Event &event) {
1436 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1437
1438 switch (action) {
1439 case CURSOR_LOOK:
1440 if (_field92 == 1)
1441 SceneItem::display2(910, 10);
1442 else
1443 SceneItem::display2(910, 11);
1444 return true;
1445 case CURSOR_USE:
1446 _field92 = BF_GLOBALS._breakerBoxStatusArr[_field90 + 11];
1447 switch (_field92 - 1) {
1448 case 0:
1449 _field92 = 2;
1450 setStrip(7);
1451 setFrame(1);
1452 if (_field90 == 1) {
1453 scene->_breakerButtonCtr = 14;
1454 scene->_breakerBoxInset._object27.setupBreaker(182, 92, 2, BF_GLOBALS._breakerBoxStatusArr[14]);
1455 } else {
1456 scene->_breakerButtonCtr = 15;
1457 scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._breakerBoxStatusArr[15]);
1458 }
1459 SceneItem::display2(910, 12);
1460 break;
1461 case 1:
1462 _field92 = 3;
1463 setStrip(6);
1464 setFrame(3);
1465 if (_field90 == 1)
1466 scene->_breakerBoxInset._object27.remove();
1467 else
1468 scene->_breakerBoxInset._object28.remove();
1469 break;
1470 case 2:
1471 _field92 = 2;
1472 setStrip(7);
1473 setFrame(1);
1474 if (_field90 == 1) {
1475 scene->_breakerButtonCtr = 14;
1476 scene->_breakerBoxInset._object27.setupBreaker(182, 96, 2, BF_GLOBALS._breakerBoxStatusArr[14]);
1477 } else {
1478 scene->_breakerButtonCtr = 15;
1479 scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._breakerBoxStatusArr[15]);
1480 }
1481 break;
1482 case 3:
1483 SceneItem::display2(910, 13);
1484 break;
1485 default:
1486 break;
1487 }
1488
1489 BF_GLOBALS._breakerBoxStatusArr[_field90 + 11] = _field92;
1490 return true;
1491 default:
1492 return NamedObject::startAction(action, event);
1493 break;
1494 }
1495 }
1496
remove()1497 void Scene910::Object25::remove() {
1498 BF_GLOBALS._sceneItems.remove(this);
1499 SceneObject::remove();
1500 }
1501
setupHiddenSwitch(int x,int y,int arg8,int argA)1502 void Scene910::Object25::setupHiddenSwitch(int x, int y, int arg8, int argA) {
1503 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1504
1505 NamedObject::postInit();
1506 scene->_breakerButtonCtr++;
1507 _field90 = arg8;
1508 _field92 = argA;
1509 setVisage(910);
1510
1511 if ((_field92 != 2) && (_field92 != 4)) {
1512 setStrip(6);
1513 setFrame(3);
1514 } else {
1515 setStrip(7);
1516 setFrame(1);
1517 if (_field90 == 1) {
1518 scene->_breakerButtonCtr = 14;
1519 scene->_breakerBoxInset._object27.setupBreaker(182, 96, 2, BF_GLOBALS._breakerBoxStatusArr[14]);
1520 } else {
1521 scene->_breakerButtonCtr = 15;
1522 scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._breakerBoxStatusArr[15]);
1523 }
1524 }
1525
1526 fixPriority(251);
1527 setPosition(Common::Point(x, y));
1528 BF_GLOBALS._sceneItems.push_front(this);
1529 }
1530
startAction(CursorType action,Event & event)1531 bool Scene910::BlackPlug::startAction(CursorType action, Event &event) {
1532 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1533
1534 switch (action) {
1535 case CURSOR_LOOK:
1536 SceneItem::display(910, 14, SET_WIDTH, 312,
1537 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1538 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1539 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1540 SET_EXT_FGCOLOR, 13, LIST_END);
1541 return true;
1542 case CURSOR_USE:
1543 switch (_frame - _state - 2) {
1544 case 0:
1545 SceneItem::display(910, 15, SET_WIDTH, 312,
1546 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1547 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1548 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1549 SET_EXT_FGCOLOR, 13, LIST_END);
1550 break;
1551 case 1:
1552 if (BF_GLOBALS._v4CECA == 1) {
1553 BF_GLOBALS._v4CECA = 0;
1554 BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1);
1555 BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 910);
1556 } else if (BF_GLOBALS._v4CECA == 2) {
1557 BF_GLOBALS._v4CECA = 1;
1558 BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _state);
1559 BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1);
1560 scene->_blackCord.setPosition(Common::Point(540, 100));
1561 }
1562 setFrame(_state + 2);
1563 break;
1564 case 2:
1565 if (BF_GLOBALS._v4CECC == 1) {
1566 BF_GLOBALS._v4CECC = 0;
1567 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1);
1568 BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910);
1569 } else if (BF_GLOBALS._v4CECC == 2) {
1570 BF_GLOBALS._v4CECC = 1;
1571 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _state);
1572 BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1);
1573 scene->_yellowCord.setPosition(Common::Point(540, 100));
1574 }
1575 setFrame(_state + 2);
1576 break;
1577 case 3:
1578 if ((_position.x - 12) - (5 * _state) < event.mousePos.x) {
1579 if (BF_GLOBALS._v4CECA == 1) {
1580 BF_GLOBALS._v4CECA = 0;
1581 BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1);
1582 BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 910);
1583 scene->_blackCord.setPosition(Common::Point(540, 100));
1584 } else if (BF_GLOBALS._v4CECA == 2) {
1585 BF_GLOBALS._v4CECA = 1;
1586 BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _state);
1587 BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1);
1588 scene->_blackCord.setPosition(Common::Point(540, 100));
1589 }
1590 setFrame(_state + 4);
1591 } else {
1592 if (BF_GLOBALS._v4CECC == 1) {
1593 BF_GLOBALS._v4CECC = 0;
1594 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1);
1595 BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910);
1596 } else if (BF_GLOBALS._v4CECC == 2) {
1597 BF_GLOBALS._v4CECC = 1;
1598 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _state);
1599 BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1);
1600 scene->_yellowCord.setPosition(Common::Point(540, 100));
1601 }
1602 setFrame(_state + 3);
1603 }
1604 default:
1605 break;
1606 }
1607 BF_GLOBALS._breakerBoxStatusArr[_state + 15] = _frame;
1608 if (_state == 0) {
1609 if (_frame == 2)
1610 BF_GLOBALS._breakerBoxStatusArr[13] = 2;
1611 else
1612 BF_GLOBALS._breakerBoxStatusArr[13] = 4;
1613 }
1614 return true;
1615 case INV_HALF_YELLOW_CORD:
1616 if (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == _state + 2) {
1617 SceneItem::display(910, 85, SET_WIDTH, 312,
1618 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1619 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1620 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1621 SET_EXT_FGCOLOR, 13, LIST_END);
1622 return true;
1623 }
1624 if (BF_GLOBALS._nico910State == 3) {
1625 SceneItem::display(910, 84, SET_WIDTH, 312,
1626 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1627 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1628 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1629 SET_EXT_FGCOLOR, 13, LIST_END);
1630 return true;
1631 }
1632 // fall through
1633 case INV_YELLOW_CORD:
1634 if (BF_GLOBALS._v4CECC == 0) {
1635 BF_GLOBALS._v4CECC = 1;
1636 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, _state + 2);
1637 BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1);
1638 } else if (BF_GLOBALS._v4CECC == 1) {
1639 BF_GLOBALS._v4CECC = 2;
1640 BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, _state + 2);
1641 scene->_yellowCord.setStrip(4);
1642 scene->_yellowCord.setFrame(2);
1643 scene->_yellowCord.setPosition(Common::Point(135, 93));
1644 scene->_yellowCord.fixPriority(50);
1645 }
1646 if (_frame - _state == 2)
1647 setFrame(_state + 4);
1648 else if (_frame - _state == 3)
1649 setFrame(_state + 5);
1650 BF_GLOBALS._breakerBoxStatusArr[_state + 15] = _frame;
1651 if (_state == 0) {
1652 if (_frame == 2)
1653 BF_GLOBALS._breakerBoxStatusArr[13] = 2;
1654 else
1655 BF_GLOBALS._breakerBoxStatusArr[13] = 4;
1656 }
1657 return true;
1658 case INV_HALF_BLACK_CORD:
1659 if (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == _state + 2) {
1660 SceneItem::display(910, 85, SET_WIDTH, 312,
1661 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1662 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1663 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1664 SET_EXT_FGCOLOR, 13, LIST_END);
1665 return true;
1666 }
1667 // fall through
1668 case INV_BLACK_CORD:
1669 if (BF_GLOBALS._v4CECA == 0) {
1670 if (_state == 1) {
1671 if (!BF_GLOBALS.getFlag(fGotPointsForBlackCord)) {
1672 T2_GLOBALS._uiElements.addScore(30);
1673 BF_GLOBALS.setFlag(fGotPointsForBlackCord);
1674 }
1675 } else {
1676 if (!BF_GLOBALS.getFlag(fGotPointsForGeneratorPlug)) {
1677 T2_GLOBALS._uiElements.addScore(30);
1678 BF_GLOBALS.setFlag(fGotPointsForGeneratorPlug);
1679 }
1680 }
1681 BF_GLOBALS._v4CECA = 1;
1682 BF_INVENTORY.setObjectScene(INV_BLACK_CORD, _state + 2);
1683 BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1);
1684 } else if (BF_GLOBALS._v4CECA == 1) {
1685 if (_state == 1) {
1686 if (!BF_GLOBALS.getFlag(fGotPointsForBlackCord)) {
1687 T2_GLOBALS._uiElements.addScore(30);
1688 BF_GLOBALS.setFlag(fGotPointsForBlackCord);
1689 }
1690 } else {
1691 if (!BF_GLOBALS.getFlag(fGotPointsForGeneratorPlug)) {
1692 T2_GLOBALS._uiElements.addScore(30);
1693 BF_GLOBALS.setFlag(fGotPointsForGeneratorPlug);
1694 }
1695 }
1696 BF_GLOBALS._v4CECA = 2;
1697 BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, _state + 2);
1698 scene->_blackCord.setStrip(4);
1699 scene->_blackCord.setFrame(1);
1700 scene->_blackCord.setPosition(Common::Point(135, 93));
1701 scene->_blackCord.fixPriority(50);
1702 scene->_blackCord.show();
1703 scene->_blackCord._field90 = 1;
1704 if (BF_GLOBALS._breakerBoxStatusArr[17] == 1) {
1705 if (BF_GLOBALS._breakerBoxStatusArr[14] == 2)
1706 scene->closeHiddenDoor();
1707 else
1708 scene->openHiddenDoor();
1709 }
1710 }
1711 if (_frame - _state == 2)
1712 setFrame(_state + 3);
1713 else if (_frame - _state == 4)
1714 setFrame(_state + 5);
1715 BF_GLOBALS._breakerBoxStatusArr[_state + 15] = _frame;
1716 if (_state == 0) {
1717 if (_frame == 2)
1718 BF_GLOBALS._breakerBoxStatusArr[13] = 2;
1719 else
1720 BF_GLOBALS._breakerBoxStatusArr[13] = 4;
1721 }
1722 return true;
1723 default:
1724 return NamedObject::startAction(action, event);
1725 }
1726 }
1727
init(int x,int y,int arg8,int8 argA)1728 void Scene910::BlackPlug::init(int x, int y, int arg8, int8 argA) {
1729 NamedObject::postInit();
1730 _state = arg8;
1731 _mode = argA;
1732 setVisage(910);
1733 if (_state == 0)
1734 setStrip(7);
1735 else
1736 setStrip(3);
1737 setFrame(argA);
1738 fixPriority(251);
1739 setPosition(Common::Point(x, y));
1740 BF_GLOBALS._sceneItems.push_front(this);
1741 }
1742
remove()1743 void Scene910::BlackPlug::remove() {
1744 BF_GLOBALS._sceneItems.remove(this);
1745 SceneObject::remove();
1746 }
1747
postInit(SceneObjectList * OwnerList)1748 void Scene910::GeneratorInset::postInit(SceneObjectList *OwnerList) {
1749 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1750
1751 FocusObject::postInit();
1752 _resNum = 910;
1753 _lookLineNum = 99;
1754 _useLineNum = 87;
1755 BF_GLOBALS._sceneItems.push_front(this);
1756
1757 scene->_breakerButtonCtr = 16;
1758 _blackPlug.init(142, 86, 1, BF_GLOBALS._breakerBoxStatusArr[16]);
1759
1760 scene->_breakerButtonCtr = 17;
1761 _powerButton.init(BF_GLOBALS._breakerBoxStatusArr[17]);
1762 }
1763
remove()1764 void Scene910::GeneratorInset::remove() {
1765 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1766
1767 BF_GLOBALS._player.disableControl();
1768 scene->_sceneMode = 12;
1769 BF_GLOBALS._player.animate(ANIM_MODE_6, scene);
1770 _blackPlug.remove();
1771 _powerButton.remove();
1772 FocusObject::remove();
1773 }
1774
startAction(CursorType action,Event & event)1775 bool Scene910::PowerButton::startAction(CursorType action, Event &event) {
1776 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1777
1778 if (action == CURSOR_USE) {
1779 if (_frame == 4) {
1780 scene->_sound1.play(100);
1781 scene->_sound1.holdAt(1);
1782 if (!BF_GLOBALS.getFlag(fGotPointsForFuseBoxPlug)) {
1783 T2_GLOBALS._uiElements.addScore(30);
1784 BF_GLOBALS.setFlag(fGotPointsForFuseBoxPlug);
1785 }
1786 setFrame(5);
1787 _object32.setFrame(7);
1788 if (BF_GLOBALS._v4CECA == 2) {
1789 if (BF_GLOBALS._breakerBoxStatusArr[14] == 2)
1790 scene->closeHiddenDoor();
1791 else
1792 scene->openHiddenDoor();
1793 }
1794 } else {
1795 scene->_sound1.release();
1796 if (BF_GLOBALS._bookmark == bEndDayThree) {
1797 if (!BF_GLOBALS.getFlag(fGotPointsForLightsOff)) {
1798 T2_GLOBALS._uiElements.addScore(30);
1799 BF_GLOBALS.setFlag(fGotPointsForLightsOff);
1800 }
1801 }
1802 setFrame(4);
1803 _object32.setFrame(6);
1804 }
1805 BF_GLOBALS._breakerBoxStatusArr[17] = (_frame + 252) % 256;
1806 return true;
1807 } else
1808 return NamedObject::startAction(action, event);
1809 }
1810
remove()1811 void Scene910::PowerButton::remove() {
1812 _object32.remove();
1813 SceneObject::remove();
1814 }
1815
init(int frame)1816 void Scene910::PowerButton::init(int frame) {
1817 NamedObject::postInit();
1818 setVisage(910);
1819 setStrip(6);
1820 setFrame(frame + 4);
1821 setPosition(Common::Point(159, 83));
1822 fixPriority(251);
1823 _object32.postInit();
1824 _object32.setVisage(910);
1825 _object32.setStrip(6);
1826 _object32.setFrame(6 + frame);
1827 _object32.setPosition(Common::Point(166, 84));
1828 _object32.fixPriority(251);
1829 BF_GLOBALS._sceneItems.push_front(this);
1830 }
1831
startAction(CursorType action,Event & event)1832 bool Scene910::Generator::startAction(CursorType action, Event &event) {
1833 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1834
1835 if (action == CURSOR_USE) {
1836 if (scene->_lyle._position.x == 115)
1837 SceneItem::display(910, 62, SET_WIDTH, 312,
1838 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1839 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1840 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1841 SET_EXT_FGCOLOR, 13, LIST_END);
1842 else if (BF_GLOBALS._nico910State == 1) {
1843 BF_GLOBALS._player.disableControl();
1844 scene->_sceneMode = 9118;
1845 scene->setAction(&scene->_sequenceManager1, scene, 9118, &BF_GLOBALS._player, &scene->_nico, NULL);
1846 } else {
1847 BF_GLOBALS._player.disableControl();
1848 scene->_sceneMode = 9103;
1849 if (BF_GLOBALS.getFlag(gunDrawn)) {
1850 scene->_sceneMode = 9123;
1851 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1852 } else
1853 scene->setAction(&scene->_sequenceManager1, scene, 9103, &BF_GLOBALS._player, NULL);
1854 }
1855 return true;
1856 } else {
1857 return NamedHotspot::startAction(action, event);
1858 }
1859 }
1860
startAction(CursorType action,Event & event)1861 bool Scene910::Item2::startAction(CursorType action, Event &event) {
1862 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1863
1864 if (action == 59) {
1865 BF_GLOBALS._player.disableControl();
1866 scene->_destPos = Common::Point(151, 186);
1867 scene->_sceneSubMode = 5;
1868 scene->_sceneMode = 9123;
1869 if (BF_GLOBALS._player._visage == 1911)
1870 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1871 else
1872 scene->signal();
1873 return true;
1874 } else
1875 return NamedHotspot::startAction(action, event);
1876 }
1877
startAction(CursorType action,Event & event)1878 bool Scene910::Item3::startAction(CursorType action, Event &event) {
1879 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1880
1881 if ((action == CURSOR_TALK) && (BF_GLOBALS._nico910State == 4) && (BF_GLOBALS._stuart910State == 0)) {
1882 BF_GLOBALS._player.disableControl();
1883 scene->_sceneMode = 15;
1884 scene->_stripManager.start(9102, scene);
1885 return true;
1886 } else {
1887 return NamedHotspot::startAction(action, event);
1888 }
1889 }
1890
startAction(CursorType action,Event & event)1891 bool Scene910::Item9::startAction(CursorType action, Event &event) {
1892 if (BF_GLOBALS._hiddenDoorStatus == 0)
1893 return NamedHotspot::startAction(action, event);
1894 else
1895 return false;
1896 }
1897
startAction(CursorType action,Event & event)1898 bool Scene910::Item15::startAction(CursorType action, Event &event) {
1899 if (BF_GLOBALS._v4CEC8 == 0)
1900 return false;
1901
1902 if ((action == CURSOR_LOOK) || (action == CURSOR_USE) || (action == CURSOR_TALK))
1903 return NamedHotspot::startAction(action, event);
1904
1905 if (action >= CURSOR_WALK)
1906 return false;
1907
1908 SceneItem::display(910, 2, SET_WIDTH, 312,
1909 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
1910 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
1911 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
1912 SET_EXT_FGCOLOR, 13, LIST_END);
1913 return true;
1914 }
1915
startAction(CursorType action,Event & event)1916 bool Scene910::Item16::startAction(CursorType action, Event &event) {
1917 Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
1918
1919 if ((BF_GLOBALS._hiddenDoorStatus == 0) || (BF_GLOBALS._nico910State != 0))
1920 return false;
1921
1922 if (BF_GLOBALS._player._visage == 1911) {
1923 BF_GLOBALS._player.disableControl();
1924 scene->_destPos = Common::Point(292, 100);
1925 scene->_sceneSubMode = 0;
1926 scene->_sceneMode = 9123;
1927 scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
1928 } else {
1929 Common::Point pt(292, 100);
1930 PlayerMover *mover = new PlayerMover();
1931 BF_GLOBALS._player.addMover(mover, &pt, NULL);
1932 }
1933
1934 return true;
1935 }
1936
startAction(CursorType action,Event & event)1937 bool Scene910::Item17::startAction(CursorType action, Event &event) {
1938 Common::Point pt(15, 159);
1939 PlayerMover *mover = new PlayerMover();
1940 BF_GLOBALS._player.addMover(mover, &pt, NULL);
1941
1942 return true;
1943 }
1944
remove()1945 void Scene910::remove() {
1946 PalettedScene::remove();
1947 }
1948
synchronize(Serializer & s)1949 void Scene910::synchronize(Serializer &s) {
1950 PalettedScene::synchronize(s);
1951
1952 s.syncAsSint16LE(_sceneSubMode);
1953 s.syncAsSint16LE(_breakerButtonCtr);
1954 s.syncAsSint16LE(_field2DE0);
1955 s.syncAsSint16LE(_field2DE2);
1956 s.syncAsSint16LE(_field2DE4);
1957 s.syncAsSint16LE(_destPos.x);
1958 s.syncAsSint16LE(_destPos.y);
1959 }
1960
postInit(SceneObjectList * OwnerList)1961 void Scene910::postInit(SceneObjectList *OwnerList) {
1962 uint32 unk_50E94 = 0, unk_50E90 = 0;
1963 uint32 unk_50E98 = 0, unk_50E9C = 0;
1964
1965 PalettedScene::postInit(OwnerList);
1966 loadScene(910);
1967
1968 BF_GLOBALS._sound1.changeSound(99);
1969
1970 _stripManager.addSpeaker(&_gameTextSpeaker);
1971 _stripManager.addSpeaker(&_jakeJacketSpeaker);
1972 _stripManager.addSpeaker(&_lyleHatSpeaker);
1973 _stripManager.addSpeaker(&_fbiSpeaker);
1974 _stripManager.addSpeaker(&_nicoSpeaker);
1975 _stripManager.addSpeaker(&_daSpeaker);
1976 BF_GLOBALS._player.postInit();
1977
1978 if (BF_GLOBALS._v4CEC8 == 0)
1979 BF_GLOBALS._player.setVisage(129);
1980 else
1981 BF_GLOBALS._player.setVisage(911);
1982
1983 BF_GLOBALS._player.setPosition(Common::Point(330, 190));
1984 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
1985 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
1986 BF_GLOBALS._player.disableControl();
1987
1988 _vent.postInit();
1989 _vent.setVisage(910);
1990 if ((BF_GLOBALS._breakerBoxStatusArr[3] == 2) && (BF_GLOBALS._breakerBoxStatusArr[4] == 2)) {
1991 _action1.setActionIndex(4);
1992 } else {
1993 _vent.animate(ANIM_MODE_2, NULL);
1994 _vent.setStrip(2);
1995 }
1996 _vent.setPosition(Common::Point(98, 34));
1997 _vent.setAction(&_action1);
1998
1999 _breakerBox.postInit();
2000 _breakerBox.setVisage(910);
2001 _breakerBox.setStrip(5);
2002 _breakerBox.setFrame(1);
2003 _breakerBox.setPosition(Common::Point(91, 66));
2004
2005 _fakeWall.postInit();
2006 _fakeWall.setVisage(910);
2007 _fakeWall.setStrip(8);
2008 _fakeWall.setFrame(4);
2009 _fakeWall.fixPriority(48);
2010
2011 _yellowCord.init(1);
2012 _yellowCord.setVisage(910);
2013 _yellowCord.setStrip(6);
2014 _yellowCord.setFrame(2);
2015 _yellowCord.fixPriority(50);
2016
2017 _blackCord.init(2);
2018 _blackCord.setVisage(910);
2019 _blackCord.setStrip(6);
2020 _blackCord.setFrame(1);
2021 _blackCord.setPosition(Common::Point(114, 149));
2022 _blackCord.fixPriority(246);
2023
2024 if (BF_GLOBALS._dayNumber < 5)
2025 _item17.setDetails(Rect(0, 149, 29, 167), 910, -1, -1, -1, 1, NULL);
2026
2027 if (BF_GLOBALS._nico910State == 0)
2028 _item16.setDetails(Rect(265, 18, 319, 102), 910, -1, -1, -1, 1, NULL);
2029
2030 _breakerBox.setDetails(910, 6, -1, -1, 1, (SceneItem *)NULL);
2031 _item15.setDetails(Rect(0, 0, 320, 170), 910, 0, 1, 2, 1, NULL);
2032 _yellowCord.setDetails(910, 52, 53, -1, 1, (SceneItem *)NULL);
2033 _blackCord.setDetails(910, 54, 55, -1, 1, (SceneItem *)NULL);
2034 _item2.setDetails(3, 910, 22, -1, 24, 1);
2035 _item4.setDetails(1, 910, 16, 17, 18, 1);
2036 _item8.setDetails(4, 910, 25, 26, 27, 1);
2037 _item6.setDetails(Rect(37, 58, 42, 67), 910, 34, 35, 36, 1, NULL);
2038 _item7.setDetails(Rect(114, 53, 135, 87), 910, 37, 38, 39, 1, NULL);
2039 _generator.setDetails(Rect(146, 67, 184, 93), 910, 40, 41, 42, 1, NULL);
2040 _item9.setDetails(Rect(266, 39, 274, 70), 910, 43, 44, 45, 1, NULL);
2041 _item10.setDetails(Rect(276, 27, 288, 83), 910, 46, 47, 48, 1, NULL);
2042 _item11.setDetails(Rect(295, 42, 312, 87), 910, 49, 50, 51, 1, NULL);
2043 _fakeWall.setDetails(910, 28, -1, 30, 1, (SceneItem *)NULL);
2044 _item3.setDetails(7, 910, 59, 60, 61, 1);
2045 _item5.setDetails(2, 910, 19, 20, 21, 1);
2046 _backWall.setDetails(6, 910, 28, 29, 30, 1);
2047 _item13.setDetails(5, 910, 31, 32, 33, 1);
2048 _item14.setDetails(Rect(0, 0, 320, 170), 910, 3, 4, 5, 1, NULL);
2049 if (BF_GLOBALS._dayNumber == 0) {
2050 BF_GLOBALS._dayNumber = 5;
2051 BF_GLOBALS._sceneManager._previousScene = 900;
2052 BF_GLOBALS.setFlag(fWithLyle);
2053 }
2054
2055 if ( (BF_GLOBALS._sceneManager._previousScene == 910)
2056 || (BF_GLOBALS._sceneManager._previousScene == 190)
2057 || (BF_GLOBALS._sceneManager._previousScene == 300)) {
2058 BF_GLOBALS._sceneManager._previousScene = 900;
2059 BF_GLOBALS._nico910State = 0;
2060 BF_GLOBALS._stuart910State = 0;
2061 }
2062
2063 _field2DE0 = 0;
2064 _field2DE2 = 0;
2065 _field2DE4 = 0;
2066 BF_GLOBALS.clearFlag(fCanDrawGun);
2067 _lyle._position.x = 0;
2068
2069 if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._sceneManager._previousScene == 900)){
2070 BF_GLOBALS.setFlag(fCanDrawGun);
2071 BF_GLOBALS._v4CEC8 = 0;
2072 BF_GLOBALS._player.setVisage(129);
2073
2074 _lyle.postInit();
2075 _lyle.setVisage(811);
2076 _lyle.setPosition(Common::Point(-52, 217));
2077 _lyle.animate(ANIM_MODE_1, NULL);
2078 _lyle.setObjectWrapper(new SceneObjectWrapper());
2079 _lyle._field90 = 0;
2080 _lyle.setDetails(910, 69, 70, 71, 5, &_item4);
2081
2082 BF_GLOBALS._breakerBoxStatusArr[0] = 3;
2083 BF_GLOBALS._breakerBoxStatusArr[12] = 2;
2084 BF_GLOBALS._breakerBoxStatusArr[13] = 4;
2085 BF_GLOBALS._breakerBoxStatusArr[14] = 3;
2086 BF_GLOBALS._breakerBoxStatusArr[15] = 3;
2087 BF_GLOBALS._breakerBoxStatusArr[16] = 4;
2088 BF_GLOBALS._breakerBoxStatusArr[17] = 1;
2089 BF_GLOBALS._v4CECA = 2;
2090 BF_GLOBALS._hiddenDoorStatus = 1;
2091 _yellowCord.setPosition(Common::Point(291, -30));
2092 BF_GLOBALS._v4CECC = 0;
2093 }
2094
2095 if (BF_GLOBALS._sceneManager._previousScene == 920) {
2096 BF_GLOBALS.setFlag(fCanDrawGun);
2097 BF_GLOBALS._player.setPosition(Common::Point(276, 119));
2098 BF_GLOBALS._player.setStrip(6);
2099 if (BF_GLOBALS._v4CECC == 0)
2100 _yellowCord.setPosition(Common::Point(291, -30));
2101
2102 if (BF_GLOBALS._dayNumber == 5) {
2103 _nico.postInit();
2104 _nico.setVisage(914);
2105 _nico.setStrip(5);
2106 _nico.setFrame(8);
2107 _nico.setPosition(Common::Point(263, 120));
2108 _nico.setDetails(910, 63, 64, 65, 5, &_item4);
2109
2110 _stuart.postInit();
2111 _stuart.setVisage(918);
2112 _stuart.setStrip(4);
2113 _stuart.setFrame(1);
2114 _stuart.setPosition(Common::Point(291, 127));
2115 _stuart.setDetails(910, 66, 67, 68, 5, &_nico);
2116
2117 _lyle.postInit();
2118 _lyle.setVisage(916);
2119 _lyle.setPosition(Common::Point(155, 113));
2120 _lyle.setStrip(3);
2121 _lyle.setFrame(3);
2122 _lyle._field90 = 1;
2123 _lyle.setDetails(910, 69, 70, 71, 5, &_item4);
2124 }
2125 BF_GLOBALS._player.enableControl();
2126 } else if (BF_GLOBALS._sceneManager._previousScene == 935) {
2127 BF_GLOBALS.setFlag(fCanDrawGun);
2128 BF_GLOBALS._v4CEC8 = 0;
2129 _lyle.postInit();
2130 _lyle.setVisage(916);
2131 _lyle.setPosition(Common::Point(155, 113));
2132 _lyle.setStrip(3);
2133 _lyle.setFrame(3);
2134 _lyle._field90 = 1;
2135 _lyle.setDetails(910, 69, 70 ,71 , 5, &_item4);
2136
2137 BF_GLOBALS._walkRegions.disableRegion(15);
2138 BF_GLOBALS._walkRegions.disableRegion(16);
2139 BF_GLOBALS._walkRegions.disableRegion(14);
2140 BF_GLOBALS._walkRegions.disableRegion(10);
2141 if (BF_GLOBALS.getFlag(gunDrawn)) {
2142 BF_GLOBALS._player.setVisage(1911);
2143 BF_GLOBALS._player.animate(ANIM_MODE_NONE, 0, NULL);
2144 BF_GLOBALS._player.setFrame(7);
2145 }
2146 BF_GLOBALS._player.setPosition(Common::Point(174, 157));
2147 BF_GLOBALS._player._strip = 7;
2148 _nico.postInit();
2149 _nico.setVisage(913);
2150 _nico.setPosition(Common::Point(262, 124));
2151 _nico.setStrip(6);
2152 BF_GLOBALS._nico910Talk = 0;
2153 BF_GLOBALS._nico910State = 1;
2154 _nico.setDetails(910, 63, 64, 67, 5, &_item4);
2155 BF_GLOBALS._v4CECA = 2;
2156 if (BF_GLOBALS._v4CECC == 0)
2157 _yellowCord.setPosition(Common::Point(291, -30));
2158 _sceneMode = 11;
2159 if (BF_GLOBALS._v4CEC8 == 0)
2160 add2Faders((const byte *)&unk_50E94, 2, 913, this);
2161 else
2162 add2Faders((const byte *)&unk_50E90, 2, 911, this);
2163 } else {
2164 BF_GLOBALS.clearFlag(gunDrawn);
2165 BF_GLOBALS._player.disableControl();
2166 }
2167
2168 if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._nico910State == 0)){
2169 _shadow.postInit();
2170 _shadow.setAction(&_action2);
2171 }
2172
2173 if (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 1)
2174 _yellowCord.setPosition(Common::Point(540, 100));
2175
2176 if (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 1)
2177 _blackCord.setPosition(Common::Point(540, 100));
2178
2179 if (BF_GLOBALS._v4CECC == 2) {
2180 _yellowCord.setStrip(4);
2181 _yellowCord.setFrame(2);
2182 _yellowCord.setPosition(Common::Point(135, 93));
2183 _yellowCord.setPriority(50);
2184 _yellowCord._field90 = 1;
2185
2186 _breakerBox.setFrame(3);
2187 }
2188
2189 if (BF_GLOBALS._v4CECA == 2) {
2190 _blackCord.setStrip(4);
2191 _blackCord.setFrame(1);
2192 _blackCord.setPosition(Common::Point(135, 93));
2193 _blackCord.fixPriority(50);
2194 _blackCord._field90 = 1;
2195
2196 _breakerBox.setFrame(3);
2197 }
2198
2199 _object5.postInit();
2200 _object5.setVisage(919);
2201 _object5.setStrip(5);
2202 _object5.setPosition(Common::Point(286, 129));
2203 _object5.fixPriority(1);
2204
2205 if (BF_GLOBALS._v4CEC8 == 0)
2206 _object5.hide();
2207
2208 if (BF_GLOBALS._hiddenDoorStatus == 0) {
2209 _object5.setFrame(1);
2210 _fakeWall.setPosition(Common::Point(292, 107));
2211 if (BF_GLOBALS._v4CECC != 2)
2212 _yellowCord.setPosition(Common::Point(288, 57));
2213 BF_GLOBALS._walkRegions.disableRegion(10);
2214 } else {
2215 _object5.setFrame(6);
2216 _fakeWall.setPosition(Common::Point(295, 20));
2217 _fakeWall.hide();
2218 if (BF_GLOBALS._v4CECC != 2)
2219 _yellowCord.setPosition(Common::Point(291, -30));
2220 BF_GLOBALS._walkRegions.enableRegion(10);
2221 }
2222
2223 if (BF_GLOBALS._breakerBoxStatusArr[17] != 0) {
2224 _sound1.play(100);
2225 _sound1.holdAt(1);
2226 }
2227
2228 if (BF_GLOBALS._sceneManager._previousScene != 935) {
2229 _sceneMode = 11;
2230 if (BF_GLOBALS._v4CEC8 == 0)
2231 add2Faders((const byte *)&unk_50E9C, 10, 910, this);
2232 else
2233 add2Faders((const byte *)&unk_50E98, 10, 911, this);
2234 }
2235 }
2236
signal()2237 void Scene910::signal() {
2238 static uint32 black = 0;
2239
2240 switch (_sceneMode) {
2241 case 2:
2242 _sceneMode = 3;
2243 _timer1.set(60, this);
2244 break;
2245 case 3:
2246 _sceneMode = 4;
2247 transition((const byte *)&black, 35, 910, this, 0, 111, 112, 255, false);
2248 break;
2249 case 4:
2250 _sceneMode = 5;
2251 _timer1.set(30, this);
2252 break;
2253 case 5:
2254 _sceneMode = 6;
2255 transition((const byte *)&black, 40, 910, this, 0, 111, 112, 255, false);
2256 break;
2257 case 6:
2258 _sceneMode = 7;
2259 _timer1.set(60, this);
2260 break;
2261 case 7:
2262 BF_GLOBALS._player.setVisage(129);
2263 _lyle.setVisage(811);
2264 _object5.hide();
2265 _sceneMode = 8;
2266 transition((const byte *)&black, 95, 910, this, 0, 111, 112, 255, false);
2267 break;
2268 case 8:
2269 _sceneMode = 9;
2270 _timer1.set(30, this);
2271 break;
2272 case 9:
2273 _sceneMode = 0;
2274 transition((const byte *)&black, 100, 910, this, 0, 111, 112, 255, false);
2275 BF_GLOBALS._player.enableControl();
2276 break;
2277 case 10:
2278 BF_GLOBALS._player.disableControl();
2279 BF_GLOBALS._sceneManager.changeScene(935);
2280 break;
2281 case 11:
2282 if (BF_GLOBALS._sceneManager._previousScene == 900) {
2283 if (BF_GLOBALS._v4CEC8 != 0)
2284 transition((const byte *)&black, 25, 910, NULL, 0, 111, 112, 255, false);
2285 if (BF_GLOBALS.getFlag(fWithLyle)) {
2286 NpcMover *mover = new NpcMover();
2287 Common::Point destPos(22, 157);
2288 _lyle.addMover(mover, &destPos, NULL);
2289 }
2290
2291 _sceneMode = 9100;
2292 setAction(&_sequenceManager1, this, 9100, &BF_GLOBALS._player, NULL);
2293 } else if (BF_GLOBALS._sceneManager._previousScene == 935) {
2294 _sceneMode = 9146;
2295 _stripManager.start(9103, this);
2296 }
2297 break;
2298 case 12:
2299 BF_GLOBALS._player.setVisage(129);
2300 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
2301 BF_GLOBALS._player.setStrip(7);
2302 BF_GLOBALS._player.enableControl();
2303 break;
2304 case 13:
2305 BF_GLOBALS._player.disableControl();
2306 BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 9117, &_nico, NULL);
2307 BF_GLOBALS._nico910State = 2;
2308 // fall through
2309 case 15:
2310 _stuart.postInit();
2311 _stuart.setDetails(910, 66, 67, 68, 5, &_nico);
2312 BF_GLOBALS._stuart910Talk = 0;
2313 _sceneMode = 9121;
2314 setAction(&_sequenceManager1, this, 9121, &_stuart, NULL);
2315 break;
2316 case 14:
2317 BF_GLOBALS._sceneManager.changeScene(940);
2318 break;
2319 case 16:
2320 _lyle._field90 = 1;
2321 _sceneMode = 10;
2322 addFader((const byte *)&black, 2, this);
2323 BF_GLOBALS._nico910State = 1;
2324 BF_GLOBALS._walkRegions.disableRegion(16);
2325 BF_GLOBALS._walkRegions.disableRegion(14);
2326 BF_GLOBALS._sceneItems.remove(&_item16);
2327 break;
2328 case 17:
2329 BF_GLOBALS._player._strip = 7;
2330 BF_GLOBALS._player._frame = 1;
2331 if (_field2DE2 == 0) {
2332 _field2DE2 = 1;
2333 if (BF_GLOBALS._nico910State == 4) {
2334 _sceneMode = 9149;
2335 setAction(&_sequenceManager1, this, 9149, &BF_GLOBALS._player, NULL);
2336 } else {
2337 _sceneMode = 9141;
2338 setAction(&_sequenceManager1, this, 9141, &BF_GLOBALS._player, &_nico, NULL);
2339 }
2340 } else {
2341 SceneItem::display(910, 91, SET_WIDTH, 312,
2342 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2343 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2344 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2345 SET_EXT_FGCOLOR, 13, LIST_END);
2346 BF_GLOBALS._player.enableControl();
2347 }
2348 break;
2349 case 18:
2350 BF_GLOBALS._player._strip = 7;
2351 BF_GLOBALS._player._frame = 1;
2352 if (BF_GLOBALS._stuart910State == 3) {
2353 if (_field2DE4 == 0) {
2354 _field2DE4 = 1;
2355 _sceneMode = 9142;
2356 setAction(&_sequenceManager1, this, 9142, &BF_GLOBALS._player, &_stuart, NULL);
2357 } else {
2358 SceneItem::display(910, 92, SET_WIDTH, 312,
2359 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2360 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2361 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2362 SET_EXT_FGCOLOR, 13, LIST_END);
2363 BF_GLOBALS._player.enableControl();
2364 }
2365 } else {
2366 SceneItem::display(910, 94, SET_WIDTH, 312,
2367 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2368 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2369 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2370 SET_EXT_FGCOLOR, 13, LIST_END);
2371 BF_GLOBALS._player.enableControl();
2372 }
2373 break;
2374 case 19:
2375 BF_GLOBALS._deathReason = 14;
2376 BF_GLOBALS._sceneManager.changeScene(666);
2377 break;
2378 case 20:
2379 BF_GLOBALS._player.enableControl();
2380 break;
2381 case 9100:
2382 if (BF_GLOBALS._dayNumber == 5)
2383 BF_GLOBALS._walkRegions.disableRegion(1);
2384 BF_GLOBALS._player.enableControl();
2385 break;
2386 case 9101:
2387 if ((BF_GLOBALS._hiddenDoorStatus == 0) && (BF_GLOBALS._v4CEC8 != 0) && (BF_GLOBALS._breakerBoxStatusArr[17] == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910) && (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 910))
2388 BF_GLOBALS.clearFlag(fGotPointsForSearchingDA);
2389 else
2390 BF_GLOBALS.setFlag(fGotPointsForSearchingDA);
2391 BF_GLOBALS._sceneManager.changeScene(900);
2392 break;
2393 case 9102:
2394 if ((BF_GLOBALS._breakerBoxStatusArr[13] < 4) && (_breakerBox._frame == 1))
2395 _breakerBox.animate(ANIM_MODE_5, NULL);
2396
2397 BF_GLOBALS._player.enableControl();
2398 _breakerBoxInset.postInit();
2399 _breakerBoxInset.setVisage(910);
2400 _breakerBoxInset.setStrip(3);
2401 _breakerBoxInset.setFrame(1);
2402 _breakerBoxInset.setPosition(Common::Point(160, 130));
2403 _breakerBoxInset.fixPriority(250);
2404 break;
2405 case 9103:
2406 BF_GLOBALS._player.enableControl();
2407 _generatorInset.postInit();
2408 _generatorInset.setVisage(910);
2409 _generatorInset.setStrip(3);
2410 _generatorInset.setFrame(2);
2411 _generatorInset.setPosition(Common::Point(160, 130));
2412 _generatorInset.fixPriority(250);
2413 break;
2414 case 9110:
2415 if (!BF_GLOBALS.getFlag(fGotPointsForCrate)) {
2416 T2_GLOBALS._uiElements.addScore(30);
2417 BF_GLOBALS.setFlag(fGotPointsForCrate);
2418 }
2419 BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1);
2420 _blackCord.setPosition(Common::Point(540, 100));
2421 BF_GLOBALS._player.enableControl();
2422 break;
2423 case 9111:
2424 if ((BF_GLOBALS._bookmark == bEndDayThree) && (!BF_GLOBALS.getFlag(fGotPointsForGeneratorOff))) {
2425 T2_GLOBALS._uiElements.addScore(30);
2426 BF_GLOBALS.setFlag(fGotPointsForGeneratorOff);
2427 }
2428 BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 910);
2429 _blackCord.setStrip(6);
2430 _blackCord.setFrame(1);
2431 _blackCord.setPosition(Common::Point(114, 149));
2432 _blackCord.fixPriority(249);
2433 BF_GLOBALS._v4CECA = 0;
2434 _blackCord._field90 = 0;
2435 BF_GLOBALS._player.enableControl();
2436 break;
2437 case 9112:
2438 BF_GLOBALS._player._strip = 4;
2439 BF_GLOBALS._player._frame = 1;
2440 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1);
2441 _yellowCord.setPosition(Common::Point(540, 100));
2442 BF_GLOBALS._player.enableControl();
2443 break;
2444 case 9113:
2445 BF_GLOBALS._player._strip = 4;
2446 BF_GLOBALS._player._frame = 1;
2447 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 910);
2448 _yellowCord.setStrip(6);
2449 _yellowCord.setFrame(2);
2450 _yellowCord.setPosition(Common::Point(_fakeWall._position.x - 4, _fakeWall._position.y - 50));
2451 _yellowCord.fixPriority(50);
2452 BF_GLOBALS._v4CECC = 0;
2453 _yellowCord._field90 = 0;
2454 _yellowCord.show();
2455 BF_GLOBALS._player.enableControl();
2456 break;
2457 case 9114:
2458 _fakeWall.hide();
2459 if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._nico910State == 0)) {
2460 BF_GLOBALS._player.disableControl();
2461 _nico.postInit();
2462 _nico.setDetails(910, 63, 64, 65, 5, &_item4);
2463 BF_GLOBALS._nico910Talk = 0;
2464 _shadow.postInit();
2465 _action2.remove();
2466 _sceneMode = 9116;
2467 setAction(&_sequenceManager1, this, 9116, &_nico, NULL);
2468 } else {
2469 BF_GLOBALS._player.enableControl();
2470 }
2471 break;
2472 case 9115:
2473 BF_GLOBALS._player.enableControl();
2474 break;
2475 case 9116:
2476 BF_GLOBALS._player.disableControl();
2477 _sceneMode = 16;
2478 _stripManager.start(9119, this);
2479 break;
2480 case 9118:
2481 // No break on purpose
2482 case 9137:
2483 BF_GLOBALS._deathReason = 16;
2484 BF_GLOBALS._sceneManager.changeScene(666);
2485 break;
2486 case 9119:
2487 if (!BF_GLOBALS.getFlag(fGotPointsForCordOnForklift)) {
2488 T2_GLOBALS._uiElements.addScore(30);
2489 BF_GLOBALS.setFlag(fGotPointsForCordOnForklift);
2490 }
2491 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 0);
2492 BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1);
2493 BF_GLOBALS._player.enableControl();
2494 break;
2495 case 9120:
2496 BF_GLOBALS._walkRegions.disableRegion(7);
2497 BF_GLOBALS._player.enableControl();
2498 break;
2499 case 9121:
2500 _item3.setDetails(7, 910, 96, 60, 61, 3);
2501 BF_GLOBALS._stuart910State = 2;
2502 if (BF_GLOBALS._nico910State == 4) {
2503 _sceneMode = 20;
2504 _stripManager.start(9115, this);
2505 } else {
2506 BF_GLOBALS._player.enableControl();
2507 }
2508 break;
2509 case 9123:
2510 BF_GLOBALS.clearFlag(gunDrawn);
2511 switch (_sceneSubMode - 1) {
2512 case 0:
2513 _sceneMode = 9102;
2514 setAction(&_sequenceManager1, this, 9102, &BF_GLOBALS._player, NULL);
2515 break;
2516 case 1:
2517 _sceneMode = 9103;
2518 setAction(&_sequenceManager1, this, 9103, &BF_GLOBALS._player, NULL);
2519 break;
2520 case 2:
2521 _sceneMode = 9143;
2522 setAction(&_sequenceManager1, this, 9143, &BF_GLOBALS._player, NULL);
2523 break;
2524 case 3:
2525 _sceneMode = 9110;
2526 setAction(&_sequenceManager1, this, 9110, &BF_GLOBALS._player, &_blackCord, NULL);
2527 break;
2528 case 4:
2529 _sceneMode = 9111;
2530 setAction(&_sequenceManager1, this, 9111, &BF_GLOBALS._player, &_blackCord, NULL);
2531 break;
2532 case 5:
2533 switch (BF_GLOBALS._nico910State - 1) {
2534 case 0:
2535 _sceneMode = 9118;
2536 setAction(&_sequenceManager1, this, 9118, &BF_GLOBALS._player, &_nico, NULL);
2537 break;
2538 case 1:
2539 _sceneMode = 9148;
2540 setAction(&_sequenceManager1, this, 9148, &BF_GLOBALS._player, &_nico, NULL);
2541 break;
2542 case 2:
2543 // No break on purpose
2544 case 3: {
2545 _sceneMode = 17;
2546 PlayerMover *mover = new PlayerMover();
2547 Common::Point destPos(232, 138);
2548 BF_GLOBALS._player.addMover(mover, &destPos, this);
2549 }
2550 default:
2551 break;
2552 }
2553 break;
2554 case 6: {
2555 _sceneMode = 18;
2556 PlayerMover *mover = new PlayerMover();
2557 Common::Point destPos(248, 137);
2558 BF_GLOBALS._player.addMover(mover, &destPos, this);
2559 break;
2560 }
2561 case 7: {
2562 _sceneMode = 9112;
2563 PlayerMover *mover = new PlayerMover();
2564 Common::Point destPos(285, 114);
2565 BF_GLOBALS._player.addMover(mover, &destPos, this);
2566 break;
2567 }
2568 case 8: {
2569 _sceneMode = 9113;
2570 PlayerMover *mover = new PlayerMover();
2571 Common::Point destPos(285, 114);
2572 BF_GLOBALS._player.addMover(mover, &destPos, this);
2573 break;
2574 }
2575 case 9:
2576 _sceneMode = 9119;
2577 setAction(&_sequenceManager1, this, 9119, &BF_GLOBALS._player, &_nico, &_yellowCord, NULL);
2578 break;
2579 case 10:
2580 _yellowCord.fixPriority(127);
2581 if (_yellowCord._position.x != 267)
2582 _yellowCord.hide();
2583 _sceneMode = 9136;
2584 setAction(&_sequenceManager1, this, 9136, &BF_GLOBALS._player, &_stuart, &_yellowCord, NULL);
2585 BF_GLOBALS._stuart910State = 3;
2586 break;
2587 case 11:
2588 _sceneMode = 9137;
2589 setAction(&_sequenceManager1, this, 9137, &BF_GLOBALS._player, &_nico, NULL);
2590 break;
2591 default:
2592 BF_GLOBALS._player.enableControl();
2593 PlayerMover *mover = new PlayerMover();
2594 BF_GLOBALS._player.addMover(mover, &_destPos, NULL);
2595 break;
2596 }
2597 break;
2598 case 9124:
2599 BF_GLOBALS._player.enableControl();
2600 BF_GLOBALS.setFlag(gunDrawn);
2601 break;
2602 case 9125:
2603 BF_GLOBALS.setFlag(fBackupAt340);
2604 BF_GLOBALS._nico910State = 4;
2605 _stuart.postInit();
2606 _nico.setDetails(910, 72, 73, 74, 3, (SceneItem *)NULL);
2607 _stuart.setDetails(910, 66, 67, 68, 5, &_nico);
2608 BF_GLOBALS._stuart910Talk = 0;
2609 _sceneMode = 9121;
2610 setAction(&_sequenceManager1, this, 9121, &_stuart, NULL);
2611 break;
2612 case 9126:
2613 _sceneMode = 19;
2614 if (BF_GLOBALS._stuart910State == 0)
2615 signal();
2616 else
2617 _stripManager.start(9115, this);
2618 break;
2619 case 9129:
2620 // No break on purpose
2621 case 9134:
2622 BF_GLOBALS._deathReason = 17;
2623 BF_GLOBALS._sceneManager.changeScene(666);
2624 break;
2625 case 9130:
2626 _lyle.setAction(&_sequenceManager2, NULL, 9133, &_lyle, NULL);
2627 BF_GLOBALS._breakerBoxStatusArr[14] = 3;
2628 openHiddenDoor();
2629 BF_GLOBALS._walkRegions.disableRegion(15);
2630 break;
2631 case 9132:
2632 BF_GLOBALS._player.enableControl();
2633 BF_GLOBALS._stuart910State = 4;
2634 BF_GLOBALS._deathReason = 13;
2635 BF_GLOBALS._sceneManager.changeScene(666);
2636 break;
2637 case 9135:
2638 BF_GLOBALS._deathReason = 15;
2639 BF_GLOBALS._sceneManager.changeScene(666);
2640 break;
2641 case 9136:
2642 if (!BF_GLOBALS.getFlag(fGotPointsForCuffingNico)) {
2643 T2_GLOBALS._uiElements.addScore(30);
2644 BF_GLOBALS.setFlag(fGotPointsForCuffingNico);
2645 }
2646 _lyle.setAction(&_sequenceManager2, NULL, 9131, &_lyle, NULL);
2647 BF_GLOBALS._walkRegions.enableRegion(16);
2648 if (BF_GLOBALS._nico910State == 4)
2649 BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 0);
2650 else
2651 BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910);
2652 _forbes.postInit();
2653 _forbes.setDetails(910, 86, 87, 88, 4, &_item8);
2654 _sceneMode = 9139;
2655 setAction(&_sequenceManager1, this, 9139, &_forbes, &BF_GLOBALS._player, NULL);
2656 break;
2657 case 9139:
2658 BF_GLOBALS._walkRegions.disableRegion(4);
2659 _field2DE0 = 1;
2660 BF_GLOBALS._player.enableControl();
2661 break;
2662 case 9140:
2663 _sceneMode = 14;
2664 addFader((const byte *)&black, 2, this);
2665 break;
2666 case 9141:
2667 BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
2668 if (!BF_GLOBALS.getFlag(fGotPointsForCuffingDA)) {
2669 T2_GLOBALS._uiElements.addScore(30);
2670 BF_GLOBALS.setFlag(fGotPointsForCuffingDA);
2671 }
2672 BF_GLOBALS._player.enableControl();
2673 break;
2674 case 9142:
2675 BF_GLOBALS._player.enableControl();
2676 if (!BF_GLOBALS.getFlag(fGotPointsForSearchingNico)) {
2677 T2_GLOBALS._uiElements.addScore(30);
2678 BF_GLOBALS.setFlag(fGotPointsForSearchingNico);
2679 }
2680 break;
2681 case 9143:
2682 if (BF_GLOBALS._nico910State == 0) {
2683 BF_GLOBALS._sceneManager.changeScene(920);
2684 } else {
2685 SceneItem::display(910, 89, SET_WIDTH, 312,
2686 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2687 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2688 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2689 SET_EXT_FGCOLOR, 13, LIST_END);
2690 _sceneMode = 9144;
2691 setAction(&_sequenceManager1, this, 9144, &BF_GLOBALS._player, NULL);
2692 }
2693 break;
2694 case 9144:
2695 // No break on purpose
2696 case 9146:
2697 BF_GLOBALS._player.enableControl();
2698 break;
2699 case 9148:
2700 BF_GLOBALS._deathReason = 23;
2701 BF_GLOBALS._sceneManager.changeScene(666);
2702 break;
2703 case 9149:
2704 SceneItem::display(910, 74, SET_WIDTH, 312,
2705 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2706 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2707 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2708 SET_EXT_FGCOLOR, 13, LIST_END);
2709 BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
2710 BF_GLOBALS._player.enableControl();
2711 BF_GLOBALS._player.setVisage(129);
2712 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
2713 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
2714 BF_GLOBALS._player._strip = 7;
2715 BF_GLOBALS._player._frame = 1;
2716 break;
2717 default:
2718 break;
2719 }
2720 }
2721
process(Event & event)2722 void Scene910::process(Event &event) {
2723 SceneExt::process(event);
2724 if ((!BF_GLOBALS._player._enabled) || (event.mousePos.y >= 167))
2725 return;
2726
2727 if (!_focusObject) {
2728 if (_item17._bounds.contains(event.mousePos)) {
2729 GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
2730 BF_GLOBALS._events.setCursor(surface);
2731 } else if ((BF_GLOBALS._hiddenDoorStatus == 0) || (BF_GLOBALS._nico910State != 0)) {
2732 CursorType cursorId = BF_GLOBALS._events.getCursor();
2733 BF_GLOBALS._events.setCursor(cursorId);
2734 } else if (!_item16._bounds.contains(event.mousePos)) {
2735 CursorType cursorId = BF_GLOBALS._events.getCursor();
2736 BF_GLOBALS._events.setCursor(cursorId);
2737 } else {
2738 GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NW);
2739 BF_GLOBALS._events.setCursor(surface);
2740 }
2741 }
2742
2743 if (event.eventType != EVENT_BUTTON_DOWN)
2744 return;
2745
2746 switch (BF_GLOBALS._events.getCursor()) {
2747 case INV_COLT45:
2748 if (!BF_GLOBALS._player._bounds.contains(event.mousePos))
2749 break;
2750 if (BF_GLOBALS.getFlag(gunDrawn)) {
2751 BF_GLOBALS._player.disableControl();
2752 _destPos = BF_GLOBALS._player._position;
2753 _sceneMode = 9123;
2754 setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
2755 event.handled = true;
2756 } else if (BF_GLOBALS._nico910State <= 1) {
2757 if (BF_GLOBALS.getFlag(fCanDrawGun)) {
2758 BF_GLOBALS._player.addMover(NULL);
2759 BF_GLOBALS._player.disableControl();
2760 _sceneMode = 9124;
2761 setAction(&_sequenceManager1, this, 9124, &BF_GLOBALS._player, NULL);
2762 } else
2763 SceneItem::display(1, 4, SET_WIDTH, 312,
2764 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2765 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2766 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2767 SET_EXT_FGCOLOR, 13, LIST_END);
2768 } else
2769 SceneItem::display(910, 81, SET_WIDTH, 312,
2770 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2771 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2772 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2773 SET_EXT_FGCOLOR, 13, LIST_END);
2774 event.handled = true;
2775 break;
2776 case CURSOR_WALK:
2777 if (BF_GLOBALS._nico910State == 1) {
2778 BF_GLOBALS._player.disableControl();
2779 if (BF_GLOBALS._player._visage == 1911) {
2780 BF_GLOBALS._player.disableControl();
2781 _destPos = event.mousePos;
2782 _sceneSubMode = 0;
2783 _sceneMode = 9123;
2784 setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
2785 } else {
2786 _sceneMode = 9118;
2787 setAction(&_sequenceManager1, this, 9118, &BF_GLOBALS._player, &_nico, NULL);
2788 event.handled = true;
2789 }
2790 } else if (BF_GLOBALS._player._visage == 1911) {
2791 BF_GLOBALS._player.disableControl();
2792 _destPos = event.mousePos;
2793 _sceneSubMode = 0;
2794 _sceneMode = 9123;
2795 setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
2796 }
2797 default:
2798 break;
2799 }
2800 }
2801
dispatch()2802 void Scene910::dispatch() {
2803 SceneExt::dispatch();
2804 if (_action)
2805 return;
2806
2807 if ((_sceneMode != 14) && (BF_GLOBALS._player._position.x < 30) && (BF_GLOBALS._player._position.y > 148)) {
2808 BF_GLOBALS._player.disableControl();
2809 if (BF_GLOBALS._dayNumber != 5) {
2810 _sceneMode = 9101;
2811 setAction(&_sequenceManager1, this, 9101, &BF_GLOBALS._player, NULL);
2812 } else {
2813 _sceneMode = 9146;
2814 if (BF_GLOBALS._hiddenDoorStatus == 0)
2815 setAction(&_sequenceManager1, this, 9146, &BF_GLOBALS._player, NULL);
2816 else
2817 setAction(&_sequenceManager1, this, 9145, &BF_GLOBALS._player, NULL);
2818 }
2819 }
2820
2821 if ((BF_GLOBALS._player._position.x > 265) && (BF_GLOBALS._player._position.y < 102) && (BF_GLOBALS._hiddenDoorStatus != 0) && (_sceneMode != 9143)) {
2822 BF_GLOBALS._player.disableControl();
2823 if (BF_GLOBALS.getFlag(gunDrawn)) {
2824 _sceneSubMode = 3;
2825 _sceneMode = 9123;
2826 setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
2827 } else if (BF_GLOBALS._nico910State == 0) {
2828 _sceneMode = 9143;
2829 setAction(&_sequenceManager1, this, 9143, &BF_GLOBALS._player, NULL);
2830 } else {
2831 SceneItem::display(910, 98, SET_WIDTH, 312,
2832 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2833 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2834 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2835 SET_EXT_FGCOLOR, 13, LIST_END);
2836 _sceneMode = 9144;
2837 setAction(&_sequenceManager1, this, 9144, &BF_GLOBALS._player, NULL);
2838 }
2839 }
2840
2841 if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._player._position.x > 250) && (_sceneMode != 9135) && (_sceneMode != 11) && (BF_GLOBALS._hiddenDoorStatus != 0) && (BF_GLOBALS._nico910State == 0)) {
2842 BF_GLOBALS._player.disableControl();
2843 _shadow.remove();
2844 _nico.remove();
2845 _nico.postInit();
2846 _nico.setDetails(910, 63, 64, 65, 5, &_item4);
2847 _sceneMode = 9135;
2848 setAction(&_sequenceManager1, this, 9135, &BF_GLOBALS._player, &_nico, NULL);
2849 }
2850
2851 }
2852
checkGun()2853 void Scene910::checkGun() {
2854 if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._nico910State == 0) && (BF_GLOBALS._hiddenDoorStatus != 0))
2855 SceneItem::display(910, 70, SET_WIDTH, 312,
2856 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
2857 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
2858 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
2859 SET_EXT_FGCOLOR, 13, LIST_END);
2860 else
2861 SceneExt::checkGun();
2862 }
2863
openHiddenDoor()2864 void Scene910::openHiddenDoor() {
2865 if (BF_GLOBALS._hiddenDoorStatus != 0)
2866 return;
2867
2868 if (! BF_GLOBALS.getFlag(fGotPointsForLightsOn)) {
2869 T2_GLOBALS._uiElements.addScore(50);
2870 BF_GLOBALS.setFlag(fGotPointsForLightsOn);
2871 }
2872 BF_GLOBALS._hiddenDoorStatus = 1;
2873 BF_GLOBALS._player.disableControl();
2874 BF_GLOBALS._walkRegions.enableRegion(10);
2875 _sceneMode = 9114;
2876 _sound2.play(42);
2877 if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910))
2878 setAction(&_sequenceManager1, this, 9127, &_fakeWall, &_yellowCord, &_object5, NULL);
2879 else
2880 setAction(&_sequenceManager1, this, 9114, &_fakeWall, &_object5, NULL);
2881 }
2882
closeHiddenDoor()2883 void Scene910::closeHiddenDoor() {
2884 if (BF_GLOBALS._hiddenDoorStatus != 0) {
2885 _fakeWall.show();
2886 if ((BF_GLOBALS._bookmark == bEndDayThree) && (!BF_GLOBALS.getFlag(fGotPointsForOpeningDoor))) {
2887 T2_GLOBALS._uiElements.addScore(30);
2888 BF_GLOBALS.setFlag(fGotPointsForOpeningDoor);
2889 }
2890 BF_GLOBALS._hiddenDoorStatus = 0;
2891 BF_GLOBALS._walkRegions.disableRegion(10);
2892 BF_GLOBALS._player.disableControl();
2893 _sceneMode = 9115;
2894 _sound2.play(42);
2895 if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910))
2896 setAction(&_sequenceManager1, this, 9128, &_fakeWall, &_yellowCord, &_object5, NULL);
2897 else
2898 setAction(&_sequenceManager1, this, 9115, &_fakeWall, &_object5, NULL);
2899 }
2900
2901 if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._nico910State == 0)) {
2902 // _objectList.draw();
2903 if (BF_GLOBALS._sceneObjects->contains(&_breakerBoxInset))
2904 _breakerBoxInset.remove();
2905 if (BF_GLOBALS._sceneObjects->contains(&_generatorInset))
2906 _generatorInset.remove();
2907
2908 BF_GLOBALS._player.disableControl();
2909 _sceneMode = 9120;
2910 BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 9120, &BF_GLOBALS._player, &_lyle, NULL);
2911 BF_GLOBALS._walkRegions.enableRegion(1);
2912 }
2913 }
2914
2915 /*--------------------------------------------------------------------------
2916 * Scene 920 - Inside Warehouse: Secret Room
2917 *
2918 *--------------------------------------------------------------------------*/
2919 // Crate
startAction(CursorType action,Event & event)2920 bool Scene920::Item1::startAction(CursorType action, Event &event) {
2921 Scene920 *scene = (Scene920 *)BF_GLOBALS._sceneManager._scene;
2922
2923 switch (action) {
2924 case CURSOR_LOOK:
2925 if ((BF_GLOBALS.getFlag(fCrateOpen)) && (BF_GLOBALS._player._visage == 921)) {
2926 BF_GLOBALS._player.disableControl();
2927 scene->_crateWindow.postInit();
2928 scene->_sceneMode = 9204;
2929 if (!BF_GLOBALS.getFlag(fGotPointsForBoots)) {
2930 T2_GLOBALS._uiElements.addScore(30);
2931 BF_GLOBALS.setFlag(fGotPointsForBoots);
2932 }
2933 scene->setAction(&scene->_sequenceManager1, scene, 9204, &BF_GLOBALS._player, &scene->_crateWindow, NULL);
2934 return true;
2935 } else
2936 return NamedHotspot::startAction(action, event);
2937 break;
2938 case CURSOR_USE:
2939 BF_GLOBALS._player.disableControl();
2940 if (BF_GLOBALS.getFlag(fCrateOpen)) {
2941 if (BF_GLOBALS._player._visage == 921) {
2942 if ((BF_INVENTORY.getObjectScene(INV_AUTO_RIFLE) != 1) && (BF_GLOBALS.getFlag(fSawGuns))) {
2943 scene->_sceneMode = 9207;
2944 scene->setAction(&scene->_sequenceManager1, scene, 9207, &BF_GLOBALS._player, NULL);
2945 } else {
2946 scene->_sceneMode = 9203;
2947 scene->setAction(&scene->_sequenceManager1, scene, 9203, &BF_GLOBALS._player, &scene->_crateTop, NULL);
2948 BF_GLOBALS.clearFlag(fCrateOpen);
2949 }
2950 } else {
2951 scene->_sceneMode = 9205;
2952 scene->setAction(&scene->_sequenceManager1, scene, 9205, &BF_GLOBALS._player, NULL);
2953 }
2954 } else {
2955 scene->_sceneMode = 9202;
2956 scene->setAction(&scene->_sequenceManager1, scene, 9202, &BF_GLOBALS._player, &scene->_crateTop, NULL);
2957 BF_GLOBALS.setFlag(fCrateOpen);
2958 }
2959 return true;
2960 break;
2961 default:
2962 return NamedHotspot::startAction(action, event);
2963 break;
2964 }
2965 }
2966
2967 // North Exit
startAction(CursorType action,Event & event)2968 bool Scene920::Item8::startAction(CursorType action, Event &event) {
2969 Scene920 *scene = (Scene920 *)BF_GLOBALS._sceneManager._scene;
2970
2971 BF_GLOBALS._player.disableControl();
2972 if (BF_GLOBALS._player._visage == 921) {
2973 scene->_sceneMode = 10;
2974 scene->setAction(&scene->_sequenceManager1, scene, 9206, &BF_GLOBALS._player, NULL);
2975 // TO BE CHECKED: Original code uses a variable to store the address of scene instance.
2976 // As it's used later a coordinates to create a playermover, I don't understand.
2977 // On the other hand, it's not really important as just after the hero leaves the scene
2978 // so the variable is no longer used.
2979 // scene->_oldCoord = &scene;
2980 } else {
2981 scene->_sceneMode = 9201;
2982 scene->setAction(&scene->_sequenceManager1, scene, 9201, &BF_GLOBALS._player, NULL);
2983 }
2984 return true;
2985 }
2986
postInit(SceneObjectList * OwnerList)2987 void Scene920::postInit(SceneObjectList *OwnerList) {
2988 SceneExt::postInit();
2989 loadScene(920);
2990
2991 _stripManager.addSpeaker(&_gameTextSpeaker);
2992 _stripManager.addSpeaker(&_jakeJacketSpeaker);
2993 if (BF_GLOBALS._dayNumber == 0)
2994 BF_GLOBALS._dayNumber = 4;
2995 BF_GLOBALS._player.postInit();
2996 if (BF_GLOBALS._v4CEC8 != 0) {
2997 _doorway.postInit();
2998 _doorway.setVisage(922);
2999 _doorway.setStrip(2);
3000 _doorway.fixPriority(1);
3001 _doorway.setPosition(Common::Point(145, 82));
3002 }
3003
3004 _crateTop.postInit();
3005 _crateTop.setVisage(922);
3006 if (BF_GLOBALS.getFlag(fCrateOpen)) {
3007 _crateTop.setStrip(3);
3008 _crateTop.setFrame(5);
3009 }
3010
3011 _crateTop.setPosition(Common::Point(158, 107));
3012 _crateTop.fixPriority(130);
3013
3014 _exitN.setDetails(Rect(116, 12, 165, 81), 920, -1, -1, -1, 1, NULL);
3015 _item6.setDetails(6, 920, 15, 16, 17, 1);
3016 _item4.setDetails(5, 920, 12, 13, 14, 1);
3017 _item7.setDetails(4, 920, 9, 10, 11, 1);
3018 _item5.setDetails(3, 920, 6, 7, 8, 1);
3019 _crate.setDetails(2, 920, 3, 4, 5, 1);
3020 _item3.setDetails(1, 920, 3, 4, 5, 1);
3021 _item2.setDetails(Rect(0, 0, 320, 200), 920, 0, 1, 2, 1, NULL);
3022
3023 BF_GLOBALS._player.disableControl();
3024 _sceneMode = 9200;
3025 setAction(&_sequenceManager1, this, 9200, &BF_GLOBALS._player, NULL);
3026 }
3027
signal()3028 void Scene920::signal() {
3029 switch (_sceneMode) {
3030 case 10:
3031 _sceneMode = 9201;
3032 setAction(&_sequenceManager1, this, 9201, &BF_GLOBALS._player, NULL);
3033 break;
3034 case 9201:
3035 if (BF_GLOBALS.getFlag(fCrateOpen))
3036 BF_GLOBALS.setFlag(fLeftTraceIn920);
3037 else
3038 BF_GLOBALS.clearFlag(fLeftTraceIn920);
3039 BF_GLOBALS._sceneManager.changeScene(910);
3040 break;
3041 case 9204:
3042 _crateWindow.remove();
3043 BF_GLOBALS.setFlag(fSawGuns);
3044 BF_GLOBALS._player.enableControl();
3045 break;
3046 case 9206: {
3047 BF_GLOBALS._player.enableControl();
3048 PlayerMover *mover = new PlayerMover();
3049 BF_GLOBALS._player.addMover(mover, &_oldCoord, NULL);
3050 break;
3051 }
3052 case 9207:
3053 BF_GLOBALS._player.enableControl();
3054 T2_GLOBALS._uiElements.addScore(30);
3055 BF_INVENTORY.setObjectScene(INV_AUTO_RIFLE, 1);
3056 BF_GLOBALS._bookmark = bEndDayThree;
3057 break;
3058 default:
3059 BF_GLOBALS._player.enableControl();
3060 break;
3061 }
3062 }
process(Event & event)3063 void Scene920::process(Event &event) {
3064 SceneExt::process(event);
3065 if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
3066 if (_exitN.contains(event.mousePos)) {
3067 GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_N);
3068 BF_GLOBALS._events.setCursor(surface);
3069 } else {
3070 CursorType cursorId = BF_GLOBALS._events.getCursor();
3071 BF_GLOBALS._events.setCursor(cursorId);
3072 }
3073 }
3074 if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) && (BF_GLOBALS._player._visage == 921)) {
3075 BF_GLOBALS._player.disableControl();
3076 _sceneMode = 9206;
3077 setAction(&_sequenceManager1, this, 9206, &BF_GLOBALS._player, NULL);
3078 _oldCoord = event.mousePos;
3079 event.handled = true;
3080 }
3081 }
3082
dispatch()3083 void Scene920::dispatch() {
3084 SceneExt::dispatch();
3085 if ((_action == 0) && (BF_GLOBALS._player._position.y < 75)) {
3086 BF_GLOBALS._player.disableControl();
3087 BF_GLOBALS._sceneManager.changeScene(910);
3088 }
3089 }
3090
synchronize(Serializer & s)3091 void Scene920::synchronize(Serializer &s) {
3092 SceneExt::synchronize(s);
3093 s.syncAsSint16LE(_oldCoord.x);
3094 s.syncAsSint16LE(_oldCoord.y);
3095 }
3096
3097 /*--------------------------------------------------------------------------
3098 * Scene 930 - Inside the caravan
3099 *
3100 *--------------------------------------------------------------------------*/
3101 /* Objects */
startAction(CursorType action,Event & event)3102 bool Scene930::Object1::startAction(CursorType action, Event &event) {
3103 // Small box
3104 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3105 bool result;
3106
3107 if ((action == CURSOR_USE) && (!BF_GLOBALS.getFlag(fGotPointsForFBI))) {
3108 scene->setAction(&scene->_action2);
3109 result = true;
3110 } else
3111 result = NamedObject::startAction(action, event);
3112
3113 return result;
3114 }
3115
startAction(CursorType action,Event & event)3116 bool Scene930::Object2::startAction(CursorType action, Event &event) {
3117 // Small box Inset
3118 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3119
3120 if (action != CURSOR_USE)
3121 return NamedObject::startAction(action, event);
3122
3123 NamedObject::startAction(action, event);
3124 T2_GLOBALS._uiElements.addScore(30);
3125 BF_INVENTORY.setObjectScene(INV_9MM_BULLETS, 1);
3126 BF_GLOBALS.setFlag(fGotPointsForFBI);
3127 remove();
3128 scene->_box.remove();
3129 return true;
3130 }
3131
startAction(CursorType action,Event & event)3132 bool Scene930::Object3::startAction(CursorType action, Event &event) {
3133 // Boots
3134 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3135
3136 if (action != CURSOR_USE)
3137 return NamedObject::startAction(action, event);
3138
3139 if (!scene->_bootInsetDisplayed)
3140 scene->setAction(&scene->_action1);
3141 return true;
3142 }
3143
startAction(CursorType action,Event & event)3144 bool Scene930::Object4::startAction(CursorType action, Event &event) {
3145 // Boot inset
3146 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3147
3148 switch (action) {
3149 case CURSOR_WALK:
3150 return true;
3151 case CURSOR_LOOK:
3152 if (BF_GLOBALS._bookmark >= bFlashBackTwo) {
3153 _lookLineNum = 94;
3154 return NamedObject::startAction(action, event);
3155 } else {
3156 BF_GLOBALS._player.disableControl();
3157 NamedObject::startAction(action, event);
3158 BF_GLOBALS._bookmark = bFlashBackTwo;
3159 scene->_sceneMode = 2;
3160 scene->signal();
3161 return true;
3162 }
3163 break;
3164 case CURSOR_USE:
3165 if (BF_GLOBALS._bookmark >= bFlashBackTwo) {
3166 _lookLineNum = 71;
3167 NamedObject::startAction(action, event);
3168 scene->showSoleInset();
3169 remove();
3170 } else
3171 NamedObject::startAction(action, event);
3172 return true;
3173 default:
3174 return NamedObject::startAction(action, event);
3175 break;
3176 }
3177 }
3178
remove()3179 void Scene930::Object4::remove() {
3180 // Boots inset
3181 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3182
3183 if (scene->_bootInsetDisplayed && !BF_GLOBALS._sceneObjects->contains(&scene->_soleInset)) {
3184 scene->_boots.setAction(&scene->_action3);
3185 }
3186
3187 FocusObject::remove();
3188 }
3189
startAction(CursorType action,Event & event)3190 bool Scene930::Object5::startAction(CursorType action, Event &event) {
3191 // Boots sole inset
3192 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3193
3194 switch (action) {
3195 case CURSOR_WALK:
3196 return true;
3197 case CURSOR_USE:
3198 if (BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1)
3199 return NamedObject::startAction(action, event);
3200 if (!scene->_soleOpened) {
3201 animate(ANIM_MODE_4, getFrameCount() - 1, 1, NULL);
3202 scene->_soleOpened = 1;
3203 _lookLineNum = 76;
3204 _useLineNum = 78;
3205 } else {
3206 T2_GLOBALS._uiElements.addScore(50);
3207 BF_INVENTORY.setObjectScene(INV_SCHEDULE, 1);
3208 setFrame2(getFrameCount());
3209 _lookLineNum = 92;
3210 _useLineNum = -1;
3211 }
3212 return true;
3213 default:
3214 return NamedObject::startAction(action, event);
3215 break;
3216 }
3217 }
3218
remove()3219 void Scene930::Object5::remove() {
3220 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3221 scene->_boots.setAction(&scene->_action3);
3222
3223 FocusObject::remove();
3224 }
3225
3226 /* Items */
startAction(CursorType action,Event & event)3227 bool Scene930::Item1::startAction(CursorType action, Event &event) {
3228 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3229
3230 if ((action == CURSOR_WALK) || (action == CURSOR_USE)) {
3231 BF_GLOBALS._player.disableControl();
3232 scene->_sceneMode = 1;
3233 scene->setAction(&scene->_sequenceManager1, scene, 9301, &BF_GLOBALS._player, NULL);
3234 return true;
3235 } else
3236 return NamedHotspot::startAction(action, event);
3237 }
3238
3239 /* Actions */
signal()3240 void Scene930::Action1::signal() {
3241 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3242
3243 switch (_actionIndex++) {
3244 case 0:
3245 setDelay(10);
3246 BF_GLOBALS._player.disableControl();
3247 scene->_bootInsetDisplayed = 1;
3248 break;
3249 case 1: {
3250 Common::Point pt(50, 142);
3251 PlayerMover *mover = new PlayerMover();
3252 BF_GLOBALS._player.addMover(mover, &pt, this);
3253 break;
3254 }
3255 case 2:
3256 BF_GLOBALS._player.changeAngle(270);
3257 setDelay(10);
3258 break;
3259 case 3:
3260 BF_GLOBALS._player.changeZoom(110);
3261 BF_GLOBALS._player.setVisage(931);
3262 BF_GLOBALS._player.setStrip(1);
3263 BF_GLOBALS._player.setFrame(1);
3264 BF_GLOBALS._player.animate(ANIM_MODE_4, 4, 1, this);
3265 break;
3266 case 4:
3267 scene->_boots.setFrame(2);
3268 BF_GLOBALS._player.animate(ANIM_MODE_5, this);
3269 break;
3270 case 5:
3271 scene->showBootInset();
3272 if (!BF_GLOBALS.getFlag(fGotPointsForCPU)) {
3273 T2_GLOBALS._uiElements.addScore(30);
3274 BF_GLOBALS.setFlag(fGotPointsForCPU);
3275 }
3276 SceneItem::display(0, 312);
3277 BF_GLOBALS._player.enableControl();
3278 remove();
3279 break;
3280 default:
3281 break;
3282 }
3283 }
signal()3284 void Scene930::Action2::signal() {
3285 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3286
3287 switch (_actionIndex++) {
3288 case 0:
3289 setDelay(10);
3290 BF_GLOBALS._player.disableControl();
3291 break;
3292 case 1: {
3293 Common::Point pt(176, 137);
3294 PlayerMover *mover = new PlayerMover();
3295 BF_GLOBALS._player.addMover(mover, &pt, this);
3296 break;
3297 }
3298 case 2:
3299 setDelay(10);
3300 break;
3301 case 3:
3302 SceneItem::display(930, scene->_box._useLineNum, SET_WIDTH, 312,
3303 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
3304 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
3305 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
3306 SET_EXT_FGCOLOR, 13, LIST_END);
3307 scene->showBoxInset();
3308 BF_GLOBALS._player.enableControl();
3309 remove();
3310 break;
3311 default:
3312 break;
3313 }
3314 }
3315
signal()3316 void Scene930::Action3::signal() {
3317 Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
3318
3319 switch (_actionIndex++) {
3320 case 0:
3321 BF_GLOBALS._player.disableControl();
3322 BF_GLOBALS._player.animate(ANIM_MODE_4, 4, -1, this);
3323 break;
3324 case 1:
3325 scene->_boots.setFrame(1);
3326 BF_GLOBALS._player.animate(ANIM_MODE_6, this);
3327 break;
3328 case 2:
3329 BF_GLOBALS._player.changeZoom(-1);
3330 BF_GLOBALS._player.setVisage(368);
3331 BF_GLOBALS._player.setStrip(6);
3332 BF_GLOBALS._player.setFrame(1);
3333 scene->_bootInsetDisplayed = 0;
3334 remove();
3335 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
3336 BF_GLOBALS._player.enableControl();
3337 break;
3338 default:
3339 break;
3340 }
3341 }
3342
postInit(SceneObjectList * OwnerList)3343 void Scene930::postInit(SceneObjectList *OwnerList) {
3344 PalettedScene::postInit();
3345 loadScene(930);
3346
3347 BF_GLOBALS._sound1.changeSound(85);
3348 if (BF_GLOBALS._dayNumber == 0)
3349 BF_GLOBALS._dayNumber = 1;
3350 setZoomPercents(83, 75, 140, 100);
3351 _soleOpened = 0;
3352 _bootInsetDisplayed = 0;
3353 if (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) != 1) {
3354 _box.postInit();
3355 _box.setVisage(930);
3356 _box.setStrip(1);
3357 _box.setPosition(Common::Point(223, 21));
3358 _box.setDetails(930, 66, 67, 68, 1, (SceneItem *)NULL);
3359 }
3360 _boots.postInit();
3361 _boots.setVisage(930);
3362 _boots.setStrip(2);
3363 _boots.setPosition(Common::Point(9, 161));
3364 _boots.fixPriority(120);
3365 _boots.setDetails(930, 62, 63, 64, 1, (SceneItem *)NULL);
3366
3367 BF_GLOBALS._player.postInit();
3368 BF_GLOBALS._player.setVisage(368);
3369 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
3370 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
3371 BF_GLOBALS._player.setPosition(Common::Point(170, 92));
3372 BF_GLOBALS._player.fixPriority(80);
3373 BF_GLOBALS._player.changeZoom(-1);
3374 BF_GLOBALS._player.enableControl();
3375 BF_GLOBALS._events.setCursor(CURSOR_WALK);
3376
3377 _item1.setDetails( 1, 930, 0, 1, 2, 1);
3378 _item2.setDetails( 2, 930, 4, 5, 6, 1);
3379 _item3.setDetails( 3, 930, 8, 9, 10, 1);
3380 _item4.setDetails( 4, 930, 12, 13, 14, 1);
3381 _item5.setDetails( 5, 930, 16, 17, 18, 1);
3382 _item6.setDetails( 20, 930, 20, 21, 22, 1);
3383 _item7.setDetails( 6, 930, 23, 24, 25, 1);
3384 _item8.setDetails( 7, 930, 26, 27, 28, 1);
3385 _item21.setDetails( 8, 930, 89, 90, 91, 1);
3386 _item9.setDetails( 9, 930, 29, 30, 31, 1);
3387 _item20.setDetails(10, 930, 86, 87, 88, 1);
3388 _item10.setDetails(11, 930, 33, 34, 35, 1);
3389 _item11.setDetails(12, 930, 37, 38, 39, 1);
3390 _item13.setDetails(13, 930, 40, 41, 42, 1);
3391 _item14.setDetails(14, 930, 44, 45, 46, 1);
3392 _item15.setDetails(15, 930, 48, 49, 50, 1);
3393 _item16.setDetails(16, 930, 52, 53, 54, 1);
3394 _item17.setDetails(17, 930, 56, 57, 58, 1);
3395 _item12.setDetails(18, 930, 59, 60, 61, 1);
3396 _item18.setDetails(19, 930, 80, 81, 82, 1);
3397 _item19.setDetails(21, 930, 83, 84, 85, 1);
3398
3399 if (BF_GLOBALS._sceneManager._previousScene != 935) {
3400 BF_GLOBALS._player.disableControl();
3401 _sceneMode = 0;
3402 setAction(&_sequenceManager1, this, 9300, &BF_GLOBALS._player, NULL);
3403 } else {
3404 // After flashback
3405 _bootInsetDisplayed = 1;
3406 BF_GLOBALS._player.animate(ANIM_MODE_NONE);
3407 BF_GLOBALS._player.setPosition(Common::Point(50, 142));
3408 BF_GLOBALS._player.setVisage(931);
3409 BF_GLOBALS._player.setStrip(1);
3410 BF_GLOBALS._player.setFrame(9);
3411 BF_GLOBALS._player.fixPriority(-1);
3412 BF_GLOBALS._player.enableControl();
3413 BF_GLOBALS._player.changeZoom(110);
3414 _boots.setFrame(2);
3415 showBootInset();
3416 }
3417
3418 }
3419
signal()3420 void Scene930::signal() {
3421 static uint32 v50EC4 = 0;
3422
3423 switch (_sceneMode++) {
3424 case 1:
3425 BF_GLOBALS._sceneManager.changeScene(550);
3426 break;
3427 case 2:
3428 _sceneMode = 3;
3429 SceneItem::display(930, 95, SET_WIDTH, 312,
3430 SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4,
3431 SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
3432 SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
3433 SET_EXT_FGCOLOR, 13, LIST_END);
3434 signal();
3435 break;
3436 case 3:
3437 _sceneMode = 4;
3438 addFader((const byte *)&v50EC4, 5, this);
3439 break;
3440 case 4:
3441 BF_GLOBALS._sceneManager.changeScene(935);
3442 break;
3443 default:
3444 BF_GLOBALS._player.enableControl();
3445 break;
3446 }
3447 }
3448
dispatch()3449 void Scene930::dispatch() {
3450 SceneExt::dispatch();
3451 }
3452
showBootInset()3453 void Scene930::showBootInset() {
3454 _bootsInset.postInit();
3455 _bootsInset.setVisage(930);
3456 _bootsInset.setStrip(3);
3457 _bootsInset.setFrame2(1);
3458 _bootsInset.fixPriority(260);
3459 _bootsInset.setPosition(Common::Point(147, 128));
3460 _bootsInset.setDetails(930, 69, 70, 93);
3461 }
3462
showBoxInset()3463 void Scene930::showBoxInset() {
3464 _boxInset.postInit();
3465 _boxInset.setVisage(930);
3466 _boxInset.setStrip(1);
3467 _boxInset.setFrame2(2);
3468 _boxInset.fixPriority(260);
3469 _boxInset.setPosition(Common::Point(147, 128));
3470 _boxInset.setDetails(930, 73, 74, 75);
3471 }
3472
showSoleInset()3473 void Scene930::showSoleInset() {
3474 _soleInset.postInit();
3475 _soleInset.setVisage(930);
3476 _soleInset.setStrip(3);
3477 if (BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) {
3478 _soleInset.setFrame(_soleInset.getFrameCount());
3479 _soleInset.setDetails(930, 92, 77, -1);
3480 } else if (!_soleOpened) {
3481 _soleInset.setFrame(2);
3482 _soleInset.setDetails(930, 93, 77, -1);
3483 } else {
3484 _soleInset.setFrame(_soleInset.getFrameCount());
3485 _soleInset.setDetails(930, 76, 77, 78);
3486 }
3487
3488 _soleInset.fixPriority(260);
3489 _soleInset.setPosition(Common::Point(147, 128));
3490 }
3491
synchronize(Serializer & s)3492 void Scene930::synchronize(Serializer &s) {
3493 SceneExt::synchronize(s);
3494 s.syncAsSint16LE(_soleOpened);
3495 s.syncAsSint16LE(_bootInsetDisplayed);
3496 }
3497
3498 /*--------------------------------------------------------------------------
3499 * Scene 935 - Hidden in the wardrobe
3500 *
3501 *--------------------------------------------------------------------------*/
3502
signal()3503 void Scene935::Action1::signal() {
3504 Scene935 *scene = (Scene935 *)BF_GLOBALS._sceneManager._scene;
3505 static uint32 v50ECC = 0, v50EEA = 0, v50EEE = 0, v50F26 = 0, v50F2A = 0, v50F62 = 0, v50F66 = 0, v50F6A = 0;
3506
3507 switch (_actionIndex++) {
3508 case 0:
3509 scene->addFader((const byte *)&v50ECC, 100, this);
3510 break;
3511 case 1:
3512 scene->_visualSpeaker.setText("Jake! Hide in the closet!");
3513 for (int i = 1; i < 21; i++)
3514 scene->transition((const byte *)&v50EEA, 5 * i, 935, NULL, 0, 255, 249, 255, 1);
3515 setDelay(3);
3516 break;
3517 case 2:
3518 scene->addFader((const byte *)&v50EEE, 5, this);
3519 break;
3520 case 3:
3521 scene->_visualSpeaker.removeText();
3522 scene->_visualSpeaker._textPos.y = scene->_sceneBounds.top + 80;
3523 scene->_visualSpeaker._color1 = 252;
3524 scene->_visualSpeaker._color2 = 251;
3525 scene->_visualSpeaker.setText("Jake! Hide in the closet!");
3526 setDelay(3);
3527 break;
3528 case 4:
3529 scene->_visualSpeaker.setText("Jake! Hide in the closet!");
3530 for (int i = 1; i < 21; i++)
3531 scene->transition((const byte *)&v50F26, 5 * i, 935, NULL, 0, 255, 249, 255, 1);
3532 setDelay(3);
3533 break;
3534 case 5:
3535 scene->addFader((const byte *)&v50F2A, 5, this);
3536 break;
3537 case 6:
3538 scene->_visualSpeaker.removeText();
3539 scene->_visualSpeaker._textPos.y = scene->_sceneBounds.top + 150;
3540 scene->_visualSpeaker._color1 = 250;
3541 scene->_visualSpeaker._color2 = 249;
3542 scene->_visualSpeaker.setText("Jake! Hide in the closet!");
3543 setDelay(3);
3544 break;
3545 case 7:
3546 scene->_visualSpeaker.setText("Jake! Hide in the closet!");
3547 for (int i = 1; i < 21; i++)
3548 scene->transition((const byte *)&v50F62, 5 * i, 935, NULL, 0, 255, 249, 255, 1);
3549 setDelay(3);
3550 break;
3551 case 8:
3552 scene->addFader((const byte *)&v50F66, 5, this);
3553 break;
3554 case 9:
3555 scene->_visualSpeaker.removeText();
3556 setDelay(3);
3557 break;
3558 case 10:
3559 scene->_sceneMode = 1;
3560 scene->add2Faders((const byte *)&v50F6A, 5, 935, scene);
3561 remove();
3562 break;
3563 default:
3564 break;
3565 }
3566 }
3567
postInit(SceneObjectList * OwnerList)3568 void Scene935::postInit(SceneObjectList *OwnerList) {
3569 PalettedScene::postInit();
3570 loadScene(935);
3571
3572 BF_GLOBALS._interfaceY = SCREEN_HEIGHT;
3573 BF_GLOBALS._player.disableControl();
3574 _visualSpeaker._textMode = ALIGN_CENTER;
3575 _visualSpeaker._hideObjects = false;
3576 _visualSpeaker._color1 = 254;
3577 _visualSpeaker._color2 = 253;
3578 _visualSpeaker._textPos.y = _sceneBounds.top + 18;
3579 _visualSpeaker._textWidth = 300;
3580 _visualSpeaker._textPos.x = _sceneBounds.left + 10;
3581 setAction(&_action1);
3582 BF_GLOBALS._sound1.fadeSound(67);
3583 }
3584
remove()3585 void Scene935::remove() {
3586 BF_GLOBALS._sound1.fadeOut2(NULL);
3587 BF_GLOBALS._scrollFollower = &BF_GLOBALS._player;
3588 PalettedScene::remove();
3589 }
3590
signal()3591 void Scene935::signal() {
3592 static uint32 v50EC8 = 0;
3593
3594 switch (_sceneMode) {
3595 case 1:
3596 _object1.postInit();
3597 if (BF_GLOBALS._sceneManager._previousScene == 810) {
3598 BF_GLOBALS._player.disableControl();
3599 _sceneMode = 9352;
3600 setAction(&_sequenceManager, this, 9350, &_object1, NULL);
3601 } else if (BF_GLOBALS._sceneManager._previousScene == 930) {
3602 _object3.postInit();
3603 _object3.setVisage(938);
3604 _object3.fixPriority(255);
3605 _object3.setPosition(Common::Point(260, -4));
3606 BF_GLOBALS._player.disableControl();
3607 _sceneMode = 0;
3608 setAction(&_sequenceManager, this, 9354, &_object1, &_object3, NULL);
3609 } else {
3610 _sceneMode = 9351;
3611 setAction(&_sequenceManager, this, 9350, &_object1, NULL);
3612 }
3613 break;
3614 case 2:
3615 BF_GLOBALS._sound1.play(68);
3616 _sceneMode = 0;
3617 addFader((const byte *)&v50EC8, 5, this);
3618 break;
3619 case 3:
3620 _sceneMode = 2;
3621 _object1.animate(ANIM_MODE_6, NULL);
3622 signal();
3623 break;
3624 case 9351:
3625 BF_GLOBALS._player.disableControl();
3626 _sceneMode = 2;
3627 setAction(&_sequenceManager, this, 9351, &_object1, NULL);
3628 if (BF_GLOBALS._sceneManager._previousScene == 910)
3629 _sceneMode = 9353;
3630 break;
3631 case 9352:
3632 BF_GLOBALS._player.disableControl();
3633 _sceneMode = 2;
3634 setAction(&_sequenceManager, this, 9352, &_object1, NULL);
3635 break;
3636 case 9353:
3637 _object2.postInit();
3638 BF_GLOBALS._player.disableControl();
3639 _sceneMode = 3;
3640 setAction(&_sequenceManager, this, 9353, &_object1, &_object2, NULL);
3641 break;
3642 default:
3643 BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._sceneManager._previousScene);
3644 break;
3645 }
3646 }
3647
dispatch()3648 void Scene935::dispatch() {
3649 SceneExt::dispatch();
3650 }
3651
3652 /*--------------------------------------------------------------------------
3653 * Scene 940 - Jail ending animation
3654 *
3655 *--------------------------------------------------------------------------*/
3656
startAction(CursorType action,Event & event)3657 bool Scene940::Item1::startAction(CursorType action, Event &event) {
3658 return true;
3659 }
3660
signal()3661 void Scene940::Action1::signal() {
3662 Scene940 *scene = (Scene940 *)BF_GLOBALS._sceneManager._scene;
3663
3664 switch (_actionIndex) {
3665 case 0:
3666 _actionIndex = 2;
3667 setDelay(60);
3668 break;
3669 case 2:
3670 _actionIndex = 941;
3671 if (BF_GLOBALS.getFlag(fBackupAt340)) {
3672 // WORKAROUND: If the player shot Nico, the alternate text was previously going off-screen
3673 scene->_gameTextSpeaker1._offsetPos.y -= 10;
3674 scene->_stripManager.start(9408, this);
3675 } else
3676 scene->_stripManager.start(9400, this);
3677 break;
3678 case 5:
3679 setActionIndex(948);
3680 setDelay(90);
3681 scene->_object2.remove();
3682 scene->_object3.remove();
3683 scene->_object4.remove();
3684 scene->_object5.remove();
3685 scene->_object6.remove();
3686 scene->_object7.remove();
3687 scene->_object8.remove();
3688 scene->_object9.remove();
3689 scene->_object10.remove();
3690 break;
3691 case 99:
3692 BF_GLOBALS._sound1.play(117);
3693 BF_GLOBALS._sceneManager.changeScene(100);
3694 remove();
3695 break;
3696 case 941:
3697 scene->_gameTextSpeaker1._textWidth = 312;
3698 _actionIndex = 944;
3699 setAction(&scene->_sequenceManager1, this, 941, &BF_GLOBALS._player, NULL);
3700 break;
3701 case 942:
3702 _actionIndex = 955;
3703 setAction(&scene->_sequenceManager1, this, 942, &scene->_object2, NULL);
3704 break;
3705 case 943:
3706 _actionIndex = 946;
3707 setAction(&scene->_sequenceManager1, this, 943, &scene->_object3, NULL);
3708 break;
3709 case 944:
3710 scene->_object4.setAction(&scene->_sequenceManager2, NULL, 944, &scene->_object4, &scene->_object5);
3711 _actionIndex = 945;
3712 setDelay(3);
3713 break;
3714 case 945:
3715 scene->_object6.setAction(&scene->_sequenceManager3, NULL, 945, &scene->_object6, &scene->_object10, NULL);
3716 _actionIndex = 943;
3717 setDelay(3);
3718 break;
3719 case 946:
3720 _actionIndex = 942;
3721 setAction(&scene->_sequenceManager1, this, 946, &scene->_object7, &scene->_object8, NULL);
3722 break;
3723 case 947:
3724 _actionIndex = 5;
3725 setAction(&scene->_sequenceManager1, this, 947, &scene->_object1, &scene->_object11, &scene->_object12, &scene->_object13, NULL);
3726 break;
3727 case 948:
3728 scene->_gameTextSpeaker1._textPos.x = scene->_sceneBounds.left + 10;
3729 scene->_object17.postInit();
3730 scene->_object17.hide();
3731 scene->_object18.postInit();
3732 scene->_object18.hide();
3733 _actionIndex = 960;
3734 setAction(&scene->_sequenceManager1, this, 948, &scene->_object11, &scene->_object12, &scene->_object13, &scene->_object1, &scene->_object14, NULL);
3735 break;
3736 case 949:
3737 _actionIndex = 950;
3738 setAction(&scene->_sequenceManager1, this, 949, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object12, &scene->_object13, &scene->_object15, NULL);
3739 scene->_object11.setAction(&scene->_sequenceManager2, NULL, 952, &scene->_object11, NULL);
3740 break;
3741 case 950:
3742 _actionIndex = 951;
3743 setAction(&scene->_sequenceManager1, this, 950, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object13, &scene->_object16, NULL);
3744 scene->_object12.setAction(&scene->_sequenceManager3, NULL, 953, &scene->_object12, NULL);
3745 break;
3746 case 951:
3747 scene->_object13.setAction(&scene->_sequenceManager4, NULL, 954, &scene->_object13, NULL);
3748 scene->_object11.setAction(&scene->_sequenceManager2, NULL, 952, &scene->_object11, NULL);
3749 scene->_stripManager.start(9407, this);
3750 setActionIndex(99);
3751 break;
3752 case 955:
3753 scene->_object2.remove();
3754 _actionIndex = 956;
3755 setAction(&scene->_sequenceManager1, this, 955, &BF_GLOBALS._player, NULL);
3756 break;
3757 case 956:
3758 _actionIndex = 947;
3759 setAction(&scene->_sequenceManager1, this, 956, &scene->_object3, NULL);
3760 scene->_object11.postInit();
3761 scene->_object11.setVisage(943);
3762 scene->_object11.setStrip(1);
3763 scene->_object11.setPosition(Common::Point(-8, 178));
3764 scene->_object12.postInit();
3765 scene->_object12.setVisage(942);
3766 scene->_object12.setStrip(1);
3767 scene->_object12.setPosition(Common::Point(-41, 181));
3768 scene->_object13.postInit();
3769 scene->_object13.setVisage(944);
3770 scene->_object13.setStrip(2);
3771 scene->_object13.setPosition(Common::Point(-74, 179));
3772 scene->_object1.postInit();
3773 scene->_object1.setVisage(948);
3774 scene->_object1.setStrip(2);
3775 scene->_object1.setPosition(Common::Point(-107, 180));
3776 scene->_object14.postInit();
3777 scene->_object14.setVisage(949);
3778 scene->_object14.setStrip(1);
3779 scene->_object14.setFrame(3);
3780 scene->_object14.setPosition(Common::Point(234, 75));
3781 scene->_object15.postInit();
3782 scene->_object15.setVisage(949);
3783 scene->_object15.setStrip(1);
3784 scene->_object15.setFrame(2);
3785 scene->_object15.setPosition(Common::Point(144, 76));
3786 scene->_object16.postInit();
3787 scene->_object16.setVisage(949);
3788 scene->_object16.setStrip(1);
3789 scene->_object16.setFrame(1);
3790 scene->_object16.setPosition(Common::Point(45, 77));
3791 break;
3792 case 960:
3793 _actionIndex = 949;
3794 setAction(&scene->_sequenceManager1, this, 960, &scene->_object11, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object14, NULL);
3795 break;
3796 default:
3797 break;
3798 }
3799 }
3800
postInit(SceneObjectList * OwnerList)3801 void Scene940::postInit(SceneObjectList *OwnerList) {
3802 SceneExt::postInit();
3803 loadScene(940);
3804
3805 BF_GLOBALS._sound1.play(115);
3806 BF_GLOBALS._dayNumber = 6;
3807 BF_GLOBALS._interfaceY = SCREEN_HEIGHT;
3808 T2_GLOBALS._uiElements._active = false;
3809
3810 _gameTextSpeaker2._speakerName = "SENTTEXT";
3811 _gameTextSpeaker2._color1 = 104;
3812 _gameTextSpeaker2._textMode = ALIGN_CENTER;
3813 _stripManager.addSpeaker(&_gameTextSpeaker1);
3814 _stripManager.addSpeaker(&_gameTextSpeaker2);
3815 BF_GLOBALS._player.postInit();
3816 BF_GLOBALS._player.setVisage(941);
3817 BF_GLOBALS._player.setStrip(1);
3818 BF_GLOBALS._player.setFrame(7);
3819 BF_GLOBALS._player.setPosition(Common::Point(563, 80));
3820 BF_GLOBALS._player.disableControl();
3821 _object3.postInit();
3822 _object3.setVisage(944);
3823 _object3.setStrip(3);
3824 _object3.setFrame(3);
3825 _object3.setPosition(Common::Point(626, 78));
3826 _object3.fixPriority(0);
3827 _object2.postInit();
3828 _object2.setVisage(944);
3829 _object2.setStrip(3);
3830 _object2.setFrame(6);
3831 _object2.setPosition(Common::Point(378, 136));
3832 _object2.setZoom(80);
3833 _object2.fixPriority(0);
3834 _object4.postInit();
3835 _object4.setVisage(945);
3836 _object4.setStrip(6);
3837 _object4.setPosition(Common::Point(361, 70));
3838 _object4.setZoom(80);
3839 _object4.fixPriority(0);
3840 _object5.postInit();
3841 _object5.setVisage(945);
3842 _object5.setStrip(7);
3843 _object5.setPosition(Common::Point(366, 39));
3844 _object5.setZoom(80);
3845 _object5.fixPriority(3);
3846 _object6.postInit();
3847 _object6.setVisage(945);
3848 _object6.setStrip(4);
3849 _object6.setPosition(Common::Point(432, 70));
3850 _object6.setZoom(65);
3851 _object6.fixPriority(0);
3852 _object7.postInit();
3853 _object7.setVisage(945);
3854 _object7.setStrip(1);
3855 _object7.setPosition(Common::Point(423, 131));
3856 _object7.setZoom(65);
3857 _object7.fixPriority(0);
3858 _object8.postInit();
3859 _object8.setVisage(945);
3860 _object8.setStrip(2);
3861 _object8.setPosition(Common::Point(420, 99));
3862 _object8.setZoom(65);
3863 _object8.fixPriority(3);
3864 _object9.postInit();
3865 _object9.setVisage(945);
3866 _object9.setStrip(3);
3867 _object9.setPosition(Common::Point(458, 65));
3868 _object9.setZoom(55);
3869 _object9.fixPriority(0);
3870 _object10.postInit();
3871 _object10.setVisage(945);
3872 _object10.setStrip(3);
3873 _object10.setFrame(2);
3874 _object10.setPosition(Common::Point(465, 118));
3875 _object10.setZoom(55);
3876 _object10.fixPriority(0);
3877 _item1.setBounds(Rect(0, 0, 320, 200));
3878 BF_GLOBALS._sceneItems.push_back(&_item1);
3879 _sceneBounds.moveTo(320, 0);
3880 _gameTextSpeaker1._textPos.x = _sceneBounds.left + 10;
3881 _gameTextSpeaker1._color1 = 16;
3882 _gameTextSpeaker1._textWidth = 265;
3883 setAction(&_action1);
3884 }
3885
remove()3886 void Scene940::remove() {
3887 // clearScren();
3888 BF_GLOBALS._scrollFollower = &BF_GLOBALS._player;
3889 SceneExt::remove();
3890 T2_GLOBALS._uiElements._active = true;
3891 }
3892
3893 } // End of namespace BlueForce
3894 } // End of namespace TsAGE
3895