aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/ringworld2/ringworld2_speakers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tsage/ringworld2/ringworld2_speakers.cpp')
-rw-r--r--engines/tsage/ringworld2/ringworld2_speakers.cpp392
1 files changed, 281 insertions, 111 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp
index da1449efdf..e7109829b0 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.cpp
+++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp
@@ -40,7 +40,7 @@ VisualSpeaker::VisualSpeaker(): Speaker() {
_color1 = 8;
_color2 = 0;
_displayMode = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
}
void VisualSpeaker::remove() {
@@ -49,27 +49,104 @@ void VisualSpeaker::remove() {
_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: _action->_field18 = 1;
+ if (_speakerMode == 0xff)
+ proc16();
+
+ _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) {
+ // TODO: Check global that is passed
+ setFrame2(/* word_55F90 */ 1);
+ }
+ } else if (_action && _object2) {
+ _action->setDelay(1);
+ _sceneText.remove();
+
+ R2_GLOBALS._playStream.stop();
+ }
+}
+
+void VisualSpeaker::dispatch() {
+ uint32 frameNumber = R2_GLOBALS._events.getFrameNumber();
+
+ // 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 (_delayAmount2) {
+ if (frameNumber >= _frameNumber2) {
+ _delayAmount2 = _delayAmount2 - (_frameNumber2 - frameNumber);
+ _frameNumber2 = frameNumber;
+
+ if (_delayAmount2 <= 0) {
+ _delayAmount2 = 0;
+ if (R2_GLOBALS._playStream.play(0, 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)) {
+ _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(_delayAmount2);
+ s.syncAsUint32LE(_frameNumber2);
}
void VisualSpeaker::setText(const Common::String &msg) {
@@ -127,13 +204,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,8 +235,7 @@ 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 {
@@ -173,11 +248,11 @@ void VisualSpeaker::setText(const Common::String &msg) {
void VisualSpeaker::proc16() {
R2_GLOBALS._playStream.stop();
- _fieldF6 = 0;
+ _speakerMode = 0;
_object1.remove();
- assert(_object2);
- _object2->show();
+ if (_object2)
+ _object2->show();
_object2 = NULL;
_fieldF8 = 0;
}
@@ -187,6 +262,11 @@ void VisualSpeaker::setFrame(int numFrames) {
_frameNumber = R2_GLOBALS._events.getFrameNumber();
}
+void VisualSpeaker::setFrame2(int numFrames) {
+ _delayAmount2 = numFrames;
+ _frameNumber2 = R2_GLOBALS._events.getFrameNumber();
+}
+
void VisualSpeaker::setDelay(int delay) {
_delayAmount = delay;
_frameNumber = R2_GLOBALS._events.getFrameNumber();
@@ -211,7 +291,7 @@ SpeakerCaptain3210::SpeakerCaptain3210() {
_speakerName = "Captain";
_color1 = 5;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -220,7 +300,7 @@ SpeakerCaptain3210::SpeakerCaptain3210() {
}
void SpeakerCaptain3210::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -250,7 +330,7 @@ SpeakerCaretaker2450::SpeakerCaretaker2450() {
_speakerName = "CARETAKER";
_color1 = 43;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -266,7 +346,7 @@ SpeakerChief1100::SpeakerChief1100() {
_speakerName = "CHIEF";
_color1 = 8;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -275,11 +355,11 @@ SpeakerChief1100::SpeakerChief1100() {
}
void SpeakerChief1100::proc15() {
- int v = _fieldF6;
+ 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 +404,7 @@ SpeakerGuard::SpeakerGuard() {
_speakerName = "GUARD";
_color1 = 5;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -333,7 +413,7 @@ SpeakerGuard::SpeakerGuard() {
}
void SpeakerGuard2800::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -364,7 +444,7 @@ SpeakerJocko::SpeakerJocko() {
_speakerName = "Jocko";
_color1 = 45;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -373,7 +453,7 @@ SpeakerJocko::SpeakerJocko() {
}
void SpeakerJocko3200::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -396,7 +476,7 @@ void SpeakerJocko3200::proc15() {
}
void SpeakerJocko3220::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -419,7 +499,7 @@ void SpeakerJocko3220::proc15() {
}
void SpeakerJocko3230::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -449,7 +529,7 @@ SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() {
_speakerName = "MIRANDA";
_color1 = 154;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -458,7 +538,7 @@ SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() {
}
void SpeakerMiranda300::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 3) {
@@ -498,7 +578,7 @@ void SpeakerMiranda300::proc15() {
}
void SpeakerMiranda1625::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene;
@@ -521,7 +601,7 @@ void SpeakerMiranda1625::proc15() {
}
void SpeakerMiranda3255::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &R2_GLOBALS._player;
@@ -544,7 +624,7 @@ void SpeakerMiranda3255::proc15() {
void SpeakerMiranda3375::proc15() {
Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 3)
@@ -594,7 +674,7 @@ void SpeakerMiranda3375::proc15() {
void SpeakerMiranda3385::proc15() {
Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 3)
@@ -643,7 +723,7 @@ void SpeakerMiranda3385::proc15() {
void SpeakerMiranda3395::proc15() {
Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 3)
@@ -693,7 +773,7 @@ void SpeakerMiranda3395::proc15() {
void SpeakerMiranda3400::proc15() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 3)
@@ -737,7 +817,7 @@ void SpeakerMiranda3400::proc15() {
void SpeakerMiranda3600::proc15() {
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 3)
@@ -783,7 +863,7 @@ void SpeakerMiranda3600::proc15() {
void SpeakerMiranda3700::proc15() {
Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor3;
@@ -840,7 +920,7 @@ SpeakerNej::SpeakerNej() {
_speakerName = "NEJ";
_color1 = 171;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -849,7 +929,7 @@ SpeakerNej::SpeakerNej() {
}
void SpeakerNej2700::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -884,7 +964,7 @@ void SpeakerNej2700::proc15() {
}
void SpeakerNej2750::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -916,7 +996,7 @@ void SpeakerNej2750::proc15() {
}
void SpeakerNej2800::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -948,7 +1028,7 @@ SpeakerPharisha::SpeakerPharisha(): VisualSpeaker() {
_speakerName = "PHARISHA";
_color1 = 151;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -957,7 +1037,7 @@ SpeakerPharisha::SpeakerPharisha(): VisualSpeaker() {
}
void SpeakerPharisha2435::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -984,7 +1064,7 @@ SpeakerPrivate3210::SpeakerPrivate3210() {
_speakerName = "Private";
_color1 = 45;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -993,7 +1073,7 @@ SpeakerPrivate3210::SpeakerPrivate3210() {
}
void SpeakerPrivate3210::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -1023,7 +1103,7 @@ SpeakerProtector3600::SpeakerProtector3600() {
_speakerName = "Protector";
_color1 = 170;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -1032,7 +1112,7 @@ SpeakerProtector3600::SpeakerProtector3600() {
}
void SpeakerProtector3600::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -1084,7 +1164,7 @@ SpeakerQuinn::SpeakerQuinn(): VisualSpeaker() {
_speakerName = "QUINN";
_color1 = 60;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -1093,12 +1173,13 @@ SpeakerQuinn::SpeakerQuinn(): VisualSpeaker() {
}
void SpeakerQuinn300::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 3) {
_object2 = &R2_GLOBALS._player;
} else {
+ assert(R2_GLOBALS._sceneManager._sceneNumber == 300);
Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_quinn;
}
@@ -1139,8 +1220,53 @@ void SpeakerQuinn300::proc15() {
}
}
+void SpeakerQuinn500::proc15() {
+ 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;
+ int v = _speakerMode;
if (!_object2) {
if (v == 0)
@@ -1149,8 +1275,9 @@ void SpeakerQuinn1100::proc15() {
if (R2_GLOBALS._player._characterIndex == 1) {
_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();
@@ -1188,12 +1315,13 @@ void SpeakerQuinn1100::proc15() {
}
void SpeakerQuinn2435::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 1) {
_object2 = &R2_GLOBALS._player;
} else {
+ assert(R2_GLOBALS._sceneManager._sceneNumber == 2435);
Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_actor1;
}
@@ -1214,12 +1342,13 @@ void SpeakerQuinn2435::proc15() {
}
void SpeakerQuinn2450::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 1) {
_object2 = &R2_GLOBALS._player;
} else {
+ assert(R2_GLOBALS._sceneManager._sceneNumber == 2435);
Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_actor1;
}
@@ -1242,7 +1371,7 @@ void SpeakerQuinn2450::proc15() {
}
void SpeakerQuinn2700::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &R2_GLOBALS._player;
@@ -1273,7 +1402,7 @@ void SpeakerQuinn2700::proc15() {
}
void SpeakerQuinn2750::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &R2_GLOBALS._player;
@@ -1304,7 +1433,7 @@ void SpeakerQuinn2750::proc15() {
}
void SpeakerQuinn2800::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &R2_GLOBALS._player;
@@ -1345,7 +1474,7 @@ void SpeakerQuinn2800::proc15() {
void SpeakerQuinn3255::proc15() {
Scene3255 *scene = (Scene3255 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor4;
@@ -1368,7 +1497,7 @@ void SpeakerQuinn3255::proc15() {
void SpeakerQuinn3375::proc15() {
Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 1)
@@ -1419,7 +1548,7 @@ void SpeakerQuinn3375::proc15() {
void SpeakerQuinn3385::proc15() {
Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 1)
@@ -1474,7 +1603,7 @@ void SpeakerQuinn3385::proc15() {
void SpeakerQuinn3395::proc15() {
Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 1)
@@ -1529,7 +1658,7 @@ void SpeakerQuinn3395::proc15() {
void SpeakerQuinn3400::proc15() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 1)
@@ -1578,7 +1707,7 @@ void SpeakerQuinn3400::proc15() {
void SpeakerQuinn3600::proc15() {
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 1)
@@ -1626,7 +1755,7 @@ 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);
R2_GLOBALS._sound2.play(44);
@@ -1644,7 +1773,7 @@ void SpeakerQuinn3700::setText(const Common::String &msg) {
void SpeakerQuinn3700::proc15() {
Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor1;
@@ -1701,7 +1830,7 @@ SpeakerQuinnL::SpeakerQuinnL(): VisualSpeaker() {
_speakerName = "QUINNL";
_color1 = 35;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -1718,7 +1847,7 @@ SpeakerRalf3245::SpeakerRalf3245() {
_speakerName = "Ralf";
_color1 = 5;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -1727,7 +1856,7 @@ SpeakerRalf3245::SpeakerRalf3245() {
}
void SpeakerRalf3245::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -1770,7 +1899,7 @@ SpeakerRocko::SpeakerRocko() {
_speakerName = "Rocko";
_color1 = 5;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -1779,7 +1908,7 @@ SpeakerRocko::SpeakerRocko() {
}
void SpeakerRocko3200::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -1802,7 +1931,7 @@ void SpeakerRocko3200::proc15() {
}
void SpeakerRocko3220::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -1825,7 +1954,7 @@ void SpeakerRocko3220::proc15() {
}
void SpeakerRocko3230::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -1855,7 +1984,7 @@ SpeakerSeeker::SpeakerSeeker(): VisualSpeaker() {
_speakerName = "SEEKER";
_color1 = 35;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -1864,12 +1993,12 @@ SpeakerSeeker::SpeakerSeeker(): VisualSpeaker() {
}
void SpeakerSeeker300::proc15() {
- int v = _fieldF6;
+ 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,8 +2028,45 @@ void SpeakerSeeker300::proc15() {
}
}
+void SpeakerSeeker500::proc15() {
+ 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::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (v == 0)
@@ -1909,8 +2075,9 @@ void SpeakerSeeker1100::proc15() {
if (R2_GLOBALS._player._characterIndex == 2) {
_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();
@@ -1959,12 +2126,13 @@ void SpeakerSeeker1100::proc15() {
}
void SpeakerSeeker1900::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 2) {
_object2 = &R2_GLOBALS._player;
} else {
+ assert(R2_GLOBALS._sceneManager._sceneNumber == 1900);
Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_actor1;
}
@@ -1989,12 +2157,13 @@ void SpeakerSeeker1900::proc15() {
}
void SpeakerSeeker2435::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 2) {
_object2 = &R2_GLOBALS._player;
} else {
+ assert(R2_GLOBALS._sceneManager._sceneNumber == 2435);
Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_actor1;
}
@@ -2015,12 +2184,13 @@ void SpeakerSeeker2435::proc15() {
}
void SpeakerSeeker2450::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 2) {
_object2 = &R2_GLOBALS._player;
} else {
+ assert(R2_GLOBALS._sceneManager._sceneNumber == 2450);
Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_actor1;
}
@@ -2042,7 +2212,7 @@ void SpeakerSeeker2450::proc15() {
void SpeakerSeeker3375::proc15() {
Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 2)
@@ -2091,7 +2261,7 @@ void SpeakerSeeker3375::proc15() {
void SpeakerSeeker3385::proc15() {
Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 2)
@@ -2140,7 +2310,7 @@ void SpeakerSeeker3385::proc15() {
void SpeakerSeeker3395::proc15() {
Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 2)
@@ -2189,7 +2359,7 @@ void SpeakerSeeker3395::proc15() {
void SpeakerSeeker3400::proc15() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 2)
@@ -2248,7 +2418,7 @@ void SpeakerSeeker3400::proc15() {
void SpeakerSeeker3600::proc15() {
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == 2)
@@ -2295,7 +2465,7 @@ 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);
} else {
@@ -2307,7 +2477,7 @@ void SpeakerSeeker3700::setText(const Common::String &msg) {
void SpeakerSeeker3700::proc15() {
Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor2;
@@ -2359,7 +2529,7 @@ SpeakerSeekerL::SpeakerSeekerL(): VisualSpeaker() {
_speakerName = "SEEKERL";
_color1 = 35;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -2376,7 +2546,7 @@ SpeakerSocko3200::SpeakerSocko3200() {
_speakerName = "Socko";
_color1 = 10;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -2385,7 +2555,7 @@ SpeakerSocko3200::SpeakerSocko3200() {
}
void SpeakerSocko3200::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -2411,11 +2581,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;
@@ -2424,7 +2594,7 @@ SpeakerSoldier::SpeakerSoldier(int colour) {
}
void SpeakerSoldier300::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
@@ -2455,7 +2625,7 @@ SpeakerTeal::SpeakerTeal(): VisualSpeaker() {
_speakerName = "TEAL";
_color1 = 22;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -2468,7 +2638,7 @@ SpeakerTealMode7::SpeakerTealMode7(): SpeakerTeal() {
}
void SpeakerTeal300::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
@@ -2492,7 +2662,7 @@ void SpeakerTeal300::proc15() {
}
void SpeakerTeal1625::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene;
@@ -2516,7 +2686,7 @@ void SpeakerTeal1625::proc15() {
}
void SpeakerTeal3240::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -2541,7 +2711,7 @@ void SpeakerTeal3240::proc15() {
void SpeakerTeal3400::proc15() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor4;
@@ -2598,7 +2768,7 @@ void SpeakerTeal3400::proc15() {
void SpeakerTeal3600::proc15() {
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor5;
@@ -2659,7 +2829,7 @@ SpeakerTomko3245::SpeakerTomko3245() {
_speakerName = "Tomko";
_color1 = 10;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -2668,7 +2838,7 @@ SpeakerTomko3245::SpeakerTomko3245() {
}
void SpeakerTomko3245::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -2707,11 +2877,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;
@@ -2720,7 +2890,7 @@ SpeakerWebbster::SpeakerWebbster(int colour) {
}
void SpeakerWebbster3240::proc15() {
- int v = _fieldF6;
+ int v = _speakerMode;
Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
@@ -2745,7 +2915,7 @@ void SpeakerWebbster3240::proc15() {
void SpeakerWebbster3375::proc15() {
Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor3;
@@ -2789,7 +2959,7 @@ void SpeakerWebbster3375::proc15() {
void SpeakerWebbster3385::proc15() {
Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor3;
@@ -2833,7 +3003,7 @@ void SpeakerWebbster3385::proc15() {
void SpeakerWebbster3395::proc15() {
Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor3;
@@ -2877,7 +3047,7 @@ void SpeakerWebbster3395::proc15() {
void SpeakerWebbster3400::proc15() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_actor3;
@@ -2925,7 +3095,7 @@ SpeakerDutyOfficer::SpeakerDutyOfficer(): VisualSpeaker() {
_speakerName = "DUTYOFFICER";
_color1 = 5;
_color2 = 0;
- _fieldF6 = 0;
+ _speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
@@ -2936,7 +3106,7 @@ SpeakerDutyOfficer::SpeakerDutyOfficer(): VisualSpeaker() {
void SpeakerDutyOfficer::proc15() {
Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene;
- int v = _fieldF6;
+ int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_object2;