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/ringworld2/ringworld2_speakers.h"
24 #include "tsage/scenes.h"
25 #include "tsage/tsage.h"
26 #include "tsage/graphics.h"
27 #include "tsage/staticres.h"
28 #include "tsage/ringworld2/ringworld2_scenes0.h"
29 #include "tsage/ringworld2/ringworld2_scenes1.h"
30 #include "tsage/ringworld2/ringworld2_scenes2.h"
31 #include "tsage/ringworld2/ringworld2_scenes3.h"
32
33 namespace TsAGE {
34
35 namespace Ringworld2 {
36
VisualSpeaker()37 VisualSpeaker::VisualSpeaker(): Speaker() {
38 _delayAmount = 0;
39 _voiceDelayAmount = 0;
40 _frameNumber = R2_GLOBALS._events.getFrameNumber();
41 _color1 = 8;
42 _color2 = 0;
43 _displayMode = 0;
44 _speakerMode = 0;
45
46 _object2 = nullptr;
47 _fieldF8 = 0;
48 _soundId = 0;
49 _removeObject = false;
50 _numFrames = 0;
51 _voiceFrameNumber = 0;
52 }
53
remove()54 void VisualSpeaker::remove() {
55 _numFrames = 0;
56 _delayAmount = 0;
57 R2_GLOBALS._playStream.stop();
58
59 if (_object2) {
60 if (_fieldF8) {
61 _fieldF8 = 0;
62 _object1.setStrip(_object1._strip - 1);
63 _object1.setFrame(_object1.getFrameCount());
64 _object1.animate(ANIM_MODE_6, (_speakerMode == 0xff) ? this : NULL);
65 } else {
66 _object1.animate(ANIM_MODE_6, (_speakerMode == 0xff) ? this : NULL);
67 }
68 }
69
70 Speaker::remove();
71 }
72
signal()73 void VisualSpeaker::signal() {
74 // TODO: Handle _field18 if used in Action. It looks only used in the original in remove()
75 // _action->_field18 = 1;
76 if (_speakerMode == 0xff)
77 stopSpeaking();
78
79 _speakerMode = 0;
80 if (_numFrames) {
81 if (_object2) {
82 _object1.setStrip(_object1._strip + 1);
83 _object1.animate(ANIM_MODE_2, NULL);
84 _fieldF8 = 1;
85 }
86
87 if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId)
88 _sceneText.show();
89
90 if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && _soundId) {
91 setVoiceFrame(1);
92 }
93 } else if (_action && _object2) {
94 _action->setDelay(1);
95 _sceneText.remove();
96
97 R2_GLOBALS._playStream.stop();
98 }
99 }
100
dispatch()101 void VisualSpeaker::dispatch() {
102 uint32 frameNumber = R2_GLOBALS._events.getFrameNumber();
103 assert(_action);
104
105 // Delay check for character animation
106 if (_delayAmount) {
107 if (frameNumber >= _frameNumber) {
108 _delayAmount = _delayAmount - (_frameNumber - frameNumber);
109 _frameNumber = frameNumber;
110
111 if (_delayAmount <= 0) {
112 _delayAmount = 0;
113 _object1.animate(ANIM_MODE_NONE, NULL);
114 _object1.setFrame(1);
115 }
116 }
117 }
118
119 // Delay check for voice
120 if (_voiceDelayAmount) {
121 if (frameNumber >= _voiceFrameNumber) {
122 _voiceDelayAmount = _voiceDelayAmount - (frameNumber - _voiceFrameNumber);
123 _voiceFrameNumber = frameNumber;
124
125 if (_voiceDelayAmount <= 0) {
126 _voiceDelayAmount = 0;
127 if (R2_GLOBALS._playStream.play(_soundId, NULL)) {
128 _numFrames = 2;
129 _soundId = 0;
130 } else {
131 _sceneText.show();
132 }
133 }
134 }
135 }
136
137 if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && (_numFrames == 2) &&
138 !R2_GLOBALS._playStream.isPlaying()) {
139 _numFrames = 0;
140 _object1.animate(ANIM_MODE_NONE);
141 _object1.setFrame(1);
142
143 if (!(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) {
144 // Don't bother waiting for a mouse click to start the next speech segment
145 _action->setDelay(1);
146 }
147 }
148 }
149
synchronize(Serializer & s)150 void VisualSpeaker::synchronize(Serializer &s) {
151 Speaker::synchronize(s);
152
153 SYNC_POINTER(_object2);
154 s.syncAsSint16LE(_speakerMode);
155 s.syncAsSint16LE(_fieldF8);
156 s.syncAsSint16LE(_displayMode);
157 s.syncAsSint16LE(_soundId);
158 s.syncAsByte(_removeObject);
159 s.syncAsSint16LE(_numFrames);
160 s.syncAsSint16LE(_delayAmount);
161 s.syncAsUint32LE(_frameNumber);
162 s.syncAsSint16LE(_voiceDelayAmount);
163 s.syncAsUint32LE(_voiceFrameNumber);
164 }
165
setText(const Common::String & msg)166 void VisualSpeaker::setText(const Common::String &msg) {
167 _sceneText.remove();
168
169 // Position the text depending on the specified display mode
170 switch (_displayMode) {
171 case 2:
172 _textPos = Common::Point(60, 20);
173 break;
174 case 3:
175 _textPos = Common::Point(110, 20);
176 break;
177 case 4:
178 _textPos = Common::Point(10, 100);
179 break;
180 case 5:
181 _textPos = Common::Point(60, 100);
182 break;
183 case 6:
184 _textPos = Common::Point(110, 100);
185 break;
186 case 7:
187 _textPos = Common::Point(170, 20);
188 break;
189 case 8:
190 _textPos = Common::Point(170, 100);
191 break;
192 case 9:
193 _textPos = Common::Point(330, 20);
194 break;
195 default:
196 _textPos = Common::Point(10, 20);
197 break;
198 }
199
200 // Check if the message starts with a '!'. If so, it indicates a speech resource Id to be played,
201 // in which case extract the resource number from the message.
202 _soundId = 0;
203 Common::String s = msg;
204 if (s.hasPrefix("!")) {
205 s.deleteChar(0);
206 _soundId = atoi(s.c_str());
207
208 while (!s.empty() && (*s.c_str() >= '0' && *s.c_str() <= '9'))
209 s.deleteChar(0);
210 }
211
212 // Set up the text details
213 _sceneText._color1 = _color1;
214 _sceneText._color2 = _color2;
215 _sceneText._color3 = _color3;
216 _sceneText._width = _textWidth;
217 _sceneText._fontNumber = _fontNumber;
218 _sceneText._textMode = _textMode;
219 _sceneText.setup(s);
220
221 _sceneText.setPosition(_textPos);
222 _sceneText.fixPriority(256);
223
224 // If subtitles are turned off, don't show the text
225 if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) &&
226 !(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) {
227 _sceneText.hide();
228 }
229
230 // Figure out the text delay if subtitles are turned on, or there's no speech resource specified
231 if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId) {
232 const char *msgP = s.c_str();
233 int numWords = 0;
234 while (*msgP != '\0') {
235 if (*msgP++ == ' ')
236 ++numWords;
237 }
238
239 if (!numWords && !s.empty())
240 ++numWords;
241
242 _numFrames = numWords * 30 + 120;
243 setDelay(_numFrames);
244 } else {
245 _numFrames = 1;
246 }
247
248 // If the text is empty, no delay is needed
249 if (s.empty())
250 _numFrames = 0;
251
252 if (_speakerMode) {
253 if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId)
254 _sceneText.hide();
255 } else {
256 if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && _soundId) {
257 if (!R2_GLOBALS._playStream.play(_soundId, NULL)) {
258 // Couldn't play voice, so fall back on showing text
259 _sceneText.show();
260 } else {
261 _numFrames = 2;
262 _soundId = 0;
263 }
264 }
265 }
266 }
267
stopSpeaking()268 void VisualSpeaker::stopSpeaking() {
269 R2_GLOBALS._playStream.stop();
270 _speakerMode = 0;
271 _object1.remove();
272
273 if (_object2)
274 _object2->show();
275 _object2 = NULL;
276 _fieldF8 = 0;
277 }
278
setFrame(int numFrames)279 void VisualSpeaker::setFrame(int numFrames) {
280 _delayAmount = numFrames;
281 _frameNumber = R2_GLOBALS._events.getFrameNumber();
282 }
283
setVoiceFrame(int numFrames)284 void VisualSpeaker::setVoiceFrame(int numFrames) {
285 _voiceDelayAmount = numFrames;
286 _voiceFrameNumber = R2_GLOBALS._events.getFrameNumber();
287 }
288
setDelay(int delay)289 void VisualSpeaker::setDelay(int delay) {
290 _delayAmount = delay;
291 _frameNumber = R2_GLOBALS._events.getFrameNumber();
292 }
293
294 //----------------------------------------------------------------------------
295
SpeakerGameText()296 SpeakerGameText::SpeakerGameText(): VisualSpeaker() {
297 _speakerName = "GAMETEXT";
298 _color1 = 8;
299 _color2 = 0;
300 _textWidth = 300;
301 _hideObjects = false;
302 _object2 = NULL;
303 }
304
305 //----------------------------------------------------------------------------
306 // Classes related to CAPTAIN
307 //----------------------------------------------------------------------------
308
SpeakerCaptain3210()309 SpeakerCaptain3210::SpeakerCaptain3210() {
310 _speakerName = "Captain";
311 _color1 = 5;
312 _color2 = 0;
313 _speakerMode = 0;
314 _textWidth = 300;
315 _hideObjects = false;
316 _object2 = NULL;
317 _displayMode = 1;
318 _numFrames = 0;
319 }
320
animateSpeaker()321 void SpeakerCaptain3210::animateSpeaker() {
322 int v = _speakerMode;
323 Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene;
324
325 if (!_object2) {
326 _object2 = &scene->_captain;
327 _object2->hide();
328 _object1.postInit();
329 _object1.setPosition(_object2->_position);
330
331 if (_object2->_mover)
332 _object2->addMover(NULL);
333 }
334
335 if (v == 0) {
336 _object1.animate(ANIM_MODE_2, NULL);
337 } else {
338 ((StripManager *)_action)->_useless = 0;
339
340 _object1.setup(4060, (_object2->_strip * 2) - 1, 1);
341 _object1.animate(ANIM_MODE_5, this);
342 }
343 }
344
345 //----------------------------------------------------------------------------
346 // Classes related to CARETAKER
347 //----------------------------------------------------------------------------
348
SpeakerCaretaker2450()349 SpeakerCaretaker2450::SpeakerCaretaker2450() {
350 _speakerName = "CARETAKER";
351 _color1 = 43;
352 _color2 = 0;
353 _speakerMode = 0;
354 _textWidth = 300;
355 _hideObjects = false;
356 _object2 = NULL;
357 _displayMode = 1;
358 _numFrames = 0;
359 }
360
361 //----------------------------------------------------------------------------
362 // Classes related to CHIEF
363 //----------------------------------------------------------------------------
364
SpeakerChief1100()365 SpeakerChief1100::SpeakerChief1100() {
366 _speakerName = "CHIEF";
367 _color1 = 8;
368 _color2 = 0;
369 _speakerMode = 0;
370 _textWidth = 300;
371 _hideObjects = false;
372 _object2 = NULL;
373 _displayMode = 1;
374 _numFrames = 0;
375 }
376
animateSpeaker()377 void SpeakerChief1100::animateSpeaker() {
378 int v = _speakerMode;
379 Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene;
380
381 if (!_object2) {
382 _object2 = &scene->_chief;
383 _object2->hide();
384 _object1.postInit();
385 _object1.setPosition(_object2->_position);
386 _object1._numFrames = 7;
387
388 if (_object2->_mover)
389 _object2->addMover(NULL);
390 }
391
392 switch (v) {
393 case 0:
394 _object1.animate(ANIM_MODE_2, NULL);
395 break;
396 case 1:
397 ((StripManager *)_action)->_useless = 0;
398
399 _object1.setup(4080, 1, 1);
400 _object1.animate(ANIM_MODE_5, this);
401 break;
402 case 2:
403 ((StripManager *)_action)->_useless = 0;
404
405 _object1.setup(4080, 3, 1);
406 _object1.animate(ANIM_MODE_5, this);
407 break;
408 case 100:
409 _numFrames = 0;
410 ((StripManager *)_action)->_useless = 0;
411
412 _object1.setStrip(_object1._strip - 1);
413 _object1.setFrame(_object1.getFrameCount());
414 _object1.animate(ANIM_MODE_6, this);
415 break;
416 default:
417 signal();
418 break;
419 }
420 }
421
422 //----------------------------------------------------------------------------
423 // Classes related to GUARD
424 //----------------------------------------------------------------------------
425
SpeakerGuard()426 SpeakerGuard::SpeakerGuard() {
427 _speakerName = "GUARD";
428 _color1 = 5;
429 _color2 = 0;
430 _speakerMode = 0;
431 _textWidth = 300;
432 _hideObjects = false;
433 _object2 = NULL;
434 _displayMode = 1;
435 _numFrames = 0;
436 }
437
animateSpeaker()438 void SpeakerGuard2800::animateSpeaker() {
439 int v = _speakerMode;
440 Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene;
441
442 if (!_object2) {
443 _object2 = &scene->_guard;
444 _object2->hide();
445 _object1.postInit();
446 _object1.setPosition(_object2->_position);
447
448 if (_object2->_mover)
449 _object2->addMover(NULL);
450 }
451
452 if (v == 0) {
453 _object1.animate(ANIM_MODE_2, NULL);
454 } else {
455 ((StripManager *)_action)->_useless = 0;
456
457 _object1.setZoom(75);
458 _object1.setup(4060, 3, 1);
459 _object1.animate(ANIM_MODE_5, this);
460 }
461 }
462
463 //----------------------------------------------------------------------------
464 // Classes related to JOCKO
465 //----------------------------------------------------------------------------
466
SpeakerJocko()467 SpeakerJocko::SpeakerJocko() {
468 _speakerName = "Jocko";
469 _color1 = 45;
470 _color2 = 0;
471 _speakerMode = 0;
472 _textWidth = 300;
473 _hideObjects = false;
474 _object2 = NULL;
475 _displayMode = 1;
476 _numFrames = 0;
477 }
478
animateSpeaker()479 void SpeakerJocko3200::animateSpeaker() {
480 int v = _speakerMode;
481 Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
482
483 if (!_object2) {
484 _object2 = &scene->_jocko;
485 _object2->hide();
486 _object1.postInit();
487 _object1.setPosition(_object2->_position);
488
489 if (_object2->_mover)
490 _object2->addMover(NULL);
491 }
492
493 if (v == 0) {
494 _object1.animate(ANIM_MODE_2, NULL);
495 } else {
496 ((StripManager *)_action)->_useless = 0;
497
498 _object1.setup(4060, (_object2->_strip * 2) - 1, 1);
499 _object1.animate(ANIM_MODE_5, this);
500 }
501 }
502
animateSpeaker()503 void SpeakerJocko3220::animateSpeaker() {
504 int v = _speakerMode;
505 Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene;
506
507 if (!_object2) {
508 _object2 = &scene->_jocko;
509 _object2->hide();
510 _object1.postInit();
511 _object1.setPosition(_object2->_position);
512
513 if (_object2->_mover)
514 _object2->addMover(NULL);
515 }
516
517 if (v == 0) {
518 _object1.animate(ANIM_MODE_2, NULL);
519 } else {
520 ((StripManager *)_action)->_useless = 0;
521
522 _object1.setup(4060, (_object2->_strip * 2) - 1, 1);
523 _object1.animate(ANIM_MODE_5, this);
524 }
525 }
526
animateSpeaker()527 void SpeakerJocko3230::animateSpeaker() {
528 int v = _speakerMode;
529 Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene;
530
531 if (!_object2) {
532 _object2 = &scene->_jocko;
533 _object2->hide();
534 _object1.postInit();
535 _object1.setPosition(_object2->_position);
536
537 if (_object2->_mover)
538 _object2->addMover(NULL);
539 }
540
541 if (v == 0) {
542 _object1.animate(ANIM_MODE_2, NULL);
543 } else {
544 ((StripManager *)_action)->_useless = 0;
545
546 _object1.setup(4060, (_object2->_strip * 2) - 1, 1);
547 _object1.animate(ANIM_MODE_5, this);
548 }
549 }
550
551 //----------------------------------------------------------------------------
552 // Classes related to MIRANDA
553 //----------------------------------------------------------------------------
554
SpeakerMiranda()555 SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() {
556 _speakerName = "MIRANDA";
557 _color1 = 154;
558 _color2 = 0;
559 _speakerMode = 0;
560 _textWidth = 300;
561 _hideObjects = false;
562 _object2 = NULL;
563 _displayMode = 1;
564 _numFrames = 0;
565 }
566
animateSpeaker()567 void SpeakerMiranda300::animateSpeaker() {
568 int v = _speakerMode;
569
570 if (!_object2) {
571 if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) {
572 _object2 = &R2_GLOBALS._player;
573 } else {
574 Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
575 _object2 = &scene->_miranda;
576 }
577
578 _object2->hide();
579 _object1.postInit();
580 _object1.setPosition(_object2->_position);
581
582 if (_object2->_mover)
583 _object2->addMover(NULL);
584 }
585
586 if (v == 0) {
587 _object1.animate(ANIM_MODE_2, NULL);
588 } else if (v == 100) {
589 _numFrames = 0;
590 ((StripManager *)_action)->_useless = 0;
591
592 _object1.setStrip(_object1._strip - 1);
593 _object1.setFrame(_object1.getFrameCount());
594 _object1.animate(ANIM_MODE_6, this);
595 } else {
596 ((StripManager *)_action)->_useless = 0;
597
598 if (v == 4) {
599 _object1.setup(304, 5, 1);
600 } else {
601 _object1.setup(305, v * 2 - 1, 1);
602 }
603 _object1.animate(ANIM_MODE_5, this);
604 }
605 }
606
animateSpeaker()607 void SpeakerMiranda1625::animateSpeaker() {
608 int v = _speakerMode;
609
610 if (!_object2) {
611 Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene;
612 _object2 = &scene->_mirandaMouth;
613 _object2->hide();
614 _object1.postInit();
615 _object1.setPosition(Common::Point(196, 65));
616
617 if (_object2->_mover)
618 _object2->addMover(NULL);
619 }
620
621 if (v == 0) {
622 _object1.animate(ANIM_MODE_2, NULL);
623 } else {
624 ((StripManager *)_action)->_useless = 0;
625
626 _object1.setup(1627, 3, 1);
627 _object1.animate(ANIM_MODE_5, this);
628 }
629 }
630
animateSpeaker()631 void SpeakerMiranda3255::animateSpeaker() {
632 int v = _speakerMode;
633
634 if (!_object2) {
635 _object2 = &R2_GLOBALS._player;
636 _object2->hide();
637 _object1.postInit();
638 _object1._effect = _object2->_effect;
639 _object1._shade = _object2->_shade;
640 _object1.setPosition(_object2->_position);
641 }
642
643 if (v == 0) {
644 _object1.animate(ANIM_MODE_2, NULL);
645 } else {
646 ((StripManager *)_action)->_useless = 0;
647
648 _object1.setup(3257, 5, 1);
649 _object1.animate(ANIM_MODE_5, this);
650 }
651 }
652
animateSpeaker()653 void SpeakerMiranda3375::animateSpeaker() {
654 Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
655
656 int v = _speakerMode;
657
658 if (!_object2) {
659 if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
660 _object2 = &R2_GLOBALS._player;
661 else
662 _object2 = &scene->_companion2;
663
664 _object2->hide();
665 _object1.postInit();
666 _object1.setPosition(_object2->_position);
667 _object1._numFrames = 7;
668 _object1._effect = EFFECT_SHADED;
669 _object1.changeZoom(-1);
670
671 if (scene->_companion1._position.y != 163)
672 R2_GLOBALS._player.setStrip(8);
673 else
674 R2_GLOBALS._player.setStrip(2);
675
676 R2_GLOBALS._player.disableControl();
677
678 if (R2_GLOBALS._player._mover)
679 R2_GLOBALS._player.addMover(NULL);
680
681 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
682
683 if (_object2->_mover)
684 _object2->addMover(NULL);
685 }
686
687
688 switch (v) {
689 case 0:
690 _object1.animate(ANIM_MODE_2, NULL);
691 break;
692 case 1:
693 ((StripManager *)_action)->_useless = 0;
694
695 _object1.setup(4051, 5, 1);
696 _object1.animate(ANIM_MODE_5, this);
697 break;
698 default:
699 signal();
700 break;
701 }
702 }
703
animateSpeaker()704 void SpeakerMiranda3385::animateSpeaker() {
705 Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
706
707 int v = _speakerMode;
708
709 if (!_object2) {
710 if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
711 _object2 = &R2_GLOBALS._player;
712 else
713 _object2 = &scene->_companion2;
714
715 _object2->hide();
716 _object1.postInit();
717 _object1.setPosition(_object2->_position);
718 _object1._numFrames = 7;
719 _object1._effect = EFFECT_SHADED;
720 _object1.changeZoom(-1);
721
722 if (R2_GLOBALS._sceneManager._previousScene == 3375)
723 R2_GLOBALS._player.setStrip(4);
724 else
725 R2_GLOBALS._player.setStrip(3);
726
727 if (R2_GLOBALS._player._mover)
728 R2_GLOBALS._player.addMover(NULL);
729
730 R2_GLOBALS._player.disableControl(CURSOR_TALK);
731 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
732
733 if (_object2->_mover)
734 _object2->addMover(NULL);
735 }
736
737
738 switch (v) {
739 case 0:
740 _object1.animate(ANIM_MODE_2, NULL);
741 break;
742 case 1:
743 ((StripManager *)_action)->_useless = 0;
744
745 _object1.setup(4051, 5, 1);
746 _object1.animate(ANIM_MODE_5, this);
747 break;
748 default:
749 signal();
750 break;
751 }
752 }
753
animateSpeaker()754 void SpeakerMiranda3395::animateSpeaker() {
755 Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
756
757 int v = _speakerMode;
758
759 if (!_object2) {
760 if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
761 _object2 = &R2_GLOBALS._player;
762 else
763 _object2 = &scene->_companion2;
764
765 _object2->hide();
766 _object1.postInit();
767 _object1.setPosition(_object2->_position);
768 _object1._numFrames = 7;
769 _object1._effect = EFFECT_SHADED;
770 _object1.changeZoom(-1);
771
772 if (R2_GLOBALS._sceneManager._previousScene == 3385)
773 R2_GLOBALS._player.setStrip(4);
774 else
775 R2_GLOBALS._player.setStrip(3);
776
777 R2_GLOBALS._player.disableControl(CURSOR_TALK);
778
779 if (R2_GLOBALS._player._mover)
780 R2_GLOBALS._player.addMover(NULL);
781
782 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
783
784 if (_object2->_mover)
785 _object2->addMover(NULL);
786 }
787
788
789 switch (v) {
790 case 0:
791 _object1.animate(ANIM_MODE_2, NULL);
792 break;
793 case 1:
794 ((StripManager *)_action)->_useless = 0;
795
796 _object1.setup(4051, 5, 1);
797 _object1.animate(ANIM_MODE_5, this);
798 break;
799 default:
800 signal();
801 break;
802 }
803 }
804
animateSpeaker()805 void SpeakerMiranda3400::animateSpeaker() {
806 Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
807
808 int v = _speakerMode;
809
810 if (!_object2) {
811 if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
812 _object2 = &R2_GLOBALS._player;
813 else
814 _object2 = &scene->_companion2;
815
816 _object2->hide();
817 _object1.postInit();
818 _object1.setPosition(_object2->_position);
819 _object1._numFrames = 7;
820 _object1._effect = EFFECT_SHADED;
821 _object1.changeZoom(-1);
822 R2_GLOBALS._player.disableControl();
823 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
824
825 if (_object2->_mover)
826 _object2->addMover(NULL);
827 }
828
829 switch (v) {
830 case 0:
831 _object1.animate(ANIM_MODE_2, NULL);
832 break;
833 case 1:
834 ((StripManager *)_action)->_useless = 0;
835
836 _object1.setup(4051, 5, 1);
837 _object1.animate(ANIM_MODE_5, this);
838 break;
839 case 2:
840 ((StripManager *)_action)->_useless = 0;
841
842 _object1.setup(4050, 3, 1);
843 _object1.animate(ANIM_MODE_5, this);
844 break;
845 default:
846 signal();
847 break;
848 }
849 }
850
animateSpeaker()851 void SpeakerMiranda3600::animateSpeaker() {
852 Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
853
854 int v = _speakerMode;
855
856 if (!_object2) {
857 if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
858 _object2 = &R2_GLOBALS._player;
859 else
860 _object2 = &scene->_miranda;
861
862 _object2->hide();
863 _object1.postInit();
864 _object1.setPosition(_object2->_position);
865 _object1._numFrames = 7;
866 _object1._effect = EFFECT_SHADED;
867 _object1.changeZoom(-1);
868 R2_GLOBALS._player.disableControl();
869 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
870
871 if (_object2->_mover)
872 _object2->addMover(NULL);
873
874 _object1.setPosition(_object2->_position);
875 }
876
877 switch (v) {
878 case 0:
879 _object1.animate(ANIM_MODE_2, NULL);
880 break;
881 case 1:
882 ((StripManager *)_action)->_useless = 0;
883
884 _object1.setup(4051, 1, 1);
885 _object1.animate(ANIM_MODE_5, this);
886 break;
887 case 2:
888 ((StripManager *)_action)->_useless = 0;
889
890 _object1.setup(4050, 1, 1);
891 _object1.animate(ANIM_MODE_5, this);
892 break;
893 default:
894 signal();
895 break;
896 }
897 }
898
animateSpeaker()899 void SpeakerMiranda3700::animateSpeaker() {
900 Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
901
902 int v = _speakerMode;
903
904 if (!_object2) {
905 _object2 = &scene->_miranda;
906 _object2->hide();
907 _object1.postInit();
908 _object1.setPosition(_object2->_position);
909 _object1._numFrames = 7;
910 R2_GLOBALS._player.disableControl();
911 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
912
913 if (_object2->_mover)
914 _object2->addMover(NULL);
915 }
916
917 _object1.setPosition(_object2->_position);
918
919 switch (v) {
920 case 0:
921 _object1.animate(ANIM_MODE_2, NULL);
922 break;
923 case 1:
924 ((StripManager *)_action)->_useless = 0;
925
926 scene->_quinn.setup(10, 6, 1);
927 scene->_seeker.setup(20, 5, 1);
928 _object2->setup(30, 1, 1);
929 scene->_webbster.setup(40, 1, 1);
930 _object1.setup(4050, 5, 1);
931 _object1.animate(ANIM_MODE_5, this);
932 break;
933 case 2:
934 ((StripManager *)_action)->_useless = 0;
935
936 scene->_miranda.setup(30, 8, 1);
937 _object1.setup(4052, 3, 1);
938 _object1.animate(ANIM_MODE_5, this);
939 break;
940 case 3:
941 ((StripManager *)_action)->_useless = 0;
942
943 scene->_seeker.setup(20, 1, 1);
944 scene->_miranda.setup(30, 1, 1);
945 _object1.setup(4051, 7, 1);
946 _object1.animate(ANIM_MODE_5, this);
947 break;
948 default:
949 signal();
950 break;
951 }
952 }
953
954 //----------------------------------------------------------------------------
955 // Classes related to NEJ
956 //----------------------------------------------------------------------------
957
SpeakerNej()958 SpeakerNej::SpeakerNej() {
959 _speakerName = "NEJ";
960 _color1 = 171;
961 _color2 = 0;
962 _speakerMode = 0;
963 _textWidth = 300;
964 _hideObjects = false;
965 _object2 = NULL;
966 _displayMode = 1;
967 _numFrames = 0;
968 }
969
animateSpeaker()970 void SpeakerNej2700::animateSpeaker() {
971 int v = _speakerMode;
972 Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene;
973
974 if (!_object2) {
975 _object2 = &scene->_nej;
976 _object2->hide();
977 _object1.postInit();
978 _object1.setPosition(_object2->_position);
979
980 if (_object2->_mover)
981 _object2->addMover(NULL);
982 }
983
984 if (v == 0) {
985 _object1.animate(ANIM_MODE_2, NULL);
986 } else {
987 ((StripManager *)_action)->_useless = 0;
988
989 switch (_object2->_visage) {
990 case 2701:
991 _object1.setup(4022, 3, 1);
992 _object1.setPosition(Common::Point(164, 163));
993 _object2->setPosition(Common::Point(-10, -10));
994 break;
995 case 2705:
996 _object1.setup(4022, 7, 1);
997 _object1.fixPriority(162);
998 break;
999 default:
1000 break;
1001 }
1002 _object1.animate(ANIM_MODE_5, this);
1003 }
1004 }
1005
animateSpeaker()1006 void SpeakerNej2750::animateSpeaker() {
1007 int v = _speakerMode;
1008 Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene;
1009
1010 if (!_object2) {
1011 _object2 = &scene->_nej;
1012 _object2->hide();
1013 _object1.postInit();
1014 _object1.setPosition(_object2->_position);
1015
1016 if (_object2->_mover)
1017 _object2->addMover(NULL);
1018 }
1019
1020 if (v == 0) {
1021 _object1.animate(ANIM_MODE_2, NULL);
1022 } else {
1023 ((StripManager *)_action)->_useless = 0;
1024
1025 switch (_object2->_visage) {
1026 case 2705:
1027 _object1.setup(4022, 7, 1);
1028 break;
1029 case 2752:
1030 _object1.setup(2752, 1, 1);
1031 break;
1032 default:
1033 break;
1034 }
1035 _object1.animate(ANIM_MODE_5, this);
1036 }
1037 }
1038
animateSpeaker()1039 void SpeakerNej2800::animateSpeaker() {
1040 int v = _speakerMode;
1041 Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene;
1042
1043 if (!_object2) {
1044 _object2 = &scene->_nej;
1045 _object2->hide();
1046 _object1.postInit();
1047 _object1.setPosition(_object2->_position);
1048
1049 if (_object2->_mover)
1050 _object2->addMover(NULL);
1051 }
1052
1053 if (v == 0) {
1054 _object1.animate(ANIM_MODE_2, NULL);
1055 } else {
1056 ((StripManager *)_action)->_useless = 0;
1057
1058 _object1.setup(4023, 3, 1);
1059 if (_object2->_visage == 2801)
1060 _object1.setPosition(Common::Point(_object2->_position.x - 12, _object2->_position.y));
1061 _object1.animate(ANIM_MODE_5, this);
1062 }
1063 }
1064
1065 //----------------------------------------------------------------------------
1066 // Classes related to PHARISHA
1067 //----------------------------------------------------------------------------
1068
SpeakerPharisha()1069 SpeakerPharisha::SpeakerPharisha(): VisualSpeaker() {
1070 _speakerName = "PHARISHA";
1071 _color1 = 151;
1072 _color2 = 0;
1073 _speakerMode = 0;
1074 _textWidth = 300;
1075 _hideObjects = false;
1076 _object2 = NULL;
1077 _displayMode = 1;
1078 _numFrames = 0;
1079 }
1080
animateSpeaker()1081 void SpeakerPharisha2435::animateSpeaker() {
1082 int v = _speakerMode;
1083 Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
1084
1085 if (!_object2) {
1086 _object2 = &scene->_astor;
1087 _object2->hide();
1088 _object1.postInit();
1089 _object1.setPosition(_object2->_position);
1090 }
1091
1092 if (v == 0) {
1093 _object1.animate(ANIM_MODE_2, NULL);
1094 } else {
1095 ((StripManager *)_action)->_useless = 0;
1096
1097 _object1.setup(4098, 5, 1);
1098 _object1.animate(ANIM_MODE_5, this);
1099 }
1100 }
1101
1102 //----------------------------------------------------------------------------
1103 // Classes related to PRIVATE
1104 //----------------------------------------------------------------------------
1105
SpeakerPrivate3210()1106 SpeakerPrivate3210::SpeakerPrivate3210() {
1107 _speakerName = "Private";
1108 _color1 = 45;
1109 _color2 = 0;
1110 _speakerMode = 0;
1111 _textWidth = 300;
1112 _hideObjects = false;
1113 _object2 = NULL;
1114 _displayMode = 1;
1115 _numFrames = 0;
1116 }
1117
animateSpeaker()1118 void SpeakerPrivate3210::animateSpeaker() {
1119 int v = _speakerMode;
1120 Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene;
1121
1122 if (!_object2) {
1123 _object2 = &scene->_private;
1124 _object2->hide();
1125 _object1.postInit();
1126 _object1.setPosition(_object2->_position);
1127
1128 if (_object2->_mover)
1129 _object2->addMover(NULL);
1130 }
1131
1132 if (v == 0) {
1133 _object1.animate(ANIM_MODE_2, NULL);
1134 } else {
1135 ((StripManager *)_action)->_useless = 0;
1136
1137 _object1.setup(4060, (_object2->_strip * 2) - 1, 1);
1138 _object1.animate(ANIM_MODE_5, this);
1139 }
1140 }
1141
1142 //----------------------------------------------------------------------------
1143 // Classes related to PROTECTOR
1144 //----------------------------------------------------------------------------
1145
SpeakerProtector3600()1146 SpeakerProtector3600::SpeakerProtector3600() {
1147 _speakerName = "Protector";
1148 _color1 = 170;
1149 _color2 = 0;
1150 _speakerMode = 0;
1151 _textWidth = 300;
1152 _hideObjects = false;
1153 _object2 = NULL;
1154 _displayMode = 7;
1155 _numFrames = 0;
1156 }
1157
animateSpeaker()1158 void SpeakerProtector3600::animateSpeaker() {
1159 int v = _speakerMode;
1160 Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
1161
1162 if (!_object2) {
1163 _object2 = &scene->_protector;
1164 _object2->hide();
1165 _object1.postInit();
1166 _object1.setPosition(_object2->_position);
1167 _object1._numFrames = 7;
1168 _object1._effect = EFFECT_SHADED;
1169 _object1.changeZoom(-1);
1170
1171 R2_GLOBALS._player.disableControl();
1172 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
1173
1174 if (_object2->_mover)
1175 _object2->addMover(NULL);
1176 }
1177
1178 _object1.setPosition(_object2->_position);
1179
1180 switch (v) {
1181 case 0:
1182 _object1.animate(ANIM_MODE_2, NULL);
1183 break;
1184 case 1:
1185 ((StripManager *)_action)->_useless = 0;
1186
1187 if (scene->_sceneMode != 3324) {
1188 _object1.setup(4125, 3, 1);
1189 _object1.animate(ANIM_MODE_5, this);
1190 } else {
1191 _object1.setup(3258, 6, 1);
1192 _object1.animate(ANIM_MODE_2, NULL);
1193 _object1.hide();
1194 _object2->setup(3258, 6, 1);
1195 _object2->show();
1196 }
1197 break;
1198 default:
1199 signal();
1200 break;
1201 }
1202 }
1203
1204 //----------------------------------------------------------------------------
1205 // Classes related to QUINN
1206 //----------------------------------------------------------------------------
1207
SpeakerQuinn()1208 SpeakerQuinn::SpeakerQuinn(): VisualSpeaker() {
1209 _speakerName = "QUINN";
1210 _color1 = 60;
1211 _color2 = 0;
1212 _speakerMode = 0;
1213 _textWidth = 300;
1214 _hideObjects = false;
1215 _object2 = NULL;
1216 _displayMode = 1;
1217 _numFrames = 0;
1218 }
1219
animateSpeaker()1220 void SpeakerQuinn300::animateSpeaker() {
1221 int v = _speakerMode;
1222
1223 if (!_object2) {
1224 if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
1225 _object2 = &R2_GLOBALS._player;
1226 } else {
1227 assert(R2_GLOBALS._sceneManager._sceneNumber == 300);
1228 Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
1229 _object2 = &scene->_quinn;
1230 }
1231
1232 _object2->hide();
1233 _object1.postInit();
1234 _object1.setPosition(_object2->_position);
1235 }
1236
1237 if (v == 0) {
1238 _object1.animate(ANIM_MODE_2, NULL);
1239 } else if (v == 100) {
1240 _numFrames = 0;
1241 ((StripManager *)_action)->_useless = 0;
1242
1243 _object1.setStrip(_object1._strip - 1);
1244 _object1.setFrame(_object1.getFrameCount());
1245 _object1.animate(ANIM_MODE_6, this);
1246 } else {
1247 ((StripManager *)_action)->_useless = 0;
1248
1249 switch (_object2->_visage) {
1250 case 10:
1251 _object1.setup((v - 1) / 4 + 4010, ((v - ((v - 1) / 4 * 4) - 1) % 8) * 2 + 1, 1);
1252 break;
1253 case 302:
1254 _object1.setup(308, (v - 1) % 8 + 1, 1);
1255 break;
1256 case 308:
1257 _object1.setup(308, 5, 1);
1258 break;
1259 default:
1260 break;
1261 }
1262
1263 _object1.animate(ANIM_MODE_5, this);
1264 }
1265 }
1266
animateSpeaker()1267 void SpeakerQuinn500::animateSpeaker() {
1268 int v = _speakerMode;
1269
1270 if (!_object2) {
1271 if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
1272 _object2 = &R2_GLOBALS._player;
1273 } else {
1274 assert(R2_GLOBALS._sceneManager._sceneNumber == 500);
1275 Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene;
1276 _object2 = &scene->_seeker;
1277 }
1278
1279 _object2->hide();
1280
1281 _object1.postInit();
1282 _object1._effect = _object2->_effect;
1283 _object1._shade = _object2->_shade;
1284 _object1.setPosition(_object2->_position);
1285
1286 if (_object2->_mover)
1287 _object2->addMover(NULL);
1288 }
1289
1290 if (v == 0) {
1291 _object1.animate(ANIM_MODE_2, NULL);
1292 } else {
1293 ((StripManager *)_action)->_useless = 0;
1294
1295 switch (_object2->_visage) {
1296 case 10:
1297 _object1.setup(4021, (v == 1) ? 5 : 7, 1);
1298 break;
1299
1300 case 1500:
1301 _object1.setup(4021, (v == 1) ? 1 : 3, 1);
1302 break;
1303
1304 default:
1305 break;
1306 }
1307
1308 _object1.animate(ANIM_MODE_5, this);
1309 }
1310 }
1311
animateSpeaker()1312 void SpeakerQuinn1100::animateSpeaker() {
1313 int v = _speakerMode;
1314
1315 if (!_object2) {
1316 if (v == 0)
1317 return;
1318
1319 if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
1320 _object2 = &R2_GLOBALS._player;
1321 } else {
1322 assert(R2_GLOBALS._sceneManager._sceneNumber == 1100);
1323 Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene;
1324 _object2 = &scene->_seeker;
1325 }
1326
1327 _object2->hide();
1328 _object1.postInit();
1329 _object1.setPosition(_object2->_position);
1330 _object1._numFrames = 7;
1331
1332 if (_object2->_mover)
1333 _object2->addMover(NULL);
1334 }
1335
1336 switch (v) {
1337 case 0:
1338 _object1.animate(ANIM_MODE_2, NULL);
1339 break;
1340 case 1:
1341 ((StripManager *)_action)->_useless = 0;
1342
1343 _object1.setup(1108, 7, 1);
1344 _object1.animate(ANIM_MODE_5, this);
1345 break;
1346 case 2:
1347 ((StripManager *)_action)->_useless = 0;
1348
1349 _object1.setup(1109, 1, 1);
1350 _object1.animate(ANIM_MODE_5, this);
1351 break;
1352 case 3:
1353 ((StripManager *)_action)->_useless = 0;
1354
1355 _object1.setup(1109, 5, 1);
1356 _object1.animate(ANIM_MODE_5, this);
1357 break;
1358 default:
1359 signal();
1360 break;
1361 }
1362 }
1363
animateSpeaker()1364 void SpeakerQuinn2435::animateSpeaker() {
1365 int v = _speakerMode;
1366
1367 if (!_object2) {
1368 if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
1369 _object2 = &R2_GLOBALS._player;
1370 } else {
1371 assert(R2_GLOBALS._sceneManager._sceneNumber == 2435);
1372 Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
1373 _object2 = &scene->_companion;
1374 }
1375
1376 _object2->hide();
1377 _object1.postInit();
1378 _object1.setPosition(_object2->_position);
1379 }
1380
1381 if (v == 0) {
1382 _object1.animate(ANIM_MODE_2, NULL);
1383 } else {
1384 ((StripManager *)_action)->_useless = 0;
1385
1386 _object2->setStrip(7);
1387 _object1.setup(2020, 5, 1);
1388 _object1.animate(ANIM_MODE_5, this);
1389 }
1390 }
1391
animateSpeaker()1392 void SpeakerQuinn2450::animateSpeaker() {
1393 int v = _speakerMode;
1394
1395 if (!_object2) {
1396 if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
1397 _object2 = &R2_GLOBALS._player;
1398 } else {
1399 assert(R2_GLOBALS._sceneManager._sceneNumber == 2435);
1400 Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
1401 _object2 = &scene->_companion;
1402 }
1403
1404 _object2->hide();
1405 _object1.postInit();
1406 _object1.setPosition(_object2->_position);
1407 }
1408
1409 if (v == 0) {
1410 _object1.animate(ANIM_MODE_2, NULL);
1411 } else {
1412 ((StripManager *)_action)->_useless = 0;
1413
1414 if (R2_GLOBALS.getFlag(61))
1415 _object1.setup(2020, 3, 1);
1416 else
1417 _object1.setup(2020, 1, 1);
1418 _object1.animate(ANIM_MODE_5, this);
1419 }
1420 }
1421
animateSpeaker()1422 void SpeakerQuinn2700::animateSpeaker() {
1423 int v = _speakerMode;
1424
1425 if (!_object2) {
1426 _object2 = &R2_GLOBALS._player;
1427 _object2->hide();
1428 _object1.postInit();
1429 _object1.setPosition(_object2->_position);
1430
1431 if (_object2->_mover)
1432 _object2->addMover(NULL);
1433 }
1434
1435 if (v == 0) {
1436 _object1.animate(ANIM_MODE_2, NULL);
1437 } else {
1438 ((StripManager *)_action)->_useless = 0;
1439
1440 switch (_object2->_visage) {
1441 case 19:
1442 _object1.setup(4022, 5, 1);
1443 break;
1444 case 2701:
1445 _object1.setup(4022, 1, 1);
1446 break;
1447 default:
1448 break;
1449 }
1450 _object1.animate(ANIM_MODE_5, this);
1451 }
1452 }
1453
animateSpeaker()1454 void SpeakerQuinn2750::animateSpeaker() {
1455 int v = _speakerMode;
1456
1457 if (!_object2) {
1458 _object2 = &R2_GLOBALS._player;
1459 _object2->hide();
1460 _object1.postInit();
1461 _object1.setPosition(_object2->_position);
1462
1463 if (_object2->_mover)
1464 _object2->addMover(NULL);
1465 }
1466
1467 if (v == 0) {
1468 _object1.animate(ANIM_MODE_2, NULL);
1469 } else {
1470 ((StripManager *)_action)->_useless = 0;
1471
1472 switch (_object2->_visage) {
1473 case 19:
1474 _object1.setup(4022, 5, 1);
1475 break;
1476 case 2752:
1477 _object1.setup(2752, 3, 1);
1478 break;
1479 default:
1480 break;
1481 }
1482 _object1.animate(ANIM_MODE_5, this);
1483 }
1484 }
1485
animateSpeaker()1486 void SpeakerQuinn2800::animateSpeaker() {
1487 int v = _speakerMode;
1488
1489 if (!_object2) {
1490 _object2 = &R2_GLOBALS._player;
1491 _object2->hide();
1492 _object1.postInit();
1493 _object1.setPosition(_object2->_position);
1494
1495 if (_object2->_mover)
1496 _object2->addMover(NULL);
1497 }
1498
1499 if (v == 0) {
1500 _object1.animate(ANIM_MODE_2, NULL);
1501 } else {
1502 ((StripManager *)_action)->_useless = 0;
1503
1504 switch (_object2->_visage) {
1505 case 16:
1506 _object1.setZoom(75);
1507 _object1.setup(4023, 5, 1);
1508 break;
1509 case 19:
1510 _object1.setup(4023, 1, 1);
1511 break;
1512 case 3110:
1513 _object1.setZoom(75);
1514 if (_object2->_strip == 1)
1515 _object1.setup(4061 , 1, 1);
1516 else
1517 _object1.setup(4061 , 3, 1);
1518 break;
1519 default:
1520 break;
1521 }
1522 _object1.animate(ANIM_MODE_5, this);
1523 }
1524 }
1525
animateSpeaker()1526 void SpeakerQuinn3255::animateSpeaker() {
1527 Scene3255 *scene = (Scene3255 *)R2_GLOBALS._sceneManager._scene;
1528
1529 int v = _speakerMode;
1530
1531 if (!_object2) {
1532 _object2 = &scene->_quinn;
1533 _object2->hide();
1534 _object1.postInit();
1535 _object1._effect = _object2->_effect;
1536 _object1._shade = _object2->_shade;
1537 _object1.setPosition(_object2->_position);
1538 }
1539
1540 if (v == 0) {
1541 _object1.animate(ANIM_MODE_2, NULL);
1542 } else {
1543 ((StripManager *)_action)->_useless = 0;
1544
1545 _object1.setup(3257, 3, 1);
1546 _object1.animate(ANIM_MODE_5, this);
1547 }
1548 }
1549
animateSpeaker()1550 void SpeakerQuinn3375::animateSpeaker() {
1551 Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
1552
1553 int v = _speakerMode;
1554
1555 if (!_object2) {
1556 if (R2_GLOBALS._player._characterIndex == R2_QUINN)
1557 _object2 = &R2_GLOBALS._player;
1558 else if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
1559 _object2 = &scene->_companion1;
1560 else
1561 _object2 = &scene->_companion2;
1562
1563 _object2->hide();
1564 _object1.postInit();
1565 _object1.setPosition(_object2->_position);
1566 _object1._numFrames = 7;
1567 _object1._effect = EFFECT_SHADED;
1568 _object1.changeZoom(-1);
1569
1570 if (scene->_companion1._position.y != 163)
1571 R2_GLOBALS._player.setStrip(8);
1572 else
1573 R2_GLOBALS._player.setStrip(2);
1574
1575 if (R2_GLOBALS._player._mover)
1576 R2_GLOBALS._player.addMover(NULL);
1577
1578 R2_GLOBALS._player.disableControl(CURSOR_TALK);
1579 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
1580
1581 if (_object2->_mover)
1582 _object2->addMover(NULL);
1583 }
1584
1585 switch (v) {
1586 case 0:
1587 _object1.animate(ANIM_MODE_2, NULL);
1588 break;
1589 case 1:
1590 ((StripManager *)_action)->_useless = 0;
1591
1592 _object1.setup(4010, 5, 1);
1593 _object1.animate(ANIM_MODE_5, this);
1594 break;
1595 default:
1596 signal();
1597 break;
1598 }
1599 }
1600
animateSpeaker()1601 void SpeakerQuinn3385::animateSpeaker() {
1602 Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
1603
1604 int v = _speakerMode;
1605
1606 if (!_object2) {
1607 if (R2_GLOBALS._player._characterIndex == R2_QUINN)
1608 _object2 = &R2_GLOBALS._player;
1609 else if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
1610 _object2 = &scene->_companion1;
1611 else
1612 _object2 = &scene->_companion2;
1613
1614 _object2->hide();
1615 _object1.postInit();
1616 _object1.setPosition(_object2->_position);
1617 _object1._numFrames = 7;
1618 _object1._effect = EFFECT_SHADED;
1619 _object1.changeZoom(-1);
1620
1621 if (R2_GLOBALS._sceneManager._previousScene == 3375)
1622 R2_GLOBALS._player.setStrip(4);
1623 else
1624 R2_GLOBALS._player.setStrip(3);
1625
1626 if (R2_GLOBALS._player._mover)
1627 R2_GLOBALS._player.addMover(NULL);
1628
1629 R2_GLOBALS._player.disableControl(CURSOR_TALK);
1630 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
1631
1632 if (_object2->_mover)
1633 _object2->addMover(NULL);
1634 }
1635
1636 switch (v) {
1637 case 0:
1638 _object1.animate(ANIM_MODE_2, NULL);
1639 break;
1640 case 1:
1641 ((StripManager *)_action)->_useless = 0;
1642
1643 if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
1644 _object1.setup(4010, 3, 1);
1645 else
1646 _object1.setup(4010, 5, 1);
1647
1648 _object1.animate(ANIM_MODE_5, this);
1649 break;
1650 default:
1651 signal();
1652 break;
1653 }
1654 }
1655
animateSpeaker()1656 void SpeakerQuinn3395::animateSpeaker() {
1657 Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
1658
1659 int v = _speakerMode;
1660
1661 if (!_object2) {
1662 if (R2_GLOBALS._player._characterIndex == R2_QUINN)
1663 _object2 = &R2_GLOBALS._player;
1664 else if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
1665 _object2 = &scene->_companion1;
1666 else
1667 _object2 = &scene->_companion2;
1668
1669 _object2->hide();
1670 _object1.postInit();
1671 _object1.setPosition(_object2->_position);
1672 _object1._numFrames = 7;
1673 _object1._effect = EFFECT_SHADED;
1674 _object1.changeZoom(-1);
1675
1676 if (R2_GLOBALS._sceneManager._previousScene == 3385)
1677 R2_GLOBALS._player.setStrip(4);
1678 else
1679 R2_GLOBALS._player.setStrip(3);
1680
1681 if (R2_GLOBALS._player._mover)
1682 R2_GLOBALS._player.addMover(NULL);
1683
1684 R2_GLOBALS._player.disableControl(CURSOR_TALK);
1685 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
1686
1687 if (_object2->_mover)
1688 _object2->addMover(NULL);
1689 }
1690
1691 switch (v) {
1692 case 0:
1693 _object1.animate(ANIM_MODE_2, NULL);
1694 break;
1695 case 1:
1696 ((StripManager *)_action)->_useless = 0;
1697
1698 if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
1699 _object1.setup(4010, 3, 1);
1700 else
1701 _object1.setup(4010, 5, 1);
1702
1703 _object1.animate(ANIM_MODE_5, this);
1704 break;
1705 default:
1706 signal();
1707 break;
1708 }
1709 }
1710
animateSpeaker()1711 void SpeakerQuinn3400::animateSpeaker() {
1712 Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
1713
1714 int v = _speakerMode;
1715
1716 if (!_object2) {
1717 if (R2_GLOBALS._player._characterIndex == R2_QUINN)
1718 _object2 = &R2_GLOBALS._player;
1719 else if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
1720 _object2 = &scene->_companion1;
1721 else
1722 _object2 = &scene->_companion2;
1723
1724 _object2->hide();
1725 _object1.postInit();
1726 _object1.setPosition(_object2->_position);
1727 _object1._numFrames = 7;
1728 _object1._effect = EFFECT_SHADED;
1729 _object1.changeZoom(-1);
1730 R2_GLOBALS._player.disableControl();
1731 if (_object2->_mover)
1732 _object2->addMover(NULL);
1733 }
1734
1735 switch (v) {
1736 case 0:
1737 _object1.animate(ANIM_MODE_2, NULL);
1738 break;
1739 case 1:
1740 ((StripManager *)_action)->_useless = 0;
1741
1742 _object1.setup(4010, 5, 1);
1743 _object1.animate(ANIM_MODE_5, NULL);
1744 break;
1745 case 2:
1746 ((StripManager *)_action)->_useless = 0;
1747
1748 _object1.setup(4010, 3, 1);
1749 _object1.animate(ANIM_MODE_5, this);
1750 break;
1751 case 3:
1752 ((StripManager *)_action)->_useless = 0;
1753
1754 _object1.setup(4012, 3, 1);
1755 _object1.animate(ANIM_MODE_5, this);
1756 break;
1757 default:
1758 signal();
1759 break;
1760 }
1761 }
1762
animateSpeaker()1763 void SpeakerQuinn3600::animateSpeaker() {
1764 Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
1765
1766 int v = _speakerMode;
1767
1768 if (!_object2) {
1769 if (R2_GLOBALS._player._characterIndex == R2_QUINN)
1770 _object2 = &R2_GLOBALS._player;
1771 else
1772 _object2 = &scene->_quinn;
1773 _object2->hide();
1774 _object1.postInit();
1775 _object1.setPosition(_object2->_position);
1776 _object1._numFrames = 7;
1777 _object1._effect = EFFECT_SHADED;
1778 _object1.changeZoom(-1);
1779 R2_GLOBALS._player.disableControl();
1780 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
1781
1782 if (_object2->_mover)
1783 _object2->addMover(NULL);
1784 }
1785
1786 switch (v) {
1787 case 0:
1788 _object1.animate(ANIM_MODE_2, NULL);
1789 break;
1790 case 1:
1791 ((StripManager *)_action)->_useless = 0;
1792
1793 _object1.setup(4021, 7, 1);
1794 _object1.animate(ANIM_MODE_5, this);
1795 break;
1796 case 2:
1797 ((StripManager *)_action)->_useless = 0;
1798
1799 _object1.setup(4010, 1, 1);
1800 _object1.animate(ANIM_MODE_5, this);
1801 break;
1802 case 3:
1803 ((StripManager *)_action)->_useless = 0;
1804
1805 _object1.setup(4012, 1, 1);
1806 _object1.animate(ANIM_MODE_5, this);
1807 break;
1808 default:
1809 signal();
1810 break;
1811 }
1812 }
1813
setText(const Common::String & msg)1814 void SpeakerQuinn3700::setText(const Common::String &msg) {
1815 Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
1816
1817 switch (_speakerMode) {
1818 case 2:
1819 scene->_miranda.setup(30, 1, 1);
1820 R2_GLOBALS._sound2.play(44);
1821 break;
1822 case 3:
1823 scene->_miranda.setup(30, 1, 1);
1824 break;
1825 default:
1826 scene->_miranda.setup(30, 7, 1);
1827 break;
1828 }
1829 VisualSpeaker::setText(msg);
1830 }
1831
animateSpeaker()1832 void SpeakerQuinn3700::animateSpeaker() {
1833 Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
1834
1835 int v = _speakerMode;
1836
1837 if (!_object2) {
1838 _object2 = &scene->_quinn;
1839 _object2->hide();
1840 _object1.postInit();
1841 _object1.setPosition(_object2->_position);
1842 _object1._numFrames = 7;
1843 R2_GLOBALS._player.disableControl();
1844 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
1845
1846 if (_object2->_mover)
1847 _object2->addMover(NULL);
1848 }
1849
1850 _object1.setPosition(_object2->_position);
1851
1852 switch (v) {
1853 case 0:
1854 _object1.animate(ANIM_MODE_2, NULL);
1855 break;
1856 case 1:
1857 ((StripManager *)_action)->_useless = 0;
1858
1859 R2_GLOBALS._sound2.stop();
1860 scene->_quinn.setup(10, 4, 1);
1861 scene->_miranda.setup(30, 7, 1);
1862 _object1.setup(3701, 1, 1);
1863 _object1.animate(ANIM_MODE_5, this);
1864 break;
1865 case 2:
1866 ((StripManager *)_action)->_useless = 0;
1867
1868 scene->_seeker.setup(20, 1, 1);
1869 scene->_miranda.setup(30, 1, 1);
1870 _object1.setup(3702, 1, 1);
1871 _object1.animate(ANIM_MODE_5, this);
1872 break;
1873 case 3:
1874 ((StripManager *)_action)->_useless = 0;
1875
1876 scene->_quinn.setup(10, 2, 1);
1877 scene->_miranda.setup(30, 1, 1);
1878 _object1.setup(4011, 1, 1);
1879 _object1.animate(ANIM_MODE_5, this);
1880 break;
1881 default:
1882 signal();
1883 break;
1884 }
1885 }
1886
1887 //----------------------------------------------------------------------------
1888 // Classes related to QUINNL
1889 //----------------------------------------------------------------------------
1890
SpeakerQuinnL()1891 SpeakerQuinnL::SpeakerQuinnL(): SpeakerQuinn() {
1892 _speakerName = "QUINNL";
1893 }
1894
1895 //----------------------------------------------------------------------------
1896 // Classes related to RALF
1897 //----------------------------------------------------------------------------
1898
SpeakerRalf3245()1899 SpeakerRalf3245::SpeakerRalf3245() {
1900 _speakerName = "Ralf";
1901 _color1 = 5;
1902 _color2 = 0;
1903 _speakerMode = 0;
1904 _textWidth = 300;
1905 _hideObjects = false;
1906 _object2 = NULL;
1907 _displayMode = 1;
1908 _numFrames = 0;
1909 }
1910
animateSpeaker()1911 void SpeakerRalf3245::animateSpeaker() {
1912 int v = _speakerMode;
1913 Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene;
1914
1915 if (!_object2) {
1916 _object2 = &scene->_ralf;
1917 _object2->hide();
1918 _object1.postInit();
1919 _object1.setPosition(_object2->_position);
1920
1921 if (_object2->_mover)
1922 _object2->addMover(NULL);
1923 }
1924
1925 if (v == 0) {
1926 _object1.animate(ANIM_MODE_2, NULL);
1927 } else {
1928 ((StripManager *)_action)->_useless = 0;
1929
1930 switch (_object2->_visage) {
1931 case 3100:
1932 _object1.setup(4105, (_object2->_strip * 2) - 1, 1);
1933 break;
1934 case 3101:
1935 _object1.setup(4108, (_object2->_strip * 2) - 1, 1);
1936 break;
1937 case 3102:
1938 _object1.setup(4109, (_object2->_strip * 2) - 1, 1);
1939 break;
1940 default:
1941 break;
1942 }
1943
1944 _object1.animate(ANIM_MODE_5, this);
1945 }
1946 }
1947
1948 //----------------------------------------------------------------------------
1949 // Classes related to ROCKO
1950 //----------------------------------------------------------------------------
1951
SpeakerRocko()1952 SpeakerRocko::SpeakerRocko() {
1953 _speakerName = "Rocko";
1954 _color1 = 5;
1955 _color2 = 0;
1956 _speakerMode = 0;
1957 _textWidth = 300;
1958 _hideObjects = false;
1959 _object2 = NULL;
1960 _displayMode = 1;
1961 _numFrames = 0;
1962 }
1963
animateSpeaker()1964 void SpeakerRocko3200::animateSpeaker() {
1965 int v = _speakerMode;
1966 Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
1967
1968 if (!_object2) {
1969 _object2 = &scene->_rocko;
1970 _object2->hide();
1971 _object1.postInit();
1972 _object1.setPosition(_object2->_position);
1973
1974 if (_object2->_mover)
1975 _object2->addMover(NULL);
1976 }
1977
1978 if (v == 0) {
1979 _object1.animate(ANIM_MODE_2, NULL);
1980 } else {
1981 ((StripManager *)_action)->_useless = 0;
1982
1983 _object1.setup(4060, (_object2->_strip * 2) - 1, 1);
1984 _object1.animate(ANIM_MODE_5, this);
1985 }
1986 }
1987
animateSpeaker()1988 void SpeakerRocko3220::animateSpeaker() {
1989 int v = _speakerMode;
1990 Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene;
1991
1992 if (!_object2) {
1993 _object2 = &scene->_rocko;
1994 _object2->hide();
1995 _object1.postInit();
1996 _object1.setPosition(_object2->_position);
1997
1998 if (_object2->_mover)
1999 _object2->addMover(NULL);
2000 }
2001
2002 if (v == 0) {
2003 _object1.animate(ANIM_MODE_2, NULL);
2004 } else {
2005 ((StripManager *)_action)->_useless = 0;
2006
2007 _object1.setup(4060, (_object2->_strip * 2) - 1, 1);
2008 _object1.animate(ANIM_MODE_5, this);
2009 }
2010 }
2011
animateSpeaker()2012 void SpeakerRocko3230::animateSpeaker() {
2013 int v = _speakerMode;
2014 Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene;
2015
2016 if (!_object2) {
2017 _object2 = &scene->_rocko;
2018 _object2->hide();
2019 _object1.postInit();
2020 _object1.setPosition(_object2->_position);
2021
2022 if (_object2->_mover)
2023 _object2->addMover(NULL);
2024 }
2025
2026 if (v == 0) {
2027 _object1.animate(ANIM_MODE_2, NULL);
2028 } else {
2029 ((StripManager *)_action)->_useless = 0;
2030
2031 _object1.setup(4111, (_object2->_strip * 2) - 1, 1);
2032 _object1.animate(ANIM_MODE_5, this);
2033 }
2034 }
2035
2036 //----------------------------------------------------------------------------
2037 // Classes related to SEEKER
2038 //----------------------------------------------------------------------------
2039
SpeakerSeeker()2040 SpeakerSeeker::SpeakerSeeker(): VisualSpeaker() {
2041 _speakerName = "SEEKER";
2042 _color1 = 35;
2043 _color2 = 0;
2044 _speakerMode = 0;
2045 _textWidth = 300;
2046 _hideObjects = false;
2047 _object2 = NULL;
2048 _displayMode = 1;
2049 _numFrames = 0;
2050 }
2051
animateSpeaker()2052 void SpeakerSeeker300::animateSpeaker() {
2053 int v = _speakerMode;
2054
2055 if (!_object2) {
2056 if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
2057 _object2 = &R2_GLOBALS._player;
2058 } else {assert(R2_GLOBALS._sceneManager._sceneNumber == 300);
2059 Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
2060 _object2 = &scene->_seeker;
2061 }
2062
2063 _object2->hide();
2064 _object1.postInit();
2065 _object1.fixPriority(140);
2066 _object1.setPosition(_object2->_position);
2067
2068 if (_object2->_mover)
2069 _object2->addMover(NULL);
2070 }
2071
2072 if (v == 0) {
2073 _object1.animate(ANIM_MODE_2, NULL);
2074 } else if (v == 100) {
2075 _numFrames = 0;
2076 ((StripManager *)_action)->_useless = 0;
2077
2078 _object1.setStrip(_object1._strip - 1);
2079 _object1.setFrame(_object1.getFrameCount());
2080 _object1.animate(ANIM_MODE_6, this);
2081 } else {
2082 ((StripManager *)_action)->_useless = 0;
2083
2084 _object1.setup(306, v * 2 - 1, 1);
2085 _object1.animate(ANIM_MODE_5, this);
2086 }
2087 }
2088
animateSpeaker()2089 void SpeakerSeeker500::animateSpeaker() {
2090 int v = _speakerMode;
2091
2092 if (!_object2) {
2093 if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
2094 _object2 = &R2_GLOBALS._player;
2095 } else {
2096 assert(R2_GLOBALS._sceneManager._sceneNumber == 500);
2097 Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene;
2098 _object2 = &scene->_seeker;
2099 }
2100
2101 _object2->hide();
2102 _object1.postInit();
2103
2104 _object1._effect = _object2->_effect;
2105 _object1._shade = _object2->_shade;
2106 _object1.setPosition(_object2->_position);
2107
2108 if (_object2->_mover)
2109 _object2->addMover(NULL);
2110 }
2111
2112 if (v == 0) {
2113 _object1.animate(ANIM_MODE_2, NULL);
2114 } else {
2115 ((StripManager *)_action)->_useless = 0;
2116
2117 if (v == 1)
2118 _object1.setup(4041, 3, 1);
2119 else
2120 _object1.setup(4041, 1, 1);
2121
2122 _object1.animate(ANIM_MODE_5, this);
2123 }
2124 }
2125
animateSpeaker()2126 void SpeakerSeeker1100::animateSpeaker() {
2127 int v = _speakerMode;
2128
2129 if (!_object2) {
2130 if (v == 0)
2131 return;
2132
2133 if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
2134 _object2 = &R2_GLOBALS._player;
2135 } else {
2136 assert(R2_GLOBALS._sceneManager._sceneNumber == 1100);
2137 Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene;
2138 _object2 = &scene->_seeker;
2139 }
2140
2141 _object2->hide();
2142 _object1.postInit();
2143 _object1.setPosition(_object2->_position);
2144 _object1._numFrames = 7;
2145
2146 if (_object2->_mover)
2147 _object2->addMover(NULL);
2148 }
2149
2150 switch (v) {
2151 case 0:
2152 _object1.animate(ANIM_MODE_2, NULL);
2153 break;
2154 case 1:
2155 ((StripManager *)_action)->_useless = 0;
2156
2157 _object1.setup(1108, 1, 1);
2158 _object1.animate(ANIM_MODE_5, this);
2159 break;
2160 case 2:
2161 ((StripManager *)_action)->_useless = 0;
2162
2163 _object1.setup(1108, 3, 1);
2164 _object1.animate(ANIM_MODE_5, this);
2165 break;
2166 case 3:
2167 _object1.setPosition(Common::Point(197, 134));
2168 ((StripManager *)_action)->_useless = 0;
2169
2170 _object1.setup(1108, 5, 1);
2171 _object1.animate(ANIM_MODE_5, this);
2172 break;
2173 case 4:
2174 ((StripManager *)_action)->_useless = 0;
2175
2176 _object1.setup(1109, 7, 1);
2177 _object1.animate(ANIM_MODE_5, this);
2178 break;
2179 case 5:
2180 ((StripManager *)_action)->_useless = 0;
2181
2182 _object1.setup(1109, 3, 1);
2183 _object1.animate(ANIM_MODE_5, this);
2184 break;
2185 default:
2186 signal();
2187 break;
2188 }
2189 }
2190
animateSpeaker()2191 void SpeakerSeeker1900::animateSpeaker() {
2192 int v = _speakerMode;
2193
2194 if (!_object2) {
2195 if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
2196 _object2 = &R2_GLOBALS._player;
2197 } else {
2198 assert(R2_GLOBALS._sceneManager._sceneNumber == 1900);
2199 Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene;
2200 _object2 = &scene->_companion;
2201 }
2202
2203 _object2->hide();
2204 _object1.postInit();
2205 _object1.setPosition(_object2->_position);
2206 _object1._numFrames = 7;
2207
2208 if (_object2->_mover)
2209 _object2->addMover(NULL);
2210 }
2211
2212 if (v == 0) {
2213 _object1.animate(ANIM_MODE_2, NULL);
2214 } else if (v == 1) {
2215 _object1.setup(4032, 1, 1);
2216 _object1.animate(ANIM_MODE_5, this);
2217 } else {
2218 signal();
2219 }
2220 }
2221
animateSpeaker()2222 void SpeakerSeeker2435::animateSpeaker() {
2223 int v = _speakerMode;
2224
2225 if (!_object2) {
2226 if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
2227 _object2 = &R2_GLOBALS._player;
2228 } else {
2229 assert(R2_GLOBALS._sceneManager._sceneNumber == 2435);
2230 Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
2231 _object2 = &scene->_companion;
2232 }
2233
2234 _object2->hide();
2235 _object1.postInit();
2236 _object1.setPosition(_object2->_position);
2237 }
2238
2239 if (v == 0) {
2240 _object1.animate(ANIM_MODE_2, NULL);
2241 } else {
2242 ((StripManager *)_action)->_useless = 0;
2243
2244 _object2->setStrip(7);
2245 _object1.setup(4099, 1, 1);
2246 _object1.animate(ANIM_MODE_5, this);
2247 }
2248 }
2249
animateSpeaker()2250 void SpeakerSeeker2450::animateSpeaker() {
2251 int v = _speakerMode;
2252
2253 if (!_object2) {
2254 if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
2255 _object2 = &R2_GLOBALS._player;
2256 } else {
2257 assert(R2_GLOBALS._sceneManager._sceneNumber == 2450);
2258 Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene;
2259 _object2 = &scene->_companion;
2260 }
2261
2262 _object2->hide();
2263 _object1.postInit();
2264 _object1.setPosition(_object2->_position);
2265 }
2266
2267 if (v == 0) {
2268 _object1.animate(ANIM_MODE_2, NULL);
2269 } else {
2270 ((StripManager *)_action)->_useless = 0;
2271
2272 _object1.setup(4099, 3, 1);
2273 _object1.animate(ANIM_MODE_5, this);
2274 }
2275 }
2276
animateSpeaker()2277 void SpeakerSeeker3375::animateSpeaker() {
2278 Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
2279
2280 int v = _speakerMode;
2281
2282 if (!_object2) {
2283 if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
2284 _object2 = &R2_GLOBALS._player;
2285 else
2286 _object2 = &scene->_companion1;
2287
2288 _object2->hide();
2289 _object1.postInit();
2290 _object1.setPosition(_object2->_position);
2291 _object1._numFrames = 7;
2292 _object1._effect = EFFECT_SHADED;
2293 _object1.changeZoom(-1);
2294
2295 if (scene->_companion1._position.y != 163)
2296 R2_GLOBALS._player.setStrip(8);
2297 else
2298 R2_GLOBALS._player.setStrip(2);
2299
2300 if (R2_GLOBALS._player._mover)
2301 R2_GLOBALS._player.addMover(NULL);
2302
2303 R2_GLOBALS._player.disableControl(CURSOR_TALK);
2304 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
2305
2306 if (_object2->_mover)
2307 _object2->addMover(NULL);
2308 }
2309
2310 switch (v) {
2311 case 0:
2312 _object1.animate(ANIM_MODE_2, NULL);
2313 break;
2314 case 1:
2315 ((StripManager *)_action)->_useless = 0;
2316
2317 _object1.setup(4031, 1, 1);
2318 _object1.animate(ANIM_MODE_5, this);
2319 break;
2320 default:
2321 signal();
2322 break;
2323 }
2324 }
2325
animateSpeaker()2326 void SpeakerSeeker3385::animateSpeaker() {
2327 Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
2328
2329 int v = _speakerMode;
2330
2331 if (!_object2) {
2332 if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
2333 _object2 = &R2_GLOBALS._player;
2334 else
2335 _object2 = &scene->_companion1;
2336
2337 _object2->hide();
2338 _object1.postInit();
2339 _object1.setPosition(_object2->_position);
2340 _object1._numFrames = 7;
2341 _object1._effect = EFFECT_SHADED;
2342 _object1.changeZoom(-1);
2343
2344 if (R2_GLOBALS._sceneManager._previousScene == 3375)
2345 R2_GLOBALS._player.setStrip(4);
2346 else
2347 R2_GLOBALS._player.setStrip(3);
2348
2349 if (R2_GLOBALS._player._mover)
2350 R2_GLOBALS._player.addMover(NULL);
2351
2352 R2_GLOBALS._player.disableControl(CURSOR_TALK);
2353 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
2354
2355 if (_object2->_mover)
2356 _object2->addMover(NULL);
2357 }
2358
2359
2360 switch (v) {
2361 case 0:
2362 _object1.animate(ANIM_MODE_2, NULL);
2363 break;
2364 case 1:
2365 ((StripManager *)_action)->_useless = 0;
2366
2367 _object1.setup(4031, 3, 1);
2368 _object1.animate(ANIM_MODE_5, this);
2369 break;
2370 default:
2371 signal();
2372 break;
2373 }
2374 }
2375
animateSpeaker()2376 void SpeakerSeeker3395::animateSpeaker() {
2377 Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
2378
2379 int v = _speakerMode;
2380
2381 if (!_object2) {
2382 if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
2383 _object2 = &R2_GLOBALS._player;
2384 else
2385 _object2 = &scene->_companion1;
2386
2387 _object2->hide();
2388 _object1.postInit();
2389 _object1.setPosition(_object2->_position);
2390 _object1._numFrames = 7;
2391 _object1._effect = EFFECT_SHADED;
2392 _object1.changeZoom(-1);
2393
2394 if (R2_GLOBALS._sceneManager._previousScene == 3385)
2395 R2_GLOBALS._player.setStrip(4);
2396 else
2397 R2_GLOBALS._player.setStrip(3);
2398
2399 if (R2_GLOBALS._player._mover)
2400 R2_GLOBALS._player.addMover(NULL);
2401
2402 R2_GLOBALS._player.disableControl(CURSOR_TALK);
2403 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
2404
2405 if (_object2->_mover)
2406 _object2->addMover(NULL);
2407 }
2408
2409 switch (v) {
2410 case 0:
2411 _object1.animate(ANIM_MODE_2, NULL);
2412 break;
2413 case 1:
2414 ((StripManager *)_action)->_useless = 0;
2415
2416 _object1.setup(4031, 3, 1);
2417 _object1.animate(ANIM_MODE_5, this);
2418 break;
2419 default:
2420 signal();
2421 break;
2422 }
2423 }
2424
animateSpeaker()2425 void SpeakerSeeker3400::animateSpeaker() {
2426 Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
2427
2428 int v = _speakerMode;
2429
2430 if (!_object2) {
2431 if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
2432 _object2 = &R2_GLOBALS._player;
2433 else
2434 _object2 = &scene->_companion1;
2435
2436 _object2->hide();
2437 _object1.postInit();
2438 _object1.setPosition(_object2->_position);
2439 _object1._numFrames = 7;
2440 _object1._effect = EFFECT_SHADED;
2441 _object1.changeZoom(-1);
2442 R2_GLOBALS._player.disableControl();
2443 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
2444
2445 if (_object2->_mover)
2446 _object2->addMover(NULL);
2447 }
2448
2449 switch (v) {
2450 case 0:
2451 _object1.animate(ANIM_MODE_2, NULL);
2452 break;
2453 case 1:
2454 ((StripManager *)_action)->_useless = 0;
2455
2456 _object1.setup(4031, 1, 1);
2457 _object1.animate(ANIM_MODE_5, this);
2458 break;
2459 case 2:
2460 ((StripManager *)_action)->_useless = 0;
2461
2462 _object1.setup(4031, 3, 1);
2463 _object1.animate(ANIM_MODE_5, this);
2464 break;
2465 case 3:
2466 ((StripManager *)_action)->_useless = 0;
2467
2468 _object1.setup(4030, 3, 1);
2469 _object1.animate(ANIM_MODE_5, this);
2470 break;
2471 case 4:
2472 ((StripManager *)_action)->_useless = 0;
2473
2474 _object1.setup(4031, 7, 1);
2475 _object1.animate(ANIM_MODE_5, this);
2476 break;
2477 case 5:
2478 ((StripManager *)_action)->_useless = 0;
2479
2480 _object1.setup(4033, 1, 1);
2481 _object1.animate(ANIM_MODE_5, this);
2482 break;
2483 default:
2484 signal();
2485 break;
2486 }
2487 }
2488
animateSpeaker()2489 void SpeakerSeeker3600::animateSpeaker() {
2490 Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
2491
2492 int v = _speakerMode;
2493
2494 if (!_object2) {
2495 if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
2496 _object2 = &R2_GLOBALS._player;
2497 else
2498 _object2 = &scene->_seeker;
2499
2500 _object2->hide();
2501 _object1.postInit();
2502 _object1.setPosition(_object2->_position);
2503 _object1._numFrames = 7;
2504 _object1._effect = EFFECT_SHADED;
2505 _object1.changeZoom(-1);
2506 R2_GLOBALS._player.disableControl();
2507 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
2508
2509 if (_object2->_mover)
2510 _object2->addMover(NULL);
2511
2512 _object1.setPosition(_object2->_position);
2513
2514 }
2515
2516 switch (v) {
2517 case 0:
2518 _object1.animate(ANIM_MODE_2, NULL);
2519 break;
2520 case 1:
2521 ((StripManager *)_action)->_useless = 0;
2522
2523 _object1.setup(4031, 5, 1);
2524 _object1.animate(ANIM_MODE_5, this);
2525 break;
2526 case 2:
2527 ((StripManager *)_action)->_useless = 0;
2528
2529 _object1.setup(4030, 1, 1);
2530 _object1.animate(ANIM_MODE_5, this);
2531 break;
2532 default:
2533 signal();
2534 break;
2535 }
2536 }
2537
setText(const Common::String & msg)2538 void SpeakerSeeker3700::setText(const Common::String &msg) {
2539 Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
2540
2541 if (_speakerMode == 1) {
2542 R2_GLOBALS._sound2.play(44);
2543 scene->_miranda.setup(30, 8, 1);
2544 } else {
2545 scene->_miranda.setup(30, 2, 1);
2546 }
2547
2548 VisualSpeaker::setText(msg);
2549 }
2550
animateSpeaker()2551 void SpeakerSeeker3700::animateSpeaker() {
2552 Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
2553
2554 int v = _speakerMode;
2555
2556 if (!_object2) {
2557 _object2 = &scene->_seeker;
2558 _object2->hide();
2559 _object1.postInit();
2560 _object1.setPosition(_object2->_position);
2561 _object1._numFrames = 7;
2562 R2_GLOBALS._player.disableControl();
2563 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
2564
2565 if (_object2->_mover)
2566 _object2->addMover(NULL);
2567 }
2568
2569 _object1.setPosition(_object2->_position);
2570
2571 switch (v) {
2572 case 0:
2573 _object1.animate(ANIM_MODE_2, NULL);
2574 break;
2575 case 1:
2576 ((StripManager *)_action)->_useless = 0;
2577
2578 R2_GLOBALS._sound2.stop();
2579 scene->_quinn.setup(10, 8, 1);
2580 scene->_seeker.setup(20, 7, 1);
2581 scene->_miranda.setup(30, 8, 1);
2582 _object1.setup(3701, 3, 1);
2583 _object1.animate(ANIM_MODE_5, this);
2584 break;
2585 case 2:
2586 ((StripManager *)_action)->_useless = 0;
2587
2588 scene->_quinn.setup(10, 2, 1);
2589 scene->_seeker.setup(20, 1, 1);
2590 scene->_miranda.setup(30, 1, 1);
2591 _object1.setup(4031, 1, 1);
2592 _object1.animate(ANIM_MODE_5, this);
2593 break;
2594 default:
2595 signal();
2596 break;
2597 }
2598 }
2599
2600 //----------------------------------------------------------------------------
2601 // Classes related to SEEKERL
2602 //----------------------------------------------------------------------------
2603
SpeakerSeekerL()2604 SpeakerSeekerL::SpeakerSeekerL(): SpeakerSeeker() {
2605 _speakerName = "SEEKERL";
2606 }
2607
2608 //----------------------------------------------------------------------------
2609 // Classes related to SOCKO
2610 //----------------------------------------------------------------------------
2611
SpeakerSocko3200()2612 SpeakerSocko3200::SpeakerSocko3200() {
2613 _speakerName = "Socko";
2614 _color1 = 10;
2615 _color2 = 0;
2616 _speakerMode = 0;
2617 _textWidth = 300;
2618 _hideObjects = false;
2619 _object2 = NULL;
2620 _displayMode = 1;
2621 _numFrames = 0;
2622 }
2623
animateSpeaker()2624 void SpeakerSocko3200::animateSpeaker() {
2625 int v = _speakerMode;
2626 Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
2627
2628 if (!_object2) {
2629 _object2 = &scene->_socko;
2630 _object2->hide();
2631 _object1.postInit();
2632 _object1.setPosition(_object2->_position);
2633
2634 if (_object2->_mover)
2635 _object2->addMover(NULL);
2636 }
2637
2638 if (v == 0) {
2639 _object1.animate(ANIM_MODE_2, NULL);
2640 } else {
2641 ((StripManager *)_action)->_useless = 0;
2642
2643 _object1.setup(4060, (_object2->_strip * 2) - 1, 1);
2644 _object1.animate(ANIM_MODE_5, this);
2645 }
2646 }
2647
2648 //----------------------------------------------------------------------------
2649 // Classes related to SOLDIER
2650 //----------------------------------------------------------------------------
2651
SpeakerSoldier(int color)2652 SpeakerSoldier::SpeakerSoldier(int color) {
2653 _speakerName = "SOLDIER";
2654 _color1 = color;
2655 _color2 = 0;
2656 _speakerMode = 0;
2657 _textWidth = 300;
2658 _hideObjects = false;
2659 _object2 = NULL;
2660 _displayMode = 1;
2661 _numFrames = 0;
2662 }
2663
animateSpeaker()2664 void SpeakerSoldier300::animateSpeaker() {
2665 int v = _speakerMode;
2666
2667 if (!_object2) {
2668 Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
2669 _object2 = &scene->_teal;
2670 _object2->hide();
2671
2672 _object1.postInit();
2673 _object1.setPosition(_object2->_position);
2674
2675 if (_object2->_mover)
2676 _object2->addMover(NULL);
2677 }
2678
2679 if (v == 0) {
2680 _object1.animate(ANIM_MODE_2, NULL);
2681 } else {
2682 ((StripManager *)_action)->_useless = 0;
2683
2684 _object1.setup(303, 3, 1);
2685 _object1.animate(ANIM_MODE_5, this);
2686 }
2687 }
2688
2689 //----------------------------------------------------------------------------
2690 // Classes related to TEAL
2691 //----------------------------------------------------------------------------
2692
SpeakerTeal()2693 SpeakerTeal::SpeakerTeal(): VisualSpeaker() {
2694 _speakerName = "TEAL";
2695 _color1 = 22;
2696 _color2 = 0;
2697 _speakerMode = 0;
2698 _textWidth = 300;
2699 _hideObjects = false;
2700 _object2 = NULL;
2701 _displayMode = 1;
2702 _numFrames = 0;
2703 }
2704
SpeakerTealMode7()2705 SpeakerTealMode7::SpeakerTealMode7(): SpeakerTeal() {
2706 _displayMode = 7;
2707 }
2708
animateSpeaker()2709 void SpeakerTeal180::animateSpeaker() {
2710 int v = _speakerMode;
2711
2712 if (!_object2) {
2713 Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene;
2714 _object2 = &scene->_teal;
2715 _object2->hide();
2716
2717 _object1.postInit();
2718 _object1.setPosition(_object2->_position);
2719
2720 if (_object2->_mover)
2721 _object2->addMover(NULL);
2722 }
2723
2724 switch (v) {
2725 case 0:
2726 _object1.animate(ANIM_MODE_2, NULL);
2727 break;
2728 case 1:
2729 ((StripManager *)_action)->_useless = 0;
2730
2731 _object1.setup(75, 5, 1);
2732 _object1.animate(ANIM_MODE_5, this);
2733 break;
2734 case 2:
2735 ((StripManager *)_action)->_useless = 0;
2736
2737 _object1.setup(77, 1, 1);
2738 _object1.animate(ANIM_MODE_5, this);
2739 break;
2740 default:
2741 signal();
2742 break;
2743 }
2744 }
2745
animateSpeaker()2746 void SpeakerTeal300::animateSpeaker() {
2747 int v = _speakerMode;
2748
2749 if (!_object2) {
2750 Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
2751 _object2 = &scene->_teal;
2752 _object2->hide();
2753
2754 _object1.postInit();
2755 _object1.setPosition(_object2->_position);
2756
2757 if (_object2->_mover)
2758 _object2->addMover(NULL);
2759 }
2760
2761 if (v == 0) {
2762 _object1.animate(ANIM_MODE_2, NULL);
2763 } else {
2764 ((StripManager *)_action)->_useless = 0;
2765
2766 _object1.setup(303, 1, 1);
2767 _object1.animate(ANIM_MODE_5, this);
2768 }
2769 }
2770
animateSpeaker()2771 void SpeakerTeal1625::animateSpeaker() {
2772 int v = _speakerMode;
2773
2774 if (!_object2) {
2775 Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene;
2776 _object2 = &scene->_tealHead;
2777 _object2->hide();
2778
2779 _object1.postInit();
2780 _object1.setPosition(Common::Point(68, 68));
2781
2782 if (_object2->_mover)
2783 _object2->addMover(NULL);
2784 }
2785
2786 if (v == 0) {
2787 _object1.animate(ANIM_MODE_2, NULL);
2788 } else {
2789 ((StripManager *)_action)->_useless = 0;
2790
2791 _object1.setup(1627, 1, 1);
2792 _object1.animate(ANIM_MODE_5, this);
2793 }
2794 }
2795
animateSpeaker()2796 void SpeakerTeal3240::animateSpeaker() {
2797 int v = _speakerMode;
2798 Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene;
2799
2800 if (!_object2) {
2801 _object2 = &scene->_teal;
2802 _object2->hide();
2803 _object1.postInit();
2804 _object1.setPosition(_object2->_position);
2805
2806 if (_object2->_mover)
2807 _object2->addMover(NULL);
2808 }
2809
2810 if (v == 0) {
2811 _object1.animate(ANIM_MODE_2, NULL);
2812 } else {
2813 ((StripManager *)_action)->_useless = 0;
2814
2815 _object1.setup(4070, (_object2->_strip * 2) - 1, 1);
2816 _object1.animate(ANIM_MODE_5, this);
2817 }
2818 }
2819
animateSpeaker()2820 void SpeakerTeal3400::animateSpeaker() {
2821 Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
2822
2823 int v = _speakerMode;
2824
2825 if (!_object2) {
2826 _object2 = &scene->_teal;
2827 _object2->hide();
2828 _object1.postInit();
2829 _object1._numFrames = 7;
2830 _object1._effect = EFFECT_SHADED;
2831 _object1.changeZoom(-1);
2832 R2_GLOBALS._player.disableControl();
2833 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
2834
2835 if (_object2->_mover)
2836 _object2->addMover(NULL);
2837 }
2838 _object1.setPosition(_object2->_position);
2839 _object1.show();
2840
2841 if (scene ->_sceneMode == 3305) {
2842 R2_GLOBALS._player.setStrip(6);
2843 scene->_companion1.setStrip(6);
2844 scene->_companion2.setStrip(6);
2845 }
2846
2847 switch (v) {
2848 case 0:
2849 _object1.animate(ANIM_MODE_2, NULL);
2850 break;
2851 case 1:
2852 ((StripManager *)_action)->_useless = 0;
2853
2854 _object1.setup(4107, 5, 1);
2855 _object1.animate(ANIM_MODE_5, this);
2856 break;
2857 case 2:
2858 ((StripManager *)_action)->_useless = 0;
2859
2860 _object1.setup(4107, 1, 1);
2861 _object1.animate(ANIM_MODE_5, this);
2862 break;
2863 case 3:
2864 ((StripManager *)_action)->_useless = 0;
2865
2866 _object1.setup(4107, 7, 1);
2867 _object1.animate(ANIM_MODE_5, this);
2868 break;
2869 case 4:
2870 ((StripManager *)_action)->_useless = 0;
2871
2872 _object1.setup(4107, 3, 1);
2873 _object1.animate(ANIM_MODE_5, this);
2874 break;
2875 default:
2876 signal();
2877 break;
2878 }
2879 }
2880
animateSpeaker()2881 void SpeakerTeal3600::animateSpeaker() {
2882 Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
2883
2884 int v = _speakerMode;
2885
2886 if (!_object2) {
2887 _object2 = &scene->_teal;
2888 _object2->hide();
2889 _object1.postInit();
2890 _object1.setPosition(_object2->_position);
2891 _object1._numFrames = 7;
2892 _object1._effect = EFFECT_SHADED;
2893 _object1.changeZoom(-1);
2894 R2_GLOBALS._player.disableControl();
2895 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
2896
2897 if (_object2->_mover)
2898 _object2->addMover(NULL);
2899 }
2900 _object1.setPosition(_object2->_position);
2901
2902 if (scene ->_sceneMode == 3323) {
2903 _object1.hide();
2904 _object2->show();
2905 }
2906
2907 switch (v) {
2908 case 0:
2909 _object1.animate(ANIM_MODE_2, NULL);
2910 break;
2911 case 1:
2912 ((StripManager *)_action)->_useless = 0;
2913
2914 _object1.setup(4107, 5, 1);
2915 _object1.animate(ANIM_MODE_5, this);
2916 break;
2917 case 2:
2918 ((StripManager *)_action)->_useless = 0;
2919
2920 _object1.setup(4107, 1, 1);
2921 _object1.animate(ANIM_MODE_5, this);
2922 break;
2923 case 3:
2924 ((StripManager *)_action)->_useless = 0;
2925
2926 _object1.setup(4107, 7, 1);
2927 _object1.animate(ANIM_MODE_5, this);
2928 break;
2929 case 4:
2930 ((StripManager *)_action)->_useless = 0;
2931
2932 _object1.setup(4107, 3, 1);
2933 _object1.animate(ANIM_MODE_5, this);
2934 break;
2935 default:
2936 signal();
2937 break;
2938 }
2939 }
2940
2941 //----------------------------------------------------------------------------
2942 // Classes related to TOMKO
2943 //----------------------------------------------------------------------------
2944
SpeakerTomko3245()2945 SpeakerTomko3245::SpeakerTomko3245() {
2946 _speakerName = "Tomko";
2947 _color1 = 10;
2948 _color2 = 0;
2949 _speakerMode = 0;
2950 _textWidth = 300;
2951 _hideObjects = false;
2952 _object2 = NULL;
2953 _displayMode = 1;
2954 _numFrames = 0;
2955 }
2956
animateSpeaker()2957 void SpeakerTomko3245::animateSpeaker() {
2958 int v = _speakerMode;
2959 Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene;
2960
2961 if (!_object2) {
2962 _object2 = &scene->_tomko;
2963 _object2->hide();
2964 _object1.postInit();
2965 _object1.setPosition(_object2->_position);
2966
2967 if (_object2->_mover)
2968 _object2->addMover(NULL);
2969 }
2970
2971 if (v == 0) {
2972 _object1.animate(ANIM_MODE_2, NULL);
2973 } else {
2974 ((StripManager *)_action)->_useless = 0;
2975
2976 switch (_object2->_visage) {
2977 case 3100:
2978 _object1.setup(4105, (_object2->_strip * 2) - 1, 1);
2979 break;
2980 case 3101:
2981 _object1.setup(4108, (_object2->_strip * 2) - 1, 1);
2982 break;
2983 case 3102:
2984 _object1.setup(4109, (_object2->_strip * 2) - 1, 1);
2985 break;
2986 default:
2987 break;
2988 }
2989
2990 _object1.animate(ANIM_MODE_5, this);
2991 }
2992 }
2993
2994 //----------------------------------------------------------------------------
2995 // Classes related to WEBBSTER
2996 //----------------------------------------------------------------------------
2997
SpeakerWebbster(int color)2998 SpeakerWebbster::SpeakerWebbster(int color) {
2999 _speakerName = "WEBBSTER";
3000 _color1 = color;
3001 _color2 = 0;
3002 _speakerMode = 0;
3003 _textWidth = 300;
3004 _hideObjects = false;
3005 _object2 = NULL;
3006 _displayMode = 1;
3007 _numFrames = 0;
3008 }
3009
animateSpeaker()3010 void SpeakerWebbster180::animateSpeaker() {
3011 Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene;
3012
3013 int v = _speakerMode;
3014
3015 if (!_object2) {
3016 _object2 = &scene->_webbster;
3017 _object2->hide();
3018 _object1.postInit();
3019 _object1.setPosition(_object2->_position);
3020 _object1._numFrames = 6;
3021
3022 if (_object2->_mover)
3023 _object2->addMover(NULL);
3024 }
3025
3026 switch (v) {
3027 case 0:
3028 _object1.animate(ANIM_MODE_2, NULL);
3029 break;
3030 case 1:
3031 ((StripManager *)_action)->_useless = 0;
3032
3033 _object1.setup(75, 7, 1);
3034 _object1.animate(ANIM_MODE_5, this);
3035 break;
3036 case 2:
3037 ((StripManager *)_action)->_useless = 0;
3038
3039 _object1.setup(76, 4, 1);
3040 _object1.animate(ANIM_MODE_5, this);
3041 break;
3042 case 3:
3043 ((StripManager *)_action)->_useless = 0;
3044
3045 _object1.setup(76, 6, 1);
3046 _object1.animate(ANIM_MODE_5, this);
3047 break;
3048 default:
3049 signal();
3050 break;
3051 }
3052 }
3053
animateSpeaker()3054 void SpeakerWebbster3240::animateSpeaker() {
3055 int v = _speakerMode;
3056 Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene;
3057
3058 if (!_object2) {
3059 _object2 = &scene->_webbster;
3060 _object2->hide();
3061 _object1.postInit();
3062 _object1.setPosition(_object2->_position);
3063
3064 if (_object2->_mover)
3065 _object2->addMover(NULL);
3066 }
3067
3068 if (v == 0) {
3069 _object1.animate(ANIM_MODE_2, NULL);
3070 } else {
3071 ((StripManager *)_action)->_useless = 0;
3072
3073 _object1.setup(4110, 5, 1);
3074 _object1.animate(ANIM_MODE_5, this);
3075 }
3076 }
3077
animateSpeaker()3078 void SpeakerWebbster3375::animateSpeaker() {
3079 Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
3080
3081 int v = _speakerMode;
3082
3083 if (!_object2) {
3084 _object2 = &scene->_webbster;
3085 _object2->hide();
3086 _object1.postInit();
3087 _object1.setPosition(_object2->_position);
3088 _object1._numFrames = 7;
3089 _object1._effect = EFFECT_SHADED;
3090 _object1.changeZoom(-1);
3091
3092 if (scene->_companion1._position.y != 163)
3093 R2_GLOBALS._player.setStrip(8);
3094 else
3095 R2_GLOBALS._player.setStrip(2);
3096
3097 if (R2_GLOBALS._player._mover)
3098 R2_GLOBALS._player.addMover(NULL);
3099
3100 R2_GLOBALS._player.disableControl();
3101 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
3102
3103 if (_object2->_mover)
3104 _object2->addMover(NULL);
3105 }
3106
3107 switch (v) {
3108 case 0:
3109 _object1.animate(ANIM_MODE_2, NULL);
3110 break;
3111 case 1:
3112 ((StripManager *)_action)->_useless = 0;
3113
3114 _object1.setup(4110, 5, 1);
3115 _object1.animate(ANIM_MODE_5, this);
3116 break;
3117 default:
3118 signal();
3119 break;
3120 }
3121 }
3122
animateSpeaker()3123 void SpeakerWebbster3385::animateSpeaker() {
3124 Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
3125
3126 int v = _speakerMode;
3127
3128 if (!_object2) {
3129 _object2 = &scene->_webbster;
3130 _object2->hide();
3131 _object1.postInit();
3132 _object1.setPosition(_object2->_position);
3133 _object1._numFrames = 7;
3134 _object1._effect = EFFECT_SHADED;
3135 _object1.changeZoom(-1);
3136
3137 if (R2_GLOBALS._sceneManager._previousScene == 3375)
3138 R2_GLOBALS._player.setStrip(4);
3139 else
3140 R2_GLOBALS._player.setStrip(3);
3141
3142 if (R2_GLOBALS._player._mover)
3143 R2_GLOBALS._player.addMover(NULL);
3144
3145 R2_GLOBALS._player.disableControl(CURSOR_TALK);
3146 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
3147
3148 if (_object2->_mover)
3149 _object2->addMover(NULL);
3150 }
3151
3152 switch (v) {
3153 case 0:
3154 _object1.animate(ANIM_MODE_2, NULL);
3155 break;
3156 case 1:
3157 ((StripManager *)_action)->_useless = 0;
3158
3159 _object1.setup(4110, 5, 1);
3160 _object1.animate(ANIM_MODE_5, this);
3161 break;
3162 default:
3163 signal();
3164 break;
3165 }
3166 }
3167
animateSpeaker()3168 void SpeakerWebbster3395::animateSpeaker() {
3169 Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
3170
3171 int v = _speakerMode;
3172
3173 if (!_object2) {
3174 _object2 = &scene->_webbster;
3175 _object2->hide();
3176 _object1.postInit();
3177 _object1.setPosition(_object2->_position);
3178 _object1._numFrames = 7;
3179 _object1._effect = EFFECT_SHADED;
3180 _object1.changeZoom(-1);
3181
3182 if (R2_GLOBALS._sceneManager._previousScene == 3385)
3183 R2_GLOBALS._player.setStrip(4);
3184 else
3185 R2_GLOBALS._player.setStrip(3);
3186
3187 if (R2_GLOBALS._player._mover)
3188 R2_GLOBALS._player.addMover(NULL);
3189
3190 R2_GLOBALS._player.disableControl(CURSOR_TALK);
3191 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
3192
3193 if (_object2->_mover)
3194 _object2->addMover(NULL);
3195 }
3196
3197 switch (v) {
3198 case 0:
3199 _object1.animate(ANIM_MODE_2, NULL);
3200 break;
3201 case 1:
3202 ((StripManager *)_action)->_useless = 0;
3203
3204 _object1.setup(4110, 5, 1);
3205 _object1.animate(ANIM_MODE_5, this);
3206 break;
3207 default:
3208 signal();
3209 break;
3210 }
3211 }
3212
animateSpeaker()3213 void SpeakerWebbster3400::animateSpeaker() {
3214 Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
3215
3216 int v = _speakerMode;
3217
3218 if (!_object2) {
3219 _object2 = &scene->_webbster;
3220 _object2->hide();
3221 _object1.postInit();
3222 _object1.setPosition(_object2->_position);
3223 _object1._numFrames = 7;
3224 _object1._effect = EFFECT_SHADED;
3225 _object1.changeZoom(-1);
3226 R2_GLOBALS._player.disableControl();
3227 R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
3228
3229 if (_object2->_mover)
3230 _object2->addMover(NULL);
3231 }
3232
3233 switch (v) {
3234 case 0:
3235 _object1.animate(ANIM_MODE_2, NULL);
3236 break;
3237 case 1:
3238 ((StripManager *)_action)->_useless = 0;
3239
3240 _object1.setup(4110, 5, 1);
3241 _object1.animate(ANIM_MODE_5, this);
3242 break;
3243 case 2:
3244 ((StripManager *)_action)->_useless = 0;
3245
3246 _object1.setup(4110, 7, 1);
3247 _object1.animate(ANIM_MODE_5, this);
3248 break;
3249 case 3:
3250 ((StripManager *)_action)->_useless = 0;
3251
3252 _object1.setup(4110, 3, 1);
3253 _object1.animate(ANIM_MODE_5, this);
3254 break;
3255 default:
3256 signal();
3257 break;
3258 }
3259 }
3260
3261 //----------------------------------------------------------------------------
3262
SpeakerDutyOfficer180()3263 SpeakerDutyOfficer180::SpeakerDutyOfficer180(): VisualSpeaker() {
3264 _speakerName = "DUTYOFFICER";
3265 _color1 = 5;
3266 _color2 = 0;
3267 _speakerMode = 0;
3268 _textWidth = 300;
3269 _hideObjects = false;
3270 _object2 = NULL;
3271 _displayMode = 1;
3272 _numFrames = 0;
3273 }
3274
animateSpeaker()3275 void SpeakerDutyOfficer180::animateSpeaker() {
3276 Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene;
3277
3278 int v = _speakerMode;
3279
3280 if (!_object2) {
3281 _object2 = &scene->_dutyOfficer;
3282 _object2->hide();
3283 _object1.postInit();
3284 _object1.setPosition(_object2->_position);
3285
3286 if (_object2->_mover)
3287 _object2->addMover(NULL);
3288 }
3289
3290 switch (v) {
3291 case 0:
3292 _object1.animate(ANIM_MODE_2, NULL);
3293 break;
3294 case 1:
3295 _action->_action = NULL;
3296 _object1.setup(76, 2, 1);
3297 _object1.animate(ANIM_MODE_5, this);
3298 break;
3299 default:
3300 signal();
3301 break;
3302 }
3303 }
3304
3305 } // End of namespace Ringworld2
3306 } // End of namespace TsAGE
3307