diff options
Diffstat (limited to 'engines/tsage/ringworld2/ringworld2_speakers.cpp')
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_speakers.cpp | 977 |
1 files changed, 612 insertions, 365 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index da1449efdf..675511ac10 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -36,40 +36,131 @@ namespace Ringworld2 { VisualSpeaker::VisualSpeaker(): Speaker() { _delayAmount = 0; + _voiceDelayAmount = 0; _frameNumber = R2_GLOBALS._events.getFrameNumber(); _color1 = 8; _color2 = 0; _displayMode = 0; - _fieldF6 = 0; + _speakerMode = 0; + + _object2 = nullptr; + _fieldF8 = 0; + _soundId = 0; + _removeObject = false; + _numFrames = 0; + _voiceFrameNumber = 0; } void VisualSpeaker::remove() { + _numFrames = 0; + _delayAmount = 0; + R2_GLOBALS._playStream.stop(); + if (_object2) { if (_fieldF8) { _fieldF8 = 0; _object1.setStrip(_object1._strip - 1); _object1.setFrame(_object1.getFrameCount()); - _object1.animate(ANIM_MODE_6, (_fieldF6 == 0xff) ? this : NULL); + _object1.animate(ANIM_MODE_6, (_speakerMode == 0xff) ? this : NULL); } else { - _object1.animate(ANIM_MODE_6, (_fieldF6 == 0xff) ? this : NULL); + _object1.animate(ANIM_MODE_6, (_speakerMode == 0xff) ? this : NULL); } } Speaker::remove(); } +void VisualSpeaker::signal() { + // TODO: Handle _field18 if used in Action. It looks only used in the original in remove() + // _action->_field18 = 1; + if (_speakerMode == 0xff) + stopSpeaking(); + + _speakerMode = 0; + if (_numFrames) { + if (_object2) { + _object1.setStrip(_object1._strip + 1); + _object1.animate(ANIM_MODE_2, NULL); + _fieldF8 = 1; + } + + if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId) + _sceneText.show(); + + if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && _soundId) { + setVoiceFrame(1); + } + } else if (_action && _object2) { + _action->setDelay(1); + _sceneText.remove(); + + R2_GLOBALS._playStream.stop(); + } +} + +void VisualSpeaker::dispatch() { + uint32 frameNumber = R2_GLOBALS._events.getFrameNumber(); + assert(_action); + + // Delay check for character animation + if (_delayAmount) { + if (frameNumber >= _frameNumber) { + _delayAmount = _delayAmount - (_frameNumber - frameNumber); + _frameNumber = frameNumber; + + if (_delayAmount <= 0) { + _delayAmount = 0; + _object1.animate(ANIM_MODE_NONE, NULL); + _object1.setFrame(1); + } + } + } + + // Delay check for voice + if (_voiceDelayAmount) { + if (frameNumber >= _voiceFrameNumber) { + _voiceDelayAmount = _voiceDelayAmount - (frameNumber - _voiceFrameNumber); + _voiceFrameNumber = frameNumber; + + if (_voiceDelayAmount <= 0) { + _voiceDelayAmount = 0; + if (R2_GLOBALS._playStream.play(_soundId, NULL)) { + _numFrames = 2; + _soundId = 0; + } else { + _sceneText.show(); + } + } + } + } + + if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && (_numFrames == 2) && + !R2_GLOBALS._playStream.isPlaying()) { + _numFrames = 0; + _object1.animate(ANIM_MODE_NONE); + _object1.setFrame(1); + + if (!(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { + // Don't bother waiting for a mouse click to start the next speech segment + _action->setDelay(1); + } + } +} + void VisualSpeaker::synchronize(Serializer &s) { Speaker::synchronize(s); SYNC_POINTER(_object2); - s.syncAsSint16LE(_fieldF6); + s.syncAsSint16LE(_speakerMode); s.syncAsSint16LE(_fieldF8); s.syncAsSint16LE(_displayMode); s.syncAsSint16LE(_soundId); - s.syncAsSint16LE(_delayAmount); s.syncAsByte(_removeObject); - s.syncAsSint32LE(_frameNumber); s.syncAsSint16LE(_numFrames); + s.syncAsSint16LE(_delayAmount); + s.syncAsUint32LE(_frameNumber); + s.syncAsSint16LE(_voiceDelayAmount); + s.syncAsUint32LE(_voiceFrameNumber); } void VisualSpeaker::setText(const Common::String &msg) { @@ -127,13 +218,12 @@ void VisualSpeaker::setText(const Common::String &msg) { _sceneText._textMode = _textMode; _sceneText.setup(s); - //_sceneText.clone(); - _sceneText.setPosition(_textPos); _sceneText.fixPriority(256); // If subtitles are turned off, don't show the text - if (!(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { + if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && + !(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { _sceneText.hide(); } @@ -159,25 +249,29 @@ void VisualSpeaker::setText(const Common::String &msg) { if (s.empty()) _numFrames = 0; - - if (_fieldF6) { + if (_speakerMode) { if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId) _sceneText.hide(); } else { if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && _soundId) { - if (!R2_GLOBALS._playStream.play(_soundId, NULL)) + if (!R2_GLOBALS._playStream.play(_soundId, NULL)) { + // Couldn't play voice, so fall back on showing text _sceneText.show(); + } else { + _numFrames = 2; + _soundId = 0; + } } } } -void VisualSpeaker::proc16() { +void VisualSpeaker::stopSpeaking() { R2_GLOBALS._playStream.stop(); - _fieldF6 = 0; + _speakerMode = 0; _object1.remove(); - assert(_object2); - _object2->show(); + if (_object2) + _object2->show(); _object2 = NULL; _fieldF8 = 0; } @@ -187,6 +281,11 @@ void VisualSpeaker::setFrame(int numFrames) { _frameNumber = R2_GLOBALS._events.getFrameNumber(); } +void VisualSpeaker::setVoiceFrame(int numFrames) { + _voiceDelayAmount = numFrames; + _voiceFrameNumber = R2_GLOBALS._events.getFrameNumber(); +} + void VisualSpeaker::setDelay(int delay) { _delayAmount = delay; _frameNumber = R2_GLOBALS._events.getFrameNumber(); @@ -211,7 +310,7 @@ SpeakerCaptain3210::SpeakerCaptain3210() { _speakerName = "Captain"; _color1 = 5; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -219,12 +318,12 @@ SpeakerCaptain3210::SpeakerCaptain3210() { _numFrames = 0; } -void SpeakerCaptain3210::proc15() { - int v = _fieldF6; +void SpeakerCaptain3210::animateSpeaker() { + int v = _speakerMode; Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_captain; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -250,7 +349,7 @@ SpeakerCaretaker2450::SpeakerCaretaker2450() { _speakerName = "CARETAKER"; _color1 = 43; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -266,7 +365,7 @@ SpeakerChief1100::SpeakerChief1100() { _speakerName = "CHIEF"; _color1 = 8; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -274,12 +373,12 @@ SpeakerChief1100::SpeakerChief1100() { _numFrames = 0; } -void SpeakerChief1100::proc15() { - int v = _fieldF6; +void SpeakerChief1100::animateSpeaker() { + int v = _speakerMode; Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor18; + _object2 = &scene->_chief; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -324,7 +423,7 @@ SpeakerGuard::SpeakerGuard() { _speakerName = "GUARD"; _color1 = 5; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -332,12 +431,12 @@ SpeakerGuard::SpeakerGuard() { _numFrames = 0; } -void SpeakerGuard2800::proc15() { - int v = _fieldF6; - Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; +void SpeakerGuard2800::animateSpeaker() { + int v = _speakerMode; + Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_guard; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -364,7 +463,7 @@ SpeakerJocko::SpeakerJocko() { _speakerName = "Jocko"; _color1 = 45; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -372,12 +471,12 @@ SpeakerJocko::SpeakerJocko() { _numFrames = 0; } -void SpeakerJocko3200::proc15() { - int v = _fieldF6; +void SpeakerJocko3200::animateSpeaker() { + int v = _speakerMode; Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_jocko; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -395,12 +494,12 @@ void SpeakerJocko3200::proc15() { } } -void SpeakerJocko3220::proc15() { - int v = _fieldF6; +void SpeakerJocko3220::animateSpeaker() { + int v = _speakerMode; Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_jocko; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -418,12 +517,12 @@ void SpeakerJocko3220::proc15() { } } -void SpeakerJocko3230::proc15() { - int v = _fieldF6; +void SpeakerJocko3230::animateSpeaker() { + int v = _speakerMode; Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_jocko; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -449,7 +548,7 @@ SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() { _speakerName = "MIRANDA"; _color1 = 154; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -457,11 +556,11 @@ SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() { _numFrames = 0; } -void SpeakerMiranda300::proc15() { - int v = _fieldF6; +void SpeakerMiranda300::animateSpeaker() { + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) { + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) { _object2 = &R2_GLOBALS._player; } else { Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; @@ -497,12 +596,12 @@ void SpeakerMiranda300::proc15() { } } -void SpeakerMiranda1625::proc15() { - int v = _fieldF6; +void SpeakerMiranda1625::animateSpeaker() { + int v = _speakerMode; if (!_object2) { Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor3; + _object2 = &scene->_mirandaMouth; _object2->hide(); _object1.postInit(); _object1.setPosition(Common::Point(196, 65)); @@ -520,8 +619,8 @@ void SpeakerMiranda1625::proc15() { } } -void SpeakerMiranda3255::proc15() { - int v = _fieldF6; +void SpeakerMiranda3255::animateSpeaker() { + int v = _speakerMode; if (!_object2) { _object2 = &R2_GLOBALS._player; @@ -541,25 +640,25 @@ void SpeakerMiranda3255::proc15() { } } -void SpeakerMiranda3375::proc15() { +void SpeakerMiranda3375::animateSpeaker() { Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor2; + _object2 = &scene->_companion2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); - if (scene->_actor1._position.y != 163) + if (scene->_companion1._position.y != 163) R2_GLOBALS._player.setStrip(8); else R2_GLOBALS._player.setStrip(2); @@ -591,22 +690,22 @@ void SpeakerMiranda3375::proc15() { } } -void SpeakerMiranda3385::proc15() { +void SpeakerMiranda3385::animateSpeaker() { Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor2; + _object2 = &scene->_companion2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -640,22 +739,22 @@ void SpeakerMiranda3385::proc15() { } } -void SpeakerMiranda3395::proc15() { +void SpeakerMiranda3395::animateSpeaker() { Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor2; + _object2 = &scene->_companion2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -690,22 +789,22 @@ void SpeakerMiranda3395::proc15() { } } -void SpeakerMiranda3400::proc15() { +void SpeakerMiranda3400::animateSpeaker() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor2; + _object2 = &scene->_companion2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -721,12 +820,12 @@ void SpeakerMiranda3400::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4051, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4050, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -734,22 +833,22 @@ void SpeakerMiranda3400::proc15() { } } -void SpeakerMiranda3600::proc15() { +void SpeakerMiranda3600::animateSpeaker() { Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor12; + _object2 = &scene->_miranda; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -780,13 +879,13 @@ void SpeakerMiranda3600::proc15() { } } -void SpeakerMiranda3700::proc15() { +void SpeakerMiranda3700::animateSpeaker() { Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor3; + _object2 = &scene->_miranda; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -806,25 +905,25 @@ void SpeakerMiranda3700::proc15() { break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor1.setup(10, 6, 1); - scene->_actor2.setup(20, 5, 1); + scene->_quinn.setup(10, 6, 1); + scene->_seeker.setup(20, 5, 1); _object2->setup(30, 1, 1); - scene->_actor4.setup(40, 1, 1); + scene->_webbster.setup(40, 1, 1); _object1.setup(4050, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor3.setup(30, 8, 1); + scene->_miranda.setup(30, 8, 1); _object1.setup(4052, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 3: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor2.setup(20, 1, 1); - scene->_actor3.setup(30, 1, 1); + scene->_seeker.setup(20, 1, 1); + scene->_miranda.setup(30, 1, 1); _object1.setup(4051, 7, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -840,7 +939,7 @@ SpeakerNej::SpeakerNej() { _speakerName = "NEJ"; _color1 = 171; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -848,12 +947,12 @@ SpeakerNej::SpeakerNej() { _numFrames = 0; } -void SpeakerNej2700::proc15() { - int v = _fieldF6; +void SpeakerNej2700::animateSpeaker() { + int v = _speakerMode; Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_nej; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -883,12 +982,12 @@ void SpeakerNej2700::proc15() { } } -void SpeakerNej2750::proc15() { - int v = _fieldF6; +void SpeakerNej2750::animateSpeaker() { + int v = _speakerMode; Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_nej; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -915,12 +1014,12 @@ void SpeakerNej2750::proc15() { } } -void SpeakerNej2800::proc15() { - int v = _fieldF6; - Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; +void SpeakerNej2800::animateSpeaker() { + int v = _speakerMode; + Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_nej; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -948,7 +1047,7 @@ SpeakerPharisha::SpeakerPharisha(): VisualSpeaker() { _speakerName = "PHARISHA"; _color1 = 151; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -956,12 +1055,12 @@ SpeakerPharisha::SpeakerPharisha(): VisualSpeaker() { _numFrames = 0; } -void SpeakerPharisha2435::proc15() { - int v = _fieldF6; +void SpeakerPharisha2435::animateSpeaker() { + int v = _speakerMode; Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_astor; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -984,7 +1083,7 @@ SpeakerPrivate3210::SpeakerPrivate3210() { _speakerName = "Private"; _color1 = 45; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -992,12 +1091,12 @@ SpeakerPrivate3210::SpeakerPrivate3210() { _numFrames = 0; } -void SpeakerPrivate3210::proc15() { - int v = _fieldF6; +void SpeakerPrivate3210::animateSpeaker() { + int v = _speakerMode; Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_private; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1023,7 +1122,7 @@ SpeakerProtector3600::SpeakerProtector3600() { _speakerName = "Protector"; _color1 = 170; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -1031,17 +1130,17 @@ SpeakerProtector3600::SpeakerProtector3600() { _numFrames = 0; } -void SpeakerProtector3600::proc15() { - int v = _fieldF6; +void SpeakerProtector3600::animateSpeaker() { + int v = _speakerMode; Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor13; + _object2 = &scene->_protector; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); @@ -1084,7 +1183,7 @@ SpeakerQuinn::SpeakerQuinn(): VisualSpeaker() { _speakerName = "QUINN"; _color1 = 60; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -1092,13 +1191,14 @@ SpeakerQuinn::SpeakerQuinn(): VisualSpeaker() { _numFrames = 0; } -void SpeakerQuinn300::proc15() { - int v = _fieldF6; +void SpeakerQuinn300::animateSpeaker() { + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 300); Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_quinn; } @@ -1106,9 +1206,6 @@ void SpeakerQuinn300::proc15() { _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); } if (v == 0) { @@ -1133,24 +1230,72 @@ void SpeakerQuinn300::proc15() { case 308: _object1.setup(308, 5, 1); break; + default: + break; + } + + _object1.animate(ANIM_MODE_5, this); + } +} + +void SpeakerQuinn500::animateSpeaker() { + int v = _speakerMode; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _object2 = &R2_GLOBALS._player; + } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 500); + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_seeker; + } + + _object2->hide(); + + _object1.postInit(); + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + + switch (_object2->_visage) { + case 10: + _object1.setup(4021, (v == 1) ? 5 : 7, 1); + break; + + case 1500: + _object1.setup(4021, (v == 1) ? 1 : 3, 1); + break; + + default: + break; } _object1.animate(ANIM_MODE_5, this); } } -void SpeakerQuinn1100::proc15() { - int v = _fieldF6; +void SpeakerQuinn1100::animateSpeaker() { + int v = _speakerMode; if (!_object2) { if (v == 0) return; - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1100); Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor16; + _object2 = &scene->_seeker; } _object2->hide(); @@ -1187,15 +1332,16 @@ void SpeakerQuinn1100::proc15() { } } -void SpeakerQuinn2435::proc15() { - int v = _fieldF6; +void SpeakerQuinn2435::animateSpeaker() { + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -1213,15 +1359,16 @@ void SpeakerQuinn2435::proc15() { } } -void SpeakerQuinn2450::proc15() { - int v = _fieldF6; +void SpeakerQuinn2450::animateSpeaker() { + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -1241,8 +1388,8 @@ void SpeakerQuinn2450::proc15() { } } -void SpeakerQuinn2700::proc15() { - int v = _fieldF6; +void SpeakerQuinn2700::animateSpeaker() { + int v = _speakerMode; if (!_object2) { _object2 = &R2_GLOBALS._player; @@ -1272,8 +1419,8 @@ void SpeakerQuinn2700::proc15() { } } -void SpeakerQuinn2750::proc15() { - int v = _fieldF6; +void SpeakerQuinn2750::animateSpeaker() { + int v = _speakerMode; if (!_object2) { _object2 = &R2_GLOBALS._player; @@ -1294,7 +1441,7 @@ void SpeakerQuinn2750::proc15() { _object1.setup(4022, 5, 1); break; case 2752: - _object1.setup(2752, 1, 1); + _object1.setup(2752, 3, 1); break; default: break; @@ -1303,8 +1450,8 @@ void SpeakerQuinn2750::proc15() { } } -void SpeakerQuinn2800::proc15() { - int v = _fieldF6; +void SpeakerQuinn2800::animateSpeaker() { + int v = _speakerMode; if (!_object2) { _object2 = &R2_GLOBALS._player; @@ -1342,13 +1489,13 @@ void SpeakerQuinn2800::proc15() { } } -void SpeakerQuinn3255::proc15() { +void SpeakerQuinn3255::animateSpeaker() { Scene3255 *scene = (Scene3255 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor4; + _object2 = &scene->_quinn; _object2->hide(); _object1.postInit(); _object1._effect = _object2->_effect; @@ -1365,27 +1512,27 @@ void SpeakerQuinn3255::proc15() { } } -void SpeakerQuinn3375::proc15() { +void SpeakerQuinn3375::animateSpeaker() { Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) - _object2 = &scene->_actor1; + else if (R2_GLOBALS._player._characterIndex == R2_SEEKER) + _object2 = &scene->_companion1; else - _object2 = &scene->_actor2; + _object2 = &scene->_companion2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); - if (scene->_actor1._position.y != 163) + if (scene->_companion1._position.y != 163) R2_GLOBALS._player.setStrip(8); else R2_GLOBALS._player.setStrip(2); @@ -1416,24 +1563,24 @@ void SpeakerQuinn3375::proc15() { } } -void SpeakerQuinn3385::proc15() { +void SpeakerQuinn3385::animateSpeaker() { Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) - _object2 = &scene->_actor1; + else if (R2_GLOBALS._player._characterIndex == R2_SEEKER) + _object2 = &scene->_companion1; else - _object2 = &scene->_actor2; + _object2 = &scene->_companion2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -1458,7 +1605,7 @@ void SpeakerQuinn3385::proc15() { break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _object1.setup(4010, 3, 1); else _object1.setup(4010, 5, 1); @@ -1471,24 +1618,24 @@ void SpeakerQuinn3385::proc15() { } } -void SpeakerQuinn3395::proc15() { +void SpeakerQuinn3395::animateSpeaker() { Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) - _object2 = &scene->_actor1; + else if (R2_GLOBALS._player._characterIndex == R2_SEEKER) + _object2 = &scene->_companion1; else - _object2 = &scene->_actor2; + _object2 = &scene->_companion2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -1513,7 +1660,7 @@ void SpeakerQuinn3395::proc15() { break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _object1.setup(4010, 3, 1); else _object1.setup(4010, 5, 1); @@ -1526,24 +1673,24 @@ void SpeakerQuinn3395::proc15() { } } -void SpeakerQuinn3400::proc15() { +void SpeakerQuinn3400::animateSpeaker() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) - _object2 = &scene->_actor1; + else if (R2_GLOBALS._player._characterIndex == R2_SEEKER) + _object2 = &scene->_companion1; else - _object2 = &scene->_actor2; + _object2 = &scene->_companion2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); if (_object2->_mover) @@ -1562,12 +1709,12 @@ void SpeakerQuinn3400::proc15() { case 2: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4010, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 3: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4012, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -1575,21 +1722,21 @@ void SpeakerQuinn3400::proc15() { } } -void SpeakerQuinn3600::proc15() { +void SpeakerQuinn3600::animateSpeaker() { Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor10; + _object2 = &scene->_quinn; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -1626,28 +1773,28 @@ void SpeakerQuinn3600::proc15() { void SpeakerQuinn3700::setText(const Common::String &msg) { Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; - switch (_fieldF6) { + switch (_speakerMode) { case 2: - scene->_actor3.setup(30, 1, 1); + scene->_miranda.setup(30, 1, 1); R2_GLOBALS._sound2.play(44); break; case 3: - scene->_actor3.setup(30, 1, 1); + scene->_miranda.setup(30, 1, 1); break; default: - scene->_actor3.setup(30, 7, 1); + scene->_miranda.setup(30, 7, 1); break; } VisualSpeaker::setText(msg); } -void SpeakerQuinn3700::proc15() { +void SpeakerQuinn3700::animateSpeaker() { Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_quinn; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1668,24 +1815,24 @@ void SpeakerQuinn3700::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; R2_GLOBALS._sound2.stop(); - scene->_actor1.setup(10, 4, 1); - scene->_actor3.setup(30, 7, 1); + scene->_quinn.setup(10, 4, 1); + scene->_miranda.setup(30, 7, 1); _object1.setup(3701, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor2.setup(20, 1, 1); - scene->_actor3.setup(30, 1, 1); - _object1.setup(3701, 2, 1); - _object1.animate(ANIM_MODE_5, NULL); + scene->_seeker.setup(20, 1, 1); + scene->_miranda.setup(30, 1, 1); + _object1.setup(3702, 1, 1); + _object1.animate(ANIM_MODE_5, this); break; case 3: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor1.setup(10, 2, 1); - scene->_actor3.setup(30, 1, 1); + scene->_quinn.setup(10, 2, 1); + scene->_miranda.setup(30, 1, 1); _object1.setup(4011, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -1697,17 +1844,8 @@ void SpeakerQuinn3700::proc15() { // Classes related to QUINNL //---------------------------------------------------------------------------- -SpeakerQuinnL::SpeakerQuinnL(): VisualSpeaker() { +SpeakerQuinnL::SpeakerQuinnL(): SpeakerQuinn() { _speakerName = "QUINNL"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; - _fontNumber = 10; } //---------------------------------------------------------------------------- @@ -1718,7 +1856,7 @@ SpeakerRalf3245::SpeakerRalf3245() { _speakerName = "Ralf"; _color1 = 5; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -1726,12 +1864,12 @@ SpeakerRalf3245::SpeakerRalf3245() { _numFrames = 0; } -void SpeakerRalf3245::proc15() { - int v = _fieldF6; +void SpeakerRalf3245::animateSpeaker() { + int v = _speakerMode; Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_ralf; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1770,7 +1908,7 @@ SpeakerRocko::SpeakerRocko() { _speakerName = "Rocko"; _color1 = 5; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -1778,12 +1916,12 @@ SpeakerRocko::SpeakerRocko() { _numFrames = 0; } -void SpeakerRocko3200::proc15() { - int v = _fieldF6; +void SpeakerRocko3200::animateSpeaker() { + int v = _speakerMode; Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_rocko; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1801,12 +1939,12 @@ void SpeakerRocko3200::proc15() { } } -void SpeakerRocko3220::proc15() { - int v = _fieldF6; +void SpeakerRocko3220::animateSpeaker() { + int v = _speakerMode; Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_rocko; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1824,12 +1962,12 @@ void SpeakerRocko3220::proc15() { } } -void SpeakerRocko3230::proc15() { - int v = _fieldF6; +void SpeakerRocko3230::animateSpeaker() { + int v = _speakerMode; Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_rocko; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1855,7 +1993,7 @@ SpeakerSeeker::SpeakerSeeker(): VisualSpeaker() { _speakerName = "SEEKER"; _color1 = 35; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -1863,13 +2001,13 @@ SpeakerSeeker::SpeakerSeeker(): VisualSpeaker() { _numFrames = 0; } -void SpeakerSeeker300::proc15() { - int v = _fieldF6; +void SpeakerSeeker300::animateSpeaker() { + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { _object2 = &R2_GLOBALS._player; - } else { + } else {assert(R2_GLOBALS._sceneManager._sceneNumber == 300); Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_seeker; } @@ -1899,18 +2037,56 @@ void SpeakerSeeker300::proc15() { } } -void SpeakerSeeker1100::proc15() { - int v = _fieldF6; +void SpeakerSeeker500::animateSpeaker() { + int v = _speakerMode; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { + _object2 = &R2_GLOBALS._player; + } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 500); + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_seeker; + } + + _object2->hide(); + _object1.postInit(); + + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + + if (v == 1) + _object1.setup(4041, 3, 1); + else + _object1.setup(4041, 1, 1); + + _object1.animate(ANIM_MODE_5, this); + } +} + +void SpeakerSeeker1100::animateSpeaker() { + int v = _speakerMode; if (!_object2) { if (v == 0) return; - if (R2_GLOBALS._player._characterIndex == 2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1100); Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor16; + _object2 = &scene->_seeker; } _object2->hide(); @@ -1958,15 +2134,16 @@ void SpeakerSeeker1100::proc15() { } } -void SpeakerSeeker1900::proc15() { - int v = _fieldF6; +void SpeakerSeeker1900::animateSpeaker() { + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1900); Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -1988,15 +2165,16 @@ void SpeakerSeeker1900::proc15() { } } -void SpeakerSeeker2435::proc15() { - int v = _fieldF6; +void SpeakerSeeker2435::animateSpeaker() { + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -2014,15 +2192,16 @@ void SpeakerSeeker2435::proc15() { } } -void SpeakerSeeker2450::proc15() { - int v = _fieldF6; +void SpeakerSeeker2450::animateSpeaker() { + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2450); Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -2039,25 +2218,25 @@ void SpeakerSeeker2450::proc15() { } } -void SpeakerSeeker3375::proc15() { +void SpeakerSeeker3375::animateSpeaker() { Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor1; + _object2 = &scene->_companion1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); - if (scene->_actor1._position.y != 163) + if (scene->_companion1._position.y != 163) R2_GLOBALS._player.setStrip(8); else R2_GLOBALS._player.setStrip(2); @@ -2088,22 +2267,22 @@ void SpeakerSeeker3375::proc15() { } } -void SpeakerSeeker3385::proc15() { +void SpeakerSeeker3385::animateSpeaker() { Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor1; + _object2 = &scene->_companion1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -2137,22 +2316,22 @@ void SpeakerSeeker3385::proc15() { } } -void SpeakerSeeker3395::proc15() { +void SpeakerSeeker3395::animateSpeaker() { Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor1; + _object2 = &scene->_companion1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -2186,22 +2365,22 @@ void SpeakerSeeker3395::proc15() { } } -void SpeakerSeeker3400::proc15() { +void SpeakerSeeker3400::animateSpeaker() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor1; + _object2 = &scene->_companion1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2217,27 +2396,27 @@ void SpeakerSeeker3400::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4031, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4031, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 3: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4030, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 4: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4031, 7, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 5: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4033, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -2245,22 +2424,22 @@ void SpeakerSeeker3400::proc15() { } } -void SpeakerSeeker3600::proc15() { +void SpeakerSeeker3600::animateSpeaker() { Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor11; + _object2 = &scene->_seeker; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2295,22 +2474,23 @@ void SpeakerSeeker3600::proc15() { void SpeakerSeeker3700::setText(const Common::String &msg) { Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; - if (_fieldF6 == 1) { + if (_speakerMode == 1) { R2_GLOBALS._sound2.play(44); - scene->_actor3.setup(30, 8, 1); + scene->_miranda.setup(30, 8, 1); } else { - scene->_actor3.setup(30, 2, 1); + scene->_miranda.setup(30, 2, 1); } + VisualSpeaker::setText(msg); } -void SpeakerSeeker3700::proc15() { +void SpeakerSeeker3700::animateSpeaker() { Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_seeker; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -2331,19 +2511,19 @@ void SpeakerSeeker3700::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; R2_GLOBALS._sound2.stop(); - scene->_actor1.setup(10, 8, 1); - scene->_actor2.setup(20, 7, 1); - scene->_actor3.setup(30, 8, 1); + scene->_quinn.setup(10, 8, 1); + scene->_seeker.setup(20, 7, 1); + scene->_miranda.setup(30, 8, 1); _object1.setup(3701, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor1.setup(10, 2, 1); - scene->_actor2.setup(20, 1, 1); - scene->_actor3.setup(30, 1, 1); + scene->_quinn.setup(10, 2, 1); + scene->_seeker.setup(20, 1, 1); + scene->_miranda.setup(30, 1, 1); _object1.setup(4031, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -2355,17 +2535,8 @@ void SpeakerSeeker3700::proc15() { // Classes related to SEEKERL //---------------------------------------------------------------------------- -SpeakerSeekerL::SpeakerSeekerL(): VisualSpeaker() { +SpeakerSeekerL::SpeakerSeekerL(): SpeakerSeeker() { _speakerName = "SEEKERL"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; - _fontNumber = 10; } //---------------------------------------------------------------------------- @@ -2376,7 +2547,7 @@ SpeakerSocko3200::SpeakerSocko3200() { _speakerName = "Socko"; _color1 = 10; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -2384,12 +2555,12 @@ SpeakerSocko3200::SpeakerSocko3200() { _numFrames = 0; } -void SpeakerSocko3200::proc15() { - int v = _fieldF6; +void SpeakerSocko3200::animateSpeaker() { + int v = _speakerMode; Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor3; + _object2 = &scene->_socko; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -2411,11 +2582,11 @@ void SpeakerSocko3200::proc15() { // Classes related to SOLDIER //---------------------------------------------------------------------------- -SpeakerSoldier::SpeakerSoldier(int colour) { +SpeakerSoldier::SpeakerSoldier(int color) { _speakerName = "SOLDIER"; - _color1 = colour; + _color1 = color; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -2423,8 +2594,8 @@ SpeakerSoldier::SpeakerSoldier(int colour) { _numFrames = 0; } -void SpeakerSoldier300::proc15() { - int v = _fieldF6; +void SpeakerSoldier300::animateSpeaker() { + int v = _speakerMode; if (!_object2) { Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; @@ -2455,7 +2626,7 @@ SpeakerTeal::SpeakerTeal(): VisualSpeaker() { _speakerName = "TEAL"; _color1 = 22; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -2467,8 +2638,43 @@ SpeakerTealMode7::SpeakerTealMode7(): SpeakerTeal() { _displayMode = 7; } -void SpeakerTeal300::proc15() { - int v = _fieldF6; +void SpeakerTeal180::animateSpeaker() { + int v = _speakerMode; + + if (!_object2) { + Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_teal; + _object2->hide(); + + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(75, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(77, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + +void SpeakerTeal300::animateSpeaker() { + int v = _speakerMode; if (!_object2) { Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; @@ -2491,12 +2697,12 @@ void SpeakerTeal300::proc15() { } } -void SpeakerTeal1625::proc15() { - int v = _fieldF6; +void SpeakerTeal1625::animateSpeaker() { + int v = _speakerMode; if (!_object2) { Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor2; + _object2 = &scene->_tealHead; _object2->hide(); _object1.postInit(); @@ -2515,12 +2721,12 @@ void SpeakerTeal1625::proc15() { } } -void SpeakerTeal3240::proc15() { - int v = _fieldF6; +void SpeakerTeal3240::animateSpeaker() { + int v = _speakerMode; Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_teal; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -2538,17 +2744,17 @@ void SpeakerTeal3240::proc15() { } } -void SpeakerTeal3400::proc15() { +void SpeakerTeal3400::animateSpeaker() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor4; + _object2 = &scene->_teal; _object2->hide(); _object1.postInit(); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2561,8 +2767,8 @@ void SpeakerTeal3400::proc15() { if (scene ->_sceneMode == 3305) { R2_GLOBALS._player.setStrip(6); - scene->_actor1.setStrip(6); - scene->_actor2.setStrip(6); + scene->_companion1.setStrip(6); + scene->_companion2.setStrip(6); } switch (v) { @@ -2572,22 +2778,22 @@ void SpeakerTeal3400::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4107, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4107, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 3: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4107, 7, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 4: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4107, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -2595,18 +2801,18 @@ void SpeakerTeal3400::proc15() { } } -void SpeakerTeal3600::proc15() { +void SpeakerTeal3600::animateSpeaker() { Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor5; + _object2 = &scene->_teal; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2659,7 +2865,7 @@ SpeakerTomko3245::SpeakerTomko3245() { _speakerName = "Tomko"; _color1 = 10; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -2667,12 +2873,12 @@ SpeakerTomko3245::SpeakerTomko3245() { _numFrames = 0; } -void SpeakerTomko3245::proc15() { - int v = _fieldF6; +void SpeakerTomko3245::animateSpeaker() { + int v = _speakerMode; Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_tomko; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -2707,11 +2913,11 @@ void SpeakerTomko3245::proc15() { // Classes related to WEBBSTER //---------------------------------------------------------------------------- -SpeakerWebbster::SpeakerWebbster(int colour) { +SpeakerWebbster::SpeakerWebbster(int color) { _speakerName = "WEBBSTER"; - _color1 = colour; + _color1 = color; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -2719,12 +2925,53 @@ SpeakerWebbster::SpeakerWebbster(int colour) { _numFrames = 0; } -void SpeakerWebbster3240::proc15() { - int v = _fieldF6; +void SpeakerWebbster180::animateSpeaker() { + Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene; + + int v = _speakerMode; + + if (!_object2) { + _object2 = &scene->_webbster; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 6; + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(75, 7, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(76, 4, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(76, 6, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + +void SpeakerWebbster3240::animateSpeaker() { + int v = _speakerMode; Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_webbster; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -2742,21 +2989,21 @@ void SpeakerWebbster3240::proc15() { } } -void SpeakerWebbster3375::proc15() { +void SpeakerWebbster3375::animateSpeaker() { Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor3; + _object2 = &scene->_webbster; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); - if (scene->_actor1._position.y != 163) + if (scene->_companion1._position.y != 163) R2_GLOBALS._player.setStrip(8); else R2_GLOBALS._player.setStrip(2); @@ -2786,18 +3033,18 @@ void SpeakerWebbster3375::proc15() { } } -void SpeakerWebbster3385::proc15() { +void SpeakerWebbster3385::animateSpeaker() { Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor3; + _object2 = &scene->_webbster; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -2830,18 +3077,18 @@ void SpeakerWebbster3385::proc15() { } } -void SpeakerWebbster3395::proc15() { +void SpeakerWebbster3395::animateSpeaker() { Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor3; + _object2 = &scene->_webbster; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -2874,18 +3121,18 @@ void SpeakerWebbster3395::proc15() { } } -void SpeakerWebbster3400::proc15() { +void SpeakerWebbster3400::animateSpeaker() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_actor3; + _object2 = &scene->_webbster; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2901,17 +3148,17 @@ void SpeakerWebbster3400::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4110, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4110, 7, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; case 3: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4110, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -2921,11 +3168,11 @@ void SpeakerWebbster3400::proc15() { //---------------------------------------------------------------------------- -SpeakerDutyOfficer::SpeakerDutyOfficer(): VisualSpeaker() { +SpeakerDutyOfficer180::SpeakerDutyOfficer180(): VisualSpeaker() { _speakerName = "DUTYOFFICER"; _color1 = 5; _color2 = 0; - _fieldF6 = 0; + _speakerMode = 0; _textWidth = 300; _hideObjects = false; _object2 = NULL; @@ -2933,13 +3180,13 @@ SpeakerDutyOfficer::SpeakerDutyOfficer(): VisualSpeaker() { _numFrames = 0; } -void SpeakerDutyOfficer::proc15() { +void SpeakerDutyOfficer180::animateSpeaker() { Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene; - int v = _fieldF6; + int v = _speakerMode; if (!_object2) { - _object2 = &scene->_object2; + _object2 = &scene->_dutyOfficer; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -2953,7 +3200,7 @@ void SpeakerDutyOfficer::proc15() { _object1.animate(ANIM_MODE_2, NULL); break; case 1: - _action = NULL; + _action->_action = NULL; _object1.setup(76, 2, 1); _object1.animate(ANIM_MODE_5, this); break; |