Files
scummvm-cursorfix/engines/tsage/ringworld2/ringworld2_speakers.cpp
2026-02-02 04:50:13 +01:00

3306 lines
72 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "tsage/ringworld2/ringworld2_speakers.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/graphics.h"
#include "tsage/staticres.h"
#include "tsage/ringworld2/ringworld2_scenes0.h"
#include "tsage/ringworld2/ringworld2_scenes1.h"
#include "tsage/ringworld2/ringworld2_scenes2.h"
#include "tsage/ringworld2/ringworld2_scenes3.h"
namespace TsAGE {
namespace Ringworld2 {
VisualSpeaker::VisualSpeaker(): Speaker() {
_delayAmount = 0;
_voiceDelayAmount = 0;
_frameNumber = R2_GLOBALS._events.getFrameNumber();
_color1 = 8;
_color2 = 0;
_displayMode = 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, (_speakerMode == 0xff) ? this : NULL);
} else {
_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(_speakerMode);
s.syncAsSint16LE(_fieldF8);
s.syncAsSint16LE(_displayMode);
s.syncAsSint16LE(_soundId);
s.syncAsByte(_removeObject);
s.syncAsSint16LE(_numFrames);
s.syncAsSint16LE(_delayAmount);
s.syncAsUint32LE(_frameNumber);
s.syncAsSint16LE(_voiceDelayAmount);
s.syncAsUint32LE(_voiceFrameNumber);
}
void VisualSpeaker::setText(const Common::String &msg) {
_sceneText.remove();
// Position the text depending on the specified display mode
switch (_displayMode) {
case 2:
_textPos = Common::Point(60, 20);
break;
case 3:
_textPos = Common::Point(110, 20);
break;
case 4:
_textPos = Common::Point(10, 100);
break;
case 5:
_textPos = Common::Point(60, 100);
break;
case 6:
_textPos = Common::Point(110, 100);
break;
case 7:
_textPos = Common::Point(170, 20);
break;
case 8:
_textPos = Common::Point(170, 100);
break;
case 9:
_textPos = Common::Point(330, 20);
break;
default:
_textPos = Common::Point(10, 20);
break;
}
// Check if the message starts with a '!'. If so, it indicates a speech resource Id to be played,
// in which case extract the resource number from the message.
_soundId = 0;
Common::String s = msg;
if (s.hasPrefix("!")) {
s.deleteChar(0);
_soundId = atoi(s.c_str());
while (!s.empty() && (*s.c_str() >= '0' && *s.c_str() <= '9'))
s.deleteChar(0);
}
// Set up the text details
_sceneText._color1 = _color1;
_sceneText._color2 = _color2;
_sceneText._color3 = _color3;
_sceneText._width = _textWidth;
_sceneText._fontNumber = _fontNumber;
_sceneText._textMode = _textMode;
_sceneText.setup(s);
_sceneText.setPosition(_textPos);
_sceneText.fixPriority(256);
// If subtitles are turned off, don't show the text
if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) &&
!(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) {
_sceneText.hide();
}
// Figure out the text delay if subtitles are turned on, or there's no speech resource specified
if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId) {
const char *msgP = s.c_str();
int numWords = 0;
while (*msgP != '\0') {
if (*msgP++ == ' ')
++numWords;
}
if (!numWords && !s.empty())
++numWords;
_numFrames = numWords * 30 + 120;
setDelay(_numFrames);
} else {
_numFrames = 1;
}
// If the text is empty, no delay is needed
if (s.empty())
_numFrames = 0;
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)) {
// Couldn't play voice, so fall back on showing text
_sceneText.show();
} else {
_numFrames = 2;
_soundId = 0;
}
}
}
}
void VisualSpeaker::stopSpeaking() {
R2_GLOBALS._playStream.stop();
_speakerMode = 0;
_object1.remove();
if (_object2)
_object2->show();
_object2 = NULL;
_fieldF8 = 0;
}
void VisualSpeaker::setFrame(int numFrames) {
_delayAmount = 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();
}
//----------------------------------------------------------------------------
SpeakerGameText::SpeakerGameText(): VisualSpeaker() {
_speakerName = "GAMETEXT";
_color1 = 8;
_color2 = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
}
//----------------------------------------------------------------------------
// Classes related to CAPTAIN
//----------------------------------------------------------------------------
SpeakerCaptain3210::SpeakerCaptain3210() {
_speakerName = "Captain";
_color1 = 5;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerCaptain3210::animateSpeaker() {
int v = _speakerMode;
Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_captain;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4060, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to CARETAKER
//----------------------------------------------------------------------------
SpeakerCaretaker2450::SpeakerCaretaker2450() {
_speakerName = "CARETAKER";
_color1 = 43;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
//----------------------------------------------------------------------------
// Classes related to CHIEF
//----------------------------------------------------------------------------
SpeakerChief1100::SpeakerChief1100() {
_speakerName = "CHIEF";
_color1 = 8;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerChief1100::animateSpeaker() {
int v = _speakerMode;
Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_chief;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4080, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4080, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 100:
_numFrames = 0;
((StripManager *)_action)->_useless = 0;
_object1.setStrip(_object1._strip - 1);
_object1.setFrame(_object1.getFrameCount());
_object1.animate(ANIM_MODE_6, this);
break;
default:
signal();
break;
}
}
//----------------------------------------------------------------------------
// Classes related to GUARD
//----------------------------------------------------------------------------
SpeakerGuard::SpeakerGuard() {
_speakerName = "GUARD";
_color1 = 5;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerGuard2800::animateSpeaker() {
int v = _speakerMode;
Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_guard;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setZoom(75);
_object1.setup(4060, 3, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to JOCKO
//----------------------------------------------------------------------------
SpeakerJocko::SpeakerJocko() {
_speakerName = "Jocko";
_color1 = 45;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerJocko3200::animateSpeaker() {
int v = _speakerMode;
Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_jocko;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4060, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerJocko3220::animateSpeaker() {
int v = _speakerMode;
Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_jocko;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4060, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerJocko3230::animateSpeaker() {
int v = _speakerMode;
Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_jocko;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4060, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to MIRANDA
//----------------------------------------------------------------------------
SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() {
_speakerName = "MIRANDA";
_color1 = 154;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerMiranda300::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) {
_object2 = &R2_GLOBALS._player;
} else {
Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_miranda;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else if (v == 100) {
_numFrames = 0;
((StripManager *)_action)->_useless = 0;
_object1.setStrip(_object1._strip - 1);
_object1.setFrame(_object1.getFrameCount());
_object1.animate(ANIM_MODE_6, this);
} else {
((StripManager *)_action)->_useless = 0;
if (v == 4) {
_object1.setup(304, 5, 1);
} else {
_object1.setup(305, v * 2 - 1, 1);
}
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerMiranda1625::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_mirandaMouth;
_object2->hide();
_object1.postInit();
_object1.setPosition(Common::Point(196, 65));
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(1627, 3, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerMiranda3255::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
_object2 = &R2_GLOBALS._player;
_object2->hide();
_object1.postInit();
_object1._effect = _object2->_effect;
_object1._shade = _object2->_shade;
_object1.setPosition(_object2->_position);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(3257, 5, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerMiranda3375::animateSpeaker() {
Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_companion2;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (scene->_companion1._position.y != 163)
R2_GLOBALS._player.setStrip(8);
else
R2_GLOBALS._player.setStrip(2);
R2_GLOBALS._player.disableControl();
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4051, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerMiranda3385::animateSpeaker() {
Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_companion2;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (R2_GLOBALS._sceneManager._previousScene == 3375)
R2_GLOBALS._player.setStrip(4);
else
R2_GLOBALS._player.setStrip(3);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4051, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerMiranda3395::animateSpeaker() {
Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_companion2;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (R2_GLOBALS._sceneManager._previousScene == 3385)
R2_GLOBALS._player.setStrip(4);
else
R2_GLOBALS._player.setStrip(3);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4051, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerMiranda3400::animateSpeaker() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_companion2;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4051, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4050, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerMiranda3600::animateSpeaker() {
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_miranda;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
_object1.setPosition(_object2->_position);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4051, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4050, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerMiranda3700::animateSpeaker() {
Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_miranda;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
_object1.setPosition(_object2->_position);
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
scene->_quinn.setup(10, 6, 1);
scene->_seeker.setup(20, 5, 1);
_object2->setup(30, 1, 1);
scene->_webbster.setup(40, 1, 1);
_object1.setup(4050, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
scene->_miranda.setup(30, 8, 1);
_object1.setup(4052, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 0;
scene->_seeker.setup(20, 1, 1);
scene->_miranda.setup(30, 1, 1);
_object1.setup(4051, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
//----------------------------------------------------------------------------
// Classes related to NEJ
//----------------------------------------------------------------------------
SpeakerNej::SpeakerNej() {
_speakerName = "NEJ";
_color1 = 171;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerNej2700::animateSpeaker() {
int v = _speakerMode;
Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_nej;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
switch (_object2->_visage) {
case 2701:
_object1.setup(4022, 3, 1);
_object1.setPosition(Common::Point(164, 163));
_object2->setPosition(Common::Point(-10, -10));
break;
case 2705:
_object1.setup(4022, 7, 1);
_object1.fixPriority(162);
break;
default:
break;
}
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerNej2750::animateSpeaker() {
int v = _speakerMode;
Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_nej;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
switch (_object2->_visage) {
case 2705:
_object1.setup(4022, 7, 1);
break;
case 2752:
_object1.setup(2752, 1, 1);
break;
default:
break;
}
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerNej2800::animateSpeaker() {
int v = _speakerMode;
Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_nej;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4023, 3, 1);
if (_object2->_visage == 2801)
_object1.setPosition(Common::Point(_object2->_position.x - 12, _object2->_position.y));
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to PHARISHA
//----------------------------------------------------------------------------
SpeakerPharisha::SpeakerPharisha(): VisualSpeaker() {
_speakerName = "PHARISHA";
_color1 = 151;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerPharisha2435::animateSpeaker() {
int v = _speakerMode;
Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_astor;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4098, 5, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to PRIVATE
//----------------------------------------------------------------------------
SpeakerPrivate3210::SpeakerPrivate3210() {
_speakerName = "Private";
_color1 = 45;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerPrivate3210::animateSpeaker() {
int v = _speakerMode;
Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_private;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4060, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to PROTECTOR
//----------------------------------------------------------------------------
SpeakerProtector3600::SpeakerProtector3600() {
_speakerName = "Protector";
_color1 = 170;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 7;
_numFrames = 0;
}
void SpeakerProtector3600::animateSpeaker() {
int v = _speakerMode;
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_protector;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
_object1.setPosition(_object2->_position);
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
if (scene->_sceneMode != 3324) {
_object1.setup(4125, 3, 1);
_object1.animate(ANIM_MODE_5, this);
} else {
_object1.setup(3258, 6, 1);
_object1.animate(ANIM_MODE_2, NULL);
_object1.hide();
_object2->setup(3258, 6, 1);
_object2->show();
}
break;
default:
signal();
break;
}
}
//----------------------------------------------------------------------------
// Classes related to QUINN
//----------------------------------------------------------------------------
SpeakerQuinn::SpeakerQuinn(): VisualSpeaker() {
_speakerName = "QUINN";
_color1 = 60;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerQuinn300::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
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;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else if (v == 100) {
_numFrames = 0;
((StripManager *)_action)->_useless = 0;
_object1.setStrip(_object1._strip - 1);
_object1.setFrame(_object1.getFrameCount());
_object1.animate(ANIM_MODE_6, this);
} else {
((StripManager *)_action)->_useless = 0;
switch (_object2->_visage) {
case 10:
_object1.setup((v - 1) / 4 + 4010, ((v - ((v - 1) / 4 * 4) - 1) % 8) * 2 + 1, 1);
break;
case 302:
_object1.setup(308, (v - 1) % 8 + 1, 1);
break;
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 {
((StripManager *)_action)->_useless = 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::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
if (v == 0)
return;
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->_seeker;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(1108, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(1109, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 0;
_object1.setup(1109, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerQuinn2435::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
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->_companion;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object2->setStrip(7);
_object1.setup(2020, 5, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerQuinn2450::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
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->_companion;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
if (R2_GLOBALS.getFlag(61))
_object1.setup(2020, 3, 1);
else
_object1.setup(2020, 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerQuinn2700::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
_object2 = &R2_GLOBALS._player;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
switch (_object2->_visage) {
case 19:
_object1.setup(4022, 5, 1);
break;
case 2701:
_object1.setup(4022, 1, 1);
break;
default:
break;
}
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerQuinn2750::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
_object2 = &R2_GLOBALS._player;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
switch (_object2->_visage) {
case 19:
_object1.setup(4022, 5, 1);
break;
case 2752:
_object1.setup(2752, 3, 1);
break;
default:
break;
}
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerQuinn2800::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
_object2 = &R2_GLOBALS._player;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
switch (_object2->_visage) {
case 16:
_object1.setZoom(75);
_object1.setup(4023, 5, 1);
break;
case 19:
_object1.setup(4023, 1, 1);
break;
case 3110:
_object1.setZoom(75);
if (_object2->_strip == 1)
_object1.setup(4061 , 1, 1);
else
_object1.setup(4061 , 3, 1);
break;
default:
break;
}
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerQuinn3255::animateSpeaker() {
Scene3255 *scene = (Scene3255 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_quinn;
_object2->hide();
_object1.postInit();
_object1._effect = _object2->_effect;
_object1._shade = _object2->_shade;
_object1.setPosition(_object2->_position);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(3257, 3, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerQuinn3375::animateSpeaker() {
Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_object2 = &R2_GLOBALS._player;
else if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &scene->_companion1;
else
_object2 = &scene->_companion2;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (scene->_companion1._position.y != 163)
R2_GLOBALS._player.setStrip(8);
else
R2_GLOBALS._player.setStrip(2);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4010, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerQuinn3385::animateSpeaker() {
Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_object2 = &R2_GLOBALS._player;
else if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &scene->_companion1;
else
_object2 = &scene->_companion2;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (R2_GLOBALS._sceneManager._previousScene == 3375)
R2_GLOBALS._player.setStrip(4);
else
R2_GLOBALS._player.setStrip(3);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object1.setup(4010, 3, 1);
else
_object1.setup(4010, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerQuinn3395::animateSpeaker() {
Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_object2 = &R2_GLOBALS._player;
else if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &scene->_companion1;
else
_object2 = &scene->_companion2;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (R2_GLOBALS._sceneManager._previousScene == 3385)
R2_GLOBALS._player.setStrip(4);
else
R2_GLOBALS._player.setStrip(3);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object1.setup(4010, 3, 1);
else
_object1.setup(4010, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerQuinn3400::animateSpeaker() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_object2 = &R2_GLOBALS._player;
else if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &scene->_companion1;
else
_object2 = &scene->_companion2;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4010, 5, 1);
_object1.animate(ANIM_MODE_5, NULL);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4010, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 0;
_object1.setup(4012, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerQuinn3600::animateSpeaker() {
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_quinn;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4021, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4010, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 0;
_object1.setup(4012, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerQuinn3700::setText(const Common::String &msg) {
Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
switch (_speakerMode) {
case 2:
scene->_miranda.setup(30, 1, 1);
R2_GLOBALS._sound2.play(44);
break;
case 3:
scene->_miranda.setup(30, 1, 1);
break;
default:
scene->_miranda.setup(30, 7, 1);
break;
}
VisualSpeaker::setText(msg);
}
void SpeakerQuinn3700::animateSpeaker() {
Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_quinn;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
_object1.setPosition(_object2->_position);
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
R2_GLOBALS._sound2.stop();
scene->_quinn.setup(10, 4, 1);
scene->_miranda.setup(30, 7, 1);
_object1.setup(3701, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
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:
((StripManager *)_action)->_useless = 0;
scene->_quinn.setup(10, 2, 1);
scene->_miranda.setup(30, 1, 1);
_object1.setup(4011, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
//----------------------------------------------------------------------------
// Classes related to QUINNL
//----------------------------------------------------------------------------
SpeakerQuinnL::SpeakerQuinnL(): SpeakerQuinn() {
_speakerName = "QUINNL";
}
//----------------------------------------------------------------------------
// Classes related to RALF
//----------------------------------------------------------------------------
SpeakerRalf3245::SpeakerRalf3245() {
_speakerName = "Ralf";
_color1 = 5;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerRalf3245::animateSpeaker() {
int v = _speakerMode;
Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_ralf;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
switch (_object2->_visage) {
case 3100:
_object1.setup(4105, (_object2->_strip * 2) - 1, 1);
break;
case 3101:
_object1.setup(4108, (_object2->_strip * 2) - 1, 1);
break;
case 3102:
_object1.setup(4109, (_object2->_strip * 2) - 1, 1);
break;
default:
break;
}
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to ROCKO
//----------------------------------------------------------------------------
SpeakerRocko::SpeakerRocko() {
_speakerName = "Rocko";
_color1 = 5;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerRocko3200::animateSpeaker() {
int v = _speakerMode;
Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_rocko;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4060, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerRocko3220::animateSpeaker() {
int v = _speakerMode;
Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_rocko;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4060, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerRocko3230::animateSpeaker() {
int v = _speakerMode;
Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_rocko;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4111, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to SEEKER
//----------------------------------------------------------------------------
SpeakerSeeker::SpeakerSeeker(): VisualSpeaker() {
_speakerName = "SEEKER";
_color1 = 35;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerSeeker300::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
_object2 = &R2_GLOBALS._player;
} else {assert(R2_GLOBALS._sceneManager._sceneNumber == 300);
Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_seeker;
}
_object2->hide();
_object1.postInit();
_object1.fixPriority(140);
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else if (v == 100) {
_numFrames = 0;
((StripManager *)_action)->_useless = 0;
_object1.setStrip(_object1._strip - 1);
_object1.setFrame(_object1.getFrameCount());
_object1.animate(ANIM_MODE_6, this);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(306, v * 2 - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
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 {
((StripManager *)_action)->_useless = 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 == R2_SEEKER) {
_object2 = &R2_GLOBALS._player;
} else {
assert(R2_GLOBALS._sceneManager._sceneNumber == 1100);
Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_seeker;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(1108, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(1108, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
_object1.setPosition(Common::Point(197, 134));
((StripManager *)_action)->_useless = 0;
_object1.setup(1108, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 4:
((StripManager *)_action)->_useless = 0;
_object1.setup(1109, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 5:
((StripManager *)_action)->_useless = 0;
_object1.setup(1109, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerSeeker1900::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
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->_companion;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else if (v == 1) {
_object1.setup(4032, 1, 1);
_object1.animate(ANIM_MODE_5, this);
} else {
signal();
}
}
void SpeakerSeeker2435::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
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->_companion;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object2->setStrip(7);
_object1.setup(4099, 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerSeeker2450::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
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->_companion;
}
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4099, 3, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerSeeker3375::animateSpeaker() {
Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_companion1;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (scene->_companion1._position.y != 163)
R2_GLOBALS._player.setStrip(8);
else
R2_GLOBALS._player.setStrip(2);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4031, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerSeeker3385::animateSpeaker() {
Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_companion1;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (R2_GLOBALS._sceneManager._previousScene == 3375)
R2_GLOBALS._player.setStrip(4);
else
R2_GLOBALS._player.setStrip(3);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4031, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerSeeker3395::animateSpeaker() {
Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_companion1;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (R2_GLOBALS._sceneManager._previousScene == 3385)
R2_GLOBALS._player.setStrip(4);
else
R2_GLOBALS._player.setStrip(3);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4031, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerSeeker3400::animateSpeaker() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_companion1;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4031, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4031, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 0;
_object1.setup(4030, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 4:
((StripManager *)_action)->_useless = 0;
_object1.setup(4031, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 5:
((StripManager *)_action)->_useless = 0;
_object1.setup(4033, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerSeeker3600::animateSpeaker() {
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
if (R2_GLOBALS._player._characterIndex == R2_SEEKER)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_seeker;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
_object1.setPosition(_object2->_position);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4031, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4030, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerSeeker3700::setText(const Common::String &msg) {
Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
if (_speakerMode == 1) {
R2_GLOBALS._sound2.play(44);
scene->_miranda.setup(30, 8, 1);
} else {
scene->_miranda.setup(30, 2, 1);
}
VisualSpeaker::setText(msg);
}
void SpeakerSeeker3700::animateSpeaker() {
Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_seeker;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
_object1.setPosition(_object2->_position);
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
R2_GLOBALS._sound2.stop();
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, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
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, this);
break;
default:
signal();
break;
}
}
//----------------------------------------------------------------------------
// Classes related to SEEKERL
//----------------------------------------------------------------------------
SpeakerSeekerL::SpeakerSeekerL(): SpeakerSeeker() {
_speakerName = "SEEKERL";
}
//----------------------------------------------------------------------------
// Classes related to SOCKO
//----------------------------------------------------------------------------
SpeakerSocko3200::SpeakerSocko3200() {
_speakerName = "Socko";
_color1 = 10;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerSocko3200::animateSpeaker() {
int v = _speakerMode;
Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_socko;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4060, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to SOLDIER
//----------------------------------------------------------------------------
SpeakerSoldier::SpeakerSoldier(int color) {
_speakerName = "SOLDIER";
_color1 = color;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerSoldier300::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_teal;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(303, 3, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to TEAL
//----------------------------------------------------------------------------
SpeakerTeal::SpeakerTeal(): VisualSpeaker() {
_speakerName = "TEAL";
_color1 = 22;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
SpeakerTealMode7::SpeakerTealMode7(): SpeakerTeal() {
_displayMode = 7;
}
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:
((StripManager *)_action)->_useless = 0;
_object1.setup(75, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 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;
_object2 = &scene->_teal;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(303, 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerTeal1625::animateSpeaker() {
int v = _speakerMode;
if (!_object2) {
Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene;
_object2 = &scene->_tealHead;
_object2->hide();
_object1.postInit();
_object1.setPosition(Common::Point(68, 68));
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(1627, 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerTeal3240::animateSpeaker() {
int v = _speakerMode;
Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_teal;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4070, (_object2->_strip * 2) - 1, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerTeal3400::animateSpeaker() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_teal;
_object2->hide();
_object1.postInit();
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
_object1.setPosition(_object2->_position);
_object1.show();
if (scene ->_sceneMode == 3305) {
R2_GLOBALS._player.setStrip(6);
scene->_companion1.setStrip(6);
scene->_companion2.setStrip(6);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4107, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4107, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 0;
_object1.setup(4107, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 4:
((StripManager *)_action)->_useless = 0;
_object1.setup(4107, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerTeal3600::animateSpeaker() {
Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_teal;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
_object1.setPosition(_object2->_position);
if (scene ->_sceneMode == 3323) {
_object1.hide();
_object2->show();
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4107, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4107, 1, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 0;
_object1.setup(4107, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 4:
((StripManager *)_action)->_useless = 0;
_object1.setup(4107, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
//----------------------------------------------------------------------------
// Classes related to TOMKO
//----------------------------------------------------------------------------
SpeakerTomko3245::SpeakerTomko3245() {
_speakerName = "Tomko";
_color1 = 10;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerTomko3245::animateSpeaker() {
int v = _speakerMode;
Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene;
if (!_object2) {
_object2 = &scene->_tomko;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
switch (_object2->_visage) {
case 3100:
_object1.setup(4105, (_object2->_strip * 2) - 1, 1);
break;
case 3101:
_object1.setup(4108, (_object2->_strip * 2) - 1, 1);
break;
case 3102:
_object1.setup(4109, (_object2->_strip * 2) - 1, 1);
break;
default:
break;
}
_object1.animate(ANIM_MODE_5, this);
}
}
//----------------------------------------------------------------------------
// Classes related to WEBBSTER
//----------------------------------------------------------------------------
SpeakerWebbster::SpeakerWebbster(int color) {
_speakerName = "WEBBSTER";
_color1 = color;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
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:
((StripManager *)_action)->_useless = 0;
_object1.setup(75, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(76, 4, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 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->_webbster;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
if (_object2->_mover)
_object2->addMover(NULL);
}
if (v == 0) {
_object1.animate(ANIM_MODE_2, NULL);
} else {
((StripManager *)_action)->_useless = 0;
_object1.setup(4110, 5, 1);
_object1.animate(ANIM_MODE_5, this);
}
}
void SpeakerWebbster3375::animateSpeaker() {
Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_webbster;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (scene->_companion1._position.y != 163)
R2_GLOBALS._player.setStrip(8);
else
R2_GLOBALS._player.setStrip(2);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4110, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerWebbster3385::animateSpeaker() {
Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_webbster;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (R2_GLOBALS._sceneManager._previousScene == 3375)
R2_GLOBALS._player.setStrip(4);
else
R2_GLOBALS._player.setStrip(3);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4110, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerWebbster3395::animateSpeaker() {
Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_webbster;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
if (R2_GLOBALS._sceneManager._previousScene == 3385)
R2_GLOBALS._player.setStrip(4);
else
R2_GLOBALS._player.setStrip(3);
if (R2_GLOBALS._player._mover)
R2_GLOBALS._player.addMover(NULL);
R2_GLOBALS._player.disableControl(CURSOR_TALK);
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4110, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
void SpeakerWebbster3400::animateSpeaker() {
Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_webbster;
_object2->hide();
_object1.postInit();
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
_object1._effect = EFFECT_SHADED;
_object1.changeZoom(-1);
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (_object2->_mover)
_object2->addMover(NULL);
}
switch (v) {
case 0:
_object1.animate(ANIM_MODE_2, NULL);
break;
case 1:
((StripManager *)_action)->_useless = 0;
_object1.setup(4110, 5, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 2:
((StripManager *)_action)->_useless = 0;
_object1.setup(4110, 7, 1);
_object1.animate(ANIM_MODE_5, this);
break;
case 3:
((StripManager *)_action)->_useless = 0;
_object1.setup(4110, 3, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
//----------------------------------------------------------------------------
SpeakerDutyOfficer180::SpeakerDutyOfficer180(): VisualSpeaker() {
_speakerName = "DUTYOFFICER";
_color1 = 5;
_color2 = 0;
_speakerMode = 0;
_textWidth = 300;
_hideObjects = false;
_object2 = NULL;
_displayMode = 1;
_numFrames = 0;
}
void SpeakerDutyOfficer180::animateSpeaker() {
Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene;
int v = _speakerMode;
if (!_object2) {
_object2 = &scene->_dutyOfficer;
_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:
_action->_action = NULL;
_object1.setup(76, 2, 1);
_object1.animate(ANIM_MODE_5, this);
break;
default:
signal();
break;
}
}
} // End of namespace Ringworld2
} // End of namespace TsAGE