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_scenes4.h"
24 #include "tsage/scenes.h"
25 #include "tsage/tsage.h"
26 #include "tsage/staticres.h"
27 
28 namespace TsAGE {
29 
30 namespace BlueForce {
31 
32 /*--------------------------------------------------------------------------
33  * Scene 410 - Traffic Stop Gang Members
34  *
35  *--------------------------------------------------------------------------*/
36 
37 // Talk to driver with backup
signal()38 void Scene410::Action1::signal() {
39 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
40 
41 	switch (scene->_action1Count++) {
42 	case 0:
43 		if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
44 			setDelay(3);
45 		} else {
46 			scene->_sceneMode = 4101;
47 			scene->_stripManager.start(4103, scene);
48 		}
49 		break;
50 	case 1:
51 		scene->_sceneMode = 0;
52 		scene->_stripManager.start(4104, scene);
53 		break;
54 	case 2:
55 		scene->_sceneMode = 0;
56 		scene->_stripManager.start(4105, scene);
57 		break;
58 	default:
59 		scene->_sceneMode = 0;
60 		scene->_stripManager.start(4106, scene);
61 		break;
62 	}
63 }
64 
65 // Talk to passenger with backup
signal()66 void Scene410::Action2::signal() {
67 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
68 	BF_GLOBALS._player.disableControl();
69 
70 	switch (scene->_talkCount++) {
71 	case 0:
72 		scene->_sceneMode = 4105;
73 		scene->_stripManager.start(BF_GLOBALS.getFlag(fTalkedShooterNoBkup) ? 4123 : 4107, scene);
74 		break;
75 	case 1:
76 		scene->_sceneMode = 4110;
77 		scene->_stripManager.start(4102, scene);
78 		break;
79 	case 2:
80 		scene->_sceneMode = 0;
81 		scene->_stripManager.start(4108, scene);
82 		break;
83 	case 3:
84 		scene->_sceneMode = 0;
85 		scene->_stripManager.start(4109, scene);
86 		break;
87 	case 4:
88 		scene->_sceneMode = 0;
89 		scene->_stripManager.start(4110, scene);
90 		break;
91 	default:
92 		SceneItem::display(410, 11, SET_WIDTH, 300,
93 				SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 10,
94 				SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
95 				SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 13, SET_EXT_BGCOLOR, 82,
96 				SET_EXT_FGCOLOR, 13, LIST_END);
97 		BF_GLOBALS._player.enableControl();
98 		break;
99 	}
100 }
101 
102 // Talk to passenger without backup
signal()103 void Scene410::Action3::signal() {
104 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
105 	if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
106 		BF_GLOBALS._player.disableControl();
107 		scene->_sceneMode = 2;
108 		scene->setAction(&scene->_sequenceManager1, scene, 4102, &scene->_passenger, &BF_GLOBALS._player, NULL);
109 	} else {
110 		BF_GLOBALS.setFlag(fTalkedShooterNoBkup);
111 		scene->_sceneMode = 0;
112 		scene->_stripManager.start(4107, scene);
113 	}
114 }
115 
116 // Talk to driver without backup
signal()117 void Scene410::Action4::signal() {
118 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
119 
120 	if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
121 		BF_GLOBALS._player.disableControl();
122 		scene->_sceneMode = 2;
123 		scene->setAction(&scene->_sequenceManager1, scene, 4120, &scene->_passenger, &BF_GLOBALS._player, NULL);
124 	} else {
125 		BF_GLOBALS._player.disableControl();
126 		BF_GLOBALS.setFlag(fTalkedDriverNoBkup);
127 		scene->_sceneMode = 4101;
128 		scene->_stripManager.start(4103, scene);
129 	}
130 }
131 
132 // Talk to passenger
signal()133 void Scene410::Action5::signal() {
134 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
135 
136 	switch (_actionIndex++) {
137 	case 0:
138 		if (!scene->_harrisonMovedFl) {
139 			ADD_PLAYER_MOVER(114, 133);
140 		} else {
141 			ADD_PLAYER_MOVER(195, 139);
142 		}
143 		break;
144 	case 1:
145 		BF_GLOBALS._player.updateAngle(scene->_passenger._position);
146 		setDelay(3);
147 		break;
148 	case 2:
149 		setDelay(3);
150 		break;
151 	case 3:
152 		if (BF_GLOBALS.getFlag(fCalledBackup))
153 			scene->setAction(&scene->_action2);
154 		else
155 			scene->setAction(&scene->_action3);
156 		remove();
157 		break;
158 	default:
159 		break;
160 	}
161 }
162 
163 // Talk to driver
signal()164 void Scene410::Action6::signal() {
165 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
166 
167 	switch (_actionIndex++) {
168 	case 0:
169 		if (!scene->_harrisonMovedFl) {
170 			ADD_PLAYER_MOVER(114, 133);
171 		} else {
172 			ADD_PLAYER_MOVER(126, 99);
173 		}
174 		break;
175 	case 1:
176 		BF_GLOBALS._player.updateAngle(scene->_driver._position);
177 		setDelay(3);
178 		break;
179 	case 2:
180 		setDelay(3);
181 		break;
182 	case 3:
183 		if (BF_GLOBALS.getFlag(fCalledBackup))
184 			scene->setAction(&scene->_action1);
185 		else
186 			scene->setAction(&scene->_action4);
187 		remove();
188 		break;
189 	default:
190 		break;
191 	}
192 }
193 
signal()194 void Scene410::Action7::signal() {
195 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
196 
197 	switch (_actionIndex++) {
198 	case 0:
199 		BF_GLOBALS._player.disableControl();
200 		setDelay(2);
201 		break;
202 	case 1:
203 		BF_GLOBALS._bookmark = bStoppedFrankie;
204 		BF_GLOBALS.set2Flags(f1098Frankie);
205 		BF_GLOBALS.clearFlag(f1098Marina);
206 		scene->_stripManager.start(4113, this);
207 		break;
208 	case 2:
209 	case 4:
210 		setDelay(2);
211 		break;
212 	case 3:
213 		BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
214 		BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
215 		setAction(&scene->_sequenceManager1, this, 4112, &scene->_driver, &scene->_passenger,
216 			&scene->_harrison, NULL);
217 		break;
218 	case 5:
219 		T2_GLOBALS._uiElements.addScore(30);
220 		setAction(&scene->_sequenceManager1, this, 4118, &BF_GLOBALS._player, NULL);
221 		BF_GLOBALS._player.disableControl();
222 		break;
223 	case 6:
224 		scene->_sceneMode = 3;
225 		scene->signal();
226 		break;
227 	default:
228 		break;
229 	}
230 }
231 
232 /*--------------------------------------------------------------------------*/
233 
startAction(CursorType action,Event & event)234 bool Scene410::Motorcycle::startAction(CursorType action, Event &event) {
235 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
236 
237 	switch (action) {
238 	case CURSOR_USE:
239 		if (!BF_GLOBALS.getFlag(fCalledBackup)) {
240 			scene->_sceneMode = 4103;
241 			scene->signal();
242 		} else if (BF_GLOBALS.getFlag(fSearchedTruck) && !BF_GLOBALS._sceneObjects->contains(&scene->_harrison)) {
243 			scene->_sceneMode = 4103;
244 			scene->signal();
245 		} else if (scene->_cuffedDriverFl) {
246 			SceneItem::display2(410, 12);
247 		} else {
248 			scene->_sceneMode = 4103;
249 			scene->signal();
250 		}
251 		return true;
252 	default:
253 		return NamedHotspot::startAction(action, event);
254 	}
255 }
256 
startAction(CursorType action,Event & event)257 bool Scene410::TruckFront::startAction(CursorType action, Event &event) {
258 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
259 
260 	switch (action) {
261 	case CURSOR_USE:
262 		if ((BF_GLOBALS._bookmark < bStoppedFrankie) && (!scene->_cuffedDriverFl || !scene->_harrissonTalkFl))
263 			break;
264 		else if (BF_GLOBALS.getFlag(fSearchedTruck))
265 			SceneItem::display2(410, 13);
266 		else if (BF_GLOBALS.getFlag(fGangInCar)) {
267 			T2_GLOBALS._uiElements.addScore(30);
268 			scene->_sceneMode = 4118;
269 			scene->signal();
270 		} else {
271 			scene->setAction(&scene->_action7);
272 		}
273 		return true;
274 	default:
275 		break;
276 	}
277 
278 	return NamedHotspot::startAction(action, event);
279 }
280 
281 
282 /*--------------------------------------------------------------------------*/
283 
startAction(CursorType action,Event & event)284 bool Scene410::Driver::startAction(CursorType action, Event &event) {
285 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
286 
287 	switch (action) {
288 	case CURSOR_USE:
289 		if (!BF_GLOBALS.getFlag(fCalledBackup)) {
290 			if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
291 				scene->setAction(&scene->_action4);
292 			} else {
293 				SceneItem::display2(410, 7);
294 			}
295 		} else if (!scene->_cuffedDriverFl) {
296 			SceneItem::display2(410, 7);
297 		} else if (!scene->_getDriverFl) {
298 			scene->_sceneMode = 4124;
299 			scene->_getDriverFl = true;
300 			T2_GLOBALS._uiElements.addScore(30);
301 			scene->signal();
302 		} else {
303 			break;
304 		}
305 		return true;
306 	case CURSOR_TALK:
307 		BF_GLOBALS._player.setAction(&scene->_action6);
308 		return true;
309 	case INV_HANDCUFFS:
310 		if (BF_GLOBALS.getFlag(fCalledBackup)) {
311 			if ((scene->_talkCount < 5) || (scene->_action1Count < 1) || scene->_cuffedDriverFl)
312 				break;
313 
314 			BF_GLOBALS._player.disableControl();
315 			scene->_sceneMode = 4123;
316 			scene->_stripManager.start(4125, scene);
317 			scene->_cuffedDriverFl = true;
318 			T2_GLOBALS._uiElements.addScore(30);
319 		} else {
320 			if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
321 				scene->setAction(&scene->_action4);
322 			} else {
323 				break;
324 			}
325 		}
326 		return true;
327 	case INV_TICKET_BOOK:
328 		if (!BF_GLOBALS.getFlag(fDriverOutOfTruck)) {
329 			return startAction(CURSOR_TALK, event);
330 		} else if (!scene->_harrisonMovedFl) {
331 			BF_GLOBALS._player.disableControl();
332 			scene->_sceneMode = 2;
333 			scene->setAction(&scene->_sequenceManager1, scene, 4120, &scene->_passenger, &BF_GLOBALS._player, NULL);
334 		} else if (scene->_cuffedDriverFl || scene->_driverOutOfTruckFl) {
335 			break;
336 		} else {
337 			scene->_driverOutOfTruckFl = true;
338 			T2_GLOBALS._uiElements.addScore(30);
339 			BF_GLOBALS._player.disableControl();
340 			scene->_sceneMode = 4127;
341 			scene->setAction(&scene->_sequenceManager1, scene, 4127, &BF_GLOBALS._player, &scene->_driver, NULL);
342 		}
343 		return true;
344 	case INV_MIRANDA_CARD:
345 		if (!scene->_cuffedDriverFl)
346 			return false;
347 
348 		if (BF_GLOBALS.getFlag(readFrankRights)) {
349 			SceneItem::display2(390, 15);
350 		} else {
351 			BF_GLOBALS.setFlag(readFrankRights);
352 			T2_GLOBALS._uiElements.addScore(30);
353 			BF_GLOBALS._player.disableControl();
354 			scene->_sceneMode = 0;
355 
356 			// TODO: Original code pushes a copy of the entirety of object1 onto stack
357 			scene->setAction(&scene->_sequenceManager1, scene, 4126, &BF_GLOBALS._player, &scene->_driver, NULL);
358 		}
359 		return true;
360 	default:
361 		break;
362 	}
363 
364 	return NamedObject::startAction(action, event);
365 }
366 
startAction(CursorType action,Event & event)367 bool Scene410::Passenger::startAction(CursorType action, Event &event) {
368 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
369 
370 	switch (action) {
371 	case CURSOR_USE:
372 		if (!BF_GLOBALS.getFlag(fCalledBackup)) {
373 			if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup))
374 				scene->setAction(&scene->_action3);
375 			else
376 				SceneItem::display(410, 5, SET_WIDTH, 300,
377 					SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left,
378 					SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
379 					SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 96, SET_EXT_BGCOLOR, 99,
380 					SET_EXT_FGCOLOR, 13, LIST_END);
381 		} else if (!scene->_harrissonTalkFl) {
382 			SceneItem::display(410, 5, SET_WIDTH, 300,
383 				SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left,
384 				SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
385 				SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 96, SET_EXT_BGCOLOR, 99,
386 				SET_EXT_FGCOLOR, 13, LIST_END);
387 		} else if (!scene->_cuffedPassengerFl) {
388 			scene->_sceneMode = 4121;
389 			scene->_cuffedPassengerFl = true;
390 			T2_GLOBALS._uiElements.addScore(50);
391 			scene->signal();
392 		} else
393 			break;
394 		return true;
395 	case CURSOR_TALK:
396 		scene->setAction(&scene->_action5);
397 		return true;
398 	case INV_HANDCUFFS:
399 		if (BF_GLOBALS.getFlag(fCalledBackup)) {
400 			if ((scene->_talkCount < 5) || (scene->_harrissonTalkFl))
401 				break;
402 
403 			BF_GLOBALS._player.disableControl();
404 			scene->_sceneMode = 9;
405 			Common::Point destPos(195, 139);
406 			PlayerMover *mover = new PlayerMover();
407 			BF_GLOBALS._player.addMover(mover, &destPos, scene);
408 		} else if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
409 			scene->setAction(&scene->_action3);
410 		} else {
411 			break;
412 		}
413 		return true;
414 	case INV_MIRANDA_CARD:
415 		if (!scene->_harrissonTalkFl)
416 			break;
417 
418 		if (BF_GLOBALS.getFlag(readFrankRights)) {
419 			SceneItem::display2(390, 15);
420 		} else {
421 			BF_GLOBALS.setFlag(readFrankRights);
422 			T2_GLOBALS._uiElements.addScore(30);
423 			BF_GLOBALS._player.disableControl();
424 
425 			scene->_sceneMode = 0;
426 			scene->setAction(&scene->_sequenceManager1, scene, 4125, &BF_GLOBALS._player,
427 				&scene->_passenger, NULL);
428 		}
429 		return true;
430 	default:
431 		break;
432 	}
433 
434 	return NamedObject::startAction(action, event);
435 }
436 
startAction(CursorType action,Event & event)437 bool Scene410::Harrison::startAction(CursorType action, Event &event) {
438 	Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
439 
440 	switch (action) {
441 	case CURSOR_TALK:
442 		if (BF_GLOBALS._bookmark == bStoppedFrankie) {
443 			if (BF_GLOBALS.getFlag(fSearchedTruck)) {
444 				BF_GLOBALS._player.disableControl();
445 				scene->_sceneMode = 8;
446 
447 				Common::Point destPos(147, 143);
448 				PlayerMover *mover = new PlayerMover();
449 				BF_GLOBALS._player.addMover(mover, &destPos, scene);
450 			} else {
451 				SceneItem::display(350, 13, SET_WIDTH, 300,
452 					SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left,
453 					SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
454 					SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 32, SET_EXT_BGCOLOR, 49,
455 					SET_EXT_FGCOLOR, 13, LIST_END);
456 			}
457 		} else if (scene->_harrissonTalkFl && scene->_cuffedDriverFl) {
458 			BF_GLOBALS._player.disableControl();
459 			scene->_sceneMode = 4112;
460 			scene->_stripManager.start(4113, scene);
461 			BF_GLOBALS._bookmark = bStoppedFrankie;
462 			BF_GLOBALS.set2Flags(f1098Frankie);
463 			BF_GLOBALS.clearFlag(f1098Marina);
464 		} else if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1) ||
465 				(!scene->_harrissonTalkFl && (scene->_talkCount < 5))) {
466 			SceneItem::display(350, 13, SET_WIDTH, 300,
467 				SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left,
468 				SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
469 				SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 32, SET_EXT_BGCOLOR, 49,
470 				SET_EXT_FGCOLOR, 13, LIST_END);
471 		} else if (!scene->_harrissonTalkFl) {
472 			BF_GLOBALS._player.disableControl();
473 			scene->_harrissonTalkFl = true;
474 			scene->_cuffedPassengerFl = true;
475 			BF_GLOBALS._walkRegions.enableRegion(22);
476 			scene->_sceneMode = 4122;
477 			scene->_stripManager.start(4112, scene);
478 		} else if (scene->_action1Count < 1) {
479 			break;
480 		} else if (scene->_cuffedDriverFl) {
481 			error("Error - want to cuff driver, but he's cuffed already");
482 		} else {
483 			BF_GLOBALS._player.disableControl();
484 			scene->_cuffedDriverFl = true;
485 			scene->_getDriverFl = true;
486 			BF_GLOBALS._walkRegions.enableRegion(22);
487 			scene->_sceneMode = 4109;
488 			scene->_stripManager.start(4112, scene);
489 		}
490 		return true;
491 	default:
492 		break;
493 	}
494 
495 	return NamedObject::startAction(action, event);
496 }
497 
498 
499 /*--------------------------------------------------------------------------*/
500 
Scene410()501 Scene410::Scene410(): SceneExt() {
502 	_cuffedDriverFl = _harrissonTalkFl = _driverOutOfTruckFl = false;
503 	_harrisonMovedFl = false;
504 
505 	_action1Count = _talkCount = 0;
506 	_cuffedPassengerFl = false;
507 	_getDriverFl = false;
508 }
509 
synchronize(Serializer & s)510 void Scene410::synchronize(Serializer &s) {
511 	SceneExt::synchronize(s);
512 	s.syncAsSint16LE(_action1Count);
513 	s.syncAsSint16LE(_talkCount);
514 	s.syncAsSint16LE(_harrissonTalkFl);
515 	s.syncAsSint16LE(_cuffedDriverFl);
516 	s.syncAsSint16LE(_cuffedPassengerFl);
517 	s.syncAsSint16LE(_getDriverFl);
518 	s.syncAsSint16LE(_driverOutOfTruckFl);
519 	s.syncAsSint16LE(_harrisonMovedFl);
520 }
521 
postInit(SceneObjectList * OwnerList)522 void Scene410::postInit(SceneObjectList *OwnerList) {
523 	SceneExt::postInit();
524 	loadScene(410);
525 	setZoomPercents(74, 75, 120, 100);
526 
527 	if (BF_GLOBALS._sceneManager._previousScene != 60)
528 		_sound1.fadeSound(11);
529 	BF_GLOBALS._driveToScene = 64;
530 	BF_GLOBALS._mapLocationId = 64;
531 	BF_GLOBALS.setFlag(fArrivedAtGangStop);
532 
533 	_stripManager.addSpeaker(&_gameTextSpeaker);
534 	_stripManager.addSpeaker(&_jakeUniformSpeaker);
535 	_stripManager.addSpeaker(&_harrisonSpeaker);
536 	_stripManager.addSpeaker(&_shooterSpeaker);
537 	_stripManager.addSpeaker(&_driverSpeaker);
538 
539 	BF_GLOBALS._player.postInit();
540 	BF_GLOBALS._player.setVisage(1341);
541 	BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
542 	BF_GLOBALS._player.changeAngle(90);
543 	BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
544 	BF_GLOBALS._player.setPosition(Common::Point(114, 133));
545 	BF_GLOBALS._player.changeZoom(-1);
546 
547 	_motorcycle.setDetails(8, 410, 15, -1, -1, 1);
548 
549 	_passenger.postInit();
550 	_passenger.setVisage(415);
551 	_passenger.setStrip(1);
552 	_passenger.setPosition(Common::Point(278, 92));
553 	_passenger.setDetails(410, 4, -1, 5, 1, (SceneItem *)NULL);
554 
555 	_driver.postInit();
556 	_driver.setVisage(416);
557 	_driver.setStrip(2);
558 	_driver.setPosition(Common::Point(244, 85));
559 	_driver.setDetails(410, 6, -1, 7, 1, (SceneItem *)NULL);
560 	_driver.changeZoom(-1);
561 
562 	_object5.postInit();
563 	_object5.setVisage(410);
564 	_object5.setStrip(2);
565 	_object5.setPosition(Common::Point(282, 96));
566 
567 	_object6.postInit();
568 	_object6.setVisage(410);
569 	_object6.setStrip(4);
570 	_object6.setPosition(Common::Point(240, 43));
571 
572 	_truckFront.setDetails(6, 410, 3, -1, -1, 1);
573 	_truckBack.setDetails(7, 410, 3, -1, -1, 1);
574 
575 	switch (BF_GLOBALS._sceneManager._previousScene) {
576 	case 415:
577 		BF_GLOBALS.setFlag(fSearchedTruck);
578 		BF_GLOBALS._player.setPosition(Common::Point(210, 90));
579 
580 		_passenger.remove();
581 		_driver.remove();
582 		BF_GLOBALS._walkRegions.disableRegion(21);
583 		BF_GLOBALS._walkRegions.disableRegion(22);
584 
585 		_harrison.postInit();
586 		_harrison.setVisage(343);
587 		_harrison.setObjectWrapper(new SceneObjectWrapper());
588 		_harrison.animate(ANIM_MODE_1, NULL);
589 		_harrison.setDetails(350, 12, 13, 14, 1, (SceneItem *)NULL);
590 		_harrison.setPosition(Common::Point(97, 185));
591 		_harrison.changeZoom(-1);
592 
593 		_patrolCar.postInit();
594 		_patrolCar.setVisage(410);
595 		_patrolCar.setDetails(410, 8, 9, 10, 1, (SceneItem *)NULL);
596 		_patrolCar.fixPriority(148);
597 		_patrolCar.setPosition(Common::Point(39, 168));
598 
599 		_harrisonMovedFl = true;
600 		_sceneMode = 0;
601 		signal();
602 		break;
603 	case 60:
604 		if (BF_GLOBALS.getFlag(fSearchedTruck)) {
605 			_passenger.remove();
606 			_driver.remove();
607 			_sceneMode = 0;
608 		} else {
609 			_harrisonMovedFl = BF_GLOBALS._scene410HarrisonMovedFl;
610 			_harrissonTalkFl = BF_GLOBALS._scene410HarrisonTalkFl;
611 			_talkCount = BF_GLOBALS._scene410TalkCount;
612 			_action1Count = BF_GLOBALS._scene410Action1Count;
613 
614 			_passenger.setVisage(418);
615 			_passenger.setStrip(6);
616 			_passenger.setPosition(Common::Point(227, 137));
617 
618 			if (_talkCount > 0) {
619 				_passenger.setVisage(415);
620 				_passenger.setStrip(2);
621 				_passenger.setFrame(5);
622 			}
623 			if (_harrissonTalkFl) {
624 				_passenger.setVisage(415);
625 				_passenger.setStrip(6);
626 				_passenger.setFrame(8);
627 			}
628 
629 			BF_GLOBALS._walkRegions.disableRegion(16);
630 			if (BF_GLOBALS.getFlag(fDriverOutOfTruck)) {
631 				_driver.setVisage(417);
632 				_driver.setStrip(1);
633 				_driver.setPosition(Common::Point(152, 97));
634 
635 				BF_GLOBALS._walkRegions.disableRegion(7);
636 			}
637 
638 			if (BF_GLOBALS.getFlag(fCalledBackup)) {
639 				BF_GLOBALS._walkRegions.disableRegion(21);
640 				BF_GLOBALS._walkRegions.disableRegion(22);
641 
642 				_harrison.postInit();
643 				_harrison.setVisage(343);
644 				_harrison.setObjectWrapper(new SceneObjectWrapper());
645 				_harrison.animate(ANIM_MODE_1, NULL);
646 				_harrison.setDetails(350, 12, 13, 14, 1, (SceneItem *)NULL);
647 				BF_GLOBALS._sceneItems.addBefore(&_driver, &_harrison);
648 
649 				_harrison.setPosition(Common::Point(-10, 124));
650 				_harrison.changeZoom(-1);
651 
652 				_patrolCar.postInit();
653 				_patrolCar.setVisage(410);
654 				_patrolCar.setDetails(410, 8, 9, 10, 1, (SceneItem *)NULL);
655 				_patrolCar.fixPriority(148);
656 
657 				if (_harrisonMovedFl) {
658 					_harrison.setPosition(Common::Point(108, 112));
659 					_patrolCar.fixPriority(148);
660 					_patrolCar.setPosition(Common::Point(39, 168));
661 
662 					_sceneMode = 0;
663 				} else {
664 					_sceneMode = 4104;
665 				}
666 			} else {
667 				_sceneMode = 0;
668 			}
669 
670 			_harrisonMovedFl = true;
671 		}
672 		break;
673 	case 50:
674 	default:
675 		BF_GLOBALS.setFlag(onDuty);
676 		_sound1.play(21);
677 		_sceneMode = 4100;
678 		break;
679 	}
680 
681 	signal();
682 
683 	_background.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 410, 0, 1, 2, 1, NULL);
684 }
685 
signal()686 void Scene410::signal() {
687 	switch (_sceneMode) {
688 	case 1:
689 		BF_GLOBALS.set2Flags(f1097Frankie);
690 		BF_GLOBALS.clearFlag(f1097Marina);
691 
692 		BF_GLOBALS._scene410HarrisonMovedFl = _harrisonMovedFl;
693 		BF_GLOBALS._scene410HarrisonTalkFl = _harrissonTalkFl;
694 		BF_GLOBALS._scene410TalkCount = _talkCount;
695 		BF_GLOBALS._scene410Action1Count = _action1Count;
696 		BF_GLOBALS._sceneManager.changeScene(60);
697 		break;
698 	case 2:
699 		BF_GLOBALS._deathReason = 3;
700 		BF_GLOBALS._sound1.fadeOut2(NULL);
701 		BF_GLOBALS._sceneManager.changeScene(666);
702 		break;
703 	case 3:
704 		BF_GLOBALS._sceneManager.changeScene(415);
705 		break;
706 	case 5:
707 		BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 315);
708 		_sceneMode = 0;
709 		BF_GLOBALS.set2Flags(f1015Frankie);
710 		BF_GLOBALS.clearFlag(f1015Marina);
711 		signal();
712 		break;
713 	case 6:
714 		BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
715 		BF_INVENTORY.setObjectScene(INV_FRANKIE_ID, 1);
716 		BF_GLOBALS.set2Flags(f1027Frankie);
717 		BF_GLOBALS.clearFlag(f1027Marina);
718 		_sceneMode = 0;
719 		signal();
720 		break;
721 	case 7:
722 		BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 1);
723 		_sceneMode = 0;
724 		signal();
725 		break;
726 	case 8:
727 		BF_GLOBALS._walkRegions.enableRegion(22);
728 		BF_GLOBALS._player.changeAngle(225);
729 		_harrison.changeAngle(45);
730 		_sceneMode = 4114;
731 		_stripManager.start(4120, this);
732 		break;
733 	case 9:
734 		_sceneMode = 4106;
735 		_stripManager.start(4111, this);
736 		_harrissonTalkFl = true;
737 		BF_GLOBALS.setFlag(fCuffedFrankie);
738 		T2_GLOBALS._uiElements.addScore(30);
739 		break;
740 	case 10:
741 		BF_GLOBALS._player.updateAngle(_harrison._position);
742 		_sceneMode = 0;
743 		break;
744 	case 4100:
745 		BF_GLOBALS._player.disableControl();
746 		_sceneMode = 0;
747 		setAction(&_sequenceManager1, this, 4100, &_passenger, &_object5, NULL);
748 		BF_GLOBALS._walkRegions.disableRegion(16);
749 		break;
750 	case 4101:
751 		// Driver gets out of the car
752 		BF_GLOBALS._player.disableControl();
753 		_sceneMode = 0;
754 		setAction(&_sequenceManager1, this, 4101, &_driver, &_object6, NULL);
755 		BF_GLOBALS.setFlag(fDriverOutOfTruck);
756 		BF_GLOBALS._walkRegions.disableRegion(7);
757 		break;
758 	case 4103:
759 		// Click on moto to ask for backup
760 		BF_GLOBALS._player.disableControl();
761 		_sceneMode = 1;
762 		setAction(&_sequenceManager1, this, 4103, &BF_GLOBALS._player, NULL);
763 		break;
764 	case 4104:
765 		// After call for backup, patrol car is coming
766 		_harrisonMovedFl = true;
767 		BF_GLOBALS._player.disableControl();
768 		_sceneMode = 0;
769 		setAction(&_sequenceManager1, this, 4104, &_patrolCar, &_harrison, NULL);
770 		break;
771 	case 4105:
772 		// Second guy gets nervous
773 		BF_GLOBALS._player.disableControl();
774 		_sceneMode = 0;
775 		setAction(&_sequenceManager1, this, 4105, &_passenger, NULL);
776 		break;
777 	case 4106:
778 		BF_GLOBALS._player.disableControl();
779 		_sceneMode = 4119;
780 		setAction(&_sequenceManager1, this, 4106, &_passenger, NULL);
781 		break;
782 	case 4107:
783 		BF_GLOBALS._player.disableControl();
784 		_sceneMode = 5;
785 		setAction(&_sequenceManager1, this, 4107, &BF_GLOBALS._player, &_passenger, NULL);
786 		break;
787 	case 4108:
788 		BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
789 		BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
790 		BF_GLOBALS._walkRegions.enableRegion(22);
791 		BF_GLOBALS._walkRegions.enableRegion(7);
792 		BF_GLOBALS._walkRegions.enableRegion(16);
793 		BF_GLOBALS._player.disableControl();
794 		_sceneMode = 0;
795 		setAction(&_sequenceManager1, this, 4108, &_harrison, NULL);
796 		break;
797 	case 4109:
798 		// Harrison puts handcuffs to driver
799 		if ((BF_GLOBALS._player._position.x > 116) && (BF_GLOBALS._player._position.x != 195) &&
800 				(BF_GLOBALS._player._position.y != 139)) {
801 			ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 195, 139);
802 		}
803 
804 		BF_GLOBALS._walkRegions.enableRegion(22);
805 		BF_GLOBALS._player.disableControl();
806 		_sceneMode = 0;
807 		setAction(&_sequenceManager1, this, 4109, &_driver, &_harrison, NULL);
808 		break;
809 	case 4110:
810 		// Harrisson takes care of the driver
811 		BF_GLOBALS._player.disableControl();
812 		_sceneMode = 0;
813 		setAction(&_sequenceManager1, this, 4110, &_harrison, &_driver, NULL);
814 		break;
815 	case 4112:
816 		BF_GLOBALS.setFlag(fGangInCar);
817 		BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
818 		BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
819 		BF_GLOBALS._player.disableControl();
820 		_sceneMode = 4108;
821 		setAction(&_sequenceManager1, this, 4112, &_driver, &_passenger, &_harrison, NULL);
822 		break;
823 	case 4114:
824 		BF_GLOBALS._walkRegions.enableRegion(22);
825 		BF_GLOBALS._player.disableControl();
826 		_sceneMode = 4116;
827 		setAction(&_sequenceManager1, this, 4114, &_harrison, &_patrolCar, NULL);
828 		break;
829 	case 4116:
830 		BF_GLOBALS._walkRegions.enableRegion(21);
831 		BF_GLOBALS._walkRegions.enableRegion(22);
832 		_harrison.remove();
833 		BF_GLOBALS._player.disableControl();
834 		_sceneMode = 0;
835 		setAction(&_sequenceManager1, this, 4116, &_patrolCar, NULL);
836 		break;
837 	case 4118:
838 		BF_GLOBALS._player.disableControl();
839 		_sceneMode = 3;
840 		setAction(&_sequenceManager1, this, 4118, &BF_GLOBALS._player, NULL);
841 		break;
842 	case 4119:
843 		BF_GLOBALS._player.disableControl();
844 		_sceneMode = 4107;
845 		setAction(&_sequenceManager1, this, 4119, &BF_GLOBALS._player, &_passenger, NULL);
846 		break;
847 	case 4121:
848 		BF_GLOBALS._player.disableControl();
849 		_sceneMode = 6;
850 		setAction(&_sequenceManager1, this, 4121, &BF_GLOBALS._player, &_passenger, NULL);
851 		break;
852 	case 4122:
853 		BF_GLOBALS._walkRegions.enableRegion(22);
854 		BF_INVENTORY.setObjectScene(INV_22_SNUB, 0);
855 		BF_GLOBALS._player.disableControl();
856 		_sceneMode = 0;
857 		setAction(&_sequenceManager1, this, 4122, &_passenger, &_harrison, NULL);
858 		break;
859 	case 4123:
860 		BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 0);
861 		BF_GLOBALS._player.disableControl();
862 		_sceneMode = 5;
863 		setAction(&_sequenceManager1, this, 4123, &_driver, &BF_GLOBALS._player, NULL);
864 		break;
865 	case 4124:
866 		BF_GLOBALS._player.disableControl();
867 		_sceneMode = 7;
868 		setAction(&_sequenceManager1, this, 4124, &_driver, &BF_GLOBALS._player, NULL);
869 		break;
870 	case 4127:
871 		SceneItem::display2(410, 16);
872 		BF_GLOBALS._player.enableControl();
873 		break;
874 	case 0:
875 	default:
876 		BF_GLOBALS._player.enableControl();
877 		break;
878 	}
879 }
880 
process(Event & event)881 void Scene410::process(Event &event) {
882 	// Check for gun being clicked on player
883 	if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
884 			BF_GLOBALS._player.contains(event.mousePos) && !BF_GLOBALS.getFlag(fCalledBackup)) {
885 		if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
886 			if (!_action) {
887 				event.handled = true;
888 				BF_GLOBALS._player.disableControl();
889 				_sceneMode = 2;
890 				setAction(&_sequenceManager1, this, 4102, &_passenger, &BF_GLOBALS._player, NULL);
891 			}
892 		} else if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
893 			if (!_action) {
894 				_sceneMode = 1;
895 				BF_GLOBALS._player.disableControl();
896 				_sceneMode = 2;
897 				setAction(&_sequenceManager1, this, 4120, &_passenger, &BF_GLOBALS._player, NULL);
898 			}
899 		}
900 	}
901 
902 	if (!event.handled)
903 		SceneExt::process(event);
904 }
905 
dispatch()906 void Scene410::dispatch() {
907 	SceneExt::dispatch();
908 	if ((_sceneMode == 4112) || (_sceneMode == 4101)) {
909 		_harrison.updateAngle(_driver._position);
910 	}
911 }
912 
913 /*--------------------------------------------------------------------------
914  * Scene 415 - Searching Truck
915  *
916  *--------------------------------------------------------------------------*/
917 
startAction(CursorType action,Event & event)918 bool Scene415::GunInset::startAction(CursorType action, Event &event) {
919 	Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
920 
921 	if (action == CURSOR_USE) {
922 		if (BF_GLOBALS.getFlag(fGotAutoWeapon)) {
923 			FocusObject::startAction(action, event);
924 		} else {
925 			remove();
926 			scene->_gunAndWig.remove();
927 		}
928 		return true;
929 	} else {
930 		return FocusObject::startAction(action, event);
931 	}
932 }
933 
remove()934 void Scene415::GunInset::remove() {
935 	Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
936 
937 	BF_GLOBALS._player.disableControl();
938 	scene->_gunAndWig.remove();
939 	FocusObject::remove();
940 
941 	scene->_sceneMode = 0;
942 	scene->_animatedSeat.animate(ANIM_MODE_6, scene);
943 }
944 
startAction(CursorType action,Event & event)945 bool Scene415::GunAndWig::startAction(CursorType action, Event &event) {
946 	Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
947 
948 	switch (action) {
949 	case CURSOR_USE:
950 		NamedObject::startAction(action, event);
951 		BF_INVENTORY.setObjectScene(INV_AUTO_RIFLE, 1);
952 		BF_INVENTORY.setObjectScene(INV_WIG, 1);
953 		BF_GLOBALS.setFlag(fGotAutoWeapon);
954 		T2_GLOBALS._uiElements.addScore(30);
955 
956 		remove();
957 		return true;
958 	case INV_FOREST_RAP:
959 		if (scene->_scoreWigRapFlag)
960 			break;
961 
962 		BF_GLOBALS._player.disableControl();
963 		scene->_sceneMode = 0;
964 		scene->_stripManager.start(4126, scene);
965 		T2_GLOBALS._uiElements.addScore(50);
966 		scene->_scoreWigRapFlag = true;
967 		return true;
968 	default:
969 		break;
970 	}
971 
972 	return NamedObject::startAction(action, event);
973 }
974 
startAction(CursorType action,Event & event)975 bool Scene415::BulletsInset::startAction(CursorType action, Event &event) {
976 	Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
977 
978 	if (action == CURSOR_USE) {
979 		if (BF_GLOBALS.getFlag(fGotBulletsFromDash)) {
980 			FocusObject::startAction(action, event);
981 		} else {
982 			remove();
983 			scene->_theBullets.remove();
984 		}
985 		return true;
986 	} else {
987 		return FocusObject::startAction(action, event);
988 	}
989 }
990 
remove()991 void Scene415::BulletsInset::remove() {
992 	Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
993 
994 	scene->_theBullets.remove();
995 	FocusObject::remove();
996 }
997 
startAction(CursorType action,Event & event)998 bool Scene415::DashDrawer::startAction(CursorType action, Event &event) {
999 	Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
1000 
1001 	if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) {
1002 		scene->showBullets();
1003 		return true;
1004 	} else {
1005 		return NamedObject::startAction(action, event);
1006 	}
1007 }
1008 
startAction(CursorType action,Event & event)1009 bool Scene415::TheBullets::startAction(CursorType action, Event &event) {
1010 	Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
1011 
1012 	switch (action) {
1013 	case CURSOR_USE:
1014 		NamedObject::startAction(action, event);
1015 		BF_INVENTORY.setObjectScene(INV_22_BULLET, 1);
1016 		BF_GLOBALS.setFlag(fGotBulletsFromDash);
1017 		T2_GLOBALS._uiElements.addScore(30);
1018 
1019 		remove();
1020 		scene->_dashDrawer.remove();
1021 		return true;
1022 	case INV_FOREST_RAP:
1023 		if (scene->_scoreBulletRapFlag) {
1024 			SceneItem::display2(415, 35);
1025 		} else {
1026 			BF_GLOBALS._player.disableControl();
1027 			scene->_sceneMode = 0;
1028 			scene->_stripManager.start(4122, scene);
1029 			T2_GLOBALS._uiElements.addScore(50);
1030 			scene->_scoreBulletRapFlag = true;
1031 		}
1032 		return true;
1033 	default:
1034 		break;
1035 	}
1036 
1037 	return NamedObject::startAction(action, event);
1038 }
1039 
1040 /*--------------------------------------------------------------------------*/
1041 
startAction(CursorType action,Event & event)1042 bool Scene415::Lever::startAction(CursorType action, Event &event) {
1043 	Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
1044 
1045 	switch (action) {
1046 	case CURSOR_USE:
1047 		if (BF_GLOBALS.getFlag(fGotAutoWeapon)) {
1048 			SceneItem::display2(415, 20);
1049 		} else {
1050 			BF_GLOBALS._player.disableControl();
1051 			scene->_sceneMode = 2;
1052 			scene->setAction(&scene->_sequenceManager, scene, 4150, &scene->_animatedSeat, NULL);
1053 		}
1054 		return true;
1055 	default:
1056 		return NamedHotspot::startAction(action, event);
1057 	}
1058 }
1059 
1060 /*--------------------------------------------------------------------------*/
1061 
Scene415()1062 Scene415::Scene415(): SceneExt() {
1063 	_scoreWigRapFlag = _scoreBulletRapFlag = false;
1064 }
1065 
synchronize(Serializer & s)1066 void Scene415::synchronize(Serializer &s) {
1067 	SceneExt::synchronize(s);
1068 	s.syncAsSint16LE(_scoreWigRapFlag);
1069 	s.syncAsSint16LE(_scoreBulletRapFlag);
1070 }
1071 
postInit(SceneObjectList * OwnerList)1072 void Scene415::postInit(SceneObjectList *OwnerList) {
1073 	SceneExt::postInit();
1074 	loadScene(415);
1075 
1076 	_stripManager.addSpeaker(&_jakeRadioSpeaker);
1077 
1078 	_dashDrawer.postInit();
1079 	_dashDrawer.setVisage(411);
1080 	_dashDrawer.setStrip(3);
1081 	_dashDrawer.setPosition(Common::Point(151, 97));
1082 	_dashDrawer.setDetails(415, 22, -1, -1, 1, (SceneItem *)NULL);
1083 
1084 	_animatedSeat.postInit();
1085 	_animatedSeat.setVisage(419);
1086 	_animatedSeat.setStrip(1);
1087 	_animatedSeat.setPosition(Common::Point(306, 116));
1088 	_animatedSeat.fixPriority(80);
1089 
1090 	_windowLever.setDetails(16, 415, 25, -1, 26, 1);
1091 	_item7.setDetails(17, 415, 32, -1, 33, 1);
1092 	_seatBelt.setDetails(14, 415, 29, -1, 30, 1);
1093 	_lever.setDetails(19, 415, 23, 24, -1, 1);
1094 	_seat.setDetails(18, 415, 3, 4, 2, 1);
1095 	_dashboard.setDetails(20, 415, 11, 12, 19, 1);
1096 	_steeringWheel.setDetails(15, 415, 5, 6, 7, 1);
1097 	_horn.setDetails(31, 415, 8, 9, 10, 1);
1098 	_item1.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 415, 0, 1, 2, 1, NULL);
1099 
1100 	BF_GLOBALS._player.enableControl();
1101 	BF_GLOBALS._player._canWalk = false;
1102 	BF_GLOBALS._events.setCursor(CURSOR_WALK);
1103 
1104 	signal();
1105 }
1106 
signal()1107 void Scene415::signal() {
1108 	switch (_sceneMode) {
1109 	case 1:
1110 		BF_GLOBALS._sceneManager.changeScene(410);
1111 		break;
1112 	case 2:
1113 		showGunAndWig();
1114 		_sceneMode = 0;
1115 		signal();
1116 		break;
1117 	case 0:
1118 	default:
1119 		BF_GLOBALS._player.enableControl();
1120 		BF_GLOBALS._player._canWalk = false;
1121 		break;
1122 	}
1123 }
1124 
dispatch()1125 void Scene415::dispatch() {
1126 	SceneExt::dispatch();
1127 	if (BF_GLOBALS.getFlag(fGotAutoWeapon) && BF_GLOBALS.getFlag(fGotBulletsFromDash)) {
1128 		_sceneMode = 1;
1129 		signal();
1130 	}
1131 }
1132 
showBullets()1133 void Scene415::showBullets() {
1134 	_bulletsInset.postInit();
1135 	_bulletsInset.setVisage(411);
1136 	_bulletsInset.setStrip(1);
1137 	_bulletsInset.setPosition(Common::Point(158, 100));
1138 	_bulletsInset.setDetails(415, -1, -1, -1);
1139 
1140 	_theBullets.postInit();
1141 	_theBullets.setVisage(411);
1142 	_theBullets.setStrip(1);
1143 	_theBullets.setFrame(2);
1144 	_theBullets.setPosition(Common::Point(184, 86));
1145 	_theBullets.fixPriority(105);
1146 	_theBullets.setDetails(415, 16, 17, 18, 1, (SceneItem *)NULL);
1147 	BF_GLOBALS._sceneItems.remove(&_theBullets);
1148 	BF_GLOBALS._sceneItems.push_front(&_theBullets);
1149 }
1150 
showGunAndWig()1151 void Scene415::showGunAndWig() {
1152 	_gunInset.postInit();
1153 	_gunInset.setVisage(411);
1154 	_gunInset.setStrip(2);
1155 	_gunInset.setPosition(Common::Point(158, 100));
1156 	_gunInset.setDetails(415, -1, -1, -1);
1157 
1158 	_gunAndWig.postInit();
1159 	_gunAndWig.setVisage(411);
1160 	_gunAndWig.setStrip(2);
1161 	_gunAndWig.setFrame(2);
1162 	_gunAndWig.setPosition(Common::Point(159, 88));
1163 	_gunAndWig.fixPriority(105);
1164 	_gunAndWig.setDetails(415, 13, 14, 15, 1, (SceneItem *)NULL);
1165 
1166 	BF_GLOBALS._sceneItems.remove(&_gunAndWig);
1167 	BF_GLOBALS._sceneItems.push_front(&_gunAndWig);
1168 }
1169 
1170 /*--------------------------------------------------------------------------
1171  * Scene 440 - Outside Alleycat Bowl
1172  *
1173  *--------------------------------------------------------------------------*/
1174 
startAction(CursorType action,Event & event)1175 bool Scene440::Doorway::startAction(CursorType action, Event &event) {
1176 	Scene440 *scene = (Scene440 *)BF_GLOBALS._sceneManager._scene;
1177 
1178 	switch (action) {
1179 	case CURSOR_LOOK:
1180 		SceneItem::display2(440, 1);
1181 		return true;
1182 	case CURSOR_USE:
1183 		BF_GLOBALS._player.disableControl();
1184 		scene->_sceneMode = 4400;
1185 		scene->setAction(&scene->_sequenceManager, scene, 4400, &BF_GLOBALS._player, this, &scene->_lyle, NULL);
1186 		return true;
1187 	default:
1188 		return NamedObject::startAction(action, event);
1189 	}
1190 }
1191 
startAction(CursorType action,Event & event)1192 bool Scene440::Vechile::startAction(CursorType action, Event &event) {
1193 	Scene440 *scene = (Scene440 *)BF_GLOBALS._sceneManager._scene;
1194 
1195 	switch (action) {
1196 	case CURSOR_LOOK:
1197 		if (BF_GLOBALS.getFlag(fWithLyle)) {
1198 			SceneItem::display2(440, 3);
1199 		} else {
1200 			SceneItem::display2(440, 2);
1201 		}
1202 		return true;
1203 	case CURSOR_USE:
1204 		if (BF_GLOBALS.getFlag(fWithLyle)) {
1205 			BF_GLOBALS._player.disableControl();
1206 			scene->_sceneMode = 4403;
1207 			scene->setAction(&scene->_sequenceManager, scene, 4403, &BF_GLOBALS._player, &scene->_lyle, NULL);
1208 		} else {
1209 			BF_GLOBALS._sceneManager.changeScene(60);
1210 		}
1211 		return true;
1212 	default:
1213 		return NamedObject::startAction(action, event);
1214 	}
1215 }
1216 
startAction(CursorType action,Event & event)1217 bool Scene440::Lyle::startAction(CursorType action, Event &event) {
1218 	switch (action) {
1219 	case CURSOR_LOOK:
1220 		SceneItem::display2(440, 4);
1221 		return true;
1222 	case CURSOR_TALK:
1223 		SceneItem::display2(440, 5);
1224 		return true;
1225 	default:
1226 		return NamedObject::startAction(action, event);
1227 	}
1228 }
1229 
1230 /*--------------------------------------------------------------------------*/
1231 
startAction(CursorType action,Event & event)1232 bool Scene440::Item1::startAction(CursorType action, Event &event) {
1233 	switch (action) {
1234 	case CURSOR_LOOK:
1235 		SceneItem::display2(440, 0);
1236 		return true;
1237 	default:
1238 		return NamedHotspot::startAction(action, event);
1239 	}
1240 }
1241 
1242 /*--------------------------------------------------------------------------*/
1243 
postInit(SceneObjectList * OwnerList)1244 void Scene440::postInit(SceneObjectList *OwnerList) {
1245 	SceneExt::postInit();
1246 	loadScene(440);
1247 	setZoomPercents(75, 60, 120, 100);
1248 	BF_GLOBALS._sound1.fadeSound(33);
1249 
1250 	BF_GLOBALS._player.postInit();
1251 	BF_GLOBALS._player.setVisage(303);
1252 	BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
1253 	BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
1254 	BF_GLOBALS._player.changeZoom(-1);
1255 	BF_GLOBALS._player.disableControl();
1256 	BF_GLOBALS._player.setPosition(Common::Point(203, 113));
1257 
1258 	_vechile.postInit();
1259 
1260 	_lyle.postInit();
1261 	_lyle.setVisage(835);
1262 	_lyle.animate(ANIM_MODE_1, NULL);
1263 	_lyle.setObjectWrapper(new SceneObjectWrapper());
1264 	_lyle.setPosition(Common::Point(-40, -10));
1265 	_lyle.changeZoom(-1);
1266 	_lyle.hide();
1267 	BF_GLOBALS._sceneItems.push_back(&_lyle);
1268 
1269 	if (BF_GLOBALS.getFlag(fWithLyle)) {
1270 		_vechile.setVisage(444);
1271 		_vechile.setFrame(2);
1272 		_vechile.setPosition(Common::Point(147, 128));
1273 		_vechile.fixPriority(114);
1274 
1275 		BF_GLOBALS._player.setVisage(303);
1276 		BF_GLOBALS._player.setPosition(Common::Point(187, 104));
1277 
1278 		_lyle.setPosition(Common::Point(135, 128));
1279 		_lyle.show();
1280 
1281 		BF_GLOBALS._walkRegions.disableRegion(12);
1282 		BF_GLOBALS._walkRegions.disableRegion(13);
1283 	} else {
1284 		_vechile.setPosition(Common::Point(169, 121));
1285 		_vechile.fixPriority(117);
1286 
1287 		if (BF_GLOBALS.getFlag(onDuty)) {
1288 			_vechile.setVisage(440);
1289 			_vechile.setStrip(1);
1290 
1291 			BF_GLOBALS._player.setVisage(304);
1292 			BF_GLOBALS._player.setStrip(3);
1293 		} else {
1294 			_vechile.setVisage(580);
1295 			_vechile.setStrip(2);
1296 			_vechile.setFrame(3);
1297 
1298 			BF_GLOBALS._player.setVisage(303);
1299 		}
1300 	}
1301 
1302 	BF_GLOBALS._sceneItems.push_back(&_vechile);
1303 	BF_GLOBALS._walkRegions.disableRegion(11);
1304 
1305 	_doorway.postInit();
1306 	_doorway.setVisage(440);
1307 	_doorway.setStrip(5);
1308 	_doorway.setPosition(Common::Point(198, 91));
1309 	_doorway.fixPriority(80);
1310 	BF_GLOBALS._sceneItems.push_back(&_doorway);
1311 
1312 	if (BF_GLOBALS._sceneManager._previousScene == 450) {
1313 		_lyle.setPosition(Common::Point(143, 93));
1314 		_lyle.setStrip(5);
1315 		_lyle.fixPriority(90);
1316 
1317 		_doorway.setFrame(_doorway.getFrameCount());
1318 		_sceneMode = 4401;
1319 		setAction(&_sequenceManager, this, 4401, &BF_GLOBALS._player, &_doorway, NULL);
1320 	} else if (BF_GLOBALS.getFlag(fWithLyle)) {
1321 		_sceneMode = 4402;
1322 		setAction(&_sequenceManager, this, 4402, &_lyle, NULL);
1323 	} else {
1324 		BF_GLOBALS._player.enableControl();
1325 	}
1326 
1327 	_item1.setBounds(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y - 1));
1328 	BF_GLOBALS._sceneItems.push_back(&_item1);
1329 }
1330 
signal()1331 void Scene440::signal() {
1332 	switch (_sceneMode) {
1333 	case 4400:
1334 		BF_GLOBALS._sceneManager.changeScene(450);
1335 		break;
1336 	case 4401:
1337 		BF_GLOBALS._player.fixPriority(-1);
1338 		BF_GLOBALS._player.enableControl();
1339 		break;
1340 	case 4402:
1341 		BF_GLOBALS._player.enableControl();
1342 		break;
1343 	case 4403:
1344 		BF_GLOBALS._sceneManager.changeScene(60);
1345 		break;
1346 	default:
1347 		break;
1348 	}
1349 }
1350 
1351 /*--------------------------------------------------------------------------
1352  * Scene 450 - Inside Alleycat Bowl
1353  *
1354  *--------------------------------------------------------------------------*/
1355 
startAction(CursorType action,Event & event)1356 bool Scene450::Weasel::startAction(CursorType action, Event &event) {
1357 	Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
1358 
1359 	switch (action) {
1360 	case CURSOR_LOOK:
1361 		SceneItem::display2(450, 0);
1362 		return true;
1363 	case CURSOR_USE:
1364 		SceneItem::display2(450, 1);
1365 		return true;
1366 	case CURSOR_TALK:
1367 	case INV_ID:
1368 		BF_GLOBALS._player.disableControl();
1369 		scene->_sceneMode = 4504;
1370 		if (_flag) {
1371 			scene->setAction(&scene->_sequenceManager, scene, 4515, &BF_GLOBALS._player, this, NULL);
1372 		} else {
1373 			++_flag;
1374 			scene->setAction(&scene->_sequenceManager, scene, 4504, &BF_GLOBALS._player, this, NULL);
1375 		}
1376 		return true;
1377 	case INV_FOREST_RAP:
1378 		BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 450);
1379 		BF_GLOBALS._player.disableControl();
1380 		T2_GLOBALS._uiElements.addScore(30);
1381 
1382 		scene->_sceneMode = 4505;
1383 		scene->setAction(&scene->_sequenceManager, scene, 4505, &BF_GLOBALS._player, this,
1384 			&scene->_counterDoor, &scene->_object2, NULL);
1385 		return true;
1386 	default:
1387 		return NamedObjectExt::startAction(action, event);
1388 	}
1389 }
1390 
startAction(CursorType action,Event & event)1391 bool Scene450::PinBoy::startAction(CursorType action, Event &event) {
1392 	Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
1393 
1394 	switch (action) {
1395 	case CURSOR_LOOK:
1396 		SceneItem::display2(450, 4);
1397 		return true;
1398 	case CURSOR_USE:
1399 		SceneItem::display2(450, 5);
1400 		return true;
1401 	case CURSOR_TALK:
1402 		BF_GLOBALS._player.disableControl();
1403 		scene->_sceneMode = 4502;
1404 		if (BF_GLOBALS.getFlag(onDuty)) {
1405 			scene->setAction(&scene->_sequenceManager, scene, 4516, &BF_GLOBALS._player, this, NULL);
1406 		} else {
1407 			scene->setAction(&scene->_sequenceManager, scene, 4502, &BF_GLOBALS._player, this, NULL);
1408 		}
1409 		return true;
1410 	case INV_NAPKIN:
1411 		BF_GLOBALS._player.disableControl();
1412 		scene->_sceneMode = 4509;
1413 		scene->setAction(&scene->_sequenceManager, scene, 4509, &BF_GLOBALS._player, this, NULL);
1414 		return true;
1415 	default:
1416 		return NamedObject::startAction(action, event);
1417 	}
1418 }
1419 
startAction(CursorType action,Event & event)1420 bool Scene450::Manager::startAction(CursorType action, Event &event) {
1421 	Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
1422 
1423 	switch (action) {
1424 	case CURSOR_LOOK:
1425 		SceneItem::display2(450, 6);
1426 		return true;
1427 	case CURSOR_USE:
1428 		SceneItem::display2(450, 7);
1429 		return true;
1430 	case CURSOR_TALK:
1431 		BF_GLOBALS._player.disableControl();
1432 		if (BF_GLOBALS.getFlag(takenWeasel) && !BF_GLOBALS.getFlag(gotTrailer450)) {
1433 			BF_GLOBALS.setFlag(gotTrailer450);
1434 			scene->_sceneMode = 4517;
1435 			scene->setAction(&scene->_sequenceManager, scene, 4517, &BF_GLOBALS._player, this,
1436 				&scene->_door, NULL);
1437 		} else {
1438 			animate(ANIM_MODE_8, 1, NULL);
1439 
1440 			if (scene->_managerCallsWeaselFl) {
1441 				scene->_sceneMode = 2;
1442 				if (scene->_talkManagerFl) {
1443 					scene->_stripManager.start(4521, scene);
1444 				} else {
1445 					scene->_talkManagerFl = true;
1446 					scene->_stripManager.start(4512, scene);
1447 				}
1448 			} else {
1449 				scene->_sceneMode = 4506;
1450 				if (scene->_talkManagerFl) {
1451 					scene->setAction(&scene->_sequenceManager, scene, 4518, &BF_GLOBALS._player, this, NULL);
1452 				} else {
1453 					scene->_sceneMode = 4506;
1454 					scene->_talkManagerFl = true;
1455 					scene->setAction(&scene->_sequenceManager, scene, 4506, &BF_GLOBALS._player, this, NULL);
1456 				}
1457 			}
1458 		}
1459 		return true;
1460 	case INV_FOREST_RAP:
1461 		SceneItem::display2(450, 19);
1462 		return true;
1463 	case INV_NAPKIN:
1464 		animate(ANIM_MODE_8, 1, NULL);
1465 		BF_GLOBALS._player.disableControl();
1466 
1467 		if (BF_GLOBALS.getFlag(showEugeneNapkin)) {
1468 			SceneItem::display2(450, 16);
1469 			BF_GLOBALS._player.enableControl();
1470 		} else {
1471 			BF_GLOBALS.setFlag(showEugeneNapkin);
1472 
1473 			if (!BF_GLOBALS.getFlag(showEugeneID)) {
1474 				scene->_sceneMode = 4513;
1475 				scene->setAction(&scene->_sequenceManager, scene, 4513, &BF_GLOBALS._player, this, NULL);
1476 			} else if (BF_GLOBALS.getFlag(fMgrCallsWeasel)) {
1477 				SceneItem::display2(450, 16);
1478 				BF_GLOBALS._player.enableControl();
1479 			} else {
1480 				T2_GLOBALS._uiElements.addScore(30);
1481 				scene->_sceneMode = 4510;
1482 				BF_INVENTORY.setObjectScene(INV_NAPKIN, 450);
1483 				scene->setAction(&scene->_sequenceManager, scene, 4510, &BF_GLOBALS._player, this, NULL);
1484 			}
1485 		}
1486 		return true;
1487 	case INV_ID:
1488 		if (BF_GLOBALS.getFlag(takenWeasel)) {
1489 			return startAction(CURSOR_TALK, event);
1490 		} else {
1491 			animate(ANIM_MODE_8, 1, NULL);
1492 			BF_GLOBALS._player.disableControl();
1493 
1494 			if (!BF_GLOBALS.getFlag(showEugeneID))
1495 				T2_GLOBALS._uiElements.addScore(30);
1496 			BF_GLOBALS.setFlag(showEugeneID);
1497 
1498 			if ((BF_GLOBALS.getFlag(showRapEugene) || BF_GLOBALS.getFlag(showEugeneNapkin)) &&
1499 					!BF_GLOBALS.getFlag(fMgrCallsWeasel)) {
1500 				T2_GLOBALS._uiElements.addScore(30);
1501 				scene->_sceneMode = 4511;
1502 				scene->setAction(&scene->_sequenceManager, scene, 4511, &BF_GLOBALS._player, this, NULL);
1503 			} else {
1504 				scene->_sceneMode = 4506;
1505 				scene->setAction(&scene->_sequenceManager, scene, 4512, &BF_GLOBALS._player, this, NULL);
1506 			}
1507 		}
1508 		return true;
1509 	default:
1510 		return NamedObject::startAction(action, event);
1511 	}
1512 }
1513 
1514 /*--------------------------------------------------------------------------*/
1515 
startAction(CursorType action,Event & event)1516 bool Scene450::Exit::startAction(CursorType action, Event &event) {
1517 	Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
1518 
1519 	if (event.eventType == EVENT_BUTTON_DOWN) {
1520 		BF_GLOBALS._player.disableControl();
1521 		scene->_sceneMode = 4501;
1522 		scene->signal();
1523 		return true;
1524 	} else {
1525 		return false;
1526 	}
1527 }
1528 
1529 /*--------------------------------------------------------------------------*/
1530 
Scene450()1531 Scene450::Scene450(): SceneExt() {
1532 	_managerCallsWeaselFl = _talkManagerFl = false;
1533 }
1534 
synchronize(Serializer & s)1535 void Scene450::synchronize(Serializer &s) {
1536 	SceneExt::synchronize(s);
1537 	s.syncAsSint16LE(_managerCallsWeaselFl);
1538 	s.syncAsSint16LE(_talkManagerFl);
1539 }
1540 
postInit(SceneObjectList * OwnerList)1541 void Scene450::postInit(SceneObjectList *OwnerList) {
1542 	SceneExt::postInit();
1543 	loadScene(450);
1544 	setZoomPercents(110, 90, 155, 115);
1545 	BF_GLOBALS._sound1.fadeSound(13);
1546 
1547 	_stripManager.addSpeaker(&_gameTextSpeaker);
1548 	_stripManager.addSpeaker(&_eugeneSpeaker);
1549 	_stripManager.addSpeaker(&_billySpeaker);
1550 	_stripManager.addSpeaker(&_weaselSpeaker);
1551 	_stripManager.addSpeaker(&_jakeJacketSpeaker);
1552 	_stripManager.addSpeaker(&_lyleHatSpeaker);
1553 	_stripManager.addSpeaker(&_jakeUniformSpeaker);
1554 
1555 	BF_GLOBALS._player.postInit();
1556 	BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1341 : 129);
1557 	BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
1558 	BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
1559 	BF_GLOBALS._player.setPosition(Common::Point(-30, 155));
1560 	BF_GLOBALS._player.changeZoom(-1);
1561 	BF_GLOBALS._player.disableControl();
1562 
1563 	_door.postInit();
1564 	_door.setVisage(450);
1565 	_door.setStrip(2);
1566 	_door.setPosition(Common::Point(72, 80));
1567 	_door.setDetails(450, 15, -1, 13, 1, (SceneItem *)NULL);
1568 
1569 	_counterDoor.postInit();
1570 	_counterDoor.setVisage(450);
1571 	_counterDoor.setPosition(Common::Point(39, 104));
1572 	_counterDoor.fixPriority(100);
1573 	_counterDoor.setDetails(450, 12, -1, 13, 1, (SceneItem *)NULL);
1574 
1575 	if (BF_GLOBALS._dayNumber != 3) {
1576 		_pinBoy.postInit();
1577 		_pinBoy.setVisage(463);
1578 		_pinBoy.setPosition(Common::Point(138, 121));
1579 		_pinBoy.fixPriority(100);
1580 		_pinBoy.setFrame(_pinBoy.getFrameCount());
1581 		BF_GLOBALS._sceneItems.push_back(&_pinBoy);
1582 	} else if (!BF_GLOBALS.getFlag(fWithLyle) || !BF_GLOBALS.getFlag(fGivenNapkin) ||
1583 			(BF_INVENTORY.getObjectScene(INV_CARAVAN_KEY) == 1)) {
1584 		_pinBoy.postInit();
1585 		_pinBoy.setVisage(463);
1586 		_pinBoy.setPosition(Common::Point(138, 121));
1587 		_pinBoy.fixPriority(100);
1588 		_pinBoy.setFrame(_pinBoy.getFrameCount());
1589 		BF_GLOBALS._sceneItems.push_back(&_pinBoy);
1590 	} else {
1591 		_manager.postInit();
1592 		_manager.setVisage(467);
1593 		_manager.setPosition(Common::Point(138, 121));
1594 		_manager.changeZoom(-1);
1595 		_manager.fixPriority(100);
1596 		BF_GLOBALS._sceneItems.push_back(&_manager);
1597 
1598 		if (!BF_GLOBALS.getFlag(takenWeasel)) {
1599 			_object2.postInit();
1600 			_object2.setVisage(469);
1601 			_object2.animate(ANIM_MODE_1, NULL);
1602 			_object2.setObjectWrapper(new SceneObjectWrapper());
1603 			_object2.setPosition(Common::Point(-30, 126));
1604 			ADD_MOVER_NULL(_object2, 27, 126);
1605 			_object2.changeZoom(-1);
1606 			_object2.setDetails(450, 2, 18, 3, 1, (SceneItem *)NULL);
1607 
1608 			BF_GLOBALS._walkRegions.disableRegion(4);
1609 
1610 			_weasel.postInit();
1611 			_weasel.setVisage(466);
1612 			_weasel.animate(ANIM_MODE_1, NULL);
1613 			_weasel.setObjectWrapper(new SceneObjectWrapper());
1614 			_weasel.setPosition(Common::Point(70, 80));
1615 			_weasel.setStrip(5);
1616 			_weasel.changeZoom(90);
1617 			_weasel.fixPriority(65);
1618 			_weasel._flag = 0;
1619 			BF_GLOBALS._sceneItems.push_back(&_weasel);
1620 		}
1621 	}
1622 
1623 	_sceneMode = 4500;
1624 	setAction(&_sequenceManager, this, 4500, &BF_GLOBALS._player, NULL);
1625 
1626 	_exit.setDetails(Rect(0, 100, 4, 167), 450, -1, -1, -1, 1, NULL);
1627 	_counter.setDetails(8, 450, 8, -1, 9, 1);
1628 	_shelf.setDetails(Rect(114, 10, 179, 77), 450, 10, -1, 11, 1, NULL);
1629 	_interior.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 450, 14, -1, -1, 1, NULL);
1630 }
1631 
signal()1632 void Scene450::signal() {
1633 	switch (_sceneMode) {
1634 	case 450:
1635 	case 451:
1636 		BF_GLOBALS._sceneManager.changeScene(440);
1637 		break;
1638 	case 4501:
1639 		if (BF_GLOBALS._sceneObjects->contains(&_object2)) {
1640 			_sceneMode = 450;
1641 			ADD_MOVER(_object2, -20, 135);
1642 		} else {
1643 			_sceneMode = 451;
1644 			ADD_PLAYER_MOVER(0, 160);
1645 		}
1646 		break;
1647 	case 4503:
1648 		_weasel.fixPriority(100);
1649 		BF_GLOBALS._player.enableControl();
1650 		break;
1651 	case 4505:
1652 		BF_GLOBALS.setFlag(takenWeasel);
1653 		_weasel.remove();
1654 		_object2.remove();
1655 		BF_GLOBALS._walkRegions.enableRegion(4);
1656 		BF_GLOBALS._player.enableControl();
1657 		break;
1658 	case 4507:
1659 	case 4510:
1660 	case 4511:
1661 		BF_GLOBALS.setFlag(fMgrCallsWeasel);
1662 		_managerCallsWeaselFl = true;
1663 		_sceneMode = 4503;
1664 		setAction(&_sequenceManager, this, 4503, &_weasel, &_door, &_manager, NULL);
1665 		break;
1666 	case 4508:
1667 		_manager.remove();
1668 		BF_GLOBALS._player.enableControl();
1669 		BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
1670 		break;
1671 	case 4517:
1672 		BF_GLOBALS.setFlag(gotTrailer450);
1673 		BF_INVENTORY.setObjectScene(INV_CARAVAN_KEY, 1);
1674 		_sceneMode = 4508;
1675 		setAction(&_sequenceManager, this, 4508, &BF_GLOBALS._player, &_manager, &_door, NULL);
1676 		break;
1677 	default:
1678 		BF_GLOBALS._player.enableControl();
1679 		break;
1680 	}
1681 }
1682 
process(Event & event)1683 void Scene450::process(Event &event) {
1684 	SceneExt::process(event);
1685 
1686 	if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
1687 		// Check if the cursor is on an exit
1688 		if (_exit.contains(event.mousePos)) {
1689 			GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
1690 			BF_GLOBALS._events.setCursor(surface);
1691 		} else {
1692 			// In case an exit cursor was being shown, restore the previously selected cursor
1693 			CursorType cursorId = BF_GLOBALS._events.getCursor();
1694 			BF_GLOBALS._events.setCursor(cursorId);
1695 		}
1696 	}
1697 }
1698 
1699 } // End of namespace BlueForce
1700 
1701 } // End of namespace TsAGE
1702