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_scenes5.h"
24 #include "tsage/scenes.h"
25 #include "tsage/tsage.h"
26 #include "tsage/staticres.h"
27
28 namespace TsAGE {
29
30 namespace BlueForce {
31
32 /*--------------------------------------------------------------------------
33 * Scene 550 - Outside Bikini Hut
34 *
35 *--------------------------------------------------------------------------*/
36
signal()37 void Scene550::Action1::signal() {
38 Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
39
40 switch (_actionIndex++) {
41 case 0:
42 BF_GLOBALS._player.disableControl();
43 setDelay(5);
44 break;
45 case 1:
46 scene->_stripManager.start(scene->_sceneMode, this);
47 break;
48 case 2:
49 BF_GLOBALS._player.enableControl();
50 remove();
51 break;
52 default:
53 break;
54 }
55 }
56
57 /*--------------------------------------------------------------------------*/
58
startAction(CursorType action,Event & event)59 bool Scene550::Lyle::startAction(CursorType action, Event &event) {
60 Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
61
62 switch (action) {
63 case CURSOR_TALK:
64 if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
65 (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
66 if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) &&
67 (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
68 BF_GLOBALS.setFlag(fToldLyleOfSchedule);
69 BF_GLOBALS._player.disableControl();
70 scene->_sceneMode = 5501;
71 scene->setAction(&scene->_sequenceManager, scene, 5514, &BF_GLOBALS._player, this, NULL);
72 } else {
73 scene->_sceneMode = 0;
74 scene->_stripManager.start(5509, scene);
75 }
76 } else if (BF_GLOBALS._sceneManager._previousScene == 930) {
77 scene->_sceneMode = 5512;
78 scene->setAction(&scene->_action1);
79 } else {
80 scene->_sceneMode = BF_INVENTORY.getObjectScene(INV_CARAVAN_KEY) == 1 ? 5513 : 5512;
81 scene->setAction(&scene->_action1);
82 }
83 return true;
84 case INV_SCHEDULE:
85 BF_GLOBALS.setFlag(fToldLyleOfSchedule);
86 BF_GLOBALS._player.disableControl();
87 scene->_sceneMode = 5501;
88 scene->setAction(&scene->_sequenceManager, scene, 5514, &BF_GLOBALS._player, this, NULL);
89 return true;
90 default:
91 return NamedObject::startAction(action, event);
92 }
93 }
94
startAction(CursorType action,Event & event)95 bool Scene550::CaravanDoor::startAction(CursorType action, Event &event) {
96 Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
97
98 switch (action) {
99 case CURSOR_LOOK:
100 SceneItem::display2(550, 0);
101 return true;
102 case CURSOR_USE:
103 SceneItem::display2(550, 7);
104 return true;
105 case INV_CARAVAN_KEY:
106 if ((BF_GLOBALS._dayNumber != 3) || !BF_GLOBALS.getFlag(fWithLyle))
107 SceneItem::display2(550, 33);
108 else {
109 BF_GLOBALS._player.disableControl();
110 scene->_sceneMode = 5500;
111 scene->setAction(&scene->_sequenceManager, scene, 5500, &BF_GLOBALS._player, this, NULL);
112 }
113 return true;
114 default:
115 return NamedObject::startAction(action, event);
116 }
117 }
118
startAction(CursorType action,Event & event)119 bool Scene550::Vechile::startAction(CursorType action, Event &event) {
120 Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
121
122 switch (action) {
123 case CURSOR_LOOK:
124 SceneItem::display2(550, 3);
125 return true;
126 case CURSOR_USE:
127 if (!BF_GLOBALS.getFlag(fWithLyle)) {
128 BF_GLOBALS._player.disableControl();
129 scene->_sceneMode = 5510;
130 scene->setAction(&scene->_sequenceManager, scene, BF_GLOBALS.getFlag(fWithLyle) ? 5510 : 5515,
131 &BF_GLOBALS._player, this, NULL);
132 } else if (BF_GLOBALS.getFlag(fToldLyleOfSchedule)) {
133 BF_GLOBALS._player.disableControl();
134 scene->_sceneMode = 2;
135 scene->setAction(&scene->_sequenceManager, scene, 5501, &BF_GLOBALS._player, NULL);
136 } else if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
137 (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
138 if (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1) {
139 scene->_sceneMode = 5501;
140 scene->_stripManager.start(5511, scene);
141 } else {
142 scene->_sceneMode = 0;
143 scene->_stripManager.start(5509, scene);
144 }
145 } else if (BF_GLOBALS._sceneManager._previousScene == 930) {
146 scene->_sceneMode = 5512;
147 scene->setAction(&scene->_action1);
148 } else {
149 BF_GLOBALS._player.disableControl();
150 scene->_sceneMode = 2;
151 scene->setAction(&scene->_sequenceManager, scene, 5501, &BF_GLOBALS._player, NULL);
152 }
153 return true;
154 default:
155 return NamedObject::startAction(action, event);
156 }
157 }
158
159 /*--------------------------------------------------------------------------*/
160
postInit(SceneObjectList * OwnerList)161 void Scene550::postInit(SceneObjectList *OwnerList) {
162 BF_GLOBALS._sound1.fadeSound(16);
163
164 if ((BF_GLOBALS._bookmark == bInspectionDone) && !BF_GLOBALS.getFlag(fHasDrivenFromDrunk)) {
165 _sceneMode = 1;
166 signal();
167 return;
168 }
169
170 SceneExt::postInit();
171 loadScene(550);
172
173 _stripManager.addSpeaker(&_gameTextSpeaker);
174 _stripManager.addSpeaker(&_lyleHatSpeaker);
175 _stripManager.addSpeaker(&_jakeJacketSpeaker);
176
177 BF_GLOBALS._player.postInit();
178 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
179 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
180 BF_GLOBALS._player.setPosition(Common::Point(160, 100));
181 BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
182 BF_GLOBALS._player.enableControl();
183
184 _caravanDoor.postInit();
185 _caravanDoor.setVisage(550);
186 _caravanDoor.setPosition(Common::Point(34, 66));
187 BF_GLOBALS._sceneItems.push_back(&_caravanDoor);
188
189 _vechile.postInit();
190 _vechile.fixPriority(70);
191
192 if (BF_GLOBALS.getFlag(fWithLyle)) {
193 BF_GLOBALS._walkRegions.disableRegion(10);
194 BF_GLOBALS._walkRegions.disableRegion(11);
195
196 _vechile.setVisage(444);
197 _vechile.setStrip(4);
198 _vechile.setFrame2(2);
199 _vechile.setPosition(Common::Point(110, 85));
200 _vechile.fixPriority(76);
201
202 _lyle.postInit();
203 _lyle.setVisage(835);
204 _lyle.setPosition(Common::Point(139, 83));
205 _lyle.setDetails(550, 29, 30, 31, 1, (SceneItem *)NULL);
206 _lyle.setStrip(8);
207
208 BF_GLOBALS._player.setVisage(303);
209 BF_GLOBALS._player.setPosition(Common::Point(89, 76));
210 BF_GLOBALS._player.updateAngle(_lyle._position);
211 } else {
212 BF_GLOBALS._walkRegions.disableRegion(12);
213
214 _vechile.setPosition(Common::Point(205, 77));
215 _vechile.changeZoom(80);
216
217 if (BF_GLOBALS.getFlag(onDuty)) {
218 _vechile.setVisage(301);
219 _vechile.setStrip(1);
220
221 BF_GLOBALS._player.setVisage(304);
222 } else {
223 _vechile.setVisage(580);
224 _vechile.setStrip(2);
225 _vechile.setFrame(2);
226
227 BF_GLOBALS._player.setVisage(303);
228 }
229 }
230
231 BF_GLOBALS._sceneItems.push_back(&_vechile);
232
233 if (BF_GLOBALS._sceneManager._previousScene == 930) {
234 _caravanDoor.setFrame(_caravanDoor.getFrameCount());
235 BF_GLOBALS._player.disableControl();
236
237 _sceneMode = 0;
238 setAction(&_sequenceManager, this, 5512, &BF_GLOBALS._player, &_caravanDoor, NULL);
239 } else if (BF_GLOBALS.getFlag(onDuty)) {
240 BF_GLOBALS._player.disableControl();
241 _sceneMode = 0;
242 setAction(&_sequenceManager, this, 5502, &BF_GLOBALS._player, &_vechile, NULL);
243 } else if (!BF_GLOBALS.getFlag(fWithLyle)) {
244 BF_GLOBALS._player.setPosition(Common::Point(185, 70));
245 } else if (BF_GLOBALS._bookmark == bFlashBackOne) {
246 BF_GLOBALS._player.disableControl();
247 _sceneMode = 0;
248 setAction(&_sequenceManager, this, 5513, &_lyle, NULL);
249 } else {
250 _sceneMode = 0;
251 }
252
253 _item2.setDetails(Rect(0, 26, 53, 67), 550, 1, -1, 2, 1, NULL);
254 _item3.setDetails(Rect(53, 12, 173, 65), 550, 4, -1, 5, 1, NULL);
255 _item1.setDetails(Rect(0, 0, 320, 170), 550, 6, -1, -1, 1, NULL);
256 }
257
signal()258 void Scene550::signal() {
259 switch (_sceneMode) {
260 case 0:
261 BF_GLOBALS._player.enableControl();
262 break;
263 case 1:
264 BF_GLOBALS._sceneManager.changeScene(551);
265 break;
266 case 2:
267 case 5510:
268 BF_GLOBALS._sceneManager.changeScene(60);
269 break;
270 case 3:
271 BF_GLOBALS._driveFromScene = 16;
272 BF_GLOBALS._driveToScene = 128;
273 BF_GLOBALS._mapLocationId = 128;
274 BF_GLOBALS._sound1.fadeOut2(NULL);
275 BF_GLOBALS._sceneManager.changeScene(800);
276 break;
277 case 5500:
278 BF_GLOBALS._sceneManager.changeScene(930);
279 break;
280 case 5501:
281 BF_GLOBALS._player.disableControl();
282 _sceneMode = 3;
283 setAction(&_sequenceManager, this, 5501, &BF_GLOBALS._player, NULL);
284 break;
285 default:
286 break;
287 }
288 }
289
290 /*--------------------------------------------------------------------------
291 * Scene 551 - Outside Bikini Hut (Drunk Stop)
292 *
293 *--------------------------------------------------------------------------*/
294
signal()295 void Scene551::Action2::signal() {
296 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
297
298 switch (_actionIndex++) {
299 case 0:
300 BF_GLOBALS._walkRegions.enableRegion(18);
301 BF_GLOBALS._walkRegions.enableRegion(4);
302 scene->_field1CD2 = 1;
303
304 scene->_harrison.setObjectWrapper(new SceneObjectWrapper());
305 scene->_harrison.animate(ANIM_MODE_1, NULL);
306
307 BF_GLOBALS._player.setVisage(304);
308 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
309
310 if (scene->_drunkStanding._flag != 1) {
311 ADD_PLAYER_MOVER_THIS(scene->_harrison, 126, 85);
312 } else {
313 ADD_PLAYER_MOVER_THIS(scene->_harrison, 88, 91);
314 }
315 break;
316 case 1:
317 scene->_harrison.updateAngle(BF_GLOBALS._player._position);
318
319 if (scene->_drunkStanding._flag == 1) {
320 BF_GLOBALS._walkRegions.disableRegion(4);
321 ADD_PLAYER_MOVER(71, 97);
322 } else {
323 ADD_PLAYER_MOVER(141, 87);
324 }
325 break;
326 case 2:
327 scene->_harrison.updateAngle(BF_GLOBALS._player._position);
328 BF_GLOBALS._player.updateAngle(scene->_harrison._position);
329 setDelay(10);
330 break;
331 case 3:
332 scene->_stripManager.start(scene->_harrison._flag, this);
333 break;
334 case 4:
335 scene->_field1CD2 = 0;
336 BF_GLOBALS._player.enableControl();
337 remove();
338 break;
339 default:
340 break;
341 }
342 }
343
344 /*--------------------------------------------------------------------------*/
345
startAction(CursorType action,Event & event)346 bool Scene551::Vechile::startAction(CursorType action, Event &event) {
347 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
348
349 switch (action) {
350 case CURSOR_LOOK:
351 SceneItem::display2(550, 3);
352 return true;
353 case CURSOR_USE:
354 if (!BF_GLOBALS.getFlag(didDrunk)) {
355 BF_GLOBALS._player.disableControl();
356 scene->_sceneMode = 1;
357 scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, this, NULL);
358 } else if (BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) == 1) {
359 BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
360 scene->_harrison._flag = 5505;
361 scene->setAction(&scene->_action2, scene);
362 scene->_sceneMode = 5509;
363 } else {
364 BF_GLOBALS._player.disableControl();
365 scene->_sceneMode = 1;
366 scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, this, NULL);
367 }
368 return true;
369 default:
370 return NamedObject::startAction(action, event);
371 }
372 }
373
startAction(CursorType action,Event & event)374 bool Scene551::DrunkStanding::startAction(CursorType action, Event &event) {
375 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
376
377 switch (action) {
378 case CURSOR_LOOK:
379 SceneItem::display2(550, 15);
380 return true;
381 case CURSOR_USE:
382 SceneItem::display2(550, 16);
383 return true;
384 case CURSOR_TALK:
385 SceneItem::display2(550, 17);
386 return true;
387 case INV_HANDCUFFS:
388 scene->_harrison.animate(ANIM_MODE_1, NULL);
389 BF_GLOBALS.set2Flags(f1098Drunk);
390 BF_GLOBALS.setFlag(didDrunk);
391 _flag = 2;
392 BF_GLOBALS._player.disableControl();
393 scene->_sceneMode = 5509;
394
395 scene->setAction(&scene->_sequenceManager, scene, 5509, &BF_GLOBALS._player, this, &scene->_harrison, NULL);
396 BF_GLOBALS.set2Flags(f1015Drunk);
397 return true;
398 default:
399 return NamedObjectExt::startAction(action, event);
400 }
401 }
402
startAction(CursorType action,Event & event)403 bool Scene551::Drunk::startAction(CursorType action, Event &event) {
404 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
405
406 switch (action) {
407 case CURSOR_LOOK:
408 switch (_flag) {
409 case 0:
410 BF_GLOBALS._player.disableControl();
411 scene->_sceneMode = 0;
412 scene->setAction(&scene->_sequenceManager, scene, 5505, &BF_GLOBALS._player, &scene->_object15, NULL);
413 break;
414 case 1:
415 SceneItem::display2(550, 11);
416 break;
417 case 2:
418 SceneItem::display2(550, 12);
419 break;
420 case 3:
421 SceneItem::display2(550, 27);
422 break;
423 default:
424 break;
425 }
426 return true;
427 case CURSOR_USE:
428 switch (_flag) {
429 case 0:
430 BF_GLOBALS._player.disableControl();
431 if (BF_GLOBALS.getFlag(fTalkedToDrunkInCar)) {
432 scene->_sceneMode = 5508;
433 scene->setAction(&scene->_sequenceManager, scene, 5508, &BF_GLOBALS._player, NULL);
434 } else {
435 BF_GLOBALS.setFlag(fTalkedToDrunkInCar);
436 scene->_sceneMode = 16;
437 scene->setAction(&scene->_sequenceManager, scene, 5504, &BF_GLOBALS._player, &scene->_object15, NULL);
438 }
439 break;
440 case 2:
441 SceneItem::display2(550, 13);
442 break;
443 case 3:
444 SceneItem::display2(550, 27);
445 break;
446 default:
447 break;
448 }
449 return true;
450 case CURSOR_TALK:
451 if (_flag)
452 break;
453 BF_GLOBALS._player.disableControl();
454
455 if (BF_GLOBALS.getFlag(fTalkedToDrunkInCar)) {
456 scene->_sceneMode = 5508;
457 scene->setAction(&scene->_sequenceManager, scene, 5508, &BF_GLOBALS._player, NULL);
458 } else {
459 BF_GLOBALS.setFlag(fTalkedToDrunkInCar);
460 scene->_sceneMode = 0;
461 scene->setAction(&scene->_sequenceManager, scene, 5504, &BF_GLOBALS._player, &scene->_object15, NULL);
462 }
463 return true;
464 case INV_CENTER_PUNCH:
465 if (_flag) {
466 SceneItem::display2(550, 14);
467 } else {
468 BF_GLOBALS.set2Flags(f1098Drunk);
469 BF_GLOBALS.setFlag(didDrunk);
470 _flag = 1;
471 T2_GLOBALS._uiElements.addScore(30);
472
473 BF_GLOBALS._player.disableControl();
474 scene->_sceneMode = 5506;
475 scene->setAction(&scene->_sequenceManager, scene, 5506, &BF_GLOBALS._player, this,
476 &scene->_object12, NULL);
477 }
478 return true;
479 default:
480 break;
481 }
482
483 return NamedObjectExt::startAction(action, event);
484 }
485
startAction(CursorType action,Event & event)486 bool Scene551::PatrolCarTrunk::startAction(CursorType action, Event &event) {
487 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
488
489 switch (action) {
490 case CURSOR_USE:
491 if (BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) != 1) {
492 BF_GLOBALS._walkRegions.enableRegion(18);
493 BF_GLOBALS._player.disableControl();
494 scene->_sceneMode = 2;
495 scene->setAction(&scene->_sequenceManager, scene, 5503, &BF_GLOBALS._player, &scene->_harrison, this, NULL);
496 return true;
497 }
498 break;
499 default:
500 break;
501 }
502
503 return NamedObject::startAction(action, event);
504 }
505
remove()506 void Scene551::TrunkInset::remove() {
507 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
508 scene->_trunkKits.remove();
509 BF_GLOBALS._player.disableControl();
510
511 scene->_sceneMode = 0;
512 scene->setAction(&scene->_sequenceManager, scene, 5516, &scene->_harrison,
513 &scene->_patrolCarTrunk, NULL);
514
515 FocusObject::remove();
516 }
517
startAction(CursorType action,Event & event)518 bool Scene551::TrunkInset::startAction(CursorType action, Event &event) {
519 switch (action) {
520 case CURSOR_LOOK:
521 SceneItem::display2(550, 18);
522 return true;
523 case CURSOR_USE:
524 return true;
525 default:
526 return NamedObject::startAction(action, event);
527 }
528 }
529
startAction(CursorType action,Event & event)530 bool Scene551::TrunkKits::startAction(CursorType action, Event &event) {
531 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
532
533 Rect tempRect = _bounds;
534 tempRect.collapse(10, 6);
535 if (!tempRect.contains(event.mousePos))
536 return false;
537
538 switch (action) {
539 case CURSOR_LOOK:
540 switch (_frame) {
541 case 1:
542 SceneItem::display2(550, 19);
543 break;
544 case 2:
545 SceneItem::display2(550, 20);
546 break;
547 case 3:
548 SceneItem::display2(550, 21);
549 break;
550 default:
551 break;
552 }
553 return true;
554 case CURSOR_USE:
555 if (event.mousePos.y < _bounds.top) {
556 setFrame(1);
557 } else if ((event.mousePos.x < (_bounds.left - 25)) && (_frame > 1)) {
558 SceneItem::display2(550, 28);
559 } else {
560 switch (_frame) {
561 case 1:
562 setFrame(BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) == 1 ? 3 : 2);
563 break;
564 case 2:
565 if (!BF_GLOBALS.getFlag(fShowedBluePrint)) {
566 T2_GLOBALS._uiElements.addScore(30);
567 BF_GLOBALS.setFlag(fShowedBluePrint);
568 }
569
570 BF_GLOBALS._player.disableControl();
571 scene->_sceneMode = 5520;
572 scene->setAction(&scene->_sequenceManager, scene, 5520, &BF_GLOBALS._player, NULL);
573 BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 1);
574 setFrame(3);
575 break;
576 case 3:
577 setFrame(1);
578 break;
579 default:
580 break;
581 }
582 }
583 return true;
584 case INV_CENTER_PUNCH:
585 SceneItem::display2(550, 22);
586 BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
587 setFrame(2);
588 return true;
589 default:
590 return NamedObject::startAction(action, event);
591 }
592 }
593
startAction(CursorType action,Event & event)594 bool Scene551::Harrison::startAction(CursorType action, Event &event) {
595 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
596
597 switch (action) {
598 case CURSOR_LOOK:
599 SceneItem::display2(550, 23);
600 return true;
601 case CURSOR_USE:
602 SceneItem::display2(550, 24);
603 return true;
604 case CURSOR_TALK:
605 BF_GLOBALS._player.disableControl();
606
607 if (scene->_drunkStanding._flag == 1) {
608 _flag = 5508;
609 } else if (!scene->_field1CD0) {
610 _flag = 5502;
611 } else {
612 scene->_field1CD0 = 1;
613 _flag = 5500;
614 }
615 scene->setAction(&scene->_action2);
616 return true;
617 default:
618 return NamedObjectExt::startAction(action, event);
619 }
620 }
621
622 /*--------------------------------------------------------------------------*/
623
startAction(CursorType action,Event & event)624 bool Scene551::Item4::startAction(CursorType action, Event &event) {
625 Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
626
627 switch (action) {
628 case CURSOR_LOOK:
629 SceneItem::display2(550, 34);
630 BF_GLOBALS._player.disableControl();
631 scene->_sceneMode = 1;
632 scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, &scene->_vechile2, NULL);
633 return true;
634 default:
635 return false;
636 }
637 }
638
639 /*--------------------------------------------------------------------------*/
640
Scene551()641 Scene551::Scene551(): Scene550() {
642 _field1CD0 = _field1CD2 = 0;
643 }
644
synchronize(Serializer & s)645 void Scene551::synchronize(Serializer &s) {
646 Scene550::synchronize(s);
647 s.syncAsSint16LE(_field1CD0);
648 s.syncAsSint16LE(_field1CD2);
649 }
650
postInit(SceneObjectList * OwnerList)651 void Scene551::postInit(SceneObjectList *OwnerList) {
652 SceneExt::postInit();
653 loadScene(550);
654 BF_GLOBALS._walkRegions.load(551);
655 BF_GLOBALS._sound1.fadeSound(16);
656
657 _stripManager.addSpeaker(&_gameTextSpeaker);
658 _stripManager.addSpeaker(&_jakeUniformSpeaker);
659 _stripManager.addSpeaker(&_gigglesSpeaker);
660 _stripManager.addSpeaker(&_drunkSpeaker);
661
662 if (BF_GLOBALS.getFlag(fHasLeftDrunk)) {
663 _item4.setBounds(Rect(0, 0, 320, 170));
664 BF_GLOBALS._sceneItems.push_back(&_item4);
665 }
666
667 BF_GLOBALS._player.postInit();
668 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
669 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
670 BF_GLOBALS._player.setPosition(Common::Point(160, 100));
671 BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
672 BF_GLOBALS._player.enableControl();
673
674 _caravanDoor.postInit();
675 _caravanDoor.setVisage(550);
676 _caravanDoor.setPosition(Common::Point(34, 66));
677 BF_GLOBALS._sceneItems.push_back(&_caravanDoor);
678
679 _vechile2.postInit();
680 _vechile2.setVisage(301);
681 _vechile2.setStrip(1);
682 _vechile2.setPosition(Common::Point(205, 77));
683 _vechile2.fixPriority(70);
684 _vechile2.changeZoom(80);
685 BF_GLOBALS._sceneItems.push_back(&_vechile2);
686
687 BF_GLOBALS._walkRegions.disableRegion(14);
688
689 _drunk.postInit();
690 _drunk.setVisage(550);
691 _drunk.setStrip(3);
692 _drunk.fixPriority(84);
693 _drunk.setPosition(Common::Point(29, 92));
694 _drunk._flag = 0;
695 BF_GLOBALS._sceneItems.push_back(&_drunk);
696
697 _object12.postInit();
698 _object12.setVisage(550);
699 _object12.setStrip(7);
700 _object12.setPosition(Common::Point(29, 92));
701 _object12.hide();
702
703 _object13.postInit();
704 _object13.setVisage(550);
705 _object13.setStrip(2);
706 _object13.setPosition(Common::Point(29, 92));
707 _object13.fixPriority(82);
708 _object13.setDetails(550, 8, -1, 9, 1, (SceneItem *)NULL);
709
710 if (BF_GLOBALS.getFlag(didDrunk)) {
711 _drunk._flag = 3;
712 _drunk.setStrip(3);
713
714 _object12.show();
715 _object12.setDetails(550, 25, -1, 26, 1, (SceneItem *)NULL);
716 BF_GLOBALS._sceneItems.push_front(&_object12);
717
718 _harrison.postInit();
719 _harrison.setVisage(304);
720 _harrison.setPosition(Common::Point(67, 102));
721 _harrison.setStrip(8);
722 _harrison.setFrame(1);
723 _harrison._flag = 1;
724 BF_GLOBALS._sceneItems.push_back(&_harrison);
725
726 _object14.postInit();
727 _object14.setVisage(550);
728 _object14.setStrip(5);
729 _object14.animate(ANIM_MODE_2, NULL);
730 _object14.fixPriority(80);
731 _object14.setPosition(Common::Point(122, 57));
732
733 _object11.postInit();
734 _object11.setVisage(550);
735 _object11.setStrip(2);
736 _object11.setFrame(2);
737 _object11.setPosition(Common::Point(116, 84));
738 _object11.fixPriority(77);
739 _object11.setDetails(550, 32, -1, 10, 1, (SceneItem *)NULL);
740
741 _drunkStanding.postInit();
742 _drunkStanding._flag = 0;
743 _drunkStanding.setVisage(554);
744 _drunkStanding.setStrip(7);
745 _drunkStanding.setFrame(8);
746 _drunkStanding.fixPriority(83);
747 _drunkStanding.setPosition(Common::Point(57, 99));
748 } else {
749 _harrison.postInit();
750 _harrison.setVisage(304);
751 _harrison.setPosition(Common::Point(126, 83));
752 _harrison.setObjectWrapper(new SceneObjectWrapper());
753 _harrison._flag = 0;
754 _harrison._moveDiff = Common::Point(2, 1);
755 BF_GLOBALS._sceneItems.push_back(&_harrison);
756
757 _object14.postInit();
758 _object14.setVisage(550);
759 _object14.setStrip(5);
760 _object14.animate(ANIM_MODE_2, NULL);
761 _object14.fixPriority(80);
762 _object14.setPosition(Common::Point(122, 57));
763
764 _patrolCarTrunk.postInit();
765 _patrolCarTrunk.setVisage(550);
766 _patrolCarTrunk.setStrip(4);
767 _patrolCarTrunk.setFrame(1);
768 _patrolCarTrunk.setPosition(Common::Point(149, 69));
769 _patrolCarTrunk.fixPriority(79);
770 _patrolCarTrunk.setDetails(550, 18, -1, 9, 1, (SceneItem *)NULL);
771
772 _object11.postInit();
773 _object11.setVisage(550);
774 _object11.setStrip(2);
775 _object11.setFrame(2);
776 _object11.setPosition(Common::Point(116, 84));
777 _object11.fixPriority(77);
778 _object11.setDetails(550, 32, -1, 10, 1, (SceneItem *)NULL);
779
780 _drunkStanding.postInit();
781 _drunkStanding._flag = 0;
782 _drunkStanding.setVisage(554);
783 _drunkStanding.fixPriority(83);
784 _drunkStanding.setPosition(Common::Point(47, 93));
785
786 _object15.postInit();
787 _object15.setVisage(552);
788 _object15.setPosition(Common::Point(59, 94));
789 _object15.fixPriority(200);
790 _object15.hide();
791 }
792
793 BF_GLOBALS._player.disableControl();
794 _sceneMode = 3;
795 setAction(&_sequenceManager, this, 5502, &BF_GLOBALS._player, &_vechile2, NULL);
796
797 _item2.setDetails(Rect(0, 26, 53, 67), 550, 1, -1, 2, 1, NULL);
798 _item3.setDetails(Rect(53, 12, 173, 65), 550, 4, -1, 5, 1, NULL);
799 _item1.setDetails(Rect(0, 0, 320, 170), 550, 6, -1, -1, 1, NULL);
800 }
801
signal()802 void Scene551::signal() {
803 switch (_sceneMode) {
804 case 0:
805 BF_GLOBALS._player.enableControl();
806 break;
807 case 1:
808 BF_GLOBALS._sound1.fadeOut2(NULL);
809 BF_GLOBALS.set2Flags(f1027Drunk);
810 BF_GLOBALS.set2Flags(f1097Drunk);
811
812 if (BF_GLOBALS.getFlag(didDrunk))
813 BF_GLOBALS.setFlag(f1098Drunk);
814
815 BF_GLOBALS._sceneManager.changeScene(60);
816 break;
817 case 2:
818 BF_GLOBALS._walkRegions.disableRegion(18);
819
820 _trunkInset.postInit();
821 _trunkInset.setVisage(553);
822 _trunkInset.setPosition(Common::Point(59, 92));
823 _trunkInset.fixPriority(252);
824 BF_GLOBALS._sceneItems.push_front(&_trunkInset);
825
826 _trunkKits.postInit();
827 _trunkKits.setVisage(553);
828 _trunkKits.setStrip(2);
829 _trunkKits.setPosition(Common::Point(57, 73));
830 _trunkKits.fixPriority(254);
831 BF_GLOBALS._sceneItems.push_front(&_trunkKits);
832 BF_GLOBALS._player.enableControl();
833 break;
834 case 3:
835 if (BF_GLOBALS.getFlag(talkedToHarrisAboutDrunk)) {
836 BF_GLOBALS._player.enableControl();
837 } else {
838 BF_GLOBALS.setFlag(talkedToHarrisAboutDrunk);
839 _harrison._flag = 5500;
840 setAction(&_action2);
841 }
842 break;
843 case 5506:
844 _harrison.setObjectWrapper(new SceneObjectWrapper());
845 ADD_PLAYER_MOVER_NULL(_harrison, 88, 91);
846
847 _object12.show();
848 _object12.setDetails(550, 25, -1, 26, 1, (SceneItem *)NULL);
849 BF_GLOBALS._sceneItems.push_front(&_object12);
850 BF_GLOBALS._player.enableControl();
851
852 _sceneMode = 5507;
853 setAction(&_sequenceManager, this, 5507, &BF_GLOBALS._player, &_drunk, &_drunkStanding, NULL);
854 break;
855 case 5507:
856 BF_GLOBALS._walkRegions.disableRegion(2);
857 BF_GLOBALS._walkRegions.disableRegion(4);
858
859 _drunkStanding._flag = 1;
860 BF_GLOBALS._sceneItems.push_front(&_drunkStanding);
861 BF_GLOBALS._player.enableControl();
862 break;
863 case 5508:
864 BF_GLOBALS._player.disableControl();
865 _sceneMode = 0;
866 setAction(&_sequenceManager, this, 5505, &BF_GLOBALS._player, &_object15, NULL);
867 break;
868 case 5509:
869 BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
870 BF_GLOBALS._player.disableControl();
871 _sceneMode = 5510;
872 setAction(&_sequenceManager, this, 5510, &BF_GLOBALS._player, &_vechile2, NULL);
873 break;
874 case 5510:
875 BF_GLOBALS._bookmark = bCalledToDrunkStop;
876 if (BF_GLOBALS.getFlag(didDrunk))
877 BF_GLOBALS.setFlag(fHasLeftDrunk);
878
879 BF_GLOBALS._sceneManager.changeScene(60);
880 break;
881 case 5520:
882 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
883 _harrison.animate(ANIM_MODE_1, NULL);
884 BF_GLOBALS._player.enableControl();
885 break;
886 default:
887 BF_GLOBALS._player.enableControl();
888 break;
889 }
890 }
891
dispatch()892 void Scene551::dispatch() {
893 SceneExt::dispatch();
894
895 if ((_drunkStanding._flag != 2) && !_harrison._mover && !_field1CD2)
896 _harrison.updateAngle(BF_GLOBALS._player._position);
897 }
898
899 /*--------------------------------------------------------------------------
900 * Scene 550 - Study
901 *
902 *--------------------------------------------------------------------------*/
903
signal()904 void Scene560::Action1::signal() {
905 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
906
907 switch (_actionIndex++) {
908 case 0:
909 setDelay(10);
910 break;
911 case 1:
912 ADD_MOVER(BF_GLOBALS._player, 105, 140);
913 break;
914 case 2:
915 scene->_deskChair.hide();
916
917 BF_GLOBALS._player.changeZoom(81);
918 BF_GLOBALS._player.setVisage(561);
919 BF_GLOBALS._player.setStrip(2);
920 BF_GLOBALS._player.setFrame(1);
921 BF_GLOBALS._player.setPosition(Common::Point(96, 138));
922 BF_GLOBALS._player.animate(ANIM_MODE_5, this);
923 break;
924 case 3:
925 scene->_deskChair.setVisage(561);
926 scene->_deskChair.setFrame(BF_GLOBALS._player._frame);
927 scene->_deskChair.setStrip(BF_GLOBALS._player._strip);
928 scene->_deskChair.setPosition(BF_GLOBALS._player._position);
929
930 scene->_field380 = true;
931 BF_GLOBALS._player.enableControl();
932 remove();
933 break;
934 default:
935 break;
936 }
937 }
938
signal()939 void Scene560::Action2::signal() {
940 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
941
942 switch (_actionIndex++) {
943 case 0:
944 BF_GLOBALS._player.disableControl();
945 setDelay(10);
946 break;
947 case 1:
948 scene->_deskChair.hide();
949
950 BF_GLOBALS._player.setVisage(561);
951 BF_GLOBALS._player.setStrip(2);
952 BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
953 BF_GLOBALS._player.animate(ANIM_MODE_6, this);
954 break;
955 case 2:
956 scene->_field380 = false;
957 scene->_deskChair.setPosition(Common::Point(81, 149));
958 scene->_deskChair.setVisage(561);
959 scene->_deskChair.setStrip(3);
960 scene->_deskChair.setFrame(1);
961 scene->_deskChair.fixPriority(151);
962 scene->_deskChair.show();
963
964 BF_GLOBALS._player.setVisage(563);
965 BF_GLOBALS._player.setPosition(Common::Point(105, 140));
966 BF_GLOBALS._player.fixPriority(-1);
967 BF_GLOBALS._player.changeZoom(-1);
968 BF_GLOBALS._player.animate(ANIM_MODE_1, this);
969 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
970 BF_GLOBALS._player.enableControl();
971 ADD_PLAYER_MOVER(scene->_destPosition.x, scene->_destPosition.y);
972 remove();
973 break;
974 default:
975 break;
976 }
977 }
978
signal()979 void Scene560::Action3::signal() {
980 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
981
982 switch (_actionIndex++) {
983 case 0:
984 BF_GLOBALS._player.disableControl();
985 setDelay(10);
986 break;
987 case 1:
988 if (scene->_field380) {
989 setDelay(10);
990 } else {
991 setAction(&scene->_action1, this);
992 }
993 break;
994 case 2:
995 BF_GLOBALS._sceneManager.changeScene(570);
996 break;
997 default:
998 break;
999 }
1000 }
1001
1002 /*--------------------------------------------------------------------------*/
1003
startAction(CursorType action,Event & event)1004 bool Scene560::PicturePart::startAction(CursorType action, Event &event) {
1005 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1006
1007 switch (action) {
1008 case CURSOR_LOOK:
1009 if (scene->_field380) {
1010 SceneItem::display2(560, 54);
1011 } else if ((scene->_sceneMode != 4) && (scene->_sceneMode != 3)) {
1012 scene->_sceneMode = _flag + 4;
1013 PlayerMover *mover = new PlayerMover();
1014 Common::Point destPos(139, 106);
1015 BF_GLOBALS._player.addMover(mover, &destPos, scene);
1016 }
1017 return true;
1018 default:
1019 return NamedHotspotExt::startAction(action, event);
1020 }
1021 }
1022
1023 /*--------------------------------------------------------------------------*/
1024
startAction(CursorType action,Event & event)1025 bool Scene560::DeskChair::startAction(CursorType action, Event &event) {
1026 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1027
1028 if ((action == CURSOR_USE) && !scene->_field380) {
1029 scene->setAction(&scene->_action1);
1030 return true;
1031 } else {
1032 return NamedObject::startAction(action, event);
1033 }
1034 }
1035
startAction(CursorType action,Event & event)1036 bool Scene560::Box::startAction(CursorType action, Event &event) {
1037 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1038
1039 switch (action) {
1040 case CURSOR_USE:
1041 if (scene->_field380) {
1042 SceneItem::display2(560, 54);
1043 } else {
1044 scene->_sceneMode = 9;
1045 Common::Point destPos(289, 108);
1046 PlayerMover *mover = new PlayerMover();
1047 BF_GLOBALS._player.addMover(mover, &destPos, scene);
1048 }
1049 return true;
1050 default:
1051 return NamedObjectExt::startAction(action, event);
1052 }
1053 }
1054
postInit(SceneObjectList * OwnerList)1055 void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) {
1056 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1057 FocusObject::postInit();
1058
1059 _cursorVisage.setVisage(1, 5);
1060
1061 if (BF_GLOBALS._safeCombination == 172) {
1062 setFrame(2);
1063 if (BF_INVENTORY.getObjectScene(INV_NICKEL) == 560) {
1064 scene->_nickel.postInit();
1065 scene->_nickel.setVisage(560);
1066 scene->_nickel.setStrip(2);
1067 scene->_nickel.setFrame(3);
1068 scene->_nickel.fixPriority(252);
1069 scene->_nickel.setPosition(Common::Point(181, 140));
1070 scene->_nickel.setDetails(560, 47, 48, -1, 1, (SceneItem *)NULL);
1071 BF_GLOBALS._sceneItems.remove(&scene->_nickel);
1072 BF_GLOBALS._sceneItems.push_front(&scene->_nickel);
1073 }
1074 } else {
1075 setFrame(1);
1076 _item1.setDetails(Rect(143, 68, 159, 85), 560, 49, 50, -1, 1, NULL);
1077 _item2.setDetails(Rect(159, 68, 175, 85), 560, 49, 50, -1, 1, NULL);
1078 _item3.setDetails(Rect(175, 68, 191, 85), 560, 49, 50, -1, 1, NULL);
1079 _item4.setDetails(Rect(143, 86, 159, 102), 560, 49, 50, -1, 1, NULL);
1080 _item5.setDetails(Rect(159, 86, 175, 102), 560, 49, 50, -1, 1, NULL);
1081 _item6.setDetails(Rect(175, 86, 191, 102), 560, 49, 50, -1, 1, NULL);
1082
1083 BF_GLOBALS._sceneItems.remove(&_item1);
1084 BF_GLOBALS._sceneItems.remove(&_item2);
1085 BF_GLOBALS._sceneItems.remove(&_item3);
1086 BF_GLOBALS._sceneItems.remove(&_item4);
1087 BF_GLOBALS._sceneItems.remove(&_item5);
1088 BF_GLOBALS._sceneItems.remove(&_item6);
1089 BF_GLOBALS._sceneItems.push_front(&_item6);
1090 BF_GLOBALS._sceneItems.push_front(&_item5);
1091 BF_GLOBALS._sceneItems.push_front(&_item4);
1092 BF_GLOBALS._sceneItems.push_front(&_item3);
1093 BF_GLOBALS._sceneItems.push_front(&_item2);
1094 BF_GLOBALS._sceneItems.push_front(&_item1);
1095
1096 _item1._flag = 1;
1097 _item2._flag = 2;
1098 _item3._flag = 3;
1099 _item4._flag = 4;
1100 _item5._flag = 5;
1101 _item6._flag = 6;
1102
1103 _digit2.postInit();
1104 _digit2.setVisage(560);
1105 _digit2.setStrip(3);
1106 _digit2.setPosition(Common::Point(151, 94));
1107 _digit2.fixPriority(252);
1108
1109 _digit1.postInit();
1110 _digit1.setVisage(560);
1111 _digit1.setStrip(3);
1112 _digit1.setPosition(Common::Point(167, 94));
1113 _digit1.fixPriority(252);
1114
1115 _digit0.postInit();
1116 _digit0.setVisage(560);
1117 _digit0.setStrip(3);
1118 _digit0.setPosition(Common::Point(183, 94));
1119 _digit0.fixPriority(252);
1120
1121 int amount = (BF_GLOBALS._safeCombination != 0) ? BF_GLOBALS._safeCombination : 1000;
1122
1123 // Get digit 0 portion
1124 int remainder = amount % 10;
1125 amount /= 10;
1126 _digit0.setFrame(!remainder ? 10 : remainder);
1127
1128 // Get digit 1 portion
1129 remainder = amount % 10;
1130 amount /= 10;
1131 _digit1.setFrame(!remainder ? 10 : remainder);
1132
1133 // Get digit 2 portion
1134 remainder = amount % 10;
1135 _digit2.setFrame(!remainder ? 10 : remainder);
1136 }
1137 }
1138
remove()1139 void Scene560::SafeInset::remove() {
1140 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1141
1142 _item1.remove();
1143 _item2.remove();
1144 _item3.remove();
1145 _item4.remove();
1146 _item5.remove();
1147 _item6.remove();
1148 _digit2.remove();
1149 _digit1.remove();
1150 _digit0.remove();
1151
1152 scene->_nickel.remove();
1153
1154 if (BF_GLOBALS._events.getCursor() == CURSOR_USE) {
1155 GfxSurface cursor = _cursorVisage.getFrame(2);
1156 BF_GLOBALS._events.setCursor(cursor);
1157 }
1158
1159 FocusObject::remove();
1160 }
1161
signal()1162 void Scene560::SafeInset::signal() {
1163 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1164
1165 // Recalculate the new total
1166 int total = 0;
1167 if (_digit2._frame < 10)
1168 total = _digit2._frame * 100;
1169 if (_digit1._frame < 10)
1170 total += _digit1._frame * 10;
1171 if (_digit0._frame < 10)
1172 total += _digit0._frame;
1173
1174 BF_GLOBALS._safeCombination = !total ? 1000 : total;
1175
1176 // Check if the combination is correct
1177 if (total == 172) {
1178 BF_GLOBALS._sceneObjects->draw();
1179
1180 if (!BF_GLOBALS.getFlag(fGotPointsForBank)) {
1181 T2_GLOBALS._uiElements.addScore(50);
1182 BF_GLOBALS.setFlag(fGotPointsForBank);
1183 }
1184
1185 setFrame(2);
1186 GfxSurface cursor = _cursorVisage.getFrame(2);
1187 BF_GLOBALS._events.setCursor(cursor);
1188
1189 _item1.remove();
1190 _item2.remove();
1191 _item3.remove();
1192 _item4.remove();
1193 _item5.remove();
1194 _item6.remove();
1195 _digit2.remove();
1196 _digit1.remove();
1197 _digit0.remove();
1198
1199 if (BF_INVENTORY.getObjectScene(INV_NICKEL) == 560) {
1200 // Nickel is still in the safe, show it
1201 scene->_nickel.postInit();
1202 scene->_nickel.setVisage(560);
1203 scene->_nickel.setStrip(2);
1204 scene->_nickel.setFrame(3);
1205 scene->_nickel.fixPriority(252);
1206 scene->_nickel.setPosition(Common::Point(181, 140));
1207 scene->_nickel.setDetails(560, 47, 48, -1, 1, (SceneItem *)NULL);
1208 BF_GLOBALS._sceneItems.remove(&scene->_nickel);
1209 BF_GLOBALS._sceneItems.push_front(&scene->_nickel);
1210 }
1211 }
1212 }
process(Event & event)1213 void Scene560::SafeInset::process(Event &event) {
1214 if (_bounds.contains(event.mousePos)) {
1215 CursorType cursorId = BF_GLOBALS._events.getCursor();
1216 if (cursorId == CURSOR_USE) {
1217 // Instead of standard cursor, use special hand cursor
1218 GfxSurface cursor = _cursorVisage.getFrame(6);
1219 BF_GLOBALS._events.setCursor(cursor);
1220 } else {
1221 // Set cursor again just in case Exit cursor was showing
1222 BF_GLOBALS._events.setCursor(cursorId);
1223 }
1224
1225 if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
1226 (event.btnState == BTNSHIFT_RIGHT)) {
1227 BF_GLOBALS._events.setCursor(CURSOR_USE);
1228 event.handled = true;
1229 }
1230 } else {
1231 GfxSurface cursor = _cursorVisage.getFrame(7);
1232 BF_GLOBALS._events.setCursor(cursor);
1233
1234 if ((event.mousePos.y < UI_INTERFACE_Y) && (event.eventType == EVENT_BUTTON_DOWN)) {
1235 // Leave the safe view
1236 event.handled = true;
1237 remove();
1238 }
1239 }
1240 }
1241
startAction(CursorType action,Event & event)1242 bool Scene560::SafeInset::Item::startAction(CursorType action, Event &event) {
1243 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1244
1245 switch (action) {
1246 case CURSOR_USE:
1247 switch (_flag) {
1248 case 1: {
1249 int newFrame = scene->_safeInset._digit2._frame + 1;
1250 if (newFrame == 11)
1251 newFrame = 1;
1252
1253 scene->_safeInset._digit2.setFrame(newFrame);
1254 break;
1255 }
1256 case 2: {
1257 int newFrame = scene->_safeInset._digit1._frame + 1;
1258 if (newFrame == 11)
1259 newFrame = 1;
1260
1261 scene->_safeInset._digit1.setFrame(newFrame);
1262 break;
1263 }
1264 case 3: {
1265 int newFrame = scene->_safeInset._digit0._frame + 1;
1266 if (newFrame == 11)
1267 newFrame = 1;
1268
1269 scene->_safeInset._digit0.setFrame(newFrame);
1270 break;
1271 }
1272 case 4: {
1273 int newFrame = scene->_safeInset._digit2._frame - 1;
1274 if (newFrame == 0)
1275 newFrame = 10;
1276
1277 scene->_safeInset._digit2.setFrame(newFrame);
1278 break;
1279 }
1280 case 5: {
1281 int newFrame = scene->_safeInset._digit1._frame - 1;
1282 if (newFrame == 0)
1283 newFrame = 10;
1284
1285 scene->_safeInset._digit1.setFrame(newFrame);
1286 break;
1287 }
1288 case 6: {
1289 int newFrame = scene->_safeInset._digit0._frame - 1;
1290 if (newFrame == 0)
1291 newFrame = 10;
1292
1293 scene->_safeInset._digit0.setFrame(newFrame);
1294 break;
1295 }
1296 default:
1297 break;
1298 }
1299
1300 scene->_safeInset.signal();
1301 scene->_sound1.play(75);
1302 return true;
1303 default:
1304 return NamedHotspotExt::startAction(action, event);
1305 }
1306 }
1307
startAction(CursorType action,Event & event)1308 bool Scene560::Nickel::startAction(CursorType action, Event &event) {
1309 if (action == CURSOR_USE) {
1310 BF_INVENTORY.setObjectScene(INV_NICKEL, 1);
1311 T2_GLOBALS._uiElements.addScore(10);
1312 remove();
1313 return true;
1314 } else {
1315 return NamedObject::startAction(action, event);
1316 }
1317 }
1318
postInit(SceneObjectList * OwnerList)1319 void Scene560::BoxInset::postInit(SceneObjectList *OwnerList) {
1320 FocusObject::postInit();
1321 _item1.setDetails(Rect(110, 48, 189, 102), 560, 43, 44, -1, 1, NULL);
1322 BF_GLOBALS._sceneItems.remove(&_item1);
1323 BF_GLOBALS._sceneItems.push_front(&_item1);
1324 }
1325
remove()1326 void Scene560::BoxInset::remove() {
1327 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1328
1329 if (scene->_sceneMode != 3)
1330 scene->_sceneMode = 0;
1331
1332 _item1.remove();
1333 FocusObject::remove();
1334 }
1335
startAction(CursorType action,Event & event)1336 bool Scene560::BoxInset::Item1::startAction(CursorType action, Event &event) {
1337 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1338
1339 if (action == CURSOR_USE) {
1340 if (!BF_GLOBALS.getFlag(fGotPointsForBox)) {
1341 T2_GLOBALS._uiElements.addScore(10);
1342 BF_GLOBALS.setFlag(fGotPointsForBox);
1343 }
1344
1345 scene->_safeInset.postInit();
1346 scene->_safeInset.setVisage(560);
1347 scene->_safeInset.setStrip(2);
1348 scene->_safeInset.setPosition(Common::Point(160, 141));
1349 scene->_safeInset.fixPriority(251);
1350 scene->_safeInset.setDetails(560, 45, 46, -1);
1351
1352 scene->_sceneMode = 3;
1353 scene->_boxInset.remove();
1354
1355 GfxSurface cursor = surfaceFromRes(1, 5, 6);
1356 BF_GLOBALS._events.setCursor(cursor);
1357 return true;
1358 } else {
1359 return NamedHotspot::startAction(action, event);
1360 }
1361 }
1362
1363 /*--------------------------------------------------------------------------*/
1364
startAction(CursorType action,Event & event)1365 bool Scene560::Computer::startAction(CursorType action, Event &event) {
1366 Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
1367
1368 switch (action) {
1369 case CURSOR_USE:
1370 if (BF_GLOBALS._bookmark < bTalkedToGrannyAboutSkipsCard) {
1371 SceneItem::display2(666, 24);
1372 } else {
1373 scene->setAction(&scene->_action3);
1374 }
1375 return true;
1376 default:
1377 return NamedHotspot::startAction(action, event);
1378 }
1379 }
1380
1381 /*--------------------------------------------------------------------------*/
1382
Scene560()1383 Scene560::Scene560(): SceneExt() {
1384 _field380 = _field11EA = false;
1385 }
1386
postInit(SceneObjectList * OwnerList)1387 void Scene560::postInit(SceneObjectList *OwnerList) {
1388 SceneExt::postInit();
1389 loadScene(560);
1390 setZoomPercents(100, 60, 168, 90);
1391 _stripManager.addSpeaker(&_gameTextSpeaker);
1392
1393 _picture1.setDetails(Rect(121, 16, 139, 35), 560, -1, -1, -1, 1, NULL);
1394 _picture2.setDetails(Rect(139, 16, 157, 35), 560, -1, -1, -1, 1, NULL);
1395 _picture3.setDetails(Rect(121, 35, 139, 54), 560, -1, -1, -1, 1, NULL);
1396 _picture4.setDetails(Rect(139, 35, 157, 54), 560, -1, -1, -1, 1, NULL);
1397 _picture1._flag = 3;
1398 _picture2._flag = 4;
1399 _picture3._flag = 2;
1400 _picture4._flag = 1;
1401
1402 if (BF_GLOBALS._dayNumber == 0)
1403 BF_GLOBALS._dayNumber = 3;
1404
1405 if (BF_GLOBALS._bookmark >= bTalkedToGrannyAboutSkipsCard) {
1406 _box.postInit();
1407 _box.setVisage(560);
1408 _box.setStrip(4);
1409 _box.setFrame(1);
1410 _box.setPosition(Common::Point(295, 37));
1411 _box.setDetails(560, 41, 42, -1, 1, (SceneItem *)NULL);
1412 }
1413
1414 _deskChair.postInit();
1415 _deskChair.setVisage(561);
1416 _deskChair.setStrip(3);
1417 _deskChair.setPosition(Common::Point(81, 149));
1418 _deskChair.fixPriority(151);
1419 _deskChair.changeZoom(81);
1420
1421 if (BF_GLOBALS._sceneManager._previousScene == 570) {
1422 // Returning from using computer
1423 BF_GLOBALS._events.setCursor(CURSOR_USE);
1424
1425 _deskChair.hide();
1426
1427 BF_GLOBALS._player.postInit();
1428 BF_GLOBALS._player.setVisage(561);
1429 BF_GLOBALS._player.setStrip(2);
1430 BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
1431 BF_GLOBALS._player._moveDiff.x = 11;
1432 BF_GLOBALS._player.setPosition(Common::Point(96, 138));
1433 BF_GLOBALS._player.changeZoom(81);
1434
1435 _deskChair.setFrame(BF_GLOBALS._player._frame);
1436 _deskChair.setStrip(BF_GLOBALS._player._strip);
1437 _deskChair.setPosition(BF_GLOBALS._player._position);
1438
1439 _field11EA = false;
1440 _field380 = true;
1441 } else {
1442 // Entering study through doorway
1443 _field11EA = false;
1444 _field380 = false;
1445
1446 BF_GLOBALS._player.postInit();
1447 BF_GLOBALS._player.setVisage(563);
1448 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
1449 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
1450 BF_GLOBALS._player.setPosition(Common::Point(79, 110));
1451 BF_GLOBALS._player._moveDiff.x = 11;
1452 BF_GLOBALS._player.changeZoom(-1);
1453 BF_GLOBALS._player.disableControl();
1454
1455 _sceneMode = 10;
1456 ADD_MOVER(BF_GLOBALS._player, 85, 115);
1457 }
1458
1459 _computer.setDetails(Rect(16, 77, 58, 107), 560, 2, -1, -1, 1, NULL);
1460 _deskChair.setDetails(560, 3, -1, -1, 1, (SceneItem *)NULL);
1461 _chair.setDetails(Rect(163, 64, 196, 102), 560, 13, 25, 36, 1, NULL);
1462 _lamp.setDetails(Rect(197, 43, 214, 56), 560, 7, 19, 30, 1, NULL);
1463 _item4.setDetails(Rect(121, 18, 156, 54), 560, 8, 20, 31, 1, NULL);
1464 _trophy.setDetails(Rect(259, 52, 275, 63), 560, 10, 22, 33, 1, NULL);
1465 _waterColors.setDetails(Rect(214, 48, 239, 64), 560, 12, 24, 35, 1, NULL);
1466 _fileCabinets.setDetails(Rect(0, 47, 49, 100), 560, 14, 26, 37, 1, NULL);
1467 _certificate.setDetails(Rect(280, 51, 292, 62), 560, 11, 23, 34, 1, NULL);
1468 _bookcase.setDetails(Rect(176, 0, 319, 103), 560, 9, 21, 32, 1, NULL);
1469 _desk.setDetails(1, 560, 6, 10, 29, 1);
1470 _item12.setDetails(Rect(62, 16, 96, 101), 560, 51, 52, 53, 1, NULL);
1471 _carpet.setDetails(Rect(0, 103, 319, 167), 560, 5, 16, 28, 1, NULL);
1472 _office.setDetails(Rect(0, 0, 320, 168), 560, 4, -1, -1, 1, NULL);
1473
1474 BF_GLOBALS._player.enableControl();
1475 }
1476
signal()1477 void Scene560::signal() {
1478 switch (_sceneMode) {
1479 case 1:
1480 _object6.hide();
1481 _object6.remove();
1482 BF_GLOBALS._player.enableControl();
1483 break;
1484 case 5:
1485 case 6:
1486 case 7:
1487 case 8:
1488 BF_GLOBALS._player._strip = 4;
1489 BF_GLOBALS._player._frame = 1;
1490 BF_GLOBALS._player.disableControl();
1491
1492 _object6.postInit();
1493 _object6.setVisage(560);
1494 _object6.setStrip(1);
1495 _object6.setFrame(_sceneMode - 4);
1496 _object6.setPosition(Common::Point(160, 141));
1497 _object6.fixPriority(250);
1498 _stripManager.start(_sceneMode + 5595, this);
1499 _sceneMode = 1;
1500 break;
1501 case 9:
1502 // Clicked on the Baseball Cards Box
1503 _object6._strip = 4;
1504 _object6._frame = 1;
1505
1506 if (BF_GLOBALS._safeCombination == 172) {
1507 if (_sceneMode != 3) {
1508 _safeInset.postInit();
1509 _safeInset.setVisage(560);
1510 _safeInset.setStrip(2);
1511 _safeInset.setPosition(Common::Point(160, 141));
1512 _safeInset.fixPriority(251);
1513 _safeInset.setDetails(560, 45, 46, -1);
1514
1515 _sceneMode = 3;
1516 }
1517 } else if ((_sceneMode != 3) && (_sceneMode != 4)) {
1518 if (!BF_GLOBALS.getFlag(fGotPointsForPunch)) {
1519 T2_GLOBALS._uiElements.addScore(10);
1520 BF_GLOBALS.setFlag(fGotPointsForPunch);
1521 }
1522
1523 _boxInset.postInit();
1524 _boxInset.setVisage(560);
1525 _boxInset.setStrip(2);
1526 _boxInset.setFrame(4);
1527 _boxInset.setPosition(Common::Point(160, 141));
1528 _boxInset.fixPriority(251);
1529 _boxInset.setDetails(560, 43, 44, -1);
1530
1531 _sceneMode = 4;
1532 }
1533 break;
1534 case 10:
1535 _field11EA = false;
1536 BF_GLOBALS._player.enableControl();
1537 break;
1538 case 11:
1539 BF_GLOBALS._sceneManager.changeScene(270);
1540 break;
1541 default:
1542 break;
1543 }
1544 }
1545
process(Event & event)1546 void Scene560::process(Event &event) {
1547 if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
1548 (_field380) && !_action) {
1549 _destPosition = event.mousePos;
1550 BF_GLOBALS._player.disableControl();
1551 setAction(&_action2);
1552
1553 event.handled = true;
1554 }
1555
1556 SceneExt::process(event);
1557 }
1558
dispatch()1559 void Scene560::dispatch() {
1560 if (!_field11EA && (BF_GLOBALS._player._position.y < 105)) {
1561 _field11EA = true;
1562 BF_GLOBALS._player.disableControl();
1563 BF_GLOBALS._sceneManager.changeScene(270);
1564 }
1565
1566 SceneExt::dispatch();
1567 }
1568
1569 /*--------------------------------------------------------------------------
1570 * Scene 570 - Computer
1571 *
1572 *--------------------------------------------------------------------------*/
1573
PasswordEntry()1574 Scene570::PasswordEntry::PasswordEntry(): EventHandler() {
1575 _passwordStr = SCENE570_PASSWORD;
1576 }
1577
synchronize(Serializer & s)1578 void Scene570::PasswordEntry::synchronize(Serializer &s) {
1579 EventHandler::synchronize(s);
1580 s.syncString(_entryBuffer);
1581 }
1582
postInit(SceneObjectList * OwnerList)1583 void Scene570::PasswordEntry::postInit(SceneObjectList *OwnerList) {
1584 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
1585
1586 scene->_sceneMode = 10;
1587 scene->_object3.setStrip(6);
1588 scene->_object3.setFrame(1);
1589 scene->_object3.fixPriority(3);
1590
1591 _passwordText._color1 = 22;
1592 _passwordText._color2 = 9;
1593 _passwordText._color3 = 9;
1594 _passwordText._width = 128;
1595 _passwordText._fontNumber = 9000;
1596 _passwordText.setPosition(Common::Point(165, 40));
1597 _passwordText.fixPriority(255);
1598 _passwordText.setup(_passwordStr);
1599
1600 _entryText._color1 = 22;
1601 _entryText._color2 = 9;
1602 _entryText._color3 = 9;
1603 _entryText._width = 128;
1604 _entryText._fontNumber = 9000;
1605 _entryText.setPosition(Common::Point(220, 40));
1606 _entryText.fixPriority(255);
1607 _entryText.setup(_entryBuffer);
1608 }
1609
process(Event & event)1610 void Scene570::PasswordEntry::process(Event &event) {
1611 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
1612 bool entryChanged = false;
1613
1614 switch (event.eventType) {
1615 case EVENT_KEYPRESS: {
1616 int key = toupper(event.kbd.ascii);
1617 scene->_sound1.play(72);
1618
1619 if ((event.kbd.keycode == Common::KEYCODE_BACKSPACE) || (event.kbd.keycode == Common::KEYCODE_DELETE)) {
1620 // Delete a key from the entry
1621 if (_entryBuffer.size() > 0)
1622 _entryBuffer.deleteLastChar();
1623 entryChanged = true;
1624 } else if (event.kbd.keycode == Common::KEYCODE_RETURN) {
1625 // Finished entering password
1626 _passwordText.remove();
1627 _entryText.remove();
1628
1629 checkPassword();
1630 remove();
1631 } else if ((key >= 32) && (key <= 126)) {
1632 // Valid character pressed
1633 if (_entryBuffer.size() < 10)
1634 _entryBuffer += (char)key;
1635 event.handled = true;
1636 entryChanged = true;
1637 }
1638 break;
1639 }
1640 case EVENT_BUTTON_DOWN:
1641 event.handled = true;
1642 break;
1643 default:
1644 break;
1645 }
1646
1647 if (entryChanged) {
1648 _entryText._color1 = 22;
1649 _entryText._color2 = 9;
1650 _entryText._color3 = 9;
1651 _entryText._width = 128;
1652 _entryText._fontNumber = 9000;
1653 _entryText.setPosition(Common::Point(213, 40));
1654 _entryText.fixPriority(255);
1655 _entryText.setup(_entryBuffer);
1656
1657 // Pad entered text with spaces to make up the allowed width and then display
1658 Common::String msg = _entryBuffer;
1659 while (msg.size() < 10)
1660 msg += " ";
1661 _entryText.setup(msg);
1662 }
1663 }
1664
checkPassword()1665 void Scene570::PasswordEntry::checkPassword() {
1666 // Check if the password is correctly entered as 'JACKIE' or, as a nod to the
1667 // reimplementation in ScummVM, as the project name.
1668 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
1669
1670 if (!_entryBuffer.compareTo("JACKIE") || !_entryBuffer.compareTo("SCUMMVM")) {
1671 // Password was correct
1672 T2_GLOBALS._uiElements.addScore(30);
1673 BF_GLOBALS._player.disableControl();
1674 scene->_sound1.play(73);
1675
1676 T2_GLOBALS._uiElements.hide();
1677 T2_GLOBALS._uiElements._active = false;
1678 scene->_sceneMode = 5701;
1679 scene->setAction(&scene->_sequenceManager, scene, 5701, &scene->_object3, NULL);
1680 } else {
1681 // Password was incorrect
1682 _entryBuffer = "";
1683
1684 scene->_object3.fixPriority(1);
1685 scene->_iconManager.refreshList();
1686 BF_GLOBALS._events.setCursor(CURSOR_USE);
1687 scene->_sceneMode = 0;
1688 }
1689 }
1690
IconManager()1691 Scene570::IconManager::IconManager(): EventHandler() {
1692 _mode = _selectedFolder = _fieldAA = _fieldAC = 0;
1693 }
1694
remove()1695 void Scene570::IconManager::remove() {
1696 _object1.remove();
1697 EventHandler::remove();
1698 }
1699
setup(int mode)1700 void Scene570::IconManager::setup(int mode) {
1701 _mode = mode;
1702 _selectedFolder = 0;
1703
1704 _object1.postInit();
1705 _object1.setVisage(572);
1706 _object1.fixPriority(2);
1707 _object1.setFrame((mode == 1) ? 4 : 5);
1708 EventHandler::postInit();
1709 }
1710
hideList()1711 void Scene570::IconManager::hideList() {
1712 SynchronizedList<Icon *>::iterator i;
1713 for (i = _list.begin(); i != _list.end(); ++i) {
1714 (*i)->_sceneText.remove();
1715 }
1716 }
1717
refreshList()1718 void Scene570::IconManager::refreshList() {
1719 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
1720
1721 _object1.setPosition(Common::Point(163, 19));
1722 scene->_object3.setStrip(4);
1723
1724 // Clear any current icons
1725 SynchronizedList<Icon *>::iterator i;
1726 for (i = _list.begin(); i != _list.end(); ++i) {
1727 Icon *item = *i;
1728
1729 item->setVisage(572);
1730 item->setStrip(1);
1731 item->fixPriority(2);
1732 item->setPosition(Common::Point(330, 100));
1733 item->_sceneText.remove();
1734 }
1735
1736 // Refresh the list
1737 int iconIndex = 0, folderIndex = 0;
1738 for (i = _list.begin(); i != _list.end(); ++i) {
1739 Icon *item = *i;
1740
1741 if (item->_iconId == 1) {
1742 // Folder
1743 int parentId = item->_parentFolderId;
1744 item->setFrame((_selectedFolder == (item->_folderId - 1)) ? 1 : 8);
1745 item->setPosition(Common::Point(168 + parentId * 11, folderIndex * 8 + 27));
1746 item->_sceneText.setPosition(Common::Point(175 + parentId * 11, folderIndex * 8 + 21));
1747 item->_sceneText.setup(item->_text);
1748 ++folderIndex;
1749 } else if (item->_parentFolderId == _selectedFolder) {
1750 item->setPosition(Common::Point(229, 27 + iconIndex * 12));
1751
1752 switch (item->_iconId) {
1753 case 2:
1754 item->setFrame(9);
1755 break;
1756 case 3:
1757 item->setFrame(7);
1758 break;
1759 case 5:
1760 item->setFrame(10);
1761 break;
1762 case 6:
1763 item->setFrame(11);
1764 break;
1765 case 7:
1766 item->setFrame(12);
1767 break;
1768 default:
1769 break;
1770 }
1771
1772 item->_sceneText.setPosition(Common::Point(236, iconIndex * 12 + 22));
1773 item->_sceneText.setup(item->_text);
1774 ++iconIndex;
1775 }
1776 }
1777 }
1778
addItem(Icon * item)1779 void Scene570::IconManager::addItem(Icon *item) {
1780 _list.push_back(item);
1781 }
1782
Icon()1783 Scene570::Icon::Icon(): NamedObject() {
1784 _iconId = _folderId = 0;
1785 _parentFolderId = 0;
1786 }
1787
synchronize(Serializer & s)1788 void Scene570::Icon::synchronize(Serializer &s) {
1789 NamedObject::synchronize(s);
1790 s.syncAsSint16LE(_iconId);
1791 s.syncAsSint16LE(_folderId);
1792 s.syncAsSint16LE(_parentFolderId);
1793 if (s.getVersion() < 11) {
1794 int useless = 0;
1795 s.syncAsSint16LE(useless);
1796 }
1797 }
1798
remove()1799 void Scene570::Icon::remove() {
1800 _sceneText.remove();
1801 NamedObject::remove();
1802 }
1803
startAction(CursorType action,Event & event)1804 bool Scene570::Icon::startAction(CursorType action, Event &event) {
1805 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
1806
1807 switch (action) {
1808 case CURSOR_LOOK:
1809 switch (_iconId) {
1810 case 1:
1811 SceneItem::display2(570, 9);
1812 break;
1813 case 2:
1814 SceneItem::display2(570, 10);
1815 break;
1816 case 3:
1817 SceneItem::display2(570, 4);
1818 break;
1819 case 5:
1820 SceneItem::display2(570, 11);
1821 break;
1822 case 6:
1823 SceneItem::display2(570, 12);
1824 break;
1825 case 7:
1826 SceneItem::display2(570, 13);
1827 break;
1828 default:
1829 break;
1830 }
1831 return true;
1832 case CURSOR_USE:
1833 // Select the given icon
1834 scene->_sound1.play(73);
1835 switch (_iconId) {
1836 case 1:
1837 // Folder, so select it
1838 scene->_iconManager._selectedFolder = _folderId - 1;
1839 scene->_iconManager.refreshList();
1840 break;
1841 case 2:
1842 scene->_iconManager.hideList();
1843 scene->_sceneMode = 5702;
1844 scene->setAction(&scene->_sequenceManager, scene, 5702, &scene->_object3, NULL);
1845 break;
1846 case 3:
1847 scene->_iconManager.hideList();
1848 scene->_passwordEntry.postInit();
1849 break;
1850 case 5:
1851 SceneItem::display2(570, 5);
1852 break;
1853 case 6:
1854 scene->_iconManager.hideList();
1855 switch (_folderId) {
1856 case 8:
1857 T2_GLOBALS._uiElements.hide();
1858 T2_GLOBALS._uiElements._active = false;
1859 scene->_sceneMode = 5705;
1860 scene->setAction(&scene->_sequenceManager, scene, 5705, &scene->_object3, NULL);
1861 break;
1862 case 10:
1863 T2_GLOBALS._uiElements.hide();
1864 T2_GLOBALS._uiElements._active = false;
1865 scene->_sceneMode = 5706;
1866 scene->setAction(&scene->_sequenceManager, scene, 5706, &scene->_object3, NULL);
1867 break;
1868 case 12:
1869 T2_GLOBALS._uiElements.hide();
1870 T2_GLOBALS._uiElements._active = false;
1871 scene->_sceneMode = 5707;
1872 scene->setAction(&scene->_sequenceManager, scene, 5707, &scene->_object3, NULL);
1873 break;
1874 default:
1875 break;
1876 }
1877 break;
1878 case 7:
1879 scene->_iconManager.hideList();
1880 T2_GLOBALS._uiElements.hide();
1881 T2_GLOBALS._uiElements._active = false;
1882 scene->_sceneMode = 5704;
1883 scene->setAction(&scene->_sequenceManager, scene, 5704, &scene->_object3, NULL);
1884 break;
1885 default:
1886 break;
1887 }
1888 return true;
1889 case CURSOR_TALK:
1890 SceneItem::display2(570, 15);
1891 return true;
1892 case CURSOR_PRINTER:
1893 switch (_iconId) {
1894 case 1:
1895 // Folder - "You can't print that"
1896 SceneItem::display2(570, 8);
1897 break;
1898 case 7:
1899 scene->_sound1.play(74);
1900 if (BF_INVENTORY.getObjectScene(INV_PRINT_OUT) == 570) {
1901 SceneItem::display2(570, 6);
1902 T2_GLOBALS._uiElements.addScore(30);
1903 BF_INVENTORY.setObjectScene(INV_PRINT_OUT, 1);
1904 } else {
1905 SceneItem::display2(570, 7);
1906 }
1907 break;
1908 default:
1909 // You don't want to print that
1910 SceneItem::display2(570, 18);
1911 break;
1912 }
1913 return true;
1914 default:
1915 return NamedObject::startAction(action, event);
1916 }
1917 }
1918
setDetails(int iconId,int folderId,int parentFolderId,const Common::String & msg)1919 void Scene570::Icon::setDetails(int iconId, int folderId, int parentFolderId, const Common::String &msg) {
1920 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
1921 NamedObject::postInit();
1922
1923 _iconId = iconId;
1924 _folderId = folderId;
1925 _parentFolderId = parentFolderId;
1926 _text = msg;
1927
1928 _sceneText._color1 = 22;
1929 _sceneText._color2 = 9;
1930 _sceneText._color3 = 9;
1931 _sceneText._width = 128;
1932 _sceneText._fontNumber = 9000;
1933 _sceneText.fixPriority(2);
1934
1935 BF_GLOBALS._sceneItems.push_front(this);
1936 scene->_iconManager.addItem(this);
1937 }
1938
1939 /*--------------------------------------------------------------------------*/
1940
startAction(CursorType action,Event & event)1941 bool Scene570::PowerSwitch::startAction(CursorType action, Event &event) {
1942 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
1943
1944 switch (action) {
1945 case CURSOR_USE:
1946 if (scene->_object4._flag == 1) {
1947 setFrame(1);
1948 scene->_object3.remove();
1949 } else {
1950 if (!BF_GLOBALS.getFlag(fGotPointsForCoin)) {
1951 T2_GLOBALS._uiElements.addScore(10);
1952 BF_GLOBALS.setFlag(fGotPointsForCoin);
1953 }
1954
1955 scene->_sound1.play(70);
1956 scene->_object4._flag = 1;
1957 setFrame(2);
1958
1959 scene->_object3.postInit();
1960 scene->_object3.fixPriority(1);
1961 scene->_object3.setDetails(570, 16, 15, 17);
1962 BF_GLOBALS._sceneItems.remove(&scene->_object3);
1963 BF_GLOBALS._sceneItems.push_front(&scene->_object3);
1964
1965 BF_GLOBALS._player.disableControl();
1966 scene->_sceneMode = 5700;
1967 setAction(&scene->_sequenceManager, scene, 5700, &scene->_object3, NULL);
1968 }
1969 return true;
1970 default:
1971 return NamedObject::startAction(action, event);
1972 }
1973 }
1974
startAction(CursorType action,Event & event)1975 bool Scene570::PrinterIcon::startAction(CursorType action, Event &event) {
1976 if (action == CURSOR_USE) {
1977 BF_GLOBALS._events.setCursor(CURSOR_PRINTER);
1978 return true;
1979 } else {
1980 return NamedObject::startAction(action, event);
1981 }
1982 }
1983
remove()1984 void Scene570::Object3::remove() {
1985 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
1986 scene->_object4._flag = 0;
1987
1988 scene->_printerIcon.remove();
1989 scene->_iconManager.remove();
1990 scene->_folder1.remove();
1991 scene->_folder2.remove();
1992 scene->_folder3.remove();
1993 scene->_folder4.remove();
1994 scene->_icon1.remove();
1995 scene->_icon2.remove();
1996 scene->_icon3.remove();
1997 scene->_icon4.remove();
1998 scene->_icon5.remove();
1999 scene->_icon6.remove();
2000 scene->_icon7.remove();
2001 scene->_icon8.remove();
2002 scene->_icon9.remove();
2003
2004 FocusObject::remove();
2005 BF_GLOBALS._sceneManager.changeScene(560);
2006 }
2007
2008 /*--------------------------------------------------------------------------*/
2009
startAction(CursorType action,Event & event)2010 bool Scene570::FloppyDrive::startAction(CursorType action, Event &event) {
2011 Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
2012
2013 switch (action) {
2014 case CURSOR_USE:
2015 if (BF_INVENTORY.getObjectScene(INV_D_FLOPPY) == 571) {
2016 BF_INVENTORY.setObjectScene(INV_D_FLOPPY, 1);
2017 scene->_iconManager.refreshList();
2018 SceneItem::display2(570, 2);
2019 } else {
2020 SceneItem::display2(570, 3);
2021 }
2022 return true;
2023 case INV_D_FLOPPY:
2024 BF_INVENTORY.setObjectScene(INV_D_FLOPPY, 571);
2025 scene->_iconManager.refreshList();
2026 return true;
2027 default:
2028 return NamedHotspot::startAction(action, event);
2029 }
2030 }
2031
2032 /*--------------------------------------------------------------------------*/
2033
postInit(SceneObjectList * OwnerList)2034 void Scene570::postInit(SceneObjectList *OwnerList) {
2035 SceneExt::postInit();
2036 loadScene(570);
2037
2038 _stripManager.addSpeaker(&_gameTextSpeaker);
2039 if (BF_GLOBALS._dayNumber == 0)
2040 BF_GLOBALS._dayNumber = 1;
2041
2042 _object4._flag = 0;
2043 BF_GLOBALS._player.postInit();
2044 BF_GLOBALS._player.enableControl();
2045 BF_GLOBALS._player.hide();
2046
2047 _powerSwitch.postInit();
2048 _powerSwitch.setVisage(570);
2049 _powerSwitch.setStrip(4);
2050 _powerSwitch.setFrame(1);
2051 _powerSwitch.setPosition(Common::Point(163, 131));
2052 _powerSwitch.setDetails(570, 1, 15, -1, 1, (SceneItem *)NULL);
2053
2054 _floppyDrive.setDetails(Rect(258, 111, 303, 120), 570, 0, 15, -1, 1, NULL);
2055 _item11.setDetails(0, 570, 15, 15, 15, 1);
2056 _monitor.setDetails(1, 570, 19, 20, 21, 1);
2057 _item3.setDetails(2, 570, 22, 23, 24, 1);
2058 _case.setDetails(3, 570, 25, 26, 27, 1);
2059 _keyboard.setDetails(4, 570, 28, 29, 30, 1);
2060 _desk.setDetails(5, 570, 31, 32, 33, 1);
2061 _printer.setDetails(7, 570, 37, 38, 39, 1);
2062 _window.setDetails(8, 570, 40, 41, 42, 1);
2063 _plant.setDetails(9, 570, 43, 44, 45, 1);
2064
2065 if ((BF_GLOBALS._dayNumber == 1) && (BF_INVENTORY.getObjectScene(INV_CRATE1) == 1)) {
2066 _object4.postInit();
2067 _object4.setVisage(574);
2068 _object4.setPosition(Common::Point(90, 84));
2069 }
2070 }
2071
signal()2072 void Scene570::signal() {
2073 switch (_sceneMode) {
2074 case 5700:
2075 _object3.setStrip(4);
2076 _object3.setFrame(1);
2077
2078 _printerIcon.postInit();
2079 _printerIcon.setVisage(572);
2080 _printerIcon.setFrame(3);
2081 _printerIcon.setPosition(Common::Point(172, 71));
2082 _printerIcon.fixPriority(2);
2083 _printerIcon.setDetails(570, 14, 15, -1, 2, (SceneItem *)NULL);
2084
2085 _iconManager.setup(2);
2086 _folder1.setDetails(1, 1, 0, SCENE570_C_DRIVE);
2087 _folder2.setDetails(1, 2, 1, SCENE570_RING);
2088 _folder3.setDetails(1, 3, 1, SCENE570_PROTO);
2089 _folder4.setDetails(1, 4, 1, SCENE570_WACKY);
2090
2091 if (!BF_GLOBALS.getFlag(fDecryptedBluePrints))
2092 _icon1.setDetails(3, 5, 0, SCENE570_COBB);
2093 _icon2.setDetails(2, 7, 0, SCENE570_LETTER);
2094 if (BF_GLOBALS.getFlag(fDecryptedBluePrints))
2095 _icon3.setDetails(7, 6, 0, SCENE570_COBB);
2096
2097 _icon4.setDetails(6, 8, 1, SCENE570_RINGEXE);
2098 _icon5.setDetails(5, 9, 1, SCENE570_RINGDATA);
2099 _icon6.setDetails(6, 10, 2, SCENE570_PROTOEXE);
2100 _icon7.setDetails(5, 11, 2, SCENE570_PROTODATA);
2101 _icon8.setDetails(6, 12, 3, SCENE570_WACKYEXE);
2102 _icon9.setDetails(5, 13, 3, SCENE570_WACKYDATA);
2103
2104 _iconManager.refreshList();
2105 BF_GLOBALS._player.enableControl();
2106 break;
2107 case 5701:
2108 BF_GLOBALS.setFlag(fDecryptedBluePrints);
2109 _iconManager._list.remove(&_icon1);
2110 _icon1.remove();
2111
2112 _object3.setVisage(572);
2113 _object3.setStrip(4);
2114 _object3.setFrame(1);
2115 _object3.fixPriority(1);
2116
2117 _icon3.setDetails(7, 6, 0, SCENE570_COBB);
2118 _iconManager.refreshList();
2119 T2_GLOBALS._uiElements._active = true;
2120 T2_GLOBALS._uiElements.show();
2121 BF_GLOBALS._player.enableControl();
2122 break;
2123 case 5704:
2124 case 5705:
2125 case 5706:
2126 case 5707:
2127 T2_GLOBALS._uiElements._active = true;
2128 T2_GLOBALS._uiElements.show();
2129 _object3.setPosition(Common::Point(220, 75));
2130 _object3.setVisage(572);
2131 _object3.setStrip(4);
2132 _object3.setFrame(1);
2133 // fall through
2134 case 5702:
2135 case 5703:
2136 _object3.fixPriority(1);
2137 _iconManager.refreshList();
2138 BF_GLOBALS._player.enableControl();
2139 break;
2140 default:
2141 break;
2142 }
2143 }
2144
process(Event & event)2145 void Scene570::process(Event &event) {
2146 SceneExt::process(event);
2147
2148 if (!event.handled && (_sceneMode == 10))
2149 // Password entry active, so pass events to it
2150 _passwordEntry.process(event);
2151 }
2152
2153 /*--------------------------------------------------------------------------
2154 * Scene 580 - Child Protective Services Parking Lot
2155 *
2156 *--------------------------------------------------------------------------*/
2157
startAction(CursorType action,Event & event)2158 bool Scene580::Vechile::startAction(CursorType action, Event &event) {
2159 Scene580 *scene = (Scene580 *)BF_GLOBALS._sceneManager._scene;
2160
2161 if (action == CURSOR_USE) {
2162 BF_GLOBALS._player.disableControl();
2163 scene->_sceneMode = 1;
2164 scene->setAction(&scene->_sequenceManager, scene, 5800, &BF_GLOBALS._player, NULL);
2165 return true;
2166 } else {
2167 return NamedObject::startAction(action, event);
2168 }
2169 }
2170
startAction(CursorType action,Event & event)2171 bool Scene580::Door::startAction(CursorType action, Event &event) {
2172 Scene580 *scene = (Scene580 *)BF_GLOBALS._sceneManager._scene;
2173
2174 if (action == CURSOR_USE) {
2175 BF_GLOBALS._player.disableControl();
2176 scene->_sceneMode = 5802;
2177 scene->setAction(&scene->_sequenceManager, scene, 5802, &BF_GLOBALS._player, this, NULL);
2178 return true;
2179 } else {
2180 return NamedObject::startAction(action, event);
2181 }
2182 }
2183
startAction(CursorType action,Event & event)2184 bool Scene580::Lyle::startAction(CursorType action, Event &event) {
2185 if (action == CURSOR_LOOK) {
2186 SceneItem::display2(580, 7);
2187 return true;
2188 } else {
2189 return NamedObject::startAction(action, event);
2190 }
2191 }
2192
2193 /*--------------------------------------------------------------------------*/
2194
postInit(SceneObjectList * OwnerList)2195 void Scene580::postInit(SceneObjectList *OwnerList) {
2196 SceneExt::postInit();
2197 loadScene(580);
2198 setZoomPercents(45, 95, 55, 100);
2199 BF_GLOBALS._sound1.changeSound(33);
2200
2201 if (BF_GLOBALS._dayNumber == 0)
2202 BF_GLOBALS._dayNumber = 1;
2203
2204 BF_GLOBALS._player.postInit();
2205 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
2206 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
2207 BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
2208
2209 _door.postInit();
2210 _door.setVisage(580);
2211 _door.setStrip(4);
2212 _door.setPosition(Common::Point(168, 41));
2213 _door.hide();
2214 _door.setDetails(580, 5, -1, -1, 1, (SceneItem *)NULL);
2215
2216 _vechile.postInit();
2217 _vechile.setVisage(580);
2218 _vechile.fixPriority(65);
2219
2220 if (BF_GLOBALS.getFlag(fWithLyle)) {
2221 _lyle.postInit();
2222 _lyle.setVisage(835);
2223 _lyle.setObjectWrapper(new SceneObjectWrapper());
2224 _lyle.animate(ANIM_MODE_1, NULL);
2225 _lyle._moveDiff = Common::Point(2, 1);
2226 _lyle.setPosition(Common::Point(149, 70));
2227 BF_GLOBALS._sceneItems.push_back(&_lyle);
2228
2229 _vechile.changeZoom(90);
2230 _vechile.setStrip(3);
2231 _vechile.setPosition(Common::Point(165, 76));
2232 _vechile.setDetails(580, 2, 3, -1, 1, (SceneItem *)NULL);
2233
2234 BF_GLOBALS._player.setVisage(303);
2235
2236 BF_GLOBALS._walkRegions.disableRegion(8);
2237 BF_GLOBALS._walkRegions.disableRegion(9);
2238 BF_GLOBALS._walkRegions.disableRegion(10);
2239 BF_GLOBALS._walkRegions.disableRegion(11);
2240 } else {
2241 _vechile.setPosition(Common::Point(159, 72));
2242
2243 if (BF_GLOBALS.getFlag(onDuty)) {
2244 _vechile.setStrip(1);
2245 _vechile.setFrame(2);
2246 _vechile.setDetails(300, 11, 13, -1, 1, (SceneItem *)NULL);
2247
2248 BF_GLOBALS._player.setVisage(304);
2249 } else {
2250 _vechile.setStrip(2);
2251 _vechile.setFrame(3);
2252 _vechile.setDetails(580, 0, 1, -1, 1, (SceneItem *)NULL);
2253
2254 BF_GLOBALS._player.setVisage(303);
2255 }
2256 }
2257
2258 BF_GLOBALS._player.updateAngle(_vechile._position);
2259
2260 if (BF_GLOBALS._sceneManager._previousScene == 590) {
2261 // Leaving Services
2262 BF_GLOBALS._player.disableControl();
2263 _sceneMode = 0;
2264 setAction(&_sequenceManager, this, 5801, &BF_GLOBALS._player, NULL);
2265 } else {
2266 // Arriving at parking lot
2267 BF_GLOBALS._player.setPosition(Common::Point(177, 58));
2268 signal();
2269 }
2270
2271 _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 580, 6, -1, -1, 1, NULL);
2272 }
2273
signal()2274 void Scene580::signal() {
2275 switch (_sceneMode) {
2276 case 1:
2277 BF_GLOBALS._sceneManager.changeScene(60);
2278 break;
2279 case 5802:
2280 BF_GLOBALS._sound1.fadeOut2(NULL);
2281 BF_GLOBALS._sceneManager.changeScene(590);
2282 break;
2283 default:
2284 BF_GLOBALS._player.enableControl();
2285 break;
2286 }
2287 }
2288
process(Event & event)2289 void Scene580::process(Event &event) {
2290 if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
2291 BF_GLOBALS._player.contains(event.mousePos)) {
2292 BF_GLOBALS._player.disableControl();
2293 SceneItem::display2(350, 26);
2294
2295 _sceneMode = 0;
2296 signal();
2297 event.handled = true;
2298 }
2299 }
2300
2301 /*--------------------------------------------------------------------------
2302 * Scene 590 - Child Protective Services
2303 *
2304 *--------------------------------------------------------------------------*/
2305
startAction(CursorType action,Event & event)2306 bool Scene590::Laura::startAction(CursorType action, Event &event) {
2307 Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
2308
2309 switch (action) {
2310 case CURSOR_TALK:
2311 if (!scene->_field17DC)
2312 scene->_stripNumber = 5905;
2313 else if (!scene->_field17DE) {
2314 if (scene->_field17E2) {
2315 scene->_stripNumber = 5907;
2316 } else {
2317 scene->_field17E2 = 1;
2318 scene->_stripNumber = 5906;
2319 }
2320 }
2321
2322 scene->setAction(&scene->_action1);
2323 return true;
2324 default:
2325 return NamedObject::startAction(action, event);
2326 }
2327 }
2328
startAction(CursorType action,Event & event)2329 bool Scene590::Skip::startAction(CursorType action, Event &event) {
2330 Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
2331
2332 switch (action) {
2333 case CURSOR_TALK:
2334 if (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) == 1) {
2335 scene->_stripNumber = !scene->_field17DC ? 5903 : 5902;
2336 } else {
2337 scene->_stripNumber = !scene->_field17DC ? 5901 : 5902;
2338 }
2339
2340 scene->setAction(&scene->_action1);
2341 scene->_field17DC = 1;
2342 return true;
2343 case INV_BASEBALL_CARD:
2344 scene->_field17DE = 1;
2345 T2_GLOBALS._uiElements.addScore(10);
2346 BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 2);
2347 BF_GLOBALS._player.disableControl();
2348
2349 scene->_stripNumber = !scene->_field17DC ? 5900 : 5904;
2350 scene->_field17DC = 1;
2351 scene->setAction(&scene->_action2);
2352 return true;
2353 default:
2354 return NamedObject::startAction(action, event);
2355 }
2356 }
2357
2358 /*--------------------------------------------------------------------------*/
2359
startAction(CursorType action,Event & event)2360 bool Scene590::Exit::startAction(CursorType action, Event &event) {
2361 ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 100, BF_GLOBALS._player._position.y + 75);
2362 return true;
2363 }
2364
2365 /*--------------------------------------------------------------------------*/
2366
signal()2367 void Scene590::Action1::signal() {
2368 Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
2369
2370 switch (_actionIndex++) {
2371 case 0:
2372 BF_GLOBALS._player.disableControl();
2373 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
2374 ADD_PLAYER_MOVER(220, 132);
2375 break;
2376 case 1:
2377 scene->_stripManager.start(scene->_stripNumber, this);
2378 break;
2379 case 2:
2380 BF_GLOBALS._player.enableControl();
2381 remove();
2382 break;
2383 default:
2384 break;
2385 }
2386 }
2387
signal()2388 void Scene590::Action2::signal() {
2389 Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
2390
2391 switch (_actionIndex++) {
2392 case 0: {
2393 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
2394 ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 220, 132);
2395 break;
2396 }
2397 case 1:
2398 ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 220, 132);
2399 break;
2400 case 2:
2401 BF_GLOBALS._player.setVisage(381);
2402 BF_GLOBALS._player.setStrip(2);
2403 BF_GLOBALS._player.setFrame(1);
2404 BF_GLOBALS._player.setPosition(Common::Point(257, 130));
2405 BF_GLOBALS._player.animate(ANIM_MODE_4, 3, 1, this);
2406
2407 scene->_skip.setStrip(2);
2408 scene->_skip.animate(ANIM_MODE_5, NULL);
2409 break;
2410 case 3:
2411 scene->_skip.animate(ANIM_MODE_6, NULL);
2412 BF_GLOBALS._player.animate(ANIM_MODE_5, this);
2413 break;
2414 case 4:
2415 scene->_skip.setStrip(1);
2416 scene->_skip.animate(ANIM_MODE_1, NULL);
2417
2418 BF_GLOBALS._player.setVisage(368);
2419 BF_GLOBALS._player.setStrip(7);
2420 BF_GLOBALS._player.setPosition(Common::Point(238, 131));
2421 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
2422 scene->_stripManager.start(scene->_stripNumber, this);
2423 break;
2424 case 5:
2425 scene->_sceneMode = 3;
2426 scene->signal();
2427 break;
2428 default:
2429 break;
2430 }
2431 }
2432
2433 /*--------------------------------------------------------------------------*/
2434
Scene590()2435 Scene590::Scene590(): PalettedScene() {
2436 _field17DC = _field17DE = _stripNumber = _field17E2 = 0;
2437 }
2438
synchronize(Serializer & s)2439 void Scene590::synchronize(Serializer &s) {
2440 PalettedScene::synchronize(s);
2441 s.syncAsSint16LE(_field17DC);
2442 s.syncAsSint16LE(_field17DE);
2443 s.syncAsSint16LE(_stripNumber);
2444 s.syncAsSint16LE(_field17E2);
2445 }
2446
postInit(SceneObjectList * OwnerList)2447 void Scene590::postInit(SceneObjectList *OwnerList) {
2448 PalettedScene::postInit();
2449 loadScene(590);
2450
2451 BF_GLOBALS._sound1.fadeOut2(NULL);
2452 _sound1.play(18);
2453 _sound1.fade(100, 5, 10, false, NULL);
2454
2455 if (BF_GLOBALS._dayNumber == 0) {
2456 BF_GLOBALS._dayNumber = 1;
2457 BF_GLOBALS._bookmark = bEndOfWorkDayOne;
2458 BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 1);
2459 }
2460
2461 _exit.setDetails(Rect(0, 157, 182, 167), 590, -1, -1, -1, 1, NULL);
2462
2463 BF_GLOBALS._player.postInit();
2464 BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
2465 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
2466 BF_GLOBALS._player.setPosition(Common::Point(0, 190));
2467
2468 _stripManager.addSpeaker(&_skipSpeaker);
2469 _stripManager.addSpeaker(&_lauraSpeaker);
2470 _stripManager.addSpeaker(&_jakeJacketSpeaker);
2471
2472 if (BF_GLOBALS.getFlag(onDuty)) {
2473 BF_GLOBALS._player.setVisage(361);
2474 BF_GLOBALS._player._moveDiff = Common::Point(6, 2);
2475 } else {
2476 BF_GLOBALS._player.setVisage(368);
2477 BF_GLOBALS._player._moveDiff = Common::Point(6, 2);
2478
2479 if ((BF_GLOBALS._bookmark >= bEndOfWorkDayOne) && (BF_GLOBALS._bookmark < bLyleStoppedBy)) {
2480 _skip.postInit();
2481 _skip.setVisage(693);
2482 _skip.setPosition(Common::Point(271, 117));
2483 _skip.setDetails(590, 26, -1, 27, 1, (SceneItem *)NULL);
2484
2485 _laura.postInit();
2486 _laura.setVisage(692);
2487 _laura.setPosition(Common::Point(248, 115));
2488 _laura.setDetails(590, 24, -1, 25, 1, (SceneItem *)NULL);
2489 }
2490 }
2491
2492 _item2.setDetails(1, 590, 0, -1, 12, 1);
2493 _item3.setDetails(3, 590, 2, -1, 14, 1);
2494 _item4.setDetails(20, 590, 3, -1, 15, 1);
2495 _item5.setDetails(22, 590, 4, -1, 16, 1);
2496 _item6.setDetails(7, 590, 6, -1, 17, 1);
2497 _item7.setDetails(7, 590, 6, -1, 18, 1);
2498 _item8.setDetails(9, 590, 7, -1, 19, 1);
2499 _item9.setDetails(11, 590, 8, -1, 20, 1);
2500 _item10.setDetails(13, 590, 9, -1, 21, 1);
2501 _item11.setDetails(15, 590, 10, -1, 22, 1);
2502 _item12.setDetails(17, 590, 11, -1, 23, 1);
2503
2504 BF_GLOBALS._player.disableControl();
2505 _sceneMode = 0;
2506 setAction(&_sequenceManager, this, 5900, &BF_GLOBALS._player, NULL);
2507 }
2508
signal()2509 void Scene590::signal() {
2510 static uint32 black = 0;
2511
2512 switch (_sceneMode) {
2513 case 1:
2514 _sound1.fadeOut2(NULL);
2515 BF_GLOBALS._sceneManager.changeScene(271);
2516 break;
2517 case 2:
2518 _sound1.fadeOut2(NULL);
2519 BF_GLOBALS._sceneManager.changeScene(580);
2520 break;
2521 case 3:
2522 BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
2523 ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 0, 170);
2524
2525 _skip.animate(ANIM_MODE_1, NULL);
2526 ADD_MOVER_NULL(_skip, 0, 170);
2527
2528 _laura.animate(ANIM_MODE_1, NULL);
2529 ADD_MOVER_NULL(_laura, 0, 170);
2530
2531 _sceneMode = 1;
2532 addFader((byte *)&black, 2, this);
2533 break;
2534 default:
2535 BF_GLOBALS._player.enableControl();
2536 break;
2537 }
2538 }
2539
process(Event & event)2540 void Scene590::process(Event &event) {
2541 SceneExt::process(event);
2542
2543 if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
2544 // Check if the cursor is on an exit
2545 if (_exit.contains(event.mousePos)) {
2546 GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
2547 BF_GLOBALS._events.setCursor(surface);
2548 } else {
2549 // In case an exit cursor was being shown, restore the previously selected cursor
2550 CursorType cursorId = BF_GLOBALS._events.getCursor();
2551 BF_GLOBALS._events.setCursor(cursorId);
2552 }
2553 }
2554 }
2555
dispatch()2556 void Scene590::dispatch() {
2557 if (!_action && (BF_GLOBALS._player._position.x < 182) && (BF_GLOBALS._player._position.y > 158)) {
2558 BF_GLOBALS._player.disableControl();
2559 _sceneMode = 2;
2560 setAction(&_sequenceManager, this, 5901, &BF_GLOBALS._player, NULL);
2561 }
2562 }
2563
2564 } // End of namespace BlueForce
2565
2566 } // End of namespace TsAGE
2567