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_scenes2.h"
24 #include "tsage/scenes.h"
25 #include "tsage/tsage.h"
26
27 namespace TsAGE {
28
29 namespace BlueForce {
30
31 /*--------------------------------------------------------------------------
32 * Scene 200 - Credits - Motorcycle Training
33 *
34 *--------------------------------------------------------------------------*/
35
signal()36 void Scene200::Action1::signal() {
37 Scene200 *scene = (Scene200 *)BF_GLOBALS._sceneManager._scene;
38 SceneObject *owner = static_cast<SceneObject *>(this->_owner);
39
40 assert(owner);
41
42 switch (_actionIndex++) {
43 case 0:
44 setDelay(1);
45 break;
46 case 1:
47 BF_GLOBALS._scenePalette.loadPalette(235);
48 BF_GLOBALS._scenePalette.refresh();
49 _state = 0;
50 setDelay(30);
51 break;
52 case 2:
53 assert(_owner);
54 owner->animate(ANIM_MODE_5, this);
55 break;
56 case 3:
57 if (++_state < 2) {
58 scene->_action2.signal();
59 owner->setFrame(1);
60 _actionIndex = 2;
61 }
62 setDelay(2);
63 break;
64 case 4: {
65 PaletteRotation *rot;
66 rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
67 rot->setDelay(10);
68 rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
69 rot->setDelay(10);
70
71 scene->setAction(&scene->_sequenceManager, this, 201, &scene->_object1, &scene->_object2,
72 &scene->_object3, &scene->_object4, &scene->_object5, &scene->_object6, NULL);
73 break;
74 }
75 case 5:
76 BF_GLOBALS._sceneManager.changeScene(210);
77 break;
78 default:
79 break;
80 }
81 }
82
signal()83 void Scene200::Action2::signal() {
84 SceneObject *owner = static_cast<SceneObject *>(this->_owner);
85 assert(owner);
86
87 switch (_actionIndex++) {
88 case 1:
89 owner->setPosition(owner->_position, 0);
90 owner->animate(ANIM_MODE_5, this);
91 break;
92 case 2:
93 owner->setPosition(owner->_position, 1000);
94 owner->setFrame(1);
95 _actionIndex = 0;
96 setDelay(1);
97 break;
98 default:
99 break;
100 }
101 }
102
103
104 /*--------------------------------------------------------------------------*/
105
postInit(SceneObjectList * OwnerList)106 void Scene200::postInit(SceneObjectList *OwnerList) {
107 SceneExt::postInit();
108 loadScene(200);
109 setZoomPercents(0, 100, 200, 100);
110 BF_GLOBALS._sound1.play(3);
111
112 _object10.postInit();
113 _object10.setVisage(200);
114 _object10.setPosition(Common::Point(114, 102));
115 _object10.setStrip(2);
116 _object10.setFrame(1);
117 _object10.changeZoom(100);
118
119 _object1.postInit();
120 _object1.hide();
121 _object2.postInit();
122 _object2.hide();
123 _object3.postInit();
124 _object3.hide();
125 _object4.postInit();
126 _object4.hide();
127 _object5.postInit();
128 _object5.hide();
129 _object6.postInit();
130 _object6.hide();
131
132 _object11.postInit();
133 _object11.setVisage(200);
134 _object11.setPosition(Common::Point(96, 112), 1000);
135 _object11.setStrip(3);
136 _object11.setFrame(1);
137 _object11.changeZoom(100);
138
139 _object10.setAction(&_action1);
140 _object11.setAction(&_action2);
141 }
142
remove()143 void Scene200::remove() {
144 BF_GLOBALS._scenePalette.clearListeners();
145 SceneExt::remove();
146 }
147
148 /*--------------------------------------------------------------------------
149 * Scene 210 - Credits - Car Training
150 *
151 *--------------------------------------------------------------------------*/
152
signal()153 void Scene210::Action1::signal() {
154 Scene210 *scene = (Scene210 *)BF_GLOBALS._sceneManager._scene;
155 SceneObject *owner = static_cast<SceneObject *>(_owner);
156 assert(owner);
157
158 switch (_actionIndex++) {
159 case 0:
160 setDelay(1);
161 break;
162 case 1:
163 owner->animate(ANIM_MODE_5, this);
164 break;
165 case 2: {
166 PaletteRotation *rot;
167 rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
168 rot->setDelay(10);
169 rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
170 rot->setDelay(10);
171
172 scene->setAction(&scene->_sequenceManager, this, 210, &scene->_object10, &scene->_object11,
173 &scene->_object12, &scene->_object13, &scene->_object14, &scene->_object15, NULL);
174 break;
175 }
176 case 3:
177 BF_GLOBALS._sceneManager.changeScene(220);
178 break;
179 default:
180 break;
181 }
182 }
183
184 /*--------------------------------------------------------------------------*/
185
postInit(SceneObjectList * OwnerList)186 void Scene210::postInit(SceneObjectList *OwnerList) {
187 SceneExt::postInit();
188 loadScene(210);
189
190 // FIXME: This fixes an obvious glitch during scene transition.
191 // Shouldn't it be included in the 2 previous functions?
192 clearScreen();
193 //
194
195 BF_GLOBALS._scenePalette.loadPalette(235);
196 BF_GLOBALS._scenePalette.refresh();
197
198 _object9.postInit();
199 _object9.setVisage(210);
200 _object9.setPosition(Common::Point(146, 151));
201 _object9.setStrip(1);
202 _object9.setFrame(1);
203 _object9.changeZoom(100);
204 _object9.setAction(&_action1);
205
206 _object10.postInit();
207 _object10.hide();
208 _object11.postInit();
209 _object11.hide();
210 _object12.postInit();
211 _object12.hide();
212 _object13.postInit();
213 _object13.hide();
214 _object14.postInit();
215 _object14.hide();
216 _object15.postInit();
217 _object15.hide();
218 }
219
remove()220 void Scene210::remove() {
221 BF_GLOBALS._scenePalette.clearListeners();
222 SceneExt::remove();
223 }
224
225 /*--------------------------------------------------------------------------
226 * Scene 220 - Credits - Martial Arts
227 *
228 *--------------------------------------------------------------------------*/
229
signal()230 void Scene220::Action1::signal() {
231 Scene220 *scene = (Scene220 *)BF_GLOBALS._sceneManager._scene;
232
233 switch (_actionIndex++) {
234 case 0:
235 setDelay(1);
236 break;
237 case 1:
238 BF_GLOBALS._scenePalette.loadPalette(235);
239 BF_GLOBALS._scenePalette.refresh();
240 setDelay(30);
241 break;
242 case 2:
243 BF_GLOBALS._scenePalette.clearListeners();
244 scene->_object2.animate(ANIM_MODE_5, this);
245 break;
246 case 3:
247 scene->_object2.setVisage(221);
248 scene->_object2.setFrame(1);
249 scene->_object2.setPosition(Common::Point(178, 122));
250 scene->_object2.animate(ANIM_MODE_5, this);
251 break;
252 case 4:
253 BF_GLOBALS._scenePalette.loadPalette(2);
254 BF_GLOBALS._scenePalette.refresh();
255 BF_GLOBALS._scenePalette.loadPalette(235);
256 BF_GLOBALS._scenePalette.refresh();
257 setDelay(5);
258 break;
259 case 5:
260 scene->_object1.remove();
261
262 scene->_object2.setVisage(222);
263 scene->_object2.setFrame(1);
264 scene->_object2.setPosition(Common::Point(164, 138));
265 scene->_object2.animate(ANIM_MODE_5, this);
266 break;
267 case 6:
268 scene->_object2.setVisage(223);
269 scene->_object2.setFrame(1);
270 scene->_object2.setPosition(Common::Point(164, 139));
271 scene->_object2.animate(ANIM_MODE_5, this);
272 break;
273 case 7:
274 scene->_object2.setVisage(230);
275 scene->_object2.setFrame(1);
276 scene->_object2.setPosition(Common::Point(168, 136));
277 scene->_object2.animate(ANIM_MODE_4, 13, 1, this);
278 break;
279 case 8:
280 scene->_object2.animate(ANIM_MODE_5, this);
281
282 scene->_object3.postInit();
283 scene->_object3.setVisage(231);
284 scene->_object3.setPosition(Common::Point(65, 179));
285 scene->_object3.setStrip(1);
286 scene->_object3.setFrame(1);
287 scene->_object3.changeZoom(100);
288 scene->_object3.setAction(&scene->_action2, this);
289 break;
290 case 9:
291 break;
292 case 10:
293 scene->_object2.setVisage(224);
294 scene->_object2.setFrame(1);
295 scene->_object2.setPosition(Common::Point(148, 143));
296 scene->_object2.animate(ANIM_MODE_5, this);
297 break;
298 case 11: {
299 PaletteRotation *rot;
300 rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
301 rot->setDelay(10);
302 rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
303 rot->setDelay(10);
304
305 scene->setAction(&scene->_sequenceManager, this, 220, &scene->_object4, &scene->_object5,
306 &scene->_object6, &scene->_object7, &scene->_object8, &scene->_object9, NULL);
307 break;
308 }
309 case 12:
310 scene->_object2.setVisage(232);
311 scene->_object2.setFrame(1);
312 scene->_object2.setPosition(Common::Point(146, 143));
313 scene->_object2._numFrames = 5;
314 scene->_object2.animate(ANIM_MODE_5, this);
315 break;
316 case 13:
317 scene->_object2.setVisage(228);
318 scene->_object2.setFrame(1);
319 scene->_object2.animate(ANIM_MODE_5, this);
320 break;
321 case 14:
322 scene->_object2.setVisage(229);
323 scene->_object2.setFrame(1);
324 scene->_object2.animate(ANIM_MODE_5, this);
325 break;
326 case 15:
327 BF_GLOBALS._sceneManager.changeScene(225);
328 break;
329 default:
330 break;
331 }
332 }
333
signal()334 void Scene220::Action2::signal() {
335 Scene220 *scene = (Scene220 *)BF_GLOBALS._sceneManager._scene;
336
337 switch (_actionIndex++) {
338 case 0:
339 scene->_object3.setPosition(scene->_object3._position);
340 scene->_object3.animate(ANIM_MODE_5, this);
341 break;
342 case 1:
343 setDelay(50);
344 break;
345 case 2:
346 scene->_object3.remove();
347 remove();
348 break;
349 default:
350 break;
351 }
352 }
353
354 /*--------------------------------------------------------------------------*/
355
postInit(SceneObjectList * OwnerList)356 void Scene220::postInit(SceneObjectList *OwnerList) {
357 SceneExt::postInit();
358 loadScene(220);
359
360 // FIXME: This fixes an obvious glitch during scene transition.
361 // Shouldn't it be included in the 2 previous functions?
362 clearScreen();
363 //
364
365 _object2.postInit();
366 _object2.setVisage(220);
367 _object2.setPosition(Common::Point(182, 122));
368 _object2.setStrip(1);
369 _object2.setFrame(1);
370 _object2.changeZoom(100);
371
372 _object1.postInit();
373 _object1.setVisage(220);
374 _object1.setPosition(Common::Point(164, 138));
375 _object1.setStrip(2);
376 _object1.setFrame(1);
377 _object1.changeZoom(100);
378
379 _object4.postInit();
380 _object4.hide();
381 _object5.postInit();
382 _object5.hide();
383 _object6.postInit();
384 _object6.hide();
385 _object7.postInit();
386 _object7.hide();
387 _object8.postInit();
388 _object8.hide();
389 _object9.postInit();
390 _object9.hide();
391
392 _object2.setAction(&_action1);
393 }
394
remove()395 void Scene220::remove() {
396 BF_GLOBALS._scenePalette.clearListeners();
397 SceneExt::remove();
398 }
399
400 /*--------------------------------------------------------------------------
401 * Scene 225 - Credits - Gun Training
402 *
403 *--------------------------------------------------------------------------*/
404
signal()405 void Scene225::Action1::signal() {
406 Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
407 SceneObject *owner = static_cast<SceneObject *>(this->_owner);
408
409 switch (_actionIndex++) {
410 case 0:
411 setDelay(30);
412 break;
413 case 1:
414 BF_GLOBALS._scenePalette.loadPalette(235);
415 BF_GLOBALS._scenePalette.refresh();
416 setDelay(5);
417 break;
418 case 2:
419 owner->animate(ANIM_MODE_4, 7, 1, this);
420 break;
421 case 3:
422 scene->_object8.animate(ANIM_MODE_5, this);
423 owner->animate(ANIM_MODE_5, this);
424 break;
425 case 4:
426 scene->_object8.remove();
427 break;
428 case 5:
429 scene->_action3.signal();
430 break;
431 case 6:
432 owner->setPosition(Common::Point(owner->_position.x, owner->_position.y - 4));
433 owner->setStrip(2);
434 owner->setFrame(1);
435 owner->animate(ANIM_MODE_5, this);
436 break;
437 case 7:
438 scene->_action2.signal();
439 break;
440 case 8:
441 owner->animate(ANIM_MODE_6, this);
442 break;
443 case 9:
444 owner->setPosition(Common::Point(owner->_position.x - 2, owner->_position.y - 1));
445 owner->setStrip(3);
446 owner->setFrame(1);
447 owner->animate(ANIM_MODE_5, this);
448 break;
449 case 10: {
450 owner->setPosition(Common::Point(owner->_position.x + 10, owner->_position.y + 4));
451 owner->setStrip(4);
452 owner->setFrame(1);
453 owner->fixPriority(116);
454 owner->animate(ANIM_MODE_1, NULL);
455
456 Common::Point destPos(138, 117);
457 NpcMover *mover = new NpcMover();
458 owner->addMover(mover, &destPos, this);
459 break;
460 }
461 case 11: {
462 owner->setPosition(Common::Point(owner->_position.x - 12, owner->_position.y - 1));
463 owner->setStrip(5);
464 owner->setFrame(1);
465 owner->_moveDiff.x = 8;
466
467 Common::Point destPos(402, 116);
468 NpcMover *mover2 = new NpcMover();
469 owner->addMover(mover2, &destPos, this);
470
471 BF_GLOBALS._player.setPosition(Common::Point(owner->_position.x, 0));
472 ADD_MOVER_NULL(BF_GLOBALS._player, 500, 0);
473 break;
474 }
475 case 12:
476 owner->setVisage(1227);
477 owner->setStrip(1);
478 owner->setFrame(1);
479 owner->animate(ANIM_MODE_5, this);
480 break;
481 case 13:
482 owner->setStrip(2);
483 owner->setFrame(4);
484 scene->_action4.signal();
485 break;
486 case 14:
487 owner->animate(ANIM_MODE_6, this);
488 break;
489 case 15:
490 scene->_action6.signal();
491 break;
492 case 16:
493 owner->animate(ANIM_MODE_4, 4, 1, this);
494 break;
495 case 17:
496 owner->setFrame(6);
497 owner->animate(ANIM_MODE_5, this);
498 break;
499 case 18:
500 scene->_action5.signal();
501 break;
502 case 19:
503 owner->animate(ANIM_MODE_4, 4, -1, this);
504 break;
505 case 20:
506 PaletteRotation *rot;
507 rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
508 rot->setDelay(10);
509 rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
510 rot->setDelay(10);
511
512 scene->setAction(&scene->_sequenceManager, this, 225, &scene->_object15, &scene->_object16,
513 &scene->_object17, &scene->_object18, &scene->_object19, &scene->_object20, NULL);
514 break;
515 case 21:
516 scene->_object21.hide();
517 BF_GLOBALS._player._moveDiff.x = 5;
518 BF_GLOBALS._sceneManager.changeScene(265);
519 break;
520 default:
521 break;
522 }
523 }
524
signal()525 void Scene225::Action2::signal() {
526 Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
527 SceneObject *owner = static_cast<SceneObject *>(this->_owner);
528
529 switch (_actionIndex++) {
530 case 0:
531 break;
532 case 1:
533 owner->animate(ANIM_MODE_5, this);
534 break;
535 case 2:
536 owner->setStrip(3);
537 owner->setFrame(2);
538 scene->_action1.signal();
539 break;
540 default:
541 break;
542 }
543 }
544
signal()545 void Scene225::Action3::signal() {
546 Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
547 SceneObject *owner = static_cast<SceneObject *>(this->_owner);
548
549 switch (_actionIndex++) {
550 case 0:
551 break;
552 case 1:
553 owner->animate(ANIM_MODE_5, this);
554 break;
555 case 2:
556 owner->setStrip(3);
557 owner->setFrame(1);
558 scene->_action1.signal();
559 break;
560 default:
561 break;
562 }
563 }
564
signal()565 void Scene225::Action4::signal() {
566 Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
567 SceneObject *owner = static_cast<SceneObject *>(this->_owner);
568
569 switch (_actionIndex++) {
570 case 0:
571 break;
572 case 1:
573 owner->animate(ANIM_MODE_5, this);
574 break;
575 case 2:
576 owner->setStrip(5);
577 owner->setFrame(4);
578 scene->_action1.signal();
579 break;
580 default:
581 break;
582 }
583 }
584
signal()585 void Scene225::Action5::signal() {
586 Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
587 SceneObject *owner = static_cast<SceneObject *>(this->_owner);
588
589 switch (_actionIndex++) {
590 case 0:
591 break;
592 case 1:
593 owner->animate(ANIM_MODE_5, this);
594 break;
595 case 2:
596 owner->setStrip(3);
597 owner->setFrame(6);
598 scene->_action1.signal();
599 break;
600 default:
601 break;
602 }
603 }
604
signal()605 void Scene225::Action6::signal() {
606 Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
607 SceneObject *owner = static_cast<SceneObject *>(this->_owner);
608
609 switch (_actionIndex++) {
610 case 0:
611 break;
612 case 1:
613 owner->animate(ANIM_MODE_5, this);
614 break;
615 case 2:
616 owner->setStrip(3);
617 owner->setFrame(3);
618 scene->_action1.signal();
619 break;
620 default:
621 break;
622 }
623 }
624
625 /*--------------------------------------------------------------------------*/
626
postInit(SceneObjectList * OwnerList)627 void Scene225::postInit(SceneObjectList *OwnerList) {
628 SceneExt::postInit();
629 loadScene(1225);
630 loadBackground(-320, 0);
631
632 _object8.postInit();
633 _object8.setVisage(1225);
634 _object8.setPosition(Common::Point(114, 119));
635 _object8._frame = 1;
636 _object8.setStrip(2);
637 _object8.changeZoom(100);
638
639 _object9.postInit();
640 _object9.setVisage(1226);
641 _object9.setPosition(Common::Point(83, 128));
642 _object9.setStrip(1);
643 _object9.changeZoom(100);
644
645 BF_GLOBALS._player.postInit();
646 BF_GLOBALS._player.setPosition(Common::Point(83, 0));
647 BF_GLOBALS._player.hide();
648
649 _object10.postInit();
650 _object10.setVisage(1225);
651 _object10.setPosition(Common::Point(237, 29));
652 _object10.setStrip(1);
653 _object10._frame = 1;
654 _object10.changeZoom(100);
655 _object10._numFrames = 2;
656
657 _object11.postInit();
658 _object11.setVisage(1225);
659 _object11.setPosition(Common::Point(290, 47));
660 _object11.setStrip(1);
661 _object11._frame = 1;
662 _object11.changeZoom(100);
663 _object11._numFrames = 2;
664
665 _object12.postInit();
666 _object12.setVisage(1225);
667 _object12.setPosition(Common::Point(368, 35));
668 _object12.setStrip(4);
669 _object12._frame = 1;
670 _object12.changeZoom(100);
671 _object12._numFrames = 2;
672
673 _object13.postInit();
674 _object13.setVisage(1225);
675 _object13.setPosition(Common::Point(416, 33));
676 _object13.setStrip(1);
677 _object13._frame = 1;
678 _object13.changeZoom(100);
679 _object13._numFrames = 2;
680
681 _object14.postInit();
682 _object14.setVisage(1225);
683 _object14.setPosition(Common::Point(476, 30));
684 _object14.setStrip(1);
685 _object14._frame = 1;
686 _object14.changeZoom(100);
687 _object14._numFrames = 2;
688
689 _object21.postInit();
690 _object21.setVisage(235);
691 _object21.setStrip(1);
692 _object21._frame = 1;
693 _object21.setPosition(Common::Point(498, 41));
694 _object21.changeZoom(100);
695 _object21.hide();
696
697 _object15.postInit();
698 _object15.hide();
699 _object16.postInit();
700 _object16.hide();
701 _object17.postInit();
702 _object17.hide();
703 _object18.postInit();
704 _object18.hide();
705 _object19.postInit();
706 _object19.hide();
707 _object20.postInit();
708 _object20.hide();
709
710 _object9.setAction(&_action1);
711 _object10.setAction(&_action2);
712 _object11.setAction(&_action3);
713 _object12.setAction(&_action4);
714 _object13.setAction(&_action5);
715 _object14.setAction(&_action6);
716 }
717
remove()718 void Scene225::remove() {
719 BF_GLOBALS._scenePalette.clearListeners();
720 SceneExt::remove();
721 }
722
723 /*--------------------------------------------------------------------------
724 * Scene 265 - Intro - Graduation Article
725 *
726 *--------------------------------------------------------------------------*/
727
signal()728 void Scene265::Action1::signal() {
729 switch (_actionIndex++) {
730 case 0:
731 BF_GLOBALS._scenePalette.loadPalette(2);
732 setDelay(30);
733 break;
734 case 1:
735 BF_GLOBALS._scenePalette.refresh();
736 setDelay(240);
737 break;
738 case 2:
739 ADD_MOVER(BF_GLOBALS._player, 160, 280);
740 break;
741 case 3:
742 // Wait until sound finishes playing
743 if (BF_GLOBALS._sound1.isPlaying())
744 _actionIndex = 3;
745 setDelay(1);
746 break;
747 case 4:
748 BF_GLOBALS._dayNumber = 1;
749 BF_GLOBALS._sceneManager.changeScene(190);
750 break;
751 default:
752 break;
753 }
754 }
755
756 /*--------------------------------------------------------------------------*/
757
postInit(SceneObjectList * OwnerList)758 void Scene265::postInit(SceneObjectList *OwnerList) {
759 SceneExt::postInit();
760 loadScene(265);
761
762 BF_GLOBALS._player.postInit();
763 BF_GLOBALS._player.setPosition(Common::Point(160, 100));
764 BF_GLOBALS._player.hide();
765 setAction(&_action1);
766 }
767
remove()768 void Scene265::remove() {
769 clearScreen();
770 SceneExt::remove();
771 }
772
773 /*--------------------------------------------------------------------------
774 * Scene 270 - Living Room & Kitchen
775 *
776 *--------------------------------------------------------------------------*/
777
signal()778 void Scene270::Action1::signal() {
779 Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
780
781 scene->setAction(&scene->_sequenceManager2, this, 2703, &scene->_tv, NULL);
782 }
783
784 /*--------------------------------------------------------------------------*/
785
startAction(CursorType action,Event & event)786 bool Scene270::Lyle::startAction(CursorType action, Event &event) {
787 Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
788
789 switch (action) {
790 case CURSOR_TALK:
791 scene->_field21A0 = 1;
792 BF_GLOBALS._player.disableControl();
793 scene->_sceneMode = 2706;
794
795 if (scene->_field380 == 1) {
796 scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object2, NULL);
797 } else {
798 scene->signal();
799 }
800 return true;
801 case INV_CRATE1:
802 scene->_field21A0 = 2;
803 BF_GLOBALS._player.disableControl();
804 scene->_sceneMode = 2706;
805
806 if (scene->_field380 == 1) {
807 scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, NULL);
808 } else {
809 scene->signal();
810 }
811 return true;
812 default:
813 return NamedObject::startAction(action, event);
814 }
815 }
816
startAction(CursorType action,Event & event)817 bool Scene270::Grandma::startAction(CursorType action, Event &event) {
818 Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
819
820 switch (action) {
821 case CURSOR_TALK:
822 switch (BF_GLOBALS._dayNumber) {
823 case 1:
824 // Day 1
825 if (scene->_field380 == 1) {
826 scene->_stripManager.start((scene->_grandma._position.x == 157) ? 2712 : 2723, &BF_GLOBALS._stripProxy);
827 } else if (BF_GLOBALS._bookmark == bBookedFrankieEvidence) {
828 BF_GLOBALS._player.disableControl();
829 scene->_sceneMode = 2710;
830 scene->setAction(&scene->_sequenceManager1, scene, 2710, &BF_GLOBALS._player, &scene->_grandma, NULL);
831 } else if (BF_GLOBALS.getFlag(onDuty) || (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) == 2) ||
832 (scene->_field386 != 0)) {
833 scene->_stripManager.start(2723, &BF_GLOBALS._stripProxy);
834 } else {
835 BF_GLOBALS._player.disableControl();
836 scene->_sceneMode = 2715;
837 scene->setAction(&scene->_sequenceManager1, scene, 2715, &BF_GLOBALS._player, &scene->_grandma, NULL);
838 }
839 return true;
840 case 3:
841 // Day 3
842 if (scene->_field380 == 1) {
843 scene->_stripManager.start(2712, &BF_GLOBALS._stripProxy);
844 } else if (BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3)) {
845 scene->_stripManager.start(2714, &BF_GLOBALS._stripProxy);
846 } else {
847 BF_GLOBALS._player.disableControl();
848 scene->_sceneMode = 2713;
849 scene->setAction(&scene->_sequenceManager1, scene, 2713, &BF_GLOBALS._player, &scene->_grandma, NULL);
850 }
851 return true;
852 default:
853 break;
854 }
855 break;
856 default:
857 break;
858 }
859
860 return NamedObject::startAction(action, event);
861 }
862
863 /*--------------------------------------------------------------------------*/
864
startAction(CursorType action,Event & event)865 bool Scene270::Item::startAction(CursorType action, Event &event) {
866 Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
867
868 if ((action == CURSOR_USE) && (scene->_field380 == 0)) {
869 BF_GLOBALS._player.disableControl();
870 scene->_object2.postInit();
871 scene->_object2.hide();
872 scene->_sceneMode = 2705;
873 scene->setAction(&scene->_sequenceManager1, scene, 2705, &BF_GLOBALS._player, &scene->_object2, NULL);
874 return true;
875 } else {
876 return NamedHotspot::startAction(action, event);
877 }
878 }
879
startAction(CursorType action,Event & event)880 bool Scene270::Exit::startAction(CursorType action, Event &event) {
881 Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
882
883 if (!_action && !scene->_field384 && !scene->_field386) {
884 if (scene->_field380 == 1) {
885 scene->_tempPos = Common::Point(320, 140);
886 BF_GLOBALS._player.disableControl();
887
888 scene->_sceneMode = 2706;
889 scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object2, NULL);
890 } else {
891 ADD_PLAYER_MOVER(320, 140);
892 }
893 return true;
894 } else {
895 return false;
896 }
897 }
898
899 /*--------------------------------------------------------------------------*/
900
Scene270()901 Scene270::Scene270(): SceneExt() {
902 _field380 = _field382 =_field384 = _field386 = 0;
903 _field219A = _tempPos.x = _tempPos.y = _field21A0 = 0;
904 _sceneMode = 0;
905 }
906
synchronize(Serializer & s)907 void Scene270::synchronize(Serializer &s) {
908 SceneExt::synchronize(s);
909 s.syncAsSint16LE(_field380);
910 s.syncAsSint16LE(_field382);
911 s.syncAsSint16LE(_field384);
912 s.syncAsSint16LE(_field386);
913 s.syncAsSint16LE(_field219A);
914 s.syncAsSint16LE(_tempPos.x);
915 s.syncAsSint16LE(_tempPos.y);
916 s.syncAsSint16LE(_field21A0);
917 }
918
postInit(SceneObjectList * OwnerList)919 void Scene270::postInit(SceneObjectList *OwnerList) {
920 SceneExt::postInit();
921 loadScene(270);
922 setZoomPercents(120, 90, 130, 100);
923
924 if (BF_GLOBALS._sceneManager._previousScene != 560)
925 BF_GLOBALS._sound1.fadeSound(26);
926
927 _exit.setDetails(Rect(310, 115, 320, 167), 270, -1, -1, -1, 1, NULL);
928
929 if (BF_GLOBALS._dayNumber == 0) {
930 BF_GLOBALS._dayNumber = 1;
931 BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 2);
932 BF_INVENTORY.setObjectScene(INV_CRATE1, 1);
933 BF_GLOBALS._sceneManager._previousScene = 710;
934 }
935
936 if (((BF_GLOBALS._bookmark >= bLauraToParamedics) && (BF_GLOBALS._dayNumber == 1) &&
937 (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 2) &&
938 (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 1)) ||
939 ((BF_GLOBALS._dayNumber == 3) && BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3))) {
940 BF_GLOBALS._walkRegions.disableRegion(6);
941 BF_GLOBALS._walkRegions.disableRegion(14);
942 BF_GLOBALS._walkRegions.disableRegion(19);
943
944 _grandma.postInit();
945 _grandma.setVisage(274);
946 _grandma.setPosition(Common::Point(157, 132));
947 _grandma._numFrames = 5;
948 _grandma.animate(ANIM_MODE_2, NULL);
949 _grandma.fixPriority(129);
950 }
951
952 if (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard) {
953 _grandma.postInit();
954 }
955
956 if (BF_GLOBALS._sceneManager._previousScene == 710) {
957 _skip.postInit();
958 _laura.postInit();
959 _lyle.postInit();
960 _grandma.postInit();
961 }
962
963 _stripManager.addSpeaker(&_grandmaSpeaker);
964 _stripManager.addSpeaker(&_lyleSpeaker);
965 _stripManager.addSpeaker(&_jakeSpeaker);
966 _stripManager.addSpeaker(&_skipSpeaker);
967 _stripManager.addSpeaker(&_lauraSpeaker);
968 _stripManager.addSpeaker(&_gameTextSpeaker);
969
970 _tv.postInit();
971 _tv.setVisage(270);
972 _tv.setPosition(Common::Point(264, 74));
973 _tv.setStrip(5);
974 _tv.fixPriority(132);
975 _tv._numFrames = 3;
976 _tv.setAction(&_action1);
977
978 _fireplace.postInit();
979 _fireplace.setVisage(270);
980 _fireplace.setStrip(2);
981 _fireplace.setPosition(Common::Point(302, 121));
982 _fireplace.fixPriority(132);
983 _fireplace.animate(ANIM_MODE_2, NULL);
984
985 _fridge.setDetails(Rect(0, 56, 56, 130), 270, 9, 10, 11, 1, NULL);
986 _object3.setDetails(270, 12, 13, 14, 1, (SceneItem *)NULL);
987 _laura.setDetails(270, 15, -1, -1, 1, (SceneItem *)NULL);
988 _skip.setDetails(270, 14, -1, -1, 1, (SceneItem *)NULL);
989 _lyle.setDetails(270, 34, 35, 36, 1, (SceneItem *)NULL);
990 _tv.setDetails(270, 3, 4, 5, 1, (SceneItem *)NULL);
991 _fireplace.setDetails(270, 6, 7, 8, 1, (SceneItem *)NULL);
992
993 if ((BF_GLOBALS._sceneManager._previousScene == 710) && (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard)) {
994 _grandma.setDetails(270, 15, 16, 17, 1, (SceneItem *)NULL);
995 } else {
996 _grandma.setDetails(270, 40, 16, 17, 1, (SceneItem *)NULL);
997 }
998
999 _afgan.setDetails(4, 270, 27, 28, 29, 1);
1000 _couch.setDetails(1, 270, 18, 19, 20, 1);
1001 _photos.setDetails(Rect(278, 50, 318, 72), 270, 21, 22, 23, 1, NULL);
1002 _appliances.setDetails(3, 270, 24, 25, 26, 1);
1003 _ivy.setDetails(2, 270, 30, 31, 32, 1);
1004 _background.setDetails(Rect(0, 0, 320, 168), 270, 0, 1, 2, 1, NULL);
1005
1006 BF_GLOBALS._player.postInit();
1007 BF_GLOBALS._player._moveDiff.x = 8;
1008 BF_GLOBALS._player.changeZoom(-1);
1009 BF_GLOBALS._player.disableControl();
1010
1011 switch (BF_GLOBALS._sceneManager._previousScene) {
1012 case 560:
1013 if (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard) {
1014 _field219A = 1;
1015 BF_GLOBALS._player._moveDiff.x = 5;
1016 _field386 = 0;
1017
1018 _grandma.animate(ANIM_MODE_1, NULL);
1019 setAction(&_sequenceManager1, NULL, 2720, &BF_GLOBALS._player, &_grandma, NULL);
1020 BF_GLOBALS._bookmark = bLyleStoppedBy;
1021 } else {
1022 _sceneMode = 2700;
1023 setAction(&_sequenceManager1, this, 2700, &BF_GLOBALS._player, NULL);
1024 }
1025 break;
1026 case 690:
1027 BF_GLOBALS._player.setPosition(Common::Point(-13, 162));
1028 _sceneMode = 2702;
1029 setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
1030 break;
1031 case 710:
1032 BF_GLOBALS._player._moveDiff.x = 6;
1033 _sceneMode = 2717;
1034 setAction(&_sequenceManager1, this, 2717, &BF_GLOBALS._player, &_laura, &_skip, &_lyle, &_grandma, NULL);
1035 break;
1036 default:
1037 _sceneMode = 2701;
1038 setAction(&_sequenceManager1, this, 2701, &BF_GLOBALS._player, NULL);
1039 break;
1040 }
1041 }
1042
signal()1043 void Scene270::signal() {
1044 switch (_sceneMode) {
1045 case 10:
1046 _sceneMode = 2702;
1047 setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
1048 break;
1049 case 11:
1050 BF_GLOBALS._player._strip = 8;
1051 BF_GLOBALS._player._frame = 1;
1052
1053 if (_field382) {
1054 _sceneMode = 2719;
1055 _stripManager.start(2720, this);
1056 } else {
1057 _field382 = 1;
1058 _sceneMode = 13;
1059 _stripManager.start(2718, this);
1060 }
1061 break;
1062 case 12:
1063 BF_GLOBALS._player._strip = 8;
1064 BF_GLOBALS._player._frame = 1;
1065 _sceneMode = 13;
1066 _stripManager.start(2719, this);
1067 break;
1068 case 13:
1069 case 2713:
1070 case 2715:
1071 BF_GLOBALS._player.enableControl();
1072 break;
1073 case 2700:
1074 _field219A = 1;
1075 BF_GLOBALS._player._strip = 6;
1076 BF_GLOBALS._player.enableControl();
1077 break;
1078 case 2701:
1079 BF_GLOBALS._player._strip = 2;
1080 BF_GLOBALS._player.enableControl();
1081 _field219A = 1;
1082 break;
1083 case 2702:
1084 BF_GLOBALS._player._strip = 1;
1085 BF_GLOBALS._player.enableControl();
1086 _field219A = 1;
1087 break;
1088 case 2705:
1089 _field380 = 1;
1090 BF_GLOBALS._player.enableControl();
1091 break;
1092 case 2706:
1093 BF_GLOBALS._player.changeZoom(-1);
1094 _object2.remove();
1095 _field380 = 0;
1096
1097 switch (_field21A0) {
1098 case 1:
1099 _sceneMode = 11;
1100 ADD_PLAYER_MOVER(192, 135);
1101 break;
1102 case 2:
1103 if (BF_GLOBALS.getFlag(shownLyleCrate1Day1)) {
1104 SceneItem::display2(270, 37);
1105 BF_GLOBALS._player.enableControl();
1106 } else {
1107 T2_GLOBALS._uiElements.addScore(30);
1108 BF_GLOBALS.setFlag(shownLyleCrate1Day1);
1109 _sceneMode = 12;
1110 ADD_PLAYER_MOVER(192, 135);
1111 }
1112 break;
1113 default:
1114 BF_GLOBALS._player.enableControl();
1115 ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, _tempPos.x, _tempPos.y);
1116 break;
1117 }
1118
1119 _field21A0 = 0;
1120 break;
1121 case 2710:
1122 BF_GLOBALS._bookmark = bEndOfWorkDayOne;
1123 BF_GLOBALS._player.enableControl();
1124 break;
1125 case 2711:
1126 BF_GLOBALS._player.setPosition(Common::Point(150, 300));
1127 BF_GLOBALS._sound1.fadeOut2(NULL);
1128 BF_GLOBALS._sceneManager.changeScene(180);
1129 BF_GLOBALS._bookmark = bLyleStoppedBy;
1130 break;
1131 case 2712:
1132 BF_GLOBALS._sound1.fadeOut2(NULL);
1133 BF_GLOBALS._sceneManager.changeScene(180);
1134 break;
1135 case 2714:
1136 BF_GLOBALS._sceneManager.changeScene(560);
1137 break;
1138 case 2717:
1139 _sceneMode = 2718;
1140 _lyle.setFrame2(-1);
1141 setAction(&_sequenceManager1, this, 2718, &BF_GLOBALS._player, &_laura, &_skip,
1142 &_lyle, &_grandma, NULL);
1143 break;
1144 case 2718:
1145 BF_GLOBALS._walkRegions.disableRegion(6);
1146 BF_GLOBALS._walkRegions.disableRegion(14);
1147 BF_GLOBALS._walkRegions.disableRegion(19);
1148
1149 _field219A = 1;
1150 BF_GLOBALS._bookmark = bTalkedToGrannyAboutSkipsCard;
1151
1152 _grandma.setStrip(8);
1153 _grandma._frame = 5;
1154 _field384 = 1;
1155 _field386 = 1;
1156
1157 BF_GLOBALS._player._moveDiff.x = 8;
1158 BF_GLOBALS._player.enableControl();
1159 break;
1160 case 2719:
1161 _sceneMode = 13;
1162 _field384 = 0;
1163 BF_GLOBALS._player._moveDiff.x = 6;
1164
1165 _lyle.setFrame2(-1);
1166 setAction(&_sequenceManager1, this, 2719, &BF_GLOBALS._player, &_lyle, &_grandma, NULL);
1167 break;
1168 default:
1169 break;
1170 }
1171 }
1172
process(Event & event)1173 void Scene270::process(Event &event) {
1174 if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
1175 (_field380 == 1) && !_action) {
1176 _tempPos = event.mousePos;
1177 BF_GLOBALS._player.disableControl();
1178 _sceneMode = 2706;
1179 setAction(&_sequenceManager1, this, 2706, &BF_GLOBALS._player, &_object2, NULL);
1180 event.handled = true;
1181 }
1182
1183 SceneExt::process(event);
1184
1185 if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1)) &&
1186 !_field384 && !_field386) {
1187 // Check if the cursor is on an exit
1188 if (_exit.contains(event.mousePos)) {
1189 GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_E);
1190 BF_GLOBALS._events.setCursor(surface);
1191 } else {
1192 // In case an exit cursor was being shown, restore the previously selected cursor
1193 CursorType cursorId = BF_GLOBALS._events.getCursor();
1194 BF_GLOBALS._events.setCursor(cursorId);
1195 }
1196 }
1197 }
1198
dispatch()1199 void Scene270::dispatch() {
1200 if (_field384) {
1201 _lyle.updateAngle(BF_GLOBALS._player._position);
1202
1203 if (_lyle._angle < 110)
1204 _lyle.setFrame2(4);
1205 else if (_lyle._angle < 180)
1206 _lyle.setFrame2(3);
1207 else if (_lyle._angle < 250)
1208 _lyle.setFrame2(2);
1209 else
1210 _lyle.setFrame2(1);
1211 }
1212
1213 if (_field386) {
1214 if (BF_GLOBALS._player._position.x > 290) {
1215 _grandma.setFrame(6);
1216 } else if (BF_GLOBALS._player._position.x > 274) {
1217 _grandma.setFrame(5);
1218 } else if (BF_GLOBALS._player._position.x > 258) {
1219 _grandma.setFrame(4);
1220 } else if (BF_GLOBALS._player._position.x > 242) {
1221 _grandma.setFrame(3);
1222 } else if (BF_GLOBALS._player._position.x > 226) {
1223 _grandma.setFrame(2);
1224 } else if (BF_GLOBALS._player._position.x > 210) {
1225 if ((_grandma._animateMode == ANIM_MODE_NONE) && (_grandma._frame > 1))
1226 _grandma.animate(ANIM_MODE_6, NULL);
1227 } else {
1228 if ((_grandma._animateMode == ANIM_MODE_NONE) && (_grandma._frame < 3))
1229 _grandma.animate(ANIM_MODE_4, 3, 1, NULL);
1230 }
1231 }
1232
1233 if (!_action && _field219A) {
1234 if ((BF_GLOBALS._player._position.x > 236) && (BF_GLOBALS._player._position.y < 125)) {
1235 _field219A = 0;
1236 BF_GLOBALS._player.disableControl();
1237 if (!_field384) {
1238 BF_GLOBALS._sceneManager.changeScene(560);
1239 } else {
1240 BF_GLOBALS._player.addMover(NULL);
1241 SceneItem::display2(270, 38);
1242 _sceneMode = 2700;
1243 ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 10, BF_GLOBALS._player._position.y + 15);
1244 }
1245 }
1246
1247 if (BF_GLOBALS._player._position.x <= 20) {
1248 _field219A = 0;
1249 BF_GLOBALS._player.disableControl();
1250 BF_GLOBALS._player.addMover(NULL);
1251 BF_GLOBALS._player._strip = 3;
1252 BF_GLOBALS._player._frame = 1;
1253
1254 if (BF_GLOBALS._sceneObjects->contains(&_grandma)) {
1255 _sceneMode = 10;
1256 _stripManager.start(2711, this);
1257 } else {
1258 SceneItem::display2(270, 33);
1259 _sceneMode = 2702;
1260 setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
1261 }
1262 }
1263
1264 if (BF_GLOBALS._player._position.x > 310) {
1265 _field219A = 0;
1266 BF_GLOBALS._player.disableControl();
1267 if (!_field384 && !_field386) {
1268 _sceneMode = 2712;
1269 setAction(&_sequenceManager1, this, 2712, &BF_GLOBALS._player, NULL);
1270 } else {
1271 BF_GLOBALS._player.addMover(NULL);
1272 BF_GLOBALS._player._strip = 2;
1273 BF_GLOBALS._player._frame = 1;
1274 SceneItem::display2(270, !_field384 ? 39 : 38);
1275 _sceneMode = 2701;
1276
1277 ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 10, BF_GLOBALS._player._position.y);
1278 }
1279 }
1280 }
1281
1282 SceneExt::dispatch();
1283 }
1284
1285 /*--------------------------------------------------------------------------
1286 * Scene 271 - Living Room & Kitchen #2
1287 *
1288 *--------------------------------------------------------------------------*/
1289
signal()1290 void Scene271::Action1::signal() {
1291 Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
1292
1293 setAction(&scene->_sequenceManager2, this, 2703, &scene->_tv, NULL);
1294 }
1295
1296 /*--------------------------------------------------------------------------*/
1297
startAction(CursorType action,Event & event)1298 bool Scene271::Object12::startAction(CursorType action, Event &event) {
1299 Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
1300
1301 switch (action) {
1302 case CURSOR_TALK:
1303 if (BF_GLOBALS._dayNumber == 1) {
1304 if (!BF_GLOBALS.getFlag(onDuty) && (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 2)) {
1305 scene->_sceneMode = 2715;
1306 scene->setAction(&scene->_sequenceManager1, scene, 2715, &BF_GLOBALS._player, NULL);
1307 return true;
1308 }
1309 } else if (BF_GLOBALS._dayNumber == 3) {
1310 if (scene->_field796 == 1) {
1311 scene->_stripManager.start(2712, &BF_GLOBALS._stripProxy);
1312 return true;
1313 } else if (BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3)) {
1314 scene->_stripManager.start(2714, &BF_GLOBALS._stripProxy);
1315 return true;
1316 } else {
1317 BF_GLOBALS._player.disableControl();
1318 scene->_sceneMode = 2713;
1319 scene->setAction(&scene->_sequenceManager1, scene, 2713, &BF_GLOBALS._player, &scene->_object12, NULL);
1320 BF_GLOBALS.setFlag(fGotGreen355fTalkedToGrannyDay3);
1321 return true;
1322 }
1323 }
1324 break;
1325 default:
1326 break;
1327 }
1328
1329 return NamedObject::startAction(action, event);
1330 }
1331
1332 /*--------------------------------------------------------------------------*/
1333
startAction(CursorType action,Event & event)1334 bool Scene271::Item::startAction(CursorType action, Event &event) {
1335 Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
1336
1337 if ((action == CURSOR_USE) && !scene->_field796) {
1338 BF_GLOBALS._player.disableControl();
1339 scene->_object1.postInit();
1340 scene->_object1.hide();
1341
1342 scene->_sceneMode = 2705;
1343 scene->setAction(&scene->_sequenceManager1, scene, 2705, &BF_GLOBALS._player, &scene->_object1, NULL);
1344 return true;
1345 } else {
1346 return NamedHotspot::startAction(action, event);
1347 }
1348 }
1349
startAction(CursorType action,Event & event)1350 bool Scene271::Exit::startAction(CursorType action, Event &event) {
1351 Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
1352
1353 if (!scene->_action) {
1354 if (scene->_field796 == 1) {
1355 scene->_tempPos = Common::Point(320, 140);
1356 BF_GLOBALS._player.disableControl();
1357 scene->_sceneMode = 2706;
1358 scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object1, NULL);
1359 } else {
1360 ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 320, 140);
1361 }
1362 }
1363
1364 return true;
1365 }
1366
1367 /*--------------------------------------------------------------------------*/
1368
Scene271()1369 Scene271::Scene271() {
1370 _field796 = _field2E16 = 0;
1371 _tempPos.x = _tempPos.y = 0;
1372 _rect1 = Rect(236, 120, 266, 130);
1373 }
1374
synchronize(Serializer & s)1375 void Scene271::synchronize(Serializer &s) {
1376 PalettedScene::synchronize(s);
1377
1378 s.syncAsSint16LE(_field796);
1379 s.syncAsSint16LE(_field2E16);
1380 s.syncAsSint16LE(_tempPos.x);
1381 s.syncAsSint16LE(_tempPos.y);
1382 _rect1.synchronize(s);
1383 }
1384
postInit(SceneObjectList * OwnerList)1385 void Scene271::postInit(SceneObjectList *OwnerList) {
1386 PalettedScene::postInit();
1387 loadScene(270);
1388 setZoomPercents(120, 80, 140, 100);
1389 BF_GLOBALS._sound1.fadeSound(26);
1390
1391 _stripManager.addSpeaker(&_grandmaSpeaker);
1392 _stripManager.addSpeaker(&_lyleSpeaker);
1393 _stripManager.addSpeaker(&_jakeSpeaker);
1394 _stripManager.addSpeaker(&_skipSpeaker);
1395 _stripManager.addSpeaker(&_lauraSpeaker);
1396 _stripManager.addSpeaker(&_gameTextSpeaker);
1397 _stripManager.addSpeaker(&_granTextSpeaker);
1398 _stripManager.addSpeaker(&_lyleTextSpeaker);
1399
1400 _exit.setDetails(Rect(310, 115, 320, 167), 270, -1, -1, -1, 1, NULL);
1401
1402 _tv.postInit();
1403 _tv.setVisage(270);
1404 _tv.setPosition(Common::Point(264, 74));
1405 _tv.setStrip(5);
1406 _tv.fixPriority(132);
1407 _tv._numFrames = 3;
1408 _tv.setAction(&_action1);
1409
1410 if ((BF_GLOBALS._sceneManager._previousScene != 280) && (BF_GLOBALS._sceneManager._previousScene != 620)) {
1411 _object10.postInit();
1412 _object10.setVisage(270);
1413 _object10.setStrip(2);
1414 _object10.setPosition(Common::Point(302, 121));
1415 _object10.fixPriority(132);
1416 _object10.animate(ANIM_MODE_2, NULL);
1417 }
1418
1419 _object5.postInit();
1420 _object5.hide();
1421
1422 _item5.setDetails(Rect(0, 56, 56, 130), 270, 9, 10, 11, 1, NULL);
1423 _object6.setDetails(270, 12, 13, 14, 1, (SceneItem *)NULL);
1424 _object7.setDetails(270, 15, -1, -1, 1, (SceneItem *)NULL);
1425 _object8.setDetails(270, 14, -1, -1, 1, (SceneItem *)NULL);
1426 _object11.setDetails(270, -1, -1, -1, 1, (SceneItem *)NULL);
1427 _tv.setDetails(270, 3, 4, 5, 1, (SceneItem *)NULL);
1428 _object10.setDetails(270, 6, 7, 8, 1, (SceneItem *)NULL);
1429 _object12.setDetails(270, 15, 16, 17, 1, (SceneItem *)NULL);
1430 _item3.setDetails(4, 270, 27, 28, 29, 1);
1431 _item1.setDetails(1, 270, 18, 19, 20, 1);
1432 _item6.setDetails(Rect(278, 50, 318, 72), 270, 21, 22, 23, 1, NULL);
1433 _item2.setDetails(3, 270, 24, 25, 26, 1);
1434 _item4.setDetails(2, 270, 30, 31, 32, 1);
1435 _item11.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 270, 0, 1, 2, 1, NULL);
1436
1437 BF_GLOBALS._player.postInit();
1438 BF_GLOBALS._player._moveDiff.x = 8;
1439 BF_GLOBALS._player.changeZoom(-1);
1440 BF_GLOBALS._player.disableControl();
1441
1442 _field796 = 0;
1443 _sceneMode = 0;
1444 _field2E16 = 0;
1445
1446 if (BF_GLOBALS._dayNumber == 0) {
1447 BF_GLOBALS._dayNumber = 1;
1448 BF_GLOBALS._sceneManager.changeScene(180);
1449 }
1450
1451 switch (BF_GLOBALS._sceneManager._previousScene) {
1452 case 180:
1453 BF_GLOBALS._walkRegions.disableRegion(6);
1454 BF_GLOBALS._walkRegions.disableRegion(14);
1455 BF_GLOBALS._walkRegions.disableRegion(19);
1456
1457 BF_GLOBALS._player.setVisage(275);
1458 BF_GLOBALS._player.setPosition(Common::Point(348, 151));
1459
1460 _object12.postInit();
1461 _object12.setVisage(274);
1462 _object12.setPosition(Common::Point(157, 132));
1463 _object12._numFrames = 5;
1464 _object12.animate(ANIM_MODE_2, NULL);
1465 break;
1466 case 280:
1467 BF_GLOBALS._player.setVisage(271);
1468 BF_GLOBALS._player.setStrip(5);
1469 BF_GLOBALS._player._frame = 6;
1470 BF_GLOBALS._player.setPosition(Common::Point(228, 138));
1471
1472 _object1.postInit();
1473 _object1.setPosition(Common::Point(340, 100));
1474
1475 _object11.postInit();
1476 _object11.setVisage(272);
1477 _object11.setStrip(1);
1478 _object11._frame = 2;
1479 _object11.setPosition(Common::Point(35, 136));
1480
1481 _object6.postInit();
1482 _object6.hide();
1483
1484 BF_GLOBALS._walkRegions.disableRegion(6);
1485 BF_GLOBALS._walkRegions.disableRegion(14);
1486 BF_GLOBALS._walkRegions.disableRegion(19);
1487
1488 _object12.postInit();
1489 _object12.setVisage(274);
1490 _object12.setPosition(Common::Point(157, 132));
1491 _object12.animate(ANIM_MODE_2, NULL);
1492 _object12._numFrames = 5;
1493 _object12.fixPriority(120);
1494 _field796 = 1;
1495 break;
1496 case 590:
1497 BF_GLOBALS._player.setVisage(275);
1498 BF_GLOBALS._player.setStrip(5);
1499 BF_GLOBALS._player.setPosition(Common::Point(58, 133));
1500 BF_GLOBALS._player.changeZoom(-1);
1501
1502 _object8.postInit();
1503 _object8.setVisage(279);
1504 _object8.setPosition(Common::Point(87, 127));
1505 _object8.fixPriority(146);
1506
1507 _object7.postInit();
1508 _object7.setVisage(277);
1509 _object7.setStrip(7);
1510 _object7.setPosition(Common::Point(48, 149));
1511
1512 BF_GLOBALS._walkRegions.disableRegion(6);
1513 BF_GLOBALS._walkRegions.disableRegion(14);
1514 BF_GLOBALS._walkRegions.disableRegion(19);
1515
1516 _object12.postInit();
1517 _object12.setVisage(276);
1518 _object12.setPosition(Common::Point(129, 130));
1519
1520 _object2.postInit();
1521 _object2.setVisage(270);
1522 _object2.setStrip(3);
1523 _object2.setFrame(2);
1524 _object2.setPosition(Common::Point(62, 101));
1525 _object2.fixPriority(145);
1526
1527 _object3.postInit();
1528 _object3.setVisage(270);
1529 _object3.setStrip(3);
1530 _object3.setFrame(3);
1531 _object3.setPosition(Common::Point(90, 104));
1532 _object3.fixPriority(132);
1533
1534 _object4.postInit();
1535 _object4.setVisage(270);
1536 _object4.setStrip(3);
1537 _object4.setFrame(4);
1538 _object4.setPosition(Common::Point(132, 87));
1539 _object4.fixPriority(1);
1540 break;
1541 default:
1542 BF_GLOBALS._player.setVisage(271);
1543 BF_GLOBALS._player.setFrame(1);
1544 BF_GLOBALS._player.setPosition(Common::Point(239, 145));
1545
1546 BF_GLOBALS._walkRegions.disableRegion(6);
1547 BF_GLOBALS._walkRegions.disableRegion(14);
1548 BF_GLOBALS._walkRegions.disableRegion(19);
1549
1550 _object12.postInit();
1551 _object12.setVisage(274);
1552 _object12.setPosition(Common::Point(157, 132));
1553 _object12.animate(ANIM_MODE_2, NULL);
1554 _object12._numFrames = 5;
1555
1556 _object1.postInit();
1557 _object1.setVisage(271);
1558 _object1.setStrip(4);
1559 _object1.setPosition(Common::Point(220, 117));
1560 _object1.fixPriority(145);
1561 break;
1562 }
1563
1564 _sceneMode = 11;
1565
1566 static uint32 black = 0;
1567 add2Faders((const byte *)&black, 2, 270, this);
1568 }
1569
signal()1570 void Scene271::signal() {
1571 static uint32 black = 0;
1572
1573 switch (_sceneMode) {
1574 case 10:
1575 _sceneMode = 2702;
1576 setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
1577 break;
1578 case 11:
1579 switch (BF_GLOBALS._sceneManager._previousScene) {
1580 case 180:
1581 _sceneMode = 2716;
1582 setAction(&_sequenceManager1, this, 2716, &BF_GLOBALS._player, &_object12, NULL);
1583 break;
1584 case 280:
1585 BF_GLOBALS._dayNumber = 3;
1586 BF_INVENTORY.alterInventory(3);
1587
1588 _sceneMode = 2707;
1589 setAction(&_sequenceManager1, this, 2707, &BF_GLOBALS._player, &_object1, &_object11, &_object5, &_object6, NULL);
1590 break;
1591 case 590:
1592 _sceneMode = 2704;
1593 setAction(&_sequenceManager1, this, 2704, &BF_GLOBALS._player, &_object12, &_object7, &_object8, NULL);
1594 break;
1595 default:
1596 _object11.postInit();
1597 _object11.setPosition(Common::Point(340, 100));
1598 BF_GLOBALS._sound1.play(36);
1599
1600 _sceneMode = 2709;
1601 setAction(&_sequenceManager1, this, 2709, &BF_GLOBALS._player, &_object1, &_object12, &_object11, NULL);
1602 break;
1603 }
1604 break;
1605 case 12:
1606 BF_GLOBALS._sound1.changeSound(67);
1607 BF_GLOBALS._sceneManager.changeScene(280);
1608 break;
1609 case 13:
1610 BF_GLOBALS._sound1.fadeOut2(NULL);
1611 BF_GLOBALS._sceneManager.changeScene(666);
1612 break;
1613 case 2702:
1614 BF_GLOBALS._player._strip = 1;
1615 BF_GLOBALS._player.enableControl();
1616 _field2E16 = 1;
1617 break;
1618 case 2704:
1619 BF_GLOBALS._sound1.fadeOut2(NULL);
1620 BF_GLOBALS._sceneManager.changeScene(690);
1621 break;
1622 case 2705:
1623 _field796 = 1;
1624 BF_GLOBALS._player.enableControl();
1625 break;
1626 case 2706:
1627 BF_GLOBALS._player.changeZoom(-1);
1628 BF_GLOBALS._player.enableControl();
1629
1630 _object1.remove();
1631 _field796 = 0;
1632 ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, _tempPos.x, _tempPos.y);
1633 break;
1634 case 2707:
1635 BF_GLOBALS._player.enableControl();
1636 _field796 = 1;
1637 _field2E16 = 1;
1638
1639 _object1.remove();
1640 _object11.remove();
1641
1642 BF_INVENTORY.setObjectScene(INV_LYLE_CARD, 1);
1643 break;
1644 case 2709:
1645 BF_GLOBALS._sound1.play(68);
1646 _sceneMode = 12;
1647 addFader((const byte *)&black, 2, this);
1648 break;
1649 case 2712:
1650 BF_GLOBALS._sound1.fadeOut2(NULL);
1651 BF_GLOBALS._sceneManager.changeScene(180);
1652 break;
1653 case 2713:
1654 BF_GLOBALS._player.enableControl();
1655 break;
1656 case 2714:
1657 BF_GLOBALS._sceneManager.changeScene(560);
1658 break;
1659 case 2715:
1660 break;
1661 case 2716:
1662 BF_GLOBALS._deathReason = 24;
1663 _sceneMode = 13;
1664 addFader((const byte *)&black, 2, this);
1665 break;
1666 default:
1667 break;
1668 }
1669 }
1670
process(Event & event)1671 void Scene271::process(Event &event) {
1672 if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
1673 (_field796 == 1) && (!_action)) {
1674 _tempPos = event.mousePos;
1675 BF_GLOBALS._player.disableControl();
1676
1677 _sceneMode = 2706;
1678 setAction(&_sequenceManager1, this, 2706, &BF_GLOBALS._player, &_object1, NULL);
1679 event.handled = true;
1680 }
1681
1682 SceneExt::process(event);
1683
1684 if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < UI_INTERFACE_Y)) {
1685 if (_exit.contains(event.mousePos)) {
1686 GfxSurface cursor = _cursorVisage.getFrame(EXITFRAME_E);
1687 BF_GLOBALS._events.setCursor(cursor);
1688 } else {
1689 CursorType cursorId = BF_GLOBALS._events.getCursor();
1690 BF_GLOBALS._events.setCursor(cursorId);
1691 }
1692 }
1693 }
1694
dispatch()1695 void Scene271::dispatch() {
1696 if (!_action && (_field2E16 == 1)) {
1697 if ((BF_GLOBALS._player._position.x > 236) && (BF_GLOBALS._player._position.y < 120)) {
1698 _field2E16 = 0;
1699 BF_GLOBALS._sceneManager.changeScene(560);
1700 }
1701
1702 if (BF_GLOBALS._player._position.x <= 20) {
1703 _field2E16 = 0;
1704 BF_GLOBALS._player.disableControl();
1705 BF_GLOBALS._player._mover->remove();
1706 BF_GLOBALS._player._strip = 3;
1707 BF_GLOBALS._player._frame = 1;
1708
1709 if (BF_GLOBALS._sceneObjects->contains(&_object12)) {
1710 _sceneMode = 10;
1711 _stripManager.start(2711, this);
1712 } else {
1713 SceneItem::display2(270, 33);
1714 _sceneMode = 2702;
1715 setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
1716 }
1717 }
1718
1719 if (BF_GLOBALS._player._position.x >= 300) {
1720 _field2E16 = 0;
1721 BF_GLOBALS._player.disableControl();
1722 _sceneMode = 2712;
1723 setAction(&_sequenceManager1, this, 2712, &BF_GLOBALS._player, NULL);
1724 }
1725 }
1726
1727 SceneExt::dispatch();
1728 }
1729
1730 /*--------------------------------------------------------------------------
1731 * Scene 280 - Bedroom Flashback cut-scene
1732 *
1733 *--------------------------------------------------------------------------*/
1734
signal()1735 void Scene280::Action1::signal() {
1736 Scene280 *scene = (Scene280 *)BF_GLOBALS._sceneManager._scene;
1737 static uint32 black = 0;
1738
1739 switch (_actionIndex++) {
1740 case 0:
1741 scene->_jake.postInit();
1742 scene->_jake.setVisage(283);
1743 scene->_jake.setPosition(Common::Point(331, 200));
1744 scene->_jake.animate(ANIM_MODE_1, NULL);
1745 scene->_jake.setStrip(1);
1746 ADD_MOVER(scene->_jake, 189, 131);
1747 break;
1748 case 1:
1749 scene->_jake.setStrip(2);
1750 scene->_jake.setFrame(1);
1751 scene->_jake.animate(ANIM_MODE_8, 0, NULL);
1752 scene->_jake._numFrames = 5;
1753
1754 scene->_stripManager.start(2800, this);
1755 break;
1756 case 2:
1757 scene->_jake.animate(ANIM_MODE_5, NULL);
1758 scene->_dad.animate(ANIM_MODE_5, this);
1759 break;
1760 case 3:
1761 scene->_jake.setStrip(4);
1762 scene->_jake.setFrame(1);
1763 scene->_dad.setStrip(2);
1764 scene->_jake.setFrame(1);
1765 scene->_dad.animate(ANIM_MODE_5, this);
1766 break;
1767 case 4:
1768 scene->_dad.setStrip(3);
1769 scene->_dad.setFrame(1);
1770 scene->_dad.animate(ANIM_MODE_5, this);
1771 break;
1772 case 5:
1773 scene->_object4.hide();
1774 scene->_dad.setVisage(282);
1775 scene->_dad.setStrip(1);
1776 scene->_dad.setFrame(1);
1777 scene->_dad._numFrames = 5;
1778 scene->_dad.animate(ANIM_MODE_5, this);
1779 break;
1780 case 6:
1781 scene->_stripManager.start(2801, this);
1782 break;
1783 case 7:
1784 scene->_mum.postInit();
1785 scene->_mum.setVisage(282);
1786 scene->_mum.setStrip(2);
1787 scene->_mum.setFrame(1);
1788 scene->_mum.fixPriority(1);
1789 scene->_mum.setPosition(Common::Point(160, 138));
1790
1791 scene->_jake.setStrip(3);
1792 scene->_jake.setFrame(1);
1793 scene->_jake.animate(ANIM_MODE_5, this);
1794
1795 scene->_dad._numFrames = 10;
1796 scene->_dad.setVisage(284);
1797 scene->_dad.setStrip(1);
1798 scene->_dad.fixPriority(-1);
1799 scene->_dad.setPosition(Common::Point(174, 136));
1800 scene->_dad.setFrame(1);
1801 scene->_dad.animate(ANIM_MODE_1, NULL);
1802 ADD_MOVER(scene->_dad, 438, 320);
1803 break;
1804 case 8:
1805 scene->_mum.animate(ANIM_MODE_4, 5, 1, this);
1806 break;
1807 case 9:
1808 scene->_sceneMode = 2;
1809 BF_GLOBALS._sound1.fadeOut2(NULL);
1810 scene->addFader((const byte *)&black, 2, scene);
1811
1812 scene->_jake.remove();
1813 scene->_mum.animate(ANIM_MODE_5, NULL);
1814 break;
1815 }
1816 }
1817
1818 /*--------------------------------------------------------------------------*/
1819
postInit(SceneObjectList * OwnerList)1820 void Scene280::postInit(SceneObjectList *OwnerList) {
1821 PalettedScene::postInit();
1822 BF_GLOBALS._interfaceY = SCREEN_HEIGHT;
1823 loadScene(280);
1824
1825 _stripManager.addSpeaker(&_gameTextSpeaker);
1826
1827 _dad.postInit();
1828 _dad.setVisage(281);
1829 _dad.setPosition(Common::Point(160, 138));
1830 _dad.fixPriority(1);
1831
1832 _object4.postInit();
1833 _object4.setVisage(280);
1834 _object4.setPosition(Common::Point(139, 141));
1835
1836 const uint32 black = 0;
1837 add2Faders((const byte *)&black, 2, 280, this);
1838 _sceneMode = 1;
1839 setAction(&_action1);
1840 }
1841
signal()1842 void Scene280::signal() {
1843 if (_sceneMode == 2)
1844 BF_GLOBALS._sceneManager.changeScene(271);
1845 }
1846
1847 } // End of namespace BlueForce
1848
1849 } // End of namespace TsAGE
1850