diff options
Diffstat (limited to 'engines/tsage/ringworld2/ringworld2_speakers.cpp')
| -rw-r--r-- | engines/tsage/ringworld2/ringworld2_speakers.cpp | 392 | 
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;  | 
