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