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 "common/config-manager.h"
24 #include "tsage/ringworld/ringworld_scenes2.h"
25 #include "tsage/dialogs.h"
26 #include "tsage/scenes.h"
27 #include "tsage/tsage.h"
28 #include "tsage/staticres.h"
29
30 namespace TsAGE {
31
32 namespace Ringworld {
33
34 /*--------------------------------------------------------------------------
35 * Scene 1000 - Title Screen
36 *
37 *--------------------------------------------------------------------------*/
38
signal()39 void Scene1000::Action1::signal() {
40 Scene1000 *scene = (Scene1000 *)g_globals->_sceneManager._scene;
41
42 switch (_actionIndex++) {
43 case 0:
44 g_globals->_player.disableControl();
45 setDelay(10);
46 break;
47 case 1:
48 scene->_object4.postInit();
49 scene->_object4.setVisage(1001);
50 scene->_object4._frame = 1;
51 scene->_object4.setStrip2(5);
52 scene->_object4.changeZoom(100);
53 scene->_object4.animate(ANIM_MODE_2, NULL);
54 scene->_object4.setPosition(Common::Point(403, 163));
55 setDelay(90);
56 break;
57 case 2: {
58 SceneItem::display(0, 0);
59 scene->_object4.remove();
60 scene->_object1.changeZoom(-1);
61 NpcMover *mover = new NpcMover();
62 Common::Point pt(180, 100);
63 scene->_object1.addMover(mover, &pt, this);
64 break;
65 }
66 case 3:
67 g_globals->_sceneManager.changeScene(1400);
68 break;
69 default:
70 break;
71 }
72
73 }
74
signal()75 void Scene1000::Action2::signal() {
76 switch (_actionIndex++) {
77 case 0:
78 g_globals->_player.disableControl();
79 setDelay(10);
80 break;
81 case 1:
82 SceneItem::display(1000, 0, SET_Y, 20, SET_FONT, 2, SET_BG_COLOR, -1,
83 SET_EXT_BGCOLOR, 35, SET_WIDTH, 200, SET_KEEP_ONSCREEN, 1, LIST_END);
84 setDelay(180);
85 break;
86 case 2:
87 SceneItem::display(0, 0);
88 g_globals->_sceneManager.changeScene(2000);
89 break;
90 default:
91 break;
92 }
93 }
94
signal()95 void Scene1000::Action3::signal() {
96 Scene1000 *scene = (Scene1000 *)g_globals->_sceneManager._scene;
97
98 switch (_actionIndex++) {
99 case 0:
100 g_globals->_sceneManager._scene->loadBackground(0, 0);
101 setDelay(60);
102 break;
103 case 1: {
104 NpcMover *mover = new NpcMover();
105 Common::Point pt(158, 31);
106 scene->_object3.addMover(mover, &pt, this);
107 break;
108 }
109 case 2:
110 case 3:
111 setDelay(60);
112 break;
113 case 4:
114 g_globals->_player.show();
115 setDelay(240);
116 break;
117 case 5: {
118 g_globals->_player.enableControl();
119
120 const char *SEEN_INTRO = "seen_intro";
121 if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) {
122 // First time being played, so show the introduction
123 ConfMan.setBool(SEEN_INTRO, true);
124 ConfMan.flushToDisk();
125
126 setDelay(1);
127 } else {
128 // Prompt user for whether to start play or watch introduction
129 g_globals->_player.enableControl();
130
131 int rc;
132 if (g_vm->getLanguage() == Common::ES_ESP) {
133 rc = MessageDialog::show2(ESP_WATCH_INTRO_MSG, ESP_START_PLAY_BTN_STRING, ESP_INTRODUCTION_BTN_STRING);
134 } else {
135 rc = MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING);
136 }
137 if (rc == 0) {
138 _actionIndex = 20;
139 g_globals->_soundHandler.fadeOut(this);
140 } else {
141 setDelay(1);
142 }
143 }
144
145 g_globals->_player.disableControl();
146 break;
147 }
148 case 6: {
149 scene->_object3.remove();
150 g_globals->_player.setStrip2(2);
151 NpcMover *mover = new NpcMover();
152 Common::Point pt(480, 100);
153 g_globals->_player.addMover(mover, &pt, this);
154 break;
155 }
156 case 7:
157 g_globals->_scenePalette.loadPalette(1002);
158 g_globals->_scenePalette.refresh();
159 g_globals->_scenePalette.addRotation(80, 95, -1);
160 scene->_object3.postInit();
161 scene->_object3.setVisage(1002);
162 scene->_object3.setStrip(1);
163 scene->_object3.setPosition(Common::Point(284, 122));
164 scene->_object3.changeZoom(1);
165
166 zoom(true);
167 setDelay(200);
168 break;
169 case 8:
170 zoom(false);
171 setDelay(10);
172 break;
173 case 9:
174 scene->_object3.setStrip(2);
175 scene->_object3.setPosition(Common::Point(285, 155));
176
177 zoom(true);
178 setDelay(400);
179 break;
180 case 10:
181 zoom(false);
182 setDelay(10);
183 break;
184 case 11:
185 scene->_object3.setStrip(3);
186 scene->_object3.setPosition(Common::Point(279, 172));
187
188 zoom(true);
189 setDelay(240);
190 break;
191 case 12:
192 zoom(false);
193 setDelay(10);
194 break;
195 case 13:
196 scene->_object3.setStrip(4);
197 scene->_object3.setPosition(Common::Point(270, 128));
198
199 zoom(true);
200 setDelay(300);
201 break;
202 case 14:
203 zoom(false);
204 setDelay(10);
205 break;
206 case 15:
207 scene->_object3.setStrip(1);
208 scene->_object3.setFrame(2);
209 scene->_object3.setPosition(Common::Point(283, 137));
210
211 zoom(true);
212 setDelay(300);
213 break;
214 case 16:
215 zoom(false);
216 setDelay(10);
217 break;
218 case 17:
219 scene->_object3.setStrip(5);
220 scene->_object3.setFrame(1);
221 scene->_object3.setPosition(Common::Point(292, 192));
222
223 zoom(true);
224 setDelay(300);
225 break;
226 case 18:
227 zoom(false);
228 g_globals->_scenePalette.clearListeners();
229 g_globals->_soundHandler.fadeOut(this);
230 break;
231 case 19:
232 g_globals->_sceneManager.changeScene(10);
233 break;
234 case 20:
235 g_globals->_sceneManager.changeScene(30);
236 break;
237 default:
238 break;
239 }
240 }
241
zoom(bool up)242 void Scene1000::Action3::zoom(bool up) {
243 Scene1000 *scene = (Scene1000 *)g_globals->_sceneManager._scene;
244
245 if (up) {
246 while ((scene->_object3._percent < 100) && !g_vm->shouldQuit()) {
247 scene->_object3.changeZoom(MIN(scene->_object3._percent + 5, 100));
248 g_globals->_sceneObjects->draw();
249 g_globals->_events.delay(1);
250 }
251 } else {
252 while ((scene->_object3._percent > 0) && !g_vm->shouldQuit()) {
253 scene->_object3.changeZoom(MAX(scene->_object3._percent - 5, 0));
254 g_globals->_sceneObjects->draw();
255 g_globals->_events.delay(1);
256 }
257 }
258 }
259
260 /*--------------------------------------------------------------------------*/
261
postInit(SceneObjectList * OwnerList)262 void Scene1000::postInit(SceneObjectList *OwnerList) {
263 Scene::postInit();
264 setZoomPercents(0, 100, 200, 100);
265 loadScene(1000);
266
267 if (g_globals->_sceneManager._previousScene == 2000) {
268 setZoomPercents(150, 10, 180, 100);
269 _object1.postInit();
270 _object1.setVisage(1001);
271 _object1._strip = 7;
272 _object1.animate(ANIM_MODE_2, 0);
273 _object1._moveDiff = Common::Point(1, 1);
274 _object1.setPosition(Common::Point(120, 180));
275
276 setAction(&_action2);
277
278 g_globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y);
279 g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
280
281 g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
282 g_globals->_soundHandler.play(114);
283 } else if (g_globals->_sceneManager._previousScene == 2222) {
284 setZoomPercents(150, 10, 180, 100);
285 _object1.postInit();
286 _object1.setVisage(1001);
287 _object1._strip = 7;
288 _object1.animate(ANIM_MODE_2, 0);
289 _object1._moveDiff = Common::Point(2, 2);
290 _object1.setPosition(Common::Point(120, 180));
291
292 g_globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y);
293 g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
294 g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
295
296 setAction(&_action1);
297 } else {
298 g_globals->_soundHandler.play(4);
299 setZoomPercents(0, 10, 30, 100);
300 _object3.postInit();
301 _object3.setVisage(1050);
302 _object3.changeZoom(-1);
303 _object3.setPosition(Common::Point(158, 0));
304
305 g_globals->_player.postInit();
306 g_globals->_player.setVisage(1050);
307 g_globals->_player.setStrip(3);
308 g_globals->_player.setPosition(Common::Point(160, 191));
309 g_globals->_player._moveDiff.x = 12;
310 g_globals->_player.hide();
311 g_globals->_player.disableControl();
312
313 g_globals->_sceneManager._scene->_sceneBounds.center(_object3._position.x, _object3._position.y);
314
315 setAction(&_action3);
316 }
317 }
318
319 /*--------------------------------------------------------------------------
320 * Scene 1001 - Fleeing planet cutscene
321 *
322 *--------------------------------------------------------------------------*/
323
signal()324 void Scene1001::Action1::signal() {
325 Scene1001 *scene = (Scene1001 *)g_globals->_sceneManager._scene;
326
327 switch (_actionIndex++) {
328 case 0:
329 setDelay(10);
330 break;
331 case 1:
332 scene->_object3.animate(ANIM_MODE_5, this);
333 break;
334 case 2: {
335 Common::Point pt(108, 171);
336 NpcMover *mover = new NpcMover();
337 scene->_object3.addMover(mover, &pt, this);
338 break;
339 }
340 case 3: {
341 Common::Point pt(170, 159);
342 NpcMover *mover = new NpcMover();
343 scene->_object3.addMover(mover, &pt, this);
344 break;
345 }
346 case 4: {
347 scene->_object2.postInit();
348 scene->_object2.setVisage(16);
349 scene->_object2.setStrip2(4);
350 scene->_object2.setPosition(Common::Point(61, 177));
351 scene->_object2.animate(ANIM_MODE_5, this);
352
353 Common::Point pt(320, 100);
354 NpcMover *mover = new NpcMover();
355 scene->_object3.addMover(mover, &pt, this);
356 break;
357 }
358 case 5: {
359 Common::Point pt(82, 166);
360 NpcMover *mover = new NpcMover();
361 scene->_object2.addMover(mover, &pt, this);
362 break;
363 }
364 case 6: {
365 Common::Point pt(64, 149);
366 NpcMover *mover = new NpcMover();
367 scene->_object2.addMover(mover, &pt, this);
368 break;
369 }
370 case 7: {
371 Common::Point pt(15, 136);
372 NpcMover *mover = new NpcMover();
373 scene->_object2.addMover(mover, &pt, this);
374 break;
375 }
376 case 8: {
377 Common::Point pt(-5, 120);
378 NpcMover *mover = new NpcMover();
379 scene->_object2.addMover(mover, &pt, this);
380 break;
381 }
382 case 9: {
383 scene->_object1.postInit();
384 scene->_object1.setVisage(16);
385 scene->_object1.setStrip2(1);
386 scene->_object1.setFrame(1);
387 scene->_object1.setPosition(Common::Point(-75, 87));
388 scene->_object1.animate(ANIM_MODE_2, NULL);
389
390 Common::Point pt(0, 100);
391 NpcMover *mover = new NpcMover();
392 scene->_object1.addMover(mover, &pt, this);
393 break;
394 }
395 case 10: {
396 Common::Point pt1(107, 115);
397 NpcMover *mover1 = new NpcMover();
398 scene->_object1.addMover(mover1, &pt1, NULL);
399
400 scene->_object3.setVisage(16);
401 scene->_object3.setStrip2(5);
402 scene->_object3.setFrame2(2);
403 scene->_object3.setPosition(Common::Point(220, 200));
404
405 Common::Point pt2(187, 181);
406 NpcMover *mover2 = new NpcMover();
407 scene->_object3.addMover(mover2, &pt2, this);
408 break;
409 }
410 case 11: {
411 scene->_object2.setVisage(16);
412 scene->_object2.setStrip2(5);
413 scene->_object2.setFrame2(1);
414 scene->_object2.setPosition(Common::Point(211, 0));
415
416 Common::Point pt(189, 30);
417 NpcMover *mover = new NpcMover();
418 scene->_object2.addMover(mover, &pt, this);
419 break;
420 }
421 case 12:
422 scene->_stripManager.start(100, this);
423 break;
424 case 13: {
425 scene->_object4.postInit();
426 scene->_object4.setVisage(16);
427 scene->_object4.setStrip2(2);
428 scene->_object4.setFrame(4);
429 scene->_object4.setPosition(Common::Point(360, 80));
430 scene->_object4.animate(ANIM_MODE_2, NULL);
431
432 Common::Point pt(303, 97);
433 NpcMover *mover = new NpcMover();
434 scene->_object4.addMover(mover, &pt, this);
435 break;
436 }
437 case 14:
438 scene->_stripManager.start(110, this);
439 break;
440 case 15:
441 setDelay(10);
442 break;
443 case 16: {
444 scene->_soundHandler1.play(90);
445
446 scene->_object6.postInit();
447 scene->_object6.setVisage(16);
448 scene->_object6.setStrip2(6);
449 scene->_object6.setFrame2(2);
450 scene->_object6._moveDiff = Common::Point(20, 20);
451 scene->_object6.fixPriority(20);
452 scene->_object6.setPosition(Common::Point(scene->_object2._position.x - 6, scene->_object2._position.y + 7));
453 scene->_object6.animate(ANIM_MODE_5, NULL);
454
455 Common::Point pt(scene->_object6._position.x - 70, scene->_object6._position.y + 70);
456 NpcMover *mover = new NpcMover();
457 scene->_object6.addMover(mover, &pt, this);
458 break;
459 }
460 case 17: {
461 scene->_soundHandler1.play(90);
462 scene->_object6.remove();
463
464 scene->_object7.postInit();
465 scene->_object7.setVisage(16);
466 scene->_object7.setStrip2(6);
467 scene->_object7.setFrame2(1);
468 scene->_object7._moveDiff = Common::Point(20, 20);
469 scene->_object7.setPosition(Common::Point(scene->_object3._position.x - 28, scene->_object3._position.y - 11));
470 scene->_object7.fixPriority(200);
471 scene->_object7.animate(ANIM_MODE_5, NULL);
472
473 Common::Point pt(scene->_object7._position.x - 70, scene->_object7._position.y - 70);
474 NpcMover *mover = new NpcMover();
475 scene->_object7.addMover(mover, &pt, this);
476 break;
477 }
478 case 18:
479 scene->_object7.remove();
480
481 scene->_object5.postInit();
482 scene->_object5.setVisage(16);
483 scene->_object5.setPosition(Common::Point(306, 93));
484 scene->_object5._strip = 3;
485 scene->_object5.fixPriority(200);
486 scene->_object5.animate(ANIM_MODE_2, NULL);
487 setDelay(30);
488 break;
489 case 19: {
490 g_globals->_soundHandler.play(91);
491 byte adjustData[4] = {0xff, 0xff, 0xff, 0};
492 g_globals->_scenePalette.fade(adjustData, false, 0);
493
494 scene->_object1._strip = 7;
495 scene->_object1._frame = 1;
496 scene->_object1.setPosition(Common::Point(314, 112));
497 scene->_object1.addMover(NULL);
498 setDelay(2);
499 break;
500 }
501 case 20:
502 g_globals->_scenePalette.loadPalette(16);
503 g_globals->_scenePalette.refresh();
504 setDelay(6);
505 break;
506 case 21:
507 scene->_object1._numFrames = 15;
508 scene->_object1.animate(ANIM_MODE_5, this);
509 break;
510 case 22:
511 g_globals->_soundHandler.play(92);
512 scene->_stripManager.start(111, this);
513 break;
514 case 23:
515 setDelay(60);
516 break;
517 case 24:
518 g_globals->_sceneManager.changeScene(2000);
519 break;
520 default:
521 break;
522 }
523 }
524
525 /*--------------------------------------------------------------------------*/
526
postInit(SceneObjectList * OwnerList)527 void Scene1001::postInit(SceneObjectList *OwnerList) {
528 loadScene(16);
529 Scene::postInit();
530 setZoomPercents(0, 100, 200, 100);
531
532 _stripManager.addSpeaker(&_speakerQText);
533 _stripManager.addSpeaker(&_speakerCText);
534 _stripManager.addSpeaker(&_speakerCR);
535 _stripManager.addSpeaker(&_speakerSL);
536 _speakerQText._color1 = 11;
537
538 _object3.postInit();
539 _object3.setVisage(16);
540 _object3.setStrip2(4);
541 _object3.setPosition(Common::Point(61, 177));
542
543 g_globals->_soundHandler.play(85);
544 setAction(&_action1);
545 }
546
547
548 /*--------------------------------------------------------------------------
549 * Scene 1250 -
550 *
551 *--------------------------------------------------------------------------*/
552
signal()553 void Scene1250::Action1::signal() {
554 Scene1250 *scene = (Scene1250 *)g_globals->_sceneManager._scene;
555
556 switch (_actionIndex++) {
557 case 0:
558 setDelay(g_globals->_randomSource.getRandomNumber(120) + 60);
559 break;
560 case 1:
561 scene->_object1.animate(ANIM_MODE_5, this);
562 _actionIndex = 0;
563 break;
564 default:
565 break;
566 }
567 }
568
signal()569 void Scene1250::Action2::signal() {
570 Scene1250 *scene = (Scene1250 *)g_globals->_sceneManager._scene;
571
572 switch (_actionIndex++) {
573 case 0:
574 switch (g_globals->_randomSource.getRandomNumber(2)) {
575 case 0:
576 scene->_object2.setPosition(Common::Point(163, 75));
577 break;
578 case 1:
579 scene->_object2.setPosition(Common::Point(109, 65));
580 break;
581 case 2:
582 scene->_object2.setPosition(Common::Point(267, 20));
583 break;
584 default:
585 break;
586 }
587
588 setDelay(30);
589 break;
590 case 1:
591 scene->_object2.animate(ANIM_MODE_5, this);
592 _actionIndex = 0;
593 break;
594 default:
595 break;
596 }
597 }
598
signal()599 void Scene1250::Action3::signal() {
600 Scene1250 *scene = (Scene1250 *)g_globals->_sceneManager._scene;
601
602 switch (_actionIndex++) {
603 case 0:
604 setDelay(30);
605 break;
606 case 1:
607 scene->_stripManager.start(1251, this);
608 break;
609 case 2:
610 setDelay(6);
611 break;
612 case 3:
613 g_globals->_sceneManager.changeScene(1000);
614 break;
615 default:
616 break;
617 }
618 }
619
signal()620 void Scene1250::Action4::signal() {
621 Scene1250 *scene = (Scene1250 *)g_globals->_sceneManager._scene;
622
623 switch (_actionIndex++) {
624 case 0:
625 setDelay(3);
626 break;
627 case 1:
628 scene->_stripManager.start(1250, this);
629 break;
630 case 2:
631 setDelay(6);
632 break;
633 case 3:
634 g_globals->_sceneManager.changeScene(2000);
635 break;
636 default:
637 break;
638 }
639 }
640
641 /*--------------------------------------------------------------------------*/
642
postInit(SceneObjectList * OwnerList)643 void Scene1250::postInit(SceneObjectList *OwnerList) {
644 loadScene(1250);
645 Scene::postInit();
646 setZoomPercents(0, 100, 200, 100);
647
648 _stripManager.addSpeaker(&_speakerQText);
649 _speakerQText._textPos = Common::Point(120, 120);
650 _speakerQText._textWidth = 180;
651
652 _object1.postInit();
653 _object1.setVisage(1250);
654 _object1.setPosition(Common::Point(126, 69));
655 _object1.setStrip2(1);
656 _object1._frame = 1;
657 _object1.setAction(&_action1);
658
659 _object2.postInit();
660 _object2.setVisage(1250);
661 _object2.setPosition(Common::Point(126, 69));
662 _object2.setStrip2(2);
663 _object2.fixPriority(255);
664 _object2._frame = 1;
665 _object2.setAction(&_action2);
666
667 g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
668 g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
669
670 if ((g_globals->_sceneManager._previousScene != 2000) || (g_globals->_stripNum != 1250)) {
671 setAction(&_action4);
672 } else {
673 setAction(&_action3);
674 g_globals->_soundHandler.play(114);
675 }
676 }
677
678 /*--------------------------------------------------------------------------
679 * Scene 1400 - Ringworld Wall
680 *
681 *--------------------------------------------------------------------------*/
682
signal()683 void Scene1400::Action1::signal() {
684 Scene1400 *scene = (Scene1400 *)g_globals->_sceneManager._scene;
685
686 switch (_actionIndex++) {
687 case 0:
688 setDelay(5);
689 break;
690 case 1: {
691 SceneItem::display(1400, 0, SET_X, 120, SET_Y, 610, SET_FONT, 2, SET_EXT_BGCOLOR, 23, SET_KEEP_ONSCREEN, -1, LIST_END);
692
693 Common::Point pt(160, 700);
694 NpcMover *mover = new NpcMover();
695 g_globals->_player.addMover(mover, &pt, this);
696 break;
697 }
698 case 2: {
699 g_globals->_player.setStrip2(3);
700 g_globals->_player.changeZoom(100);
701
702 Common::Point pt(160, 100);
703 NpcMover *mover = new NpcMover();
704 g_globals->_player.addMover(mover, &pt, this);
705
706 SceneItem::display(0, 0);
707 setDelay(360);
708 break;
709 }
710 case 3:
711 SceneItem::display(1400, 2, SET_X, 60, SET_Y, g_globals->_sceneManager._scene->_sceneBounds.bottom - 80,
712 SET_FONT, 2, SET_FG_COLOR, 13, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END);
713 setDelay(420);
714 break;
715 case 4:
716 SceneItem::display(0, 0);
717 setDelay(360);
718 break;
719 case 5:
720 SceneItem::display(1400, 3, SET_X, 60, SET_Y, g_globals->_sceneManager._scene->_sceneBounds.bottom - 80,
721 SET_FONT, 2, SET_FG_COLOR, 23, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END);
722 setDelay(360);
723 break;
724 case 6:
725 SceneItem::display(0, 0);
726 break;
727 case 7: {
728 g_globals->_player._frame = 1;
729 g_globals->_player.setStrip2(1);
730 g_globals->_player._numFrames = 5;
731 g_globals->_player.animate(ANIM_MODE_5, this);
732
733 Common::Point pt(205, 70);
734 NpcMover *mover = new NpcMover();
735 g_globals->_player.addMover(mover, &pt, NULL);
736 g_globals->_sceneManager._fadeMode = FADEMODE_NONE;
737
738 scene->loadScene(1402);
739 break;
740 }
741 case 8:
742 g_globals->_player.setStrip2(2);
743 g_globals->_player._numFrames = 10;
744 g_globals->_player.animate(ANIM_MODE_2, NULL);
745
746 SceneItem::display(1400, 4, SET_X, 30, SET_Y, g_globals->_player._position.y + 10, SET_FONT, 2,
747 SET_FG_COLOR, 13, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END);
748 setDelay(300);
749 break;
750 case 9: {
751 SceneItem::display(0, 0);
752 Common::Point pt(450, 45);
753 NpcMover *mover = new NpcMover();
754 g_globals->_player.addMover(mover, &pt, this);
755 break;
756 }
757 case 10:
758 g_globals->_sceneManager._scrollerRect = Rect(40, 20, 280, 180);
759 g_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
760 g_globals->_stripNum = 1500;
761 g_globals->_soundHandler.stop();
762
763 g_globals->_sceneManager.changeScene(1500);
764 break;
765 default:
766 break;
767 }
768 }
769
dispatch()770 void Scene1400::Action1::dispatch() {
771 Action::dispatch();
772
773 if ((_actionIndex > 3) && (_actionIndex < 9))
774 g_globals->_sceneText.setPosition(Common::Point(60, g_globals->_sceneManager._scene->_sceneBounds.bottom - 80));
775
776 if ((_actionIndex <= 2) && (g_globals->_player._percent > 22))
777 g_globals->_player.changeZoom(100 - (800 - g_globals->_player._position.y));
778
779 if ((_actionIndex >= 9) && (g_globals->_player._percent > 22))
780 g_globals->_player.changeZoom(100 - (g_globals->_player._position.x - 205));
781 }
782
783 /*--------------------------------------------------------------------------*/
784
postInit(SceneObjectList * OwnerList)785 void Scene1400::postInit(SceneObjectList *OwnerList) {
786 if (g_globals->_stripNum != 1400) {
787 loadScene(1401);
788 } else {
789 loadScene(1402);
790 }
791 Scene::postInit();
792
793 g_globals->_sceneManager._scrollerRect = Rect(40, 90, 280, 180);
794 g_globals->_player.postInit();
795 g_globals->_player.setVisage(1401);
796 g_globals->_player.animate(ANIM_MODE_2, 0);
797 g_globals->_player.setStrip2(4);
798 g_globals->_player.fixPriority(4);
799 g_globals->_player.disableControl();
800
801 g_globals->_player._moveDiff = Common::Point(4, 2);
802 g_globals->_player.setPosition(Common::Point(160, 800));
803 g_globals->_sceneManager._scene->_sceneBounds.center(g_globals->_player._position);
804 g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
805 g_globals->_sceneOffset.y = (g_globals->_sceneManager._scene->_sceneBounds.top / 100) * 100;
806
807 setAction(&_action1);
808 g_globals->_soundHandler.play(118);
809 }
810
811 /*--------------------------------------------------------------------------
812 * Scene 1500 - Ringworld Space-port
813 *
814 *--------------------------------------------------------------------------*/
815
signal()816 void Scene1500::Action1::signal() {
817 Scene1500 *scene = (Scene1500 *)g_globals->_sceneManager._scene;
818
819 switch (_actionIndex++) {
820 case 0: {
821 scene->_object1.postInit();
822 scene->_object1.setVisage(1501);
823 scene->_object1._moveDiff = Common::Point(2, 1);
824 scene->_object1.setPosition(Common::Point(204, 85));
825 scene->_object1.animate(ANIM_MODE_2, NULL);
826 scene->_object1._numFrames = 3;
827 scene->_object1.changeZoom(-1);
828
829 Common::Point pt(238, 121);
830 PlayerMover *mover = new PlayerMover();
831 scene->_object1.addMover(mover, &pt, this);
832 break;
833 }
834 case 1: {
835 Common::Point pt(312, 145);
836 PlayerMover *mover = new PlayerMover();
837 scene->_object1.addMover(mover, &pt, this);
838 break;
839 }
840 case 2: {
841 scene->_object1.setStrip(2);
842 scene->_object1.setFrame(1);
843 scene->_object1._moveDiff.y = 2;
844 scene->_object1._numFrames = 5;
845
846 Common::Point pt(310, 150);
847 PlayerMover *mover = new PlayerMover();
848 scene->_object1.addMover(mover, &pt, this);
849 break;
850 }
851 case 3: {
852 Common::Point pt(304, 165);
853 PlayerMover *mover = new PlayerMover();
854 scene->_object1.addMover(mover, &pt, this);
855 break;
856 }
857 case 4: {
858 scene->_object1._numFrames = 3;
859 scene->_object1.setStrip2(3);
860 scene->_object1.animate(ANIM_MODE_2, this);
861
862 Common::Point pt(94, 175);
863 PlayerMover *mover = new PlayerMover();
864 scene->_object1.addMover(mover, &pt, this);
865 break;
866 }
867 case 5:
868 setDelay(30);
869 break;
870 case 6:
871 scene->_soundHandler.play(123);
872 scene->_object1.setStrip2(4);
873 scene->_object1.setFrame(1);
874 scene->_object1.animate(ANIM_MODE_5, this);
875 break;
876 case 7:
877 scene->_object1.setStrip2(5);
878 scene->_object1.animate(ANIM_MODE_2, NULL);
879 scene->_soundHandler.play(124, this);
880 break;
881 case 8:
882 g_globals->_soundHandler.play(126, this);
883 break;
884 case 9:
885 g_globals->_soundHandler.play(127);
886 g_globals->_sceneManager.changeScene(2000);
887 break;
888 default:
889 break;
890 }
891 }
892
signal()893 void Scene1500::Action2::signal() {
894 Scene1500 *scene = (Scene1500 *)g_globals->_sceneManager._scene;
895
896 switch (_actionIndex++) {
897 case 0:
898 setDelay(6);
899 break;
900 case 1: {
901 scene->_object2.postInit();
902 scene->_object2.setVisage(1502);
903 scene->_object2.fixPriority(255);
904 scene->_object2.changeZoom(5);
905 scene->_object2._frame = 1;
906 scene->_object2._moveDiff = Common::Point(1, 1);
907 scene->_object2.setPosition(Common::Point(104, 184));
908 scene->_object2.animate(ANIM_MODE_2, NULL);
909
910 Common::Point pt(118, 147);
911 NpcMover *mover = new NpcMover();
912 scene->_object2.addMover(mover, &pt, this);
913 break;
914 }
915 case 2: {
916 scene->_object2._moveDiff.x = 5;
917 scene->_object2.changeZoom(-1);
918 Common::Point pt(-55, 200);
919 NpcMover *mover = new NpcMover();
920 scene->_object2.addMover(mover, &pt, this);
921 break;
922 }
923 case 3:
924 scene->_soundHandler.release();
925 g_globals->_stripNum = 1505;
926 g_globals->_sceneManager.changeScene(2400);
927 break;
928 default:
929 break;
930 }
931 }
932
933 /*--------------------------------------------------------------------------*/
934
postInit(SceneObjectList * OwnerList)935 void Scene1500::postInit(SceneObjectList *OwnerList) {
936 loadScene(1500);
937 Scene::postInit();
938
939 if ((g_globals->_stripNum == 1500) || ((g_globals->_stripNum != 1504) && (g_globals->_stripNum != 2751))) {
940 g_globals->_soundHandler.play(120);
941 setZoomPercents(105, 20, 145, 100);
942
943 setAction(&_action1);
944 } else {
945 setZoomPercents(150, 5, 200, 100);
946
947 _object1.postInit();
948 _object1.setVisage(1501);
949 _object1.setStrip2(5);
950 _object1.setPosition(Common::Point(94, 175));
951 _object1.animate(ANIM_MODE_2, NULL);
952
953 setAction(&_action2);
954 }
955 }
956
957 } // End of namespace Ringworld
958
959 } // End of namespace TsAGE
960